:root{
  --ink:#12302D; --teal-900:#0F3D3A; --teal-800:#134A47; --teal-700:#1B5C58; --teal-100:#E4EFEE;
  --bg:#F6F8F7; --surface:#FFFFFF; --line:#E3E8E6; --muted:#6B7C79;
  --orange:#FF7900; --orange-100:#FFEEDD;
  --good:#1F9D77; --good-100:#E4F6EE; --warn:#C98A1B; --warn-100:#FBF1DD; --bad:#D9483C; --bad-100:#FBE7E5;
}
*{box-sizing:border-box;}
body{margin:0;font-family:'Segoe UI',Arial,sans-serif;background:var(--bg);color:var(--ink);}
a{text-decoration:none;color:inherit;}
code{background:var(--teal-100);color:var(--teal-800);padding:1px 5px;border-radius:4px;font-size:12px;}

/* Login */
.login-body{display:flex;align-items:center;justify-content:center;height:100vh;}
.login-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:32px;width:320px;}
.login-brand{font-weight:700;font-size:17px;margin-bottom:16px;color:var(--teal-900);}
.login-card label{font-size:12px;font-weight:600;display:block;margin:10px 0 4px;}
.login-card input{width:100%;border:1px solid var(--line);border-radius:8px;padding:9px 11px;font-size:13px;}

