/* The Thing From The Future — web edition.
   Reproduces the 2015 print-and-play deck's stark black-on-white, hairline-ruled look.

   TYPE: one family everywhere — Helvetica, with substitutes for systems without it.
   Weight, size, case and letter-spacing carry all the hierarchy. Nothing is webfont-
   dependent, so Safari, Firefox and Chrome render identically.

   SIZING: every size comes from the scale in :root. Card interiors are sized in `em`
   against a per-context --card-fs, so one card design scales to the table, the hand
   rail and the reveal without container queries (which older browsers drop entirely,
   collapsing the card to default sizes). */

:root{
  /* --- palette */
  --ink:#0a0a0a;
  --paper:#ffffff;
  --rule:#0a0a0a;
  --muted:#767676;
  --faint:#d6d6d6;
  --wash:#f4f4f2;

  /* --- one family, everywhere */
  --sans:"Helvetica Neue",Helvetica,Arial,"Liberation Sans","Nimbus Sans",sans-serif;

  /* --- type scale: the only place sizes are defined */
  --fs-micro:10px;   /* card credit lines */
  --fs-label:11px;   /* tracked-out caps labels: ARC, 1) DESCRIPTION, ROOM CODE */
  --fs-small:13px;
  --fs-body:15px;
  --fs-input:16px;   /* 16px keeps iOS Safari from zooming on focus */
  --fs-h4:18px;
  --fs-h3:21px;
  --fs-h2:26px;
  --fs-h1:34px;

  --track-label:.16em;   /* letter-spacing for tracked caps */
  --track-tight:-.015em; /* headline tightening */

  --card-radius:2px;
  --pad:clamp(14px,3vw,30px);
  --maxw:1180px;
}

*,*::before,*::after{box-sizing:border-box}

html,body{height:100%}
body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--sans);
  font-size:var(--fs-body);
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  -webkit-text-size-adjust:100%;
  overscroll-behavior-y:none;
}
button,input,textarea,select{font-family:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.noscript{padding:40px;text-align:center}

/* ------------------------------------------------------------ primitives */

/* Display type: Helvetica Bold, uppercase, tightened. Replaces the deck's Bebas. */
.display{font-weight:700;letter-spacing:var(--track-tight);line-height:1.02;text-transform:uppercase}
/* Tracked caps: replaces the deck's PT Mono labels. */
.mono{
  font-size:var(--fs-label);font-weight:700;text-transform:uppercase;
  letter-spacing:var(--track-label);line-height:1.35;
}
.muted{color:var(--muted)}
.center{text-align:center}
.hide{display:none !important}

.btn{
  font-size:var(--fs-small);font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  background:var(--ink);color:var(--paper);border:1.5px solid var(--ink);
  padding:12px 20px;border-radius:var(--card-radius);line-height:1;
  transition:transform .08s ease,opacity .15s ease;
  -webkit-tap-highlight-color:transparent;
}
.btn:active{transform:translateY(1px)}
.btn--ghost{background:transparent;color:var(--ink)}
.btn--ghost:hover{background:var(--ink);color:var(--paper)}
.btn:disabled{opacity:.28;cursor:not-allowed;transform:none}
.btn--sm{font-size:var(--fs-label);padding:9px 14px}
.btn--lg{font-size:var(--fs-h4);padding:16px 28px}
.btn--block{display:block;width:100%}

.field{display:block;margin:0 0 16px}
.field__label{display:block;margin-bottom:7px}
.input{
  width:100%;background:var(--paper);border:1.5px solid var(--ink);
  border-radius:var(--card-radius);padding:12px 13px;font-size:var(--fs-input);
}
.input--code{
  font-size:32px;font-weight:700;letter-spacing:.3em;text-align:center;
  text-transform:uppercase;padding:12px 0 12px .3em;
}

.rule{border:0;border-top:1.5px solid var(--rule);margin:22px 0}
.rule--faint{border-top-color:var(--faint)}

/* --------------------------------------------------------------- chrome */

.shell{max-width:var(--maxw);margin:0 auto;padding:var(--pad) var(--pad) 60px;min-height:100%}

.topbar{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding-bottom:12px;border-bottom:1.5px solid var(--rule);margin-bottom:20px;
}
.topbar__title{
  font-size:clamp(15px,2.4vw,var(--fs-h3));font-weight:700;line-height:1.1;
  letter-spacing:var(--track-tight);text-transform:uppercase;
}
.topbar__spacer{flex:1 1 auto}
.topbar__meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap}

