:root{--ink:#173e46;--paper:#f5f2e9;--line:#cad4d0;--muted:#486069;--focus:#9a4c00}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:1rem/1.65 system-ui,"Microsoft JhengHei",sans-serif}a{color:#16576c;text-underline-offset:.2em}button,input,select{font:inherit}button{min-height:44px;border:1px solid #245966;border-radius:.5rem;padding:.55rem .9rem;background:#245966;color:white;cursor:pointer}button:hover{background:#173e46}button:disabled{color:#486069;background:#e1e7e4;border-color:#8a999c;cursor:default}button[aria-pressed=true]{box-shadow:inset 0 -4px #dfbd81}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--focus);outline-offset:3px}input,select{min-height:44px;border:1px solid #68818a;border-radius:.5rem;background:white;padding:.55rem;color:var(--ink);width:100%;min-width:0}input[type=checkbox]{width:20px;height:20px;min-height:20px;accent-color:#245966;flex:none}input[type=range]{padding:0;accent-color:#245966}label{display:block;font-weight:600;margin:.3rem 0}header{background:var(--ink);padding:1rem max(1rem,calc((100vw - 1440px)/2));display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}.brand{display:flex;align-items:center;gap:.8rem;color:white;font-size:1.35rem;font-weight:650;text-decoration:none}.brand small{display:block;font-size:.8rem;font-weight:400}.seal{border:1px solid #d8b983;color:#e3c796;padding:0 .6rem;font:1.8rem/1.5 serif}.language{display:flex;gap:.5rem}.language button{border-color:#ddd;background:transparent}main{max-width:1440px;margin:auto;padding:1.5rem}.page-intro{max-width:1000px;margin-bottom:1.5rem}h1{font:700 2.6rem/1.3 serif;margin:.3rem 0}h2{font-size:1.2rem;margin:.3rem 0}h3{font-size:1.05rem;margin:.5rem 0}p{margin:.5rem 0}.eyebrow{font-size:.85rem;letter-spacing:.12em;color:#795619;font-weight:700}.notice{border-left:4px solid #9b793d;padding:.45rem .8rem;background:#ece7d7}.timeline-bar{background:#173e46;color:#fff;border-radius:1rem;padding:1.2rem}.time-top,.panel-heading{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}#year-output{font:700 2.8rem/1.2 Georgia,serif;margin-right:1rem}#year-context{color:#ebdab8}.play-controls,.milestones,.map-tools,.reader-actions{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}.play-controls button{border-color:#bbcaca}.inline{display:flex;align-items:center;gap:.5rem}.inline select{width:5rem}.time-extents{display:flex;justify-content:space-between;font-size:.85rem}.milestones{margin-top:.75rem}.milestones button{min-height:36px;font-size:.9rem;padding:.25rem .6rem;border-color:#91adb0;background:#224e55}.milestones button[aria-current=true]{background:#dfbd81;color:#173e46;border-color:#dfbd81}.filters{display:grid;grid-template-columns:1.2fr 1fr .8fr 1.2fr;gap:1rem;margin:1.2rem 0}.toggles label{display:flex;gap:.5rem;align-items:center;font-weight:400;font-size:.9rem}.workspace{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(320px,1fr);gap:1rem;align-items:start}.map-panel,.detail-panel,.reader,.method{background:white;border:1px solid var(--line);border-radius:.8rem;padding:1rem;min-width:0}.map-panel{padding-bottom:.5rem}.map-tools button{padding:.2rem .6rem}.small,.credit{font-size:.88rem;color:var(--muted)}#map-container{background:#e2ecee;border:1px solid var(--line);border-radius:.6rem;overflow:hidden}#map{display:block;width:100%;height:auto;touch-action:pan-y;cursor:grab}#map.dragging{cursor:grabbing;touch-action:none}#land path{fill:#f0edde;stroke:none}.grid-line{stroke:#8da3a5;stroke-width:1;opacity:.3;fill:none;stroke-dasharray:3 5}.grid-label{font-size:13px;fill:#536a73}.marker{cursor:pointer}.marker .city-dot{stroke:#fff;stroke-width:2;vector-effect:non-scaling-stroke}.marker .outline{fill:none;stroke:#173e46;stroke-width:1;vector-effect:non-scaling-stroke}.marker text{font:15px system-ui,"Microsoft JhengHei",sans-serif;fill:#153d46;paint-order:stroke;stroke:#faf8ee;stroke-width:4;stroke-linejoin:round}.marker .event-ring{fill:none;stroke:#985d13;stroke-width:3;vector-effect:non-scaling-stroke}.marker.selected .outline{stroke:#101f28;stroke-width:4}.marker:focus-visible .outline{stroke:#9a4c00;stroke-width:4}.marker.filtered{display:none}.marker .city-dot.han{fill:#655740}.marker .city-dot.dong{fill:#92530c}.marker .city-dot.liguo{fill:#85593b}.marker .city-dot.hanfu{fill:#547b6f}.marker .city-dot.yuanshao{fill:#735899}.marker .city-dot.yuanshu{fill:#946c14}.marker .city-dot.lubu{fill:#985269}.marker .city-dot.taoqian{fill:#6e7650}.marker .city-dot.liubiao{fill:#337887}.marker .city-dot.liuzhang{fill:#53684c}.marker .city-dot.zhanglu{fill:#80634b}.marker .city-dot.zhangxiu{fill:#866331}.marker .city-dot.gongsun{fill:#617873}.marker .city-dot.liaodong{fill:#6a6d91}.marker .city-dot.wei{fill:#255b9e}.marker .city-dot.shu{fill:#a74538}.marker .city-dot.wu{fill:#257462}.marker .city-dot.jin{fill:#765093}.marker .city-dot.unknown{fill:#65727a}.legend{display:flex;gap:.4rem .8rem;flex-wrap:wrap;margin:.8rem 0}.legend-item{display:flex;gap:.35rem;align-items:center;font-size:.85rem}.legend-dot{width:13px;height:13px;border:1px solid #173e46;border-radius:50%}.city-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.4rem}.city-list button{background:#f0f4f0;color:var(--ink);font-size:.9rem;text-align:left}.detail-panel{max-height:none}.detail-panel .city-name{font:700 1.6rem/1.4 serif}.status-badge,.source-badge,.novel-badge{display:inline-block;font-size:.85rem;font-weight:600;padding:.2rem .5rem;border-radius:.3rem;background:#eaf0eb}.novel-badge{background:#f4e8d2;color:#775115}.source-badge{background:#e2edf4;color:#255570}.event-detail{border-top:1px solid var(--line);padding-top:1rem;margin-top:1rem}.event-button{background:#edf3ee;color:var(--ink);text-align:left;width:100%;margin:.3rem 0}.event-button:hover{color:white}.event-button[aria-current=true]{border:2px solid #173e46;background:#dfece8;color:#173e46}.source-text{font-family:serif;white-space:pre-wrap;line-height:1.9;max-height:320px;overflow:auto;border-left:3px solid #a3b8ba;padding:.5rem .8rem}.event-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}.event-card{background:white;border:1px solid var(--line);border-radius:.6rem;padding:1rem;display:flex;flex-direction:column;gap:.4rem}.event-card button{margin-top:auto;text-align:left;background:#edf3ee;color:var(--ink)}.event-card button:hover{background:#245966;color:white}.event-card .year{font:700 1.5rem Georgia,serif;color:#80591f}.events-section{margin:1.5rem 0}#more-events{margin-top:.8rem}.reader{margin-top:1.5rem}.voice-settings{display:grid;grid-template-columns:2fr 1fr;gap:1rem;max-width:700px;margin-top:.8rem}.method{margin-top:1rem}summary{min-height:44px;cursor:pointer;font-weight:650;padding:.5rem 0}details{margin:.6rem 0}footer{max-width:1440px;margin:auto;padding:1.5rem;font-size:.9rem}.skip{position:absolute;top:-10rem;left:1rem;z-index:99;padding:.8rem;background:white}.skip:focus{top:1rem}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}[hidden]{display:none!important}.empty{padding:1rem;border:1px dashed #8a999c;border-radius:.5rem}.warning{border-left:3px solid #9b793d;padding:.5rem .8rem;background:#faf0db}
@media(max-width:1000px){.workspace{grid-template-columns:1fr}.filters{grid-template-columns:1fr 1fr}.event-list{grid-template-columns:1fr 1fr}.detail-panel{max-height:none}}@media(max-width:600px){main{padding:1rem}h1{font-size:2rem}.filters,.event-list,.voice-settings{grid-template-columns:1fr}.timeline-bar{padding:1rem}.workspace{gap:.8rem}#year-output{font-size:2.3rem}.map-panel{padding:.7rem}.city-list{grid-template-columns:1fr}.marker text{font-size:18px}.reader-actions button{flex:1;min-width:40%}.play-controls{align-items:stretch}#map{touch-action:pan-y}.map-tools button{min-width:44px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}@media(forced-colors:active){.legend-dot,.city-dot{fill:Canvas!important;border:1px solid CanvasText}.marker text{stroke:Canvas;fill:CanvasText}.outline{stroke:CanvasText!important}.status-badge{border:1px solid CanvasText}}@media print{.play-controls,.filters,.map-tools,.reader,.language,.milestones{display:none}.workspace{display:block}.map-panel,.detail-panel{break-inside:avoid}.event-list{display:block}body{background:white}}
