/* Literal drawings for the doors and project views (scripts/door_art.py).
   Loaded after explorer.css. Ink comes from currentColor (the area ink set by
   .door-object / .interactive-specimen); everything else from the theme tokens
   so light and dark both hold. Font sizes live on the SVG text as user units:
   never set font-size here, it would override them. */

.specimen.art { overflow:visible; }
.interactive-specimen .specimen.art-p { max-height:none; height:auto; aspect-ratio:400/220; }

/* Line work: one weight for ink, one for structure, one hairline. */
.art .art-line { fill:none; stroke:currentColor; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; }
.art .art-thin { stroke-width:1.1; }
.art .art-line-q { fill:none; stroke:var(--quiet); stroke-width:1.2; stroke-linecap:round; stroke-linejoin:round; opacity:.75; }
.art .art-axis { fill:none; stroke:var(--quiet); stroke-width:1.2; stroke-linecap:round; stroke-linejoin:round; }
.art .art-hair { fill:none; stroke:var(--hairline); stroke-width:1; }
.art .art-rule { fill:none; stroke:var(--text); stroke-width:1.15; }
.art .art-dashed { stroke-dasharray:3.5 3; }
.art .art-coupling { fill:none; stroke:currentColor; stroke-width:1.1; opacity:.55; }

/* Surfaces. */
.art .art-frame { fill:var(--panel); stroke:var(--quiet); stroke-opacity:.55; stroke-width:1.1; }
.art .art-frame-ink { fill:var(--panel); stroke:currentColor; stroke-width:1.5; }
.art .art-dashrect { stroke-dasharray:4 3; }
.art .art-paperf { fill:var(--paper); }
.art .art-wash { fill:var(--wash); }
.art .art-filetab { fill:none; stroke:var(--quiet); stroke-width:1.1; }
.art .art-node { fill:var(--panel); stroke:var(--quiet); stroke-width:1.2; }
.art .art-fill { fill:currentColor; stroke:none; }
.art .art-tint { fill:currentColor; fill-opacity:.13; stroke:none; }
.art .art-cell { fill:var(--panel); stroke:var(--quiet); stroke-opacity:.6; stroke-width:1; }
.art .art-track { fill:var(--wash); stroke:none; }
.art .art-barq { fill:var(--quiet); fill-opacity:.42; stroke:none; }
.art .art-dot { fill:currentColor; fill-opacity:.42; }
.art .art-dot-strong { fill:var(--quiet); }
.art .art-ring-unknown { fill:none; stroke:var(--quiet); stroke-width:1.3; stroke-dasharray:2 4; stroke-linecap:round; }
.art .art-ring-unknown-s { fill:none; stroke:var(--quiet); stroke-width:1.3; stroke-dasharray:2 3; stroke-linecap:round; }
.art .art-chipline { fill:var(--panel); stroke:currentColor; stroke-width:1.3; }
.art .art-outline { fill:none; stroke:currentColor; stroke-width:1.3; }
.art .art-dashchip .art-chipline, .art .art-dashchip rect { stroke-dasharray:3 2.5; }
.art .art-hatchline { stroke:currentColor; stroke-width:1.3; opacity:.4; }
.art .art-hatchfill { stroke:none; }
.art .art-hatchbar { stroke:none; }
.art .art-pile { fill:var(--panel); stroke:var(--quiet); stroke-width:1.1; }
.art .art-pageline { stroke:var(--quiet); stroke-width:.8; opacity:.6; }
.art .art-word { fill:var(--quiet); fill-opacity:.32; }
.art .art-wave { fill:none; stroke:var(--quiet); stroke-width:1.3; stroke-linecap:round; opacity:.55; }
.art .art-bline-staged { fill:var(--quiet); fill-opacity:.55; }
.art .art-bline-work { fill:none; stroke:var(--quiet); stroke-width:1.1; stroke-dasharray:3 2; }

/* Text lines drawn as bars. */
.art .art-bar { fill:var(--quiet); fill-opacity:.32; }
.art .art-bar-strong { fill-opacity:.62; }
.art .art-bar-ink { fill:currentColor; fill-opacity:.55; }

/* Spins. */
.art .art-spin { fill:none; stroke:var(--quiet); stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; }
.art .art-spin-ink { stroke:currentColor; stroke-width:1.9; }

/* The house thread: two strands, after the plait mark. */
.art .art-strand { fill:none; stroke-width:1.25; stroke-linecap:round; }
.art .art-strand-a { stroke:currentColor; }
.art .art-strand-b { stroke:var(--quiet); opacity:.6; }

