:root{--top:#176eb0;--top2:#1264a2;--side:#172b3b;--side2:#21394b;--active:#176eb0;--bg:#f2f5f8;--line:#dce4eb;--text:#1f2f3d;--muted:#758391;--good:#21a366;--danger:#e44d61;--warn:#f0ad21;--purple:#7a64d1}.html,body{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,Segoe UI,Arial,sans-serif;font-size:13px}.topbar{height:56px;background:linear-gradient(90deg,var(--top2),var(--top));box-shadow:0 1px 4px rgba(0,0,0,.18);z-index:1040}.brand-logo{width:31px;height:31px;object-fit:contain}.brand-title{font-weight:700;letter-spacing:.2px;font-size:14px;line-height:15px}.brand-sub{font-size:8px;opacity:.84;letter-spacing:.2px}.avatar{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:#e8f0ff;color:#2d64a5;font-weight:700}.profile-name,.profile-role{display:block;line-height:1.08}.profile-name{font-size:11px;font-weight:600}.profile-role{font-size:9px;opacity:.8}.notification-dot{position:absolute;right:-7px;top:-7px;background:#ff4d5e;color:#fff;border-radius:10px;font-size:8px;min-width:14px;height:14px;display:grid;place-items:center}.sidebar-shell{position:fixed;left:0;top:56px;bottom:0;width:160px;background:linear-gradient(180deg,var(--side),#12222f);z-index:1030;transition:width .2s ease;overflow:hidden}.sidebar-shell.collapsed{width:58px}.sidebar-nav{width:100%;padding:10px 0;display:flex;flex-direction:column;min-height:100%}.side-link{color:#d8e1e8;text-decoration:none;display:flex;align-items:center;gap:12px;padding:10px 13px;border-left:3px solid transparent;white-space:nowrap;font-size:11px}.side-link i{width:18px;font-size:13px;text-align:center}.side-link:hover{color:#fff;background:rgba(255,255,255,.06)}.side-link.active{background:#1f608f;color:#fff;border-left-color:#58b8ff}.sidebar-shell.collapsed .side-link span,.sidebar-shell.collapsed .sidebar-authority{display:none}.sidebar-authority{margin:auto 10px 12px;padding:9px;border:1px solid rgba(255,255,255,.12);border-radius:6px;color:#9cb0bf;font-size:8px;overflow-wrap:anywhere}.sidebar-authority span,.sidebar-authority b,.sidebar-authority small{display:block}.sidebar-authority b{color:#fff;font-size:9px;margin:2px 0}.mobile-sidebar{background:var(--side);width:250px!important}.mobile-sidebar .offcanvas-header{background:#16334a}.mobile-sidebar .side-link{font-size:13px;padding:12px}.app-main{padding-top:56px;padding-left:160px;min-height:100vh;transition:padding-left .2s ease}.app-main.sidebar-collapsed{padding-left:58px}.content-wrap{padding:16px 14px 28px;max-width:1600px;margin:auto}.page-title{font-size:18px;font-weight:700;margin:0}.page-sub{font-size:11px;color:var(--muted);margin-top:2px}.breadcrumb-mini{font-size:9px;color:#8d99a4}.card{border:1px solid var(--line);border-radius:6px;box-shadow:0 1px 2px rgba(20,42,62,.04);background:#fff}.card-header{background:#fff;border-bottom:1px solid var(--line);font-weight:600;padding:9px 11px}.card-body{padding:11px}.metric-card{height:66px;background:#fff;border:1px solid var(--line);border-radius:6px;padding:10px 12px;display:flex;align-items:center;gap:10px}.metric-icon{width:34px;height:34px;border-radius:5px;display:grid;place-items:center;font-size:17px;background:#eaf4ff;color:#1573c8}.metric-card.green .metric-icon{background:#e8f7ef;color:#28a36a}.metric-card.orange .metric-icon{background:#fff2de;color:#ee9d24}.metric-card.purple .metric-icon{background:#f0ecff;color:#765fd4}.metric-card.slate .metric-icon{background:#edf1f5;color:#627280}.metric-label{font-size:10px;color:#677684}.metric-value{font-weight:700;font-size:16px;line-height:18px}.table{font-size:10px}.table>:not(caption)>*>*{padding:.43rem .5rem;border-color:#e7edf2}.table thead th{color:#536473;font-weight:600;background:#fbfcfd;white-space:nowrap}.badge-soft{display:inline-flex;align-items:center;border-radius:10px;padding:3px 7px;font-size:8px;font-weight:700}.badge-completed{background:#def5e7;color:#22824e}.badge-designing,.badge-running{background:#e2efff;color:#2474be}.badge-failed{background:#ffe4e7;color:#c94354}.badge-ready,.badge-draft{background:#edf1f4;color:#65727d}.progress{height:12px;background:#e5ebf0}.progress-bar{font-size:8px;background:#176eb0}.btn{font-size:10px;border-radius:4px}.btn-sm{font-size:9px}.form-label{font-size:10px;font-weight:600;margin-bottom:4px}.form-control,.form-select,.input-group-text{font-size:10px;border-color:#d7e0e7}.wizard-steps{display:flex;align-items:flex-start;justify-content:space-between;margin:4px 20px 16px;position:relative}.wizard-steps:before{content:"";position:absolute;top:11px;left:7%;right:7%;height:1px;background:#cfd8df}.wizard-step{position:relative;z-index:1;text-align:center;color:#9ba7b0;font-size:8px;min-width:70px}.wizard-dot{width:23px;height:23px;border-radius:50%;display:grid;place-items:center;margin:0 auto 4px;background:#cbd4db;color:#fff;font-weight:700}.wizard-step.active{color:#203746;font-weight:600}.wizard-step.active .wizard-dot{background:#126fbe}.wizard-step.done .wizard-dot{background:#25a56a}.map-frame{height:385px;border-radius:5px;overflow:hidden;border:1px solid #ced9e1;background:#cad4dc}.map-frame.tall{height:500px}.layer-panel{font-size:9px}.layer-row{display:flex;align-items:center;gap:7px;margin-bottom:7px}.layer-dot{width:9px;height:9px;border-radius:2px}.info-list{font-size:9px}.info-list div{display:flex;justify-content:space-between;padding:3px 0}.param-box{border:1px solid #f3cbcb;background:#fff3f3;border-radius:5px;padding:9px}.param-box h6{font-size:10px;color:#d65b5b}.param-row{display:flex;justify-content:space-between;border-top:1px solid #f3dddd;padding:5px 0;font-size:9px}.note-box{border:1px solid #c9def2;background:#edf6ff;border-radius:5px;padding:9px;font-size:9px;color:#426988}.stage-list{position:relative}.stage-line{display:flex;gap:9px;min-height:29px;position:relative}.stage-line:before{content:"";position:absolute;left:8px;top:16px;bottom:-3px;width:1px;background:#d7e0e7}.stage-line:last-child:before{display:none}.stage-dot{width:17px;height:17px;border-radius:50%;display:grid;place-items:center;font-size:8px;background:#cbd4dc;color:#fff;z-index:1}.stage-dot.done{background:#25a564}.stage-dot.running{background:#1878c9}.stage-dot.failed{background:#df4f61}.stage-text b{display:block;font-size:9px}.stage-text small{font-size:8px;color:#87939d}.log-box{height:200px;overflow:auto;background:#fbfcfd;border:1px solid #dce5eb;border-radius:4px;padding:7px;font:8px/1.55 Consolas,monospace;color:#44515c;white-space:pre-wrap}.result-banner{background:#e3f7e9;border:1px solid #bfe9cb;border-radius:5px;color:#27834b;padding:10px}.export-btn{display:flex;align-items:center;justify-content:center;gap:7px;min-height:38px}.role-key{font-size:9px}.role-key .role-row{display:flex;align-items:center;gap:8px;margin-bottom:6px}.role-chip{width:10px;height:10px;border-radius:50%}.login-shell{min-height:100vh;display:grid;place-items:center;background:linear-gradient(135deg,#102838,#176eb0)}.login-card{width:min(420px,92vw);border:0;box-shadow:0 18px 45px rgba(0,0,0,.25)}.login-logo{width:60px;height:60px}.compact-tabs .nav-link{font-size:9px;color:#667987;padding:7px 10px}.compact-tabs .nav-link.active{color:#156fb7;font-weight:600;border-bottom:2px solid #156fb7}.switch-sm{transform:scale(.75);transform-origin:right center}.chart-wrap{height:185px}.page-actions{display:flex;gap:6px;flex-wrap:wrap}.sticky-job-actions{display:flex;gap:5px;justify-content:flex-end}.data-kpi{display:flex;gap:18px;flex-wrap:wrap;font-size:9px}.data-kpi b{font-size:10px}.status-strip{padding:7px 10px;background:#fbfcfd;border:1px solid var(--line);border-radius:5px;display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:9px}@media(max-width:991.98px){.app-main,.app-main.sidebar-collapsed{padding-left:0}.content-wrap{padding:12px}.map-frame,.map-frame.tall{height:360px}.sticky-job-actions{justify-content:flex-start}.wizard-steps{margin-left:0;margin-right:0}.metric-card{height:62px}}@media(max-width:575.98px){body{font-size:12px}.content-wrap{padding:9px}.page-title{font-size:16px}.metric-card{height:58px;padding:8px}.metric-icon{width:30px;height:30px}.metric-value{font-size:14px}.map-frame,.map-frame.tall{height:320px}.wizard-step span{display:none}.wizard-step{min-width:30px}.table{font-size:9px}.page-actions .btn{flex:1}.topbar{height:54px}.app-main{padding-top:54px}}
.brand-logo-secondary{display:none}.light-ops-dashboard-extra{display:none}.dark-gis-workspace{display:none}.theme-card{border:2px solid transparent;border-radius:10px;overflow:hidden;background:#fff;transition:.15s;height:100%}.theme-card.active{border-color:#0d6efd;box-shadow:0 0 0 2px rgba(13,110,253,.08)}.theme-preview{width:100%;aspect-ratio:16/9;object-fit:cover;display:block;border-bottom:1px solid var(--line)}.theme-card-body{padding:10px}.theme-card .theme-name{font-weight:700;font-size:12px}.theme-card .theme-desc{font-size:9px;color:var(--muted);min-height:38px}.theme-card .btn{width:100%}.theme-chip{font-size:8px;padding:3px 7px;border-radius:999px;background:#e8f1fb;color:#176eb0}.theme-dark-gis .brand-logo-secondary{display:block}.theme-dark-gis .theme-card{background:#0b1d2c;border-color:#1a3850}.theme-dark-gis .theme-card.active{border-color:#1489ef}.theme-dark-gis .theme-card .theme-desc{color:#8299ab}.theme-dark-gis .theme-chip{background:#12344d;color:#77c2ff}.theme-dark-gis .accordion-item,.theme-dark-gis .accordion-button{background:#0b1d2c;color:#dce9f3;border-color:#1c3d54}.theme-dark-gis .accordion-button:not(.collapsed){background:#0d2638;color:#fff;box-shadow:none}.theme-dark-gis .accordion-button::after{filter:invert(1)}
