/* ==========================================================================
   VCM Office – Responsive / mobile layer

   Loaded last (after argon.css, site.css and dark-theme.css) so it can correct
   layout without forking the vendor theme. Everything here is either a
   breakpoint-scoped override or a small named component used by the shared
   partials.

   Sections 1-4 are the app shell: the `col-xs-*` grid shim, the top navbar,
   the blue page header banner and the off-canvas sidenav.
   Sections 5-6 are tables and cards; the table scroll containers are inserted
   by wrapWideTables() in site.js.
   Sections 7-8 are the two multi-pane screens, Mailbox and Chat: both collapse
   from side-by-side panes to one pane at a time below the md breakpoint.
   ========================================================================== */


/* --------------------------------------------------------------------------
   1. Bootstrap 3 `col-xs-*` compatibility shim

   The views use `col-xs-12` ~685 times as the "full width on phones"
   companion to `col-lg-6` / `col-md-4` / ... . Bootstrap 4 dropped the `xs`
   infix, so every one of those columns is currently an unclassed flex item
   below its `lg`/`md` breakpoint: no width, no gutter, no stacking. That is
   why the header row (breadcrumbs + action links) sits side by side and
   squeezed on a phone instead of stacking.

   `:where()` keeps these rules at zero specificity, so any real Bootstrap
   `.col-*` rule still wins at its own breakpoint - which reproduces exactly
   the Bootstrap 3 cascade the markup was written against. Do not "simplify"
   this by removing `:where()`; without it `col-xs-12` would beat `col-lg-6`
   at every width (site css loads after argon).
   -------------------------------------------------------------------------- */
:where(.col-xs-12),
:where(.col-xs-6),
:where(.col-xs-3) {
    position: relative;
    width: 100%;
    padding-right: 15px;
    padding-left: 15px;
}

:where(.col-xs-12) {
    flex: 0 0 100%;
    max-width: 100%;
}

:where(.col-xs-6) {
    flex: 0 0 50%;
    max-width: 50%;
}

:where(.col-xs-3) {
    flex: 0 0 25%;
    max-width: 25%;
}


/* --------------------------------------------------------------------------
   2. Top navbar

   `navbar-expand` (no infix) means the topnav never collapses into a burger,
   so on a phone every item competes for one row. Combined with
   `overflow-x: hidden` on <body> (site.css) anything that does not fit is
   silently clipped off the right edge - the user dropdown included.
   -------------------------------------------------------------------------- */

/* Let flex items shrink instead of overflowing their container. */
.navbar-top .navbar-collapse,
.navbar-top .navbar-nav,
.navbar-top .navbar-nav > li {
    min-width: 0;
}

/* Counter badges are absolutely positioned so they never widen the item they
   belong to (they used inline `float: right` + negative margins before). */
.navbar-top .navbar-nav > .nav-item,
.navbar-top .navbar-nav > li {
    position: relative;
}

.vcm-nav-badge {
    position: absolute;
    z-index: 2;
    top: .1rem;
    right: 0;
    padding: .2rem .4rem;
    font-size: .625rem;
    line-height: 1;
    pointer-events: none;
}

/* Signed-in user: avatar always, name only where there is room for it. */
.vcm-user-name {
    display: inline-block;
    max-width: 11rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    vertical-align: middle;
}

.vcm-user-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.875rem;
    height: 1.875rem;
    border-radius: 50%;
    background-color: rgba(255, 255, 255, .2);
    color: #fff;
    font-size: .8125rem;
}

/* --- Display controls (text size + dark mode) ---------------------------
   One DOM copy, two layouts: flattened into the navbar from `lg` up, and
   collapsed behind a single icon below that so the topnav still fits a 360px
   phone. It has to stay a single copy because site.js binds #font-decrease,
   #font-reset, #font-increase and #theme-toggle by id - a second set of
   controls would be dead markup.
   Deliberately not `.nav-link`: site.css forces `.navbar-dark a.nav-link span`
   to white, which would be invisible inside the light dropdown panel. */
.vcm-display-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    line-height: 1;
    white-space: nowrap;
    text-decoration: none;
}

    .vcm-display-btn:hover,
    .vcm-display-btn:focus {
        text-decoration: none;
    }

