/*
 * Design system — Phòng khám Nhân Trang (2026 redesign)
 * Nền trung tính, thẻ trắng viền mảnh, một màu nhấn xanh dương, font Be Vietnam Pro.
 * Mọi màn hình dùng các class dưới đây thay cho style viết tay.
 */

:root{
  /* Neutral scale */
  --n-0:#FFFFFF;
  --n-25:#FBFBFC;
  --n-50:#F6F7F9;
  --n-100:#EFF1F4;
  --n-200:#E4E7EC;
  --n-300:#D0D5DD;
  --n-400:#98A2B3;
  --n-500:#667085;
  --n-600:#475467;
  --n-700:#344054;
  --n-900:#101828;

  /* Brand blue */
  --brand-25:#F5F8FF;
  --brand-50:#EEF4FF;
  --brand-100:#D6E4FF;
  --brand-500:#3B7BF6;
  --brand-600:#2563EB;
  --brand-700:#1D4ED8;

  /* Semantic */
  --success-50:#EEF4FF; --success-600:#2563EB; --success-700:#1D4ED8;
  --danger-50:#FEF3F2;  --danger-200:#FECDCA; --danger-600:#D92D20; --danger-700:#B42318;
  --warn-50:#FFFAEB;    --warn-200:#FEDF89;   --warn-700:#B54708;
  --violet-50:#F4F3FF;  --violet-600:#6941C6; --violet-700:#5B34B3;

  --canvas:var(--n-50);
  --surface:var(--n-0);
  --line:var(--n-200);
  --line-strong:var(--n-300);
  --ink:var(--n-900);
  --ink-2:var(--n-700);
  --muted:var(--n-500);
  --subtle:var(--n-400);
  --brand:var(--brand-600);

  /* Legacy aliases kept so untouched markup still follows the new palette */
  --g-50:var(--n-25); --g-100:var(--n-100); --g-200:var(--n-200); --g-300:var(--n-300);
  --g-400:var(--n-400); --g-500:var(--n-500); --g-600:var(--n-500); --g-700:var(--n-700); --g-900:var(--n-900);
  --surface-soft:var(--n-25); --surface-tint:var(--brand-25); --ink-soft:var(--n-700);
  --brand-strong:var(--brand-700); --brand-soft:var(--brand-50);
  --warn:var(--warn-700); --warn-soft:var(--warn-50); --danger:var(--danger-600);

  --r-xs:6px; --r-sm:8px; --r-md:12px; --r-lg:16px; --r-xl:20px;
  --shadow-xs:0 1px 2px rgba(16,24,40,.05);
  --shadow-sm:0 1px 3px rgba(16,24,40,.06),0 1px 2px rgba(16,24,40,.04);
  --shadow-md:0 8px 24px -6px rgba(16,24,40,.12),0 2px 6px rgba(16,24,40,.04);
  --shadow-lg:0 24px 48px -12px rgba(16,24,40,.18);
  --shadow-lift:var(--shadow-md);
  --ring:0 0 0 4px rgba(37,99,235,.18);
  --ease:cubic-bezier(.2,.8,.2,1);
  --sidebar-w:252px;
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;height:100%}
body{font-family:'Be Vietnam Pro',system-ui,-apple-system,sans-serif;background:var(--canvas);color:var(--ink);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5;font-variant-numeric:tabular-nums}
h1,h2,h3,h4{margin:0;text-wrap:balance;letter-spacing:-.02em}
p{margin:0}
input,button,select,textarea{font-family:inherit;font-size:inherit}
button{touch-action:manipulation}
:focus-visible{outline:none;box-shadow:var(--ring)!important}
input:focus,select:focus,textarea:focus{border-color:var(--brand-500)!important;box-shadow:var(--ring)!important;outline:none}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--n-300);border-radius:8px;border:3px solid transparent;background-clip:content-box}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important}}

