/* ============ テーマの色と書体 ============ */
:root{
  color-scheme: dark;
  --page:#100F1E; --bg:#17152B; --panel:#221F3E; --panel-2:#2B2750; --line:#3B3668;
  --ink:#F1EAD6; --muted:#A39DC2; --accent:#E9B949; --accent-ink:#2A1E05;
  --bar:#E9B949; --bar-track:#2E2A55; --hp:#E2556B; --hp-track:#2E2A55;
  --quest-bg:#2E2A55; --quest-ink:#F4D98A; --quest-muted:#B7AEDB; --quest-line:#453F7A;
  --good:#4FD1B5; --unseen:#8F87E6; --ok:#4FD1B5; --danger:#F07178; --warn:#F4C66A;
  --gold:#E9B949; --scrim:rgba(5,4,15,.55);
  --sea:#7FCFD6; --sand:#F1DDA6; --grass:#8CCB78; --fog:#DDE7EC;
  --cele-bg:rgba(16,14,32,.95);
  --f-display:"DotGothic16","Zen Kaku Gothic New",sans-serif;
  --f-body:"Zen Kaku Gothic New","Hiragino Sans","Noto Sans JP",sans-serif;
  --f-num:"DotGothic16",ui-monospace,monospace;
  --r-cell:6px; --r-panel:10px;
}
:root[data-world="island"]{
  color-scheme: light;
  --page:#D4EEEC; --bg:#EAF7F5; --panel:#FFF9EC; --panel-2:#FFF2D6; --line:#CFE3DF;
  --ink:#143A40; --muted:#557C81; --accent:#1C93A3; --accent-ink:#FFFFFF;
  --bar:#F2A93B; --bar-track:#D6ECEA; --hp:#4E6E8A; --hp-track:#D6ECEA;
  --quest-bg:#1C93A3; --quest-ink:#FFFFFF; --quest-muted:#CDEFF1; --quest-line:#4DB0BD;
  --good:#3F8E4F; --unseen:#5E7F89; --ok:#2E8A4A; --danger:#C8453C; --warn:#B7700F;
  --gold:#D99A1E; --scrim:rgba(10,40,45,.35);
  --cele-bg:rgba(234,247,245,.96);
  --f-display:"Kiwi Maru","Zen Maru Gothic",serif;
  --f-body:"Zen Maru Gothic","Hiragino Maru Gothic ProN",sans-serif;
  --f-num:"Kiwi Maru",serif;
  --r-cell:14px; --r-panel:16px;
}
:root[data-world="garden"]{
  color-scheme: light;
  --page:#E9ECDD; --bg:#F6F5EC; --panel:#FFFFFF; --panel-2:#F0EEDF; --line:#E0DDC9;
  --ink:#2F3A2A; --muted:#6F7866; --accent:#5B8F3F; --accent-ink:#FFFFFF;
  --bar:#6FA8D6; --bar-track:#E4E8D8; --hp:#7FAED3; --hp-track:#E4E8D8;
  --quest-bg:#E4EDD7; --quest-ink:#35512A; --quest-muted:#5F7D52; --quest-line:#C8D8B4;
  --good:#E7849B; --unseen:#98805F; --ok:#4E8A3E; --danger:#C24F4F; --warn:#A8720E;
  --gold:#D9A441; --scrim:rgba(40,50,30,.3);
  --cele-bg:rgba(246,245,236,.96);
  --f-display:"Klee One","Zen Maru Gothic",serif;
  --f-body:"Zen Maru Gothic","Hiragino Maru Gothic ProN",sans-serif;
  --f-num:"Klee One",serif;
  --r-cell:12px; --r-panel:14px;
}
:root[data-world="space"]{
  color-scheme: dark;
  --page:#04071A; --bg:#080C24; --panel:#10163A; --panel-2:#151C49; --line:#262F66;
  --ink:#E6E9FF; --muted:#8C93C7; --accent:#6FE3F0; --accent-ink:#04212A;
  --bar:#9A86FF; --bar-track:#1C2356; --hp:#FF8A5C; --hp-track:#1C2356;
  --quest-bg:#121A45; --quest-ink:#6FE3F0; --quest-muted:#9AA2D6; --quest-line:#2A3577;
  --good:#FFE7A3; --unseen:#6D76B3; --ok:#6FE3F0; --danger:#FF7A8A; --warn:#FFD37A;
  --gold:#FFE7A3; --scrim:rgba(0,0,10,.55);
  --cele-bg:rgba(6,9,30,.96);
  --f-display:"Orbitron","Zen Kaku Gothic New",sans-serif;
  --f-body:"Zen Kaku Gothic New","Hiragino Sans",sans-serif;
  --f-num:"Orbitron",ui-monospace,monospace;
  --r-cell:10px; --r-panel:12px;
}

