:root{--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;--font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, monospace;--fs-xs: .75rem;--fs-sm: .875rem;--fs-md: 1rem;--fs-lg: 1.125rem;--fs-xl: 1.375rem;--tap-min: 48px;--tap-primary: 56px;--c-bg: #f6f5f2;--c-surface: #ffffff;--c-surface-2: #eeece7;--c-line: #c9c5bc;--c-line-strong: #8f8a7e;--c-ink: #1c1b18;--c-ink-2: #4a4741;--c-ink-3: #6b675e;--c-accent: #0b57d0;--c-accent-ink: #ffffff;--c-accent-surface: #e7effd;--c-danger: #b3261e;--c-danger-surface: #fdeceb;--c-ok: #146c2e;--c-ok-surface: #e6f4ea;--c-pending-ink: #6f4a00;--c-pending-bg: #fff4d6;--c-pending-border: #b8860b;--c-warn-ink: #7a3d00;--c-warn-bg: #ffedd9;--c-warn-border: #c86400;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 24px;--sp-6: 32px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--shadow-1: 0 1px 3px rgba(28, 27, 24, .12);--shadow-2: 0 4px 16px rgba(28, 27, 24, .16);--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-left: env(safe-area-inset-left, 0px);--safe-right: env(safe-area-inset-right, 0px)}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font-sans);font-size:var(--fs-md);color:var(--c-ink);background:var(--c-bg);-webkit-font-smoothing:antialiased;overscroll-behavior:none}button,input,select,textarea{font:inherit;color:inherit}button{min-height:var(--tap-min);min-width:var(--tap-min);padding:0 var(--sp-4);border:1px solid var(--c-line-strong);border-radius:var(--radius-md);background:var(--c-surface);cursor:pointer}button.primary{min-height:var(--tap-primary);background:var(--c-accent);border-color:var(--c-accent);color:var(--c-accent-ink);font-weight:600}input,select,textarea{min-height:var(--tap-min);padding:var(--sp-2) var(--sp-3);border:1px solid var(--c-line-strong);border-radius:var(--radius-sm);background:var(--c-surface)}:focus-visible{outline:3px solid var(--c-accent);outline-offset:1px}.ws{height:100%;display:flex;flex-direction:column;background:var(--c-bg)}.ws-header{display:flex;align-items:center;gap:var(--sp-4);padding:var(--sp-2) var(--sp-4);padding-top:calc(var(--sp-2) + var(--safe-top));background:var(--c-surface);border-bottom:1px solid var(--c-line);flex-wrap:wrap}.ws-title{margin:0;font-size:var(--fs-lg);font-weight:700}.ws-completeness{font-size:var(--fs-sm);color:var(--c-ink-2);font-family:var(--font-mono)}.ws-badge{display:inline-block;padding:2px var(--sp-2);border-radius:var(--radius-sm);font-size:var(--fs-xs);background:var(--c-warn-bg);color:var(--c-warn-ink);border:1px solid var(--c-warn-border)}.theme-tabs{display:flex;border:1px solid var(--c-line-strong);border-radius:var(--radius-md);overflow:hidden}.theme-tabs button{border:none;border-radius:0;min-height:var(--tap-min);background:var(--c-surface);font-weight:600;color:var(--c-ink-2)}.theme-tabs button+button{border-left:1px solid var(--c-line-strong)}.theme-tabs button[aria-selected=true]{background:var(--c-accent);color:var(--c-accent-ink)}.sheet-scroll{flex:1;overflow:auto;position:relative}.sheet-head,.sheet-row{display:grid;gap:1px;align-items:stretch}.sheet-head{position:sticky;top:0;z-index:6;background:var(--c-surface-2);border-bottom:1px solid var(--c-line-strong)}.sheet-head>div{padding:var(--sp-2) var(--sp-2);font-size:var(--fs-xs);font-weight:700;color:var(--c-ink-2);text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;overflow:hidden}.sheet-row{position:absolute;left:0;right:0;background:var(--c-line)}.sheet-row:focus-within{z-index:5}.sheet-row:has(.menu-pop),.sheet-row:has(.picker-pop){z-index:5}.sheet-row.review{box-shadow:inset 4px 0 0 var(--c-warn-border)}.cell{background:var(--c-surface);display:flex;align-items:center;position:relative;min-height:var(--tap-min)}.cell input{border:none;border-radius:0;width:100%;height:100%;min-height:var(--tap-min);background:transparent;padding:0 var(--sp-2)}.cell input:focus{outline:2px solid var(--c-accent);outline-offset:-2px}.cell input.invalid{outline:2px solid var(--c-danger);outline-offset:-2px}.cell-depth input{font-family:var(--font-mono);text-align:right}.issue-chip{position:absolute;top:-1px;left:var(--sp-2);transform:translateY(-50%);z-index:2;font-size:var(--fs-xs);padding:0 var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--c-warn-border);background:var(--c-warn-bg);color:var(--c-warn-ink);white-space:nowrap}.issue-chip.overlap{border-color:var(--c-danger);background:var(--c-danger-surface);color:var(--c-danger)}.picker-pop{position:absolute;top:100%;left:0;z-index:10;min-width:260px;max-height:320px;overflow-y:auto;background:var(--c-surface);border:1px solid var(--c-line-strong);border-radius:var(--radius-md);box-shadow:var(--shadow-2)}.picker-opt{display:flex;align-items:center;gap:var(--sp-2);width:100%;min-height:var(--tap-min);padding:0 var(--sp-3);border:none;border-radius:0;background:transparent;text-align:left}.picker-opt[aria-selected=true]{background:var(--c-accent-surface)}.picker-opt .code{font-family:var(--font-mono);font-weight:700;min-width:3.5em}.picker-opt .label{color:var(--c-ink-2);font-size:var(--fs-sm)}.swatch{width:16px;height:16px;border-radius:4px;border:1px solid var(--c-line-strong);flex:none}.picker-sep{border-top:1px solid var(--c-line);margin:0;padding:2px var(--sp-3);font-size:var(--fs-xs);color:var(--c-ink-3)}.chips{display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-1);padding:var(--sp-1) var(--sp-2);width:100%}.chip{display:inline-flex;align-items:center;gap:4px;padding:2px var(--sp-2);border-radius:999px;border:1px solid var(--c-line-strong);background:var(--c-surface-2);font-size:var(--fs-sm);font-family:var(--font-mono);min-height:32px}.chip button{border:none;background:none;min-height:28px;min-width:28px;padding:0;color:var(--c-ink-3);font-size:var(--fs-md);position:relative}.chip button:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:48px;height:48px}.chip-add{min-height:32px;min-width:44px;padding:0 var(--sp-2);border-radius:999px;font-size:var(--fs-sm);color:var(--c-ink-2);position:relative}.chip-add:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:48px;height:48px}.row-menu-btn{border:none;background:transparent;min-width:var(--tap-min);min-height:var(--tap-min);color:var(--c-ink-3);font-size:var(--fs-lg)}.review-flag-btn{position:absolute;right:0;top:50%;transform:translateY(-50%);border:none;background:transparent;min-width:var(--tap-min);min-height:var(--tap-min);color:var(--c-warn-border);font-size:var(--fs-md)}.log-btn{min-height:var(--tap-min);min-width:60px;background:var(--c-accent);border-color:var(--c-accent);color:var(--c-accent-ink);font-weight:700;border-radius:var(--radius-md)}.swatch.in-cell{position:absolute;left:var(--sp-2);top:50%;transform:translateY(-50%);pointer-events:none;z-index:1}.picker-root input.has-swatch{padding-left:calc(var(--sp-2) + 24px)}.picker-root input::placeholder{color:var(--c-line-strong);font-size:var(--fs-sm)}.picker-pop.drop-up{top:auto;bottom:100%}.menu-pop{position:absolute;right:0;top:100%;z-index:10;background:var(--c-surface);border:1px solid var(--c-line-strong);border-radius:var(--radius-md);box-shadow:var(--shadow-2);min-width:220px;display:grid}.menu-pop button{border:none;border-radius:0;background:transparent;text-align:left;padding:0 var(--sp-4)}.menu-pop button:hover{background:var(--c-accent-surface)}.menu-pop button.danger{color:var(--c-danger)}.dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;background:#1c1b1866;display:grid;place-items:center;padding:var(--sp-5)}.dialog{background:var(--c-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-2);padding:var(--sp-5);width:min(480px,100%);display:grid;gap:var(--sp-4)}.dialog h2{margin:0;font-size:var(--fs-lg)}.dialog .row{display:flex;gap:var(--sp-3);align-items:center}.field-label{font-size:var(--fs-sm);color:var(--c-ink-2);font-weight:600}.ghost-chip{position:absolute;top:3px;right:3px;bottom:3px;left:3px;z-index:2;display:flex;align-items:stretch;border:2px dashed var(--c-pending-border);background:var(--c-pending-bg);border-radius:var(--radius-sm);overflow:hidden}.ghost-chip .ghost-accept{flex:1;border:none;background:transparent;color:var(--c-pending-ink);font-weight:600;font-size:var(--fs-sm);text-align:left;padding:0 var(--sp-2);min-height:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ghost-chip .ghost-reject{border:none;border-left:1px dashed var(--c-pending-border);background:transparent;color:var(--c-pending-ink);min-width:var(--tap-min);min-height:0}.ghost-chip.conflict{border-color:var(--c-danger);background:var(--c-danger-surface)}.ghost-chip.conflict .ghost-accept,.ghost-chip.conflict .ghost-reject{color:var(--c-danger)}.cell.recognizing{animation:recog-shimmer 1.2s ease-in-out infinite}@keyframes recog-shimmer{0%,to{background:var(--c-surface)}50%{background:var(--c-pending-bg)}}.recog-bar{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-1) var(--sp-3);background:var(--c-surface);border-top:2px solid var(--c-pending-border);flex-wrap:wrap}.recog-bar-floating .recog-bar{position:fixed;left:0;right:0;bottom:0;z-index:14;box-shadow:0 -4px 16px #1c1b1824;padding-bottom:calc(var(--sp-1) + var(--safe-bottom))}.recog-status{font-size:var(--fs-sm);color:var(--c-ink-2)}.recog-status.error{color:var(--c-danger)}.ink-panel{position:fixed;left:0;right:0;bottom:0;z-index:15;background:var(--c-surface);border-top:2px solid var(--c-line-strong);box-shadow:0 -6px 24px #1c1b182e;display:flex;flex-direction:column}.ink-toolbar{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-3);border-bottom:1px solid var(--c-line);flex-wrap:wrap}.ink-toolbar button.active{background:var(--c-accent);border-color:var(--c-accent);color:var(--c-accent-ink)}.ink-title{font-weight:700;font-size:var(--fs-sm);color:var(--c-ink-2);margin-right:var(--sp-2)}.ink-finger-toggle{display:flex;align-items:center;gap:var(--sp-1);font-size:var(--fs-sm);color:var(--c-ink-2);min-height:var(--tap-min)}.ink-scroll{overflow-y:auto;max-height:46vh;position:relative;background:repeating-linear-gradient(to bottom,var(--c-surface),var(--c-surface) 55px,#e8f0f8 56px)}.ink-scroll-rail{position:sticky;float:right;top:var(--sp-2);margin-right:var(--sp-1);width:var(--tap-min);height:96px;border-radius:var(--radius-md);background:var(--c-surface-2);border:1px solid var(--c-line-strong);display:grid;place-items:center;color:var(--c-ink-3);touch-action:none;-webkit-user-select:none;user-select:none}.ink-hint{padding:var(--sp-1) var(--sp-3);background:var(--c-warn-bg);color:var(--c-warn-ink);border-bottom:1px solid var(--c-warn-border);font-size:var(--fs-sm)}.ink-deadzone{height:calc(20px + var(--safe-bottom));background:var(--c-surface-2)}.ink-btn{border:none;background:transparent;min-width:var(--tap-min);min-height:var(--tap-min);color:var(--c-ink-2);font-size:var(--fs-lg)}.ink-btn.has-ink{color:var(--c-accent);background:var(--c-accent-surface);border-radius:var(--radius-sm)}.kbd-hints{padding:var(--sp-1) var(--sp-4);padding-bottom:calc(var(--sp-1) + var(--safe-bottom));font-size:var(--fs-xs);color:var(--c-ink-3);background:var(--c-surface);border-top:1px solid var(--c-line);display:flex;gap:var(--sp-4);flex-wrap:wrap}.kbd-hints kbd{font-family:var(--font-mono);background:var(--c-surface-2);border:1px solid var(--c-line);border-radius:4px;padding:0 4px}.ws-body{display:flex;flex:1;min-height:0}.ws-body[data-side=left]{flex-direction:row-reverse}.ws-main{display:flex;flex-direction:column;flex:1;min-width:0}.ws-strip-rail{flex:0 0 auto;border-left:1px solid var(--c-line);background:var(--c-surface);overflow:hidden;display:flex}.ws-body[data-side=left] .ws-strip-rail{border-left:none;border-right:1px solid var(--c-line)}.ws:has(.ink-panel) .ws-strip-rail{display:none}.strip-log{display:flex;flex-direction:column;height:100%;padding:0 var(--sp-2)}.strip-header{display:flex;align-items:center;gap:var(--sp-1);min-height:34px}.strip-title{font-size:var(--fs-xs);color:var(--c-ink-3);flex:1}.strip-header button{min-height:28px;min-width:36px;font-size:var(--fs-xs);padding:0 var(--sp-1)}.strip-svg{display:block;touch-action:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.strip-hint{font-size:var(--fs-xs);color:var(--c-ink-3);padding-bottom:2px}.strip-lane-label{font-size:10px;font-weight:600;fill:var(--c-ink-2)}.strip-scale-label{font-size:8px;fill:var(--c-ink-3);font-family:var(--font-mono)}.strip-theme-seg{stroke:var(--c-line-strong);stroke-width:.5}.strip-grid{stroke:var(--c-line);stroke-width:.5}.strip-tick-label{font-size:11px;fill:var(--c-ink-3);font-family:var(--font-mono)}.strip-code{font-size:10px;fill:var(--c-ink);pointer-events:none;paint-order:stroke;stroke:#ffffffb3;stroke-width:2px}.strip-sulfide{fill:#c9a227;opacity:.85}.strip-sulfide-edge{stroke:#7a5d00;stroke-width:1}.strip-sulfide-edge.over{stroke:var(--c-danger);stroke-width:2}.strip-recovery{fill:#8fa88f}.strip-recovery.over{fill:var(--c-danger)}.strip-sample{fill:#4a4741}.strip-sample.duplicate{fill:#0b57d0}.strip-sample.blank{fill:#c86400}.strip-sample.standard{fill:#7a3db8}.strip-photo{fill:#0b57d0}.strip-annot-line{stroke:var(--c-line-strong)}.strip-annot-text{font-size:11px;fill:var(--c-ink-2)}.strip-viewport{fill:var(--c-accent);opacity:.55;pointer-events:none}.tab-divider{width:1px;align-self:stretch;margin:var(--sp-1) var(--sp-1);background:var(--c-line-strong)}.panel-scroll{flex:1;overflow:auto;padding:var(--sp-3) var(--sp-4)}.panel-toolbar{display:flex;gap:var(--sp-2);align-items:center;padding-bottom:var(--sp-3)}.panel-table{display:grid;align-items:center;gap:2px var(--sp-2);max-width:900px}.panel-head{font-size:var(--fs-xs);color:var(--c-ink-3);text-transform:uppercase;letter-spacing:.04em;padding-bottom:var(--sp-1);border-bottom:1px solid var(--c-line)}.panel-cell{min-height:var(--tap-min);display:flex;align-items:center}.panel-cell input:not([type=checkbox]),.panel-cell select{width:100%;min-height:44px}.panel-cell input[type=checkbox]{width:22px;height:22px}.panel-cell.muted{color:var(--c-ink-3)}.sample-kind{font-size:var(--fs-xs);font-family:var(--font-mono);padding:2px 8px;border-radius:var(--radius-sm);background:var(--c-surface-2);border:1px solid var(--c-line)}.sample-kind.duplicate{border-color:#0b57d0;color:#0b57d0}.sample-kind.blank{border-color:#c86400;color:#c86400}.sample-kind.standard{border-color:#7a3db8;color:#7a3db8}.dialog label{display:flex;flex-direction:column;gap:4px;font-size:var(--fs-sm);color:var(--c-ink-2)}.checkbox-hit{display:flex;align-items:center;justify-content:center;min-width:var(--tap-min);min-height:var(--tap-min);cursor:pointer}.structures-layout{display:flex;gap:var(--sp-5);align-items:flex-start;flex-wrap:wrap}.stereonet-svg{display:block;background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--radius-md)}.photo-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--sp-4);max-width:1100px}.photo-card{margin:0;border:1px solid var(--c-line);border-radius:var(--radius-md);overflow:hidden;background:var(--c-surface)}.photo-card img{width:100%;aspect-ratio:4 / 3;object-fit:contain;background:var(--c-surface-2);display:block}.photo-loading{width:100%;aspect-ratio:4 / 3;background:var(--c-surface-2)}.photo-card figcaption{padding:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-1)}.photo-card figcaption input{min-height:40px}
