:root { --toolbox-background: #f6f7fb; --toolbox-surface: #ffffff; --toolbox-surface-soft: #eff1f7; --toolbox-text: #202332; --toolbox-muted: #656b7d; --toolbox-border: #d9dce7; --toolbox-accent: #5b4ec4; --toolbox-accent-hover: #493caf; --toolbox-accent-soft: #ece9ff; --toolbox-accent-contrast: #ffffff; --toolbox-focus: #137d75; --toolbox-danger: #b42342; --image-warning: #9a5a08; --image-success: #147259; --image-shadow: 0 1px 2px rgb(25 30 60 / 4%), 0 10px 30px rgb(25 30 60 / 3%); } * { box-sizing: border-box; } html { min-width: 20rem; min-height: 100%; background: var(--toolbox-background); scrollbar-gutter: stable; } body { min-width: 20rem; min-height: 100vh; margin: 0; background: var(--toolbox-background); color: var(--toolbox-text); font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; } #root { min-height: 100vh; } ::selection { background: color-mix(in srgb, var(--toolbox-focus) 38%, transparent); } .toolbox-shell__main { width: min(100%, 90rem); padding: clamp(0.75rem, 1.8vw, 1.5rem); } .workbench, .help-dialog, .fatal { color: var(--toolbox-text); } .workbench { display: grid; gap: 1rem; } .workbench :where(h1, h2, h3), .help-dialog h2, .fatal h1 { margin: 0; color: var(--toolbox-text); font-weight: 760; letter-spacing: -0.027em; line-height: 1.16; } .workbench h1 { font-size: clamp(1.65rem, 3vw, 2.45rem); } .workbench h2, .help-dialog h2 { font-size: clamp(1rem, 1.5vw, 1.25rem); } .workbench :where(button, input, select), .help-dialog button, .fatal button { font: inherit; } .workbench button, .help-dialog button, .fatal button { min-height: 2.45rem; display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem; padding: 0.52rem 0.75rem; border: 1px solid var(--toolbox-border); border-radius: 0.62rem; background: var(--toolbox-surface); box-shadow: 0 1px 1px rgb(20 30 60 / 4%); color: var(--toolbox-text); font-size: 0.79rem; font-weight: 720; line-height: 1.2; cursor: pointer; touch-action: manipulation; transition: border-color 140ms ease, background-color 140ms ease, color 140ms ease, transform 140ms ease; } .workbench button:hover:not(:disabled), .help-dialog button:hover:not(:disabled), .fatal button:hover:not(:disabled) { border-color: color-mix( in srgb, var(--toolbox-accent) 58%, var(--toolbox-border) ); background: var(--toolbox-surface-soft); } .workbench button:active:not(:disabled) { transform: translateY(1px); } .workbench button:disabled, .help-dialog button:disabled { opacity: 0.48; cursor: not-allowed; } :where(button, input, select, summary, a):focus-visible { outline: 3px solid color-mix(in srgb, var(--toolbox-focus) 42%, transparent); outline-offset: 2px; } .workbench :where(input[type="number"], select) { width: 100%; min-height: 2.45rem; padding: 0.52rem 0.62rem; border: 1px solid var(--toolbox-border); border-radius: 0.58rem; background: var(--toolbox-surface); color: var(--toolbox-text); font-size: 0.82rem; } .workbench input[type="range"] { width: 100%; min-height: 2rem; accent-color: var(--toolbox-accent); } .workbench input[type="checkbox"] { width: 1rem; height: 1rem; margin: 0; accent-color: var(--toolbox-accent); } .eyebrow { margin: 0 0 0.28rem; color: var(--toolbox-accent); font-size: 0.68rem; font-weight: 820; letter-spacing: 0.115em; line-height: 1.35; text-transform: uppercase; } .muted { color: var(--toolbox-muted); } .sr-only { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; } .hero, .drop-zone, .queue-panel, .inspection-strip, .preview-panel, .preview-empty, .controls-panel, .report-card, .action-bar { border: 1px solid var(--toolbox-border); border-radius: 0.86rem; background: var(--toolbox-surface); box-shadow: var(--image-shadow); } .hero { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; padding: clamp(1rem, 2.4vw, 1.65rem); } .hero p:not(.eyebrow) { max-width: 52rem; margin: 0.52rem 0 0; color: var(--toolbox-muted); line-height: 1.55; } .privacy-pill, .dimension-chip, .count-chip { flex: 0 0 auto; display: inline-flex; align-items: center; min-height: 1.8rem; padding: 0.34rem 0.6rem; border-radius: 999px; background: var(--toolbox-accent-soft); color: var(--toolbox-accent); font-size: 0.72rem; font-weight: 760; } .drop-zone { min-height: 6.2rem; display: grid; grid-template-columns: auto 1fr; align-items: center; gap: 0.15rem 0.85rem; padding: 1rem 1.2rem; border-style: dashed; cursor: pointer; transition: border-color 140ms ease, background-color 140ms ease; } .drop-zone:hover, .drop-zone:focus-within { border-color: var(--toolbox-accent); background: color-mix( in srgb, var(--toolbox-accent-soft) 46%, var(--toolbox-surface) ); } .drop-zone input { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); } .drop-zone__icon { grid-row: 1 / span 2; width: 2.6rem; height: 2.6rem; display: grid; place-items: center; border-radius: 0.7rem; background: var(--toolbox-accent-soft); color: var(--toolbox-accent); font-size: 1.5rem; font-weight: 500; } .drop-zone > span:not(.drop-zone__icon) { font-size: 0.94rem; } .drop-zone small { color: var(--toolbox-muted); font-size: 0.73rem; line-height: 1.45; } .workspace-layout { min-height: 37rem; display: grid; grid-template-columns: minmax(12rem, 0.66fr) minmax(23rem, 2fr) minmax( 17rem, 0.86fr ); align-items: start; gap: 0.85rem; } .queue-panel, .controls-panel { position: sticky; top: 0.75rem; max-height: calc(100vh - 6rem); padding: 0.85rem; overflow: auto; } .editor-column { min-width: 0; display: grid; gap: 0.85rem; } .section-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.8rem; } .section-heading--compact { align-items: center; margin-bottom: 0.7rem; } .queue-empty { margin: 0; padding: 1rem 0.2rem; color: var(--toolbox-muted); font-size: 0.8rem; line-height: 1.5; } .queue-list { display: grid; gap: 0.5rem; margin: 0; padding: 0; list-style: none; } .queue-list > li { position: relative; display: grid; gap: 0.4rem; padding: 0.42rem; border: 1px solid var(--toolbox-border); border-radius: 0.66rem; background: var(--toolbox-surface-soft); } .queue-list > li.is-active { border-color: var(--toolbox-accent); box-shadow: inset 3px 0 var(--toolbox-accent); } .queue-select { min-width: 0; display: grid !important; grid-template-columns: auto minmax(0, 1fr); align-items: center; justify-content: stretch !important; padding: 0.38rem !important; border: 0 !important; background: transparent !important; box-shadow: none !important; text-align: left !important; } .queue-select > span:last-child { min-width: 0; display: grid; gap: 0.15rem; } .queue-select strong { overflow: hidden; font-size: 0.78rem; text-overflow: ellipsis; white-space: nowrap; } .queue-select small, .queue-size { overflow: hidden; color: var(--toolbox-muted); font-size: 0.66rem; font-weight: 560; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; } .queue-size { padding: 0 0.38rem 0.2rem; } .status-dot { width: 0.62rem; height: 0.62rem; border-radius: 50%; background: var(--toolbox-muted); } .status-dot--ready, .status-dot--complete { background: var(--image-success); } .status-dot--processing, .status-dot--inspecting { background: var(--toolbox-accent); animation: pulse 1.2s ease-in-out infinite; } .status-dot--error { background: var(--toolbox-danger); } .queue-actions { display: flex; flex-wrap: wrap; gap: 0.3rem; padding: 0 0.3rem; } .queue-actions button { min-height: 1.85rem; padding: 0.3rem 0.46rem; font-size: 0.66rem; } .queue-actions .icon-button { width: 1.85rem; margin-left: auto; padding: 0; font-size: 1rem; } .inspection-strip { display: grid; gap: 0.7rem; padding: 0.85rem; } .inspection-title { min-width: 0; } .inspection-title h2 { overflow: hidden; font-size: 1rem; text-overflow: ellipsis; white-space: nowrap; } .inspection-strip dl, .report-card dl { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.45rem; margin: 0; } .inspection-strip dl > div, .report-card dl > div { min-width: 0; display: grid; gap: 0.12rem; padding: 0.5rem; border-radius: 0.5rem; background: var(--toolbox-surface-soft); } .inspection-strip dt, .report-card dt { color: var(--toolbox-muted); font-size: 0.62rem; font-weight: 720; letter-spacing: 0.04em; text-transform: uppercase; } .inspection-strip dd, .report-card dd { min-width: 0; margin: 0; overflow-wrap: anywhere; font-size: 0.75rem; font-weight: 680; } .tag-row { display: flex; flex-wrap: wrap; gap: 0.34rem; } .tag-row span { padding: 0.27rem 0.46rem; border: 1px solid var(--toolbox-border); border-radius: 999px; color: var(--toolbox-muted); font-size: 0.65rem; font-weight: 660; } .preview-panel { min-height: 29rem; padding: 0.85rem; } .preview-empty { min-height: 34rem; display: grid; place-content: center; justify-items: center; gap: 0.55rem; padding: 2rem; text-align: center; } .preview-empty__icon { width: 4.2rem; height: 4.2rem; display: grid; place-items: center; border-radius: 1rem; background: var(--toolbox-accent-soft); color: var(--toolbox-accent); font-size: 2rem; } .preview-empty p { max-width: 29rem; margin: 0; color: var(--toolbox-muted); line-height: 1.55; } .comparison-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.65rem; } .comparison-grid figure { min-width: 0; display: grid; grid-template-rows: auto minmax(15rem, 1fr); gap: 0.4rem; margin: 0; } .comparison-grid figcaption { min-height: 1.5rem; display: flex; align-items: center; justify-content: space-between; color: var(--toolbox-muted); font-size: 0.7rem; font-weight: 760; letter-spacing: 0.04em; text-transform: uppercase; } .working-dot { color: var(--toolbox-accent); font-size: 0.62rem; letter-spacing: 0; text-transform: none; } .image-stage { min-height: 15rem; display: grid; place-items: center; overflow: hidden; border: 1px solid var(--toolbox-border); border-radius: 0.62rem; background: var(--toolbox-surface-soft); } .image-stage--checkerboard { background-color: var(--toolbox-surface-soft); background-image: linear-gradient( 45deg, color-mix(in srgb, var(--toolbox-border) 52%, transparent) 25%, transparent 25% ), linear-gradient( -45deg, color-mix(in srgb, var(--toolbox-border) 52%, transparent) 25%, transparent 25% ), linear-gradient( 45deg, transparent 75%, color-mix(in srgb, var(--toolbox-border) 52%, transparent) 75% ), linear-gradient( -45deg, transparent 75%, color-mix(in srgb, var(--toolbox-border) 52%, transparent) 75% ); background-position: 0 0, 0 8px, 8px -8px, -8px 0; background-size: 16px 16px; } .image-stage img { width: 100%; height: 100%; max-height: 36rem; display: block; object-fit: contain; user-select: none; } .image-stage p { max-width: 15rem; margin: 0; padding: 1rem; font-size: 0.76rem; line-height: 1.5; text-align: center; } .preview-note { margin: 0.62rem 0 0; color: var(--toolbox-muted); font-size: 0.7rem; line-height: 1.45; } .controls-panel { display: grid; gap: 0.75rem; } .controls-panel fieldset { min-width: 0; display: grid; gap: 0.58rem; margin: 0; padding: 0.72rem; border: 1px solid var(--toolbox-border); border-radius: 0.66rem; } .controls-panel legend { padding: 0 0.35rem; font-size: 0.72rem; font-weight: 780; } .field { min-width: 0; display: grid; gap: 0.3rem; } .field > span:first-child { color: var(--toolbox-muted); font-size: 0.67rem; font-weight: 720; } .field-help { margin: 0; color: var(--toolbox-muted); font-size: 0.64rem; line-height: 1.45; } .four-fields, .two-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.45rem; } .preset-row { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.3rem; } .preset-row button { min-height: 2rem; padding: 0.35rem 0.3rem; font-size: 0.68rem; } .preset-row button[aria-pressed="true"] { border-color: var(--toolbox-accent); background: var(--toolbox-accent); color: var(--toolbox-accent-contrast); } .toggle-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.45rem; } .toggle-grid label { display: flex; align-items: center; gap: 0.38rem; color: var(--toolbox-muted); font-size: 0.68rem; font-weight: 650; } .field--color > span:last-child { display: flex; align-items: center; gap: 0.5rem; } .field--color input { width: 3rem; height: 2.2rem; padding: 0.1rem; border: 1px solid var(--toolbox-border); border-radius: 0.5rem; background: var(--toolbox-surface); } .field--color code { color: var(--toolbox-muted); font-size: 0.72rem; } .policy-callout { display: grid; gap: 0.16rem; padding: 0.58rem; border-radius: 0.52rem; background: var(--toolbox-accent-soft); color: var(--toolbox-accent); font-size: 0.66rem; line-height: 1.42; } .button--primary { border-color: var(--toolbox-accent) !important; background: var(--toolbox-accent) !important; color: var(--toolbox-accent-contrast) !important; } .button--primary:hover:not(:disabled) { background: var(--toolbox-accent-hover) !important; } .button--danger { border-color: color-mix( in srgb, var(--toolbox-danger) 45%, var(--toolbox-border) ) !important; color: var(--toolbox-danger) !important; } .button--quiet { min-height: 2rem !important; padding: 0.34rem 0.52rem !important; } .notice { margin: 0; padding: 0.62rem 0.75rem; border: 1px solid var(--toolbox-border); border-radius: 0.62rem; background: var(--toolbox-surface); font-size: 0.72rem; line-height: 1.48; } .notice--error { border-color: color-mix( in srgb, var(--toolbox-danger) 44%, var(--toolbox-border) ); background: color-mix( in srgb, var(--toolbox-danger) 7%, var(--toolbox-surface) ); color: var(--toolbox-danger); } .notice--warning { border-color: color-mix( in srgb, var(--image-warning) 38%, var(--toolbox-border) ); color: var(--image-warning); } .report-card { padding: 0.85rem; } .report-card summary { cursor: pointer; font-size: 0.8rem; font-weight: 760; } .report-card[open] summary { margin-bottom: 0.7rem; } .report-card p { margin: 0.68rem 0 0; color: var(--toolbox-muted); font-size: 0.72rem; line-height: 1.5; } .action-bar { position: sticky; z-index: 5; bottom: 0.6rem; display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 0.75rem 0.85rem; box-shadow: 0 14px 45px rgb(18 24 50 / 18%); } .action-bar > div:first-child { min-width: 0; display: grid; gap: 0.16rem; } .action-bar strong { font-size: 0.76rem; } .action-bar span { overflow: hidden; color: var(--toolbox-muted); font-size: 0.68rem; line-height: 1.4; text-overflow: ellipsis; white-space: nowrap; } .action-bar__buttons { flex: 0 0 auto; display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 0.42rem; } .loading, .fatal { width: min(100% - 2rem, 60rem); margin: 2rem auto; padding: 1rem; } .help-dialog { width: min(42rem, calc(100% - 2rem)); max-height: calc(100dvh - 2rem); padding: 1rem; overflow: auto; border: 1px solid var(--toolbox-border); border-radius: 0.9rem; background: var(--toolbox-surface); color: var(--toolbox-text); box-shadow: 0 24px 80px rgb(10 15 35 / 32%); } .help-dialog::backdrop { background: rgb(13 16 28 / 58%); backdrop-filter: blur(4px); } .dialog-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; padding-bottom: 0.85rem; border-bottom: 1px solid var(--toolbox-border); } .help-dialog > p, .help-dialog li { color: var(--toolbox-muted); font-size: 0.82rem; line-height: 1.55; } body:has(.toolbox-shell[data-toolbox-theme="dark"]) .help-dialog { color-scheme: dark; --toolbox-surface: #171d2d; --toolbox-surface-soft: #20283a; --toolbox-text: #edf1fb; --toolbox-muted: #a9b3ca; --toolbox-border: #303a50; --toolbox-accent: #a9b7ff; --toolbox-accent-soft: #252f55; --toolbox-accent-contrast: #11182a; --toolbox-focus: #66cdbd; --toolbox-danger: #ff8fa3; --image-warning: #ffc06d; --image-success: #75d6b7; } @media (prefers-color-scheme: dark) { body:has(.toolbox-shell[data-toolbox-theme="system"]) .help-dialog { color-scheme: dark; --toolbox-surface: #171d2d; --toolbox-surface-soft: #20283a; --toolbox-text: #edf1fb; --toolbox-muted: #a9b3ca; --toolbox-border: #303a50; --toolbox-accent: #a9b7ff; --toolbox-accent-soft: #252f55; --toolbox-accent-contrast: #11182a; --toolbox-focus: #66cdbd; --toolbox-danger: #ff8fa3; --image-warning: #ffc06d; --image-success: #75d6b7; } } @keyframes pulse { 0%, 100% { opacity: 0.45; transform: scale(0.85); } 50% { opacity: 1; transform: scale(1); } } @media (max-width: 74rem) { .workspace-layout { grid-template-columns: minmax(12rem, 0.58fr) minmax(22rem, 1.6fr); } .controls-panel { position: static; max-height: none; grid-column: 1 / -1; grid-template-columns: repeat(2, minmax(0, 1fr)); } .controls-panel > .section-heading { grid-column: 1 / -1; } } @media (max-width: 52rem) { .workspace-layout { grid-template-columns: 1fr; } .queue-panel, .controls-panel { position: static; max-height: none; } .queue-panel { max-height: 20rem; } .controls-panel { grid-column: auto; grid-template-columns: 1fr; } .controls-panel > .section-heading { grid-column: auto; } .comparison-grid { grid-template-columns: 1fr; } .comparison-grid figure { grid-template-rows: auto minmax(12rem, 1fr); } .action-bar { position: static; align-items: stretch; flex-direction: column; } .action-bar span { white-space: normal; } .action-bar__buttons { justify-content: stretch; } .action-bar__buttons button { flex: 1 1 9rem; } } @media (max-width: 34rem) { .hero { flex-direction: column; } .privacy-pill { order: -1; } .drop-zone { grid-template-columns: 1fr; justify-items: center; text-align: center; } .drop-zone__icon { grid-row: auto; } .inspection-strip dl, .report-card dl { grid-template-columns: repeat(2, minmax(0, 1fr)); } .section-heading { align-items: flex-start; flex-direction: column; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } }