:root{
  --sumi:#2b2723; --sumi-soft:#5c534b; --muted:#8b8177;
  --washi:#faf6ef; --washi-deep:#f3ece0; --paper:#fffdf8;
  --line:#e2d8c8; --brown:#7a5230; --brown-deep:#5c3d23;
  --aka:#a8452f; --ai:#2f5d78; --midori:#4a7a52; --kin:#c9a227;
  --shadow:0 18px 42px rgba(72,54,34,.10);
  font-family:"Yu Mincho","Hiragino Mincho ProN","Noto Serif JP",serif;
  color:var(--sumi); background:var(--washi);
}
*{box-sizing:border-box}
[hidden]{display:none!important}
body{margin:0;min-width:320px;background:
  radial-gradient(circle at 88% 6%,rgba(122,82,48,.06),transparent 30%),var(--washi)}
button,input{font:inherit;font-family:inherit}
button{cursor:pointer}
.only-mobile{display:none!important}

/* ── 上部バー ───────────────────────── */
.topbar{position:fixed;z-index:30;inset:0 0 auto 0;height:72px;display:flex;align-items:center;
  justify-content:space-between;gap:12px;padding:0 24px;background:rgba(250,246,239,.94);
  border-bottom:1px solid var(--line);backdrop-filter:blur(12px)}