:root[data-world="aero"]{
  color-scheme: light;
  --page:#BFE3F8; --bg:#EEF8FF; --bg-img:linear-gradient(180deg,#D6F0FF 0%,#F2FAFF 42%,#E6F7E2 100%);
  --panel:#FFFFFF; --panel-2:#E4F3FC; --line:#BFDDF0;
  --ink:#0E3A57; --muted:#4F7891; --accent:#1BA1E2; --accent-ink:#FFFFFF;
  --bar:#7AC943; --bar-track:#D6EBF7; --hp:#5B6F86; --hp-track:#D6EBF7;
  --quest-bg:linear-gradient(180deg,#6FD0F7 0%,#2AA6E4 50%,#1690D2 51%,#2FB0EC 100%); --quest-ink:#FFFFFF; --quest-muted:#E2F6FF; --quest-line:#8FD8F7;
  --good:#7AC943; --unseen:#7F9BB0; --ok:#3C9D2E; --danger:#D9443A; --warn:#B9770E;
  --gold:#E0A400; --scrim:rgba(20,60,90,.3);
  --cele-bg:rgba(236,248,255,.94);
  --gloss:linear-gradient(180deg,rgba(255,255,255,.98) 0%,rgba(255,255,255,.7) 48%,rgba(228,244,255,.6) 52%,rgba(255,255,255,.85) 100%);
  --f-display:"M PLUS Rounded 1c","Hiragino Maru Gothic ProN",sans-serif;
  --f-body:"M PLUS Rounded 1c","Hiragino Maru Gothic ProN",sans-serif;
  --f-num:"M PLUS Rounded 1c",sans-serif;
  --r-cell:18px; --r-panel:18px;
}
:root[data-world="fantasy"]{
  color-scheme: light;
  --page:#E7DDC6; --bg:#F5EFE1; --bg-img:radial-gradient(ellipse at 50% 0%,#FCF7EA 0%,#F1E7D1 70%);
  --panel:#FFFCF4; --panel-2:#F1E8D4; --line:#DCCBA3;
  --ink:#2E3047; --muted:#776F5C; --accent:#B98B3E; --accent-ink:#FFFDF6;
  --bar:#D9B45A; --bar-track:#E8DCC0; --hp:#7B4BB5; --hp-track:#E8DCC0;
  --quest-bg:linear-gradient(135deg,#2E3550,#414D74); --quest-ink:#F3D98F; --quest-muted:#CFCADF; --quest-line:#C9A55A;
  --good:#C9922A; --unseen:#968B73; --ok:#3F7F4E; --danger:#B6413B; --warn:#A06A0C;
  --gold:#C9A55A; --scrim:rgba(30,30,50,.35);
  --cele-bg:rgba(245,239,225,.96);
  --f-display:"Shippori Mincho B1","Hiragino Mincho ProN",serif;
  --f-body:"Zen Kaku Gothic New","Hiragino Sans",sans-serif;
  --f-num:"Cinzel","Shippori Mincho B1",serif;
  --r-cell:8px; --r-panel:10px;
}
:root[data-world="mecha"]{
  color-scheme: dark;
  --page:#07090D; --bg:#0D1117;
  --bg-img:linear-gradient(rgba(61,123,255,.06) 1px,transparent 1px) 0 0/22px 22px,linear-gradient(90deg,rgba(61,123,255,.06) 1px,transparent 1px) 0 0/22px 22px,#0D1117;
  --panel:#151B24; --panel-2:#1C2430; --line:#2C3747;
  --ink:#E6EDF5; --muted:#8C99AC; --accent:#3D7BFF; --accent-ink:#FFFFFF;
  --bar:#F2C230; --bar-track:#1E2733; --hp:#E8343A; --hp-track:#1E2733;
  --quest-bg:#101A2B; --quest-ink:#F2C230; --quest-muted:#9BAAC0; --quest-line:#2F4B7A;
  --good:#5CF2A6; --unseen:#66738A; --ok:#5CF2A6; --danger:#FF5A5F; --warn:#F2C230;
  --gold:#F2C230; --scrim:rgba(0,0,0,.55);
  --cele-bg:rgba(8,11,16,.96);
  --cut:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px);
  --f-display:"Chakra Petch","Zen Kaku Gothic New",sans-serif;
  --f-body:"Zen Kaku Gothic New","Hiragino Sans",sans-serif;
  --f-num:"Chakra Petch",ui-monospace,monospace;
  --r-cell:3px; --r-panel:4px;
}

/* ============ 土台 ============ */
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;min-height:100dvh;background:var(--page);color:var(--ink);font-family:var(--f-body);font-size:15px;line-height:1.6;-webkit-tap-highlight-color:transparent;transition:background .4s}
body::before{content:"";position:fixed;top:0;bottom:0;left:50%;width:min(480px,100%);transform:translateX(-50%);background:var(--bg-img,var(--bg));z-index:-1;transition:background .4s}
body.no-scroll{overflow:hidden}
button{font:inherit;color:inherit;cursor:pointer;background:none;border:none;padding:0}
button:disabled{opacity:.6;cursor:default}
a{color:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
h1,h2,h3,p{margin:0}
#ambient{position:fixed;top:0;bottom:0;left:50%;width:min(480px,100%);transform:translateX(-50%);pointer-events:none;overflow:hidden;z-index:0}
#app{position:relative;z-index:1;max-width:480px;margin:0 auto;min-height:100dvh}
.muted{color:var(--muted)}
.hint{font-size:12px;color:var(--muted);line-height:1.6}
.warn{font-size:13px;color:var(--warn);line-height:1.6}
.err{font-size:13px;color:var(--danger);min-height:0}
.err:empty{display:none}
.empty{font-size:13px;color:var(--muted);padding:16px 0;text-align:center}

/* ============ 部品 ============ */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:42px;padding:0 16px;border-radius:12px;border:1px solid var(--line);background:var(--panel);font-size:14px;text-decoration:none;transition:transform .1s,background .2s}
.btn:active{transform:scale(.97)}
.btn svg{width:18px;height:18px}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:500}
.btn.danger{background:transparent;border-color:var(--danger);color:var(--danger)}
.btn.small{min-height:32px;padding:0 12px;font-size:12px;border-radius:9px}
.btn.block{width:100%}
.icon-btn{width:38px;height:38px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:var(--panel-2);flex:none}
.icon-btn svg{width:18px;height:18px}
.link{font-size:13px;color:var(--muted);text-decoration:underline;text-underline-offset:3px;padding:6px 4px}
.row-btns{display:flex;gap:8px;flex-wrap:wrap}
.input{width:100%;min-height:42px;border-radius:10px;border:1px solid var(--line);background:var(--bg);color:var(--ink);font:inherit;font-size:16px;padding:8px 12px}
.input.narrow{max-width:200px}
textarea.input{line-height:1.65;resize:vertical}
select.input{appearance:auto}
.input:focus{outline:2px solid var(--accent);outline-offset:0}
.field{display:flex;flex-direction:column;gap:6px;border:none;padding:0;margin:0}
.field > span{font-size:12px;color:var(--muted);letter-spacing:.04em}
.field-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:10px}
.seg{display:flex;gap:6px;flex-wrap:wrap}
.seg-btn{flex:1;min-height:40px;padding:0 12px;border-radius:10px;border:1px solid var(--line);font-size:13px;background:transparent}
.seg-btn.on{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.chips{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px;scrollbar-width:none}
.chips.wrap{flex-wrap:wrap;overflow:visible}
.chip{flex:none;display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;border:1px solid var(--line);font-size:12px;background:transparent}
.chip b{font-family:var(--f-num);font-weight:500;color:var(--muted)}
.chip.on{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.chip.on b{color:inherit}
.chip.zero{opacity:.5}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-panel);padding:16px}
.page-head{display:flex;flex-direction:column;gap:4px;padding:4px 2px 0}
.page-head h1{font-family:var(--f-display);font-weight:500;font-size:22px}
.page-head p{font-size:13px;color:var(--muted)}

/* ============ ロック ============ */
.lock{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:32px 24px calc(32px + env(safe-area-inset-bottom,0px));text-align:center}
.lock-card{display:flex;flex-direction:column;gap:14px;text-align:left;max-width:380px}
.lock-emblem{width:72px;height:72px}
.lock-emblem svg{width:100%;height:100%}
.lock-title{font-family:var(--f-display);font-weight:500;font-size:28px;letter-spacing:.06em}
.lock-text{font-size:14px;color:var(--muted);line-height:1.8}
.pin-dots{display:flex;gap:14px;margin:12px 0 4px}
.pin-dots i{width:14px;height:14px;border-radius:50%;border:2px solid var(--muted)}
.pin-dots i.on{background:var(--accent);border-color:var(--accent)}
.lock-err{min-height:20px}
.keypad{display:grid;grid-template-columns:repeat(3,76px);gap:14px;margin:8px 0}
.key{height:76px;border-radius:50%;background:var(--panel);border:1px solid var(--line);font-family:var(--f-num);font-size:26px;display:flex;align-items:center;justify-content:center;transition:transform .08s,background .15s}
.key:active{transform:scale(.93);background:var(--panel-2)}
.key svg{width:26px;height:26px}
.key.sub{background:transparent;border-color:transparent}
.key.ok{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-family:var(--f-body);font-size:16px;font-weight:500}

/* ============ 初期設定 ============ */
.setup{min-height:100dvh;display:flex;flex-direction:column;gap:16px;padding:24px 20px calc(24px + env(safe-area-inset-bottom,0px))}
.setup-prog{display:flex;gap:6px}
.setup-prog i{flex:1;height:4px;border-radius:2px;background:var(--line)}
.setup-prog i.on{background:var(--accent)}
.setup-body{flex:1;display:flex;flex-direction:column;gap:16px;padding-top:12px}
.setup-hero{width:84px;height:84px;margin:12px 0 4px}
.setup-hero svg{width:100%;height:100%}
.setup-title{font-family:var(--f-display);font-weight:500;font-size:26px;line-height:1.35;text-wrap:balance}
.setup-lead{font-size:14px;color:var(--muted);line-height:1.8}
.setup-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:12px}
.setup-list li{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-panel);padding:12px 14px;font-size:14px;line-height:1.75}
.setup-list b{font-weight:700}
.setup-nav{display:flex;justify-content:space-between;gap:12px}
.setup-nav .btn{min-width:120px}
.alias-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:8px}
.alias{display:flex;align-items:center;gap:6px}
.alias span{width:22px;text-align:right;font-family:var(--f-num);font-size:13px;color:var(--muted);flex:none}
.alias .input{min-height:38px;padding:6px 8px;font-size:15px}
.world-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.world-card{display:flex;align-items:center;gap:10px;padding:12px;border-radius:14px;border:1px solid var(--line);background:var(--panel);text-align:left}
.world-card.on{border:2px solid var(--accent);padding:11px}
.wc-emb{width:36px;height:36px;flex:none}
.wc-emb svg{width:100%;height:100%}
.wc-txt b{display:block;font-weight:500;font-size:15px}
.wc-txt small{display:block;font-size:11px;color:var(--muted);line-height:1.4}