.chip{
  font-size:var(--fs-micro);font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  border:1.5px solid var(--ink);border-radius:999px;padding:5px 11px;white-space:nowrap;line-height:1;
}
.chip--solid{background:var(--ink);color:var(--paper)}
.chip--pulse{animation:pulse 1.6s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}

.footer-credit{
  margin-top:44px;padding-top:16px;border-top:1.5px solid var(--faint);
  text-align:center;font-size:var(--fs-small);color:var(--muted);line-height:1.7;
}
.footer-credit strong{
  font-weight:700;font-size:var(--fs-small);letter-spacing:.04em;
  text-transform:uppercase;color:var(--ink);
}

.section-title{
  font-size:var(--fs-h2);font-weight:700;line-height:1.1;letter-spacing:var(--track-tight);
  text-transform:uppercase;margin:0 0 14px;
}
.lede{font-size:var(--fs-body);line-height:1.6;max-width:64ch}

/* ---------------------------------------------------------------- cards --
   Everything inside a card is em-based. Set --card-fs on an ancestor to scale
   the whole card; nothing here depends on container query support. */

.card{
  --card-fs:14px;
  position:relative;font-size:var(--card-fs);
  background:var(--paper);border:1.5px solid var(--ink);
  border-radius:var(--card-radius);aspect-ratio:250/245;
  display:flex;flex-direction:column;align-items:center;
  padding:1em .5em 1em;text-align:center;overflow:hidden;
}
.card__suit{
  width:1.8em;height:1.8em;border:1.5px solid var(--ink);border-radius:50%;
  display:flex;align-items:center;justify-content:center;flex:none;
}
.card__suit span{font-size:.95em;font-weight:700;line-height:1}
.card__suitname{
  font-size:.6em;font-weight:700;letter-spacing:var(--track-label);
  line-height:1;margin-top:.7em;
}
.card__body{
  flex:1 1 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;
  width:100%;min-height:0;padding:.2em 0;
}
/* One size for every card value — no length-based shrinking. Multi-word values wrap
   at the spaces; break-word is only a last resort for a word that still cannot fit. */