@media (min-width: 992px) {
    .vcm-display-toggle {
        display: none !important;
    }

    /* Flatten the dropdown panel into an inline group.
       opacity/pointer-events are not cosmetic here: argon fades navbar dropdowns
       in with `.navbar .dropdown-menu { opacity: 0; pointer-events: none }` and
       only restores them on `.show`. Without these two the flattened controls
       take up space, compute as visible, and are still invisible and dead to
       clicks - `.show` never gets added because the toggle is hidden at this
       breakpoint. */
    .vcm-display-menu {
        display: flex !important;
        opacity: 1 !important;
        pointer-events: auto !important;
        position: static !important;
        float: none;
        flex-direction: row;
        align-items: center;
        min-width: 0;
        margin: 0 !important;
        padding: 0 !important;
        border: 0 !important;
        background: transparent !important;
        box-shadow: none !important;
        transform: none !important;
    }

    .vcm-display-heading,
    .vcm-display-label {
        display: none !important;
    }

    .vcm-display-group {
        display: flex;
        align-items: center;
    }

    .vcm-display-btn {
        padding: .5rem .4rem;
        color: rgba(255, 255, 255, .85);
    }

        .vcm-display-btn:hover,
        .vcm-display-btn:focus {
            color: #fff;
        }
}

@media (max-width: 991.98px) {
    /* Both selectors deliberately: argon sets
       `@media (max-width: 575.98px) { .navbar-top .nav-item .dropdown-menu { min-width: auto } }`,
       which at 0,3,0 outranks a bare `.vcm-display-menu` and collapses the panel
       to its content width (~38px, with the labels spilling out of the box). */
    .vcm-display-menu,
    .navbar-top .nav-item .vcm-display-menu {
        min-width: 13rem;
        padding-bottom: .5rem;
    }

    .vcm-display-group {
        display: flex;
        padding: .25rem .75rem .25rem;
    }

        .vcm-display-group .vcm-display-btn {
            flex: 1 1 0;
            min-height: 2.75rem;
            border: 1px solid #e9ecef;
            color: #525f7f;
        }

            .vcm-display-group .vcm-display-btn:first-child {
                border-radius: .25rem 0 0 .25rem;
            }

            .vcm-display-group .vcm-display-btn + .vcm-display-btn {
                border-left: 0;
            }

            .vcm-display-group .vcm-display-btn:last-child {
                border-radius: 0 .25rem .25rem 0;
            }

    .vcm-display-theme {
        justify-content: flex-start;
        min-height: 2.75rem;
        padding: .5rem 1.5rem;
        color: #525f7f;
    }

        .vcm-display-theme .fas {
            margin-right: .5rem;
        }

    [data-theme="dark"] .vcm-display-group .vcm-display-btn,
    [data-theme="dark"] .vcm-display-theme {
        border-color: var(--dark-border);
        color: var(--dark-text);
    }
}

@media (max-width: 991.98px) {
    /* Comfortable tap targets (~44px) without stretching the bar. */
    .navbar-top .navbar-nav > .nav-item > .nav-link,
    .navbar-top .navbar-nav > li > .nav-link {
        min-width: 2.5rem;
        padding-top: .625rem;
        padding-bottom: .625rem;
        text-align: center;
    }

    .navbar-top .sidenav-toggler {
        display: flex;
        align-items: center;
        min-height: 2.75rem;
    }
}

@media (max-width: 767.98px) {
    /* Per-page search boxes (`@section SearchBox`) get their own full-width
       row instead of squeezing the icon strip. Argon's default is to hide
       them below `sm` and reveal them with a slide-in that needs a trigger
       button this app never renders. */
    .navbar-top .navbar-collapse {
        flex-wrap: wrap;
    }

    .navbar-top .navbar-search {
        display: block !important;
        order: 10;
        flex: 0 0 100%;
        width: 100%;
        max-width: 100%;
        margin: .5rem 0 0 0 !important;
        transform: none !important;
    }

        .navbar-top .navbar-search .form-group {
            width: 100%;
        }

        .navbar-top .navbar-search .close {
            display: none !important;
        }
}

