:root{--ink:#16150f;--ink-soft:#55524a;--muted:#8a867c;--paper:#fcfbf8;--surface:#ffffff;--line:#e7e4dc;--line-strong:#d4d0c6;--accent:#16150f;--amber-bg:#fdf3df;--amber-border:#ecd39f;--amber-text:#7a5410;--red-bg:#fbeeec;--red-border:#eec6bf;--red-text:#93342a;--green-text:#2c6e3f;--serif:"Iowan Old Style","Palatino Linotype",Palatino,Georgia,"Times New Roman",serif;--sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.6;display:flex;min-height:100vh;flex-direction:column}h1,h2,h3{font-family:var(--serif);font-weight:500;line-height:1.15;margin:0 0 .5em;letter-spacing:-.01em}p{margin:0 0 1em}a{color:inherit}img{max-width:100%}button{font:inherit}.container{width:100%;max-width:960px;margin:0 auto;padding:0 24px}.site-main{flex:1 1;width:100%}.site-header{border-bottom:1px solid var(--line);background:var(--paper)}.header-inner{display:flex;align-items:baseline;justify-content:space-between;padding-top:20px;padding-bottom:20px}.wordmark{font-family:var(--serif);font-size:1.5rem;letter-spacing:-.02em;text-decoration:none}.main-nav a{margin-left:28px;text-decoration:none;font-size:.95rem;color:var(--ink-soft);padding-bottom:2px;border-bottom:1px solid transparent}.main-nav a:hover{color:var(--ink);border-bottom-color:var(--ink)}.site-footer{border-top:1px solid var(--line);margin-top:96px;padding:40px 0 56px;color:var(--muted);font-size:.9rem}.footer-brand{font-family:var(--serif);color:var(--ink-soft);font-size:1.1rem;margin-bottom:4px}.footer-note{margin:0}.btn{display:inline-block;border:1px solid var(--accent);background:var(--accent);color:var(--paper);padding:12px 26px;font-size:.95rem;border-radius:4px;cursor:pointer;text-decoration:none;text-align:center;transition:opacity .12s ease}.btn:hover{opacity:.85}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-secondary{background:transparent;color:var(--ink)}.btn-secondary:hover{opacity:1;background:rgba(22,21,15,.05)}.btn-small{padding:8px 16px;font-size:.85rem}.btn-large{padding:15px 34px;font-size:1.05rem}.text-link{color:var(--ink);text-decoration:underline;text-underline-offset:3px}.hero{padding:88px 0 40px;text-align:center}.hero h1{font-size:clamp(2.4rem,6vw,4rem);max-width:18em;margin:0 auto .4em}.hero-sub{color:var(--ink-soft);font-size:1.15rem;max-width:34em;margin:0 auto}.steps{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:32px;gap:32px;list-style:none;margin:72px 0 0;padding:0;text-align:left}.step{border-top:1px solid var(--line-strong);padding-top:20px}.step-number{font-family:var(--serif);font-size:.85rem;color:var(--muted);letter-spacing:.12em;text-transform:uppercase;display:block;margin-bottom:8px}.step h2{font-size:1.5rem;margin-bottom:.3em}.step p{color:var(--ink-soft);font-size:.95rem;margin:0}.template-actions{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;margin-top:56px}.draw-alt{text-align:center;color:var(--ink-soft);margin-top:20px;font-size:.95rem}.upload-section{margin-top:96px}.section-heading{font-size:1.9rem;text-align:center}.section-sub{text-align:center;color:var(--ink-soft);max-width:36em;margin:0 auto 40px}.dropzone{border:1.5px dashed var(--line-strong);border-radius:8px;background:var(--surface);padding:56px 24px;text-align:center;cursor:pointer;transition:border-color .12s ease,background .12s ease}.dropzone.is-dragging,.dropzone:hover{border-color:var(--ink);background:#fffef9}.dropzone:focus-visible{outline:2px solid var(--ink);outline-offset:3px}.dropzone-icon{font-family:var(--serif);font-size:2.6rem;line-height:1;display:block;margin-bottom:12px;color:var(--ink-soft)}.dropzone-title{font-size:1.05rem;margin-bottom:4px}.dropzone-hint{color:var(--muted);font-size:.88rem;margin:0}.retention-notice{display:flex;gap:10px;align-items:flex-start;color:var(--muted);font-size:.85rem;margin-top:16px;line-height:1.5}.retention-notice:before{content:"◦";line-height:1.4}.upload-filename{font-family:var(--mono);font-size:.85rem;color:var(--ink-soft);margin-top:14px;text-align:center;overflow-wrap:anywhere}.banner{border:1px solid var(--line);border-radius:6px;padding:16px 20px;margin:20px 0;font-size:.95rem}.banner-error{background:var(--red-bg);border-color:var(--red-border);color:var(--red-text)}.banner-warning{background:var(--amber-bg);border-color:var(--amber-border);color:var(--amber-text)}.banner-success{background:#eef6ef;border-color:#cbe3cf;color:var(--green-text)}.banner-title{font-weight:600;display:block;margin-bottom:4px}.banner .btn{margin-top:12px}.banner p:last-child{margin-bottom:0}.settings-panel{border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:36px;margin-top:32px}.settings-panel h2{font-size:1.5rem}.settings-panel .panel-sub{color:var(--ink-soft);font-size:.92rem;margin-bottom:28px}.field{margin-bottom:26px}.field-label{display:block;font-size:.82rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:10px}.text-input{width:100%;border:1px solid var(--line-strong);border-radius:4px;background:var(--paper);padding:12px 14px;font-size:1.05rem;font-family:var(--serif);color:var(--ink)}.text-input:focus{outline:2px solid var(--ink);outline-offset:1px}.radio-row{display:flex;gap:12px;flex-wrap:wrap}.radio-card{flex:1 1;min-width:180px;border:1px solid var(--line-strong);border-radius:6px;padding:14px 16px;cursor:pointer;background:var(--paper)}.radio-card.is-selected{border-color:var(--ink);box-shadow:0 0 0 1px var(--ink)}.radio-card input{margin-right:8px}.radio-card .radio-title{font-weight:600;font-size:.95rem}.radio-card .radio-desc{display:block;color:var(--muted);font-size:.83rem;margin-top:4px}.slider-row{display:flex;align-items:center;gap:16px}.slider-row input[type=range]{flex:1 1;accent-color:var(--ink)}.slider-value{font-family:var(--mono);font-size:.9rem;min-width:3.5em;text-align:right;color:var(--ink-soft)}.slider-ends{display:flex;justify-content:space-between;color:var(--muted);font-size:.78rem;margin-top:6px}.page-head{padding:56px 0 8px}.page-head h1{font-size:clamp(2rem,4.5vw,2.8rem)}.page-head p{color:var(--ink-soft);max-width:40em}.glyph-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(64px,1fr));grid-gap:10px;gap:10px;margin:32px 0}.glyph-cell{position:relative;aspect-ratio:5/6;border:1px solid var(--line-strong);border-radius:6px;background:var(--surface);cursor:pointer;display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-size:1.5rem;color:var(--muted);padding:0;overflow:hidden;transition:border-color .12s ease}.glyph-cell:hover{border-color:var(--ink);color:var(--ink)}.glyph-cell.is-filled{border-color:var(--ink-soft)}.glyph-cell img{width:100%;height:100%;object-fit:contain}.glyph-cell .cell-char-tag{position:absolute;top:3px;left:6px;font-family:var(--sans);font-size:.62rem;color:var(--muted)}.draw-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin:8px 0 40px}.draw-progress{color:var(--ink-soft);font-size:.92rem}.modal-overlay{position:fixed;inset:0;background:rgba(22,21,15,.55);display:flex;align-items:center;justify-content:center;padding:16px;z-index:50}.modal{background:var(--surface);border-radius:10px;padding:24px;max-width:440px;width:100%;max-height:100vh;overflow-y:auto}.modal-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:14px}.modal-head h2{font-size:1.2rem;margin:0}.modal-char{font-family:var(--serif);font-size:1.6rem}.canvas-wrap{position:relative;width:100%;max-width:360px;margin:0 auto;aspect-ratio:360/432;border:1px solid var(--line-strong);border-radius:6px;background:#fff;overflow:hidden}.canvas-wrap canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;cursor:crosshair}.guide-layer{pointer-events:none}.guide-char,.guide-layer{position:absolute;inset:0}.guide-char{display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-size:220px;color:rgba(22,21,15,.05);-webkit-user-select:none;-moz-user-select:none;user-select:none}.guide-line{position:absolute;left:0;right:0;border-top:1px dashed rgba(70,110,180,.4)}.guide-label{position:absolute;right:4px;transform:translateY(-100%);font-size:.6rem;color:rgba(70,110,180,.75);letter-spacing:.05em}.editor-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px;justify-content:flex-end}.job-page{padding-top:56px}.job-meta{font-family:var(--mono);font-size:.82rem;color:var(--muted)}.progress-block{margin:36px 0}.progress-track{height:8px;border-radius:4px;background:var(--line);overflow:hidden}.progress-fill{height:100%;background:var(--ink);border-radius:4px;transition:width .5s ease}.progress-labels{display:flex;justify-content:space-between;align-items:baseline;margin-top:10px;color:var(--ink-soft);font-size:.95rem}.progress-pct{font-family:var(--mono);font-size:.85rem}.minimap{display:grid;grid-template-columns:repeat(auto-fill,minmax(34px,1fr));grid-gap:6px;gap:6px;margin-top:14px}.minimap-cell{aspect-ratio:1;border:1px solid var(--amber-border);border-radius:4px;display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-size:.95rem;background:#fff;color:var(--ink-soft)}.minimap-cell.is-empty{background:var(--amber-text);border-color:var(--amber-text);color:#fff;font-weight:600}.minimap-cell.is-fallback{background:#eaf3ea;border-color:#4a7c59;border-style:dashed;color:#2f5e3e;font-weight:600}.minimap-legend{margin-top:10px;font-size:.85rem;color:var(--ink-soft);display:flex;align-items:center;gap:8px;flex-wrap:wrap}.minimap-legend .minimap-cell{display:inline-flex;width:22px;aspect-ratio:1;font-size:.8rem}.glyph-warnings{list-style:none;margin:12px 0 0;padding:0}.glyph-warnings li{display:flex;gap:12px;align-items:baseline;padding:10px 0;border-bottom:1px solid var(--line);font-size:.92rem;color:var(--ink-soft)}.glyph-badge{font-family:var(--serif);font-size:1.1rem;color:var(--ink);border:1px solid var(--line-strong);border-radius:4px;min-width:30px;text-align:center;padding:1px 6px;flex-shrink:0}.preview-section{margin-top:24px}.preview-block{border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:36px;margin-bottom:20px;overflow-wrap:break-word}.preview-label{font-family:var(--sans);font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:16px}.preview-headline{line-height:1.25;margin:0}.preview-paragraph{line-height:1.7;margin:0;outline:none}.preview-paragraph:focus-visible{outline:1px dashed var(--line-strong);outline-offset:8px}.preview-logo{text-align:center;line-height:1.1;margin:0;padding:24px 0}.size-slider-block{display:flex;align-items:center;gap:16px;margin:8px 0 24px}.size-slider-block label{font-size:.85rem;color:var(--ink-soft);white-space:nowrap}.size-slider-block input[type=range]{flex:1 1;accent-color:var(--ink)}.download-row{display:flex;flex-wrap:wrap;gap:14px;margin:28px 0}.install-hints{border-top:1px solid var(--line);margin-top:40px;padding-top:24px}.install-hints h3{font-size:1.15rem}.install-hints ul{list-style:none;margin:0;padding:0;color:var(--ink-soft);font-size:.92rem}.install-hints li{padding:6px 0}.install-hints strong{color:var(--ink)}.metrics-line{color:var(--muted);font-size:.85rem;font-family:var(--mono)}.center{text-align:center}.loading-note,.muted{color:var(--muted)}.loading-note{font-size:.95rem;padding:24px 0}.spinner{display:inline-block;width:14px;height:14px;border:2px solid var(--line-strong);border-top-color:var(--ink);border-radius:50%;margin-right:10px;vertical-align:-2px;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.nav-user{margin-left:28px;display:inline-flex;align-items:baseline;gap:12px}.nav-email{color:var(--muted);font-size:.85rem;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom;display:inline-block}.nav-logout{background:none;padding:0 0 2px;cursor:pointer;font-size:.95rem;color:var(--ink-soft);border:none;border-bottom:1px solid transparent}.nav-logout:hover{color:var(--ink);border-bottom-color:var(--ink)}.auth-page{padding-top:56px;max-width:520px}.auth-card h1{font-size:1.9rem}.field-hint{color:var(--muted);font-size:.83rem;margin:8px 0 0}.auth-switch{color:var(--ink-soft);font-size:.92rem;margin:24px 0 0}.auth-notice{border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:36px;margin:20px 0;text-align:center}.auth-notice h3{font-size:1.4rem}.auth-notice p{color:var(--ink-soft);max-width:34em;margin:0 auto 20px}.auth-notice-actions{display:flex;flex-wrap:wrap;gap:14px;justify-content:center}.check-row{display:flex;gap:12px;align-items:flex-start;cursor:pointer}.check-row input[type=checkbox]{margin-top:4px;accent-color:var(--ink);width:16px;height:16px;flex-shrink:0}.check-row .check-title{display:block;font-weight:600;font-size:.95rem}.check-row .check-desc{display:block;color:var(--muted);font-size:.83rem;margin-top:2px}.review-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px;border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:20px 24px;margin:28px 0}.review-summary{margin:0;color:var(--ink-soft);font-size:.98rem}.review-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));grid-gap:12px;gap:12px;margin:24px 0 48px}.review-card{display:flex;flex-direction:column;gap:8px;border:1px solid var(--line-strong);border-radius:6px;background:var(--surface);padding:10px;cursor:pointer;text-align:left;transition:border-color .12s ease}.review-card:hover{border-color:var(--ink)}.review-card:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.review-card-top{display:flex;align-items:center;justify-content:space-between}.conf-dot{display:inline-block;width:10px;height:10px;border-radius:50%;flex-shrink:0}.conf-dot.dot-red{background:var(--red-text)}.conf-dot.dot-amber{background:#d99a1b}.conf-dot.dot-green{background:var(--green-text)}.review-thumb{display:flex;align-items:center;justify-content:center;aspect-ratio:5/6;background:#fff;border:1px solid var(--line);border-radius:4px;overflow:hidden}.review-thumb img{width:100%;height:100%;object-fit:contain}.review-thumb-empty{color:var(--muted);font-size:.78rem}.review-status{align-self:flex-start;font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;border:1px solid var(--line-strong);border-radius:999px;padding:1px 9px;color:var(--ink-soft)}.review-status.status-accepted,.review-status.status-nudged,.review-status.status-replaced{border-color:#cbe3cf;background:#eef6ef;color:var(--green-text)}.review-card-warning{color:var(--amber-text);font-size:.78rem;line-height:1.4}.review-detail-meta{display:flex;align-items:center;gap:8px;color:var(--ink-soft);font-size:.92rem}.modal-wide{max-width:680px}.compare-row{display:grid;grid-template-columns:1fr 1fr;grid-gap:14px;gap:14px;margin:16px 0}.compare-box{border:1px solid var(--line);border-radius:6px;background:#fff;padding:14px;min-height:160px}.compare-box img,.svg-box svg{width:100%;height:auto;display:block}.retake-hint{color:var(--muted);font-size:.82rem;text-align:right;margin:10px 0 0}.nudge-editor{margin-top:16px}.nudge-hint{color:var(--ink-soft);font-size:.9rem}.nudge-stage{position:relative;width:100%;max-width:420px;margin:0 auto;border:1px solid var(--line-strong);border-radius:6px;background:#fff;overflow:hidden}.nudge-base,.nudge-overlay{position:absolute;inset:0;width:100%;height:100%}.nudge-base svg{width:100%;height:100%;display:block}.nudge-overlay{touch-action:none}.nudge-handle{fill:#fff;stroke:#c05621;cursor:-webkit-grab;cursor:grab}.nudge-handle:hover{fill:#fbe4d5}.nudge-handle:active{cursor:-webkit-grabbing;cursor:grabbing}.projects-toolbar{margin:0 0 24px}.project-card{border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:28px 32px;margin-bottom:20px}.project-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:8px}.project-head h2{font-size:1.4rem;margin:0}.project-date{color:var(--muted);font-size:.85rem}.job-row{justify-content:space-between;gap:12px;padding:14px 0;border-top:1px solid var(--line)}.job-link,.job-row{display:flex;flex-wrap:wrap;align-items:center}.job-link{gap:14px;text-decoration:none;color:inherit;flex:1 1;min-width:200px}.job-link:hover .job-version{text-decoration:underline;text-underline-offset:3px}.job-version{font-family:var(--serif);font-size:1.1rem}.job-date{color:var(--muted);font-size:.85rem}.status-pill{font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;border:1px solid var(--line-strong);border-radius:999px;padding:1px 9px;color:var(--ink-soft)}.status-pill.status-completed{border-color:#cbe3cf;background:#eef6ef;color:var(--green-text)}.status-pill.status-failed{border-color:var(--red-border);background:var(--red-bg);color:var(--red-text)}.status-pill.status-awaiting_review{border-color:var(--amber-border);background:var(--amber-bg);color:var(--amber-text)}.job-downloads{display:flex;gap:8px}@media (max-width:720px){.hero{padding-top:56px}.steps{grid-template-columns:1fr;gap:24px;margin-top:48px}.preview-block,.settings-panel{padding:24px 20px}.upload-section{margin-top:64px}.dropzone{padding:40px 16px}.header-inner{padding-top:16px;padding-bottom:16px}.main-nav a{margin-left:18px}.modal{padding:16px}.glyph-grid{grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:8px}.nav-user{margin-left:18px;gap:8px}.nav-email{max-width:90px}.review-toolbar{flex-direction:column;align-items:stretch;text-align:center;padding:16px}.review-grid{grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:8px}.compare-row{grid-template-columns:1fr}.project-card{padding:20px}.auth-notice{padding:24px 20px}}.glyph-specimen{display:flex;flex-direction:column;gap:20px}.specimen-row-label{display:block;font-family:var(--sans);font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}.specimen-cells{display:flex;flex-wrap:wrap;gap:6px}.specimen-cell{display:inline-flex;align-items:center;justify-content:center;min-width:1.5em;min-height:1.4em;padding:2px 8px;border:1px solid var(--line);border-radius:4px;background:var(--surface);line-height:1.2;color:var(--ink)}.specimen-cell.is-missing{border:1px dashed var(--line-strong);background:var(--paper);color:var(--muted);font-family:var(--sans)}.btn-danger{background:transparent;border-color:var(--red-border);color:var(--red-text)}.btn-danger:hover{opacity:1;background:var(--red-bg);border-color:var(--red-text)}.job-actions{display:flex;gap:8px}.job-actions,.project-head-meta{flex-wrap:wrap;align-items:center}.project-head-meta{display:inline-flex;gap:12px}.delete-confirm{flex-basis:100%;border:1px solid var(--red-border);border-radius:6px;background:var(--red-bg);color:var(--red-text);padding:14px 16px;font-size:.92rem;margin:6px 0}.delete-confirm p{margin:0 0 12px}.delete-confirm-actions{display:flex;flex-wrap:wrap;gap:8px}.delete-confirm .delete-error{margin:12px 0 0;font-weight:600}.job-preview{flex-basis:100%;border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:20px 24px;margin:4px 0 10px}.job-preview .banner{margin:0}.preview-sample{font-size:30px;line-height:1.3;margin:0 0 24px;outline:none;overflow-wrap:break-word}.preview-sample:focus-visible{outline:1px dashed var(--line-strong);outline-offset:6px}@media (max-width:720px){.job-preview{padding:16px}.preview-sample{font-size:24px}.specimen-cells{gap:4px}}