/* ===== Cori - one mechanism, two skins ==============================
   :root        LIGHT  - the Cori platform and the operator console.
                White ground, charcoal ink, coral-red accent: the logo's
                own canvas.
   body.inside  DARK   - a sub-app (speed dating). Neutral near-black,
                same coral, same tokens.
   --cream  = "strong ink / inverted surface"
   --oncream= "text that sits ON a --cream surface"
   ==================================================================== */
:root{
  color-scheme:light;
  --bg:#FFFFFF; --accent:#F9483A; --accent-ink:#C4251A; --onaccent:#FFFFFF;
  --cream:#2F2F2F; --oncream:#FFFFFF;
  --dim:#6B6663; --faint:#938D89;
  --hair:rgba(47,47,47,.10); --hair2:rgba(47,47,47,.16);
  --field:#FFFFFF; --fieldline:rgba(47,47,47,.20);
  --glass:#FAF8F7;
  --rim:inset 0 0 0 1px rgba(47,47,47,.09), 0 1px 2px rgba(47,47,47,.05);
  --blur:blur(22px) saturate(1.5);
  --alarm:#B4541B; --good:#2F7D52;
  --r:14px; --rs:10px;
  --f:'Archivo',system-ui,sans-serif;
  --fs:'Hanken Grotesk',system-ui,sans-serif;
  --fm:'JetBrains Mono',ui-monospace,monospace;
}
body.inside{
  color-scheme:dark;
  --bg:#171514; --accent:#F9483A; --accent-ink:#F9483A; --onaccent:#FFFFFF;
  --cream:#F5F2F0; --oncream:#171514;
  --dim:#A8A09B; --faint:#7C736E;
  --hair:rgba(255,255,255,.09); --hair2:rgba(255,255,255,.16);
  --field:rgba(255,255,255,.06); --fieldline:rgba(255,255,255,.14);
  --glass:rgba(255,255,255,.06);
  --rim:inset 0 1px 0 rgba(255,255,255,.14), inset 0 -1px 0 rgba(0,0,0,.30);
  --alarm:#E8B06A; --good:#8FBF9F;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
/* the hidden attribute beats component display rules (.icon grid, nav/.rails flex) */
[hidden]{display:none!important}
html,body{margin:0;padding:0}
body{background:var(--bg);color:var(--cream);font-family:var(--f);font-size:15px;line-height:1.55;
  -webkit-font-smoothing:antialiased;min-height:100vh;transition:background .5s ease}
#wash{position:fixed;inset:-10%;z-index:-1;pointer-events:none;filter:blur(30px);transition:background .5s ease;
  background:radial-gradient(52% 38% at 10% 6%,rgba(249,72,58,.09),transparent 64%),
             radial-gradient(58% 44% at 90% 90%,rgba(214,150,86,.07),transparent 66%),var(--bg)}
body.op #wash{background:
  radial-gradient(52% 38% at 10% 6%,rgba(249,72,58,.07),transparent 64%),
  radial-gradient(56% 42% at 92% 88%,rgba(96,116,146,.06),transparent 66%),var(--bg)}
body.inside #wash{background:
  radial-gradient(56% 38% at 14% 4%,rgba(249,72,58,.14),transparent 62%),
  radial-gradient(50% 38% at 88% 22%,rgba(255,255,255,.05),transparent 64%),var(--bg)}
body.op .brand{letter-spacing:.01em}
.wrap{max-width:560px;margin:0 auto;
  padding:0 18px calc(120px + env(safe-area-inset-bottom,0px))}
.wrap.wide{max-width:720px}
header{position:sticky;top:0;z-index:40;background:#FFFFFF;
  box-shadow:0 1px 0 var(--hair);padding-top:env(safe-area-inset-top,0px)}
