:root{--bg:#060b16;--paper:rgba(17,27,47,.82);--paper2:rgba(255,255,255,.05);--ink:#e9eef6;--mute:#8e9db5;--mute2:#b6c2d4;--hair:rgba(255,255,255,.08);--gold:#e7c37a;--lift:0 0 0 1px rgba(255,255,255,.07),0 10px 28px rgba(0,0,0,.35);--c:#e8857a}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
body{background:var(--bg);color:var(--ink);font-family:-apple-system,"PingFang SC","Hiragino Sans GB","Noto Sans SC",sans-serif;min-height:100vh}
.jp,.kana,.sign b,.wd b{font-family:"Hiragino Maru Gothic ProN","Hiragino Sans","Noto Sans JP",sans-serif}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;border:0;background:none;cursor:pointer}
header{position:sticky;top:0;z-index:5;display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:rgba(6,11,22,.72);backdrop-filter:blur(8px);border-bottom:1px solid var(--hair)}
.brand{display:flex;align-items:center;gap:8px;font-size:16px}
.logo{width:30px;height:30px;border-radius:50%;background:#2f2b28;color:#fff;display:grid;place-items:center;font-weight:900;font-size:15px;box-shadow:inset 0 0 0 3px #fff,0 0 0 2px #2f2b28}
.hbtn{font-size:13px;font-weight:700;background:var(--paper);padding:6px 12px;border-radius:999px;box-shadow:var(--lift)}
main{max-width:560px;margin:0 auto;padding:16px 16px 30px}
h2{font-size:22px;font-weight:900;margin:4px 0 12px}
h3{font-size:16px;font-weight:900;margin:22px 0 10px;display:flex;align-items:center;gap:8px}
.card{background:var(--paper);border-radius:18px;box-shadow:var(--lift);padding:16px}
/* IC 卡 */
.ic{position:relative;overflow:hidden;border-radius:20px;padding:18px 20px;color:#fff;background:linear-gradient(135deg,#3d8f7a,#5fb39a 60%,#8fd0b8);box-shadow:0 10px 24px rgba(40,110,90,.28);cursor:pointer;user-select:none}
.ic:before{content:'';position:absolute;right:-40px;top:-40px;width:170px;height:170px;border-radius:50%;background:rgba(255,255,255,.12)}
.ic:after{content:'';position:absolute;right:30px;bottom:-60px;width:140px;height:140px;border-radius:50%;background:rgba(255,255,255,.08)}
.ic small{font-size:12px;opacity:.85;letter-spacing:1px}
.ic .ic-n{font-size:15px;font-weight:900;letter-spacing:2px;margin-top:2px}
.ic .ic-row{display:flex;gap:22px;margin-top:16px;position:relative;z-index:1}
.ic .ic-row b{display:block;font-size:26px;font-weight:900;line-height:1.1}
.ic .ic-tap{position:absolute;right:18px;top:18px;z-index:1;font-size:12px;font-weight:800;background:rgba(255,255,255,.22);padding:5px 10px;border-radius:999px}
.ic.done .ic-tap{background:var(--paper);color:#3d8f7a}
.ic.pi{animation:pi .45s}@keyframes pi{30%{transform:scale(.97)}}
.week{display:flex;gap:6px;margin-top:12px;position:relative;z-index:1}
.week span{flex:1;text-align:center;font-size:11px;opacity:.9}
.week i{display:block;margin:4px auto 0;width:24px;height:24px;border-radius:50%;border:1.5px dashed rgba(255,255,255,.6);font-style:normal;line-height:21px;font-size:12px;font-weight:900}
.week i.ok{background:var(--paper);color:#3d8f7a;border:0;line-height:24px}
/* 时刻表 */
.tt{margin-top:14px;background:#22262b;color:var(--paper2);border-radius:16px;padding:12px 14px;box-shadow:0 8px 20px rgba(0,0,0,.15)}
.tt-h{display:flex;justify-content:space-between;font-size:12px;color:#f7c84a;font-weight:800;letter-spacing:1px;border-bottom:1px solid #3a3f46;padding-bottom:8px;margin-bottom:4px}
.tt a{display:grid;grid-template-columns:52px 64px 1fr auto;align-items:center;gap:6px;padding:9px 0;border-bottom:1px dashed #3a3f46;font-size:14px}
.tt a:last-child{border:0}
.tt time{font-family:ui-monospace,Menlo,monospace;color:#f7c84a;font-weight:800}
.tt .ln{font-size:11px;font-weight:900;color:#fff;border-radius:6px;padding:2px 6px;text-align:center}
.tt em{font-style:normal;font-size:12px;color:#9aa3ab}
.tt .go{color:#7fe0b8;font-weight:800;font-size:12px}
/* 路线图 */
.line{margin-top:14px;background:var(--paper);border-radius:18px;box-shadow:var(--lift);padding:14px 14px 10px}
.line-h{display:flex;align-items:center;gap:10px}
.badge{width:34px;height:34px;border-radius:50%;border:5px solid var(--c);display:grid;place-items:center;font-weight:900;font-size:14px;background:var(--paper);flex:none}
.line-h b{font-size:16px;font-weight:900}
.line-h small{display:block;font-size:12px;color:var(--mute)}
.line-h .pct{margin-left:auto;font-size:12px;font-weight:800;color:var(--c)}
.route{display:flex;overflow-x:auto;padding:22px 4px 0;scrollbar-width:none;scroll-snap-type:x proximity}
.route::-webkit-scrollbar{display:none}
.stn{position:relative;flex:none;width:64px;text-align:center;scroll-snap-align:center}
.stn:before{content:'';position:absolute;left:0;right:0;top:15px;height:7px;background:var(--c);opacity:.35}
.stn:first-child:before{left:50%}.stn:last-child:before{right:50%}
.stn.ok:before{opacity:1}
.stn i{position:relative;display:block;margin:0 auto;width:30px;height:30px;border-radius:50%;background:var(--paper);border:4px solid var(--c);font-style:normal;font-size:10px;font-weight:900;line-height:22px;color:var(--ink)}
.stn.ok i{background:var(--c);color:#fff}
.stn.cur i{box-shadow:0 0 0 5px color-mix(in srgb,var(--c) 30%,transparent)}
.stn.cur:after{content:'🚃';position:absolute;left:50%;top:-20px;transform:translateX(-50%);font-size:18px;animation:bob 1.4s infinite}
@keyframes bob{50%{transform:translate(-50%,-3px)}}
.stn span{display:block;font-size:12.5px;font-weight:800;margin-top:6px}
.stn small{display:block;font-size:10px;color:#e3a948;height:14px;letter-spacing:-1px}
.line.off{opacity:.55}.line.off .stn i{border-style:dashed}
.xfer{display:inline-block;font-size:10px;font-weight:900;color:#fff;background:#2f2b28;border-radius:4px;padding:1px 4px;margin-top:2px}
/* 站名标 */
.sign{position:relative;background:var(--paper);border-radius:14px;box-shadow:var(--lift);overflow:hidden;text-align:center;padding:16px 12px 0}
.sign .num{position:absolute;left:12px;top:12px;width:40px;height:40px;border-radius:9px;border:4px solid var(--c);font-weight:900;font-size:11px;line-height:1.05;display:grid;place-items:center;align-content:center}
.sign .num em{font-style:normal;font-size:16px}
.sign b{display:block;font-size:40px;font-weight:900;letter-spacing:4px;line-height:1.15}
.sign .yomi{margin:0;font-size:14px;letter-spacing:4px;color:var(--ink);font-weight:700}
.sign .theme{font-style:normal;color:var(--c);font-weight:900}
.stn .th{color:var(--mute);font-size:10px;height:auto}
.sign small{display:block;font-size:13px;color:var(--mute);letter-spacing:3px;margin-bottom:12px}
.sign .band{margin:0 -12px;display:flex;justify-content:space-between;align-items:center;background:var(--c);color:#fff;font-size:13px;font-weight:800;padding:8px 12px}
.sign .band a{display:flex;align-items:center;gap:4px;max-width:45%}
.ann{display:flex;align-items:center;gap:10px;margin:12px 0;background:#22262b;color:var(--paper2);border-radius:12px;padding:10px 12px;font-size:13.5px}
.ann button{flex:none;width:34px;height:34px;border-radius:50%;background:#f7c84a;font-size:15px}
.ann .jp{font-size:15px;font-weight:700;color:#fff}
.ann small{display:block;color:#9aa3ab;font-size:11.5px}
.kgrid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.kc{background:var(--paper);border-radius:14px;box-shadow:var(--lift);padding:10px 0 8px;text-align:center}
.kc .kana{font-size:34px;font-weight:700;line-height:1.15}
.kc small{display:block;font-size:12px;color:var(--mute);font-weight:700}
.kc:active{transform:translateY(2px)}
.kc.on{background:color-mix(in srgb,var(--c) 18%,#fff)}
.wd{display:flex;justify-content:flex-start;align-items:center;gap:12px;background:var(--paper);border-radius:14px;box-shadow:var(--lift);padding:10px 14px;margin-bottom:8px;width:100%;text-align:left}
.wd .pl{flex:none;width:34px;height:34px;border-radius:50%;background:var(--c);color:#fff;display:grid;place-items:center;font-size:13px}
.wd b{font-size:19px}
.wd span{margin-left:auto;font-size:14px;color:var(--mute)}
.btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;height:52px;border-radius:16px;font-weight:900;font-size:17px;background:var(--paper);box-shadow:var(--lift);margin-top:12px}
.btn.go{background:var(--c);color:#fff;box-shadow:0 4px 0 color-mix(in srgb,var(--c) 70%,#000)}
.btn.go:active{transform:translateY(3px);box-shadow:0 1px 0 color-mix(in srgb,var(--c) 70%,#000)}
.back{display:inline-flex;align-items:center;gap:4px;font-size:13.5px;color:var(--mute);margin-bottom:10px}
/* 小测 */
.qtop{display:flex;justify-content:space-between;font-size:13px;font-weight:800;color:var(--mute)}
.bar{height:8px;background:var(--hair);border-radius:9px;margin:10px 0 16px;overflow:hidden}.bar i{display:block;height:100%;background:var(--c);border-radius:9px;transition:width .3s}
.qbox{background:var(--paper);border-radius:20px;box-shadow:var(--lift);min-height:170px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:20px}
.qbox .kana{font-size:64px;font-weight:700}
.qbox .spk{width:86px;height:86px;border-radius:50%;background:color-mix(in srgb,var(--c) 20%,#fff);font-size:36px}
.qbox small{color:var(--mute);font-size:13px}
.opts{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}
.opt{height:70px;border-radius:16px;background:var(--paper);box-shadow:var(--lift);font-size:26px;font-weight:800}
.opt.r{font-size:20px}
.opt.ok{background:rgba(127,199,154,.18);box-shadow:0 2px 0 #7fb27a}.opt.no{background:rgba(232,133,122,.18);box-shadow:0 2px 0 #e8857a}
/* 到站 */
.arrive{text-align:center;padding-top:6px}
.arrive h2{margin-top:6px}
.stars{font-size:38px;letter-spacing:6px;margin:6px 0}
.stars i{font-style:normal;color:#e0d6c4}.stars i.on{color:#f2b33d}
.stamp{width:190px;height:190px;margin:18px auto 6px;border-radius:50%;border:5px double var(--c);color:var(--c);display:flex;flex-direction:column;align-items:center;justify-content:center;transform:rotate(-8deg);background:color-mix(in srgb,var(--c) 6%,#fff);position:relative}
.stamp.new{animation:stamp .5s cubic-bezier(.2,1.6,.5,1)}
@keyframes stamp{0%{transform:rotate(-8deg) scale(2.2);opacity:0}100%{transform:rotate(-8deg) scale(1);opacity:1}}
.stamp .kana{font-size:52px;font-weight:900;line-height:1}
.stamp b{font-size:16px;font-weight:900;letter-spacing:2px;margin-top:4px}
.stamp small{font-size:10.5px;font-weight:800;letter-spacing:1px;margin-top:2px}
.stamp:before{content:'';position:absolute;inset:10px;border-radius:50%;border:1.5px solid currentColor;opacity:.5}
.sbook{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.sbook .stamp{width:100%;height:auto;aspect-ratio:1;margin:0;border-width:3px}
.sbook .stamp .kana{font-size:30px}.sbook .stamp b{font-size:11px}.sbook .stamp small{font-size:8.5px}
.sbook .stamp.no{color:#cfc4b2;border-color:#ddd3c2;border-style:dashed;background:none;transform:none}
.cr{max-width:528px;margin:10px auto 30px;padding:12px 14px;border:1.5px dashed #d9cdb8;border-radius:12px;text-align:center;font-size:12px;line-height:1.7;color:var(--mute)}
.cr b{display:block;color:#cf6c61;font-size:13.5px}
.toast{position:fixed;left:50%;top:70px;transform:translateX(-50%);background:#2f2b28;color:#fff;font-weight:800;padding:10px 18px;border-radius:999px;z-index:20;font-size:14px;animation:tst 1.8s forwards}
@keyframes tst{0%{opacity:0;transform:translate(-50%,-8px)}15%,80%{opacity:1;transform:translate(-50%,0)}100%{opacity:0}}
/* 首页大地图 */
#bigmap{margin:-16px -16px 16px}
.mapwrap{position:relative;height:min(118vw,640px);overflow:hidden;background:var(--paper2);touch-action:none}
.mapwrap svg{width:100%;height:100%;display:block;cursor:grab}
.mapwrap .sea{fill:var(--paper2)}.mapwrap .dust{fill:#d9cfbd;opacity:.5}
.mapwrap .ln{fill:none;stroke:var(--c);stroke-width:12;stroke-linecap:round;stroke-linejoin:round}
.mapwrap .loop{fill:none;stroke:var(--c);stroke-width:14}
.mapwrap .st{fill:#fff;stroke:var(--c);stroke-width:3.5}
.mapwrap .st.off{stroke-width:2.2}
.mapwrap .st.on{fill:var(--c)}
.mapwrap .sk{font:700 14px "Hiragino Maru Gothic ProN",sans-serif;text-anchor:middle;fill:var(--ink);pointer-events:none}.mapwrap .sk.on{fill:#fff}
.mapwrap .sn{font:800 13px -apple-system,"PingFang SC",sans-serif;text-anchor:middle;fill:#6b625a;pointer-events:none}
.mapwrap .xf{fill:#fff;stroke:#2f2b28;stroke-width:2.5}
.mapwrap .lbadge circle{fill:#fff;stroke:var(--c);stroke-width:6}.mapwrap .lbadge text{font:900 13px -apple-system,sans-serif;text-anchor:middle;fill:var(--ink)}
.mapwrap .loopname{font:900 30px "Hiragino Mincho ProN",serif;text-anchor:middle;fill:var(--ink);letter-spacing:3px}
.mapwrap .loopsub{font:700 14px "Hiragino Maru Gothic ProN",sans-serif;text-anchor:middle;fill:#8a8178;letter-spacing:2px}
/* 夜景 */
.mapwrap.night{background:#0a101c}
.mapwrap.night .sea{fill:url(#city)}.mapwrap.night .dust{fill:#ffe9b0;opacity:.35}
.mapwrap.night .ln{opacity:.95}

.mapwrap.night .st{fill:#121a2a}.mapwrap.night .st.off{fill:#0f1624;opacity:.85}
.mapwrap.night .st.on{fill:#fff6d6;stroke:#ffd36b}
@keyframes twk{50%{opacity:.75}}
.mapwrap.night .sk{fill:#e9e2d6}.mapwrap.night .sk.on{fill:#3a2a00}
.mapwrap.night .sn{fill:#9aa6b8}
.mapwrap.night .xf{fill:#0a101c;stroke:#fff}
.mapwrap.night .lbadge circle{fill:#0a101c}.mapwrap.night .lbadge text{fill:#fff}
.mapwrap.night .loopname{fill:#fff6e6}.mapwrap.night .loopsub{fill:#9aa6b8}
.mhead{position:absolute;left:16px;top:14px;pointer-events:none;color:var(--ink)}
.mhead small{font-size:10.5px;letter-spacing:2px;opacity:.7;font-weight:700}
.mhead b{display:block;font:900 30px "Hiragino Mincho ProN","Songti SC",serif;letter-spacing:3px;margin:2px 0}
.mhead span{font-size:12px;opacity:.85}
.night .mhead{color:#fff6e6;text-shadow:0 0 12px rgba(255,210,120,.35)}
.mstat{position:absolute;left:12px;right:12px;bottom:12px;display:flex;gap:8px;pointer-events:none}
.mstat div{flex:1;background:rgba(255,255,255,.85);border-radius:12px;padding:7px 8px;font-size:11px;font-weight:700;text-align:center;color:#6b625a}
.mstat b{display:block;font-size:18px;font-weight:900;color:var(--ink)}
.night .mstat div{background:rgba(16,24,40,.72);color:#9aa6b8;border:1px solid rgba(255,255,255,.08)}
.night .mstat b{color:#ffd36b}
.mtool{position:absolute;right:12px;top:14px;display:flex;flex-direction:column;gap:6px}
.mtool button{width:34px;height:34px;border-radius:10px;background:rgba(255,255,255,.9);font-weight:900;font-size:16px;box-shadow:0 2px 6px rgba(0,0,0,.12)}
.night .mtool button{background:rgba(16,24,40,.8);color:#fff;border:1px solid rgba(255,255,255,.12)}

.mapwrap .bay{fill:#e3ecf2}.mapwrap .river{fill:none;stroke:#e3ecf2;stroke-width:5}
.mapwrap .bayname{font:700 14px "Hiragino Mincho ProN",serif;fill:#9fb3c2;letter-spacing:6px}
.mapwrap.night .bay{fill:#0d1a2e}.mapwrap.night .river{stroke:#13243d}.mapwrap.night .bayname{fill:#3d5878}
.mapwrap .ln{stroke-width:5}
.mapwrap .ln.off{opacity:.85}
.mapwrap .st{stroke-width:1.6}
.mapwrap .sk{font-size:6px}
.mapwrap .sn{font-size:6px;font-weight:700;text-anchor:start;opacity:0}
.mapwrap .sn.big{font-size:7.5px;opacity:1}
.mapwrap svg.zin .sn{opacity:1}
.mapwrap .xf{stroke-width:1.4}
.mapwrap.night .xf.on{fill:#fff6d6}
.mapwrap .lbadge rect{fill:var(--c)}.mapwrap .lbadge text{font:900 8px -apple-system,sans-serif;text-anchor:middle;fill:#fff}
.mapwrap.night .lbadge rect{fill:var(--c)}.mapwrap.night .lbadge text{fill:#fff}

.mapwrap .lnglow,.mapwrap .halo{display:none}
.mapwrap.night .lnglow{display:inline;fill:none;stroke:var(--c);stroke-width:13;opacity:.22;stroke-linecap:round;stroke-linejoin:round}
.mapwrap.night .halo{display:inline;fill:#ffd36b;opacity:.28}

.vw{display:grid;grid-template-columns:34px 1fr auto;grid-template-rows:auto auto;column-gap:12px;align-items:center;width:100%;text-align:left;background:var(--paper);border-radius:14px;box-shadow:var(--lift);padding:10px 12px;margin-bottom:8px}
.vw .pl{grid-row:1/3;width:34px;height:34px;border-radius:50%;background:var(--c);color:#fff;display:grid;place-items:center;font-size:13px}
.vw-w b{font-size:19px;font-weight:800;margin-right:8px}.vw-w small{font-size:12.5px;color:var(--mute)}
.vw-zh{grid-column:2;font-size:14px;color:var(--mute2)}
.hot{grid-column:3;grid-row:1/3;font-style:normal;font-size:11px;font-weight:800;color:var(--gold);background:rgba(231,195,122,.16);border-radius:999px;padding:3px 8px;white-space:nowrap}
.hot.h{color:#fff;background:#e8857a}

.gm{background:var(--paper);border-radius:16px;box-shadow:var(--lift);padding:14px;margin-bottom:10px;border-left:5px solid var(--c)}
.gm-h{display:flex;align-items:center;gap:8px}.gm-h b{font-size:18px;font-weight:900}.gm-h .hot{margin-left:auto}
.gm-m{font-size:15px;font-weight:700;margin:4px 0 6px}
.gm-how{font-size:12.5px;color:var(--mute2);background:var(--paper2);border-radius:8px;padding:5px 8px}.gm-how span{font-weight:900;color:var(--c);margin-right:6px}
.gm-ex{display:flex;gap:10px;align-items:flex-start;width:100%;text-align:left;margin-top:8px}
.gm-ex .pl{flex:none;width:30px;height:30px;border-radius:50%;background:var(--c);color:#fff;display:grid;place-items:center;font-size:12px;margin-top:6px}
.gm-ex .jp{display:block;font-size:16.5px;line-height:2}.gm-ex small{display:block;font-size:13px;color:var(--mute)}
rt{font-size:.5em;color:var(--mute)}

.vw-ex{grid-column:2/4;text-align:left;margin-top:6px;padding:6px 10px;border-radius:10px;background:var(--paper2)}
.vw-ex .jp{display:block;font-size:15px;line-height:1.9}.vw-ex .jp:before{content:'🔊 ';font-size:11px}
.vw-ex small{display:block;font-size:12.5px;color:var(--mute)}

/* 毕业考 */
.ex-intro{text-align:center;padding:26px 18px}.ex-intro p{color:var(--mute);font-size:14px;line-height:1.7}
.ex-box{display:flex;flex-direction:column;gap:4px;background:var(--paper2);border-radius:12px;padding:12px;margin:14px 0 4px;font-size:13.5px}.ex-box b{font-size:15px}
.ex-best{margin-top:8px;font-weight:800;color:var(--c)!important}
.ex-h{font-size:13.5px;font-weight:800;color:var(--mute2);background:var(--paper2);border-radius:10px;padding:8px 10px;margin-bottom:10px;line-height:1.8}
.ex-ps{background:var(--paper);border-radius:14px;box-shadow:var(--lift);padding:10px 14px;margin-bottom:10px}
.ex-ps summary{font-size:13px;font-weight:800;color:var(--c);cursor:pointer}.ex-ps .jp{font-size:15.5px;line-height:2.1;margin-top:6px}
.ex-tb{background:var(--paper);border-radius:14px;box-shadow:var(--lift);padding:10px 12px;margin-bottom:10px;font-size:13px;line-height:1.9}
.ex-tb b{display:block;margin-bottom:6px}.ex-tb div{display:grid;grid-template-columns:1.3fr 1fr 1fr 1fr;gap:4px;border-top:1px dashed var(--hair);padding:4px 0}
.ex-q{background:var(--paper);border-radius:16px;box-shadow:var(--lift);padding:16px;font-size:17.5px;line-height:2.2;font-weight:600}
.ex-q u{text-decoration:none;border-bottom:2px solid #2f2b28}
.ex-o{display:grid;gap:8px;margin-top:12px}
.ex-o .opt{height:auto;min-height:54px;padding:10px 14px;text-align:left;font-size:16px;font-weight:600;line-height:1.9;display:flex;gap:10px;align-items:center}
.ex-o .opt em{font-style:normal;flex:none;width:24px;height:24px;border-radius:50%;background:rgba(255,255,255,.08);display:grid;place-items:center;font-size:13px;font-weight:900}
.ex-why{margin-top:12px;border-radius:14px;padding:12px 14px;font-size:14px;line-height:1.7}.ex-why.g{background:rgba(127,199,154,.14)}.ex-why.b{background:rgba(232,133,122,.14)}
.ex-why b{font-size:15px}

.mapwrap .lab1 text,.mapwrap .lab2 text{font-family:-apple-system,"PingFang SC",sans-serif;font-weight:700;fill:#4a433d;paint-order:stroke;stroke:var(--paper2);stroke-width:2.2px;stroke-linejoin:round}
.mapwrap.night .lab1 text,.mapwrap.night .lab2 text{fill:#d7dee8;stroke:#0b1220}
.mapwrap .lab2{display:none}.mapwrap svg.zin .lab2{display:inline}.mapwrap svg.zin .lab1{display:none}
.mapwrap .lab2 text{stroke-width:1.2px}

.mapwrap .mhead,.mapwrap .mstat{transition:opacity .2s}
.mapwrap.zin .mhead{opacity:0}
.mapwrap svg.zin .ln{stroke-width:3}.mapwrap svg.zin .lnglow{stroke-width:7}
.mapwrap svg.zin .lbadge{display:none}
.mapwrap svg.zin .st{stroke-width:1.1}
/* 全日本夜景 */
.jpmap .star{fill:#fff;opacity:.35}
.jpmap .land{fill:url(#land)}.jpmap .shore{fill:none;stroke:#5d7ba6;stroke-width:1.2;opacity:.55}
.jpmap .lt{fill:#ffd88a;opacity:.55}
.jpmap .ln{stroke-width:4.5}.jpmap .ln.off{opacity:.55;stroke-dasharray:1 0}
.jpmap .lnglow{display:inline;fill:none;stroke:var(--c);stroke-width:14;opacity:.18;stroke-linecap:round;stroke-linejoin:round}
.jpmap .st{fill:#0d1626;stroke:var(--c);stroke-width:1.8}.jpmap .st.on{fill:#fff6d6;stroke:#ffd36b}
.jpmap .tkglow{fill:#ffdf9a;opacity:.25}.jpmap .tkring{fill:#0d1626;stroke:var(--c);stroke-width:4;opacity:.6}
.jpmap .tkpro{fill:none;stroke:#ffd36b;stroke-width:4;transform:rotate(-90deg);transform-box:fill-box;transform-origin:center}
.jpmap .tkt{font:900 6.5px "Hiragino Mincho ProN",serif;fill:#fff;text-anchor:middle}
.jpmap .lbadge rect{fill:rgba(8,14,26,.8);stroke:var(--c);stroke-width:2}
.jpmap .lbadge text{font:900 12px -apple-system,sans-serif;fill:var(--c);text-anchor:middle}.jpmap .lbadge .lbn{font-size:8.5px;fill:#dfe6f0;font-weight:700}
.jpmap .lab1 text,.jpmap .lab2 text{fill:#e5ebf3;stroke:#08101e;stroke-width:3px}
.jpmap svg.zin .lbadge{display:inline}

.mhead b em{font-style:normal;background:linear-gradient(180deg,#ffe7a8,#e0b25a);-webkit-background-clip:text;background-clip:text;color:transparent}

/* 真题库 */
.bk-entry{display:flex;align-items:center;gap:12px;margin-top:14px;background:linear-gradient(135deg,#1b2a48,#0d1628);color:#fff;border-radius:18px;padding:16px;box-shadow:0 8px 20px rgba(10,20,40,.25)}
.bk-entry span{font-size:30px}.bk-entry b{font-size:17px;display:block}.bk-entry small{font-size:12.5px;color:#c9d3e3}.bk-entry i{margin-left:auto;font-style:normal;font-size:22px;color:#ffd36b}
.bk-tabs{display:flex;gap:8px;margin:12px 0}.bk-tabs a{flex:1;text-align:center;padding:8px 0;border-radius:12px;background:var(--paper);box-shadow:var(--lift);font-weight:900;font-size:16px}
.bk-tabs a small{display:block;font-size:11px;font-weight:700;color:var(--mute)}.bk-tabs a.on{background:var(--c);color:#fff}.bk-tabs a.on small{color:#fff}
.bk-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.bk-card{background:var(--paper);border-radius:16px;box-shadow:var(--lift);padding:14px;border-top:4px solid var(--c)}
.bk-card small{font-size:12px;color:var(--mute);font-weight:700}.bk-card b{display:block;font-size:20px;font-weight:900;margin:4px 0}
.bk-card em{font-style:normal;font-size:12px;font-weight:800;color:var(--c)}.bk-card em.new{color:var(--mute)}
.bk-mode{display:block;width:100%;text-align:left;background:var(--paper);border-radius:18px;box-shadow:var(--lift);padding:16px;margin-top:12px;border-left:5px solid #c9a24a}
.bk-mode.g{border-left-color:#5fb39a}.bk-mode em{font-style:normal;font-size:12px;font-weight:900;color:var(--gold);background:rgba(231,195,122,.16);border-radius:6px;padding:2px 8px}
.bk-mode.g em{color:#2f7f66;background:#dcf0e8}.bk-mode b{display:block;font-size:18px;font-weight:900;margin:6px 0 4px}.bk-mode span{font-size:13.5px;color:var(--mute2);line-height:1.6}
.bk-nav{display:grid;grid-template-columns:1fr 1.6fr;gap:10px}.bk-nav .btn:disabled{opacity:.4}
.opt.sel{background:rgba(127,159,214,.2);box-shadow:0 2px 0 #7f9fd6}
.ex-q small{color:var(--mute);font-weight:800}
.ow{margin-top:8px;display:grid;gap:6px}.ow div{display:flex;gap:8px;font-size:13.5px;line-height:1.6;background:rgba(255,255,255,.6);border-radius:8px;padding:6px 8px}
.ow div em{font-style:normal;flex:none;width:20px;height:20px;border-radius:50%;background:rgba(255,255,255,.08);display:grid;place-items:center;font-size:11px;font-weight:900}.ow div.ok em{background:#7fb27a;color:#fff}

/* 知识库入口 */
.kb{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}
.kb a{background:linear-gradient(145deg,#1b2a48,#0d1628);color:#fff;border-radius:16px;padding:14px;box-shadow:0 8px 18px rgba(10,20,40,.22);border:1px solid rgba(255,211,107,.18)}
.kb span{font-size:22px;color:#ffd36b}.kb b{display:block;font-size:16px;margin-top:4px}.kb small{font-size:12px;color:#b9c4d6}
/* 单词星系 */
.wl-hide{display:flex;align-items:center;gap:8px;margin:10px 0;font-size:13px}.wl-hide button,.wl-f button{background:var(--paper);box-shadow:var(--lift);border-radius:10px;padding:6px 12px;font-size:13px;font-weight:700}
.wl-hide button.on,.wl-f button.on{background:#c9a24a;color:#fff}
.wl-kw{width:100%;border:0;border-radius:12px;padding:12px 14px;font:inherit;font-size:15px;background:var(--paper);box-shadow:var(--lift);margin-bottom:10px}
.wl-f{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.wl-f select{margin-left:auto;font:inherit;font-size:13px;border:0;background:var(--paper);border-radius:10px;padding:6px 8px;box-shadow:var(--lift)}
.wl-n{font-size:12px;color:var(--mute);margin:10px 0 6px}
.wl-r{display:grid;grid-template-columns:1fr auto;gap:2px 10px;background:var(--paper);border-radius:14px;box-shadow:var(--lift);padding:10px 14px;margin-bottom:8px;position:relative}
.wl-w b{font-size:18px;font-weight:800;margin-right:8px}.wl-w small{font-size:12.5px;color:var(--mute)}.wl-zh{grid-column:1;font-size:13.5px;color:var(--mute2)}
.wl-s{grid-column:2;grid-row:1/3;align-self:center;text-align:right;font-size:11.5px;color:var(--mute);font-weight:700}.wl-s .lv{display:block;font-style:normal;color:var(--gold)}
.wl-k{position:absolute;right:8px;top:6px;font-style:normal;color:#5fb39a;font-weight:900}
.hide-ja .wl-w{filter:blur(6px)}.hide-zh .wl-zh{filter:blur(6px)}
.wn{background:linear-gradient(160deg,#16233d,#0c1424);color:#fff;border-radius:20px;padding:18px;box-shadow:0 10px 24px rgba(10,20,40,.3)}
.wn-h{display:flex;align-items:center;gap:10px}.wn-h span{width:38px;height:38px;border-radius:12px;background:rgba(127,199,154,.15);color:#7fc79a;display:grid;place-items:center;font-size:18px}
.wn-h small{font-size:10px;letter-spacing:3px;color:#9fb0c8}.wn-h b{display:block;font-size:15px}.wn-h em{margin-left:auto;font-style:normal;font-size:12px;font-weight:900;color:#7fc79a;border:1px solid #7fc79a;border-radius:999px;padding:2px 10px}
.wn-w{font-size:46px;font-weight:700;margin-top:14px;font-family:"Hiragino Mincho ProN","Songti SC",serif}.wn-r{color:#b9c4d6;font-size:15px}
.wn-zh{background:rgba(255,255,255,.06);border-radius:12px;padding:12px;margin:12px 0;font-size:17px}.wn-zh small{display:block;font-size:11px;color:#9fb0c8;margin-bottom:4px}
.wn-b{display:grid;grid-template-columns:1fr 1fr;gap:8px}.wn-b button{border:1px solid rgba(255,255,255,.15);border-radius:12px;padding:11px;color:#fff;font-weight:800}.wn-b button.on{background:#c9a24a;border-color:#c9a24a}
.wn-g{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:rgba(255,255,255,.08);border-radius:12px;overflow:hidden;margin-top:12px}.wn-g div{background:#111b2e;padding:10px}.wn-g small{display:block;font-size:11px;color:#9fb0c8}.wn-g b{font-size:16px}
.wc{background:var(--paper);border-radius:14px;box-shadow:var(--lift);padding:12px 14px;margin-bottom:8px}.wc small{font-size:11.5px;color:var(--mute);font-weight:700}
.wc .jp{font-size:15.5px;line-height:1.9;margin:4px 0}.wc mark{background:#fbe8b8;border-radius:3px;padding:0 2px}.wc a{font-size:12.5px;font-weight:800;color:var(--gold)}
.wc-tag{display:inline-block;background:rgba(231,195,122,.16);color:var(--gold);font-weight:800;border-radius:999px;padding:5px 12px;font-size:13px}
.kn{margin-top:10px;display:flex;flex-wrap:wrap;gap:6px}.kn small{width:100%;font-size:11.5px;color:var(--mute);font-weight:700}
.kn a{font-size:13px;background:var(--paper2);border-radius:999px;padding:4px 10px;font-weight:700}
/* 数据看板 */
.db-k{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-bottom:12px}.db-k div{background:#111b2e;color:#9fb0c8;border-radius:12px;padding:8px 4px;text-align:center;font-size:10.5px}
.db-k b{display:block;font-size:17px;color:#ffd36b}
.db{margin-bottom:12px}.db h3{margin-top:0}
.db-r{display:grid;grid-template-columns:86px 1fr 30px;align-items:center;gap:8px;font-size:13px;padding:3px 0}.db-r i{height:12px;border-radius:6px}.db-r b{font-size:12px;color:var(--mute)}
.db-l{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px dashed var(--hair);font-size:14px}

.kn a.g{background:rgba(217,138,168,.18);color:#a4476e}
.mk{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.mk small{width:100%;font-size:11.5px;color:var(--mute);font-weight:700}
.mk button{background:var(--paper);box-shadow:var(--lift);border-radius:10px;padding:6px 12px;font-size:13px;font-weight:700}.mk button.on{background:rgba(231,195,122,.16);color:var(--gold)}
.wc-a{font-size:12.5px;font-weight:800;color:var(--gold)}

.au{background:linear-gradient(135deg,#1b2a48,#0d1628);border-radius:16px;padding:12px;margin-bottom:10px;color:#c9d3e3;font-size:12.5px}
.au span{display:block;margin-bottom:6px;font-weight:700}.au audio{width:100%}
.bk-l{display:block;font-size:11.5px;color:#5f8fd0;font-weight:800;margin-bottom:2px}

/* 首页主视觉 */
.hero{margin:-16px -16px 0;min-height:min(178vw,860px);background:#050a15 url(img/hero.jpg) center top/cover no-repeat;position:relative;display:flex;align-items:flex-end;color:#fff}
.hero:after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(5,10,21,.15) 0%,rgba(5,10,21,0) 35%,rgba(5,10,21,.7) 72%,#050a15 100%)}
.hero-in{position:relative;z-index:1;padding:0 22px 26px;width:100%;text-align:center}
.hero small{font-size:11.5px;letter-spacing:3px;color:#e9d39a}
.hero h1{font:400 42px/1.15 "Hiragino Mincho ProN","Songti SC",serif;letter-spacing:4px;margin:8px 0 4px;text-shadow:0 0 18px rgba(0,0,0,.6)}
.hero h1 em{font-style:normal;background:linear-gradient(180deg,#fff1c4,#e0b25a);-webkit-background-clip:text;background-clip:text;color:transparent}
.hero-en{font-size:9.5px;letter-spacing:3px;color:#b9c4d6}
.hero-t{font:600 19px/1.6 "Songti SC",serif;margin:16px 0 6px}.hero-s{font-size:12.5px;color:#c9d3e3;margin-bottom:16px}
.hero-b{display:block;margin:10px auto 0;max-width:320px;border-radius:999px;padding:13px;font-weight:800;font-size:15.5px;background:rgba(16,24,40,.6);border:1px solid rgba(255,255,255,.2);backdrop-filter:blur(6px)}
.hero-b.w{background:var(--paper);color:#0b1220}.hero-b.g{border-color:rgba(255,211,107,.5);color:#ffd36b}
.hero-k{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:18px}.hero-k div{background:rgba(16,24,40,.62);border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:7px 2px;font-size:10.5px;color:#9fb0c8}
.hero-k b{display:block;font-size:17px;color:#ffd36b}
#bigmap{margin-top:0}
/* 车站插画 */
.st-hero{height:220px;border-radius:18px 18px 0 0;background:center/cover no-repeat;margin-bottom:-24px;box-shadow:var(--lift)}
.stamp.pic{background:center/cover no-repeat;color:#fff;border-color:#fff3c4;text-shadow:0 1px 6px rgba(0,0,0,.8)}.stamp.pic:before{border-color:#fff3c4;opacity:.8}
/* 列车种别 */
.tr{background:var(--paper);border-radius:18px;box-shadow:var(--lift);overflow:hidden;margin-top:14px}
.tr-img{height:170px;background:center/cover no-repeat;display:flex;flex-direction:column;justify-content:flex-end;padding:12px 16px;color:#fff;text-shadow:0 1px 8px rgba(0,0,0,.8)}
.tr-img b{font:700 24px "Hiragino Mincho ProN",serif;letter-spacing:3px}.tr-img span{font-size:13px;color:#ffe3a1;font-weight:700}
.tr p{font-size:13.5px;color:var(--mute2);padding:10px 16px 0}
.tr-lv{display:flex;gap:8px;padding:10px 16px 14px}.tr-lv a{flex:1;text-align:center;border-radius:10px;padding:8px 0;font-weight:900;background:var(--c);color:#fff}

/* ===== 夜空统一风格 + 电脑宽屏 ===== */
body{background:#060b16 radial-gradient(1200px 700px at 70% -10%,rgba(80,110,190,.22),transparent 60%),radial-gradient(900px 600px at 0% 40%,rgba(120,80,170,.14),transparent 60%);background-attachment:fixed;color:var(--ink)}
body:before{content:'';position:fixed;inset:0;pointer-events:none;z-index:0;opacity:.5;background-image:radial-gradient(1px 1px at 12% 18%,#fff,transparent),radial-gradient(1px 1px at 72% 34%,#fff,transparent),radial-gradient(1px 1px at 38% 72%,#fff,transparent),radial-gradient(1.5px 1.5px at 88% 82%,#ffe9b0,transparent),radial-gradient(1px 1px at 22% 88%,#fff,transparent),radial-gradient(1px 1px at 55% 12%,#fff,transparent);background-size:420px 420px}
header,main,footer{position:relative;z-index:1}
header{background:rgba(6,11,22,.72);border-bottom:1px solid rgba(255,255,255,.06)}
.brand b{color:#fff;font-family:"Hiragino Mincho ProN","Songti SC",serif;letter-spacing:2px}
.logo{background:linear-gradient(135deg,#f6e2a8,#c9a24a);color:#0b1220;box-shadow:none}
.hbtn{background:rgba(255,255,255,.08);color:#fff;box-shadow:none;border:1px solid rgba(255,255,255,.12)}
main{max-width:1180px}
h2,h3{color:#fff}
.back{color:var(--mute)}
.btn{color:var(--ink)}
.cr{border-color:rgba(255,255,255,.12);color:var(--mute)}.cr b{color:var(--gold)}
/* 主视觉、地图铺满屏幕宽度 */
.hero,#bigmap{width:100vw;margin-left:calc(50% - 50vw)!important;margin-right:0}
.hero{margin-top:-16px;background-position:center 30%}
.mapwrap{height:min(118vw,760px)}
/* 首页下面的内容 */
.hrow{display:grid;gap:14px;margin-top:18px}
.lines{display:grid;gap:0 14px}
.ic{margin-top:0}
.tt{margin-top:0;background:var(--paper);border:1px solid rgba(255,255,255,.07)}
.kb a{background:linear-gradient(145deg,rgba(32,48,82,.85),rgba(12,20,36,.9))}
.sign{background:rgba(255,255,255,.96);color:#1c2333}.sign small{color:#6b7385}.sign .yomi{color:#1c2333}
.kc .kana,.wd b,.vw-w b{color:#fff}
.opt{color:var(--ink)}
.wl-kw{color:var(--ink)}.wl-kw::placeholder{color:var(--mute)}
.wl-f select{color:var(--ink)}
.db-k div,.wn{border:1px solid rgba(255,255,255,.07)}
.ex-q,.qbox,.gm,.vw,.wc,.wl-r,.bk-card,.bk-mode,.tr,.line,.card,.kc,.wd{border:1px solid rgba(255,255,255,.06)}
.stamp{background:rgba(255,255,255,.04)}
.mk button,.wl-hide button,.wl-f button{color:var(--ink)}
u.kw{color:inherit}
rt{color:var(--mute2)}
@media (min-width:860px){
  main{padding:24px 32px 40px}
  .hero{min-height:92vh;margin-top:-24px;align-items:center}
  .hero-in{max-width:820px;margin:0 auto;padding-top:120px}
  .hero h1{font-size:64px}.hero-t{font-size:24px}
  .hero-b{display:inline-block;margin:10px 6px 0;min-width:220px;max-width:none}
  .hero-k{max-width:640px;margin:26px auto 0}.hero-k b{font-size:24px}
  .mapwrap{height:82vh}
  .mhead{left:48px;top:32px}.mhead b{font-size:44px}
  .mstat{left:auto;right:32px;bottom:32px;width:420px}
  .hrow.top{grid-template-columns:1fr 1fr}
  .kb{grid-template-columns:repeat(3,1fr)}
  .kb a{padding:22px}.kb b{font-size:19px}
  .lines{grid-template-columns:1fr 1fr}
  .bk-grid{grid-template-columns:repeat(4,1fr)}
  .tr-wrap{display:grid;grid-template-columns:1fr 1fr;gap:16px}
  .wl{display:grid;grid-template-columns:1fr 1fr;gap:0 10px}
  .vgrid2{display:grid;grid-template-columns:1fr 1fr;gap:0 10px}
  .st-hero{height:360px}
  .ex-wrap{max-width:820px;margin:0 auto}
}

@media (min-width:860px){#app.narrow{max-width:820px;margin:0 auto}}

.hero-b.w{background:#fff!important;color:#0b1220!important}