@media (max-width: 575.98px) {
    /* Topnav panels (notifications, shortcuts, user menu, display).

       argon already tries to make these full-width here:
           .navbar-top .nav-item .dropdown-menu { right: auto; left: 3%; width: 94% }
       but that assumes the panel's containing block is the navbar. Bootstrap's
       `.dropdown` on the <li> makes the <li> the containing block instead, so
       "94%" is 94% of a ~40px icon - which is why the notification panel came
       out 38px wide, or hung 153px off the right edge once given a real width.

       Pin them to the viewport instead. `top` has to come from script: with
       `position: fixed`, `.dropdown-menu`'s `top: 100%` would resolve against
       the viewport height, and the navbar's own height varies (it grows to two
       rows on pages that render a SearchBox). site.js sets it on
       show.bs.dropdown, before the panel is shown; the `top: 0` here is only a
       floor so nothing can flash at the bottom of the screen first.

       Specificity matches argon's rule exactly and this sheet loads later. */
    .navbar-top .nav-item .dropdown-menu {
        position: fixed;
        top: 0;
        right: .75rem;
        left: .75rem;
        width: auto;
        min-width: 0;
        max-width: none;
    }

        /* The display panel is a small control cluster, not a list - a
           full-bleed version of it looks broken. Keep it compact, tucked under
           its own icon at the right edge. */
        .navbar-top .nav-item .vcm-display-menu {
            left: auto;
            width: auto;
            min-width: 13rem;
        }

    .navbar-top .navbar-nav > .nav-item > .nav-link,
    .navbar-top .navbar-nav > li > .nav-link {
        padding-right: .5rem;
        padding-left: .5rem;
    }
}


/* Page title / breadcrumb, rendered by _Layout as the first child of the
   navbar collapse so it shares a row with search, Clock In and the account
   menu instead of costing a second blue bar underneath.

   The ~394 views that fill the Breadcrumbs section still wrap it in the grid
   columns it needed in the old banner (`col-lg-6 col-xs-12`, `col-12`, ...).
   Rewriting all of them is not worth it, so the wrapper is neutralised here:
   auto width, no gutter, no 100% flex-basis. A plain selector is enough to
   beat the `col-xs-*` shim in section 1, which is deliberately zero
   specificity, but Bootstrap's own `.col-lg-6` is not - hence `!important`
   on the two properties that class sets at the lg breakpoint. */
.navbar-top .vcm-page-title {
    display: flex;
    min-width: 0;
    margin-right: 1rem;
    align-items: center;
}

    .navbar-top .vcm-page-title > [class*='col-'] {
        width: auto;
        max-width: none !important;
        padding: 0;
        flex: 0 0 auto !important;
    }

    /* Argon gives `.breadcrumb` a 1rem bottom margin and .75rem block padding,
       both sized for a standalone banner row. */
    .navbar-top .vcm-page-title .breadcrumb {
        margin: 0;
        padding: .375rem .75rem;
    }

    /* 43 views still render a live `<h6 class="h2 text-white">` alongside the
       crumbs; `.h2` is 1.5rem, half the height of the bar it now sits in. */
    .navbar-top .vcm-page-title h6 {
        overflow: hidden;
        max-width: 22rem;
        margin: 0;
        white-space: nowrap;
        text-overflow: ellipsis;
        font-size: .9375rem;
        line-height: 1.2;
    }

/* The crumb nav itself is `d-none d-md-inline-block`; hide the wrapper with it
   so it contributes no margin on a phone, where the icon strip and the account
   avatar need every pixel of the row (see the note at the top of section 2). */
@media (max-width: 767.98px) {
    .navbar-top .vcm-page-title {
        display: none;
    }
}


/* --------------------------------------------------------------------------
   3. Page header banner

   `.header.pb-6` reserves 4.5rem of blue for the dashboard stat cards to
   overlap into, and the content container pulls itself back up with `mt--6`.
   The two have to stay in step, so both are scaled down together on small
   screens where that much dead colour costs a third of the viewport.

   The banner now carries only the page's action buttons - the breadcrumb moved
   into the navbar (section 2). Pages with no buttons drop it entirely and swap
   `mt--6` for `pt-4`, which is scaled down here alongside the rest.
   -------------------------------------------------------------------------- */
