:root{--background:#faf6f0;--surface:#ffffff;--surface-muted:#f4f0e8;--border:rgba(74,124,89,0.15);--text-primary:#2e3230;--text-secondary:#5e6661;--accent:#4a7c59;--accent-strong:#365b41;--success:#4a7c59;--warning:#705c30;--danger:#9c2e26;--low-confidence:#705c30;--font-inter-stack:var(--font-inter),"Inter",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--font-thai-stack:var(--font-ibm-plex-sans-thai),"IBM Plex Sans Thai",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--font-sans:var(--font-inter-stack);--shadow-soft:0 4px 20px rgba(46,50,48,0.06);--motion-ease:cubic-bezier(0.2,0.8,0.2,1);--motion-spring:cubic-bezier(0.2,0.9,0.18,1.08)}html[lang=th]{--font-sans:var(--font-thai-stack)}:lang(th),html[lang=th] *{font-family:var(--font-thai-stack)}*{box-sizing:border-box}body,html{margin:0;min-height:100%;background:var(--background);color:var(--text-primary);font-family:var(--font-sans);font-size:14px;line-height:1.6}a{color:var(--accent);text-decoration:none;transition:color .16s ease,opacity .16s ease}button,input,select,textarea{font:inherit;transition:border-color .18s var(--motion-ease),box-shadow .18s var(--motion-ease),transform .18s var(--motion-ease),background-color .18s var(--motion-ease),color .18s ease,opacity .18s ease}.app-shell{display:grid;grid-template-columns:236px minmax(0,1fr);min-height:100vh}.sidebar{background:#0b1a15;color:#eef7f2;padding:18px 14px;position:-webkit-sticky;position:sticky;top:0;height:100vh;border-right:1px solid #14352a;display:flex;flex-direction:column}.brand{font-size:16px;font-weight:800;margin-bottom:18px;color:var(--warning);letter-spacing:.5px}.nav{display:grid;grid-gap:4px;gap:4px}.nav a{align-items:center;border-radius:6px;color:#dce8e3;display:flex;gap:9px;min-height:38px;padding:9px 10px;border-left:3px solid transparent;transition:background-color .18s var(--motion-ease),border-color .18s var(--motion-ease),color .18s ease,transform .18s var(--motion-ease),box-shadow .18s var(--motion-ease)}.nav a:focus,.nav a:hover{background:#132e25;outline:2px solid var(--warning);transform:translateX(3px)}.nav a.active{background:#193c31;color:#ffffff;border-left:3px solid var(--warning);font-weight:700;box-shadow:inset 0 0 0 1px rgba(255,255,255,.03)}.main{min-width:0;padding:22px}.motion-page{animation:page-enter .36s var(--motion-ease) both}.topline{align-items:flex-start;display:flex;gap:16px;justify-content:space-between;margin-bottom:18px}h1,h2,h3,h4,h5,h6{font-family:var(--font-sans);font-weight:700}h1{font-size:28px;letter-spacing:-.5px;margin:0 0 6px}h1,h2{color:var(--text-primary)}h2{font-size:18px;letter-spacing:0;margin:0 0 10px}.muted{color:var(--text-secondary)}.grid{grid-gap:12px;grid-template-columns:repeat(4,minmax(150px,1fr))}.grid,.two{display:grid;gap:12px}.two{grid-gap:12px;grid-template-columns:minmax(0,1fr) 340px}.card,.panel{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;box-shadow:var(--shadow-soft);transition:transform .2s var(--motion-ease),box-shadow .2s var(--motion-ease),border-color .2s var(--motion-ease),background-color .2s ease}.card:hover,.panel:hover{transform:translateY(-2px);box-shadow:0 12px 26px rgba(46,50,48,.09);border-color:rgba(74,124,89,.28)}.motion-panel{transition:transform .2s var(--motion-ease),box-shadow .2s var(--motion-ease),border-color .2s var(--motion-ease),background-color .2s ease;will-change:transform}.motion-panel:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(18,28,23,.06);border-color:#aab8b0}.motion-pop{animation:motion-pop .22s ease-out both}.motion-fade{animation:motion-fade .28s ease-out both}.motion-sweep{position:relative;overflow:hidden}.motion-sweep:after{content:"";position:absolute;inset:0;background:linear-gradient(120deg,transparent,rgba(255,255,255,.18) 50%,transparent);transform:translateX(-110%);transition:transform .42s ease;pointer-events:none}.motion-sweep:hover:after{transform:translateX(110%)}@keyframes motion-pop{0%{opacity:0;transform:translateY(8px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes motion-fade{0%{opacity:0}to{opacity:1}}.stat{font-size:25px;font-weight:780}.toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}.button,button{background:var(--surface);border:1px solid var(--border);border-radius:12px;color:var(--accent);font-weight:700;cursor:pointer;display:inline-flex;gap:7px;align-items:center;min-height:38px;padding:8px 16px;position:relative;overflow:hidden;transition:transform .18s var(--motion-spring),box-shadow .18s var(--motion-ease),border-color .18s ease,background-color .18s ease,color .18s ease}.button:after,button:not(.MuiButtonBase-root):after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent,rgba(255,255,255,.24) 45%,transparent 70%);pointer-events:none;transform:translateX(-120%);transition:transform .52s var(--motion-ease)}.button:hover,button:hover{transform:translateY(-2px);box-shadow:0 8px 18px rgba(74,124,89,.12);border-color:var(--accent)}.button:hover:after,button:not(.MuiButtonBase-root):hover:after{transform:translateX(120%)}.button:active,button:active{transform:translateY(0) scale(.985)}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.button.primary,button.primary{background:var(--accent);border-color:var(--accent);color:#ffffff}button:disabled,button:disabled:hover{cursor:progress;opacity:.72;transform:none;box-shadow:none}.button.primary:hover,button.primary:hover{background:var(--accent-strong);border-color:var(--accent-strong);color:#ffffff}input,select,textarea{background:var(--surface);border:1px solid var(--border);border-radius:6px;color:var(--text-primary);min-height:36px;padding:8px 10px}input:hover,select:hover,textarea:hover{border-color:rgba(74,124,89,.38)}input:focus,select:focus,textarea:focus{box-shadow:0 0 0 4px rgba(74,124,89,.08);transform:translateY(-1px)}.form{display:grid;grid-gap:10px;gap:10px;max-width:780px}.form label{display:grid;grid-gap:4px;gap:4px;font-weight:650}.table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:8px;overflow-x:auto;transition:box-shadow .2s var(--motion-ease),border-color .2s ease}.table-wrap:hover{border-color:rgba(74,124,89,.26);box-shadow:0 8px 20px rgba(46,50,48,.05)}table{border-collapse:collapse;min-width:880px;width:100%}td,th{border-bottom:1px solid var(--border);padding:9px 10px;text-align:left;vertical-align:top;transition:background-color .16s ease,color .16s ease}th{background:var(--surface-muted);color:var(--text-secondary);font-size:12px;text-transform:uppercase}tbody tr{transition:transform .16s var(--motion-ease),background-color .16s ease}tbody tr:hover{background:rgba(74,124,89,.045);transform:translateX(2px)}.badge{background:var(--surface-muted);border:1px solid var(--border);border-radius:999px;display:inline-block;font-size:12px;padding:3px 7px;transition:transform .16s var(--motion-ease),box-shadow .16s ease,border-color .16s ease}.badge:hover{transform:translateY(-1px);box-shadow:0 4px 10px rgba(46,50,48,.08)}.badge.ok{background:#e8f4eb;border-color:#9fc7aa;color:var(--success)}.badge.warn{background:#fff8d9;border-color:#d6be67;color:var(--low-confidence)}.badge.danger{background:#f9e7e5;border-color:#d7aaa5;color:var(--danger)}.notice{background:#fff8e8;border-left:4px solid var(--warning);margin:10px 0;padding:10px 12px;animation:notice-enter .26s var(--motion-ease) both}.cards{grid-gap:12px;grid-template-columns:repeat(auto-fit,minmax(270px,1fr))}.cards,.map-layout{display:grid;gap:12px}.map-layout{grid-gap:12px;grid-template-columns:minmax(0,1fr) 320px}.robot-viewer-frame{width:100%;height:100%;overflow:hidden;position:relative}.empty{color:var(--text-secondary);padding:24px;text-align:center}.mobile-header{display:none;position:fixed;top:0;left:0;right:0;height:60px;background:#0b1a15;color:#eef7f2;align-items:center;justify-content:space-between;padding:0 16px;z-index:1000;border-bottom:1px solid rgba(74,124,89,.2);box-shadow:0 2px 10px rgba(0,0,0,.1)}.mobile-brand{display:flex;align-items:center;gap:10px;text-decoration:none}.mobile-logo-img{height:32px;width:auto}.mobile-title{font-family:var(--font-sans);font-size:13px;font-weight:800;letter-spacing:.5px;color:var(--warning);text-transform:uppercase}.mobile-profile{display:flex;align-items:center;color:var(--warning);cursor:pointer;transition:opacity .2s ease}.mobile-profile:hover{opacity:.8;transform:translateY(-1px)}.mobile-tab-nav{display:none;position:fixed;bottom:0;left:0;right:0;height:64px;background:#0b1a15;border-top:1px solid rgba(74,124,89,.2);justify-content:space-around;align-items:center;z-index:1000;box-shadow:0 -2px 10px rgba(0,0,0,.1);padding-bottom:env(safe-area-inset-bottom,0)}.data-pull-fab{position:fixed!important;box-shadow:0 12px 28px rgba(54,91,65,.28)!important;transition:transform .18s var(--motion-spring),box-shadow .18s ease,filter .18s ease!important}.data-pull-fab:hover{filter:brightness(1.04);transform:translateY(-3px) scale(1.04);box-shadow:0 16px 34px rgba(54,91,65,.34)!important}.tab-item{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1 1;height:100%;text-decoration:none;color:#a3c2b5;transition:color .18s ease,background-color .18s ease,transform .18s var(--motion-ease);position:relative}.tab-item:before{content:"";position:absolute;top:0;left:15%;right:15%;height:3px;background:var(--accent);border-radius:0 0 2px 2px;opacity:0;transition:opacity .2s ease}.tab-item.active:before{opacity:1}.tab-item.active{color:#ffffff}.tab-item:hover{transform:translateY(-2px);background:rgba(255,255,255,.035)}.tab-item.active .tab-icon{color:var(--warning)}.tab-icon{color:#a3c2b5;transition:color .2s ease,transform .18s var(--motion-spring)}.tab-item.active .tab-icon,.tab-item:hover .tab-icon{transform:translateY(-1px) scale(1.08)}.tab-label{font-size:10px;font-weight:700;margin-top:4px;text-transform:uppercase;letter-spacing:.5px}@media (max-width:860px){.app-shell{display:block;padding-top:60px;padding-bottom:70px}.sidebar{display:none!important}.mobile-header,.mobile-tab-nav{display:flex}.main{padding:16px}.data-pull-fab{bottom:calc(84px + env(safe-area-inset-bottom, 0));right:16px}.grid,.map-layout,.two{grid-template-columns:1fr}.topline{display:block}}.lang-selector{display:flex;background:rgba(20,53,42,.6);border:1px solid #14352a;border-radius:20px;padding:2px;margin-top:15px;gap:2px;transition:all .3s ease}.lang-selector.loading{opacity:.7;filter:blur(.5px)}.lang-selector button{flex:1 1;background:transparent;border:none;border-radius:18px;color:#a3c2b5;font-size:11px;font-weight:700;padding:6px 8px;min-height:28px;display:flex;align-items:center;justify-content:center;gap:5px;cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1)}.lang-selector button:hover{color:#ffffff;background:rgba(25,60,49,.4)}.lang-selector button.active{background:var(--warning);color:#0b1a15;box-shadow:0 2px 6px rgba(0,0,0,.25);transform:translateY(-.5px)}.lang-selector button:disabled{cursor:not-allowed;opacity:.6}.lang-selector button .flag{font-size:14px;line-height:1}.lang-selector button.active .flag{transform:scale(1.1)}.brand-logo-container{margin-bottom:22px;display:flex;justify-content:center;width:100%}.brand-logo{width:100%;max-width:180px;height:auto;max-height:280px;object-fit:contain;transition:transform .22s var(--motion-ease),filter .22s ease}.brand-logo:hover{transform:translateY(-2px) scale(1.015);filter:drop-shadow(0 8px 14px rgba(112,92,48,.18))}@keyframes page-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes notice-enter{0%{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:translateX(0)}}@keyframes fab-enter{0%{opacity:0;transform:translateY(14px) scale(.86)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes fab-breathe{0%,to{box-shadow:0 12px 28px rgba(54,91,65,.28)}50%{box-shadow:0 16px 34px rgba(54,91,65,.38)}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.001ms!important}}@media (max-width:860px){.brand-logo-container{margin-bottom:12px}.brand-logo{max-width:130px;max-height:50px}}.card-banner{margin:-20px -20px 16px;height:140px;overflow:hidden;border-radius:11px 11px 0 0;border-bottom:1px solid var(--border)}.card-banner img{width:100%;height:100%;object-fit:cover;transition:transform .3s cubic-bezier(.25,1,.5,1)}.source-thumbnail-empty{align-items:center;background:linear-gradient(135deg,#eef3ef,#dfe8e2);color:var(--text-secondary);display:flex;font-size:12px;font-weight:750;height:100%;justify-content:center;letter-spacing:0;text-transform:uppercase;width:100%}.card:hover .card-banner img{transform:scale(1.06)}.modal-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;background:rgba(4,9,7,.72);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:2000;display:flex;align-items:center;justify-content:center;padding:16px;animation:modal-fadeIn .25s ease-out}.modal-container{background:radial-gradient(circle at center,#0c2017 0,#050d0a 100%);border:1px solid rgba(74,124,89,.35);border-radius:14px;width:100%;max-width:440px;padding:24px;box-shadow:0 20px 50px rgba(0,0,0,.5),0 0 30px rgba(18,168,121,.15);animation:modal-slideUp .3s cubic-bezier(.25,1,.5,1);color:#ffffff}.modal-container h2{font-family:var(--font-sans);font-size:20px;font-weight:800;margin:0 0 16px;color:#ffffff;display:flex;align-items:center;gap:8px;border-bottom:1px solid rgba(74,124,89,.2);padding-bottom:12px}.modal-container .form label{color:#a3b8ad;font-size:11px;font-weight:700;margin-bottom:4px;text-transform:uppercase;letter-spacing:.5px}.modal-container .form input,.modal-container .form select{background:rgba(20,53,42,.4);border:1px solid rgba(74,124,89,.3);color:#ffffff;font-size:14px;border-radius:6px;width:100%;box-sizing:border-box;min-height:38px;padding:8px 10px}.modal-container .form input:hover,.modal-container .form select:hover{border-color:rgba(74,124,89,.5)}.modal-container .form input:focus,.modal-container .form select:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px rgba(16,185,129,.15)}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:24px;border-top:1px solid rgba(74,124,89,.2);padding-top:16px}.modal-actions button{padding:8px 16px;border-radius:6px;font-weight:700;font-size:13px;cursor:pointer;transition:all .2s ease;min-height:38px}.modal-actions button[type=button]{background:transparent;border:1px solid rgba(74,124,89,.3);color:#a3b8ad}.modal-actions button[type=button]:hover{background:rgba(255,255,255,.05);color:#ffffff}.modal-actions button[type=submit]{background:var(--accent);border:1px solid var(--accent);color:#ffffff}.modal-actions button[type=submit]:hover{background:#15b885;border-color:#15b885}.modal-actions button[type=submit]:disabled{opacity:.6;cursor:not-allowed}.data-pull-fab{bottom:24px;position:fixed;right:24px;z-index:1100;width:56px;height:56px;border-radius:50%;background:var(--accent)!important;color:#ffffff!important;border:none;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 12px 28px rgba(54,91,65,.28);animation:fab-enter .42s var(--motion-spring) both,fab-breathe 3.8s ease-in-out .9s infinite;transition:transform .18s var(--motion-spring),box-shadow .18s ease,background-color .18s ease}.data-pull-fab:hover{background:#15b885!important;transform:translateY(-3px) scale(1.05);box-shadow:0 16px 34px rgba(54,91,65,.34)}.data-pull-fab:active{transform:translateY(0) scale(.96)}.animate-spin{animation:modal-spin 1s linear infinite}@keyframes modal-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes modal-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes modal-slideUp{0%{transform:translateY(12px) scale(.97);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}body:has(.data-pulls-page) .brand-logo-container,body:has(.data-pulls-page) .mobile-logo-img{display:none!important}