/* Rook web: Figtree (text) + Bricolage Grotesque (display), OFL, self-hosted Latin subsets from /f/ (hashed names,
   cached a year). iMessage mockups and chat bubbles stay on the San Francisco system stack (--f-ios) so they read as real Messages.
   Palette unchanged: white / #F5F5F7, #1D1D1F ink, #6E6E73 secondary, hairlines, iMessage blue #0A84FF as the only accent.
   Fallback faces are metric-matched (size-adjust / ascent / descent) so the swap doesn't move a line. */
@font-face{font-family:"Bricolage Grotesque";src:url(/f/bricolage-latin-wght.a97804dc.woff2) format("woff2");font-weight:200 800;font-style:normal;font-display:swap}
@font-face{font-family:"Figtree";src:url(/f/figtree-latin-wght.4ba7d3d0.woff2) format("woff2");font-weight:300 900;font-style:normal;font-display:swap}
:root{
  --f-text:"Figtree",-apple-system,BlinkMacSystemFont,"Segoe UI",Arial,sans-serif;
  --f-display:var(--f-text);
  --f-ios:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","Helvetica Neue",Helvetica,Arial,sans-serif;
  --bg:#F5F5F7;--page:#FFFFFF;--surface:#FFFFFF;--surface-2:#F5F5F7;--surface-3:#E8E8ED;
  --fill:rgba(118,118,128,.12);--fill-2:rgba(118,118,128,.2);
  --ink:#1D1D1F;--ink-2:#6E6E73;--ink-3:#737378;--ink-4:#AEAEB2;--on-ink:#FFFFFF;
  --hair:#D2D2D7;--hair-2:#C7C7CC;--sep:rgba(60,60,67,.18);
  --accent:#0A84FF;--accent-press:#0071E3;--accent-soft:rgba(10,132,255,.12);--accent-text:#0066CC;
  --brand:var(--accent);--brand-soft:var(--accent-soft);--brand-ink:var(--accent-text);
  --ok:#34C759;--ok-text:#1F7A35;--warn:#FF9F0A;--warn-text:#B25000;--danger:#FF3B30;--danger-text:#D70015;
  --rk-bubble:#E9E9EB;--rk-ink:#000000;--me-bubble:#0A84FF;
  --stage:#F2F1EF;
  --lift:0 0 0 .5px rgba(0,0,0,.04);
  --lift-2:0 10px 30px -12px rgba(0,0,0,.18),0 0 0 .5px rgba(0,0,0,.06);
  --bar:rgba(255,255,255,.78);--bar-grouped:rgba(245,245,247,.82);
  --scrim:rgba(0,0,0,.32);
  --skel:rgba(118,118,128,.1);--skel-hi:rgba(118,118,128,.18);
  --ease:cubic-bezier(.25,.1,.25,1);--ease-out:cubic-bezier(.22,1,.36,1);--spring:cubic-bezier(.34,1.3,.5,1);
  --gut:20px;--tap:44px;
  --nav-h:calc(50px + env(safe-area-inset-bottom));
  color-scheme:light;
}
[data-theme=dark]{
  --bg:#000000;--page:#000000;--surface:#1C1C1E;--surface-2:#2C2C2E;--surface-3:#3A3A3C;
  --fill:rgba(118,118,128,.24);--fill-2:rgba(118,118,128,.32);
  --ink:#F5F5F7;--ink-2:#A1A1A6;--ink-3:#8E8E93;--ink-4:#636366;--on-ink:#FFFFFF;
  --hair:#38383A;--hair-2:#48484A;--sep:rgba(84,84,88,.6);
  --accent:#0A84FF;--accent-press:#409CFF;--accent-soft:rgba(10,132,255,.2);--accent-text:#409CFF;
  --ok:#30D158;--ok-text:#30D158;--warn:#FF9F0A;--warn-text:#FFB340;--danger:#FF453A;--danger-text:#FF6961;
  --rk-bubble:#262628;--rk-ink:#FFFFFF;
  --stage:#161617;
  --lift:0 0 0 .5px rgba(255,255,255,.04);
  --lift-2:0 18px 44px -16px rgba(0,0,0,.8),0 0 0 .5px rgba(255,255,255,.08);
  --bar:rgba(22,22,23,.78);--bar-grouped:rgba(0,0,0,.78);
  --scrim:rgba(0,0,0,.55);
  --skel:rgba(118,118,128,.16);--skel-hi:rgba(118,118,128,.28);
  color-scheme:dark;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;background:var(--bg)}
body{font:400 17px/1.47 var(--f-text);letter-spacing:-.011em;color:var(--ink);background:var(--bg);min-height:100dvh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-optical-sizing:auto;overflow-x:hidden}
a{color:var(--accent-text);text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit;letter-spacing:inherit}
button{cursor:pointer;background:none;border:0}
img,svg{display:block}
.sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
:focus-visible{outline:3px solid color-mix(in srgb,var(--accent) 60%,transparent);outline-offset:2px;border-radius:10px}
[hidden]{display:none!important}
::selection{background:color-mix(in srgb,var(--accent) 24%,transparent)}