@media (max-width: 767.98px) {
    .header.pb-6 {
        padding-bottom: 3rem !important;
    }

    .main-content > .container-fluid.mt--6 {
        margin-top: -3rem !important;
    }

    .main-content > .container-fluid.pt-4 {
        padding-top: 1rem !important;
    }

    .header-body > .row.py-3 {
        padding-top: .5rem !important;
        padding-bottom: .5rem !important;
    }
}

@media (max-width: 575.98px) {
    /* Header buttons wrap rather than run off the edge. */
    .header-body .btn {
        margin-bottom: .5rem;
    }
}

/* Views/Tickets/Simple.cshtml keeps the grid's global filter in the action row
   instead of the navbar; it needs a width of its own, since an .input-group is
   `display: flex` and would otherwise eat the whole row. */
.header-body .vcm-toolbar-search {
    width: 22rem;
    max-width: 100%;
}

@media (max-width: 767.98px) {
    /* Full width once the buttons wrap underneath it. */
    .header-body .vcm-toolbar-search {
        width: 100%;
        margin: 0 0 .5rem 0 !important;
    }
}

@media (max-width: 575.98px) {
    /* _IdentityLayout (login, password reset, ...) has no header banner, so its
       `mt-6` is 4.5rem of empty space above the card on a phone. */
    .main-content > .container.mt-6 {
        margin-top: 2rem !important;
    }
}

/* The timezone-mismatch warning is injected into a bare <ul> that sits outside
   any container, so it had no horizontal padding to keep it off the edge. */
#currentTimeZoneNoMatch {
    padding: 0 1.5rem;
}

    #currentTimeZoneNoMatch .btn {
        white-space: normal;
        text-align: left;
    }


/* --------------------------------------------------------------------------
   4. Off-canvas sidenav

   Below `xl` argon slides the sidenav out of view and argon.js appends
   `<div class="backdrop d-xl-none" data-action="sidenav-unpin">` when it is
   opened. The theme ships no styles for `.backdrop`, so that element was a
   zero-size div: tapping outside the menu could not close it.
   -------------------------------------------------------------------------- */
.backdrop {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1040; /* .sidenav is 1050 */
    background-color: rgba(0, 0, 0, .4);
}

@media (max-width: 1199.98px) {
    /* Never wider than the screen on a small phone. Two class selectors so this
       outranks `.navbar-vertical.navbar-expand-xs { max-width: 250px }`. */
    .sidenav.navbar-vertical {
        max-width: min(250px, 85vw);
    }
}

/* Close button in the sidenav header. The theme styles no `.navbar-toggler`
   for the vertical nav, so the two spans are drawn as an X here. Dark mode
   already recolours `#sidenav-main .navbar-toggler span` (argon.css tail). */
.vcm-sidenav-close {
    position: absolute;
    top: .5rem;
    right: .5rem;
    width: 2.75rem;
    height: 2.75rem;
    padding: 0;
    border: 0;
    background: transparent;
}

    .vcm-sidenav-close span {
        position: absolute;
        top: 50%;
        left: 50%;
        display: block;
        width: 1.125rem;
        height: 2px;
        border-radius: 1px;
        background-color: #8898aa;
    }

        .vcm-sidenav-close span:first-child {
            transform: translate(-50%, -50%) rotate(45deg);
        }

        .vcm-sidenav-close span:last-child {
            transform: translate(-50%, -50%) rotate(-45deg);
        }

.sidenav-header {
    position: relative;
}

@media (min-width: 1200px) {
    /* Pinned/hover sidenav on desktop - nothing to close. */
    .vcm-sidenav-close {
        display: none;
    }
}


