/* ════════════════════════════════════════════════════════════════════════════════════════════════
   Ophsides · ONE unified look · MOCKS ONLY
   Oct 24 2026 (Isaiah) · round 1: Neon buttons + Liquid glass · round 2 (09-proposals picks, "Go with all your picks"):
   NEON SOFT 2 replaces Neon (→ BRIGHT 2, Oct 24 2026, Isaiah) · ~~Neon LEDs~~ (removed Oct 24; tokens unused) · fonts setup B (TWK Lausanne 250/450 only,
   no synthesized weights, Lausanne 450 tabular clock) · action row on Liquid glass (→ reminder flicker A, Oct 24) · quiet-action / eyebrow / tag cleanup.
   Exact values: ticket-build/stills/09-proposals/PROPOSALS.md. THIS FILE IS THE ONE SOURCE of every glow / glass value.
   Linked (after each mock's own <style>) by waitlist-build, admin-build (admin + door) and ticket-build.
   Each mock's legacy :root names (--pri-glow, --sec-*, --glass, --glass-blur) are aliases of these.
   Never applied to: the Apple Add to Apple Wallet badge (Apple's official artwork, no glow/filter/shadow, and no glow
   within the 50px bloom reach of it), the danger button (.b-dgr).
   ════════════════════════════════════════════════════════════════════════════════════════════════ */