.card__value{
  font-size:1.5em;font-weight:700;line-height:1.08;letter-spacing:var(--track-tight);
  overflow-wrap:break-word;hyphens:auto;max-width:100%;
}
.card__horizon{font-size:.64em;line-height:1.2;margin-top:.9em;color:#333}

/* Scoped with .card so the per-context value sizes below cannot override it — a blank
   wildcard is a prompt to write on, and should read as lighter than a printed value. */
.card.card--wild .card__value{font-size:.9em;font-weight:400;line-height:1.3;color:var(--muted)}

/* Narrow cards: the deck's longest single word is "Communications" (14 characters).
   Trim the value where the card is small so it never has to break mid-word, and hold
   the tracked label at a legible minimum instead of letting em-scaling shrink it away. */
.hand__rail .card__value,
.miniatom .card__value{font-size:1.3em}
.hand__rail .card__suitname,
.miniatom .card__suitname{font-size:7px;letter-spacing:.1em;margin-top:.6em}
.card--wild::after{
  content:'';position:absolute;inset:4px;border:1.5px dashed var(--faint);
  border-radius:var(--card-radius);pointer-events:none;
}
.card--empty{border-style:dashed;border-color:var(--faint);justify-content:center;color:var(--faint)}
.card--empty .card__suit{border-color:var(--faint)}
.card--empty .card__suitname{color:var(--faint)}
.card--empty .card__value{font-size:1.4em}
.card--auto .card__value{color:#555}

.card--back{background:var(--ink);border-color:var(--ink);justify-content:center;padding:.55em}
.card--back .backmark{
  width:100%;height:100%;border:1.5px solid rgba(255,255,255,.5);border-radius:2px;
  display:flex;align-items:center;justify-content:center;color:var(--paper);padding:.5em;
}
.card--back .backmark span{
  font-size:.85em;font-weight:700;line-height:1.15;letter-spacing:.04em;text-transform:uppercase;
}

/* --- card size per context.
   A card sizes off its context, not its own width, so each context must be used only
   where its cards are actually that wide:
     .atom      full page width, four across   (compose table, reveal, prompt details)
     .miniatom  a column or a narrow panel     (answer prompt, end-of-game recap)
     .hand__rail your hand
     .tutorial  the how-to-play demo row
   Putting a full-width .atom inside a narrow column will overflow the cards. */
.atom .card{--card-fs:15px}
.miniatom .card{--card-fs:11px}
.hand__rail .card{--card-fs:9.5px}
.tutorial .card{--card-fs:14px}

@media(max-width:1040px){.atom .card{--card-fs:13px}}
@media(max-width:860px){.atom .card{--card-fs:11px}.miniatom .card{--card-fs:9.5px}}
/* At 720px the table becomes 2x2, so the cards are wide again. */
@media(max-width:720px){.atom .card{--card-fs:15px}}
@media(max-width:520px){.atom .card{--card-fs:12px}}
@media(max-width:400px){.atom .card{--card-fs:10px}}
@media(max-width:600px){.miniatom .card{--card-fs:12px}}
@media(max-width:430px){.miniatom .card{--card-fs:10px}}
@media(max-width:760px){.tutorial .card{--card-fs:12px}}
@media(max-width:400px){.tutorial .card{--card-fs:10px}}

/* --- interactive states */
.card--btn{padding:0;border:0;background:none;display:block;width:100%;text-align:inherit;font:inherit}
.card--playable{cursor:pointer;transition:transform .12s ease,box-shadow .12s ease}
.card--playable:hover{transform:translateY(-6px);box-shadow:4px 6px 0 rgba(10,10,10,.14)}
.card--selected{box-shadow:0 0 0 3px var(--ink);transform:translateY(-6px)}
.card--dim{opacity:.32;filter:grayscale(1)}

/* --- flip on reveal */
.flip{perspective:900px}
.flip__inner{position:relative;width:100%;transform-style:preserve-3d;transition:transform .55s cubic-bezier(.3,.8,.3,1)}
.flip--up .flip__inner{transform:rotateY(180deg)}
.flip__face{backface-visibility:hidden;-webkit-backface-visibility:hidden}
.flip__face--back{position:absolute;inset:0;transform:rotateY(180deg)}

/* --------------------------------------------------------------- title */

.title{max-width:640px;margin:0 auto;padding-top:clamp(10px,4vh,44px)}
.title__mark{
  font-size:clamp(38px,10vw,84px);font-weight:700;line-height:.98;
  letter-spacing:-.03em;text-transform:uppercase;text-align:center;margin:0;
}
.title__sub{
  font-size:var(--fs-label);font-weight:700;letter-spacing:.22em;text-transform:uppercase;
  text-align:center;margin-top:18px;color:var(--muted);
}
.title__panel{border:1.5px solid var(--ink);border-radius:var(--card-radius);padding:clamp(18px,4vw,28px);margin-top:28px}
.title__or{display:flex;align-items:center;gap:14px;margin:24px 0;color:var(--muted)}
.title__or::before,.title__or::after{content:'';flex:1;border-top:1.5px solid var(--faint)}
.title__or span{font-size:var(--fs-label);font-weight:700;letter-spacing:.18em;text-transform:uppercase}

/* ------------------------------------------------------------ tutorial --
   The how-to-play panel on the index page. */

.tutorial{max-width:860px;margin:clamp(30px,7vw,64px) auto 0}
.tutorial__head{text-align:center;margin-bottom:clamp(20px,4vw,34px)}
.tutorial__kicker{
  font-size:var(--fs-label);font-weight:700;letter-spacing:.22em;
  text-transform:uppercase;color:var(--muted);
}
.tutorial__title{
  font-size:clamp(26px,5vw,var(--fs-h1));font-weight:700;line-height:1.05;
  letter-spacing:var(--track-tight);text-transform:uppercase;margin:10px 0 0;
}
.tutorial__intro{font-size:var(--fs-body);line-height:1.6;margin:14px auto 0;max-width:52ch;color:var(--muted)}

/* Step 1 carries the four demo cards, so it takes the full width and the three
   short steps sit in a row beneath it. */
.steps{display:grid;gap:14px;margin:0;padding:0;list-style:none;grid-template-columns:minmax(0,1fr)}
@media(min-width:760px){
  .steps{grid-template-columns:repeat(3,minmax(0,1fr))}
  .step:first-child{grid-column:1 / -1}
}
.step{
  border:1.5px solid var(--ink);border-radius:var(--card-radius);
  padding:18px;display:flex;flex-direction:column;gap:12px;
}
.step__n{
  width:30px;height:30px;border-radius:50%;background:var(--ink);color:var(--paper);
  display:flex;align-items:center;justify-content:center;flex:none;
  font-size:var(--fs-small);font-weight:700;line-height:1;
}
.step__head{display:flex;align-items:center;gap:11px}
.step__title{font-size:var(--fs-h4);font-weight:700;letter-spacing:var(--track-tight);text-transform:uppercase;line-height:1.1}
.step__text{font-size:var(--fs-small);line-height:1.6;margin:0;color:#333}
.step__demo{margin-top:auto;padding-top:4px}

/* the four demo cards inside step 1 */
.demorow,.demorow--word{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.demorow--word{margin-top:9px;text-align:center}
.demorow--word span{font-size:var(--fs-h4);font-weight:700;letter-spacing:.2em;color:var(--muted)}
/* Two-up on narrow screens: four cards across a phone are unreadable. */
@media(max-width:520px){
  .demorow,.demorow--word{grid-template-columns:repeat(2,1fr)}
  .demorow--word span{font-size:var(--fs-small)}
}

/* a miniature playsheet for step 2 */
.demosheet{border:1.5px solid var(--faint);border-radius:var(--card-radius);padding:10px}
.demosheet__lines{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}
.demosheet__lines i{display:block;height:1.5px;background:var(--faint)}
.demosheet__lines i:last-child{width:55%}
.demosheet__box{
  border:1.5px dashed var(--faint);border-radius:2px;height:52px;
  display:flex;align-items:center;justify-content:center;
  font-size:var(--fs-micro);font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--faint);
}

/* vote / scoring demo */
.demovote{display:flex;gap:8px;align-items:stretch}
.demovote__card{
  flex:1;border:1.5px solid var(--faint);border-radius:2px;padding:8px;
  display:flex;flex-direction:column;gap:5px;
}
.demovote__card i{display:block;height:1.5px;background:var(--faint)}
.demovote__card.is-win{border-color:var(--ink);background:var(--ink)}
.demovote__card.is-win i{background:rgba(255,255,255,.55)}
.demovote__tick{
  font-size:var(--fs-micro);font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);text-align:center;
}
.demovote__card.is-win .demovote__tick{color:var(--paper)}

/* the worked example */
.example{margin-top:clamp(26px,5vw,40px)}
.example__prompt{max-width:520px;margin:14px 0}
.example__body{
  border-left:3px solid var(--ink);background:var(--wash);padding:16px 18px;
}
.example__text{font-size:var(--fs-body);line-height:1.65;margin:0}
.example__notes{margin:14px 0 0;padding-left:18px}
.example__notes li{font-size:var(--fs-small);line-height:1.6;margin-bottom:7px;color:#333}
.example__notes i{color:var(--muted)}

/* the suit key */
.suitkey{display:grid;gap:12px;margin-top:14px}
@media(min-width:620px){.suitkey{grid-template-columns:repeat(2,minmax(0,1fr))}}
.suitkey__row{display:flex;gap:13px;align-items:flex-start}
.suitkey__badge{
  width:32px;height:32px;border:1.5px solid var(--ink);border-radius:50%;flex:none;
  display:flex;align-items:center;justify-content:center;
  font-size:var(--fs-h4);font-weight:700;line-height:1;
}
.suitkey__name{font-size:var(--fs-label);font-weight:700;letter-spacing:var(--track-label);text-transform:uppercase}
.suitkey__desc{font-size:var(--fs-small);line-height:1.55;color:#333;margin:3px 0 0}
.suitkey__desc b{font-weight:700;color:var(--ink)}

.tutorial details{border-top:1.5px solid var(--faint);margin-top:26px;padding-top:18px}
.tutorial summary{
  cursor:pointer;font-size:var(--fs-label);font-weight:700;
  letter-spacing:var(--track-label);text-transform:uppercase;
}
.tutorial details ul{margin:14px 0 0;padding-left:20px}
.tutorial details li{font-size:var(--fs-small);line-height:1.65;margin-bottom:8px;color:#333}

/* --------------------------------------------------------------- lobby */

.lobby{display:grid;gap:clamp(20px,4vw,40px);grid-template-columns:minmax(0,1fr)}
@media(min-width:860px){.lobby{grid-template-columns:minmax(0,1fr) 340px}}

.codebox{border:1.5px solid var(--ink);border-radius:var(--card-radius);padding:20px;text-align:center}
.codebox__code{
  font-size:clamp(44px,11vw,64px);font-weight:700;line-height:1;
  letter-spacing:.16em;margin:8px 0 2px;text-indent:.16em;
}
.codebox__qr{width:168px;height:168px;margin:16px auto 10px;display:block}
.codebox__link{font-size:var(--fs-micro);word-break:break-all;color:var(--muted);margin-top:8px}

.roster{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.roster li{
  display:flex;align-items:center;gap:11px;border:1.5px solid var(--faint);
  border-radius:var(--card-radius);padding:10px 13px;
}
.roster li.is-you{border-color:var(--ink)}
.roster li.is-off{opacity:.42}
.roster__dot{width:13px;height:13px;border-radius:50%;background:var(--c);border:1.5px solid var(--ink);flex:none}
.roster__name{
  font-size:var(--fs-h4);font-weight:700;line-height:1.2;letter-spacing:var(--track-tight);
  flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.roster__score{font-size:var(--fs-h4);font-weight:700;line-height:1}
.roster__tag{
  font-size:var(--fs-micro);font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  border:1.5px solid var(--ink);border-radius:999px;padding:4px 9px;line-height:1;white-space:nowrap;
}
.roster__tag--ok{background:var(--ink);color:var(--paper)}

.seg{display:flex;border:1.5px solid var(--ink);border-radius:var(--card-radius);overflow:hidden;width:fit-content;max-width:100%;flex-wrap:wrap}
.seg button{
  font-size:var(--fs-small);font-weight:700;padding:10px 16px;background:var(--paper);
  border:0;border-right:1.5px solid var(--ink);min-width:46px;line-height:1;
}
.seg button:last-child{border-right:0}
.seg button[aria-pressed="true"]{background:var(--ink);color:var(--paper)}

/* --------------------------------------------------------------- table */

.tablearea{margin-bottom:22px}
.atom{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(7px,1.6vw,16px)}
/* Four across stops being readable below roughly 720px, so the table stacks 2x2
   and the cards get their width back. */
@media(max-width:720px){.atom{grid-template-columns:repeat(2,1fr)}}

.turnbar{
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  border:1.5px solid var(--ink);border-radius:var(--card-radius);
  padding:13px 16px;margin:18px 0;
}
.turnbar--you{background:var(--ink);color:var(--paper)}
.turnbar--you .chip{border-color:var(--paper)}
/* The bar is inverted, so buttons invert with it — a default .btn here would be
   black on black and read as no button at all. */
.turnbar--you .btn{background:var(--paper);color:var(--ink);border-color:var(--paper)}
.turnbar--you .btn:hover:not(:disabled){background:var(--wash)}
.turnbar--you .btn:disabled{opacity:.5}
.turnbar--you .btn--ghost{background:transparent;color:var(--paper);border-color:var(--paper)}
.turnbar--you .btn--ghost:hover{background:var(--paper);color:var(--ink)}
/* A long value ("Public service announcement") must not stretch the bar. */
.turnbar .btn{max-width:min(46vw,260px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.turnbar__who{font-size:var(--fs-h3);font-weight:700;line-height:1.1;letter-spacing:var(--track-tight);text-transform:uppercase}
.turnbar__hint{font-size:var(--fs-small);opacity:.85}

.hand{margin-top:20px}
.hand__head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.hand__rail{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(124px,1fr))}
.hand__rail>*{min-width:0}
@media(max-width:640px){
  .hand__rail{
    display:flex;overflow-x:auto;gap:9px;padding:6px 2px 14px;
    scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;
  }
  .hand__rail>*{flex:0 0 122px;scroll-snap-align:center}
}

/* -------------------------------------------------------------- answer */

.answer{display:grid;gap:clamp(18px,3vw,30px)}
@media(min-width:980px){
  .answer{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr)}
  /* Two columns halves the width available to the prompt row, so it stacks 2x2
     rather than shrinking four cards into a column they don't fit. */
  .answer .miniatom{grid-template-columns:repeat(2,1fr)}
  .answer .miniatom .card{--card-fs:13px}
}

.playsheet{border:1.5px solid var(--ink);border-radius:var(--card-radius);padding:clamp(14px,2.6vw,22px)}
.playsheet__step{
  font-size:var(--fs-label);font-weight:700;letter-spacing:var(--track-label);
  text-transform:uppercase;margin-bottom:10px;
}
.playsheet textarea{
  width:100%;min-height:170px;resize:vertical;border:1.5px solid var(--ink);
  border-radius:var(--card-radius);padding:12px 13px;
  font-size:var(--fs-input);line-height:1.65;background:var(--paper);
}
.playsheet textarea:disabled{background:var(--wash);color:#555}
.charcount{font-size:var(--fs-micro);color:var(--muted);text-align:right;margin-top:6px}

/* ---------------------------------------------------------- mood lens --
   Sits above the description box. Mood is the card players skip, so it gets named,
   glossed and turned into a question. */

.lens{
  border-left:3px solid var(--ink);background:var(--wash);
  padding:12px 14px;margin-bottom:12px;
}
.lens__head{display:flex;align-items:center;gap:9px;margin-bottom:6px}
.lens__badge{
  width:22px;height:22px;border:1.5px solid var(--ink);border-radius:50%;flex:none;
  display:flex;align-items:center;justify-content:center;
  font-size:var(--fs-small);font-weight:700;line-height:1;
}
.lens__name{
  font-size:var(--fs-h4);font-weight:700;line-height:1.1;
  letter-spacing:var(--track-label);text-transform:uppercase;
}
.lens__gloss{font-size:var(--fs-small);line-height:1.55;margin:0;color:#333}
.lens__ask{font-size:var(--fs-small);line-height:1.55;margin:8px 0 0;color:var(--muted)}

/* ------------------------------------------------------------- drawing */

.sketch{margin-top:18px}
.sketch__stage{
  position:relative;width:100%;aspect-ratio:4/3;border:1.5px solid var(--ink);
  border-radius:var(--card-radius);background:var(--paper);overflow:hidden;
}
.sketch__stage canvas{
  position:absolute;inset:0;width:100%;height:100%;display:block;
  touch-action:none;-webkit-user-select:none;user-select:none;cursor:crosshair;
}
.sketch__empty{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  pointer-events:none;font-size:var(--fs-label);font-weight:700;
  letter-spacing:var(--track-label);text-transform:uppercase;color:var(--faint);
}
.tools{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:12px}
.tools__group{display:flex;align-items:center;gap:7px}
.pen{
  width:30px;height:30px;border-radius:50%;border:1.5px solid var(--ink);padding:0;
  background:var(--c);position:relative;flex:none;
}
.pen[aria-pressed="true"]::after{content:'';position:absolute;inset:-5px;border:1.5px solid var(--ink);border-radius:50%}
.sizebtn{
  width:38px;height:30px;border:1.5px solid var(--ink);border-radius:var(--card-radius);
  background:var(--paper);display:flex;align-items:center;justify-content:center;padding:0;flex:none;
}
.sizebtn[aria-pressed="true"]{background:var(--ink)}
.sizebtn[aria-pressed="true"] i{background:var(--paper)}
.sizebtn i{display:block;background:var(--ink);border-radius:99px}
.sizebtn--thin i{width:19px;height:2px}
.sizebtn--thick i{width:19px;height:6px}
.sizebtn--eraser i{width:17px;height:12px;border:1.5px solid var(--ink);background:transparent;border-radius:2px}
.sizebtn--eraser[aria-pressed="true"] i{border-color:var(--paper);background:transparent}

/* -------------------------------------------------------------- reveal */

.spotlight{display:grid;gap:clamp(16px,3vw,28px);align-items:start}
@media(min-width:860px){.spotlight{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
.spotlight__head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.spotlight__name{
  font-size:clamp(26px,5vw,42px);font-weight:700;line-height:1.05;
  letter-spacing:var(--track-tight);text-transform:uppercase;margin:0;
}
.spotlight__text{font-size:var(--fs-h4);line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere;margin:0}
.progressdots{display:flex;gap:6px;flex-wrap:wrap}
.progressdots i{width:9px;height:9px;border-radius:50%;border:1.5px solid var(--ink);display:block}
.progressdots i.on{background:var(--ink)}

.sketchview{
  width:100%;aspect-ratio:4/3;border:1.5px solid var(--ink);border-radius:var(--card-radius);
  background:var(--paper);display:block;
}
.sketchview--none{
  display:flex;align-items:center;justify-content:center;
  font-size:var(--fs-label);font-weight:700;letter-spacing:var(--track-label);
  text-transform:uppercase;color:var(--faint);border-style:dashed;border-color:var(--faint);
}

.miniatom{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.miniatom--stack{grid-template-columns:repeat(2,1fr)}
/* Four mini cards across a phone leaves each too narrow for the longer values. */
@media(max-width:600px){.miniatom{grid-template-columns:repeat(2,1fr)}}

/* ------------------------------------------------------------- gallery */

.gallery{display:grid;gap:clamp(12px,2.4vw,20px);grid-template-columns:repeat(auto-fill,minmax(268px,1fr))}
.idea{
  border:1.5px solid var(--ink);border-radius:var(--card-radius);padding:16px;
  display:flex;flex-direction:column;gap:12px;background:var(--paper);
  transition:box-shadow .12s ease,transform .12s ease;
}
.idea--voted{box-shadow:0 0 0 3px var(--ink)}
.idea--win{background:var(--ink);color:var(--paper)}
.idea--win .sketchview{background:var(--paper)}
.idea--win .idea__meta{color:rgba(255,255,255,.7)}
/* The darkest player colour is near-black, so it disappears on an inverted card. */
.idea--win .roster__dot{border-color:var(--paper);box-shadow:0 0 0 1.5px var(--paper)}
.idea--win .roster__tag{border-color:var(--paper);color:var(--paper)}
/* Buttons invert with the card, or a ghost button is black on black and invisible. */
.idea--win .btn{background:var(--paper);color:var(--ink);border-color:var(--paper)}
.idea--win .btn--ghost{background:transparent;color:var(--paper);border-color:var(--paper)}
.idea--win .btn--ghost:hover{background:var(--paper);color:var(--ink)}
.idea__head{display:flex;align-items:center;gap:9px}
.idea__name{
  font-size:var(--fs-h4);font-weight:700;line-height:1.2;letter-spacing:var(--track-tight);
  flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.idea__text{font-size:var(--fs-small);line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere;margin:0}
.idea__meta{font-size:var(--fs-micro);font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.idea__votes{font-size:var(--fs-h3);font-weight:700;line-height:1}
.idea__actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:auto;padding-top:4px}

/* Reaction tags. A vote lands on one idea only, so these let every idea get something. */
.reactions{display:flex;flex-wrap:wrap;gap:6px}
.reaction{
  font-size:var(--fs-micro);font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  background:transparent;color:var(--muted);border:1.5px solid var(--faint);
  border-radius:999px;padding:6px 11px;line-height:1;white-space:nowrap;
  transition:background .12s ease,color .12s ease,border-color .12s ease;
}
.reaction:hover{border-color:var(--ink);color:var(--ink)}
.reaction.is-on{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.reactions--tally .reaction{cursor:default;border-color:var(--ink);color:var(--ink)}
.idea--win .reaction{border-color:rgba(255,255,255,.6);color:var(--paper)}
.idea--win .reactions--tally .reaction{border-color:var(--paper)}

/* ------------------------------------------------------------ scoreboard */

.scoretable{width:100%;border-collapse:collapse;margin-top:8px}
.scoretable th{
  font-size:var(--fs-micro);font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  text-align:left;color:var(--muted);padding:0 10px 8px;
}
.scoretable td{padding:12px 10px;border-top:1.5px solid var(--faint)}
.scoretable tr:first-child td{border-top-color:var(--ink)}
.scoretable .rank{font-size:var(--fs-h4);font-weight:700;width:1px;white-space:nowrap;color:var(--muted)}
.scoretable .who{font-size:var(--fs-h4);font-weight:700;line-height:1.2;letter-spacing:var(--track-tight)}
.scoretable .pts{font-size:var(--fs-h3);font-weight:700;text-align:right;width:1px;white-space:nowrap}
.scoretable tr.is-win .rank,.scoretable tr.is-win .who,.scoretable tr.is-win .pts{color:var(--ink)}

.bigwin{text-align:center;padding:clamp(20px,5vw,44px) 0}
.bigwin__label{font-size:var(--fs-label);font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:var(--muted)}
.bigwin__name{
  font-size:clamp(36px,9vw,72px);font-weight:700;line-height:1;
  letter-spacing:-.03em;text-transform:uppercase;margin:12px 0 0;
}

/* --------------------------------------------------------------- misc */

.stack{display:flex;flex-direction:column;gap:14px}
.row{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.row--end{justify-content:flex-end}
.row--between{justify-content:space-between}

.waiting{
  border:1.5px dashed var(--faint);border-radius:var(--card-radius);
  padding:22px;text-align:center;font-size:var(--fs-label);font-weight:700;
  letter-spacing:var(--track-label);text-transform:uppercase;color:var(--muted);
}

.toasts{
  position:fixed;left:50%;bottom:22px;transform:translateX(-50%);z-index:60;
  display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;width:min(92vw,460px);
}
.toast{
  background:var(--ink);color:var(--paper);border-radius:var(--card-radius);
  padding:12px 17px;font-size:var(--fs-small);line-height:1.4;text-align:center;
  animation:toastin .2s ease;box-shadow:0 6px 24px rgba(0,0,0,.25);
}
@keyframes toastin{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

.overlay{position:fixed;inset:0;background:rgba(255,255,255,.93);z-index:70;display:flex;align-items:center;justify-content:center;padding:20px}
.overlay[hidden]{display:none}
.overlay__box{
  background:var(--paper);border:1.5px solid var(--ink);border-radius:var(--card-radius);
  padding:clamp(18px,4vw,28px);width:min(94vw,440px);box-shadow:6px 8px 0 rgba(10,10,10,.13);
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms !important;transition-duration:.001ms !important}
}