/* --------------------------------------------------------------------------
   5. Tables

   site.js wraps every `table.table` in a `.table-responsive-lg` container (see
   wrapWideTables), which scrolls horizontally below 992px and is inert above
   it. The rules here make that scroll actually engage, keep the DataTables
   chrome usable on a phone, and stop the row action menus being clipped.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {
    /* Headers do not wrap, so each column keeps a floor equal to its heading
       and a 10-column grid overflows into the scroll container instead of
       crushing every cell to two characters. Body cells still wrap, so a table
       that genuinely fits stays unscrolled - no artificial min-width. */
    .table-responsive-lg > .table > thead > tr > th,
    .table-responsive > .table > thead > tr > th,
    .table-responsive-lg > .table > tbody > tr > th,
    .table-responsive > .table > tbody > tr > th {
        white-space: nowrap;
    }

    /* 1rem all round is a lot of padding to spend on a 360px screen. */
    .table th,
    .table td {
        padding: .5rem .625rem;
    }

    /* Give the scroll container a hint that there is more to the right. */
    .table-responsive-lg,
    .table-responsive {
        scrollbar-width: thin;
    }

    /* --- DataTables chrome --- */
    /* The control row is `col-sm-*` halves, so it already stacks; these keep
       the pieces from overflowing once stacked. */
    .dataTables_wrapper .dataTables_filter,
    .dataTables_wrapper .dataTables_length {
        float: none;
        width: 100%;
        text-align: left;
    }

        .dataTables_wrapper .dataTables_filter input,
        .dataTables_wrapper .dataTables_length select {
            width: 100%;
            max-width: 100%;
            margin-left: 0;
        }

        .dataTables_wrapper .dataTables_filter label,
        .dataTables_wrapper .dataTables_length label {
            display: block;
            width: 100%;
        }

    /* Copy / CSV / Excel / PDF / Print run off the edge in a single row. */
    .dataTables_wrapper .dt-buttons {
        display: flex;
        flex-wrap: wrap;
        float: none;
        gap: .25rem;
        margin-bottom: .5rem;
    }

        .dataTables_wrapper .dt-buttons .btn {
            margin: 0;
        }

    /* Long page ranges: scroll the pager rather than the page. */
    .dataTables_wrapper .dataTables_paginate {
        float: none;
        overflow-x: auto;
        max-width: 100%;
        padding-top: .5rem;
        text-align: left;
    }

        .dataTables_wrapper .dataTables_paginate .pagination {
            flex-wrap: nowrap;
            margin: 0;
        }

    .dataTables_wrapper .dataTables_info {
        float: none;
        padding-top: .5rem;
        font-size: .8125rem;
    }

    /* The Responsive plugin's expanded child row: its label/value list is a
       fixed-width <dl> in the plugin css and overflows on a narrow phone. */
    .table > tbody > tr > td.child .dtr-details {
        display: block;
        width: 100%;
    }

        .table > tbody > tr > td.child .dtr-details > li {
            display: flex;
            flex-wrap: wrap;
            gap: .25rem .5rem;
            padding: .35rem 0;
        }

            .table > tbody > tr > td.child .dtr-details > li:last-child {
                border-bottom: 0;
            }

            .table > tbody > tr > td.child .dtr-details > li > .dtr-title {
                min-width: 8rem;
                font-weight: 600;
            }

    /* The plugin hard-codes #efefef, which is invisible on a dark surface. */
    [data-theme="dark"] .table > tbody > tr > td.child .dtr-details > li {
        border-bottom-color: var(--dark-border);
    }
}

/* Row action menus are moved to <body> while open (see site.js) so the scroll
   container cannot clip them. Popper positions them there, but they need to
   outrank the sidenav (1050) and the header banner. */
body > .dropdown-menu {
    z-index: 1060;
}


/* --------------------------------------------------------------------------
   6. Cards

   Every full-page view is wrapped row > col > card > card-body, so the card's
   1.5rem gutters are paid on both sides of every screen. On a 360px phone that
   is 3rem of the 360 spent before any content, on top of the row/col gutters.
   -------------------------------------------------------------------------- */
@media (max-width: 575.98px) {
    .card-body {
        padding: 1rem;
    }

    .card-header {
        padding: 1rem;
    }

        /* Card headers commonly carry a title plus a cluster of action buttons
           laid out with float-right; floats do not wrap, so the buttons ride
           off the edge. */
        .card-header .float-right,
        .card-header .float-sm-right {
            float: none !important;
            display: block;
            margin-top: .75rem;
        }

    .card-header .btn,
    .card-footer .btn {
        margin-bottom: .25rem;
    }
}


/* --------------------------------------------------------------------------
   7. Mailbox

   The mail client is the one screen in the app built as three panes rather
   than a single column, so it needs its own layout rather than a correction
   to a vendor one. Kept here with the rest of the responsive layer so the
   desktop grid and the way it collapses stay next to each other.
   -------------------------------------------------------------------------- */
