:root{--bg:#ffffff;--fg:#111111;--muted:#666666;--accent:#0a7cff}*{box-sizing:border-box}body,html{margin:0;padding:0;color:var(--fg)}body{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,Apple Color Emoji,Segoe UI Emoji}body.app-body{min-height:100vh;background-color:var(--bg);background-image:url(/images/backgrounds/background_main.png);background-repeat:no-repeat;background-position:top;background-size:cover}body.app-body.app-body--clear{background-image:url(/images/backgrounds/background_last.png);background-position:50%}body.app-body.app-body--story{background-image:none;background-color:#000}a{color:var(--accent);text-decoration:none}.container{max-width:720px;margin:0 auto;padding:calc(84px + env(safe-area-inset-top)) 16px 16px}.container.container--full-bleed{max-width:none;padding:0}h1{font-size:1.5rem}h1,h2{margin:.75rem 0}h2{font-size:1.25rem}.button-link,button,input{font-size:1rem}.button-link,button{cursor:pointer;padding:12px 16px;border-radius:12px;border:1px solid #ddd;background:#f7f7f7;min-height:44px}.button-link.primary,button.primary{background:var(--accent);color:white;border-color:var(--accent)}.button-link{text-decoration:none;color:inherit;display:inline-flex;align-items:center;justify-content:center}.button-link.block{width:100%}.button-link:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button:disabled{cursor:not-allowed;opacity:.6}.card{border:1px solid #eee;border-radius:16px;padding:16px;margin:12px 0;background:#fff;box-shadow:0 2px 10px rgba(0,0,0,.04)}.grid{display:grid;grid-gap:12px;gap:12px}input[type=password],input[type=text]{width:100%;padding:14px;border-radius:12px;border:1px solid #ddd}.badge{display:inline-block;font-size:.85rem;padding:4px 8px;border-radius:999px;background:#eef3ff;color:#1a4ed8}.footer-space{height:60px}.fixed-footer{position:-webkit-sticky;position:sticky;bottom:0;background:linear-gradient(180deg,rgba(255,255,255,0),#fff 40%);padding:16px 0 8px}.progress{width:100%;height:10px;background:#f0f0f0;border-radius:999px;overflow:hidden}.progress>div{height:100%;background:var(--accent)}.hint{border:1px dashed #bbb;border-radius:12px;padding:12px;margin:8px 0}.loading-overlay{position:fixed;inset:0;z-index:1000;background:rgba(255,255,255,.92);display:flex;align-items:center;justify-content:center;padding:24px;text-align:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.loading-overlay__panel{display:flex;flex-direction:column;align-items:center;gap:12px}.loading-overlay__spinner{width:52px;height:52px;border-radius:999px;border:4px solid rgba(10,124,255,.25);border-top:4px solid var(--accent);animation:loading-spin .9s linear infinite}.loading-overlay__text{margin:0;color:var(--muted);font-size:1rem}@keyframes loading-spin{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.loading-overlay__spinner{animation-duration:1.5s}}.app-header{position:fixed;top:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:calc(12px + env(safe-area-inset-top)) 16px 12px;z-index:80;pointer-events:none;background:linear-gradient(180deg,rgba(255,255,255,.95),rgba(255,255,255,0))}.app-header__brand{pointer-events:auto;background:rgba(255,255,255,.85);color:var(--fg);padding:8px 16px;border-radius:999px;font-weight:700;font-size:1rem;border:1px solid rgba(0,0,0,.04)}.app-header__menu-button{pointer-events:auto;display:flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:999px;border:1px solid rgba(0,0,0,.05);background:rgba(255,255,255,.9);font-size:1.35rem}.app-header__backdrop{position:fixed;inset:0;pointer-events:auto;background:transparent}.app-header__menu{position:absolute;top:calc(100% + 10px);right:16px;display:none;flex-direction:column;gap:8px;min-width:200px;background:rgba(20,20,28,.94);color:#fff;padding:16px;border-radius:18px;box-shadow:0 16px 32px rgba(0,0,0,.35);pointer-events:auto}.app-header__menu.is-open{display:flex}.app-header__menu-item{color:#fff;padding:10px 12px;border-radius:12px;background:rgba(255,255,255,.08);font-weight:600;display:block;width:100%;text-align:left;border:none;font:inherit;cursor:pointer}.app-header__menu-item:focus-visible,.app-header__menu-item:hover{background:rgba(255,255,255,.16)}.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}.crossword-grid{--crossword-cell-size:clamp(44px,10vw,56px);--crossword-border:#c4c4c4;display:grid;grid-gap:0;gap:0;justify-content:start}.crossword-grid__cell{position:relative;width:var(--crossword-cell-size);height:var(--crossword-cell-size);display:flex;align-items:center;justify-content:center;background:#fff;transition:border-color .15s ease,background-color .15s ease}.crossword-grid__cell--active{border:1px solid var(--crossword-border)}.crossword-grid__cell--inactive{background:#f2f2f2}.crossword-grid__cell--editing{border-color:var(--accent)}.crossword-grid__cell--focused{background:rgba(10,124,255,.12)}.crossword-grid__number{font-size:.55rem;font-weight:600;color:#333}.crossword-grid__label,.crossword-grid__number{position:absolute;top:2px;left:3px;line-height:1;pointer-events:none}.crossword-grid__label{font-size:.6rem;font-weight:500;color:#555}.crossword-grid__label--bottom{top:auto;bottom:2px}.crossword-grid__input{width:100%;height:100%;border:none;background:transparent;text-align:center;font-size:clamp(1rem,3.2vw,1.4rem);font-weight:600;text-transform:uppercase;color:var(--fg)}.crossword-grid__input:focus{outline:none}.crossword-grid__input::selection{background:rgba(10,124,255,.25)}.crossword-keyword{margin-top:24px;display:flex;justify-content:center}.crossword-keyword__inner{display:inline-flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap}.crossword-keyword__title{font-weight:600;font-size:1.1rem}.crossword-keyword__grid{display:flex}.crossword-keyword__grid .crossword-grid{justify-content:center}.crossword-hints{margin-top:24px;display:flex;flex-direction:column;gap:12px}.crossword-hints__section{border:1px solid #e4e4e4;border-radius:12px;overflow:hidden;background:#fafafa}.crossword-hints__section summary{list-style:none;display:flex;align-items:center;gap:12px;padding:12px 16px;font-weight:600;cursor:pointer;min-height:44px}.crossword-hints__section summary::-webkit-details-marker{display:none}.crossword-hints__section summary:after{content:"＋";margin-left:auto;font-weight:600;transition:transform .2s ease}.crossword-hints__section[open] summary{border-bottom:1px solid #e4e4e4}.crossword-hints__section[open] summary:after{content:"－"}.crossword-hints__list{margin:0;padding:12px 16px 16px 28px;display:grid;grid-gap:8px;gap:8px}.crossword-hints__item{display:grid;grid-template-columns:auto 1fr;grid-gap:8px;gap:8px;align-items:start;font-size:.95rem}.crossword-hints__number{font-weight:600}.crossword-extra-hints{margin-top:20px;padding-top:16px;border-top:1px solid #eee;display:flex;flex-direction:column;gap:12px}.crossword-extra-hints__title{margin:0;font-size:1.05rem}.crossword-extra-hints__sections{display:grid;grid-gap:16px;gap:16px}@media (min-width:640px){.crossword-extra-hints__sections{grid-template-columns:repeat(2,minmax(0,1fr))}}.crossword-extra-hints__section{display:flex;flex-direction:column;gap:8px}.crossword-extra-hints__section-title{margin:0;font-size:.95rem;color:var(--muted)}