:root{
  --bg:#f4f6f8;--surface:#fff;--surface-2:#f8fafc;--text:#1f2937;--muted:#6b7280;
  --line:#e5e7eb;--line-strong:#d1d5db;--primary:#2563eb;--primary-soft:#eff6ff;
  --success:#168451;--success-soft:#ecfdf5;--warning:#a16207;--warning-soft:#fffbeb;
  --danger:#c62828;--danger-soft:#fef2f2;--sidebar:#fff;
}
*{box-sizing:border-box}
html{background:var(--bg)}
body{margin:0;color:var(--text);background:var(--bg);font:14px/1.5 Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif}
a{color:var(--primary);text-decoration:none}
a:hover{text-decoration:none}
.layout{display:grid;grid-template-columns:248px minmax(0,1fr);min-height:100vh}
aside{background:var(--sidebar);border-right:1px solid var(--line);padding:22px 16px;position:sticky;top:0;height:100vh;overflow:auto}
.brand{display:flex;align-items:center;gap:10px;font-weight:750;font-size:19px;padding:0 10px 22px;border-bottom:1px solid var(--line);margin-bottom:15px}
.brand-mark{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:var(--primary);color:#fff;font-weight:800}
.nav-label{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#9ca3af;padding:14px 11px 6px}
nav a{display:flex;align-items:center;gap:10px;padding:10px 11px;margin:2px 0;border-radius:7px;color:#4b5563;font-weight:550}
nav a:hover{background:var(--surface-2);color:var(--text)}
nav a.active{background:var(--primary-soft);color:var(--primary)}
main{padding:26px 30px 48px;max-width:1640px;width:100%}
.top{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:22px}
.top h1{margin:0 0 3px;font-size:25px;letter-spacing:-.02em}
h1,h2,h3{line-height:1.25}
h2{font-size:18px;margin:0 0 15px}
h3{font-size:15px;margin:0 0 12px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:9px;padding:18px;margin-bottom:16px}
.card-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}
.grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:15px}
.grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}
.grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}
.stat{padding:17px}
.stat .label{color:var(--muted);font-size:13px}
.stat strong{font-size:27px;display:block;margin-top:5px;letter-spacing:-.03em}
table{width:100%;border-collapse:collapse}
th,td{padding:12px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}
th{color:#6b7280;font-weight:650;font-size:12px;text-transform:uppercase;letter-spacing:.035em;background:#fafafa}
tbody tr:hover{background:#fafcff}
tbody tr:last-child td{border-bottom:0}
input,select,textarea{width:100%;background:#fff;color:var(--text);border:1px solid var(--line-strong);border-radius:7px;padding:10px 11px;margin:5px 0 13px;outline:none}
input:focus,select:focus,textarea:focus{border-color:#60a5fa;box-shadow:0 0 0 3px #dbeafe}
textarea{min-height:105px;resize:vertical}
label{font-weight:600;color:#374151}
small,.help{display:block;color:var(--muted);font-weight:400;margin-top:-7px;margin-bottom:10px}
.btn,button{display:inline-flex;align-items:center;justify-content:center;gap:7px;border:1px solid transparent;border-radius:7px;padding:9px 13px;background:var(--primary);color:#fff;cursor:pointer;font-weight:650}
.btn:hover,button:hover{filter:brightness(.98)}
.btn.secondary,button.secondary{background:#fff;color:#374151;border-color:var(--line-strong)}
.btn.ghost{background:transparent;color:#374151;border-color:var(--line)}
.btn.danger,button.danger{background:var(--danger)}
.btn.warn,button.warn{background:#b7791f}
.btn.small{padding:6px 9px;font-size:12px}
.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.flash{padding:12px 14px;border:1px solid;border-radius:7px;margin-bottom:12px}
.flash.success{background:var(--success-soft);border-color:#a7f3d0;color:#166534}
.flash.error{background:var(--danger-soft);border-color:#fecaca;color:#991b1b}
.flash.warning{background:var(--warning-soft);border-color:#fde68a;color:#92400e}
.badge{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:999px;background:#f3f4f6;color:#4b5563;font-size:12px;font-weight:650}
.badge.live{background:var(--danger-soft);color:#b91c1c}
.badge.sandbox{background:var(--success-soft);color:#047857}
.badge.online{background:var(--success-soft);color:#047857}
.badge.offline{background:#f3f4f6;color:#6b7280}
.badge.pending{background:var(--warning-soft);color:#a16207}
.muted{color:var(--muted)}
.login{max-width:430px;margin:8vh auto;padding:0 18px}
.login .card{padding:26px}
.danger-zone{border-color:#fecaca;background:#fffafa}
.inline{display:inline}
.notice{border:1px solid #fde68a;border-left:4px solid #eab308;padding:11px 13px;background:#fffbeb;border-radius:7px;margin-bottom:15px}
.toolbar{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:14px;flex-wrap:wrap}
.toolbar .search{max-width:340px;margin:0}
.kv{display:grid;grid-template-columns:190px minmax(0,1fr);border-top:1px solid var(--line)}
.kv div{padding:10px 4px;border-bottom:1px solid var(--line)}
.kv .key{color:var(--muted)}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:18px;overflow:auto}
.tabs a{padding:10px 13px;color:#6b7280;border-bottom:2px solid transparent;white-space:nowrap;font-weight:600}
.tabs a.active{color:var(--primary);border-color:var(--primary)}
.section-title{font-size:12px;text-transform:uppercase;letter-spacing:.07em;color:#9ca3af;margin:22px 0 10px}
.server-name{font-weight:700;font-size:15px}
.server-meta{font-size:12px;color:var(--muted);margin-top:2px}
.status-dot{width:8px;height:8px;border-radius:50%;background:#9ca3af;display:inline-block}
.status-dot.online{background:#16a34a}
.status-dot.pending{background:#f59e0b}
.empty{text-align:center;padding:38px 20px;color:var(--muted)}
.step{display:flex;gap:12px;padding:13px;border:1px solid var(--line);border-radius:8px;margin-bottom:12px;background:#fff}
.step-number{display:grid;place-items:center;flex:0 0 28px;height:28px;border-radius:50%;background:var(--primary-soft);color:var(--primary);font-weight:750}
.form-section{padding:18px;border:1px solid var(--line);border-radius:8px;margin-bottom:15px;background:#fff}
.form-section h3{margin-bottom:3px}
.form-section>p{margin:0 0 16px;color:var(--muted)}
.codebox{background:#111827;color:#e5e7eb;padding:12px;border-radius:7px;overflow:auto;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}
.mobile-nav{display:none}
@media(max-width:980px){
 .layout{grid-template-columns:1fr}
 aside{position:relative;height:auto;border-right:0;border-bottom:1px solid var(--line)}
 .grid,.grid.two,.grid.three{grid-template-columns:1fr}
 main{padding:18px}
 .kv{grid-template-columns:1fr}
 .kv .key{padding-bottom:0;border-bottom:0}
}

.skeleton-line{display:inline-block;width:120px;height:13px;border-radius:5px;background:linear-gradient(90deg,#eef1f4 25%,#f8fafc 50%,#eef1f4 75%);background-size:200% 100%;animation:skeleton 1.2s infinite}
.skeleton-line.short{width:80px}.skeleton-text{color:transparent!important;border-radius:5px;background:linear-gradient(90deg,#eef1f4 25%,#f8fafc 50%,#eef1f4 75%);background-size:200% 100%;animation:skeleton 1.2s infinite}
.skeleton-chart{min-height:260px;border-radius:8px;background:linear-gradient(90deg,#eef1f4 25%,#f8fafc 50%,#eef1f4 75%);background-size:200% 100%;animation:skeleton 1.2s infinite}
@keyframes skeleton{0%{background-position:200% 0}100%{background-position:-200% 0}}
.compact-card{padding:12px 18px}.inline-edit-form{display:grid;grid-template-columns:minmax(220px,1fr) auto;gap:12px;align-items:end}.inline-edit-form input{margin-bottom:0}
.range-row{display:grid;grid-template-columns:220px minmax(200px,1fr) 110px;gap:18px;align-items:center;padding:16px 0;border-bottom:1px solid var(--line)}
.range-row:last-child{border-bottom:0}.range-row input[type=range]{margin:0;padding:0;border:0;box-shadow:none}.range-row output{text-align:right;font-weight:750;font-size:16px}
.price-preview{text-align:right}.price-preview span,.price-preview small{display:block;color:var(--muted)}.price-preview strong{display:block;font-size:25px;color:var(--primary)}
.host-details{padding:14px;border-radius:8px;background:var(--surface-2);border:1px solid var(--line)}
.chart-wrap{width:100%;overflow:hidden}.chart-wrap canvas{width:100%;height:260px}
@media(max-width:760px){.range-row{grid-template-columns:1fr}.range-row output{text-align:left}.inline-edit-form{grid-template-columns:1fr}}

.feature-note{padding:16px;border:1px solid #dbe3ec;border-radius:8px;background:#f8fafc;color:#475569}.feature-note strong{display:block;color:#1f2937;margin-bottom:5px}.feature-note p{margin:0}.feature-note code{background:#e9eef4;padding:2px 5px;border-radius:4px}
.availability-muted{display:inline-flex;padding:4px 8px;border-radius:6px;background:#f3f4f6;color:#6b7280;font-size:12px}
.price-preview b{display:block;font-size:14px;margin-top:2px;color:#374151}.price-preview strong{font-size:20px}
.skeleton-line,.skeleton-text,.skeleton-chart{position:relative;overflow:hidden;background:#edf1f5!important;animation:none!important}
.skeleton-line:after,.skeleton-text:after,.skeleton-chart:after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.85),transparent);animation:shine 1.25s infinite}
@keyframes shine{100%{transform:translateX(100%)}}
html:not(.loading-data) .skeleton-text:after{display:none}

/* v5: strict loading states — never clip final content */
td,th{min-width:0}.skeleton-line{display:block;width:min(100%,140px);max-width:100%;height:14px;min-height:14px;overflow:hidden;vertical-align:middle}.skeleton-line.short{width:min(100%,88px)}
.skeleton-text{display:inline-block;width:96px;max-width:100%;height:34px;min-height:34px;overflow:hidden;vertical-align:bottom}
.skeleton-line:not(:empty),.skeleton-text:not(:empty){width:auto;max-width:none;height:auto;min-height:0;overflow:visible;background:none!important}
.availability-muted{display:inline;white-space:normal;overflow:visible;color:var(--muted);font-size:13px}
[data-hostname],[data-ip],[data-config],[data-usage]{white-space:normal;word-break:break-word;line-height:1.4}
.price-preview{min-width:220px}.price-preview strong,.price-preview b,.price-preview small{white-space:normal;overflow:visible}
@media(max-width:1100px){.card{overflow-x:auto}table{min-width:760px}.price-preview{min-width:0;text-align:left}.card-header{align-items:flex-start;flex-wrap:wrap}}

.brand-logo-only{padding:2px 8px 20px;justify-content:flex-start}
.brand-logo-only img{display:block;width:100%;max-width:190px;height:auto;object-fit:contain}
.login-logo{display:flex;justify-content:center;margin:2px 0 26px}
.login-logo img{display:block;width:min(100%,280px);height:auto;object-fit:contain}
.login h1{text-align:center}

.credential-card{display:grid;grid-template-columns:minmax(230px,.8fr) minmax(300px,1.2fr);gap:20px;background:#fff7ed;border:1px solid #fdba74;border-left:5px solid #ea580c;border-radius:9px;padding:18px;margin-bottom:18px}
.credential-card h2{margin:0 0 5px}.credential-card p{margin:0;color:#9a3412}
.credential-grid{display:grid;gap:10px}.credential-grid>div{background:#fff;border:1px solid #fed7aa;border-radius:7px;padding:10px}
.credential-grid span{display:block;color:#9a3412;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.credential-grid code{display:block;margin-top:4px;word-break:break-all;font-size:15px;color:#111827}
.availability-note{padding:15px;border:1px dashed var(--line-strong);border-radius:8px;background:var(--surface-2)}
.availability-note p{margin:5px 0 0;color:var(--muted)}
@media(max-width:760px){.credential-card{grid-template-columns:1fr}}

.price-breakdown{margin-top:16px;border-top:1px solid var(--line)}
.price-breakdown:empty{display:none}
.price-breakdown-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:24px;padding:11px 0;border-bottom:1px solid var(--line);align-items:center}
.price-breakdown-row>div:last-child{text-align:right}
.price-breakdown-row span{display:block;color:var(--muted);font-size:12px}
.price-breakdown-row strong{display:block}
@media(max-width:700px){
  .price-breakdown-row{grid-template-columns:1fr}
  .price-breakdown-row>div:last-child{text-align:left}
}