/* Type. Sans for labels, serif for mathematics, monospace for code. */
.art text { stroke:none; }
.art .art-lab { font-family:var(--font-sans); font-weight:600; fill:var(--quiet); letter-spacing:.01em; }
.art .art-labi { font-family:var(--font-sans); font-weight:650; fill:currentColor; letter-spacing:.01em; }
.art .art-txt { font-family:var(--font-sans); font-weight:550; fill:var(--text); }
.art .art-chipt { font-family:var(--font-sans); font-weight:700; fill:var(--paper); letter-spacing:.015em; }
.art .art-chipt-q { font-family:var(--font-sans); font-weight:650; fill:var(--text); }
.art .art-f { font-family:var(--font-serif); font-weight:400; fill:var(--text); }
.art .art-ft { font-family:var(--font-serif); font-weight:600; fill:var(--text); }
.art .art-fq { font-family:var(--font-serif); fill:var(--quiet); }
.art .art-fi { font-family:var(--font-serif); font-style:italic; fill:var(--text); }
.art .art-fink { font-family:var(--font-serif); fill:currentColor; }
.art .art-mono { font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; fill:var(--text); }
.art .art-monoq { font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; fill:var(--quiet); }
.art .art-monoi { font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; fill:currentColor; font-weight:600; }
.art .art-inkt { fill:currentColor; }

/* Demo-state halos: hidden unless their state is active. */
.art .art-halo { fill:currentColor; fill-opacity:.07; stroke:none; opacity:0; }
.art-p g, .art-p .art-halo { transition:opacity .3s ease; }
.art .art-pathdraw, .art .art-draw { stroke-dasharray:1; stroke-dashoffset:0; }

/* Motion. Doors: one replay on hover or focus. Projects: one entrance when
   the view appears. Transform-based effects size to their own box. */
.art .art-pop, .art .art-rise, .art .art-grow, .art .art-flip { transform-box:fill-box; }
.art .art-pop { transform-origin:center; }
.art .art-rise { transform-origin:50% 100%; }
.art .art-grow { transform-origin:0 50%; }
.art .art-flip { transform-origin:center; }
.door:is(:hover,:focus-within) .art .art-draw,
.project-view .art-p .art-draw { animation:art-draw .52s cubic-bezier(.3,.6,.25,1) both; }
.door:is(:hover,:focus-within) .art .art-pop,
.project-view .art-p .art-pop { animation:art-pop .42s cubic-bezier(.3,.7,.3,1.2) both; }
.door:is(:hover,:focus-within) .art .art-rise,
.project-view .art-p .art-rise { animation:art-rise .48s cubic-bezier(.3,.7,.3,1) both; }
.door:is(:hover,:focus-within) .art .art-grow,
.project-view .art-p .art-grow { animation:art-grow .5s cubic-bezier(.3,.7,.3,1) both; }
.door:is(:hover,:focus-within) .art .art-flip,
.project-view .art-p .art-flip { animation:art-flip .5s cubic-bezier(.4,.1,.3,1) .12s both; }
.door:is(:hover,:focus-within) .art .art-cuearrow,
.project-view .art-p .art-cuearrow { animation:art-cue .45s ease-out .22s both; }
.art .art-d1 { animation-delay:.06s!important; }
.art .art-d2 { animation-delay:.12s!important; }
.art .art-d3 { animation-delay:.18s!important; }
@keyframes art-draw { from { stroke-dashoffset:1; } to { stroke-dashoffset:0; } }
@keyframes art-pop { from { opacity:0; transform:scale(.6); } to { opacity:1; transform:none; } }
@keyframes art-rise { from { transform:scaleY(.05); } to { transform:none; } }
@keyframes art-grow { from { transform:scaleX(0); } to { transform:none; } }
@keyframes art-flip { from { transform:rotate(-180deg); } to { transform:none; } }
@keyframes art-cue { from { opacity:.15; } to { opacity:1; } }

@media (prefers-reduced-motion:reduce) {
  .art *, .art-p g, .art-p .art-halo { animation:none!important; transition:none!important; }
}

