@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+TC:wght@500;600;700&display=swap');
:root{color-scheme:light;--ink:#23372e;--muted:#7d8171;--paper:#f6f3e9;--line:#dedccf;--gold:#b08b46;--green:#294c3b;--serif:'Noto Serif TC','PMingLiU',Georgia,serif;--sans:system-ui,-apple-system,'Microsoft JhengHei',sans-serif}
*{box-sizing:border-box}body{margin:0;background:#eae9df;color:var(--ink);font:14px/1.6 var(--sans)}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{opacity:.45;cursor:not-allowed}button:focus-visible,a:focus-visible{outline:3px solid #b88d41;outline-offset:3px}button{color:inherit}a{color:inherit}h1,h2,h3,p{margin:0}h1,h2,h3{font-family:var(--serif);font-weight:600}h2{font-size:22px}h3{font-size:17px}small{font-size:11px}.app{max-width:1260px;margin:auto;padding:0 32px}.masthead{display:flex;align-items:center;justify-content:space-between;height:106px;border-bottom:1px solid #cdcebf}.brand{display:flex;gap:14px;align-items:center;text-decoration:none}.brand .crest{font:48px/1 Georgia;color:#6b774b;border-right:1px solid #c7c6b3;padding-right:18px}.brand small{display:block;font:9px/1.8 Georgia;letter-spacing:2.2px;color:#92917b}.brand strong{font:700 29px/1.3 var(--serif);letter-spacing:5px}.top-actions{display:flex;align-items:center;gap:20px}.prototype{font-size:11px;letter-spacing:1px;color:#838371}.icon-button{border:1px solid var(--line);background:transparent;border-radius:50%;width:36px;height:36px;font-size:21px;display:inline-grid;place-items:center}.realm-strip{display:flex;justify-content:space-between;align-items:center;padding:13px 0;color:#6d7564;font-size:12px;gap:10px}.realm-strip>div{display:flex;gap:10px;align-items:center}#city-name{font-weight:600;color:var(--green)}#level-tag{color:#9a7a40;font:11px Georgia;letter-spacing:1px}.live-dot{width:6px;height:6px;border-radius:50%;background:#71834a;box-shadow:0 0 0 4px #71834a18}.quiet-button{border:0;background:transparent;font-size:11px;padding:7px 0;color:#77806b}.resources{display:grid;grid-template-columns:1fr 1fr;background:var(--paper);border:1px solid var(--line);margin-bottom:22px}.resource{padding:17px 23px;display:grid;grid-template-columns:38px 1fr;gap:14px}.resource+ .resource{border-left:1px solid var(--line)}.resource-icon{font:36px Georgia;align-self:center}.food{color:#9f9859}.wood{color:#6b7754}.resource-head{display:flex;align-items:baseline;justify-content:space-between;font-size:12px;gap:8px}.resource-head strong{font:25px Georgia;letter-spacing:.3px;color:#3f4836;font-variant-numeric:tabular-nums}.resource-track{height:3px;background:#e4e1d3;margin:9px 0 6px}.resource-track i{display:block;height:100%;background:#aaa15d;max-width:100%;transition:width .8s linear}.wood-track i{background:#71866c}.resource-meta{display:flex;justify-content:space-between;gap:5px;font-size:10px;color:#8d8e7b}.layout{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:24px;align-items:start}.main-column{min-width:0}.sidebar{display:flex;flex-direction:column;gap:18px}.panel{background:var(--paper);border:1px solid var(--line);padding:21px}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.eyebrow{font:9px Georgia;letter-spacing:2px;color:#98977f}.small-tag{font:11px Georgia;color:#8d876b}.panel h2{margin:5px 0 17px}.empty-work{font-size:12px;color:#8a8c7a;padding:16px 0 10px;border-top:1px solid var(--line)}.queue-item{border-top:1px solid var(--line);padding:12px 0}.queue-item:last-child{padding-bottom:0}.queue-label{display:flex;justify-content:space-between;gap:8px;font-size:12px}.queue-label strong{font-weight:500}.queue-label time{color:#9a7a40;font:12px Georgia}.job-track{height:3px;background:#e2dfd2;margin-top:9px}.job-track i{display:block;height:100%;background:#87906a;max-width:100%}.quest{padding:12px 0;border-top:1px solid var(--line);display:flex;gap:10px;align-items:center}.quest-symbol{font:22px Georgia;color:#a59162}.quest div{flex:1}.quest strong{display:block;font-size:12px;font-weight:500}.quest p{font-size:10px;color:#90917e}.quest button{background:transparent;border:1px solid #bab498;color:#847247;padding:4px 8px;font-size:11px}.quest.done{opacity:.5}.counsel{display:flex;gap:12px;padding:5px 14px;font-size:11px;color:#8c8e7d}.counsel>span{font:28px Georgia;color:#a3a48b}.bottom-nav{margin:25px 0 0;background:#203d30;display:grid;grid-template-columns:repeat(5,1fr);border:1px solid #314d3d}.bottom-nav button{display:flex;align-items:center;justify-content:center;gap:10px;padding:15px 5px;border:0;border-right:1px solid #ffffff0d;background:transparent;color:#a3b29a;font-size:12px;letter-spacing:2px}.bottom-nav button>span{font:23px Georgia}.bottom-nav button.active{background:#314d3b;color:#e7d8a7;box-shadow:inset 0 2px #b69a60}.bottom-nav button:hover{background:#314d3b}.footnote{display:flex;justify-content:space-between;padding:14px 0 22px;font-size:10px;color:#999984;letter-spacing:1px}.page-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 14px}.page-heading h1{font-size:24px;letter-spacing:2px;margin:3px 0}.page-heading p{color:#8c907b;font-size:11px}.text-action{padding:8px 0;border:0;background:transparent;color:#8d794c;font-size:11px;white-space:nowrap}.city-stage{aspect-ratio:1.06;position:relative;overflow:hidden;background:#718262;border:1px solid #6e7b5a;isolation:isolate}.city-terrain{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.scene-title{position:absolute;left:17px;top:16px;z-index:2;color:#f3efd4;text-shadow:0 1px 4px #283e32}.scene-title strong{display:block;font:17px var(--serif);letter-spacing:3px}.scene-title span{font-size:9px;color:#e2e4cd;letter-spacing:2px}.scene-compass{position:absolute;top:15px;right:17px;color:#ede9c9;font:26px Georgia;text-align:center;z-index:2}.scene-compass small{display:block;font:9px Georgia;letter-spacing:2px}.building{position:absolute;transform:translate(-50%,-65%);width:18%;padding:0;border:0;background:transparent;z-index:3;display:flex;flex-direction:column;align-items:center;filter:drop-shadow(0 9px 6px #253e3145);transition:filter .15s}.building:hover,.building:focus-visible{filter:drop-shadow(0 0 8px #f7e8b8)}.building.keep{width:29%;z-index:4;transform:translate(-50%,-52%)}.building.wall{width:25%;transform:translate(-50%,-35%)}.building svg{width:100%;height:auto;overflow:visible}.building-label{white-space:nowrap;font-size:10px;display:flex;gap:6px;align-items:center;background:#203e30dc;color:#ece7d1;padding:3px 8px;border:1px solid #bdad744d;margin-top:-3px}.building-label i{font:10px Georgia;color:#d7c38d}.building .working{position:absolute;top:12%;font-size:10px;background:#e3c980;color:#3c452f;padding:2px 6px;white-space:nowrap;box-shadow:0 2px 6px #213d3355}.scene-bottom{position:absolute;bottom:12px;left:15px;right:15px;display:flex;justify-content:space-between;color:#f1e8c9;font-size:10px;text-shadow:0 1px 3px #1c3325;z-index:5;pointer-events:none}.scene-caption{border:1px solid var(--line);border-top:0;padding:12px 16px;background:var(--paper);color:#858771;font-size:11px;display:flex;justify-content:space-between;gap:8px}.summary-row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:18px}.mini-stat{border-bottom:1px solid #cbcdbd;padding:8px 0 14px}.mini-stat span{color:#8a8e78;font-size:11px}.mini-stat strong{display:block;font:25px Georgia;color:#576348}.mini-stat small{font-size:10px;color:#92947d}.stack{display:flex;flex-direction:column;gap:14px}.unit-card{background:var(--paper);border:1px solid var(--line);padding:19px;display:grid;grid-template-columns:48px 1fr;gap:15px}.unit-emblem{background:#e7e6d6;width:48px;height:56px;display:grid;place-items:center;color:#72805a;font:34px Georgia;clip-path:polygon(0 0,100% 0,100% 75%,50% 100%,0 75%)}.unit-title{display:flex;justify-content:space-between;align-items:center;gap:10px}.unit-title span{font-size:11px;color:#99804c}.unit-card p{font-size:12px;color:#838771;margin:7px 0 12px}.action-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.primary-button,.secondary-button,.danger-button{padding:10px 17px;border:1px solid #314f39;background:#314f39;color:#f5efd9;font-size:12px;letter-spacing:.5px}.primary-button:hover{background:#426348}.secondary-button{background:transparent;color:#65704f;border-color:#c3c5b1}.danger-button{background:#804e3a;border-color:#804e3a;color:#fff2df}.count-input{width:78px;padding:8px;background:#fbf9f0;color:var(--ink);border:1px solid #cccdbd;border-radius:0}.field{display:flex;flex-direction:column;gap:6px;margin:12px 0}.field label{font-size:12px;color:#7c826e}input,textarea,select{max-width:100%;background:#fbf9f0;color:var(--ink);border:1px solid #c8c9b9;padding:10px;border-radius:0}input:focus,textarea:focus,select:focus{outline:2px solid #a3ae87;outline-offset:1px}textarea{resize:vertical;width:100%}.cost{font-size:11px;color:#8c835e;margin:10px 0 14px}.hint{font-size:12px;color:#878a77;margin:12px 0}.notice{padding:12px 14px;background:#e9e7d6;border-left:2px solid #a9a17a;color:#787857;font-size:12px}.world-toolbar{display:flex;align-items:center;justify-content:space-between;background:var(--paper);padding:9px 13px;border:1px solid var(--line);font-size:11px;color:#7a826b}.map-viewport{height:510px;overflow:auto;position:relative;border:1px solid #5c7350;background:#607a51;scrollbar-width:thin;scrollbar-color:#a4ab80 #5d7350}.map-grid{display:grid;grid-template-columns:repeat(20,86px);width:max-content;background:#647b4f;gap:1px;padding:6px}.map-tile{width:86px;height:86px;position:relative;display:flex;flex-direction:column;justify-content:center;align-items:center;border:0;background:#738752;color:#e4e4c7;padding:0;overflow:hidden}.map-tile:nth-child(3n){background:#6b804f}.map-tile:nth-child(7n){background:#7f8e58}.map-tile:hover,.map-tile:focus-visible{box-shadow:inset 0 0 0 3px #dbcd92;z-index:2}.map-tile img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}.map-tile .tile-icon{font:36px Georgia;text-shadow:2px 4px #3d593b66}.map-tile .tile-name{position:absolute;bottom:3px;left:3px;right:3px;font-size:9px;background:#213b27bd;text-align:center;line-height:1.5;color:#f2ebcb}.map-tile.home{box-shadow:inset 0 0 0 2px #e0cf8d}.map-tile.home img{outline:2px solid #d0b574;outline-offset:-2px}.map-tile.empty{color:#3b613c}.map-legend{display:flex;gap:16px;flex-wrap:wrap;padding:10px 0;color:#828772;font-size:10px}.report{padding:14px 0;border-top:1px solid var(--line)}.report strong{font:500 14px var(--serif)}.report small{display:block;color:#969681;font-size:10px;margin:4px 0}.report p{font-size:12px;color:#79816c}.report-list{margin-top:20px}.mission-row{padding:12px;background:var(--paper);border:1px solid var(--line);margin-bottom:8px}.mission-row header{display:flex;justify-content:space-between;font-size:12px}.mission-row p{font-size:11px;color:#92917a;margin-top:5px}.chat-log{display:flex;flex-direction:column;gap:15px;max-height:310px;overflow:auto;margin:20px 0}.chat-message small{display:block;color:#969178;font-size:10px;margin-bottom:4px}.chat-message p{font-size:13px;padding:9px 12px;background:#e9e9dd}.chat-compose{display:flex;gap:8px}.chat-compose input{flex:1;min-width:0}.alliance-banner{padding:35px 22px;background:#244733;color:#eae4c5;text-align:center;border:1px solid #4a6040}.alliance-banner .banner-icon{font:58px Georgia;color:#c3b17b}.alliance-banner h2{letter-spacing:4px;margin:8px 0}.alliance-banner p{font-size:12px;color:#acbea1}.alliance-banner button{margin-top:20px;background:#d4c48d;color:#314735;border-color:#d4c48d}.alliance-banner .eyebrow{color:#99b08f}.plain-panel{padding:22px;background:var(--paper);border:1px solid var(--line)}dialog{width:min(500px,calc(100% - 28px));max-height:88dvh;overflow:auto;border:1px solid #c1b48b;padding:25px;background:#f5f2e7;color:var(--ink);box-shadow:0 24px 100px #12241c50}dialog::backdrop{background:#13281dd0;backdrop-filter:blur(4px)}.dialog-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}dialog h2{font-size:25px;margin-bottom:12px}dialog p{font-size:13px;color:#7b826a}dialog hr{border:0;border-top:1px solid var(--line);margin:20px 0}.dialog-preview{display:grid;place-items:center;padding:10px;background:#e6e7d7;margin:12px 0}.dialog-preview svg{height:130px}.exterior-preview{display:block;width:176px;height:176px;object-fit:cover;margin:auto;border:1px solid #a3a781;image-rendering:auto}.castle-viewer{background:#dee2cb;padding:23px 10px;margin:15px 0}.castle-viewer p{text-align:center;margin-top:10px;font-size:12px}.castle-picker{display:flex;justify-content:center;align-items:center;gap:15px;margin-top:14px}.slot-item{border-top:1px solid var(--line);padding:15px 0;display:flex;align-items:center;justify-content:space-between;gap:10px}.slot-item strong{display:block;font-size:13px}.slot-item small{color:#8b8e77;font-size:11px}.current-slot{color:#9a7a40}.toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);max-width:calc(100% - 30px);background:#203d30;color:#f3e9c8;padding:12px 22px;border:1px solid #8c966c;box-shadow:0 4px 24px #10281d40;z-index:20;font-size:13px}.toast[hidden]{display:none}.subheading{font-size:15px;margin:22px 0 12px}.text-muted{color:#96967d;font-size:11px}.army-fields{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.army-fields label{display:block;font-size:12px;margin-bottom:5px}.army-fields input{width:100%}.battle-preview{padding:12px;background:#e7e8d8;margin:15px 0;font-size:12px;color:#75805f}.battle-preview strong{color:#48603e}.file-input{width:100%;font-size:12px}.storage-error{color:#9b4c38!important}.join-note{margin-top:13px;font-size:11px;color:#81856e}.filter-row{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.filter-row button{border:1px solid #c6c7b4;background:transparent;padding:6px 12px;color:#81866d;font-size:11px}.filter-row button.active{background:#dce0cb;color:#3c553a}.army-card-progress{margin-top:12px;font-size:11px;color:#8c825c}
@media(min-width:1000px){.layout{min-height:650px}.bottom-nav{width:calc(100% - 314px);margin-top:10px}}
@media(max-width:800px){.app{padding:0 18px}.layout{grid-template-columns:minmax(0,1fr) 245px;gap:16px}.panel{padding:16px}.resource{padding:14px 16px}.masthead{height:90px}.brand strong{font-size:26px}.city-stage{aspect-ratio:.86}.building{width:22%}.building.keep{width:32%}.building-label{font-size:9px;padding:2px 5px}}
@media(max-width:640px){body{font-size:14px}.app{padding:0 14px}.masthead{height:80px}.brand{gap:10px}.brand .crest{font-size:39px;padding-right:12px}.brand strong{font-size:23px;letter-spacing:4px}.brand small{font-size:7px;letter-spacing:1.2px}.top-actions{gap:8px}.prototype{font-size:9px;letter-spacing:0}.realm-strip{padding:9px 0}.resources{margin-bottom:17px}.resource{padding:12px 10px;gap:7px;grid-template-columns:25px 1fr}.resource-icon{font-size:26px}.resource-head strong{font-size:22px}.resource-head{font-size:11px}.resource-meta{font-size:9px}.layout{display:flex;flex-direction:column;gap:18px}.main-column,.sidebar{width:100%}.page-heading h1{font-size:22px}.page-heading{margin-bottom:11px}.city-stage{aspect-ratio:.95}.building{width:21%}.building.keep{width:32%}.building-label{font-size:9px;padding:2px 5px;gap:4px}.building.wall{width:24%}.scene-title strong{font-size:15px}.scene-title span{font-size:8px}.scene-compass{font-size:22px}.scene-caption{font-size:10px;padding:10px}.sidebar{gap:14px}.command-panel{order:0}.quest-panel{order:1}.counsel{display:none}.panel h2{font-size:19px;margin-bottom:10px}.bottom-nav{position:sticky;bottom:0;z-index:10;margin:18px -14px 0;padding-bottom:env(safe-area-inset-bottom);border-left:0;border-right:0}.bottom-nav button{flex-direction:column;gap:3px;padding:10px 2px;font-size:10px;letter-spacing:1px;min-height:60px}.bottom-nav button>span{font-size:23px}.footnote{font-size:8px;letter-spacing:0;gap:8px;padding-bottom:12px}.map-viewport{height:425px}.toast{bottom:90px}.primary-button,.secondary-button,.danger-button{min-height:42px}.count-input{font-size:16px}input,select,textarea{font-size:16px}.unit-card{padding:16px;grid-template-columns:40px 1fr;gap:12px}.unit-emblem{width:40px;height:49px;font-size:29px}.unit-title h3{font-size:16px}.unit-card p{font-size:11px}.action-row{gap:7px}.summary-row{gap:12px}.mini-stat strong{font-size:23px}.mini-stat span{font-size:10px}.chat-compose button{padding:9px 12px}dialog{padding:21px}.army-fields{gap:7px}.small-tag{font-size:10px}.empty-work{padding:10px 0}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
