/* làmdấu.de admin. No inline styles: the CSP is style-src 'self'. */
:root{
  color-scheme:dark;
  --bg:#101318;--sidebar:#0c0f13;--surface:#171c24;--surface-2:#1c222c;--raised:#232c38;--input:#0f141b;
  --border:#2b333f;--border-strong:#3c4757;
  --text:#e8edf4;--muted:#aab6c6;--faint:#8590a0;
  --accent:#bce7cd;--accent-ink:#173726;--accent-soft:#bce7cd1c;
  --danger:#ffc1ba;--danger-soft:#3a2326;--warn:#f2d08b;--warn-soft:#3a3122;--info:#c8d6ff;--info-soft:#252d3d;
  --focus:#a5bdfa;--radius:12px;--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;font-size:14px;line-height:1.5;
  color:var(--text);background:var(--bg);
}
*{box-sizing:border-box}
body{margin:0;min-height:100vh}
[hidden]{display:none!important}
h1,h2,h3{margin:0;font-weight:650;letter-spacing:-.01em}
h1{font-size:26px;line-height:1.2}
h2{font-size:15px}
h3{font-size:13px}
p{margin:0}
b{font-weight:650;color:var(--text)}
a{color:var(--accent)}
.muted{color:var(--muted);font-size:13px;line-height:1.6}
.fineprint{font-size:11.5px;color:var(--faint);line-height:1.5}
.visually-hidden{position:absolute!important;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
[tabindex="-1"]:focus:not(:focus-visible),h1[tabindex="-1"]:focus,h2[tabindex="-1"]:focus{outline:none}

/* ---- brand ---- */
.brand{display:flex;align-items:center;gap:11px;color:var(--text);text-decoration:none;min-width:0}
.brand-mark{width:36px;height:36px;flex:none}
.brand-mark .tile{fill:#0b0b0c;stroke:#ffffff2e;stroke-width:4}
.brand-mark .wave{fill:none;stroke:#fff;stroke-width:11;stroke-linecap:round;stroke-linejoin:round}
.brand-mark .base{fill:none;stroke:#fff;stroke-opacity:.45;stroke-width:5;stroke-linecap:round}
.brand-text{display:flex;flex-direction:column;line-height:1.2}
.brand-text strong{font-size:15px;font-weight:700;letter-spacing:-.01em}
.brand-text small{font-size:12px;color:var(--muted)}

/* ---- login ---- */
.login{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(900px 520px at 15% -10%,#bce7cd17,transparent 65%),var(--bg)}
.login-card{width:min(420px,100%);background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:32px;box-shadow:0 24px 60px #0007}
.login-card h1{font-size:22px;margin:28px 0 8px}
.login-card form{margin-top:22px}
.login-card button.primary{width:100%;min-height:42px}
.login-card .fineprint{margin-top:22px}

/* ---- app shell ---- */
.shell{display:grid;grid-template-columns:244px minmax(0,1fr);min-height:100vh}
.sidebar{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:20px;padding:22px 14px 16px;background:var(--sidebar);border-right:1px solid var(--border);overflow-y:auto}
.sidebar-top{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 8px}
.nav{display:flex;flex-direction:column;gap:2px;flex:1}
.nav a,.nav-logout{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:8px;color:var(--muted);text-decoration:none;font-size:13.5px;font-weight:500;line-height:1.3}
.nav a:hover,.nav-logout:hover{background:#ffffff0a;color:var(--text)}
.nav a[aria-current=page]{background:var(--accent-soft);color:var(--text)}
.nav a[aria-current=page] svg{color:var(--accent)}
.nav svg,.nav-toggle svg{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.nav-group{margin:18px 12px 6px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--faint)}
.nav-bottom{margin-top:auto;padding-top:14px;border-top:1px solid var(--border)}
.nav-logout{width:100%;justify-content:flex-start;min-height:0;background:transparent;border:0}
.nav-bottom .fineprint{margin:10px 12px 0}
.nav-toggle{display:none}
.nav-toggle .icon-close,.nav-open .nav-toggle .icon-open{display:none}
.nav-open .nav-toggle .icon-close{display:block}
.content{padding:32px 40px 72px;min-width:0;container-type:inline-size}
.page{max-width:1280px;margin:0 auto}
.page-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px 24px;flex-wrap:wrap;margin-bottom:22px}
.page-head>div:first-child{flex:1 1 420px;min-width:0}
.lead{color:var(--muted);margin-top:6px;max-width:780px;line-height:1.6}
.page-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.page.loading .kpis,.page.loading .card{opacity:.55}
.range{color:var(--faint);font-size:12.5px;margin:-10px 0 16px}

/* ---- cards ---- */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px 22px;margin-bottom:20px;min-width:0}
.card.flush{padding:4px 8px}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:8px 12px;flex-wrap:wrap;margin-bottom:14px}
.card-note{color:var(--muted);font-size:12.5px}
.subhead{margin:22px 0 6px;color:var(--muted);font-weight:600}
.note{background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:14px;color:var(--muted);font-size:13px;line-height:1.65}
.note p+p{margin-top:6px}
.grid-2{display:grid;grid-template-columns:minmax(0,1fr);gap:0 20px}
@container (min-width:900px){.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}}
.link{font-size:12.5px;color:var(--accent);text-decoration:none;white-space:nowrap}
.link:hover{text-decoration:underline}

/* ---- forms and buttons ---- */
.row{display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap}
label{display:flex;flex-direction:column;gap:7px;font-size:12.5px;color:var(--muted);margin-bottom:14px;flex:1;min-width:150px}
label.narrow{flex:0 1 120px;min-width:100px}
label.check{flex-direction:row;align-items:center;gap:8px;flex:0;min-width:auto;min-height:40px;white-space:nowrap;color:var(--text);font-size:13px}
input,select{width:100%;min-height:40px;padding:9px 12px;border:1px solid var(--border-strong);border-radius:8px;background:var(--input);color:var(--text);font:inherit}
input::placeholder{color:#6f7b8b}
label.check input{width:16px;height:16px;min-height:0;margin:0;accent-color:var(--accent)}
.row>button,.row>.row-buttons{margin-bottom:14px}
.row-buttons{display:flex;gap:10px;flex-wrap:wrap}
button,.button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:36px;padding:8px 14px;border:1px solid var(--border-strong);border-radius:8px;background:var(--raised);color:var(--text);font:inherit;font-size:13px;font-weight:500;cursor:pointer;white-space:nowrap;text-decoration:none}
button:hover,.button:hover{border-color:var(--accent)}
button.primary{background:var(--accent);color:var(--accent-ink);border-color:transparent;font-weight:650}
button.primary:hover{background:#cff0dc}
button.danger{background:transparent;color:var(--danger);border-color:#5b3438}
button.danger:hover{background:var(--danger-soft);border-color:var(--danger)}
button:disabled{opacity:.5;cursor:wait}
.segmented{display:inline-flex;gap:2px;padding:3px;background:var(--input);border:1px solid var(--border);border-radius:10px}
.segmented button{min-height:30px;padding:5px 12px;border:0;border-radius:7px;background:transparent;color:var(--muted)}
.segmented button:hover{color:var(--text)}
.segmented button[aria-pressed=true]{background:var(--raised);color:var(--text);box-shadow:inset 0 0 0 1px var(--border-strong)}

/* ---- tables ---- */
.table-wrap{overflow-x:auto}
.table-wrap table:not(.compact){min-width:760px}
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;color:var(--muted);font-weight:500;font-size:12px;padding:12px;white-space:nowrap;border-bottom:1px solid var(--border)}
td{padding:13px 12px;border-top:1px solid var(--border);vertical-align:top;line-height:1.6}
tbody tr:first-child td{border-top:0}
tbody tr:hover td{background:#ffffff05}
table.compact th,table.compact td{padding-left:8px;padding-right:8px}
table.compact td{padding-top:10px;padding-bottom:10px}
table.compact td:first-child{white-space:nowrap}
th.num,td.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
td small{display:block;color:var(--muted);font-family:var(--mono);font-size:11.5px}
td small.text{font-family:inherit;font-size:12px;overflow-wrap:break-word;max-width:280px}
td.nowrap{white-space:nowrap}
td.mono{font-family:var(--mono);font-size:12px;color:var(--muted);overflow-wrap:anywhere}
td.memo{overflow-wrap:anywhere;max-width:360px}
td.actions{padding-top:6px;padding-bottom:6px}
td.actions button{margin:2px 6px 2px 0}
td.empty{padding:30px 12px;color:var(--muted);text-align:center}
tbody tr:hover td.empty{background:none}
.pager{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding-top:14px}
.card.flush .pager{padding:12px 6px 10px}
.pager-info{margin-right:auto;color:var(--muted);font-size:12.5px}
.table-foot{padding:10px 6px 8px;color:var(--faint);font-size:12px}
.tag{display:inline-block;white-space:nowrap;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:500;line-height:1.6;background:#23362d;color:var(--accent)}
.tag.off{background:var(--danger-soft);color:var(--danger)}
.tag.wait{background:var(--info-soft);color:var(--info)}
.tag.warn{background:var(--warn-soft);color:var(--warn)}
.tag.muted{background:#262c35;color:var(--muted)}
code{font-family:var(--mono)}
code.url{font-size:11.5px;color:var(--muted);word-break:break-all}
.new-key{margin-top:4px;padding:16px;border:1px solid var(--accent);border-radius:10px;background:#bce7cd0d}
.new-key code{display:block;margin:10px 0 14px;padding:12px 14px;border-radius:8px;background:var(--input);color:var(--accent);font-size:14px;word-break:break-all}
.device-list{list-style:none;margin:10px 0 0;padding:0}
.device-list li{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;border-top:1px solid var(--border);font-size:13px;overflow-wrap:anywhere}
.device-list li.empty{color:var(--muted)}

/* ---- dashboard ---- */
.kpis{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-bottom:20px}
@container (min-width:940px){.kpis{grid-template-columns:repeat(4,minmax(0,1fr))}}
@container (max-width:480px){.kpis{grid-template-columns:minmax(0,1fr)}}
.kpi{min-width:0;padding:16px 18px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}
.kpi.highlight{border-color:#bce7cd52;background:linear-gradient(180deg,#bce7cd12,transparent 75%),var(--surface)}
.kpi-label{color:var(--muted);font-size:12.5px;font-weight:500}
.kpi-value{margin-top:6px;font-size:24px;font-weight:650;letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi-sub{min-height:18px;margin-top:3px;color:var(--muted);font-size:12px}
.delta{font-weight:650}
.delta.up{color:var(--accent)}
.delta.down{color:var(--danger)}
.chart{position:relative;min-height:220px;border-radius:8px}
.chart svg{display:block;width:100%;height:auto;overflow:visible}
.chart .grid{stroke:#ffffff12;stroke-width:1}
.chart .axis{stroke:#ffffff33;stroke-width:1}
.chart .tick{fill:var(--faint);font-size:11px}
.chart .value{fill:var(--muted);font-size:11px;font-weight:600}
.chart .bar{fill:var(--accent);opacity:.82}
.chart .bar.active{opacity:1;fill:#dcf5e6}
.chart .cursor{fill:#ffffff0b}
.chart .hit{fill:transparent;cursor:crosshair}
.chart-tip{position:absolute;z-index:2;pointer-events:none;padding:8px 11px;border:1px solid var(--border-strong);border-radius:8px;background:#0b0e12f2;box-shadow:0 10px 26px #0009;font-size:12px;line-height:1.5;white-space:nowrap}
.chart-tip strong{display:block;font-size:13px}
.chart-tip span{display:block;color:var(--muted)}
.chart-empty{position:absolute;inset:0 0 28px 56px;display:grid;place-items:center;color:var(--muted);font-size:13px;pointer-events:none}
.grid-2.breakdowns{grid-template-columns:minmax(0,1fr)}
@container (min-width:1080px){.grid-2.breakdowns{grid-template-columns:repeat(2,minmax(0,1fr))}}
.share{display:flex;align-items:center;gap:8px;min-width:96px}
.share-bar{flex:1;min-width:36px;height:6px;overflow:hidden;border-radius:99px;background:#ffffff12}
.share-bar span{display:block;height:100%;border-radius:99px;background:var(--accent)}
.share-text{min-width:42px;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums;text-align:right}
.card-foot{margin-top:14px}
.checklist{list-style:none;margin:0;padding:0}
.checklist li{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--border)}
.checklist li:first-child{padding-top:2px;border-top:0}
.checklist .dot{flex:none;width:8px;height:8px;border-radius:50%;background:var(--accent)}
.checklist li.warn .dot{background:var(--warn)}
.checklist li>div{flex:1;min-width:0}
.checklist strong{display:block;font-size:13px;font-weight:550}
.checklist small{color:var(--muted);font-size:12px}
.stat-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 24px;margin:0}
.stat-list div{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-top:1px solid var(--border)}
.stat-list div:nth-child(-n+2){padding-top:2px;border-top:0}
.stat-list dt{color:var(--muted);font-size:13px}
.stat-list dd{margin:0;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}

/* ---- status message, dialog ---- */
#message{position:fixed;right:20px;bottom:20px;z-index:50;max-width:min(440px,calc(100vw - 40px));margin:0;padding:12px 16px;border:1px solid var(--border-strong);border-left:3px solid var(--accent);border-radius:10px;background:#1d2430;color:#e3ecff;box-shadow:0 12px 32px #0009;font-size:13px;white-space:pre-wrap}
#message.error{border-left-color:#ff8f84;color:var(--danger)}
#message:empty{padding:0;border:0;background:none;box-shadow:none}
dialog{width:min(480px,calc(100vw - 32px));padding:26px;border:1px solid var(--border);border-radius:14px;background:var(--surface);color:var(--text)}
dialog h2{margin-bottom:8px;font-size:18px}
dialog .muted{margin-bottom:16px}
dialog::backdrop{background:#000a}

/* ---- narrow screens: the sidebar becomes a top bar with a menu toggle ---- */
@media (max-width:900px){
  .shell{display:block}
  .sidebar{z-index:30;height:auto;max-height:100vh;gap:0;padding:10px 14px;border-right:0;border-bottom:1px solid var(--border)}
  .sidebar-top{padding:0}
  .nav-toggle{display:inline-flex;min-width:40px;min-height:40px;padding:8px}
  .nav{display:none;padding:10px 0 4px}
  .nav-open .nav{display:flex}
  .nav-bottom{margin-top:10px}
  .content{padding:22px 16px 56px}
}
@media (max-width:560px){
  h1{font-size:22px}
  .card{padding:16px}
  .stat-list{grid-template-columns:minmax(0,1fr)}
  .stat-list div:nth-child(2){padding-top:10px;border-top:1px solid var(--border)}
}
@media (prefers-reduced-motion:no-preference){
  .page .kpis,.page .card{transition:opacity .15s}
}

/* ---- Email khách hàng (Resend) ---- */
textarea{width:100%;min-height:72px;padding:9px 12px;border:1px solid var(--border-strong);border-radius:8px;background:var(--input);color:var(--text);font:inherit;line-height:1.55;resize:vertical}
textarea::placeholder{color:#6f7b8b}
#mail-body{min-height:200px}
.mail-test{margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}
.mail-toolbar{display:flex;gap:12px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin-bottom:12px}
.mail-toolbar .segmented{flex-wrap:wrap}
label.mail-search{margin:0;flex:0 1 300px;min-width:200px}
.mail-table{max-height:420px;overflow-y:auto;border:1px solid var(--border);border-radius:10px;margin-bottom:4px}
.mail-table thead th{position:sticky;top:0;z-index:1;background:var(--surface-2)}
th.pick,td.pick{width:44px;text-align:center}
th.pick input,td.pick input{width:16px;height:16px;min-height:0;margin:0;accent-color:var(--accent);vertical-align:middle}
.field-error{color:var(--danger);font-size:12.5px;margin:-8px 0 12px;min-height:0}
.field-error:empty{display:none}
#mail-form{margin-top:18px}
.mail-preview{background:#ffffff;color:#1d1d1f;border-radius:12px;padding:20px 22px;margin:4px 0 16px;max-width:620px}
.mail-preview-meta{color:#6e6e73;font-size:12.5px;margin-bottom:6px;overflow-wrap:anywhere}
.mail-preview-subject{font-weight:600;font-size:15px;margin-bottom:12px;overflow-wrap:anywhere}
.mail-preview-body{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.65;font-size:14px}
.mail-preview-foot{color:#6e6e73;font-size:12px;border-top:1px solid #ececf0;margin-top:16px;padding-top:12px}
.mail-detail{padding:4px 6px 12px}
.mail-detail h3{font-size:14px;margin:14px 0 10px;overflow-wrap:anywhere}
.mail-detail .mail-preview-body{background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:12px;color:var(--muted);font-size:13px;max-height:240px;overflow:auto}
.link-button{display:inline-block;min-height:0;margin-top:4px;padding:0;border:0;background:none;color:var(--accent);font-size:12.5px;text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.link-button:hover{background:none;color:var(--text)}