/* ============ ヘッダー ============ */
.hud{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:12px;padding:calc(12px + env(safe-area-inset-top,0px)) 16px 10px;background:var(--bg);border-bottom:1px solid transparent}
.hud-me{flex:1;min-width:0;display:flex;align-items:center;gap:12px;text-align:left;border-radius:12px}
.emblem{width:42px;height:42px;flex:none;display:block}
.emblem svg{width:100%;height:100%;display:block}
.hud-main{flex:1;min-width:0;display:block}
.hud-main > span{display:block}
.hud-row{display:flex!important;align-items:baseline;gap:8px;white-space:nowrap}
.lv{font-family:var(--f-num);font-size:12px;color:var(--muted)}
.lv b{font-size:20px;color:var(--ink);font-weight:500;margin-left:2px}
.role{font-family:var(--f-display);font-size:15px}
.cls{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis}
.bar{height:7px;border-radius:4px;background:var(--bar-track);margin-top:5px;overflow:hidden}
.bar-fill{display:block;height:100%;border-radius:4px;background:var(--bar);transition:width .8s cubic-bezier(.3,1.3,.5,1)}
.hud-sub{margin-top:3px;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.streak{display:flex;flex-direction:column;align-items:center;font-size:10px;color:var(--muted);line-height:1.2;min-width:40px}
.streak svg{width:20px;height:20px;filter:grayscale(.8);opacity:.6;transition:filter .3s,opacity .3s}
.streak.lit svg{filter:none;opacity:1;animation:flicker 2.4s ease-in-out infinite}
.streak b{font-family:var(--f-num);font-size:15px;color:var(--ink);font-weight:500}

.main{display:flex;flex-direction:column;gap:14px;padding:6px 16px calc(96px + env(safe-area-inset-bottom,0px))}

/* ============ タブ ============ */
.tabbar{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:min(480px,100%);z-index:10;display:grid;grid-template-columns:repeat(4,1fr);padding:8px 8px calc(10px + env(safe-area-inset-bottom,0px));background:var(--panel);border-top:1px solid var(--line)}
.tab{display:flex;flex-direction:column;align-items:center;gap:2px;font-size:10px;color:var(--muted);padding:4px 0}
.tab svg{width:22px;height:22px}
.tab.on{color:var(--ink)}
.tab.on svg{color:var(--accent)}
:root[data-world="island"] .tabbar::before{content:"";position:absolute;left:0;right:0;top:-9px;height:9px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='9'%3E%3Cpath d='M0 9 Q10 0 20 4.5 T40 4.5 V9Z' fill='%23FFF9EC'/%3E%3C/svg%3E") repeat-x;animation:wave 5s linear infinite}

/* ============ バナー ============ */
.banner{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--r-panel);border:1px solid var(--warn);background:var(--panel)}
.banner > svg{width:24px;height:24px;color:var(--warn);flex:none}
.banner-txt{flex:1;display:flex;flex-direction:column;line-height:1.4}
.banner-txt b{font-size:13px;font-weight:500}
.banner-txt span{font-size:11px;color:var(--muted)}

/* ============ ボス ============ */
.boss{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--r-panel);background:var(--panel);border:1px solid var(--line)}
.boss-icon{width:44px;height:44px;flex:none;animation:bob 3.6s ease-in-out infinite}
.boss-icon svg{width:100%;height:100%}
.boss-main{flex:1;min-width:0}
.boss-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.boss-name{font-family:var(--f-display);font-size:15px}
.boss-days{font-size:11px;color:var(--muted);white-space:nowrap}
.boss-days b{font-family:var(--f-num);font-size:15px;color:var(--ink);font-weight:500;margin:0 2px}
.hp{height:9px;border-radius:5px;background:var(--hp-track);margin:6px 0 4px;overflow:hidden}
.hp-fill{height:100%;background:var(--hp);border-radius:5px;transition:width 1s ease}
.boss-sub{font-size:11px;color:var(--muted)}
.boss-sub b{color:var(--ink);font-family:var(--f-num);font-weight:500}
.boss.down{border-color:var(--gold)}
.boss.down .boss-icon{animation:none;filter:grayscale(1);opacity:.5}

/* ============ 日替わりの課題 ============ */
.quest{padding:12px 14px;border-radius:var(--r-panel);background:var(--quest-bg);color:var(--quest-ink);border:1px solid var(--quest-line)}
.quest-top{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:var(--quest-muted);letter-spacing:.06em}
.quest-prog{font-family:var(--f-num);font-variant-numeric:tabular-nums}
.quest-prog b{font-size:15px;color:var(--quest-ink);font-weight:500}
.quest-title{margin:3px 0 8px;font-family:var(--f-display);font-size:16px}
.quest-foot{display:flex;justify-content:space-between;align-items:center;gap:8px}
.quest-hint{font-size:11px;color:var(--quest-muted)}
.quest-hint b{color:var(--quest-ink);font-weight:500}
.pips{display:flex;gap:4px;flex:none}
.pips i{width:16px;height:5px;border-radius:3px;background:var(--quest-line);transition:background .3s}
.pips i.on{background:var(--quest-ink)}
.quest.done{border-color:var(--gold)}