:root {
  /* ── BUTTON GLOW · BRIGHT 2 (Isaiah Oct 24 2026, "I think I like bright 2" · replaces Neon Soft 2 · ½ of the way from
     Soft 2 to the original 3 NEON, values: ticket-build/stills/13-brighter/README.md) · shared by Style 1, Style 2, the search field ──
     layers: ring 1px · core 3px · 10px · bloom 24px · 50px (bloom reach = 50px) */
  --btn-glow: 0 0 0 1px rgba(255,255,255,0.96), 0 0 3px rgba(255,255,255,0.6), 0 0 10px rgba(255,255,255,0.38),
              0 0 24px rgba(255,255,255,0.205), 0 0 50px rgba(255,255,255,0.09);
  --neon-reach: 50px;
  /* Style 1 · solid white, black text, no border */
  --btn1-fill: linear-gradient(180deg, #fff, #f0f0f3);
  --btn1-text: #0a0a0b;
  /* Style 2 · clear white neon, white text, fill = the glass token */
  --btn2-edge: 1px solid rgba(255,255,255,0.9);          /* Bright 2 (was Soft 2 .8) */
  --btn2-rim: inset 0 0 6px rgba(255,255,255,0.33);       /* Bright 2 (was .24) */
  --btn2-text-glow: 0 0 3px rgba(255,255,255,0.725), 0 0 10px rgba(255,255,255,0.41), 0 0 22px rgba(255,255,255,0.175);   /* Bright 2 */

  /* ── NEON LED tokens · DEFINED BUT UNUSED (LEDs removed Oct 24 2026, approved by Isaiah) · the Neon Soft 2 layers + relative alphas, tinted with the
     EXISTING approved LED hues only: red = square-ui --act-red #ff3b3b (255,59,59) · green = --ok #3ddc84 (61,220,132).
     Tube = the hue fill + white-hot inner core (inset, same .5 core alpha) + ring / core / bloom. No new hues. ── */
  --neon-red: inset 0 0 1px rgba(255,255,255,0.5), 0 0 0 1px rgba(255,59,59,0.94), 0 0 3px rgba(255,59,59,0.5),
              0 0 10px rgba(255,59,59,0.32), 0 0 22px rgba(255,59,59,0.17), 0 0 46px rgba(255,59,59,0.08);
  --neon-green: inset 0 0 1px rgba(255,255,255,0.5), 0 0 0 1px rgba(61,220,132,0.94), 0 0 3px rgba(61,220,132,0.5),
              0 0 10px rgba(61,220,132,0.32), 0 0 22px rgba(61,220,132,0.17), 0 0 46px rgba(61,220,132,0.08);
  --neon-red-fill: #ff3b3b;
  --neon-green-fill: #3ddc84;

  /* ── GLASS · C LIQUID (one token for every glass surface) ── */
  --glass-tint: rgba(18,18,24,0.5);
  --glass-filter: blur(40px) saturate(190%);
  --glass-border: 1px solid rgba(255,255,255,0.2);
  /* bottom sheets: open (top) edge clearer */
  --glass-up: linear-gradient(180deg, rgba(18,18,24,0.15) 0%, rgba(18,18,24,0.325) 28%, rgba(18,18,24,0.5) 70%, rgba(18,18,24,0.575) 100%);
  /* pull-downs: attached (top) edge denser */
  --glass-down: linear-gradient(180deg, rgba(18,18,24,0.575) 0%, rgba(18,18,24,0.5) 38%, rgba(18,18,24,0.325) 72%, rgba(18,18,24,0.15) 100%);
  --handle-w: 40px; --handle-h: 5px; --handle-r: 2px; --handle-a: 0.4; --handle-touch: 24px;
  --dim: rgba(0,0,0,0.4); --dim-blur: 4px;
  --top-glow-tint: rgba(255,255,255,0.07);
  --top-glow: radial-gradient(700px 420px at 50% 18%, var(--top-glow-tint), transparent 58%);
  /* same glow, positioned in viewport units so the fixed door header band lines up with the door screen behind it */
  --top-glow-band: radial-gradient(700px 420px at 50% 18dvh, var(--top-glow-tint), transparent 58%);

  /* ── legacy names used inside the mocks → aliases of the ONE source ── */
  --pri-glow: var(--btn-glow);
  --pri-glow-press: var(--btn-glow);
  --sec-bg: var(--glass-tint);
  --sec-edge: var(--btn2-edge);
  --sec-glow: var(--btn2-rim), var(--btn-glow);
  --glass: var(--glass-tint);
  --glass-blur: var(--glass-filter);
}

/* ── Style 1 (solid white): every approved Style 1 button ── */
:is(.btn.pri, .follow, .tpl-save:not(.is-saved), .row-act, #view-list .row-act) {
  background: var(--btn1-fill) !important; color: var(--btn1-text) !important; border: 0 !important;
  box-shadow: var(--btn-glow) !important; text-shadow: none !important;
}
/* ── Style 2 (clear neon): every approved Style 2 button + the Style 2 status box (Waitlisted / YOU'RE IN) ── */
:is(.btn.sec, .hero-box, .keep-link, .tray-step) {
  background: var(--glass-tint) !important;
  -webkit-backdrop-filter: var(--glass-filter) !important; backdrop-filter: var(--glass-filter) !important;
  border: var(--btn2-edge) !important; box-shadow: var(--btn2-rim), var(--btn-glow) !important; color: #fff !important;
}
:is(.btn.sec, .keep-link, .tray-step, .hero-word) { text-shadow: var(--btn2-text-glow) !important; }
.hero-box { text-shadow: none !important; }

/* ── glass flat surfaces ── */
:is(.tk, .card, .chip:not(.lilac), .status-chip.wl, .status-chip.inside, .night-chip.wl, .door-toast, .undo-toast, .sent-ask, .list-searchbar, .list-foot, #snd-ctl, .oph-bar, .otoast) {
  background: var(--glass-tint) !important;
  -webkit-backdrop-filter: var(--glass-filter) !important; backdrop-filter: var(--glass-filter) !important;
}
:is(.tk, .card, .door-toast, .undo-toast, .sent-ask, .oph-bar, .otoast) { border: var(--glass-border) !important; }
:is(.list-searchbar, .list-foot) { border: 0 !important; border-top: var(--glass-border) !important; }
/* IG likes chip keeps its approved lilac fill; it takes the glass blur only */
.chip.lilac { -webkit-backdrop-filter: var(--glass-filter) !important; backdrop-filter: var(--glass-filter) !important; }
/* ── bottom sheets (open top edge clearer) ── */
:is(.sheet, .sheet.oph-pull-up, .oph-pull-up, .vs, .vs.oph-pull-up, .sort-sheet, .door-tray, .scan-sheet, .door-search, .door-screen #door-search.oph-pull-up, .tpl-ed, .osheet) {
  background: var(--glass-up) !important;
  -webkit-backdrop-filter: var(--glass-filter) !important; backdrop-filter: var(--glass-filter) !important;
  border: 0 !important; border-top: var(--glass-border) !important;
}
/* ── pull-downs (attached top edge denser) ── */
:is(.oph-pull, #door-dash.door-dash, .door-screen #door-dash.door-dash) {
  background: var(--glass-down) !important;
  -webkit-backdrop-filter: var(--glass-filter) !important; backdrop-filter: var(--glass-filter) !important;
  border: 0 !important; border-bottom: var(--glass-border) !important;
}
/* ── drag handles ── */
:is(.grab, .grab-bar, .vs-grab, .door-dash .grab-bar, .scan-sheet .grab-bar, .door-tray .grab-bar, .door-search .grab-bar, .sheet-screen .sheet.oph-pull-up .grab) { height: var(--handle-touch) !important; }
:is(.grab, .grab-bar, .dash-pull, .vs-grab, .sort-sheet .grab, .sheet-screen .sheet.oph-pull-up .grab, .door-tray .grab-bar, .door-search .grab-bar, .door-dash .grab-bar, .scan-sheet .grab-bar, #door-dash .grab-bar)::before {
  width: var(--handle-w) !important; height: var(--handle-h) !important; border-radius: var(--handle-r) !important;
  background: rgba(255,255,255,var(--handle-a)) !important;
}
.osheet::before { width: var(--handle-w) !important; height: var(--handle-h) !important; background: rgba(255,255,255,var(--handle-a)) !important; }
/* ── dims ── */
:is(.dim, .dim.over, .scan-dim, .sort-dim, .oscrim) {
  background: var(--dim) !important;
  -webkit-backdrop-filter: blur(var(--dim-blur)) !important; backdrop-filter: blur(var(--dim-blur)) !important;
}
/* ── top glow (flyer, form, PIN, door, sheet-back): ONE value ── */
:is(.flyer, .pin-screen, .door-screen, #app.oph-form-bg) { background: var(--top-glow), var(--bg, #050506) !important; }
.door-band { background: var(--top-glow-band), var(--bg, #050506) !important; }
.sheet-back { background: var(--top-glow), repeating-linear-gradient(180deg, transparent 0 61px, rgba(255,255,255,.05) 61px 62px), var(--bg, #050506) !important; }

/* ── guards: the Apple badge stays Apple's (no glow, filter or shadow); danger button untouched ── */
.wallet, .wallet a, .wallet .awb { box-shadow: none !important; filter: none !important; text-shadow: none !important; }

/* ════════════ 09-PROPOSALS PICKS · APPLIED (Isaiah Oct 24 2026 · "Go with all your picks") ════════════ */

/* ── FONTS · setup B: TWK Lausanne only, real weights 250 + 450 only (the files that exist), never synthesized.
   Every former 600/700/900 is now 450 in the mock sources; this guard stops any browser fake-bold/italic. ── */
html, html * { font-synthesis: none !important; }
.name { font-weight: 450 !important; letter-spacing: .02em !important; }
.hero-word { font-weight: 450 !important; letter-spacing: .08em !important; }
:is(.btn, .follow, .btn.act .act-lab, .badge, .mistake, .doors, .f-lab, .row-act, .tpl-save) { font-weight: 450 !important; }
:is(.contact li, .hero-sub, .scan-state, .osheet ol li) { font-weight: 250 !important; }
/* CLOCK: Oph Box (Orbitron subset, no D/S glyphs) → Lausanne 450 tabular · 12px · .06em (09-fonts board B) */
:is(.door-ends b, #cd, .door-ends .odo-u, .door-ends .odo-c) {
  font-family: var(--font) !important; font-weight: 450 !important; font-size: 12px !important;
  font-variant-numeric: tabular-nums !important; font-feature-settings: 'tnum' 1 !important;
}
:is(.door-ends b, #cd) { letter-spacing: .06em !important; }
/* the IG Follow button reads FOLLOW (caps rule) · tracking = the shared .btn .04em */
.follow { text-transform: uppercase !important; letter-spacing: .04em !important; }

/* ── NEON SOFT 2 · search field (door tray bar + every .search input), idle AND focus = the same token (no brighter
   focus state; the caret + typed text show focus) · glass fill · Style 2 edge + rim + shared glow · no text glow ── */
:is(.tray-sbar, .search, .search:focus, .search.is-focus) {
  background: var(--glass-tint) !important;
  -webkit-backdrop-filter: var(--glass-filter) !important; backdrop-filter: var(--glass-filter) !important;
  border: var(--btn2-edge) !important; box-shadow: var(--btn2-rim), var(--btn-glow) !important; text-shadow: none !important;
}
.tray-sbar:active { background: var(--glass-tint) !important; }

/* ── ACTION ROW · REMINDER FLICKER A at BRIGHT 2 (Isaiah Oct 24 2026, approved: "old and burnt out" → "on action they are happy and on")
   ADD TO CALENDAR + INVITE FRIENDS only. Not done = a dim, tired white tube (k .32 rest + hum, dropouts .10–.14, tries .52–.60,
   exact 12-flicker timing, 8s loop, per-button pattern). Tap / done = ignition (k .10 at 30ms → 1.0 at 90ms → .55 at 160ms →
   1.0 at 280ms) then steady FULL Bright 2 Style 2 (edge .9 · rim .33 · full outer 50px halo · text glow). Label always #fff.
   k scales the Bright 2 stack: edge .2+.7k · rim .12+.21k · glow layers ×k · text glow ×k. White only; done edge white (no green).
   Reduced motion: static dim tube (k .32), tap = 120ms fade to on. ≤2.5 flashes/s pooled (JS gate in ticket-build/index.html).
   The badge→row gap was 50px+ so the full outer halo never reached the Apple badge (verified 0 px change). Values: stills/12-flicker, 13-brighter.
   OVERRIDE (ophsides-v2 only, Isaiah Oct 27 2026): final call "Increase to 24/24 so its consistent." → 24px above AND below the Apple badge
   (ticket.css .wallet margin 19 + .acts margin-top 19, each + the badge's 5px clear-space padding = 24; 24 is on the T2 scale). Replaces the same-day
   17/17 and the old 50px halo floor. Lit glow still reaches the badge (fainter than at 17); badge itself unchanged (no glow/filter on it). ── */
@property --k { syntax: '<number>'; inherits: true; initial-value: .32; }
.acts .btn.act {
  --k: .32;
  background: var(--glass-tint) !important;
  -webkit-backdrop-filter: var(--glass-filter) !important; backdrop-filter: var(--glass-filter) !important;
  border: 1px solid rgba(255,255,255,calc(.2 + .7 * var(--k))) !important;
  box-shadow: inset 0 0 6px rgba(255,255,255,calc(.12 + .21 * var(--k))), 0 0 0 1px rgba(255,255,255,calc(.96 * var(--k))),
    0 0 3px rgba(255,255,255,calc(.6 * var(--k))), 0 0 10px rgba(255,255,255,calc(.38 * var(--k))),
    0 0 24px rgba(255,255,255,calc(.205 * var(--k))), 0 0 50px rgba(255,255,255,calc(.09 * var(--k))) !important;
  text-shadow: none !important;
}
.acts .btn.act .act-lab { color: #fff !important;
  text-shadow: 0 0 3px rgba(255,255,255,calc(.725 * var(--k))), 0 0 10px rgba(255,255,255,calc(.41 * var(--k))), 0 0 22px rgba(255,255,255,calc(.175 * var(--k))) !important; }
.acts .btn.act[data-act=calendar]:not(.is-done) { animation: oph-tired-cal 8s linear infinite; }
.acts .btn.act[data-act=invite]:not(.is-done) { animation: oph-tired-inv 8s linear infinite; }
.acts .btn.act.is-done { --k: 1; }
.acts .btn.act.is-hush { animation: none; }
.acts .btn.act.is-done.is-igniting { animation: oph-ignite 280ms linear both; }
.acts .btn.act.is-done.is-fade { transition: --k 120ms linear; }
@keyframes oph-ignite { 0%{--k:.32} 10.714%{--k:.10} 32.143%{--k:1} 57.143%{--k:.55} 100%{--k:1} }
@keyframes oph-tired-cal { 0.000%{--k:0.320} 1.250%{--k:0.336} 2.500%{--k:0.338} 3.750%{--k:0.330} 5.000%{--k:0.325} 6.250%{--k:0.329} 7.500%{--k:0.335} 8.750%{--k:0.330} 10.000%{--k:0.313} 11.250%{--k:0.299} 12.500%{--k:0.300} 13.750%{--k:0.310} 15.000%{--k:0.317} 16.250%{--k:0.314} 17.500%{--k:0.310} 18.000%{--k:0.111} 18.750%{--k:0.117} 19.500%{--k:0.126} 20.000%{--k:0.293} 20.125%{--k:0.334} 21.250%{--k:0.344} 22.500%{--k:0.340} 23.750%{--k:0.327} 25.000%{--k:0.319} 26.250%{--k:0.322} 27.500%{--k:0.325} 28.750%{--k:0.318} 30.000%{--k:0.303} 31.250%{--k:0.295} 32.500%{--k:0.303} 33.750%{--k:0.318} 35.000%{--k:0.325} 36.250%{--k:0.322} 37.500%{--k:0.319} 38.750%{--k:0.327} 40.000%{--k:0.340} 41.250%{--k:0.344} 41.875%{--k:0.600} 42.500%{--k:0.293} 42.625%{--k:0.231} 43.750%{--k:0.317} 45.000%{--k:0.310} 46.250%{--k:0.314} 47.500%{--k:0.317} 48.750%{--k:0.310} 50.000%{--k:0.300} 51.250%{--k:0.299} 52.500%{--k:0.313} 53.750%{--k:0.330} 55.000%{--k:0.335} 56.250%{--k:0.329} 57.500%{--k:0.325} 58.750%{--k:0.330} 60.000%{--k:0.338} 61.250%{--k:0.336} 61.750%{--k:0.110} 62.500%{--k:0.100} 63.750%{--k:0.084} 64.000%{--k:0.083} 64.625%{--k:0.301} 65.000%{--k:0.302} 66.250%{--k:0.310} 67.500%{--k:0.315} 68.750%{--k:0.311} 70.000%{--k:0.305} 71.250%{--k:0.310} 72.500%{--k:0.327} 73.750%{--k:0.341} 75.000%{--k:0.340} 76.250%{--k:0.330} 77.500%{--k:0.323} 78.750%{--k:0.326} 80.000%{--k:0.330} 81.250%{--k:0.323} 82.500%{--k:0.307} 83.125%{--k:0.500} 83.750%{--k:0.246} 83.875%{--k:0.196} 85.000%{--k:0.300} 86.250%{--k:0.313} 87.500%{--k:0.321} 88.750%{--k:0.318} 90.000%{--k:0.315} 91.250%{--k:0.322} 92.500%{--k:0.337} 93.750%{--k:0.345} 95.000%{--k:0.337} 96.250%{--k:0.322} 97.500%{--k:0.315} 98.750%{--k:0.318} 100.000%{--k:0.320} }
@keyframes oph-tired-inv { 0.000%{--k:0.333} 1.250%{--k:0.344} 2.500%{--k:0.341} 3.750%{--k:0.327} 5.000%{--k:0.316} 6.250%{--k:0.316} 7.500%{--k:0.321} 8.125%{--k:0.550} 8.750%{--k:0.272} 8.875%{--k:0.216} 10.000%{--k:0.304} 11.250%{--k:0.296} 12.500%{--k:0.303} 13.750%{--k:0.319} 15.000%{--k:0.330} 16.250%{--k:0.328} 17.500%{--k:0.323} 18.750%{--k:0.326} 20.000%{--k:0.337} 21.250%{--k:0.342} 22.500%{--k:0.332} 23.750%{--k:0.315} 25.000%{--k:0.305} 26.250%{--k:0.308} 27.500%{--k:0.315} 28.750%{--k:0.312} 30.000%{--k:0.304} 30.500%{--k:0.101} 31.250%{--k:0.102} 32.250%{--k:0.111} 32.500%{--k:0.194} 32.875%{--k:0.320} 33.750%{--k:0.332} 35.000%{--k:0.339} 36.250%{--k:0.333} 37.500%{--k:0.325} 38.750%{--k:0.327} 40.000%{--k:0.334} 41.250%{--k:0.333} 42.500%{--k:0.319} 43.750%{--k:0.302} 45.000%{--k:0.298} 46.250%{--k:0.307} 47.500%{--k:0.316} 48.750%{--k:0.316} 50.000%{--k:0.310} 50.500%{--k:0.130} 51.250%{--k:0.133} 51.750%{--k:0.138} 52.375%{--k:0.326} 52.500%{--k:0.327} 53.750%{--k:0.342} 55.000%{--k:0.343} 56.250%{--k:0.331} 57.500%{--k:0.320} 58.750%{--k:0.320} 60.000%{--k:0.325} 61.250%{--k:0.321} 62.500%{--k:0.307} 63.750%{--k:0.296} 65.000%{--k:0.299} 66.250%{--k:0.313} 67.500%{--k:0.324} 68.750%{--k:0.324} 70.000%{--k:0.319} 71.250%{--k:0.323} 71.875%{--k:0.609} 72.500%{--k:0.299} 72.625%{--k:0.237} 73.750%{--k:0.344} 75.000%{--k:0.337} 76.250%{--k:0.321} 77.500%{--k:0.310} 78.750%{--k:0.312} 80.000%{--k:0.317} 81.250%{--k:0.314} 82.500%{--k:0.303} 83.750%{--k:0.298} 85.000%{--k:0.308} 86.250%{--k:0.325} 87.500%{--k:0.335} 88.750%{--k:0.332} 90.000%{--k:0.325} 91.250%{--k:0.328} 92.500%{--k:0.336} 93.000%{--k:0.119} 93.750%{--k:0.118} 94.500%{--k:0.112} 95.000%{--k:0.282} 95.125%{--k:0.324} 96.250%{--k:0.308} 97.500%{--k:0.301} 98.750%{--k:0.307} 100.000%{--k:0.333} }
@media (prefers-reduced-motion: reduce) {
  .acts .btn.act, .acts .btn.act:not(.is-done), .acts .btn.act.is-done.is-igniting { animation: none !important; }
}

/* ── LED LIGHTS REMOVED (Isaiah Oct 24 2026, approved): the ticket action-row lights, the DOORS IN dot and the RSVP status-bar
   dot are gone from the DOM; the old flat dots are NOT restored. --neon-red / --neon-green stay defined above, UNUSED. ── */
:is(.btn.act .act-light, .doors .live) { display: none !important; }

/* ── CLEANUP 1+2 · ONE quiet action = admin .list-settings (450 10px/1 · .12em · caps · --fg-4 .36 · 6px 0) ──
   EDIT ACCOUNT (waitlist · ticket · admin) = SET COUNT (door) = HELP / CAN'T MAKE IT / LOST TICKET = CLEAR · SKIP · SHOW ALL */
:is(.mistake, .edit-acct, .dash-setb, .scan-next, .tray-clear, .tray-who-skip, .night-expand, .invitees-expand,
    .night-expand-lab, .invitees-expand-lab, .list-settings, .tpl-go, .tpl-reset, .undo-btn, .sent-no, .sent-yes) {
  font: 450 10px/1 var(--font) !important; letter-spacing: .12em !important; text-transform: uppercase !important;
  text-shadow: none !important;
}
:is(.mistake, .edit-acct, .dash-setb, .scan-next, .tray-clear, .tray-who-skip, .night-expand, .invitees-expand,
    .list-settings, .tpl-go, .tpl-reset, .sent-no) { color: rgba(255,255,255,.36) !important; }
:is(.undo-btn, .sent-yes) { color: #fff !important; }   /* the confirming action stays white, glow removed */
.dash-setb.dash-setb {
  all: unset; cursor: pointer; box-sizing: border-box; display: inline-flex; align-items: center;
  padding: 6px 0 !important; height: auto !important; background: none !important; border: 0 !important;
  box-shadow: none !important; -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
}
.links .scan-next { display: block !important; margin: 14px auto 0 !important; text-align: center !important; padding: 6px 0 !important; }

/* ── CLEANUP 3 · eyebrow + field labels = admin .set-group (450 10px · .12em · caps · .36) ── */
:is(.night-log-lab, .invitees-lab, .note-field label, .f-lab) {
  font: 450 10px/1.3 var(--font) !important; letter-spacing: .12em !important; text-transform: uppercase !important;
  color: rgba(255,255,255,.36) !important;
}

/* ── CLEANUP 4 · tags = waitlist .badge type (450 9px · .08em · caps) · status chips 9px · .1em at the real 450 ── */
:is(.badge-invite, .badge-invite .who, .tray-21) { text-transform: uppercase !important; letter-spacing: .08em !important; font-weight: 450 !important; }
:is(.night-chip, .status-chip) { font-size: 9px !important; letter-spacing: .1em !important; font-weight: 450 !important; }
