:root{
  --ink:#000;--paper:#fff;--mute:#666;--faint:#767676;--line:#d4d4d4;--hair:#e6e6e6;--wash:#f6f6f6;
  --serif:"Cormorant Garamond","Cormorant",Georgia,"Times New Roman",serif;
  --sans:"Jost","Helvetica Neue",Arial,system-ui,sans-serif;
  --ease:cubic-bezier(.22,.72,.2,1);
}
*{box-sizing:border-box;overflow-anchor:none}
html{-webkit-text-size-adjust:100%;overflow-anchor:none;color-scheme:light}
body{font-variant-numeric:lining-nums;margin:0;background:var(--paper);color:var(--ink);font:400 13.5px/1.5 var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
[hidden]{display:none!important}
button{font:inherit;color:inherit}
h1,h2,h3,p{margin:0}
:focus-visible{outline:2px solid var(--ink);outline-offset:2px}

.page{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,940px) minmax(0,1fr)}
.page>.sheet{grid-column:2}
.sheet{max-width:940px;width:100%;margin:0 auto;padding:26px 20px 90px}
.mast{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;padding-bottom:16px}
.brand{display:block;color:inherit}
.brand img{height:31px;width:auto;display:block}
.brand small{display:block;margin-top:9px;font:400 11.5px/1 var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--mute)}
.lede{max-width:31ch;text-align:right;color:var(--mute);font-size:12.5px;line-height:1.45}

/* ---------- reveal ---------- */
.rv{display:grid;grid-template-rows:0fr;opacity:0;visibility:hidden;transition:grid-template-rows .42s var(--ease),opacity .3s ease,visibility 0s linear .42s}
.rv.open{grid-template-rows:1fr;opacity:1;visibility:visible;transition-delay:0s}
.rv>.rv-in{min-height:0;overflow:hidden;padding:3px;margin:-3px}
.rv.open>.rv-in.free{overflow:visible}

/* ---------- sections ---------- */
.sec{display:grid;grid-template-columns:150px 1fr;gap:0 26px;padding:15px 0 17px;border-top:1px solid var(--line)}
.sec.first{border-top:1.5px solid var(--ink)}
.sec-h h2{font:600 18px/1.15 var(--serif)}
.sec-h p{margin-top:4px;font-size:12px;line-height:1.4;color:var(--mute);max-width:21ch}
.sec-b{min-width:0}
.end{border-top:1.5px solid var(--ink);margin-top:0}

