:root{--bg:#f6f1e7;--bg-2:#efe7d4;--paper:#fffdf7;--ink:#1a1410;--ink-2:#3d322a;--ink-3:#6b5d52;--line:#e4dac4;--line-2:#d8cbb0;--tea:#3d2418;--tea-2:#5a3a25;--amber:#c98a3c;--amber-2:#e0a559;--cream:#f0dfae;--matcha:#6b8e3d;--jasmine:#ead7a3;--ok:#4e7c3a;--warn:#c98a3c;--bad:#b04634;--info:#3d6b8f;--r-sm:8px;--r:14px;--r-lg:22px;--shadow-sm:0 1px 0 #3d24180a, 0 2px 6px #3d24180a;--shadow:0 1px 0 #3d24180f, 0 8px 24px -8px #3d24182e;--shadow-lg:0 2px 0 #3d24180f, 0 30px 60px -20px #3d241847;--t-fast:.14s cubic-bezier(.2, .7, .2, 1);--t:.28s cubic-bezier(.2, .7, .2, 1);--t-slow:.52s cubic-bezier(.2, .7, .2, 1)}*,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;min-height:100vh;font-family:IBM Plex Sans Thai,system-ui,sans-serif;overflow-x:hidden}#root{min-height:100vh}.font-display{letter-spacing:-.01em;font-family:Space Grotesk,IBM Plex Sans Thai,sans-serif}.font-mono{font-family:JetBrains Mono,ui-monospace,monospace}.num{font-variant-numeric:tabular-nums;font-family:Space Grotesk,IBM Plex Sans Thai,sans-serif}.app-bg{pointer-events:none;z-index:0;background:radial-gradient(1200px 600px at 85% -10%,#c98a3c33,#0000 60%),radial-gradient(900px 600px at -10% 20%,#6b8e3d1a,#0000 60%),radial-gradient(800px 500px at 50% 110%,#3d24181a,#0000 60%);position:fixed;inset:0}.app-bg:after{content:"";background-image:linear-gradient(#3d24180b 1px,#0000 1px),linear-gradient(90deg,#3d24180b 1px,#0000 1px);background-size:56px 56px;position:absolute;inset:0;-webkit-mask-image:radial-gradient(#000 30%,#0000 75%);mask-image:radial-gradient(#000 30%,#0000 75%)}.btn{background:var(--ink);color:#fffdf7;border:1px solid var(--ink);cursor:pointer;transition:transform var(--t-fast), background var(--t-fast), box-shadow var(--t-fast);-webkit-user-select:none;user-select:none;border-radius:999px;align-items:center;gap:8px;padding:10px 16px;font:500 14px/1 IBM Plex Sans Thai,sans-serif;display:inline-flex}.btn:hover{background:var(--tea);box-shadow:var(--shadow);transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn.secondary{color:var(--ink);background:0 0}.btn.secondary:hover{background:#3d24180f}.btn.amber{background:var(--amber);border-color:var(--amber);color:#1a1410}.btn.amber:hover{background:var(--amber-2)}.btn.ghost{border:1px solid var(--line-2);color:var(--ink);background:0 0}.btn.ghost:hover{border-color:var(--ink);background:#fff}.btn.danger{background:var(--bad);border-color:var(--bad);color:#fff}.btn.sm{padding:6px 12px;font-size:13px}.btn[disabled]{opacity:.5;cursor:not-allowed;transform:none}.inp{background:var(--paper);border:1px solid var(--line-2);width:100%;color:var(--ink);transition:border-color var(--t-fast), box-shadow var(--t-fast), background var(--t-fast);border-radius:10px;outline:none;padding:11px 14px;font:400 14px/1.3 IBM Plex Sans Thai,sans-serif}.inp:focus{border-color:var(--ink);box-shadow:0 0 0 4px #3d241814}.inp::placeholder{color:var(--ink-3)}label.field{display:block}label.field>span{color:var(--ink-3);letter-spacing:.02em;text-transform:uppercase;margin-bottom:6px;font-size:12px;font-weight:500;display:block}.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm)}.card.hover{transition:transform var(--t), box-shadow var(--t), border-color var(--t)}.card.hover:hover{box-shadow:var(--shadow);border-color:var(--line-2);transform:translateY(-2px)}.badge{color:var(--ink-2);background:#3d241812;border-radius:999px;align-items:center;gap:6px;padding:4px 10px;font-size:12px;font-weight:500;display:inline-flex}.badge.ok{color:var(--ok);background:#4e7c3a24}.badge.warn{color:#8a5a17;background:#c98a3c2e}.badge.bad{color:var(--bad);background:#b0463424}.badge.info{color:var(--info);background:#3d6b8f24}.badge .dot{background:currentColor;border-radius:50%;width:6px;height:6px}table.t{border-collapse:collapse;width:100%;font-size:14px}table.t th{text-align:left;letter-spacing:.06em;color:var(--ink-3);text-transform:uppercase;border-bottom:1px solid var(--line);padding:12px 14px;font-size:11px;font-weight:600}table.t td{border-bottom:1px solid var(--line);color:var(--ink-2);padding:14px}table.t tr:last-child td{border-bottom:none}table.t tbody tr{transition:background var(--t-fast)}table.t tbody tr:hover{background:#c98a3c0f}.stock-filters input[type=date]{text-align:left}.stock-report table.t{font-size:13px}.stock-report table.t th{padding:9px 10px;font-size:10px}.stock-report table.t td{padding:9px 10px}@media (max-width:640px){.stock-report table.t{font-size:11px}.stock-report table.t th{letter-spacing:.03em;padding:6px 7px;font-size:9px}.stock-report table.t td{padding:6px 7px}}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes steam{0%{opacity:0;transform:translateY(0)scale(1)}20%{opacity:.7}to{opacity:0;transform:translateY(-80px)scale(1.6)}}@keyframes pulse{0%,to{box-shadow:0 0 #c98a3c80}50%{box-shadow:0 0 0 12px #c98a3c00}}@keyframes spin{to{transform:rotate(360deg)}}.fade-up{animation:fadeUp var(--t) both}.fade-in{animation:fadeIn var(--t) both}.toast-wrap{z-index:9999;flex-direction:column;gap:10px;display:flex;position:fixed;bottom:24px;right:24px}.toast{background:var(--ink);color:#fff;min-width:280px;box-shadow:var(--shadow-lg);border-radius:14px;align-items:center;gap:10px;padding:12px 16px;font-size:14px;animation:.28s cubic-bezier(.2,.7,.2,1) both fadeUp;display:flex}.toast.ok{background:var(--ok)}.toast.bad{background:var(--bad)}.toast.warn{background:#8a5a17}.modal-back{z-index:1000;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#1a141073;justify-content:center;align-items:center;animation:.2s both fadeIn;display:flex;position:fixed;inset:0}.modal{background:var(--paper);border-radius:var(--r-lg);width:calc(100% - 32px);max-width:560px;box-shadow:var(--shadow-lg);border:1px solid var(--line);animation:.24s cubic-bezier(.2,.7,.2,1) both fadeUp}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:10px}::-webkit-scrollbar-thumb:hover{background:var(--ink-3)}.chip{background:var(--paper);border:1px solid var(--line-2);color:var(--ink-2);cursor:pointer;transition:all var(--t-fast);border-radius:999px;align-items:center;gap:6px;padding:8px 14px;font-size:13px;font-weight:500;display:inline-flex}.chip:hover{border-color:var(--ink)}.chip.active{background:var(--ink);border-color:var(--ink);color:#fff}.tile{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);text-align:left;cursor:pointer;transition:all var(--t);padding:18px;position:relative;overflow:hidden}.tile:hover{border-color:var(--ink);box-shadow:var(--shadow);transform:translateY(-3px)}.tile .glow{opacity:0;width:240px;height:240px;transition:opacity var(--t), transform var(--t);pointer-events:none;background:radial-gradient(circle,#c98a3c59,#0000 60%);border-radius:50%;position:absolute;top:100%;left:50%;transform:translate(-50%)}.tile:hover .glow{opacity:1;transform:translate(-50%,-40%)}.bar{background:var(--line);border-radius:999px;height:6px;overflow:hidden}.bar>i{background:linear-gradient(90deg, var(--amber), var(--tea));border-radius:999px;height:100%;transition:width .6s cubic-bezier(.2,.7,.2,1);display:block}.spark{width:100%;height:60px}.seg{background:var(--bg-2);border:1px solid var(--line);border-radius:999px;padding:4px;display:inline-flex}.seg button{color:var(--ink-2);cursor:pointer;transition:all var(--t-fast);background:0 0;border:none;border-radius:999px;padding:7px 14px;font:500 13px/1 IBM Plex Sans Thai,sans-serif}.seg button.on{background:var(--paper);color:var(--ink);box-shadow:var(--shadow-sm)}.steam{pointer-events:none;position:absolute}.steam i{filter:blur(4px);background:radial-gradient(circle,#fffdf7e6,#0000 70%);border-radius:50%;width:6px;height:18px;animation:3.4s ease-in-out infinite steam;position:absolute}.app-shell{grid-template-columns:260px 1fr;min-height:100vh;display:grid;position:relative}.app-sidebar{background:var(--ink);color:#f6f1e7;z-index:100;border-right:1px solid #000;flex-direction:column;height:100vh;padding:22px 18px;display:flex;position:sticky;top:0;overflow-y:auto}.app-main{min-width:0;padding:32px 40px}.mobile-topbar{display:none}.hamburger{cursor:pointer;color:var(--ink);background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:8px;display:flex}.sidebar-overlay{display:none}@media (max-width:768px){.app-shell{grid-template-columns:1fr}.app-sidebar{width:280px;height:100vh;transition:transform .28s cubic-bezier(.2,.7,.2,1);position:fixed;top:0;bottom:0;left:0;transform:translate(-100%)}.app-sidebar.open{transform:translate(0)}.app-main{padding:70px 16px 16px}.mobile-topbar{background:var(--paper);border-bottom:1px solid var(--line);z-index:90;justify-content:space-between;align-items:center;height:54px;padding:0 16px;display:flex;position:fixed;top:0;left:0;right:0;box-shadow:0 1px 8px #3d24180f}.sidebar-overlay{z-index:99;background:#1a141080;display:block;position:fixed;inset:0}}.login-layout{grid-template-columns:1.1fr 1fr;min-height:100vh;display:grid}.login-image-col{color:#fffdf7;background-color:#1a1410;flex-direction:column;justify-content:flex-end;padding:60px 70px;display:flex;position:relative;overflow:hidden}.login-form-col{background:var(--bg);justify-content:center;align-items:center;padding:60px 70px;display:flex}@media (max-width:768px){.login-layout{grid-template-columns:1fr;position:relative}.login-image-col{z-index:0;opacity:.25;padding:0;position:absolute;inset:0}.login-image-col img{object-fit:cover;width:100%;height:100%}.login-form-col{z-index:1;background:0 0;align-items:flex-start;min-height:100vh;padding:60px 24px 40px;position:relative}.login-form-col>div{background:#f6f1e7eb;border-radius:24px;width:100%;padding:32px 24px;box-shadow:0 8px 40px #3d24182e;max-width:100%!important}}
