:root{--paper:#faf9f6;--paper-raised:#fff;--paper-sunken:#f1efe9;--ink:#1c1917;--ink-soft:#57534e;--ink-faint:#a8a29e;--accent:#b91c1c;--accent-hover:#991b1b;--accent-soft:#fef2f2;--border:#e7e5e0;--border-strong:#d6d3cd;--danger:#b91c1c;--focus-ring:2px solid #b91c1c;--font-serif:"Noto Serif KR", "Apple SD Gothic Neo", serif;--font-sans:-apple-system, "Apple SD Gothic Neo", "Noto Sans KR", sans-serif;--space-xs:4px;--space-sm:8px;--space-md:16px;--space-lg:24px;--space-xl:40px;--radius:4px;--duration:.18s;--ease:cubic-bezier(.25, .1, .25, 1)}*{box-sizing:border-box}body{font-family:var(--font-sans);color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.6}::selection{background:var(--accent-soft);color:var(--accent-hover)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.page{max-width:960px;padding:var(--space-lg) var(--space-md) var(--space-xl);margin:0 auto}.masthead{border-bottom:1px solid var(--border);background:var(--paper)}.masthead-inner{max-width:960px;padding:var(--space-md);align-items:baseline;gap:var(--space-sm);margin:0 auto;display:flex}.masthead a{font-family:var(--font-serif);color:var(--ink);letter-spacing:-.01em;font-size:1.05rem;font-weight:700;text-decoration:none}.masthead a:after{content:"";background:var(--accent);border-radius:1px;width:8px;height:8px;margin-left:6px;display:inline-block}.masthead .meta{font-size:.8rem}h1,h2,h3{font-family:var(--font-serif);letter-spacing:-.01em;font-weight:600;line-height:1.35}h1{margin:var(--space-lg) 0 var(--space-xs);font-size:1.75rem}h2{margin:var(--space-lg) 0 var(--space-md);font-size:1.15rem}.meta{color:var(--ink-soft);font-size:.85rem}.empty{color:var(--ink-soft);padding:var(--space-lg) 0}.error{color:var(--danger);background:var(--accent-soft);border-radius:var(--radius);padding:var(--space-sm) var(--space-md);border:1px solid #fecaca;font-size:.9rem}button{font:inherit;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--paper-raised);min-height:40px;color:var(--ink);cursor:pointer;transition:background var(--duration) var(--ease), border-color var(--duration) var(--ease), color var(--duration) var(--ease);padding:8px 18px;font-size:.9rem}button:hover{background:var(--paper-sunken);border-color:var(--ink-faint)}button:focus-visible{outline:var(--focus-ring);outline-offset:2px}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:500}button.primary:hover:not(:disabled){background:#000}button.danger{color:var(--danger);border-color:var(--border);background:0 0}button.danger:hover{background:var(--accent-soft);border-color:#fecaca}input,textarea,select{font:inherit;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--paper-raised);width:100%;color:var(--ink);transition:border-color var(--duration) var(--ease);padding:10px 12px}input:focus-visible,textarea:focus-visible,select:focus-visible{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}input::placeholder,textarea::placeholder{color:var(--ink-faint)}textarea{resize:vertical;min-height:120px;line-height:1.7}input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent);flex-shrink:0;margin:0}.check-row{align-items:center;gap:var(--space-sm);min-height:36px;color:var(--ink);cursor:pointer;margin-bottom:0;font-size:.92rem;font-weight:400;display:flex}@media (pointer:coarse){.check-row{min-height:44px}}.field-row{gap:var(--space-sm);flex-wrap:wrap;display:flex}.field-row>input,.field-row>select{flex:140px;width:auto}.field-row>input[type=number]{flex:0 110px}.field-row>button{flex:none}label{color:var(--ink-soft);margin-bottom:var(--space-xs);font-size:.82rem;font-weight:500;display:block}.form-row{margin-bottom:var(--space-md)}.form-actions{gap:var(--space-sm);margin-top:var(--space-lg);flex-wrap:wrap;display:flex}.list-item{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:var(--space-sm);background:var(--paper-raised);cursor:pointer;transition:border-color var(--duration) var(--ease), transform var(--duration) var(--ease);display:flex}.list-item:hover{border-color:var(--accent)}.list-item:focus-visible{outline:var(--focus-ring);outline-offset:2px}.list-item strong{font-family:var(--font-serif);font-size:1.02rem}.list-item .meta{margin-top:2px}.list-item>button{white-space:nowrap;flex-shrink:0}.list-item .actions{gap:var(--space-sm);flex-wrap:wrap;flex-shrink:0;justify-content:flex-end;display:flex}.tabs{border-bottom:1px solid var(--border);margin:var(--space-lg) 0;-webkit-overflow-scrolling:touch;gap:2px;display:flex;overflow-x:auto}@media (width<=768px){.tabs{padding-right:28px;-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - 28px),#0000)}}.tabs a{padding:10px var(--space-md);min-height:44px;color:var(--ink-soft);white-space:nowrap;transition:color var(--duration) var(--ease);border-bottom:2px solid #0000;align-items:center;margin-bottom:-1px;font-size:.92rem;text-decoration:none;display:flex}.tabs a:hover{color:var(--ink)}.tabs a:focus-visible{outline:var(--focus-ring);outline-offset:-2px}.tabs a.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.split{gap:var(--space-lg);grid-template-columns:1fr 1.2fr;align-items:start;display:grid}@media (width<=768px){.split{grid-template-columns:1fr}}.stream-output{white-space:pre-wrap;border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-lg);background:var(--paper-sunken);min-height:300px;max-height:60vh;font-family:var(--font-serif);font-size:1.02rem;line-height:1.9;overflow-y:auto}.stream-output .empty{font-family:var(--font-sans);font-size:.9rem}.chip{letter-spacing:.02em;border:1px solid var(--border-strong);color:var(--ink-soft);background:var(--paper-sunken);vertical-align:1px;border-radius:2px;padding:1px 8px;font-size:.72rem;font-weight:600;display:inline-block}.chip.polished{color:var(--ink);border-color:var(--ink-faint);background:var(--paper-raised)}.chip.published{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.chip.failed{color:var(--danger);background:var(--accent-soft);border-color:#fecaca}.chip.accepted{color:#166534;background:#f0fdf4;border-color:#bbf7d0}@keyframes ink-pulse{0%,to{opacity:1}50%{opacity:.35}}.busy:before{content:"";background:var(--accent);width:8px;height:8px;animation:ink-pulse 1.2s var(--ease) infinite;vertical-align:0;border-radius:1px;margin-right:8px;display:inline-block}.breadcrumb{margin-bottom:var(--space-xs);font-size:.85rem}.breadcrumb a{color:var(--ink-soft);transition:color var(--duration) var(--ease);text-decoration:none}.breadcrumb a:hover{color:var(--accent)}.login-page{min-height:100vh;padding:var(--space-lg);background:var(--paper);place-items:center;display:grid}.login-card{width:100%;max-width:380px;padding:var(--space-xl) var(--space-lg);background:var(--paper-raised);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 1px 2px #1c19170a,0 8px 24px #1c19170f}.login-eyebrow{font-family:var(--font-serif);color:var(--ink);margin:0 0 var(--space-xs);font-size:.9rem;font-weight:700}.login-eyebrow:after{content:"";background:var(--accent);border-radius:1px;width:7px;height:7px;margin-left:5px;display:inline-block}.login-card h1{font-family:var(--font-serif);margin:0 0 var(--space-lg);letter-spacing:-.02em;font-size:1.5rem}.login-form{gap:var(--space-xs);display:grid}.login-form label{margin-top:var(--space-sm)}.login-form button{margin-top:var(--space-md);width:100%}.login-error{margin:var(--space-sm) 0 0;padding:var(--space-sm) var(--space-md);color:var(--danger);background:var(--accent-soft);border-left:2px solid var(--danger);border-radius:0 var(--radius) var(--radius) 0;font-size:.85rem}.masthead-session{align-items:center;gap:var(--space-sm);margin-left:auto;display:flex}button.ghost{color:var(--ink-soft);padding:var(--space-xs) var(--space-sm);background:0 0;border-color:#0000;font-size:.8rem}button.ghost:hover{color:var(--ink);background:var(--paper-sunken)}
