.topbar-search{display:none !important;}
/* Hide loyalty tier chip from the user header (Bronze/Silver/Gold/Platinum) */
.loyalty-tier{display:none !important;}
.user-chip .loyalty-tier,
#userChip .loyalty-tier,
.nav-actions .loyalty-tier,
header .loyalty-tier{display:none !important;}
/* ====== MGR Courier Service — Shared Styles ====== */
:root{
  --blue-deep:#042c54;
  --blue:#0b4f94;
  --blue-light:#1e88e5;
  --aqua:#00c6d7;
  --teal:#0ea5a4;
  --gold:#ffcd3c;
  --sunset:#ff7b00;
  --green:#2ecc71;
  --red:#ef4444;
  --sand:#fff8ec;
  --ink:#0f172a;
  --muted:#64748b;
  --border:#e2e8f0;
  --bg:#f7fbff;
  --white:#ffffff;
  --shadow:0 20px 60px -15px rgba(4,44,84,.25);
  --grad-ocean:linear-gradient(135deg,#042c54 0%,#0b4f94 40%,#00c6d7 100%);
  --grad-sunset:linear-gradient(135deg,#ff7b00 0%,#ffcd3c 100%);
  --grad-jamaica:linear-gradient(135deg,#009b3a 0%,#ffcd3c 60%,#000 100%);
}
*{box-sizing:border-box;margin:0;padding:0;}
html{
  scroll-behavior:smooth;
  /* Match the contact bar so the iOS notch / overscroll area never shows the light page background */
  background:#02172e;
}
body{
  font-family:'Poppins',sans-serif;color:var(--ink);background:var(--bg);
  line-height:1.6;overflow-x:hidden;
  margin:0;
}
a{color:inherit;text-decoration:none;}
img{max-width:100%;display:block;}
.container{max-width:1280px;margin:0 auto;padding:0 24px;}

/* ====== Buttons ====== */
.btn{display:inline-flex;align-items:center;gap:8px;padding:12px 22px;border-radius:999px;border:none;cursor:pointer;font-family:inherit;font-weight:600;font-size:14px;transition:transform .2s,box-shadow .2s,background .2s;}
.btn:hover{transform:translateY(-2px);box-shadow:0 10px 30px rgba(0,0,0,.18);}
.btn-primary{background:var(--grad-sunset);color:#3a2400;}
.btn-ghost{background:rgba(255,255,255,.15);color:#fff;border:1px solid rgba(255,255,255,.3);backdrop-filter:blur(8px);}
.btn-dark{background:var(--blue-deep);color:#fff;}
.btn-green{background:#25d366;color:#fff;}
.btn-outline{background:#fff;color:var(--blue-deep);border:2px solid var(--blue-deep);}
.btn-sm{padding:7px 14px;font-size:13px;}
.btn-block{width:100%;justify-content:center;}
.btn-icon{width:38px;height:38px;padding:0;justify-content:center;border-radius:50%;}
.btn:disabled{opacity:.6;cursor:not-allowed;}

/* ====== Color Themes (3 options, swap CSS vars on <html data-theme>) ====== */
html[data-theme="ocean"]{
  --blue-deep:#042c54;--blue:#0b4f94;--blue-light:#1e88e5;--aqua:#00c6d7;
  --gold:#ffcd3c;--sunset:#ff7b00;
  --grad-ocean:linear-gradient(135deg,#042c54 0%,#0b4f94 40%,#00c6d7 100%);
  --grad-sunset:linear-gradient(135deg,#ff7b00 0%,#ffcd3c 100%);
}
html[data-theme="sunset"]{
  --blue-deep:#7c2d12;--blue:#c2410c;--blue-light:#f97316;--aqua:#fb923c;
  --gold:#fcd34d;--sunset:#ea580c;--teal:#ea580c;
  --grad-ocean:linear-gradient(135deg,#7c2d12 0%,#c2410c 40%,#f59e0b 100%);
  --grad-sunset:linear-gradient(135deg,#c2410c 0%,#fcd34d 100%);
}
html[data-theme="jamaica"]{
  --blue-deep:#052e16;--blue:#065f46;--blue-light:#059669;--aqua:#10b981;
  --gold:#fbbf24;--sunset:#000000;--teal:#10b981;
  --grad-ocean:linear-gradient(135deg,#000000 0%,#059669 50%,#fbbf24 100%);
  --grad-sunset:linear-gradient(135deg,#fbbf24 0%,#f59e0b 100%);
  --grad-jamaica:linear-gradient(135deg,#059669 0%,#fbbf24 60%,#000 100%);
}
.theme-pick{position:fixed;right:20px;bottom:94px;z-index:90;display:flex;flex-direction:column;gap:6px;background:#fff;padding:8px;border-radius:14px;box-shadow:0 10px 30px rgba(0,0,0,.2);transform:translateY(20px);opacity:0;pointer-events:none;transition:.25s;}
.theme-pick.open{transform:translateY(0);opacity:1;pointer-events:auto;}
.theme-pick button{border:2px solid transparent;background:none;width:36px;height:36px;border-radius:50%;cursor:pointer;position:relative;}
.theme-pick button.active{border-color:#042c54;}
.theme-pick .th-ocean{background:linear-gradient(135deg,#042c54,#00c6d7);}
.theme-pick .th-sunset{background:linear-gradient(135deg,#c2410c,#fcd34d);}
.theme-pick .th-jamaica{background:linear-gradient(135deg,#000,#059669,#fbbf24);}

/* ====== Header Search + Quick Pickup Button ====== */
.nav-search{position:relative;margin:0 14px;flex:0 0 auto;flex-shrink:0;z-index:5;}
.nav-search input{padding:8px 36px 8px 32px;border:1px solid var(--border);border-radius:999px;font-family:inherit;font-size:13px;width:180px;background:#f8fafc;transition:.2s;}
.nav-search input:focus{outline:none;border-color:var(--blue-light);background:#fff;width:240px;}
.nav-search > i{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--muted);font-size:13px;pointer-events:none;}
.nav-search-mic{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:26px;height:26px;border-radius:50%;border:none;background:transparent;color:var(--muted);font-size:12px;cursor:pointer;display:grid;place-items:center;transition:.18s;padding:0;}
.nav-search-mic:hover{background:#e0f2fe;color:var(--blue-light);}
.nav-search-mic.listening{background:#fee2e2;color:#dc2626;animation:micPulse 1.1s ease-in-out infinite;}
@keyframes micPulse{0%,100%{box-shadow:0 0 0 0 rgba(220,38,38,.45);}50%{box-shadow:0 0 0 6px rgba(220,38,38,0);}}
.nav-search .results{position:absolute;top:calc(100% + 8px);left:0;right:0;min-width:320px;background:#fff;border-radius:12px;box-shadow:0 20px 50px rgba(0,0,0,.2);max-height:380px;overflow-y:auto;display:none;z-index:200;}
.nav-search .results.open{display:block;}
.nav-search .results a{display:flex;gap:10px;padding:10px 12px;border-bottom:1px solid #f1f5f9;color:var(--ink);font-size:13px;}
.nav-search .results a:hover{background:#eff6ff;}
.nav-search .results a i{color:var(--blue-light);width:18px;}
.nav-search .results .none{padding:16px;text-align:center;color:var(--muted);font-size:13px;}
.btn-pickup{background:#25d366;color:#fff;}
/* === Search responsiveness ===
   Collapse to icon-only earlier so signed-in users (with longer name chip + role tag)
   have plenty of room — the menu items and Sign In/Sign Up are NEVER covered.
*/
/* On all widths below the "huge desktop" threshold, search is a 36px icon by default */
@media(max-width:1400px){
  .nav-search{margin:0 0 0 12px;position:relative;}
  .nav-search input{width:36px;height:36px;border-radius:50%;padding:0;background:#f1f5f9;color:transparent;text-indent:-9999px;cursor:pointer;border:1px solid var(--border);}
  .nav-search > i{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:var(--blue-deep);font-size:13px;pointer-events:none;z-index:1;}
  .nav-search input:focus{width:260px;height:36px;border-radius:18px;padding:7px 36px 7px 34px;color:var(--ink);text-indent:0;background:#fff;cursor:text;position:absolute;right:0;top:0;z-index:130;box-shadow:0 8px 22px rgba(0,0,0,.2);}
  .nav-search-mic{display:none;}
  .nav-search input:focus ~ .nav-search-mic,
  .nav-search:focus-within .nav-search-mic{display:grid;}
  .nav-search .results{right:0;left:auto;width:300px;z-index:131;}
}
/* On the largest screens, show full pill search */
@media(min-width:1401px){
  .nav-search input{width:200px;}
  .nav-search input:focus{width:260px;}
}
/* Hide search entirely on phone */
@media(max-width:520px){ .nav-search{display:none;} }

/* ====== Top Promo Banner ====== */
.promo-bar{position:relative;z-index:95;background:linear-gradient(90deg,#042c54,#0b4f94 40%,#ff7b00 80%,#ffcd3c);color:#fff;padding:8px 24px;display:flex;align-items:center;gap:16px;font-size:13px;overflow:hidden;}
.promo-bar .ticker{flex:1;overflow:hidden;position:relative;height:20px;}
.promo-bar .ticker-track{display:flex;gap:60px;white-space:nowrap;animation:tkr 28s linear infinite;will-change:transform;}
.promo-bar .ticker-track span b{color:var(--gold);font-weight:700;margin-right:6px;}
.promo-bar .promo-cta{background:#fff;color:var(--blue-deep);font-weight:700;padding:4px 12px;border-radius:999px;font-size:12px;text-decoration:none;white-space:nowrap;}
.promo-bar .promo-cta:hover{background:var(--gold);}
.promo-bar .promo-close{background:none;border:none;color:#fff;cursor:pointer;font-size:16px;opacity:.8;}
.promo-bar .promo-close:hover{opacity:1;}
@keyframes tkr{from{transform:translateX(0);}to{transform:translateX(-50%);}}

/* ====== Header ====== */
.header{position:sticky;top:0;z-index:110;background:rgba(255,255,255,.92);backdrop-filter:blur(20px);border-bottom:1px solid rgba(0,0,0,.04);overflow:visible;box-shadow:0 2px 16px rgba(4,44,84,0.06);}
.lang-menu{animation:slideDown 0.2s ease;}
.lang-menu.show{display:block!important;}
.lang-option:hover{background:#f1f5f9;}
@keyframes slideDown{from{opacity:0;transform:translateY(-8px);}to{opacity:1;transform:translateY(0);}}
/* Use the full viewport width on the header so brand sits hard left and actions hard right */
.header > .container{max-width:none !important;width:100% !important;padding-left:18px !important;padding-right:18px !important;}
/* hero-ship.jpg, not backdrop.jpg: the old backdrop has marketing text baked
   into the pixels, and even at 7% the glyph shapes read through the header. */
.header::before{content:'';position:absolute;inset:0;background-image:url('../hero-ship.jpg');background-size:cover;background-position:center;opacity:.07;filter:saturate(1.2);pointer-events:none;z-index:0;}
.header > *{position:relative;z-index:2;}
.header .container{overflow:visible;}
.header > *{position:relative;z-index:2;}
/* Stretch the menu across full width: brand left, links centered, search + actions hard right */
.nav{display:flex;align-items:center;justify-content:space-between;padding:10px 0;gap:18px;flex-wrap:nowrap;overflow:visible;width:100%;}
/* Layout order: Logo → Menu → Action buttons → Search (far right) */
.brand-link{order:1;display:flex !important;align-items:center;gap:10px;flex:0 0 auto;visibility:visible !important;}
.nav-links{order:2;}
.nav-actions{order:3;}
.nav-search{order:4;margin:0 0 0 14px;}
.brand-link img{height:54px;width:auto;max-width:240px;object-fit:contain;border-radius:10px;transition:transform .2s;filter:drop-shadow(0 2px 6px rgba(4,44,84,.25));display:inline-block !important;visibility:visible !important;}
.brand-link:hover img{transform:scale(1.03);}
/* TEMP: logo hidden site-wide. To restore, delete the next 4 rules. */
.brand-link img,
header img[alt="MGR"],
header img[alt="MGR Courier Service"],
header img[src*="logo"]{display:none !important;}
.brand-link::before{content:"MGR";font-weight:900;color:var(--blue-deep);font-size:20px;letter-spacing:1.5px;}
/* Nav links stretch to fill the middle, but never overlap the search */
.nav-links{display:flex;gap:12px;align-items:center;flex:0 1 auto;min-width:0;justify-content:flex-start;overflow:hidden;flex-wrap:nowrap;padding-right:12px;}
.nav-links > span{display:none !important;}
.nav-dropdown{display:inline-block;}
.nav-more-menu.open{display:block !important;}
.nav-more-btn:hover{color:var(--blue-light);background:rgba(11,79,148,0.08);}
.nav-links a{font-weight:600;font-size:13px;position:relative;display:inline-flex;align-items:center;gap:5px;white-space:nowrap;flex-shrink:0;color:var(--ink);padding:6px 10px;border-radius:6px;transition:all 0.2s ease;}
.nav-links a i{font-size:12px;color:var(--blue);opacity:.9;}
.nav-links a:hover{color:var(--blue-light);background:rgba(11,79,148,0.08);}
.nav-links a:hover i{color:var(--blue-light);opacity:1;}
.nav-links a[style*="background:rgba(255,205,60"]{display:none !important;}
.nav-actions{display:flex;align-items:center;gap:12px;flex:0 0 auto;flex-shrink:0;padding-left:12px;border-left:1px solid var(--border);margin-left:8px;}
.nav-actions .btn-icon{background:#f8fafc;border:1px solid var(--border);padding:8px 12px;border-radius:6px;cursor:pointer;font-size:14px;transition:all 0.2s;display:flex;align-items:center;gap:6px;}
.nav-actions .btn-icon:hover{border-color:var(--blue);background:rgba(11,79,148,0.05);}
.nav-actions select{border:1px solid var(--border);background:#f8fafc;border-radius:6px;padding:8px 12px;font-size:13px;font-family:inherit;cursor:pointer;transition:all 0.2s;}
.nav-actions select:hover{border-color:var(--blue);background:rgba(11,79,148,0.05);}

/* Round pill-shaped action buttons in the nav */
.nav-actions .btn-pickup{
  background:linear-gradient(135deg,#ff7b00,#ff9a3c) !important;color:#fff !important;border:none !important;
  border-radius:999px !important;padding:9px 18px !important;font-size:13px !important;font-weight:700 !important;
  display:inline-flex !important;align-items:center !important;gap:7px !important;
  box-shadow:0 4px 14px rgba(255,123,0,.3) !important;transition:transform .15s, box-shadow .15s !important;
}
.nav-actions .btn-pickup:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(255,123,0,.45) !important;}
.nav-actions .btn-primary.btn-sm{
  background:linear-gradient(135deg,var(--blue-deep),var(--blue-light)) !important;color:#fff !important;border:none !important;
  border-radius:999px !important;padding:9px 18px !important;font-size:13px !important;font-weight:700 !important;
  display:inline-flex !important;align-items:center !important;gap:7px !important;
  box-shadow:0 4px 14px rgba(11,79,148,.3) !important;transition:transform .15s, box-shadow .15s !important;
}
.nav-actions .btn-primary.btn-sm:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(11,79,148,.45) !important;}
.nav-actions .btn-outline.btn-sm{
  background:#fff !important;color:var(--blue-deep) !important;border:1.5px solid var(--border) !important;
  border-radius:999px !important;padding:8px 16px !important;font-size:13px !important;font-weight:600 !important;
  display:inline-flex !important;align-items:center !important;gap:7px !important;transition:.15s !important;
}
.nav-actions .btn-outline.btn-sm:hover{border-color:var(--blue-light) !important;color:var(--blue-light) !important;}
.lang-toggle{display:flex;background:#f1f5f9;border-radius:999px;padding:4px;}
.lang-toggle button{border:none;background:none;padding:5px 10px;border-radius:999px;font-weight:600;font-size:12px;cursor:pointer;color:var(--muted);font-family:inherit;}
.lang-toggle button.active{background:var(--blue-deep);color:#fff;}
.hamburger{display:none;font-size:22px;background:none;border:none;cursor:pointer;padding:8px;color:var(--blue-deep);transition:.2s;align-items:center;justify-content:center;}
.hamburger:hover{color:var(--blue-light);}

/* User avatar in header */
.user-chip{display:flex;align-items:center;gap:8px;padding:4px 12px 4px 4px;border-radius:999px;background:#f1f5f9;cursor:pointer;position:relative;}
.user-chip:hover{background:#e2e8f0;}
.user-chip .uav{width:32px;height:32px;border-radius:50%;background:var(--grad-ocean);color:#fff;display:grid;place-items:center;font-weight:700;font-size:12px;overflow:hidden;}
.user-chip .uav img{width:100%;height:100%;object-fit:cover;}
.user-chip b{font-size:13px;color:var(--blue-deep);}
.user-menu{position:absolute;top:calc(100% + 8px);right:0;background:#fff;box-shadow:var(--shadow);border-radius:12px;padding:6px;min-width:200px;display:none;flex-direction:column;z-index:120;}
.user-chip.open .user-menu{display:flex;}
.user-menu a{padding:10px 14px;border-radius:8px;font-size:14px;display:flex;gap:10px;align-items:center;color:var(--ink);}
.user-menu a:hover{background:#f1f5f9;}
.user-menu a i{color:var(--muted);width:16px;}

/* ====== Hero with cinematic slideshow backdrop ====== */
.hero{position:relative;min-height:calc(100vh - 130px);color:#fff;overflow:hidden;display:flex;align-items:center;padding:12px 0 36px;}
.hero-bg{position:absolute;inset:0;background:url('../hero-ship.jpg') center/cover no-repeat;background-attachment:fixed;}
.hero-bg .slide{display:none;}
/* Smooth 4-slide loop:
   - 4 slides * 7s each = 28s total cycle
   - Each slide gets a fade-in window (0-3%), a stable visible window (3-25%), and a fade-out window (25-29%)
   - Outside that range it stays invisible (opacity:0)
   - 0% and 100% both = 0 so the loop is seamless (no flash when slide 4 hands back to slide 1) */
@keyframes hero-fade{
  0%        {opacity:0;transform:scale(1.05);}
  3%,22%    {opacity:1;transform:scale(1.05);}
  29%,97%   {opacity:0;}
  100%      {opacity:0;transform:scale(1);}
}
.hero-bg::after{content:'';position:absolute;inset:0;background:linear-gradient(135deg,rgba(4,44,84,.65) 0%,rgba(11,79,148,.5) 50%,rgba(0,0,0,.7) 100%);z-index:2;}
/* Animated floating decorations */
.hero-deco{position:absolute;inset:0;overflow:hidden;z-index:3;pointer-events:none;}
.hero-deco .dot{position:absolute;border-radius:50%;filter:blur(1px);opacity:.5;animation:floaty 14s infinite ease-in-out;}
.hero-deco .d1{width:140px;height:140px;background:var(--gold);top:10%;left:8%;animation-delay:0s;}
.hero-deco .d2{width:200px;height:200px;background:var(--aqua);bottom:15%;right:10%;animation-delay:-5s;opacity:.35;}
.hero-deco .d3{width:80px;height:80px;background:#fff;top:60%;left:40%;animation-delay:-9s;opacity:.2;}
.hero-deco .d4{width:120px;height:120px;background:var(--sunset);top:25%;right:35%;animation-delay:-3s;opacity:.25;}
@keyframes floaty{0%,100%{transform:translate(0,0) scale(1);}50%{transform:translate(30px,-40px) scale(1.15);}}
/* Animated ship icon drifting across */
.hero-deco .ship-float{position:absolute;top:66%;left:-80px;font-size:50px;color:rgba(255,255,255,.45);animation:drift 30s linear infinite;text-shadow:0 4px 20px rgba(0,0,0,.4);}
@keyframes drift{from{left:-80px;}to{left:120%;}}
.hero-grid{position:relative;display:grid;grid-template-columns:1.1fr 1fr;gap:56px;align-items:center;z-index:5 !important;}
.hero h1{font-size:clamp(38px,5.2vw,66px);font-weight:900;line-height:1.04;letter-spacing:-1px;margin-bottom:12px;margin-top:-4px;text-shadow:0 4px 30px rgba(0,0,0,.3);}
.hero h1 span{background:var(--grad-sunset);-webkit-background-clip:text;background-clip:text;color:transparent;}
.hero p.lead{font-size:19px;color:rgba(255,255,255,.92);margin-bottom:16px;max-width:540px;text-shadow:0 2px 10px rgba(0,0,0,.3);}
.hero-ctas{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:32px;}
.trust-row{display:flex;gap:22px;flex-wrap:wrap;}
.trust-item{display:flex;align-items:center;gap:10px;font-size:14px;}
.trust-item i{background:rgba(255,255,255,.15);width:34px;height:34px;display:grid;place-items:center;border-radius:10px;color:var(--gold);}
.waves{position:absolute;bottom:-2px;left:0;width:100%;height:70px;z-index:2;pointer-events:none;
  background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 120' preserveAspectRatio='none'><path fill='%23f7fbff' d='M0,64L60,58.7C120,53,240,43,360,53.3C480,64,600,96,720,96C840,96,960,64,1080,53.3C1200,43,1320,53,1380,58.7L1440,64L1440,120L0,120Z'/></svg>") center/cover no-repeat;}
.hero .trust-row{position:relative;z-index:6;}

/* ====== Eyebrows & Section Heads ====== */
section{padding:60px 0;}
.sect-head{text-align:center;margin-bottom:36px;}
.eyebrow{display:inline-block;padding:6px 14px;border-radius:999px;background:rgba(0,198,215,.12);color:var(--teal);font-weight:700;font-size:12px;letter-spacing:1.5px;text-transform:uppercase;margin-bottom:6px;}
h2.sect-title{font-size:clamp(28px,3.4vw,44px);font-weight:800;color:var(--blue-deep);letter-spacing:-.5px;}
.sect-head p{color:var(--muted);max-width:680px;margin:14px auto 0;font-size:16px;}

/* ====== Forms / Fields ====== */
.field{margin-bottom:12px;}
.field label{display:block;font-size:12px;font-weight:600;color:var(--muted);margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px;}
.field input,.field select,.field textarea{width:100%;padding:12px 14px;border:1.5px solid var(--border);border-radius:10px;font-family:inherit;font-size:15px;transition:.2s;background:#fff;}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--blue-light);box-shadow:0 0 0 4px rgba(30,136,229,.12);}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.row3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}
.field-hint{font-size:11px;color:var(--muted);margin-top:4px;}

/* ====== Cards ====== */
.card{background:#fff;border-radius:18px;box-shadow:0 4px 20px rgba(0,0,0,.06);border:1px solid #eef2f7;padding:24px;}
.card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;}
.card-head h3{color:var(--blue-deep);font-size:18px;}

/* ====== Tables ====== */
.table-wrap{overflow-x:auto;}
table{width:100%;border-collapse:collapse;font-size:14px;}
thead th{text-align:left;padding:12px;background:#f8fafc;color:var(--muted);text-transform:uppercase;font-size:11px;letter-spacing:1px;border-bottom:1px solid var(--border);}
tbody td{padding:14px 12px;border-bottom:1px solid #f1f5f9;}
tbody tr:hover{background:#f8fafc;}
.tag{display:inline-block;padding:3px 10px;border-radius:999px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;}
.tag-blue{background:#dbeafe;color:#1e3a8a;}
.tag-green{background:#d1fae5;color:#065f46;}
.tag-amber{background:#fef3c7;color:#92400e;}
.tag-red{background:#fee2e2;color:#991b1b;}
.tag-gray{background:#f1f5f9;color:var(--muted);}

/* ====== Footer ====== */
/* ===== Footer — modern, compact, 3D-tinted ===== */
/* Footer breaks out of the .container max-width and stretches edge-to-edge.
   We override the global .container rule only when it appears inside <footer>. */
footer .container,
footer .container.foot-grid,
footer .container.copy{
  max-width:none;
  width:100%;
  padding-left:32px;
  padding-right:32px;
}
@media (max-width:720px){
  footer .container,
  footer .container.foot-grid,
  footer .container.copy{
    padding-left:18px;
    padding-right:18px;
  }
}
footer{
  /* Layered gradient + radial glow gives a subtle 3D depth feel */
  background:
    radial-gradient(circle at 20% 0%, rgba(11,79,148,.45) 0%, transparent 50%),
    radial-gradient(circle at 85% 100%, rgba(0,198,215,.18) 0%, transparent 55%),
    linear-gradient(180deg,#02172e 0%,#010810 100%);
  color:rgba(255,255,255,.78);
  padding:32px 0 14px;
  position:relative;
  /* Soft inner shadow for elevated card feel */
  box-shadow:inset 0 1px 0 rgba(255,255,255,.04), inset 0 -1px 0 rgba(0,0,0,.5);
}
footer::before{
  content:"";position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,transparent,rgba(255,205,60,.65),rgba(0,198,215,.5),rgba(255,205,60,.65),transparent);
  filter:blur(.4px);
}
/* Subtle dot/grid texture for depth */
footer::after{
  content:"";position:absolute;inset:0;pointer-events:none;opacity:.35;
  background-image:radial-gradient(rgba(255,255,255,.04) 1px, transparent 1px);
  background-size:22px 22px;
}
.foot-grid{
  /* Default (signed-in staff): 6 columns — Brand + Company + Legal + Customer Hub + Drop-off + Operations */
  display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr 1fr 1fr;gap:14px;margin-bottom:12px;
  position:relative;z-index:1;
  align-items:start;
}
/* Guest / customer view — 5 columns since Operations is hidden */
.foot-grid-guest{grid-template-columns:1.5fr 1fr 1fr 1fr 1fr;}
.foot-col h5{
  color:#fff;margin-bottom:8px;font-size:11px;font-weight:800;
  text-transform:uppercase;letter-spacing:.16em;
  display:flex;align-items:center;gap:7px;
  padding-bottom:6px;border-bottom:1px solid rgba(255,205,60,.18);
}
.foot-col h5 i{color:var(--gold);font-size:12px;}
.foot-col a{
  display:flex;align-items:center;gap:7px;
  padding:3px 0;font-size:12.5px;color:rgba(255,255,255,.72);
  text-decoration:none;transition:color .15s,transform .15s;
  /* Prevent long labels from wrapping to a second line in narrow columns */
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;
}
.foot-col a:hover{color:var(--gold);transform:translateX(2px);}
.foot-col a i.fa-link-icon{
  width:12px;font-size:10px;color:rgba(255,255,255,.35);transition:color .15s;
}
.foot-col a:hover i.fa-link-icon{color:var(--gold);}

/* Company column — single column layout */
.foot-col-company{
  display:flex;flex-direction:column;
}

.foot-brand img{height:34px;border-radius:6px;}
.foot-brand .tag{background:none;color:rgba(255,255,255,.7);padding:0;font-size:12.5px;line-height:1.5;margin:8px 0 0;}
.foot-contact{margin-top:12px;display:flex;flex-direction:column;gap:5px;}
.foot-contact a,.foot-contact span{
  display:flex;align-items:center;gap:8px;font-size:12.5px;color:rgba(255,255,255,.78);
  padding:6px 10px;background:rgba(255,255,255,.04);border-radius:8px;
  border:1px solid rgba(255,255,255,.06);text-decoration:none;transition:.15s;
}
.foot-contact a:hover{background:rgba(255,205,60,.1);border-color:rgba(255,205,60,.3);color:var(--gold);}
.foot-contact i{color:var(--gold);width:14px;text-align:center;font-size:12px;}
.socials{display:flex;gap:7px;margin-top:10px;}
.socials a{
  width:32px;height:32px;border-radius:8px;background:rgba(255,255,255,.06);
  display:grid;place-items:center;color:#fff;text-decoration:none;font-size:13px;
  transition:.2s;border:1px solid rgba(255,255,255,.08);
}
.socials a:hover{background:var(--gold);color:var(--blue-deep);transform:translateY(-2px);border-color:var(--gold);}
.copy{
  border-top:1px solid rgba(255,255,255,.08);padding:10px 0 0;
  text-align:center;font-size:11.5px;color:rgba(255,255,255,.55);
  display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;
  position:relative;z-index:1;
}
.copy .badges{display:flex;gap:12px;flex-wrap:wrap;}
.copy .badges span{display:inline-flex;align-items:center;gap:5px;}
.copy .badges i{color:var(--gold);}

/* === Back-to-top floating button === */
.back-to-top{
  position:fixed;right:20px;bottom:20px;z-index:9990;
  width:48px;height:48px;border-radius:50%;border:none;cursor:pointer;
  background:linear-gradient(145deg,#0b4f94,#00c6d7);
  color:#fff;font-size:18px;
  box-shadow:0 6px 20px rgba(11,79,148,.45), inset 0 -3px 0 rgba(0,0,0,.18), inset 0 1px 0 rgba(255,255,255,.25);
  transform:translateY(80px) scale(.6);opacity:0;pointer-events:none;
  transition:transform .25s cubic-bezier(.2,.85,.3,1.2), opacity .25s, box-shadow .2s, background .2s;
}
.back-to-top.show{transform:translateY(0) scale(1);opacity:1;pointer-events:auto;}
.back-to-top:hover{
  background:linear-gradient(145deg,#ffcd3c,#f59e0b);color:#3a2400;
  box-shadow:0 10px 28px rgba(255,205,60,.55), inset 0 -3px 0 rgba(0,0,0,.18), inset 0 1px 0 rgba(255,255,255,.4);
  transform:translateY(-3px) scale(1.06);
}
.back-to-top:active{transform:translateY(0) scale(.95);}
@media (max-width:600px){
  .back-to-top{right:14px;bottom:14px;width:42px;height:42px;font-size:16px;}
}

/* Footer responsive — push wraps as low as possible so all options stay on one line.
   Tightens gap + column ratios first, only wraps at narrow viewports. */
@media (max-width:1400px){
  .foot-grid{gap:10px;grid-template-columns:1.3fr 1fr 1fr 1fr 1fr 1fr;}
  .foot-grid-guest{grid-template-columns:1.3fr 1fr 1fr 1fr 1fr;}
}
@media (max-width:1180px){
  .foot-grid{gap:8px;grid-template-columns:1.2fr 1fr 1fr 1fr 1fr 1fr;}
  .foot-grid-guest{grid-template-columns:1.2fr 1fr 1fr 1fr 1fr;}
  .foot-col a{font-size:12px;padding:2px 0;}
  .foot-col h5{font-size:10.5px;letter-spacing:.12em;}
}
@media (max-width:980px){
  .foot-grid,.foot-grid-guest{grid-template-columns:1fr 1fr 1fr;}
}
@media (max-width:720px){
  .foot-grid,.foot-grid-guest{grid-template-columns:1fr 1fr;gap:10px;}
  .copy{flex-direction:column;text-align:center;}
}
@media (max-width:480px){
  .foot-grid,.foot-grid-guest{grid-template-columns:1fr;gap:8px;}
}

/* ====== Toasts ====== */
.toast-host{position:fixed;top:20px;right:20px;z-index:10000;display:flex;flex-direction:column;gap:10px;max-width:360px;}
.toast{background:#fff;color:var(--ink);padding:14px 18px;border-radius:14px;box-shadow:0 20px 50px rgba(0,0,0,.2);display:flex;gap:12px;align-items:center;animation:slidein .3s;border-left:5px solid var(--blue-light);}
@keyframes slidein{from{transform:translateX(400px);opacity:0;}to{transform:translateX(0);opacity:1;}}
.toast.success{border-color:var(--green);} .toast.success i{color:var(--green);}
.toast.error{border-color:var(--red);} .toast.error i{color:var(--red);}
.toast.info{border-color:var(--blue-light);} .toast.info i{color:var(--blue-light);}
.toast.warn{border-color:var(--gold);} .toast.warn i{color:var(--sunset);}
.toast i{font-size:20px;}
.toast b{display:block;font-size:14px;}
.toast span{font-size:13px;color:var(--muted);}

/* ====== Modal ====== */
.modal{position:fixed;inset:0;background:rgba(0,0,0,.75);display:none;align-items:center;justify-content:center;z-index:200;padding:20px;}
.modal.open{display:flex;}
.modal-inner{background:#fff;border-radius:20px;padding:28px;max-width:560px;width:100%;position:relative;max-height:90vh;overflow-y:auto;}
.modal-inner .close{position:absolute;top:12px;right:12px;background:none;border:none;font-size:20px;cursor:pointer;color:var(--muted);width:36px;height:36px;border-radius:50%;}
.modal-inner .close:hover{background:#f1f5f9;}

/* ====== Rating / Stars ====== */
.rating{display:inline-flex;gap:3px;}
.rating i{color:#cbd5e1;cursor:pointer;font-size:20px;transition:.15s;}
.rating i.on{color:var(--gold);}
.rating i:hover{transform:scale(1.2);}

/* ====== Dashboard layout ====== */
.dash{display:grid;grid-template-columns:260px 1fr;min-height:100vh;background:var(--bg);}
.side{background:var(--blue-deep);color:#fff;padding:18px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;}
.side .brand-link{background:#fff;padding:8px 14px;border-radius:14px;display:inline-flex;align-items:center;gap:10px;box-shadow:0 6px 18px -6px rgba(0,0,0,.4);align-self:flex-start;}
.side .brand-link img{height:46px;width:auto;max-width:160px;object-fit:contain;filter:none;border-radius:8px;}
.side .brand-link::after{content:"ADMIN";font-size:9px;font-weight:800;letter-spacing:1.5px;color:var(--blue-deep);background:var(--gold);padding:3px 7px;border-radius:4px;align-self:center;}
.side[data-role="customer"] .brand-link::after{content:"CUSTOMER";background:#dbeafe;color:var(--blue-deep);}
.side[data-role="broker"] .brand-link::after,.side[data-role="broker_agent"] .brand-link::after{content:"BROKER";background:#cffafe;color:#0e7490;}
.side[data-role="driver"] .brand-link::after{content:"DRIVER";background:#ede9fe;color:#6b21a8;}
.side[data-role="partner_carrier"] .brand-link::after,.side[data-role="partner"] .brand-link::after{content:"PARTNER";background:#d1fae5;color:#065f46;}
.side[data-role="branch_manager"] .brand-link::after,.side[data-role="branch_cashier"] .brand-link::after,.side[data-role="branch_clerk"] .brand-link::after,.side[data-role="branch_inventory"] .brand-link::after,.side[data-role="branch"] .brand-link::after{content:"BRANCH";background:#fef3c7;color:#92400e;}
.side[data-role="staff"] .brand-link::after{content:"STAFF";}
.side[data-role="admin"] .brand-link::after{content:"ADMIN";}
.side-nav{display:flex;flex-direction:column;gap:2px;margin-top:20px;flex:1;overflow-y:auto;}
.side-nav a{padding:10px 14px;border-radius:10px;color:rgba(255,255,255,.8);font-size:14px;display:flex;gap:12px;align-items:center;transition:.15s;text-decoration:none;}
.side-nav a:hover{background:rgba(255,255,255,.08);color:#fff;}
.side-nav a.active{background:var(--grad-sunset);color:#3a2400;font-weight:700;}
.side-nav a i{width:18px;}

/* Collapsible nav groups (uses native <details>) */
/* Admin sidebar collapsible groups — visually identical to the floating admin dock */
.side-nav .nav-group{margin-top:6px;padding-top:6px;border-top:1px solid rgba(255,255,255,.08);}
.side-nav .nav-group:first-of-type{border-top:none;margin-top:8px;padding-top:0;}
.side-nav .nav-group > summary{
  list-style:none;cursor:pointer;
  display:flex;gap:10px;align-items:center;
  padding:9px 12px;border-radius:8px;
  color:rgba(255,255,255,.55);
  font-size:11px;font-weight:800;
  text-transform:uppercase;letter-spacing:.06em;
  transition:background .15s, color .15s;
}
.side-nav .nav-group > summary::-webkit-details-marker{display:none;}
.side-nav .nav-group > summary > i:first-child{color:var(--gold);width:16px;font-size:12px;}
.side-nav .nav-group > summary .chev{margin-left:auto;font-size:10px;opacity:.6;transition:transform .2s;}
.side-nav .nav-group[open] > summary .chev{transform:rotate(180deg);opacity:1;}
.side-nav .nav-group > summary:hover{background:rgba(255,255,255,.05);color:rgba(255,255,255,.9);}
.side-nav .nav-group > a{
  padding:8px 12px 8px 22px;font-size:12.5px;
  border-left:2px solid rgba(255,255,255,.08);
  margin-left:6px;
  border-radius:0 8px 8px 0;
}
.side-nav .nav-group > a:hover{background:rgba(255,255,255,.08);color:#fff;border-left-color:rgba(255,205,60,.5);}
.side-nav .nav-group > a.active{border-left-color:var(--gold);background:linear-gradient(135deg,#fbbf24,#f59e0b);color:#3a2400;font-weight:700;}
.side-foot{padding-top:14px;border-top:1px solid rgba(255,255,255,.1);}
.main{padding:28px 36px;}
.page-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;flex-wrap:wrap;gap:12px;}
.page-head h1{font-size:26px;color:var(--blue-deep);}
.page-head .sub{color:var(--muted);font-size:14px;}

/* KPI cards */
.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:24px;}
.kpi{background:#fff;padding:18px;border-radius:14px;border:1px solid var(--border);display:flex;gap:14px;align-items:center;}
.kpi .ic{width:46px;height:46px;border-radius:12px;color:#fff;display:grid;place-items:center;font-size:20px;}
.kpi .v{font-size:22px;font-weight:800;color:var(--blue-deep);}
.kpi .l{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:1px;}

/* Avatar upload */
.avatar-upload{width:120px;height:120px;border-radius:50%;background:var(--grad-ocean);color:#fff;display:grid;place-items:center;font-size:42px;font-weight:800;cursor:pointer;position:relative;overflow:hidden;margin:0 auto 14px;}
.avatar-upload img{width:100%;height:100%;object-fit:cover;}
.avatar-upload .overlay{position:absolute;inset:0;background:rgba(0,0,0,.5);display:grid;place-items:center;color:#fff;font-size:20px;opacity:0;transition:.2s;}
.avatar-upload:hover .overlay{opacity:1;}

/* Doc uploader */
.drop-zone{border:2px dashed var(--border);border-radius:14px;padding:30px;text-align:center;cursor:pointer;transition:.2s;background:#fafbfc;}
.drop-zone:hover,.drop-zone.drag{border-color:var(--blue-light);background:#eff6ff;}
.drop-zone i{font-size:36px;color:var(--blue-light);margin-bottom:10px;}
.drop-zone b{display:block;color:var(--blue-deep);}
.drop-zone small{color:var(--muted);font-size:12px;}
.doc-list{display:grid;gap:10px;margin-top:14px;}
.doc-item{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--border);border-radius:12px;background:#fff;}
.doc-item .di-ic{width:42px;height:42px;border-radius:10px;background:#eff6ff;color:var(--blue-light);display:grid;place-items:center;font-size:18px;}
.doc-item .di-ic.enc{background:#fef3c7;color:#92400e;}
.doc-item .di-info{flex:1;}
.doc-item .di-info b{font-size:14px;color:var(--blue-deep);display:block;}
.doc-item .di-info small{font-size:12px;color:var(--muted);}
.doc-item .di-actions{display:flex;gap:4px;}
.doc-item button{border:none;background:#f1f5f9;color:var(--muted);width:32px;height:32px;border-radius:8px;cursor:pointer;}
.doc-item button:hover{background:var(--blue-deep);color:#fff;}

/* Kanban */
.kanban{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;}
.kan-col{background:#f1f5f9;padding:12px;border-radius:14px;min-height:400px;}
.kan-col h4{font-size:13px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);margin-bottom:10px;display:flex;justify-content:space-between;}
.kan-col h4 span{background:#fff;padding:2px 8px;border-radius:999px;font-size:11px;color:var(--blue-deep);}
.kan-card{background:#fff;padding:12px;border-radius:10px;margin-bottom:10px;border:1px solid var(--border);cursor:grab;}
.kan-card b{font-size:13px;color:var(--blue-deep);display:block;}
.kan-card small{font-size:12px;color:var(--muted);}
.kan-card .meta{display:flex;gap:8px;margin-top:8px;font-size:11px;}

/* Auth pages */
.auth-wrap{min-height:100vh;display:grid;grid-template-columns:1fr 1fr;}
.auth-side{background:var(--grad-ocean);color:#fff;padding:40px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden;}
.auth-side::before{content:'';position:absolute;inset:0;background-image:url('../backdrop.jpg');background-size:cover;background-position:center;opacity:.35;}
.auth-side>*{position:relative;z-index:2;}
.auth-side .brand-link img{height:56px;filter:brightness(0) invert(1);}
.auth-side h2{font-size:38px;font-weight:800;margin-top:40px;max-width:400px;line-height:1.15;}
.auth-side p{margin-top:16px;opacity:.9;max-width:380px;}
.auth-bullets{display:flex;flex-direction:column;gap:14px;margin-top:30px;}
.auth-bullets div{display:flex;gap:12px;align-items:center;}
.auth-bullets i{background:rgba(255,255,255,.2);width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:var(--gold);}
.auth-form{padding:48px;display:flex;flex-direction:column;justify-content:center;max-width:520px;width:100%;margin:0 auto;}
.auth-form h1{font-size:30px;color:var(--blue-deep);margin-bottom:6px;}
.auth-form .sub{color:var(--muted);margin-bottom:24px;}

/* CRM customer card */
.cust-row{display:flex;align-items:center;gap:12px;padding:10px;border-radius:10px;cursor:pointer;}
.cust-row:hover{background:#f1f5f9;}
.cust-row .cav{width:40px;height:40px;border-radius:50%;background:var(--grad-ocean);color:#fff;display:grid;place-items:center;font-weight:700;overflow:hidden;}
.cust-row .cav img{width:100%;height:100%;object-fit:cover;}
.cust-row .ci b{display:block;font-size:14px;color:var(--blue-deep);}
.cust-row .ci small{font-size:12px;color:var(--muted);}

/* Notifications bell */
.bell{position:relative;cursor:pointer;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:#f1f5f9;}
.bell:hover{background:#e2e8f0;}
.bell .badge{position:absolute;top:-2px;right:-2px;background:var(--red);color:#fff;font-size:10px;font-weight:700;min-width:18px;height:18px;padding:0 4px;border-radius:9px;display:grid;place-items:center;border:2px solid #fff;}
.notif-panel{position:absolute;top:calc(100% + 10px);right:0;width:340px;background:#fff;box-shadow:var(--shadow);border-radius:14px;padding:10px;display:none;z-index:120;max-height:460px;overflow-y:auto;}
.bell.open .notif-panel{display:block;}
.notif-panel h4{padding:8px 10px;font-size:13px;color:var(--muted);text-transform:uppercase;letter-spacing:1px;}
.notif{padding:10px 12px;border-radius:8px;display:flex;gap:10px;align-items:flex-start;cursor:pointer;transition:background .15s;border-left:3px solid transparent;margin-bottom:2px;}
.notif:hover{background:#f1f5f9;}
.notif .nic{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;color:#fff;flex-shrink:0;}
.notif .nbody{flex:1;min-width:0;}
.notif b{font-size:13px;display:block;line-height:1.3;}
.notif p{font-size:12px;color:var(--muted);margin:2px 0 4px;line-height:1.35;word-wrap:break-word;}
.notif small{font-size:11px;color:var(--muted);}
/* Unread — bold title, deep colour, blue-tinted background, accent rail, side dot */
.notif.unread{background:#eff6ff;border-left-color:var(--blue-light);}
.notif.unread b{color:var(--blue-deep);font-weight:700;}
.notif.unread p{color:#475569;}
.notif-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--blue-light);margin-left:6px;vertical-align:middle;box-shadow:0 0 0 3px rgba(30,136,229,.18);}
/* Read — dimmer, lighter, no rail */
.notif.read{background:#fff;}
.notif.read b{color:#64748b;font-weight:500;}
.notif.read p{color:#94a3b8;}
.notif.read small{color:#94a3b8;}
.notif.read .nic{opacity:.6;}
/* Panel header with Mark-all button */
.notif-head{display:flex;justify-content:space-between;align-items:center;padding:0 4px;}
.notif-head h4{padding:8px 6px;font-size:13px;color:var(--muted);text-transform:uppercase;letter-spacing:1px;flex:1;}
.notif-unread-count{display:inline-block;background:var(--blue-deep);color:#fff;font-size:9px;padding:1px 7px;border-radius:99px;letter-spacing:.4px;margin-left:4px;font-weight:800;vertical-align:middle;}
.notif-head-actions{display:flex;gap:4px;padding-right:4px;}
.notif-mark-all,.notif-clear-all{background:#f1f5f9;color:var(--blue-deep);border:0;padding:5px 10px;border-radius:8px;font-size:11px;font-weight:700;cursor:pointer;font-family:inherit;display:inline-flex;align-items:center;gap:4px;}
.notif-mark-all:hover{background:#dbeafe;}
.notif-clear-all{color:#991b1b;}
.notif-clear-all:hover{background:#fee2e2;}
/* Per-row delete (×) — appears on hover, sits flush right of each row */
.notif{position:relative;}
.notif-del{position:absolute;top:6px;right:6px;width:24px;height:24px;border-radius:50%;border:0;background:transparent;color:#94a3b8;cursor:pointer;display:none;align-items:center;justify-content:center;font-size:12px;font-family:inherit;padding:0;}
.notif:hover .notif-del{display:inline-flex;}
.notif-del:hover{background:#fee2e2;color:#dc2626;}

/* ====== Pickup Card ====== */
.pickup-

/* ====== Image Slider / Carousel ====== */
.slider-wrap{position:relative;overflow:hidden;padding:10px 0;}
.slider-track{display:flex;gap:14px;transition:transform .5s cubic-bezier(.25,.8,.25,1);will-change:transform;}
.slide-card{flex:0 0 200px;height:200px;border-radius:16px;overflow:hidden;position:relative;cursor:pointer;box-shadow:0 4px 14px rgba(0,0,0,.08);border:1px solid var(--border);background:#f1f5f9;}
.slide-card img{width:100%;height:100%;object-fit:cover;transition:transform .5s;}
.slide-card:hover img{transform:scale(1.08);}
.slide-card .cap{position:absolute;left:0;right:0;bottom:0;padding:10px 12px;background:linear-gradient(to top,rgba(0,0,0,.85),transparent);color:#fff;font-size:13px;font-weight:600;display:flex;align-items:center;justify-content:space-between;gap:8px;}
.slide-card .cap .cap-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.slide-card .tag{background:var(--grad-sunset);color:#3a2400;font-size:10px;padding:3px 8px;border-radius:999px;font-weight:700;flex-shrink:0;white-space:nowrap;}
.slider-btn{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;background:#fff;border:none;cursor:pointer;font-size:17px;color:var(--blue-deep);box-shadow:0 10px 25px rgba(0,0,0,.15);z-index:5;transition:.2s;}
.slider-btn:hover{background:var(--blue-deep);color:#fff;}
.slider-btn.prev{left:-10px;} .slider-btn.next{right:-10px;}
.slider-dots{display:flex;justify-content:center;gap:6px;margin-top:14px;}
.slider-dots span{width:8px;height:8px;border-radius:50%;background:#cbd5e1;cursor:pointer;transition:.2s;}
.slider-dots span.active{width:24px;border-radius:4px;background:var(--blue-deep);}
.lightbox{position:fixed;inset:0;background:rgba(0,0,0,.92);display:none;align-items:center;justify-content:center;z-index:300;padding:40px;}
.lightbox.open{display:flex;}
.lightbox img{max-width:90%;max-height:85vh;border-radius:14px;box-shadow:0 30px 80px rgba(0,0,0,.5);}
.lightbox .lb-close{position:absolute;top:20px;right:20px;width:44px;height:44px;border-radius:50%;background:#fff;border:none;cursor:pointer;font-size:20px;}
.lightbox .lb-cap{position:absolute;bottom:40px;left:0;right:0;text-align:center;color:#fff;font-size:16px;font-weight:600;}
.lightbox .lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:54px;height:54px;border-radius:50%;background:rgba(255,255,255,.2);border:none;color:#fff;font-size:22px;cursor:pointer;backdrop-filter:blur(8px);}
.lightbox .lb-nav:hover{background:rgba(255,255,255,.35);}
.lightbox .lb-nav.prev{left:30px;} .lightbox .lb-nav.next{right:30px;}

/* ====== Handling labels grid ====== */
.handling-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-top:4px;}
.handling-grid .h-lbl{display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 6px;border:2px solid var(--border);border-radius:10px;cursor:pointer;font-size:11px;font-weight:600;color:var(--muted);user-select:none;transition:.15s;text-align:center;}
.handling-grid .h-lbl input{display:none;}
.handling-grid .h-lbl i{font-size:13px;}
.handling-grid .h-lbl:hover{border-color:var(--blue-light);}
.handling-grid .h-lbl.on{color:#fff !important;border-color:transparent !important;box-shadow:0 4px 12px rgba(0,0,0,.15);}
@media(max-width:720px){.handling-grid{grid-template-columns:repeat(2,1fr);}}

/* ====== Signature pad ====== */
.sig-wrap{position:relative;border:2px dashed var(--border);border-radius:12px;background:#fafbfc;overflow:hidden;}
.sig-wrap canvas{display:block;width:100%;height:160px;cursor:crosshair;touch-action:none;}
.sig-baseline{position:absolute;bottom:14px;left:20px;right:20px;border-top:1px solid #cbd5e1;padding-top:4px;font-size:11px;color:var(--muted);pointer-events:none;}

/* ====== Printable shipping label ====== */
.label-sheet{background:#fff;border:2px solid #000;padding:14px;width:100%;max-width:520px;margin:0 auto;font-family:'Courier New',monospace;color:#000;}
.label-sheet .hdr{display:flex;justify-content:space-between;align-items:center;border-bottom:2px solid #000;padding-bottom:8px;margin-bottom:10px;}
.label-sheet .rof{font-size:28px;font-weight:800;letter-spacing:3px;}
.label-sheet .qr{width:120px;height:120px;float:right;}
.label-sheet .row{display:flex;justify-content:space-between;gap:12px;font-size:12px;margin-bottom:6px;}
.label-sheet .row b{text-transform:uppercase;font-size:10px;letter-spacing:1px;color:#555;display:block;}
.label-sheet .barcode{font-family:'Libre Barcode 128','Courier New',monospace;font-size:48px;text-align:center;letter-spacing:0;line-height:1;margin:6px 0;}
.label-sheet .handling-row{display:flex;gap:4px;flex-wrap:wrap;margin-top:8px;border-top:1px dashed #666;padding-top:8px;}
.label-sheet .handling-row .h{padding:4px 8px;border-radius:4px;font-size:11px;font-weight:700;color:#fff;letter-spacing:.5px;text-transform:uppercase;}
@media print{
  body *{visibility:hidden;}
  .label-sheet, .label-sheet *{visibility:visible;}
  .label-sheet{position:absolute;left:0;top:0;width:100%;max-width:none;border:none;}
  .modal{position:static;background:none;padding:0;}
  .modal-inner{box-shadow:none;padding:0;max-width:none;}
  .modal-inner > :not(.label-sheet){display:none !important;}
}


/* ====== Top contact bar ====== */
.contact-bar{background:#02172e;color:#fff;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.08);font-size:12px;}
.contact-bar a{transition:.2s;}
.contact-bar a:hover{color:var(--gold) !important;opacity:1 !important;}

/* Global search in the top contact bar */
.topbar-search{position:relative;display:flex;align-items:center;flex:0 1 360px;min-width:200px;max-width:420px;margin-left:auto;}
.topbar-search > i{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:rgba(255,255,255,.55);font-size:11px;pointer-events:none;}
.topbar-search input{flex:1;padding:6px 36px 6px 30px;border:1px solid rgba(255,255,255,.12);border-radius:99px;background:rgba(255,255,255,.06);color:#fff;font-family:inherit;font-size:12px;outline:none;transition:.2s;}
.topbar-search input::placeholder{color:rgba(255,255,255,.45);}
.topbar-search input:focus{background:rgba(255,255,255,.12);border-color:var(--gold);}
.topbar-search-mic{position:absolute;right:5px;top:50%;transform:translateY(-50%);width:22px;height:22px;border-radius:50%;border:none;background:transparent;color:rgba(255,255,255,.55);cursor:pointer;font-size:11px;display:grid;place-items:center;transition:.18s;padding:0;}
.topbar-search-mic:hover{background:rgba(255,205,60,.18);color:var(--gold);}
.topbar-search-mic.listening{background:#fee2e2;color:#dc2626;animation:micPulse 1.1s ease-in-out infinite;}
.topbar-search .results{position:absolute;top:calc(100% + 6px);left:0;right:0;min-width:300px;background:#fff;border-radius:12px;box-shadow:0 18px 50px rgba(0,0,0,.3);max-height:380px;overflow-y:auto;display:none;z-index:200;}
.topbar-search .results.open{display:block;}
.topbar-search .results a{display:flex;gap:10px;padding:10px 12px;border-bottom:1px solid #f1f5f9;color:var(--ink);font-size:13px;text-decoration:none;}
.topbar-search .results a:hover{background:#eff6ff;color:var(--blue-deep);}
.topbar-search .results a i{color:var(--blue-light);width:18px;}
.topbar-search .results .none{padding:14px;text-align:center;color:var(--muted);font-size:13px;}
@media (max-width:720px){
  .topbar-search{flex:1 1 auto;min-width:120px;max-width:none;margin-left:0;order:99;width:100%;}
}
@media(max-width:800px){
  .contact-bar .container > div:first-child > *:nth-child(n+4){display:none;}
}

/* ====== Marketing module ====== */
.mkt-kpi{background:#fff;padding:16px;border-radius:14px;border:1px solid var(--border);}
.mkt-kpi .n{font-size:24px;font-weight:800;color:var(--blue-deep);}
.mkt-kpi .l{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:1px;}
.mkt-kpi .chg{font-size:12px;font-weight:600;margin-top:4px;}
.mkt-kpi .chg.up{color:#10b981;} .mkt-kpi .chg.down{color:#ef4444;}
.camp-row{padding:12px;border-radius:10px;background:#f8fafc;border:1px solid var(--border);margin-bottom:8px;display:grid;grid-template-columns:36px 1fr auto auto;gap:12px;align-items:center;}
.camp-row .ic{width:36px;height:36px;border-radius:10px;color:#fff;display:grid;place-items:center;}
.coupon-row{display:flex;justify-content:space-between;align-items:center;padding:12px;border:1px dashed var(--blue-light);border-radius:10px;background:#eff6ff;margin-bottom:8px;}
.coupon-row code{background:#0b4f94;color:#fff;padding:4px 10px;border-radius:6px;font-family:'Courier New',monospace;font-weight:700;letter-spacing:1px;}
.mkt-tabs{display:flex;gap:4px;background:#f1f5f9;padding:4px;border-radius:12px;margin-bottom:18px;overflow-x:auto;}
.mkt-tabs button{padding:10px 16px;border:none;background:none;border-radius:8px;font-family:inherit;font-weight:600;font-size:13px;cursor:pointer;color:var(--muted);white-space:nowrap;}
.mkt-tabs button.active{background:#fff;color:var(--blue-deep);box-shadow:0 2px 6px rgba(0,0,0,.06);}
.seg-card{padding:14px;border-radius:12px;border:1px solid var(--border);background:#fff;display:flex;justify-content:space-between;align-items:center;}
.seg-card b{color:var(--blue-deep);}
.seg-card .cnt{background:var(--grad-ocean);color:#fff;padding:4px 12px;border-radius:999px;font-size:12px;font-weight:700;}

/* Align hero badge horizontally with the "Instant Quote" h3 inside the quote card */
.hero-grid > div:first-child > .eyebrow:first-child{
  margin-top:16px !important;   /* matches .quote-glass padding-top */
  margin-bottom:8px !important; /* tighter spacing below so h1 moves up */
}
.hero-grid > div:first-child > h1{margin-top:0 !important;}
.hero-grid > div:first-child > p.lead{margin-top:8px !important;margin-bottom:18px !important;}

/* ===== COMPACT GLASS INSTANT QUOTE ===== */
.quote-glass{
  padding:16px 18px;
  background:rgba(255,255,255,.72);
  backdrop-filter:blur(18px) saturate(160%);
  -webkit-backdrop-filter:blur(18px) saturate(160%);
  border:1px solid rgba(255,255,255,.45);
  box-shadow:0 20px 50px -20px rgba(10,30,80,.35), inset 0 1px 0 rgba(255,255,255,.6);
  border-radius:16px;
  max-width:380px;
  margin-left:auto;
  font-size:13px;
  position:relative;
  overflow:hidden;
}
.quote-glass::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(135deg,rgba(30,136,229,.08),rgba(255,205,60,.06) 60%,transparent);
  border-radius:inherit;
}
.quote-glass > *{position:relative;}
.quote-glass .qg-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:10px;}
.quote-glass h3{color:var(--blue-deep);font-size:17px;margin:0 0 2px;font-weight:800;letter-spacing:-.2px;}
.quote-glass .qg-head p{color:var(--muted);font-size:11.5px;margin:0;}
.qg-badge{background:linear-gradient(135deg,var(--gold),#ffb300);color:#4a2c00;font-size:10px;font-weight:800;padding:4px 8px;border-radius:999px;text-transform:uppercase;letter-spacing:.6px;white-space:nowrap;box-shadow:0 4px 10px -3px rgba(255,179,0,.6);}
.qg-tabs{display:flex;gap:3px;background:rgba(241,245,249,.7);padding:3px;border-radius:9px;margin-bottom:10px;}
.qg-tabs .qtab{flex:1;padding:6px 4px;border:none;background:transparent;border-radius:6px;font-weight:600;font-size:11.5px;cursor:pointer;color:var(--muted);font-family:inherit;transition:all .15s;}
.qg-tabs .qtab.active{background:#fff;color:var(--blue-deep);box-shadow:0 2px 6px rgba(0,0,0,.08);}
.qg-tabs .qtab i{margin-right:3px;font-size:11px;}
.qg-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:8px;}
.qg-row:has(> .qg-field:nth-child(3)){grid-template-columns:repeat(3,1fr);}
.qg-field.qg-2{grid-column:span 1;}
.qg-row:has(> .qg-field.qg-2){grid-template-columns:2fr 1fr;}
.qg-field label{display:block;font-size:10px;font-weight:700;color:var(--muted);margin-bottom:2px;text-transform:uppercase;letter-spacing:.5px;}
.qg-field select,.qg-field input,.qg-field textarea{
  width:100%;padding:7px 9px;border:1px solid rgba(203,213,225,.7);border-radius:7px;font-size:12.5px;
  background:rgba(255,255,255,.88);font-family:inherit;color:var(--ink);
  transition:border-color .15s, box-shadow .15s;
}
.qg-field select option{color:var(--ink);background:#fff;}
.qg-field select:focus,.qg-field input:focus,.qg-field textarea:focus{
  outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,136,229,.15);
}
.qg-more{margin:6px 0 8px;font-size:12px;}
.qg-more summary{cursor:pointer;color:var(--blue);font-weight:600;font-size:11.5px;padding:4px 0;list-style:none;user-select:none;}
.qg-more summary::-webkit-details-marker{display:none;}
.qg-more summary i{margin-right:4px;transition:transform .2s;}
.qg-more[open] summary i{transform:rotate(45deg);color:#dc2626;}
.qg-btn{margin-top:4px;padding:10px;font-size:13px;font-weight:700;border-radius:9px;}
.qg-result{margin-top:10px;padding:10px 12px;border-radius:10px;background:linear-gradient(135deg,rgba(236,253,245,.85),rgba(240,253,250,.85));border:1px dashed #10b981;}
.qg-rlabel{font-size:10px;color:#047857;text-transform:uppercase;letter-spacing:1px;font-weight:700;}
.qg-rprice{font-size:22px;font-weight:800;color:#065f46;line-height:1.1;}
.qg-reta{font-size:11px;color:#047857;}
.qg-rbreak{font-size:10.5px;color:#065f46;margin-top:4px;opacity:.85;}
.qg-result .btn{margin-top:6px;}
.qg-disc{margin-top:8px;padding:7px 9px;background:rgba(254,243,199,.75);border-left:3px solid var(--gold);border-radius:6px;font-size:10px;color:#78350f;line-height:1.45;}

/* Mobile: full width */
@media (max-width: 760px){
  .quote-glass{max-width:none;margin-left:0;}
}

/* ===== Responsive nav — drop overflowing items in priority order =====
   (the base .nav / .nav-links / .nav-actions sizing is set higher up;
   the rules below were redundant and have been removed) */

@media(max-width:1400px){
  #curSwitch{display:none;}
  .nav-links{gap:14px;}
  .nav-links a{font-size:13.5px;}
}
@media(max-width:1300px){
  .nav-actions .lang-toggle{display:none;}
  .nav-actions{gap:6px;}
}
@media(max-width:1200px){
  /* Collapse Login text → icon-only */
  .nav-actions .btn-outline.btn-sm{padding:8px 10px;}
  .nav-actions .btn-outline.btn-sm span{display:none;}
  .brand-link img{height:54px;max-width:180px;}
}
@media(max-width:1100px){
  /* Drop Book Pickup label (icon only) */
  .nav-actions .btn-pickup span{display:none;}
  .nav-actions .btn-primary.btn-sm span{display:none;}
  .nav-actions .btn-pickup,
  .nav-actions .btn-primary.btn-sm{padding:8px 10px;}
}
@media(max-width:1024px){
  /* Tighten link spacing further but KEEP nav-links visible */
  .nav-links{gap:10px;}
  .nav-links a{font-size:12.5px;}
  .nav-links a i{display:none;} /* drop icons to save space, keep text */
}
@media(max-width:880px){
  /* Mobile hamburger menu — optimized for touch */
  .nav-links{display:none;position:fixed;top:60px;left:0;right:0;bottom:0;background:#fff;flex-direction:column;gap:0;padding:8px;box-shadow:0 10px 30px rgba(0,0,0,.15);z-index:115;overflow-y:auto;border-radius:0;}
  .nav-links.open{display:flex;}
  .nav-links a{padding:14px 16px;font-size:15px;border-radius:8px;margin-bottom:4px;color:var(--ink);font-weight:600;transition:.15s;}
  .nav-links a:hover{background:#f1f5f9;color:var(--blue-light);}
  .nav-links a i{display:inline-flex;width:20px;font-size:15px;text-align:center;margin-right:4px;color:var(--blue);}
  .hamburger{display:inline-flex;flex-shrink:0;}
}
@media(max-width:860px){
  .brand-link img{height:52px;max-width:180px;}
  .nav-search{display:none;}
}
@media(max-width:520px){
  .brand-link img{height:44px;max-width:140px;}
  .user-chip b{display:none;}
}

/* ===== Services section — smooth reveal + richer cards ===== */
.services-sec{background:#fff;padding:56px 0;position:relative;}
.services-sec::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(800px 300px at 15% 0%, rgba(30,136,229,.06), transparent 60%),
             radial-gradient(600px 260px at 90% 100%, rgba(255,179,0,.06), transparent 60%);
}
.services-sec > .container{position:relative;}
.svc-grid{
  display:grid;grid-template-columns:repeat(4,1fr);gap:22px;
  margin-top:10px;
}
.svc-card{
  position:relative;display:block;text-align:left;text-decoration:none;color:inherit;
  background:#fff;border-radius:18px;border:1px solid #eef2f7;
  box-shadow:0 4px 20px rgba(0,0,0,.05);
  padding:24px 22px 52px;
  overflow:hidden;
  transition:transform .55s cubic-bezier(.2,.8,.2,1), box-shadow .45s, border-color .3s;
  isolation:isolate;
}
.svc-card::before{
  content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:linear-gradient(90deg,var(--g1,#0b4f94),var(--g2,#00c6d7));
  transform:scaleX(0);transform-origin:left;
  transition:transform .6s cubic-bezier(.2,.8,.2,1);
}
.svc-card::after{
  content:"";position:absolute;inset:0;border-radius:inherit;z-index:-1;
  background:linear-gradient(135deg, rgba(var(--g1-rgb,11,79,148),.0), rgba(var(--g1-rgb,11,79,148),.0));
  opacity:0;transition:opacity .4s;
}
.svc-card:hover{
  transform:translateY(-6px);
  box-shadow:0 22px 45px -18px rgba(10,30,80,.28);
  border-color:transparent;
}
.svc-card:hover::before{transform:scaleX(1);}
.svc-card:hover .svc-ico{transform:scale(1.06) rotate(-4deg);box-shadow:0 12px 24px -8px rgba(0,0,0,.25);}
.svc-card:hover .svc-arrow{transform:translateX(4px);opacity:1;background:linear-gradient(135deg,var(--g1),var(--g2));color:#fff;}
.svc-ico{
  width:54px;height:54px;border-radius:14px;
  background:linear-gradient(135deg,var(--g1,#0b4f94),var(--g2,#00c6d7));
  color:#fff;display:grid;place-items:center;font-size:22px;margin-bottom:14px;
  transition:transform .5s cubic-bezier(.2,.8,.2,1), box-shadow .4s;
  box-shadow:0 6px 14px -4px rgba(0,0,0,.18);
}
.svc-card h3{color:var(--blue-deep);font-size:17px;margin-bottom:6px;font-weight:700;letter-spacing:-.2px;}
.svc-card p{color:var(--muted);font-size:13.5px;line-height:1.55;margin:0;}
.svc-pill{font-size:10px;background:var(--green);color:#fff;padding:2px 8px;border-radius:999px;margin-left:4px;vertical-align:middle;font-weight:700;letter-spacing:.5px;}
.svc-arrow{
  position:absolute;right:18px;bottom:16px;width:32px;height:32px;border-radius:50%;
  background:#f1f5f9;color:var(--blue-deep);
  display:grid;place-items:center;font-size:12px;
  opacity:.75;transition:transform .35s cubic-bezier(.2,.8,.2,1), background .3s, color .3s, opacity .3s;
}

/* ===== Smooth on-scroll reveal (used by .reveal) ===== */
.reveal{
  opacity:0;
  transform:translateY(28px);
  transition:opacity .8s cubic-bezier(.2,.8,.2,1), transform .8s cubic-bezier(.2,.8,.2,1);
  transition-delay:var(--d, 0s);
  will-change:opacity, transform;
}
.reveal.in{opacity:1;transform:translateY(0);}
@media (prefers-reduced-motion: reduce){
  .reveal{opacity:1;transform:none;transition:none;}
  .svc-card{transition:none;}
  .svc-card:hover{transform:none;}
}
@media(max-width:960px){ .svc-grid{grid-template-columns:repeat(2,1fr);} }
@media(max-width:540px){ .svc-grid{grid-template-columns:1fr;} }

/* ===== WhatsApp button in header nav ===== */
.btn-wa{
  background:linear-gradient(135deg,#25d366,#128c7e);
  color:#fff \!important;
  border:none;
  box-shadow:0 4px 12px -2px rgba(37,211,102,.5);
  transition:transform .2s, box-shadow .2s;
  font-size:18px;
  position:relative;
}
.btn-wa:hover{
  transform:translateY(-2px) scale(1.06);
  box-shadow:0 8px 20px -4px rgba(37,211,102,.7);
}
.btn-wa::after{
  content:"";position:absolute;inset:-4px;border-radius:50%;
  background:rgba(37,211,102,.35);
  z-index:-1;
  animation:wa-pulse 2.2s ease-out infinite;
}
@keyframes wa-pulse{
  0%{transform:scale(.95);opacity:.7;}
  70%{transform:scale(1.35);opacity:0;}
  100%{transform:scale(1.35);opacity:0;}
}
@media (prefers-reduced-motion: reduce){
  .btn-wa::after{animation:none;display:none;}
}

/* ===== Admin top menu bar ===== */
.admin-topbar{
  display:flex;justify-content:space-between;align-items:center;gap:12px;
  background:#fff;
  padding:10px 18px;
  border-radius:14px;
  margin-bottom:18px;
  box-shadow:0 4px 14px -6px rgba(4,44,84,.15);
  border:1px solid var(--border);
  flex-wrap:wrap;
  position:sticky;top:12px;z-index:50;
  backdrop-filter:blur(12px);
}
.admin-topbar-left,.admin-topbar-right{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.admin-topbar a, .admin-topbar .tb-btn{
  display:inline-flex;align-items:center;gap:7px;
  padding:8px 14px;border-radius:10px;
  font-size:13px;font-weight:600;
  color:var(--muted);
  transition:background .2s, color .2s, transform .2s;
  font-family:inherit;border:none;background:transparent;cursor:pointer;
}
.admin-topbar a:hover, .admin-topbar .tb-btn:hover{
  background:#f1f5f9;color:var(--blue-deep);
}
.admin-topbar a i{font-size:14px;color:var(--blue);}

/* Top-bar dropdown */
.admin-topbar .tb-dd{position:relative;}
.admin-topbar .tb-dd > a{cursor:pointer;}
.admin-topbar .tb-dd-menu{
  display:none;position:absolute;top:calc(100% + 6px);left:0;
  background:#fff;border:1px solid var(--border);border-radius:12px;
  box-shadow:0 18px 40px rgba(2,28,54,.18);
  padding:6px;min-width:220px;z-index:200;
}
.admin-topbar .tb-dd.open .tb-dd-menu{display:block;}
.admin-topbar .tb-dd-menu a{
  display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:8px;
  font-size:13px;color:var(--ink);white-space:nowrap;
}
.admin-topbar .tb-dd-menu a:hover{background:#f1f5f9;color:var(--blue-deep);}
.admin-topbar .tb-dd-menu a i{width:16px;text-align:center;color:var(--blue);}
.admin-topbar .tb-wa{
  background:linear-gradient(135deg,#25d366,#128c7e);
  color:#fff \!important;
  padding:8px 12px;border-radius:999px;
  box-shadow:0 4px 10px -2px rgba(37,211,102,.45);
}
.admin-topbar .tb-wa i{color:#fff;font-size:16px;}
.admin-topbar .tb-wa:hover{transform:translateY(-1px);}
.admin-topbar .tb-call{
  background:var(--blue-deep);color:#fff \!important;
  padding:8px 12px;border-radius:999px;
}
.admin-topbar .tb-call i{color:#fff;font-size:14px;}
.admin-topbar .tb-btn{background:#f1f5f9;}

@media(max-width:860px){
  .admin-topbar{padding:8px 10px;gap:4px;}
  .admin-topbar a span{display:none;}
  .admin-topbar a,.admin-topbar .tb-btn{padding:8px 10px;}
  .admin-topbar a i{font-size:15px;}
}

/* ===== Theme picker — row layout + mode buttons ===== */
.theme-pick{min-width:110px;}
.theme-pick .tp-label{font-size:10px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:1px;padding:4px 4px 2px;}
.theme-pick .tp-row{display:flex;gap:6px;padding:0 2px 6px;}
.theme-pick .tp-row:last-child{padding-bottom:0;}
.theme-pick .tp-mode{width:36px;height:36px;border-radius:10px;border:2px solid transparent;cursor:pointer;display:grid;place-items:center;font-size:15px;transition:.2s;}
.theme-pick .tp-light{background:#fef3c7;color:#b45309;}
.theme-pick .tp-dark{background:#1e293b;color:#fbbf24;}
.theme-pick .tp-mode.active{border-color:var(--blue-deep);transform:scale(1.05);}

/* ===== DARK MODE ===== */
html[data-mode="dark"]{
  --bg:#0b1220;
  --ink:#e6edf7;
  --muted:#94a3b8;
  --border:#1e2a44;
  --white:#152036;
  --shadow:0 20px 60px -15px rgba(0,0,0,.6);
}
html[data-mode="dark"] body{background:#0b1220;color:#e6edf7;}
html[data-mode="dark"] .card,
html[data-mode="dark"] .quote-glass,
html[data-mode="dark"] .kpi,
html[data-mode="dark"] .mkt-kpi,
html[data-mode="dark"] .seg-card,
html[data-mode="dark"] .svc-card,
html[data-mode="dark"] .camp-row,
html[data-mode="dark"] .coupon-row{
  background:#152036;color:#e6edf7;border-color:#1e2a44;
}
html[data-mode="dark"] .quote-glass{background:rgba(21,32,54,.82);border-color:rgba(255,255,255,.08);}
html[data-mode="dark"] .qg-field select,
html[data-mode="dark"] .qg-field input,
html[data-mode="dark"] .qg-field textarea,
html[data-mode="dark"] .field input,
html[data-mode="dark"] .field select,
html[data-mode="dark"] .field textarea,
html[data-mode="dark"] input[type="text"],
html[data-mode="dark"] input[type="email"],
html[data-mode="dark"] input[type="password"],
html[data-mode="dark"] input[type="number"],
html[data-mode="dark"] input[type="search"],
html[data-mode="dark"] input[type="tel"],
html[data-mode="dark"] input[type="date"],
html[data-mode="dark"] input[type="time"],
html[data-mode="dark"] textarea,
html[data-mode="dark"] select{
  background:#0f1a30;color:#e6edf7;border-color:#2a3858;
}
html[data-mode="dark"] .qg-tabs{background:rgba(15,26,48,.7);}
html[data-mode="dark"] .qg-tabs .qtab{color:#94a3b8;}
html[data-mode="dark"] .qg-tabs .qtab.active{background:#1e2a44;color:#fff;}
html[data-mode="dark"] .qg-disc{background:rgba(120,53,15,.25);color:#fcd34d;}
html[data-mode="dark"] .qg-more summary{color:#60a5fa;}
html[data-mode="dark"] .header{background:rgba(11,18,32,.82);border-color:rgba(255,255,255,.05);}
html[data-mode="dark"] .header::before{opacity:.12;}
html[data-mode="dark"] .nav-links a{color:#cbd5e1;}
html[data-mode="dark"] .nav-links a i{color:#60a5fa;}
html[data-mode="dark"] .nav-links a:hover,
html[data-mode="dark"] .nav-links a:hover i{color:#93c5fd;}
html[data-mode="dark"] .user-chip{background:#1e293b;}
html[data-mode="dark"] .user-chip b{color:#e6edf7;}
html[data-mode="dark"] .user-chip:hover{background:#2a3858;}
html[data-mode="dark"] .user-menu{background:#152036;}
html[data-mode="dark"] .user-menu a{color:#e6edf7;}
html[data-mode="dark"] .user-menu a:hover{background:#1e2a44;}
html[data-mode="dark"] .user-menu a i{color:#94a3b8;}
html[data-mode="dark"] .nav-search input{background:#0f1a30;color:#e6edf7;border-color:#2a3858;}
html[data-mode="dark"] .nav-search .results{background:#152036;}
html[data-mode="dark"] .nav-search .results a{border-bottom-color:#1e2a44;color:#e6edf7;}
html[data-mode="dark"] .nav-search .results a:hover{background:#1e2a44;}
html[data-mode="dark"] .admin-topbar{background:#152036;border-color:#1e2a44;}
html[data-mode="dark"] .admin-topbar a{color:#cbd5e1;}
html[data-mode="dark"] .admin-topbar a:hover,
html[data-mode="dark"] .admin-topbar .tb-btn:hover{background:#1e2a44;color:#fff;}
html[data-mode="dark"] .admin-topbar .tb-btn{background:#1e2a44;color:#cbd5e1;}
html[data-mode="dark"] .side{background:#050a18;}
html[data-mode="dark"] .services-sec,
html[data-mode="dark"] section{background:#0b1220 \!important;}
html[data-mode="dark"] section[style*="background:#fff"]{background:#0b1220 \!important;}
html[data-mode="dark"] .svc-card h3,
html[data-mode="dark"] .page-head h1,
html[data-mode="dark"] .card h3,
html[data-mode="dark"] .sect-title{color:#e6edf7;}
html[data-mode="dark"] .svc-card p,
html[data-mode="dark"] .sect-head p{color:#94a3b8;}
html[data-mode="dark"] .svc-arrow{background:#1e2a44;color:#e6edf7;}
html[data-mode="dark"] .contact-bar{background:#050a18;}
html[data-mode="dark"] .btn-outline{background:#152036;color:#e6edf7;border-color:#60a5fa;}
html[data-mode="dark"] .btn-pickup{background:#128c7e;}
html[data-mode="dark"] .promo-bar{background:linear-gradient(90deg,#020617,#0f172a 40%,#7c2d12 80%,#78350f);}
html[data-mode="dark"] .modal-inner{background:#152036;color:#e6edf7;}
html[data-mode="dark"] .notif-panel{background:#152036;color:#e6edf7;}
html[data-mode="dark"] .theme-pick{background:#152036;color:#e6edf7;}
html[data-mode="dark"] .theme-pick .tp-label{color:#94a3b8;}
html[data-mode="dark"] .qg-result{background:linear-gradient(135deg,rgba(6,95,70,.35),rgba(4,78,99,.35));}
html[data-mode="dark"] .qg-result .qg-rlabel,
html[data-mode="dark"] .qg-result .qg-rprice,
html[data-mode="dark"] .qg-result .qg-reta{color:#a7f3d0;}

/* Smooth transition into/out of dark mode */
html,body,.card,.header,.side,.quote-glass,.svc-card,.admin-topbar,section{
  transition:background-color .3s ease, color .3s ease, border-color .3s ease;
}

/* ===== Contrast fixes & theme-tinted backgrounds ===== */

/* Hero trust-row: ensure white text is always legible over slideshow */
.hero .trust-row,
.hero .trust-item{color:#fff;}
.hero .trust-item{text-shadow:0 2px 6px rgba(4,44,84,.55);}
.hero .trust-item i{background:rgba(0,0,0,.35);backdrop-filter:blur(4px);}

/* Ensure all quote card text is dark on the frosted glass */
.quote-glass,
.quote-glass h3,
.quote-glass p,
.quote-glass .qg-head p,
.quote-glass label,
.quote-glass select,
.quote-glass input,
.quote-glass textarea{
  color:var(--ink);
}
.quote-glass .qg-head p{color:var(--muted);}
.quote-glass label{color:var(--muted);}

/* Service-card body text guaranteed readable */
.svc-card h3{color:var(--blue-deep);}
.svc-card p{color:var(--muted);}

/* Tint the body background per color theme so cards stand out & the site feels themed */
html[data-theme="ocean"][data-mode="light"],
html[data-theme="ocean"]:not([data-mode]){
  --bg:#e8f3ff;
}
html[data-theme="ocean"][data-mode="light"] body,
html[data-theme="ocean"]:not([data-mode]) body{
  background:
    radial-gradient(1200px 500px at 85% -10%, rgba(0,198,215,.18), transparent 60%),
    radial-gradient(900px 500px at -10% 110%, rgba(30,136,229,.16), transparent 60%),
    linear-gradient(180deg,#eaf4ff 0%, #dff0ff 100%);
  background-attachment:fixed;
}

html[data-theme="sunset"][data-mode="light"]{
  --bg:#fff5eb;
}
html[data-theme="sunset"][data-mode="light"] body{
  background:
    radial-gradient(1100px 460px at 90% -10%, rgba(252,211,77,.28), transparent 60%),
    radial-gradient(800px 480px at -10% 110%, rgba(234,88,12,.16), transparent 60%),
    linear-gradient(180deg,#fff7ed 0%, #fef3e2 100%);
  background-attachment:fixed;
}

html[data-theme="jamaica"][data-mode="light"]{
  --bg:#ecfdf5;
}
html[data-theme="jamaica"][data-mode="light"] body{
  background:
    radial-gradient(1100px 460px at 90% -10%, rgba(251,191,36,.22), transparent 60%),
    radial-gradient(900px 500px at -10% 110%, rgba(5,150,105,.18), transparent 60%),
    linear-gradient(180deg,#f0fdf4 0%, #e0f5ea 100%);
  background-attachment:fixed;
}

/* Section backgrounds originally hard-coded to #fff — let them take the theme tint but stay crisp */
.services-sec{background:rgba(255,255,255,.62);backdrop-filter:blur(6px);}
html[data-mode="dark"] .services-sec{background:rgba(21,32,54,.62) \!important;}

/* Card, KPI, etc. text guaranteed legible (light mode) */
.card, .kpi, .mkt-kpi, .seg-card{color:var(--ink);}
.card h3, .kpi .v, .mkt-kpi .n, .page-head h1{color:var(--blue-deep);}

/* Ensure form inputs outside the quote card are also dark text */
input, select, textarea{color:var(--ink);}
html[data-mode="dark"] input,
html[data-mode="dark"] select,
html[data-mode="dark"] textarea{color:#e6edf7;}

/* Fix any "color:#fff" on components sitting on light sections */
.sect-head h2, .sect-title{color:var(--blue-deep);}


/* ===== Tax savings badge on hero + mailbox ===== */
.tax-save-badge{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:999px;background:linear-gradient(135deg,#10b981,#059669);color:#fff;font-weight:700;font-size:12px;letter-spacing:.5px;box-shadow:0 6px 14px -4px rgba(16,185,129,.45);margin-top:14px;}
.tax-save-badge i{font-size:14px;}

/* ===== Loyalty tier chip ===== */
.loyalty-tier{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;font-size:11px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;margin-left:6px;}
.loyalty-tier.bronze{background:#fef3c7;color:#b45309;}
.loyalty-tier.silver{background:#e2e8f0;color:#475569;}
.loyalty-tier.gold{background:#fde68a;color:#854d0e;}
.loyalty-tier.platinum{background:linear-gradient(135deg,#a7f3d0,#6ee7b7);color:#065f46;}

/* ===== Port sailing countdown banner ===== */
.port-cd{
  position:relative;z-index:5;
  background:linear-gradient(90deg,#042c54,#0b4f94 50%,#00c6d7);
  color:#fff;padding:10px 16px;
  display:flex;gap:14px;justify-content:center;align-items:center;
  font-size:13px;flex-wrap:wrap;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 2px 6px rgba(0,0,0,.08);
  border-bottom:1px solid rgba(255,255,255,.12);
}
.port-cd b{color:var(--gold);}
.port-cd .btn-sm{padding:5px 14px;font-weight:700;}
.port-cd > button:last-child{margin-left:4px;}
@media (max-width:680px){
  .port-cd{font-size:12px;padding:8px 12px;gap:10px;}
}

/* ===== Weather alert banner ===== */
.weather-banner{background:#fef3c7;border-left:4px solid #f59e0b;padding:10px 16px;display:flex;gap:10px;align-items:center;font-size:13px;color:#78350f;}

/* ===== Duty-calculator modal scoped styles ===== */
.duty-calc{max-width:560px;}
.duty-row{display:grid;grid-template-columns:1fr auto;gap:10px;margin-bottom:8px;padding:8px 12px;background:#f8fafc;border-radius:8px;font-size:13px;}
.duty-row .lbl{color:var(--muted);}
.duty-row .amt{font-weight:700;color:var(--blue-deep);}
.duty-total{background:var(--grad-ocean);color:#fff;padding:12px;border-radius:10px;margin-top:10px;}
.duty-total .amt{color:#fff;font-size:22px;}

/* ===== Rate comparison (ocean / air / express) ===== */
.rate-compare{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px;}
.rate-card{background:#fff;border:1.5px solid var(--border);border-radius:12px;padding:12px;cursor:pointer;transition:.2s;}
.rate-card:hover{border-color:var(--blue-light);transform:translateY(-2px);}
.rate-card.best{border-color:#10b981;box-shadow:0 6px 20px -6px rgba(16,185,129,.3);}
.rate-card .rc-tier{font-size:10px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:1px;}
.rate-card .rc-price{font-size:20px;font-weight:800;color:var(--blue-deep);margin:4px 0;}
.rate-card .rc-eta{font-size:11px;color:var(--muted);}
.rate-card .rc-badge{font-size:10px;background:#10b981;color:#fff;padding:2px 7px;border-radius:999px;font-weight:800;margin-top:4px;display:inline-block;}

/* ===== PWA install prompt ===== */
.pwa-prompt{position:fixed;bottom:88px;left:20px;right:20px;max-width:360px;margin:0 auto;background:#fff;border-radius:14px;box-shadow:0 20px 60px -10px rgba(0,0,0,.35);padding:14px;display:none;gap:10px;align-items:center;z-index:9000;border:1px solid var(--border);}
.pwa-prompt.show{display:flex;}
.pwa-prompt img{width:42px;height:42px;border-radius:10px;}
.pwa-prompt b{color:var(--blue-deep);font-size:13px;}
.pwa-prompt small{color:var(--muted);font-size:11px;display:block;}

/* ===== CONTRAST FIX
   Two issues this addresses:
   1. In DARK MODE, inline `style="color:#0f172a"` (or var(--blue-deep) in some places)
      kept text dark on a dark background.
   2. In LIGHT MODE, sections with dark backgrounds (.contact-bar, dark hero gradients,
      promo strips, dark footer cards) inherited dark text — invisible on dark bg.

   The fix forces a light text color on "dark surface" elements regardless of mode,
   and applies a stronger override in dark mode that also catches inline style="color:..."
   declarations through high-specificity selectors. */

/* === LIGHT MODE: force light text on known dark-bg surfaces === */
.contact-bar,
.contact-bar *:not(i):not(.fa-solid):not(.fa-brands):not([class*="fa-"]),
.hero,
/* .card is the site's white surface — the Instant Quote widget sits inside the
   hero on one, so forcing light text there produced white-on-white. Exclude
   card descendants from the dark-surface treatment. */
.hero h1:where(:not(.card *)), .hero p:where(:not(.card *)), .hero span:where(:not(.card *)), .hero a:not(.btn):where(:not(.card *)),
.bun-hero, .bun-hero *,
.bun-cta-dark, .bun-cta-dark *,
[style*="background:linear-gradient(135deg,#042c54"],
[style*="background:linear-gradient(135deg,#0b4f94"],
[style*="background:#042c54"],
[style*="background:#0b4f94"],
[style*="background:#0c2e54"]{
  color: #fff;
}
/* When a dark surface uses a muted-text element, give it a light-muted */
.contact-bar [style*="color:var(--muted)"],
.hero [style*="color:var(--muted)"]:where(:not(.card *)){
  color: rgba(255,255,255,.75) !important;
}
/* Light cards inside the hero keep dark text: the .hero{color:#fff} above
   would otherwise inherit into them for elements with no color of their own */
.hero .card{ color: var(--ink); }

/* === DARK MODE: hard override for any element that had an inline dark text color === */
html[data-mode="dark"] [style*="color:#0f172a"],
html[data-mode="dark"] [style*="color:#0b4f94"],
html[data-mode="dark"] [style*="color:#042c54"],
html[data-mode="dark"] [style*="color:var(--ink)"],
html[data-mode="dark"] [style*="color:var(--blue-deep)"],
html[data-mode="dark"] [style*="color:var(--blue-dark)"],
html[data-mode="dark"] [style*="color:#1f2937"],
html[data-mode="dark"] [style*="color:#1e293b"],
html[data-mode="dark"] [style*="color:#334155"],
html[data-mode="dark"] [style*="color:#475569"]{
  color: #e6edf7 !important;
}
/* Inline muted text in dark mode */
html[data-mode="dark"] [style*="color:var(--muted)"],
html[data-mode="dark"] [style*="color:#64748b"],
html[data-mode="dark"] [style*="color:#475569"]{
  color: #94a3b8 !important;
}
/* Inline white-bg surfaces should turn dark in dark mode */
html[data-mode="dark"] [style*="background:#fff"],
html[data-mode="dark"] [style*="background:white"],
html[data-mode="dark"] [style*="background-color:#fff"],
html[data-mode="dark"] [style*="background-color:white"]{
  background:#152036 !important;
  color:#e6edf7;
}
/* Tables in dark mode */
html[data-mode="dark"] table{ color:#e6edf7; }
html[data-mode="dark"] thead th{ background:#0f1a30; color:#94a3b8; border-bottom-color:#1e2a44; }
html[data-mode="dark"] tbody td{ border-bottom-color:#1e2a44; }
html[data-mode="dark"] tbody tr:hover{ background:rgba(255,255,255,.03); }
/* Common "card" headings often use color:var(--blue-deep) inline */
html[data-mode="dark"] h1, html[data-mode="dark"] h2, html[data-mode="dark"] h3,
html[data-mode="dark"] h4, html[data-mode="dark"] h5, html[data-mode="dark"] h6,
html[data-mode="dark"] b, html[data-mode="dark"] strong{
  color:#e6edf7;
}
/* Buttons that explicitly use dark backgrounds keep their light text */
html[data-mode="dark"] .btn-primary{ color:#fff !important; }
html[data-mode="dark"] .btn-outline{ color:#e6edf7 !important; border-color:#2a3858 !important; }
/* Subtle backgrounds with hardcoded light surface colors */
html[data-mode="dark"] [style*="background:#f1f5f9"],
html[data-mode="dark"] [style*="background:#f8fafc"],
html[data-mode="dark"] [style*="background:#f7fbff"],
html[data-mode="dark"] [style*="background:#eff6ff"],
html[data-mode="dark"] [style*="background:#dbeafe"]{
  background:#1e2a44 !important;
}
/* Links inline-styled to brand color need to stay readable */
html[data-mode="dark"] a[style*="color:var(--blue-deep)"],
html[data-mode="dark"] a[style*="color:#0b4f94"],
html[data-mode="dark"] a[style*="color:#042c54"]{
  color:#60a5fa !important;
}
/* End contrast fix */


/* ===== MOBILE DASHBOARD LAYOUT
   The default .dash uses a fixed 260px sidebar in a 2-column grid. On phones
   the sidebar swallowed the screen and the page panes (Pickups, Messages,
   Payments, etc.) had no room to render. Switch to a single column with the
   sidebar becoming a horizontal scroll-strip at the top. */
@media (max-width: 820px){
  .dash{
    display:block;
    grid-template-columns:1fr;
    min-height:auto;
  }
  .dash > aside.side{
    position:relative;
    height:auto;
    width:100%;
    padding:10px 12px;
    flex-direction:row;
    align-items:center;
    gap:12px;
    overflow:visible;
    box-shadow:0 4px 14px rgba(0,0,0,.18);
  }
  .dash > aside.side > .brand-link{
    flex:0 0 auto;
    padding:4px 8px;
  }
  .dash > aside.side > .brand-link img{ height:34px; max-width:110px; }
  .side-nav{
    flex-direction:row;
    gap:6px;
    margin-top:0;
    flex:1 1 auto;
    overflow-x:auto;
    overflow-y:visible;
    -webkit-overflow-scrolling:touch;
    padding-bottom:4px;
    scrollbar-width:thin;
  }
  .side-nav::-webkit-scrollbar{ height:4px; }
  .side-nav::-webkit-scrollbar-thumb{ background:rgba(255,255,255,.3); border-radius:2px; }
  .side-nav a{
    flex:0 0 auto;
    white-space:nowrap;
    padding:8px 12px;
    font-size:13px;
    border-radius:99px;
    background:rgba(255,255,255,.08);
  }
  .side-nav a i{ width:auto; }
  .side-nav a.active{ background:var(--grad-sunset); color:#3a2400; }
  .side-nav .nav-group{ display:contents; } /* flatten role-grouped <details> on mobile */
  .side-nav .nav-group summary{ display:none; }
  .side-foot{ display:none; }
  /* Main content area */
  .dash > main, .dash > .dash-main, .dash > section{
    width:100%;
    padding:14px;
    min-width:0;
  }
  .dash-page{ overflow-x:auto; }
  /* Hide page-head sub label clutter on tiny screens to save vertical room */
  .page-head{ flex-direction:column; align-items:flex-start; gap:4px; }
}


/* === White-button shading
   Any button with an effectively white/very-light background gets a small
   resting shadow so it pops off the page. Targets buttons that aren't already
   styled with a coloured background. */
button.btn:not(.btn-primary):not(.btn-dark):not(.btn-green):not(.btn-pickup):not(.btn-wa):not(.btn-ghost),
button.pos-btn.pos-btn-outline,
button[style*="background:#fff"],
button[style*="background-color:#fff"],
button[style*="background:white"],
button[style*="background-color:white"]{
  box-shadow:0 1px 3px rgba(15,23,42,.10), 0 1px 2px rgba(15,23,42,.05);
}
button.btn:not(.btn-primary):not(.btn-dark):not(.btn-green):not(.btn-pickup):not(.btn-wa):not(.btn-ghost):hover,
button.pos-btn.pos-btn-outline:hover,
button[style*="background:#fff"]:hover,
button[style*="background-color:#fff"]:hover,
button[style*="background:white"]:hover,
button[style*="background-color:white"]:hover{
  box-shadow:0 6px 16px rgba(15,23,42,.16), 0 2px 4px rgba(15,23,42,.08);
}
button.btn:not(.btn-primary):not(.btn-dark):not(.btn-green):not(.btn-pickup):not(.btn-wa):not(.btn-ghost):active,
button.pos-btn.pos-btn-outline:active{
  box-shadow:0 1px 2px rgba(15,23,42,.08);
}


/* === COLLAPSIBLE ADMIN SIDEBAR
   The .dash layout already docks .side to the left. Add a class on the
   ancestor when the user clicks the collapse button so the sidebar
   shrinks to icon-only width and the main content reflows. */
.dash{transition:grid-template-columns .25s ease;}
.dash.side-collapsed{grid-template-columns:64px 1fr;}
.dash.side-collapsed .side{padding:18px 8px;align-items:center;}

.dash.side-collapsed .side .brand-link{padding:6px;align-self:center;}
.dash.side-collapsed .side .brand-link::after{display:none;} /* hide the role tag chip */
.dash.side-collapsed .side .brand-link img{height:36px;max-width:48px;}
.dash.side-collapsed .side-nav a{
  justify-content:center;
  padding:10px 0;
  gap:0;
}
.dash.side-collapsed .side-nav a > span,
.dash.side-collapsed .side-nav a > .badge,
.dash.side-collapsed .side-nav a > #adChatBadge{display:none;}
.dash.side-collapsed .side-nav a > i{font-size:18px;width:auto;margin:0;}
.dash.side-collapsed .side-nav .nav-group > summary{
  justify-content:center;
  padding:8px 0;
}
.dash.side-collapsed .side-nav .nav-group > summary > span,
.dash.side-collapsed .side-nav .nav-group > summary > .chev{display:none;}
.dash.side-collapsed .side-nav .nav-group{padding-top:6px;}
/* Tooltip on hover when collapsed — show the link's title attribute */
.dash.side-collapsed .side-nav a:hover::after{
  content:attr(data-label);
  position:absolute;
  left:64px;
  background:#0f172a;color:#fff;padding:6px 12px;border-radius:6px;
  font-size:12px;font-weight:600;white-space:nowrap;
  box-shadow:0 6px 18px rgba(0,0,0,.25);
  z-index:9998;
  pointer-events:none;
}
.dash.side-collapsed .side-nav a{position:relative;}
/* The collapse toggle button itself */
.side-collapse-btn{
  position:absolute;top:14px;right:-13px;
  width:26px;height:26px;border-radius:50%;
  background:#fff;color:var(--blue-deep);
  border:2px solid var(--blue-deep);
  display:flex;align-items:center;justify-content:center;
  cursor:pointer;font-size:12px;font-weight:800;
  box-shadow:0 4px 12px rgba(0,0,0,.18);
  transition:transform .2s, background .15s;
  z-index:60;
}
.side-collapse-btn:hover{background:var(--blue-deep);color:#fff;}
.dash.side-collapsed .side-collapse-btn i{transform:rotate(180deg);}
.side{position:relative;}
/* On mobile (the existing rule already stacks the layout) — hide the desktop collapse button */
@media (max-width:820px){ .side-collapse-btn{display:none;} }

/* =========================================================================
   2026-05-07 — Home page rendering fixes
   1. Scrolling promo banner: pause on hover, accessibility for reduced motion,
      proper sizing on mobile so the ticker doesn't squish or overflow.
   2. Port sailing countdown banner: fix the flex spacing so the label,
      countdown, CTA and close button never collide; reserve a min-width for
      the time so its initial render doesn't collapse before tick() fills it.
   3. Instant Quote (quote-glass): tighten layout, prevent input zoom on iOS,
      stop tabs from overflowing, give the card a sensible width on tablets.
   ========================================================================= */

/* --- 1. PROMO TICKER --------------------------------------------------- */
.promo-bar{
  /* Was: padding:8px 24px — squished on phones. Use clamp + flex-wrap. */
  padding:8px clamp(10px, 3vw, 24px);
  flex-wrap:nowrap;
  min-height:36px;
}
.promo-bar > i{flex-shrink:0;}
.promo-bar .ticker{
  /* Force the ticker to take available space and clip cleanly. */
  flex:1 1 0;
  min-width:0;          /* allow shrinking inside flex */
  height:22px;
  display:flex;
  align-items:center;
  mask-image:linear-gradient(90deg, transparent 0, #000 18px, #000 calc(100% - 18px), transparent 100%);
  -webkit-mask-image:linear-gradient(90deg, transparent 0, #000 18px, #000 calc(100% - 18px), transparent 100%);
}
.promo-bar .ticker-track{
  gap:48px;
  align-items:center;
  /* Slow down a bit so it's actually readable. */
  animation-duration:38s;
}
/* Pause the scroll when the user is reading it. */
.promo-bar:hover .ticker-track,
.promo-bar:focus-within .ticker-track{ animation-play-state:paused; }
/* Respect reduced-motion preference. */
@media (prefers-reduced-motion: reduce){
  .promo-bar .ticker-track{ animation:none; transform:none; }
  .promo-bar .ticker{ overflow-x:auto; }
}
.promo-bar .ticker-track span{ line-height:1; }
.promo-bar .promo-cta{
  flex-shrink:0;
  font-size:12px;
  padding:5px 14px;
  box-shadow:0 2px 6px rgba(0,0,0,.18);
}
.promo-bar .promo-close{flex-shrink:0;padding:4px 8px;}
@media (max-width:760px){
  .promo-bar{gap:10px;font-size:12px;}
  .promo-bar .promo-cta span{display:none;}     /* arrow only on phone */
  .promo-bar .promo-cta{padding:6px 9px;}
}
@media (max-width:480px){
  .promo-bar > i:first-child{display:none;}     /* drop the bullhorn icon on tiny screens */
}

/* --- 2. PORT-CD SAILING COUNTDOWN ------------------------------------- */
.port-cd{
  /* Was: justify-content:center + flex-wrap:wrap — caused awkward stacks
     where the time label collapsed before tick() filled it. */
  padding:10px clamp(10px, 3vw, 22px);
  flex-wrap:wrap;
  gap:10px 16px;
  line-height:1.35;
}
.port-cd > i{flex-shrink:0;color:var(--gold);font-size:15px;}
.port-cd > span:first-of-type{
  /* The "Next sailing: <vessel>" label */
  flex:1 1 220px;
}
.port-cd #portCdTime{
  /* Reserve width so the empty initial render doesn't shrink to 0 and
     visually collide with the next element. */
  min-width:140px;
  display:inline-flex;
  align-items:center;
  font-variant-numeric:tabular-nums;
  white-space:nowrap;
}
.port-cd #portCdTime b{margin-right:6px;}
.port-cd > a.btn-sm{
  flex-shrink:0;
  white-space:nowrap;
}
.port-cd > button:last-child{
  background:rgba(255,255,255,.12) !important;
  border:1px solid rgba(255,255,255,.25) !important;
  color:#fff !important;
  width:24px;height:24px;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;
  font-size:14px;line-height:1;
  flex-shrink:0;
}
.port-cd > button:last-child:hover{background:rgba(255,255,255,.22) !important;}
@media (max-width:680px){
  .port-cd{justify-content:flex-start;}
  .port-cd > span:first-of-type{flex-basis:100%;}
  .port-cd #portCdTime{flex:1 1 auto;min-width:0;}
}

/* --- 3. INSTANT QUOTE (quote-glass) ----------------------------------- */
.quote-glass{
  /* Was: max-width:380px; — too cramped on tablet widths. */
  max-width:420px;
  width:100%;
}
.quote-glass .qg-tabs{
  flex-wrap:wrap;            /* let tabs wrap on narrow widths */
}
.quote-glass .qg-tabs .qtab{
  min-width:0;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
  padding:7px 6px;
  font-size:11.5px;
}
.quote-glass .qg-tabs .qtab i{margin-right:4px;}
/* Form fields: 16px on mobile prevents iOS auto-zoom. */
@media (max-width:760px){
  .quote-glass .qg-field input,
  .quote-glass .qg-field select,
  .quote-glass .qg-field textarea{
    font-size:16px;          /* iOS zoom guard */
    padding:9px 11px;
  }
  .quote-glass{
    max-width:none;
    margin:0 auto 14px;
  }
}
/* Service tier grid — stack to 2 cols on narrow widths so each tier remains
   readable rather than getting clipped. */
@media (max-width:760px){
  #qTierGrid{grid-template-columns:repeat(2,1fr) !important;}
}
/* Result card — give it a visible separator from the form even when the page
   is short. */
.qg-result{margin-top:14px;}
/* Photo upload area — keep buttons from blowing past the card edge. */
.q-upload{display:flex;flex-direction:column;gap:6px;}
.q-upload > div:first-child{flex-wrap:wrap;}

/* =========================================================================
   2026-05-07 — Auth pages mobile fix (login.html + signup.html + forgot-password)
   The .auth-wrap was a hard 2-column grid with 40-48px padding everywhere,
   which on phones (<= 760px viewport) forced the form off-screen and made
   the side image / 38px hero copy crowd the form. These rules collapse to
   a single-column flow with phone-friendly padding and font-sizes.
   ========================================================================= */
@media (max-width:900px){
  .auth-wrap{
    grid-template-columns:1fr;     /* stack instead of split */
    min-height:auto;               /* don't force 100vh — let content size naturally */
  }
  .auth-side{
    padding:24px 22px 28px;
    text-align:center;
  }
  .auth-side .brand-link img{height:46px;margin:0 auto;}
  .auth-side h2{
    font-size:24px;
    margin-top:14px;
    max-width:100%;
  }
  .auth-side p{margin-top:10px;font-size:13.5px;max-width:100%;}
  .auth-bullets{
    margin-top:18px;
    gap:10px;
    text-align:left;
    max-width:420px;
    margin-left:auto;
    margin-right:auto;
  }
  .auth-bullets div{font-size:13.5px;}
  .auth-bullets i{width:32px;height:32px;border-radius:8px;}
  /* Drop the © footer on phone — it just adds clutter at the seam. */
  .auth-side > div:last-child{display:none;}
  .auth-form{
    padding:26px 20px 36px;
    max-width:none;
    margin:0;
  }
  .auth-form h1{font-size:24px;}
  .auth-form .sub{margin-bottom:18px;font-size:13.5px;}
  /* Anti-zoom on iOS — inputs must be 16px to stop Safari auto-zooming. */
  .auth-form input,
  .auth-form select,
  .auth-form textarea{
    font-size:16px !important;
    box-sizing:border-box;
    width:100%;
    max-width:100%;
  }
  /* Social-login 4-button grid — 2x2 at this size, but the icons + text were
     overflowing because the buttons had no min-width:0. Force them to shrink. */
  .auth-form .btn{min-width:0;width:100%;justify-content:center;}
  .auth-form .btn-block{width:100%;}
  /* Privacy notice block — give it a tighter footprint on phone. */
  .auth-form .privacy-notice{
    padding:12px 14px;
    font-size:11.5px;
  }
  .auth-form .privacy-notice ul{margin-left:16px;}
}
@media (max-width:480px){
  .auth-side{padding:18px 16px 22px;}
  .auth-side h2{font-size:21px;}
  .auth-form{padding:22px 16px 32px;}
  .auth-form h1{font-size:21px;}
  /* Social-login buttons: collapse vertical on very narrow screens to avoid
     icon-only confusion. */
  .auth-form form + div + div[style*="grid-template-columns"]{
    grid-template-columns:1fr 1fr !important;
    gap:6px !important;
  }
}

/* Belt-and-braces: the auth pages don't have a viewport-overflow guard,
   and a single oversized child (e.g. an inline-styled div with fixed width)
   was pushing the document horizontal. Clamp on the body for these pages. */
body:has(> .auth-wrap){overflow-x:hidden;}
.auth-wrap, .auth-wrap *{max-width:100%;}
.auth-wrap input, .auth-wrap select, .auth-wrap textarea{max-width:100%;}

/* =========================================================================
   2026-05-07 — "Book a Free Pickup" + "Track a Shipment" tile mobile fix
   The two tiles in #pickup live in an inline 1fr 1fr grid with 26px padding
   and a 60x60 icon plus an arrow chevron, all flexed horizontally. On phones
   that overflows the viewport. Stack them, slim them down, and ensure the
   internal flex row wraps cleanly.

   Same treatment for the "How it works" four-column grid below it which
   also has no mobile breakpoint and gets cramped.
   ========================================================================= */
@media (max-width:760px){
  /* Override the inline grid-template-columns:1fr 1fr on #pickup section.
     Stack each tile (Book Free Pickup / Track a Shipment) on its own row
     and center it on the page. */
  #pickup .container{
    max-width:100% !important;
    padding:0 16px !important;
  }
  #pickup .container > div{
    display:flex !important;
    flex-direction:column !important;
    align-items:center !important;
    grid-template-columns:1fr !important;
    gap:12px !important;
  }
  #pickup a.card{
    padding:18px !important;
    width:100% !important;
    max-width:380px !important;
    margin:0 auto !important;
    box-sizing:border-box !important;
  }
  #pickup a.card > div{
    gap:12px !important;
  }
  #pickup a.card > div > div:first-child{
    /* The 60x60 icon block — shrink for phone */
    width:48px !important;
    height:48px !important;
    border-radius:11px !important;
    font-size:21px !important;
  }
  #pickup a.card h3{
    font-size:16px !important;
    margin-bottom:2px !important;
    line-height:1.25;
  }
  #pickup a.card p{
    font-size:12.5px !important;
    line-height:1.4;
    margin:0;
  }
  /* The trailing arrow chevron — keep it but reduce so the title line can
     breathe on a 360px screen. */
  #pickup a.card > div > i.fa-arrow-right{
    font-size:16px !important;
    flex-shrink:0;
    margin-left:auto;
  }
}
@media (max-width:420px){
  /* On the smallest phones, drop the chevron entirely — the whole tile is
     a clickable link, the arrow is decorative. */
  #pickup a.card > div > i.fa-arrow-right{display:none !important;}
  #pickup a.card{padding:14px !important;}
}

/* "How it works" four-column grid — also inline-styled and unresponsive. */
section h2.sect-title + * ~ div[style*="repeat(4,1fr)"],
section .sect-head + div[style*="repeat(4,1fr)"]{
  /* Selector targets the inline-styled grid that contains the 4 step cards. */
}
@media (max-width:900px){
  div[style*="grid-template-columns:repeat(4,1fr)"]{
    grid-template-columns:repeat(2,1fr) !important;
  }
}
@media (max-width:480px){
  div[style*="grid-template-columns:repeat(4,1fr)"]{
    grid-template-columns:1fr !important;
  }
}

/* =========================================================================
   2026-05-07 — Hero slider: single static image on mobile.
   The 4-image hero-fade slideshow runs a 28s cross-fade at full viewport
   on phones, which is heavy (4 background-image decodes + animation thread)
   and causes the hero to flash / shift between slides on slow networks.
   On mobile we hide all four <div class="slide"> overlays and just show
   the single base image painted on .hero-bg itself.
   ========================================================================= */
@media (max-width:760px){
  .hero-bg .slide{display:none !important;}
  /* Same image the desktop hero opens on — backdrop.jpg is an old banner with
     marketing text baked into the pixels, which read as ghost text under the
     live headline. The shorthand also drops background-attachment:fixed,
     which phones handle badly. */
  .hero-bg{
    background:url('../hero-ship.jpg') center/cover no-repeat;
  }
  /* Drop the floating decorative dots + the floating ship icon on mobile so
     the hero feels calmer and isn't competing with the static image. */
  .hero-deco{display:none !important;}
}

/* =========================================================================
   Coverage section — 3 columns × 2 rows for cities + Kingston full-width.
   Same arrangement on desktop AND mobile, just scaled padding/font on mobile.
   ========================================================================= */
@media (max-width:760px){
  section#coverage{
    padding:24px 0 !important;
    text-align:center !important;
  }
  section#coverage > .container{
    max-width:100% !important;
    padding:0 12px !important;
    margin:0 auto !important;
    box-sizing:border-box !important;
  }
  section#coverage > .container > .coverage-grid,
  section#coverage > .container > div[style*="grid-template-columns"]{
    display:grid !important;
    grid-template-columns:repeat(3, minmax(0, 1fr)) !important;
    gap:6px !important;
    max-width:100% !important;
    width:100% !important;
    margin:0 auto !important;
    box-sizing:border-box !important;
  }
  section#coverage .card{
    padding:10px 4px !important;
    font-size:11px !important;
    line-height:1.25 !important;
    text-align:center !important;
    box-sizing:border-box !important;
  }
  section#coverage .card i{ margin-right:3px; font-size:10px; }
  /* Kingston tile spans the full row */
  section#coverage .card[style*="grid-column:1 / -1"],
  section#coverage .card[style*="span 4"]{
    grid-column:1 / -1 !important;
    font-size:12px !important;
    padding:11px 8px !important;
    text-align:center !important;
  }
}

/* =========================================================================
   2026-05-07 — Contact section ("Send us a message") mobile fit.
   The #contact section is an inline `grid-template-columns:1fr 1fr` with
   34px gap and no mobile breakpoint. On phones each column became ~150px
   wide and the contact info cards (long email + warehouse address) plus
   the form (24px card padding + 14px input padding) overflowed the viewport.
   ========================================================================= */
@media (max-width:760px){
  /* Stack the two-column contact grid */
  #contact > .container > div[style*="grid-template-columns:1fr 1fr"]{
    grid-template-columns:1fr !important;
    gap:18px !important;
  }
  /* Contact info cards — let long emails and addresses wrap */
  #contact a[style*="background:rgba(255,255,255,.08)"],
  #contact > .container > div > div > div[style*="background:rgba(255,255,255,.08)"]{
    padding:14px !important;
    gap:12px !important;
    align-items:flex-start !important;
  }
  #contact a > div:last-child,
  #contact > .container > div > div > div > div:last-child{
    min-width:0;       /* allow flex child to shrink */
    flex:1 1 auto;
    word-break:break-word;
    overflow-wrap:anywhere;
  }
  #contact a > div:last-child > div:last-child,
  #contact > .container > div > div > div > div > div:last-child{
    font-size:13.5px !important;
    line-height:1.35;
  }
  /* The 44x44 circular icon — keep it fixed-size but a touch smaller. */
  #contact a > div:first-child,
  #contact > .container > div > div > div > div:first-child{
    width:40px !important;
    height:40px !important;
    flex-shrink:0;
    font-size:16px !important;
  }
  /* The "Send us a message" form card */
  #contact form.card{
    padding:18px !important;
    box-sizing:border-box;
    width:100%;
    max-width:100%;
  }
  #contact form.card h3{font-size:18px;margin-bottom:4px;}
  #contact form.card p{font-size:12.5px;margin-bottom:12px;}
  /* Inputs stay 16px to kill iOS auto-zoom */
  #contact form.card .field input,
  #contact form.card .field select,
  #contact form.card .field textarea{
    font-size:16px !important;
    padding:11px 12px !important;
    box-sizing:border-box;
    width:100%;
    max-width:100%;
  }
  /* Name + Phone two-column row inside the form — stack on phone so the
     fields are wide enough to type into. */
  #contact form.card .row2{
    grid-template-columns:1fr !important;
    gap:0 !important;
  }
}
@media (max-width:420px){
  #contact form.card{padding:14px !important;}
}
/* Belt-and-braces: stop any oversized inline element inside #contact from
   forcing horizontal scroll on the whole page. */
#contact, #contact *{max-width:100%;}

/* =========================================================================
   2026-05-07 — Hero grid mobile stack.
   The hero is a `grid-template-columns:1.1fr 1fr` two-column with the headline
   + CTAs ("Book Free Pickup", "Get Instant Quote", "Sign Up") on the left
   and the Instant Quote card on the right. On phones the two columns squashed
   together and overflowed. Stack vertically: headline + CTAs ("book a shipment"
   tile) on top, Instant Quote card below.
   ========================================================================= */
@media (max-width:900px){
  .hero-grid{
    grid-template-columns:1fr !important;
    gap:24px !important;
    align-items:start !important;
  }
  /* Force the headline/CTA column to render first and the quote card second.
     order:1 / order:2 so even if the markup were reversed in another build
     the visual stack stays text-then-form. */
  .hero-grid > div:first-child{order:1;}
  .hero-grid > .quote-glass{order:2;width:100%;max-width:none;margin:0;}
  .hero{
    min-height:auto !important;     /* don't force 100vh on phones */
    padding:24px 0 28px !important;
    align-items:flex-start;
  }
  .hero h1{
    font-size:clamp(28px,7vw,40px) !important;
    margin-bottom:12px !important;
    line-height:1.1 !important;
  }
  .hero .lead{font-size:14.5px !important;line-height:1.45;margin-bottom:18px !important;}
  .hero-ctas{
    gap:8px !important;
    margin-bottom:18px !important;
  }
  .hero-ctas .btn{
    flex:1 1 100%;                   /* full-width CTA buttons on phone */
    justify-content:center;
    padding:12px 14px;
    font-size:14.5px;
  }
  /* Three trust labels (Licensed & Insured / Door-to-Door / 24/7 Support)
     must fit on ONE horizontal line on mobile — no wrapping, no overflow.
     Icons hidden so the three short text labels always squeeze onto one row. */
  html body .trust-row,
  html body .hero .trust-row{
    display:flex !important;
    flex-wrap:nowrap !important;
    flex-direction:row !important;
    gap:6px !important;
    justify-content:space-between !important;
    align-items:center !important;
    width:100% !important;
    max-width:100% !important;
    margin:8px 0 !important;
    padding:0 !important;
    overflow:hidden !important;
    box-sizing:border-box !important;
  }
  html body .trust-row .trust-item,
  html body .hero .trust-row .trust-item{
    flex:1 1 auto !important;
    min-width:0 !important;
    display:flex !important;
    flex-direction:row !important;
    gap:4px !important;
    align-items:center !important;
    justify-content:center !important;
    font-size:10px !important;
    line-height:1.2 !important;
    white-space:nowrap !important;
    overflow:hidden !important;
    text-overflow:ellipsis !important;
    text-shadow:0 1px 2px rgba(0,0,0,.6) !important;
  }
  /* Hide the badge icons on mobile so the text always fits. */
  html body .trust-row .trust-item i,
  html body .hero .trust-row .trust-item i{
    display:none !important;
  }
}
@media (max-width:480px){
  html body .trust-row{ gap:3px !important; margin:6px 0 !important; }
  html body .trust-row .trust-item{ font-size:9px !important; }
}
@media (max-width:360px){
  html body .trust-row .trust-item{ font-size:8.5px !important; }
}
@media (max-width:480px){
  .hero{padding:18px 0 22px !important;}
  .hero h1{font-size:26px !important;}
  .hero-ctas{gap:6px !important;}
}

/* =========================================================================
   2026-05-07 — Toasts/notifications stack on mobile + harder contact fix.
   ========================================================================= */

/* --- TOAST / NOTIFICATION STACK --------------------------------------- */
/* Existing rule: .toast-host { position:fixed; top:20px; right:20px;
   max-width:360px; } — on phones the right:20px + 360px cap could push the
   toasts off the side, and individual toasts could exceed the host width.
   On mobile, anchor the host to BOTH sides so it spans the screen, and
   stack each toast below the previous one. */
@media (max-width:760px){
  .toast-host{
    top:12px !important;
    right:12px !important;
    left:12px !important;
    max-width:none !important;
    width:auto !important;
    gap:8px !important;
    align-items:stretch !important;
  }
  .toast-host .toast{
    width:100% !important;
    max-width:100% !important;
    box-sizing:border-box;
    padding:12px 14px !important;
    border-radius:12px !important;
    animation:slidein-top .25s !important;
  }
  .toast-host .toast b{font-size:13.5px;}
  .toast-host .toast span{font-size:12.5px;line-height:1.35;}
  /* Bell notification panel — make it span ~the full viewport so it doesn't
     hang off the right edge on phones. */
  .notif-panel{
    position:fixed !important;
    top:60px !important;
    left:12px !important;
    right:12px !important;
    width:auto !important;
    max-width:none !important;
  }
}
@keyframes slidein-top{from{transform:translateY(-12px);opacity:0;}to{transform:translateY(0);opacity:1;}}

/* --- "SEND US A MESSAGE" CONTACT FORM — STRONGER MOBILE FIX ----------- */
/* The earlier contact rule depended on the inline-style attribute matching
   exactly, which is fragile across browsers. Use direct descendant selectors
   instead and force full overflow control on every nested element. */
@media (max-width:760px){
  /* Force the contact section's container to never overflow. */
  #contact{padding:32px 0 !important;}
  #contact > .container{
    padding-left:14px !important;
    padding-right:14px !important;
    max-width:100% !important;
    box-sizing:border-box !important;
    overflow:hidden !important;
  }
  /* The two-column grid (info cards | form) — stack regardless of inline style. */
  #contact > .container > div{
    display:flex !important;
    flex-direction:column !important;
    gap:14px !important;
    max-width:100% !important;
  }
  /* The contact info card column AND the form */
  #contact > .container > div > *{
    width:100% !important;
    max-width:100% !important;
    box-sizing:border-box !important;
  }
  /* Each contact info card (phone / email / warehouse / hours). */
  #contact > .container > div > div > a,
  #contact > .container > div > div > div{
    padding:13px !important;
    box-sizing:border-box;
    min-width:0 !important;
    overflow:hidden;
  }
  #contact a > div:last-child > div:last-child,
  #contact > .container > div > div > div > div:last-child > div:last-child{
    word-break:break-word !important;
    overflow-wrap:anywhere !important;
    font-size:13px !important;
    line-height:1.35 !important;
  }
  /* The form card itself */
  #contact form.card,
  #contact form{
    padding:16px !important;
    margin:0 !important;
    box-sizing:border-box !important;
    width:100% !important;
    max-width:100% !important;
  }
  #contact form h3{font-size:17px !important;margin-bottom:4px !important;}
  #contact form p{font-size:12.5px !important;margin-bottom:12px !important;}
  #contact form .field{margin-bottom:10px !important;}
  #contact form .field input,
  #contact form .field select,
  #contact form .field textarea{
    width:100% !important;
    max-width:100% !important;
    font-size:16px !important;          /* iOS zoom guard */
    padding:11px 12px !important;
    box-sizing:border-box !important;
    border-radius:9px !important;
  }
  /* Stack the Name + Phone row */
  #contact form .row2{
    display:flex !important;
    flex-direction:column !important;
    gap:0 !important;
  }
  #contact form .btn-block{width:100% !important;}
}

/* =========================================================================
   2026-05-07 — Milestone steps ("How it works" 1-2-3-4) stack on mobile.
   The earlier rule collapsed the inline `repeat(4,1fr)` grid to 2 columns at
   <=900px and 1 column at <=480px. The user wants every milestone stacked
   on top of each other on mobile, so collapse to 1 column at the standard
   <=760px breakpoint and add an arrow / connector to suggest the flow.
   ========================================================================= */
@media (max-width:760px){
  /* :has(> div > h4) confines this to the milestone grids (their cells carry
     an h4 title). Other repeat(4,1fr) grids — the home stats strip — were
     being caught too, and the 42px "circle" rule below crushed their numbers. */
  div[style*="grid-template-columns:repeat(4,1fr)"]:has(> div > h4){
    grid-template-columns:1fr !important;
    gap:12px !important;
    max-width:520px !important;
    margin-left:auto !important;
    margin-right:auto !important;
  }
  /* Reshape each milestone tile into a horizontal row so the page doesn't
     turn into one tall column of empty space — number on the left,
     title + paragraph on the right. */
  div[style*="grid-template-columns:repeat(4,1fr)"]:has(> div > h4) > div{
    display:flex !important;
    align-items:center !important;
    gap:14px !important;
    text-align:left !important;
    padding:14px 16px !important;
    position:relative;
  }
  /* The numbered circle (the inner div with width:44px;height:44px) */
  div[style*="grid-template-columns:repeat(4,1fr)"]:has(> div > h4) > div > div:first-child{
    margin:0 !important;
    flex-shrink:0;
    width:42px !important;
    height:42px !important;
  }
  /* Title + body wrapper takes whatever space is left */
  div[style*="grid-template-columns:repeat(4,1fr)"]:has(> div > h4) > div > h4{
    text-align:left !important;
    margin:0 0 2px !important;
    font-size:15px !important;
  }
  div[style*="grid-template-columns:repeat(4,1fr)"]:has(> div > h4) > div > p{
    text-align:left !important;
    margin:0 !important;
    font-size:12.5px !important;
    line-height:1.4;
  }
  /* Connector line between consecutive milestones to suggest the sequence. */
  div[style*="grid-template-columns:repeat(4,1fr)"]:has(> div > h4) > div:not(:last-child)::after{
    content:'';
    position:absolute;
    left:35px;            /* aligns with the centre of the 42px circle */
    bottom:-9px;
    width:2px;
    height:9px;
    background:linear-gradient(180deg, rgba(11,79,148,.4), rgba(11,79,148,0));
    pointer-events:none;
  }
}

/* =========================================================================
   2026-05-07 — Force stack: "Book a Free Pickup" + "Track a Shipment".
   The earlier #pickup rule used `grid-template-columns:1fr !important` but
   if anything else cascaded later, !important alone may not be enough.
   Use display:flex flex-direction:column to remove any possibility of the
   grid winning, plus higher specificity (#pickup section > .container > div).
   ========================================================================= */
/* =========================================================================
   #pickup section — definitive mobile rule.
   Two tiles (Book a Free Pickup / Track a Shipment) stack vertically,
   one tile per row, each row centered horizontally on the page.
   ========================================================================= */
@media (max-width:760px){
  html body section#pickup > .container,
  html body #pickup > .container{
    max-width:100% !important;
    padding:0 16px !important;
    box-sizing:border-box !important;
    overflow:hidden !important;
  }
  /* The grid containing the two tiles — vertical flex stack, centered. */
  html body section#pickup > .container > div,
  html body #pickup > .container > div{
    display:flex !important;
    flex-direction:column !important;
    align-items:center !important;
    justify-content:flex-start !important;
    gap:12px !important;
    grid-template-columns:none !important;
    width:100% !important;
    max-width:100% !important;
    box-sizing:border-box !important;
  }
  /* Each tile — capped width, centered. Two rows total: Book then Track. */
  html body section#pickup > .container > div > a.card,
  html body #pickup > .container > div > a.card{
    display:block !important;
    width:100% !important;
    max-width:380px !important;
    padding:16px !important;
    box-sizing:border-box !important;
    margin:0 auto !important;
  }
  html body section#pickup > .container > div > a.card > div,
  html body #pickup > .container > div > a.card > div{
    display:flex !important;
    align-items:center !important;
    gap:12px !important;
    flex-wrap:nowrap !important;
  }
  html body section#pickup a.card > div > div:nth-child(2){
    flex:1 1 auto;
    min-width:0;
  }
  html body section#pickup a.card h3{
    font-size:16px !important;
    margin-bottom:2px !important;
    line-height:1.2 !important;
  }
  html body section#pickup a.card p{
    font-size:12.5px !important;
    line-height:1.35 !important;
    margin:0 !important;
    word-break:break-word;
  }
  html body section#pickup a.card > div > i.fa-arrow-right{
    font-size:14px !important;
    flex-shrink:0;
    margin-left:auto;
  }
}
@media (max-width:420px){
  html body section#pickup a.card > div > i.fa-arrow-right{ display:none !important; }
  html body section#pickup a.card{ padding:14px !important; }
}

/* Earlier rule that hid the "Book a Free Pickup" tile on mobile is now
   removed per a later request — both tiles must show, each on its own row. */

/* =========================================================================
   2026-05-08 — "What We Move" slider: hide the slider on mobile, leave a
   single static photo in its place. The first card (Barrels) stays visible
   and stretches to full width; all other cards, the prev/next buttons,
   and the dots are hidden. The JS-driven translateX is neutralised so the
   autoplay timer cannot move the visible photo.
   ========================================================================= */
@media (max-width:760px){
  /* Hide the navigation buttons + dots */
  .slider-wrap .slider-btn,
  .slider-dots{display:none !important;}
  /* Neutralise the slider mechanics */
  .slider-wrap{padding:0 !important;}
  .slider-track{
    transform:none !important;
    transition:none !important;
    gap:0 !important;
    display:block !important;
    width:100% !important;
  }
  /* Hide every slide card except the first one */
  .slider-track .slide-card{display:none !important;}
  .slider-track .slide-card:first-child{
    display:block !important;
    flex:none !important;
    width:100% !important;
    max-width:100% !important;
    height:auto !important;
    aspect-ratio:16 / 11;
    border-radius:14px !important;
    cursor:default;
  }
  .slider-track .slide-card:first-child img{
    width:100% !important;
    height:100% !important;
    object-fit:cover;
    transition:none !important;
    transform:none !important;
  }
  /* Caption + tag a touch larger so they're readable at full width. */
  .slider-track .slide-card:first-child .cap{
    font-size:14px;
    padding:12px 14px;
  }
  .slider-track .slide-card:first-child .tag{
    font-size:11px;
    padding:4px 10px;
  }
}

/* =========================================================================
   2026-05-07 — Mobile: hide the inline Instant Quote card from the hero,
   show it as a slide-up modal only when the user taps "Get Instant Quote"
   (the button has href="#quote", so #quote:target switches the card into
   modal mode). The X in the top-right links to "#", which clears the
   target and slides the modal back away. Pure CSS — no JS hook needed.
   ========================================================================= */
/* Close button — hidden on desktop, shown only inside the mobile modal. */
.qg-mclose{display:none;}

@media (max-width:900px){
  /* Default state: the inline Instant Quote card is hidden on mobile. */
  .quote-glass{
    display:none !important;
  }
  /* When the URL hash matches (the user tapped "Get Instant Quote"), bring
     the card up as a slide-from-bottom modal. */
  .quote-glass:target{
    display:block !important;
    position:fixed !important;
    left:0 !important;
    right:0 !important;
    bottom:0 !important;
    top:auto !important;
    margin:0 !important;
    width:100% !important;
    max-width:100% !important;
    max-height:90vh;
    overflow-y:auto;
    z-index:9999;
    border-radius:18px 18px 0 0 !important;
    box-shadow:0 -10px 40px rgba(2,23,46,.45) !important;
    animation:qgSlideUp .25s cubic-bezier(.2,.8,.2,1);
    padding:18px 18px 28px !important;
    background:#fff !important;
  }
  /* Backdrop scrim behind the modal — also acts as a click-to-close target. */
  .quote-glass:target::after{
    content:'';
    position:fixed;
    inset:0;
    background:rgba(2,23,46,.55);
    z-index:-1;
    animation:qgFade .25s;
  }
  /* Show the close button only inside the modal. */
  .quote-glass:target .qg-mclose{
    display:flex !important;
    position:absolute;
    top:10px;
    right:12px;
    width:34px;
    height:34px;
    border-radius:50%;
    background:#f1f5f9;
    color:#475569;
    text-decoration:none;
    font-size:14px;
    align-items:center;
    justify-content:center;
    z-index:2;
    border:1px solid var(--border);
  }
  .quote-glass:target .qg-mclose:hover{background:#e2e8f0;color:#1e293b;}
  /* Lock body scroll behind the modal — best-effort, requires JS for full
     iOS safety, but this prevents most accidental scroll-through. */
  body:has(.quote-glass:target){overflow:hidden;}
}
@keyframes qgSlideUp{from{transform:translateY(100%);}to{transform:translateY(0);}}
@keyframes qgFade{from{opacity:0;}to{opacity:1;}}

/* =========================================================================
   2026-05-08 — Mobile: fully remove the Instant Quote — no inline card AND
   no slide-up modal. The previous fix used #quote:target to open the same
   card as a bottom-sheet; the user now wants no quote on mobile at all.
   Hide the card in every state, suppress the modal scrim, unlock body
   scroll, and hide the "Get Instant Quote" hero CTA so it can't trigger
   an empty target.
   ========================================================================= */
@media (max-width:900px){
  /* Cancel the :target promotion the earlier rule introduced */
  .quote-glass,
  .quote-glass:target{
    display:none !important;
    position:static !important;
    animation:none !important;
    box-shadow:none !important;
  }
  .quote-glass:target::after{
    content:none !important;
    display:none !important;
  }
  body:has(.quote-glass:target){overflow:auto !important;}
  /* Mobile CTA hierarchy: Get Instant Quote is the primary action (full-width,
     bright), Book Free Pickup is the secondary (full-width, ghost), Sign Up
     is demoted to a centered text link with an arrow. Reordering uses CSS
     order so we don't need to touch the markup. */
  .hero-ctas{
    flex-direction:column !important;
    align-items:stretch !important;
  }
  .hero-ctas a[href="#quote"]{
    order:1 !important;
    display:flex !important;
    background:linear-gradient(135deg, var(--gold), #ff7b00) !important;
    color:#3a2400 !important;
    border:0 !important;
    font-size:16px !important;
    font-weight:800 !important;
    padding:14px !important;
    box-shadow:0 6px 16px rgba(255, 123, 0, .35) !important;
  }
  .hero-ctas a[href="#pickup"]{ order:2 !important; }
  .hero-ctas a[href="signup.html"]{
    order:3 !important;
    background:transparent !important;
    border:0 !important;
    color:#fff !important;
    text-decoration:underline;
    font-size:13px !important;
    font-weight:600 !important;
    padding:6px !important;
    box-shadow:none !important;
    align-self:center;
    flex:0 0 auto !important;
    width:auto !important;
  }
  .hero-ctas a[href="signup.html"] i{ font-size:11px; opacity:.7; }
}

/* ===========================================================================
 * Hero overrides (mobile) — Quote + Pickup buttons share ONE horizontal row;
 * hero lead text stretches full-width with wrap + justify.
 * ========================================================================= */
@media (max-width:760px){
  html body .hero .lead,
  html body .hero p.lead{
    max-width:100% !important;
    width:100% !important;
    text-align:justify !important;
    text-justify:inter-word !important;
    hyphens:auto !important;
    word-break:normal !important;
    overflow-wrap:break-word !important;
    margin:0 0 16px !important;
    padding:0 !important;
    box-sizing:border-box !important;
  }
  /* CTA container: horizontal row, allow signup to wrap below. */
  html body .hero-ctas{
    display:flex !important;
    flex-direction:row !important;
    flex-wrap:wrap !important;
    align-items:stretch !important;
    justify-content:center !important;
    gap:8px !important;
    margin-bottom:18px !important;
    width:100% !important;
  }
  /* Pickup + Quote share one row — each takes ~half. */
  html body .hero-ctas a[href="#pickup"],
  html body .hero-ctas a[href="#quote"]{
    flex:1 1 0 !important;
    min-width:0 !important;
    width:auto !important;
    max-width:none !important;
    padding:11px 10px !important;
    font-size:13px !important;
    font-weight:700 !important;
    white-space:nowrap !important;
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    gap:5px !important;
    order:initial !important;
  }
  html body .hero-ctas a[href="#pickup"] i,
  html body .hero-ctas a[href="#quote"] i{
    font-size:12px !important;
  }
  /* Sign Up wraps to its own row below, stays a centered text link. */
  html body .hero-ctas a[href="signup.html"]{
    flex:1 1 100% !important;
    width:100% !important;
    order:3 !important;
    text-align:center !important;
    align-self:center !important;
  }
}

/* ===== Sticky mobile quote bar =============================================
 * Always-visible bottom bar on phones so the primary conversion (Get Quote)
 * is one tap away as the user scrolls past the hero. Hidden on desktop and
 * when a modal/target panel is open (so it doesn't sit on top of the quote
 * card itself).
 * =========================================================================*/
.sticky-mq{
  display:none;
  position:fixed;
  left:0;
  right:0;
  bottom:0;
  z-index:80;
  background:linear-gradient(180deg, rgba(4,44,84,0) 0%, rgba(4,44,84,.92) 30%, rgba(4,44,84,.96) 100%);
  padding:10px 12px 14px;
  backdrop-filter:blur(8px);
  -webkit-backdrop-filter:blur(8px);
  pointer-events:none;
}
.sticky-mq .row{
  display:flex;
  gap:8px;
  pointer-events:auto;
  max-width:520px;
  margin:0 auto;
}
.sticky-mq a{
  flex:1;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  padding:13px 14px;
  border-radius:99px;
  text-decoration:none;
  font-weight:800;
  font-size:14.5px;
  letter-spacing:.3px;
  box-shadow:0 8px 22px rgba(0,0,0,.3);
}
.sticky-mq a.primary{
  background:linear-gradient(135deg, var(--gold), #ff7b00);
  color:#3a2400;
  flex:1.4;
}
.sticky-mq a.secondary{
  background:rgba(255,255,255,.96);
  color:var(--blue-deep);
}
.sticky-mq a:active{ transform:translateY(1px); }
@media(max-width:760px){
  .sticky-mq{ display:block; }
  /* Add bottom padding to body so floating widgets don't get clipped */
  body{ padding-bottom:64px; }
  /* Hide the bar when the quote modal is open via #quote:target */
  body:has(.quote-glass:target) .sticky-mq{ display:none; }
}


/* ===========================================================================
 * Entity-page utility classes
 * --------------------------------------------------------------------------
 * Most internal pages repeat the same shell / header / KPI strip / toolbar
 * blocks under different class prefixes (.vs-shell, .lm-shell, .bs-shell,
 * .ad-shell, .ent-shell, etc.) — 25+ near-identical copies in the codebase.
 * These canonical classes give new pages a single naming convention so the
 * same layout doesn't get re-typed every time. Existing pages can adopt them
 * by replacing their per-page prefix and removing the duplicated <style>
 * block; no visual change.
 *
 * Migration pattern:
 *   <div class="xx-shell">         →  <div class="ent-shell">
 *     <div class="xx-head">        →    <div class="ent-hub">
 *       <h1>…                            <h1>…
 *     <div class="xx-kpi">          →    <div class="ent-stats">
 *       <div>…<div class="v">…       →      <div>…<span class="v">…
 *
 * Override locally where a page genuinely diverges (e.g. wider shell) by
 * adding `style="max-width:1280px"` to the element rather than adding a new
 * class prefix.
 * =========================================================================*/

.ent-shell{padding:24px;max-width:1100px;margin:0 auto;}
@media(max-width:760px){ .ent-shell{padding:14px;} }

.ent-hub{
  display:flex;
  justify-content:space-between;
  align-items:center;
  margin-bottom:14px;
  flex-wrap:wrap;
  gap:12px;
}
.ent-hub h1{
  margin:0;
  font-size:24px;
  color:var(--blue-deep);
  display:flex;
  gap:10px;
  align-items:center;
}
.ent-hub h1 i{color:#0b4f94;}
.ent-hub .sub{
  font-size:13px;
  color:var(--muted);
  margin:-4px 0 16px;
}
@media(max-width:540px){ .ent-hub h1{font-size:20px;} }

.ent-stats{
  display:grid;
  grid-template-columns:repeat(auto-fit, minmax(160px, 1fr));
  gap:10px;
  margin-bottom:14px;
}
.ent-stats > div{
  background:#fff;
  border:1px solid var(--border);
  border-radius:12px;
  padding:10px 14px;
  display:flex;
  gap:10px;
  align-items:center;
}
.ent-stats .ic{
  width:36px;
  height:36px;
  border-radius:8px;
  display:grid;
  place-items:center;
  color:#fff;
  font-size:14px;
  flex-shrink:0;
  background:var(--grad-ocean);
}
.ent-stats .v{
  font-size:20px;
  font-weight:800;
  color:var(--blue-deep);
  line-height:1.1;
}
.ent-stats .l{
  font-size:11px;
  color:var(--muted);
  text-transform:uppercase;
  letter-spacing:.5px;
}

/* Toolbar row — filter / search / action buttons above a table or grid. */
.ent-toolbar{
  display:flex;
  gap:8px;
  flex-wrap:wrap;
  align-items:center;
  background:#fff;
  border:1px solid var(--border);
  border-radius:12px;
  padding:10px 12px;
  margin-bottom:12px;
}
.ent-toolbar > *{flex:0 0 auto;}
.ent-toolbar input[type="text"],
.ent-toolbar input[type="search"],
.ent-toolbar select{
  padding:8px 12px;
  border:1px solid var(--border);
  border-radius:8px;
  font-family:inherit;
  font-size:13px;
}
.ent-toolbar .spacer{flex:1 1 auto;}
.ent-toolbar .pill{
  font-size:11px;
  font-weight:700;
  background:#eff6ff;
  color:#0b4f94;
  padding:4px 10px;
  border-radius:99px;
}

/* Card panel — content blocks within an .ent-shell. */
.ent-panel{
  background:#fff;
  border:1px solid var(--border);
  border-radius:14px;
  padding:14px 16px;
  margin-bottom:14px;
}
.ent-panel h3{
  color:var(--blue-deep);
  font-size:14px;
  text-transform:uppercase;
  letter-spacing:.5px;
  margin:0 0 10px;
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:8px;
}
.ent-panel h3 a{
  font-size:11px;
  text-transform:none;
  letter-spacing:0;
  color:#0b4f94;
  text-decoration:none;
  font-weight:600;
}

html[data-mode="dark"] .ent-shell,
html[data-mode="dark"] .ent-toolbar,
html[data-mode="dark"] .ent-panel,
html[data-mode="dark"] .ent-stats > div{
  background:#152036;
  border-color:rgba(255,255,255,.08);
  color:#e5e7eb;
}
html[data-mode="dark"] .ent-hub h1,
html[data-mode="dark"] .ent-stats .v,
html[data-mode="dark"] .ent-panel h3{ color:#cbd5e1; }

/* ===== TRUST STRIP =========================================================
 * High-conversion social-proof section beneath the homepage stats. Six badges
 * (licensing, insurance, security, BBB, years in business, refund policy)
 * plus a payment-methods row. Auto-collapses to 2 columns on tablet, 1 on
 * mobile. Dark-mode aware via existing CSS variables.
 * =========================================================================*/
.trust-strip{
  background:linear-gradient(180deg, #f8fafc 0%, #eff6ff 100%);
  padding:28px 0;
  border-bottom:1px solid #e2e8f0;
}
/* Desktop trust strip: 6 badges in ONE horizontal row, each badge laid out
   vertically (icon on top, label below value). */
.trust-strip .trust-grid{
  display:grid !important;
  grid-template-columns:repeat(6, minmax(0, 1fr)) !important;
  grid-auto-flow:row;
  gap:10px;
  align-items:stretch;
  max-width:1180px;
  margin:0 auto;
}
.trust-strip .trust-badge{
  display:flex;
  flex-direction:column;       /* icon on top, text below */
  gap:8px;
  align-items:center;
  text-align:center;
  background:#fff;
  border:1px solid #e2e8f0;
  border-radius:12px;
  padding:14px 10px;
  transition:transform .2s, box-shadow .2s;
  min-width:0;
}
.trust-strip .trust-badge:hover{
  transform:translateY(-2px);
  box-shadow:0 8px 20px rgba(4, 44, 84, .08);
}
.trust-strip .trust-badge i{
  font-size:20px;
  color:#0b4f94;
  width:44px;
  height:44px;
  background:#dbeafe;
  border-radius:50%;
  display:grid;
  place-items:center;
  flex-shrink:0;
}
.trust-strip .trust-badge > div{
  min-width:0;
  width:100%;
}
.trust-strip .trust-badge .lbl{
  font-size:13px;
  font-weight:700;
  color:var(--blue-deep);
  letter-spacing:-.2px;
  line-height:1.25;
}
.trust-strip .trust-badge .val{
  font-size:11.5px;
  color:var(--muted);
  margin-top:3px;
  line-height:1.3;
}
.trust-strip .trust-pay{
  margin-top:14px;
  display:flex !important;
  flex-direction:row !important;
  align-items:center;
  justify-content:center;
  flex-wrap:wrap;
  gap:14px;
  color:var(--muted);
  font-size:13px;
}
.trust-strip .trust-pay i{ font-size:30px; color:#475569; }
.trust-strip .trust-pay i:hover{ color:var(--blue-deep); }

/* All viewports — keep 6 columns fitted across the screen, scale paddings
   and font-sizes down so they don't overflow on narrow screens. */
@media(max-width:1100px){
  .trust-strip .trust-grid{ gap:6px !important; }
  .trust-strip .trust-badge{ padding:10px 4px !important; }
  .trust-strip .trust-badge i{ width:36px !important; height:36px !important; font-size:16px !important; }
  .trust-strip .trust-badge .lbl{ font-size:11px !important; }
  .trust-strip .trust-badge .val{ font-size:10px !important; }
}
@media(max-width:760px){
  .trust-strip .trust-grid{ gap:4px !important; }
  .trust-strip .trust-badge{ padding:8px 3px !important; }
  .trust-strip .trust-badge i{ width:28px !important; height:28px !important; font-size:13px !important; }
  .trust-strip .trust-badge .lbl{ font-size:9px !important; line-height:1.15; }
  .trust-strip .trust-badge .val{ font-size:8.5px !important; line-height:1.2; }
}
/* Very small phones — keep 6 across, only further shrink padding. */
@media(max-width:540px){
  .trust-strip{ padding:14px 0; }
  .trust-strip .trust-grid{ gap:3px !important; }
  .trust-strip .trust-badge{ padding:6px 2px !important; }
  .trust-strip .trust-badge i{ width:22px !important; height:22px !important; font-size:11px !important; }
  .trust-strip .trust-badge .lbl{ font-size:8px !important; }
  .trust-strip .trust-badge .val{ font-size:7.5px !important; }
}

html[data-mode="dark"] .trust-strip{
  background:linear-gradient(180deg, #0f172a 0%, #152036 100%);
  border-bottom-color:rgba(255,255,255,.08);
}
html[data-mode="dark"] .trust-strip .trust-badge{
  background:#152036;
  border-color:rgba(255,255,255,.08);
}
html[data-mode="dark"] .trust-strip .trust-badge .lbl{ color:#e5e7eb; }
html[data-mode="dark"] .trust-strip .trust-pay i{ color:#94a3b8; }

/* ===== NEWSLETTER SIGNUP CARD =============================================
 * Slim email-capture row used in the footer brand column. Sets a single
 * email + submit pattern with inline status feedback. No JS required to
 * render — the wiring lives in landing.js / core.js as a small form handler.
 * =========================================================================*/
.news-card{
  background:linear-gradient(135deg, var(--blue-deep), var(--blue-light));
  color:#fff;
  border-radius:14px;
  padding:14px 16px;
  margin-top:12px;
}
.news-card h6{
  margin:0 0 4px;
  font-size:13px;
  font-weight:800;
  letter-spacing:.3px;
  text-transform:uppercase;
}
.news-card p{
  font-size:12px;
  opacity:.85;
  margin:0 0 10px;
  line-height:1.4;
}
.news-card form{
  display:flex;
  gap:6px;
}
.news-card input[type="email"]{
  flex:1;
  min-width:0;
  padding:9px 12px;
  border:none;
  border-radius:8px;
  font-family:inherit;
  font-size:13px;
  color:#0f172a;
}
.news-card button{
  border:0;
  background:var(--gold);
  color:#3a2400;
  border-radius:8px;
  font-weight:800;
  font-size:12px;
  padding:0 14px;
  cursor:pointer;
  letter-spacing:.5px;
}
.news-card button:hover{ filter:brightness(1.05); }
.news-card .news-status{
  font-size:11px;
  margin-top:6px;
  min-height:14px;
}
.news-card .news-status.ok{ color:#86efac; }
.news-card .news-status.err{ color:#fda4af; }

/* ===== Standard "Back to menu" button ======================================
 * Auto-injected on every page (except index, admin sidebars, kiosk modes) by
 * core.js so the user always has a consistent way back. Top-left floating
 * pill, teal->blue gradient, FA arrow icon. Smart destination — when the
 * user is logged in, it routes to their role home; otherwise to index.html.
 * =========================================================================*/
.rof-back-menu{
  position:fixed;
  top:84px;
  left:16px;
  width:44px;
  height:44px;
  border-radius:50%;
  background:linear-gradient(135deg, #0d9488, #0b4f94);
  color:#fff;
  display:flex;
  align-items:center;
  justify-content:center;
  text-decoration:none;
  font-size:16px;
  box-shadow:0 6px 18px rgba(11, 79, 148, .35);
  z-index:90;
  transition:transform .15s, box-shadow .15s, width .15s;
  overflow:hidden;
  white-space:nowrap;
}
.rof-back-menu:hover{
  transform:translateY(-2px);
  box-shadow:0 10px 24px rgba(11, 79, 148, .45);
  width:auto;
  padding:0 16px 0 14px;
  gap:8px;
}
.rof-back-menu:hover .rof-back-label{
  max-width:200px;
  opacity:1;
  margin-left:2px;
}
.rof-back-menu .rof-back-label{
  display:inline-block;
  max-width:0;
  opacity:0;
  font-size:13px;
  font-weight:700;
  letter-spacing:.3px;
  transition:max-width .2s, opacity .15s;
  overflow:hidden;
}
@media(max-width:760px){
  .rof-back-menu{ top:auto; bottom:84px; left:12px; }
}
@media print{
  .rof-back-menu{ display:none !important; }
}

/* ===== Dashboard pickup-slot picker + payment-method card =================
 * The customer dashboard's pickup form has three time-window tiles
 * (9am-12pm / 12pm-4pm / 4pm-7pm) and a payment-method card. Both were
 * referenced in markup but had no CSS rules — they rendered as plain
 * inline divs. These rules give them the tile-picker UX they were
 * designed for.
 * =========================================================================*/
.pickup-slots{
  display:grid;
  grid-template-columns:repeat(3, 1fr);
  gap:8px;
  margin-bottom:14px;
}
.pickup-slot{
  background:#f8fafc;
  border:2px solid var(--border);
  border-radius:12px;
  padding:12px 8px;
  cursor:pointer;
  text-align:center;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:4px;
  transition:transform .15s, border-color .15s, background .15s;
  user-select:none;
}
.pickup-slot:hover{
  border-color:var(--blue-light);
  background:#fff;
}
.pickup-slot:active{ transform:scale(.97); }
.pickup-slot.selected{
  background:linear-gradient(135deg, var(--blue-deep), var(--blue-light));
  color:#fff;
  border-color:var(--blue-deep);
  box-shadow:0 6px 14px rgba(11, 79, 148, .3);
}
.pickup-slot i{ font-size:22px; color:var(--blue-deep); margin-bottom:2px; }
.pickup-slot.selected i{ color:#ffcd3c; }
.pickup-slot b{ font-size:13px; font-weight:700; color:var(--blue-deep); }
.pickup-slot.selected b{ color:#fff; }
.pickup-slot small{ font-size:11px; color:var(--muted); }
.pickup-slot.selected small{ color:rgba(255,255,255,.85); }
@media(max-width:540px){
  .pickup-slots{ grid-template-columns:1fr; }
  .pickup-slot{ flex-direction:row; padding:10px 14px; gap:10px; }
  .pickup-slot i{ margin-bottom:0; }
}

/* Payment-method card on the customer dashboard. */
.pay-card{
  background:#fff;
  border:1px solid var(--border);
  border-radius:14px;
  padding:14px 16px;
  margin-bottom:10px;
  display:flex;
  gap:14px;
  align-items:center;
  transition:border-color .15s, box-shadow .15s;
}
.pay-card:hover{
  border-color:var(--blue-light);
  box-shadow:0 4px 14px rgba(0,0,0,.06);
}
.pay-card i{
  font-size:26px;
  color:var(--blue-deep);
  width:40px;
  text-align:center;
  flex-shrink:0;
}
.pay-card .pay-num{
  font-family:'Menlo','Consolas',monospace;
  letter-spacing:1px;
  font-weight:700;
  color:var(--blue-deep);
  font-size:14px;
}
.pay-card .pay-meta{
  font-size:12px;
  color:var(--muted);
  margin-top:2px;
}
.pay-card .pay-actions{ margin-left:auto; display:flex; gap:6px; }
.pay-card.default{
  border-color:#10b981;
  box-shadow:inset 4px 0 0 #10b981;
}

/* ===========================================================================
 * Mobile homepage trims (≤760px)
 * --------------------------------------------------------------------------
 * Per request: hide the inline Instant Quote card (the sticky bottom CTA bar
 * already provides the conversion path on phones), hide the image
 * slider/carousel ("Everything. Barrels to bulldozers."), hide the contact
 * form, and stack the multi-column grids in How it works / Features /
 * Coverage to a single column so cards aren't crushed.
 *
 * Selectors target by the existing inline `style="grid-template-columns:..."`
 * markup so no HTML edits are needed. :has(...) is supported in all current
 * evergreen browsers; older browsers gracefully fall back to the desktop
 * layout (no harm, just less mobile-optimized).
 * =========================================================================*/
@media (max-width:760px){
  /* Hide the in-hero Instant Quote card. */
  .hero #quote.quote-glass{ display:none !important; }

  /* Hide the entire image-slider section on mobile only.
     Class-based selector (.slider-section) works in every mobile browser,
     and the :has() fallback catches any other carousel that lacks the class. */
  section.slider-section,
  section:has(> .container > .slider-wrap){ display:none !important; }

  /* "How it works" / Process — 2 columns × 2 rows on mobile (4 tiles total).
     Multiple selectors layered so it wins against any cached or inline style. */
  html body section#process > .container > .process-grid,
  html body section#process > .container > div[style*="grid-template-columns:repeat(4,1fr)"],
  html body section#process > .container > div:not(.sect-head){
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 10px !important;
    max-width: 100% !important;
    width: 100% !important;
    box-sizing: border-box !important;
    margin: 0 auto !important;
  }
  /* Each step tile fills its grid cell, no overflow. */
  html body section#process > .container > .process-grid > div,
  html body section#process > .container > div > div{
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
    padding: 14px 10px !important;
  }

  /* Built for Customers — 2 columns × 3 rows on mobile (6 tiles total).
     Multiple selectors layered so it wins against any cached / inline style. */
  html body section#features > .container > .features-grid,
  html body section#features > .container > div[style*="grid-template-columns:repeat(3,1fr)"],
  html body section#features > .container > div:not(.sect-head){
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 10px !important;
    max-width: 100% !important;
    width: 100% !important;
    box-sizing: border-box !important;
    margin: 0 auto !important;
  }
  /* Each tile fills its grid cell, no overflow. */
  html body section#features > .container > .features-grid > .card,
  html body section#features > .container > div > .card{
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
  }

  /* Coverage section rules consolidated into the single "Coverage mobile reset"
     block earlier in this file — nothing more to add here. */

  /* Tighten Features tile padding for the new 2-col layout. */
  section#features > .container > div > .card{ padding: 14px 12px !important; }
  section#features > .container > div > .card h3{ font-size: 15px !important; }
  section#features > .container > div > .card p{ font-size: 12.5px !important; }

  /* Contact / "Send us a message" — definitive mobile rules, targeted via
     the .contact-grid / .contact-info / .contact-form / .cf-row classes
     added to index.html so we don't depend on inline-style substrings. */
  section#contact{ display:block !important; padding:24px 0 !important; }
  section#contact > .container{ padding:0 14px !important; }

  /* Stack the two-column outer grid (contact info + form) into a single
     centered column. */
  section#contact .contact-grid{
    display:flex !important;
    flex-direction:column !important;
    align-items:center !important;
    grid-template-columns:1fr !important;
    gap:14px !important;
    max-width:100% !important;
    width:100% !important;
    margin:0 auto !important;
  }
  section#contact .contact-info,
  section#contact .contact-form{
    width:100% !important;
    max-width:420px !important;
    margin:0 auto !important;
    box-sizing:border-box !important;
  }
  section#contact .contact-info{
    display:flex !important;
    flex-direction:column !important;
    gap:10px !important;
  }

  /* FORM: one field per row, full-width, stacked. */
  section#contact .contact-form .cf-row,
  section#contact .contact-form .row2{
    display:flex !important;
    flex-direction:column !important;
    grid-template-columns:1fr !important;
    gap:0 !important;
  }
  section#contact .contact-form .field{
    width:100% !important;
    display:block !important;
    margin-bottom:10px !important;
  }
  section#contact .contact-form .field label{
    display:block !important;
    width:100% !important;
  }
  section#contact .contact-form .field input,
  section#contact .contact-form .field textarea{
    width:100% !important;
    max-width:100% !important;
    box-sizing:border-box !important;
  }
  section#contact .contact-form .btn,
  section#contact .contact-form .btn-block{
    width:100% !important;
    display:block !important;
  }
}

/* ===========================================================================
 * Mobile trust-strip compaction (≤760px)
 * --------------------------------------------------------------------------
 * Keep the vertical single-column stack (matches desktop now) and just
 * tighten padding / icon size so the rows aren't oversized on phones.
 * =========================================================================*/
@media(max-width:760px){
  .trust-strip{
    padding:14px 0 12px;
  }
  .trust-strip .container{
    padding-left:8px;
    padding-right:8px;
  }
  /* Keep 6 columns horizontally across the screen on mobile too. */
  .trust-strip .trust-grid{
    grid-template-columns:repeat(6, minmax(0, 1fr)) !important;
    gap:4px !important;
    max-width:none !important;
  }
  /* Stay with icon-on-top vertical layout for all sizes. */
  .trust-strip .trust-badge{
    flex-direction:column !important;
    text-align:center !important;
    align-items:center !important;
    padding:8px 3px !important;
    gap:5px !important;
    border-radius:8px !important;
  }
  .trust-strip .trust-badge i{
    width:28px !important;
    height:28px !important;
    font-size:13px !important;
  }
  .trust-strip .trust-badge .lbl{
    font-size:12px;
    line-height:1.2;
  }
  .trust-strip .trust-badge .val{
    font-size:11px;
    margin-top:1px;
    line-height:1.2;
  }
  /* Hide the payment-methods row on phones — it wraps into 2-3 lines and
     looks cluttered. The same payment options are listed in the footer. */
  .trust-strip .trust-pay{ display:none !important; }
}

@media(max-width:420px){
  /* Very narrow phones: drop hover transform so tapping doesn't shift cards. */
  .trust-strip .trust-badge:hover{ transform:none; box-shadow:none; }
}

/* ===========================================================================
 * Auth pages: compact + centered  (login.html / signup.html / forgot-password)
 * --------------------------------------------------------------------------
 * Previous layout: hard 1fr/1fr split (brand panel left, form right). The form
 * was centered within its half-column, so on a wide screen it sat in the
 * right quarter — not centered on the screen.
 *
 * New layout:
 *   ≤900px : hide the brand panel entirely, center a slim form in the viewport
 *   901-1200px : keep the panel but use 5fr/7fr so the form sits closer to center
 *   1201+  : 4fr/6fr split, form column narrower (max 460px)
 * Form padding is reduced everywhere and field/heading spacing tightened so
 * the card no longer feels like a marketing page.
 * =========================================================================*/
.auth-form{ max-width:460px !important; padding:36px !important; }
.auth-form h1{ font-size:26px !important; margin-bottom:4px !important; }
.auth-form .sub{ margin-bottom:18px !important; font-size:13.5px !important; }
.auth-form .field{ margin-bottom:12px !important; }
.auth-form .field label{ font-size:12px !important; margin-bottom:4px !important; }
.auth-form input, .auth-form select, .auth-form textarea{
  padding:10px 12px !important;
  font-size:14px !important;
}
.auth-form .btn-primary{ padding:12px !important; font-size:15px !important; }
.auth-form .privacy-notice{
  padding:10px 12px !important;
  font-size:11.5px !important;
  margin-top:14px !important;
}
.auth-form .row2{ gap:10px !important; }

/* Desktop: tighten the column split so the form approaches centre. */
@media (min-width:901px){
  .auth-wrap{ grid-template-columns: 5fr 7fr !important; }
  .auth-side{ padding:32px !important; }
  .auth-side h2{ font-size:30px !important; margin-top:24px !important; }
  .auth-side p{ margin-top:12px !important; font-size:14px !important; }
  .auth-bullets{ margin-top:22px !important; gap:10px !important; }
  .auth-bullets div{ font-size:13px !important; }
  .auth-bullets i{ width:32px !important; height:32px !important; }
  .auth-form{ padding:32px 40px !important; }
}
@media (min-width:1201px){
  .auth-wrap{ grid-template-columns: 4fr 6fr !important; }
}

/* Tablet + mobile: drop the brand panel, center the form on the screen. */
@media (max-width:900px){
  .auth-wrap{
    grid-template-columns: 1fr !important;
    place-items:center !important;
    align-content:center !important;
    padding:18px 12px !important;
    min-height:100vh !important;
  }
  .auth-side{ display:none !important; }   /* compact mobile — no brand panel */
  .auth-form{
    width:100% !important;
    max-width:420px !important;
    margin:0 auto !important;
    padding:24px 22px !important;
    background:#fff;
    border-radius:16px;
    box-shadow:0 10px 30px rgba(4,44,84,.10);
  }
  .auth-form h1{ font-size:22px !important; }
}

/* Very narrow: edge-to-edge card with no shadow. */
@media (max-width:480px){
  .auth-wrap{ padding:0 !important; }
  .auth-form{ box-shadow:none !important; border-radius:0 !important; max-width:100% !important; min-height:100vh; display:flex; flex-direction:column; justify-content:center; padding:32px 20px !important; }
}

/* ===== Belt-and-braces: hide the homepage Instant Quote card on mobile =====
 * Multiple earlier rules already set display:none on .quote-glass and its
 * :target state — but the user reported it still appearing. The new selectors
 * below ensure no inline style, no animation, no :target promotion can keep
 * the card visible on a small viewport.
 * =========================================================================*/
@media (max-width:760px){
  html body .hero .quote-glass,
  html body .hero #quote,
  html body #quote.quote-glass,
  html body .quote-glass,
  html body .hero .card.quote-glass{
    display:none !important;
    visibility:hidden !important;
    opacity:0 !important;
    pointer-events:none !important;
    height:0 !important;
    max-height:0 !important;
    overflow:hidden !important;
    padding:0 !important;
    margin:0 !important;
    border:0 !important;
    position:absolute !important;
    left:-9999px !important;
  }
  /* Also kill any modal scrim it might leave behind */
  .quote-glass:target::after,
  body:has(.quote-glass:target)::after{ content:none !important; display:none !important; }

  /* Slider/carousel — kill any section that wraps a .slider-wrap, plus the
     direct elements just in case :has() isn't supported. */
  html body section:has(> .container > .slider-wrap),
  html body section:has(.slider-wrap),
  html body .slider-wrap,
  html body .slider-track,
  html body .slider-dots,
  html body .slider-btn{
    display:none !important;
    visibility:hidden !important;
    height:0 !important;
    overflow:hidden !important;
    padding:0 !important;
    margin:0 !important;
  }
}

/* ===========================================================================
 * Scroll-to-top / scroll-to-bottom floating buttons
 * --------------------------------------------------------------------------
 * Auto-injected on every page by core.js (same opt-out as .rof-back-menu).
 * The pair appears stacked at the right edge of the viewport:
 *   - top arrow → jumps to top, visible only when scrolled down >300px
 *   - down arrow → jumps to bottom, visible only when more than one viewport
 *                  remains below the current position
 * Both fade in/out smoothly with no layout-shift. Smooth-scrolls on click.
 * Hidden when printing, in :has(data-no-back-menu), and on the homepage
 * to avoid stacking with the sticky CTA bar at the bottom.
 * =========================================================================*/
.rof-scroll-top,
.rof-scroll-bottom{
  position:fixed;
  right:16px;
  width:42px;
  height:42px;
  border-radius:50%;
  background:linear-gradient(135deg, #0d9488, #0b4f94);
  color:#fff;
  border:0;
  display:grid;
  place-items:center;
  font-size:16px;
  cursor:pointer;
  z-index:89;
  box-shadow:0 6px 18px rgba(11, 79, 148, .35);
  opacity:0;
  transform:translateY(8px);
  pointer-events:none;
  transition:opacity .2s, transform .2s, box-shadow .15s;
  text-decoration:none;
}
.rof-scroll-top    { bottom:128px; }
.rof-scroll-bottom { bottom:78px;  }
.rof-scroll-top.visible,
.rof-scroll-bottom.visible{
  opacity:1;
  transform:translateY(0);
  pointer-events:auto;
}
.rof-scroll-top:hover,
.rof-scroll-bottom:hover{
  box-shadow:0 10px 24px rgba(11, 79, 148, .45);
  transform:translateY(-2px);
}
.rof-scroll-top:active,
.rof-scroll-bottom:active{ transform:translateY(0) scale(.94); }

/* On mobile lift them a bit so they don't collide with the sticky CTA bar. */
@media(max-width:760px){
  .rof-scroll-top    { bottom:138px; right:12px; }
  .rof-scroll-bottom { bottom:88px;  right:12px; }
}
@media print{
  .rof-scroll-top, .rof-scroll-bottom{ display:none !important; }
}

/* ===========================================================================
 * Mobile contact-bar layout (≤760px)
 * --------------------------------------------------------------------------
 * Restructure the top contact bar into two centered rows:
 *   Row 1: company title (centered)
 *   Row 2: phone · email (centered, one line)
 * Address / hours / social icons are hidden on phones (still in footer).
 * =========================================================================*/
@media (max-width:760px){
  .contact-bar{ padding:8px 0; }
  .contact-bar .container{
    flex-direction:column !important;
    align-items:center !important;
    text-align:center !important;
    gap:4px !important;
    padding:0 12px !important;
  }
  /* Left group (title + contact links) takes full width and stacks. */
  .contact-bar .container > div:first-child{
    flex-direction:column !important;
    align-items:center !important;
    width:100% !important;
    gap:4px !important;
  }
  /* The company title (the <b> with the ship icon) on its own centered row. */
  .contact-bar .container > div:first-child > b{
    display:block;
    width:100%;
    text-align:center;
    font-size:11px;
    letter-spacing:.8px !important;
  }
  /* Phone + email on the same row, centered. Use a flex wrapper rule that
     targets the 2nd and 3rd children (the tel: and mailto: anchors). */
  .contact-bar .container > div:first-child{
    display:flex;
  }
  .contact-bar .container > div:first-child > a[href^="tel:"],
  .contact-bar .container > div:first-child > a[href^="mailto:"]{
    display:inline-flex;
    align-items:center;
    gap:5px;
    font-size:11.5px;
  }
  /* Sit phone + email next to each other on a single centered line. We use
     order so they appear after the title regardless of source order, and a
     flex pseudo wrapper via gap on the parent. */
  .contact-bar .container > div:first-child > a[href^="tel:"]    { order:2; }
  .contact-bar .container > div:first-child > a[href^="mailto:"] { order:3; }
  /* Add a thin separator between phone and email so they read as one line. */
  .contact-bar .container > div:first-child > a[href^="mailto:"]::before{
    content:'·';
    margin-right:5px;
    opacity:.6;
  }
  /* Already hidden by line 692 (nth-child(n+4)): the address, hours.
     Keep them hidden — uses existing rule. */
  /* Social icons block (right side) hidden on phones to keep the bar slim. */
  .contact-bar .container > div:last-child{ display:none !important; }
}

/* ===========================================================================
 * Mobile overflow guard + centering — applies to index.html (and every other
 * page). Stops any inline-styled section from spilling off the viewport and
 * centers all sections horizontally so nothing sits off-screen.
 * ========================================================================= */
@media (max-width:760px){
  html, body{
    max-width:100vw !important;
    overflow-x:hidden !important;
  }
  /* Every section: cap width to viewport, center, clip horizontal overflow. */
  body > section,
  body > main > section,
  main > section,
  section{
    max-width:100vw !important;
    overflow-x:hidden !important;
    box-sizing:border-box !important;
  }
  /* .container is used everywhere — never let it exceed the screen. */
  .container{
    max-width:100% !important;
    width:100% !important;
    padding-left:14px !important;
    padding-right:14px !important;
    margin-left:auto !important;
    margin-right:auto !important;
    box-sizing:border-box !important;
  }
  /* Force any inline-styled grid wider than the viewport to clip. */
  section .container > div[style*="max-width"],
  section .container > div[style*="grid-template-columns"]{
    max-width:100% !important;
    width:100% !important;
    box-sizing:border-box !important;
  }
  /* Hero CTA stack + sect-head text — always centered on mobile. */
  .sect-head{ text-align:center !important; }
  .hero-ctas{ justify-content:center !important; }
  /* Any image inside a section — clamp to its column. */
  section img{ max-width:100% !important; height:auto !important; }
  /* Catch tables/forms that might overflow */
  table, form{ max-width:100% !important; }
}

/* ===========================================================================
 * Auth pages v2: always compact + centered (login / signup / forgot)
 * --------------------------------------------------------------------------
 * Earlier rules tightened the form on mobile but kept a marketing brand
 * panel on the left half of desktop screens — which made the whole page
 * feel "big" even though the form itself was the same size. This pass
 * hides .auth-side at every viewport and centers the form card.
 *
 * Highest specificity (body context + !important) so all earlier rules
 * are overridden cleanly.
 * =========================================================================*/
body .auth-wrap{
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
  min-height:100vh !important;
  padding:20px !important;
  background:linear-gradient(135deg, #f8fafc 0%, #eff6ff 100%);
}
body .auth-side{
  display:none !important;          /* no marketing panel at any size */
}
body .auth-form{
  width:100% !important;
  max-width:400px !important;
  padding:28px 26px !important;
  margin:0 auto !important;
  background:#fff !important;
  border-radius:16px;
  box-shadow:0 14px 36px rgba(4, 44, 84, .12);
}
body .auth-form h1{
  font-size:22px !important;
  margin:0 0 4px !important;
}
body .auth-form .sub{
  font-size:13px !important;
  margin:0 0 16px !important;
  color:var(--muted);
}
body .auth-form .field{
  margin-bottom:11px !important;
}
body .auth-form .field label{
  font-size:11.5px !important;
  margin-bottom:3px !important;
  font-weight:600;
}
body .auth-form input,
body .auth-form select,
body .auth-form textarea{
  padding:10px 12px !important;
  font-size:14px !important;
  width:100%;
  box-sizing:border-box;
}
body .auth-form .btn{
  width:100%;
  padding:11px !important;
  font-size:14px !important;
  margin-top:2px;
}
body .auth-form .row2{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:10px;
}
body .auth-form .privacy-notice{
  padding:10px 12px !important;
  font-size:11px !important;
  margin-top:12px !important;
}

/* Phones (≤760px): compact, centered card. Doesn't go edge-to-edge — sits as
   a small floating card centered both axes so it feels light and tight. */
@media (max-width:760px){
  body .auth-wrap{
    padding:14px !important;
    min-height:100vh !important;
    min-height:100dvh !important;
    display:flex !important;
    align-items:center !important;
    justify-content:center !important;
    background:linear-gradient(135deg, #f8fafc 0%, #eff6ff 100%) !important;
  }
  body .auth-form{
    max-width:340px !important;
    width:100% !important;
    min-height:0 !important;
    border-radius:14px !important;
    box-shadow:0 14px 36px rgba(4, 44, 84, .12) !important;
    padding:20px 18px !important;
    background:#fff !important;
    display:flex !important;
    flex-direction:column !important;
    justify-content:center !important;
    margin:0 auto !important;
  }
  body .auth-form h1{ font-size:19px !important; margin:0 0 2px !important; }
  body .auth-form .sub{ font-size:12px !important; margin:0 0 12px !important; }
  body .auth-form .field{ margin-bottom:9px !important; }
  body .auth-form .field label{ font-size:11px !important; margin-bottom:3px !important; }
  /* Stays at 16px: iOS zooms the page when a focused input is under 16px,
     which threw the whole login form sideways on every field tap. Keep the
     compact padding to claw back the height this costs. */
  body .auth-form input,
  body .auth-form select,
  body .auth-form textarea{ padding:9px 10px !important; font-size:16px !important; }
  body .auth-form .btn{ padding:10px !important; font-size:13.5px !important; }
}

/* Dark mode parity */
html[data-mode="dark"] body .auth-wrap{
  background:linear-gradient(135deg, #0f172a 0%, #152036 100%);
}
html[data-mode="dark"] body .auth-form{
  background:#152036 !important;
  color:#e5e7eb;
  box-shadow:0 14px 36px rgba(0,0,0,.45);
}
html[data-mode="dark"] body .auth-form h1{ color:#cbd5e1; }


/* =========================================================================
 * FINAL MOBILE OVERRIDES — placed last so they win the cascade.
 * 1) .hero .lead spreads full width and wraps cleanly.
 * 2) .trust-strip .trust-grid puts all 6 trust-badges in one horizontal row.
 * ========================================================================= */
@media (max-width:760px){
  /* ---- Hero lead: full width, wrap, justified ---- */
  html body section.hero .lead,
  html body section.hero p.lead,
  html body .hero .lead,
  html body .hero p.lead{
    display:block !important;
    max-width:100% !important;
    width:100% !important;
    margin:0 0 16px !important;
    padding:0 !important;
    text-align:justify !important;
    text-justify:inter-word !important;
    hyphens:auto !important;
    -webkit-hyphens:auto !important;
    word-break:normal !important;
    overflow-wrap:break-word !important;
    box-sizing:border-box !important;
    white-space:normal !important;
  }

  /* ---- Trust grid: all six badges horizontally across the screen ---- */
  html body section.trust-strip .trust-grid,
  html body .trust-strip .trust-grid{
    display:grid !important;
    grid-template-columns:repeat(6, minmax(0, 1fr)) !important;
    grid-auto-flow:column !important;
    gap:4px !important;
    max-width:100% !important;
    width:100% !important;
    margin:0 auto !important;
    padding:0 !important;
    box-sizing:border-box !important;
  }
  html body .trust-strip .trust-badge{
    display:flex !important;
    flex-direction:column !important;
    align-items:center !important;
    justify-content:flex-start !important;
    text-align:center !important;
    padding:8px 3px !important;
    gap:4px !important;
    min-width:0 !important;
    box-sizing:border-box !important;
  }
  html body .trust-strip .trust-badge i{
    width:24px !important;
    height:24px !important;
    font-size:11px !important;
    flex-shrink:0 !important;
  }
  html body .trust-strip .trust-badge .lbl{
    font-size:8.5px !important;
    line-height:1.15 !important;
    word-break:break-word !important;
  }
  html body .trust-strip .trust-badge .val{
    font-size:7.5px !important;
    line-height:1.2 !important;
    word-break:break-word !important;
  }
}

/* =========================================================================
 * FINAL FINAL MOBILE OVERRIDES — last block in the file, wins everything.
 * 1) Features grid → 2 cards per row
 * 2) Process grid → 2 divs per row
 * 3) Contact section → 1 column × 2 rows (info on top, form below)
 * 4) Trust grid → all 6 trust-badges horizontal across the screen
 * ========================================================================= */
@media (max-width:760px){

  /* ---- 1. Features (Built for Customers) — 2 cards per row ---- */
  html body section#features,
  html body section#features > .container{
    max-width:100% !important;
    width:100% !important;
    box-sizing:border-box !important;
    padding-left:14px !important;
    padding-right:14px !important;
  }
  html body section#features > .container > .features-grid,
  html body section#features > .container > div:not(.sect-head){
    display:grid !important;
    grid-template-columns:repeat(2, minmax(0, 1fr)) !important;
    gap:10px !important;
    max-width:100% !important;
    width:100% !important;
    box-sizing:border-box !important;
    margin:0 auto !important;
  }
  html body section#features .card{
    width:100% !important;
    max-width:100% !important;
    min-width:0 !important;
    box-sizing:border-box !important;
  }

  /* ---- 2. Process (How it works) — 2 divs per row ---- */
  html body section#process,
  html body section#process > .container{
    max-width:100% !important;
    width:100% !important;
    box-sizing:border-box !important;
    padding-left:14px !important;
    padding-right:14px !important;
  }
  html body section#process > .container > .process-grid,
  html body section#process > .container > div:not(.sect-head){
    display:grid !important;
    grid-template-columns:repeat(2, minmax(0, 1fr)) !important;
    gap:10px !important;
    max-width:100% !important;
    width:100% !important;
    box-sizing:border-box !important;
    margin:0 auto !important;
  }
  html body section#process > .container > .process-grid > div,
  html body section#process > .container > div > div{
    width:100% !important;
    max-width:100% !important;
    min-width:0 !important;
    box-sizing:border-box !important;
    padding:14px 10px !important;
  }

  /* ---- 3. Contact — 1 column × 2 rows (info row, then form row) ---- */
  html body section#contact > .container > .contact-grid,
  html body section#contact > .container > div:not(.sect-head){
    display:grid !important;
    grid-template-columns:1fr !important;
    grid-template-rows:auto auto !important;
    grid-auto-flow:row !important;
    gap:14px !important;
    max-width:100% !important;
    width:100% !important;
    margin:0 auto !important;
    box-sizing:border-box !important;
  }
  /* Row 1: the contact-info column */
  html body section#contact .contact-info{
    grid-row:1 !important;
    width:100% !important;
    max-width:420px !important;
    margin:0 auto !important;
    box-sizing:border-box !important;
  }
  /* Row 2: the Send-us-a-message form */
  html body section#contact .contact-form,
  html body section#contact form.card{
    grid-row:2 !important;
    width:100% !important;
    max-width:420px !important;
    margin:0 auto !important;
    box-sizing:border-box !important;
  }
  /* Inside the form, each field is its own full-width row. */
  html body section#contact .contact-form .cf-row,
  html body section#contact .contact-form .row2{
    display:flex !important;
    flex-direction:column !important;
    gap:0 !important;
  }
  html body section#contact .contact-form .field{
    width:100% !important;
    margin-bottom:10px !important;
  }

  /* ---- 4. Trust grid — all 6 badges horizontal ---- */
  html body section.trust-strip .trust-grid,
  html body .trust-strip .trust-grid{
    display:grid !important;
    grid-template-columns:repeat(6, minmax(0, 1fr)) !important;
    grid-auto-flow:column !important;
    gap:3px !important;
    max-width:100% !important;
    width:100% !important;
    margin:0 auto !important;
    padding:0 !important;
    box-sizing:border-box !important;
  }
  html body .trust-strip .trust-badge{
    display:flex !important;
    flex-direction:column !important;
    align-items:center !important;
    justify-content:flex-start !important;
    text-align:center !important;
    padding:8px 2px !important;
    gap:4px !important;
    min-width:0 !important;
    box-sizing:border-box !important;
  }
  html body .trust-strip .trust-badge i{
    width:24px !important;
    height:24px !important;
    font-size:11px !important;
    flex-shrink:0 !important;
  }
  html body .trust-strip .trust-badge .lbl{
    font-size:8.5px !important;
    line-height:1.15 !important;
    word-break:break-word !important;
  }
  html body .trust-strip .trust-badge .val{
    font-size:7.5px !important;
    line-height:1.2 !important;
    word-break:break-word !important;
  }
}

/* ==========================================================================
   Mobile hardening layer
   Site-wide baseline so every page stays usable on a phone. Scoped to the
   760px breakpoint already used throughout this file, so desktop is untouched.
   ========================================================================== */

html{
  /* Stop iOS inflating text when a phone is rotated to landscape */
  -webkit-text-size-adjust:100%;
  text-size-adjust:100%;
}

/* Media and embeds must never be wider than their column */
img,svg,video,canvas,iframe,embed,object{max-width:100%;}
iframe,video{height:auto;}

/* Tables auto-wrapped by core.js get a scroll container instead of blowing
   out the page width. Momentum scrolling keeps it native-feeling on iOS. */
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%;}

@media (max-width:760px){
  /* iOS zooms the whole page when a focused input is under 16px. Every text
     entry point has to clear that bar or the layout jumps on every tap.
     !important is load-bearing here: ~100 of these inputs carry an inline
     style="font-size:13px", and only an author !important outranks inline.
     Confined to the mobile breakpoint, so desktop keeps its compact sizing. */
  input,select,textarea,
  .field input,.field select,.field textarea,
  .nav-search input,.nav-actions select,.topbar-search input{
    font-size:16px !important;
  }

  /* Fingers need a real target. 44px is the Apple HIG minimum. */
  .btn,button,a.btn,input[type=submit],input[type=button],[role=button]{
    min-height:44px;
  }

  /* Search boxes and the like carry fixed pixel widths (e.g. width:260px)
     that overflow a narrow toolbar; cap them to their container. */
  input,select,textarea{max-width:100%;}

  /* Long tracking numbers, URLs and emails must wrap rather than force a
     horizontal scrollbar on the whole document. */
  body{overflow-wrap:break-word;}
  pre,code{overflow-x:auto;max-width:100%;}

  /* Tighter gutters buy real estate back on narrow screens */
  .container{padding:0 16px;}
}

/* ====== Quote widget microcopy ====== */
.qg-hint{font-size:10.5px;color:var(--muted);margin-top:3px;line-height:1.35;}

/* ====== Footer accordions (phones) ======
   The footer carries 50+ links across 8 columns; on a phone that is an
   endless wall. Each column collapses behind its heading — tap to open.
   The brand column stays expanded (logo, blurb, socials). */
@media (max-width:760px){
  .foot-grid .foot-col:not(.foot-brand) > *:not(h5){display:none;}
  .foot-grid .foot-col.open > *:not(h5){display:block;}
  .foot-grid .foot-col:not(.foot-brand) h5{
    cursor:pointer;display:flex;align-items:center;justify-content:space-between;
    padding:10px 0;margin:0;border-bottom:1px solid rgba(255,255,255,.08);
    user-select:none;
  }
  .foot-grid .foot-col:not(.foot-brand) h5::after{
    content:'\f078';font-family:'Font Awesome 6 Free';font-weight:900;
    font-size:10px;opacity:.6;transition:transform .2s;
  }
  .foot-grid .foot-col.open h5::after{transform:rotate(180deg);}
}

/* ====== Mini "How it works" — teaser strip under the hero ======
   A compact 3-step arc (quote → ship → delivered) that picks up right where
   the hero's Instant Quote widget leaves off. Distinct from the full 4-tile
   #process section further down: horizontal, icon-led, one line each. */
.mini-how{background:linear-gradient(180deg,#fff,#f8fafc);border-bottom:1px solid #eef2f7;padding:22px 0;}
.mini-how-row{list-style:none;display:flex;align-items:stretch;gap:0;margin:0;padding:0;}
.mini-how-step{flex:1;display:flex;align-items:center;gap:14px;padding:6px 18px;position:relative;}
/* connector arrow between steps (desktop) */
.mini-how-step:not(:last-child)::after{
  content:'\f054';font-family:'Font Awesome 6 Free';font-weight:900;font-size:13px;
  color:var(--gold);position:absolute;right:-7px;top:50%;transform:translateY(-50%);z-index:1;
}
.mini-how-ico{
  flex-shrink:0;width:48px;height:48px;border-radius:14px;display:grid;place-items:center;
  background:var(--grad-ocean);color:#fff;font-size:19px;box-shadow:0 6px 16px rgba(4,44,84,.18);
}
.mini-how-num{
  position:absolute;top:-4px;left:34px;width:20px;height:20px;border-radius:50%;
  background:var(--gold);color:#3a2400;font-size:11px;font-weight:800;display:grid;place-items:center;
  border:2px solid #fff;
}
.mini-how-txt{display:flex;flex-direction:column;line-height:1.3;}
.mini-how-txt b{color:var(--blue-deep);font-size:15px;}
.mini-how-txt span{color:var(--muted);font-size:12.5px;}
@media (max-width:760px){
  .mini-how-row{flex-direction:column;gap:4px;}
  .mini-how-step{padding:10px 6px;}
  /* arrow points down when stacked */
  .mini-how-step:not(:last-child)::after{content:'\f078';right:auto;left:24px;top:auto;bottom:-6px;transform:none;}
}

/* ====== Earnings bar charts (Earn with MGR) ======
   Each role card's three scenario rows become proportional horizontal bars
   (width = that tier's take vs. the card's own max), so the earning range
   reads at a glance while keeping the concrete numbers. */
.earn-row{display:grid;grid-template-columns:82px 1fr 56px;align-items:center;gap:10px;margin-bottom:11px;}
.earn-row .earn-lbl{font-size:12px;color:var(--muted);white-space:nowrap;}
.earn-track{height:11px;background:#e6edf5;border-radius:6px;overflow:hidden;}
.earn-fill{height:100%;border-radius:6px;background:linear-gradient(90deg,#ff7b00,#ffcd3c);transform-origin:left;animation:earnGrow .9s cubic-bezier(.22,1,.36,1) both;}
.earn-row .earn-val{font-size:14px;font-weight:800;color:var(--blue-deep);text-align:right;}
@keyframes earnGrow{from{transform:scaleX(0);}to{transform:scaleX(1);}}
@media (prefers-reduced-motion:reduce){.earn-fill{animation:none;}}
@media (max-width:760px){.earn-row{grid-template-columns:70px 1fr 52px;gap:8px;}}

/* ====== "What We Move" cargo gallery grid ======
   Replaces the desktop-only slider with a responsive gallery that works on
   phones too. Each tile shows name + starting price always; transit time and
   insurance reveal on hover (desktop) and stay visible on touch/mobile. */
.cargo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px;}
.cargo-tile{position:relative;margin:0;border-radius:16px;overflow:hidden;aspect-ratio:4/3;cursor:pointer;box-shadow:0 6px 20px rgba(4,44,84,.12);}
.cargo-tile img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.25,.8,.25,1);}
.cargo-tile:hover img,.cargo-tile:focus-visible img{transform:scale(1.07);}
.cargo-tile:focus-visible{outline:3px solid var(--gold);outline-offset:2px;}
.cargo-info{position:absolute;inset:auto 0 0 0;padding:14px 14px 12px;color:#fff;
  background:linear-gradient(to top,rgba(4,44,84,.94) 0%,rgba(4,44,84,.72) 55%,transparent 100%);}
.cargo-name{display:block;font-size:16px;font-weight:800;line-height:1.2;}
.cargo-price{display:inline-block;color:var(--gold);font-weight:700;font-size:13px;margin-top:3px;}
.cargo-meta{display:flex;flex-direction:column;gap:3px;font-size:12px;
  max-height:0;opacity:0;margin-top:0;overflow:hidden;
  transition:max-height .35s ease,opacity .3s ease,margin-top .35s ease;}
.cargo-meta i{width:14px;opacity:.85;}
.cargo-tile:hover .cargo-meta,.cargo-tile:focus-visible .cargo-meta{max-height:70px;opacity:1;margin-top:6px;}
/* No hover (touch) or narrow screens: always show the full info. */
@media (hover:none),(max-width:760px){
  .cargo-meta{max-height:70px;opacity:1;margin-top:6px;}
}

/* ====== "How we compare" table ======
   Compares MGR against generic service categories (not named companies). */
.compare-table{width:100%;border-collapse:collapse;font-size:14px;}
.compare-table th,.compare-table td{padding:12px 14px;text-align:center;border-bottom:1px solid #eef2f7;}
.compare-table th:first-child,.compare-table td:first-child{text-align:left;color:var(--blue-deep);font-weight:600;}
.compare-table thead th{font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);}
.compare-table .cmp-us{background:#eff6ff;}
.compare-table thead .cmp-us{color:var(--blue);font-weight:800;font-size:15px;border-top:3px solid var(--blue);border-radius:8px 8px 0 0;}
.compare-table td .fa-check{color:#16a34a;}
.compare-table td .fa-xmark.no{color:#cbd5e1;}
.compare-table td .part{font-size:11px;color:#d97706;font-weight:700;text-transform:uppercase;letter-spacing:.5px;}
.compare-table tbody tr:hover{background:#fafcff;}
.compare-table tbody tr:hover .cmp-us{background:#e0edff;}

/* ====== Exit-intent offer ====== */
.exit-offer{position:fixed;inset:0;z-index:12000;display:none;align-items:center;justify-content:center;
  background:rgba(4,23,46,.62);padding:20px;opacity:0;transition:opacity .25s ease;}
.exit-offer.open{display:flex;opacity:1;}
.exit-card{background:#fff;border-radius:20px;max-width:400px;width:100%;padding:32px 26px 22px;text-align:center;
  position:relative;box-shadow:0 30px 80px rgba(0,0,0,.4);transform:translateY(12px) scale(.98);transition:transform .3s cubic-bezier(.22,1,.36,1);}
.exit-offer.open .exit-card{transform:none;}
.exit-x{position:absolute;top:12px;right:14px;background:none;border:none;font-size:18px;color:var(--muted);cursor:pointer;line-height:1;}
.exit-badge{width:56px;height:56px;border-radius:16px;background:var(--grad-sunset);color:#3a2400;display:grid;place-items:center;font-size:24px;margin:0 auto 14px;}
.exit-card h3{color:var(--blue-deep);font-size:20px;margin:0 0 8px;line-height:1.25;}
.exit-card p{color:var(--muted);font-size:14px;margin:0 0 16px;line-height:1.5;}
.exit-card form{display:flex;flex-direction:column;gap:10px;}
.exit-card input{padding:13px 14px;border:1.5px solid var(--border);border-radius:10px;font-family:inherit;font-size:16px;}
.exit-card form .btn{justify-content:center;}
.exit-done .exit-code{font-family:Menlo,Consolas,monospace;font-size:22px;font-weight:800;letter-spacing:2px;color:var(--blue);
  background:#eff6ff;border:2px dashed var(--blue-light);border-radius:12px;padding:12px;margin-top:6px;}
.exit-decline{display:block;margin:14px auto 0;background:none;border:none;color:var(--muted);font-size:12px;text-decoration:underline;cursor:pointer;}
@media (prefers-reduced-motion:reduce){.exit-offer,.exit-card{transition:none;}}
