/* Sunpatch. © 2026 Robin Metcalfe (Solarise). All rights reserved. */
:root{--paper: #F1EADB;--panel: #FAF6EC;--wash: #E9E0CD;--rule: rgba(56, 44, 24, .13);--rule-strong: rgba(56, 44, 24, .26);--line-edge: #BFAF92;--ink: #29241C;--ink-soft: #4A4234;--mute: #6A6150;--sun: #E39F36;--sun-edge: #AD7115;--sun-tint: #F7E7C3;--sun-ink: #6A4407;--sun-hover: #EBAB4A;--leaf: #4A7639;--leaf-tint: #E2E8CF;--leaf-ink: #2E4F22;--sky: #3C5D97;--sky-tint: #DFE4EE;--sky-ink: #253E69;--soil: #B04D2B;--soil-tint: #F3DECF;--soil-ink: #7C3014;--serif: "Fraunces", Georgia, serif;--ui: "Bricolage Grotesque", "Inter Tight", system-ui, sans-serif;--soft: "SOFT" 100, "WONK" 1;--grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.95' numOctaves='2' seed='7' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .20 0 0 0 0 .15 0 0 0 0 .08 .6 0 0 0 -.25'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23g)'/%3E%3C/svg%3E");--fleck: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='260'%3E%3Cfilter id='f'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.35' numOctaves='1' seed='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .30 0 0 0 0 .22 0 0 0 0 .10 3.2 0 0 0 -2.2'/%3E%3C/filter%3E%3Crect width='260' height='260' filter='url(%23f)'/%3E%3C/svg%3E");--hand-rule: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='6'%3E%3Cpath d='M0 3.1c20-.8 40 .7 60 0s40-.9 60-.1 40 .8 60 .1 40-.8 60 0' fill='none' stroke='%23000' stroke-width='1.2' stroke-linecap='round'/%3E%3C/svg%3E")}*{box-sizing:border-box}html,body{margin:0}body{background-color:var(--paper);background-image:var(--fleck),var(--grain);color:var(--ink);font:400 13px/1.45 var(--ui);font-optical-sizing:auto;-webkit-font-smoothing:antialiased}h1,h2{font-family:var(--serif);font-weight:560;font-variation-settings:var(--soft);letter-spacing:-.012em;margin:0}a{color:var(--sky-ink);text-underline-offset:2px;text-decoration-thickness:1px}.bar{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:10px;padding:10px max(16px,calc(50% - 105mm));background:color-mix(in srgb,var(--paper) 88%,transparent);backdrop-filter:blur(4px);border-bottom:1px solid var(--rule)}.brand{font:600 18px/1 var(--serif);font-variation-settings:var(--soft);color:var(--ink);text-decoration:none}.brand:before{content:"";display:inline-block;width:10px;height:10px;margin-right:7px;border-radius:50%;vertical-align:1px;background:var(--sun);box-shadow:0 0 0 3px color-mix(in srgb,var(--sun) 25%,transparent)}.bar-note{flex:1;font-size:12px;color:var(--mute)}.btn{--face: var(--panel);--edge: var(--line-edge);--fg: var(--ink);--hover: #F4EEE0;display:inline-flex;align-items:center;min-height:36px;padding:0 15px;gap:7px;font:600 13px/1 var(--ui);font-variation-settings:"wdth" 96;color:var(--fg);text-decoration:none;white-space:nowrap;background-color:var(--face);background-image:var(--grain);background-blend-mode:multiply;border:1.5px solid var(--edge);border-radius:6px;box-shadow:0 2px 0 var(--edge);cursor:pointer}.btn:hover{background-color:var(--hover)}.btn:active{transform:translateY(2px);box-shadow:none}.btn:focus-visible{outline:3px solid color-mix(in srgb,var(--sun-edge) 55%,transparent);outline-offset:2px}.btn.sun{--face: var(--sun);--edge: var(--sun-edge);--hover: var(--sun-hover)}.btn:disabled{--face: var(--wash);--fg: var(--mute);box-shadow:none;border-style:dashed;cursor:progress;transform:translateY(2px)}.sheet{width:210mm;height:297mm;overflow:hidden;margin:20px auto 0;padding:13mm 14mm 11mm;background-color:#fffdf7;background-image:var(--grain);background-blend-mode:multiply;box-shadow:0 14px 30px -18px #382c1873,2px 3px #382c1814;display:flex;flex-direction:column}.sheet:last-child{margin-bottom:48px}.flow{display:flex;flex-direction:column;gap:3.4mm;flex:1;min-height:0}.unit{display:flex;flex-direction:column;gap:3.4mm}.book[aria-busy=true]>main.sheet h1{color:var(--mute)}.kicker{margin:0 0 1mm;font:650 10px/1 var(--ui);font-variation-settings:"wdth" 78;text-transform:uppercase;letter-spacing:.09em;color:var(--sun-ink)}.head{display:grid;grid-template-columns:1fr auto;align-items:start;column-gap:6mm}.logo{display:block;width:30mm;height:auto;overflow:visible;margin-top:-1mm}.logo-sun{fill:var(--sun)}.logo-glow{fill:var(--sun);opacity:.25}.logo-word{font:600 22px var(--serif);font-variation-settings:var(--soft);letter-spacing:-.01em;fill:var(--ink)}.head h1{font-size:30px;line-height:1.05;letter-spacing:-.02em;text-wrap:balance}.meta{margin:1.5mm 0 0;font-size:11.5px;color:var(--mute);font-variant-numeric:tabular-nums}.lede{font-size:15px;max-width:34em;color:var(--ink-soft)}.verdict{margin:0;padding:3mm 0 3.5mm;font:italic 450 21px/1.25 var(--serif);font-variation-settings:var(--soft);color:var(--ink);position:relative;text-wrap:pretty}.verdict:before,.verdict:after{content:"";position:absolute;left:0;right:0;height:6px;background:var(--ink);opacity:.28;-webkit-mask:var(--hand-rule) repeat-x left center / 240px 6px;mask:var(--hand-rule) repeat-x left center / 240px 6px}.verdict:before{top:-3px}.verdict:after{bottom:-3px}.top{display:grid;grid-template-columns:90mm 1fr;gap:7mm;align-items:start}.plan{margin:0;display:grid;gap:2mm}.plan-svg{display:block;width:100%;height:auto;border:1px solid var(--rule-strong)}.plan-svg .ground{fill:#f3efe4}.plan-svg .bldg{fill:#d9d2c2;stroke:#8f887a;stroke-width:1}.plan-svg .house{fill:#bdb3a0;stroke:var(--ink);stroke-width:1.4}.plan-svg .shed{fill:#cfc7b6;stroke:#6f6758;stroke-width:1}.plan-svg .patch{fill:none;stroke:#6f6758;stroke-width:.8;stroke-dasharray:3 2}.plan-svg .area{fill:none;stroke:#29241c59;stroke-width:.8;stroke-dasharray:2 2}.plan-svg .wall{fill:none;stroke:var(--ink);stroke-width:3}.plan-svg .tree circle{fill:#4a76391a;stroke:var(--leaf);stroke-width:1.1;stroke-dasharray:4 3}.plan-svg .tree .trunk{fill:var(--leaf);stroke:none}.plan-svg .boundary{fill:none;stroke:var(--ink);stroke-width:2.4;stroke-linejoin:round}.plan-svg .lbl{font:600 19px var(--ui);fill:var(--ink);letter-spacing:.02em}.plan-svg .spot-halo{fill:none;stroke:#fffdf7;stroke-width:6}.plan-svg .spot{fill:none;stroke:var(--ink);stroke-width:2.4}.plan-svg .door{fill:var(--sky);stroke:#fffdf7;stroke-width:2}.plan-svg .north path{fill:var(--ink)}.plan-svg .north text{font:700 20px var(--ui);fill:var(--ink)}.plan-svg .scale text{font:600 17px var(--ui);fill:var(--ink)}.plan-svg .scale-back{fill:#fffdf7d1}.plan-svg .scale .ink{fill:var(--ink)}.plan-svg .scale .paper{fill:#fffdf7;stroke:var(--ink);stroke-width:1}.plan figcaption{font-size:10.5px;line-height:1.35;color:var(--mute)}.ramp{display:flex;justify-content:space-between;height:15px;margin-bottom:1.5mm;padding:0 5px;font:600 9.5px/15px var(--ui);font-variant-numeric:tabular-nums}.ramp i{font-style:normal;color:#fff}.ramp i:not(:first-child){color:var(--ink)}.key{white-space:nowrap;margin-left:6px}.key i{display:inline-block;width:9px;height:9px;margin-right:4px;vertical-align:-1px}.k-spot{border:2px solid var(--ink);border-radius:50%}.k-door{background:var(--sky)}.facts{display:grid;gap:3.5mm}.days{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}.days :is(th,td){padding:1.6mm 0 1.6mm 2mm;text-align:right}.days thead th{font:500 10px/1.15 var(--ui);color:var(--mute);vertical-align:bottom;padding-top:0}.days tbody th{padding-left:0;text-align:left;font-weight:500;color:var(--ink-soft);white-space:nowrap}.days tbody tr{border-top:1px solid var(--rule-strong)}.days td{color:var(--mute);font-size:13px}.days td:first-of-type{font:600 17px/1 var(--ui);color:var(--ink)}.note{margin:-2mm 0 0;font-size:10.5px;color:var(--mute)}.fact{display:grid;gap:1mm}.fact-k{font:650 9.5px/1 var(--ui);font-variation-settings:"wdth" 78;text-transform:uppercase;letter-spacing:.08em;color:var(--mute)}.fact-v{font:560 24px/1.05 var(--serif);font-variation-settings:var(--soft)}.fact-s{font-size:11px;color:var(--mute)}.split{display:flex;height:22px;border-radius:3px;overflow:hidden;font:600 10.5px/22px var(--ui)}.split span{min-width:0;padding:0 7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.split .am{background:var(--sky-tint);color:var(--sky-ink)}.split .pm{background:var(--sun-tint);color:var(--sun-ink);text-align:right}.line{margin:0;font-size:12.5px;line-height:1.4;color:var(--ink-soft)}.line b{color:var(--ink)}.months h2,.means h2{font-size:16px;margin-bottom:1.5mm}.months h2 span{font:400 10.5px/1.3 var(--ui);color:var(--mute);margin-left:6px;letter-spacing:0}.months-svg{display:block;width:100%;height:auto}.months-svg text{font:400 10.5px var(--ui);fill:var(--mute)}.months-svg .val{font-weight:600;fill:var(--ink);font-size:10px}.months-svg .grid{stroke:var(--rule)}.months-svg .day{fill:#ece5d4}.months-svg .mean{fill:var(--sun)}.months-svg .best{stroke:var(--ink);stroke-width:1.6}.means p{margin:0;font:400 13.5px/1.45 var(--serif);font-variation-settings:"SOFT" 50;color:var(--ink);max-width:52em;text-wrap:pretty}.plantings h2{font-size:16px;margin-bottom:1.5mm}.plantings h2 span{font:400 10.5px/1.3 var(--ui);color:var(--mute);margin-left:6px;letter-spacing:0}.plantings ul{margin:0;padding:0;list-style:none;columns:2;column-gap:8mm;font:400 12.5px/1.45 var(--ui);color:var(--ink-soft)}.plantings li{break-inside:avoid;padding:.6mm 0}.plantings li i{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:1px}.plantings li b{color:var(--ink);font-weight:600}.method{padding-top:3mm;border-top:1px solid var(--rule-strong);display:grid;gap:1.2mm}.method p{margin:0;font-size:9.5px;line-height:1.4;color:var(--mute)}.method b{color:var(--ink-soft);font-weight:600}.method a{color:inherit}.method .made{display:flex;flex-wrap:wrap;gap:0 7px}.method .made span:before{content:"\b7";margin-right:7px}.method .estimates{color:var(--ink-soft)}.signoff{display:flex;align-items:center;gap:0 7px;margin-top:.8mm!important;padding-top:1.6mm;border-top:1px solid var(--rule)}.signoff a{margin-left:auto}.signoff b{font:600 11px/1 var(--serif);font-variation-settings:var(--soft);color:var(--ink)}.signoff span+span:before{content:"\b7";margin-right:7px}.signoff-mark{width:7px;height:7px;border-radius:50%;background:var(--sun);box-shadow:0 0 0 2px color-mix(in srgb,var(--sun) 25%,transparent)}.signoff-mark+b+span:before{content:"\b7";margin-right:7px}.runhead{display:flex;justify-content:space-between;gap:6mm;margin:-3mm 0 4mm;padding-bottom:1.6mm;border-bottom:1px solid var(--rule);font:600 9.5px/1 var(--ui);font-variation-settings:"wdth" 82;letter-spacing:.06em;text-transform:uppercase;color:var(--mute);font-variant-numeric:tabular-nums}.runhead span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kicker .pageno{color:var(--mute)}.cont{margin:0 0 -1mm;font:650 9.5px/1 var(--ui);font-variation-settings:"wdth" 78;text-transform:uppercase;letter-spacing:.08em;color:var(--mute)}.pending{flex-direction:row;align-items:center;gap:8px;padding:3mm 0;font-size:12px;color:var(--mute)}.spin{width:12px;height:12px;border-radius:50%;border:2px solid var(--rule-strong);border-top-color:var(--sun-edge);animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}@media(prefers-reduced-motion:reduce){.spin{animation:none}}.date-chip{display:inline-flex;align-items:center;height:1.5em;padding:0 .48em;border-radius:999px;vertical-align:.06em;background:#c8412f;color:#fff;box-shadow:inset 0 -1px #a73221;font:600 .9em/1 var(--ui);white-space:nowrap;-webkit-print-color-adjust:exact;print-color-adjust:exact}.days tbody th .date-chip{font-size:12px}h2.sec{font-size:22px;line-height:1.1;letter-spacing:-.015em}.sec-lede{margin:-2mm 0 0;font-size:11px;line-height:1.4;color:var(--mute);max-width:60em}.sec-ramp{width:92mm;margin-top:-1mm}.sec-ramp .ramp{margin:0}.sec-words,.season-words{margin:0;font:400 13px/1.45 var(--serif);font-variation-settings:"SOFT" 50;color:var(--ink);max-width:56em;text-wrap:pretty}.sec-note{margin:-1.6mm 0 0;font-size:10.5px;line-height:1.4;color:var(--mute)}h3{margin:0;font:560 15px/1.2 var(--serif);font-variation-settings:var(--soft);letter-spacing:-.01em}h3 span:not(.letter){font:400 10.5px/1.3 var(--ui);color:var(--mute);margin-left:6px;letter-spacing:0}h3.sub{margin-top:1mm}.tbl{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;font-size:12px}.tbl :is(th,td){padding:1.3mm 0 1.3mm 2.4mm;text-align:right;vertical-align:baseline}.tbl thead th{font:500 10px/1.2 var(--ui);color:var(--mute);vertical-align:bottom;padding-top:0}.tbl thead .date-chip{font-size:10px}.tbl tbody tr{border-top:1px solid var(--rule-strong)}.tbl tbody th{padding-left:0;text-align:left;font-weight:500;color:var(--ink)}.tbl tbody th small{display:block;font-size:9.5px;font-weight:400;color:var(--mute)}.tbl td{color:var(--ink-soft)}.tbl .l{text-align:left}.tbl thead th{white-space:nowrap}.tbl thead th.l:first-child{padding-left:0}.tbl td.letter{padding-left:0;width:5mm;text-align:left;font-weight:700;color:var(--ink)}.tbl .letter+th{padding-left:1mm}.season{display:grid;grid-template-columns:38mm 1fr;gap:6mm;padding-top:3mm;border-top:1px solid var(--rule-strong);align-items:start}.thumb{margin:0}.season-text{display:grid;gap:1.6mm}.season-text p{margin:0}.season-figs{font-size:12px;color:var(--ink-soft)}.season-figs .fig{font:560 22px/1 var(--serif);font-variation-settings:var(--soft);color:var(--ink);margin-right:3px}.season-figs b:not(.fig){color:var(--ink)}.season-figs .sep{display:inline-block;width:6mm}.season-stats{display:flex;flex-wrap:wrap;gap:0 6mm;font-size:12px;color:var(--ink-soft)}.season-stats b{color:var(--ink)}.season-shade{font-size:11.5px;color:var(--ink-soft)}.season .split{height:18px;line-height:18px;font-size:10px}.parts-top{display:grid;grid-template-columns:66mm 1fr;gap:6mm;align-items:start}.plan.mid .plan-svg .boundary{stroke-width:3.2}.plan-svg .part-line{fill:none;stroke:var(--ink);stroke-width:1.8;stroke-dasharray:6 4;opacity:.75}.plan-svg .part-letter{font:700 34px var(--ui);fill:var(--ink);paint-order:stroke;stroke:#fffdf7;stroke-width:7px;stroke-linejoin:round}.part{padding-top:2mm;border-top:1px solid var(--rule);display:grid;gap:.8mm}.part p,.grow p{margin:0;font-size:11.5px;line-height:1.42;color:var(--ink-soft)}.part b{color:var(--ink);font-weight:600}h3 .letter{display:inline-block;min-width:5mm;font:700 13px/1 var(--ui);color:var(--ink)}.plan-svg.small .boundary{stroke-width:5}.plan-svg.small .house{stroke-width:2.4}.plan-svg.small .bldg,.plan-svg.small .shed{stroke-width:2}.plan-svg.small .tree circle{stroke-width:2.4;stroke-dasharray:7 5}.grow{padding-top:2mm;border-top:1px solid var(--rule);display:grid;gap:1mm}.grow ul{margin:.4mm 0 0;padding:0;list-style:none;display:grid;gap:.8mm;font-size:11.5px;line-height:1.4;color:var(--ink-soft)}.grow li b{color:var(--ink);font-weight:600}.grow .kind{font-size:10px;color:var(--mute);margin-right:3px}.grow-light{color:var(--ink)!important}.solar-row{display:grid;grid-template-columns:repeat(3,1fr);gap:6mm}.sure-tbl td.l,.sure-tbl th{font-size:11.5px}.sure-tbl td.l:last-child{color:var(--mute)}.firm{margin:0;font:400 13px/1.45 var(--serif);font-variation-settings:"SOFT" 50;color:var(--ink)}.firm b{font-family:var(--ui);font-weight:600;font-size:12px}.signoff a small{color:var(--mute);margin-left:4px}.picture{margin:0}.picture img{display:block;width:100%;height:auto;border:1px solid var(--rule-strong)}.picture figcaption{margin-top:1.4mm;font-size:10.5px;color:var(--mute)}.sheet[data-fit] .flow,.sheet[data-fit] .unit{gap:2.4mm}.sheet[data-fit] .verdict{font-size:19px;padding:2.4mm 0 2.8mm}.sheet:is([data-fit="2"],[data-fit="3"]) :is(.means p,.sec-words,.season-words){font-size:12px}.sheet:is([data-fit="2"],[data-fit="3"]) .tbl{font-size:11px}.sheet[data-fit="3"] .months-svg{max-height:40mm}.sheet[data-fit="3"] .method p{font-size:9px}@media screen and (max-width:800px){.sheet{width:auto;height:auto;overflow:visible;margin:0;padding:20px 16px 28px;box-shadow:none}.top,.parts-top,.season{grid-template-columns:1fr}.thumb{max-width:60mm}.bar{padding:10px 16px;flex-wrap:wrap}.bar-note{flex-basis:100%;order:3}.sheet :is(p,li,td,th,dd,dt,figcaption,.sec-words,.season-words){font-size:max(15px,1em)!important;line-height:1.45}.sheet .method p{font-size:13px!important}.tbl{display:block;overflow-x:auto}}@page{size:A4;margin:0}@media print{body{background:none}.no-print{display:none!important}.sheet{width:210mm;height:297mm;margin:0;box-shadow:none;overflow:hidden;break-after:page;background:#fff;-webkit-print-color-adjust:exact;print-color-adjust:exact}.sheet:last-child{break-after:auto;margin:0}a{color:inherit;text-decoration:none}}