/* ---------- type ---------- */
.title{font-family:var(--f-display);font-size:36px;line-height:1.06;font-weight:400;letter-spacing:-.028em;text-wrap:balance}
.title i,.title em,.display i,.display em{font-style:italic}
.display{font-family:var(--f-display);font-size:46px;line-height:1.02;font-weight:400;letter-spacing:-.032em;text-wrap:balance}
.eyebrow{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:var(--ink-2);letter-spacing:-.005em}
.eyebrow .live{width:7px;height:7px;border-radius:50%;background:var(--ok)}
.h2{font-family:var(--f-display);font-size:25px;line-height:1.15;font-weight:400;letter-spacing:-.02em}
.lede{font-size:17px;line-height:1.42;color:var(--ink-2);margin-top:6px;max-width:34ch}
.fine{font-size:13px;line-height:1.38;color:var(--ink-3);letter-spacing:0}
.muted{color:var(--ink-3)}
.num{font-variant-numeric:tabular-nums}

/* ---------- brand ---------- */
.mark{width:20px;height:20px;color:var(--ink)}
.wordmark{display:inline-flex;align-items:center;gap:7px;font-family:var(--f-display);font-weight:500;font-size:23px;letter-spacing:-.025em;color:var(--ink);line-height:1}
.wordmark .mark{width:20px;height:20px}
.avatar{width:64px;height:64px;border-radius:50%;object-fit:cover}

