/* Backyard family app: design tokens and shared components (rooms, forms,
   cards). App chrome, the Play hero, the game layer and sheets live in
   shell.css. Mobile first; wider layouts at the bottom. */
:root{
  --paper:#eee8d8;--paper-2:#f6f1e3;--card:#fffdf4;--ink:#172620;--ink-2:#2d4436;--muted:#667269;--line:#d9d4c0;
  --yellow:#e9f665;--red:#b94630;--orange:#ed6332;--green:#329d65;
  --font:-apple-system,BlinkMacSystemFont,'SF Pro Text','DM Sans',system-ui,'Segoe UI',sans-serif;
  --display:'Barlow Condensed','Avenir Next Condensed','Arial Narrow',Impact,sans-serif;
  --spring:cubic-bezier(.34,1.56,.64,1);--ease:cubic-bezier(.2,.8,.2,1);
  --radius:22px;--shadow:0 1px 0 rgba(23,38,32,.04),0 14px 34px -22px rgba(23,38,32,.45);
  --safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px);--safe-right:env(safe-area-inset-right,0px);
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;background:var(--paper)}
body{margin:0;background:var(--paper);color:var(--ink);font:400 15px/1.45 var(--font);-webkit-font-smoothing:antialiased}
button,input,select{font:inherit;color:inherit}
button,a,input,select,label{-webkit-tap-highlight-color:transparent}
button,a{touch-action:manipulation}
button{cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
button:disabled{cursor:default;opacity:.45}
:focus-visible{outline:3px solid var(--red);outline-offset:3px}
.hidden{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
h1,h2,h3{font-family:var(--display);font-weight:800;letter-spacing:-.3px;line-height:.95;margin:0}
.eyebrow{font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;margin:0 0 10px;color:var(--muted)}
.fineprint{font-size:12px;line-height:1.55;color:var(--muted);margin:16px 0 0}
.pill{display:inline-flex;align-items:center;font:700 12px var(--font);letter-spacing:2px;padding:7px 11px;border-radius:999px;background:var(--ink);color:var(--yellow)}

/* Buttons: one tactile press for the whole app. */
.primary,.secondary,.cta,.ghost{display:inline-flex;justify-content:center;align-items:center;gap:10px;text-decoration:none;border:0;min-height:50px;padding:0 20px;border-radius:16px;font-weight:700;font-size:16px;transition:transform .45s var(--spring),background-color .15s,box-shadow .2s,opacity .2s;will-change:transform}
.primary:active:not(:disabled),.secondary:active:not(:disabled),.cta:active:not(:disabled),.ghost:active:not(:disabled),.text-button:active:not(:disabled),.row:active,.tile:active,.tab:active .tab-icon{transform:scale(.96);transition-duration:.08s}
.primary{background:var(--ink);color:var(--yellow);width:100%;box-shadow:0 10px 22px -14px rgba(23,38,32,.8)}
.secondary{background:var(--yellow);color:var(--ink);box-shadow:inset 0 0 0 1px rgba(23,38,32,.12)}
.text-button{background:none;border:0;font-size:14px;font-weight:600;color:var(--muted);padding:12px 4px;transition:transform .45s var(--spring)}
@media(hover:hover){.primary:hover:not(:disabled){background:var(--ink-2)}.secondary:hover:not(:disabled){background:#f2fb9a}.text-button:hover{color:var(--ink)}}

/* Forms */
label{display:block;font-size:13px;font-weight:600;margin:0 0 8px}
input,select{width:100%;border:1px solid var(--line);border-radius:14px;padding:14px 15px;background:var(--paper-2);color:var(--ink);font-size:16px;-webkit-appearance:none;appearance:none}
input:focus,select:focus{border-color:var(--ink);background:#fff;outline:none;box-shadow:0 0 0 4px rgba(233,246,101,.55)}
select{background-image:linear-gradient(45deg,transparent 50%,var(--ink) 50%),linear-gradient(135deg,var(--ink) 50%,transparent 50%);background-position:calc(100% - 20px) 52%,calc(100% - 15px) 52%;background-size:5px 5px;background-repeat:no-repeat;padding-right:36px}

/* Cards */
.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);border:1px solid rgba(23,38,32,.07)}

/* Compete: room entry */
.welcome{padding:22px;margin:0 0 18px;overflow:hidden;position:relative}
.welcome-copy h2{font-size:40px;margin:14px 0 8px}
.welcome .intro{color:var(--muted);margin:0 0 18px}
.ticket-label{display:inline-block;border:1px dashed var(--muted);font:800 12px var(--display);letter-spacing:2px;padding:7px 11px;transform:rotate(-2deg);background:var(--yellow);border-radius:6px}
.entry form+form,.entry .or+form{margin-top:0}
.entry .primary{margin-top:12px}
.or{text-align:center;font-size:12px;color:var(--muted);margin:18px 0}
.join-form{display:grid;grid-template-columns:1fr auto;gap:8px}
.join-form input{letter-spacing:2px;text-transform:uppercase;min-width:0}
.server-setup{border-bottom:1px solid var(--line);padding-bottom:16px;margin-bottom:18px}
.server-setup .secondary{margin-top:10px;width:100%}
.connection-help{padding:18px;margin:0 0 18px}
.connection-help p{font-size:14px;margin:0 0 12px}

/* Compete: room */
.room{display:flex;flex-direction:column;gap:14px;margin-bottom:18px}
.room-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:14px}
.room-heading .eyebrow{margin-bottom:6px}
.room-heading h2{font-size:38px}
.round-clock{display:flex;align-items:center;gap:16px;background:var(--yellow);color:var(--ink);padding:16px 20px;border-radius:var(--radius);box-shadow:var(--shadow)}
.round-clock>span:first-child{font-size:11px;font-weight:800;letter-spacing:2px}
.round-clock strong{font:800 46px/1 var(--display);font-variant-numeric:tabular-nums}
.round-clock>span:last-child{margin-left:auto;max-width:150px;font-size:12px;line-height:1.4;text-align:right}
.room-game-status{font-size:13px;color:var(--muted);margin:-4px 2px 0;min-height:0}
.room-game-status:empty{display:none}
.room-actions{display:flex;gap:10px;flex-wrap:wrap}
.room-actions .secondary{flex:1;min-height:46px;font-size:14px}
.scoreboard{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px;border:1px solid rgba(23,38,32,.07)}
.score-heading{display:flex;justify-content:space-between;align-items:center}
.score-heading .eyebrow{margin:0}
.score-heading span{font-size:12px;color:var(--muted)}
.players{list-style:none;margin:10px 0 16px;padding:0}
.players li{display:flex;gap:12px;align-items:center;border-bottom:1px solid var(--line);padding:12px 0}
.avatar{width:36px;height:36px;border-radius:12px;background:var(--red);color:var(--paper);display:grid;place-items:center;font-weight:800;font-size:15px}
.player-copy{flex:1;min-width:0}.player-copy strong{font-size:15px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.player-copy small{font-size:12px;color:var(--muted)}
.player-score{font:800 26px var(--display);font-variant-numeric:tabular-nums}
.host-settings{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;margin-bottom:6px}
.host-settings label{font-size:12px;margin:8px 0 4px}
.host-settings label:nth-of-type(1){grid-column:1;grid-row:1}.host-settings select:nth-of-type(1){grid-column:1;grid-row:2}
.host-settings label:nth-of-type(2){grid-column:2;grid-row:1}.host-settings select:nth-of-type(2){grid-column:2;grid-row:2}
.host-settings select{padding:12px 32px 12px 12px;font-size:15px}
.scoreboard>.primary,.scoreboard>.secondary{margin-top:10px;width:100%}
.scoreboard>.text-button{display:block;width:100%;text-align:center}
.results{background:var(--card);border-radius:var(--radius);box-shadow:0 0 0 2px var(--ink),8px 8px 0 var(--yellow);padding:22px}
.results h2{margin:8px 0;font-size:40px}
.results p{font-size:12px;color:var(--muted);margin:0}
.results .eyebrow{color:var(--red)}
.results ol{margin:16px 0 0;padding-left:22px}
.results li{padding:8px;font-size:15px}
.results li strong{float:right;font-variant-numeric:tabular-nums}

/* Rival radar (authored diagram; no game map). */
.rivals{border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:14px 0 12px;margin:-6px 0 16px;display:grid;grid-template-columns:140px 1fr;column-gap:18px;align-items:start}
.rival-heading{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between}
.rival-heading .eyebrow{font-size:10px;margin:0}
.rival-heading>span{font-size:10px;color:var(--muted);display:flex;align-items:center;gap:5px}
.rival-heading>span:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--green)}
#rival-radar{display:block;width:140px;height:auto;margin:10px 0 0;background:#fffdf44d;border-radius:50%;grid-column:1;grid-row:2/5}
.radar-ring{fill:none;stroke:var(--line);stroke-width:1}.radar-grid{fill:none;stroke:var(--line);stroke-width:1;stroke-dasharray:2 4}
.radar-you{fill:var(--ink);stroke:var(--yellow);stroke-width:3}.radar-letter{font:700 9px var(--font)}
.radar-you-label{fill:var(--ink);font:700 7px var(--font);letter-spacing:1px}
.waiting .radar-you,.waiting .radar-you-label{opacity:.35}
.radar-status{grid-column:2;font-size:12px;color:var(--muted);margin:16px 0 6px}
.radar-legend{grid-column:2;list-style:none;margin:0;padding:0}
.radar-legend li{display:flex;align-items:center;gap:7px;font-size:12px;line-height:1.6;padding:2px 0}
.rival-dot{display:block;width:8px;height:8px;border-radius:50%}
.radar-legend small{font-size:10px;color:var(--muted);margin-left:auto}
.radar-hint{grid-column:2;font-size:10px;color:var(--muted);line-height:1.5;margin:8px 0 0}

/* More: local game file */
.game-empty{display:flex;flex-direction:column;align-items:flex-start;gap:6px;width:100%}
.game-empty .big-star,.game-empty h2{display:none}
.game-empty p{font-size:13px;color:var(--muted);margin:0}
.game-empty .secondary{min-height:44px;font-size:14px;margin-top:6px}
.local-file-note{font-size:12px}

/* Toast */
.notice{position:fixed;left:50%;bottom:calc(var(--safe-bottom) + 86px);transform:translateX(-50%);background:var(--ink);color:var(--paper);padding:13px 18px;border-radius:16px;box-shadow:0 18px 40px -18px rgba(0,0,0,.6);font-size:14px;line-height:1.4;width:max-content;max-width:min(92vw,520px);z-index:60;animation:toast-in .5s var(--spring)}
@keyframes toast-in{from{opacity:0;transform:translate(-50%,16px) scale(.96)}}

@media(min-width:900px){
  .welcome{display:grid;grid-template-columns:1fr minmax(300px,380px);gap:36px;padding:32px;align-items:center}
  .welcome-copy h2{font-size:64px}
  .room{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:18px 24px;align-items:start}
  .room-heading,.round-clock,.room-game-status,.room-actions,.results{grid-column:1}
  .scoreboard{grid-column:2;grid-row:1/span 6}
  .room-heading h2{font-size:56px}
}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