.brand{display:flex;align-items:center;gap:12px}
.brand-mark{display:grid;place-items:center;width:44px;height:44px;border-radius:12px;
  background:var(--brown);color:#fff;font-size:24px;box-shadow:0 6px 16px rgba(122,82,48,.28)}
.brand strong,.brand small{display:block}
.brand strong{font-size:17px;letter-spacing:.06em}
.brand small{margin-top:3px;color:var(--muted);font-size:9px;letter-spacing:.18em;
  font-family:"Yu Gothic UI",system-ui,sans-serif}
.top-right{display:flex;align-items:center;gap:12px}
.icon-btn{width:42px;height:42px;border:1px solid var(--line);border-radius:12px;background:#fff;
  color:var(--sumi);font-size:20px}
.icon-btn:hover{background:var(--washi-deep)}
.counter{display:flex;align-items:baseline;gap:4px;color:var(--muted);
  font-family:"Yu Gothic UI",system-ui,sans-serif;font-variant-numeric:tabular-nums}
.counter b{color:var(--brown-deep);font-size:19px}
.counter span{font-size:11px}

/* ── 左パネル ───────────────────────── */
.panel{position:fixed;z-index:20;top:72px;bottom:0;left:0;width:292px;padding:22px 18px 30px;
  overflow-y:auto;background:var(--paper);border-right:1px solid var(--line)}
.progress{display:flex;align-items:center;gap:15px;padding:15px;border:1px solid var(--line);
  border-radius:16px;background:var(--washi)}
.ring{--p:0deg;display:grid;place-items:center;width:74px;height:74px;flex:0 0 auto;border-radius:50%;
  background:conic-gradient(var(--brown) var(--p),#e8ded0 0);position:relative}
.ring:before{content:"";position:absolute;inset:7px;border-radius:50%;background:var(--paper)}
.ring span{position:relative;text-align:center;line-height:1}
.ring b{font-size:21px}
.ring small{display:block;margin-top:4px;color:var(--muted);font-size:9px}
.progress p{margin:0 0 3px;color:var(--muted);font-size:11px}
.progress strong{display:block;font-size:24px}
.progress small{display:block;margin-top:4px;color:var(--muted);font-size:10px}
.mode-tabs{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:18px 0 4px;padding:4px;
  border-radius:12px;background:var(--washi-deep)}
.mode-tab{padding:9px 4px;border:0;border-radius:9px;background:transparent;color:var(--sumi-soft);
  font-size:13px}
.mode-tab.is-on{background:var(--brown);color:#fff}
.filter-group{margin-top:18px}
.filter-label{margin:0 0 7px;color:var(--muted);font-size:10px;font-weight:700;letter-spacing:.14em;
  font-family:"Yu Gothic UI",system-ui,sans-serif}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{padding:7px 11px;border:1px solid var(--line);border-radius:999px;background:#fff;
  color:var(--sumi-soft);font-size:12px}
.chip:hover{border-color:var(--brown)}
.chip.is-on{border-color:var(--brown);background:#f6ece1;color:var(--brown-deep);font-weight:700}
.panel-actions{margin-top:24px;padding-top:16px;border-top:1px solid var(--line)}
.switch{display:flex;align-items:center;gap:8px;color:var(--sumi-soft);font-size:12px}
.ghost-btn{width:100%;margin-top:14px;padding:10px;border:1px solid var(--line);border-radius:10px;
  background:transparent;color:var(--muted);font-size:11px}
.scrim{display:none}

/* ── 本体 ───────────────────────── */
main{min-height:100vh;padding:104px 32px 64px 324px}
.stage{width:min(760px,100%);margin:0 auto}
.meta-row{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.tag{padding:5px 11px;border-radius:999px;background:var(--washi-deep);color:var(--sumi-soft);
  font-size:11px;font-weight:700}
.tag-chapter{background:#eef2ee;color:var(--midori)}
.tag-level{background:#fdf3e0;color:#8a6a15}
.page{color:var(--muted);font-size:10px;font-family:"Yu Gothic UI",system-ui,sans-serif}
.star-btn{margin-left:auto;width:40px;height:40px;border:1px solid var(--line);border-radius:50%;
  background:#fff;color:#b3a795;font-size:20px}
.star-btn.is-on{border-color:var(--kin);background:#fdf6e0;color:#b8901a}

.card{position:relative;padding:44px 40px;border:1px solid var(--line);border-radius:22px;
  background:var(--paper);box-shadow:var(--shadow);overflow:hidden}
.card:before{content:"";position:absolute;top:0;left:0;width:100%;height:5px;
  background:linear-gradient(90deg,var(--brown),#c69b6d 60%,transparent)}
.card-front{cursor:pointer;text-align:center;padding:26px 0 14px}
.no{margin:0;color:var(--muted);font-size:11px;letter-spacing:.1em;
  font-family:"Yu Gothic UI",system-ui,sans-serif}
.term{margin:16px 0 6px;font-size:52px;line-height:1.25;letter-spacing:.06em}
.kanji{margin:0;color:var(--sumi-soft);font-size:19px;letter-spacing:.08em}
.hint{margin:26px 0 0;color:var(--muted);font-size:11px;
  font-family:"Yu Gothic UI",system-ui,sans-serif}
.card-back{animation:rise .2s ease-out}
.term-small{margin:10px 0 18px;font-size:30px;letter-spacing:.05em}
.meanings{margin:0;padding-left:1.35em}
.meanings li{margin-bottom:7px;font-size:20px;line-height:1.7}
.core,.point,.related{margin-top:16px;padding:15px 17px;border-radius:12px}
.core{border-left:4px solid var(--brown);background:#f7f0e7}
.point{border-left:4px solid var(--ai);background:#eef3f6}
.related{border-left:4px solid var(--midori);background:#eff4ef}
.core span,.point span,.related span{display:block;margin-bottom:5px;font-size:10px;font-weight:800;
  letter-spacing:.12em;font-family:"Yu Gothic UI",system-ui,sans-serif}
.core span{color:var(--brown-deep)} .point span{color:var(--ai)} .related span{color:var(--midori)}
.core p,.point p,.related p{margin:0;font-size:14px;line-height:1.85}
.examples{margin-top:18px;display:grid;gap:11px}
.ex{padding:15px 17px;border:1px solid var(--line);border-radius:12px;background:#fffefa}
.ex-ja{margin:0;font-size:17px;line-height:1.9}
.ex-yaku{margin:8px 0 0;color:var(--sumi-soft);font-size:13px;line-height:1.8}
.ex-src{display:inline-block;margin-top:9px;padding:3px 9px;border-radius:999px;
  background:var(--washi-deep);color:var(--muted);font-size:10px;
  font-family:"Yu Gothic UI",system-ui,sans-serif}

.judge{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px}
.btn{display:flex;align-items:center;justify-content:center;gap:10px;padding:15px;border:0;
  border-radius:14px;font-size:15px;font-weight:700}
.btn-again{border:1px solid #e0b978;background:#fdf6e8;color:#8a6a15}
.btn-done{background:var(--brown);color:#fff;box-shadow:0 10px 22px rgba(122,82,48,.22)}
kbd{padding:2px 6px;border:1px solid rgba(0,0,0,.12);border-radius:4px;background:rgba(0,0,0,.05);
  font:9px/1.2 system-ui}
.btn-done kbd{border-color:rgba(255,255,255,.35);background:rgba(255,255,255,.16);color:#fff}
.pager{display:grid;grid-template-columns:1fr auto 1fr;gap:10px;margin-top:14px}
.pager button{padding:12px;border:1px solid var(--line);border-radius:12px;background:#fff;
  color:var(--sumi);font-size:13px}
.pager button:disabled{opacity:.35;cursor:not-allowed}
.pager .shuffle{color:var(--brown-deep)}
.keys{margin:12px 0 0;text-align:center;color:#a89c8c;font-size:10px;
  font-family:"Yu Gothic UI",system-ui,sans-serif}

/* ── 4択 ───────────────────────── */
.quiz-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.quiz-score{color:var(--muted);font-size:12px;font-family:"Yu Gothic UI",system-ui,sans-serif}
.quiz-card{text-align:center}
.quiz-card .term{font-size:44px}
.choices{display:grid;gap:9px;margin-top:26px;text-align:left}
.choice{display:grid;grid-template-columns:32px 1fr auto;align-items:center;gap:12px;padding:15px 16px;
  border:1px solid var(--line);border-radius:14px;background:#fff;color:var(--sumi);font-size:16px}
.choice:hover:not(:disabled){border-color:var(--brown);background:#faf4ec}
.choice:disabled{cursor:default}
.choice .mark{display:grid;place-items:center;width:28px;height:28px;border-radius:8px;
  background:var(--washi-deep);color:var(--muted);font-size:13px;font-weight:800}
.choice .judge-label{font-size:10px;font-weight:800;color:var(--muted)}
.choice.is-right{border-color:var(--midori);background:#eff7f0}
.choice.is-right .mark{background:var(--midori);color:#fff}
.choice.is-wrong{border-color:var(--aka);background:#fbf0ee}
.choice.is-wrong .mark{background:var(--aka);color:#fff}
.quiz-answer{margin-top:16px;padding:20px 22px;border:1px solid var(--line);border-radius:18px;
  background:var(--paper);box-shadow:var(--shadow)}
.quiz-verdict{margin:0 0 8px;font-size:16px;font-weight:800}
.quiz-verdict[data-ok="1"]{color:var(--midori)}
.quiz-verdict[data-ok="0"]{color:var(--aka)}
.quiz-detail{margin:0 0 16px;font-size:14px;line-height:1.9;color:var(--sumi-soft)}

/* ── 検索 ───────────────────────── */
.search-dialog{width:min(680px,calc(100% - 28px));height:min(680px,calc(100% - 40px));padding:0;
  border:1px solid var(--line);border-radius:18px;background:var(--paper);
  box-shadow:0 30px 70px rgba(43,39,35,.3)}
.search-dialog::backdrop{background:rgba(43,39,35,.42);backdrop-filter:blur(3px)}
.search-head{display:flex;align-items:center;gap:10px;padding:14px;border-bottom:1px solid var(--line)}
.search-head label{display:flex;align-items:center;gap:9px;flex:1;padding:9px 12px;
  border:1px solid var(--line);border-radius:11px;background:#fff}
.search-head input{width:100%;border:0;outline:0;background:transparent;font-size:15px}
.search-head button{width:38px;height:38px;border:0;background:transparent;font-size:20px}
.search-count{margin:0;padding:11px 20px;color:var(--muted);font-size:11px}
.search-list{height:calc(100% - 112px);padding:0 12px 16px;overflow-y:auto}
.search-item{display:grid;grid-template-columns:52px 1fr auto;gap:12px;width:100%;padding:13px 10px;
  border:0;border-top:1px solid var(--line);background:transparent;text-align:left}
.search-item:hover{background:var(--washi)}
.search-item .sn{color:var(--brown-deep);font-size:12px;font-family:"Yu Gothic UI",system-ui,sans-serif}
.search-item b{display:block;font-size:17px}
.search-item span{display:block;margin-top:3px;color:var(--muted);font-size:12px}
.search-item .st{align-self:center;color:#b3a795}

.toast{position:fixed;z-index:80;left:50%;bottom:26px;transform:translate(-50%,18px);
  padding:10px 18px;border-radius:999px;background:var(--sumi);color:#fff;font-size:12px;opacity:0;
  pointer-events:none;transition:.2s}
.toast.is-on{transform:translate(-50%,0);opacity:1}
@keyframes rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

@media (max-width:900px){
  .only-mobile{display:grid!important}
  .topbar{height:60px;padding:0 14px}
  .brand-mark{width:38px;height:38px;font-size:20px}
  .brand strong{font-size:15px} .brand small{display:none}
  .counter{display:none}
  .panel{z-index:60;top:0;width:min(320px,88vw);padding-top:14px;transform:translateX(-102%);
    transition:transform .22s ease}
  .panel.is-open{transform:none}
  .panel-head{display:flex!important;align-items:center;justify-content:space-between;margin-bottom:12px}
  .scrim{position:fixed;z-index:55;inset:0;background:rgba(43,39,35,.4)}
  .scrim.is-on{display:block}
  main{padding:78px 14px 44px}
  .card{padding:30px 20px;border-radius:18px}
  .term{font-size:40px} .quiz-card .term{font-size:34px}
  .term-small{font-size:25px}
  .meanings li{font-size:17px}
  .ex-ja{font-size:15px}
  .keys{display:none}
}
@media (max-width:420px){
  .term{font-size:34px}
  .card{padding:26px 16px}
  .choice{grid-template-columns:26px 1fr;font-size:15px}
  .choice .judge-label{grid-column:2}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
