@import"https://fonts.googleapis.com/css2?family=IBM+Plex+Sans+Thai:wght@300;400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap";:root{--bg: #fafaf7;--bg-sunken: #f3f2ed;--surface: #ffffff;--surface-2: #faf9f6;--ink: #0e1116;--ink-2: #2a2f38;--muted: #6b7280;--muted-2: #8a8f99;--line: #ececea;--line-strong: #d8d8d4;--accent: oklch(.54 .2 258);--accent-2: oklch(.46 .22 258);--accent-soft: oklch(.96 .03 258);--accent-ink: oklch(.32 .18 258);--success: oklch(.55 .13 155);--success-soft: oklch(.95 .04 155);--danger: oklch(.55 .2 25);--danger-soft: oklch(.96 .04 25);--warning: oklch(.72 .16 75);--warning-soft: oklch(.96 .05 80);--radius: 8px;--radius-lg: 12px;--radius-sm: 4px;--shadow-sm: 0 1px 0 rgba(14,17,22,.04), 0 1px 2px rgba(14,17,22,.04);--shadow-md: 0 1px 0 rgba(14,17,22,.04), 0 4px 14px -4px rgba(14,17,22,.1);--shadow-lg: 0 24px 60px -20px rgba(14,17,22,.2), 0 8px 20px -6px rgba(14,17,22,.1);--font-sans: "Sarabun","IBM Plex Sans Thai",ui-sans-serif,system-ui,sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, monospace;--color-primary: var(--accent);--color-primary-strong: var(--accent-2);--color-primary-soft: var(--accent-soft);--color-primary-ink: var(--accent-ink);--color-secondary: oklch(.6 .11 195);--color-secondary-strong: oklch(.52 .12 195);--color-secondary-soft: oklch(.95 .03 195);--color-secondary-ink: oklch(.38 .1 195);--color-success: var(--success);--color-success-soft: var(--success-soft);--color-danger: var(--danger);--color-danger-soft: var(--danger-soft);--color-warning: var(--warning);--color-warning-soft: var(--warning-soft);--color-info: oklch(.6 .13 235);--color-info-soft: oklch(.95 .03 235);--color-amber: oklch(.7 .15 65);--color-amber-soft: oklch(.95 .05 70);--color-bg: var(--bg);--color-surface: var(--surface);--color-ink: var(--ink);--color-ink-muted: var(--muted);--color-border: var(--line);--text-xxs: 10px;--text-xs: 11px;--text-s: 12px;--text-m: 13px;--text-l: 14px;--text-xl: 16px;--text-xxl: 20px;--text-3xl: 24px;--text-4xl: 30px;--text-5xl: 38px;--fw-100: 100;--fw-200: 200;--fw-300: 300;--fw-400: 400;--fw-500: 500;--fw-600: 600;--fw-700: 700;--fw-800: 800;--fw-900: 900;--fw-thin: 100;--fw-light: 300;--fw-normal: 400;--fw-medium: 500;--fw-semibold: 600;--fw-bold: 700;--fw-extrabold: 800;--fw-black: 900;--leading-tight: 1.2;--leading-snug: 1.35;--leading-normal: 1.5;--leading-relaxed: 1.7}[data-theme=dark]{--bg: #0b0c0e;--bg-sunken: #08090b;--surface: #131418;--surface-2: #181a1f;--ink: #f4f4f1;--ink-2: #d6d7d3;--muted: #8a8d95;--muted-2: #6d7079;--line: #22242a;--line-strong: #2f323a;--accent: oklch(.72 .17 258);--accent-2: oklch(.78 .16 258);--accent-soft: color-mix(in oklab, oklch(.72 .17 258) 18%, transparent);--accent-ink: oklch(.85 .1 258);--success: oklch(.72 .16 155);--success-soft: color-mix(in oklab, oklch(.72 .16 155) 14%, transparent);--danger: oklch(.7 .18 25);--danger-soft: color-mix(in oklab, oklch(.7 .18 25) 14%, transparent);--warning: oklch(.8 .16 75);--warning-soft: color-mix(in oklab, oklch(.8 .16 75) 14%, transparent);--shadow-sm: 0 1px 0 rgba(0,0,0,.4);--shadow-md: 0 1px 0 rgba(0,0,0,.4), 0 6px 20px -8px rgba(0,0,0,.5);--shadow-lg: 0 30px 70px -20px rgba(0,0,0,.7);--color-secondary: oklch(.72 .11 195);--color-secondary-strong: oklch(.78 .1 195);--color-secondary-soft: color-mix(in oklab, oklch(.72 .11 195) 16%, transparent);--color-secondary-ink: oklch(.85 .08 195);--color-info: oklch(.72 .13 235);--color-info-soft: color-mix(in oklab, oklch(.72 .13 235) 16%, transparent);--color-amber: oklch(.8 .14 70);--color-amber-soft: color-mix(in oklab, oklch(.8 .14 70) 16%, transparent)}*{box-sizing:border-box}html,body{margin:0;padding:0;height:100%}body{font-family:var(--font-sans);font-feature-settings:"ss01","cv11";background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-size:var(--text-l);line-height:1.5}#root{min-height:100vh}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit}a{color:inherit;text-decoration:none}.mono{font-family:var(--font-mono);font-feature-settings:"zero"}.tabular{font-variant-numeric:tabular-nums}h1,h2,h3,h4,h5,h6{margin:0;font-family:var(--font-sans);color:var(--ink);line-height:var(--leading-tight);font-weight:var(--fw-bold);letter-spacing:-.01em}h1{font-size:var(--text-4xl)}h2{font-size:var(--text-3xl)}h3{font-size:var(--text-xxl);font-weight:var(--fw-semibold)}h4{font-size:var(--text-xl);font-weight:var(--fw-semibold)}h5{font-size:var(--text-l);font-weight:var(--fw-semibold)}h6{font-size:var(--text-m);font-weight:var(--fw-semibold);color:var(--muted);text-transform:uppercase;letter-spacing:.06em}p{margin:0;font-size:var(--text-l);line-height:var(--leading-normal)}small{font-size:var(--text-s)}.text-xxs{font-size:var(--text-xxs)}.text-xs{font-size:var(--text-xs)}.text-s{font-size:var(--text-s)}.text-m{font-size:var(--text-m)}.text-l{font-size:var(--text-l)}.text-xl{font-size:var(--text-xl)}.text-xxl{font-size:var(--text-xxl)}.text-3xl{font-size:var(--text-3xl)}.text-4xl{font-size:var(--text-4xl)}.text-5xl{font-size:var(--text-5xl)}.fw-300{font-weight:var(--fw-300)}.fw-400{font-weight:var(--fw-400)}.fw-500{font-weight:var(--fw-500)}.fw-600{font-weight:var(--fw-600)}.fw-700{font-weight:var(--fw-700)}.fw-800{font-weight:var(--fw-800)}.fw-900{font-weight:var(--fw-900)}.text-primary{color:var(--color-primary)}.text-secondary{color:var(--color-secondary)}.text-success{color:var(--color-success)}.text-danger{color:var(--color-danger)}.text-warning{color:var(--color-warning)}.text-info{color:var(--color-info)}.text-muted{color:var(--muted)}.text-ink{color:var(--ink)}.app{display:grid;grid-template-columns:248px 1fr;min-height:100vh;background:var(--bg)}.sidebar{background:var(--surface);border-right:1px solid var(--line);padding:18px 14px 24px;display:flex;flex-direction:column;gap:4px;position:sticky;top:0;height:100vh;overflow-y:auto}.brand{display:flex;align-items:center;gap:10px;padding:6px 8px 18px;border-bottom:1px solid var(--line);margin-bottom:14px}.brand-mark{width:28px;height:28px;border-radius:7px;background:var(--ink);color:var(--bg);display:grid;place-items:center;font-family:var(--font-mono);font-weight:var(--fw-600);font-size:var(--text-l);letter-spacing:-.5px}.brand-name{font-weight:var(--fw-600);letter-spacing:-.01em;font-size:var(--text-xl)}.brand-sub{font-size:var(--text-xs);color:var(--muted);margin-top:1px;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em}.nav-section-label{font-size:var(--text-xxs);font-weight:var(--fw-500);color:var(--muted-2);text-transform:uppercase;letter-spacing:.12em;padding:14px 10px 6px;font-family:var(--font-mono)}.nav-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:6px;color:var(--ink-2);font-size:var(--text-m);font-weight:var(--fw-500);cursor:pointer;position:relative;transition:background .12s,color .12s}.nav-item:hover{background:var(--surface-2);color:var(--ink)}.nav-item.active{background:var(--accent-soft);color:var(--accent-ink);font-weight:var(--fw-500)}.nav-item .icon{width:16px;height:16px;flex-shrink:0;opacity:.85}.nav-item .badge{margin-left:auto;font-family:var(--font-mono);font-size:var(--text-xxs);background:var(--ink);color:var(--bg);padding:1px 6px;border-radius:8px;font-weight:var(--fw-500)}.nav-item.active .badge{background:var(--accent);color:#fff}.sidebar-bottom{margin-top:auto;padding-top:14px;border-top:1px solid var(--line)}.topbar{display:flex;align-items:center;gap:18px;padding:14px 28px;background:var(--surface);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}.topbar-title{font-size:var(--text-xl);font-weight:var(--fw-600);letter-spacing:-.01em}.topbar-sub{font-size:var(--text-s);color:var(--muted);font-family:var(--font-mono)}.topbar-spacer{flex:1}.credit-pill{display:flex;align-items:center;gap:12px;padding:6px 8px 6px 14px;border:1px solid var(--line-strong);border-radius:999px;background:var(--surface-2)}.credit-pill .lbl{font-size:var(--text-xxs);font-family:var(--font-mono);text-transform:uppercase;color:var(--muted);letter-spacing:.08em}.credit-pill .val{font-family:var(--font-mono);font-weight:var(--fw-600);font-size:var(--text-l)}.credit-pill .btn-mini{background:var(--ink);color:var(--bg);padding:4px 10px;border-radius:999px;font-size:var(--text-s);border:none;font-weight:var(--fw-500)}.role-switch{display:flex;background:var(--bg-sunken);border-radius:8px;padding:3px;border:1px solid var(--line)}.role-switch button{background:transparent;border:none;padding:5px 12px;font-size:var(--text-s);color:var(--muted);border-radius:6px;font-weight:var(--fw-500)}.role-switch button.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm)}.avatar{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#518fe9,#3689e2 25%,#2487df 37.5%,#1686dd,#0084db,#0083d5,#0082d0 62.5%,#007fc5 75%,#0079b3);background:linear-gradient(135deg,#518fe9,#3689e2 25%,#2487df 37.5%,#1686dd,color(xyz 0.211 0.217 0.704),color(xyz 0.203 0.21 0.692),color(xyz 0.196 0.204 0.68) 62.5%,color(xyz 0.182 0.192 0.655) 75%,color(xyz 0.156 0.169 0.609));color:#fff;display:grid;place-items:center;font-size:var(--text-s);font-weight:var(--fw-600)}.page{padding:28px 32px 64px;max-width:1480px;margin:0 auto;width:100%}.page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:24px}.page-title{font-size:var(--text-3xl);font-weight:var(--fw-600);letter-spacing:-.02em;margin:0}.page-desc{color:var(--muted);font-size:var(--text-m);margin-top:4px}.eyebrow{font-size:var(--text-xs);font-family:var(--font-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.12em;margin-bottom:6px}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg)}.card-pad{padding:22px}.card-head{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--line)}.card-title{font-size:var(--text-l);font-weight:var(--fw-600);letter-spacing:-.005em}.card-sub{font-size:var(--text-s);color:var(--muted);margin-top:2px}.btn{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:7px;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);font-weight:var(--fw-500);font-size:var(--text-m);transition:background .12s,border-color .12s,transform .06s}.btn:hover{background:var(--surface-2)}.btn:active{transform:translateY(.5px)}.btn-primary{background:var(--ink);color:var(--bg);border-color:var(--ink)}.btn-primary:hover{background:var(--ink-2)}[data-theme=dark] .btn-primary{background:var(--accent);color:#fff;border-color:var(--accent)}[data-theme=dark] .btn-primary:hover{background:var(--accent-2)}.btn-accent{background:var(--accent);color:#fff;border-color:var(--accent)}.btn-accent:hover{background:var(--accent-2)}.btn-ghost{background:transparent;border-color:transparent}.btn-ghost:hover{background:var(--surface-2)}.btn-danger{color:var(--danger);border-color:var(--line-strong)}.btn-icon{padding:7px 8px}.btn-sm{padding:5px 10px;font-size:var(--text-s)}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:24px}.stat{padding:18px 20px}.stat .label{font-size:var(--text-xs);font-family:var(--font-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.stat .value{font-size:var(--text-4xl);font-weight:var(--fw-600);letter-spacing:-.025em;margin-top:10px;display:flex;align-items:baseline;gap:6px}.stat .value .unit{font-size:var(--text-m);color:var(--muted);font-weight:var(--fw-400);letter-spacing:0;font-family:var(--font-mono)}.stat .delta{margin-top:10px;font-size:var(--text-s);display:inline-flex;align-items:center;gap:6px;color:var(--muted)}.stat .delta .up{color:var(--success);font-family:var(--font-mono);font-weight:var(--fw-500)}.stat .delta .down{color:var(--danger);font-family:var(--font-mono);font-weight:var(--fw-500)}.stat-spark{margin-top:14px}.tbl{width:100%;border-collapse:collapse}.tbl thead th{text-align:left;font-size:var(--text-xs);font-family:var(--font-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-weight:var(--fw-500);padding:12px 18px;border-bottom:1px solid var(--line);background:var(--surface-2);white-space:nowrap}.tbl tbody td{padding:14px 18px;border-bottom:1px solid var(--line);font-size:var(--text-m);vertical-align:middle}.tbl tbody tr{transition:background .1s;cursor:pointer}.tbl tbody tr:hover{background:var(--surface-2)}.tbl tbody tr:last-child td{border-bottom:none}.tbl tfoot td{padding:14px 18px;font-size:var(--text-m);vertical-align:middle}.tbl .num{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.tbl .right{text-align:right}.pill{display:inline-flex;align-items:center;gap:5px;font-size:var(--text-xs);font-weight:var(--fw-500);padding:2px 8px;border-radius:999px;font-family:var(--font-mono);letter-spacing:0}.pill:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.pill.success{color:var(--success);background:var(--success-soft)}.pill.danger{color:var(--danger);background:var(--danger-soft)}.pill.warning{color:var(--warning);background:var(--warning-soft)}.pill.muted{color:var(--muted);background:var(--bg-sunken)}.pill.accent{color:var(--accent-ink);background:var(--accent-soft)}.pill.violet{color:var(--color-amber);background:var(--color-amber-soft)}.tag{display:inline-flex;align-items:center;padding:2px 7px;border-radius:4px;font-size:var(--text-xs);font-family:var(--font-mono);background:var(--bg-sunken);color:var(--ink-2);border:1px solid var(--line)}.input{background:var(--surface);border:1px solid var(--line-strong);border-radius:7px;padding:8px 12px;font-size:var(--text-m);color:var(--ink);outline:none;transition:border-color .12s,box-shadow .12s;width:100%}.input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.input-group{position:relative}.input-icon{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--muted)}.input-icon+.input{padding-left:34px}.field{display:flex;flex-direction:column;gap:6px}.label{font-size:var(--text-s);font-weight:var(--fw-500);color:var(--ink-2)}.help{font-size:var(--text-xs);color:var(--muted)}.toolbar{display:flex;align-items:center;gap:10px;padding:14px 22px;border-bottom:1px solid var(--line)}.filter-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;background:var(--surface);border:1px solid var(--line-strong);border-radius:6px;font-size:var(--text-s);color:var(--ink-2)}.filter-chip.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}[data-theme=dark] .filter-chip.on{background:var(--accent);color:#fff;border-color:var(--accent)}.chart-grid{display:grid;grid-template-columns:2fr 1fr;gap:16px;margin-bottom:24px}.bars{display:flex;align-items:flex-end;gap:6px;height:180px;padding-top:12px}.bar-col{flex:1;display:flex;flex-direction:column;gap:2px;align-items:stretch}.bar-col .seg{border-radius:2px 2px 0 0;transition:opacity .15s}.bar-col:hover .seg{opacity:.85}.bar-col .lbl{font-size:var(--text-xxs);color:var(--muted);text-align:center;font-family:var(--font-mono);padding-top:6px}.legend{display:flex;gap:16px;padding-top:16px;font-size:var(--text-s)}.legend-item{display:flex;align-items:center;gap:6px;color:var(--muted)}.legend-dot{width:10px;height:10px;border-radius:2px}.donut-wrap{display:flex;align-items:center;gap:20px}.donut{position:relative;width:130px;height:130px}.donut svg{transform:rotate(-90deg)}.donut-center{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center}.donut-center .pct{font-size:var(--text-3xl);font-weight:var(--fw-600);letter-spacing:-.02em}.donut-center .lbl{font-size:var(--text-xxs);color:var(--muted);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0e111666;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center;z-index:100;animation:fadeIn .15s ease-out}[data-theme=dark] .modal-backdrop{background:#0009}.modal{background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow-lg);width:100%;max-width:540px;max-height:88vh;overflow:auto;animation:rise .18s ease-out}.modal.wide{max-width:760px}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--line)}.modal-body{padding:22px}.modal-foot{padding:14px 22px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes rise{0%{opacity:0;transform:translateY(8px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}.auth-shell{min-height:100vh;display:grid;grid-template-columns:1fr 520px;background:var(--bg)}.auth-side{background:linear-gradient(160deg,#0a1628,#010309 60%,#000001);color:#fff;padding:56px 56px 40px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}.auth-side:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:radial-gradient(circle at 20% 30%,oklch(.5 .2 258) 0%,transparent 40%),radial-gradient(circle at 80% 80%,oklch(.55 .18 240) 0%,transparent 50%);opacity:.25}.auth-side:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(rgba(255,255,255,.04) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.04) 1px,transparent 1px);background-size:32px 32px;-webkit-mask-image:linear-gradient(to bottom,black 0%,transparent 80%);mask-image:linear-gradient(to bottom,black 0%,transparent 80%);pointer-events:none}.auth-side>*{position:relative;z-index:1}.auth-quote{font-size:var(--text-4xl);font-weight:var(--fw-400);letter-spacing:-.02em;line-height:1.3;max-width:460px}.auth-quote span{color:#b0d0ff;color:oklch(.85 .1 258)}.auth-meta{display:flex;flex-direction:column;gap:4px}.auth-meta .l1{font-size:var(--text-m);font-weight:var(--fw-500)}.auth-meta .l2{font-size:var(--text-xs);color:#9bafce;font-family:var(--font-mono)}.auth-brand{display:flex;align-items:center;gap:10px;font-weight:var(--fw-600);font-size:var(--text-xl);letter-spacing:-.01em}.auth-brand-mark{width:30px;height:30px;border-radius:7px;background:#fff;color:var(--ink);display:grid;place-items:center;font-family:var(--font-mono);font-weight:var(--fw-600)}.auth-trust-row{display:flex;gap:14px;flex-wrap:wrap;font-family:var(--font-mono);font-size:var(--text-xs);color:#9bafce;letter-spacing:.04em}.auth-trust-row span:before{content:"● ";opacity:.5}.auth-form-side{display:flex;flex-direction:column;background:var(--surface);border-left:1px solid var(--line)}.auth-form-side .topnav{padding:22px 40px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);font-size:var(--text-s);color:var(--muted)}.auth-form-side .body{flex:1;display:flex;flex-direction:column;justify-content:center;padding:40px 56px}.auth-h1{font-size:var(--text-4xl);font-weight:var(--fw-600);letter-spacing:-.02em;margin:0 0 8px}.auth-sub{color:var(--muted);margin-bottom:32px}.auth-form{display:flex;flex-direction:column;gap:18px}.otp{display:flex;gap:10px;justify-content:center;margin:24px 0}.otp input{width:52px;height:60px;text-align:center;font-size:var(--text-3xl);font-family:var(--font-mono);font-weight:var(--fw-600);border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);border-radius:8px;outline:none}.otp input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.otp input.filled{border-color:var(--ink)}[data-theme=dark] .otp input.filled{border-color:var(--accent)}.divider{height:1px;background:var(--line);margin:16px 0}.row{display:flex;align-items:center;gap:12px}.col{display:flex;flex-direction:column;gap:12px}.grow{flex:1}.muted{color:var(--muted)}.mt-1{margin-top:4px}.mt-2{margin-top:8px}.mt-3{margin-top:12px}.mt-4{margin-top:16px}.mt-5{margin-top:20px}.mt-6{margin-top:24px}.pkg-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.pkg{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:24px;position:relative;display:flex;flex-direction:column;transition:border-color .15s,transform .15s}.pkg:hover{border-color:var(--line-strong)}.pkg.featured{border-color:var(--ink);box-shadow:var(--shadow-md)}[data-theme=dark] .pkg.featured{border-color:var(--accent)}.pkg-name{font-size:var(--text-l);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.pkg-credits{font-size:var(--text-5xl);font-weight:var(--fw-600);letter-spacing:-.025em;margin-top:8px}.pkg-credits .u{font-size:var(--text-m);color:var(--muted);font-weight:var(--fw-400);letter-spacing:0;font-family:var(--font-mono)}.pkg-price{font-size:var(--text-3xl);font-weight:var(--fw-600);margin-top:18px;letter-spacing:-.015em}.pkg-price small{font-size:var(--text-s);color:var(--muted);font-weight:var(--fw-400);font-family:var(--font-mono)}.pkg-meta{font-size:var(--text-s);color:var(--muted);margin-top:4px}.pkg-feats{list-style:none;padding:0;margin:20px 0 24px;display:flex;flex-direction:column;gap:8px;font-size:var(--text-m)}.pkg-feats li{display:flex;align-items:center;gap:8px}.pkg-feats li:before{content:"";width:14px;height:14px;border-radius:4px;background:var(--accent-soft);color:var(--accent-ink);display:inline-block;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%231a3ad9' stroke-width='2.5'><polyline points='3.5,8 6.5,11 12.5,5'/></svg>");background-repeat:no-repeat;background-position:center}.pkg-cta{margin-top:auto}.pkg-badge{position:absolute;top:16px;right:16px;font-size:var(--text-xxs);font-family:var(--font-mono);background:var(--ink);color:var(--bg);padding:2px 8px;border-radius:999px;letter-spacing:.06em;text-transform:uppercase}[data-theme=dark] .pkg-badge{background:var(--accent);color:#fff}.pkg-discount{font-size:var(--text-s);color:var(--success);font-family:var(--font-mono);margin-top:8px}.qr-pay{display:grid;grid-template-columns:220px 1fr;gap:28px;align-items:start}.qr-box{width:220px;height:220px;background:#fff;border:1px solid var(--line-strong);border-radius:12px;display:grid;place-items:center;padding:10px}.qr-detail-rows{display:flex;flex-direction:column;gap:12px;font-size:var(--text-m)}.qr-detail-rows .r{display:flex;justify-content:space-between;gap:14px;align-items:baseline}.qr-detail-rows .r .k{color:var(--muted);font-size:var(--text-s)}.qr-detail-rows .r .v{font-family:var(--font-mono);font-weight:var(--fw-500)}.qr-detail-rows .total{padding-top:8px;border-top:1px solid var(--line)}.qr-detail-rows .total .v{font-size:var(--text-xxl)}.code{background:var(--bg-sunken);border:1px solid var(--line);border-radius:8px;padding:14px 16px;font-family:var(--font-mono);font-size:var(--text-s);color:var(--ink-2);line-height:1.55;overflow-x:auto;white-space:pre}.code .k{color:var(--accent-ink)}.code .s{color:var(--success)}.code .c{color:var(--muted);font-style:italic}[data-theme=dark] .code .k{color:var(--accent-2)}.api-key-row{display:flex;align-items:center;gap:10px;padding:12px 16px;background:var(--bg-sunken);border:1px solid var(--line);border-radius:8px;font-family:var(--font-mono);font-size:var(--text-s)}.api-key-row .k{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.role-chip{font-size:var(--text-xs);padding:2px 8px;border-radius:4px;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.04em;font-weight:var(--fw-500)}.role-chip.admin{background:var(--color-secondary-soft);color:var(--color-secondary-ink)}.role-chip.developer{background:var(--accent-soft);color:var(--accent-ink)}.role-chip.viewer{background:var(--bg-sunken);color:var(--muted)}.drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0e11164d;z-index:90;animation:fadeIn .15s}[data-theme=dark] .drawer-backdrop{background:#00000080}.drawer{position:fixed;top:0;right:0;bottom:0;width:560px;background:var(--surface);border-left:1px solid var(--line);box-shadow:var(--shadow-lg);z-index:91;overflow-y:auto;animation:slideIn .22s ease-out}@keyframes slideIn{0%{transform:translate(20px);opacity:0}to{transform:none;opacity:1}}.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--surface);z-index:1}.drawer-body{padding:22px}.tx-meta-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px;padding:6px 0}.tx-meta-grid .k{font-size:var(--text-xs);color:var(--muted);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;margin-bottom:2px}.tx-meta-grid .v{font-size:var(--text-m);font-weight:var(--fw-500)}.tx-meta-grid .v.mono{font-family:var(--font-mono);font-weight:var(--fw-500)}.dots{display:flex;gap:3px}.dots .d{width:9px;height:4px;border-radius:2px;background:var(--line-strong)}.dots .d.ok{background:var(--success)}.dots .d.fail{background:var(--danger)}.dots .d.warn{background:var(--warning)}.spark{width:100%;height:36px}.section-rule{font-size:var(--text-xs);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.12em;color:var(--muted);padding:22px 0 12px;display:flex;align-items:center;gap:12px}.section-rule:after{content:"";flex:1;height:1px;background:var(--line)}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);padding:0 22px}.tab{padding:12px 14px;font-size:var(--text-m);color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;font-weight:var(--fw-500);margin-bottom:-1px}.tab:hover{color:var(--ink-2)}.tab.on{color:var(--ink);border-bottom-color:var(--ink)}[data-theme=dark] .tab.on{color:var(--accent);border-bottom-color:var(--accent)}.check{width:14px;height:14px;border-radius:3px;border:1.5px solid var(--line-strong);display:inline-grid;place-items:center;cursor:pointer;background:var(--surface)}.check.on{background:var(--ink);border-color:var(--ink);color:var(--bg)}[data-theme=dark] .check.on{background:var(--accent);border-color:var(--accent);color:#fff}.toggle{width:32px;height:18px;border-radius:999px;background:var(--line-strong);position:relative;cursor:pointer;transition:background .15s}.toggle:after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .15s;box-shadow:var(--shadow-sm)}.toggle.on{background:var(--ink)}[data-theme=dark] .toggle.on{background:var(--accent)}.toggle.on:after{transform:translate(14px)}.pdf-doc{background:#fff;color:#111418;width:760px;max-width:100%;margin:0 auto;padding:44px 48px;border-radius:6px;box-shadow:var(--shadow-md);font-size:var(--text-m)}.pdf-head{display:flex;justify-content:space-between;gap:30px;padding-bottom:22px;border-bottom:2px solid #111418}.pdf-logo{display:flex;align-items:center;gap:10px;font-size:var(--text-xxl);font-weight:var(--fw-600);letter-spacing:-.01em}.pdf-issuer{font-size:var(--text-xs);color:#555;line-height:1.6;margin-top:12px}.pdf-title-box{text-align:right;min-width:260px}.pdf-title{font-size:var(--text-xxl);font-weight:var(--fw-700);letter-spacing:.02em}.pdf-title-th{font-size:var(--text-m);color:#555;margin-bottom:12px}.pdf-meta{margin-left:auto;border-collapse:collapse;font-size:var(--text-s)}.pdf-meta td{padding:2px 0 2px 14px;text-align:right}.pdf-meta td:first-child{color:#888}.pdf-billto{margin:22px 0}.pdf-label{font-size:var(--text-xxs);text-transform:uppercase;letter-spacing:.1em;color:#999;font-family:var(--font-mono);margin-bottom:6px}.pdf-billto-name{font-weight:var(--fw-600);font-size:var(--text-xl)}.pdf-billto-detail{font-size:var(--text-s);color:#555;line-height:1.6;margin-top:4px}.pdf-table{width:100%;border-collapse:collapse;margin-top:8px}.pdf-table thead th{background:#f3f3f1;text-align:left;font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.04em;color:#555;padding:10px 12px;border-bottom:1px solid #ddd}.pdf-table thead th.r,.pdf-table td.r{text-align:right}.pdf-table tbody td{padding:11px 12px;border-bottom:1px solid #eee;font-size:var(--text-s)}.pdf-totals{display:flex;justify-content:flex-end;margin-top:14px}.pdf-totals-inner{width:320px}.pdf-totals .r{display:flex;justify-content:space-between;padding:6px 12px;font-size:var(--text-m)}.pdf-totals .grand{border-top:2px solid #111418;margin-top:6px;padding-top:12px;font-weight:var(--fw-700);font-size:var(--text-xl)}.pdf-paid-stamp{margin-top:26px;display:inline-block;border:2px solid var(--success);color:var(--success);font-weight:var(--fw-700);letter-spacing:.08em;padding:8px 18px;border-radius:6px;transform:rotate(-4deg);font-size:var(--text-xl)}.pdf-pay-info{margin-top:24px;font-size:var(--text-s);color:#555;line-height:1.7;border-top:1px dashed #ccc;padding-top:16px}.pdf-foot{display:flex;justify-content:space-between;align-items:flex-end;margin-top:40px;padding-top:20px}.pdf-sign-line{width:200px;border-bottom:1px solid #999;margin-bottom:8px;height:30px}.pdf-foot-note{font-size:var(--text-xxs);color:#aaa;font-family:var(--font-mono)}@media print{body *{visibility:hidden!important}#print-area,#print-area *{visibility:visible!important}#print-area{position:fixed;left:0;top:0;right:0;margin:0!important;box-shadow:none!important;border-radius:0!important;width:100%!important;padding:24px 32px!important}.modal,.modal-backdrop,.modal-body{position:static!important;background:#fff!important;box-shadow:none!important;border:none!important;max-width:none!important;padding:0!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}@page{margin:12mm}}.spinner{display:inline-block;width:14px;height:14px;border:2px solid var(--line-strong);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite;vertical-align:-2px;margin-right:6px}@keyframes spin{to{transform:rotate(360deg)}}.skeleton{background:linear-gradient(90deg,var(--bg-sunken) 25%,var(--line) 37%,var(--bg-sunken) 63%);background-size:400% 100%;animation:shimmer 1.4s ease infinite}@keyframes shimmer{0%{background-position:100% 0}to{background-position:0 0}}.bu-select{display:inline-flex;align-items:center;gap:8px;padding:4px 6px 4px 12px;border:1px solid var(--line-strong);border-radius:8px;background:var(--surface)}.bu-select-label{font-size:var(--text-xxs);font-family:var(--font-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.bu-select select{border:none;background:transparent;color:var(--ink);font-family:inherit;font-size:var(--text-m);font-weight:var(--fw-500);outline:none;cursor:pointer;max-width:220px}.tbl th.center,.tbl td.center{text-align:center}.toolbar input[type=date]{color:var(--ink)}body{caret-color:transparent}input,textarea,select,[contenteditable=true]{caret-color:auto}button,.btn,.btn-mini,.sidebar,.topbar-title,.nav-item,.role-switch{user-select:none;-webkit-user-select:none}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#0f172a73;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:grid;place-items:center;padding:20px;animation:modalFade .15s ease}@keyframes modalFade{0%{opacity:0}to{opacity:1}}.modal-card{border:1px solid var(--line-strong);box-shadow:0 24px 60px #00000047;border-radius:14px;overflow:hidden;animation:modalPop .18s cubic-bezier(.22,1,.36,1)}@keyframes modalPop{0%{transform:translateY(8px) scale(.98);opacity:0}to{transform:none;opacity:1}}.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:18px 20px 12px}.modal-title{margin:0;font-size:var(--text-xl);font-weight:var(--fw-600)}.modal-sub{color:var(--muted);font-size:var(--text-s);margin-top:3px}.modal-body{padding:4px 20px 8px}.modal-foot{display:flex;gap:8px;justify-content:flex-end;padding:14px 20px 18px}.btn-mini{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 12px;font-size:var(--text-s);font-weight:var(--fw-500);border-radius:8px;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-2, var(--ink));cursor:pointer;transition:all .12s ease;white-space:nowrap}.btn-mini:hover{background:var(--bg-sunken);border-color:var(--muted)}.btn-mini:active{transform:translateY(1px)}.btn-mini.primary{background:var(--primary, var(--ink));color:#fff;border-color:transparent}.btn-mini.primary:hover{filter:brightness(1.08);background:var(--primary, var(--ink))}.btn-mini.danger{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 40%,var(--line))}.btn-mini.danger:hover{background:color-mix(in srgb,var(--danger) 8%,var(--surface))}.copy-field{display:flex;align-items:center;gap:8px;background:var(--bg-sunken);border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-family:var(--font-mono);font-size:var(--text-s);margin-top:8px}.copy-field .k{color:var(--muted);min-width:96px}.copy-field .v{flex:1;overflow:auto;white-space:nowrap}.copy-field .copy-btn{border:1px solid var(--line-strong);background:var(--surface);border-radius:6px;padding:3px 8px;font-size:var(--text-xs);cursor:pointer}.copy-field .copy-btn:hover{background:var(--bg-sunken)}.doc-editor-grid{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:20px;align-items:start}@media (max-width: 1100px){.doc-editor-grid{grid-template-columns:1fr}}.doc-preview{background:var(--bg-sunken);overflow:auto;max-height:82vh;min-height:420px}.doc-panel{position:sticky;top:20px}.doc-dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;min-height:360px;padding:40px;border:2px dashed var(--line-strong);border-radius:var(--radius-lg);background:var(--surface);color:var(--ink);cursor:pointer;transition:border-color .15s,background .15s}.doc-dropzone:hover,.doc-dropzone.over{border-color:var(--accent);background:var(--accent-soft)}.doc-dropzone-icon{width:52px;height:52px;border-radius:50%;display:grid;place-items:center;margin-bottom:14px;background:var(--surface-2);border:1px solid var(--line);font-size:var(--text-3xl);font-weight:var(--fw-300);color:var(--muted)}.doc-canvas-msg{text-align:center;color:var(--muted);padding:64px 0;font-size:var(--text-m)}.doc-alert{padding:10px 14px;border-radius:var(--radius);background:var(--danger-soft);color:var(--danger);border:1px solid color-mix(in srgb,var(--danger) 25%,transparent);font-size:var(--text-m)}.doc-badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:var(--text-xs);font-weight:var(--fw-600);font-variant-numeric:tabular-nums}.doc-id-chip{display:inline-block;padding:2px 9px;border-radius:6px;background:var(--surface-2);border:1px solid var(--line);font-family:var(--font-mono);font-size:var(--text-s);font-weight:var(--fw-600)}.doc-spot{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;background:var(--surface-2)}.doc-spot .input{padding:5px 8px;font-size:var(--text-s)}.doc-spot .label{font-size:var(--text-xs)}
