.etude-page{max-width:38rem;margin:0 auto;padding:0}.etude-head{margin-bottom:2rem}.etude-kicker{font-family:var(--sans);font-size:var(--label-size);letter-spacing:var(--label-tracking);text-transform:uppercase;color:var(--muted);font-weight:600;margin:0 0 .6rem}.etude-title{font-family:var(--serif-display);font-size:2.25rem;line-height:1.15;margin:0 0 .5rem;letter-spacing:-.01em}.etude-relief{font-family:var(--serif);font-style:italic;color:var(--muted);font-size:1.05rem;margin:0 0 1rem;line-height:1.45}.etude-nav{font-family:var(--sans);font-size:.85rem;color:var(--muted)}.etude-nav a{color:var(--muted);text-decoration:none}.etude-nav a:hover{color:var(--accent)}.etude-nav-sep{margin:0 .5rem;opacity:.5}.etude-intro{margin:0 0 1.5rem}.etude-intro p{margin:0 0 .85rem;line-height:1.6}.etude-intro code{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.85rem;background:var(--bg-soft);padding:.05rem .35rem;border-radius:3px}.etude-stage{display:flex;flex-direction:column;gap:1.2rem}.etude-card{background:var(--bg-soft);border-radius:12px;padding:1.5rem 1.5rem 1.25rem}.etude-card code{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.82rem;background:var(--bg);padding:.05rem .35rem;border-radius:3px}.etude-step{font-family:var(--sans);font-size:var(--label-size);letter-spacing:var(--label-tracking);text-transform:uppercase;color:var(--muted);font-weight:600;margin:0 0 .85rem}.rule-presets{display:flex;gap:.4rem;flex-wrap:wrap;margin:0 0 .9rem}.preset-btn{appearance:none;-webkit-appearance:none;font-family:var(--sans);font-size:.78rem;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:5px;padding:.32rem .7rem;min-height:32px;cursor:pointer;transition:border-color .18s ease,background .18s ease,color .18s ease}.preset-btn:hover{border-color:var(--accent)}.preset-btn.preset-active{background:var(--accent);border-color:var(--accent);color:var(--bg)}.rule-editor{background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:.85rem .95rem 1rem;margin:0 0 1rem}.rule-grid{display:flex;flex-direction:column;gap:.55rem}.rule-row{display:grid;grid-template-columns:1fr auto 1fr auto;gap:.5rem;align-items:end}.rule-cell{display:flex;flex-direction:column;gap:.2rem}.rule-cell-label{font-family:var(--sans);font-size:.65rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:700}.rule-input{appearance:none;-webkit-appearance:none;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.85rem;padding:.45rem .55rem;background:var(--bg-soft);border:1px solid var(--line);border-radius:5px;color:var(--text);min-height:36px;width:100%;transition:border-color .18s ease}.rule-input:focus{outline:none;border-color:var(--accent);background:var(--bg)}.rule-arrow{font-family:ui-monospace,SF Mono,Menlo,monospace;color:var(--muted);padding-bottom:.55rem}.rule-del{appearance:none;-webkit-appearance:none;background:transparent;border:1px solid var(--line);color:var(--muted);border-radius:5px;width:1.85rem;height:1.85rem;cursor:pointer;font-size:1.1rem;line-height:1;margin-bottom:.05rem;transition:border-color .18s ease,color .18s ease}.rule-del:hover{border-color:var(--accent);color:var(--accent)}.rule-add{appearance:none;-webkit-appearance:none;background:transparent;border:1px dashed var(--line);border-radius:5px;padding:.4rem .85rem;margin-top:.7rem;font-family:var(--sans);font-size:.82rem;color:var(--muted);cursor:pointer;transition:border-color .18s ease,color .18s ease}.rule-add:hover{border-color:var(--accent);color:var(--accent)}.rule-empty{margin:0;color:var(--muted);font-style:italic;font-size:.9rem;padding:.5rem 0}.rule-actions{display:flex;gap:.55rem}.etude-next{appearance:none;-webkit-appearance:none;font-family:var(--sans);font-size:.9rem;font-weight:600;padding:.65rem 1.2rem;min-height:44px;border:none;background:var(--text);color:var(--bg);border-radius:6px;cursor:pointer;transition:background .18s ease,transform .12s ease}.etude-next:hover{background:var(--accent)}.etude-next:active{transform:scale(.97)}.etude-next:after{content:" →"}.fixture-help{margin:0 0 .85rem;color:var(--muted);font-size:.88rem;line-height:1.5}.fixture-grid{display:grid;grid-template-columns:1fr 1fr;gap:.7rem}.fixture-col{display:flex;flex-direction:column}.fixture-col-name{margin:0 0 .45rem;font-family:var(--sans);font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:700}.fixture-code{margin:0;background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:.65rem .75rem;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.78rem;line-height:1.6;color:var(--text);white-space:pre-wrap;word-break:break-all;overflow-x:auto;min-height:18rem}.fc-line{display:block;padding:0 .15rem;border-radius:2px}.fc-line-import{color:var(--text)}.fc-line-changed{background:#2d7a3e1a;color:#1a5a2e}.assert-list{list-style:none;padding:0;margin:0}.assert-summary{padding:.85rem 1rem;border-left:3px solid var(--line);background:var(--bg);border-radius:6px;line-height:1.55;color:var(--text);margin:0 0 .85rem}.assert-summary-good{border-left-color:#2d7a3e;background:#2d7a3e0f}.assert-summary-bad{border-left-color:var(--accent);background:#8a34200f}.assert-summary code{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.78rem;background:var(--bg-soft);padding:.05rem .3rem;border-radius:3px}.assert-rows-wrap{margin:0}.assert-rows{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.4rem}.assert-item{display:grid;grid-template-columns:1.25rem 1fr;gap:.55rem;padding:.5rem .7rem;background:var(--bg);border:1px solid var(--line);border-radius:5px;font-size:.88rem;line-height:1.55}.assert-mark{font-family:ui-monospace,SF Mono,Menlo,monospace;font-weight:700;text-align:center}.assert-pass .assert-mark{color:#2d7a3e}.assert-fail .assert-mark{color:var(--accent)}.assert-pass{border-left:3px solid #2d7a3e}.assert-fail{border-left:3px solid var(--accent)}.assert-body{display:flex;flex-direction:column;gap:.2rem}.assert-label{color:var(--text)}.assert-label code{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.78rem;background:var(--bg-soft);padding:.05rem .3rem;border-radius:3px}.assert-detail{color:var(--muted);font-size:.8rem;line-height:1.5}.assert-detail code{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.76rem;background:var(--bg-soft);padding:.05rem .3rem;border-radius:3px}.etude-failure{margin:2.5rem 0 0;padding-top:1.5rem;border-top:1px solid var(--line)}.etude-failure-title{font-family:var(--serif-display);font-size:1.35rem;line-height:1.25;margin:0 0 .75rem;letter-spacing:-.005em;color:var(--text)}.etude-failure p{margin:0 0 .85rem;line-height:1.6;color:var(--text)}.etude-failure em{color:var(--accent);font-style:italic}.etude-failure code{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.85rem;background:var(--bg-soft);padding:.05rem .35rem;border-radius:3px}.etude-coda{margin:2rem 0 0;padding-top:1.25rem;border-top:1px solid var(--line)}.etude-coda p{color:var(--muted);font-style:italic;line-height:1.6;margin:0}@media(max-width:32rem){.etude-title{font-size:1.85rem}.etude-card{padding:1.15rem 1.1rem 1rem;border-radius:10px}.rule-row{grid-template-columns:1fr auto;gap:.5rem}.rule-row .rule-arrow{display:none}.rule-row .rule-del{grid-column:2;grid-row:1;align-self:start;margin-top:1.1rem}.fixture-grid{grid-template-columns:1fr}.fixture-code{min-height:0}}