body.inside header{background:rgba(23,21,20,.92);
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
.top{max-width:560px;margin:0 auto;display:flex;align-items:center;gap:11px;padding:13px 18px}
.top.wide{max-width:720px}
/* The mark carries the logo. JS may set an inline background (app accent
   gradient, or #fff for a platform logo); the tokens below are the default
   and must stay legible for the initials fallback. */
.mark{width:28px;height:28px;border-radius:9px;flex:none;display:grid;place-items:center;
  font-weight:700;font-size:13px;color:var(--oncream);overflow:hidden;
  background:var(--cream);box-shadow:inset 0 0 0 1px var(--hair2)}
.mark:has(img){background:#FFFFFF}
/* app.js paints the platform tile with a hardcoded old-coral gradient when no
   platform logo is on file; force the brand tile for that fallback only. */
body:not(.inside) .mark:not(:has(img)){background:var(--cream)!important}
body.inside .mark{color:var(--onaccent)}
.mark img{width:100%;height:100%;object-fit:cover}
.brand{font-weight:700;font-size:17px;letter-spacing:-.02em;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;min-width:0}
body.inside .brand{font-family:var(--fs);font-weight:300;font-size:19px}
.sp{flex:1}
.icon{width:34px;height:34px;flex:none;border:0;border-radius:50%;display:grid;place-items:center;
  background:var(--glass);box-shadow:var(--rim),inset 0 0 0 1px var(--hair2);color:var(--cream);position:relative}
.icon svg{width:17px;height:17px}
.badge{position:absolute;top:-2px;right:-2px;min-width:16px;height:16px;padding:0 4px;border-radius:9px;
  background:var(--accent);color:var(--onaccent);font-size:9.5px;font-weight:700;display:grid;place-items:center;
  box-shadow:0 0 0 2px var(--bg)}
.lang{display:flex;background:var(--glass);border-radius:999px;
  box-shadow:var(--rim),inset 0 0 0 1px var(--hair2);overflow:hidden}
.lang button{border:0;background:transparent;color:var(--faint);font-family:var(--fm);font-size:10.5px;
  padding:6px 9px;letter-spacing:.06em}
.lang button[aria-pressed=true]{background:var(--cream);color:var(--oncream);font-weight:500}
h1{font-size:clamp(28px,7vw,40px);line-height:1.04;letter-spacing:-.03em;margin:0;text-wrap:balance}
body.inside h1{font-family:var(--fs);font-weight:200}
h2{font-size:23px;letter-spacing:-.02em;margin:0;text-wrap:balance}
h3{font-size:17px;letter-spacing:-.01em;margin:0}
body.inside h2,body.inside h3{font-family:var(--fs);font-weight:300}
p{margin:0}
.eyebrow{font-family:var(--fm);font-size:10px;letter-spacing:.13em;text-transform:uppercase;color:var(--dim)}
.lede{color:var(--dim);font-size:15px;max-width:52ch}
.note{color:var(--dim);font-size:13px;line-height:1.5}
h1+.lede,h1+p,h1+.note{margin-top:10px}
.stack>h1+.lede,.stack>h1+p,.stack>h1+.note,
.stack-lg>h1+.lede,.stack-lg>h1+p,.stack-lg>h1+.note{margin-top:0}
.stack{display:flex;flex-direction:column;gap:13px}
.stack-lg{display:flex;flex-direction:column;gap:26px}
.row{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:11px;align-items:end}
.box{background:var(--glass);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  box-shadow:var(--rim);border-radius:var(--r);padding:17px}
label{display:block;font-family:var(--fm);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--dim);margin:0 0 6px}
input,select,textarea{width:100%;font:inherit;font-size:16px;color:var(--cream);background:var(--field);
  border:1px solid var(--fieldline);border-radius:var(--rs);padding:12px 13px;outline:0}
input::placeholder,textarea::placeholder{color:var(--faint)}
input:focus,select:focus,textarea:focus{border-color:var(--accent)}
textarea{min-height:88px;resize:vertical}
select{appearance:none;padding-right:34px;background-image:linear-gradient(45deg,transparent 50%,var(--dim) 50%),
  linear-gradient(135deg,var(--dim) 50%,transparent 50%);
  background-position:right 17px top calc(50% - 1px),right 12px top calc(50% - 1px);
  background-size:5px 5px,5px 5px;background-repeat:no-repeat;cursor:pointer}
.btn{border:0;border-radius:999px;padding:13px 21px;font:inherit;font-weight:600;font-size:15px;
  background:var(--cream);color:var(--oncream);min-height:46px;cursor:pointer;
  box-shadow:inset 0 0 0 1px var(--hair2);
  transition:filter 120ms ease,transform 120ms ease,box-shadow 120ms ease,opacity 120ms ease}
.btn.ghost{background:var(--glass);color:var(--cream);box-shadow:var(--rim),inset 0 0 0 1px var(--hair2)}
.btn.sm{padding:8px 15px;font-size:13.5px;min-height:auto}
.btn.full{width:100%}
.btn:disabled{opacity:.45;cursor:not-allowed}
@media (hover:hover){
  .btn:hover:not(:disabled){filter:brightness(1.08);transform:translateY(-1px)}
  .btn.ghost:hover:not(:disabled){filter:brightness(.97)}
  body.inside .btn.ghost:hover:not(:disabled){filter:brightness(1.35)}
}
.btn:active:not(:disabled){filter:brightness(.94);transform:translateY(1px)}
.btn.accent{background:var(--accent);color:var(--onaccent)}
.chk{display:flex;gap:10px;align-items:flex-start;font-size:14px;color:var(--dim);
  font-family:var(--f);text-transform:none;letter-spacing:0;margin:0}
.chk input{width:19px;height:19px;flex:none;margin-top:1px;accent-color:var(--accent)}
.err{border-radius:var(--rs);padding:10px 13px 10px 14px;background:rgba(249,72,58,.10);color:#8C1D12;
  font-size:13.5px;border-left:3px solid var(--accent)}
body.inside .err{background:rgba(249,72,58,.16);color:#FFD8D3}
.ok{border-radius:var(--rs);padding:10px 13px 10px 14px;background:var(--glass);
  box-shadow:var(--rim);font-size:13.5px;color:var(--cream);border-left:3px solid var(--good)}
.card{background:var(--glass);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  box-shadow:var(--rim);border-radius:var(--r);padding:16px;border-left:2px solid var(--accent);
  text-align:left;width:100%;border-top:0;border-right:0;border-bottom:0;color:inherit;display:block;
  transition:transform 120ms ease,border-left-color 120ms ease,box-shadow 120ms ease}
button.card{cursor:pointer}
@media (hover:hover){
  .card:hover{transform:translateY(-2px);border-left-color:var(--accent);
    box-shadow:var(--rim),0 10px 26px rgba(47,47,47,.14)}
  body.inside .card:hover{box-shadow:var(--rim),0 10px 26px rgba(0,0,0,.34)}
}
.kind{font-family:var(--fm);font-size:10px;letter-spacing:.1em;text-transform:uppercase;margin-bottom:6px}
.when{font-family:var(--fm);font-size:12px;color:var(--dim);margin-top:5px}
.pill{font-family:var(--fm);font-size:10px;letter-spacing:.06em;padding:4px 9px;border-radius:999px;
  background:var(--glass);box-shadow:inset 0 0 0 1px var(--hair2);color:var(--dim)}
.stat{display:grid;grid-template-columns:repeat(auto-fit,minmax(88px,1fr));gap:13px;margin-top:4px}
.stat div span{display:block;font-family:var(--fm);font-size:9.5px;letter-spacing:.09em;
  text-transform:uppercase;color:var(--dim)}
.stat div b{display:block;font-size:24px;font-weight:600;letter-spacing:-.02em;margin-top:2px}
.sysrow{display:flex;gap:12px;padding:11px 0;font-size:13.5px;border-top:1px solid var(--hair)}
.sysrow:first-child{border-top:0}
.sysrow b{font-family:var(--fm);font-size:10px;letter-spacing:.07em;text-transform:uppercase;
  color:var(--dim);width:96px;flex:none;font-weight:400}
.sysrow span{color:var(--dim);flex:1}
nav{position:fixed;left:50%;transform:translateX(-50%);
  bottom:calc(16px + env(safe-area-inset-bottom,0px));z-index:50;display:flex;gap:2px;
  padding:6px;border-radius:999px;background:#FFFFFF;
  box-shadow:0 1px 2px rgba(47,47,47,.08), 0 10px 30px rgba(47,47,47,.14),
             inset 0 0 0 1px rgba(47,47,47,.08);
  max-width:calc(100vw - 24px);overflow-x:auto;scrollbar-width:none}
body.inside nav{background:rgba(255,255,255,.10);
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  box-shadow:var(--rim),0 12px 36px rgba(0,0,0,.5)}
nav::-webkit-scrollbar{display:none}
nav button{background:transparent;border:0;min-width:60px;padding:6px 9px 5px;border-radius:20px;
  display:flex;flex-direction:column;align-items:center;gap:3px;color:var(--faint);
  font:inherit;font-size:12px;font-weight:600;white-space:nowrap}
nav button svg{width:19px;height:19px}
nav button .l{font-size:9.5px;font-weight:600;white-space:nowrap}
nav button[aria-current=page]{background:var(--cream);color:var(--oncream)}
.rails{display:flex;gap:8px;overflow-x:auto;padding:2px 18px 9px;max-width:560px;margin:0 auto;
  scrollbar-width:none}
.rails::-webkit-scrollbar{display:none}
.bub{flex:none;background:transparent;border:0;padding:0;display:flex;flex-direction:column;
  align-items:center;gap:4px;width:58px;color:var(--dim)}
.bub .disc{width:46px;height:46px;border-radius:15px;display:grid;place-items:center;overflow:hidden;
  background:var(--cream);box-shadow:inset 0 0 0 1px var(--hair2);font-weight:700;
  color:var(--oncream);position:relative}
.bub .disc:has(img){background:#FFFFFF}
/* an app's disc carries that app's accent gradient, set inline by app.js */
.rails .bub:not(:first-child) .disc{color:var(--onaccent)}
/* the platform's own disc: app.js hardcodes an old-coral gradient when the
   platform has no logo on file - show the brand tile for that fallback */
.rails .bub:first-child .disc:not(:has(img)){background:var(--cream)!important;color:var(--oncream)}
.bub .disc img{width:100%;height:100%;object-fit:cover}
.bub[aria-current=page] .disc{box-shadow:inset 0 0 0 1px var(--hair2),0 0 0 2px var(--accent)}
.bub[aria-current=page] .l{color:var(--cream)}
.bub .l{font-size:9px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  max-width:58px}
.spin{width:19px;height:19px;border:2px solid var(--hair2);border-top-color:var(--accent);
  border-radius:50%;animation:sp .7s linear infinite;display:inline-block;vertical-align:-4px}
@keyframes sp{to{transform:rotate(360deg)}}
.center{min-height:72vh;display:grid;place-items:center;text-align:center}

/* ---- focus rings ---------------------------------------------------- */
@supports selector(:focus-visible){
  button,input,select,textarea,a,nav button,.bub{outline:0}
  button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,
  a:focus-visible,nav button:focus-visible,.bub:focus-visible{
    outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--rs)}
  .btn:focus-visible,nav button:focus-visible,.icon:focus-visible,.lang button:focus-visible{
    border-radius:999px}
  .card:focus-visible{border-radius:var(--r)}
  .bub:focus-visible{border-radius:17px}
}

/* ---- touch targets -------------------------------------------------- */
@media (pointer:coarse){
  nav button{min-height:44px;justify-content:center}
  .btn.sm{min-height:44px}
  .bub{min-height:48px;min-width:48px;padding:1px 0}
  .lang button{min-height:34px}
}

/* ---- narrow phones -------------------------------------------------- */
@media (max-width:379px){
  .grid2{grid-template-columns:1fr}
  .wrap{padding-left:14px;padding-right:14px}
  .top{padding-left:14px;padding-right:14px}
  .rails{padding-left:14px;padding-right:14px}
}

/* ---- future-use utilities ------------------------------------------- */
.skel{position:relative;overflow:hidden;border-radius:var(--rs);min-height:14px;
  background:rgba(47,47,47,.07)}
.skel::after{content:"";position:absolute;inset:0;transform:translateX(-100%);
  background:linear-gradient(90deg,transparent,rgba(47,47,47,.09),transparent);
  animation:shimmer 1.35s ease-in-out infinite}
body.inside .skel{background:rgba(255,255,255,.06)}
body.inside .skel::after{background:linear-gradient(90deg,transparent,rgba(255,255,255,.10),transparent)}
@keyframes shimmer{100%{transform:translateX(100%)}}
.empty{border:1px dashed var(--hair2);border-radius:var(--r);padding:26px 18px;text-align:center;
  color:var(--dim);font-size:13.5px;background:var(--glass)}
.toast{position:fixed;left:50%;transform:translateX(-50%);z-index:60;
  bottom:calc(84px + env(safe-area-inset-bottom,0px));max-width:calc(100vw - 32px);
  padding:11px 16px;border-radius:999px;font-size:13.5px;color:var(--oncream);
  background:var(--cream);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  box-shadow:0 12px 36px rgba(47,47,47,.26)}
body.inside .toast{background:rgba(32,29,28,.94);color:var(--cream);
  box-shadow:var(--rim),0 12px 36px rgba(0,0,0,.5)}

/* ---- guest: icons, back button, small parts ------------------------- */
.ico{display:inline-grid;place-items:center;line-height:0;flex:none}
.ico svg{width:100%;height:100%;display:block}
.btn.back{display:inline-flex;align-items:center;gap:5px;padding-left:11px}
.btn.back .ico{width:16px;height:16px}
.eyebrow .ico{width:12px;height:12px;vertical-align:-2px;margin-right:6px}
.pill.invite{display:inline-flex;align-items:center;gap:5px;color:var(--accent-ink);
  background:rgba(249,72,58,.07);box-shadow:inset 0 0 0 1px rgba(249,72,58,.30)}
.pill .ico{width:11px;height:11px}
.price{font-size:30px;font-weight:300;letter-spacing:-.02em;line-height:1.25}
.price .was{opacity:.45;font-size:20px;margin-right:9px}
/* country picker above the number on phones, side by side when there is room */
.phonerow{display:grid;grid-template-columns:minmax(0,1fr);gap:9px}
@media (min-width:480px){.phonerow{grid-template-columns:auto minmax(0,1fr)}}
/* an empty message box keeps its live region but not its stack gap */
.stack>.msg:empty{margin-top:-13px}
.stack-lg>.msg:empty{margin-top:-26px}
.gatehost:empty{display:none}
/* the guest header mark carries the full logo: a touch larger than the console's */
#mark{width:32px;height:32px;border-radius:10px}
.fieldrow{display:flex;gap:9px;align-items:stretch}
.fieldrow input{flex:1;min-width:0}
.fieldrow .btn{flex:none}
.hint{text-align:center}
.hint:empty{display:none}

/* ---- guest: the front door (sign-in) and the logo tile --------------- */
.logo-tile{width:112px;height:112px;border-radius:30px;background:#FFFFFF;flex:none;overflow:hidden;
  display:grid;place-items:center;
  box-shadow:0 0 0 1px rgba(47,47,47,.08),0 1px 2px rgba(47,47,47,.06),0 22px 44px -18px rgba(47,47,47,.34)}
.logo-tile img{width:100%;height:100%;object-fit:contain;display:block}
.logo-tile.sm{width:52px;height:52px;border-radius:15px;
  box-shadow:0 0 0 1px rgba(47,47,47,.08),0 10px 22px -12px rgba(47,47,47,.32)}
body.inside .logo-tile{box-shadow:0 0 0 1px rgba(255,255,255,.14),0 22px 44px -18px rgba(0,0,0,.7)}
.door{display:flex;flex-direction:column;align-items:center;text-align:center;padding:14px 0 2px}
.door .logo-tile{margin-bottom:22px}
.door .wordmark{font-size:46px;font-weight:700;letter-spacing:-.045em;line-height:1}
.door .tagline{margin-top:10px;font-family:var(--fm);font-size:11px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--dim)}

/* ---- guest: cover photos on cards ------------------------------------ */
.card .cover{display:block;width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:var(--rs);
  margin:0 0 14px;background:var(--hair)}

/* ---- guest: the photo carousel --------------------------------------- */
.gal{position:relative;border-radius:var(--r);overflow:hidden;background:var(--hair);
  box-shadow:var(--rim);isolation:isolate}
.gal-track{display:flex;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;
  scroll-behavior:smooth;overscroll-behavior-x:contain;scrollbar-width:none;
  -webkit-overflow-scrolling:touch;outline:0}
.gal-track::-webkit-scrollbar{display:none}
.gal-slide{flex:0 0 100%;margin:0;aspect-ratio:16/9;scroll-snap-align:start;scroll-snap-stop:always}
.gal-slide img{width:100%;height:100%;object-fit:cover;display:block;user-select:none;-webkit-user-drag:none}
.gal-dots{position:absolute;left:50%;bottom:10px;transform:translateX(-50%);display:flex;gap:1px;
  padding:3px 5px;border-radius:999px;background:rgba(23,21,20,.40);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.gal-dots button{width:16px;height:16px;padding:0;border:0;background:transparent;display:grid;
  place-items:center;cursor:pointer}
.gal-dots button::before{content:"";width:6px;height:6px;border-radius:3px;background:rgba(255,255,255,.55);
  transition:width .2s ease,background .2s ease}
.gal-dots button[aria-current=true]::before{width:14px;background:#FFFFFF}
.gal-btn{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:50%;
  border:0;padding:0;display:none;place-items:center;cursor:pointer;background:rgba(255,255,255,.94);
  color:#2F2F2F;box-shadow:0 2px 12px rgba(0,0,0,.20);transition:opacity .15s ease}
.gal-btn .ico{width:18px;height:18px}
.gal-prev{left:12px}
.gal-next{right:12px}
.gal-btn:disabled{opacity:0;pointer-events:none}
@media (min-width:640px){.gal-btn{display:grid}}
@media (hover:hover){.gal-btn:hover:not(:disabled){background:#FFFFFF}}
.gal-track:focus-visible{outline:2px solid var(--accent);outline-offset:-4px;border-radius:var(--r)}
.gal-btn:focus-visible,.gal-dots button:focus-visible{border-radius:50%}

/* ---- guest: invite gate on the event screen -------------------------- */
.gate{border-radius:var(--rs);padding:15px;background:rgba(249,72,58,.06);
  box-shadow:inset 0 0 0 1px rgba(249,72,58,.26)}
.gate .eyebrow{color:var(--accent-ink)}
.gate h3{font-size:16px;line-height:1.35}

/* ---- guest: side picker on an app's rules screen --------------------- */
.sides{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.side{min-height:92px;padding:16px 12px;border:0;border-radius:var(--r);cursor:pointer;
  background:var(--field);color:var(--cream);font:inherit;font-size:17px;font-weight:600;
  letter-spacing:-.01em;box-shadow:inset 0 0 0 1px var(--fieldline);display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:9px;text-align:center;overflow-wrap:anywhere;
  transition:box-shadow .15s ease,background .15s ease,transform .12s ease}
.side .ico{width:26px;height:26px;border-radius:50%;color:transparent;
  box-shadow:inset 0 0 0 1.5px var(--fieldline);transition:background .15s ease,color .15s ease}
.side .ico svg{width:15px;height:15px}
.side[aria-checked=true]{background:rgba(249,72,58,.10);box-shadow:inset 0 0 0 2px var(--accent)}
.side[aria-checked=true] .ico{background:var(--accent);color:var(--onaccent);box-shadow:none}
@media (hover:hover){.side:hover{box-shadow:inset 0 0 0 1px var(--accent)}
  .side[aria-checked=true]:hover{box-shadow:inset 0 0 0 2px var(--accent)}}
.side:active{transform:scale(.98)}
.side:focus-visible{border-radius:var(--r)}
body.inside .side{font-family:var(--fs);font-weight:400;font-size:19px}
body.inside .side[aria-checked=true]{background:rgba(249,72,58,.16)}

/* ---- guest: success state (checked in at the door) ------------------- */
.success{display:flex;flex-direction:column;align-items:center;text-align:center;gap:10px;padding:26px 4px 4px}
.success .tick{width:84px;height:84px;border-radius:50%;display:grid;place-items:center;margin-bottom:10px;
  background:var(--good);color:var(--bg);box-shadow:0 0 0 10px rgba(47,125,82,.12);
  animation:pop .45s cubic-bezier(.2,1.5,.4,1) both}
.success .tick .ico{width:40px;height:40px}
.success .lede{color:var(--cream)}
.success .btn{margin-top:12px}
body.inside .success .tick{box-shadow:0 0 0 10px rgba(143,191,159,.14)}
@keyframes pop{from{transform:scale(.55);opacity:0}to{transform:scale(1);opacity:1}}

/* ---- guest: the five-tab bar ----------------------------------------- */
/* one even width per tab, so Events, Tonight, Tickets, Coriz and You fit a
   320px phone; the operator console keeps its own nav rules */
nav.tabbar{width:min(440px,calc(100vw - 20px));max-width:none;gap:2px;padding:5px;overflow:visible}
nav.tabbar button{flex:1 1 auto;min-width:0;padding:6px 2px 5px;cursor:pointer}
nav.tabbar button .l{font-size:9.5px;max-width:100%;overflow:hidden;text-overflow:ellipsis}
@media (max-width:359px){nav.tabbar button .l{font-size:9px;letter-spacing:-.01em}}

/* ---- guest: icons inside buttons -------------------------------------- */
.btn:not(.back)>.ico{width:16px;height:16px;display:inline-grid;vertical-align:-3px;margin-right:7px}
.btn.sm:not(.back)>.ico{width:15px;height:15px;margin-right:6px}

/* ---- guest: the "+" bubble at the end of the app row ------------------ */
.rails .bub.add:not(:first-child) .disc{background:transparent;color:var(--dim);box-shadow:none;
  border:1.5px dashed var(--fieldline)}
.rails .bub.add[aria-current=page]:not(:first-child) .disc{border-style:solid;border-color:var(--accent);
  color:var(--accent-ink)}
.bub.add .disc .ico{width:20px;height:20px}

/* ---- guest: filter chips on Events ------------------------------------ */
.chiprow{display:flex;gap:7px;overflow-x:auto;scrollbar-width:none;margin:-6px -18px 0;padding:4px 18px 3px}
.chiprow::-webkit-scrollbar{display:none}
.fchip{flex:none;display:inline-flex;align-items:center;gap:7px;border:0;border-radius:999px;padding:8px 14px;
  font:inherit;font-size:13px;font-weight:600;background:var(--glass);color:var(--dim);cursor:pointer;
  box-shadow:var(--rim),inset 0 0 0 1px var(--hair2);white-space:nowrap}
.fchip[aria-pressed=true]{background:var(--cream);color:var(--oncream)}
.fchip .dot{width:8px;height:8px;border-radius:50%;flex:none}
@media (max-width:379px){.chiprow{margin-left:-14px;margin-right:-14px;padding-left:14px;padding-right:14px}}

/* ---- guest: spots, live and sold-out pills ----------------------------- */
.pill.spot-few{color:var(--accent-ink);background:rgba(249,72,58,.07);box-shadow:inset 0 0 0 1px rgba(249,72,58,.30)}
.pill.spot-out{color:var(--oncream);background:var(--cream);box-shadow:none}
.pill.live{display:inline-flex;align-items:center;gap:5px;color:var(--onaccent);background:var(--accent);box-shadow:none}
.pill.live::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;
  animation:blink 1.4s ease-in-out infinite}
@keyframes blink{50%{opacity:.3}}
.spots-n{font-family:var(--fm)}
.spots-n.few{color:var(--accent-ink)}

/* ---- guest: Tonight ---------------------------------------------------- */
.doorbox{display:flex;align-items:center;gap:14px}
.doorbox-t{flex:1;min-width:0}
.doorbox-t h3{font-size:16px}
.doorbox-t .note{margin-top:3px}
.doorbox .btn{flex:none}
@media (max-width:379px){.doorbox{flex-direction:column;align-items:stretch}}
.tn-group.now>.eyebrow{color:var(--accent-ink)}
.empty.stack{gap:10px}
.empty.stack h3{color:var(--cream)}
.empty.stack .btn{margin-top:4px}

/* ---- guest: ticket cards ----------------------------------------------- */
.tkt{position:relative;background:var(--glass);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  box-shadow:var(--rim);border-radius:var(--r);overflow:hidden;border-top:3px solid var(--tk,var(--accent))}
.tkt-head{display:block;width:100%;text-align:left;background:transparent;border:0;padding:15px 17px 15px;
  color:inherit;font:inherit;cursor:pointer}
.tkt-head .kind{display:block}
.tkt-head .when{display:block}
.tkt-cut{position:relative;height:0;border-top:1.5px dashed var(--hair2);margin:0 16px}
.tkt-cut::before,.tkt-cut::after{content:"";position:absolute;top:-10px;width:20px;height:20px;border-radius:50%;
  background:var(--bg);box-shadow:inset 0 0 0 1px var(--hair)}
.tkt-cut::before{left:-26px}
.tkt-cut::after{right:-26px}
.tkt-body{padding:14px 17px 17px}
.tkt-refrow{display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap}
.tkt-refrow>div{flex:1}
.tkt-ref{font-family:var(--fm);font-size:27px;font-weight:500;letter-spacing:.06em;color:var(--cream);
  line-height:1.15;margin-top:4px;overflow-wrap:anywhere}
.tkt-ref.sm{font-size:11.5px;letter-spacing:.05em;color:var(--dim);margin:0;flex:none}
.tkt-actions{display:flex;gap:8px;flex-wrap:wrap}
.tkt-actions .btn{flex:1 1 auto;display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;
  padding-left:13px;padding-right:13px}
.tkt-actions .btn[aria-expanded=true]{background:var(--cream);color:var(--oncream)}
@media (hover:hover){.tkt-head:hover h3{text-decoration:underline;text-underline-offset:3px}}

/* an inline panel under a card: pick a Cori, see a link */
.drawer{border-radius:var(--rs);padding:13px;background:var(--field);box-shadow:inset 0 0 0 1px var(--fieldline)}
.drawer.stack{gap:11px}
.picklist{display:flex;flex-direction:column;gap:6px;max-height:264px;overflow:auto;padding:2px}
.pickrow{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:8px 10px;margin:0;
  border:0;border-radius:var(--rs);background:transparent;color:var(--cream);font:inherit;font-family:var(--f);
  font-size:14px;letter-spacing:0;text-transform:none;box-shadow:inset 0 0 0 1px var(--hair2);cursor:pointer}
label.pickrow input{width:18px;height:18px;flex:none;margin:0;accent-color:var(--accent)}
.pickrow[aria-checked=true]{box-shadow:inset 0 0 0 2px var(--accent);background:rgba(249,72,58,.06)}
.pick-l{flex:1;min-width:0}
.pick-tick{width:20px;height:20px;border-radius:50%;flex:none;display:grid;place-items:center;color:transparent;
  box-shadow:inset 0 0 0 1.5px var(--fieldline)}
.pick-tick .ico{width:12px;height:12px}
.pickrow[aria-checked=true] .pick-tick{background:var(--accent);color:var(--onaccent);box-shadow:none}
.drawer textarea{min-height:64px;font-size:16px}

/* a link to pass on */
.linkbox{display:flex;flex-direction:column;gap:9px}
.linkfield{font-family:var(--fm);font-size:12.5px;line-height:1.45;padding:10px 12px;border-radius:var(--rs);
  background:var(--field);box-shadow:inset 0 0 0 1px var(--fieldline);color:var(--cream);
  overflow-wrap:anywhere;-webkit-user-select:all;user-select:all}
.drawer .linkfield{background:var(--bg)}
.linknote{border-left:2px solid var(--accent);padding-left:10px}

/* past tickets, folded away */
details.past{border-radius:var(--r);background:var(--glass);box-shadow:var(--rim);padding:0 17px}
details.past summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;padding:15px 0;
  font-weight:600;font-size:14px;color:var(--cream)}
details.past summary::-webkit-details-marker{display:none}
details.past summary::after{content:"";margin-left:auto;width:7px;height:7px;border-right:1.6px solid var(--dim);
  border-bottom:1.6px solid var(--dim);transform:rotate(45deg) translateY(-2px);transition:transform .15s ease}
details.past[open] summary::after{transform:rotate(-135deg)}
details.past .count{font-family:var(--fm);font-size:11px;color:var(--dim);font-weight:400}
.pastrow{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--hair)}
.pastrow strong{color:var(--cream);font-size:14px;font-weight:600}
.pastrow .when{margin-top:2px}

/* ---- guest: people (Coriz) --------------------------------------------- */
.ava{width:40px;height:40px;border-radius:50%;flex:none;display:grid;place-items:center;font-weight:700;
  font-size:14px;background:var(--cream);color:var(--oncream)}
.ava.xs{width:24px;height:24px;font-size:9.5px}
.corirow{display:flex;align-items:flex-start;gap:12px;padding:13px 0;border-top:1px solid var(--hair)}
.corirow:first-child{border-top:0}
.cori-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.cori-main strong{color:var(--cream);font-size:15px;overflow-wrap:anywhere}
.plans{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}
.plan{border:0;border-radius:999px;padding:6px 11px;font:inherit;font-size:12.5px;background:var(--field);
  color:var(--cream);box-shadow:inset 0 0 0 1px var(--hair2);cursor:pointer;display:inline-flex;gap:7px;
  align-items:baseline;max-width:100%;text-align:left}
.plan-t{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.plan-d{font-family:var(--fm);font-size:10.5px;color:var(--dim);white-space:nowrap}
@media (hover:hover){.plan:hover{box-shadow:inset 0 0 0 1px var(--accent)}}
.qrfold summary{cursor:pointer;font-size:13.5px;font-weight:600;color:var(--cream)}
.qrbox{width:min(220px,70vw);margin:12px auto 8px;border-radius:12px;overflow:hidden;box-shadow:0 0 0 1px var(--hair2)}
.qrbox svg{display:block;width:100%;height:auto}
.switchrow{display:flex;align-items:flex-start;gap:14px}
.switchrow strong{color:var(--cream);font-size:14.5px}
.switch{flex:none;width:48px;height:28px;border-radius:999px;border:0;padding:0;position:relative;cursor:pointer;
  background:var(--hair2);transition:background .15s ease;margin-top:2px}
.switch::after{content:"";position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;
  background:#FFFFFF;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform .15s ease}
.switch[aria-checked=true]{background:var(--good)}
.switch[aria-checked=true]::after{transform:translateX(20px)}
.switch:disabled{opacity:.5;cursor:default}
.switch:focus-visible{border-radius:999px}

/* ---- guest: on a night ------------------------------------------------- */
.going{display:flex;flex-direction:column;gap:8px}
.namechips{display:flex;flex-wrap:wrap;gap:6px}
.namechip{display:inline-flex;align-items:center;gap:7px;padding:3px 11px 3px 3px;border-radius:999px;
  background:var(--glass);box-shadow:inset 0 0 0 1px var(--hair2);font-size:13px;font-weight:600;color:var(--cream)}
.sendbox-top{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.sendbox-t{flex:1 1 170px;min-width:0}

/* ---- guest: the Apps screen -------------------------------------------- */
.dirlist{display:flex;flex-direction:column;padding-top:4px;padding-bottom:4px}
.dirrow{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--hair)}
.dirrow:first-child{border-top:0}
.dirrow .disc{width:44px;height:44px;border-radius:14px;flex:none;display:grid;place-items:center;overflow:hidden;
  font-weight:700;color:#FFFFFF;background:var(--cream);box-shadow:inset 0 0 0 1px var(--hair2)}
.dirrow .disc:has(img){background:#FFFFFF}
.dirrow .disc img{width:100%;height:100%;object-fit:cover}
.dir-main{flex:1;min-width:0}
.dir-main strong{color:var(--cream);font-size:15px}
.dir-main .note{margin-top:2px}
.dirrow .btn{flex:none}

/* ---- guest: organize (asking Cori to run yours, or to build you an app) - */
.choice{display:flex;flex-direction:column;gap:3px;width:100%;text-align:left;padding:13px 15px;
  border-radius:var(--r);background:var(--glass);box-shadow:var(--rim);color:var(--cream);
  font:inherit;cursor:pointer;border:0}
.choice strong{font-size:15px;font-weight:600}
.choice > span{font-size:13px;color:var(--dim);line-height:1.45}
.choice[aria-pressed="true"]{box-shadow:inset 0 0 0 1.5px var(--accent);background:rgba(249,72,58,.06)}
.choice[aria-pressed="true"] strong{color:var(--accent-ink)}
.feats{display:grid;grid-template-columns:1fr;gap:11px}
.feats .chk strong{color:var(--cream);font-size:14px;font-weight:600}
.feats .chk .note{margin-top:2px}
@media (min-width:620px){.feats{grid-template-columns:1fr 1fr}}
.steps{display:flex;flex-wrap:wrap;gap:6px}
.step{font-family:var(--fm);font-size:9.5px;letter-spacing:.09em;text-transform:uppercase;
  padding:4px 9px;border-radius:999px;color:var(--faint);box-shadow:inset 0 0 0 1px var(--hair2)}
.step.on{color:var(--onaccent);background:var(--accent);box-shadow:none}

/* ---- guest: a web app inside the shell --------------------------------- */
/* header and app row stay; the bottom bar goes; the frame fills the rest */
body.framed{height:100vh;height:100dvh;min-height:0;overflow:hidden;display:flex;flex-direction:column}
body.framed header{position:relative;flex:none}
body.framed #app{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}
.appview{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;background:var(--bg);
  padding-bottom:env(safe-area-inset-bottom,0px)}
.appbar{flex:none;display:flex;align-items:center;gap:10px;padding:4px 14px 4px 8px;border-bottom:1px solid var(--hair)}
.appback{display:inline-flex;align-items:center;gap:2px;border:0;background:transparent;color:var(--cream);
  font:inherit;font-size:13.5px;font-weight:600;padding:6px 10px 6px 4px;border-radius:999px;cursor:pointer;min-height:36px}
.appback .ico{width:17px;height:17px}
@media (hover:hover){.appback:hover{background:var(--glass)}}
.appname{font-family:var(--fm);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim);
  margin-left:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.appframe{flex:1 1 auto;display:block;width:100%;min-height:0;border:0;background:var(--bg)}
body.framed .toast{bottom:calc(20px + env(safe-area-inset-bottom,0px))}

/* ---- print ----------------------------------------------------------- */
@media print{
  header,nav,#wash,.rails,.lang{display:none!important}
  html,body{background:#fff!important;color:#000!important}
  body{font-size:12pt}
  .box,.card,.ok,.err,.pill,.empty{background:#fff!important;color:#000!important;
    box-shadow:none!important;border:1px solid #bbb!important;
    -webkit-backdrop-filter:none!important;backdrop-filter:none!important}
  .lede,.note,.eyebrow,.when,.stat div span,.sysrow b,.sysrow span{color:#333!important}
  .wrap{padding-bottom:0;max-width:none}
}

@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
