:root{--bg:#fbf8f3;--bg-overlay:#f5f0e8eb;--text:#2c2c2c;--heading:#1a1a1a;--rose:#c4857a;--rose-light:#c4857a66;--sage:#8fa88a;--sage-dark:#6b8a65;--sage-light:#8fa88a66;--ink:#566c8f;--gold:#d4a853;--postcard-bg:#faf7f0;--font-heading:"Cormorant Garamond", Georgia, serif;--font-body:"EB Garamond", Georgia, serif;--font-accent:"Caveat", cursive;--max-width:820px;--hero-max-width:1050px;--section-gap:3rem;--content-padding:clamp(1.5rem, 5vw, 2rem)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font-body);color:var(--text);background-color:var(--bg);background-image:repeating-linear-gradient(0deg,#0000,#0000 3px,#00000004 3px 4px),repeating-linear-gradient(90deg,#0000,#0000 5px,#00000003 5px 6px);font-size:1.05rem;line-height:1.75}body:before{content:"";background:var(--bg-overlay);pointer-events:none;z-index:-1;position:fixed;inset:0}a{color:var(--ink);text-underline-offset:3px;text-decoration-color:#566c8f4d;transition:color .3s}a:hover{color:var(--rose)}img{max-width:100%;display:block}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-to-content{z-index:9999;background:var(--heading);color:var(--bg);font-family:var(--font-accent);border-radius:0 0 4px;padding:.75rem 1.5rem;font-size:1.1rem;text-decoration:none;position:absolute;top:0;left:-9999px}.skip-to-content:focus{left:0}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.postcard-trigger{animation:none!important}.reveal-element,.reveal-slide-left,.reveal-scale,.reveal-quiet,.reveal-statement,.reveal-farewell{opacity:1!important;transform:none!important}.doodle-stroke .draw-path{stroke-dashoffset:0!important}}.doodle-stroke .draw-path{stroke-dasharray:var(--path-length,200);stroke-dashoffset:var(--path-length,200);transition:stroke-dashoffset}.doodle-stroke.stroke-animate .draw-path{stroke-dashoffset:0;transition:stroke-dashoffset 1.2s cubic-bezier(.4,0,.2,1)}.doodle-stroke:not(.stroke-animate) .draw-path{transition-delay:0s}.doodle-stroke.stroke-animate .dog-legs{transition-delay:.3s}.doodle-stroke.stroke-animate .dog-heart{transition-delay:.6s}.doodle-divider{opacity:.5;width:100%;max-width:80%;height:auto;margin:0 auto;display:block}svg.doodle-divider .draw-path{transition:stroke-dashoffset .8s cubic-bezier(.4,0,.2,1)}.divider-first .draw-path{stroke-width:1.5px;opacity:.5}.section-divider-ink .draw-path,.divider-second .draw-path{stroke-width:1.25px;opacity:.35}.footer .doodle-divider .draw-path{stroke-width:1px;opacity:.25}.reveal-element{opacity:0;transition:opacity .7s,transform .7s;transform:translateY(16px)}.reveal-element.revealed{opacity:1;transform:translateY(0)}.reveal-slide-left{opacity:0;transition:opacity .6s cubic-bezier(.33,1,.68,1),transform .6s cubic-bezier(.33,1,.68,1);transform:translate(-24px)}.reveal-slide-left.revealed{opacity:1;transform:translate(0)}.reveal-scale{opacity:0;transition:opacity .8s cubic-bezier(.33,1,.68,1),transform .8s cubic-bezier(.33,1,.68,1);transform:scale(.95)translateY(12px)}.reveal-scale.revealed{opacity:1;transform:scale(1)translateY(0)}.reveal-quiet{opacity:0;transition:opacity 1s,transform 1s;transform:translateY(8px)}.reveal-quiet.revealed{opacity:1;transform:translateY(0)}.reveal-statement{opacity:0;transition:opacity 1.2s cubic-bezier(.33,1,.68,1),transform 1s cubic-bezier(.33,1,.68,1);transform:translateY(20px)}.reveal-statement.revealed{opacity:1;transform:translateY(0)}.reveal-farewell{opacity:0;transition:opacity 1.8s}.reveal-farewell.revealed{opacity:1}@keyframes revealFallback{to{opacity:1;transform:none}}.reveal-element,.reveal-slide-left,.reveal-scale,.reveal-quiet,.reveal-statement,.reveal-farewell{animation:0s 3s forwards revealFallback}.reveal-element.revealed,.reveal-slide-left.revealed,.reveal-scale.revealed,.reveal-quiet.revealed,.reveal-statement.revealed,.reveal-farewell.revealed{animation:none}.nav{z-index:100;-webkit-backdrop-filter:blur(10px);background:#fbf8f3d9;border-bottom:1px solid #c4857a1a;padding:1rem 0;position:sticky;top:0}.nav-inner{max-width:100%;margin:0 auto;padding:0 clamp(1.5rem,6vw,4rem)}.nav-wordmark{font-family:var(--font-heading);color:var(--heading);letter-spacing:-.01em;cursor:pointer;background:0 0;border:none;padding:0;font-size:clamp(1.2rem,2.5vw,1.5rem);font-weight:600;text-decoration:none;animation:.4s .1s both navFadeIn}.nav-wordmark:hover{color:var(--rose);transition:color .3s}.nav-wordmark:focus-visible{outline:2px solid var(--ink);outline-offset:4px;border-radius:2px}.nav-flower{vertical-align:middle;opacity:.75;margin-right:.4rem;display:inline-block}@keyframes navFadeIn{0%{opacity:0}to{opacity:1}}.hero{max-width:var(--hero-max-width);flex-direction:column;justify-content:center;min-height:65vh;margin:0 auto;padding:clamp(5rem,12vh,10rem) clamp(1.5rem,5vw,3rem) clamp(1rem,2vh,2rem);display:flex;position:relative}.hero-content{z-index:2;position:relative}.hero-title{font-family:var(--font-heading);color:var(--heading);letter-spacing:-.035em;margin-bottom:.5rem;font-size:clamp(3.5rem,9vw,5.5rem);font-weight:700;line-height:1.05}.hero-underline{margin-bottom:3.5rem;margin-left:.25rem;display:block}.hero-underline-delayed .doodle-stroke.stroke-animate .draw-path{transition-delay:.3s}.hero-intro{max-width:540px;color:var(--text);opacity:.85;margin-top:0;margin-bottom:1.25rem;font-size:clamp(1.1rem,2vw,1.3rem);line-height:1.7}.hero-identity{max-width:540px;color:var(--text);opacity:.85;margin-top:1.5rem;margin-bottom:1.5rem;font-size:clamp(1.2rem,2.5vw,1.5rem);line-height:1.7}.hero-doodles{opacity:.85;pointer-events:none;z-index:1;flex-wrap:wrap;justify-content:flex-end;gap:1.2rem;display:flex;position:absolute;top:1rem;left:0;right:0}.hero-doodle{display:block}.hero-doodle-1{margin-right:auto;transform:rotate(-12deg)}.hero-doodle-2{transform:rotate(8deg)translateY(10px)}.hero-doodle-3{margin-left:2rem;transform:rotate(-5deg)translateY(-5px)}.hero-doodle-4{transform:rotate(15deg)translateY(6px)}.hero-doodle-5{opacity:.7;margin-left:.5rem;transform:rotate(-8deg)translateY(12px)}.hero-doodle-1 .draw-path{transition-delay:0s}.hero-doodle-2 .draw-path{transition-delay:.15s}.hero-doodle-3 .draw-path{transition-delay:.3s}.hero-doodle-4 .draw-path{transition-delay:.45s}.hero-doodle-5 .draw-path{transition-delay:.6s}.scroll-hint{opacity:0;justify-content:center;margin-top:1rem;transition:opacity .3s;animation:.8s 1.8s both scrollHintAppear,3s ease-in-out 2.6s infinite bobbing;display:flex}.scroll-hint svg{stroke:var(--rose);opacity:.5;stroke-width:1.25px}@keyframes scrollHintAppear{0%{opacity:0}to{opacity:.5}}.scroll-hint.scrolled-past{opacity:0;pointer-events:none;transition:opacity .6s}@keyframes bobbing{0%,to{transform:translateY(0)}50%{transform:translateY(8px)}}.hero-doodle .doodle-stroke.stroke-animate,.door-doodle .doodle-stroke.stroke-animate{animation:.3s cubic-bezier(.34,1.56,.64,1) 1.4s both doodleBloom}@keyframes doodleBloom{0%{transform:scale(1)}50%{transform:scale(1.03)}to{transform:scale(1)}}@media (prefers-reduced-motion:no-preference){.hero-doodles{animation:20s ease-in-out infinite alternate heroDrift}}@keyframes heroDrift{0%{transform:translateY(0)}to{transform:translateY(-6px)}}.content-area{max-width:var(--max-width);padding:0 var(--content-padding);margin:0 auto}.section-divider{margin:var(--section-gap) 0}.content-area>.section-divider:first-child{margin:3rem 0 2rem}.projects-header{font-family:var(--font-accent);color:var(--heading);text-align:center;opacity:.9;letter-spacing:.02em;margin-top:3rem;margin-bottom:1rem;font-size:clamp(1.8rem,4.5vw,2.5rem)}.projects-header:after{content:"";background:#c4857a40;border-radius:50%;width:80px;height:3px;margin:.75rem auto 0;display:block}.project-doors{transition-delay:.3s}.projects-subtitle{font-family:var(--font-accent);letter-spacing:.03em;opacity:.78;text-align:center;margin-top:.75rem;margin-bottom:3rem;font-size:1.05rem}.project-doors{grid-template-columns:1fr 1fr;align-items:stretch;gap:2.5rem;margin-bottom:2rem;display:grid}.project-door:nth-child(2){transition-delay:.15s}.project-door{cursor:pointer;text-align:left;background:0 0;border:2px solid #0000;border-radius:6px;flex-direction:column;align-items:flex-start;gap:1.25rem;width:100%;padding:2.5rem 2rem;font-family:inherit;transition:border-color .4s,background-color .4s,transform .3s,box-shadow .3s;display:flex;position:relative;box-shadow:inset 0 1px 3px #00000005}.project-door:hover{transform:translateY(-4px)}.project-door:hover .door-tagline{opacity:1;transition:opacity .3s}.project-door:focus-visible{outline:2px solid var(--ink);outline-offset:4px;border-radius:6px}.door-calvin{background:#566c8f0a;border-color:#566c8f33;box-shadow:inset 0 2px 6px #566c8f0f}.door-calvin:hover{background:#566c8f14;border-color:#566c8f59;box-shadow:0 8px 24px #566c8f1f,0 2px 8px #566c8f14}.door-calvin.door-active{background:#566c8f1a;border-color:#566c8f73;transition:border-color .6s cubic-bezier(.33,1,.68,1),transform .4s cubic-bezier(.33,1,.68,1),box-shadow .5s cubic-bezier(.33,1,.68,1);box-shadow:0 4px 16px #566c8f1a}.door-calvin:hover .door-arrow{color:var(--ink)}.door-ivy{background:#8fa88a0a;border-color:#8fa88a33;box-shadow:inset 0 2px 6px #8fa88a0d}.door-ivy .door-name{letter-spacing:-.025em}.door-ivy:hover{background:#8fa88a1a;border-color:#8fa88a66;box-shadow:0 8px 24px #8fa88a1f,0 2px 8px #8fa88a14}.door-ivy.door-active{background:#8fa88a1f;border-color:#8fa88a80;transition:border-color .6s cubic-bezier(.33,1,.68,1),transform .4s cubic-bezier(.33,1,.68,1),box-shadow .5s cubic-bezier(.33,1,.68,1);box-shadow:0 4px 16px #8fa88a1a}.door-ivy:hover .door-arrow{color:var(--sage)}.door-active{transform:translateY(-4px)}.project-door:active{transition:transform 80ms,box-shadow 80ms;transform:translateY(-1px)scale(.995);box-shadow:0 1px 4px #0000000f}.door-doodle{flex-shrink:0;justify-content:center;align-items:center;width:100px;min-height:60px;margin-bottom:.25rem;transition:transform .5s;display:flex}.project-door:hover .door-doodle{transition:transform .4s cubic-bezier(.33,1,.68,1);transform:scale(1.05)}.door-name{font-family:var(--font-heading);color:var(--heading);letter-spacing:-.02em;margin-bottom:.6rem;font-size:clamp(2rem,5vw,2.75rem);font-weight:600}.door-tagline{font-family:var(--font-body);color:var(--text);opacity:.85;font-size:1.05rem;font-style:italic;line-height:1.55}.project-door.door-expanding{transition:transform .1s cubic-bezier(.33,1,.68,1),box-shadow .1s cubic-bezier(.33,1,.68,1);transform:translateY(-4px)scale(.99)}.door-arrow{opacity:.4;color:var(--rose);margin-top:.5rem;font-size:1.2rem;transition:transform .3s cubic-bezier(.33,1,.68,1),opacity .3s,color .3s}.project-door.door-ivy .door-arrow,.door-ivy .door-arrow{color:var(--sage)}.project-door.revealed .door-arrow{opacity:.4}@media (hover:hover){.project-door:not(.door-active):hover .door-arrow{opacity:.7;transition:transform .35s cubic-bezier(.33,1,.68,1);transform:rotate(25deg)}}@media (hover:none){.project-door:not(.door-active):hover .door-arrow{opacity:.4;transform:none}}.door-active .door-arrow{opacity:.9;transition:transform .45s cubic-bezier(.34,1.56,.64,1) 40ms,opacity .3s;transform:rotate(90deg)scale(1.1)}.project-door.door-settling{transition:transform .5s cubic-bezier(.33,1,.68,1),box-shadow .5s cubic-bezier(.33,1,.68,1);transform:translateY(-1px)}@media (width>=768px){.door-content{align-items:flex-start}.door-doodle{margin-top:.5rem}}@media (width>=901px){.project-door{flex-direction:row;align-items:flex-start;gap:1.5rem;height:100%;min-height:200px;padding:2.5rem 2rem}.door-calvin .door-doodle svg{width:90px;height:auto}.door-ivy .door-doodle svg{width:100px;height:auto}}.project-detail{grid-template-rows:0fr;scroll-margin-top:80px;transition:grid-template-rows .5s cubic-bezier(.33,1,.68,1);display:grid;overflow:hidden}.project-detail.detail-expanded{grid-template-rows:1fr}.project-detail.detail-collapsing{will-change:grid-template-rows}.detail-inner{box-shadow:none;min-height:0;padding:0;transition:box-shadow .15s;position:relative;overflow:hidden}.detail-expanded .detail-inner{visibility:visible;background:#fbf8f399;min-height:200px;padding:2rem 0;transition:box-shadow .6s cubic-bezier(.33,1,.68,1) .15s;box-shadow:0 1px 4px #00000005}.detail-expanded.detail-settled .detail-inner{transition:box-shadow .4s;box-shadow:0 2px 16px #0000000a,0 1px 4px #00000005}.project-detail.detail-collapsed{pointer-events:none;grid-template-rows:0fr}.detail-collapsed .detail-inner{visibility:hidden;min-height:0}.detail-collapsing .detail-inner{opacity:0;box-shadow:none;transition:opacity .15s,box-shadow .15s}.detail-calvin .detail-inner{border-left:4px solid #566c8f66;padding-left:1.5rem}.detail-ivy .detail-inner{border-left:4px solid #8fa88a80;padding-left:1.5rem}.detail-tabs{border-bottom:1px solid #00000014;gap:0;margin-bottom:2rem;display:flex;position:relative}.detail-tabs:after{content:"";height:3px;bottom:-1px;left:var(--tab-indicator-left,0);width:var(--tab-indicator-width,0);background:0 0;border-radius:2px 2px 0 0;transition:left .3s cubic-bezier(.33,1,.68,1),width .3s cubic-bezier(.33,1,.68,1) 40ms;position:absolute}.detail-calvin .detail-tabs:after{background:var(--ink)}.detail-ivy .detail-tabs:after{background:var(--sage)}.detail-tab{font-family:var(--font-accent);cursor:pointer;color:var(--text);opacity:.7;background:0 0;border:none;border-bottom:2px solid #0000;min-height:44px;padding:.85rem 1.75rem;font-size:1.35rem;transition:opacity .2s,border-color .3s,color .3s,background .2s}.detail-tab:hover{opacity:.9}.detail-tab.tab-active{opacity:1;background:#f5f0e880;border-bottom-width:3px;border-radius:4px 4px 0 0;font-weight:600}.tabs-measured .detail-tab.tab-active{border-bottom-color:#0000}.detail-tab.tab-active.tab-calvin{border-bottom-color:var(--ink);color:var(--ink)}.detail-tab.tab-active.tab-ivy{border-bottom-color:var(--sage);color:var(--sage-dark)}.tabs-measured .detail-tab.tab-active.tab-calvin,.tabs-measured .detail-tab.tab-active.tab-ivy{border-bottom-color:#0000}.detail-tab:focus-visible{outline:2px solid var(--ink);outline-offset:-2px}.tab-content-wrapper{position:relative}.tab-content{background:#f5f0e873;border:1px solid #c4857a0f;border-top:none;border-radius:0 0 6px 6px;min-height:160px;padding:2rem 2.5rem 2.5rem;box-shadow:inset 0 2px 8px #00000004}.detail-calvin .tab-content{background:#eef0f573;border-color:#566c8f14}.detail-ivy .tab-content{background:#f0f5ee80;border-color:#8fa88a1a}.tab-exit-right{animation:80ms forwards tabFadeOutRight;position:absolute;top:0;left:0;right:0}.tab-exit-left{animation:80ms forwards tabFadeOutLeft;position:absolute;top:0;left:0;right:0}.tab-enter-right{animation:.35s cubic-bezier(.33,1,.68,1) forwards tabFadeInRight}.tab-enter-left{animation:.35s cubic-bezier(.33,1,.68,1) forwards tabFadeInLeft}@keyframes tabFadeOutRight{to{opacity:0;transform:translate(-8px)}}@keyframes tabFadeOutLeft{to{opacity:0;transform:translate(8px)}}@keyframes tabFadeInRight{0%{opacity:0;transform:translate(12px)}to{opacity:1;transform:translate(0)}}@keyframes tabFadeInLeft{0%{opacity:0;transform:translate(-12px)}to{opacity:1;transform:translate(0)}}.detail-expanded .detail-inner>*{opacity:0;animation:.5s cubic-bezier(.33,1,.68,1) forwards detailFadeIn}.detail-expanded .detail-inner>:first-child{animation-delay:.15s}.detail-expanded .detail-inner>:nth-child(2){animation-delay:.4s}.detail-expanded .tab-content>p,.detail-expanded .tab-content>.mission-text,.detail-expanded .tab-content>.machinery-text{opacity:0;animation:.5s cubic-bezier(.33,1,.68,1) .7s forwards detailFadeIn}.detail-expanded .tab-content>:nth-child(2){animation-delay:.95s}.detail-expanded .tab-content>:nth-child(3){animation-delay:1.15s}.detail-expanded.detail-settled .tab-content>:nth-child(3){opacity:1;animation:none}@keyframes detailFadeIn{0%{opacity:0;transform:translateY(12px)scale(.98)}60%{opacity:.8;transform:translateY(4px)scale(.995)}to{opacity:1;transform:translateY(0)scale(1)}}.detail-expanded.detail-settled .detail-inner>*,.detail-expanded.detail-settled .tab-content>p,.detail-expanded.detail-settled .tab-content>.mission-text,.detail-expanded.detail-settled .tab-content>.machinery-text,.detail-expanded.detail-settled .tab-content>:nth-child(2){opacity:1;animation:none}.project-detail.detail-collapsing{grid-template-rows:0fr;transition:grid-template-rows .35s cubic-bezier(.4,0,.2,1)!important}.project-detail.detail-collapsing .detail-tabs,.project-detail.detail-collapsing .tab-content,.project-detail.detail-collapsing .detail-inner>*{opacity:0;transition:opacity .25s cubic-bezier(.33,1,.68,1),transform .25s cubic-bezier(.33,1,.68,1);transform:translateY(-6px)}.mission-text{max-width:660px;color:var(--text);font-size:1.1rem;line-height:1.85}.mission-text p{margin-bottom:1rem}.tab-content p{margin-bottom:.75rem;line-height:1.75}.machinery-text{border-left:3px solid #0000;border-radius:0 4px 4px 0;max-width:660px;margin-left:-.5rem;padding:1rem 1rem 1rem 1.5rem;position:relative}.detail-calvin .machinery-text{background:#566c8f0a;border-left-color:#566c8f4d}.detail-ivy .machinery-text{background:#8fa88a0a;border-left-color:#8fa88a59}.machinery-prose{opacity:.9;font-size:1.05rem;line-height:1.8}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone{opacity:0;animation:.4s cubic-bezier(.33,1,.68,1) forwards detailFadeIn}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone:first-child{animation-delay:.1s}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone:nth-child(2){animation-delay:.18s}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone:nth-child(3){animation-delay:.26s}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone:nth-child(4){animation-delay:.34s}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone:nth-child(5){animation-delay:.42s}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone:nth-child(6){animation-delay:.5s}.detail-settled .tab-content .roadmap-milestone,.milestones-settled .roadmap-milestone{opacity:1!important;animation:none!important}@keyframes milestoneDotPop{0%{opacity:0;transform:scale(0)rotate(-5deg)}60%{opacity:1;transform:scale(1.15)rotate(2deg)}to{opacity:1;transform:scale(1)rotate(0)}}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone .milestone-dot{animation:.35s cubic-bezier(.34,1.56,.64,1) both milestoneDotPop}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone:first-child .milestone-dot{animation-delay:.12s}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone:nth-child(2) .milestone-dot{animation-delay:.2s}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone:nth-child(3) .milestone-dot{animation-delay:.28s}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone:nth-child(4) .milestone-dot{animation-delay:.36s}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone:nth-child(5) .milestone-dot{animation-delay:.44s}.detail-expanded:not(.detail-settled) .tab-content .roadmap-milestone:nth-child(6) .milestone-dot{animation-delay:.52s}.detail-settled .tab-content .roadmap-milestone .milestone-dot,.milestones-settled .roadmap-milestone .milestone-dot{transform:scale(1);animation:none!important}.roadmap-container{padding:1rem 0;position:relative;overflow:visible}.roadmap-scroll{scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none;align-items:flex-start;gap:0;padding:2rem 2.5rem 1.25rem 1rem;display:flex;position:relative;overflow-x:auto}.roadmap-scroll:after{content:"";flex-shrink:0;width:2.5rem;min-height:1px}.roadmap-scroll::-webkit-scrollbar{display:none}.roadmap-scroll:focus-visible{outline:2px solid var(--ink);outline-offset:2px;border-radius:4px}.roadmap-line{z-index:0;opacity:1;background:#0000001a;height:3.5px;position:absolute;top:calc(2rem + 13px);left:2rem;right:2rem}.detail-calvin .roadmap-line{background:linear-gradient(90deg,#566c8f1a 0%,#566c8f33 50%,#566c8f1a 100%)}.detail-ivy .roadmap-line{background:linear-gradient(90deg,#8fa88a1a 0%,#8fa88a33 50%,#8fa88a1a 100%)}.roadmap-milestone{z-index:1;flex-direction:column;flex-shrink:0;align-items:center;min-width:110px;display:flex;position:relative}.milestone-dot{border-radius:50%;justify-content:center;align-items:center;width:26px;height:26px;margin-bottom:.5rem;display:flex;position:relative}.milestone-completed .milestone-dot{background:#d9b060;border:2px solid #d9b060;box-shadow:0 2px 8px #d9b06040,0 0 0 3px #d9b0601a}.milestone-completed .milestone-check{display:flex}.milestone-check{display:none}.milestone-check svg{width:10px;height:10px}.milestone-current .milestone-dot{border:2.5px solid var(--ink);background:#566c8f0f;animation:2s ease-in-out infinite milestonePulse}.milestone-current .milestone-now{display:block}.milestone-now{font-family:var(--font-accent);color:var(--ink);letter-spacing:.05em;text-transform:uppercase;white-space:nowrap;font-size:.75rem;font-weight:600;display:none;position:absolute;top:-22px}@keyframes milestonePulse{0%,to{transform:scale(1);box-shadow:0 0 #566c8f4d}50%{transform:scale(1.15);box-shadow:0 0 0 8px #566c8f00}}.milestone-future .milestone-dot{opacity:.6;background:#f5f0e880;border:1.5px dashed #0000001f}.milestone-label{font-family:var(--font-accent);color:var(--text);opacity:.8;letter-spacing:.02em;text-align:center;word-break:break-word;-webkit-hyphens:auto;hyphens:auto;max-width:100px;min-height:2.8em;font-size:.82rem;line-height:1.3}.milestone-completed .milestone-label{opacity:.85}.milestone-current .milestone-label{opacity:1;font-weight:600}.milestone-future .milestone-label{opacity:.85}.roadmap-nav{justify-content:center;gap:1rem;margin-top:.75rem;display:flex}.roadmap-btn{cursor:pointer;width:36px;height:36px;font-family:var(--font-accent);color:var(--text);opacity:.7;background:#00000004;border:1.5px solid #0000001f;border-radius:50%;justify-content:center;align-items:center;min-width:44px;min-height:44px;font-size:1rem;transition:opacity .2s,background .2s,border-color .2s,transform .15s cubic-bezier(.34,1.56,.64,1);display:flex}.roadmap-btn:hover{opacity:.8;background:#0000000a;border-color:#0003}.roadmap-btn:active{opacity:.8;transition:transform 60ms;transform:scale(.92)}.detail-calvin .roadmap-btn:hover{color:var(--ink);border-color:#566c8f59}.detail-ivy .roadmap-btn:hover{color:var(--sage-dark);border-color:#8fa88a59}.detail-calvin .milestone-current .milestone-dot{border-color:var(--ink);animation-name:milestonePulseCalvin}@keyframes milestonePulseCalvin{0%,to{transform:scale(1);box-shadow:0 0 #566c8f4d}50%{transform:scale(1.15);box-shadow:0 0 0 8px #566c8f00}}.detail-ivy .milestone-current .milestone-dot{border-color:var(--sage);animation-name:milestonePulseIvy}@keyframes milestonePulseIvy{0%,to{transform:scale(1);box-shadow:0 0 #8fa88a4d}50%{transform:scale(1.15);box-shadow:0 0 0 8px #8fa88a00}}.closing-section{max-width:none;margin:0 calc(-1 * var(--content-padding));padding:7rem calc(var(--content-padding) + clamp(.5rem, 1vw, 1rem)) 5rem;background:#c4857a12;border-top:none;margin-top:3.5rem;margin-bottom:0;position:relative}.closing-content{z-index:2;max-width:640px;margin:0 auto;position:relative}.closing-passage{font-family:var(--font-heading);color:var(--heading);opacity:.92;max-width:640px;margin-bottom:2rem;font-size:clamp(1.15rem,2.5vw,1.4rem);line-height:1.75}.closing-listen{font-size:1.15em;font-weight:600}.closing-passage p+p{margin-top:1.5rem}.closing-contact{text-align:center;letter-spacing:.02em;border-top:none;margin-top:3rem;padding-top:2rem;font-size:1.15rem;display:block}.contact-link{font-family:var(--font-accent);color:var(--ink);border-bottom:none;align-items:center;padding-bottom:2px;font-size:1.3rem;text-decoration:none;transition:color .3s cubic-bezier(.33,1,.68,1),transform .3s cubic-bezier(.34,1.56,.64,1);display:inline-flex;position:relative}.contact-link:after{content:"";transform-origin:0;background:currentColor;width:100%;height:2px;transition:transform .4s cubic-bezier(.33,1,.68,1);position:absolute;bottom:-2px;left:0;transform:scaleX(0)}.contact-link:hover{color:var(--rose);transform:translateY(-1px)}.contact-link:hover:after{transform:scaleX(1)}.contact-link:focus-visible{outline:2px solid var(--ink);outline-offset:4px;border-radius:2px}.closing-doodle-left{z-index:1;pointer-events:none;opacity:.3;position:absolute;top:30%;left:3rem}.closing-doodle-left svg{width:36px}.closing-doodle-right{z-index:1;pointer-events:none;opacity:.25;position:absolute;bottom:20%;right:3rem}.closing-doodle-right svg{width:32px}.closing-passage{transition-delay:0s}.closing-bridge{transition-delay:.4s}.closing-contact{transition-delay:.7s}.closing-doodle-left .draw-path{transition-delay:.45s}.closing-doodle-right .draw-path{transition-delay:.65s}.closing-section:after{content:"";background:linear-gradient(90deg,#0000 15%,#c4857a1a 50%,#0000 85%);width:100%;height:1px;position:absolute;bottom:0;left:50%;transform:translate(-50%)}.postcard-section{max-width:var(--max-width);margin:2rem auto 0;padding-top:4rem;padding-bottom:5.5rem;position:relative}.postcard-section .reveal-scale{transition-delay:.3s}.postcard-section:before{display:none}.postcard-section .doodle-divider{margin-bottom:3rem}.postcard-heading{font-family:var(--font-accent);opacity:.75;text-align:center;margin-bottom:1rem;font-size:1.4rem;font-weight:400}.postcard-content{text-align:center}.postcard-invitation{flex-direction:column;align-items:center;gap:2rem;display:flex}.postcard-envelope-btn{cursor:pointer;background:0 0;border:none;flex-direction:column;align-items:center;gap:1.5rem;padding:1rem;transition:transform .3s;display:flex}.postcard-envelope-btn:hover{transform:translateY(-3px)}.postcard-envelope-btn:hover .postcard-envelope{opacity:1}.postcard-envelope-btn:focus-visible{outline:2px solid var(--ink);outline-offset:8px;border-radius:4px}.postcard-invite{max-width:400px;margin:0 auto}.postcard-envelope{opacity:.75;transition:opacity .3s,transform .4s cubic-bezier(.33,1,.68,1)}.postcard-envelope.stroke-animate{animation:.5s cubic-bezier(.33,1,.68,1) 1s both envelopeSettle,.6s cubic-bezier(.33,1,.68,1) 2s both envelopeWiggle}@keyframes envelopeSettle{0%{transform:scale(.92)rotate(-2deg)}to{transform:scale(1)rotate(0)}}.postcard-envelope svg{width:96px;height:auto;transform:rotate(-3deg)}.postcard-invitation .postcard-trigger{opacity:0;transform:translateY(8px)}.revealed .postcard-invitation .postcard-trigger,.postcard-invitation.revealed .postcard-trigger{opacity:1;transition:opacity .5s .4s,transform .5s .4s,background-color .4s cubic-bezier(.33,1,.68,1),border-color .4s cubic-bezier(.33,1,.68,1),box-shadow .4s cubic-bezier(.33,1,.68,1);transform:translateY(0)}.postcard-regenerate{opacity:0;animation:.5s cubic-bezier(.33,1,.68,1) 1.4s forwards postcardRegenEntrance;transform:translateY(6px)}.postcard-regenerate.regenerate-quick{animation-delay:.8s}@keyframes postcardRegenEntrance{to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.postcard-regenerate{opacity:1!important;animation:none!important;transform:none!important}}.postcard-invitation:hover .postcard-envelope{opacity:1;transition:opacity .3s,transform .5s cubic-bezier(.34,1.56,.64,1);transform:translateY(-5px)rotate(-3deg)}@keyframes envelopeWiggle{0%{transform:translateY(-5px)rotate(-3deg)}25%{transform:translateY(-5px)rotate(-1deg)}50%{transform:translateY(-5px)rotate(-5deg)}75%{transform:translateY(-5px)rotate(-2deg)}to{transform:translateY(-5px)rotate(-3deg)}}.postcard-invite-text{font-family:var(--font-body);color:var(--text);opacity:.85;max-width:360px;margin-top:.5rem;margin-bottom:.75rem;font-size:1.15rem;font-style:italic;line-height:1.6}.postcard-trigger{animation:4s ease-in-out 3s infinite gentlePulse}@keyframes gentlePulse{0%,to{box-shadow:0 0 #c4857a00}50%{box-shadow:0 0 0 6px #c4857a14}}.postcard-trigger,.postcard-another{font-family:var(--font-accent);color:var(--rose);border:2px solid var(--rose-light);cursor:pointer;background:0 0;border-radius:30px;min-width:44px;min-height:44px;padding:.6rem 1.75rem;font-size:1.25rem;transition:background-color .4s cubic-bezier(.33,1,.68,1),border-color .4s cubic-bezier(.33,1,.68,1),transform .4s cubic-bezier(.33,1,.68,1),box-shadow .4s cubic-bezier(.33,1,.68,1),opacity .3s}.postcard-trigger:hover,.postcard-another:hover{border-color:var(--rose);background:#c4857a14;transform:translateY(-3px);box-shadow:0 4px 16px #c4857a33,0 8px 32px #c4857a1a}.postcard-trigger:active,.postcard-another:active{transition-duration:.1s;transform:translateY(-1px);box-shadow:0 2px 8px #6b7fa31a}.postcard-trigger:focus-visible,.postcard-another:focus-visible{outline:2px solid var(--ink);outline-offset:4px}.postcard-loading{flex-direction:column;align-items:center;gap:1.5rem;padding:3rem 0;display:flex}.pen-writing-animation{align-items:center;gap:.5rem;animation:2s ease-in-out infinite penWrite;display:flex}.pen-writing-svg{width:50px;height:50px}@keyframes penWrite{0%,to{transform:translate(0)rotate(0)}25%{transform:translate(6px)rotate(-8deg)}50%{transform:translate(-4px)rotate(5deg)}75%{transform:translate(8px)rotate(-5deg)}}.pen-dots{gap:4px;display:flex}.pen-dot{background:var(--text);border-radius:50%;width:5px;height:5px;animation:1.2s ease-in-out infinite penDotPulse}.pen-dot:nth-child(2){animation-delay:.2s}.pen-dot:nth-child(3){animation-delay:.4s}@keyframes penDotPulse{0%,to{opacity:.2}50%{opacity:.8}}.loading-label{font-family:var(--font-accent);color:var(--text);opacity:.75;font-size:1.2rem}.postcard-error{flex-direction:column;align-items:center;gap:1.5rem;padding:2rem 0;display:flex}.postcard-error p{font-family:var(--font-body);color:var(--text);opacity:.78;font-style:italic}.postcard-result{flex-direction:column;align-items:center;gap:2rem;animation:.8s cubic-bezier(.33,1,.68,1) forwards postcardArrive;display:flex}@keyframes postcardArrive{0%{opacity:0;transform:translateY(20px)rotate(-2deg)scale(.95)}70%{opacity:1;transform:translateY(-3px)rotate(-.3deg)scale(1.01)}to{opacity:1;transform:translateY(0)rotate(-.5deg)scale(1)}}.postcard-result .postcard-text p{opacity:0;animation:.6s forwards postcardTextReveal}.postcard-result .postcard-text p:first-child{animation-delay:.4s}.postcard-result .postcard-text p:nth-child(2){animation-delay:.6s}.postcard-result .postcard-text p:nth-child(3){animation-delay:.85s}.postcard-result .postcard-text p:nth-child(4){animation-delay:1s}.postcard-result .postcard-text p:nth-child(n+5){animation-delay:1.05s}.postcard-result .postcard-card .postcard-text p:nth-last-child(2){animation-delay:1.2s}.postcard-result .postcard-card .postcard-text p:last-child{animation-delay:1.35s}@keyframes postcardTextReveal{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.postcard-card{text-align:left;background:#fbf8f3;border:1px solid #2c2c2c1f;border-radius:2px;max-width:520px;padding:2.5rem 2rem 2rem;position:relative;transform:rotate(-.5deg);box-shadow:2px 3px #2c2c2c0a,4px 6px #2c2c2c05}.postcard-stamp{opacity:.85;position:absolute;top:1rem;right:1.2rem}.postcard-result .postcard-stamp{animation:.25s cubic-bezier(.34,1.56,.64,1) .6s both stampPop}@keyframes stampPop{0%{transform:scale(0)rotate(-15deg)}60%{transform:scale(1.12)rotate(2deg)}to{transform:scale(1)rotate(0)}}@media (prefers-reduced-motion:reduce){.postcard-result .postcard-stamp{animation:none!important}}.postcard-postmark{font-family:var(--font-accent);color:var(--text);opacity:.75;letter-spacing:.1em;margin-bottom:1.2rem;font-size:.85rem}.postcard-text{font-family:var(--font-accent);color:var(--text);font-size:1.2rem;line-height:1.7}.postcard-text p+p{margin-top:.8rem}.postcard-text p:last-child{margin-top:.3rem}.postcard-text p:nth-last-child(2){margin-top:1.2rem}.postcard-another{font-size:1.1rem}@keyframes postcardShuffle{0%{opacity:1;transform:rotate(-.5deg)}30%{opacity:0;transform:rotate(2deg)scale(.97)translateY(-8px)}31%{opacity:0;transform:rotate(-3deg)scale(.95)translateY(12px)}to{opacity:1;transform:rotate(-.5deg)scale(1)translateY(0)}}.postcard-shuffle{animation:.7s cubic-bezier(.33,1,.68,1) both postcardShuffle}.postcard-shuffle .postcard-text p:first-child{animation-delay:.5s}.postcard-shuffle .postcard-text p:nth-child(2){animation-delay:.65s}.postcard-shuffle .postcard-text p:nth-child(3){animation-delay:.8s}.postcard-shuffle .postcard-text p:nth-child(4){animation-delay:.9s}.postcard-shuffle .postcard-text p:nth-child(n+5){animation-delay:.95s}.footer{text-align:center;background:linear-gradient(#0000 0%,#c4857a0d 100%);padding:3rem 0 3.5rem}.footer .doodle-divider{opacity:.55;max-width:500px;margin-bottom:2.5rem;margin-left:auto;margin-right:auto}.footer .doodle-divider .draw-path{stroke-width:1px;opacity:.25;transition:stroke-dashoffset 1s cubic-bezier(.4,0,.2,1)}.footer-text{font-family:var(--font-accent);color:var(--text);opacity:.5;letter-spacing:.05em;font-size:1.2rem}.footer-date{font-family:var(--font-accent);opacity:.3;margin-top:.5rem;font-size:.75rem;display:block}.page-loading{flex-direction:column;justify-content:center;align-items:center;gap:1.5rem;min-height:60vh;display:flex}.page-loading-text{font-family:var(--font-accent);color:var(--text);opacity:.74;font-size:1.3rem}.page-error{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:1rem;min-height:60vh;padding:2rem;display:flex}.page-error p{font-family:var(--font-body);color:var(--text);opacity:.75;max-width:400px;font-size:1.1rem}.error-boundary{text-align:center;min-height:60vh;font-family:var(--font-body);color:var(--text);background-color:var(--bg);flex-direction:column;justify-content:center;align-items:center;padding:2rem;display:flex}.error-boundary h1{font-family:var(--font-heading);margin-bottom:1rem;font-size:2rem;font-weight:600}.error-boundary p{opacity:.75;max-width:400px;line-height:1.7}.error-boundary-actions{gap:1rem;margin-top:1.5rem;display:flex}.error-boundary-btn{font-family:var(--font-accent);cursor:pointer;background:0 0;border-radius:30px;padding:.6rem 1.5rem;font-size:1.2rem;transition:background-color .3s,border-color .3s,transform .3s,box-shadow .3s}.error-boundary-btn:hover{transform:translateY(-2px);box-shadow:0 4px 12px #00000014}.error-boundary-btn--retry:hover{border-color:var(--rose);background:#c4857a14}.error-boundary-btn--refresh:hover{border-color:var(--ink);background:#566c8f14}.error-boundary-btn:active{transition-duration:80ms;transform:translateY(-1px)}.error-boundary-btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.error-boundary-btn--retry{color:var(--rose);border:2px solid #c4857a4d}.error-boundary-btn--refresh{color:var(--ink);border:2px solid #566c8f4d}.page-error-btn{font-family:var(--font-accent);color:var(--rose);border:2px solid var(--rose-light);cursor:pointer;background:0 0;border-radius:30px;padding:.6rem 1.5rem;font-size:1.2rem;transition:background-color .3s,border-color .3s,transform .3s,box-shadow .3s}.page-error-btn:hover{border-color:var(--rose);background:#c4857a14;transform:translateY(-2px);box-shadow:0 4px 12px #c4857a1f}.page-error-btn:active{transition-duration:80ms;transform:translateY(-1px)}.page-error-btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}@media (width>=640px) and (width<=900px){.project-doors{grid-template-columns:1fr 1fr;gap:1.5rem}.project-door{padding:1.75rem 1.25rem}.door-doodle svg{width:70px}}@media (width<=639px){.project-doors{grid-template-columns:1fr;gap:1.25rem}.project-door{padding:1.5rem}.detail-tab{padding:.7rem 1rem;font-size:1.1rem}}@media (width<=900px){.hero-doodle-flower,.hero-doodle-spiral{display:none}.hero-doodle-leaf{width:36px;top:2%;right:5%}.hero-doodle-circle{opacity:.45;width:36px;top:55%;left:3%;right:auto}.hero-doodle-star{opacity:.4;width:30px;top:35%;right:6%}.hero-doodle-lower-left{width:32px;bottom:15%;left:8%;right:auto}.hero{min-height:auto;padding-top:4.5rem;padding-bottom:clamp(.5rem,1vh,1rem)}.closing-doodle-left{display:none}.closing-doodle-right{opacity:.25;bottom:15%;right:2rem;transform:scale(.7)}.door-doodle svg{width:80px;height:auto}.door-doodle{min-height:50px}.door-tagline{font-size:.95rem;line-height:1.5}}@media (width<=639px){.project-door{text-align:center;align-items:center;padding:2rem 1.5rem}.door-arrow{align-self:center}}@media (width<=600px){.hero-title{font-size:clamp(2.5rem,12vw,3.5rem)}.hero-doodle-spiral,.hero-doodle-circle,.hero-doodle-lower-left,.hero-doodle-flower{display:none}.hero-doodle-leaf{opacity:.45;width:44px;top:4%;right:4%}.hero-doodle-star{opacity:.35;width:30px;top:2%;right:22%}.project-door{padding:1.5rem}.project-detail .detail-inner{padding-left:.75rem}.detail-content-inner,.detail-calvin .detail-inner,.detail-ivy .detail-inner{border-left-width:3px}.postcard-card{margin:0 .5rem;padding:1.5rem}}@media (width<=500px){.closing-doodle-right{display:none}}@media (hover:none){.project-door:hover{box-shadow:inherit;transform:none}.project-door:hover .door-doodle,.project-door:hover .door-arrow{transform:none}.project-door:active{transition-duration:.1s;transform:translateY(-2px)}}