/* ---------- Layout utilities ---------- */
.stack{display:flex;flex-direction:column}
.row{display:flex;align-items:center}
.row-top{display:flex;align-items:flex-start}
.between{justify-content:space-between}
.wrap{flex-wrap:wrap}
.grow{flex:1;min-width:0}
.shrink-0{flex-shrink:0}
.gap-4{gap:4px}.gap-6{gap:6px}.gap-8{gap:8px}.gap-10{gap:10px}.gap-12{gap:12px}.gap-16{gap:16px}.gap-20{gap:20px}.gap-24{gap:24px}
.mt-4{margin-top:4px}.mt-8{margin-top:8px}.mt-12{margin-top:12px}.mt-16{margin-top:16px}.mt-20{margin-top:20px}.mt-24{margin-top:24px}
.mb-8{margin-bottom:8px}.mb-12{margin-bottom:12px}.mb-16{margin-bottom:16px}.mb-20{margin-bottom:20px}.mb-24{margin-bottom:24px}
.w-full{width:100%}
.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.grid{display:grid;gap:16px}
.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.grid-auto{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.split{display:grid;grid-template-columns:300px minmax(0,1fr);gap:20px;align-items:start}
.split-wide{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:20px;align-items:start}
.sticky{position:sticky;top:0}

/* ---------- Typography ---------- */
.eyebrow{font-size:12px;font-weight:600;color:var(--brand);letter-spacing:.02em}
.h1{font-size:28px;line-height:1.2;font-weight:700;letter-spacing:-.025em;color:var(--ink)}
.h2{font-size:18px;line-height:1.35;font-weight:700;color:var(--ink)}
.h3{font-size:15px;line-height:1.4;font-weight:600;color:var(--ink)}
.text-sm{font-size:13px}.text-xs{font-size:12px}.text-lg{font-size:16px}
.muted{color:var(--muted)}
.subtle{color:var(--subtle)}
.ink-2{color:var(--ink-2)}
.strong{font-weight:600}
.bold{font-weight:700}
.num{font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.text-brand{color:var(--brand)}
.text-success{color:var(--success-700)}
.text-danger{color:var(--danger-700)}
.text-violet{color:var(--violet-700)}

/* ---------- Page header ---------- */
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:24px}
.page-head .h1{margin-top:2px}
.page-head .page-sub{color:var(--muted);font-size:14px;margin-top:6px;max-width:640px}
.page-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}

/* ---------- Card ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-xs)}
.card-pad{padding:20px}
.card-pad-sm{padding:14px}
.card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:18px 20px;border-bottom:1px solid var(--line)}
.card-head .h2,.card-head .h3{margin:0}
.card-sub{color:var(--muted);font-size:13px;margin-top:2px}
.card-body{padding:20px}
.card-foot{padding:14px 20px;border-top:1px solid var(--line);background:var(--n-25);border-radius:0 0 var(--r-lg) var(--r-lg)}
.card-tint{background:var(--brand-25);border-color:var(--brand-100)}
.card-dark{background:linear-gradient(135deg,#1E3A8A 0%,#2563EB 100%);border-color:transparent;color:#fff}
.card-dark .muted{color:rgba(255,255,255,.72)}
.divider{height:1px;background:var(--line);border:0;margin:16px 0}

/* ---------- Buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 16px;border-radius:var(--r-sm);border:1px solid transparent;font-weight:600;font-size:14px;line-height:1;cursor:pointer;white-space:nowrap;transition:background-color .15s var(--ease),border-color .15s var(--ease),color .15s var(--ease),box-shadow .15s var(--ease)}
.btn:disabled,.btn.is-disabled{opacity:.5;cursor:not-allowed}
.btn-primary{background:var(--brand-600);color:#fff;box-shadow:var(--shadow-xs)}
.btn-primary:hover:not(:disabled){background:var(--brand-700)}
.btn-secondary{background:#fff;color:var(--ink-2);border-color:var(--line-strong);box-shadow:var(--shadow-xs)}
.btn-secondary:hover:not(:disabled){background:var(--n-50)}
.btn-ghost{background:transparent;color:var(--ink-2)}
.btn-ghost:hover:not(:disabled){background:var(--n-100)}
.btn-soft{background:var(--brand-50);color:var(--brand-700)}
.btn-soft:hover:not(:disabled){background:var(--brand-100)}
.btn-danger{background:var(--danger-600);color:#fff}
.btn-danger:hover:not(:disabled){background:var(--danger-700)}
.btn-danger-soft{background:var(--danger-50);color:var(--danger-700)}
.btn-danger-soft:hover:not(:disabled){background:var(--danger-200)}
.btn-violet{background:var(--violet-600);color:#fff}
.btn-violet:hover:not(:disabled){background:var(--violet-700)}
.btn-sm{min-height:32px;padding:0 12px;font-size:13px}
.btn-lg{min-height:48px;padding:0 20px;font-size:15px}
.btn-block{width:100%}
.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--r-sm);border:1px solid var(--line);background:#fff;color:var(--muted);cursor:pointer;flex-shrink:0}
.icon-btn:hover{background:var(--n-50);color:var(--ink)}
.icon-btn-sm{width:30px;height:30px}
.icon-btn-danger:hover{background:var(--danger-50);color:var(--danger-700);border-color:var(--danger-200)}

/* ---------- Segmented control / tabs ---------- */
.seg{display:inline-flex;gap:2px;padding:3px;background:var(--n-100);border-radius:10px;max-width:100%;overflow-x:auto;scrollbar-width:none}
.seg::-webkit-scrollbar{display:none}
.seg-item{min-height:34px;padding:0 14px;border:0;border-radius:8px;background:transparent;color:var(--muted);font-weight:600;font-size:13px;cursor:pointer;white-space:nowrap}
.seg-item:hover{color:var(--ink)}
.seg-item.is-active{background:#fff;color:var(--ink);box-shadow:var(--shadow-sm)}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none}
.tab{min-height:40px;padding:0 4px;margin-right:16px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--muted);font-weight:600;font-size:14px;cursor:pointer;white-space:nowrap}
.tab:hover{color:var(--ink)}
.tab.is-active{color:var(--brand-700);border-bottom-color:var(--brand-600)}

