:root{--bg: #0d0f14;--surface: #13161e;--surface2: #1a1e29;--surface3: #222736;--border: #2a3045;--border2: #3a4060;--accent: #4f8ef7;--accent-hover: #3a7ee8;--on-accent: #ffffff;--accent-soft: rgba(79, 142, 247, .12);--focus-ring: rgba(79, 142, 247, .15);--green: #22c55e;--red: #ef4444;--yellow: #f59e0b;--text: #e2e8f0;--text2: #94a3b8;--text3: #64748b;--row-hover: rgba(255, 255, 255, .02);--input-bg: var(--surface2);--green-bg: rgba(34, 197, 94, .15);--red-bg: rgba(239, 68, 68, .15);--warn-bg: rgba(245, 158, 11, .15);--blue-bg: rgba(79, 142, 247, .15);--grey-bg: rgba(148, 163, 184, .12);--mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--sans: "IBM Plex Sans Thai", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--radius: 12px;--topbar-h: 52px;--sidebar-w: 200px;color-scheme:dark}html.light{--bg: #f1f5f9;--surface: #ffffff;--surface2: #f8fafc;--surface3: #e2e8f0;--border: #cbd5e1;--border2: #94a3b8;--accent: #2563eb;--accent-hover: #1d4ed8;--accent-soft: rgba(37, 99, 235, .1);--focus-ring: rgba(37, 99, 235, .15);--green: #16a34a;--red: #dc2626;--yellow: #d97706;--text: #0f172a;--text2: #475569;--text3: #94a3b8;--row-hover: rgba(15, 23, 42, .03);--input-bg: var(--surface);color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 var(--sans)}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1{font-size:20px;margin:0 0 16px}h2{font-size:16px;margin:24px 0 8px}.shell{display:grid;grid-template-columns:var(--sidebar-w) 1fr;grid-template-rows:var(--topbar-h) 1fr;height:100%}.topbar{grid-column:1 / -1;display:flex;align-items:center;gap:12px;padding:0 16px;background:var(--surface);border-bottom:1px solid var(--border)}.topbar .brand{font-weight:600}.topbar .spacer{flex:1}.sidebar{background:var(--surface);border-right:1px solid var(--border);padding:12px 8px;overflow:auto}.sidebar .group{color:var(--text3);font-size:12px;margin:12px 8px 4px;text-transform:uppercase}.sidebar a{display:block;padding:6px 10px;border-radius:8px;color:var(--text2)}.sidebar a.active{background:var(--accent-soft);color:var(--accent)}.main{padding:20px 24px;overflow:auto}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:16px}.center{min-height:100%;display:grid;place-items:center;padding:16px}.narrow{width:100%;max-width:380px}.row{display:flex;gap:8px;align-items:end;flex-wrap:wrap}.field{display:flex;flex-direction:column;gap:4px;margin-bottom:12px;min-width:140px}.field label{color:var(--text2);font-size:12px}input,select{background:var(--input-bg);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:7px 10px;font:inherit}input:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--focus-ring)}.btn{background:var(--surface2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:7px 14px;font:inherit;cursor:pointer}.btn:hover{border-color:var(--border2)}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn.primary:hover{background:var(--accent-hover)}.btn.danger{color:var(--red)}.btn:disabled{opacity:.5;cursor:default}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--border);vertical-align:top}th{color:var(--text2);font-weight:500;font-size:12px}tr:hover td{background:var(--row-hover)}td.num,th.num{text-align:right;font-family:var(--mono)}.mono{font-family:var(--mono);color:var(--text2)}.badge{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12px;background:var(--grey-bg);color:var(--text2)}.badge.green{background:var(--green-bg);color:var(--green)}.badge.red{background:var(--red-bg);color:var(--red)}.badge.amber{background:var(--warn-bg);color:var(--yellow)}.badge.blue{background:var(--blue-bg);color:var(--accent)}.alert{border-radius:8px;padding:10px 12px;margin-bottom:12px}.alert.error{background:var(--red-bg);color:var(--red)}.alert.ok{background:var(--green-bg);color:var(--green)}.alert.info{background:var(--blue-bg);color:var(--accent)}.muted{color:var(--text3)}.pager{display:flex;gap:8px;align-items:center;margin-top:12px}.toast{position:fixed;right:16px;bottom:16px;background:var(--surface3);border:1px solid var(--border2);border-radius:8px;padding:10px 14px}dl.kv{display:grid;grid-template-columns:max-content 1fr;gap:4px 16px;margin:0 0 8px}dl.kv dt{color:var(--text3)}dl.kv dd{margin:0}pre.mono{margin:8px 0;white-space:pre-wrap}.page-header{margin-bottom:20px}.page-title{display:flex;align-items:center;gap:10px;font-size:20px;font-weight:600;margin:0}.tab-badge{font-family:var(--mono);font-size:11px;font-weight:500;padding:2px 8px;border-radius:4px;background:var(--blue-bg);color:var(--accent)}.page-sub{color:var(--text3);font-size:13px;margin:4px 0 0}.page-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.card{padding:20px;margin-bottom:20px}.card-title{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:600;color:var(--text3);letter-spacing:1px;text-transform:uppercase;margin:0 0 14px}.card-title .spacer{flex:1}.card-title .normal{text-transform:none;letter-spacing:0;font-weight:400}.split{display:flex;gap:20px;align-items:flex-start;flex-wrap:wrap}.split>.card{flex:1;min-width:300px}.split>.card.wide{flex:2}.grid-form{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:0 12px}.grid-form .full{grid-column:1 / -1}.field.grow{flex:1}.field.grow2{flex:2}.field .hint{font-size:11px;color:var(--text3)}.field .hint.bad{color:var(--red)}textarea{background:var(--input-bg);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:7px 10px;font:inherit;resize:vertical}textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--focus-ring)}.req{color:var(--red)}.btn{transition:background .12s,border-color .12s,opacity .12s;white-space:nowrap}.btn.sm{padding:4px 10px;font-size:12px;border-radius:6px}.btn.edit{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn.edit:hover{background:var(--accent-hover)}.btn.danger{background:var(--red-bg);border-color:#ef44444d;color:var(--red)}.btn.revive{background:var(--green-bg);border-color:#22c55e4d;color:var(--green)}.btn.xl-export{background:#10b9811f;border-color:#10b98159;color:#10b981}.btn.xl-template{background:#6366f11f;border-color:#6366f159;color:#818cf8}.btn.xl-import{background:#f59e0b1f;border-color:#f59e0b59;color:var(--yellow)}html.light .btn.xl-template{color:#4f46e5}html.light .btn.xl-export{color:#059669}label.btn{display:inline-flex;align-items:center;gap:4px}label.btn input[type=file]{display:none}.tag{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:500;line-height:1.6;background:var(--grey-bg);color:var(--text2);white-space:nowrap}.tag.blue{background:var(--blue-bg);color:var(--accent)}.tag.green{background:var(--green-bg);color:var(--green)}.tag.yellow{background:var(--warn-bg);color:var(--yellow)}.tag.purple{background:#6c63ff26;color:#8b83ff}.tag.red{background:var(--red-bg);color:var(--red)}a.tag:hover{text-decoration:none;filter:brightness(1.15)}.chip{font-family:var(--mono);font-size:12px;font-weight:600;color:var(--accent);background:var(--surface2);border:1px solid var(--border);border-radius:4px;padding:2px 8px}.conv{font-family:var(--mono);font-size:12px;color:var(--accent)}.code{font-family:var(--mono);font-size:12px;color:var(--text2)}.code.strong{color:var(--accent);font-weight:600}.sub{display:block;font-size:11px;color:var(--text3)}.clip{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.filter-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.search{position:relative}.search .icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);font-size:12px;opacity:.7;pointer-events:none}.search input{padding-left:30px;width:260px}.filter-chip{display:inline-flex;align-items:center;gap:6px}.banner{border-radius:6px;padding:6px 10px;font-size:12px;background:#f59e0b1f;border:1px solid rgba(245,158,11,.4);color:var(--yellow)}table.list th{text-transform:uppercase;font-size:11px;font-weight:600;color:var(--text3);letter-spacing:.3px}table.list td{padding:10px 12px;vertical-align:middle}table.list tr.inactive td{opacity:.55}table.list td.actions{text-align:right;white-space:nowrap}table.list td.actions .btn+.btn{margin-left:6px}table.list .empty{text-align:center;padding:32px;color:var(--text3)}.thumb{width:40px;height:40px;border-radius:6px;background:var(--surface3);display:grid;place-items:center;font-size:18px;opacity:.35}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:grid;place-items:center;z-index:50;padding:16px}.modal{background:var(--surface2);border:1px solid var(--border2);border-radius:14px;padding:22px;width:100%;max-width:460px;max-height:90vh;overflow:auto;box-shadow:0 24px 64px #00000073}.modal.wide{max-width:680px}.modal h3{font-size:16px;font-weight:700;margin:0 0 16px}.modal .field{width:100%}.modal .footer{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}.modal .note{font-size:12px;color:var(--text3);margin:0 0 12px}.menu{position:relative;display:inline-block}.menu-list{position:absolute;top:calc(100% + 4px);left:0;z-index:20;min-width:180px;background:var(--surface2);border:1px solid var(--border2);border-radius:8px;padding:4px;box-shadow:0 12px 32px #00000059}.menu-list button,.menu-list label{display:block;width:100%;text-align:left;background:none;border:0;color:var(--text);padding:7px 10px;border-radius:6px;font:inherit;cursor:pointer}.menu-list button:hover,.menu-list label:hover{background:var(--accent-soft)}.menu-list input[type=file]{display:none}.info-box{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px 16px;background:var(--surface3);border-radius:8px;padding:12px 14px;margin-bottom:14px}.info-box .k{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--text3)}.info-box .v{font-size:13px}.diff-line{font-size:12px}.diff-line .f{color:var(--text3)}.diff-old{color:var(--red);text-decoration:line-through}.diff-new,.log-create{color:var(--green);font-weight:600}.toast.error{border-color:#ef444480;color:var(--red)}.sidebar a .icon{display:inline-block;width:22px}.company-header{border:1px dashed var(--border2);border-radius:8px;padding:14px 16px;background:var(--surface2)}.company-header .name{font-size:16px;font-weight:700}.company-header .addr{font-size:12px;color:var(--text2);white-space:pre-line;margin-top:2px}.company-header .meta{font-size:11px;color:var(--text3);margin-top:4px}