/* ============ 盤面（児童のマス） ============ */
.board-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px}
.board-head h2{font-family:var(--f-display);font-weight:500;font-size:17px;display:flex;align-items:center;gap:6px}
.board-head > span{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.crown svg{width:20px;height:20px;display:block;animation:bob 2.8s ease-in-out infinite}
.board-note{margin-top:10px;font-size:11px;color:var(--muted);display:flex;align-items:center;flex-wrap:wrap;gap:2px}
.board-note .sug-dot{position:static;margin-right:4px}
.note-ok{display:inline-flex;width:14px;height:14px;color:var(--ok);margin:0 2px 0 6px}
.note-ok svg{width:14px;height:14px}
.grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.grid.dense{grid-template-columns:repeat(5,minmax(0,1fr));gap:6px}
.cell{position:relative;height:100px;border-radius:var(--r-cell);border:1px solid var(--line);background:var(--panel);display:flex;flex-direction:column;align-items:center;justify-content:flex-end;overflow:hidden;transition:transform .12s}
.grid.dense .cell{height:88px}
.grid.dense .cnt-row{gap:3px;font-size:9px}
.cell:active{transform:scale(.95)}
.cell .no{position:absolute;top:5px;left:7px;font-family:var(--f-num);font-size:11px;color:var(--muted);display:flex;align-items:center;gap:3px;z-index:2}
.sug-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 30%,transparent);animation:pulseDot 2s ease-in-out infinite}
.c-badge{position:absolute;top:4px;right:5px;width:16px;height:16px;z-index:2}
.c-badge svg{width:100%;height:100%}
.ok-b{color:var(--ok)}
.gold-b{color:var(--gold)}
.cell .art{flex:1;width:100%;display:flex;align-items:center;justify-content:center;position:relative;z-index:1}
.cell .art svg{width:46px;height:46px;overflow:visible}
.cell .al{font-size:11px;padding-bottom:6px;color:var(--ink);letter-spacing:.04em;position:relative;z-index:1;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cell:not(.unseen) .al{padding-bottom:2px}
.cnt-row{position:relative;z-index:1;display:flex;gap:6px;align-items:center;padding-bottom:6px;font-size:10px;line-height:1.1;font-variant-numeric:tabular-nums}
.c-rec{color:var(--muted)}
.c-good{color:var(--gold);font-weight:700}
.c-good.zero{color:var(--muted);opacity:.55;font-weight:400}
.note-good{color:var(--gold);font-weight:700;margin:0 2px}
.demo-strip{position:relative;z-index:6;margin:0;padding:6px 12px calc(6px);font-size:11px;text-align:center;background:var(--accent);color:var(--accent-ink)}
.cell.unseen .al{color:var(--unseen)}
.cell.gold{border:2px solid var(--gold)}
.cell.just{animation:cellPulse .6s ease}

/* 冒険 */
.cell.w-rpg{background:linear-gradient(180deg,var(--panel-2),var(--panel));box-shadow:inset 0 0 0 3px var(--panel),inset 0 0 0 4px var(--line)}
.cell.w-rpg .al{font-family:var(--f-display);font-size:13px}
.cell.w-rpg.gold{background:linear-gradient(180deg,#4A3D1C,#2B2340);box-shadow:inset 0 0 0 3px #2B2340,inset 0 0 0 4px var(--gold)}
.cell.w-rpg.unseen{background:repeating-linear-gradient(45deg,var(--panel) 0 6px,var(--bg) 6px 12px);box-shadow:inset 0 0 0 3px var(--bg),inset 0 0 0 4px var(--unseen)}
.gems{display:flex;gap:6px}
.gems i{width:8px;height:8px;transform:rotate(45deg);border:1px solid var(--line)}
.gems i.on{background:var(--good);border-color:var(--good)}
.q-mark{font-family:var(--f-display);font-size:26px;color:var(--unseen)}
/* 島 */
.cell.w-island{border:none;box-shadow:inset 0 -3px 0 rgba(20,58,64,.08)}
.cell.w-island.s1{background:var(--sand)}
.cell.w-island.s2{background:linear-gradient(180deg,var(--grass) 0 62%,var(--sand) 62%)}
.cell.w-island.s3{background:linear-gradient(180deg,#76BE6B 0 62%,var(--sand) 62%)}
.cell.w-island.gold{border:2px solid var(--gold)}
.cell.w-island .al{color:#143A40}
.cell.w-island .no{color:rgba(20,58,64,.6)}
.cell.w-island.unseen{background:var(--sea)}
.cell.w-island.unseen .al,.cell.w-island.unseen .no{color:#5E7F89}
.fog{position:absolute;inset:0;z-index:1;background:
  radial-gradient(ellipse 40px 18px at 20% 35%,rgba(255,255,255,.95),transparent 70%),
  radial-gradient(ellipse 50px 20px at 75% 55%,rgba(255,255,255,.9),transparent 70%),
  radial-gradient(ellipse 40px 16px at 35% 80%,rgba(255,255,255,.85),transparent 70%),
  var(--fog);background-size:120px 100%;animation:drift 9s linear infinite}
/* 庭 */
.cell.w-garden{background:linear-gradient(180deg,var(--panel) 0 70%,#EFE6D6 70%)}
.cell.w-garden.unseen{background:linear-gradient(180deg,var(--panel-2) 0 70%,#E6D9C2 70%);border-style:dashed;border-color:#CDBB99}
.cell.w-garden.gold{background:linear-gradient(180deg,#FFF8E6 0 70%,#EFE6D6 70%)}
/* 宇宙 */
.cell.w-space{background:radial-gradient(circle at 50% 42%,rgba(154,134,255,.16),transparent 60%),var(--panel)}
.cell.w-space.unseen{background:var(--bg);border-style:dashed}
.cell.w-space.gold{background:radial-gradient(circle at 50% 42%,rgba(255,231,163,.22),transparent 65%),var(--panel)}
.sway{transform-box:fill-box;transform-origin:50% 100%;animation:sway 4.5s ease-in-out infinite alternate}
.twk{animation:twinkle 3.2s ease-in-out infinite}

/* ============ 所見の材料 ============ */
.ready-box{border-radius:var(--r-panel);background:var(--panel-2);padding:10px 12px}
.ready-box.is-ready{outline:1px solid var(--ok)}
.ready-title{font-size:12px;color:var(--muted);margin-bottom:6px}
.is-ready .ready-title{color:var(--ok)}
.ready-list{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.ready-list li{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--muted)}
.ready-list li i{width:12px;height:12px;border-radius:50%;border:1.5px solid var(--line);flex:none}
.ready-list li svg{width:14px;height:14px;color:var(--ok);flex:none}
.ready-list li b{margin-left:auto;font-family:var(--f-num);font-weight:500;font-size:12px;color:var(--ink)}
.ready-list li.ok span{color:var(--ink)}

/* ============ 記録シート ============ */
.sheet-wrap{position:fixed;inset:0;z-index:40;display:flex;flex-direction:column;justify-content:flex-end;align-items:center}
.scrim{position:absolute;inset:0;background:var(--scrim);animation:fade .2s ease}
.sheet{position:relative;width:min(480px,100%);max-height:92dvh;overflow-y:auto;background:var(--panel);border-radius:22px 22px 0 0;padding:10px 18px calc(18px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:10px;animation:up .26s cubic-bezier(.2,.9,.3,1)}
.grab{width:38px;height:4px;border-radius:2px;background:var(--line);margin:0 auto 2px;flex:none}
.sheet-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.who{display:flex;align-items:center;gap:10px;min-width:0}
.who-no{width:42px;height:42px;border-radius:var(--r-cell);background:var(--panel-2);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-family:var(--f-num);font-size:18px;flex:none}
.who-name{font-family:var(--f-display);font-size:17px;line-height:1.3}
.who-sub{font-size:11px;color:var(--muted)}
.head-btns{display:flex;align-items:center;gap:6px;flex:none}
.days{display:flex;gap:6px}
.day{flex:1;min-height:36px;border-radius:10px;border:1px solid var(--line);font-size:13px}
.day.on{background:var(--panel-2);border-color:var(--ink);font-weight:500}
.field-label{font-size:11px;color:var(--muted);letter-spacing:.06em;margin-top:2px}
.tags{display:flex;flex-wrap:wrap;gap:7px}
.tag{min-height:38px;padding:0 14px;border-radius:999px;border:1px solid var(--line);font-size:14px;transition:background .12s,border-color .12s,transform .1s}
.tag:active{transform:scale(.95)}
.tag[aria-pressed="true"]{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}
.tag.quiet{border-style:dashed}
.tag.quiet[aria-pressed="true"]{background:var(--muted);border-color:var(--muted);color:var(--panel);border-style:solid}
.save{min-height:52px;border-radius:14px;background:var(--accent);color:var(--accent-ink);font-family:var(--f-display);font-size:17px;letter-spacing:.06em;transition:transform .1s}
.save:active{transform:scale(.98)}

/* ============ 重ねる画面（カルテ・所見） ============ */
.panel{position:fixed;top:0;bottom:0;left:50%;transform:translateX(-50%);width:min(480px,100%);z-index:30;background:var(--bg);display:flex;flex-direction:column;animation:slideIn .24s cubic-bezier(.2,.9,.3,1)}
.panel-head{display:flex;align-items:center;gap:10px;padding:calc(12px + env(safe-area-inset-top,0px)) 14px 10px;border-bottom:1px solid var(--line)}
.panel-title{flex:1;min-width:0}
.panel-kicker{font-size:11px;color:var(--muted)}
.panel-head h2{font-family:var(--f-display);font-weight:500;font-size:19px;line-height:1.3}
.panel-body{flex:1;overflow-y:auto;padding:14px 16px 24px;display:flex;flex-direction:column;gap:14px;overscroll-behavior:contain}
.panel-foot{padding:10px 16px calc(12px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--line);display:flex}
.panel-foot .save{flex:1}
.rec-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}
.rec{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-panel);padding:10px 12px;display:flex;flex-direction:column;gap:4px}
.rec.rare{border-color:var(--gold)}
.rec-who{align-self:flex-start;font-family:var(--f-display);font-size:14px;text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--line)}
.rec-meta{display:flex;flex-wrap:wrap;align-items:center;gap:5px}
.rec-date{font-size:12px;color:var(--muted);margin-right:2px;font-variant-numeric:tabular-nums}
.mini-tag{font-size:11px;padding:1px 8px;border-radius:999px;background:var(--panel-2);color:var(--ink)}
.mini-tag.quiet{background:transparent;border:1px dashed var(--muted);color:var(--muted)}
.mini-tag.rare-t{display:inline-flex;padding:2px 5px;color:var(--gold)}
.mini-tag.rare-t svg{width:11px;height:11px}
.rec-text{font-size:14px;line-height:1.7;white-space:pre-wrap;word-break:break-word}
.rec-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap}
.warn-text{font-size:12px;color:var(--danger);margin-right:auto}

.sec{display:flex;flex-direction:column;gap:10px}
.sec h3{font-family:var(--f-display);font-weight:500;font-size:16px;display:flex;align-items:center;gap:8px}
.step{width:22px;height:22px;border-radius:50%;background:var(--accent);color:var(--accent-ink);font-family:var(--f-num);font-size:12px;display:inline-flex;align-items:center;justify-content:center}
.src-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}
.src{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;border-radius:10px;background:var(--panel);border:1px solid var(--line);cursor:pointer}
.src input{width:20px;height:20px;margin:2px 0 0;accent-color:var(--accent);flex:none}
.src > span{display:flex;flex-direction:column;gap:2px;min-width:0}
.src-meta{font-size:11px;color:var(--muted)}
.src-text{font-size:13px;line-height:1.6;word-break:break-word}
.prompt{font-size:13px;line-height:1.6}
.count-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:12px;color:var(--muted);flex-wrap:wrap}
.cnt{font-family:var(--f-num);font-size:18px;font-weight:500;color:var(--ink);margin-right:2px}
.cnt.ok{color:var(--ok)}
.cnt.under{color:var(--warn)}
.cnt.over{color:var(--danger)}
.ng{font-size:12px;color:var(--warn)}

/* ============ 記録帳（カレンダー） ============ */
.streak-card{display:flex;align-items:center;gap:16px}
.streak-card p{font-size:13px;line-height:1.7}
.streak-big{display:flex;flex-direction:column;align-items:center;min-width:72px;line-height:1.1}
.streak-big svg{width:30px;height:30px;filter:grayscale(.8);opacity:.6}
.streak-big.lit svg{filter:none;opacity:1;animation:flicker 2.4s ease-in-out infinite}
.streak-big b{font-family:var(--f-num);font-size:32px;font-weight:500}
.streak-big span{font-size:11px;color:var(--muted)}
.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.cal-head h2{font-family:var(--f-display);font-weight:500;font-size:17px}
.cal-wd,.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.cal-wd span{text-align:center;font-size:11px;color:var(--muted);padding-bottom:4px}
.cal-cell{aspect-ratio:1/1.1;max-width:100%;border-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding-top:3px;gap:1px;border:1px solid transparent}
.cal-cell.blank{visibility:hidden}
.cal-d{font-size:11px;font-variant-numeric:tabular-nums;color:var(--ink)}
.cal-cell.off .cal-d{color:var(--muted)}
.cal-cell.future{opacity:.45}
.cal-cell.today{border-color:var(--line);background:var(--panel-2)}
.cal-cell.sel{border-color:var(--accent)}
.cal-mark{flex:1;display:flex;align-items:center;justify-content:center}
.cal-sum{margin-top:8px;font-size:12px;color:var(--muted);text-align:right}
.cal-sum b{font-family:var(--f-num);color:var(--ink);font-weight:500}
.day-list{display:flex;flex-direction:column;gap:10px}
.day-list h2{font-family:var(--f-display);font-weight:500;font-size:16px}
.day-list h2 span{font-size:12px;color:var(--muted);font-family:var(--f-body)}

/* ============ 所見一覧 ============ */
.stat-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-panel);padding:10px;text-align:center;display:flex;flex-direction:column}
.stat b{font-family:var(--f-num);font-size:24px;font-weight:500;line-height:1.2}
.stat span{font-size:11px;color:var(--muted)}
.list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}
.row{width:100%;display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--r-panel);background:var(--panel);border:1px solid var(--line);text-align:left}
.row-no{width:30px;height:30px;border-radius:var(--r-cell);background:var(--panel-2);display:flex;align-items:center;justify-content:center;font-family:var(--f-num);font-size:13px;flex:none}
.row-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.row-name{font-size:14px}
.meter{height:5px;border-radius:3px;background:var(--panel-2);overflow:hidden}
.meter i{display:block;height:100%;background:var(--accent);border-radius:3px}
.meter.full i{background:var(--ok)}
.row-sub{font-size:11px;color:var(--muted)}
.badge{font-size:11px;padding:3px 10px;border-radius:999px;flex:none;border:1px solid var(--line);color:var(--muted)}
.badge.draft{border-color:var(--warn);color:var(--warn)}
.badge.done{background:var(--ok);border-color:var(--ok);color:var(--bg)}

/* ============ 設定 ============ */
.set{display:flex;flex-direction:column;gap:12px}
.set h2{font-family:var(--f-display);font-weight:500;font-size:16px}
.set > p{font-size:13px}
.term-row{display:grid;grid-template-columns:52px 1fr auto 1fr;align-items:center;gap:6px}
.term-row .input{font-size:13px;padding:6px 6px;min-height:38px}
.term-name{font-size:13px}
.roster{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px;max-height:340px;overflow-y:auto}
.roster li{display:flex;align-items:center;gap:8px}
.roster .input{min-height:38px;padding:6px 10px;font-size:15px}
.check{display:flex;align-items:center;gap:4px;font-size:12px;color:var(--muted);flex:none}
.check input{width:18px;height:18px;accent-color:var(--accent)}
.more{border-top:1px solid var(--line);padding-top:10px}
.more summary{font-size:13px;cursor:pointer;color:var(--muted)}
.more[open]{display:flex;flex-direction:column;gap:10px}
.danger-zone{border-color:color-mix(in srgb,var(--danger) 50%,var(--line))}
.about{font-size:11px;color:var(--muted);text-align:center;padding:8px 0}

/* ============ 演出 ============ */
#cele{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;background:var(--cele-bg);animation:fade .2s ease;cursor:pointer}
#cele[hidden]{display:none}
#cele.out{animation:fadeOut .26s ease forwards}
.cele-in{width:min(480px,100%);display:flex;flex-direction:column;align-items:center;gap:10px;padding:24px;text-align:center;position:relative}
.stage{width:150px;height:150px;position:relative;display:flex;align-items:center;justify-content:center}
.cele-title{font-family:var(--f-display);font-size:20px;line-height:1.4;animation:rise .4s .35s both;text-wrap:balance}
.cele-chips{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;animation:rise .4s .45s both}
.cele-chips span{font-size:12px;padding:3px 10px;border-radius:999px;background:var(--panel-2);border:1px solid var(--line)}
.cele-gain{font-family:var(--f-num);font-size:22px;color:var(--accent);animation:rise .4s .55s both}
:root[data-world="island"] .cele-gain{color:#B96F0C}
.cele-extra{font-size:13px;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:4px 14px;animation:rise .4s both}
.cele-skip{margin-top:18px;font-size:11px;color:var(--muted)}
.rare-badge{font-family:var(--f-display);font-size:14px;letter-spacing:.2em;color:var(--gold);animation:rise .3s both,glow 1.2s .3s ease-in-out infinite alternate}
.spark{position:absolute;left:50%;top:50%;width:6px;height:6px;margin:-3px;border-radius:50%;background:var(--gold);animation:spark .9s ease-out both;transform:rotate(var(--a)) translateY(0)}
#cele.lite .cele-title,#cele.lite .cele-chips,#cele.lite .cele-gain,#cele.lite .cele-extra{animation-duration:.2s;animation-delay:0s}

.c-card{width:96px;height:128px;border-radius:8px;background:linear-gradient(180deg,#3A3470,#262150);box-shadow:inset 0 0 0 3px #262150,inset 0 0 0 4px var(--accent);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;overflow:hidden;position:relative;animation:flipIn .6s cubic-bezier(.2,.9,.3,1.1) both}
.c-card.holo{background:linear-gradient(135deg,#4A3D8F,#2B6A7A 50%,#6A4A8F)}
.c-no{font-family:var(--f-num);font-size:12px;color:#A39DC2}
.c-al{font-family:var(--f-display);font-size:24px;color:#F1EAD6}
.c-shine{position:absolute;top:0;bottom:0;left:0;width:40%;background:linear-gradient(90deg,transparent,rgba(255,236,170,.55),transparent);animation:shine .8s .45s ease both}
.i-tile{width:118px;height:118px;border-radius:24px;background:linear-gradient(180deg,var(--grass) 0 62%,var(--sand) 62%);position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center}
.i-art{width:88px;height:88px}
.fog.clearing{animation:fogOut .7s .15s ease forwards}
.i-flag{position:absolute;right:16px;top:12px;width:30px;height:40px;z-index:2;animation:flagUp .45s .7s cubic-bezier(.2,.9,.3,1.3) both}
.i-chest{position:absolute;left:12px;bottom:10px;width:34px;height:28px;z-index:2;animation:pop .45s .9s cubic-bezier(.2,.9,.3,1.4) both}
.g-plant{width:124px;height:124px;overflow:visible}
.g-plant .grow{transform-box:fill-box;transform-origin:50% 100%;animation:grow .6s .1s cubic-bezier(.2,.9,.3,1) both}
.g-plant .pop{transform-box:fill-box;transform-origin:50% 50%;animation:pop .45s .6s cubic-bezier(.2,.9,.3,1.4) both}
.g-clover{position:absolute;right:6px;bottom:18px;width:34px;height:34px;animation:pop .45s .9s cubic-bezier(.2,.9,.3,1.4) both}
.drop{position:absolute;top:0;width:7px;height:10px;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;background:#6FA8D6;animation:drop .7s ease-in both}
.s-svg{width:116px;height:116px;overflow:visible}
.s-star{transform-box:fill-box;transform-origin:50% 50%;animation:ignite .6s .1s cubic-bezier(.2,.9,.3,1.2) both}
.s-ring{position:absolute;width:124px;height:124px;border-radius:50%;border:1.5px solid var(--accent);animation:ring 1s .3s ease-out both}
.s-ring.b{border-color:#9A86FF;animation-delay:.5s}
.meteor{position:absolute;top:-10px;right:-30px;width:90px;height:2px;background:linear-gradient(90deg,transparent,#fff);border-radius:2px;transform:rotate(-35deg);animation:meteor .9s .2s ease-out both}

/* ============ 背景の動き ============ */
.motes i{position:absolute;width:3px;height:3px;border-radius:50%;background:#E9B949;opacity:0;animation:mote 9s linear infinite}
.starfield i{position:absolute;border-radius:50%;background:#fff;opacity:.4;animation:twinkle 4s ease-in-out infinite}
.petalfall i{position:absolute;top:-20px;width:9px;height:7px;border-radius:70% 0 70% 0;background:#F2B3C2;opacity:.7;animation:petal 18s linear infinite}
.waves{position:absolute;left:0;right:0;bottom:0;height:140px;background:linear-gradient(0deg,rgba(127,207,214,.18),transparent)}

/* ============ v0.2：イベント・ふりかえり・景色 ============ */
.banner.event{border-color:var(--accent)}
.banner.event > svg{color:var(--accent)}
.boss.urgent{border-color:var(--hp)}
.boss.urgent .hp-fill{animation:hpPulse 1.4s ease-in-out infinite}
.boss.urgent .boss-icon{animation:shake 2.4s ease-in-out infinite}
.review,.memory{background:var(--panel);border:1px solid var(--gold);border-radius:var(--r-panel);padding:14px 16px;display:flex;flex-direction:column;gap:8px}
.review-kicker{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--gold);letter-spacing:.08em}
.review-kicker svg{width:18px;height:18px}
.review-text{font-family:var(--f-display);font-size:17px;line-height:1.7}
.review-who{font-size:12px;color:var(--muted)}
.sheet-wrap.center{justify-content:center;padding:16px}
.memory{position:relative;width:min(440px,100%);animation:cardIn .35s cubic-bezier(.2,.9,.3,1.2)}
.memory-btn{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--r-panel);background:var(--panel);border:1px dashed var(--gold);text-align:left}
.memory-btn > svg{width:24px;height:24px;color:var(--gold);flex:none}
.memory-btn > svg:last-child{width:18px;height:18px;color:var(--muted)}
.memory-btn span{flex:1;display:flex;flex-direction:column}
.memory-btn b{font-weight:500;font-size:14px}
.memory-btn small{font-size:11px;color:var(--muted)}
.rec.starred{border-color:var(--gold)}
.star-mark{font-size:11px;color:var(--gold)}
.src.starred{border-color:var(--gold)}
.cal-cell.event{background:color-mix(in srgb,var(--accent) 12%,transparent)}

.scene{height:60px;border-radius:var(--r-panel);overflow:hidden;margin-bottom:12px;border:1px solid var(--line);cursor:pointer}
.scene svg{width:100%;height:100%;display:block}
.scene.big{height:auto;aspect-ratio:320/60;margin:0;cursor:default}
.scene-flag{transform-box:fill-box;transform-origin:0 50%;animation:flag 2.2s ease-in-out infinite alternate}
.scene-glow{animation:twinkle 2.6s ease-in-out infinite}
.scene-wave{animation:waveX 6s linear infinite}
.scene-bob{animation:bob 3s ease-in-out infinite}
.scene-spin{transform-box:fill-box;transform-origin:50% 50%;animation:spin 12s linear infinite}
.scene-flutter{animation:flutter 4s ease-in-out infinite}
.board-right{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.rush-btn{color:var(--accent);border-color:var(--accent);gap:4px}
.rush-btn svg{width:14px;height:14px}

/* ============ ラッシュ ============ */
.panel-kicker svg{width:12px;height:12px;vertical-align:-1px;color:var(--accent)}
.rush-prog{display:flex;gap:4px;margin-top:4px}
.rush-prog i{flex:1;height:4px;border-radius:2px;background:var(--line)}
.rush-prog i.on{background:var(--accent)}
.rush-prog i.now{background:var(--muted)}
.rush-timer{font-family:var(--f-num);font-size:18px;font-variant-numeric:tabular-nums;color:var(--muted);min-width:52px;text-align:right}
.rush-card{display:flex;align-items:center;gap:14px;padding:14px;border-radius:var(--r-panel);background:var(--panel);border:1px solid var(--line);animation:cardIn .3s cubic-bezier(.2,.9,.3,1.2)}
.rush-no{width:60px;height:60px;border-radius:var(--r-cell);background:var(--panel-2);display:flex;align-items:center;justify-content:center;font-family:var(--f-num);font-size:26px;flex:none}
.rush-who{flex:1;min-width:0}
.rush-who .who-name{font-size:22px}
.combo{font-family:var(--f-num);font-size:13px;color:var(--accent-ink);background:var(--accent);padding:4px 10px;border-radius:999px;animation:pop .3s cubic-bezier(.2,.9,.3,1.4)}
.rush-last{font-size:13px;color:var(--muted);line-height:1.6}
.rush-fx{align-self:center;font-family:var(--f-num);font-size:16px;color:var(--accent);animation:fxUp 1.2s ease both}
.rush-foot{gap:10px}
.rush-foot .btn{min-height:52px;min-width:96px}
.rush-end{align-items:center;justify-content:center;text-align:center;gap:18px}
.rush-emb{width:72px;height:72px;animation:pop .5s cubic-bezier(.2,.9,.3,1.4)}
.rush-emb svg{width:100%;height:100%}
.rush-title{font-family:var(--f-display);font-weight:500;font-size:26px}
.rush-end .stat-row{width:100%}
.rush-extras{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px;width:100%}
.rush-extras li{font-size:13px;background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:5px 14px}
.rush-end .save{width:100%}

/* ============ 先生の情報 ============ */
.pf-top{display:flex;align-items:center;gap:16px}
.pf-emb{width:72px;height:72px;flex:none}
.pf-emb svg{width:100%;height:100%}
.pf-main{flex:1;min-width:0}
.pf-main .lv b{font-size:30px}
.unlocks{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px}
.unlocks li{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted);padding:6px 10px;border-radius:8px;background:var(--panel)}
.unlocks li span{font-family:var(--f-num);font-size:12px;min-width:44px}
.unlocks li.ok{color:var(--ink)}
.unlocks li.ok span{color:var(--accent)}
.ach-grid{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ach{display:flex;align-items:center;gap:8px;padding:10px;border-radius:var(--r-panel);background:var(--panel);border:1px solid var(--line);opacity:.6}
.ach.got{opacity:1;border-color:var(--gold)}
.ach-ic{width:26px;height:26px;flex:none;color:var(--muted)}
.ach-ic svg{width:100%;height:100%}
.ach-txt{display:flex;flex-direction:column;min-width:0}
.ach-txt b{font-size:13px;font-weight:500}
.ach-txt small{font-size:10px;color:var(--muted);line-height:1.4}

/* ============ 設定：タグ・行事・年度 ============ */
.tag-edit{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}
.tag-edit li{display:flex;align-items:center;gap:6px}
.tag-edit .input{min-height:38px;padding:6px 10px;font-size:15px}
.tag-edit .input[readonly]{color:var(--muted);background:transparent}
.te-lock{width:16px;height:16px;flex:none;color:var(--muted)}
.te-lock svg{width:100%;height:100%}
.icon-btn.sm{width:32px;height:32px}
.icon-btn.sm svg{width:16px;height:16px}
.icon-btn:disabled{opacity:.3}
.inline-add{display:flex;gap:8px}
.ev-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}
.ev-list li{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:10px;background:var(--panel-2);flex-wrap:wrap}
.ev-name{font-size:14px}
.ev-date{font-size:12px;color:var(--muted);margin-right:auto;font-variant-numeric:tabular-nums}
.ev-add{grid-template-columns:1.3fr 1fr 1fr}
.ev-add .input{font-size:14px;padding:6px 8px}
.sub-h{font-family:var(--f-display);font-weight:500;font-size:14px;margin-top:4px}
@media (max-width:380px){.ev-add{grid-template-columns:1fr 1fr}.ev-add .field:first-child{grid-column:1/-1}}

/* ============ v0.3：エアロ（つやのあるガラスと泡） ============ */
:root[data-world="aero"] :is(.boss,.card,.review,.memory-btn,.rec,.row,.stat,.ready-box,.src,.unlocks li,.ach,.rush-card,.world-card,.banner){background:var(--gloss);border-color:rgba(255,255,255,.95);box-shadow:0 6px 18px rgba(30,120,180,.16),inset 0 0 0 1px rgba(150,205,240,.55);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
:root[data-world="aero"] :is(.btn.primary,.save,.tag[aria-pressed="true"],.chip.on,.seg-btn.on,.step,.combo){background:linear-gradient(180deg,#8EDCFF 0%,#2AABEA 49%,#1490D2 51%,#3BB7F0 100%);border-color:#1490D2;color:#fff;text-shadow:0 1px 1px rgba(0,60,100,.35);box-shadow:inset 0 1px 0 rgba(255,255,255,.7),0 3px 8px rgba(20,140,210,.3)}
:root[data-world="aero"] .bar-fill{background:linear-gradient(180deg,#C6F29A 0%,#7AC943 50%,#5BB02A 51%,#86D451 100%)}
:root[data-world="aero"] .tabbar{background:linear-gradient(180deg,rgba(255,255,255,.95),rgba(220,240,252,.9));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
:root[data-world="aero"] .hud{background:transparent;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
:root[data-world="aero"] .quest{box-shadow:inset 0 1px 0 rgba(255,255,255,.6),0 6px 16px rgba(20,140,210,.25)}
.cell.w-aero{background:var(--gloss);border:1px solid rgba(255,255,255,.95);box-shadow:0 4px 12px rgba(30,120,180,.15),inset 0 0 0 1px rgba(150,205,240,.5)}
.cell.w-aero.unseen{background:linear-gradient(180deg,#F4F8FB,#E3ECF2);box-shadow:inset 0 0 0 1px #D3DFE8}
.cell.w-aero.gold{border:2px solid transparent;background:var(--gloss) padding-box,linear-gradient(135deg,#FF8A8A,#FFD15A,#8EDB5A,#5CC8F5,#9C8CFF) border-box}
.cell.w-aero .al{font-weight:800}
.float{animation:float 3.6s ease-in-out infinite}
.bubbles i{position:absolute;bottom:-40px;border-radius:50%;background:radial-gradient(circle at 32% 28%,rgba(255,255,255,.95) 0 12%,rgba(190,235,255,.35) 30%,rgba(120,200,240,.18) 70%,rgba(255,255,255,.5) 100%);border:1px solid rgba(255,255,255,.7);animation:bubbleUp 16s linear infinite}
.aero-glare{position:absolute;top:-120px;right:-80px;width:280px;height:280px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.75),rgba(255,255,255,0) 70%)}
.a-orb{width:118px;height:118px;overflow:visible;animation:pop .5s .1s cubic-bezier(.2,.9,.3,1.4) both}
.a-ring{position:absolute;width:120px;height:120px;border-radius:50%;border:2px solid #8EDCFF;animation:ring 1s .25s ease-out both}
.a-ring.b{border-color:#C6F29A;animation-delay:.45s}
.a-bub{position:absolute;bottom:0;border-radius:50%;background:radial-gradient(circle at 32% 28%,#fff 0 15%,rgba(160,225,255,.5) 40%,rgba(255,255,255,.6) 100%);border:1px solid #fff;animation:bubPop 1.1s ease-out both}
.a-rainbow{position:absolute;top:-6px;width:150px;animation:fade .6s .5s both}

/* ============ v0.3：幻想（元素の大陸） ============ */
:root[data-world="fantasy"] :is(.boss,.card,.review,.rec,.row,.stat,.rush-card){box-shadow:inset 0 0 0 3px var(--panel),inset 0 0 0 4px #E8D8AE}
:root[data-world="fantasy"] .quest{box-shadow:inset 0 0 0 3px #3A4366,inset 0 0 0 4px rgba(201,165,90,.7)}
:root[data-world="fantasy"] :is(.btn.primary,.save){background:linear-gradient(180deg,#D6B26A,#B48638);border-color:#9C7330;box-shadow:inset 0 1px 0 rgba(255,245,210,.6)}
:root[data-world="fantasy"] :is(.page-head h1,.board-head h2,.cele-title,.boss-name,.quest-title){letter-spacing:.08em}
.cell.w-fantasy{background:linear-gradient(180deg,#FFFDF6,#F3EBD7);border-color:#E0CFA4;box-shadow:inset 0 0 0 3px #FFFDF6,inset 0 0 0 4px #EADCB6}
.cell.w-fantasy .al{font-family:var(--f-display);font-size:13px;font-weight:600}
.cell.w-fantasy.unseen{background:repeating-linear-gradient(135deg,#EFE7D4 0 6px,#E9E0CB 6px 12px);border-style:dashed}
.cell.w-fantasy.gold{border:2px solid #C9A55A;box-shadow:inset 0 0 0 3px #FFFDF6,inset 0 0 0 4px #C9A55A,0 0 12px rgba(201,165,90,.45)}
.seeds i{position:absolute;width:5px;height:5px;border-radius:50%;background:#F6DB8E;box-shadow:0 0 8px 2px rgba(246,219,142,.8);opacity:0;animation:seed 12s ease-in-out infinite}
.f-beam{position:absolute;bottom:20px;width:46px;height:170px;background:linear-gradient(0deg,transparent,var(--c),transparent);opacity:0;filter:blur(2px);animation:beam 1.2s .1s ease-out both}
.f-rune{position:absolute;bottom:6px;width:130px;height:130px;border-radius:50%;border:2px dashed #C9A55A;transform:rotateX(72deg);animation:runeSpin 2.4s linear both}
.f-rune.b{width:96px;height:96px;bottom:23px;border-style:solid;border-width:1px;animation-direction:reverse}
.f-crystal{width:110px;height:110px;overflow:visible;animation:rise .7s .2s cubic-bezier(.2,.9,.3,1.2) both}
.f-elem{position:absolute;top:2px;right:6px;font-family:var(--f-display);font-size:22px;font-weight:700;animation:pop .4s .8s cubic-bezier(.2,.9,.3,1.4) both}
.f-chest{position:absolute;left:4px;bottom:16px;width:36px;height:30px;animation:pop .45s .9s cubic-bezier(.2,.9,.3,1.4) both}

/* ============ v0.3：機動艦隊（格納庫とHUD） ============ */
:root[data-world="mecha"] :is(.boss,.quest,.card,.rush-card,.stat,.row,.rec,.banner,.review){clip-path:var(--cut)}
:root[data-world="mecha"] :is(.btn.primary,.save){background:linear-gradient(180deg,#4A88FF,#2A5FD8);border-color:#2A5FD8;clip-path:polygon(8px 0,100% 0,100% calc(100% - 8px),calc(100% - 8px) 100%,0 100%,0 8px);letter-spacing:.12em}
:root[data-world="mecha"] :is(.role,.boss-name,.quest-title,.who-name,.sec h3,.set h2,.cal-head h2,.day-list h2){font-weight:700;letter-spacing:.06em}
:root[data-world="mecha"] :is(.page-head h1,.board-head h2,.cele-title,.rush-title,.lock-title,.setup-title){font-family:"Dela Gothic One","Zen Kaku Gothic New",sans-serif;font-weight:400;letter-spacing:.06em}
:root[data-world="mecha"] .hp{border-radius:0;height:8px}
:root[data-world="mecha"] .hp-fill{border-radius:0;background:repeating-linear-gradient(90deg,var(--hp) 0 6px,transparent 6px 8px)}
:root[data-world="mecha"] .bar,:root[data-world="mecha"] .bar-fill{border-radius:0}
.cell.w-mecha{background:linear-gradient(180deg,#19212D,#121821);border-color:#2C3747;clip-path:polygon(8px 0,100% 0,100% calc(100% - 8px),calc(100% - 8px) 100%,0 100%,0 8px)}
.cell.w-mecha::after{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;background:repeating-linear-gradient(45deg,#F2C230 0 4px,#14181F 4px 8px);opacity:.75}
.cell.w-mecha .no{font-family:var(--f-num);letter-spacing:.06em}
.cell.w-mecha .al{font-family:var(--f-num);font-weight:600;letter-spacing:.08em}
.cell.w-mecha.unseen{background:#0E1218;opacity:.8}
.cell.w-mecha.unseen::after{opacity:.25}
.cell.w-mecha.gold{border:1px solid #F2C230;background:linear-gradient(180deg,#2A2616,#141821)}
.m-eyes{animation:eyeGlow 2.8s ease-in-out infinite}
.hud-scan{position:absolute;inset:0;background:linear-gradient(180deg,transparent,rgba(61,123,255,.09) 50%,transparent) 0 0/100% 160px no-repeat;animation:hudScan 7s linear infinite}
.m-hud{position:absolute;inset:6px;background:
  linear-gradient(#3D7BFF,#3D7BFF) 0 0/18px 2px no-repeat,linear-gradient(#3D7BFF,#3D7BFF) 0 0/2px 18px no-repeat,
  linear-gradient(#3D7BFF,#3D7BFF) 100% 0/18px 2px no-repeat,linear-gradient(#3D7BFF,#3D7BFF) 100% 0/2px 18px no-repeat,
  linear-gradient(#3D7BFF,#3D7BFF) 0 100%/18px 2px no-repeat,linear-gradient(#3D7BFF,#3D7BFF) 0 100%/2px 18px no-repeat,
  linear-gradient(#3D7BFF,#3D7BFF) 100% 100%/18px 2px no-repeat,linear-gradient(#3D7BFF,#3D7BFF) 100% 100%/2px 18px no-repeat;animation:hudIn .4s ease-out both}
.m-scanline{position:absolute;left:8px;right:8px;height:2px;background:#5CF2A6;box-shadow:0 0 10px #5CF2A6;animation:scanDown .9s .1s ease-in-out both}
.m-head{width:112px;height:112px;overflow:visible;animation:launch .55s .15s cubic-bezier(.2,.9,.3,1.1) both}
.m-head .m-eyes{animation:eyeFlash .9s .6s ease-out both}
.m-label{position:absolute;bottom:0;left:50%;transform:translateX(-50%);font-family:var(--f-num);font-size:12px;letter-spacing:.2em;color:#F2C230;animation:fade .3s .7s both}

/* ============ お知らせ ============ */
#toast{position:fixed;left:50%;bottom:calc(88px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);z-index:70;max-width:min(440px,calc(100% - 32px));background:var(--ink);color:var(--bg);font-size:13px;line-height:1.5;padding:10px 16px;border-radius:14px;text-align:center}
#toast.show{animation:rise .25s ease}
#toast[hidden]{display:none}

/* ============ 動き ============ */
@keyframes fade{from{opacity:0}}
@keyframes fadeOut{to{opacity:0}}
@keyframes up{from{transform:translateY(100%)}}
@keyframes slideIn{from{transform:translateX(-50%) translateX(24px);opacity:0}}
@keyframes rise{from{opacity:0;transform:translateY(8px)}}
@keyframes flipIn{0%{transform:perspective(600px) rotateY(90deg) scale(.85);opacity:0}65%{transform:perspective(600px) rotateY(-8deg) scale(1.03);opacity:1}100%{transform:perspective(600px) rotateY(0) scale(1)}}
@keyframes shine{from{transform:translateX(-160%) skewX(-18deg)}to{transform:translateX(320%) skewX(-18deg)}}
@keyframes fogOut{to{opacity:0;transform:scale(1.5)}}
@keyframes flagUp{from{transform:translateY(14px) scale(.3);opacity:0}}
@keyframes grow{from{transform:scaleY(0)}}
@keyframes pop{0%{transform:scale(0)}70%{transform:scale(1.15)}100%{transform:scale(1)}}
@keyframes drop{0%{transform:translateY(-10px);opacity:0}30%{opacity:1}100%{transform:translateY(64px);opacity:0}}
@keyframes ignite{0%{transform:scale(0) rotate(-60deg);opacity:0}65%{transform:scale(1.15) rotate(6deg);opacity:1}100%{transform:scale(1) rotate(0)}}
@keyframes ring{0%{transform:scale(.3);opacity:.9}100%{transform:scale(1.5);opacity:0}}
@keyframes meteor{from{transform:rotate(-35deg) translateX(60px);opacity:0}30%{opacity:1}to{transform:rotate(-35deg) translateX(-160px);opacity:0}}
@keyframes spark{0%{transform:rotate(var(--a)) translateY(0) scale(.4);opacity:0}30%{opacity:1}100%{transform:rotate(var(--a)) translateY(-86px) scale(1);opacity:0}}
@keyframes glow{from{opacity:.75}to{opacity:1}}
@keyframes sway{from{transform:rotate(-3deg)}to{transform:rotate(3deg)}}
@keyframes twinkle{0%,100%{opacity:.3}50%{opacity:1}}
@keyframes drift{from{background-position:0 0,0 0,0 0,0 0}to{background-position:120px 0,120px 0,120px 0,0 0}}
@keyframes wave{to{background-position-x:40px}}
@keyframes mote{0%{transform:translateY(0);opacity:0}20%{opacity:.55}100%{transform:translateY(-120px);opacity:0}}
@keyframes petal{0%{transform:translate(0,0) rotate(0);opacity:0}10%{opacity:.7}100%{transform:translate(-60px,110vh) rotate(540deg);opacity:0}}
@keyframes cellPulse{0%{transform:scale(1)}40%{transform:scale(1.08)}100%{transform:scale(1)}}
@keyframes pulseDot{0%,100%{transform:scale(1)}50%{transform:scale(1.25)}}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@keyframes flicker{0%,100%{transform:scale(1)}50%{transform:scale(1.08) rotate(-2deg)}}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-2px)}}
@keyframes bubbleUp{0%{transform:translate(0,0);opacity:0}10%{opacity:.9}100%{transform:translate(18px,-115vh);opacity:.2}}
@keyframes bubPop{0%{transform:translateY(0) scale(.4);opacity:0}25%{opacity:1}90%{opacity:.9}100%{transform:translateY(-130px) scale(1.1);opacity:0}}
@keyframes seed{0%{transform:translate(0,0);opacity:0}20%{opacity:.9}80%{opacity:.7}100%{transform:translate(30px,-160px);opacity:0}}
@keyframes beam{0%{opacity:0;transform:scaleY(.2)}40%{opacity:.85;transform:scaleY(1)}100%{opacity:0;transform:scaleY(1.1)}}
@keyframes runeSpin{from{transform:rotateX(72deg) rotate(0);opacity:0}15%{opacity:1}to{transform:rotateX(72deg) rotate(200deg);opacity:.6}}
@keyframes eyeGlow{0%,100%{opacity:.75}50%{opacity:1}}
@keyframes eyeFlash{0%{opacity:.2}30%{opacity:1;filter:drop-shadow(0 0 3px #5CF2A6)}100%{opacity:1}}
@keyframes hudScan{from{background-position:0 -160px}to{background-position:0 110vh}}
@keyframes hudIn{from{opacity:0;transform:scale(1.15)}}
@keyframes scanDown{from{top:8px;opacity:1}to{top:calc(100% - 10px);opacity:0}}
@keyframes launch{from{transform:translateY(40px);opacity:0}70%{transform:translateY(-4px);opacity:1}}
@keyframes hpPulse{0%,100%{opacity:1}50%{opacity:.55}}
@keyframes shake{0%,90%,100%{transform:translateX(0)}92%{transform:translateX(-2px)}94%{transform:translateX(2px)}96%{transform:translateX(-2px)}}
@keyframes cardIn{from{transform:translateY(12px) scale(.96);opacity:0}}
@keyframes fxUp{0%{opacity:0;transform:translateY(6px)}20%{opacity:1;transform:none}80%{opacity:1}100%{opacity:0;transform:translateY(-10px)}}
@keyframes flag{from{transform:skewY(-4deg)}to{transform:skewY(4deg)}}
@keyframes waveX{to{transform:translateX(-20px)}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes flutter{0%,100%{transform:translate(0,0)}25%{transform:translate(6px,-4px)}50%{transform:translate(12px,0)}75%{transform:translate(6px,3px)}}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;animation-delay:0s!important;transition-duration:.01ms!important}
  #ambient{display:none}
}