/* ---- demo states (generated from DEMO_STATES; keep in step with door_art.py) ---- */
.project-view[data-demo-state="question"] .specimen--maths .art-hide-question { opacity:0; }
.project-view[data-demo-state="proved"] .specimen--maths .art-dim-proved { opacity:.24; }
.project-view[data-demo-state="proved"] .specimen--maths .art-hide-proved { opacity:0; }
.project-view[data-demo-state="proved"] .specimen--maths .art-hl-proved { opacity:1; }
.project-view[data-demo-state="open"] .specimen--maths .art-dim-open { opacity:.24; }
.project-view[data-demo-state="open"] .specimen--maths .art-hide-open { opacity:0; }
.project-view[data-demo-state="open"] .specimen--maths .art-hl-open { opacity:1; }
.project-view[data-demo-state="bound"] .specimen--quartic .art-hide-bound { opacity:0; }
.project-view[data-demo-state="separation"] .specimen--quartic .art-dim-separation { opacity:.24; }
.project-view[data-demo-state="separation"] .specimen--quartic .art-hide-separation { opacity:0; }
.project-view[data-demo-state="separation"] .specimen--quartic .art-hl-separation { opacity:1; }
.project-view[data-demo-state="query"] .specimen--quartic .art-dim-query { opacity:.24; }
.project-view[data-demo-state="query"] .specimen--quartic .art-hide-query { opacity:0; }
.project-view[data-demo-state="query"] .specimen--quartic .art-hl-query { opacity:1; }
.project-view[data-demo-state="overlap"] .specimen--lean-exposition .art-hide-overlap { opacity:0; }
.project-view[data-demo-state="couplings"] .specimen--lean-exposition .art-dim-couplings { opacity:.24; }
.project-view[data-demo-state="couplings"] .specimen--lean-exposition .art-hide-couplings { opacity:0; }
.project-view[data-demo-state="couplings"] .specimen--lean-exposition .art-hl-couplings { opacity:1; }
.project-view[data-demo-state="count"] .specimen--lean-exposition .art-dim-count { opacity:.24; }
.project-view[data-demo-state="count"] .specimen--lean-exposition .art-hide-count { opacity:0; }
.project-view[data-demo-state="count"] .specimen--lean-exposition .art-hl-count { opacity:1; }
.project-view[data-demo-state="sentence"] .specimen--proof-reader .art-hide-sentence { opacity:0; }
.project-view[data-demo-state="graph"] .specimen--proof-reader .art-dim-graph { opacity:.24; }
.project-view[data-demo-state="graph"] .specimen--proof-reader .art-hide-graph { opacity:0; }
.project-view[data-demo-state="graph"] .specimen--proof-reader .art-hl-graph { opacity:1; }
.project-view[data-demo-state="axioms"] .specimen--proof-reader .art-dim-axioms { opacity:.24; }
.project-view[data-demo-state="axioms"] .specimen--proof-reader .art-hide-axioms { opacity:0; }
.project-view[data-demo-state="axioms"] .specimen--proof-reader .art-hl-axioms { opacity:1; }
.project-view[data-demo-state="map"] .specimen--atlas .art-hide-map { opacity:0; }
.project-view[data-demo-state="paper"] .specimen--atlas .art-dim-paper { opacity:.24; }
.project-view[data-demo-state="paper"] .specimen--atlas .art-hide-paper { opacity:0; }
.project-view[data-demo-state="paper"] .specimen--atlas .art-hl-paper { opacity:1; }
.project-view[data-demo-state="verdicts"] .specimen--atlas .art-dim-verdicts { opacity:.24; }
.project-view[data-demo-state="verdicts"] .specimen--atlas .art-hide-verdicts { opacity:0; }
.project-view[data-demo-state="verdicts"] .specimen--atlas .art-hl-verdicts { opacity:1; }
.project-view[data-demo-state="components"] .specimen--formal-verification .art-hide-components { opacity:0; }
.project-view[data-demo-state="dafny"] .specimen--formal-verification .art-dim-dafny { opacity:.24; }
.project-view[data-demo-state="dafny"] .specimen--formal-verification .art-hide-dafny { opacity:0; }
.project-view[data-demo-state="dafny"] .specimen--formal-verification .art-hl-dafny { opacity:1; }
.project-view[data-demo-state="coverage"] .specimen--formal-verification .art-dim-coverage { opacity:.24; }
.project-view[data-demo-state="coverage"] .specimen--formal-verification .art-hide-coverage { opacity:0; }
.project-view[data-demo-state="coverage"] .specimen--formal-verification .art-hl-coverage { opacity:1; }
.project-view[data-demo-state="fail"] .specimen--agent-trace .art-hide-fail { opacity:0; }
.project-view[data-demo-state="fix"] .specimen--agent-trace .art-dim-fix { opacity:.24; }
.project-view[data-demo-state="fix"] .specimen--agent-trace .art-hide-fix { opacity:0; }
.project-view[data-demo-state="fix"] .specimen--agent-trace .art-hl-fix { opacity:1; }
.project-view[data-demo-state="pass"] .specimen--agent-trace .art-dim-pass { opacity:.24; }
.project-view[data-demo-state="pass"] .specimen--agent-trace .art-hide-pass { opacity:0; }
.project-view[data-demo-state="pass"] .specimen--agent-trace .art-hl-pass { opacity:1; }
.project-view[data-demo-state="result"] .specimen--one-checkout .art-hide-result { opacity:0; }
.project-view[data-demo-state="before"] .specimen--one-checkout .art-dim-before { opacity:.24; }
.project-view[data-demo-state="before"] .specimen--one-checkout .art-hide-before { opacity:0; }
.project-view[data-demo-state="before"] .specimen--one-checkout .art-hl-before { opacity:1; }
.project-view[data-demo-state="kept"] .specimen--one-checkout .art-dim-kept { opacity:.24; }
.project-view[data-demo-state="kept"] .specimen--one-checkout .art-hide-kept { opacity:0; }
.project-view[data-demo-state="kept"] .specimen--one-checkout .art-hl-kept { opacity:1; }
.project-view[data-demo-state="build"] .specimen--safety-core .art-hide-build { opacity:0; }
.project-view[data-demo-state="written"] .specimen--safety-core .art-dim-written { opacity:.24; }
.project-view[data-demo-state="written"] .specimen--safety-core .art-hide-written { opacity:0; }
.project-view[data-demo-state="written"] .specimen--safety-core .art-hl-written { opacity:1; }
.project-view[data-demo-state="hook"] .specimen--safety-core .art-dim-hook { opacity:.24; }
.project-view[data-demo-state="hook"] .specimen--safety-core .art-hide-hook { opacity:0; }
.project-view[data-demo-state="hook"] .specimen--safety-core .art-hl-hook { opacity:1; }
.project-view[data-demo-state="file"] .specimen--codemap .art-hide-file { opacity:0; }
.project-view[data-demo-state="callers"] .specimen--codemap .art-dim-callers { opacity:.24; }
.project-view[data-demo-state="callers"] .specimen--codemap .art-hide-callers { opacity:0; }
.project-view[data-demo-state="callers"] .specimen--codemap .art-hl-callers { opacity:1; }
.project-view[data-demo-state="text"] .specimen--codemap .art-dim-text { opacity:.24; }
.project-view[data-demo-state="text"] .specimen--codemap .art-hide-text { opacity:0; }
.project-view[data-demo-state="text"] .specimen--codemap .art-hl-text { opacity:1; }
.project-view[data-demo-state="tables"] .specimen--code-ontology-bridge .art-hide-tables { opacity:0; }
.project-view[data-demo-state="query"] .specimen--code-ontology-bridge .art-dim-query { opacity:.24; }
.project-view[data-demo-state="query"] .specimen--code-ontology-bridge .art-hide-query { opacity:0; }
.project-view[data-demo-state="query"] .specimen--code-ontology-bridge .art-hl-query { opacity:1; }
.project-view[data-demo-state="study"] .specimen--code-ontology-bridge .art-dim-study { opacity:.24; }
.project-view[data-demo-state="study"] .specimen--code-ontology-bridge .art-hide-study { opacity:0; }
.project-view[data-demo-state="study"] .specimen--code-ontology-bridge .art-hl-study { opacity:1; }
.project-view[data-demo-state="records"] .specimen--zenith .art-hide-records { opacity:0; }
.project-view[data-demo-state="result"] .specimen--zenith .art-dim-result { opacity:.24; }
.project-view[data-demo-state="result"] .specimen--zenith .art-hide-result { opacity:0; }
.project-view[data-demo-state="result"] .specimen--zenith .art-hl-result { opacity:1; }
.project-view[data-demo-state="timeouts"] .specimen--zenith .art-dim-timeouts { opacity:.24; }
.project-view[data-demo-state="timeouts"] .specimen--zenith .art-hide-timeouts { opacity:0; }
.project-view[data-demo-state="timeouts"] .specimen--zenith .art-hl-timeouts { opacity:1; }
.project-view[data-demo-state="proof"] .specimen--funnel .art-hide-proof { opacity:0; }
.project-view[data-demo-state="pages"] .specimen--funnel .art-dim-pages { opacity:.24; }
.project-view[data-demo-state="pages"] .specimen--funnel .art-hide-pages { opacity:0; }
.project-view[data-demo-state="pages"] .specimen--funnel .art-hl-pages { opacity:1; }
.project-view[data-demo-state="video"] .specimen--funnel .art-dim-video { opacity:.24; }
.project-view[data-demo-state="video"] .specimen--funnel .art-hide-video { opacity:0; }
.project-view[data-demo-state="video"] .specimen--funnel .art-hl-video { opacity:1; }
.project-view[data-demo-state="plan"] .specimen--narration-ir .art-hide-plan { opacity:0; }
.project-view[data-demo-state="cue"] .specimen--narration-ir .art-dim-cue { opacity:.24; }
.project-view[data-demo-state="cue"] .specimen--narration-ir .art-hide-cue { opacity:0; }
.project-view[data-demo-state="cue"] .specimen--narration-ir .art-hl-cue { opacity:1; }
.project-view[data-demo-state="quotes"] .specimen--narration-ir .art-dim-quotes { opacity:.24; }
.project-view[data-demo-state="quotes"] .specimen--narration-ir .art-hide-quotes { opacity:0; }
.project-view[data-demo-state="quotes"] .specimen--narration-ir .art-hl-quotes { opacity:1; }
