/* ==========================================================================
   MOBILE APP SHELL
   --------------------------------------------------------------------------
   The bottom tab bar, the Menu sheet, the Log in floating action, and the
   outline treatment for the two floating contact buttons.

   WHY A SEPARATE FILE, AND NOT theme.css OR mobile.css

     - theme.css is restored wholesale by tools\apply-logo-colours.ps1, so
       anything appended there disappears on the next palette rollback.
     - mobile.css is already 1,500 lines of measured fixes to EXISTING controls.
       This is a new piece of chrome with its own markup in MasterPage.master,
       and keeping it together with that markup is worth one more request.

   It loads last, after account.css, so it can override the inline dock rules in
   MasterPage.master where it needs to - and where those rules use !important, so
   does this file, with the reason stated at each one.

   EVERYTHING HERE IS MOBILE-ONLY. The bar and the sheet are display:none from
   992px up, which is the breakpoint the header nav already uses to switch between
   the burger and the full menu - matching it means there is never a width where
   the site shows both a desktop nav and a phone tab bar.
   ========================================================================== */


/* ==========================================================================
   1. THE BOTTOM TAB BAR
   --------------------------------------------------------------------------
   Home / Trips / Cabs / Menu.

   "Trips" IS RENDERED AS EITHER A LINK OR A BUTTON, decided on the server:
   signed out it is a button that opens the sign-in dialog, signed in it is a
   link to MyTrips.aspx. That decision is not made in script because a script
   check is one a visitor can skip, and because the correct answer is already
   known at render time - there is no reason to make the browser ask.

   env(safe-area-inset-bottom) is the home-indicator strip on a modern iPhone.
   Without it the bar's labels sit under the indicator and the bottom row of tap
   target is unreachable.
   ========================================================================== */

/* THE BAR IS A <nav>, AND master.css STYLES BARE <nav> ELEMENTS.

   MEASURED before this was fixed: the bar rendered 818px tall, starting 82px from
   the top of the viewport, with 25px of padding on three sides - and the four tabs
   sat in a 340px row near the top of the screen instead of a 390px row at the
   bottom.

   The cause is legacy: master.css:161 has

       @media (max-width: 992px) { nav { position: absolute; top: 82px;
                                         padding: 25px; ... } }

   which is the OLD collapsed mobile menu, written before this site had classes on
   its nav. A bare element selector is (0,0,1) so ".rc-tabbar" at (0,1,0) beats it
   for anything both declare - which is why "position: fixed" and "display: block"
   did land. But I had never declared "top" or "padding", so for those two
   properties the legacy rule was unopposed and won by default.

   Every property that rule touches is therefore restated here, including the ones
   whose value is simply "the initial one". That is the cost of a bare element
   selector in a stylesheet that is still loaded: you cannot override what you have
   not thought to name. */
.rc-tabbar {
    display: none;                      /* shown in the media query below */
    position: fixed;
    top: auto;                          /* vs master.css's top: 82px */
    left: 0;
    right: 0;
    bottom: 0;
    width: auto;
    height: auto;
    z-index: 1200;                      /* over content, under the modal (2000+) */

    /* Shorthand, not padding-bottom alone: master.css sets "padding: 25px" and a
       longhand cannot undo the other three sides of a shorthand. */
    padding: 0 0 env(safe-area-inset-bottom, 0px);
    margin: 0;

    /* master.css also makes every nav a flex row with "margin-left: auto". Neither
       is wanted - the row lives on .rc-tabbar-inner. */
    flex-direction: unset;
    align-items: unset;

    background: #ffffff;
    border-top: 1px solid #e6eaf0;
    box-shadow: 0 -6px 20px rgba(4, 60, 92, .10);
}

.rc-tabbar-inner {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    align-items: stretch;
}

/* Both an <a> and a <button> render as tabs, so every visual property is set on
   the shared class rather than on an element selector - a button carries its own
   default background, border, font and colour, and an anchor does not. */
/* SCOPED THROUGH .rc-tabbar, which is not decoration.

   MEASURED: as a bare ".rc-tab" the bar came out 49px tall, not the 56 declared
   here. gogo.css has a blanket "@media (max-width: 900px) { .gogo a, .gogo button
   { min-height: 44px } }" at (0,2,0), which beats (0,1,0) - so 44px was the winning
   min-height and the bar was sized by its content instead. Adding the parent takes
   this to (0,2,0) and, being loaded later, it wins the tie. */
.rc-tabbar .rc-tab {
    appearance: none;
    -webkit-appearance: none;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 3px;

    min-height: 56px;
    padding: 7px 2px 8px;
    border: 0;
    background: transparent;

    font-family: 'Poppins', 'Segoe UI', sans-serif;
    font-size: 10.5px;
    font-weight: 500;
    line-height: 1.1;
    letter-spacing: .01em;
    text-align: center;
    text-decoration: none;
    color: #6b7484;

    cursor: pointer;
    -webkit-tap-highlight-color: rgba(252, 200, 8, .22);
    transition: color .16s ease;
}

.rc-tabbar .rc-tab i {
    font-size: 18px;
    line-height: 1;
    color: inherit;
}

.rc-tabbar .rc-tab span { color: inherit; }

/* The current tab. Navy is the selected colour everywhere else on the site, so
   it is the selected colour here too; the yellow bar above it is the same
   accent the header uses for an active link. */
.rc-tabbar .rc-tab.is-on {
    color: #043c5c;
    font-weight: 600;
    position: relative;
}

.rc-tabbar .rc-tab.is-on::before {
    content: "";
    position: absolute;
    top: 0;
    left: 22%;
    right: 22%;
    height: 3px;
    border-radius: 0 0 3px 3px;
    background: #fcc808;
}

.rc-tabbar .rc-tab:active {
    transform: scale(.96);
    transition: transform .06s ease-out;
}

/* A count badge on Trips once the customer has bookings. Rendered only when the
   number is above zero, so an empty badge can never appear. */
.rc-tabbar .rc-tab .rc-tab-badge {
    position: absolute;
    top: 6px;
    left: 50%;
    margin-left: 6px;

    min-width: 16px;
    height: 16px;
    padding: 0 4px;
    border-radius: 999px;

    background: #f97316;
    color: #043c5c;
    font-size: 9.5px;
    font-weight: 700;
    line-height: 16px;
    text-align: center;
}

.rc-tabbar .rc-tab { position: relative; }


/* ==========================================================================
   2. THE MENU SHEET
   --------------------------------------------------------------------------
   A bottom sheet rather than a side drawer, because it is opened from a control
   at the bottom of the screen and a panel that slides away from the thumb that
   summoned it feels disconnected.

   Hidden with visibility + opacity rather than display, so it can transition.
   visibility is included deliberately: opacity alone leaves the panel clickable
   while invisible, which would put an invisible sheet over the footer links.
   ========================================================================== */

