:root{--ink:#0f1c2e;--ink-2:#24344a;--muted:#5b6b80;--muted-2:#7a8899;--line:#d8dfe7;--line-strong:#b6c2d0;--bg:#fff;--bg-soft:#f5f7fa;--bg-soft-2:#eef2f6;--accent:#1c5ccc;--accent-dark:#16479c;--accent-soft:#eaf1fd;--ok:#16653f;--ok-bg:#eaf6ef;--warn:#8a5300;--warn-bg:#fff7e6;--warn-line:#f0d9a8;--err:#a5231c;--err-bg:#fdeceb;--err-line:#f2c2be;--radius:5px;--shadow:0 1px 2px #0f1c2e12, 0 1px 1px #0f1c2e0a;--shadow-lift:0 2px 6px #0f1c2e17;--font:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--dim-color:#46536b}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font-family:var(--font);text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.55}h1,h2,h3,h4{color:var(--ink);letter-spacing:-.011em;margin:0 0 .5em;line-height:1.2}h1{font-size:clamp(1.6rem,1.2rem + 1.6vw,2.15rem);font-weight:700}h2{margin-top:1.6em;font-size:1.35rem;font-weight:650}h3{margin-top:1.35em;font-size:1.06rem;font-weight:650}p{margin:0 0 1em}a{color:var(--accent-dark);text-underline-offset:2px;text-decoration-thickness:1px}a:hover{color:var(--accent)}ul,ol{padding-left:1.25em}li{margin-bottom:.4em}code,kbd{font-family:var(--mono);background:var(--bg-soft);border:1px solid var(--line);border-radius:3px;padding:.1em .35em;font-size:.9em}hr{border:0;border-top:1px solid var(--line);margin:2rem 0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.wrap{width:100%;max-width:1200px;margin-inline:auto;padding-inline:20px}.site-header{border-bottom:1px solid var(--line);background:#fff}.site-header .wrap{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;min-height:60px;display:flex}.brand{color:var(--ink);letter-spacing:-.01em;align-items:center;gap:10px;font-size:.98rem;font-weight:700;text-decoration:none;display:inline-flex}.brand:hover{color:var(--ink);text-decoration:none}.brand-mark{flex:none;width:26px;height:26px;display:block}.site-nav{flex-wrap:wrap;gap:4px;display:flex}.site-nav a{color:var(--ink-2);border-radius:4px;padding:6px 10px;font-size:.88rem;font-weight:550;text-decoration:none;display:inline-block}.site-nav a:hover{background:var(--bg-soft);color:var(--ink)}.site-nav a[aria-current=page]{background:var(--accent-soft);color:var(--accent-dark)}main{padding-block:26px 56px;display:block}.site-footer{border-top:1px solid var(--line);background:var(--bg-soft);color:var(--muted);padding-block:28px;font-size:.85rem}.site-footer p{margin:0 0 .6em}.footer-cols{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:24px;display:grid}.footer-cols h2{text-transform:uppercase;letter-spacing:.07em;color:var(--ink-2);margin:0 0 .6em;font-size:.78rem}.footer-cols ul{margin:0;padding:0;list-style:none}.footer-cols li{margin-bottom:.35em}.page-head{max-width:78ch;margin-bottom:22px}.page-head .eyebrow{letter-spacing:.09em;text-transform:uppercase;color:var(--accent-dark);margin-bottom:8px;font-size:.74rem;font-weight:700;display:inline-block}.page-head p.lede{color:var(--muted);max-width:72ch;font-size:1.02rem}.panel{border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);background:#fff}.panel+.panel{margin-top:18px}.panel-head{border-bottom:1px solid var(--line);background:var(--bg-soft);border-radius:var(--radius) var(--radius) 0 0;justify-content:space-between;align-items:baseline;gap:12px;padding:11px 16px;display:flex}.panel-head h2,.panel-head h3{letter-spacing:.07em;text-transform:uppercase;color:var(--ink-2);margin:0;font-size:.78rem;font-weight:700}.panel-head .panel-meta{color:var(--muted);font-size:.76rem}.panel-body{padding:16px}.planner{grid-template-columns:minmax(0,396px) minmax(0,1fr);grid-template-areas:"form preview""form results""schedule schedule""extras extras";align-items:start;gap:20px;display:grid}.planner>*{min-width:0}.planner-form{grid-area:form}.planner-results{grid-area:results;align-content:start;gap:18px;display:grid}.planner-preview{grid-area:preview}.planner-schedule{grid-area:schedule}.planner-extras{grid-area:extras;gap:18px;display:grid}@media (width<=960px){.planner{grid-template-columns:minmax(0,1fr);grid-template-areas:"form""results""preview""schedule""extras"}}.field-group{border:0;margin:0;padding:0}.field-group+.field-group{border-top:1px solid var(--line);margin-top:20px;padding-top:18px}.field-group>legend,.group-label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0 0 12px;padding:0;font-size:.75rem;font-weight:700}.field{margin-bottom:13px}.field:last-child{margin-bottom:0}.field>label,.field-label{color:var(--ink-2);margin-bottom:4px;font-size:.82rem;font-weight:600;display:block}.optional{color:var(--muted-2);font-size:.76rem;font-weight:500}.input-wrap{align-items:center;display:flex;position:relative}.input-wrap input,.input-wrap select{width:100%}.field input[type=text],.field input[type=number],.field select{height:38px;font:inherit;font-variant-numeric:tabular-nums;color:var(--ink);border:1px solid var(--line-strong);appearance:none;background:#fff;border-radius:4px;padding:0 10px;font-size:.95rem;box-shadow:inset 0 1px 1px #0f1c2e0a}.field select{background-image:linear-gradient(45deg, transparent 50%, var(--ink-2) 50%), linear-gradient(135deg, var(--ink-2) 50%, transparent 50%);background-position:calc(100% - 16px) 16px,calc(100% - 11px) 16px;background-repeat:no-repeat;background-size:5px 5px,5px 5px;padding-right:30px}.field input:hover,.field select:hover{border-color:var(--muted-2)}.field input:focus,.field select:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px #1c5ccc29}.field .unit-suffix{color:var(--muted);pointer-events:none;font-size:.8rem;position:absolute;right:10px}.field input.has-suffix{padding-right:40px}.field .hint{color:var(--muted);margin:4px 0 0;font-size:.75rem;line-height:1.4}.field .converted{color:var(--muted-2);font-variant-numeric:tabular-nums;min-height:1.1em;margin:4px 0 0;font-size:.75rem}.field.invalid input,.field.invalid select{border-color:var(--err);background:var(--err-bg)}.field .field-error{color:var(--err);min-height:0;margin:4px 0 0;font-size:.76rem;font-weight:600}.field-error:empty{display:none}.field-row{grid-template-columns:1fr 1fr;gap:10px;display:grid}.field-row .field{margin-bottom:0}.segmented{border:1px solid var(--line-strong);background:#fff;border-radius:4px;display:flex;overflow:hidden}.segmented label{text-align:center;color:var(--ink-2);cursor:pointer;user-select:none;flex:1 1 0;padding:8px 6px;font-size:.85rem;font-weight:600;position:relative}.segmented label+label{border-left:1px solid var(--line)}.segmented input{opacity:0;cursor:pointer;position:absolute;inset:0}.segmented label:has(input:checked){background:var(--accent-soft);color:var(--accent-dark);box-shadow:inset 0 -2px 0 var(--accent)}.segmented label:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:-2px}.btn{height:38px;font:inherit;color:var(--ink-2);border:1px solid var(--line-strong);box-shadow:var(--shadow);cursor:pointer;white-space:nowrap;background:#fff;border-radius:4px;justify-content:center;align-items:center;gap:7px;padding:0 14px;font-size:.87rem;font-weight:600;text-decoration:none;display:inline-flex}.btn:hover{border-color:var(--muted-2);color:var(--ink);background:var(--bg-soft)}.btn:active{transform:translateY(1px)}.btn-primary{color:#fff;background:var(--accent);border-color:var(--accent)}.btn-primary:hover{background:var(--accent-dark);border-color:var(--accent-dark);color:#fff}.btn-block{width:100%;height:44px;font-size:.95rem}.btn svg{flex:none}.toolbar{flex-wrap:wrap;gap:8px;display:flex}.actions{gap:10px;margin-top:18px;display:grid}.actions .hint{color:var(--muted);text-align:center;margin:0;font-size:.76rem}.results{gap:18px;display:grid}.hero-stats{background:var(--line);border:1px solid var(--line);border-radius:var(--radius);grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;display:grid;overflow:hidden}@media (width<=520px){.hero-stats{grid-template-columns:minmax(0,1fr)}}.hero-stat{background:#fff;padding:14px 16px}.hero-stat .stat-label{letter-spacing:.07em;text-transform:uppercase;color:var(--muted);margin-bottom:4px;font-size:.72rem;font-weight:700;display:block}.hero-stat .stat-value{font-variant-numeric:tabular-nums;letter-spacing:-.02em;color:var(--ink);font-size:clamp(1.5rem,1.2rem + 1vw,1.85rem);font-weight:700;line-height:1.13;display:block}.hero-stat .stat-hint{color:var(--muted);margin-top:3px;font-size:.73rem;display:block}.hero-stat.is-alert .stat-value{color:var(--err)}.detail-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:0 26px;margin:0;display:grid}.detail-grid>div{border-bottom:1px dashed var(--line);grid-template-columns:1fr auto;align-items:baseline;gap:0 12px;padding:8px 0;display:grid}.detail-grid dt{color:var(--muted);margin:0;font-size:.82rem}.detail-grid dd{font-variant-numeric:tabular-nums;color:var(--ink);text-align:right;margin:0;font-size:.92rem;font-weight:600}.detail-grid .detail-hint{color:var(--muted-2);text-align:left;grid-column:1/-1;padding-top:2px;font-size:.72rem;font-weight:400}.badge{letter-spacing:.02em;border-radius:999px;align-items:center;gap:5px;padding:2px 8px;font-size:.74rem;font-weight:700;display:inline-flex}.badge-ok{color:var(--ok);background:var(--ok-bg);border:1px solid #bfe0cd}.badge-over{color:var(--err);background:var(--err-bg);border:1px solid var(--err-line)}.notice{border:1px solid;border-radius:4px;padding:11px 14px;font-size:.85rem}.notice ul{margin:0;padding-left:1.1em}.notice li:last-child{margin-bottom:0}.notice-warn{background:var(--warn-bg);border-color:var(--warn-line);color:var(--warn)}.notice-error{background:var(--err-bg);border-color:var(--err-line);color:var(--err)}.notice-info{background:var(--accent-soft);color:var(--accent-dark);border-color:#c8d9f7}.notice strong{text-transform:uppercase;letter-spacing:.06em;margin-bottom:3px;font-size:.78rem;display:block}.figure{margin:0}.svg-holder{border:1px solid var(--line);border-radius:var(--radius);background:linear-gradient(#fbfcfe,#fff) padding-box padding-box,repeating-linear-gradient(0deg,#f0f3f7 0 1px,#0000 1px 24px) border-box;padding:8px 10px;overflow-x:auto}.rail-svg{width:100%;max-width:100%;height:auto;display:block}.svg-stairs{fill:#eef2f7;stroke:#8c9aac;stroke-width:1.1px}.svg-floor{stroke:var(--ink-2);stroke-width:1.6px}.svg-floor-line{stroke:#b9c4d1;stroke-width:1px}.svg-baluster{fill:#24344a}.svg-baluster.round{stroke:#24344a;stroke-linecap:round}.svg-rail{stroke:#0f1c2e;stroke-linecap:butt}.svg-post{fill:#c9d3e0;stroke:#46536b;stroke-width:1.1px}.svg-center-tick{stroke:var(--err);stroke-width:1.6px}.svg-baluster-index{fill:#5b6b80;font-variant-numeric:tabular-nums;font-size:10px;font-weight:700}.svg-dim{stroke:#46536b;stroke-width:.9px}.svg-witness{stroke:#b6c2d0;stroke-width:.8px;stroke-dasharray:3 3}.svg-dim-label{fill:#24344a;font-variant-numeric:tabular-nums;font-size:11.5px;font-weight:600}.svg-note{fill:#5b6b80;font-size:11px;font-weight:600}.legend{color:var(--muted);grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:6px 16px;margin:12px 0 0;padding:0;font-size:.76rem;list-style:none;display:grid}.legend li{align-items:flex-start;gap:8px;margin:0;display:flex}.legend .swatch{border:1px solid var(--line-strong);background:#fff;border-radius:2px;flex:none;width:14px;height:14px;margin-top:2px}.legend .swatch-baluster{background:#24344a;border-color:#24344a}.legend .swatch-tick{background:#fff;position:relative}.legend .swatch-tick:after{content:"";background:#a5231c;height:2px;position:absolute;top:5px;left:2px;right:2px}.legend .swatch-rail{background:#0f1c2e;border-color:#0f1c2e}.legend .swatch-post{background:#c9d3e0}.legend .swatch-stair{background:repeating-linear-gradient(45deg,#eef2f7 0 3px,#dbe1ea 3px 4px)}.legend .swatch-dim{border-style:dashed;border-color:#46536b}.legend strong{color:var(--ink-2);font-weight:600}.toolbar-row{border-bottom:1px solid var(--line);background:#fff;gap:8px;padding:12px 16px;display:grid}.copy-status{color:var(--ok);min-height:0;margin:0;font-size:.78rem}.copy-status:empty{display:none}.svg-empty{text-align:center;color:var(--muted);padding:40px 20px}.legend-title{color:var(--muted);margin:10px 0 0;font-size:.76rem}.article-wrap{max-width:780px}.article-wrap .content{max-width:100%}.content figure{margin:1.6em 0}.content img{border:1px solid var(--line);background:#fff;border-radius:4px;width:100%;max-width:100%;height:auto;display:block}.content figcaption{color:var(--muted);margin-top:8px;font-size:.82rem;line-height:1.45}.print-title{letter-spacing:-.01em;margin:0 0 2px;font-size:1.5rem;font-weight:700}.print-sub{color:var(--muted);margin:0;font-size:.85rem}.table-scroll{border-top:1px solid var(--line);-webkit-overflow-scrolling:touch;overflow-x:auto}table.schedule{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:.88rem}table.schedule caption{caption-side:top;text-align:left;color:var(--muted);border-bottom:1px solid var(--line);background:#fff;padding:10px 16px;font-size:.74rem;line-height:1.45}table.schedule th{z-index:1;background:var(--bg-soft);text-align:right;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line-strong);white-space:nowrap;padding:8px 14px;font-size:.71rem;font-weight:700;position:sticky;top:0}table.schedule th:first-child,table.schedule td:first-child{text-align:left;padding-left:16px}table.schedule td{text-align:right;color:var(--ink-2);white-space:nowrap;border-bottom:1px solid #e9eef3;padding:7px 14px}table.schedule td.is-center strong{color:var(--ink);font-weight:700}table.schedule tbody tr:nth-child(2n){background:#fafbfd}table.schedule tbody tr:hover{background:var(--accent-soft)}table.schedule tbody tr:last-child td{border-bottom:0}@media (width<=620px){table.schedule th:nth-child(4),table.schedule td:nth-child(4),table.schedule th:nth-child(5),table.schedule td:nth-child(5){display:none}}.info-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;display:grid}.kv-list{margin:0;font-size:.86rem}.kv-list>div{border-bottom:1px dashed var(--line);justify-content:space-between;gap:14px;padding:5px 0;display:flex}.kv-list>div:last-child{border-bottom:0}.kv-list dt{color:var(--muted);margin:0}.kv-list dd{font-variant-numeric:tabular-nums;text-align:right;margin:0;font-weight:600}.assumption-list{color:var(--ink-2);margin:0;padding-left:1.1em;font-size:.84rem}.content{margin-top:40px;max-width:78ch;margin-inline:auto}.table-wrap{-webkit-overflow-scrolling:touch;margin:1.2em 0;overflow-x:auto}.table-wrap>table{margin:0}.content h2{margin-top:2em;padding-top:.2em}.content h3{margin-top:1.6em}.content p,.content li{color:#1f2c3d}.content table{border-collapse:collapse;width:100%;margin:1.2em 0;font-size:.88rem}.content th,.content td{border:1px solid var(--line);text-align:left;vertical-align:top;padding:7px 10px}.content th{background:var(--bg-soft);text-transform:uppercase;letter-spacing:.04em;color:var(--ink-2);font-size:.8rem;font-weight:650}.content td.num,.content th.num{text-align:right;font-variant-numeric:tabular-nums}.callout{border-left:3px solid var(--accent);background:var(--accent-soft);margin:1.4em 0;padding:12px 16px;font-size:.92rem}.callout p:last-child{margin-bottom:0}.disclaimer{border:1px solid var(--warn-line);background:var(--warn-bg);color:#5f3c00;border-radius:4px;margin-top:28px;padding:14px 16px;font-size:.84rem;line-height:1.5}.disclaimer strong{color:#4a2e00}.faq{margin-top:1.5em}.faq details{border-bottom:1px solid var(--line);padding:12px 0}.faq summary{cursor:pointer;color:var(--ink);justify-content:space-between;align-items:baseline;gap:16px;font-size:.98rem;font-weight:650;list-style:none;display:flex}.faq summary::-webkit-details-marker{display:none}.faq summary:after{content:"+";color:var(--muted);font-size:1.1rem;font-weight:400;line-height:1}.faq details[open] summary:after{content:"–"}.faq details>div{color:#1f2c3d;padding-top:8px;font-size:.93rem}.faq details>div p:last-child{margin-bottom:0}.breadcrumbs{color:var(--muted);margin-bottom:16px;font-size:.79rem}.breadcrumbs ol{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.breadcrumbs li{margin:0}.breadcrumbs li+li:before{content:"/";color:var(--line-strong);margin-right:6px}.breadcrumbs a{color:var(--muted)}.formula{font-family:var(--mono);background:var(--bg-soft);border:1px solid var(--line);white-space:pre-wrap;border-radius:4px;margin:1em 0;padding:12px 14px;font-size:.86rem;line-height:1.7;overflow-x:auto}.example-table{font-variant-numeric:tabular-nums}.step-list{counter-reset:step;margin:1.2em 0;padding:0;list-style:none}.step-list>li{margin-bottom:1.1em;padding-left:38px;position:relative}.step-list>li:before{counter-increment:step;content:counter(step);background:var(--accent-soft);width:26px;height:26px;color:var(--accent-dark);border-radius:50%;place-items:center;font-size:.8rem;font-weight:700;display:grid;position:absolute;top:1px;left:0}.step-list h3{margin:0 0 .25em;font-size:1rem}.stack-sm>*+*{margin-top:10px}.muted{color:var(--muted)}.small{font-size:.82rem}.mono{font-family:var(--mono)}.nowrap{white-space:nowrap}.print-only{display:none}@media print{@page{size:letter portrait;margin:.5in}html,body{font-size:10pt;line-height:1.4;color:#000!important;background:#fff!important}.no-print,.site-header,.site-nav,.site-footer,form,.toolbar,.actions,.notice-info{display:none!important}.print-only{display:block!important}main{padding:0!important}.wrap{max-width:none;padding:0!important}.planner{display:block!important}.panel{break-inside:auto;margin-bottom:8pt;box-shadow:none!important;border:1px solid #999!important}.panel-head{break-after:avoid}.kv-list{columns:2;column-gap:22pt}.kv-list>div{break-inside:avoid}.panel-head{-webkit-print-color-adjust:exact;print-color-adjust:exact;background:#f2f2f2!important}.hero-stats{background:#999!important;border:1px solid #999!important}.hero-stat{padding:6pt 8pt}.hero-stat .stat-value{font-size:15pt}.hero-stats,.detail-grid,.info-grid{break-inside:avoid}.table-scroll{border-top:0;max-height:none!important;overflow:visible!important}table.schedule{font-size:8.5pt}table.schedule th{color:#000;-webkit-print-color-adjust:exact;print-color-adjust:exact;border-bottom:1px solid #666;position:static;background:#eee!important}table.schedule td{color:#000;border-bottom:1px solid #ddd;padding:2.5pt 8pt}table.schedule tbody tr:nth-child(2n){-webkit-print-color-adjust:exact;print-color-adjust:exact;background:#f7f7f7!important}table.schedule caption{color:#333;border-bottom:1px solid #999}thead{display:table-header-group}tr{break-inside:avoid}.results{display:block}.results>*+*{margin-top:8pt}.svg-holder{border:1px solid #999;width:fit-content;margin-inline:auto;padding:0;background:#fff!important}.rail-svg{width:auto;max-width:100%;max-height:5.4in;margin:0 auto}.svg-stairs{fill:#f0f0f0!important;stroke:#333!important}.svg-post{fill:#ddd!important;stroke:#333!important}.svg-baluster{fill:#111!important}.svg-baluster.round,.svg-center-tick{stroke:#111!important}.legend{color:#333;font-size:7.5pt}.print-sheet-head{border-bottom:2px solid #000;margin-bottom:10pt;padding-bottom:6pt}.print-sheet-head h1{margin:0 0 2pt;font-size:16pt}.print-sheet-head p{color:#444;margin:0;font-size:8.5pt}.print-meta{color:#333;justify-content:space-between;gap:12pt;margin-top:4pt;font-size:8.5pt;display:flex}.disclaimer{page-break-inside:avoid;font-size:8pt;color:#000!important;background:#fff!important;border:1px solid #999!important}a{color:#000;text-decoration:none}.page-break{break-before:page}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important}}
