/* Appendix — node constraints */
.constraintViz{display:grid;grid-template-columns:.95fr 1.05fr 1.15fr;gap:18px;flex:1;align-items:stretch;margin-top:4px;min-height:0}
.messyPanel,.constraintGate,.cleanPanel{border:1px solid var(--rule);border-radius:24px;background:var(--card);box-shadow:var(--shadow-soft);padding:24px;display:flex;flex-direction:column;position:relative;overflow:hidden}
.messyPanel{background:linear-gradient(180deg,#fff,rgba(239,244,251,.9))}.constraintGate{background:linear-gradient(180deg,#fff,rgba(1,97,224,.04));border-color:rgba(1,97,224,.16)}.cleanPanel{padding:18px 18px 16px;background:linear-gradient(135deg,rgba(1,97,224,.055),rgba(12,205,255,.075),#fff)}
.messyCloud{display:flex;flex-wrap:wrap;gap:10px;margin:auto 0 18px}.messyCloud span{border:1px dashed rgba(18,28,48,.18);border-radius:999px;background:#fff;padding:10px 12px;font:700 14px/1 Inter;color:var(--ink-2);transform:rotate(var(--r,-1deg))}.messyCloud span:nth-child(2n){--r:2deg}.messyCloud span:nth-child(3n){--r:-3deg}
.messyPanel p{font:600 16px/1.4 Inter;color:var(--muted)}
.constraintGate:before,.constraintGate:after{content:'→';position:absolute;top:50%;transform:translateY(-50%);font:900 30px/1 Inter;color:#b5bece}.constraintGate:before{left:-3px}.constraintGate:after{right:-3px}
.gateRule{border:1px solid rgba(18,28,48,.08);border-radius:16px;background:#fff;padding:14px 16px;margin-bottom:11px;box-shadow:0 12px 24px rgba(15,23,42,.035)}.gateRule.good{border-left:5px solid #0161E0}.gateRule.bad{border-left:5px solid #e05656;background:rgba(224,86,86,.045)}
.gateRule b{display:block;font:800 17px/1 Inter;letter-spacing:-.02em;color:var(--ink);margin-bottom:7px}.gateRule em{display:block;font:600 12.8px/1.32 Inter;color:var(--muted);font-style:normal}
.structuredGraph{width:100%;height:138px;flex:0 0 138px;margin:0 0 12px}.structuredGraph path{fill:none;stroke:#0161E0;stroke-width:2.2;stroke-opacity:.34}.structuredGraph .noteEdge{stroke-dasharray:4 5;stroke:#64748b;stroke-opacity:.42}.structuredGraph circle{fill:#fff;stroke:#0161E0;stroke-width:2.2;stroke-opacity:.45}.structuredGraph .core circle{fill:#eff7ff;stroke-opacity:.72}.structuredGraph text{font:800 12px Inter;fill:#121c30;text-anchor:middle}.structuredGraph .typed text:first-of-type{font:800 10px "JetBrains Mono";fill:#0161E0;text-transform:uppercase}.structuredGraph .core text:last-of-type{font-size:17px}.structuredGraph .note rect{fill:#fff;stroke:#cbd5e1;stroke-width:1.2}.structuredGraph .note text{font:800 10px "JetBrains Mono";fill:#64748b;text-transform:uppercase}.structuredGraph .edgeLabel{font:800 9px "JetBrains Mono";fill:#0161E0;text-transform:uppercase;paint-order:stroke;stroke:#fff;stroke-width:5px}
.structureChecks{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:auto}.structureChecks span{font:800 9.3px/1.05 "JetBrains Mono";letter-spacing:.035em;color:var(--blue);border:1px solid rgba(1,97,224,.16);border-radius:999px;background:#fff;padding:8px 8px;text-transform:uppercase;text-align:center;white-space:nowrap;box-shadow:0 8px 18px rgba(15,23,42,.035)}
.constraintTakeaway{margin-top:12px;border:1px solid rgba(1,97,224,.16);border-radius:18px;background:#fff;padding:12px 18px;font:600 16px/1.3 Inter;color:var(--ink-2);box-shadow:var(--shadow-soft)}.constraintTakeaway b{color:var(--ink);font-weight:800}
