:root{--c-bg: #f5f6fa;--c-surface: #ffffff;--c-primary: #e74c3c;--c-primary-light: #fde8e8;--c-success: #2ecc71;--c-warning: #f39c12;--c-danger: #e74c3c;--c-info: #3498db;--c-text: #2c3e50;--c-text-light: #7f8c8d;--c-border: #dfe6e9;--bp-sm: 480px;--bp-md: 768px;--bp-lg: 1024px;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 24px;--radius: 8px;--radius-lg: 12px;--shadow: 0 2px 8px rgba(0,0,0,.08);--shadow-lg: 0 4px 16px rgba(0,0,0,.12)}*{box-sizing:border-box;margin:0;padding:0}html,body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:14px;color:var(--c-text);background:var(--c-bg);line-height:1.5}#app{min-height:100vh}.app-shell{display:flex;flex-direction:column;min-height:100vh}.content-area{flex:1;padding:var(--sp-4)}.top-nav{display:flex;align-items:center;padding:0 var(--sp-5);height:56px;background:var(--c-surface);box-shadow:var(--shadow);position:sticky;top:0;z-index:100}.nav-logo{font-weight:700;font-size:18px;margin-right:var(--sp-5);white-space:nowrap}.nav-logo-sm{font-weight:700;font-size:16px}.nav-tabs{display:flex;gap:var(--sp-1);flex:1}.nav-tab{padding:var(--sp-2) var(--sp-4);text-decoration:none;color:var(--c-text-light);border-radius:var(--radius);transition:all .2s}.nav-tab:hover{background:var(--c-primary-light);color:var(--c-primary)}.nav-tab.active{background:var(--c-primary);color:#fff}.nav-settings{background:none;border:none;font-size:20px;cursor:pointer;padding:var(--sp-2);color:var(--c-text-light)}.bottom-tab{display:flex;position:fixed;bottom:0;left:0;right:0;height:56px;background:var(--c-surface);box-shadow:0 -2px 8px #00000014;z-index:100}.tab-item{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-decoration:none;color:var(--c-text-light);font-size:11px;gap:2px}.tab-item.active{color:var(--c-primary)}.tab-icon{font-size:20px}.mobile-header{display:flex;align-items:center;justify-content:space-between;padding:0 var(--sp-4);height:48px;background:var(--c-surface);box-shadow:var(--shadow);position:sticky;top:0;z-index:100}.mobile-header button{background:none;border:none;font-size:18px;cursor:pointer;color:var(--c-text-light)}@media (max-width: calc(var(--bp-lg) - 1px)){.top-nav{display:none}.bottom-tab,.mobile-header{display:flex}.content-area{padding-bottom:64px}}@media (min-width: var(--bp-lg)){.bottom-tab,.mobile-header{display:none}}.btn{padding:var(--sp-2) var(--sp-4);border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-surface);cursor:pointer;font-size:14px;transition:all .2s}.btn:hover{background:var(--c-bg)}.btn.primary{background:var(--c-primary);color:#fff;border-color:var(--c-primary)}.btn.primary:hover{opacity:.9}.btn.danger{background:var(--c-danger);color:#fff;border-color:var(--c-danger)}.btn.back{margin-right:var(--sp-3)}.btn:disabled{opacity:.5;cursor:not-allowed}.num-input{width:70px;padding:var(--sp-1) var(--sp-2);border:1px solid var(--c-border);border-radius:4px;font-size:14px}.w60{width:60px}.w80{width:80px}.station-card,.station-row{background:var(--c-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:var(--sp-4);cursor:pointer;transition:box-shadow .2s}.station-card:hover,.station-row:hover{box-shadow:var(--shadow-lg)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:200}.modal{background:var(--c-surface);border-radius:var(--radius-lg);padding:var(--sp-5);min-width:300px;max-width:90vw;max-height:80vh;overflow-y:auto}.modal h3{margin-bottom:var(--sp-3)}.modal-sub{color:var(--c-text-light);font-size:12px;margin-bottom:var(--sp-3)}.modal-actions{display:flex;justify-content:flex-end;gap:var(--sp-2);margin-top:var(--sp-4)}.home-header{display:flex;justify-content:space-between;align-items:center;padding:var(--sp-3) 0;flex-wrap:wrap;gap:var(--sp-2)}.datetime{display:flex;flex-direction:column}.date{font-size:16px;font-weight:600}.time{font-size:12px;color:var(--c-text-light)}.outdoor-temp{font-size:14px}.outdoor-temp strong{color:var(--c-info);font-size:20px}.temp-input{width:80px;padding:var(--sp-1);border:1px solid var(--c-border);border-radius:4px}.station-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-3);margin:var(--sp-3) 0}@media (max-width: calc(var(--bp-md) - 1px)){.station-grid{grid-template-columns:repeat(2,1fr)}}.st-name{font-weight:600;font-size:15px;margin-bottom:var(--sp-1)}.st-status{font-size:12px;margin-bottom:var(--sp-1)}.st-status.running{color:var(--c-success)}.st-status.stopped{color:var(--c-text-light)}.st-temp{font-size:14px}.st-temp strong{font-size:18px;color:var(--c-primary)}.st-temp.unrecorded{color:var(--c-text-light);font-size:13px}.station-card.recorded{border-left:3px solid var(--c-success)}.home-actions{display:flex;gap:var(--sp-3);margin:var(--sp-3) 0;flex-wrap:wrap}.record-row{display:flex;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-2)}.record-label{min-width:60px;font-weight:500}.trend-section{margin-top:var(--sp-4);background:var(--c-surface);border-radius:var(--radius-lg);padding:var(--sp-4);box-shadow:var(--shadow)}.trend-controls{display:flex;gap:var(--sp-2);margin-bottom:var(--sp-3)}.trend-controls button{padding:var(--sp-1) var(--sp-3);border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-surface);cursor:pointer}.trend-controls button.active{background:var(--c-primary);color:#fff;border-color:var(--c-primary)}.trend-chart{width:100%;height:300px}@media (max-width: calc(var(--bp-md) - 1px)){.trend-chart{height:200px}}.station-list-page h2{margin-bottom:var(--sp-4)}.station-list{display:flex;flex-direction:column;gap:var(--sp-2)}.station-row{display:flex;align-items:center;justify-content:space-between;padding:var(--sp-3) var(--sp-4)}.st-info{display:flex;align-items:center;gap:var(--sp-3)}.st-meta{display:flex;gap:var(--sp-3);color:var(--c-text-light);font-size:13px}.st-arrow{font-size:18px;color:var(--c-text-light)}.station-detail-page{max-width:900px}.detail-header{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-4);flex-wrap:wrap}.st-overview{display:flex;gap:var(--sp-4);padding:var(--sp-3);background:var(--c-surface);border-radius:var(--radius);margin-bottom:var(--sp-4);flex-wrap:wrap}.district-tabs{display:flex;gap:var(--sp-1);margin-bottom:var(--sp-3);overflow-x:auto;scrollbar-width:none}.district-tabs button{padding:var(--sp-1) var(--sp-3);border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-surface);cursor:pointer;white-space:nowrap}.district-tabs button.active{background:var(--c-primary);color:#fff;border-color:var(--c-primary)}.district-panel{background:var(--c-surface);border-radius:var(--radius-lg);padding:var(--sp-4);box-shadow:var(--shadow)}.district-panel h3{margin-bottom:var(--sp-3)}.district-panel h4{margin:var(--sp-4) 0 var(--sp-2)}.param-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--sp-3);margin-bottom:var(--sp-3)}.param-grid label{font-size:13px;color:var(--c-text-light);display:flex;align-items:center;gap:var(--sp-1);flex-wrap:wrap}.building-list{display:flex;flex-direction:column;gap:var(--sp-2)}.bld-row{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2);background:var(--c-bg);border-radius:var(--radius);flex-wrap:wrap}.bld-name{min-width:40px;font-weight:600}.bld-row label{font-size:12px;color:var(--c-text-light);display:flex;align-items:center;gap:var(--sp-1)}.bld-row input{width:60px;padding:var(--sp-1);border:1px solid var(--c-border);border-radius:4px}.log-list{max-height:200px;overflow-y:auto}.log-item{padding:var(--sp-1) 0;font-size:12px;color:var(--c-text-light);border-bottom:1px solid var(--c-border)}.log-time{margin-right:var(--sp-2)}.empty{color:var(--c-text-light);font-size:13px;padding:var(--sp-3);text-align:center}.map-page{position:relative;height:calc(100vh - 120px);min-height:400px}@media (max-width: calc(var(--bp-lg) - 1px)){.map-page{height:calc(100vh - 100px)}}.map-canvas{width:100%;height:100%}.map-toolbar{position:absolute;top:var(--sp-3);left:var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-1);z-index:10}.map-toolbar button{padding:var(--sp-2) var(--sp-3);border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-surface);cursor:pointer;font-size:13px;white-space:nowrap}.map-toolbar button.active{background:var(--c-primary);color:#fff;border-color:var(--c-primary)}.map-toolbar button:disabled{opacity:.4;cursor:not-allowed}.toolbar-sep{height:1px;background:var(--c-border);margin:var(--sp-1) 0}.layer-toggle{font-size:12px;display:flex;align-items:center;gap:var(--sp-1);padding:var(--sp-1);background:var(--c-surface);border-radius:4px}.map-station-filter{position:absolute;top:var(--sp-3);right:var(--sp-3);z-index:10;background:var(--c-surface);padding:var(--sp-2);border-radius:var(--radius);box-shadow:var(--shadow);display:flex;align-items:center;gap:var(--sp-2);font-size:13px}.map-station-filter select{padding:var(--sp-1);border:1px solid var(--c-border);border-radius:4px}.feature-panel{position:absolute;bottom:var(--sp-3);right:var(--sp-3);width:280px;background:var(--c-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);z-index:10}.panel-header{display:flex;justify-content:space-between;align-items:center;padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--c-border);font-weight:600}.panel-header button{background:none;border:none;cursor:pointer;font-size:16px}.panel-body{padding:var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-2)}.panel-body label{font-size:13px;display:flex;align-items:center;gap:var(--sp-2)}.panel-body select,.panel-body input{padding:var(--sp-1);border:1px solid var(--c-border);border-radius:4px;flex:1}.panel-body p{font-size:13px;color:var(--c-text-light)}.pipe-form,.building-form{position:absolute;bottom:var(--sp-3);left:50%;transform:translate(-50%);background:var(--c-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:var(--sp-3);z-index:20;display:flex;gap:var(--sp-2);flex-wrap:wrap;align-items:center;max-width:90%}.pipe-form label,.building-form label{font-size:12px;display:flex;align-items:center;gap:var(--sp-1)}.pipe-form select,.building-form input,.building-form select{padding:var(--sp-1);border:1px solid var(--c-border);border-radius:4px;width:80px}.pipe-form-actions,.building-form .pipe-form-actions{display:flex;gap:var(--sp-2)}.pipe-form-actions button,.building-form .pipe-form-actions button{padding:var(--sp-1) var(--sp-3);border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-surface);cursor:pointer}.pipe-form-actions button.primary,.building-form .pipe-form-actions button.primary{background:var(--c-primary);color:#fff;border-color:var(--c-primary)}.sim-page{display:flex;gap:var(--sp-4);min-height:calc(100vh - 120px)}@media (max-width: calc(var(--bp-md) - 1px)){.sim-page{flex-direction:column}}.sim-params{flex:0 0 380px;background:var(--c-surface);border-radius:var(--radius-lg);padding:var(--sp-4);box-shadow:var(--shadow);overflow-y:auto;max-height:calc(100vh - 140px)}@media (max-width: calc(var(--bp-md) - 1px)){.sim-params{flex:none;max-height:none}}.toggle-params{width:100%;padding:var(--sp-2);border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-bg);cursor:pointer;margin-bottom:var(--sp-3)}.sim-params h3{font-size:14px;margin:var(--sp-3) 0 var(--sp-2)}.param-row{display:flex;gap:var(--sp-2);flex-wrap:wrap}.param-row label{font-size:13px;display:flex;align-items:center;gap:var(--sp-1)}.param-row input{width:70px;padding:var(--sp-1);border:1px solid var(--c-border);border-radius:4px}.bld-table{display:flex;flex-direction:column;gap:var(--sp-1);max-height:300px;overflow-y:auto}.bld-row{display:grid;grid-template-columns:60px 70px 70px 70px 70px;gap:var(--sp-1);align-items:center}.bld-row.header{font-size:12px;color:var(--c-text-light);font-weight:600}.bld-row input{width:100%;padding:var(--sp-1);border:1px solid var(--c-border);border-radius:4px;font-size:13px}.bld-name{font-size:13px;font-weight:500}.pipe-info{display:flex;gap:var(--sp-2);flex-wrap:wrap;margin:var(--sp-2) 0}.pipe-tag{padding:var(--sp-1) var(--sp-2);background:var(--c-bg);border-radius:4px;font-size:12px}.run-btn{width:100%;margin-top:var(--sp-3);padding:var(--sp-3);font-size:15px;font-weight:600}.sim-results{flex:1;background:var(--c-surface);border-radius:var(--radius-lg);padding:var(--sp-4);box-shadow:var(--shadow);min-width:0}.result-controls{display:flex;gap:var(--sp-2);margin-bottom:var(--sp-3);align-items:center}.result-controls button{padding:var(--sp-1) var(--sp-3);border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-surface);cursor:pointer}.result-controls button.active{background:var(--c-primary);color:#fff}.convergence{margin-left:auto;font-size:12px;color:var(--c-text-light)}.convergence.ok{color:var(--c-success)}.result-table{overflow-x:auto}.result-table table{width:100%;border-collapse:collapse;font-size:13px}.result-table th,.result-table td{padding:var(--sp-2);text-align:left;border-bottom:1px solid var(--c-border)}.result-table th{background:var(--c-bg);font-weight:600;white-space:nowrap}.result-table .hl{background:var(--c-primary-light);font-weight:700;color:var(--c-primary)}.result-table tr.cold td:last-child{color:var(--c-info)}.result-table tr.serious_cold td:last-child{color:var(--c-info);font-weight:700}.result-table tr.hot td:last-child{color:var(--c-warning)}.result-table tr.serious_hot td:last-child{color:var(--c-danger);font-weight:700}.result-table tr.normal td:last-child{color:var(--c-success)}.sim-map{width:100%;height:400px;border-radius:var(--radius);overflow:hidden}.empty-result{text-align:center;padding:var(--sp-5);color:var(--c-text-light)}.empty-result .hint{font-size:12px}.settings-page{max-width:500px}.settings-page h2{margin-bottom:var(--sp-4)}.settings-form{display:flex;flex-direction:column;gap:var(--sp-3);background:var(--c-surface);padding:var(--sp-4);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.settings-form label{font-size:13px;color:var(--c-text-light);display:flex;flex-direction:column;gap:var(--sp-1)}.settings-form input,.settings-form select{padding:var(--sp-2);border:1px solid var(--c-border);border-radius:var(--radius);font-size:14px}.saved-msg{font-size:13px;color:var(--c-success)}.not-found{text-align:center;padding:var(--sp-5)}.not-found h1{font-size:48px;color:var(--c-text-light)}.district-chart{width:100%;height:200px;margin-top:var(--sp-3)}span.running{color:var(--c-success)}span.stopped{color:var(--c-text-light)}
