/* Gary's Library: shared look. Every game page loads this file plus settings.js.
   settings.js sets data-mode (light, gray, dark), data-scheme and data-keys on <html>. */
:root{
  --paper:#f5f6f8; --ink:#10171e; --muted:#566370; --line:#c3cbd3;
  --key:#cfd6dd; --key-ink:#10171e; --miss:#66727e; --on-miss:#ffffff; --spent-ink:#a4adb6;
  --hit:#15963f; --on-hit:#ffffff; --near:#f6b900; --on-near:#1c1600;
  --key-h:58px;
  --display:"Bricolage Grotesque","Avenir Next","Segoe UI",sans-serif;
  --body:"IBM Plex Sans","Helvetica Neue",Arial,sans-serif;
  color-scheme:light;
}
:root[data-mode="gray"]{
  --paper:#454d56; --ink:#ffffff; --muted:#c6cdd4; --line:#727c87;
  --key:#e1e6eb; --key-ink:#10171e; --miss:#2a3037; --on-miss:#cbd2d9; --spent-ink:#8a949e;
  color-scheme:dark;
}
:root[data-mode="dark"]{
  --paper:#0d1216; --ink:#f2f5f7; --muted:#9ba7b1; --line:#3b4752;
  --key:#5b6976; --key-ink:#ffffff; --miss:#2a333b; --on-miss:#c9d1d8; --spent-ink:#5d6974;
  color-scheme:dark;
}
/* Color schemes: the two colors that carry the game feedback */
:root[data-scheme="classic"]{--hit:#15963f;--on-hit:#ffffff;--near:#f6b900;--on-near:#1c1600}
:root[data-scheme="classic"]:not([data-mode="light"]){--hit:#1eb854}
:root[data-scheme="ocean"]{--hit:#1668e3;--on-hit:#ffffff;--near:#ff8a1f;--on-near:#231000}
:root[data-scheme="ocean"]:not([data-mode="light"]){--hit:#2f80ff}
:root[data-scheme="neon"]{--hit:#00b8a0;--on-hit:#03211c;--near:#ff4fa3;--on-near:#2b0617}
:root[data-scheme="neon"]:not([data-mode="light"]){--hit:#12dcc0}
:root[data-keys="compact"]{--key-h:50px}
:root[data-keys="large"]{--key-h:64px}

*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{background:var(--paper);color:var(--ink);font-family:var(--body);font-size:15px;line-height:1.4;
  -webkit-tap-highlight-color:transparent;touch-action:manipulation;-webkit-text-size-adjust:100%}
h1,h2{font-family:var(--display);letter-spacing:-.02em;margin:0;text-wrap:balance}
a{color:inherit}
button{font-family:inherit}
button:focus-visible,a:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.btn{font:600 14px var(--body);border:1.5px solid var(--ink);background:var(--ink);color:var(--paper);padding:8px 14px;border-radius:8px;cursor:pointer;white-space:nowrap}
.btn.quiet{background:none;color:var(--muted);border-color:var(--line);font-weight:500}

/* Feedback tile, shared by games and by the settings preview */
.tile{display:grid;place-items:center;border:2px solid var(--line);border-radius:6px;
  font-family:var(--display);font-weight:700;text-transform:uppercase;user-select:none;-webkit-user-select:none}
.tile[data-s="hit"]{background:var(--hit);border-color:var(--hit);color:var(--on-hit)}
.tile[data-s="near"]{background:var(--near);border-color:var(--near);color:var(--on-near);border-radius:50%}
.tile[data-s="miss"]{background:var(--miss);border-color:var(--miss);color:var(--on-miss)}

/* Keyboard key. Unused keys are bright, used-and-absent keys are hollowed out. */
.key{height:var(--key-h);border:1.5px solid transparent;border-radius:7px;background:var(--key);color:var(--key-ink);
  font:600 19px var(--body);text-transform:uppercase;cursor:pointer;padding:0;display:grid;place-items:center}
.key[data-s="hit"]{background:var(--hit);color:var(--on-hit)}
.key[data-s="near"]{background:var(--near);color:var(--on-near);border-radius:calc(var(--key-h) / 2)}
.key[data-s="miss"]{background:transparent;border-color:var(--line);color:var(--spent-ink);font-weight:500}
.key:active{transform:translateY(1px)}

/* Dialogs and the settings sheet */
dialog{border:1px solid var(--line);border-radius:14px;background:var(--paper);color:var(--ink);padding:20px;width:min(92vw,400px)}
dialog::backdrop{background:rgba(5,8,12,.6)}
dialog h2{font-size:20px;margin:0 0 12px}
dialog p{margin:0 0 10px}
.dlg-foot{display:flex;justify-content:space-between;gap:10px;margin-top:16px}
.settings{display:flex;flex-direction:column;gap:18px}
.sheet-note{color:var(--muted);font-size:13px;margin:16px 0 0}
.set-row{display:flex;flex-direction:column;gap:8px}
.set-row>span{font-weight:600}
.seg{display:flex;gap:6px}
.seg button{flex:1 1 0;min-width:0;font:500 14px var(--body);padding:10px 4px;border-radius:8px;border:1.5px solid var(--line);
  background:none;color:var(--ink);cursor:pointer;white-space:normal;line-height:1.2;overflow-wrap:anywhere}
.seg button[aria-pressed="true"]{background:var(--ink);color:var(--paper);border-color:var(--ink);font-weight:600}
.seg .sw{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:2px;vertical-align:-1px;box-shadow:0 0 0 1px rgba(128,138,148,.7)}
/* Button size: three keycaps drawn at the size you get */
.sizes{display:flex;gap:10px;align-items:flex-end}
.sizes button{flex:1 1 0;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:8px;height:96px;
  padding:10px 4px 8px;background:none;border:1.5px solid transparent;border-radius:10px;color:var(--muted);cursor:pointer}
.sizes button[aria-pressed="true"]{border-color:var(--ink);color:var(--ink)}
.sizes em{font:500 13px var(--body);font-style:normal}
.sizes button[aria-pressed="true"] em{font-weight:600}
.keycap{display:grid;place-items:center;font:600 15px var(--body);font-style:normal;background:var(--key);color:var(--key-ink);border-radius:6px;width:30px;height:34px}
.keycap.standard{width:34px;height:42px;font-size:17px}
.keycap.large{width:38px;height:50px;font-size:19px}

/* Shared game page chrome */
.g-app{height:100%;max-width:520px;margin:0 auto;display:flex;flex-direction:column;gap:8px;
  padding:max(10px, env(safe-area-inset-top)) max(12px, env(safe-area-inset-right)) max(34px, calc(env(safe-area-inset-bottom) + 12px)) max(12px, env(safe-area-inset-left))}
.g-head{display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--line);padding-bottom:6px}
.g-head h1{font-size:22px;font-weight:700;flex:1;white-space:nowrap}
.g-menu{font:600 14px var(--body);color:var(--ink);text-decoration:none;border:1.5px solid var(--line);border-radius:8px;padding:6px 10px 6px 7px;white-space:nowrap}
.g-icon{width:38px;height:38px;display:grid;place-items:center;background:none;border:0;border-radius:8px;color:var(--muted);cursor:pointer;padding:0}
.g-icon svg{width:22px;height:22px}
.g-toast{position:fixed;left:50%;top:calc(env(safe-area-inset-top) + 64px);transform:translateX(-50%);background:var(--ink);color:var(--paper);
  padding:8px 14px;border-radius:8px;font-weight:600;opacity:0;pointer-events:none;transition:opacity .15s;z-index:30;white-space:nowrap}
.g-toast.show{opacity:1}
.choices{display:flex;flex-direction:column;gap:8px}
.choices button{display:flex;justify-content:space-between;align-items:center;gap:10px;text-align:left;font:600 16px var(--body);padding:14px;border-radius:10px;
  border:1.5px solid var(--line);background:none;color:var(--ink);cursor:pointer}
.choices button small{font-weight:400;font-size:13px;color:var(--muted)}
/* Shared letter keyboard */
.gkb{display:flex;flex-direction:column;gap:6px}
.gkr{display:flex;gap:5px}
.gkr .key{flex:1 1 0;min-width:0}
.gkr .key.wide{flex:2.05 1 0}
.gsp-half{flex:.5 1 0}
.gsp-wide{flex:.95 1 0}
.key.done{background:transparent;border-color:var(--line);color:var(--spent-ink);font-weight:500}

/* A game's own home screen */
.ghome{position:fixed;inset:0;z-index:40;background:var(--paper);overflow-y:auto;-webkit-overflow-scrolling:touch}
.ghome[hidden]{display:none}
.ghome-in{max-width:520px;margin:0 auto;display:flex;flex-direction:column;gap:14px;align-items:stretch;
  padding:max(10px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(40px, calc(env(safe-area-inset-bottom) + 20px)) max(16px, env(safe-area-inset-left))}
.ghome-in>.g-menu{align-self:flex-start}
.ghome-title{padding:10px 0 4px}
.ghome .gstats.top{order:0;grid-template-columns:repeat(3,1fr);row-gap:12px;padding:12px;border:1.5px solid var(--line);border-radius:12px}
.ghome .gstats.top b{font-size:28px;color:var(--near)}
.ghome-title h1{font-size:38px;font-weight:700;line-height:1.05}
.ghome-title p{margin:6px 0 0;color:var(--muted);font-size:16px}
.ghome h2{font:600 12px var(--body);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line);padding-bottom:6px;margin:10px 0 0}
.ghome .choices h2{margin:8px 0 2px}
.choices button.primary{background:var(--hit);border-color:var(--hit);color:var(--on-hit);font-size:18px;padding:16px 14px}
.choices button.primary small{color:inherit;opacity:.85}
.gstats{display:grid;grid-template-columns:repeat(auto-fit,minmax(70px,1fr));gap:8px;text-align:center;padding:6px 0}
.gstats b{display:block;font-family:var(--display);font-size:24px;font-variant-numeric:tabular-nums}
.gstats span{font-size:12px;color:var(--muted)}
.ghome .set-row>span{font-weight:500}
.ghome-link{align-self:flex-start;background:none;border:0;padding:6px 0;color:var(--muted);font:500 14px var(--body);text-decoration:underline;cursor:pointer}
.ghome-how{border-top:1px solid var(--line);padding-top:10px;color:var(--ink)}
.ghome-how summary{font-weight:600;cursor:pointer;padding:4px 0}
.ghome-how p,.ghome-how li{margin:8px 0;color:var(--muted)}
.ghome-how ul{padding-left:20px;margin:0}
button.g-menu,button.menu{background:none;cursor:pointer;font-family:var(--body)}

/* Shared keyboard press feedback: lit key plus a letter bubble, entered on release */
.gkb{touch-action:none;-webkit-user-select:none;user-select:none}
.gkr .key{position:relative}
.gkr .key:active{transform:none}
.gkr .key.pressed{background:var(--near);color:var(--on-near);border-color:var(--near)}
.gkr .key.pressed:not(.wide)::after{content:attr(data-k);position:absolute;left:50%;bottom:calc(100% + 6px);transform:translateX(-50%);
  min-width:52px;height:58px;padding:0 8px;display:grid;place-items:center;border-radius:12px;background:var(--near);color:var(--on-near);
  font:700 32px var(--display);text-transform:uppercase;box-shadow:0 6px 16px rgba(0,0,0,.4);z-index:50;pointer-events:none}

/* ===== Refined look: quiet background art and higher-finish surfaces, shared by every menu ===== */
:root{
  --surface:rgba(255,255,255,.66); --surface-2:rgba(255,255,255,.9); --hair:rgba(16,23,30,.13);
  --lift:inset 0 1px 0 rgba(255,255,255,.85), 0 1px 2px rgba(16,23,30,.06), 0 8px 22px rgba(16,23,30,.07);
  --pop:0 18px 50px rgba(16,23,30,.22), 0 2px 6px rgba(16,23,30,.1);
  --ptn:url("data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22240%22%20height=%22240%22%20viewBox=%220%200%20240%20240%22%20fill=%22none%22%20stroke=%22%2310171e%22%20stroke-opacity=%22.075%22%20stroke-width=%221.4%22%20stroke-linecap=%22round%22%3E%3Crect%20x=%2222%22%20y=%2226%22%20width=%2230%22%20height=%2230%22%20rx=%228%22%20transform=%22rotate(-8%2037%2041)%22/%3E%3Ccircle%20cx=%22168%22%20cy=%2248%22%20r=%2215%22/%3E%3Cpath%20d=%22M108%20100h18M117%2091v18%22/%3E%3Crect%20x=%22150%22%20y=%22150%22%20width=%2246%22%20height=%2218%22%20rx=%226%22%20transform=%22rotate(10%20173%20159)%22/%3E%3Ccircle%20cx=%2252%22%20cy=%22176%22%20r=%229%22/%3E%3Cpath%20d=%22M96%20196l10%2010%2016-18%22/%3E%3Crect%20x=%22206%22%20y=%2296%22%20width=%2220%22%20height=%2220%22%20rx=%225%22%20transform=%22rotate(14%20216%20106)%22/%3E%3Ccircle%20cx=%2218%22%20cy=%22112%22%20r=%222.2%22/%3E%3Ccircle%20cx=%22130%22%20cy=%2220%22%20r=%222.2%22/%3E%3Ccircle%20cx=%22222%22%20cy=%22214%22%20r=%222.2%22/%3E%3Ccircle%20cx=%2284%22%20cy=%2262%22%20r=%222.2%22/%3E%3C/svg%3E");
  --glow1:color-mix(in srgb, var(--hit) 20%, transparent); --glow2:color-mix(in srgb, var(--near) 22%, transparent); --glow3:color-mix(in srgb, var(--hit) 11%, transparent);
  --art:radial-gradient(75% 46% at 8% -4%, var(--glow1), transparent 72%), radial-gradient(62% 40% at 104% 16%, var(--glow2), transparent 70%), radial-gradient(90% 46% at 50% 108%, var(--glow3), transparent 72%), var(--ptn);
}
:root[data-mode="gray"]{
  --surface:rgba(255,255,255,.075); --surface-2:rgba(255,255,255,.13); --hair:rgba(255,255,255,.16);
  --lift:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 2px rgba(0,0,0,.18), 0 10px 26px rgba(0,0,0,.2);
  --pop:0 22px 60px rgba(0,0,0,.5), 0 2px 8px rgba(0,0,0,.3);
  --ptn:url("data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22240%22%20height=%22240%22%20viewBox=%220%200%20240%20240%22%20fill=%22none%22%20stroke=%22%23ffffff%22%20stroke-opacity=%22.07%22%20stroke-width=%221.4%22%20stroke-linecap=%22round%22%3E%3Crect%20x=%2222%22%20y=%2226%22%20width=%2230%22%20height=%2230%22%20rx=%228%22%20transform=%22rotate(-8%2037%2041)%22/%3E%3Ccircle%20cx=%22168%22%20cy=%2248%22%20r=%2215%22/%3E%3Cpath%20d=%22M108%20100h18M117%2091v18%22/%3E%3Crect%20x=%22150%22%20y=%22150%22%20width=%2246%22%20height=%2218%22%20rx=%226%22%20transform=%22rotate(10%20173%20159)%22/%3E%3Ccircle%20cx=%2252%22%20cy=%22176%22%20r=%229%22/%3E%3Cpath%20d=%22M96%20196l10%2010%2016-18%22/%3E%3Crect%20x=%22206%22%20y=%2296%22%20width=%2220%22%20height=%2220%22%20rx=%225%22%20transform=%22rotate(14%20216%20106)%22/%3E%3Ccircle%20cx=%2218%22%20cy=%22112%22%20r=%222.2%22/%3E%3Ccircle%20cx=%22130%22%20cy=%2220%22%20r=%222.2%22/%3E%3Ccircle%20cx=%22222%22%20cy=%22214%22%20r=%222.2%22/%3E%3Ccircle%20cx=%2284%22%20cy=%2262%22%20r=%222.2%22/%3E%3C/svg%3E");
  --glow1:color-mix(in srgb, var(--hit) 26%, transparent); --glow2:color-mix(in srgb, var(--near) 20%, transparent); --glow3:color-mix(in srgb, var(--hit) 14%, transparent);
}
:root[data-mode="dark"]{
  --surface:rgba(255,255,255,.05); --surface-2:rgba(255,255,255,.09); --hair:rgba(255,255,255,.12);
  --lift:inset 0 1px 0 rgba(255,255,255,.07), 0 1px 2px rgba(0,0,0,.4), 0 10px 28px rgba(0,0,0,.35);
  --pop:0 22px 60px rgba(0,0,0,.65), 0 2px 8px rgba(0,0,0,.4);
  --ptn:url("data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22240%22%20height=%22240%22%20viewBox=%220%200%20240%20240%22%20fill=%22none%22%20stroke=%22%23ffffff%22%20stroke-opacity=%22.055%22%20stroke-width=%221.4%22%20stroke-linecap=%22round%22%3E%3Crect%20x=%2222%22%20y=%2226%22%20width=%2230%22%20height=%2230%22%20rx=%228%22%20transform=%22rotate(-8%2037%2041)%22/%3E%3Ccircle%20cx=%22168%22%20cy=%2248%22%20r=%2215%22/%3E%3Cpath%20d=%22M108%20100h18M117%2091v18%22/%3E%3Crect%20x=%22150%22%20y=%22150%22%20width=%2246%22%20height=%2218%22%20rx=%226%22%20transform=%22rotate(10%20173%20159)%22/%3E%3Ccircle%20cx=%2252%22%20cy=%22176%22%20r=%229%22/%3E%3Cpath%20d=%22M96%20196l10%2010%2016-18%22/%3E%3Crect%20x=%22206%22%20y=%2296%22%20width=%2220%22%20height=%2220%22%20rx=%225%22%20transform=%22rotate(14%20216%20106)%22/%3E%3Ccircle%20cx=%2218%22%20cy=%22112%22%20r=%222.2%22/%3E%3Ccircle%20cx=%22130%22%20cy=%2220%22%20r=%222.2%22/%3E%3Ccircle%20cx=%22222%22%20cy=%22214%22%20r=%222.2%22/%3E%3Ccircle%20cx=%2284%22%20cy=%2262%22%20r=%222.2%22/%3E%3C/svg%3E");
  --glow1:color-mix(in srgb, var(--hit) 22%, transparent); --glow2:color-mix(in srgb, var(--near) 15%, transparent); --glow3:color-mix(in srgb, var(--hit) 12%, transparent);
}
body::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;background-image:var(--art);background-repeat:no-repeat,no-repeat,no-repeat,repeat;background-size:auto,auto,auto,240px 240px}
.ghome{background-image:var(--art);background-repeat:no-repeat,no-repeat,no-repeat,repeat;background-size:auto,auto,auto,240px 240px;background-attachment:local}
h1,h2{letter-spacing:-.025em}
/* buttons and chips */
.btn{border-radius:11px;border-width:1px;box-shadow:inset 0 1px 0 rgba(255,255,255,.18), 0 2px 8px rgba(0,0,0,.14);transition:transform .08s ease, box-shadow .12s ease}
.btn:active{transform:translateY(1px);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 3px rgba(0,0,0,.14)}
.btn.quiet{border-color:var(--hair);background:var(--surface);box-shadow:none}
.g-menu,button.g-menu,button.menu,a.menu{border:1px solid var(--hair);background:var(--surface);border-radius:11px;box-shadow:var(--lift)}
.g-head{border-bottom:1px solid var(--hair)}
.g-icon{border-radius:11px;transition:background-color .12s}
.g-icon:active{background:var(--surface-2)}
/* cards and lists */
.choices{gap:10px}
.choices button{border:1px solid var(--hair);background:var(--surface);border-radius:15px;box-shadow:var(--lift);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  transition:transform .08s ease, box-shadow .12s ease, background-color .12s}
.choices button:active{transform:translateY(1px) scale(.995);background:var(--surface-2)}
.choices button.primary{border-color:transparent;background:linear-gradient(180deg, color-mix(in srgb, var(--hit) 86%, #ffffff), var(--hit));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.4), 0 10px 26px color-mix(in srgb, var(--hit) 38%, transparent), 0 2px 4px rgba(0,0,0,.14)}
.ghome h2,.ghome .choices h2{border-bottom:1px solid var(--hair);letter-spacing:.11em}
.gstats.top,.ghome .gstats.top{border:1px solid var(--hair);background:var(--surface);border-radius:16px;box-shadow:var(--lift);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.ghome-how{border-top:1px solid var(--hair)}
/* settings controls */
.seg{gap:0;padding:3px;border-radius:13px;background:var(--surface);border:1px solid var(--hair);box-shadow:inset 0 1px 2px rgba(0,0,0,.08)}
.seg button{border:0;border-radius:10px;background:none;padding:9px 6px;transition:background-color .15s, color .15s, box-shadow .15s}
.seg button[aria-pressed="true"]{background:var(--ink);color:var(--paper);box-shadow:0 2px 8px rgba(0,0,0,.22)}
.sizes button{border-radius:13px;border-width:1px}
.sizes button[aria-pressed="true"]{background:var(--surface);box-shadow:var(--lift)}
/* dialogs */
dialog{border:1px solid var(--hair);border-radius:20px;box-shadow:var(--pop)}
dialog::backdrop{background:rgba(6,10,16,.55);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.g-toast{border-radius:11px;box-shadow:var(--pop)}
/* keys */
.key{border-radius:9px;box-shadow:inset 0 1px 0 rgba(255,255,255,.22), 0 2px 0 rgba(0,0,0,.2)}
.key[data-s="miss"],.key.done{box-shadow:none}