/* ---------- fields ---------- */
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px 22px}
.f{display:flex;flex-direction:column;gap:1px;min-width:0}
.f>label,.lab{font-size:11.5px;color:var(--mute)}
.f>label i{font-style:normal;color:var(--ink)}
.in{font:inherit;font-size:14px;line-height:1.3;color:var(--ink);width:100%;min-width:0;padding:5px 0 6px;border:0;border-bottom:1px solid var(--line);border-radius:0;background:transparent;transition:border-color .15s,box-shadow .15s;-webkit-appearance:none;appearance:none}
.in::placeholder{color:#a3a3a3}
.in:hover{border-bottom-color:#8a8a8a}
.in:focus{outline:none;border-bottom-color:var(--ink);box-shadow:0 1px 0 var(--ink)}
select.in{padding-right:18px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23000' stroke-width='1.2'/%3E%3C/svg%3E") no-repeat right 2px center;cursor:pointer}
textarea.in{resize:vertical;min-height:62px;border:1px solid var(--line);padding:8px 10px;border-radius:2px}
textarea.in:focus{box-shadow:none;border-color:var(--ink)}
input[type=date].in,input[type=time].in{min-height:30px}
input[type=number].in{-moz-appearance:textfield}
.err{display:none;margin-top:3px;font-size:12px;line-height:1.35;color:var(--ink)}
.err::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--ink);margin-right:6px;vertical-align:1px}
.f.bad .err{display:block}
.f.bad .in{border-bottom-color:var(--ink);box-shadow:0 1px 0 var(--ink)}

/* ---------- chips ---------- */
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{display:inline-flex;align-items:center;gap:6px;font-size:13px;line-height:1;padding:8px 12px;min-height:31px;border:1px solid var(--line);border-radius:2px;background:var(--paper);color:var(--ink);cursor:pointer;transition:background .16s,color .16s,border-color .16s}
.chip:hover{border-color:var(--ink)}
.chip[aria-pressed=true],.chip[aria-checked=true]{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.chip.multi::before{content:"";width:9px;height:9px;border:1px solid currentColor;border-radius:1px;opacity:.55;flex:none;transition:all .16s}
.chip.multi[aria-pressed=true]::before{opacity:1;background:currentColor;box-shadow:inset 0 0 0 2px var(--ink)}
.chip.add{border-style:dashed;color:var(--mute)}
.chip.add:hover{color:var(--ink)}
.chip.locked{cursor:default;border-style:solid;background:var(--wash);color:var(--ink);border-color:var(--line)}
.chip.locked::before{content:"✓";border:0;opacity:1;width:auto;height:auto;font-size:11px}
.chip.locked em{font-style:normal;color:var(--mute);font-size:11.5px}
.chip.sm{padding:6px 10px;min-height:27px;font-size:12.5px}
.custom-add{display:inline-flex;align-items:center;gap:6px}
.custom-add .in{width:170px;font-size:13px;padding:5px 0 5px}

/* ---------- steppers ---------- */
.step{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:2px;background:var(--paper)}
.step button{width:28px;height:28px;border:0;background:none;font-size:16px;line-height:1;cursor:pointer;color:var(--ink)}
.step button:hover:not(:disabled){background:var(--wash)}
.step button:disabled{color:#b9b9b9;cursor:default}
.step output{min-width:24px;text-align:center;font-variant-numeric:tabular-nums;font-size:13.5px}
.opt{display:inline-flex;align-items:center;gap:8px;min-height:30px}
.opt>.lab{white-space:nowrap}

/* ---------- side vignette ---------- */
.side-fig{display:flex;flex-direction:row-reverse;justify-content:flex-end;align-items:flex-end;gap:16px;margin-top:8px}
@media (min-width:1280px){#rv-inlinefig{display:none}}
.cap{min-height:24px;padding-bottom:4px;font:italic 500 17px/1.2 var(--serif);transition:opacity .3s ease}
.cap.swap{opacity:0}
.fig-stack{position:relative;flex:none;height:104px;aspect-ratio:116/200}
.fig-stack svg{position:absolute;inset:0;width:100%;height:100%;opacity:0;transition:opacity .32s ease}
.fig-stack svg.on{opacity:1}
/* committed decisions */
.dec .rv{transition:grid-template-rows .22s var(--ease),opacity .18s ease,visibility 0s linear .22s}
.dec .rv.open{transition-delay:0s}
.dec-choose{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}
.dec-done{display:flex;align-items:center;justify-content:space-between;gap:14px;min-height:31px}
.dv{font:600 18px/1.2 var(--serif);font-variant-numeric:lining-nums}
.chg{flex:none;border:0;background:none;padding:6px 0 5px;font-size:12.5px;line-height:1;color:var(--mute);text-decoration:underline;text-decoration-color:#b4b4b4;text-underline-offset:4px;cursor:pointer;transition:color .15s,text-decoration-color .15s}
.chg:hover{color:var(--ink);text-decoration-color:var(--ink)}

/* ---------- functions ---------- */
.fn-list{display:flex;flex-direction:column;margin-top:10px}
.fn{position:relative;margin-bottom:8px;border:1px solid var(--line);border-radius:2px;background:var(--paper);transition:border-color .2s}
.fn.open{border-color:var(--ink)}
.fn-head{position:relative;display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:10px 12px 10px}
.fn-ti{min-width:0}
.fn-ti h3{font:600 17px/1.15 var(--serif)}
.fn-sum,.fn-cov{font-size:12.5px;line-height:1.45;color:var(--ink);margin-top:3px}
.fn-cov{margin-top:1px;color:var(--mute)}
.fn-cov span{display:block}
.fn-sum .na,.fn-cov .na{color:var(--faint);font-style:italic}
.fn-edit{position:static;flex:none;border:0;background:none;cursor:pointer;font-size:12.5px;color:var(--ink);text-decoration:underline;text-underline-offset:3px;padding:2px 0}
.fn-edit::after{content:"";position:absolute;inset:0}
.fn-edit:focus-visible{outline-offset:-2px}
.fn-body{padding:2px 12px 14px;border-top:1px solid var(--hair);margin-top:0}
.fn-body .grid4{display:grid;grid-template-columns:1.15fr .8fr .8fr 1.7fr;gap:10px 16px;padding-top:10px}
.same{display:inline-flex;align-items:center;gap:8px;margin-top:14px;cursor:pointer;font-size:13px;user-select:none}
.same input{appearance:none;-webkit-appearance:none;width:15px;height:15px;border:1px solid var(--ink);border-radius:1px;margin:0;display:grid;place-content:center;cursor:pointer;background:var(--paper)}
.same input::before{content:"";width:7px;height:7px;background:var(--ink);transform:scale(0);transition:transform .12s}
.same input:checked::before{transform:scale(1)}
.cov-wrap{display:grid;gap:12px 22px;margin-top:12px}
.cov-wrap.two{grid-template-columns:1fr 1fr}
.cov-p{min-width:0}
.cov-p+.cov-p{border-left:1px solid var(--hair);padding-left:22px}
.cov-wrap:not(.two) .cov-p+.cov-p{border:0;padding:0}
.cov-t{font:600 15px/1 var(--serif);margin-bottom:9px}
.cov-row{display:flex;flex-wrap:wrap;gap:8px 18px;margin-bottom:10px}
.cov-p .chips{gap:5px}

/* ---------- items (deliverables / add-ons) ---------- */
.item-rows{margin-top:8px}
.item-row{padding:2px 0}
.item-card{display:flex;flex-wrap:wrap;align-items:center;gap:8px 22px;padding:10px 12px;margin-top:6px;background:var(--wash);border-radius:2px}
.item-card .ti{font:600 15px/1 var(--serif);min-width:92px}
.item-card .seg{display:inline-flex;gap:0}
.item-card .seg .chip{border-radius:0;margin-left:-1px;padding:6px 10px;min-height:28px;font-size:12.5px}
.item-card .seg .chip:first-child{margin-left:0;border-radius:2px 0 0 2px}
.item-card .seg .chip:last-child{border-radius:0 2px 2px 0}
.item-card .seg .chip:hover{position:relative}
.item-card .seg .chip[aria-checked=true]{position:relative}
.item-card .in.sel{width:auto;min-width:96px;font-size:13px;padding:4px 20px 5px 0}
.item-card .num{width:56px;text-align:center;border:1px solid var(--line);border-radius:2px;padding:4px 4px;background:var(--paper);font-size:13px}

/* ---------- compliments ---------- */
.comp{display:flex;flex-wrap:wrap;gap:6px 0}
.comp li{list-style:none;font:italic 500 17px/1.25 var(--serif);padding-right:18px;margin-right:18px;border-right:1px solid var(--line)}
.comp li:last-child{border:0;margin:0;padding:0}
ul.comp{margin:0;padding:0}

/* ---------- estimate ---------- */
.est-cta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px}
.hintline{font-size:12px;color:var(--mute)}
.est{margin-top:14px;border:1px solid var(--ink);padding:16px 18px 16px;display:grid;grid-template-columns:minmax(0,1fr) 150px;column-gap:14px}
.est-main{min-width:0}
.est-label{font-size:11.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--mute)}
.gift-rv{margin-top:2px}
.gift{padding-top:10px}
.gift-t{font:italic 500 17px/1.2 var(--serif)}
.gift-r{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 14px;margin-top:5px}
.was{font:500 21px/1.1 var(--serif);color:var(--mute);text-decoration:line-through;text-decoration-thickness:1px;font-variant-numeric:lining-nums}
.gift-d{font-size:12.5px}
.gift-d b{font-weight:500;border:1px solid var(--ink);padding:2px 7px;border-radius:2px;margin-right:8px;font-size:11.5px;letter-spacing:.04em}
.amt{display:block;margin-top:8px;font:600 40px/1 var(--serif);letter-spacing:.005em;font-variant-numeric:lining-nums;transition:opacity .25s}
.amt.tick{opacity:.25}
.amt sup{font-size:.5em;vertical-align:.7em;margin-left:2px}
.est-note{margin-top:8px;font-size:12px;line-height:1.45;color:var(--mute);max-width:52ch}
.est-stage{position:relative;height:112px;align-self:start}
.bf-q{position:absolute;left:0;right:0;bottom:-4px;text-align:center;font:italic 500 15px/1 var(--serif);color:var(--mute);opacity:0;transition:opacity .9s ease;pointer-events:none}
.bf-q.on{opacity:1}
.est-act{grid-column:1/-1;margin-top:16px;padding-top:14px;border-top:1px solid var(--hair);display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px}
.btn{font-size:13px;letter-spacing:.05em;line-height:1;padding:12px 20px;min-height:41px;border:1px solid var(--ink);border-radius:2px;background:var(--paper);color:var(--ink);cursor:pointer;transition:background .16s,color .16s}
.btn:hover{background:var(--ink);color:var(--paper)}
.btn.pri{background:var(--ink);color:var(--paper)}
.btn.pri:hover{background:#2a2a2a}
.link{display:inline-flex;align-items:center;gap:7px;border:0;background:none;padding:8px 2px;cursor:pointer;font-size:13px;text-decoration:underline;text-underline-offset:4px;text-decoration-color:#9a9a9a;color:var(--ink);transition:text-decoration-color .16s}
.link:hover{text-decoration-color:var(--ink)}
.link svg{width:15px;height:15px}
.pdf-tip{grid-column:1/-1;margin-top:8px;font-size:12px;color:var(--mute);transition:opacity .3s}

/* ---------- success ---------- */
.ok{grid-column:1/-1;margin-top:16px;padding-top:16px;border-top:1px solid var(--ink)}
.ok h3{font:600 24px/1.1 var(--serif)}
.ok .lead{margin-top:6px;max-width:48ch;color:var(--mute);font-size:13px}
.ok .ref{margin-top:12px;display:inline-flex;gap:10px;align-items:baseline;padding:8px 12px;border:1px solid var(--line);border-radius:2px}
.ok .ref span{font-size:11.5px;color:var(--mute)}
.ok .ref b{font:600 15px/1 var(--sans);letter-spacing:.12em}
.ok dl{margin:14px 0 0;display:grid;grid-template-columns:auto 1fr;gap:6px 22px;max-width:520px}
.ok dt{color:var(--mute);font-size:12.5px}
.ok dd{margin:0;font-size:13.5px}
.ok dd s{color:var(--mute);margin-right:8px}
.ok .btns{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;margin-top:16px}

/* ---------- butterfly ---------- */
.bf{position:fixed;left:0;top:0;z-index:50;width:104px;height:104px;margin:-52px 0 0 -52px;padding:0;border:0;background:transparent;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;will-change:transform;display:none}
.bf.on{display:block}
.bf-art{position:absolute;left:16px;top:16px;width:72px;height:72px;transform-origin:50% 50%;filter:drop-shadow(0 7px 7px rgba(20,10,60,.16));transition:opacity 1s ease}
.bf-svg{display:block;width:100%;height:100%;overflow:visible}
.bf.fade .bf-art{opacity:0}
.bf.done{cursor:default;pointer-events:none}
.bf:focus-visible{outline:none}
.bf:focus-visible .bf-art{outline:2px solid var(--ink);outline-offset:6px;border-radius:50%}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- proposal (print only) ---------- */
#proposal{display:none}

@media (max-width:760px){
  .sheet{padding:18px 16px 80px}
  .mast{flex-direction:column;align-items:flex-start;gap:8px}
  .lede{text-align:left;max-width:none}
  .sec{grid-template-columns:1fr;gap:9px;padding:14px 0 16px}
  .sec-h{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
  .sec-h p{margin:0;max-width:none}
  .grid2{gap:12px 16px}
  .in,input[type=date].in,input[type=time].in{font-size:16px}
  .fn-body .grid4{grid-template-columns:1fr 1fr 1fr}
  .fn-body .grid4 .f:first-child{grid-column:1/-1}
  .fn-body .grid4 .f:last-child{grid-column:1/-1}
  .cov-wrap.two{grid-template-columns:1fr}
  .cov-p+.cov-p{border-left:0;padding-left:0;border-top:1px solid var(--hair);padding-top:12px}
  .est{grid-template-columns:1fr;padding:14px 14px 14px}
  .est-stage{height:92px;order:1}
  .est-act{order:2}
  .pdf-tip{order:3}
  .ok{order:4}
  .amt{font-size:36px}
  .cap{font-size:17px}
  .bf{width:112px;height:112px;margin:-56px 0 0 -56px}
  .bf-art{left:16px;top:16px;width:80px;height:80px}
  .comp li{padding-right:12px;margin-right:12px}
}
@media (max-width:420px){
  .grid2{grid-template-columns:1fr}
  .fn-body .grid4{grid-template-columns:1fr 1fr}
  .fn-body .grid4 .f:nth-child(1),.fn-body .grid4 .f:nth-child(4){grid-column:1/-1}
  .btn{flex:1 1 auto;text-align:center}
  .brand img{height:27px}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition-duration:.01ms!important;animation-duration:.01ms!important}
  .rv{transition:none}
}

.brand,.sec-h h2,.fn-ti h3,.cov-t,.cap,.comp li,.gift-t,.ok h3,.item-card .ti,.was{font-variant-numeric:lining-nums}

/* ---------- sticky companion (wide desktop only) ---------- */
.companion{display:none}
@media (min-width:1280px){
  .companion{display:block;grid-column:3;grid-row:1;min-width:0;padding-left:22px}
}
.comp-in{position:sticky;top:84px;width:128px;margin-top:92px;opacity:0;visibility:hidden;transform:translateY(10px);pointer-events:none;
  transition:opacity .5s ease,transform .5s var(--ease),visibility 0s linear .5s}
.comp-in.on{opacity:1;visibility:visible;transform:none;pointer-events:auto;transition-delay:0s}
.comp-in .fig-stack{height:176px}
.comp-cap{margin-top:10px;font:italic 500 14px/1.25 var(--serif);color:var(--mute);transition:opacity .3s ease}
.comp-cap.swap{opacity:0}

/* ---------- character life — shared hooks, every tradition ----------
   fabric / body / head layers; outer groups carry hover + reactions, inner groups the idle breath. */
.fx-stack svg{overflow:visible}
.fx-fig,.fx-fig-i,.fx-fabric,.fx-fabric-i,.fx-body,.fx-body-i,.fx-head,.fx-head-i,.fx-head-j{transform-box:fill-box;transform-origin:50% 100%}
.fx-fabric,.fx-fabric-i{transform-origin:50% 0}
.fx-head,.fx-head-j{transform-origin:50% 118%}
.fx-stack{--amp:1}
@media (max-width:1279px){.fx-stack{--amp:.5}}
html.fx-soft .fx-stack{--amp:.3}

@keyframes fxBreathe{to{transform:scaleY(calc(1 + var(--amp,1) * .005))}}
@keyframes fxHeadRise{to{transform:translateY(calc(var(--amp,1) * -.95px))}}
@keyframes fxHeadTilt{0%,100%{transform:rotate(0)}35%{transform:rotate(calc(var(--amp,1) * .7deg))}70%{transform:rotate(calc(var(--amp,1) * -.55deg))}}
@keyframes fxSway{0%,100%{transform:skewX(0)}50%{transform:skewX(calc(var(--amp,1) * .8deg))}}
@keyframes fxLeanR{0%,100%{transform:rotate(0)}50%{transform:rotate(calc(var(--amp,1) * .5deg))}}
@keyframes fxLeanL{0%,100%{transform:rotate(0)}50%{transform:rotate(calc(var(--amp,1) * -.5deg))}}
.fx-body-i{animation:fxBreathe 6.4s ease-in-out infinite alternate}
.fx-head-i{animation:fxHeadRise 6.4s ease-in-out infinite alternate}
.fx-head-j{animation:fxHeadTilt 11s ease-in-out infinite}
.fx-fabric-i{animation:fxSway 7.5s ease-in-out infinite}
.fx-stack[data-kind=couple] .bride>.fx-fig-i{animation:fxLeanR 9s ease-in-out infinite}
.fx-stack[data-kind=couple] .groom>.fx-fig-i{animation:fxLeanL 9s ease-in-out -2.5s infinite}

/* idle rests when the figure is off-screen, and while the butterfly owns the stage */
.fx-off .fx-idle,html.fx-hush .fx-idle{animation-play-state:paused!important}

/* one restrained hover acknowledgement */
@keyframes fxAckHead{0%,100%{transform:rotate(0)}40%{transform:rotate(-3deg)}}
@keyframes fxAckHeadG{0%,100%{transform:rotate(0) translateY(0)}40%{transform:rotate(2.4deg) translateY(-.8px)}}
@keyframes fxAckVeil{0%,100%{transform:skewX(0)}45%{transform:skewX(1.8deg)}}
@keyframes fxAckBody{0%,100%{transform:translateY(0)}40%{transform:translateY(-1px)}}
@keyframes fxAckB{0%,100%{transform:translateX(0) rotate(0)}45%{transform:translateX(1.6px) rotate(.9deg)}}
@keyframes fxAckG{0%,100%{transform:translateX(0) rotate(0)}45%{transform:translateX(-1.6px) rotate(-.9deg)}}
.fx-stack.ack[data-kind=bride] .fx-head{animation:fxAckHead 1.2s ease-in-out}
.fx-stack.ack[data-kind=bride] .fx-fabric{animation:fxAckVeil 1.5s ease-in-out}
.fx-stack.ack[data-kind=groom] .fx-head{animation:fxAckHeadG 1.1s ease-in-out}
.fx-stack.ack[data-kind=groom] .fx-body{animation:fxAckBody 1.1s ease-in-out}
.fx-stack.ack[data-kind=couple] .bride.fx-fig{animation:fxAckB 1.4s ease-in-out}
.fx-stack.ack[data-kind=couple] .groom.fx-fig{animation:fxAckG 1.4s ease-in-out}

/* a brief reaction to a meaningful positive choice */
@keyframes fxLiftBody{0%,100%{transform:scaleY(1)}40%{transform:scaleY(1.012)}}
@keyframes fxLiftHead{0%,100%{transform:translateY(0) rotate(0)}40%{transform:translateY(-2px) rotate(-1.6deg)}}
@keyframes fxFlutter{0%,100%{transform:skewX(0)}40%{transform:skewX(1.5deg)}}
.fx-stack.react .fx-body{animation:fxLiftBody .55s ease-out}
.fx-stack.react .fx-head{animation:fxLiftHead .55s ease-out}
.fx-stack.react .fx-fabric{animation:fxFlutter .6s ease-out}

@media (prefers-reduced-motion:reduce){
  .fx-stack *{animation:none!important}
  .comp-in{transition:none!important;transform:none!important}
}

/* ---------- illustration strokes ---------- */
.ln{fill:none;stroke:#000;stroke-width:.9;stroke-linecap:round;stroke-linejoin:round}
.fl{fill:#fff;stroke:#000;stroke-width:.9;stroke-linecap:round;stroke-linejoin:round}
.hl{fill:none;stroke:#8a8a8a;stroke-width:.45;stroke-linecap:round}
.dots{fill:none;stroke:#000;stroke-width:.9;stroke-linecap:round;stroke-dasharray:.05 2.1}
.bk{fill:#000;stroke:#000;stroke-width:.6;stroke-linejoin:round}
.wl{fill:none;stroke:#fff;stroke-width:.6;stroke-linecap:round;stroke-linejoin:round}

/* ---------- the proposal (quote): same look on screen and in print ---------- */
#proposal{color:#000;font:400 10.5pt/1.5 var(--serif);font-variant-numeric:lining-nums}
#proposal *{font-variant-numeric:lining-nums}
#proposal.screen{display:block;max-width:760px;margin:28px auto;padding:0 24px 60px}
#proposal *{font-variant-numeric:lining-nums}
.pp-head{text-align:center;padding-bottom:10pt;border-bottom:1.2pt solid #000}
.pp-brand{font:600 26pt/1 var(--serif);letter-spacing:.22em;text-indent:.22em}
.pp-sub{margin-top:8pt;font:400 8.5pt/1 var(--sans);letter-spacing:.3em;text-indent:.3em}
.pp-meta{display:flex;justify-content:space-between;margin-top:9pt;font:400 8pt/1.3 var(--sans);color:#444}
.pp-sec{margin-top:15pt;break-inside:avoid-page}
.pp-sec h2{font:600 8.5pt/1 var(--sans);letter-spacing:.24em;padding-bottom:5pt;border-bottom:.5pt solid #000;margin-bottom:7pt}
.pp-for{display:grid;grid-template-columns:1fr 1fr;gap:6pt 28pt}
.pp-for div{break-inside:avoid}
.pp-for small{display:block;font:400 7.5pt/1 var(--sans);letter-spacing:.14em;text-transform:uppercase;color:#555;margin-bottom:2pt}
.pp-for b{font:500 12pt/1.25 var(--serif)}
.pp-fn{display:grid;grid-template-columns:30mm 1fr;gap:2pt 14pt;padding:6pt 0;border-bottom:.4pt solid #bbb;break-inside:avoid}
.pp-fn:last-child{border-bottom:0}
.pp-fn h3{font:600 12.5pt/1.2 var(--serif)}
.pp-fn p{font-size:10pt}
.pp-fn .cv{color:#333}
.pp-ul{margin:0;padding:0;list-style:none}
.pp-ul li{padding:3pt 0;border-bottom:.4pt solid #ddd;break-inside:avoid}
.pp-ul li:last-child{border:0}
.pp-ul li b{font-weight:600}
.pp-ul.it li{font-style:italic}
.pp-inv{display:flex;justify-content:space-between;align-items:baseline;padding:3pt 0}
.pp-total{margin-top:6pt;padding-top:8pt;border-top:1.2pt solid #000;display:flex;justify-content:space-between;align-items:baseline}
.pp-total span{font:400 8.5pt/1 var(--sans);letter-spacing:.2em;text-transform:uppercase}
.pp-total b{font:600 24pt/1 var(--serif)}
.pp-total s{color:#666;font-size:12pt;margin-right:10pt}
.pp-foot{margin-top:16pt;padding-top:7pt;border-top:.4pt solid #888;font:400 7.5pt/1.5 var(--sans);color:#444}

@media print{
  @page{size:A4;margin:16mm 17mm 18mm}
  html,body{background:#fff!important}
  body>*:not(#proposal){display:none!important}
  #proposal{display:block}
}

/* ---------- production additions ---------- */
.est-err{margin-top:8px;font-size:12.5px;color:var(--ink)}
.est-err::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--ink);margin-right:7px;vertical-align:1px}
.hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}
noscript .ns{margin:40px auto;max-width:520px;padding:0 20px;font:400 15px/1.5 var(--sans)}

/* ---------- touch: phones and tablets get finger-sized controls (desktop stays compact) ---------- */
@media (max-width:760px),(pointer:coarse){
  .in,.item-card .in.sel,.item-card .num,.custom-add .in,.hp{font-size:16px}      /* 16px+ stops iPhones zooming the page on focus */
  .in,input[type=date].in,input[type=time].in,select.in{min-height:42px}
  .item-card .in.sel{min-width:112px;padding:8px 22px 8px 0}
  .item-card .num{width:74px;min-height:40px}
  .chip,.item-card .seg .chip{min-height:40px;padding:10px 14px}
  .chip.sm{min-height:38px;padding:9px 12px}
  .step button{width:40px;height:40px;font-size:19px}
  .step output{min-width:32px}
  .chg{display:inline-flex;align-items:center;min-height:40px;padding:0 2px}
  .fn-edit{min-height:36px;padding:8px 2px}
  .link{min-height:40px}
  .same{min-height:40px}
  .btn{min-height:46px}
}
