@font-face{font-family:Inter;src:url('../../assets/fonts/inter-variable-normal.woff2') format('woff2');font-weight:100 900;font-display:swap}
@font-face{font-family:'Latin Modern';src:url('../../assets/fonts/latin-modern/lmroman10-regular.otf') format('opentype');font-display:swap}
@font-face{font-family:'Latin Modern';src:url('../../assets/fonts/latin-modern/lmroman12-bold.otf') format('opentype');font-weight:700;font-display:swap}
:root{--wine:#751a2c;--ink:#202938;--muted:#536070;--line:#d5d9dc;--paper:#f7f6f4;--teal:#246c63;--orange:#b26023;--left:#ad6027;--right:#426f95;--rectangle:#79649e;--triangle:#a63760;--extension:#59646c;font:14px/1.5 Inter,Arial,sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none}
*{box-sizing:border-box}body{margin:0}a{color:var(--wine);text-underline-offset:3px}button,input,select{font:inherit;color:inherit}button,select,input{min-height:44px;border:1px solid #bec5ca;border-radius:6px;background:#fff}button{-webkit-tap-highlight-color:rgb(117 26 44 / .12);cursor:pointer;padding:8px 14px;font-size:13px;font-weight:550;line-height:1.35}button:hover{background:#f0eeeb;border-color:#87919e}button:disabled{opacity:.48;cursor:default}.primary{background:var(--wine);border-color:var(--wine);color:white}.primary:hover{background:#591321}.secondary{background:#f8f0f2;color:var(--wine);border-color:#dcc2c8}select{padding:6px 32px 6px 10px;max-width:100%}input{padding:7px 10px;width:86px}label{display:flex;flex-direction:column;gap:5px;font-size:12px;font-weight:550;color:var(--muted)}:focus-visible{outline:3px solid #ab6070;outline-offset:3px}[hidden]{display:none!important}.skip:not(:focus){position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.skip:focus{position:fixed;z-index:30;top:8px;left:8px;background:white;padding:12px}h1,h2,h3,p{margin:0}h1,h2{font-family:'Latin Modern',Georgia,serif}h2{font-size:29px;line-height:1.2;letter-spacing:-.45px}h3{font-size:14px;font-weight:650;line-height:1.45}p+p{margin-top:10px}.small{font-size:12px;color:var(--muted);line-height:1.6}.eyebrow{font-size:11px;font-weight:650;letter-spacing:1.1px;text-transform:uppercase;color:var(--wine);margin-bottom:7px}
.app-header{background:#fff;border-bottom:1px solid var(--line);padding:13px max(24px,calc((100vw - 1420px)/2));display:flex;align-items:center;gap:20px;min-height:82px}.institution{display:flex;align-items:center;min-height:44px;flex:none}.institution img{width:40px;height:40px;object-fit:contain}.titles h1{font-size:25px;line-height:1.1}.titles p{font-size:12px;color:var(--muted);margin-top:4px}.header-links{display:flex;gap:23px;margin-left:auto}.header-links a{display:flex;align-items:center;min-height:44px;font-size:12px;text-decoration:none}.header-links a:hover{text-decoration:underline}main{max-width:1468px;margin:0 auto;padding:0 24px 24px}.top-controls{display:flex;align-items:center;justify-content:space-between;gap:15px;margin:18px 0 27px}.tabs{display:flex;gap:4px}.tabs button{border:none;border-radius:0;background:transparent;min-height:49px;color:var(--muted);padding:9px 13px;border-bottom:3px solid transparent}.tabs button span{font-size:10px;letter-spacing:1px;margin-right:8px;opacity:.7}.tabs button[aria-selected=true]{color:var(--wine);border-bottom-color:var(--wine);background:#f0e8e9}.history{display:flex;gap:6px;flex:none}.history button{font-size:12px;padding:7px 10px}.intro{display:flex;justify-content:space-between;align-items:center;gap:28px;margin-bottom:23px}.intro>div>p:last-child{margin-top:7px;font-size:13px;color:var(--muted)}.intro>label{min-width:245px}.intro>button{flex-shrink:0;max-width:240px}
.toolbar{display:flex;align-items:center;gap:22px;flex-wrap:wrap;padding:14px 17px;background:white;border:1px solid var(--line);border-radius:8px;margin-bottom:15px}.editing{justify-content:space-between}.mode-group{display:flex;gap:4px;border-radius:7px;background:#f2f1ee;padding:4px}.mode-group button{border-color:transparent;background:transparent}.mode-group button[aria-pressed=true]{background:var(--wine);color:#fff}.pair-controls{display:flex;gap:8px;align-items:end}.pair-controls select{min-width:70px}.pair-controls>button{min-width:106px}.pair-controls label{font-size:11px}.catalogue label:nth-child(2){flex:1;min-width:190px}.catalogue label:nth-child(3){flex:1;min-width:175px}.catalogue>button{align-self:end}.catalogue>p{flex-basis:100%;margin-top:-10px}.card{background:#fff;border:1px solid var(--line);border-radius:9px;min-width:0;overflow:hidden}.card-head{padding:16px 19px;display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid #edf0f1}.card-head span{font-size:11px;color:var(--muted)}.ordinary-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:16px;align-items:start}.graph-wrap{height:300px;margin:0 14px;touch-action:pan-y}.graph-wrap svg{display:block;width:100%;height:100%;overflow:visible}.graph-hint{font-size:12px;color:var(--muted);padding:13px 19px;border-top:1px solid #edf0f1}.legend{display:flex;gap:20px;justify-content:center;padding:12px 10px;font-size:11px;color:var(--muted);flex-wrap:wrap}.legend>span{display:flex;align-items:center;gap:6px}.line{display:inline-block;width:24px;height:0;border-top:2px solid #b0bac0}.line.selected{border-top:4px solid var(--teal)}.line.deleted{border-top:2px dashed var(--orange)}.selection-card{padding:20px}.selection-count{display:flex;align-items:baseline;gap:10px;margin:6px 0}.selection-count strong{font-size:44px;line-height:1.25;font-weight:400;letter-spacing:-2px;color:var(--teal)}.selection-count span{font-size:12px;color:var(--muted)}#selection-status{font-size:13px;margin-bottom:14px}.edge-list{display:flex;gap:5px;flex-wrap:wrap;min-height:34px;margin-bottom:16px}.edge-chip{font-size:12px;padding:6px 9px;min-height:38px;color:var(--teal);background:#edf5f2;border-color:#b8d4cb;font-variant-numeric:tabular-nums}.button-row{display:flex;gap:7px;flex-wrap:wrap;margin:13px 0 8px}.selection-card .button-row button{font-size:11px;padding:7px 9px}.selection-totals{font-size:12px;border-top:1px solid var(--line);padding-top:12px;margin-top:18px;color:var(--muted)}.notice{border-left:3px solid var(--teal);padding:10px 13px;background:#edf4f1;font-size:13px;margin-top:14px;min-height:42px}.notice.warn{border-color:var(--orange);background:#fbf1e7;color:#764117}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:15px;margin:25px 0 12px}.section-head p{font-size:12px;color:var(--muted)}.gallery{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}.gallery button{display:block;text-align:left;padding:9px 11px;background:white;border-color:var(--line);font-size:11px;font-weight:450}.gallery button[aria-pressed=true]{border:2px solid var(--teal);padding:8px 10px;background:#f5faf8}.gallery svg{height:85px;width:100%;display:block}.gallery .gallery-name{font-size:11px;font-weight:650;color:var(--teal)}.gallery .edge-caption{white-space:nowrap;font-size:10px;display:block;color:var(--muted);text-align:center}.certificate-layout{display:grid;grid-template-columns:1.15fr 1fr;gap:16px;align-items:start}.certificate{padding:22px}.certificate h4{font-size:19px;font-family:'Latin Modern',Georgia,serif;margin:0 0 8px}.certificate p{font-size:13px;line-height:1.65}.certificate .certificate-badge{display:inline-block;font-size:11px;color:var(--teal);background:#eaf3ef;padding:4px 7px;border-radius:4px;margin-bottom:9px}.cut-details{padding:16px 20px;font-size:12px}.cut-details summary{font-size:13px;font-weight:600;cursor:pointer;min-height:32px}.cut-details p{margin:9px 0 15px}.table-scroll{overflow:auto}table{width:100%;border-collapse:collapse;font-size:12px}th,td{text-align:left;padding:8px;border-bottom:1px solid #e4e7e9}th{font-size:11px;color:var(--muted)}td button{min-height:36px;padding:4px 8px;font-size:11px}
.parameter-form{gap:14px;align-items:end}.parameter-form>button{margin-bottom:0}.form-error{width:100%;color:#95343d;font-size:12px}.form-error:empty{display:none}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:17px 0}.metric{background:#fff;border:1px solid var(--line);border-radius:8px;padding:15px 18px}.metric small{display:block;font-size:11px;color:var(--muted)}.metric strong{display:block;font-size:31px;font-weight:450;letter-spacing:-1px;color:var(--teal)}.metric span{font-size:11px;color:var(--muted)}.metric.highlight{background:#edf3ef;border-color:#c8d9d0}.metric.warn{background:#fbf1e7;border-color:#ecd2b8}.metric.warn strong{color:#8a4a17}.metric.warn span{color:#764117}.form-hint{width:100%;font-size:12px;line-height:1.55;color:var(--muted)}.bar-gap{font-size:11px;line-height:1;color:var(--muted);padding-left:4px}.construction-layout{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:16px;align-items:start}.matrix-wrap{aspect-ratio:1.04;max-height:620px;padding:12px 18px 5px;touch-action:pan-y}.matrix-wrap svg{width:100%;height:100%;display:block}.construction-side{display:grid;gap:16px}.ext-graph-wrap{height:230px;padding:0 14px;touch-action:pan-y}.ext-graph-wrap svg{width:100%;height:100%;display:block}.region-controls{display:flex;flex-wrap:wrap;gap:5px;padding:3px 16px 13px}.region-controls button{font-size:11px;display:flex;gap:6px;align-items:center;padding:7px 9px;min-height:38px}.region-controls button[aria-pressed=true]{border:2px solid var(--ink);padding:6px 8px;background:#f2f3f2}.swatch{display:inline-block;height:10px;width:10px;border-radius:2px}.swatch.left{background:var(--left)}.swatch.right{background:var(--right)}.swatch.rectangle{background:var(--rectangle)}.swatch.triangle{background:var(--triangle)}.swatch.extension{background:var(--extension)}.inspector{border-top:1px solid #edf0f1;padding:13px 18px}.inspector .pair-controls{gap:10px}.inspector p{margin-top:10px;font-size:12px;min-height:36px}.proof-card{padding:19px 22px}.proof-card h3{margin-bottom:8px}.proof-card>p:not(.eyebrow){font-size:12px;color:var(--muted)}.proof-card>button{margin-top:12px}.proof-card #triangle-status{margin-top:9px;color:var(--teal)}.construction-bottom{display:grid;grid-template-columns:1.1fr 1fr;gap:16px;align-items:start;margin-top:17px}.construction-bottom>.card{padding:22px}.construction-bottom h3{font-family:'Latin Modern',Georgia,serif;font-size:22px;margin-bottom:12px}.construction-bottom p,.construction-bottom li{font-size:12px;line-height:1.65}.construction-bottom ul{padding-left:19px;margin-bottom:10px}.formula{padding:11px 14px;background:#f8f6f3;border-radius:5px;margin:12px 0;overflow:auto;font-size:15px}.formula .katex-display{margin:0}.formula .katex-display>.katex{text-align:left}.bound-line{display:flex;align-items:baseline;gap:9px;font-size:13px;margin:12px 0}.bound-line strong{font-size:27px;color:var(--teal);font-weight:450}#excess-chart{margin-top:16px}.bar-chart{margin:18px 0}.bar-row{display:grid;grid-template-columns:60px 1fr 22px;align-items:center;gap:10px;font-size:11px;margin:9px 0}.bar{height:11px;border-radius:3px;background:#ddd}.bar-row.active{font-weight:650;color:var(--wine)}.bar-fill{height:100%;border-radius:3px;background:var(--teal)}
.notes{padding:18px 0;margin-top:28px;border-top:1px solid var(--line);font-size:12px}.notes summary{font-size:13px;font-weight:550;cursor:pointer;min-height:32px}.notes-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 28px;padding:12px 0;color:var(--muted)}.notes-grid p{margin:0}.source-note{border-top:1px solid var(--line);padding:20px 0 0;margin-top:6px;color:var(--muted);font-size:11px;line-height:1.75}.source-note .acknowledgments{font-size:10px;color:#64707a;margin-top:7px}.source-note nav{display:flex;gap:20px;margin-top:12px}.source-note nav a{min-height:32px;display:flex;align-items:center}#copyright{font-size:10px;margin-top:6px}.scientific-notes{max-width:900px;padding-top:30px}.scientific-notes h2{margin:30px 0 12px}.scientific-notes h3{margin:20px 0 10px}.scientific-notes p,.scientific-notes li{line-height:1.8}.scientific-notes table{margin:17px 0}.graph-vertex{cursor:pointer}.graph-vertex:focus{outline:none}.graph-vertex:focus-visible .hit,.graph-vertex:focus-visible circle{stroke:var(--wine);stroke-width:3}.axis-text{font-family:Inter,Arial,sans-serif;fill:#536070}.matrix-cell{cursor:pointer}.pending .hit{fill:rgb(241 221 227 / .75);stroke:var(--wine);stroke-width:2}.pending circle{stroke:var(--wine);fill:#f1dde3;stroke-width:3}
/* Hover feedback only where a pointer can hover; touch taps must not leave a stuck outline. */
@media(hover:hover){.graph-vertex:hover circle{fill:#f2e1e5}.matrix-cell:hover{stroke:#202938;stroke-width:2}}
@media(min-width:1600px){.graph-wrap{height:335px}}@media(max-width:1150px){.top-controls{align-items:start;flex-direction:column;gap:8px}.history{align-self:flex-end}.tabs{width:100%;border-bottom:1px solid var(--line)}.tabs button{flex:1}.intro>label{min-width:220px}.editing{gap:10px}.parameter-form{gap:10px}.parameter-form input{width:76px}.ordinary-layout{grid-template-columns:minmax(0,1fr) 245px}.gallery .edge-caption{font-size:9px}.construction-layout{grid-template-columns:1fr 1fr}.matrix-wrap{padding:7px}.ext-graph-wrap{height:215px}}
@media(max-width:780px){main{padding:0 15px 20px}.app-header{padding:12px 15px;gap:13px;flex-wrap:wrap}.titles h1{font-size:23px}.header-links{width:100%;margin-left:0;justify-content:flex-end;gap:24px;border-top:1px solid #eee;padding-top:2px}.header-links a{min-height:36px}.top-controls{margin:11px 0 22px}.tabs button{padding:9px 7px;font-size:11px;line-height:1.5}.tabs button span{display:block;margin:0;font-size:9px}.history button{min-height:40px}.intro{align-items:stretch;flex-direction:column;gap:16px;margin-bottom:17px}.intro>label{width:100%;min-width:0}.intro>button{max-width:none}h2{font-size:26px}.toolbar{padding:12px;gap:12px}.editing{flex-direction:column;align-items:stretch}.mode-group button{flex:1;padding:7px 5px;font-size:12px}.pair-controls{justify-content:space-between}.pair-controls label{flex:1}.pair-controls select{min-width:0;width:100%}.ordinary-layout{grid-template-columns:1fr}.graph-wrap{height:280px;margin:0 7px}.selection-card{padding:16px;display:grid;grid-template-columns:1fr 1fr;gap:0 18px}.selection-card .eyebrow{grid-column:1/-1}.selection-count{grid-column:1}.selection-card #selection-status{grid-column:1;margin:0}.selection-card .edge-list{grid-column:2;grid-row:2/4;align-content:center;align-items:center;margin:0}.selection-card .button-row,.selection-card .small,.selection-totals{grid-column:1/-1}.selection-card .button-row{margin-top:15px}.selection-totals{margin-top:12px;padding-top:10px}.selection-count strong{font-size:35px}.legend{gap:12px;font-size:10px}.gallery{grid-template-columns:repeat(2,1fr)}.gallery .edge-caption{font-size:11px}.gallery button:last-child{grid-column:1/-1;max-width:none}.gallery svg{height:92px}.gallery button:last-child svg{max-width:calc(50% - 5px);margin:0 auto}.gallery-section .section-head,.certificate-section .section-head{display:block}.section-head p{margin-top:5px}.certificate-layout{grid-template-columns:1fr}.catalogue{gap:12px}.catalogue label:first-child{width:100%}.catalogue label:nth-child(2),.catalogue label:nth-child(3){min-width:100%}.catalogue>button{width:100%}.catalogue>p{margin-top:0}.construction-layout,.construction-bottom{grid-template-columns:1fr}.metrics{grid-template-columns:1fr 1fr;gap:8px}.metric{padding:12px}.metric strong{font-size:29px}.parameter-form{display:grid;grid-template-columns:repeat(3,1fr);align-items:end}.parameter-form input{width:100%}.parameter-form button{font-size:12px}.parameter-form #optimize{grid-column:1/-1}.parameter-form .form-error,.parameter-form .form-hint{grid-column:1/-1}.matrix-wrap{aspect-ratio:1;height:auto;padding:9px 7px}.ext-graph-wrap{height:255px;padding:0 6px}.notes-grid{grid-template-columns:1fr}.source-note{font-size:10px}.card-head{padding:13px 15px}.proof-card,.construction-bottom>.card{padding:18px}.notice{font-size:12px}.scientific-notes{padding-top:22px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
@media(max-width:780px){.editing .pair-controls{display:grid;grid-template-columns:1fr 1fr}.editing .pair-controls>button{grid-column:1/-1}.editing .pair-controls select{min-width:80px}.titles{min-width:0;flex:1}.titles h1{font-size:22px}}
.tabs button span{opacity:1}

/* Keep action feedback close to the editor and preserve the graph's position. */
.editing-feedback{margin:0 0 16px;min-height:52px}
.matrix-actions{padding:0 18px 15px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}.matrix-actions span{font-size:12px;color:var(--muted)}
#matrix-dialog{width:min(1100px,calc(100vw - 24px));height:min(820px,calc(100dvh - 24px));max-width:calc(100vw - 24px);max-height:calc(100dvh - 24px);padding:0;border:1px solid var(--line);border-radius:10px;color:var(--ink);background:#fff;overflow:hidden}
#matrix-dialog[open]{display:flex;flex-direction:column}#matrix-dialog::backdrop{background:rgb(25 31 40 / .42)}
.zoom-heading{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 18px;border-bottom:1px solid var(--line);flex:none}.zoom-heading h2{font-size:25px;margin:0}.zoom-heading button{min-height:44px;flex:none}
#matrix-zoom-help{font-size:13px;line-height:1.55;padding:12px 18px;margin:0;flex:none}
.matrix-zoom-scroll{overflow:auto;touch-action:auto;flex:1;min-height:100px;border-block:1px solid var(--line);background:#fff;padding:0;scroll-padding:44px 0 0 44px}
#matrix-zoom{display:block;max-width:none;flex:none;overflow:visible}
/* Row and column numbers stay in view while the 40 px cells scroll beneath them. */
.zoom-grid{display:grid;grid-template-columns:44px max-content;grid-template-rows:44px max-content;width:max-content;padding:0 8px 8px 0}
.zoom-corner,.zoom-cols,.zoom-rows{position:sticky;background:#fff}
.zoom-corner{top:0;left:0;z-index:3;font-size:10px;line-height:1.25;color:var(--muted);display:flex;align-items:flex-end;padding:0 0 5px 4px;box-shadow:1px 1px 0 var(--line)}
.zoom-cols{top:0;z-index:2;box-shadow:0 1px 0 var(--line)}.zoom-rows{left:0;z-index:2;box-shadow:1px 0 0 var(--line)}
.zoom-cols svg,.zoom-rows svg{display:block}
.zoom-inspector{padding:12px 18px;flex:none}.zoom-inspector .pair-controls{justify-content:flex-start;flex-wrap:wrap}.zoom-inspector select{min-width:68px}.zoom-inspector p{font-size:13px;line-height:1.55;min-height:42px;margin:10px 0 0}
@media(max-width:780px){.editing-feedback{min-height:88px}.matrix-actions{padding:0 15px 14px}.zoom-heading{padding:12px}.zoom-heading h2{font-size:22px}.zoom-inspector{padding:12px}.zoom-inspector .pair-controls>button{font-size:12px;min-width:100px}#matrix-zoom-help{padding:10px 12px}.zoom-inspector p{min-height:60px}}
