:root{font-family:'Microsoft JhengHei','PingFang TC',sans-serif;color:#233f3b;background:#f1f5f3;font-size:clamp(15px,.4vw + 13px,18px);--green:#176d69;--line:#d5e1dc;--muted:#60766d;--red:#a34236}*{box-sizing:border-box}body{margin:0}header{display:flex;justify-content:space-between;align-items:center;padding:18px max(5vw,20px);background:#fff;border-bottom:1px solid var(--line)}a{color:var(--green)}.brand{display:flex;gap:12px;align-items:center;text-decoration:none;font-size:1.1rem;font-weight:700}.brand small{display:block;font-size:.67rem;letter-spacing:.09em;font-weight:400;margin-top:4px}.back-link{font-size:.85rem}main{max-width:1320px;margin:auto;padding:40px 28px 20px}.page-heading{display:grid;grid-template-columns:1fr 1fr;gap:32px;align-items:center;margin-bottom:26px}.overline{font-size:.8rem;letter-spacing:.15em;color:var(--green)}h1{font-size:clamp(2rem,4vw,3.2rem);line-height:1.24;letter-spacing:.03em;font-weight:500;margin:14px 0}p{line-height:1.75}.page-heading p{color:var(--muted);margin-bottom:0}.service-card{background:#e2eeea;border-left:4px solid var(--green);padding:24px}.service-card strong,.service-card small{display:block;margin:12px 0}.service-card small{color:var(--muted);line-height:1.7}.workspace{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px;align-items:start}.panel{min-width:0;background:#fff;padding:26px;border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 26px #233f3b06}.section-heading{display:flex;gap:12px;align-items:center;margin-bottom:22px}.step{border:1px solid #88b1a3;width:30px;height:30px;display:grid;place-items:center;border-radius:50%;font-family:Consolas,monospace;color:var(--green)}h2{font-size:1.12rem;font-weight:600;margin:0}label{display:block;font-size:.87rem;line-height:1.7;margin:12px 0}input:not([type=radio]):not([type=checkbox]):not([type=range]),textarea{display:block;width:100%;font:inherit;border:1px solid #b6cbc1;background:#fbfdfc;color:inherit;border-radius:5px;padding:10px 12px;min-height:44px;margin-top:5px}input[type=file]{padding:9px!important;font-size:.8rem}textarea{resize:vertical}button{font:inherit;font-size:.85rem;font-weight:600;border:1px solid #93b3a6;border-radius:5px;color:var(--green);background:#eff6f3;min-height:44px;padding:10px 16px;cursor:pointer;touch-action:manipulation;margin:6px 4px 6px 0}button.primary{display:block;width:100%;background:var(--green);border-color:var(--green);color:white;margin:24px 0 10px}button.quiet{background:white}button:disabled{opacity:.45;cursor:default}button:hover:not(:disabled){filter:brightness(.96)}:focus-visible{outline:3px solid #deaa41;outline-offset:3px}.upload-zone{padding:18px;border:1px dashed #9ebcae;border-radius:8px;background:#f5f9f7;font-weight:600}.upload-zone small{font-weight:400;font-size:.73rem;color:var(--muted);display:block;margin-top:6px}.upload-zone input{background:white!important}.hint{font-size:.76rem;color:var(--muted);line-height:1.8}details{margin:16px 0;border-top:1px solid var(--line);padding-top:12px;font-size:.83rem}summary{cursor:pointer;min-height:32px;line-height:1.7;color:var(--green)}details p{font-size:.8rem}fieldset{display:flex;gap:28px;border:1px solid var(--line);border-radius:6px;margin:20px 0}legend{font-size:.8rem;padding:0 7px}fieldset label{display:flex;align-items:center;gap:7px}.image-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.image-toolbar label{display:flex;align-items:center;gap:8px;font-size:.75rem}.image-toolbar input{max-width:110px}#mark-line[aria-pressed=true]{background:var(--green);color:#fff}#image-scroll{height:350px;overflow:auto;background:#dfe6e2;border:1px solid var(--line);overscroll-behavior:contain}#image-sheet{position:relative;width:100%;min-width:200px;line-height:0}#source-preview{display:block;width:100%;height:auto;pointer-events:none}#line-overlay{position:absolute;inset:0;width:100%;height:100%;cursor:crosshair;touch-action:none}#line-overlay.inspect{pointer-events:none}.calibration-inputs{display:flex;align-items:end;gap:8px}.calibration-inputs label{flex:1}#message:not(:empty){background:#e7f0eb;border:1px solid #b6cec1;border-radius:6px;padding:12px 16px;font-size:.85rem}#message.error{background:#fff1ed;border-color:#d8b2a8;color:var(--red)}.result-heading{margin-top:32px}.empty{color:var(--muted);font-size:.85rem}.job-card{border:1px solid var(--line);padding:14px;margin:12px 0;border-radius:6px;font-size:.82rem}.job-card strong{display:block;margin-bottom:7px}.job-card p{font-size:.76rem;margin:5px 0}.status-completed{border-left:4px solid var(--green)}.status-needs_review,.status-failed{border-left:4px solid #b2823d}.result-card{margin-top:20px}.result-card img{display:block;width:100%;background:#fff;border:1px solid var(--line);margin-bottom:10px}.downloads{display:flex;gap:8px;flex-wrap:wrap}.downloads button{font-size:.75rem;padding:7px 11px}.camera{padding:12px;border:1px solid var(--line);margin:12px 0}.camera-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 10px}.camera label{font-size:.72rem;margin:6px 0}.camera input{font-size:.85rem!important;padding:7px!important}.camera .delete-camera{color:var(--red);background:#fff}footer{font-size:.72rem;color:var(--muted);padding:30px 2px;display:flex;gap:12px;flex-wrap:wrap;justify-content:space-between}.oauth-card{max-width:560px;margin:60px auto;background:white;padding:32px;border:1px solid var(--line);border-radius:12px}.oauth-card h1{font-size:1.8rem}.oauth-card code{overflow-wrap:anywhere}[hidden]{display:none!important}@media(max-width:760px){header{padding:14px 18px}main{padding:26px 14px}.page-heading,.workspace{grid-template-columns:1fr;gap:18px}.page-heading h1 br{display:none}.page-heading h1{font-size:2rem}.service-card{padding:16px}.panel{padding:20px 16px}.page-heading{margin-bottom:16px}#image-scroll{height:300px}.calibration-inputs{align-items:center}.camera-grid{gap:0 8px}}@media(prefers-reduced-motion:no-preference){button{transition:filter .15s}}
