/* shell.css: loaded after app.css, so rules here win. Owned by the "app shell, navigation and global components" workstream of the Faxton redesign.

   WHAT LIVES HERE
   1. tokens         --fx-* radius, elevation, motion, layout variables (shared: --fx-top-h and --fx-bar-h tell other pages how much chrome is on screen)
   2. global parts   focus rings, buttons, icon buttons, inputs, chips, tabs/segments, pills, notices, modals, toasts, skeleton, empty state, progress bar
   3. header         .fx-top (logo, centred links, theme, bell, account chip) + the account menu .fx-menu
   4. phone bar      .fx-bar, EXACTLY four tabs: Home, Search, Messages, Me. Only the public shell renders it (adminShell has its own).
   5. sheets         .fx-sheet (the Me sheet), .fxn (notifications: popover on desktop, sheet on phones), .fx-back (backdrop)
   6. footer         .site-foot
   Pages never need to know about any of it: #app gets bottom padding while the bar is visible. */

/* ============================================================ 1. tokens */
:root{
  --fx-top-h:64px;
  --fx-bar-h:0px;                      /* space the phone bar takes right now: 64px + safe area, 0 while it is hidden (open chat, keyboard up) */
  --fx-bar-pad:0px;                    /* same, but stays put while the keyboard is up (used for page padding so content does not jump) */
  --fx-wrap-max:1180px;                /* the shared content width on desktop; header and footer use it so the logo lines up with the page */
  --fx-gutter:clamp(16px,5.2vw,88px);
  --fx-r-sm:8px;--fx-r-md:12px;--fx-r-lg:16px;--fx-r-xl:24px;
  --fx-ease:cubic-bezier(.2,.8,.2,1);
  --fx-spring:cubic-bezier(.3,1.4,.5,1);
  --fx-t:.18s;
  --fx-red:#e5484d;
  --fx-input-b:#d9dfd9;
  --fx-ring:0 0 0 3px color-mix(in srgb,var(--brand) 24%,transparent);
  --fx-sh-1:0 1px 2px rgba(11,61,46,.06);
  --fx-sh-2:0 8px 24px rgba(11,61,46,.10);
  --fx-sh-3:0 22px 56px -14px rgba(11,61,46,.30),0 2px 8px rgba(11,61,46,.06);
  --fx-glass:color-mix(in srgb,var(--card) 82%,transparent);--fx-glass-bar:color-mix(in srgb,var(--card) 94%,transparent);
  --fx-hair:rgba(11,61,46,.09);
  --fx-scrim:rgba(6,24,18,.46);
}
:root[data-theme=dark]{
  --fx-input-b:#2a3f49;
  --fx-ring:0 0 0 3px rgba(52,211,153,.22);
  --fx-sh-1:0 1px 0 rgba(255,255,255,.04) inset;
  --fx-sh-2:0 10px 30px rgba(0,0,0,.45);
  --fx-sh-3:0 24px 64px rgba(0,0,0,.6);
  --fx-glass:color-mix(in srgb,#0c181e 80%,transparent);--fx-glass-bar:color-mix(in srgb,#0c181e 94%,transparent);
  --fx-hair:rgba(255,255,255,.08);
  --fx-scrim:rgba(2,10,8,.62);
  --fx-e1:#101f26;--fx-e2:#132a33;--fx-e3:#173540;
}
@media (max-width:860px){:root{--fx-top-h:60px;--fx-bar-pad:calc(64px + env(safe-area-inset-bottom));--fx-bar-h:var(--fx-bar-pad);--fx-gutter:16px}}
html:has(.fx-bar.is-off){--fx-bar-h:0px;--fx-bar-pad:0px}
html.fx-kbd{--fx-bar-h:0px}

/* page canvas: warm off-white with white cards (the old light-mode override forced pure white) */
:root[data-theme=light] .main-top{--bg:#fafaf7;--surface:#f3f5f1;--border:#e5e9e5;--soft:#e4f3ec;--shadow:0 6px 24px rgba(11,61,46,.08);--r:16px}
:root[data-theme=light] body:has(.main-top){background:var(--bg)}
html.fx-lock{overflow:hidden}
body{overscroll-behavior-y:none}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* never let the phone bar cover the end of a page */
@media (max-width:860px){body:has(.fx-bar:not(.is-off)) #app{padding-bottom:var(--fx-bar-pad)}}
main.main-top{padding-bottom:28px}
/* short pages: the footer rests on the bottom edge of the window instead of floating mid-screen */
body:has(.site-foot) #app{display:flex;flex-direction:column;min-height:100dvh;box-sizing:border-box}
body:has(.site-foot) #app>main{flex:1 0 auto;width:100%}
body:has(.site-foot) #app>.site-foot{flex:none}
main.main-top.is-settings{padding-bottom:0}
@media (max-width:860px){
  main.main-top:has(.msg-shell),main.main-top:has(.mx-shell){padding-bottom:0}
  .main-top .msg-shell,.main-top .chat,.main-top .mx-shell{height:calc(100dvh - var(--fx-top-h) - var(--fx-bar-h))}
}

/* ============================================================ page transition: short and quiet (opacity + 6px, never leaves a transform behind) */
@keyframes fxPage{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.page{animation:fxPage .2s var(--fx-ease) backwards}

/* ============================================================ 2. global parts */
/* focus: one clear ring everywhere, shown for keyboard users only */
:where(a,button,summary,[role=button],[role=link],[role=tab],[role=switch],[role=menuitem],[tabindex]):focus-visible{outline:2px solid var(--brand);outline-offset:2px}
:where(input,select,textarea):focus-visible{outline:0}
:where(.btn,.icon-btn,.chip,.back-btn,.fx-tab,.fx-row,.fx-mi):focus-visible{outline:2px solid var(--brand);outline-offset:2px}
::selection{background:color-mix(in srgb,var(--brand) 28%,transparent)}
.fx-skip{position:fixed;left:12px;top:-60px;z-index:3000;background:var(--head);color:var(--bg);padding:10px 16px;border-radius:10px;font-weight:600;font-size:14px;transition:top .15s}
.fx-skip:focus{top:12px}
main:focus{outline:0}

/* buttons */
.btn{min-height:42px;padding:8px 18px;border-radius:10px;font-size:14.5px;line-height:1.25;border-width:1.5px;-webkit-tap-highlight-color:transparent;transition:background var(--fx-t),border-color var(--fx-t),color var(--fx-t),box-shadow var(--fx-t),transform .12s,filter var(--fx-t)}
.btn:hover{border-color:var(--brand)}
.btn:active:not(:disabled){transform:scale(.985)}
.btn.sm{min-height:34px;padding:5px 13px;font-size:13px;border-radius:9px}
.btn.primary{background:linear-gradient(180deg,#17a07b,#12936f);border-color:#12936f;color:#fff;box-shadow:0 1px 2px rgba(11,61,46,.22),0 8px 16px -10px rgba(19,146,111,.7)}
.btn.primary:hover:not(:disabled){filter:none;background:linear-gradient(180deg,#1aab84,#139a74);box-shadow:0 1px 2px rgba(11,61,46,.22),0 12px 22px -10px rgba(19,146,111,.8);transform:translateY(-1px)}
.btn.primary:active:not(:disabled){transform:translateY(0) scale(.985)}
:root[data-theme=dark] .btn{border-color:rgba(52,211,153,.5);color:var(--brand)}
:root[data-theme=dark] .btn:hover{background:rgba(52,211,153,.1);border-color:var(--brand)}
:root[data-theme=dark] .btn.primary{background:linear-gradient(180deg,#3fdca5,#2fcb95);border-color:#34d399;color:#04201a;box-shadow:0 0 0 1px rgba(52,211,153,.3),0 10px 24px -10px rgba(52,211,153,.55)}
:root[data-theme=dark] .btn.primary:hover:not(:disabled){background:linear-gradient(180deg,#52e4b1,#3fd6a0)}
.btn:disabled,.btn[disabled]{opacity:1;background:#eceeed;border-color:#e1e5e2;color:#7f8c86;box-shadow:none;transform:none}
:root[data-theme=dark] .btn:disabled,:root[data-theme=dark] .btn[disabled]{background:#17262d;border-color:#22343d;color:#6c828c}
.btn.ghost{border-color:transparent;background:none;color:var(--muted);box-shadow:none}
.btn.ghost:hover{background:var(--soft);border-color:transparent;color:var(--head)}
.btn .ic{flex:none}

/* icon buttons */
.icon-btn{border-radius:12px;transition:background var(--fx-t),border-color var(--fx-t),color var(--fx-t),transform .12s;-webkit-tap-highlight-color:transparent}
.icon-btn:hover{background:var(--soft);border-color:color-mix(in srgb,var(--brand) 40%,var(--border))}
.icon-btn:active{transform:scale(.93)}

/* inputs (specificity 0,0,1 so every page-level rule still wins; only the bare defaults change) */
input:where(:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color],[type=hidden],[type=submit],[type=button],[type=reset],[type=image])),select,textarea{
  min-height:44px;border-radius:10px;border-color:var(--fx-input-b);font-size:max(15px,1em);
  transition:border-color var(--fx-t),box-shadow var(--fx-t),background var(--fx-t)}
textarea{min-height:92px;line-height:1.5}
input:where(:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color],[type=hidden],[type=submit],[type=button])):hover,select:hover,textarea:hover{border-color:color-mix(in srgb,var(--brand) 45%,var(--fx-input-b))}
input:where(:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color],[type=hidden],[type=submit],[type=button])):focus,select:focus,textarea:focus{outline:0;border-color:var(--brand);box-shadow:var(--fx-ring)}
input::placeholder,textarea::placeholder{color:var(--muted);opacity:.75}
input:where([type=checkbox],[type=radio]){accent-color:var(--brand)}
.input{min-height:44px;border-color:var(--fx-input-b);border-radius:10px;transition:border-color var(--fx-t),box-shadow var(--fx-t)}
.input:hover{border-color:color-mix(in srgb,var(--brand) 45%,var(--fx-input-b))}
.input:focus-within{border-color:var(--brand);box-shadow:var(--fx-ring)}
.input input{min-height:0;box-shadow:none}
.input input:focus{box-shadow:none}
.field{font-weight:600}
.err{font-size:13.5px}

/* chips, segments, tabs */
.chip{min-height:34px;padding:0 14px;border:1px solid var(--border);background:var(--card);color:var(--text);font-size:13.5px;font-weight:500;border-radius:999px;transition:background var(--fx-t),border-color var(--fx-t),color var(--fx-t),transform .12s}
.chip:hover{border-color:var(--brand);color:var(--soft-t)}
.chip:active{transform:scale(.97)}
.chip.on,.chip[aria-pressed=true],.chip.active{background:var(--soft);border-color:var(--brand);color:var(--soft-t);font-weight:600}
.seg{border-radius:12px;padding:3px;background:var(--surface);border-color:var(--border)}
.seg button{min-height:34px;padding:6px 14px;border-radius:9px;font-size:13.5px;transition:background var(--fx-t),color var(--fx-t),box-shadow var(--fx-t)}
.seg button:not(.on):hover{background:var(--soft)}
.seg button.on{box-shadow:0 1px 2px rgba(11,61,46,.25)}
.tabs button{min-height:36px;padding:7px 16px;border-radius:999px;font-size:14px;transition:background var(--fx-t),color var(--fx-t)}
.tabs button:hover{background:var(--surface)}
.tabs button.on{background:var(--soft);color:var(--soft-t)}

/* pills, notices, back button, links */
.pill{padding:3px 11px;font-size:12px;font-weight:600;letter-spacing:.005em;line-height:1.5}
.notice{border-radius:12px;font-size:14px;box-shadow:var(--fx-sh-1)}
.back-btn{height:38px;padding:0 14px 0 10px;border:1px solid var(--border);border-radius:10px;background:var(--card);color:var(--head);font-size:14px;font-weight:500;gap:6px;box-shadow:var(--fx-sh-1);transition:background var(--fx-t),border-color var(--fx-t),transform .2s var(--fx-ease)}
.back-btn:hover{background:var(--soft);border-color:color-mix(in srgb,var(--brand) 45%,var(--border));box-shadow:none;transform:translateX(-2px)}
:root[data-theme=dark] .back-btn{border-color:var(--border)}
.backbar{padding-top:16px}
.link:hover{text-decoration:underline;text-underline-offset:3px}

/* modals: calm scale-in on desktop, a bottom sheet on phones */
@keyframes fxModal{from{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}
@keyframes fxFade{from{opacity:0}to{opacity:1}}
@keyframes fxSheetIn{from{transform:translateY(100%)}to{transform:none}}
dialog.modal{width:min(480px,calc(100% - 24px));padding:24px;border-radius:24px;border:1px solid var(--border);background:var(--card);box-shadow:var(--fx-sh-3);overscroll-behavior:contain}
dialog.modal[open]{animation:fxModal .22s var(--fx-ease)}
dialog.modal::backdrop{background:var(--fx-scrim);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}
dialog.modal[open]::backdrop{animation:fxFade .2s both}
dialog.modal .close{right:12px;top:12px;width:34px;height:34px;border-radius:50%;border:0;background:var(--surface);color:var(--muted)}
dialog.modal .close:hover{background:var(--soft);color:var(--head)}
dialog.modal:focus{outline:0}
dialog.modal h2{font-size:20px;letter-spacing:-.02em}
:root[data-theme=dark] dialog.modal{background:var(--fx-e2);border-color:rgba(255,255,255,.08);box-shadow:var(--fx-sh-3),inset 0 1px 0 rgba(110,231,183,.1)}
.so-pop .vf-ic{width:60px;height:60px}
@media (max-width:560px){
  dialog.modal{width:100%;max-width:none;margin:auto 0 0;max-height:92dvh;border-radius:24px 24px 0 0;border-bottom:0;padding:22px 18px calc(20px + env(safe-area-inset-bottom))}
  dialog.modal[open]{animation:fxSheetIn .28s var(--fx-ease)}
}

/* toast: dark pill, bottom centre, sits above the phone bar */
#toast{bottom:calc(24px + var(--fx-bar-h));width:max-content;display:flex;align-items:center;gap:6px;max-width:min(92vw,460px);padding:12px 18px;border-radius:14px;background:#0f2f26;color:#f1f8f5;font-size:14px;font-weight:500;line-height:1.4;text-align:left;box-shadow:0 14px 34px -10px rgba(5,25,19,.55);z-index:3500;transition:opacity .28s,transform .4s var(--fx-spring)}
#toast::before{content:"";flex:none;width:8px;height:8px;border-radius:50%;background:#34d399;margin-right:4px}
#toast[data-kind=error]::before{background:#ff6b73}
#toast .toast-act{margin-left:8px;color:#6ee7b7;font-weight:700;text-decoration:underline;text-underline-offset:3px;white-space:nowrap}
:root[data-theme=dark] #toast{background:#1b3a33;border:1px solid rgba(110,231,183,.18)}
@media (max-width:860px){#toast{bottom:calc(var(--fx-bar-h) + 14px)}}
html.fx-kbd #toast{bottom:16px}

/* progress bar under the route change */
#nprogress{height:3px;background:linear-gradient(90deg,#12936f,#34d399);box-shadow:0 0 12px rgba(52,211,153,.6);z-index:3400}

/* skeletons and empty states (every page can use them) */
@keyframes fxShimmer{from{background-position:200% 0}to{background-position:-200% 0}}
.skel,.skel-line,.skel-photo,.skel-circle{display:block;border-radius:10px;color:transparent;background:linear-gradient(90deg,var(--surface) 0%,var(--soft) 45%,var(--surface) 90%);background-size:200% 100%;animation:fxShimmer 1.6s linear infinite;pointer-events:none;user-select:none}
.skel-line{height:12px;margin:8px 0}.skel-line.w60{width:60%}.skel-line.w40{width:40%}.skel-line.w80{width:80%}
.skel-photo{aspect-ratio:4/3;border-radius:14px}
.skel-circle{border-radius:50%;width:40px;height:40px}
.skel-card{display:grid;gap:6px;padding:0}
.empty-state,.empty,.empty-d{display:grid;justify-items:center;align-content:center;gap:8px;text-align:center;padding:48px 16px;color:var(--muted)}
.empty-state .es-ic,.empty-d>.ic:first-child{display:grid;place-items:center;width:64px;height:64px;border-radius:50%;background:var(--soft);color:var(--soft-t);margin-bottom:6px;padding:16px}
.empty-state h2,.empty-state h3,.empty h2{font-size:18px;color:var(--head);letter-spacing:-.02em}
.empty-state p,.empty p{max-width:34ch;margin:0 auto;font-size:14.5px;color:var(--muted)}
.empty-state .btn,.empty .btn{margin-top:8px}

/* ============================================================ 3. header */
.fx-top{position:sticky;top:0;z-index:40;padding-top:env(safe-area-inset-top);background:var(--fx-glass);-webkit-backdrop-filter:saturate(1.6) blur(16px);backdrop-filter:saturate(1.6) blur(16px);border-bottom:1px solid var(--fx-hair);transition:box-shadow .2s}
.fx-in{display:grid;grid-template-columns:minmax(max-content,1fr) auto minmax(max-content,1fr);align-items:center;gap:16px;height:var(--fx-top-h);width:min(1496px,100% - 2 * var(--fx-gutter));margin-inline:auto}
@media (min-width:861px){.fx-in{max-width:var(--fx-wrap-max)}}
.fx-top .logo{justify-self:start;gap:9px;font-size:19px;color:var(--head);border-radius:10px;-webkit-tap-highlight-color:transparent}
.fx-top .logo .logo-svg{height:30px}
.fx-top .logo-word{font-family:var(--font-display);font-weight:400;letter-spacing:-.03em}
.fx-top .logo-word b{font-weight:800}
.fx-links{display:flex;align-self:stretch;gap:clamp(18px,2.4vw,34px);justify-self:center}
.fx-links a{position:relative;display:flex;align-items:center;gap:7px;padding:0 2px;font-size:14.5px;font-weight:500;letter-spacing:.002em;color:var(--muted);white-space:nowrap;transition:color var(--fx-t)}
.fx-links a::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2.5px;border-radius:3px 3px 0 0;background:var(--brand);transform:scaleX(0);transform-origin:center;transition:transform .3s var(--fx-ease)}
.fx-links a:hover{color:var(--head)}
.fx-links a:hover::after{transform:scaleX(.45)}
.fx-links a.on{color:var(--head);font-weight:650}
.fx-links a.on::after{transform:scaleX(1)}
.fx-links a:focus-visible{outline-offset:-4px;border-radius:8px}
.fx-badge{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;border-radius:99px;background:var(--fx-red);color:#fff;font:700 10.5px/1 var(--font-body);font-variant-numeric:tabular-nums}
.fx-badge[hidden]{display:none}
.fx-right{display:flex;align-items:center;justify-content:flex-end;gap:4px}
.fx-right .icon-btn{position:relative;width:40px;height:40px;border:0;background:none;border-radius:50%;color:var(--text)}
.fx-right .icon-btn:hover{background:var(--soft);color:var(--head)}
.fx-right .bell.dot::after{top:9px;right:10px;width:9px;height:9px;border:2px solid var(--bg);background:var(--brand)}
.fx-right .bell[aria-expanded=true]{background:var(--soft)}
.fx-right .me-wrap{margin-left:4px}
.fx-right .me-btn{display:flex;align-items:center;gap:2px;padding:3px 6px 3px 3px;border:1px solid transparent;border-radius:99px;background:none;color:var(--muted);transition:background var(--fx-t),border-color var(--fx-t)}
.fx-right .me-btn:hover,.fx-right .me-btn[aria-expanded=true]{background:var(--soft);color:var(--head)}
.fx-right .me-btn .ic{transition:transform .2s var(--fx-ease)}
.fx-right .me-btn[aria-expanded=true] .ic{transform:rotate(180deg)}
.fx-right .me-btn .avatar,.fx-menu .avatar{width:34px;height:34px;font-size:12.5px;font-weight:700;letter-spacing:.02em;background:#0b3d2e;color:#fff;object-fit:cover}
.fx-right .me-btn img.avatar{background:var(--soft)}
:root[data-theme=dark] .fx-right .me-btn .avatar,:root[data-theme=dark] .fx-menu .avatar{background:#34d399;color:#04201a}
:root[data-theme=dark] .fx-right .me-btn img.avatar{background:var(--soft)}
@media (max-width:1020px) and (min-width:861px){.fx-top .logo-word{display:none}.fx-links{gap:clamp(14px,1.8vw,22px)}.fx-links a{font-size:14px}}
@media (max-width:860px){
  .fx-in{grid-template-columns:1fr auto}
  .fx-links,.fx-right .me-wrap{display:none}
  .fx-top .logo{font-size:18px}
  .fx-right .icon-btn{width:42px;height:42px}
}
@media (max-width:340px){.fx-top .logo-word{display:none}}

/* account menu (desktop) */
.me-wrap{position:relative}
@keyframes fxPop{from{opacity:0;transform:translateY(-6px) scale(.97)}to{opacity:1;transform:none}}
.fx-menu{position:absolute;right:0;top:calc(100% + 12px);z-index:60;width:296px;padding:8px;background:var(--card);border:1px solid var(--border);border-radius:18px;box-shadow:var(--fx-sh-3);transform-origin:top right;animation:fxPop .18s var(--fx-ease)}
.fx-menu[hidden]{display:none}
:root[data-theme=dark] .fx-menu{background:var(--fx-e2);border-color:rgba(255,255,255,.08);box-shadow:var(--fx-sh-3),inset 0 1px 0 rgba(110,231,183,.1)}
.fx-mhead{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:11px;padding:8px 8px 12px;margin-bottom:4px;border-bottom:1px solid var(--border)}
.fx-mhead .avatar{width:42px;height:42px;font-size:14px}
.fx-mwho{display:grid;min-width:0}
.fx-mwho b{font-family:var(--font-display);font-size:15px;font-weight:650;color:var(--head);letter-spacing:-.015em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fx-mwho small{font-size:12.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fx-role{font-style:normal;font-size:11.5px;font-weight:600;padding:3px 10px;border-radius:99px;background:var(--soft);color:var(--soft-t);white-space:nowrap}
.fx-mgrp{display:grid;gap:1px;padding:4px 0}
.fx-mgrp+.fx-mgrp{border-top:1px solid var(--border)}
.fx-mi{display:flex;align-items:center;gap:12px;width:100%;height:40px;padding:0 10px;border:0;border-radius:10px;background:none;color:var(--text);font-size:14px;font-weight:500;text-align:left;cursor:pointer;transition:background .14s,color .14s}
.fx-mi .ic{color:var(--muted);transition:color .14s}
.fx-mi:hover,.fx-mi:focus-visible{background:var(--soft);color:var(--head)}
.fx-mi:hover .ic{color:var(--brand)}
.fx-mi:focus-visible{outline-offset:-2px}
.fx-mi.out,.fx-mi.out .ic{color:var(--danger)}
.fx-mi.out:hover{background:var(--danger-bg)}

/* ============================================================ 4. phone bar: Home, Search, Messages, Me */
.fx-bar{display:none}
@media (max-width:860px){
  .fx-bar{position:fixed;left:0;right:0;bottom:0;z-index:45;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));height:var(--fx-bar-h);padding:0 max(6px,calc((100% - 560px) / 2)) env(safe-area-inset-bottom);background:var(--fx-glass-bar);-webkit-backdrop-filter:saturate(1.6) blur(18px);backdrop-filter:saturate(1.6) blur(18px);border-top:1px solid var(--fx-hair);box-shadow:0 -10px 28px -22px rgba(11,61,46,.5);transition:transform .26s var(--fx-ease),opacity .2s}
  .fx-bar.is-off{display:none}
  html.fx-kbd .fx-bar{transform:translateY(110%);opacity:0;pointer-events:none}
  .fx-tab{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-width:0;padding:6px 0 4px;border:0;background:none;color:var(--muted);font:600 11.5px/1.1 var(--font-body);letter-spacing:.005em;cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation;transition:color .2s}
  .fx-ic{position:relative;display:grid;place-items:center;width:54px;height:30px;border-radius:99px;transition:background .25s var(--fx-ease),transform .16s var(--fx-spring),color .2s}
  .fx-tab:active .fx-ic{transform:scale(.88)}
  .fx-tab:hover{color:var(--head)}
  .fx-tab.on,.fx-tab.open{color:var(--soft-t);font-weight:700}
  .fx-tab.on .fx-ic,.fx-tab.open .fx-ic{background:color-mix(in srgb,var(--brand) 15%,transparent);color:var(--soft-t)}
  :root[data-theme=dark] .fx-tab.on,:root[data-theme=dark] .fx-tab.open{color:var(--brand)}
  :root[data-theme=dark] .fx-tab.on .fx-ic,:root[data-theme=dark] .fx-tab.open .fx-ic{background:rgba(52,211,153,.16);color:var(--brand)}
  .fx-tl{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .fx-ic .fx-badge{position:absolute;top:-4px;left:calc(50% + 4px);min-width:18px;height:18px;box-shadow:0 0 0 2px var(--card);animation:fxPin .35s var(--fx-spring)}
  .fx-me-img{width:26px;height:26px;border-radius:50%;object-fit:cover;background:var(--soft);box-shadow:0 0 0 1.5px var(--border);transition:box-shadow .2s}
  .fx-tab.on .fx-me-img,.fx-tab.open .fx-me-img{box-shadow:0 0 0 2px var(--brand)}
}
@keyframes fxPin{from{transform:scale(.4);opacity:0}to{transform:none;opacity:1}}

/* ============================================================ 5. sheets */
.fx-back{position:fixed;inset:0;z-index:470;background:var(--fx-scrim);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);opacity:0;transition:opacity .25s}
.fx-back.in{opacity:1}
.fx-sheet{position:fixed;left:0;right:0;bottom:0;z-index:490;display:flex;flex-direction:column;width:100%;max-width:520px;margin-inline:auto;max-height:min(90dvh,760px);background:var(--surface);border:1px solid var(--border);border-bottom:0;border-radius:24px 24px 0 0;box-shadow:0 -18px 50px -10px rgba(5,25,19,.35);transform:translateY(100%);transition:transform .3s var(--fx-ease);overscroll-behavior:contain;outline:0}
.fx-sheet.in{transform:none}
:root[data-theme=dark] .fx-sheet{background:var(--fx-e1);border-color:rgba(255,255,255,.08);box-shadow:0 -18px 50px rgba(0,0,0,.6),inset 0 1px 0 rgba(110,231,183,.12)}
.fx-grab,.fxn-grab{flex:none;display:grid;place-items:center;height:26px;cursor:grab;touch-action:none}
.fx-grab i,.fxn-grab i{display:block;width:38px;height:4.5px;border-radius:9px;background:color-mix(in srgb,var(--muted) 40%,transparent)}
.fx-scroll{overflow-y:auto;overscroll-behavior:contain;padding:0 14px calc(18px + env(safe-area-inset-bottom))}
.fx-who{display:flex;align-items:center;gap:13px;padding:12px;background:var(--card);border:1px solid var(--border);border-radius:18px;transition:background .15s}
.fx-who:active{background:var(--soft)}
.fx-who .avatar.xl{width:52px;height:52px;font-size:17px;font-weight:700;background:#0b3d2e;color:#fff;object-fit:cover}
:root[data-theme=dark] .fx-who .avatar.xl{background:#34d399;color:#04201a}
.fx-who img.avatar.xl{background:var(--soft)}
.fx-wt{display:grid;min-width:0;flex:1}
.fx-wt b{font-family:var(--font-display);font-size:17px;font-weight:650;letter-spacing:-.02em;color:var(--head);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fx-wt small{font-size:13px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fx-who>.ic{color:var(--muted);flex:none}
.fx-grp{margin-top:12px;background:var(--card);border:1px solid var(--border);border-radius:18px;overflow:hidden}
.fx-row{display:flex;align-items:center;gap:12px;width:100%;min-height:46px;padding:0 14px 0 12px;border:0;background:none;color:var(--head);font-size:15px;font-weight:500;text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .14s}
.fx-row+.fx-row{border-top:1px solid var(--border)}
.fx-row:active{background:var(--soft)}
.fx-rl{flex:1;min-width:0}
.fx-row>.ic{color:var(--muted);flex:none}
.fx-ti{display:grid;place-items:center;width:34px;height:34px;border-radius:11px;background:var(--soft);color:var(--soft-t);flex:none}
:root[data-theme=dark] .fx-ti{color:var(--brand);background:rgba(52,211,153,.12)}
.fx-row.out{color:var(--danger)}
.fx-row.out .fx-ti{background:var(--danger-bg);color:var(--danger)}
.fx-switch{position:relative;flex:none;width:44px;height:26px;border-radius:99px;background:color-mix(in srgb,var(--muted) 35%,transparent);transition:background .25s}
.fx-switch i{position:absolute;left:3px;top:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.3);transition:transform .25s var(--fx-spring)}
.fx-sw[aria-checked=true] .fx-switch{background:var(--brand)}
.fx-sw[aria-checked=true] .fx-switch i{transform:translateX(18px)}

/* notifications: popover on desktop */
@keyframes fxNote{from{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:none}}
.fxn{position:fixed;z-index:480;display:flex;flex-direction:column;width:min(400px,calc(100vw - 24px));max-height:min(620px,calc(100dvh - 92px));background:var(--card);border:1px solid var(--border);border-radius:20px;box-shadow:var(--fx-sh-3);overflow:hidden;opacity:0;transform-origin:top right;transform:translateY(-6px) scale(.98);transition:opacity .16s,transform .2s var(--fx-ease);outline:0}
.fxn.in{opacity:1;transform:none}
:root[data-theme=dark] .fxn{background:var(--fx-e2);border-color:rgba(255,255,255,.08);box-shadow:var(--fx-sh-3),inset 0 1px 0 rgba(110,231,183,.1)}
.fxn-grab{display:none}
.fxn-head{display:flex;align-items:center;gap:8px;padding:14px 12px 10px 18px}
.fxn-head h2{flex:none;font-size:17px;font-weight:700;letter-spacing:-.02em}
.fxn-count{white-space:nowrap;flex:none;font-size:11.5px;font-weight:700;padding:2px 9px;border-radius:99px;background:var(--soft);color:var(--soft-t)}
.fxn-sp{flex:1}
.fxn-all{white-space:nowrap;flex:none;border:0;background:none;color:var(--brand);font-size:13px;font-weight:650;padding:7px 8px;border-radius:8px;cursor:pointer;transition:background .15s}
:root[data-theme=light] .fxn-all{color:var(--brand-d)}
.fxn-all:hover{background:var(--soft)}
.fxn-x{display:none;width:34px;height:34px;place-items:center;border:0;border-radius:50%;background:var(--surface);color:var(--muted);cursor:pointer}
.fxn-list{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding-bottom:6px}
.fxn-gh{margin:0;padding:10px 18px 6px;font-family:var(--font-body);font-size:11.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}
.fxn-item{position:relative;display:flex;align-items:flex-start;gap:12px;padding:11px 18px;cursor:pointer;transition:background .14s}
.fxn-item:hover{background:var(--surface)}
.fxn-item:focus-visible{outline-offset:-2px;border-radius:12px}
.fxn-item.new{background:color-mix(in srgb,var(--brand) 6%,var(--card))}
.fxn-item.new:hover{background:color-mix(in srgb,var(--brand) 10%,var(--card))}
.fxn-ic{display:grid;place-items:center;flex:none;width:38px;height:38px;border-radius:12px;background:var(--soft);color:var(--soft-t)}
.fxn-ic.verified{background:#d6efe4;color:#0b6e53}
.fxn-ic.rejected{background:var(--danger-bg);color:var(--danger)}
.fxn-ic.info{background:var(--info-bg);color:var(--info)}
:root[data-theme=dark] .fxn-ic.verified{background:rgba(52,211,153,.16);color:#6ee7b7}
:root[data-theme=dark] .fxn-ic.rejected{color:#ff8a93}
:root[data-theme=dark] .fxn-ic.info{color:#7fb0ff}
.fxn-tx{display:grid;gap:1px;min-width:0;flex:1}
.fxn-tx b{font-size:14px;font-weight:650;color:var(--head);line-height:1.35}
.fxn-b{font-size:13px;line-height:1.4;color:var(--text);opacity:.82;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.fxn-tx small{font-size:12px;color:var(--muted);margin-top:2px}
.fxn-dot{position:absolute;right:18px;top:17px;width:9px;height:9px;border-radius:50%;background:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 20%,transparent)}
.fxn-item.new .fxn-tx{padding-right:18px}
.fxn-empty{display:grid;justify-items:center;gap:6px;text-align:center;padding:44px 28px 40px}
.fxn-eic{display:grid;place-items:center;width:60px;height:60px;border-radius:50%;background:var(--soft);color:var(--soft-t);margin-bottom:6px}
.fxn-empty b{font-family:var(--font-display);font-size:17px;color:var(--head);letter-spacing:-.02em}
.fxn-empty p{font-size:13.5px;color:var(--muted);max-width:30ch}
.fxn-foot{display:flex;align-items:center;justify-content:center;gap:8px;min-height:48px;border-top:1px solid var(--border);color:var(--brand);font-size:14px;font-weight:650;transition:background .15s}
:root[data-theme=light] .fxn-foot{color:var(--brand-d)}
.fxn-foot:hover{background:var(--surface)}
.fxn-foot b{min-width:20px;padding:1px 7px;border-radius:99px;background:var(--fx-red);color:#fff;font-size:11.5px;text-align:center}
/* ...and a bottom sheet on phones */
@media (max-width:860px){
  .fxn{left:0;right:0;bottom:0;top:auto;width:100%;max-width:560px;margin-inline:auto;max-height:min(84dvh,700px);border-radius:24px 24px 0 0;border-bottom:0;opacity:1;transform:translateY(100%);transform-origin:bottom;transition:transform .3s var(--fx-ease);padding-bottom:env(safe-area-inset-bottom)}
  .fxn.in{transform:none}
  .fxn-grab{display:grid}
  .fxn-head{padding-top:2px}
  .fxn-x{display:grid}
  .fxn-item{padding-block:12px}
}

/* ============================================================ 6. footer: dark emerald strip with teal hairlines (both themes) */
.site-foot{--logo-a:#34d399;--logo-b:#9ee6c9;--brand:#34d399;--brand-c:#04201a;margin-top:48px;color:#a9c4ba;border-top:1px solid rgba(52,211,153,.35);background:radial-gradient(760px 240px at 0% 100%,rgba(52,211,153,.14),transparent 70%),radial-gradient(520px 260px at 100% 0%,rgba(52,211,153,.07),transparent 70%),linear-gradient(180deg,#09171a,#06120f) #07140f;overflow:hidden}
:root[data-theme=dark] .site-foot{background:radial-gradient(760px 240px at 0% 100%,rgba(52,211,153,.14),transparent 70%),radial-gradient(520px 260px at 100% 0%,rgba(52,211,153,.07),transparent 70%),linear-gradient(180deg,#09171a,#06120f) #07140f}
.site-foot::before{content:"";position:absolute;left:0;right:0;top:0;height:1px;background:linear-gradient(90deg,transparent,rgba(52,211,153,.7) 30%,rgba(52,211,153,.7) 70%,transparent);pointer-events:none}
.site-foot::after{content:"";position:absolute;right:-30px;bottom:0;width:340px;height:100%;opacity:.5;pointer-events:none;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 340 220' fill='none' stroke='%2334d399' stroke-width='1' stroke-linejoin='round'%3E%3Cpath d='M70 220V110l60-44 60 44v110' opacity='.45'/%3E%3Cpath d='M150 220V80l70-52 70 52v140' opacity='.6'/%3E%3Cpath d='M210 220v-70h40v70' opacity='.35'/%3E%3Cpath d='M270 220V120l50-36' opacity='.3'/%3E%3C/svg%3E") no-repeat right bottom/contain}
.sf-in{position:relative;z-index:1;width:min(1496px,100% - 2 * var(--fx-gutter));padding:36px 0 32px;gap:36px}
@media (min-width:861px){.sf-in{max-width:var(--fx-wrap-max)}}
.sf-main{gap:20px}
.sf-social{gap:6px;margin-left:-10px}
.sf-social a{width:44px;height:44px;border-radius:12px;color:#9db8ae}
.sf-social a svg{width:21px;height:21px}
.sf-social a:hover{color:#34d399;background:rgba(52,211,153,.1);transform:translateY(-2px)}
.sf-social a:focus-visible,.sf-links a:focus-visible,.sf-links button:focus-visible{outline-color:#34d399}
.sf-links{gap:6px 30px}
.sf-links a,.sf-links button{font-family:var(--font-body);font-size:14.5px;font-weight:500;color:#d4e5de;transition:color .15s}
.sf-links a:hover,.sf-links button:hover{color:#34d399}
.sf-ext{color:#34d399;width:14px;height:14px;opacity:.9}
.sf-tog{display:inline-flex;align-items:center;justify-content:space-around;width:48px;height:26px;padding:0 5px;margin-right:4px;border:0;border-radius:99px;background:#34d399;color:#04201a;gap:0}
.sf-tog svg{width:14px;height:14px;padding:0;border-radius:0;background:none!important;color:#04201a!important}
.sf-tog svg:first-child{padding-right:0}
.sf-brand{gap:8px;padding-left:44px;border-left:1px solid rgba(52,211,153,.2);min-width:280px;color:#34d399}
.sf-mark .logo-svg{height:48px}
.sf-brand b{font-family:var(--font-display);font-size:16px;font-weight:800;letter-spacing:.32em;color:#fff}
.sf-brand b span{font-weight:400;color:#8fb0a4}
.sf-brand small{font-size:12.5px;color:#7f9c91}
@media (max-width:860px){
  .site-foot{margin-top:36px;margin-bottom:0}
  .site-foot::after{width:220px;opacity:.35}
  .sf-in{grid-template-columns:1fr;gap:22px;padding:28px 0 26px}
  .sf-brand{padding:20px 0 0;border-left:0;border-top:1px solid rgba(52,211,153,.2);min-width:0;justify-items:start;text-align:left}
  .sf-mark .logo-svg{height:40px}
  .sf-links{gap:2px 22px}
  .sf-links a,.sf-links button{min-height:40px;font-size:14.5px}
}

/* ============================================================ product tour (look only; logic lives in tour.js) */
.tour-card{border-radius:20px;border:1px solid var(--border);padding:20px 22px 18px;box-shadow:0 28px 70px -16px rgba(5,25,19,.55)}
:root[data-theme=dark] .tour-card{background:var(--fx-e2);border-color:rgba(255,255,255,.1)}
.tour-step{font-size:11.5px;letter-spacing:.14em}
.tour-t{font-size:20px;letter-spacing:-.02em}
.tour-b{font-size:14.5px;line-height:1.55}
.tour-b b{color:var(--head);font-weight:650}
.tour-spot{border-radius:16px}
.tour-actions .btn{min-height:36px}

/* ============================================================ reduced motion: keep state changes, drop movement */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
  .page{animation:none}
  .skel,.skel-line,.skel-photo,.skel-circle{animation:none}
}