.mailbox-layout {
    display: grid;
    grid-template-columns: 220px minmax(280px, 1fr) minmax(0, 2fr);
    gap: 1rem;
    align-items: start;
}

/* Each pane scrolls on its own, so the page itself never does and the folder
   list stays put while a long message is read. */
.mailbox-pane {
    max-height: calc(100vh - 260px);
    overflow-y: auto;
}

/* The selected row uses .active, which argon paints solid primary - unreadable
   against the muted preview text underneath it. */
.mailbox-pane-list .list-group-item.active {
    background-color: #f6f9fc;
    border-color: #e9ecef;
    color: inherit;
}

.mailbox-body-frame {
    width: 100%;
    min-height: 420px;
    border: 1px solid #e9ecef;
    border-radius: .25rem;
    background: #fff;
}

@media (prefers-color-scheme: dark) {
    .mailbox-pane-list .list-group-item.active {
        background-color: rgba(255, 255, 255, .06);
        border-color: rgba(255, 255, 255, .12);
    }
}

/* Tablets: the folder names are short, so buy the reading pane some width
   back from the folder column rather than dropping a pane. */
@media (max-width: 1199.98px) {
    .mailbox-layout {
        grid-template-columns: 180px minmax(240px, 1fr) minmax(0, 1.6fr);
    }
}

/* Phones: three columns cannot survive 360px, so the panes stack. Their own
   scrollbars go with them - nested scroll areas inside a scrolling page are
   how you end up unable to reach the bottom of a message. The list is capped
   so the reading pane below it is still reachable without a long scroll. */
@media (max-width: 991.98px) {
    .mailbox-layout {
        grid-template-columns: 1fr;
    }

    .mailbox-pane {
        max-height: none;
        overflow-y: visible;
    }

    .mailbox-pane-list {
        max-height: 60vh;
        overflow-y: auto;
    }

    .mailbox-body-frame {
        min-height: 320px;
    }

    /* The reading pane's action buttons are a btn-group plus a Move dropdown;
       side by side they overflow well before 360px. */
    .mailbox-reading .btn-toolbar {
        flex-direction: column;
        align-items: stretch;
    }

    .mailbox-reading .btn-toolbar .btn-group {
        margin-right: 0 !important;
        margin-bottom: .5rem;
    }
}

/* ==========================================================================
   8. Chat

   The desktop grid and the bubble styling live in chat.css; this section is
   only the narrow-viewport behaviour. Same approach as section 7: below the
   md breakpoint the two panes stop sitting side by side and become one pane
   at a time, with the header back button revealed to return to the list.
   ========================================================================== */

@media (max-width: 991.98px) {

    .chat-layout {
        grid-template-columns: 1fr;
    }

    /* One pane at a time. Without this the conversation list eats the top of
       the viewport and the thread starts below the fold. */
    .chat-layout.chat-thread-open .chat-pane-list {
        display: none;
    }

    .chat-layout:not(.chat-thread-open) .chat-pane-thread {
        display: none;
    }

    .chat-layout.chat-thread-open .chat-back {
        display: inline-block;
    }

    .chat-pane-list {
        max-height: none;
    }

    /* Taller than the desktop rule because there is no sidebar competing for
       the viewport, and dvh so the composer clears the browser chrome and the
       on-screen keyboard. */
    .chat-pane-thread {
        height: calc(100dvh - 200px);
    }

    /* 60% of a 360px screen is unreadably narrow for a chat bubble. */
    .chat-message {
        max-width: 90%;
    }
}

/* ------------------------------------------------------------------------
   8b. Calls on a phone

   One column - two 220px tiles side by side on a 360px screen leaves nothing
   of either face - and the controls pinned to the bottom safe area so the
   hang-up button is not under the home indicator.
   ------------------------------------------------------------------------ */
@media (max-width: 767.98px) {
    .chat-call-stage {
        padding: .5rem;
        padding-bottom: calc(.5rem + env(safe-area-inset-bottom));
    }

    .chat-call-grid {
        grid-template-columns: 1fr;
    }

    /* A shared screen already spans the single column, and the desktop rule's
       double row height would push everyone else off the screen. */
    .chat-call-tile.is-screen {
        grid-row: span 1;
    }

    .chat-call-controls .btn {
        width: 3.25rem;
        height: 3.25rem;
    }
}
