html,body{height:100%;overflow:hidden;color-scheme:dark}
:root{--gold:#ffd54f;--cyan:#4fc3f7;--blue1:#0d47a1;--blue2:#1565c0;--card:rgba(10,30,70,.88);--brd:rgba(79,195,247,.3);--bg:#050e24}
*{margin:0;padding:0;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgba(79,195,247,.3) rgba(5,14,36,.5)}
*::-webkit-scrollbar{width:6px;height:6px}
*::-webkit-scrollbar-track{background:rgba(5,14,36,.5)}
*::-webkit-scrollbar-thumb{background:rgba(79,195,247,.3);border-radius:3px}
body{color:#fff;background:var(--bg);font-family:"Microsoft YaHei","PingFang SC","Source Han Sans SC",sans-serif;font-size:14px}
.app{height:100%;display:flex;flex-direction:column}

.loading-screen{position:fixed;inset:0;z-index:999999;background:var(--bg);display:flex;align-items:center;justify-content:center;transition:opacity .6s ease-out}
.loading-screen.hidden{opacity:0;pointer-events:none}
.loading-inner{text-align:center}
.loading-spinner{width:60px;height:60px;margin:0 auto 18px;border:3px solid rgba(79,195,247,.2);border-top-color:#4fc3f7;border-radius:50%;animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.loading-text{color:#90caf9;font-size:1rem;letter-spacing:3px;animation:pulse 1.5s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:.6}50%{opacity:1}}

/* HEADER */
.header{height:50px;display:flex;align-items:center;justify-content:space-between;padding:0 16px;background:rgba(8,22,58,.95);border-bottom:none;backdrop-filter:blur(12px);z-index:100;position:relative;flex-shrink:0}
.header::after{content:'';position:absolute;bottom:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,#4fc3f7,#ffd54f,#4fc3f7,transparent);background-size:200% 100%;animation:headerGlow 4s linear infinite}
@keyframes headerGlow{0%{background-position:200% 0}100%{background-position:-200% 0}}
.logo{font-size:1rem;font-weight:700;color:#e3f2fd;letter-spacing:1px;display:flex;align-items:center;gap:6px;white-space:nowrap}
.logo-icon{stroke:#4fc3f7;fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.nav{display:flex;align-items:center;gap:2px;flex-wrap:nowrap}
.nav-item{display:inline-block;padding:5px 10px;border-radius:6px;cursor:pointer;color:#90caf9;transition:.25s;font-size:.82rem;white-space:nowrap}
.nav-item:hover{background:rgba(79,195,247,.15);color:#e3f2fd}
.nav-item.active{color:var(--gold);background:rgba(255,213,79,.1);text-shadow:0 0 8px rgba(255,213,79,.3)}
.nav-sep{color:rgba(79,195,247,.3);font-size:.82rem;margin:0 1px}
.main{flex:1;min-height:0;padding:6px;overflow:hidden}

.page{display:none;height:100%;min-height:0;overflow:hidden;animation:pageIn .35s ease-out}
.page.active{display:block}
@keyframes pageIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}

/* HOME */
#home{background:url('images/home-bg.jpg') center/cover no-repeat;position:relative}
.home-overlay{position:absolute;inset:0;background:linear-gradient(180deg,rgba(13,71,161,.6) 0%,rgba(5,14,36,.85) 100%);z-index:1}
.particle-container{position:absolute;inset:0;z-index:2;overflow:hidden;pointer-events:none}
.particle{position:absolute;border-radius:50%;background:rgba(79,195,247,.4);animation:floatUp linear infinite;pointer-events:none;will-change:transform,opacity}
@keyframes floatUp{0%{transform:translateY(100vh) scale(0);opacity:0}10%{opacity:1}90%{opacity:1}100%{transform:translateY(-20vh) scale(1);opacity:0}}
.home-inner{position:relative;z-index:4;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:14px}
.home-badge{font-size:.7rem;letter-spacing:6px;color:rgba(79,195,247,.7);text-transform:uppercase;font-weight:600;padding:4px 16px;border:1px solid rgba(79,195,247,.3);border-radius:20px;backdrop-filter:blur(4px)}
.home-title{font-size:2.4rem;font-weight:800;letter-spacing:4px;text-shadow:0 2px 20px rgba(0,0,0,.5),0 0 40px rgba(79,195,247,.15);color:#fff}
.home-desc{font-size:1.05rem;color:#b3e5fc;letter-spacing:2px}
.home-stats{display:flex;align-items:center;gap:0;margin:4px 0;padding:10px 24px;background:rgba(10,30,70,.6);border:1px solid rgba(79,195,247,.25);border-radius:12px;backdrop-filter:blur(8px)}
.stat-item{display:flex;flex-direction:column;align-items:center;padding:0 18px}
.stat-num{font-size:1.5rem;font-weight:800;color:var(--gold);line-height:1.2;font-variant-numeric:tabular-nums}
.stat-label{font-size:.68rem;color:#90caf9;margin-top:2px;letter-spacing:1px}
.stat-divider{width:1px;height:32px;background:linear-gradient(180deg,transparent,rgba(79,195,247,.4),transparent)}
.home-nav-grid{display:flex;gap:14px;margin-top:4px}
.home-box{width:120px;height:80px;background:rgba(79,195,247,.08);border:1px solid rgba(79,195,247,.3);border-radius:12px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;cursor:pointer;transition:.3s;backdrop-filter:blur(6px)}
.home-box:hover{background:rgba(79,195,247,.2);border-color:rgba(79,195,247,.7);transform:translateY(-4px);box-shadow:0 8px 24px rgba(79,195,247,.15)}
.box-icon{width:30px;height:30px;display:flex;align-items:center;justify-content:center}
.box-icon svg{width:24px;height:24px;stroke:var(--cyan);stroke-width:1.5;fill:none;stroke-linecap:round;stroke-linejoin:round;transition:.3s}
.home-box:hover .box-icon svg{stroke:var(--gold)}
.home-box span:last-child{font-size:.82rem;color:#e3f2fd;font-weight:600}

.blue-bg{background:linear-gradient(135deg,rgba(5,14,36,.94),rgba(13,47,100,.85)),url('images/home-bg.jpg') center/cover no-repeat}

/* CARD */
.card{background:var(--card);border:1px solid var(--brd);border-radius:10px;padding:6px;position:relative;overflow:hidden;transition:.3s;contain:layout style}
.card::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);opacity:.4}
.card::after{content:'';position:absolute;bottom:0;right:0;width:20px;height:20px;border-right:1.5px solid rgba(79,195,247,.2);border-bottom:1.5px solid rgba(79,195,247,.2);border-radius:0 0 8px 0;pointer-events:none}
.card:hover{border-color:rgba(79,195,247,.5);box-shadow:0 0 20px rgba(79,195,247,.1)}
.title{color:var(--gold);font-size:.85rem;margin-bottom:4px;padding-left:6px;border-left:3px solid var(--gold);font-weight:700;line-height:1.3}
.title-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
.map-controls{display:flex;gap:8px}
.chart{width:100%;height:calc(100% - 18px)}
#ov3,#rk3{cursor:pointer}

/* OVERVIEW */
.ov-layout{height:100%;display:grid;gap:6px;grid-template-columns:repeat(4,1fr);grid-template-rows:auto 1fr 1fr}
.ov-indicators{grid-column:span 4;min-height:0}
.ov-sunburst{grid-column:span 1}
.ov-dynasty{grid-column:span 1}
.ov-hero{grid-column:span 2}
.ov-treemap{grid-column:span 2}
.ov-knowledge{grid-column:span 2}
.indicator-grid{display:flex;gap:10px;padding:4px 6px;height:calc(100% - 20px);overflow:hidden;flex-wrap:wrap}
.ind-card{flex:1;min-width:100px;background:rgba(79,195,247,.06);border:1px solid rgba(79,195,247,.15);border-radius:8px;padding:6px 10px;display:flex;flex-direction:column;justify-content:center;cursor:pointer;transition:.25s}
.ind-card:hover{background:rgba(79,195,247,.14);border-color:rgba(79,195,247,.4);transform:translateY(-2px)}
.ind-val{font-size:1.3rem;font-weight:800;color:var(--gold);font-variant-numeric:tabular-nums}
.ind-label{font-size:.7rem;color:#90caf9;margin-top:2px}

/* MAP */
.map-layout-fixed{height:100%;display:grid;gap:6px;grid-template-columns:240px minmax(0,1fr) 240px;min-height:0}
.side{min-height:0;display:grid;gap:5px;grid-template-rows:repeat(5,minmax(0,1fr))}
.center-map{min-height:0;position:relative}
#chinaMap{width:100%;height:calc(100% - 22px)}
.eq-toggle{font-size:12px;color:#b3e5fc;display:flex;align-items:center;gap:4px;cursor:pointer}
.data-panel{height:calc(100% - 22px);overflow:auto;font-size:12px;color:#d9e8ff;line-height:1.5;padding-right:2px}
.data-item{display:flex;justify-content:space-between;border-bottom:1px dashed rgba(79,195,247,.15);padding:1px 0}
.data-item .k{color:#90caf9}.data-item .v{color:#fff;font-weight:600}
.data-table{width:100%;border-collapse:collapse;margin-top:2px}
.data-table th,.data-table td{border:1px solid rgba(79,195,247,.18);padding:2px 4px;text-align:center;font-size:11px}
.data-table th{background:rgba(79,195,247,.12);color:var(--gold)}

/* CLOUD */
.cloud-layout{height:100%;display:grid;gap:6px;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:minmax(0,1fr) 36%}
.cloud-sankey-card{grid-column:1/3;min-height:0}
.wordcloud-panel{width:100%;height:calc(100% - 22px)}
.cloud3d{position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;cursor:grab}
.cloud3d:active{cursor:grabbing}
.cloud3d-tag{position:absolute;left:50%;top:50%;white-space:nowrap;cursor:pointer;font-weight:700;transition:color .2s,text-shadow .2s;text-shadow:0 1px 4px rgba(0,0,0,.5);user-select:none;will-change:transform,opacity}
.cloud3d-tag:hover{text-shadow:0 0 12px rgba(79,195,247,.8),0 0 24px rgba(79,195,247,.4);color:#fff!important}

/* MODALS */
.cloud-modal{display:none;position:fixed;inset:0;z-index:100000;align-items:center;justify-content:center;background:rgba(0,0,0,.6);backdrop-filter:blur(4px)}
.cloud-modal-content{background:linear-gradient(135deg,#0d2955,#1a3a6e);border:1.5px solid var(--cyan);border-radius:14px;padding:20px 24px;min-width:320px;max-width:520px;position:relative;box-shadow:0 12px 40px rgba(0,0,0,.5);animation:modalIn .3s ease-out}
@keyframes modalIn{from{opacity:0;transform:scale(.95) translateY(8px)}to{opacity:1;transform:scale(1) translateY(0)}}
.cloud-modal-close{position:absolute;right:8px;top:6px;cursor:pointer;width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.1);font-size:18px;font-weight:700;transition:.2s}
.cloud-modal-close:hover{background:rgba(255,255,255,.25);transform:rotate(90deg)}
#cloudModalBody{line-height:1.7;font-size:.9rem}
#cloudModalBody .cm-word{font-size:1.2rem;font-weight:700;color:#4fc3f7;margin-bottom:4px}
#cloudModalBody .cm-freq{color:#ffd54f;font-weight:600}

/* SIM */
.sim-layout{height:100%;display:grid;grid-template-columns:280px minmax(0,1fr);gap:6px;min-height:0}
.sim-left{display:flex;flex-direction:column;gap:6px;min-height:0;overflow:hidden}
.sim-left .control{flex:0 0 auto}
.sim-hist-card{flex:1;min-height:0;overflow:hidden}
.sim-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr));gap:6px;min-height:0}
.w100{width:100%}.mt10{margin-top:8px}.mt8{margin-top:6px}
select{margin-top:4px;padding:5px 7px;background:#071838;color:#e3f2fd;border:1px solid var(--cyan);border-radius:6px;outline:none;transition:.2s;-webkit-appearance:none;appearance:none;font-size:12px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%234fc3f7' fill='none' stroke-width='1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center}
select option{background:#071838;color:#e3f2fd}
select:focus{border-color:var(--gold);box-shadow:0 0 8px rgba(79,195,247,.2)}
.led{width:10px;height:10px;border-radius:50%;background:#81c784;display:inline-block;margin-right:5px;box-shadow:0 0 8px rgba(129,199,132,.5);transition:.3s}
.led-danger{animation:ledPulse 1s ease-in-out infinite}
@keyframes ledPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.8)}}
.damage-level{margin-top:6px;color:var(--gold);font-weight:700;font-size:12px}
.status{color:#b3e5fc;font-size:12px;transition:.3s}
input[type="range"]{-webkit-appearance:none;width:100%;height:10px;background:rgba(79,195,247,.1);border-radius:8px;outline:none;cursor:pointer}
input[type="range"]::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:#ffd54f;border:2px solid #0a2044;cursor:pointer;box-shadow:0 0 6px rgba(255,213,79,.5)}

/* COMPARE */
.compare-layout{height:100%;display:grid;grid-template-columns:220px minmax(0,1fr) minmax(0,1fr);grid-template-rows:minmax(0,1fr) minmax(0,1fr);gap:6px;min-height:0}
.compare-ctrl{grid-row:span 2}
.compare-ctrl .tip{margin-top:8px;font-size:.78rem;color:#90caf9;line-height:1.3}

/* RISK */
.risk-layout{height:100%;display:grid;gap:6px;grid-template-columns:220px 1fr 1fr;grid-template-rows:1fr 1fr 32%}
.risk-ctrl{grid-row:span 2}
.risk-gauge{grid-column:span 1}
.risk-factors{grid-column:span 1}
.risk-ranking{grid-column:span 1}
.risk-3d{grid-column:span 1}
.risk-conclusion{grid-column:1/2}
.risk-advice{grid-column:2/-1}

.insight-text{padding:4px 8px;font-size:.85rem;line-height:1.6;color:#b3e5fc;overflow:auto;height:calc(100% - 22px)}
.insight-summary{color:#e3f2fd;margin-bottom:3px;font-size:.88rem}
.insight-summary strong{color:#ffd54f}
.insight-line{color:#b3e5fc;padding:1px 0;font-size:.82rem}
.insight-line strong{font-weight:700}
.insight-btn{background:rgba(79,195,247,.15);color:#4fc3f7;border:1px solid rgba(79,195,247,.3);border-radius:6px;padding:3px 12px;cursor:pointer;font-size:.78rem;transition:.2s;margin-top:3px}
.insight-btn:hover{background:rgba(79,195,247,.3);border-color:#4fc3f7;color:#fff}
.measure-item{display:flex;align-items:flex-start;gap:8px;padding:4px 0;border-bottom:1px dashed rgba(79,195,247,.12)}
.measure-icon{font-size:1.1rem;flex-shrink:0}
.measure-content{font-size:.82rem;color:#e3f2fd}
.measure-meta{font-size:.72rem;color:#90caf9;margin-top:1px}
.measure-meta span{margin-right:8px}

/* BUILDING LIST PANEL */
.bld-list-btn{background:rgba(79,195,247,.18);color:#4fc3f7;border:1px solid #4fc3f7;border-radius:6px;padding:2px 10px;font-size:12px;cursor:pointer;margin-right:8px}
.bld-list-btn:hover{background:rgba(79,195,247,.35)}
.bld-list-panel{position:absolute;top:36px;left:8px;bottom:8px;width:220px;z-index:100;background:rgba(7,18,50,.94);border:1px solid #1e88e5;border-radius:8px;display:flex;flex-direction:column;overflow:hidden}
.bld-search{width:100%;box-sizing:border-box;padding:6px 10px;background:rgba(30,136,229,.15);border:none;border-bottom:1px solid #1e88e5;color:#e3f2fd;font-size:12px;outline:none}
.bld-search::placeholder{color:rgba(144,202,249,.5)}
.bld-list-body{flex:1;overflow-y:auto;padding:4px 0}
.bld-list-body::-webkit-scrollbar{width:4px}
.bld-list-body::-webkit-scrollbar-thumb{background:#1e88e5;border-radius:2px}
.bld-list-item{padding:6px 10px;cursor:pointer;font-size:12px;color:#b3e5fc;border-bottom:1px solid rgba(30,136,229,.2);display:flex;justify-content:space-between;align-items:center}
.bld-list-item:hover{background:rgba(79,195,247,.15);color:#fff}
.bld-list-item .bld-type{font-size:10px;color:rgba(255,213,79,.7);white-space:nowrap;margin-left:6px}

/* POPUPS */
.building-pop{position:fixed;display:none;z-index:10020;width:340px;background:rgba(7,18,50,.97);border:1px solid var(--cyan);border-radius:12px;padding:8px;box-shadow:0 8px 30px rgba(0,0,0,.5)}
.building-pop img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:8px;border:1px solid var(--gold)}
.close-pop{position:absolute;right:6px;top:6px;cursor:pointer;z-index:10021;width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.14);font-size:22px;font-weight:700}
.close-pop:hover{background:rgba(255,255,255,.24)}
.building-pop h3{color:var(--gold);margin:5px 0 3px;font-size:.95rem}
.building-pop p{font-size:.78rem;color:#b3e5fc;line-height:1.4;max-height:100px;overflow:auto}
.zoom-mask{display:none;position:fixed;inset:0;z-index:99999;align-items:center;justify-content:center;background:rgba(0,0,0,.78)}
.zoom-box{width:80vw;height:80vh;background:#0a1e44;border:1px solid var(--cyan);border-radius:12px;padding:10px;position:relative;overflow:hidden}
.zoom-close{position:absolute;right:10px;top:6px;cursor:pointer;width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.18);font-size:24px;font-weight:700;z-index:100010}
.zoom-close:hover{background:rgba(255,255,255,.32);transform:scale(1.1)}
#zoomChart{width:100%;height:100%}

/* Responsive */
@media(max-width:1400px){
  .map-layout-fixed{grid-template-columns:200px minmax(0,1fr) 200px}
  .home-title{font-size:1.8rem}
}
