.jf{gap:var(--s5);grid-template-columns:1fr 1fr;align-items:start;display:grid}.jf-in{background:var(--surface-1);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s5);transition:border-color var(--dur) var(--ease), background var(--dur) var(--ease)}.jf-in.jf-over{border-color:var(--brass);background:var(--brass-wash)}.jf-head{justify-content:space-between;align-items:center;gap:var(--s3);flex-wrap:wrap;display:flex}.jf-lbl{font-family:var(--font-mono);font-size:var(--step--1);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-2)}.jf-head-acts{align-items:center;gap:var(--s4);display:flex}.jf-file span,.jf-clear{font-size:var(--step--1);color:var(--ink-1);border-bottom:1px solid var(--brass);cursor:pointer;min-height:24px;padding-bottom:1px;display:inline-block}.jf-file span:hover,.jf-clear:hover{color:var(--ink-0)}.jf-in textarea{width:100%;margin-top:var(--s3);padding:var(--s4);background:var(--surface-0);border:1px solid var(--line);border-radius:var(--r-md);resize:vertical;line-height:1.6;font-family:var(--font-mono);font-size:var(--step--1);tab-size:2;transition:border-color var(--dur) var(--ease)}.jf-in textarea:focus{border-color:var(--brass);outline:none}.jf-in textarea::placeholder{color:var(--ink-2);opacity:.55}.jf-fileerr{margin-top:var(--s3);font-size:var(--step--1);color:var(--error)}.jf-status{margin-top:var(--s4);padding:var(--s3) var(--s4);border-radius:var(--r-md);background:var(--surface-2);border-left:3px solid var(--line-firm);align-items:center;gap:var(--s3) var(--s5);flex-wrap:wrap;min-height:56px;display:flex}.jf-status[data-state=valid]{border-left-color:var(--ok)}.jf-status[data-state=invalid]{border-left-color:var(--error)}.jf-badge{font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.02em;color:var(--ink-1)}.jf-status[data-state=valid] .jf-badge{color:var(--ok)}.jf-status[data-state=invalid] .jf-badge{color:var(--error)}.jf-facts{gap:var(--s2) var(--s5);flex-wrap:wrap;margin:0;display:flex}.jf-facts dt{font-family:var(--font-mono);font-size:var(--step--1);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-2)}.jf-facts dd{font-size:var(--step--1);margin:1px 0 0}.jf-set{margin-top:var(--s4);padding-top:var(--s4);border-top:1px solid var(--line);gap:var(--s4);display:grid}.jf-row{justify-content:space-between;align-items:center;gap:var(--s4);flex-wrap:wrap;display:flex}.jf-row>span:first-child{font-family:var(--font-mono);font-size:var(--step--1);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-2)}.jf-seg{background:var(--surface-2);border-radius:var(--r-md);flex-wrap:wrap;gap:2px;padding:3px;display:flex}.jf-seg button{min-height:36px;padding:0 var(--s3);font-size:var(--step--1);color:var(--ink-1);transition:background var(--dur) var(--ease), color var(--dur) var(--ease);border-radius:7px}.jf-seg button[aria-pressed=true]{background:var(--surface-0);color:var(--ink-0);box-shadow:var(--shadow-1)}.jf-check{align-items:center;gap:var(--s3);cursor:pointer;min-height:44px;display:flex}.jf-check input{width:17px;height:17px;accent-color:var(--brass)}.jf-check small{color:var(--ink-2);margin-left:var(--s2)}.jf-out{background:var(--surface-1);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s5);min-height:320px;box-shadow:var(--shadow-1);transition:box-shadow .26s var(--ease), border-color .26s var(--ease)}.jf-out.has{box-shadow:var(--shadow-2);border-color:var(--line-firm)}.jf-stub{justify-content:space-between;align-items:baseline;gap:var(--s3);display:flex}.jf-no{color:var(--brass-lo);font-size:var(--step--1);letter-spacing:.04em}.jf-sum{color:var(--ink-2);font-size:var(--step--1);text-align:right}.jf-perf{height:1px;margin:var(--s4) calc(-1 * var(--s5));background-image:linear-gradient(90deg, var(--line-firm) 55%, transparent 0);background-size:9px 1px;position:relative}.jf-perf:before,.jf-perf:after{content:"";border-radius:var(--r-full);background:var(--surface-0);border:1px solid var(--line);width:14px;height:14px;position:absolute;top:-7px}.jf-perf:before{left:-7px}.jf-perf:after{right:-7px}.jf-empty{color:var(--ink-2);font-size:var(--step--1);max-width:44ch}.jf-empty code{font-family:var(--font-mono);background:var(--surface-2);border-radius:var(--r-sm);padding:.1em .3em}.jf-error{animation:jf-land .26s var(--ease) both}@keyframes jf-land{0%{opacity:0;transform:translateY(-4px)}}@media (prefers-reduced-motion:reduce){.jf-error{animation:none}}.jf-pos{font-size:var(--step--1);letter-spacing:.04em;text-transform:uppercase;color:var(--error)}.jf-msg{margin-top:var(--s2);font-size:var(--step-0);max-width:58ch}.jf-excerpt{margin-top:var(--s4);padding:var(--s3) 0;background:var(--surface-0);border:1px solid var(--line);border-radius:var(--r-md);font-size:var(--step--1);white-space:pre;line-height:1.55;overflow-x:auto}.jf-line{padding:0 var(--s3);display:block}.jf-line.bad{background:color-mix(in oklch, var(--error) 12%, transparent)}.jf-gutter{min-width:3ch;margin-right:var(--s3);text-align:right;color:var(--ink-2);user-select:none;display:inline-block}.jf-code,.jf-line.bad .jf-code{color:var(--ink-0)}.jf-caret{color:var(--error);font-weight:600}.jf-hint{margin-top:var(--s4);font-size:var(--step--1);color:var(--ink-1);border-left:2px solid var(--brass);padding-left:var(--s3);max-width:60ch;line-height:1.6}.jf-warn{margin-bottom:var(--s4);padding:var(--s3) var(--s4);border-radius:var(--r-md);background:var(--surface-2);border-left:3px solid var(--warn)}.jf-warn strong{font-size:var(--step--1);display:block}.jf-warn p{margin-top:var(--s1);font-size:var(--step--1);color:var(--ink-1);max-width:60ch}.jf-result{font-size:var(--step--1);white-space:pre;tab-size:2;max-height:520px;line-height:1.55;overflow:auto}.jf-more{margin-top:var(--s3);color:var(--ink-2);font-size:var(--step--1)}.jf-acts{gap:var(--s3);margin-top:var(--s5);flex-wrap:wrap;display:flex}.jf-primary,.jf-ghost{min-height:44px;padding:0 var(--s5);border-radius:var(--r-md);font-size:var(--step--1);transition:background var(--dur) var(--ease), border-color var(--dur) var(--ease)}.jf-primary{background:var(--brass);color:var(--on-brass);font-weight:500}.jf-primary:hover{background:var(--brass-hi)}.jf-ghost{background:var(--surface-0);border:1px solid var(--line-firm)}.jf-ghost:hover{border-color:var(--brass)}@media (width<=860px){.jf{grid-template-columns:1fr}.jf-out{min-height:0}.jf-result{max-height:400px}.jf-acts{bottom:var(--s3);position:sticky}.jf-primary,.jf-ghost{flex:1}}