.rc-sheet {
    position: fixed;
    inset: 0;
    z-index: 1400;

    visibility: hidden;
    opacity: 0;
    transition: opacity .22s ease, visibility .22s ease;
}

.rc-sheet.is-open {
    visibility: visible;
    opacity: 1;
}

.rc-sheet-back {
    appearance: none;
    -webkit-appearance: none;
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    padding: 0;
    background: rgba(4, 60, 92, .52);
    cursor: pointer;
}

.rc-sheet-panel {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;

    max-height: 82vh;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;

    padding: 8px 16px calc(18px + env(safe-area-inset-bottom, 0px));
    border-radius: 20px 20px 0 0;
    background: #ffffff;
    box-shadow: 0 -14px 40px rgba(4, 60, 92, .28);

    transform: translateY(14px);
    transition: transform .24s cubic-bezier(.22, 1, .36, 1);
}

.rc-sheet.is-open .rc-sheet-panel { transform: translateY(0); }

@media (prefers-reduced-motion: reduce) {
    .rc-sheet,
    .rc-sheet-panel { transition: none; }
}

/* The grab handle. Purely a signal that the panel came from the bottom edge. */
.rc-sheet-grip {
    width: 40px;
    height: 4px;
    margin: 4px auto 12px;
    border-radius: 999px;
    background: #d8dee8;
}

.rc-sheet-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 12px;
}

.rc-sheet-head h4 {
    margin: 0;
    font-family: 'Barlow', 'Segoe UI', sans-serif;
    font-size: 17px;
    font-weight: 700;
    color: #043c5c;
}

.rc-sheet-x {
    appearance: none;
    -webkit-appearance: none;
    flex: none;
    display: grid;
    place-items: center;
    width: 36px;
    height: 36px;
    border: 1px solid #e6eaf0;
    border-radius: 50%;
    background: #ffffff;
    color: #4b5563;
    font-size: 14px;
    cursor: pointer;
}

.rc-sheet-x:active { transform: scale(.94); }

/* ---- the signed-in / signed-out block at the top of the sheet ---- */

