/* RelayWords – single responsive layout.
   body = fixed-height flex column: header / sub / #stage (flex:1, size container) / keyboard.
   The board grid is sized from the stage's container units so it fits width AND height. */
:root{--g:#3f9b5b;--y:#e2a929;--x:#7d746b;--bg:#eaf3fb;--fg:#1f2a36;--b:#c9d9e8;
  --app-h:var(--vh,100vh);--kh:clamp(34px,calc(var(--app-h) * .062),56px)}
@supports(height:100dvh){:root{--app-h:var(--vh,100dvh)}}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;height:100%;overflow:hidden;overscroll-behavior:none}
html,body,#keyboard,.key,#boards{touch-action:manipulation}
body{margin:0;font:16px/1.35 system-ui,sans-serif;color:var(--fg);background:radial-gradient(circle at 50% 0,#f3f8fd,#dcebf8) fixed var(--bg);
  position:fixed;inset:0 0 auto 0;height:var(--app-h);overflow:hidden;overscroll-behavior:none;
  display:flex;flex-direction:column;align-items:center;
  padding:env(safe-area-inset-top) env(safe-area-inset-right) 0 env(safe-area-inset-left)}
header{flex:none;width:100%;max-width:560px;display:flex;justify-content:space-between;align-items:center;
  padding:clamp(3px,1vh,8px) 12px;border-bottom:1px solid var(--b);background:linear-gradient(#f5f9fd,#eaf3fb)}
h1{margin:0;font-size:26px;line-height:1.1;letter-spacing:1px}h1 span{color:var(--g)}
header button{width:34px;height:34px;border-radius:50%;border:1px solid var(--b);background:#fff;font-size:17px;line-height:1;cursor:pointer;padding:0;color:#1d2a3a}
#statsBtn{display:flex;align-items:center;justify-content:center}
#sub{flex:none;font-size:13px;line-height:1.2;color:#666;margin:clamp(2px,.6vh,6px) 0}
#reportBar{display:flex;align-items:stretch;overflow:hidden;position:fixed;top:64px;left:50%;transform:translateX(-50%);z-index:10;max-width:92vw;box-shadow:0 2px 8px #0003;font-size:13px;background:#fff3cd;border:1px solid #e0b628;border-radius:6px;padding:0;margin-bottom:4px}
#reportBar.hidden{display:none}
#reportBar .repMsg{padding:6px 10px}
#repX{flex:none;width:52px;border:0;border-left:1px solid #e0b628;background:#f6dc85;color:#5a4300;font-size:22px;font-weight:700;cursor:pointer}

/* ---- boards ---- */
#stage{flex:1 1 0;min-height:0;width:100%;container-type:size;display:flex;align-items:center;justify-content:center;padding:0 4px}
#boards{--cols:2;--R:1.8;--cap:700px;--amax:1.8;--oh:96px;--ow:42px;
  /* R = tile-area height/width with square tiles; oh/ow = gaps+padding+labels; tiles may flatten up to amax:1 */
  width:min(100cqw,calc((100cqh - var(--oh)) * var(--amax) / var(--R) + var(--ow)),var(--cap));
  height:min(100cqh,calc((min(100cqw,var(--cap)) - var(--ow)) * var(--R) + var(--oh)));
  display:grid;grid-template-columns:repeat(var(--cols),minmax(0,1fr));grid-auto-rows:minmax(0,1fr);
  gap:clamp(10px,2.4cqh,16px) clamp(5px,1.6cqw,12px);padding-top:9px}
/* wide, short stages (landscape tablets, laptops, desktops): one row of four boards gives bigger tiles */
@container (min-aspect-ratio:16/9){#boards{--cols:4;--R:.45;--cap:1800px;--amax:1.25;--oh:48px;--ow:110px}}
.board{min-width:0;min-height:0;display:grid;grid-template-rows:repeat(9,minmax(0,1fr));gap:clamp(2px,1cqh,4px);
  padding:clamp(3px,.8cqh,6px);border-radius:8px;background:#f8fbfe;border:2px solid #d6e4f1;box-shadow:0 3px 10px #3a6a9a22;
  position:relative;container-type:size}
.board.solved{border-color:var(--g)}
.board .lbl{position:absolute;top:-8px;left:8px;font-size:10px;line-height:1;background:var(--bg);padding:0 4px;color:#888;border-radius:3px}
.row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:clamp(2px,1cqw,4px);min-height:0}
.tile{min-width:0;min-height:0;display:flex;align-items:center;justify-content:center;font-weight:700;line-height:1;overflow:hidden;
  font-size:clamp(10px,min(10cqw,6.6cqh),30px);border:2px solid var(--b);border-radius:clamp(3px,1.2cqw,6px);background:#fff;text-transform:uppercase}
.tile.g{background:var(--g);border-color:var(--g);color:#fff}.tile.y{background:var(--y);border-color:var(--y);color:#fff}
.tile.x{background:#fff;border-color:var(--b);color:#bdb4aa}
.tile.typed{border-color:#888}.tile.hint{color:var(--g);border-color:var(--g);border-style:dashed}

/* ---- keyboard ---- */
#keyboard{flex:none;width:100%;max-width:560px;background:#1d2a3a;border-radius:14px 14px 0 0;box-shadow:0 -3px 12px #0003;
  padding:clamp(4px,.8vh,8px) 4px calc(clamp(6px,1.4vh,14px) + env(safe-area-inset-bottom))}
.krow{display:flex;justify-content:center;gap:4px;margin:clamp(2px,.4vh,4px) 0}
.key{flex:1;max-width:48px;height:var(--kh);border:none;border-radius:5px;font-weight:700;cursor:pointer;position:relative;overflow:hidden;
  display:grid;grid-template:1fr 1fr/1fr 1fr;padding:0;background:#dde3ea;color:#1f2a36;box-shadow:0 2px 0 #0008;
  -webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
.key.wide{max-width:72px;flex:1.5;display:flex;align-items:center;justify-content:center;font-size:12px;background:#9fd3f0;color:#12324a}
.key i{display:block}.key b{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#111;text-shadow:0 0 3px #fff;font-size:15px}
.key i.g{background:var(--g)}.key i.y{background:var(--y)}.key i.x{background:#b8b0a6}

/* ---- end of game: page scrolls, boards get a fixed share ---- */
body:has(#endPanel:not(.hidden)){overflow-y:auto;-webkit-overflow-scrolling:touch}
body:has(#endPanel:not(.hidden)) #stage{flex:none;height:min(110vw,calc(var(--app-h) * .66));min-height:300px;margin-top:4px}
#endPanel{flex:none;width:100%;max-width:560px;padding:10px 10px calc(16px + env(safe-area-inset-bottom));text-align:center}
#endPanel input{padding:8px;font-size:16px;border:1px solid var(--b);border-radius:6px;width:60%}
#endPanel .fb input{width:100%}
#hintLink{flex:none;margin:4px 0;font-size:13px}

/* ---- misc / overlays ---- */
#toast{position:fixed;top:70px;left:50%;transform:translateX(-50%);background:#222;color:#fff;padding:8px 14px;border-radius:6px;opacity:0;transition:opacity .2s;pointer-events:none;z-index:9;font-size:15px}
#toast.show{opacity:1}
#fbBtn{position:fixed;right:10px;bottom:calc(env(safe-area-inset-bottom) + var(--kh) * 3 + 50px);z-index:8;border:none;border-radius:20px;padding:8px 12px;background:#333;color:#fff;font-weight:700;font-size:14px;box-shadow:0 2px 6px #0004;cursor:pointer;opacity:.9}
@media(min-width:760px){#fbBtn{bottom:16px}}
button.btn{padding:8px 14px;border:none;border-radius:6px;background:var(--g);color:#fff;font-weight:700;font-size:15px;cursor:pointer;margin:4px}
button.link{background:none;border:none;color:#1565c0;text-decoration:underline;cursor:pointer;font-size:13px}
.hidden{display:none!important}
#modal{position:fixed;inset:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:10;padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom)}
.card{background:#fff;border-radius:10px;padding:18px;max-width:420px;width:92%;max-height:calc(var(--app-h) * .88);overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;position:relative}
.close{position:absolute;right:10px;top:6px;border:none;background:none;font-size:24px;cursor:pointer}
.stats{display:flex;justify-content:space-around;text-align:center;font-size:13px}.stats div b{display:block;font-size:24px}
.bar{display:flex;align-items:center;gap:6px;margin:2px 0;font-size:13px}.bar span{background:var(--x);color:#fff;padding:1px 6px;min-width:20px;text-align:right}
pre.share{background:#f2f2f2;padding:8px;border-radius:6px;white-space:pre-wrap}
.muted{color:#666;font-size:13px}
.fb{text-align:left;border-top:1px solid var(--b);margin-top:12px;padding-top:6px}
.wrow{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:4px;padding:6px;border-radius:6px;margin:4px 0}
.wrow.iffy{background:#fff8e1}.flag{font-size:12px;color:#b26a00;font-weight:700}
.seg{display:flex;gap:4px;flex-wrap:wrap}.seg button{border:1px solid var(--b);background:#fff;border-radius:14px;padding:4px 9px;font-size:12.5px;cursor:pointer}
.seg button.on{background:var(--g);border-color:var(--g);color:#fff}
.stars button{font-size:19px;padding:2px 8px}.stars button.on{background:var(--y);border-color:var(--y)}
.fb textarea,.fb input,.card textarea,.card input{width:100%;margin:6px 0;padding:8px;font:inherit;font-size:16px;border:1px solid var(--b);border-radius:6px}
.helpActs{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:12px;border-top:1px solid var(--b);padding-top:12px}
.helpActs .btn{text-decoration:none;display:inline-block;font-size:15px}
.helpActs a.btn{padding:8px 14px;border-radius:6px;background:#9fd3f0;color:#12324a;font-weight:700;margin:4px}

/* ---- practice mode ---- */
.hl{display:flex;gap:6px;align-items:center}
header button.pill{width:auto;padding:0 10px;border-radius:17px;font-size:13px;font-weight:700;background:#9fd3f0;color:#12324a;border-color:#7fbde0;white-space:nowrap}
.pbadge{display:inline-block;background:#e2a929;color:#fff;font-weight:800;letter-spacing:1px;font-size:12px;padding:3px 8px;border-radius:5px}
#pbar{flex:none;display:flex;flex-wrap:wrap;gap:4px;align-items:center;justify-content:center;width:100%;max-width:560px;padding:0 6px;margin-bottom:2px}
button.btn.sm{padding:4px 9px;font-size:13px;margin:0}
button.btn.alt{background:#9fd3f0;color:#12324a}
body.practice{background:radial-gradient(circle at 50% 0,#fdf8ec,#f3e6c6) fixed #f7efdb}
body.practice .board .lbl{background:#f7efdb}
@media(max-width:360px){h1{font-size:21px}}
.card.wide{max-width:680px;width:94%;height:calc(var(--app-h) * .88);display:flex;flex-direction:column}
#hintsFrame{flex:1;width:100%;min-height:0;border:1px solid var(--b);border-radius:6px;background:#fafafa}
.card.wide #modalBody{flex:1;display:flex;flex-direction:column;min-height:0}
/* ---- opt-in reveal: lives in the normal flex flow between #sub and the boards, so it can never cover boards/keyboard ---- */
#revealSlot{flex:none;max-width:min(560px,96vw);display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:4px 6px;margin:0 0 4px;font-size:13px;line-height:1.25}
#revealSlot.offer{background:#fff8e1;border:1px solid #e2a929;border-radius:8px;padding:3px 6px;box-shadow:0 1px 4px #0002}
#revealSlot .rvMsg{text-align:center}
#revealSlot button.btn.sm,#rvChip,.rvX{margin:0;padding:4px 10px;font-size:13px;min-height:28px}
.rvX{background:none;border:none;color:#5a4300;text-decoration:underline;cursor:pointer}
#rvChip{border:1px solid #e2a929;background:#fff8e1;color:#5a4300;border-radius:16px;font-weight:700;cursor:pointer}
.tile.rev{color:#9a5b00;background:#fff8e1;border-color:var(--y);border-style:dashed}
