:root{--primary:#fff;--secondary:#f2ead3;--accent:#fff;--background:#0a0a0a;--surface:#f2ead3;--text-primary:#fff;--text-secondary:#a1a1aa;--border:#27272a;--panel:#101010;--panel-raised:#151515;--danger:#e5715f;--space-base:8px;--space-gap:16px;--card-padding:24px;--section-padding:80px;--radius-card:24px;--radius-control:23px;--radius-pill:9999px;--font-display:"Inter", system-ui, sans-serif;--font-body:"Playfair Display", Georgia, serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--display-lg:clamp(2.25rem, 1.6rem + 2.4vw, 3.5rem);--display-sm:1.25rem;--body-md:1rem;--label-md:.75rem;--ease:cubic-bezier(.22, .61, .36, 1)}*,:before,:after{box-sizing:border-box}html,body{background:var(--background);color:var(--text-primary);font-family:var(--font-body);font-size:var(--body-md);-webkit-font-smoothing:antialiased;margin:0;line-height:1.65}body:before{content:"";pointer-events:none;z-index:0;background:radial-gradient(60% 60% at 30% 0,#f2ead312,#0000 70%);height:70vh;position:fixed;inset:-20% -20% auto}button,input,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--secondary);outline-offset:3px}.shell{z-index:1;max-width:1400px;padding:calc(var(--section-padding) / 2) clamp(16px, 4vw, 40px) var(--section-padding);margin:0 auto;position:relative}.masthead{justify-content:space-between;align-items:flex-end;gap:var(--space-gap);border-bottom:1px solid var(--border);flex-wrap:wrap;padding-bottom:32px;display:flex}.masthead__title{font-family:var(--font-display);font-size:var(--display-lg);letter-spacing:-.03em;margin:0;font-weight:600;line-height:1.05}.masthead__tm{font-family:var(--font-mono);color:var(--secondary);vertical-align:super;letter-spacing:.04em;margin-left:.35em;font-size:.3em;font-weight:400}.masthead__lede{max-width:46ch;color:var(--text-secondary);margin:12px 0 0}.masthead__meta{font-family:var(--font-mono);font-size:var(--label-md);color:var(--text-secondary);letter-spacing:.04em;text-align:right;line-height:1.9}.masthead__meta strong{color:var(--secondary);font-weight:500}.workspace{grid-template-columns:minmax(0,1fr) minmax(320px,460px);align-items:start;gap:40px;padding-top:40px;display:grid}@media (max-width:1080px){.workspace{grid-template-columns:minmax(0,1fr)}}.column__head{justify-content:space-between;align-items:baseline;gap:var(--space-gap);margin-bottom:20px;display:flex}.column__title{font-family:var(--font-display);font-size:var(--display-sm);letter-spacing:-.01em;margin:0;font-weight:500}.column__hint{font-family:var(--font-mono);font-size:var(--label-md);color:var(--text-secondary)}.btn{border-radius:var(--radius-control);border:1px solid var(--border);color:var(--text-primary);font-family:var(--font-display);cursor:pointer;transition:background .2s var(--ease), border-color .2s var(--ease), transform .2s var(--ease);background:0 0;justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-size:.875rem;font-weight:500;display:inline-flex}.btn:hover:not(:disabled){background:#f2ead314;border-color:#f2ead359}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn--primary{background:var(--surface);border-color:var(--surface);color:#0a0a0a}.btn--primary:hover:not(:disabled){background:#fff;border-color:#fff}.btn--ghost{color:var(--text-secondary);border-color:#0000;padding:6px 12px}.btn--ghost:hover:not(:disabled){color:var(--text-primary);background:#ffffff0f}.btn--danger:hover:not(:disabled){color:var(--danger);background:#e5715f14;border-color:#e5715f66}.btn--sm{padding:6px 14px;font-size:.8125rem}.slots{gap:var(--space-gap);grid-template-columns:repeat(auto-fill,minmax(260px,1fr));display:grid}.slot{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-card);padding:var(--card-padding);transition:border-color .25s var(--ease), transform .25s var(--ease), box-shadow .25s var(--ease);animation:slot-in .5s var(--ease) both;flex-direction:column;gap:14px;display:flex}.slot:hover{border-color:#f2ead347;transform:translateY(-2px)}.slot--dragging{border-color:var(--secondary);z-index:5;box-shadow:0 24px 48px #0000008c}.slot--selected{border-color:#f2ead380}@keyframes slot-in{0%{opacity:0;transform:translateY(10px)}}.slot__top{align-items:center;gap:10px;display:flex}.slot__handle{border-radius:var(--radius-pill);border:1px solid var(--border);color:var(--text-secondary);font-family:var(--font-mono);font-size:var(--label-md);cursor:grab;touch-action:none;background:0 0;align-items:center;gap:8px;padding:4px 10px 4px 6px;display:inline-flex}.slot__handle:hover{color:var(--text-primary);border-color:#f2ead359}.slot__handle svg{width:14px;height:14px}.slot__pick{font-family:var(--font-mono);font-size:var(--label-md);color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;margin-left:auto;display:inline-flex}.slot__pick input{appearance:none;border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:6px;place-content:center;width:18px;height:18px;display:grid}.slot__pick input:checked{background:var(--surface);border-color:var(--surface)}.slot__pick input:checked:after{content:"";border-bottom:2px solid #0a0a0a;border-left:2px solid #0a0a0a;width:9px;height:5px;transform:rotate(-45deg)translate(1px,-1px)}.drop{aspect-ratio:4/3;border:1px dashed var(--border);text-align:center;transition:border-color .2s var(--ease), background .2s var(--ease);background:#0d0d0d;border-radius:16px;place-items:center;padding:16px;display:grid;position:relative;overflow:hidden}.drop--over{border-color:var(--secondary);background:#f2ead30f;border-style:solid}.drop--filled{background:#050505;border-style:solid;padding:0}.drop img{object-fit:contain;width:100%;height:100%;display:block}.drop__empty{color:var(--text-secondary);font-family:var(--font-mono);font-size:var(--label-md);flex-direction:column;align-items:center;gap:6px;line-height:1.7;display:flex}.drop__empty em{font-family:var(--font-body);color:var(--text-primary);font-size:.95rem;font-style:italic}.drop__busy{font-family:var(--font-mono);font-size:var(--label-md);color:var(--secondary)}.slot__meta{font-family:var(--font-mono);font-size:var(--label-md);color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.rotate{flex-wrap:wrap;gap:6px;display:flex}.rotate__btn{border-radius:var(--radius-pill);border:1px solid var(--border);min-width:52px;color:var(--text-secondary);font-family:var(--font-mono);font-size:var(--label-md);cursor:pointer;transition:background .18s var(--ease), color .18s var(--ease), border-color .18s var(--ease);background:0 0;flex:auto;padding:7px 0}.rotate__btn:hover:not(:disabled){color:var(--text-primary);border-color:#f2ead359}.rotate__btn[aria-pressed=true]{background:var(--surface);border-color:var(--surface);color:#0a0a0a}.rotate__btn:disabled{opacity:.35;cursor:not-allowed}.field{flex-direction:column;gap:6px;display:flex}.field label{font-family:var(--font-mono);font-size:var(--label-md);color:var(--text-secondary)}.field input{border:1px solid var(--border);font-family:var(--font-body);transition:border-color .2s var(--ease);background:#0d0d0d;border-radius:14px;padding:10px 14px}.field input::placeholder{color:#5a5a60}.field input:focus{border-color:#f2ead373;outline:none}.slot__actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.slot__actions .btn{flex:auto}.slot--add{cursor:pointer;min-height:220px;color:var(--text-secondary);font-family:var(--font-mono);font-size:var(--label-md);border-style:dashed;justify-content:center;align-items:center;gap:8px}.slot--add:hover{color:var(--text-primary);border-color:#f2ead366}.slot--add span:first-child{color:var(--secondary);font-size:1.75rem;line-height:1}.preview-panel{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-card);padding:var(--card-padding);flex-direction:column;gap:20px;display:flex;position:sticky;top:24px}@media (max-width:1080px){.preview-panel{position:static}}.preview-frame{border:1px solid var(--border);background:#050505;border-radius:16px;padding:12px;overflow:hidden}.preview-stage{width:100%;position:relative;overflow:hidden}.preview-empty{aspect-ratio:210/297;text-align:center;color:var(--text-secondary);font-family:var(--font-mono);font-size:var(--label-md);background:#0d0d0d;border-radius:12px;place-items:center;padding:24px;line-height:1.9;display:grid}.toolbar{flex-direction:column;gap:10px;display:flex}.toolbar__row{gap:10px;display:flex}.toolbar__row .btn{flex:1}.toolbar__note{font-family:var(--font-mono);font-size:var(--label-md);color:var(--text-secondary);line-height:1.8}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}.slot:hover{transform:none}}.sheet{color:#111;transform-origin:0 0;-webkit-print-color-adjust:exact;-moz-print-color-adjust:exact;print-color-adjust:exact;background:#fff;width:210mm;height:297mm;overflow:hidden}.sheet--preview{transform:scale(var(--preview-scale,1));border-radius:2px;box-shadow:0 18px 40px #00000080}.sheet__inner{flex-direction:column;gap:4mm;height:100%;padding:10mm;display:flex}.sheet__row{flex:1 1 0;justify-content:center;gap:4mm;min-height:0;display:flex}.sheet__cell{width:calc((100% - (var(--cols) - 1) * 4mm) / var(--cols));flex-direction:column;flex:none;min-height:0;display:flex}.sheet__media{flex:auto;justify-content:center;align-items:center;min-height:0;display:flex}.sheet__media img{object-fit:contain;max-width:100%;max-height:100%;display:block}.sheet__caption{height:5mm;font-family:var(--font-body);text-align:center;color:#111;white-space:nowrap;text-overflow:ellipsis;flex:none;padding-top:1mm;font-size:8pt;line-height:1.2;overflow:hidden}#print-root{display:none}@media print{@page{size:A4 portrait;margin:0}html,body{background:#fff!important;width:100%!important;height:100%!important;margin:0!important;padding:0!important;overflow:hidden!important}body:before,#root{display:none!important}#print-root{width:100%;height:100%;display:block!important}#print-root .sheet{break-inside:avoid;break-after:avoid;width:100%!important;height:100%!important;box-shadow:none!important;border-radius:0!important;transform:none!important}}