.rc-sheet-account {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 14px;
    padding: 13px 14px;
    border: 1px solid #e6eaf0;
    border-radius: 14px;
    background: linear-gradient(135deg, #f7f9fc 0%, #ffffff 70%);
}

.rc-sheet-avatar {
    flex: none;
    display: grid;
    place-items: center;
    width: 42px;
    height: 42px;
    border-radius: 50%;
    background: #043c5c;
    color: #fcc808;
    font-size: 17px;
}

.rc-sheet-who {
    min-width: 0;
    flex: 1 1 auto;
}

.rc-sheet-who strong {
    display: block;
    font-size: 14.5px;
    font-weight: 600;
    color: #043c5c;
    line-height: 1.25;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.rc-sheet-who span {
    display: block;
    font-size: 12px;
    color: #6b7484;
    line-height: 1.3;
}

/* One button, used for both "Log in" and "Sign out". */
body.gogo .rc-sheet-btn {
    appearance: none;
    -webkit-appearance: none;
    flex: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;

    min-height: 40px;
    padding: 9px 15px;
    border: 0;
    border-radius: 10px;

    background: #fcc808;
    color: #043c5c;                 /* navy on yellow: 8.9:1. White would be 1.9:1 */
    font-family: 'Poppins', 'Segoe UI', sans-serif;
    font-size: 13.5px;
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
}

body.gogo .rc-sheet-btn:active { transform: scale(.97); }

body.gogo .rc-sheet-btn.ghost {
    background: #ffffff;
    border: 1px solid #dde4ee;
    color: #4b5563;
    font-weight: 500;
}

/* ---- the link list ---- */

.rc-sheet-signout {
    display: flex;
    justify-content: flex-end;
    margin: -6px 0 2px;
}

.rc-sheet-sect {
    margin: 16px 0 8px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .10em;
    text-transform: uppercase;
    color: #97a0ae;
}

.rc-sheet-links {
    display: block;
    margin: 0;
    padding: 0;
    list-style: none;
    border: 1px solid #eef1f5;
    border-radius: 14px;
    overflow: hidden;
}

.rc-sheet-links li + li { border-top: 1px solid #eef1f5; }

.rc-sheet-links a {
    display: flex;
    align-items: center;
    gap: 12px;
    min-height: 50px;
    padding: 12px 14px;
    background: #ffffff;
    color: #2f3946;
    font-size: 14.5px;
    font-weight: 500;
    text-decoration: none;
    -webkit-tap-highlight-color: rgba(252, 200, 8, .22);
}

.rc-sheet-links a:active { background: #fffdf5; }

.rc-sheet-links a > i:first-child {
    flex: none;
    width: 20px;
    text-align: center;
    font-size: 14.5px;
    color: #6b7484;
}

.rc-sheet-links a .rc-sheet-chev {
    margin-left: auto;
    font-size: 11px;
    color: #b6bec9;
}

/* The support row is the one thing in the sheet a customer might need in a
   hurry, so it gets its own colour rather than being one grey row of eight. */
.rc-sheet-links a.rc-sheet-call {
    background: #043c5c;
    color: #ffffff;
}

.rc-sheet-links a.rc-sheet-call > i:first-child,
.rc-sheet-links a.rc-sheet-call .rc-sheet-chev { color: #fcc808; }

.rc-sheet-foot {
    margin: 14px 2px 2px;
    font-size: 11.5px;
    line-height: 1.5;
    color: #97a0ae;
}


/* ==========================================================================
   3. SHOWING THE SHELL, AND MAKING ROOM FOR IT
   --------------------------------------------------------------------------
   A fixed bar over the bottom of the page hides whatever is behind it - which is
   the footer's last row of links, and on the checkout the Pay button. Padding on
   the footer rather than on <body> because body carries the page background and
   padding there leaves a strip of it under the footer.
   ========================================================================== */

@media (max-width: 991px) {

    .rc-tabbar { display: block; }

    /* 56px bar + its border + the home indicator. */
    body.gogo .gogo-footer {
        padding-bottom: calc(74px + env(safe-area-inset-bottom, 0px));
    }

    /* The floating docks have to clear the bar too. Their positioning lives in an
       inline <style> in MasterPage.master using !important - a deliberate choice
       made when they were landing mid-page - so overriding it needs !important
       as well. Nothing else in the cascade can reach those rules. */
    #rcWhatsappDock,
    #rcCallDock {
        bottom: calc(88px + env(safe-area-inset-bottom, 0px)) !important;
    }

    /* Sheet and bar are phone chrome; they must not print. */
    @media print {
        .rc-tabbar, .rc-sheet { display: none !important; }
    }
}

/* From the desktop breakpoint up, none of it exists. The bar's account button is
   covered by Bootstrap's d-lg-none on its wrapper, but stated here too so the rule
   does not depend on Bootstrap being loaded. */
@media (min-width: 992px) {
    .rc-tabbar,
    .rc-sheet,
    .rc-bar-account { display: none !important; }
}

/* While the sheet is open the page behind it must not scroll. Same lock class
   the sign-in dialog uses, so the two cannot fight over the body. */
body.rc-modal-lock { overflow: hidden; }


/* ==========================================================================
   4. THE MOBILE HEADER BAR: ONE LABELLED ACCOUNT BUTTON
   --------------------------------------------------------------------------
   The bar is now the logo, the account button and the burger. Nothing else.

   HOW IT GOT HERE, and what each step cost:

     - the Log in control started as a third FLOATING button beside Call and
       WhatsApp. Three permanent floats crowded the bottom of the screen, and an
       account control between two contact controls was the odd one out;
     - it moved into this bar as a 44px navy disc beside a 44px Call disc;
     - the two discs then read as a matched pair of the same button, so Log in went
       orange with a continuous pulse and Call went logo yellow;
     - and now Call is gone from the bar entirely, on request, leaving one control
       with a real label instead of two glyphs the visitor has to interpret.

   CALLING DID NOT GO ANYWHERE. The floating orange Call button is on screen
   permanently, "Call +91 8983783279" is the first row of Customer support in the
   Menu sheet, and the number is in the footer. Three routes to a phone call is
   enough; a fourth in the header was costing the width this label now uses.

   WHY BOTH WORDS, "Login / Signup". There is no separate registration step - the
   first time an address receives a code, CustomerAuth creates the account. A button
   reading only "Log in" turns away everybody who has not used the site before,
   which is nearly all of the traffic.

   MEASURED WIDTH BUDGET at 390px, which is what makes the label affordable:

       gutter 14 + logo 127 + gap 12 + [button] + gap 12 + burger 40 + gutter 14
       => 171px available, and the labelled button needs about 140px.

   Below 360px the label is dropped and the button returns to a disc - see the end
   of this section. That is a real constraint, not a precaution: at 320px the budget
   falls to 101px.

   THE GLYPH IS SMALLER, on request: 18px on the old disc, 14px here. The control
   itself is far easier to hit than it was - about 140x40 against 44x44, roughly
   three times the area - even though the icon inside it shrank.
   ========================================================================== */

/* The wrapper carries the bar's ONE auto margin. The UpdatePanel renders a plain
   <div> inside it that cannot be given a class, so it is targeted as a child and
   made transparent to layout. */
.rc-bar-account {
    display: flex;
    align-items: center;
    min-width: 0;
}

.rc-bar-account > div {
    display: flex;
    align-items: center;
    min-width: 0;
}

body.gogo .rc-bar-btn {
    appearance: none;
    -webkit-appearance: none;
    flex: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;

    /* A pill, not a disc. Shorter again now the label is one short word: 36px tall
       and tighter padding, so the whole control reads as a compact chip beside the
       logo rather than a second button competing with it. */
    height: 36px;
    min-height: 36px;
    padding: 0 12px 0 10px;
    border: 0;
    border-radius: 999px;

    font-family: 'Poppins', 'Segoe UI', sans-serif;
    font-size: 12.5px;
    font-weight: 600;
    letter-spacing: .01em;

    /* line-height: 1 USED TO BE HERE, and it was the bug.

       It is inherited by .rc-bar-txt, which needs overflow:hidden for its ellipsis.
       A line box exactly as tall as the font size has no room for descenders, so
       the tails of g, p and y in "Sign up" rendered outside the box and were clipped
       flat along the bottom. Exactly the "text getting cut from below" reported.

       Set on the icon and the label separately instead - the icon genuinely wants 1,
       because it has no descenders and it is what keeps the pill from growing. */
    white-space: nowrap;
    text-decoration: none;

    cursor: pointer;
    -webkit-tap-highlight-color: rgba(252, 200, 8, .22);
}

body.gogo .rc-bar-btn i {
    flex: none;
    /* 13px, down from 14, and 18 before that. */
    font-size: 13px;
    line-height: 1;
    color: inherit;
}

/* A signed-in visitor's name is whatever they typed, so it is truncated here rather
   than allowed to push the burger off the end of the bar.

   line-height 1.45 is what stops the clipping: at 12.5px that is an 18px line box
   against a 12.5px one, which is more than enough for the deepest descender in the
   face. Verified by scrollHeight against clientHeight on this span - equal means
   nothing is being cut off. */
body.gogo .rc-bar-btn .rc-bar-txt {
    min-width: 0;
    max-width: 108px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    line-height: 1.45;
    color: inherit;
}


/* -------------------- SIGNED OUT: Login / Signup ----------------------------
   Orange #f97316 with a navy glyph and navy label, and a continuous pulse.

   Orange because that is already the colour of the "Log in" button in the desktop
   header, chosen deliberately and carrying the same pulse - so one action looks and
   behaves the same at every width.

   NAVY TEXT, NOT WHITE, and that is measured rather than taste:

       white #ffffff on orange #f97316 -> 2.81:1   fails at any size
       navy  #043c5c on orange #f97316 -> 6.24:1   passes AA
   -------------------------------------------------------------------------- */

/* WHITE TEXT AND ICON ON AN ORANGE PILL, on request.

   THE ORANGE HAD TO GO ONE STEP DEEPER TO MAKE THAT LEGIBLE, and here is the
   arithmetic rather than an opinion:

       white #ffffff on #f97316 (the old orange) -> 2.81:1   fails at any size
       white #ffffff on #c2410c (this one)       -> 4.96:1   passes AA
       navy  #043c5c on #f97316                  -> 6.24:1   what it was before

   2.81:1 is not a close call - it is roughly half the minimum, and on a 12px label
   it is the kind of thing that reads fine on a desk monitor and disappears in
   daylight on a phone. #c2410c is unmistakably the same orange family, just darker,
   so white sits on it properly.

   If you would rather keep the brighter #f97316, the label has to go back to navy.
   Bright orange plus white is the one combination that cannot be made to work. */
body.gogo .rc-bar-login {
    background: #c2410c;
    color: #ffffff;

    /* THE CONTINUOUS "HOVER": the control reads as live rather than as something
       waiting to be found.

       box-shadow AND transform ONLY. Animating width, margin or padding would
       relayout the header every frame and drag the logo and the burger with it -
       this is a flex row, so every item would shift. A shadow and a transform are
       composited, so nothing else on the page moves. Verified: across a full cycle
       the logo and the burger each held one x position while the button scaled
       between 1 and 1.059.

       Its own keyframes rather than borrowing account.css's rcLoginBreathe, so this
       file does not depend on another stylesheet being loaded. */
    animation: rcBarLoginPulse 2.4s ease-in-out infinite;
}

@keyframes rcBarLoginPulse {
    0%, 100% {
        box-shadow: 0 0 0 0 rgba(194, 65, 12, .55),
                    0 2px 6px rgba(4, 60, 92, .18);
        transform: scale(1);
    }
    50% {
        box-shadow: 0 0 0 8px rgba(194, 65, 12, 0),
                    0 6px 16px rgba(4, 60, 92, .26);
        transform: scale(1.045);
    }
}

/* A REAL hover state still has to exist on top of the animation, or the button
   looks alive and then ignores the pointer, which reads as broken. The animation is
   paused so the two are not both writing transform. */
body.gogo .rc-bar-login:hover,
body.gogo .rc-bar-login:focus-visible {
    background: #9a3412;
    color: #ffffff;
    animation-play-state: paused;
    transform: scale(1.05);
    box-shadow: 0 8px 20px rgba(4, 60, 92, .30);
}

body.gogo .rc-bar-login:focus-visible {
    /* On orange, a colour change alone is not a focus indicator. */
    outline: 2px solid #043c5c;
    outline-offset: 2px;
}

body.gogo .rc-bar-login:active {
    transform: scale(.96);
    animation-play-state: paused;
}

/* A permanently moving element is a genuine problem for some people - vestibular
   disorders, and anything competing for attention while reading. The button stays
   orange and simply stops moving. */
@media (prefers-reduced-motion: reduce) {
    body.gogo .rc-bar-login {
        animation: none;
        box-shadow: 0 2px 6px rgba(4, 60, 92, .18);
    }
}


/* -------------------- SIGNED IN: the name, with a tick ----------------------
   Green on a pale green ground, so "you are in" does not look like another button
   waiting to be pressed. #157347 on #e7f8ee is 5.33:1.

   EVERY PROPERTY THE SIGNED-OUT RULE SETS IS RESET HERE - background, colour,
   animation, box-shadow and transform. Both classes are (0,2,0) and this one is
   later in the file, so it wins, but only for properties it actually declares.
   Leaving the animation out is what a previous pass did, and an inherited pulse on
   a state that has nothing to announce is worse than no styling at all.
   -------------------------------------------------------------------------- */

body.gogo .rc-bar-account-on {
    background: #e7f8ee;
    color: #157347;
    animation: none;
    box-shadow: none;
    transform: none;
}

body.gogo .rc-bar-account-on:hover,
body.gogo .rc-bar-account-on:focus-visible {
    background: #d6f2e2;
    color: #157347;
    transform: none;
    box-shadow: 0 4px 12px rgba(4, 60, 92, .14);
}

body.gogo .rc-bar-account-on:focus-visible {
    outline: 2px solid #157347;
    outline-offset: 2px;
}

body.gogo .rc-bar-account-on:active { transform: scale(.97); }


@media (max-width: 991px) {

    /* THE ONE AUTO MARGIN IN THIS BAR. mobile.css put it on .rc-call-mobile, which
       no longer exists in the markup; the long note there about two auto margins
       splitting the free space instead of grouping the items is still the reason
       there may only ever be one. */
    body.gogo .gogo-header .bar .rc-bar-account {
        margin-left: auto;
    }

    /* The logo, at 54px from its original 44. */
    body.gogo .gogo-header .bar .rc-logo-img {
        height: 54px;
        max-height: 54px;
        width: auto;
    }

    /* ---- THE BURGER'S THREE LINES SAT 6px HIGH ----

       MEASURED at 390px, and the surprise is that nothing was misaligned at the box
       level. Every box centre read 37.5: the bar, the logo, the Sign up button and
       the burger's own 40x44 box. What was off was the content INSIDE that box:

           burger box      top 15.5  bottom 59.5   h 44, padding 8px
           content area    top 23.5  bottom 51.5   28px of room
           three 2px lines top 23.5  bottom 39.5   16px with two 5px gaps
                                                   -> 12px of empty space BELOW

       .gogo-burger is "display: flex; flex-direction: column" with
       justify-content computing to "normal", which packs to the start. So the lines
       were pinned to the top of a content box 12px taller than they are, and the
       icon read 6px above the Sign up glyph beside it - lines centred on 31.5
       against the glyph's 37.5.

       CENTRING THE FLEX CONTENT IS THE FIX, not a margin nudge. A margin would move
       the whole 44px button and break the box alignment that is already correct,
       and it would need re-tuning the moment the line count, the gap or the padding
       changed. justify-content: center keeps the lines in the middle of whatever
       room they have: 23.5 + (28 - 16) / 2 = 29.5, so they centre on 37.5 and match
       the glyph exactly.

       The 44px tap target is untouched - only what is drawn inside it moves. */
    body.gogo .gogo-header .bar .gogo-burger {
        justify-content: center;
    }
}

/* Narrow phones.

   THE LABEL NOW SURVIVES 320px. It used to be dropped below 360 because
   "Login / Signup" needed about 140px against a 101px budget at that width. "Sign up"
   needs roughly 90px, so it fits - measured, not assumed - and the button keeps its
   words on every phone size rather than turning back into an unlabelled glyph on the
   smallest ones, which are the screens where a bare icon is hardest to read.

   The logo still steps down to 48px here to pay for it. */
@media (max-width: 360px) {

    body.gogo .rc-bar-btn {
        padding: 0 10px 0 8px;
        gap: 5px;
        font-size: 12px;
    }

    body.gogo .rc-bar-btn i { font-size: 12.5px; }

    /* A long account name has to give way before the burger does. */
    body.gogo .rc-bar-btn .rc-bar-txt { max-width: 72px; }

    body.gogo .gogo-header .bar .rc-logo-img {
        height: 48px;
        max-height: 48px;
    }

    body.gogo .gogo-header .bar { gap: 8px; }
}

/* ==========================================================================
   5. THE FLOATING ICONS: OUTLINE, NOT FILLED
   --------------------------------------------------------------------------
   Requested: the shapes drawn as white lines with nothing filled in.

   HOW, AND WHY THIS WAY. Font Awesome's free set has no outline variant of
   either glyph - fa-phone and fa-brands fa-whatsapp are both solid silhouettes,
   and there is no fa-regular alternative for them. The three options were:

     a) hand-draw two stroke SVGs. Accurate control, but a hand-drawn WhatsApp
        mark is a redrawn trademark, which is exactly what was avoided with the
        logo;
     b) buy the Pro icon set for two icons;
     c) render the existing glyph as an OUTLINE: paint the fill transparent and
        stroke the glyph's own contour.

   (c) is used. -webkit-text-stroke traces the real outline of the real glyph, so
   the WhatsApp mark keeps its official shape - the bubble edge and the handset
   edge both become white lines and the interior shows the button colour through.

   Wrapped in @supports because the whole thing rests on the fill being
   transparent: in a browser without text-stroke that would leave an invisible
   icon rather than an outlined one. Without support, the solid white glyph stays.
   ========================================================================== */

@supports (-webkit-text-stroke: 1px #ffffff) {

    body.gogo .rc-fab-whatsapp > i,
    body.gogo .rc-fab-call > i {
        color: transparent;
        -webkit-text-stroke: 1.4px #ffffff;
        /* paint-order is honoured by the stroke in WebKit/Blink and keeps the
           line crisp where the glyph's own contours meet. */
        paint-order: stroke fill;
    }

    /* Hover and press: the shape fills in. That is the only state change these
       buttons have left now that the glyph is hollow, and it reads clearly. */
    body.gogo .rc-fab-whatsapp:hover > i,
    body.gogo .rc-fab-whatsapp:focus-visible > i,
    body.gogo .rc-fab-whatsapp:active > i,
    body.gogo .rc-fab-call:hover > i,
    body.gogo .rc-fab-call:focus-visible > i,
    body.gogo .rc-fab-call:active > i {
        color: #ffffff;
        -webkit-text-stroke: 0;
    }

    /* At 42px the call button's glyph is smaller, so the stroke thins with it -
       1.4px on a 17px glyph reads as a blob. */
    @media (max-width: 991px) {
        body.gogo .rc-fab-call > i { -webkit-text-stroke-width: 1.2px; }
    }
}


/* ==========================================================================
   6. THE TWO NEW PAGES: Cabs.aspx AND MyTrips.aspx
   --------------------------------------------------------------------------
   Both are destinations of the tab bar, so their styles live with it.

   MOBILE FIRST HERE, unlike the rest of the site. These pages exist because the
   phone shell needed somewhere for its tabs to go, so the single-column layout is
   the real one and the desktop grid is the enhancement. That is the opposite of
   how the older pages are written, and it is deliberate rather than an
   inconsistency: writing them the other way round would have meant a desktop
   layout no one asked for, undone by a media query.

   Type and colour follow the site: Barlow for headings, Poppins for controls,
   navy #043c5c as the ink, logo yellow #fcc808 as the action, #6b7484 for
   secondary text. Nothing new enters the palette.
   ========================================================================== */

/* ---------------------------- shared: empty states ---------------------- */

.rc-empty {
    max-width: 520px;
    margin: 8px auto 0;
    padding: 30px 22px 26px;
    border: 1px solid #e6eaf0;
    border-radius: 18px;
    background: #ffffff;
    box-shadow: 0 10px 30px rgba(4, 60, 92, .07);
    text-align: center;
}

.rc-empty-ico {
    display: grid;
    place-items: center;
    width: 58px;
    height: 58px;
    margin: 0 auto 16px;
    border-radius: 50%;
    background: #eef2f8;
    color: #043c5c;
    font-size: 22px;
}

.rc-empty h3 {
    margin: 0 0 8px;
    font-family: 'Barlow', 'Segoe UI', sans-serif;
    font-size: 20px;
    font-weight: 700;
    color: #043c5c;
}

.rc-empty p {
    margin: 0 auto 18px;
    max-width: 40em;
    font-size: 14.5px;
    line-height: 1.65;
    color: #4b5563;
}

body.gogo .rc-empty-btn {
    appearance: none;
    -webkit-appearance: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;

    min-height: 48px;
    padding: 12px 22px;
    border: 0;
    border-radius: 12px;

    background: #fcc808;
    /* Navy on yellow measures 8.9:1. White on this yellow is 1.9:1 and fails at
       any size, which is why the header Log in button is navy too. */
    color: #043c5c;
    font-family: 'Poppins', 'Segoe UI', sans-serif;
    font-size: 15px;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
    transition: transform .16s ease, box-shadow .16s ease;
}

body.gogo .rc-empty-btn:hover,
body.gogo .rc-empty-btn:focus-visible {
    color: #043c5c;
    transform: translateY(-1px);
    box-shadow: 0 8px 20px rgba(252, 200, 8, .38);
}

body.gogo .rc-empty-btn:active { transform: translateY(1px) scale(.985); }

.rc-empty-fine {
    margin: 18px auto 0;
    padding-top: 14px;
    border-top: 1px solid #eef1f5;
    font-size: 12.5px;
    line-height: 1.6;
    color: #6b7484;
}

/* ---- the "no trips" illustration, drawn rather than loaded ----

   An empty state that depends on an image is an empty state that can itself come
   up empty. This is a dashed road with a car on it, in two elements. */

.rc-empty-art {
    position: relative;
    display: block;
    width: 150px;
    height: 66px;
    margin: 0 auto 18px;
}

.rc-empty-road {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 8px;
    height: 0;
    border-top: 3px dashed #dbe2ec;
}

.rc-empty-car {
    position: absolute;
    left: 50%;
    bottom: 14px;
    transform: translateX(-50%);

    display: grid;
    place-items: center;
    width: 52px;
    height: 52px;
    border-radius: 50%;
    background: #043c5c;
    color: #fcc808;
    font-size: 20px;
    box-shadow: 0 8px 20px rgba(4, 60, 92, .22);
}


/* ---------------------------- Cabs.aspx --------------------------------- */

.rc-cab-list {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 14px;
}

.rc-cab {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    overflow: hidden;
    border: 1px solid #e6eaf0;
    border-radius: 16px;
    background: #ffffff;
    box-shadow: 0 8px 22px rgba(4, 60, 92, .07);
}

.rc-cab-art {
    display: grid;
    place-items: center;
    min-height: 150px;
    padding: 14px;
    background: linear-gradient(160deg, #f5f8fc 0%, #eaf0f7 100%);
}

/* Contain, not cover: these are vehicle photos on a plain ground and cropping one
   to fill a box cuts the front off the car. */
.rc-cab-art img {
    max-width: 100%;
    max-height: 132px;
    height: auto;
    object-fit: contain;
}

.rc-cab-body { padding: 14px 16px 16px; }

.rc-cab-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 10px;
}

.rc-cab-head h3 {
    margin: 0;
    font-family: 'Barlow', 'Segoe UI', sans-serif;
    font-size: 18px;
    font-weight: 700;
    line-height: 1.25;
    color: #043c5c;
}

.rc-cab-cat {
    flex: none;
    padding: 3px 10px;
    border-radius: 999px;
    background: #eef2f8;
    color: #4b5563;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: .06em;
    text-transform: uppercase;
    white-space: nowrap;
}

.rc-cab-specs {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 6px 12px;
    margin: 0 0 14px;
    padding: 0;
    list-style: none;
}

.rc-cab-specs li {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
    font-size: 13px;
    color: #4b5563;
}

.rc-cab-specs li i {
    flex: none;
    width: 15px;
    text-align: center;
    font-size: 12.5px;
    color: #97a0ae;
}

/* ONE COLUMN, because there is now one rate.

   auto-fit rather than a hard "1fr": if the round-trip figure is ever split back out
   the row becomes two boxes without another CSS change, and neither box has to be
   re-tuned. */
.rc-cab-rates {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
    gap: 10px;
    margin-bottom: 14px;
}

.rc-cab-rate {
    padding: 10px 12px;
    border: 1px solid #eef1f5;
    border-radius: 12px;
    background: #fafbfd;
}

.rc-cab-rate .k {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 3px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: #6b7484;
}

.rc-cab-rate .k i { font-size: 10px; color: #97a0ae; }

.rc-cab-rate .v {
    display: block;
    font-family: 'Barlow', 'Segoe UI', sans-serif;
    font-size: 21px;
    font-weight: 700;
    letter-spacing: -.4px;
    color: #043c5c;
    line-height: 1.1;
}

.rc-cab-rate .v small {
    font-size: 11.5px;
    font-weight: 500;
    letter-spacing: 0;
    color: #6b7484;
}

/* "body.gogo" ON EVERY ANCHOR-BEARING SELECTOR IN THIS FILE, and it is not
   decoration.

   MEASURED: this button's label computed rgb(77, 90, 104) - grey - on its navy
   ground, which is about 2.2:1 and unreadable. The declared white never applied.
   gogo.css has

       .gogo a { color: inherit; }

   which is (0,1,1) - one class plus one element - and that beats a bare ".rc-cab-book"
   at (0,1,0) no matter which file loads last. "inherit" then walked up to the card
   body's grey. Adding "body.gogo" takes this to (0,2,0) and it wins.

   The same trap caught .rc-empty-btn, .rc-trip-btn and .rc-sheet-btn, each of which
   is rendered as an <a> somewhere. Anything added here later that sets a colour on a
   link needs the prefix too. */
body.gogo .rc-cab-book {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;

    min-height: 46px;
    padding: 12px 16px;
    border-radius: 12px;

    background: #043c5c;
    color: #ffffff;
    font-family: 'Poppins', 'Segoe UI', sans-serif;
    font-size: 14.5px;
    font-weight: 600;
    text-decoration: none;
    transition: background .16s ease, transform .16s ease;
}

body.gogo .rc-cab-book i { font-size: 11px; }

body.gogo .rc-cab-book:hover,
body.gogo .rc-cab-book:focus-visible {
    background: #075275;
    color: #ffffff;
}

body.gogo .rc-cab-book:active { transform: translateY(1px) scale(.99); }

/* ---- the whole card lights up, not just the button ----

   Requested: a yellow border round the entire rectangle on hover.

   THE BORDER WIDTH DOES NOT CHANGE, only its colour. Going from 1px to 2px would
   add 2px to the card's height and width and shove the rest of the grid a pixel
   sideways every time a pointer crossed it. The extra weight comes from an inset
   box-shadow instead, which paints inside the border box and costs no layout.

   Hover AND focus-within: a keyboard user tabbing to the button inside the card
   should get the same signal a mouse gets, and focus-within is what carries it up
   to the card. */
body.gogo .rc-cab {
    transition: border-color .18s ease, box-shadow .18s ease, transform .18s ease;
}

body.gogo .rc-cab:hover,
body.gogo .rc-cab:focus-within {
    border-color: #fcc808;
    box-shadow:
        0 12px 28px rgba(4, 60, 92, .12),
        inset 0 0 0 1px #fcc808;
}

/* On the card's own hover the button warms up too, so the two read as one control
   rather than the card highlighting something unrelated. */
body.gogo .rc-cab:hover .rc-cab-book {
    background: #075275;
}

/* Touch has no hover, so the card gets its highlight from the press instead. */
@media (hover: none) {
    body.gogo .rc-cab:active {
        border-color: #fcc808;
        box-shadow: inset 0 0 0 1px #fcc808;
    }
}

/* Two across from tablet, photo beside the detail from desktop. */
@media (min-width: 620px) {
    .rc-cab { grid-template-columns: 220px minmax(0, 1fr); }
    .rc-cab-art { min-height: 0; }
}

@media (min-width: 992px) {
    .rc-cab-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .rc-cab { grid-template-columns: 200px minmax(0, 1fr); }
}


/* ---------------------------- MyTrips.aspx ------------------------------ */

.rc-trip-list {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 14px;
}

.rc-trip {
    padding: 14px 16px 16px;
    border: 1px solid #e6eaf0;
    border-radius: 16px;
    background: #ffffff;
    box-shadow: 0 8px 22px rgba(4, 60, 92, .07);
}

.rc-trip-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 10px;
    padding-bottom: 10px;
    border-bottom: 1px solid #eef1f5;
}

.rc-trip-no {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    min-width: 0;
    font-family: 'Poppins', 'Segoe UI', sans-serif;
    font-size: 12.5px;
    font-weight: 600;
    letter-spacing: .02em;
    color: #6b7484;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.rc-trip-no i { flex: none; font-size: 12px; color: #97a0ae; }

.rc-trip-status {
    flex: none;
    padding: 4px 11px;
    border-radius: 999px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    white-space: nowrap;
}

/* Green for a live booking, grey for a finished one, red-tinted for cancelled.
   Each pairs a tinted ground with dark text of the same hue rather than white on
   colour, which is how the rest of the site's badges are built. */
.rc-trip-status.is-live { background: #e7f8ee; color: #157347; }
.rc-trip-status.is-done { background: #eef2f8; color: #4b5563; }
.rc-trip-status.is-off  { background: #fdecec; color: #b02a2a; }

.rc-trip-route {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px 10px;
    margin-bottom: 12px;
}

.rc-trip-place {
    font-family: 'Barlow', 'Segoe UI', sans-serif;
    font-size: 17px;
    font-weight: 700;
    line-height: 1.2;
    color: #043c5c;
}

.rc-trip-arrow {
    flex: none;
    font-size: 12px;
    color: #fcc808;
}

.rc-trip-meta {
    display: grid;
    gap: 6px;
    margin: 0 0 13px;
    padding: 0;
    list-style: none;
}

.rc-trip-meta li {
    display: flex;
    align-items: center;
    gap: 9px;
    min-width: 0;
    font-size: 13px;
    line-height: 1.45;
    color: #4b5563;
}

.rc-trip-meta li i {
    flex: none;
    width: 15px;
    text-align: center;
    font-size: 12.5px;
    color: #97a0ae;
}

.rc-trip-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding-top: 12px;
    border-top: 1px solid #eef1f5;
}

.rc-trip-amt {
    font-family: 'Barlow', 'Segoe UI', sans-serif;
    font-size: 21px;
    font-weight: 700;
    letter-spacing: -.5px;
    color: #043c5c;
    line-height: 1.1;
}

.rc-trip-amt small {
    display: block;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: #97a0ae;
}

body.gogo .rc-trip-btn {
    flex: none;
    display: inline-flex;
    align-items: center;
    gap: 8px;

    min-height: 44px;
    padding: 11px 16px;
    border: 1px solid #dde4ee;
    border-radius: 11px;

    background: #ffffff;
    color: #043c5c;
    font-family: 'Poppins', 'Segoe UI', sans-serif;
    font-size: 13.5px;
    font-weight: 600;
    text-decoration: none;
    transition: background .16s ease, border-color .16s ease;
}

body.gogo .rc-trip-btn i { font-size: 10.5px; color: #97a0ae; }

body.gogo .rc-trip-btn:hover,
body.gogo .rc-trip-btn:focus-visible {
    background: #fffdf5;
    border-color: #fcc808;
    color: #043c5c;
}

body.gogo .rc-trip-btn:active { transform: translateY(1px) scale(.99); }

.rc-trip-note {
    margin: 18px 2px 0;
    font-size: 12.5px;
    line-height: 1.65;
    color: #6b7484;
}

@media (min-width: 992px) {
    .rc-trip-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Very narrow phones: the total and the button stop competing for one row. */
@media (max-width: 360px) {
    .rc-trip-foot { flex-direction: column; align-items: stretch; }
    .rc-trip-btn { justify-content: center; }
}

/* ==========================================================================
   THE STRAPLINE UNDER THE LOGO: BIGGER, BECAUSE IT IS PART OF THE ARTWORK
   --------------------------------------------------------------------------
   Requested: the line of text under the mark was too faint to read.

   WHY IT IS NOT A COLOUR OR WEIGHT FIX. There is an HTML strapline element in
   the master page - ".rc-logo-lockup .l2", the "Reliable Rides, Anytime" span -
   but theme.css switches the whole lockup off with

       body.gogo .rc-logo-lockup { display: none; }

   because the supplied artwork already contains the name AND the strapline. So
   the text on screen is PIXELS INSIDE rctravels-logo.png, not type. Restyling
   .l2 would have changed nothing visible, and un-hiding it would print the words
   twice, once as type and once as part of the image.

   MEASURED, from the artwork itself rather than by eye. Scanning
   img\rctravels-logo.png row by row for ink, the file is 1356x551 with content
   from y=11 to y=519, and the strapline is the bottom band, roughly y=452-519 -
   about 12% of the image height. Rendered at the header's previous 56px that
   band was about 6.9px tall, before antialiasing takes a bite out of it. Small
   raster text at 7px is not faint, it is under-resolved: there are not enough
   pixels to draw the letterforms.

   SO THE LEVER IS SIZE, and the ceiling is the bar it sits in. The header bar is
   "min-height: 82px" on the desktop and 72px below 991px, so the sizes below are
   the largest that still leave the mark clear of the bar edges:

       desktop   56 -> 70px   strapline about 8.6px
       <= 991    54 -> 62px             about 7.6px
       <= 600    44 -> 56px
       <= 360    48 -> 52px
       footer    62 -> 86px             about 10.6px

   The footer takes the biggest step because nothing constrains it there, and it
   is where the strapline is actually read rather than glanced at.

   Width stays "auto" with a raised max-width cap. The new artwork is 2.46:1, so
   70px of height computes to about 172px of width - inside the 260px cap, which
   is only there to stop a future, wider file pushing the navigation over.

   IN appshell.css DELIBERATELY: it is the last stylesheet the master page loads
   and it already owns the mobile header logo sizing, so these win without a
   specificity fight with theme.css.

   IF THE STRAPLINE STILL NEEDS TO BE CRISPER, the next step is a change of
   artwork, not of CSS: supply a header file cropped to the mark and wordmark,
   then delete the "display: none" above so the strapline renders as real type at
   whatever size and colour suits. That is the only way to get sharp text at
   11px, and it needs the client's sign-off on how the lockup looks.
   ========================================================================== */

/* THE BAR GROWS WITH THE MARK, and it has to be said here.

   theme.css pins the bar at "min-height: 82px" on the desktop and 72px below
   991px. The mark was previously 56px inside 82px, so there was only ~26px of
   slack; at the sizes below the logo would have sat hard against the bar edges,
   or been visually clipped by the header's bottom border. Raising the bar by the
   same amount the logo gained keeps the original breathing room. */
/* SPLIT BY BREAKPOINT, on request: smaller on a PC, larger on a phone.

   The desktop mark comes back down to 64px in an 88px bar - between the 56px it
   started at and the 88px it had grown to - because a PC has the horizontal room
   to read the strapline at a distance and the tall bar was costing page height on
   every screen. The phone goes the other way: it is the one place the strapline
   was reported as too small, and on a phone the mark has the bar to itself. */
body.gogo .gogo-header .bar { min-height: 88px; }

body.gogo .gogo-header .bar .rc-logo-img {
    height: 64px;
    max-height: 64px;
    width: auto;
    max-width: 260px;
    object-fit: contain;
}

@media (max-width: 991px) {
    body.gogo .gogo-header .bar { min-height: 88px; }

    body.gogo .gogo-header .bar .rc-logo-img {
        height: 76px;
        max-height: 76px;
        max-width: 250px;
    }

    /* THE MENU SHEET HANGS OFF THE BAR, so a taller bar moves it.

       gogo.css positions it with "inset: 74px 0 auto 0" below 991px and again at
       "66px" below 900px, both measured against the old 72px bar. Left alone, an
       84px bar would overlap the top of the open sheet by 10-18px and eat its
       first row. Top is restated rather than the whole inset, so the left/right
       edges stay wherever gogo.css put them. */
    body.gogo .gogo-nav { top: 88px; }
    body.gogo .gogo-nav.open { max-height: calc(100vh - 88px); }
}

@media (max-width: 600px) {
    body.gogo .gogo-header .bar .rc-logo-img {
        height: 70px;
        max-height: 70px;
        max-width: 225px;
    }
}

/* Narrowest phones: the account button and burger have to fit beside it, so this
   is the one step down. 74px still leaves the strapline larger than the 68px the
   desktop bar was showing before this change. */
@media (max-width: 360px) {
    body.gogo .gogo-header .bar .rc-logo-img {
        height: 62px;
        max-height: 62px;
        max-width: 200px;
    }
}

/* The footer has the room, and this is where the line gets read. */
/* The footer follows the same split: trimmed on a PC, kept large on a phone.
   Nothing constrains it in either case, so the phone value is the larger of the
   two rather than a step down from the header. */
body.gogo .rc-logo-footer .rc-logo-img {
    height: 92px;
    max-height: 92px;
    width: auto;
    max-width: 300px;
    object-fit: contain;
}

@media (max-width: 991px) {
    body.gogo .rc-logo-footer .rc-logo-img {
        height: 92px;
        max-height: 92px;
        max-width: 290px;
    }
}

@media (max-width: 600px) {
    body.gogo .rc-logo-footer .rc-logo-img {
        height: 86px;
        max-height: 86px;
        max-width: 265px;
    }
}

/* ==========================================================================
   THE FLOATING CALL BUTTON: THE SAME YELLOW AS SEARCH CAB
   --------------------------------------------------------------------------
   Requested: the hovering Call action, the one sitting opposite the WhatsApp
   button, was orange and should be the Search Cab yellow.

   THE EXACT VALUES ARE COPIED FROM THE BUTTON, not picked to look similar. The
   Search Cab rule at the bottom of theme.css is

       background: #fcc808 !important;  color: #043c5c !important;

   with #e6b400 on hover (--accent-hover). Those three are reused verbatim below,
   so the two controls cannot drift apart if the palette is rolled.

   WHAT IT IS OVERRIDING. theme.css sets this twice - "var(--accent)" at ~1883 and
   then a literal "#f97316" at ~2444, which is the one that was winning. Both are
   plain "body.gogo .rc-fab-call", and appshell.css loads last, so a matching
   selector here wins on order without needing !important.

   THE GLYPH HAD TO CHANGE WITH IT, and this is the part that would have been easy
   to miss. Section 5 above draws both floating icons as an OUTLINE - transparent
   fill with a white -webkit-text-stroke - and fills them solid white on hover.
   White on #fcc808 measures about 1.7:1, so recolouring only the background would
   have left a phone icon that is invisible until you look for it, and a hover
   state that erases it completely. The stroke and the hover fill both become the
   same navy the Search Cab label uses, which measures about 8.9:1 on this yellow.

   The radar rings follow the button, exactly as the WhatsApp pair follow green.
   ========================================================================== */

body.gogo .rc-fab-call {
    background: #fcc808;
    color: #043c5c;
}

body.gogo .rc-fab-call:hover,
body.gogo .rc-fab-call:focus {
    background: #e6b400;
    color: #043c5c;
    box-shadow: 0 12px 28px rgba(252, 200, 8, .38);
}

body.gogo .rc-fab-call .rc-fab-radar { background: rgba(252, 200, 8, .45); }

/* The hover label that slides out beside the button keeps its dark pill, so only
   the button itself changes colour. */

/* Outline glyph, navy instead of white - see the note above. Wrapped in the same
   @supports test as section 5 so browsers without -webkit-text-stroke keep the
   solid glyph they already had, which the "color" above has now set to navy. */
@supports (-webkit-text-stroke: 1px #ffffff) {

    body.gogo .rc-fab-call > i {
        color: transparent;
        -webkit-text-stroke: 1.4px #043c5c;
    }

    body.gogo .rc-fab-call:hover > i,
    body.gogo .rc-fab-call:focus-visible > i,
    body.gogo .rc-fab-call:active > i {
        color: #043c5c;
        -webkit-text-stroke: 0;
    }

    @media (max-width: 991px) {
        body.gogo .rc-fab-call > i { -webkit-text-stroke-width: 1.2px; }
    }
}

/* =====================================================================
   TRIP CARD - PAYMENT STATE AND BALANCE

   Added because the trip card showed a total and nothing else. With a ₹499
   reserve against a fare of several thousand, that meant a customer's own
   history was the last place they would discover they still owed money - and
   the discovery then happened with the driver at the end of the trip.

   These rules apply on phone and desktop alike. The card is the same component
   in both, so the account view gains this everywhere at once rather than the
   two drifting apart.
   ===================================================================== */

body.gogo .rc-trip-pay {
    display: inline-flex;
    align-items: center;
    padding: 3px 9px;
    border-radius: 999px;
    font-size: 11.5px;
    font-weight: 700;
    line-height: 1.35;
    white-space: nowrap;
    border: 1px solid transparent;
}

/* Amber for a balance, green for settled, grey for untouched, red for failed.
   Colour is never the only signal - the pill always says it in words too. */
body.gogo .rc-trip-pay.is-ok   { background: #e8f5ec; border-color: #bfe0c9; color: #14682d; }
body.gogo .rc-trip-pay.is-warn { background: #fff4e0; border-color: #f0d9ae; color: #8a5a00; }
body.gogo .rc-trip-pay.is-info { background: #e8f1fd; border-color: #c3d9f7; color: #0b4f9c; }
body.gogo .rc-trip-pay.is-bad  { background: #fdeceb; border-color: #f3c9c6; color: #8c201a; }
body.gogo .rc-trip-pay.is-off  { background: #f1f3f6; border-color: #dfe4ea; color: #55606d; }

body.gogo .rc-trip-bal {
    margin: 2px 0 0;
    font-size: 12.5px;
    color: #6b7484;
    line-height: 1.5;
}

/* Empty on a settled trip. :empty removes the margin so the card does not carry
   a gap where a line used to be. */
body.gogo .rc-trip-bal:empty { display: none; }

body.gogo .rc-trip-bal b { color: #8a5a00; }

/* The card's top row now holds three chips instead of two, which overflows a
   narrow phone. Allowing it to wrap keeps the booking number on its own line
   rather than squeezing all three. */
body.gogo .rc-trip-top {
    flex-wrap: wrap;
    gap: 6px;
}

@media (max-width: 420px) {
    body.gogo .rc-trip-no { flex: 1 1 100%; }
}

/* Intermediate stops on a trip card. Sits under the two end cities, so a routed
   journey is distinguishable from a direct one - which it was not before. */
body.gogo .rc-trip-via {
    margin: 2px 0 0;
    font-size: 12.5px;
    color: #6b7484;
    line-height: 1.5;
}

body.gogo .rc-trip-via:empty { display: none; }