/* ---------- buttons ---------- */
.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--tap);padding:0 20px;border-radius:980px;font-weight:500;font-size:16px;letter-spacing:-.011em;white-space:nowrap;user-select:none;-webkit-user-select:none;transition:transform .2s var(--ease),background-color .2s var(--ease),color .2s,opacity .2s;color:var(--accent-text)}
.btn:active{transform:scale(.97)}
.btn[disabled],.btn[aria-disabled=true]{opacity:.38;pointer-events:none}
.btn.primary{background:var(--ink);color:var(--page)}
.btn.primary:active{background:color-mix(in srgb,var(--ink) 82%,var(--page))}
@media (hover:hover){.btn.primary:hover{background:color-mix(in srgb,var(--ink) 88%,var(--page))}.btn.soft:hover,.btn.line:hover{background:var(--fill-2)}}
.btn.accent{background:var(--accent);color:#fff}
.btn.accent:active{background:var(--accent-press)}
.btn.soft{background:var(--fill);color:var(--accent-text)}
.btn.soft:active{background:var(--fill-2)}
.btn.line{background:transparent;box-shadow:inset 0 0 0 1px var(--hair)}
.btn.text{padding:0 6px;min-height:36px;color:var(--accent-text);font-weight:400}
.btn.danger-text{color:var(--danger-text);padding:0 6px}
.btn.big{min-height:52px;font-size:17px;width:100%;border-radius:14px}
.btn.sm{min-height:32px;padding:0 14px;font-size:14px;font-weight:500}
.btn.block{width:100%}
.btn .spin{width:15px;height:15px;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.link{color:var(--accent-text);font-weight:400;min-height:var(--tap);display:inline-flex;align-items:center;background:none}
.iconbtn{width:var(--tap);height:var(--tap);display:grid;place-items:center;border-radius:50%;color:var(--accent-text)}
.iconbtn:active{background:var(--fill)}
.iconbtn svg{width:22px;height:22px}

/* ---------- fields ---------- */
.field{width:100%;min-height:50px;border-radius:12px;border:0;background:var(--surface-2);box-shadow:none;padding:0 16px;font-size:17px;outline:none;transition:box-shadow .2s var(--ease),background .2s}
[data-theme=dark] .field{background:var(--surface)}
.field:focus{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 35%,transparent)}
.field::placeholder{color:var(--ink-4)}
select.field{appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238E8E93' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m8 10 4-4 4 4M8 14l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;background-size:16px;padding-right:34px}
select.field.bare{box-shadow:none;background-color:transparent;min-height:40px;padding-left:8px;text-align:right;color:var(--ink-2);font-size:17px;width:auto}
.label{display:block;font-size:13px;font-weight:400;color:var(--ink-2);margin:0 4px 7px;text-transform:uppercase;letter-spacing:-.003em}
.err{color:var(--danger-text);font-size:15px;min-height:20px;margin-top:10px}
.search{position:relative}
.search svg{position:absolute;left:10px;top:50%;width:17px;height:17px;transform:translateY(-50%);color:var(--ink-3);pointer-events:none}
.search .field{padding-left:34px;min-height:36px;font-size:17px;border-radius:10px;background:var(--fill)}
[data-theme=dark] .search .field{background:var(--fill)}
.search .field:focus{box-shadow:none}

/* ---------- segmented control (iOS) ---------- */
.seg{position:relative;display:grid;grid-auto-flow:column;grid-auto-columns:1fr;padding:2px;border-radius:9px;background:var(--fill);isolation:isolate}
.seg::before{content:"";position:absolute;z-index:-1;top:2px;bottom:2px;left:2px;width:calc((100% - 4px) / var(--n,3));border-radius:7px;background:#fff;box-shadow:0 3px 8px rgba(0,0,0,.12),0 3px 1px rgba(0,0,0,.04),0 0 0 .5px rgba(0,0,0,.04);transform:translateX(calc(var(--i,0) * 100%));transition:transform .3s var(--ease-out)}
[data-theme=dark] .seg::before{background:#636366;box-shadow:0 3px 8px rgba(0,0,0,.12)}
.seg.unset::before{opacity:0}
.seg button{position:relative;min-height:28px;border-radius:7px;font-size:13px;font-weight:500;color:var(--ink);display:flex;align-items:center;justify-content:center;gap:6px;transition:opacity .2s;letter-spacing:0}
.seg button[aria-pressed=true]{font-weight:600}
.seg button:active{opacity:.6}
.seg.lg{border-radius:10px}
.seg.lg::before{border-radius:8px}
.seg.lg button{min-height:34px;font-size:15px;border-radius:8px}
.tag{font-size:11px;font-weight:600;padding:2px 7px;border-radius:999px;background:var(--accent);color:#fff;letter-spacing:0}

/* ---------- switch (iOS) ---------- */
.switch{width:51px;height:31px;border-radius:999px;background:var(--fill-2);position:relative;transition:background .25s var(--ease);flex:none}
.switch::after{content:"";position:absolute;top:2px;left:2px;width:27px;height:27px;border-radius:50%;background:#fff;box-shadow:0 3px 8px rgba(0,0,0,.15),0 3px 1px rgba(0,0,0,.06);transition:transform .3s var(--ease-out),width .2s var(--ease)}
.switch:active::after{width:31px}
.switch[aria-checked=true]{background:var(--ok)}
.switch[aria-checked=true]::after{transform:translateX(20px)}
.switch[aria-checked=true]:active::after{transform:translateX(16px)}

/* ---------- inset grouped lists (iOS Settings) ---------- */
.group{background:var(--surface);border-radius:12px;overflow:hidden}
.group-label{font-size:13px;font-weight:400;color:var(--ink-2);margin:34px 16px 7px;text-transform:uppercase;letter-spacing:-.003em;display:flex;align-items:center;gap:8px}
.group-label:first-child{margin-top:8px}
.group-foot{font-size:13px;color:var(--ink-2);margin:7px 16px 0;line-height:1.38;letter-spacing:0}
.row{position:relative;display:flex;align-items:center;gap:12px;min-height:44px;padding:10px 16px}
.row + .row::before,.row + .rowwrap::before{content:"";position:absolute;top:0;left:16px;right:0;height:.5px;background:var(--sep)}
@media (max-resolution:1dppx){.row + .row::before{height:1px}}
.row.has-logo + .row::before,.row + .row.has-logo::before{left:68px}
.row .grow{flex:1;min-width:0}
.row .t{font-weight:400;font-size:17px;letter-spacing:-.011em;line-height:1.29}
.row .s{font-size:15px;color:var(--ink-2);line-height:1.33;margin-top:1px;letter-spacing:-.005em;overflow-wrap:anywhere}
.row .s.one,.row .t.one{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row .v{color:var(--ink-2);font-size:17px}
.row.tap{transition:background .15s}
.row.tap:active{background:var(--surface-3)}
[data-theme=dark] .row.tap:active{background:var(--surface-2)}
.row .chev{width:14px;height:14px;color:var(--ink-4);flex:none;stroke-width:3}
.row.pad{display:block;padding:14px 16px}
.row.danger .t{color:var(--danger-text)}

/* ---------- badges / dots ---------- */
.badge{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;padding:3px 10px;border-radius:999px;background:var(--fill);color:var(--ink-2)}
.badge.ok{color:var(--ok-text);background:color-mix(in srgb,var(--ok) 14%,transparent)}
.badge.ink{background:var(--ink);color:var(--page)}
.dot{width:7px;height:7px;border-radius:50%;background:currentColor;display:inline-block}

/* ---------- skeleton ---------- */
.skel{position:relative;overflow:hidden;background:var(--skel);border-radius:6px;color:transparent!important}
.skel::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,var(--skel-hi),transparent);animation:shimmer 1.4s infinite}
@keyframes shimmer{to{transform:translateX(100%)}}

/* ---------- single column pages (login, invite, 404, status, connect) ---------- */
body.page{background:var(--page)}
.auth{min-height:100dvh;display:flex;flex-direction:column;padding:calc(env(safe-area-inset-top) + 12px) var(--gut) calc(env(safe-area-inset-bottom) + 20px);max-width:440px;margin:0 auto}
.auth-nav{display:flex;align-items:center;justify-content:space-between;min-height:44px}
.auth-main{flex:1;display:flex;flex-direction:column;justify-content:center;padding:28px 0 20px}
.auth-card{width:100%}
.auth-top{margin-bottom:26px}
.auth-top .title{margin-top:18px}
.auth-foot{text-align:center;font-size:13px;color:var(--ink-3);padding-top:10px}
.auth-foot a{color:var(--accent-text)}
.convo{display:flex;flex-direction:column;gap:2px;margin-bottom:24px;padding:0 9px;overflow:clip}
.convo .b{opacity:0;animation:pop .5s var(--ease-out) forwards}
.convo .b:nth-child(2){animation-delay:.45s}
.convo .b:nth-child(3){animation-delay:.9s}
.phone{display:grid;grid-template-columns:112px 1fr;gap:8px}
.phone select.field{padding-left:14px;padding-right:30px;background-position:right 8px center;font-size:17px}
.otp{position:relative;display:grid;grid-template-columns:repeat(6,1fr);gap:8px}
.otp input{position:absolute;inset:0;width:100%;height:100%;opacity:0;font-size:16px;caret-color:transparent;color:transparent;z-index:2}
.otp .cell{height:58px;border-radius:12px;background:var(--surface-2);display:grid;place-items:center;font-family:var(--f-text);font-size:26px;font-weight:500;font-variant-numeric:tabular-nums;transition:box-shadow .2s var(--ease),transform .2s var(--ease)}
[data-theme=dark] .otp .cell{background:var(--surface)}
.otp .cell.on{box-shadow:0 0 0 2px var(--accent)}
.otp .cell.on:empty::after{content:"";width:2px;height:26px;border-radius:1px;background:var(--accent);animation:blink 1s steps(1) infinite}
.otp .cell.filled{animation:tick .2s var(--ease)}
.otp.bad .cell{box-shadow:0 0 0 2px var(--danger)}
.otp.bad{animation:shake .4s var(--ease)}
@keyframes blink{50%{opacity:0}}
@keyframes tick{from{transform:scale(.92)}to{transform:none}}
@keyframes shake{20%{transform:translateX(-6px)}40%{transform:translateX(6px)}60%{transform:translateX(-4px)}80%{transform:translateX(3px)}}
.row-between{display:flex;justify-content:space-between;gap:12px;margin-top:8px}
.hint{display:flex;align-items:center;gap:8px;font-size:15px;color:var(--ink-3);margin:12px 2px 20px}
.notice .h2{margin-bottom:8px}
.notice p{color:var(--ink-2);margin-bottom:22px}
.center{text-align:center}
.center .avatar,.center .logo-xl{margin-left:auto;margin-right:auto}

/* connect page (rendered by src/routes/connect.ts) */
.cimg{display:none}
.connect-pair{display:flex;align-items:center;justify-content:center;gap:16px;margin:0 auto 28px}
.connect-pair .tile{width:80px;height:80px;border-radius:20px;background:#fff;display:grid;place-items:center;box-shadow:0 0 0 .5px rgba(0,0,0,.08),0 8px 24px -10px rgba(0,0,0,.2)}
.connect-pair .tile img{width:46px;height:46px;object-fit:contain}
.connect-pair .tile.rk{background:#1D1D1F;color:#fff}
.connect-pair .tile.rk .mark,.connect-pair .tile.rk svg{width:38px;height:38px;color:#fff}
[data-theme=dark] .connect-pair .tile.rk{box-shadow:0 0 0 .5px rgba(255,255,255,.18)}
.connect-pair .dots{display:flex;gap:5px}.connect-pair .dots i{width:5px;height:5px;border-radius:50%;background:var(--ink-4);animation:flow 1.2s infinite}
.connect-pair .dots i:nth-child(2){animation-delay:.15s}.connect-pair .dots i:nth-child(3){animation-delay:.3s}
.connect-pair.linked .dots i{background:var(--ok);animation:none}
@keyframes flow{0%,100%{opacity:.3}50%{opacity:1}}
.checks{list-style:none;display:grid;gap:12px;margin:0 0 28px;text-align:left;background:var(--surface-2);border-radius:16px;padding:16px}
[data-theme=dark] .checks{background:var(--surface)}
.checks li{display:flex;gap:12px;align-items:flex-start;color:var(--ink);font-size:15px;line-height:1.38;letter-spacing:-.005em}
.checks li svg{width:20px;height:20px;flex:none;color:var(--accent);margin-top:0}
.page-connect{background:var(--page)}
.page-connect .auth-main{justify-content:flex-start;padding-top:8vh}
.page-connect .title{font-size:34px;margin:6px 0 18px;text-align:center}
.page-connect .lede{text-align:center;margin:0 auto 24px}
.done-ic{width:52px;height:52px;border-radius:50%;background:var(--ok);color:#fff;display:grid;place-items:center;margin:-8px auto 14px;animation:popin .45s var(--spring)}
.done-ic svg{width:28px;height:28px}
.done-ic path{stroke-dasharray:30;stroke-dashoffset:30;animation:draw .5s .2s var(--ease) forwards}

/* ===================================================================== */
/* ============================ app shell ============================== */
/* ===================================================================== */
.app{max-width:600px;margin:0 auto;min-height:100dvh;padding:0 var(--gut) calc(var(--nav-h) + 40px);padding-left:max(var(--gut),env(safe-area-inset-left));padding-right:max(var(--gut),env(safe-area-inset-right))}
.view{display:none}
.view.on{display:block;animation:viewin .28s var(--ease-out)}
@keyframes viewin{from{opacity:0}to{opacity:1}}
.head{padding:calc(env(safe-area-inset-top) + 40px) 0 18px}
.head .title{padding:0 0 0 0}
.head .lede{margin-top:4px;font-size:15px;letter-spacing:-.005em}
.back{display:inline-flex;align-items:center;gap:0;margin:0 0 6px -10px;min-height:44px;padding:0 8px;color:var(--accent-text);font-size:17px}
.back svg{width:24px;height:24px}
.back:active{opacity:.5}
#banners:empty{display:none}
.banner{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border-radius:12px;background:var(--surface);margin:calc(env(safe-area-inset-top) + 12px) 0 -8px;font-size:15px;color:var(--ink-2)}
.banner + .banner{margin-top:8px}

/* tab bar: iOS, docked, translucent, safe-area aware. Tint = accent. */
.tabs{position:fixed;left:0;right:0;bottom:0;z-index:40;height:var(--nav-h);padding:0 max(6px,calc((100% - 600px)/2)) env(safe-area-inset-bottom);display:grid;grid-template-columns:repeat(4,1fr);background:var(--bar);backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:saturate(180%) blur(20px);box-shadow:0 -.5px 0 var(--sep)}
body:not([data-tab=chat]) .tabs{background:var(--bar-grouped)}
.tabs::before{display:none}
.tabs a{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding-top:6px;gap:2px;height:50px;font-size:10px;font-weight:500;color:var(--ink-3);letter-spacing:.01em;transition:color .15s}
.tabs a svg{width:26px;height:26px;transition:transform .2s var(--ease)}
.tabs a:active svg{transform:scale(.88)}
.tabs a[aria-current=page]{color:var(--accent)}
.tabs a .fill{opacity:0}
.tabs a[aria-current=page] .fill{opacity:1}

/* toast + sheet */
.toast{position:fixed;left:50%;bottom:calc(var(--nav-h) + 14px);transform:translate(-50%,10px);opacity:0;pointer-events:none;background:rgba(29,29,31,.92);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);color:#fff;padding:11px 16px;border-radius:999px;font-size:15px;font-weight:500;z-index:60;transition:transform .3s var(--ease-out),opacity .25s;max-width:calc(100% - 40px);text-align:center;display:flex;align-items:center;gap:8px;box-shadow:0 10px 30px -10px rgba(0,0,0,.35)}
[data-theme=dark] .toast{background:rgba(58,58,60,.95)}
.toast.show{opacity:1;transform:translate(-50%,0)}
.toast svg{width:16px;height:16px}
.scrim{position:fixed;inset:0;z-index:70;background:var(--scrim);opacity:0;transition:opacity .3s var(--ease);pointer-events:none}
.scrim.on{opacity:1;pointer-events:auto}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:80;max-width:600px;margin:0 auto;background:var(--surface);border-radius:16px 16px 0 0;padding:8px var(--gut) calc(env(safe-area-inset-bottom) + 20px);transform:translateY(105%);transition:transform .45s var(--ease-out);box-shadow:0 -10px 40px -10px rgba(0,0,0,.2)}
[data-theme=dark] .sheet{background:var(--surface)}
.sheet.on{transform:none}
.sheet .grab{width:36px;height:5px;border-radius:9px;background:var(--hair-2);margin:0 auto 18px}
.sheet .h2{margin-bottom:8px}
.sheet p{color:var(--ink-2);font-size:15px;margin-bottom:18px;letter-spacing:-.005em}

/* ============================== chat (Messages) ============================== */
body[data-tab=chat]{overflow:hidden;background:var(--page)}
body[data-tab=chat] #banners{display:none}
.view[data-view=chat].on{position:fixed;left:0;right:0;top:0;bottom:var(--nav-h);display:flex;flex-direction:column;max-width:600px;margin:0 auto;animation:none;background:var(--page)}
.chat-head{font-family:var(--f-ios);position:relative;z-index:5;display:flex;flex-direction:column;align-items:center;padding:calc(env(safe-area-inset-top) + 8px) 16px 8px;background:var(--bar);backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:saturate(180%) blur(20px);box-shadow:0 .5px 0 var(--sep)}
.chat-head img{width:50px;height:50px;border-radius:50%;object-fit:cover}
.chat-head .who{display:inline-flex;align-items:center;gap:1px;margin-top:5px;font-size:12px;font-weight:500;color:var(--ink);letter-spacing:0;padding:2px 6px 2px 9px;border-radius:99px;background:var(--fill)}
.chat-head .who svg{width:10px;height:10px;color:var(--ink-3)}
.chat-head .st{font-size:11px;color:var(--ink-3);min-height:16px;margin-top:3px}
.chat-head .st.typing{color:var(--accent-text)}
.stream{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:10px 16px 8px;-webkit-overflow-scrolling:touch}
.stream-inner{display:flex;flex-direction:column;gap:2px;min-height:100%;justify-content:flex-end}
.b{position:relative;font-family:var(--f-ios);max-width:75%;padding:7px 12px 8px;border-radius:18px;font-size:17px;line-height:1.3;white-space:pre-wrap;overflow-wrap:anywhere;letter-spacing:-.011em}
.b.rk{align-self:flex-start;background:var(--rk-bubble);color:var(--rk-ink)}
.b.me{align-self:flex-end;background:var(--me-bubble);color:#fff}
.b.me a{color:#fff;text-decoration:underline;text-underline-offset:2px}
.b.rk a{color:var(--accent-text);text-decoration:underline;text-underline-offset:2px}
.b.tail{margin-bottom:8px}
/* iMessage tails */
.b.tail::before,.b.tail::after{content:"";position:absolute;bottom:0;height:20px}
.b.me.tail::before{right:-7px;width:20px;background:var(--me-bubble);border-bottom-left-radius:16px 14px}
.b.me.tail::after{right:-26px;width:26px;background:var(--page);border-bottom-left-radius:10px}
.b.rk.tail::before{left:-7px;width:20px;background:var(--rk-bubble);border-bottom-right-radius:16px 14px}
.b.rk.tail::after{left:-26px;width:26px;background:var(--page);border-bottom-right-radius:10px}
.b.new{animation:pop .4s var(--ease-out)}
.b.me.new{transform-origin:100% 100%}
.b.rk.new{transform-origin:0 100%}
@keyframes pop{from{opacity:0;transform:translateY(10px) scale(.96)}to{opacity:1;transform:none}}
.b.pending{opacity:.6}
.b.failed{background:color-mix(in srgb,var(--me-bubble) 50%,var(--ink-3))}
.receipt{font-family:var(--f-ios);align-self:flex-end;font-size:11px;color:var(--ink-3);font-weight:500;margin:-4px 4px 8px;letter-spacing:0}
.receipt.bad{color:var(--danger-text);cursor:pointer}
.stamp{font-family:var(--f-ios);align-self:center;font-size:11px;color:var(--ink-3);font-weight:400;margin:14px 0 8px;letter-spacing:0}
.stamp b{font-weight:600}
.typing{font-family:var(--f-ios);align-self:flex-start;display:none;gap:4px;padding:12px 14px;border-radius:18px;background:var(--rk-bubble);margin:2px 0 8px;transform-origin:0 100%;position:relative}
.typing.on{display:flex;animation:pop .3s var(--ease-out)}
.typing::after{content:"";position:absolute;left:-2px;bottom:-2px;width:9px;height:9px;border-radius:50%;background:var(--rk-bubble)}
.typing i{width:8px;height:8px;border-radius:50%;background:var(--ink-3);opacity:.5;animation:bl 1.2s infinite}
.typing i:nth-child(2){animation-delay:.16s}.typing i:nth-child(3){animation-delay:.32s}
@keyframes bl{0%,60%,100%{opacity:.35}30%{opacity:.95}}
.empty{margin:auto 0;text-align:center;color:var(--ink-2);padding:28px 8px;display:flex;flex-direction:column;align-items:center}
.empty img{width:72px;height:72px;border-radius:50%;margin-bottom:14px}
.empty .h2{color:var(--ink)}
.empty p{margin-top:6px;max-width:28ch;color:var(--ink-2);font-size:15px}
.chips{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:20px}
.chip{min-height:34px;padding:0 14px;border-radius:999px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--hair);font-size:15px;color:var(--accent-text);font-weight:400;transition:transform .16s var(--ease),background .2s}
.chip:active{transform:scale(.96);background:var(--fill)}
.composer{font-family:var(--f-ios);padding:6px 12px 10px;background:var(--page)}
.composer-inner{display:flex;align-items:flex-end;gap:8px;padding:3px 3px 3px 14px;border-radius:20px;background:var(--page);box-shadow:inset 0 0 0 1px var(--hair)}
.composer textarea{flex:1;border:0;background:none;outline:none;resize:none;font-size:17px;line-height:1.3;padding:5px 0;max-height:150px;letter-spacing:-.011em}
.composer textarea::placeholder{color:var(--ink-4)}
.send{width:30px;height:30px;border-radius:50%;background:var(--accent);display:grid;place-items:center;flex:none;transition:transform .25s var(--spring),opacity .2s}
.send:disabled{opacity:0;transform:scale(.4)}
.send:active{background:var(--accent-press);transform:scale(.9)}
.send svg{width:16px;height:16px}
.chat-note{font-size:11px;color:var(--ink-3);text-align:center;margin-top:7px}

/* ============================== plan ============================== */
.usage{padding:16px 16px 14px}
.usage .top{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.usage .big{font-size:15px;font-weight:400;color:var(--ink-2);letter-spacing:-.005em}
.usage .big b{font-family:var(--f-display);font-size:32px;font-weight:400;letter-spacing:-.02em;margin-right:4px;color:var(--ink);font-variant-numeric:tabular-nums}
.meter{height:6px;border-radius:99px;background:var(--fill);overflow:hidden;margin:12px 0 10px}
.meter i{display:block;height:100%;border-radius:99px;background:var(--accent);width:0;transition:width .9s var(--ease-out)}
.meter.full i{background:var(--warn)}
.pro-hero{padding:4px 0 0}
.price-wrap{display:flex;align-items:flex-end;gap:8px;margin:28px 0 4px;min-height:70px;overflow:hidden;position:relative}
.price{font-family:var(--f-display);font-size:68px;line-height:1;font-weight:400;letter-spacing:-.035em;font-variant-numeric:tabular-nums;display:inline-block}
.price.swap{animation:priceIn .42s var(--ease-out)}
@keyframes priceIn{from{opacity:0;transform:translateY(24%)}to{opacity:1;transform:none}}
.per{font-size:17px;color:var(--ink-2);font-weight:400;padding-bottom:9px}
.price-sub{color:var(--ink-2);font-size:15px;min-height:22px;letter-spacing:-.005em}
.sticker{position:static;align-self:center;margin-left:auto;transform:none;background:var(--accent-soft);color:var(--accent-text);font-weight:600;font-size:13px;letter-spacing:0;padding:5px 10px;border-radius:99px;box-shadow:none;white-space:nowrap}
.sticker.muted{background:var(--fill);color:var(--ink-2)}
.sticker.swap{animation:fadein .35s var(--ease)}
@keyframes fadein{from{opacity:0}}
.compare{margin-top:30px}
.compare .row{min-height:48px}
.compare .k{flex:1;color:var(--ink);font-size:17px}
.compare .f,.compare .p{width:56px;text-align:right;font-weight:600;font-variant-numeric:tabular-nums}
.compare .f{color:var(--ink-2);font-weight:400}
.compare .p{color:var(--ink)}
.compare .hdr{min-height:38px;padding-top:12px;padding-bottom:2px}
.compare .hdr .f,.compare .hdr .p{font-size:13px;font-weight:600;color:var(--ink-2);text-transform:uppercase;letter-spacing:0}
.compare .hdr .p{color:var(--accent-text)}
.compare .ck{width:18px;height:18px;margin-left:auto;color:var(--accent)}
.compare .f .ck{color:var(--ink-3)}
.compare .no{color:var(--ink-4)}
.compare .soon{font-size:13px;font-weight:500;color:var(--ink-2);white-space:nowrap}
.cta-zone{margin-top:22px}
.cta-zone .fine{text-align:center;margin-top:12px}
.success{display:flex;gap:14px;align-items:center;padding:16px}
.success .ic{width:40px;height:40px;border-radius:50%;background:var(--ok);display:grid;place-items:center;flex:none;color:#fff}
.success .ic svg{width:22px;height:22px}
.success .ic path{stroke-dasharray:30;stroke-dashoffset:30;animation:draw .5s .15s var(--ease) forwards}
.success.wait .ic{background:var(--fill);color:var(--ink-2)}
@keyframes draw{to{stroke-dashoffset:0}}
.proline{display:flex;align-items:center;gap:10px}
.usage.after{margin-top:30px}

/* ============================== apps ============================== */
.apps-search{position:sticky;top:0;z-index:10;margin:0 calc(-1 * var(--gut));padding:6px var(--gut) 10px;background:var(--bg)}
.apps-search.stuck{background:var(--bar-grouped);backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:saturate(180%) blur(20px);box-shadow:0 .5px 0 var(--sep);padding-top:calc(env(safe-area-inset-top) + 6px)}
.logo{position:relative;width:40px;height:40px;border-radius:10px;display:grid;place-items:center;flex:none;background:#fff;box-shadow:inset 0 0 0 .5px rgba(0,0,0,.1)}
.logo img{width:24px;height:24px;object-fit:contain}
.logo.mono{background:var(--ink-3);color:#fff;font-weight:600;font-size:17px}
.logo .on-badge{position:absolute;right:-4px;bottom:-4px;width:18px;height:18px;border-radius:50%;background:var(--ok);color:#fff;display:grid;place-items:center;box-shadow:0 0 0 2px var(--surface);animation:popin .4s var(--spring)}
.logo .on-badge svg{width:11px;height:11px}
@keyframes popin{from{transform:scale(0)}to{transform:none}}
.row.has-logo{min-height:62px}
.row.has-logo .s{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row .state{font-size:15px;color:var(--ink-2);display:flex;align-items:center;gap:6px}
.row .state .dot{display:none}
.conn-btn{min-width:0;padding:0 14px}
.conn-btn.primary{min-width:82px;background:var(--fill);color:var(--accent-text)}
.conn-btn.primary:active{background:var(--fill-2)}
.conn-btn.done{background:transparent;color:var(--ink-2);gap:4px;padding:0 4px 0 8px;font-weight:400}
.conn-btn.done svg{width:14px;height:14px;color:var(--ok-text)}
.conn-btn.arm{background:var(--danger);color:#fff;padding:0 14px;font-weight:600;animation:nudge .35s var(--ease)}
@keyframes nudge{30%{transform:translateX(-3px)}60%{transform:translateX(3px)}}
.conn-btn .spin{margin-right:2px}
.row.off .t{color:var(--ink-2)}
.soon-pill{min-width:0;text-align:center;font-size:13px;font-weight:500;color:var(--ink-2);padding:5px 11px;border-radius:99px;background:var(--fill)}
.soon-pill:active{background:var(--fill-2)}
.group-label .count{font-size:12px;font-weight:500;color:var(--ink-3);text-transform:none}
.apps-empty{text-align:center;padding:36px 12px 10px;color:var(--ink-2)}
.apps-empty .h2{color:var(--ink);font-size:20px;margin-bottom:6px}
.apps-empty .ic-bad{width:44px;height:44px;border-radius:50%;margin:0 auto 12px;display:grid;place-items:center;background:var(--fill);color:var(--ink-2);font-weight:700;font-size:20px}
.apps-more{text-align:center;margin-top:24px;line-height:1.6}
.apps-more .link{min-height:0;display:inline}
.row.fade{animation:viewin .3s var(--ease) both}

/* ============================== settings ============================== */
details{position:relative}
details + details::before{content:"";position:absolute;top:0;left:16px;right:0;height:.5px;background:var(--sep)}
summary{list-style:none;min-height:52px;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 16px;font-weight:400;font-size:17px;letter-spacing:-.011em;cursor:pointer;transition:background .15s}
summary:active{background:var(--surface-3)}
summary::-webkit-details-marker{display:none}
summary svg{width:14px;height:14px;color:var(--ink-4);flex:none;transition:transform .3s var(--ease-out)}
details[open] summary svg{transform:rotate(90deg)}
details .ans{overflow:hidden;transition:height .3s var(--ease-out)}
details p{padding:0 16px 16px;color:var(--ink-2);font-size:15px;line-height:1.47;letter-spacing:-.005em}
.who-row .t{font-variant-numeric:tabular-nums}
.kbd{font-weight:600;font-size:.94em;letter-spacing:.02em;color:var(--ink)}
.sign{text-align:center;margin-top:30px}
.banner.warn{box-shadow:inset 3px 0 0 var(--warn)}

/* ============================== status ============================== */
.status-row{display:flex;align-items:center;justify-content:space-between;min-height:48px;padding:0 16px;position:relative;font-size:17px}
.status-row + .status-row::before{content:"";position:absolute;top:0;left:16px;right:0;height:.5px;background:var(--sep)}
.pill-ok{color:var(--ok-text);font-weight:500;display:inline-flex;align-items:center;gap:7px;font-size:15px}
.pill-bad{color:var(--warn-text);font-weight:500;display:inline-flex;align-items:center;gap:7px;font-size:15px}

/* chat loading / error */
.chat-skel{display:flex;flex-direction:column;gap:8px;margin-top:auto;padding-bottom:6px}
.chat-skel .sb{height:36px;border-radius:18px}
.chat-skel .sb.me{align-self:flex-end;background:var(--accent-soft)}
.chat-skel .sb.rk{align-self:flex-start}
.chat-err{margin:auto 8px;text-align:center;padding:24px 16px;border-radius:16px;background:var(--surface-2)}
.chat-err .h2{font-size:20px}
.chat-err p{color:var(--ink-2);font-size:15px;margin:6px auto 16px;max-width:28ch}
body[data-tab=chat] .toast{bottom:calc(var(--nav-h) + 70px)}

/* login */
.page-login .auth-main{justify-content:flex-start;padding-top:10vh}
.convo .b{font-size:17px}
.convo .b.me{align-self:flex-end}
.login-av{display:flex;flex-direction:column;align-items:center;margin-bottom:22px}
.login-av img{width:60px;height:60px;border-radius:50%}
.login-av span{font-size:12px;font-weight:500;margin-top:6px;padding:2px 9px;border-radius:99px;background:var(--fill)}
.login-av small{font-size:11px;color:var(--ink-3);margin-top:10px}

/* invite / 404 */
.invite-h{margin-top:10px}
.invite-h i{font-style:italic}
.board{position:relative;width:120px;height:120px;margin:0 auto 28px;display:grid;grid-template-columns:repeat(3,1fr);border-radius:20px;overflow:hidden;box-shadow:0 0 0 .5px var(--hair)}
.board i{background:var(--surface-2)}
.board i:nth-child(even){background:var(--surface-3)}
[data-theme=dark] .board i{background:var(--surface)}[data-theme=dark] .board i:nth-child(even){background:var(--surface-2)}
.board b{position:absolute;left:calc(66.6% + 7px);top:7px;width:26px;height:26px;animation:hopsq 3s var(--ease-out) infinite}
.board b .mark{width:26px;height:26px;color:var(--ink)}
@keyframes hopsq{0%,30%{transform:none}45%,80%{transform:translate(-80px,80px)}95%,100%{transform:none}}

@media (min-width:700px){
  .head{padding-top:56px}
}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;animation-delay:0s!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}
