:root{color-scheme:dark;--bg:#101b26;--panel:#172634;--panel-2:#203342;--ink:#f7f3e8;--muted:#8ea0ad;--lime:#c9ff45;--accent-mid:rgba(201,255,69,.82);--accent-deep:rgba(142,185,39,.9);--glow:rgba(201,255,69,.13);--orange:#ff7043;--line:rgba(255,255,255,.09);--danger:#ff8b72}
    *{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;height:100%;background:var(--bg);overflow:hidden}body{min-height:100dvh;color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;overscroll-behavior:none}button,input,textarea{font:inherit}
    .app{width:min(100%,520px);height:100dvh;margin:auto;padding:max(14px,env(safe-area-inset-top)) 16px max(12px,env(safe-area-inset-bottom));display:flex;flex-direction:column;overflow:hidden;background:radial-gradient(circle at 15% -5%,var(--glow),transparent 36%),var(--bg);transition:background .28s ease}.app.theme-market{--lime:#ffcf4a;--accent-mid:rgba(255,207,74,.82);--accent-deep:rgba(196,144,24,.9);--glow:rgba(255,207,74,.16);--panel:#2b241c;--panel-2:#3b3023;--muted:#b4a58f}.app.theme-restaurant{--lime:#ff8fb7;--accent-mid:rgba(255,143,183,.82);--accent-deep:rgba(197,82,125,.9);--glow:rgba(255,143,183,.17);--panel:#2a1f2c;--panel-2:#3b293e;--muted:#b7a0ba}header{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:3px 2px 8px}.brand{display:flex;align-items:center;gap:10px;min-width:0}.mark{width:38px;height:38px;flex:0 0 auto;border-radius:11px;object-fit:cover;box-shadow:0 6px 18px rgba(0,0,0,.28)}h1{margin:0;font-size:1.55rem;letter-spacing:-.045em;line-height:1}.subtitle{margin:5px 0 0;color:var(--muted);font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.header-actions{display:flex;align-items:center;gap:5px}.logged-in{display:none}.topic-nav{display:flex;justify-content:center;align-items:center;margin:0 0 8px}.topic-position{text-align:center}.topic-name{margin:0;font-size:.82rem;font-weight:900;letter-spacing:.04em;text-transform:uppercase}.topic-dots{display:flex;justify-content:center;gap:5px;margin-top:5px}.topic-dot{width:5px;height:5px;border-radius:50%;background:var(--muted);opacity:.45}.topic-dot.active{width:16px;border-radius:4px;background:var(--lime);opacity:1}.swipe-hint{margin:0;color:var(--muted);font-size:.62rem}.soundboard-shell{position:relative;display:flex;flex:1;min-height:0;margin-inline:-16px;padding-inline:28px}.topic-arrow{appearance:none;position:absolute;z-index:3;top:50%;width:18px;height:96px;margin-top:-48px;padding:0;border:1px solid var(--line);border-radius:0 10px 10px 0;background:rgba(10,18,25,.86);color:var(--ink);font-size:1rem;cursor:pointer;backdrop-filter:blur(8px)}#previous-topic{left:0}#next-topic{right:0;border-radius:10px 0 0 10px}.topic-arrow[hidden]{visibility:hidden;display:block}.grid{touch-action:pan-y}
    .mini-button{appearance:none;border:1px solid var(--line);border-radius:999px;padding:9px 11px;background:var(--panel);color:var(--ink);font-size:.68rem;font-weight:850;letter-spacing:.025em;cursor:pointer;white-space:nowrap}.mini-button.primary{background:var(--lime);border-color:var(--lime);color:var(--bg)}.mini-button.ghost{background:transparent;color:var(--muted)}.icon-button{appearance:none;width:34px;height:34px;padding:0;border:1px solid var(--line);border-radius:50%;display:grid;place-items:center;background:var(--panel);color:var(--lime);cursor:pointer}.icon-button svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:repeat(5,minmax(0,1fr));gap:8px;flex:1;min-height:0;width:100%}
    .phrase{appearance:none;border:1px solid rgba(255,255,255,.15);border-radius:18px;padding:clamp(9px,1.7vh,14px);background:radial-gradient(circle at 20% 0,rgba(255,255,255,.14),transparent 42%),linear-gradient(155deg,rgba(255,255,255,.07),rgba(0,0,0,.13)),var(--panel);color:var(--ink);font-weight:850;font-size:clamp(1.18rem,5.7vw,1.55rem);line-height:1.03;letter-spacing:-.035em;text-align:left;cursor:pointer;box-shadow:inset 0 2px 0 rgba(255,255,255,.12),inset 0 -7px 0 rgba(3,9,14,.3),0 6px 0 rgba(3,9,14,.62),0 13px 24px rgba(0,0,0,.32);transform:translateY(-2px);transition:transform .1s ease,border-color .1s ease,background .1s ease,color .1s ease,box-shadow .1s ease;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;gap:3px}.phrase.compact{padding-block:9px;font-size:clamp(1.05rem,4.8vw,1.25rem)}.phrase-label{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;text-shadow:0 1px 0 rgba(0,0,0,.28)}.phrase-translation{display:block;color:var(--muted);font-weight:600;font-size:clamp(.55rem,2.7vw,.66rem);line-height:1.15;letter-spacing:0}.phrase.speaking{transform:translateY(5px) scale(.982);border-color:var(--accent-mid);background:radial-gradient(circle at 50% 65%,var(--lime),var(--accent-mid) 68%,var(--accent-deep));color:#101b26;box-shadow:inset 0 6px 12px rgba(3,9,14,.38),inset 0 -2px 3px rgba(255,255,255,.25),inset 3px 0 7px rgba(3,9,14,.16),inset -3px 0 7px rgba(3,9,14,.16),0 1px 0 rgba(3,9,14,.55),0 2px 5px rgba(0,0,0,.18)}.phrase.speaking .phrase-label{text-shadow:0 1px 0 rgba(255,255,255,.2)}.phrase.speaking .phrase-translation{color:rgba(16,27,38,.7)}button:focus-visible,input:focus-visible{outline:3px solid var(--orange);outline-offset:2px}@media(hover:hover) and (pointer:fine){.phrase:active{transform:translateY(5px) scale(.982);border-color:var(--accent-mid);background:radial-gradient(circle at 50% 65%,var(--lime),var(--accent-mid) 68%,var(--accent-deep));color:#101b26;box-shadow:inset 0 6px 12px rgba(3,9,14,.38),inset 0 -2px 3px rgba(255,255,255,.25),inset 3px 0 7px rgba(3,9,14,.16),inset -3px 0 7px rgba(3,9,14,.16),0 1px 0 rgba(3,9,14,.55),0 2px 5px rgba(0,0,0,.18)}.phrase:active .phrase-label{text-shadow:0 1px 0 rgba(255,255,255,.2)}.phrase:active .phrase-translation{color:rgba(16,27,38,.7)}}
    .status{height:30px;padding:8px 3px 0;display:flex;align-items:center;justify-content:center;gap:8px;color:var(--muted);font-size:.7rem;font-weight:700;text-align:center}.status.active{color:var(--lime)}.bars{display:none;align-items:center;gap:2px;height:12px}.active .bars{display:flex}.bars i{display:block;width:2px;height:5px;background:currentColor;border-radius:2px;animation:pulse .55s ease-in-out infinite alternate}.bars i:nth-child(2){animation-delay:.15s;height:10px}.bars i:nth-child(3){animation-delay:.3s;height:7px}.one-off{padding:0}.one-off-intro{margin:0 0 16px;color:var(--muted);font-size:.82rem;line-height:1.4}.one-off-form{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:stretch}.one-off textarea{width:100%;min-height:88px;max-height:180px;resize:vertical;border:1px solid var(--line);border-radius:14px;padding:12px;background:var(--bg);color:var(--ink);font-size:.95rem;line-height:1.35}.translate-button,.speak-button{appearance:none;border:0;border-radius:14px;padding:0 16px;background:var(--lime);color:var(--bg);font-size:.76rem;font-weight:900;cursor:pointer}.translate-button:disabled,.speak-button:disabled{opacity:.55;cursor:wait}.one-off-feedback{min-height:0;margin:9px 2px 0;color:var(--danger);font-size:.72rem}.one-off-result{display:none;margin-top:12px;padding-top:12px;border-top:1px solid var(--line);grid-template-columns:1fr auto;gap:10px;align-items:center}.one-off-result.show{display:grid}.one-off-english{margin:0 0 5px;color:var(--muted);font-size:.78rem;line-height:1.35}.one-off-translation{margin:0;color:var(--ink);font-size:1.05rem;font-weight:750;line-height:1.35}.speak-button{padding:11px 14px}.one-off-note{margin:5px 0 0;color:var(--muted);font-size:.65rem}
    dialog{width:min(calc(100% - 24px),480px);max-height:min(88dvh,720px);margin:auto;border:1px solid var(--line);border-radius:26px;padding:0;background:var(--panel);color:var(--ink);box-shadow:0 28px 90px rgba(0,0,0,.65);overflow:hidden}dialog::backdrop{background:rgba(4,10,15,.78);backdrop-filter:blur(5px)}.dialog-shell{padding:22px;max-height:inherit;overflow:auto}.dialog-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:20px}.dialog-head h2{margin:0;font-size:1.55rem;letter-spacing:-.04em}.dialog-head p{margin:5px 0 0;color:var(--muted);font-size:.82rem;line-height:1.4}.close{appearance:none;border:1px solid var(--line);border-radius:50%;width:34px;height:34px;flex:0 0 auto;background:var(--panel-2);color:var(--ink);font-size:1.1rem;cursor:pointer}
    .tabs{display:grid;grid-template-columns:1fr 1fr;padding:4px;background:var(--bg);border-radius:14px;margin-bottom:18px}.tab{appearance:none;border:0;border-radius:11px;padding:10px;background:transparent;color:var(--muted);font-size:.78rem;font-weight:850;cursor:pointer}.tab.active{background:var(--panel-2);color:var(--ink)}.field{display:grid;gap:7px;margin-bottom:13px}.field label{font-size:.72rem;color:var(--muted);font-weight:800}.field input,.edit-row input{width:100%;border:1px solid var(--line);border-radius:14px;padding:13px 14px;background:var(--bg);color:var(--ink);font-size:1rem}.form-button{appearance:none;width:100%;border:0;border-radius:14px;padding:14px;background:var(--lime);color:var(--bg);font-weight:900;cursor:pointer}.form-button:disabled{opacity:.55;cursor:wait}.text-button{appearance:none;border:0;padding:8px 0;background:transparent;color:var(--muted);font-size:.76rem;font-weight:750;cursor:pointer}.form-footer{text-align:center;margin-top:7px}
    .feedback{display:none;margin:0 0 14px;padding:11px 12px;border-radius:12px;background:rgba(201,255,69,.08);color:var(--lime);font-size:.78rem;line-height:1.35}.feedback.show{display:block}.feedback.error{background:rgba(255,112,67,.1);color:var(--danger)}.edit-list{display:grid;gap:10px}.edit-row{display:grid;grid-template-columns:28px 1fr;align-items:center;gap:9px}.edit-number{width:28px;height:28px;border-radius:9px;background:var(--bg);color:var(--lime);display:grid;place-items:center;font-size:.68rem;font-weight:900}.edit-row input{padding:11px 12px;font-size:.88rem}.editor-actions{display:grid;grid-template-columns:1fr 2fr;gap:8px;margin-top:18px}.reset-button{appearance:none;border:1px solid var(--line);border-radius:14px;padding:13px;background:transparent;color:var(--muted);font-weight:800;cursor:pointer}.saving-note{margin:12px 0 0;color:var(--muted);text-align:center;font-size:.7rem}#editor-dialog{max-height:calc(100dvh - 16px)}#editor-dialog .dialog-shell{padding:15px 16px}#editor-dialog .dialog-head{margin-bottom:10px}#editor-dialog .dialog-head h2{font-size:1.28rem}#editor-dialog .dialog-head p{font-size:.7rem;line-height:1.25}#editor-dialog .close{width:30px;height:30px}#editor-dialog .feedback{margin-bottom:8px;padding:8px 10px}#editor-dialog .edit-list{gap:5px}#editor-dialog .edit-row{grid-template-columns:24px 1fr;gap:7px}#editor-dialog .edit-number{width:24px;height:24px;border-radius:7px;font-size:.62rem}#editor-dialog .edit-row input{padding:7px 10px;border-radius:11px;font-size:.78rem}#editor-dialog .editor-actions{margin-top:9px;gap:7px}#editor-dialog .form-button,#editor-dialog .reset-button{padding:10px 8px;border-radius:11px;font-size:.75rem}#editor-dialog .saving-note{margin-top:7px;font-size:.58rem}.notice{text-align:center;padding:10px 4px 2px}.notice-mark{width:48px;height:48px;border-radius:17px;background:var(--lime);color:var(--bg);display:grid;place-items:center;margin:0 auto 16px;font-size:1.25rem;font-weight:950}.notice h2{margin:0 0 8px;font-size:1.5rem}.notice p{margin:0 0 20px;color:var(--muted);line-height:1.5;font-size:.88rem}
    @keyframes pulse{to{height:12px}}@media(min-width:700px){body{display:grid;place-items:center;padding:24px}.app{height:min(780px,calc(100dvh - 48px));border:1px solid var(--line);border-radius:34px;box-shadow:0 34px 100px rgba(0,0,0,.38)}}@media(max-height:650px){.app{padding-top:10px;padding-bottom:8px}header{padding-bottom:7px}.topic-nav{margin-bottom:6px}.status{height:24px;padding-top:5px}.phrase{padding:8px;font-size:clamp(1rem,4.8vw,1.3rem)}}@media(max-width:420px){.one-off-form{grid-template-columns:1fr}.translate-button{padding:13px}}@media(max-width:360px){h1{font-size:1.3rem}.subtitle{font-size:.6rem}.mini-button{padding:7px 8px;font-size:.61rem}.header-actions{gap:3px}.phrase{font-size:1.05rem}.phrase-translation{font-size:.53rem}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
:root { --menu-shadow: 0 12px 36px rgba(0,0,0,.48); }
/* The board never scrolls. Keep keyboard-induced iOS viewport movement out of
   document layout; only the contents of an open dialog may scroll. */
html { overscroll-behavior:none; }
body { position:fixed; inset:0; min-height:0; }
.grid { touch-action:pan-y pinch-zoom; }
dialog { position:fixed; }
.dialog-shell,dialog textarea { overscroll-behavior:contain; }
/* iOS zooms focused controls below 16px and can retain that zoom after closing. */
#one-off-input,#editor-dialog .edit-row input { font-size:max(16px,1rem); }
/* Keep the composer near the top and above the on-screen keyboard. Its visual
   viewport height is supplied by JS because iOS does not shrink dvh for it. */
#one-off-dialog {
  --top-gap:max(12px,env(safe-area-inset-top));
  top:calc(var(--visible-top,0px) + var(--top-gap));
  bottom:auto;
  margin:0 auto;
  max-height:min(720px,calc(var(--visible-height,100dvh) - var(--top-gap) - 12px - env(safe-area-inset-bottom)));
}
.header-controls { position:relative; display:flex; align-items:center; gap:5px; }
#context-topic,#context-language { display:inline-block; white-space:nowrap; }
#context-language { letter-spacing:0; }
#menu-toggle { width:44px; height:44px; flex:0 0 auto; border-radius:14px; }
#menu-toggle svg { width:22px; height:22px; }
#menu-toggle .menu-cross,#menu-toggle[aria-expanded="true"] .menu-lines { display:none; }
#menu-toggle[aria-expanded="true"] .menu-cross { display:block; }
#menu-toggle[aria-expanded="true"] { background:var(--panel-2); border-color:var(--lime); }
#header-menu { position:absolute; right:0; top:calc(100% + 10px); z-index:20; width:min(280px,calc(100vw - 36px)); max-height:calc(100dvh - 130px - env(safe-area-inset-top) - env(safe-area-inset-bottom)); overflow-y:auto; overscroll-behavior:contain; touch-action:pan-y; padding:8px; border:1px solid var(--line); border-radius:18px; background:var(--panel-2); box-shadow:var(--menu-shadow); }
#header-menu[hidden] { display:none; }
.menu-heading { margin:6px 12px 8px; color:var(--muted); font-size:10px; font-weight:800; letter-spacing:.1em; text-transform:uppercase; }
#header-menu button { width:100%; display:flex; flex-direction:column; gap:3px; text-align:left; border:0; border-radius:10px; padding:10px 14px; color:var(--ink); background:transparent; cursor:pointer; font-size:14px; min-height:44px; }
#header-menu button span { color:var(--muted); font-size:11px; }
#header-menu button .country-flag { font-size:18px; margin-right:4px; }
#header-menu button[aria-checked="true"] { background:var(--glow); box-shadow:inset 3px 0 var(--lime); }
#header-menu button:hover { background:var(--glow); }
#header-menu button:focus-visible { outline-offset:-2px; }
#header-menu button:disabled { opacity:.5; cursor:wait; }
.menu-divider { border-top:1px solid var(--line); margin:8px 6px; }
#header-menu .header-actions { flex-direction:column; align-items:stretch; gap:2px; }
#header-menu .menu-action { flex-direction:row; align-items:center; gap:12px; font-weight:750; }
.menu-action svg { width:18px; height:18px; flex:0 0 auto; fill:none; stroke:var(--lime); stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
button:focus-visible { outline:2px solid var(--lime); outline-offset:3px; }
.phrase:disabled { cursor:wait; }
.status { font-size:.66rem; }
@media(max-width:380px) { .brand { gap:6px; } h1 { font-size:1.3rem; } .mark { width:29px; height:29px; } .header-controls,.header-actions { gap:3px; } .mini-button { padding:8px; font-size:.62rem; } .icon-button { width:29px; height:29px; } .subtitle { font-size:.59rem; } }
