:root {
  --ink: #172033;
  --muted: #778198;
  --primary: #4169f5;
  --primary-dark: #2448d8;
  --green: #169b78;
  --deep: #111a35;
  --bg: #f4f6fb;
  --line: #e7eaf2;
  --white: #fff;
  --amber: #a66712;
  --red: #d94e5a;
  --blue: #4767b3;
  --shadow: 0 10px 32px rgba(24, 37, 74, .06);
}
* { box-sizing: border-box; }
body { margin: 0; background: var(--bg); color: var(--ink); font-family: Inter, "Segoe UI", Arial, sans-serif; font-size: 14px; -webkit-font-smoothing: antialiased; }
h1,h2,h3,h4 { font-family: Inter, "Segoe UI", Arial, sans-serif; margin: 0; letter-spacing: -.025em; }
button,input,select,textarea { font: inherit; }
button { cursor: pointer; transition: transform .16s ease, box-shadow .16s ease, background .16s ease; }
button:hover { transform: translateY(-1px); }
.hidden { display: none !important; }
.muted { color: var(--muted); }
.smalltext { font-size: 12px; line-height: 1.55; }
.login-wrap { min-height: 100vh; background: radial-gradient(ellipse at 22% 20%, rgba(83,126,255,.42), transparent 34%), linear-gradient(135deg,#111a35 0%,#17264d 58%,#283f82 100%); display: grid; grid-template-columns: minmax(280px, 1fr) 420px; align-items: center; gap: clamp(38px,8vw,110px); padding: clamp(28px,7vw,100px); }
.login-showcase { max-width: 550px; color: #fff; padding: 15px; }
.login-showcase .brand-mark { margin-bottom: 40px; }
.login-showcase .eyebrow { color: #aebfff; }
.login-showcase h2 { max-width: 520px; font-size: clamp(32px,4vw,54px); line-height: 1.08; margin: 18px 0; }
.login-showcase p { color: #c4cce3; font-size: 15px; line-height: 1.7; max-width: 430px; }
.login-points { display:flex; gap:9px; flex-wrap:wrap; margin-top:32px; }
.login-points span { border:1px solid rgba(255,255,255,.18); background:rgba(255,255,255,.08); color:#e6ebff; border-radius:30px; padding:9px 12px; font-size:11px; }
.login-card { width:100%; background:rgba(255,255,255,.98); border:1px solid rgba(255,255,255,.6); border-radius:26px; padding:34px; box-shadow:0 30px 80px rgba(2,8,28,.28); }
.brand-mark { width:50px; height:50px; border-radius:16px; background:linear-gradient(145deg,#6286ff,#4169f5); color:#fff; display:grid; place-items:center; font:800 25px Inter, sans-serif; margin-bottom:22px; box-shadow:0 10px 22px rgba(65,105,245,.25); overflow:hidden; }
.brand-mark img { display:block; width:100%; height:100%; object-fit:cover; }
.brand-mark.small { width:38px; height:38px; border-radius:13px; margin:0; font-size:18px; box-shadow:none; }
.eyebrow,.side-label { letter-spacing:.14em; font-size:10px; color:var(--primary); font-weight:800; }
.login-card h1 { font-size:27px; margin:9px 0 5px; }
.login-card label,.form-grid label { display:grid; gap:8px; font-size:12px; font-weight:650; margin:17px 0; color:#39435a; }
.login-card input,.form-grid input,.form-grid select,.form-grid textarea,.search,.follow-status { border:1px solid var(--line); border-radius:12px; padding:12px 13px; outline:0; background:#fff; color:var(--ink); transition:border .15s,box-shadow .15s; }
input:focus,select:focus,textarea:focus { border-color:#8da4ff !important; box-shadow:0 0 0 4px rgba(65,105,245,.12); }
.btn { border:0; border-radius:12px; padding:11px 16px; font-weight:750; letter-spacing:-.01em; }
.btn.primary { background:linear-gradient(135deg,#5278ff,#3559e6); color:#fff; box-shadow:0 8px 18px rgba(65,105,245,.22); }
.btn.primary:hover { box-shadow:0 11px 24px rgba(65,105,245,.3); }
.btn.soft { background:#edf1ff; color:var(--primary-dark); }
.btn.ghost { background:#fff; border:1px solid var(--line); color:var(--ink); }
.btn.danger { background:#fff0f1; color:var(--red); }
.btn.full { width:100%; margin-top:5px; padding:14px; }
.demo-box { background:#f4f6ff; border:1px solid #e7ebfb; border-radius:14px; padding:14px; margin-top:18px; font-size:11px; line-height:1.8; color:#68738c; }
.error { color:var(--red); font-size:12px; margin-top:12px; min-height:15px; }
.app { min-height:100vh; }
.sidebar { position:fixed; inset:0 auto 0 0; width:250px; background:linear-gradient(180deg,#121a35 0%,#172444 100%); color:#dbe4ff; padding:24px 16px; display:flex; flex-direction:column; z-index:5; }
.brand { display:flex; align-items:center; gap:11px; padding:1px 9px 36px; }
.brand strong { display:block; font:800 15px Inter,sans-serif; color:#fff; letter-spacing:.08em; }
.brand small { display:block; color:#98a6c9; font-size:10px; margin-top:4px; }
.side-label { color:#8998bd; padding:0 12px 13px; font-size:9px; }
.sidebar nav { display:grid; gap:6px; }
.sidebar nav button { border:0; background:transparent; color:#aebbd9; text-align:left; padding:12px 13px; border-radius:13px; font-size:17px; display:flex; align-items:center; gap:12px; }
.sidebar nav button span { font-size:12px; font-weight:650; }
.sidebar nav button:hover,.sidebar nav button.active { background:rgba(255,255,255,.09); color:#fff; }
.sidebar nav button.active { box-shadow:inset 3px 0 #6f8eff; }
.sidebar nav i { font-style:normal; margin-left:auto; background:#ed6572; color:#fff; border-radius:20px; min-width:20px; padding:2px 6px; text-align:center; font-size:10px; }
.sidebar-bottom { margin-top:auto; display:grid; gap:14px; padding:11px; }
.connection { font-size:10px; color:#a9b7d6; }
.dot { display:inline-block; width:7px; height:7px; border-radius:10px; background:#4ed4a5; margin-right:6px; box-shadow:0 0 0 4px rgba(78,212,165,.12); }
.logout { background:none; border:0; color:#d1ddf7; text-align:left; padding:6px 0; font-size:12px; }
.main { margin-left:250px; min-height:100vh; display:flex; flex-direction:column; }
.topbar { height:84px; background:rgba(255,255,255,.92); backdrop-filter:blur(16px); border-bottom:1px solid var(--line); display:flex; align-items:center; padding:0 clamp(22px,4vw,58px); gap:20px; position:sticky; top:0; z-index:3; }
.topbar h2 { font-size:19px; margin-top:4px; }
.user-pill { margin-left:auto; display:flex; align-items:center; gap:10px; }
.user-pill strong,.user-pill small { display:block; }
.user-pill strong { font-size:11px; }
.user-pill small { font-size:10px; color:var(--muted); margin-top:3px; }
.avatar { width:38px; height:38px; border-radius:14px; background:linear-gradient(145deg,#e8edff,#dce5ff); color:var(--primary-dark); display:grid; place-items:center; font-weight:800; }
.menu-toggle { display:none; }
.content { padding:32px clamp(22px,4vw,58px); flex:1; max-width:1540px; width:100%; margin:auto; }
.footer { padding:0 clamp(22px,4vw,58px) 20px; color:#9aa2b4; font-size:10px; }
.welcome { display:flex; align-items:flex-end; justify-content:space-between; margin-bottom:24px; }
.welcome h1 { font-size:25px; }
.welcome p { margin:8px 0 0; color:var(--muted); font-size:12px; }
.metric-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:15px; }
.metric { background:#fff; border:1px solid rgba(225,230,241,.9); border-radius:19px; padding:19px; box-shadow:var(--shadow); transition:transform .18s,box-shadow .18s; }
.metric:hover { transform:translateY(-2px); box-shadow:0 16px 36px rgba(24,37,74,.09); }
.metric .label { font-size:10px; color:var(--muted); font-weight:650; }
.metric .value { font:800 29px Inter,sans-serif; letter-spacing:-.04em; margin:11px 0 5px; }
.metric .hint { font-size:10px; color:var(--muted); }
.metric .icon { float:right; font-size:17px; color:var(--primary); background:#edf1ff; border-radius:12px; padding:9px; }
.grid-main { display:grid; grid-template-columns:1.55fr 1fr; gap:17px; margin-top:18px; }
.panel { background:#fff; border:1px solid rgba(225,230,241,.9); border-radius:19px; box-shadow:var(--shadow); overflow:hidden; }
.panel-head { padding:17px 19px; border-bottom:1px solid #edf0f5; display:flex; align-items:center; justify-content:space-between; }
.panel-head h3 { font-size:13px; }
.panel-body { padding:17px 19px; }
.table-wrap { overflow:auto; }
.data-table { border-collapse:collapse; width:100%; min-width:650px; }
.data-table th { text-align:left; font-size:9px; letter-spacing:.08em; color:#8892a7; font-weight:800; padding:12px 11px; background:#f8f9fc; white-space:nowrap; }
.data-table td { font-size:11px; padding:14px 11px; border-top:1px solid #eef0f5; vertical-align:middle; }
.data-table tr.clickable { cursor:pointer; }
.data-table tr:hover { background:#fafbff; }
.package-name { font-weight:750; color:var(--ink); font-size:11px; }
.package-meta { font-size:9px; color:var(--muted); margin-top:4px; }
.badge { display:inline-flex; align-items:center; border-radius:30px; padding:6px 10px; font-size:9px; font-weight:750; background:#e5f7f0; color:#11845f; white-space:nowrap; }
.badge.warning { background:#fff5dc; color:#946314; }
.badge.caution { background:#fff0e5; color:#bd5b16; }
.badge.critical { background:#ffeaed; color:#c53a50; }
.badge.info { background:#edf1ff; color:#4260bd; }
.progress-line { height:7px; background:#ebeff7; border-radius:8px; overflow:hidden; min-width:60px; margin-top:6px; }
.progress-line span { display:block; height:100%; background:linear-gradient(90deg,#4b75ff,#23b99a); border-radius:8px; }
.stat-list { display:grid; gap:13px; }
.stat-row { display:grid; grid-template-columns:100px 1fr 25px; align-items:center; gap:9px; font-size:10px; }
.stat-bar { height:8px; border-radius:10px; background:#f0f2f7; overflow:hidden; }
.stat-bar span { height:100%; display:block; border-radius:10px; background:var(--primary); }
.stat-row:nth-child(2) .stat-bar span { background:#e6ae46; }
.stat-row:nth-child(3) .stat-bar span { background:#ed8c47; }
.stat-row:nth-child(4) .stat-bar span { background:#d95c67; }
.feed { display:grid; gap:12px; }
.feed-item { padding:13px; background:#f8f9fd; border-radius:13px; border:1px solid #edf0f7; }
.feed-item strong { font-size:11px; display:block; }
.feed-item p { font-size:10px; color:var(--muted); margin:6px 0; line-height:1.55; }
.feed-item small { font-size:9px; color:#929bb0; }
.page-heading { display:flex; align-items:end; justify-content:space-between; gap:20px; margin-bottom:19px; }
.page-heading h1 { font-size:24px; }
.page-heading p { color:var(--muted); font-size:11px; margin:7px 0 0; }
.toolbar { display:flex; gap:9px; align-items:center; flex-wrap:wrap; }
.search { min-width:240px; padding:11px 13px; font-size:11px; }
.filters { display:flex; gap:8px; flex-wrap:wrap; margin-bottom:14px; }
.filter { border:1px solid var(--line); background:#fff; border-radius:30px; padding:8px 13px; color:var(--muted); font-size:10px; }
.filter.active { background:#edf1ff; color:var(--primary-dark); border-color:#d8e0ff; font-weight:750; }
.empty { padding:36px; text-align:center; color:var(--muted); font-size:12px; }
.form-grid { display:grid; grid-template-columns:1fr 1fr; gap:5px 16px; }
.form-grid label { margin:10px 0; }
.form-grid .wide { grid-column:1/-1; }
.form-grid textarea { min-height:78px; resize:vertical; }
.modal-backdrop { position:fixed; inset:0; background:rgba(8,15,36,.56); backdrop-filter:blur(5px); display:grid; place-items:center; padding:20px; z-index:10; }
.modal { background:#fff; width:min(640px,100%); max-height:90vh; overflow:auto; border-radius:21px; box-shadow:0 28px 90px rgba(4,10,32,.3); }
.modal-head { padding:19px 22px; border-bottom:1px solid var(--line); display:flex; justify-content:space-between; align-items:center; }
.modal-head h3 { font-size:15px; }
.modal-body { padding:21px; }
.modal-foot { padding:15px 21px; border-top:1px solid var(--line); display:flex; justify-content:flex-end; gap:9px; }
.x { border:0; background:none; color:var(--muted); font-size:21px; }
.detail-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:11px; }
.detail-box { background:#f8f9fc; border:1px solid var(--line); border-radius:13px; padding:13px; }
.detail-box small { color:var(--muted); font-size:9px; display:block; }
.detail-box strong { display:block; margin-top:7px; font-size:13px; }
.toast { position:fixed; bottom:22px; right:22px; background:#182443; color:#fff; padding:13px 17px; border-radius:13px; font-size:12px; box-shadow:0 12px 32px rgba(4,10,32,.2); transform:translateY(80px); opacity:0; transition:.22s; z-index:20; }
.toast.show { transform:translateY(0); opacity:1; }
.loading { text-align:center; padding:50px; color:var(--muted); }
@media(max-width:1050px) { .metric-grid{grid-template-columns:repeat(2,1fr)} .grid-main{grid-template-columns:1fr} .sidebar{width:215px} .main{margin-left:215px} }
@media(max-width:760px) { .login-wrap{grid-template-columns:1fr;gap:18px;padding:25px 18px;align-content:center} .login-showcase{padding:5px 4px 0} .login-showcase .brand-mark{margin-bottom:20px} .login-showcase h2{font-size:30px;margin:12px 0} .login-showcase p,.login-points{display:none} .login-card{padding:25px;border-radius:22px} }
@media(max-width:700px) { .sidebar{transform:translateX(-100%);transition:.2s;width:250px} .sidebar.open{transform:translateX(0)} .main{margin-left:0} .menu-toggle{display:block;border:0;background:none;color:var(--ink);font-size:19px;padding:7px} .topbar{height:72px;padding:0 15px;gap:10px} .user-pill small{display:none} .content{padding:22px 15px} .footer{padding:0 15px 16px} .welcome{align-items:flex-start;flex-direction:column;gap:14px} .metric-grid{gap:9px} .metric{padding:14px;border-radius:16px} .metric .value{font-size:24px} .page-heading{align-items:flex-start;flex-direction:column} .toolbar{width:100%} .search{flex:1;min-width:180px} .form-grid{grid-template-columns:1fr} .form-grid .wide{grid-column:auto} .detail-grid{grid-template-columns:1fr 1fr} .topbar h2{font-size:16px} }

.curve-chart-wrap{border:1px solid var(--line);background:#fbfcff;border-radius:15px;padding:12px 12px 9px}.curve-legend{display:flex;gap:18px;flex-wrap:wrap;padding:2px 8px 4px;color:#68738c;font-size:10px;font-weight:700}.curve-legend span{display:flex;align-items:center;gap:7px}.curve-dot{display:inline-block;width:9px;height:9px;border-radius:50%}.curve-dot.planned{background:#4169f5}.curve-dot.actual{background:#169b78}.curve-chart{display:block;width:100%;height:auto;overflow:visible}.chart-note{padding:5px 8px 3px;color:var(--muted);font-size:10px;line-height:1.5}

.map-card { display:grid; grid-template-columns:180px minmax(220px,1fr); gap:14px; align-items:stretch; margin:16px 0; padding:14px; border:1px solid var(--line); border-radius:15px; background:#fafbfe; }
.map-card p { color:var(--muted); margin:6px 0; }
.map-card a { color:var(--primary-dark); font-weight:700; text-decoration:none; }
.map-card iframe { width:100%; min-height:190px; border:0; border-radius:10px; }
@media(max-width:700px){.map-card{grid-template-columns:1fr}.map-card iframe{min-height:220px}}
