:root{color:#18201d;background:#e9ece5;font-family:Aptos,Noto Sans TC,Microsoft JhengHei,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background:linear-gradient(135deg,#e9ece5eb,#dde6e5c2),repeating-linear-gradient(90deg,rgba(24,32,29,.04) 0,rgba(24,32,29,.04) 1px,transparent 1px,transparent 64px)}button,input{font:inherit}button{border:0;cursor:pointer}code,pre{font-family:Cascadia Mono,SFMono-Regular,Consolas,monospace}.appShell{width:min(1440px,100%);margin:0 auto;padding:28px}.topBar{display:flex;align-items:end;justify-content:space-between;gap:20px;margin-bottom:24px;border-bottom:1px solid rgba(24,32,29,.16);padding-bottom:20px}.topBarRight{display:flex;align-items:center;gap:16px}.authStatus{display:flex;align-items:center;gap:10px}.eyebrow{margin:0 0 6px;color:#6f7f49;font-size:12px;font-weight:800;letter-spacing:0;text-transform:uppercase}h1,h2{margin:0;letter-spacing:0}h1{font-size:clamp(30px,5vw,58px);line-height:.98}h2{font-size:28px}.servicePill{display:inline-flex;align-items:center;gap:9px;min-width:118px;justify-content:center;border:1px solid rgba(24,32,29,.22);background:#ffffff85;padding:10px 13px;border-radius:8px;font-weight:800}.servicePill span{width:9px;height:9px;border-radius:50%;background:#b45d47}.servicePill.online span{background:#3f8f64}.workspace{display:grid;grid-template-columns:minmax(300px,390px) minmax(0,1fr);gap:22px;align-items:start}.uploadPanel,.resultPanel{border:1px solid rgba(24,32,29,.16);background:#fafbf6c7;box-shadow:0 18px 60px #18201d1a}.uploadPanel{display:grid;gap:18px;padding:18px;position:sticky;top:18px}.dropZone{min-height:230px;display:grid;place-items:center;align-content:center;gap:12px;border:2px dashed rgba(48,74,67,.35);background:linear-gradient(160deg,#f6f8eef0,#dde6e5bd),linear-gradient(90deg,rgba(111,127,73,.16),transparent);border-radius:8px;text-align:center;padding:24px;cursor:pointer}.dropZone input{position:absolute;opacity:0;pointer-events:none}.dropIcon{width:54px;height:54px;display:grid;place-items:center;background:#233b35;color:#f6f8ee;border-radius:50%;font-size:34px;line-height:1}.dropZone strong{max-width:100%;overflow-wrap:anywhere;font-size:19px}.dropZone small{color:#5d6964}.fieldGrid{display:grid;gap:12px}.fieldGrid label{display:grid;gap:7px}.fieldGrid label span,.serverBox span{color:#5d6964;font-size:13px;font-weight:800}.fieldGrid input[type=text],.fieldGrid input:not([type]),.fieldGrid select{width:100%}.fieldGrid input,.fieldGrid select{border:1px solid rgba(24,32,29,.18);background:#fffef8;border-radius:6px;padding:10px 11px;color:#18201d}.toggleRow{grid-template-columns:18px 1fr;align-items:center}.actions{display:grid;grid-template-columns:1fr auto;gap:10px}.actions button{min-height:44px;border-radius:7px;background:#233b35;color:#f7f8ef;font-weight:900;padding:0 18px}.actions button:disabled{cursor:not-allowed;opacity:.48}.actions .ghostButton{background:transparent;color:#233b35;border:1px solid rgba(24,32,29,.2)}.message,.errorText{margin:0;color:#9b3f33;font-weight:800}.serverBox{display:grid;gap:7px;border-top:1px solid rgba(24,32,29,.12);padding-top:14px}.serverBox code,.paths code{display:block;max-width:100%;overflow:auto;border:1px solid rgba(24,32,29,.12);background:#fffef8b8;padding:8px;border-radius:6px;color:#36423d;font-size:12px}.resultPanel{min-height:660px;padding:20px}.resultHeader{display:flex;align-items:start;justify-content:space-between;gap:16px;margin-bottom:18px}.jobId{color:#51605a;background:#eef1e6;border:1px solid rgba(24,32,29,.12);border-radius:6px;padding:8px}.progressPanel{display:grid;gap:10px;margin:-4px 0 18px;padding:14px;border:1px solid rgba(24,32,29,.14);background:#fffef8ad;border-radius:8px}.progressMeta{display:flex;justify-content:space-between;align-items:center;gap:14px}.progressMeta strong{color:#233b35;font-size:14px}.progressMeta span{color:#6f7f49;font-weight:900}.progressTrack{position:relative;height:12px;overflow:hidden;border-radius:999px;background:#d9dfd3;box-shadow:inset 0 0 0 1px #18201d14}.progressFill{height:100%;min-width:4px;border-radius:inherit;background:linear-gradient(90deg,#6f7f49,#2e6f67);transition:width .36s ease}.progressPanel.failed .progressFill{background:linear-gradient(90deg,#b45d47,#8f342d)}.progressPanel.completed .progressFill{background:linear-gradient(90deg,#3f8f64,#1f6a5b)}.summaryGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid rgba(24,32,29,.14);margin-bottom:16px}.infoCell{min-width:0;display:grid;gap:8px;padding:13px;border-right:1px solid rgba(24,32,29,.1)}.infoCell:last-child{border-right:0}.infoCell span{color:#6f7f49;font-size:12px;font-weight:900}.infoCell strong{overflow-wrap:anywhere;font-size:14px}.pageTabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}.pageTabs button{min-height:36px;padding:0 12px;border-radius:6px;background:#e5eadf;color:#233b35;font-weight:850}.pageTabs button.active{background:#8a9a5b;color:#fffef8}.paneTabs{display:flex;gap:4px;margin-bottom:12px;border-bottom:1px solid #d7ded1}.paneTabs button{min-height:32px;padding:0 14px;border-radius:6px 6px 0 0;background:transparent;color:#5d6b5f;font-weight:700}.paneTabs button.active{background:#e5eadf;color:#233b35;font-weight:850}.renderPane img{display:block;width:100%;height:auto;border:1px solid #d7ded1;border-radius:8px;background:#fffef8}.renderPane.loading{padding:32px;text-align:center;color:#5d6b5f}.renderCaption{margin:8px 0 0;font-size:.85rem;color:#5d6b5f}.paths{display:grid;gap:8px;margin-bottom:14px}.jsonViewer{min-height:360px;max-height:620px;overflow:auto;margin:0;padding:18px;border-radius:8px;background:#17211d;color:#dfead6;font-size:13px;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}.emptyState{min-height:430px;display:grid;place-content:center;gap:10px;text-align:center;color:#52615c}.emptyState strong{color:#18201d;font-size:22px}.logs{margin-top:16px}.logs summary{cursor:pointer;font-weight:900}.logs pre{max-height:240px;overflow:auto;padding:12px;background:#fffef8;border:1px solid rgba(24,32,29,.12);border-radius:6px;white-space:pre-wrap}@media(max-width:900px){.appShell{padding:18px}.topBar,.workspace{display:grid}.workspace{grid-template-columns:1fr}.uploadPanel{position:static}.summaryGrid{grid-template-columns:1fr 1fr}}@media(max-width:560px){.appShell{padding:12px}.summaryGrid,.actions{grid-template-columns:1fr}.infoCell{border-right:0;border-bottom:1px solid rgba(24,32,29,.1)}.dropZone{min-height:190px}}.viewTabs{display:flex;gap:6px}.viewTabs button{min-height:34px;padding:0 14px;border-radius:6px;background:#e5eadf;color:#233b35;font-weight:850}.viewTabs button.active{background:#8a9a5b;color:#fffef8}.usageWorkspace{display:block}.usageFilters{align-items:end;margin-bottom:18px}.usageChart{display:flex;align-items:flex-end;gap:10px;min-height:200px;padding:16px 4px 0;margin-bottom:18px;overflow-x:auto}.usageBarCol{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:34px;flex:1}.usageBarValue{font-size:12px;font-weight:800;color:#233b35}.usageBarTrack{display:flex;align-items:flex-end;height:150px;width:100%}.usageBarFill{width:100%;min-height:2px;border-radius:5px 5px 0 0;background:#8a9a5b;transition:height .2s ease}.usageBarLabel{font-size:11px;color:#6f7f49;font-weight:700;white-space:nowrap}.usageTable{width:100%;border-collapse:collapse;font-size:13px}.usageTable th,.usageTable td{padding:6px 10px;text-align:left;border-bottom:1px solid rgba(24,32,29,.12)}.usageTable th{color:#6f7f49;font-weight:800}.historyItems{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;max-height:70vh;overflow-y:auto}.historyItems button{width:100%;text-align:left;display:flex;flex-direction:column;gap:6px;padding:10px 12px;border-radius:8px;background:#e5eadf;color:#233b35}.historyItems button.active{background:#8a9a5b;color:#fffef8}.historyName{font-weight:800;word-break:break-all}.historyMeta{display:flex;align-items:center;gap:10px;font-size:12px;opacity:.9}.statusTag{padding:1px 8px;border-radius:999px;font-weight:800;background:#18201d1f}.statusTag.completed{background:#8a9a5b;color:#fffef8}.statusTag.failed{background:#c0563f;color:#fffef8}.statusTag.running,.statusTag.queued{background:#d9b34a;color:#233b35}