/* ---------- Chips / badges ---------- */
.chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 8px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap;background:var(--n-100);color:var(--ink-2)}
.chip-brand{background:var(--brand-50);color:var(--brand-700)}
.chip-success{background:var(--success-50);color:var(--success-700)}
.chip-danger{background:var(--danger-50);color:var(--danger-700)}
.chip-warn{background:var(--warn-50);color:var(--warn-700)}
.chip-violet{background:var(--violet-50);color:var(--violet-700)}
.chip-dot:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}

/* ---------- Form fields ---------- */
.field{display:flex;flex-direction:column;gap:6px;min-width:0}
.field-label{font-size:13px;font-weight:600;color:var(--ink-2)}
.field-hint{font-size:12px;color:var(--muted)}
.input,.select,.textarea{width:100%;min-height:40px;padding:8px 12px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:#fff;color:var(--ink);font-size:16px;box-shadow:var(--shadow-xs);outline:none}
@media(min-width:861px){.input,.select,.textarea{font-size:14px}}
.textarea{min-height:88px;resize:vertical;line-height:1.5}
.select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%23667085' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:34px;cursor:pointer}
.input-sm{min-height:34px;padding:6px 10px}

/* ---------- Avatar ---------- */
.avatar{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:50%;color:#fff;font-weight:600;background:var(--brand-600);width:36px;height:36px;font-size:13px}
.avatar-xs{width:24px;height:24px;font-size:10px}
.avatar-sm{width:32px;height:32px;font-size:12px}
.avatar-lg{width:48px;height:48px;font-size:16px}
.avatar-xl{width:64px;height:64px;font-size:21px}

/* ---------- Person context bar: luôn cho biết đang chấm / xem ai ---------- */
.person-bar{display:flex;align-items:center;gap:14px;padding:14px 16px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-xs)}
.person-bar .person-label{font-size:12px;font-weight:600;color:var(--muted)}
.person-bar .person-name{font-size:17px;font-weight:700;color:var(--ink);line-height:1.3}
.person-bar .person-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:4px}
.person-bar .person-switch{margin-left:auto;min-width:220px}
.person-bar.is-sticky{position:sticky;top:12px;z-index:5}