/* Shell */
.shell{display:flex;min-height:100vh;}
.sidebar{width:220px;flex-shrink:0;background:var(--teal-900);color:#DCEAE8;padding:20px 14px;}
.brand{font-weight:700;font-size:15px;color:#fff;margin-bottom:20px;padding:6px 8px;}
.brand span{display:block;font-size:11px;color:#8FB4B0;font-weight:400;}
.nav-item{display:block;padding:9px 10px;border-radius:8px;font-size:13.5px;font-weight:500;color:#B8D3D0;margin-bottom:2px;}
.nav-item:hover{background:rgba(255,255,255,.06);color:#fff;}
.nav-item.active{background:rgba(255,121,0,.14);color:#fff;}
.sidebar-footer{margin-top:24px;padding-top:14px;border-top:1px solid rgba(255,255,255,.08);}
.tenant-pill{padding:8px;border-radius:8px;background:rgba(255,255,255,.05);font-size:12.5px;color:#fff;}
.main{flex:1;min-width:0;}
.content{padding:26px 28px 60px;max-width:1100px;}

/* Page structure */
.page-head{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:20px;flex-wrap:wrap;gap:10px;}
.page-title{font-size:21px;font-weight:700;}
.page-sub{font-size:13px;color:var(--muted);margin-top:3px;}

.btn{display:inline-flex;align-items:center;gap:6px;padding:9px 15px;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;border:1px solid transparent;}
.btn-orange{background:var(--orange);color:#fff;}
.btn-orange:hover{background:#E86D00;}
.btn-outline{background:#fff;color:var(--ink);border-color:var(--line);}
.btn-outline:hover{background:var(--bg);}

.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:20px;}
.card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:18px;}
.stat-label{font-size:12px;color:var(--muted);font-weight:600;}
.stat-value{font-size:24px;font-weight:700;margin-top:6px;}

.table-card{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;}
.table-card-head{padding:14px 18px;border-bottom:1px solid var(--line);}
.panel-title{font-size:14px;font-weight:700;}
table{width:100%;border-collapse:collapse;font-size:13px;}
th{text-align:left;font-size:11px;text-transform:uppercase;color:var(--muted);font-weight:600;padding:9px 12px;border-bottom:1px solid var(--line);}
td{padding:11px 12px;border-bottom:1px solid var(--line);}
tr:last-child td{border-bottom:none;}
.mono{font-family:'Courier New',monospace;}

.badge{display:inline-flex;padding:3px 9px;border-radius:20px;font-size:11px;font-weight:700;}
.badge-good{background:var(--good-100);color:var(--good);}
.badge-warn{background:var(--warn-100);color:var(--warn);}
.badge-bad{background:var(--bad-100);color:var(--bad);}
.badge-neutral{background:var(--teal-100);color:var(--teal-800);}

.toolbar{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap;}
.input{border:1px solid var(--line);border-radius:8px;padding:8px 12px;font-size:13px;background:#fff;}

.alert{padding:10px 14px;border-radius:8px;font-size:13px;margin-bottom:16px;}
.alert-success{background:var(--good-100);color:var(--good);}
.alert-error{background:var(--bad-100);color:var(--bad);}

.empty-hint{font-size:11.5px;color:var(--muted);background:var(--bg);border:1px dashed var(--line);border-radius:8px;padding:10px 12px;margin-top:12px;}

.template-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;}
.template-card{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;display:block;}
.template-card:hover{box-shadow:0 6px 16px rgba(15,61,58,.08);}
.template-thumb{height:100px;background:linear-gradient(135deg,var(--teal-100),#fff);}
.template-body{padding:12px 14px;border-top:1px solid var(--line);}
.template-name{font-size:12.5px;font-weight:700;}
.template-meta{font-size:11px;color:var(--muted);margin-top:2px;}

.progress-bar{height:6px;border-radius:20px;background:var(--line);overflow:hidden;}
.progress-fill{height:100%;background:var(--orange);border-radius:20px;transition:width .3s ease;}

.row-action-btn{font-size:11.5px;font-weight:600;padding:5px 10px;border-radius:6px;border:1px solid var(--line);background:#fff;}
.row-action-btn.primary{background:var(--teal-900);color:#fff;border-color:var(--teal-900);}

.modal-overlay{position:fixed;inset:0;background:rgba(15,30,29,.45);display:none;align-items:center;justify-content:center;z-index:50;}
.modal-overlay.open{display:flex;}
.modal{background:#fff;border-radius:14px;width:420px;padding:22px;max-height:86vh;overflow-y:auto;}
.modal-wide{width:600px;}
.modal h3{font-size:16px;margin:0 0 4px;}
.modal p{font-size:12.5px;color:var(--muted);margin:0 0 16px;}
.modal label{font-size:12px;font-weight:600;display:block;margin:12px 0 5px;}
.modal input,.modal select{width:100%;border:1px solid var(--line);border-radius:8px;padding:9px 11px;font-size:13px;}
.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px;}
.chip-check{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);}

/* Template builder */
.builder-topbar{display:flex;align-items:center;justify-content:space-between;padding:14px 24px;background:#fff;border-bottom:1px solid var(--line);}
.builder-name-input{border:none;font-size:16px;font-weight:700;padding:4px 6px;border-radius:6px;}
.builder-name-input:focus{outline:1px solid var(--line);}
.icon-btn{width:32px;height:32px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);background:#fff;}
.builder-shell{display:grid;grid-template-columns:210px 1fr 270px;gap:14px;padding:18px 24px;align-items:start;}
.builder-panel{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px;}
.builder-panel-label{font-size:11px;text-transform:uppercase;font-weight:700;color:var(--muted);margin-bottom:10px;}
.block-lib{display:flex;flex-direction:column;gap:6px;}
.block-lib-item{padding:9px 10px;border:1px solid var(--line);border-radius:8px;font-size:12.5px;font-weight:600;cursor:pointer;background:var(--bg);}
.block-lib-item:hover{border-color:var(--orange);background:var(--orange-100);color:var(--orange);}
.builder-canvas-wrap{background:#EDEFEE;border-radius:12px;padding:26px 18px;display:flex;justify-content:center;min-height:600px;}
#canvas{background:#fff;border-radius:8px;box-shadow:0 1px 4px rgba(0,0,0,.08);}
.var-tags{display:flex;gap:6px;}
.var-tag{font-family:monospace;font-size:11px;background:var(--orange-100);color:var(--orange);padding:4px 9px;border-radius:6px;cursor:pointer;font-weight:600;}
.var-tag:hover{background:var(--orange);color:#fff;}
.code-output{background:#0F3D3A;color:#DCEAE8;font-family:monospace;font-size:11.5px;line-height:1.6;padding:14px;border-radius:9px;max-height:340px;overflow:auto;white-space:pre-wrap;word-break:break-word;}
.dv-editable:focus,.dv-editable-link:focus,.dv-btn-link:focus{outline:2px dashed var(--orange);outline-offset:2px;}

.template-delete-btn{width:24px;height:24px;border-radius:6px;background:#fff;border:1px solid var(--line);color:var(--muted);cursor:pointer;font-size:15px;line-height:1;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 3px rgba(0,0,0,.1);}
.template-delete-btn:hover{color:var(--bad);border-color:var(--bad);}

.nav-item{display:flex;align-items:center;gap:9px;}
.nav-icon{width:16px;height:16px;flex-shrink:0;opacity:.85;}
.nav-item.active .nav-icon{opacity:1;}
