@font-face{font-family:Geist;src:url(/fonts/Geist-Variable.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Geist Mono;src:url(/fonts/GeistMono-Variable.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}:root{--font-sans: "Geist", "Noto Sans Thai", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "Geist Mono", ui-monospace, "SF Mono", Menlo, monospace;--font-thai: "Noto Sans Thai", "Geist", sans-serif;--text-xs: 11px;--text-sm: 12.5px;--text-base: 13.5px;--text-md: 15px;--text-lg: 18px;--text-xl: 21px;--text-2xl: 26px;--canvas: #f4f5f8;--canvas-2: #eef0f4;--surface: #ffffff;--surface-2: #fafbfc;--surface-3: #f3f4f7;--border: #e5e8ee;--border-2: #d8dce5;--border-strong: #c7cdd9;--text: #161922;--text-2: #4a5160;--text-3: #767e8e;--text-4: #9aa1b1;--brand: #4f46e5;--brand-600: #4f46e5;--brand-700: #4338ca;--brand-300: #a5a0f5;--brand-soft: #eef0fe;--brand-soft-2: #e3e4fc;--brand-ink: #ffffff;--cyan: #0e9bb8;--cyan-600: #0891b2;--cyan-bright: #22d3ee;--cyan-soft: #e6f8fb;--cyan-ink: #6fe3f5;--status-pending: #b5730a;--status-pending-soft: #fdf2dc;--status-confirmed: #2563eb;--status-confirmed-soft: #e6effd;--status-active: #4f46e5;--status-active-soft: #eef0fe;--status-completed: #15924f;--status-completed-soft: #e4f5ea;--status-rejected: #d23b3b;--status-rejected-soft: #fce8e8;--status-cancelled: #6b7280;--status-cancelled-soft: #eef0f3;--accept: #15924f;--accept-soft: #e4f5ea;--reject: #d23b3b;--reject-soft: #fce8e8;--warn: #b5730a;--warn-soft: #fdf2dc;--info: #2563eb;--info-soft: #e6effd;--ink: #0f1118;--ink-1: #14161f;--ink-2: #1a1d28;--ink-3: #232735;--ink-4: #2e3343;--ink-border: #2a2e3c;--ink-text: #e7e9ef;--ink-text-2: #a8aebd;--ink-text-3: #6f7688;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 24px;--sp-8: 32px;--sp-10: 40px;--sp-12: 48px;--r-xs: 5px;--r-sm: 7px;--r-md: 10px;--r-lg: 14px;--r-xl: 18px;--r-full: 999px;--sh-xs: 0 1px 2px rgba(20,24,40,.04);--sh-sm: 0 1px 2px rgba(20,24,40,.06), 0 1px 1px rgba(20,24,40,.04);--sh-md: 0 4px 12px rgba(20,24,40,.08), 0 1px 3px rgba(20,24,40,.05);--sh-lg: 0 18px 48px rgba(15,18,32,.12);--sh-pop: 0 12px 36px rgba(15,18,32,.22);--sh-hover: 0 2px 8px rgba(20,24,40,.1), 0 1px 3px rgba(20,24,40,.06);--ease-default: cubic-bezier(.4, 0, .2, 1);--duration-fast: .12s;--duration-normal: .2s}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes spin{to{transform:rotate(360deg)}}.fade-in{animation:fadeIn .22s var(--ease-default) both}.spin{animation:spin .8s linear infinite}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.v-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--sh-sm);transition:box-shadow var(--duration-fast) ease,transform .1s ease,border-color var(--duration-fast) ease}.v-card:hover{box-shadow:var(--sh-hover);transform:translateY(-1px)}.v-card-flat{box-shadow:none}.v-card-flat:hover{box-shadow:none;transform:none}.v-btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;font-family:var(--font-sans);font-weight:600;font-size:var(--text-sm);border-radius:var(--r-sm);border:1px solid transparent;padding:7px 14px;min-height:36px;white-space:nowrap;cursor:pointer;transition:background var(--duration-fast) ease,border-color var(--duration-fast) ease,transform .08s ease,box-shadow var(--duration-fast) ease}.v-btn:hover:not(:disabled){transform:translateY(-.5px)}.v-btn:active:not(:disabled){transform:translateY(.5px)}.v-btn:disabled{opacity:.5;cursor:not-allowed}.v-btn-primary{background:var(--brand);color:var(--brand-ink);box-shadow:var(--sh-sm)}.v-btn-primary:hover:not(:disabled){box-shadow:var(--sh-hover)}.v-btn-secondary{background:var(--surface);color:var(--text);border-color:var(--border-2);box-shadow:var(--sh-xs)}.v-btn-ghost{background:transparent;color:var(--text-2)}.v-btn-ghost:hover:not(:disabled){background:var(--surface-3)}.v-btn-destructive{background:var(--reject);color:#fff}.v-btn-accept{background:var(--accept);color:#fff}.v-btn-sm{padding:5px 10px;font-size:var(--text-xs);min-height:32px}.v-btn-lg{padding:10px 20px;font-size:14px;min-height:44px}.v-btn-touch{min-height:44px;min-width:44px;padding:0 18px}.v-badge{display:inline-flex;align-items:center;gap:5px;padding:2.5px 9px;border-radius:var(--r-full);font-size:var(--text-xs);font-weight:700;white-space:nowrap;text-transform:capitalize}.v-badge-pending{background:var(--status-pending-soft);color:var(--status-pending)}.v-badge-confirmed,.v-badge-accepted{background:var(--status-confirmed-soft);color:var(--status-confirmed)}.v-badge-active,.v-badge-assigned{background:var(--status-active-soft);color:var(--status-active)}.v-badge-completed,.v-badge-ack{background:var(--status-completed-soft);color:var(--status-completed)}.v-badge-rejected{background:var(--status-rejected-soft);color:var(--status-rejected)}.v-badge-cancelled{background:var(--status-cancelled-soft);color:var(--status-cancelled)}.v-badge-muted{background:var(--surface-3);color:var(--text-3)}.v-field{display:flex;flex-direction:column;gap:6px}.v-field-label{font-size:var(--text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-3)}.v-field-input{width:100%;padding:8px 12px;min-height:36px;border-radius:var(--r-sm);border:1px solid var(--border-2);background:var(--surface);color:var(--text);font-size:var(--text-base);font-family:var(--font-sans);outline:none;transition:border-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease}.v-field-input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.v-field-input:disabled{background:var(--surface-3);opacity:.6}.v-field-error{font-size:12px;color:var(--reject);font-weight:600}.v-page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-4);flex-wrap:wrap;margin-bottom:var(--sp-5)}.v-page-header-content{min-width:0;flex:1}.v-page-title{font-size:var(--text-xl);font-weight:700;letter-spacing:-.02em;color:var(--text);margin:0}.v-page-subtitle{font-size:var(--text-sm);color:var(--text-3);margin:4px 0 0;max-width:70ch}.v-page-actions{display:flex;align-items:center;gap:var(--sp-2);flex-shrink:0}.v-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--sp-10) var(--sp-4);text-align:center}.v-empty-state-icon{width:48px;height:48px;margin-bottom:var(--sp-4);color:var(--text-4);opacity:.7}.v-empty-state-title{font-size:var(--text-md);font-weight:600;color:var(--text-2);margin:0 0 var(--sp-2)}.v-empty-state-desc{font-size:var(--text-sm);color:var(--text-3);max-width:360px;margin:0 0 var(--sp-5)}.v-stat-card{padding:var(--sp-4) var(--sp-5);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--sh-sm);position:relative;overflow:hidden;transition:box-shadow var(--duration-fast) ease,transform .1s ease}.v-stat-card:hover{box-shadow:var(--sh-hover);transform:translateY(-1px)}.v-stat-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--brand)}.v-stat-card-label{font-size:var(--text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-3);margin:0 0 var(--sp-2)}.v-stat-card-value{font-size:var(--text-2xl);font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--text);margin:0}.v-stat-card-icon{position:absolute;top:var(--sp-4);right:var(--sp-4);width:36px;height:36px;border-radius:var(--r-sm);display:grid;place-items:center;background:var(--brand-soft);color:var(--brand)}.v-stat-card-trend{display:flex;align-items:center;gap:4px;margin-top:var(--sp-2);font-size:12px;font-weight:600}.v-stat-card-trend-up{color:var(--accept)}.v-stat-card-trend-down{color:var(--reject)}.v-stat-card-trend-neutral{color:var(--text-3)}.v-skeleton{background:var(--surface-3);border-radius:var(--r-sm);animation:skeleton-pulse 1.4s ease-in-out infinite}.v-skeleton-line{height:12px;margin-bottom:8px}.v-skeleton-line-w40{width:40%}.v-skeleton-line-w60{width:60%}.v-skeleton-line-w90{width:90%}.v-skeleton-card{height:80px;border-radius:var(--r-md);margin-bottom:var(--sp-3)}.tnum{font-variant-numeric:tabular-nums}.mono{font-family:var(--font-mono)}:root{--bg: #0f1118;--surface: #161922;--surface-2: #1b1e29;--surface-3: #20242f;--line: #272b38;--line-2: #313644;--ink: #e7e9ef;--ink-2: #a8aebd;--ink-3: #7f8696;--indigo: #4f46e5;--indigo-300: #a5a0f5;--indigo-soft: #211d44;--green: #15924f;--green-ink: #5fdc97;--green-soft: #11251a;--amber: #b5730a;--amber-ink: #f0bd61;--amber-soft: #2a1f0a;--red: #dc2626;--red-ink: #fca5a5;--red-soft: #2c1416;--brand: var(--indigo);--ack: var(--green);--touch: 48px;font-family:var(--font-sans);color:var(--ink);background:var(--bg);color-scheme:dark}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:var(--bg);color:var(--ink)}button{font:inherit;cursor:pointer}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow-wrap:anywhere}.app{min-height:100vh;display:flex;flex-direction:column;background:var(--bg)}.topbar{background:var(--surface);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5;padding:12px 16px 14px}.breadcrumb ol{list-style:none;margin:0 0 8px;padding:0;display:flex;flex-wrap:wrap;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--ink-3);letter-spacing:.02em}.breadcrumb .crumb-sep{color:var(--line-2)}.breadcrumb .crumb-current{color:var(--indigo-300);font-weight:700}.topbar-main{display:flex;align-items:center;justify-content:space-between;gap:12px}.brand-eyebrow{letter-spacing:.14em;text-transform:uppercase;font-size:10.5px;font-weight:800;color:var(--ink-3)}.topbar h1{margin:3px 0 0;font-size:22px;line-height:1.1;color:var(--ink);letter-spacing:-.01em}.topbar-meta{display:flex;align-items:center;gap:10px}.token-pill{font-size:11.5px;font-weight:700;padding:8px 12px;border-radius:999px;display:inline-flex;align-items:center;border:1px solid var(--line-2)}.token-pill.ok{background:var(--green-soft);color:var(--green-ink);border-color:#5fdc974d}.token-pill.missing{background:var(--amber-soft);color:var(--amber-ink);border-color:#f0bd614d}.layout{flex:1;width:100%;max-width:560px;margin:0 auto;padding:16px}.pane{background:transparent;min-height:200px}.job-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.job-card{width:100%;text-align:left;display:flex;flex-direction:column;gap:10px;padding:18px;border-radius:16px;border:1px solid var(--line);background:var(--surface);color:var(--ink);min-height:var(--touch);transition:border-color .15s ease,box-shadow .15s ease,background .15s ease}.job-card.is-unacknowledged{border-color:#f0bd6173;background:linear-gradient(135deg,#211b10,var(--surface) 60%);box-shadow:inset 3px 0 0 var(--amber-ink)}.job-card.is-acknowledged{border-color:var(--line);background:var(--surface);opacity:.92}.job-card.is-selected{border-color:var(--indigo);box-shadow:0 0 0 2px #4f46e566}.card-row{display:flex;align-items:center;justify-content:space-between;gap:10px}.card-row-top{font-weight:700}.job-id{font-size:14px;color:var(--ink)}.card-label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);font-weight:700}.card-value{font-size:14px;text-align:right;color:var(--ink-2)}.card-corr .card-value{font-size:12px}.card-foot{margin-top:2px;padding-top:12px;border-top:1px solid var(--line)}.card-go{font-size:13px;font-weight:700;color:var(--indigo-300)}.age-chip{display:inline-flex;align-items:center;gap:7px;padding:5px 11px;border-radius:999px;background:var(--surface-3);border:1px solid var(--line-2);font-size:12px;font-weight:600;color:var(--ink-2)}.age-chip-label{text-transform:uppercase;letter-spacing:.07em;font-size:10px;font-weight:800;color:var(--ink-3)}.age-chip-value{color:var(--ink)}.badge{display:inline-block;padding:4px 11px;border-radius:999px;font-size:12px;font-weight:700;text-transform:lowercase;border:1px solid transparent}.badge-unacknowledged{background:var(--amber-soft);color:var(--amber-ink);border-color:#f0bd6159}.badge-acknowledged,.badge-ack{background:var(--green-soft);color:var(--green-ink);border-color:#5fdc974d}.badge-muted{background:var(--surface-3);color:var(--ink-2);border-color:var(--line-2)}.detail{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:18px}.detail-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.detail-eyebrow{margin:0;font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-3);font-weight:700}.detail-id{margin:5px 0 0;font-size:18px;overflow-wrap:anywhere;color:var(--ink)}.detail-back{flex:none}.detail-meta{display:grid;grid-template-columns:116px 1fr;gap:10px 14px;margin:20px 0}.detail-meta dt{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);font-weight:700}.detail-meta dd{margin:0;font-size:14px;overflow-wrap:anywhere;display:flex;align-items:center;gap:8px;color:var(--ink-2)}.detail-status-label{color:var(--ink)}.detail-note{background:var(--surface-3);border:1px solid var(--line-2);border-radius:12px;padding:12px 14px;font-size:14px;color:var(--ink-2);margin:0}.action-row{display:flex;gap:12px;margin:8px 0 16px}.btn{min-height:var(--touch);min-width:var(--touch);padding:0 18px;border-radius:13px;border:1px solid transparent;font-weight:700;font-size:15px;display:inline-flex;align-items:center;justify-content:center}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-ack{background:var(--ack);color:#fff;box-shadow:0 10px 26px #15924f47}.btn-ack:disabled{box-shadow:none}.btn-secondary{background:var(--indigo-soft);color:var(--indigo-300);border-color:var(--indigo)}.btn-ghost{background:var(--surface-2);color:var(--ink-2);border-color:var(--line-2)}.action-row .btn-ack{flex:1}.state-view{padding:28px 14px;text-align:center;color:var(--ink-2)}.state-loading{padding:4px 0}.loading-line{text-align:center;color:var(--ink-2);font-weight:600;margin:6px 0 16px}.empty-title{font-size:18px;font-weight:700;color:var(--ink);margin:0}.state-hint{font-size:14px;margin:12px 0 0;color:var(--ink-2)}.mutation-progress{font-weight:700;color:var(--indigo-300);margin:12px 0 0}@keyframes skel-pulse{0%{opacity:.55}50%{opacity:1}to{opacity:.55}}.skeleton-card{pointer-events:none}.skel-row-top{display:flex;align-items:center;justify-content:space-between}.skel-block{display:block;background:var(--surface-3);border-radius:8px;animation:skel-pulse 1.4s ease-in-out infinite}.skel-id{width:42%;height:14px}.skel-pill{width:90px;height:22px;border-radius:999px}.skel-line{width:100%;height:12px;margin-top:4px}.skel-line.short{width:60%}.success-panel{margin-top:16px;background:var(--green-soft);border:1px solid rgba(95,220,151,.3);border-radius:12px;padding:14px;display:flex;flex-direction:column;gap:10px}.success-title{margin:0;color:var(--green-ink);font-weight:700}.success-panel .detail-note{background:#ffffff08}.error-panel{margin-top:16px;background:var(--red-soft);border:1px solid rgba(220,38,38,.4);border-radius:12px;padding:14px}.error-head{display:flex;align-items:flex-start;gap:12px}.error-icon{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;background:var(--red);color:#fff;font-weight:800;flex:none}.error-title{margin:0;font-weight:700;color:var(--red-ink)}.error-code{margin:2px 0 0;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--red-ink)}.error-message{margin:10px 0 0;color:var(--ink);font-size:14px}.error-meta{display:grid;grid-template-columns:110px 1fr;gap:4px 12px;margin:10px 0 0}.error-meta dt{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);font-weight:700}.error-meta dd{margin:0;font-size:13px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow-wrap:anywhere;color:var(--ink-2)}.error-actions{display:flex;gap:10px;margin-top:12px}.job-list .job-card{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:14px 16px;margin-bottom:12px;min-height:var(--touch);transition:border-color .12s ease,background .12s ease,transform .04s ease}.job-list .job-card:active{transform:translateY(1px)}.job-list .job-card.is-unacknowledged{border-color:var(--indigo-300);box-shadow:inset 3px 0 0 var(--indigo)}.job-card .card-row-top{display:flex;align-items:center;justify-content:space-between;gap:10px}.job-card .job-id{font-family:var(--mono, ui-monospace);font-size:12px;color:var(--ink);font-weight:600}.job-card .card-label{font-size:10.5px;font-weight:600;color:var(--ink-3);text-transform:uppercase;letter-spacing:.04em}.job-card .card-value{font-size:13px;color:var(--ink)}.job-card .card-corr{font-family:var(--mono, ui-monospace);font-size:10.5px;color:var(--ink-3)}.job-card .card-go{color:var(--indigo-300);font-weight:700}.age-chip{display:inline-flex;align-items:baseline;gap:5px;background:var(--surface-2);border:1px solid var(--line-2);border-radius:999px;padding:2px 10px}.age-chip-label{font-size:10px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.04em}.age-chip-value{font-size:12px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums}.badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px}.badge-ack{color:var(--green-ink);background:var(--green-soft)}.badge-muted{color:var(--ink-3);background:var(--surface-3)}.btn-ack{background:var(--ack, var(--indigo));color:#fff;min-height:var(--touch);font-weight:700}.btn-ack:hover{filter:brightness(1.06)}.state-loading,.empty-title{color:var(--ink-2)}.detail-note{color:var(--green-ink);font-weight:600}.jobs-toolbar{display:flex;flex-direction:column;gap:10px;margin-bottom:14px}.toolbar-row{display:flex;gap:10px}.toolbar-controls{flex-wrap:wrap}.field{display:flex;flex-direction:column;gap:5px;flex:1 1 auto;min-width:0}.field-grow{flex:1 1 100%}.field-label{font-size:10.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}.field-input{min-height:var(--touch);padding:0 12px;border-radius:12px;border:1px solid var(--line-2);background:var(--surface-2);color:var(--ink);font-size:14px;font-weight:600;width:100%}.field-input:focus{outline:2px solid var(--indigo);outline-offset:1px}select.field-input{cursor:pointer}.grid-result-info{font-size:12.5px;font-weight:700;color:var(--ink-2);margin:0 0 12px;padding:0 2px}.grid-pager{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px}.grid-pager .pager-status{font-size:12.5px;font-weight:700;color:var(--ink-2)}@media(max-width:768px){.signin-left-panel{display:none!important}}.pane{animation:fadeIn .22s var(--ease-default, ease) both}@keyframes fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.btn svg{flex-shrink:0}.btn{display:inline-flex;align-items:center;gap:6px}.job-card.is-acknowledged{opacity:.7}.v-empty-state-icon{color:var(--ink-3, var(--text-4))}.v-empty-state-title{color:var(--ink, var(--text-2))}.v-empty-state-desc{color:var(--ink-2, var(--text-3))}.job-list .job-card{transition:border-color .15s ease,transform .06s ease,box-shadow .15s ease}.job-list .job-card:hover{transform:translateY(-1px)}