/* ---------- Stats ---------- */
.stat{padding:16px 18px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-xs);min-width:0}
.stat-label{font-size:13px;color:var(--muted);font-weight:500}
.stat-value{font-size:28px;font-weight:700;letter-spacing:-.03em;line-height:1.15;margin-top:6px;color:var(--ink)}
.stat-sub{font-size:12px;color:var(--muted);margin-top:4px}
.stat-dark{background:linear-gradient(135deg,#1E3A8A 0%,#2563EB 100%);border-color:transparent;color:#fff}
.stat-dark .stat-label,.stat-dark .stat-sub{color:rgba(255,255,255,.75)}
.stat-dark .stat-value{color:#fff}

/* ---------- Lists ---------- */
.list{display:flex;flex-direction:column}
.list-row{display:flex;align-items:center;gap:12px;padding:12px 16px;border-top:1px solid var(--line)}
.list-row:first-child{border-top:0}
.list-row.is-clickable{cursor:pointer;border-left:0;border-right:0;border-bottom:0;background:transparent;width:100%;text-align:left;font:inherit;color:inherit}
.list-row.is-clickable:hover{background:var(--n-25)}
.list-row.is-selected{background:var(--brand-25);box-shadow:inset 3px 0 0 var(--brand-600)}
.list-boxed{border:1px solid var(--line);border-radius:var(--r-md);background:#fff;overflow:hidden}

/* Criterion row: tiêu chí + nút Đạt/Chưa đạt */
.criterion{display:flex;align-items:center;gap:12px;padding:12px 16px;border-top:1px solid var(--line)}
.criterion:first-child{border-top:0}
.criterion-num{width:24px;height:24px;border-radius:6px;background:var(--n-100);color:var(--muted);font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.criterion-title{font-size:14px;font-weight:500;color:var(--ink);line-height:1.45}
.criterion-detail{font-size:12.5px;color:var(--muted);margin-top:2px;line-height:1.45}
.criterion.is-on{background:var(--success-50)}
.criterion.is-on .criterion-num{background:var(--success-600);color:#fff}

/* Toggle Đạt / Chưa đạt */
.toggle{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:0 12px;border:1px solid var(--line-strong);border-radius:999px;background:#fff;color:var(--ink-2);font-weight:600;font-size:13px;cursor:pointer;white-space:nowrap;flex-shrink:0}
.toggle:before{content:"";width:16px;height:16px;border-radius:50%;border:1.5px solid var(--n-300);background:#fff;flex-shrink:0}
.toggle.is-on{background:var(--success-600);border-color:var(--success-600);color:#fff}
.toggle.is-on:before{border-color:#fff;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%232563EB' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 8.5l2.5 2.5L12 5.5'/%3E%3C/svg%3E") center/12px no-repeat}
.toggle:disabled,.toggle.is-readonly{cursor:default}
.toggle-violet.is-on{background:var(--violet-600);border-color:var(--violet-600)}
.toggle-violet.is-on:before{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%236941C6' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 8.5l2.5 2.5L12 5.5'/%3E%3C/svg%3E")}

/* Checkbox vuông */
.check{width:22px;height:22px;border-radius:6px;border:1.5px solid var(--n-300);background:#fff;display:inline-flex;align-items:center;justify-content:center;color:transparent;font-size:13px;font-weight:700;cursor:pointer;flex-shrink:0;padding:0}
.check.is-on{background:var(--brand-600);border-color:var(--brand-600);color:#fff}

/* ---------- Day strip ---------- */
.day-strip{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.day{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 2px;border:1px solid var(--line);border-radius:var(--r-md);background:#fff;color:var(--ink);cursor:pointer;min-width:0}
.day:hover{border-color:var(--line-strong)}
.day-name{font-size:12px;font-weight:600;color:var(--muted)}
.day-date{font-size:15px;font-weight:700}
.day-dot{width:6px;height:6px;border-radius:50%;background:transparent;margin-top:2px}
.day.is-done .day-dot{background:var(--success-600)}
.day.is-future{color:var(--subtle);background:var(--n-25)}
.day.is-today .day-name{color:var(--brand)}
.day.is-active{background:var(--brand-600);border-color:var(--brand-600);color:#fff}
.day.is-active .day-name{color:rgba(255,255,255,.8)}
.day.is-active.is-done .day-dot{background:#fff}

/* ---------- Alerts / empty ---------- */
.alert{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:var(--r-md);font-size:13.5px;font-weight:500;line-height:1.5;border:1px solid transparent}
.alert-info{background:var(--brand-25);border-color:var(--brand-100);color:var(--brand-700)}
.alert-success{background:var(--success-50);border-color:var(--brand-100);color:var(--success-700)}
.alert-warn{background:var(--warn-50);border-color:var(--warn-200);color:var(--warn-700)}
.alert-danger{background:var(--danger-50);border-color:var(--danger-200);color:var(--danger-700)}
.empty{padding:28px 16px;text-align:center;color:var(--muted);font-size:13.5px;border:1px dashed var(--line-strong);border-radius:var(--r-md);background:var(--n-25)}
.empty-title{font-size:15px;font-weight:600;color:var(--ink-2);margin-bottom:4px}

/* ---------- Progress ---------- */
.progress{height:8px;border-radius:999px;background:var(--n-100);overflow:hidden}
.progress>span{display:block;height:100%;border-radius:999px;background:var(--brand-500)}

/* ---------- Modal / drawer ---------- */
.overlay{position:fixed;inset:0;background:rgba(16,24,40,.45);backdrop-filter:blur(4px);z-index:65;display:flex;align-items:center;justify-content:center;padding:20px}
.modal{background:#fff;border-radius:var(--r-xl);width:100%;max-width:520px;max-height:90vh;overflow:auto;box-shadow:var(--shadow-lg)}
.modal-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:18px 20px;border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:1}
.modal-body{padding:20px}
.modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid var(--line);position:sticky;bottom:0;background:#fff}

/* ---------- Bảng tin (timeline) ---------- */
.timeline{display:flex;flex-direction:column}
.timeline-row{display:grid;grid-template-columns:96px 24px minmax(0,1fr);gap:0 12px}
.timeline-time{text-align:right;padding-top:14px}
.timeline-rail{position:relative;display:flex;justify-content:center}
.timeline-rail:before{content:"";position:absolute;top:0;bottom:0;left:50%;width:2px;margin-left:-1px;background:var(--line)}
.timeline-row:first-child .timeline-rail:before{top:20px}
.timeline-row:last-child .timeline-rail:before{bottom:calc(100% - 20px)}
.timeline-dot{position:relative;margin-top:18px;width:12px;height:12px;border-radius:50%;background:#fff;border:2px solid var(--brand-500);box-shadow:0 0 0 4px var(--canvas)}
.timeline-dot.is-reward{background:var(--brand-600);border-color:var(--brand-600)}
.news-card{padding:16px;margin-bottom:16px;min-width:0}
.news-reward{background:linear-gradient(180deg,var(--brand-25),#fff);border-color:var(--brand-100)}
.news-content{margin-top:10px;font-size:14.5px;line-height:1.6;color:var(--ink);white-space:pre-line;word-break:break-word}
.news-content:empty{display:none}
.news-images{display:grid;gap:6px;margin-top:12px;border-radius:var(--r-md);overflow:hidden}
.news-images a{display:block;background:var(--n-100)}
.news-images img{display:block;width:100%;height:100%;object-fit:cover}
.news-images-1 img{max-height:420px;object-fit:contain;background:var(--n-100)}
.news-images-2,.news-images-3,.news-images-4{grid-template-columns:1fr 1fr}
.news-images-2 a,.news-images-3 a,.news-images-4 a{aspect-ratio:4/3}
.news-images-3 a:first-child{grid-column:1/-1;aspect-ratio:16/9}
.news-draft-images{display:flex;gap:8px;flex-wrap:wrap}
.news-draft-thumb{position:relative;width:88px;height:88px;border-radius:var(--r-sm);overflow:hidden;border:1px solid var(--line)}
.news-draft-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.news-draft-remove{position:absolute;top:4px;right:4px;width:22px;height:22px;border-radius:50%;border:0;background:rgba(16,24,40,.7);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0}
@media(max-width:860px){
  .timeline-row{grid-template-columns:52px 16px minmax(0,1fr);gap:0 8px}
  .timeline-time .text-sm{font-size:12px}
}

/* ================================================================
 * App shell
 * ================================================================ */
.app-root{height:100dvh;overflow:hidden;background:var(--canvas)}
.app-shell{height:100dvh;display:flex;background:var(--canvas)}
.app-sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);height:100dvh;display:flex;flex-direction:column;background:#fff;border-right:1px solid var(--line);padding:18px 14px}
.brand{display:flex;align-items:center;gap:10px;padding:4px 8px 20px}
.brand-mark{width:36px;height:36px;border-radius:10px;background:linear-gradient(145deg,var(--brand-500),var(--brand-700));display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:0 6px 16px -4px rgba(37,99,235,.45)}
.brand-name{font-size:15px;font-weight:700;line-height:1.2}
.brand-sub{font-size:12px;color:var(--muted)}
.nav-label{font-size:11px;font-weight:600;color:var(--subtle);text-transform:uppercase;letter-spacing:.06em;padding:0 10px;margin:6px 0 6px}
.side-nav{display:flex;flex-direction:column;gap:2px}
.nav-item{display:flex;align-items:center;gap:10px;width:100%;min-height:40px;padding:0 10px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--ink-2);font-weight:500;font-size:14px;cursor:pointer;text-align:left}
.nav-item:hover{background:var(--n-50);color:var(--ink)}
.nav-item .nav-icon{display:flex;color:var(--subtle)}
.nav-item.is-active{background:var(--brand-50);color:var(--brand-700);font-weight:600}
.nav-item.is-active .nav-icon{color:var(--brand-600)}
.sidebar-account{margin-top:auto;display:flex;align-items:center;gap:10px;padding:10px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--n-25)}
.main-column{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}
.app-main{flex:1;overflow-y:auto;overflow-x:hidden}
.content-wrap{width:100%;max-width:1200px;margin:0 auto;padding:32px 32px 56px}
.mobile-header{display:none}
.mobile-nav{display:none}

/* Login */
.login-shell{min-height:100dvh;overflow:auto;display:grid;place-items:center;padding:32px 20px;background:radial-gradient(1200px 600px at 10% -10%,var(--brand-50),transparent 60%),var(--canvas)}
.login-card{width:100%;max-width:440px;background:#fff;border:1px solid var(--line);border-radius:var(--r-xl);box-shadow:var(--shadow-md);padding:32px}
.account-btn{display:flex;align-items:center;gap:12px;width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-md);background:#fff;cursor:pointer;text-align:left}
.account-btn:hover{border-color:var(--brand-500);background:var(--brand-25)}

/* ---------- Responsive ---------- */
@media(max-width:1080px){
  .split-wide{grid-template-columns:1fr}
  .grid-3{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:860px){
  body{font-size:14px}
  .app-shell{flex-direction:column}
  .app-sidebar{display:none}
  .mobile-header{display:flex;align-items:center;gap:10px;height:56px;flex-shrink:0;padding:0 16px;background:rgba(255,255,255,.95);border-bottom:1px solid var(--line);backdrop-filter:blur(12px)}
  .mobile-nav{display:flex;flex-shrink:0;background:#fff;border-top:1px solid var(--line);padding:6px 8px calc(6px + env(safe-area-inset-bottom))}
  .bnav-item{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:50px;border:0;border-radius:10px;background:transparent;color:var(--subtle);font-size:11px;font-weight:600;cursor:pointer}
  .bnav-item.is-active{color:var(--brand-700);background:var(--brand-50)}
  .content-wrap{padding:16px 16px 28px}
  .h1{font-size:22px}
  .page-head{margin-bottom:16px}
  .grid-2,.grid-3,.split{grid-template-columns:1fr}
  .card-pad,.card-body{padding:16px}
  .card-head{padding:14px 16px}
  .person-bar{flex-wrap:wrap;padding:12px}
  .person-bar .person-switch{margin-left:0;min-width:0;width:100%}
  .person-bar.is-sticky{position:static}
  .stat-grid{grid-template-columns:1fr 1fr}
  .stat-grid .stat-dark{grid-column:1/-1}
  .stat{padding:12px 14px}
  .stat-value{font-size:22px}
  .criterion{flex-wrap:wrap;padding:12px}
  .criterion .criterion-title{flex-basis:calc(100% - 40px)}
  .criterion .toggle,.criterion>.chip{margin-left:36px}
  .day{padding:6px 0}
  .day-date{font-size:14px}
  .modal{max-height:94vh}
  .login-card{padding:24px 20px}
}

@keyframes confettiFall{0%{transform:translateY(-14vh) rotate(0deg);opacity:1}100%{transform:translateY(112vh) rotate(680deg);opacity:.9}}
@keyframes effectIn{0%{transform:scale(.6);opacity:0}55%{transform:scale(1.06);opacity:1}100%{transform:scale(1);opacity:1}}
@keyframes shakeSoft{0%,100%{transform:translateX(0)}20%{transform:translateX(-7px)}40%{transform:translateX(6px)}60%{transform:translateX(-4px)}80%{transform:translateX(3px)}}
@keyframes floatUp{from{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}
@keyframes sheen{0%{background-position:-120% 0}100%{background-position:220% 0}}
@keyframes formulaCaret{0%,45%{opacity:1}46%,100%{opacity:.15}}
