/* The Trace sits over the photographs and below the readable room content. */
.cabinetTrace{position:absolute;inset:0;z-index:1;pointer-events:none;overflow:hidden;--trace-ink:#f9da9b}
.cabinetTrace[data-theme="festival"]{--trace-ink:#ffb685}
.cabinetTrace[data-theme="book"]{--trace-ink:#f9e8ed}
.cabinetOverlay[data-active="book"] .cabinetStory>span,.cabinetOverlay[data-active="book"] .cabinetStory>p:first-of-type{color:#70485a}
.cabinetTrace svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.cabinetTrace path{fill:none;stroke:var(--trace-ink);stroke-width:1.8;stroke-linecap:round;stroke-dasharray:var(--trace-length,1000px);stroke-dashoffset:var(--trace-length,1000px);opacity:0;filter:drop-shadow(0 0 5px var(--trace-ink)) drop-shadow(0 0 14px var(--trace-ink))}
.cabinetTrace.isVisible path{animation:cabinetTraceDraw 1.6s cubic-bezier(.2,.68,.2,1) both}
.cabinetTrace[data-theme="book"].isVisible path{animation:cabinetBookTraceDraw 3.9s cubic-bezier(.35,.08,.2,1) both;stroke-width:2}
.cabinetTraceMotes{position:absolute;inset:0}
.cabinetTraceMotes i{position:absolute;display:block;width:6px;height:6px;margin:-3px;border-radius:50%;background:#ffe1a9;box-shadow:0 0 8px 2px #ffb77f,0 0 20px 4px #ff906264;opacity:0}
.cabinetTrace[data-theme="festival"].isVisible .cabinetTraceMotes i{animation:cabinetLightFlight 1.4s cubic-bezier(.18,.73,.2,1) var(--delay,0ms) both}
.cabinetTrace[data-theme="festival"] .cabinetTraceMotes i{width:8px;height:8px;margin:-4px;background:#fff5d6;box-shadow:0 0 6px 2px #ffde9d,0 0 22px 8px #ffaf6575}
.cabinetTrace[data-theme="festival"] .cabinetTraceMotes i:after{content:"";position:absolute;left:50%;top:50%;width:46px;height:46px;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,#fff8dfa8 0,#ffbc6852 22%,transparent 68%);filter:blur(5px);opacity:0}
.cabinetTrace[data-theme="festival"].isVisible .cabinetTraceMotes i:after{animation:cabinetLampGlow .85s ease calc(var(--delay,0ms) + 1.1s) both}
.cabinetTraceSignature[hidden]{display:none!important}
.cabinetTraceSignature{position:fixed;z-index:3;display:block;width:340px;height:135px;overflow:hidden;color:#f9e8ed;clip-path:inset(0 100% 0 0);opacity:0;cursor:pointer;text-decoration:none;filter:drop-shadow(0 0 12px #f4d4e48a)}
.cabinetTraceSignature img{position:absolute;left:0;top:-140px;width:100%;height:auto;max-height:none;filter:invert(1) sepia(.55) saturate(.6);pointer-events:none}
.cabinetTraceSignature span{position:absolute;right:34px;bottom:0;color:#fff0ee;font:700 9px/1.2 Arial,sans-serif;letter-spacing:.13em;text-transform:uppercase;text-shadow:0 2px 7px #000c}
.cabinetTraceSignature:hover span,.cabinetTraceSignature:focus-visible span{text-decoration:underline;text-underline-offset:4px}
.cabinetOverlay[data-active="book"].isActivated .cabinetTraceSignature{animation:cabinetSign 1.35s ease 3.28s both}
.cabinetTrace[data-theme="wedding"].isVisible:after{content:"";position:absolute;left:var(--trace-end-x);top:var(--trace-end-y);width:80px;height:80px;translate:-50% -50%;border-radius:50%;background:radial-gradient(circle,#fff1bfaa 0,#f7c9865e 21%,transparent 72%);mix-blend-mode:screen;animation:cabinetFlare 2s ease both}
.cabinetTraceQuote[hidden]{display:none!important}
.cabinetTraceQuote{position:fixed;z-index:3;width:230px;margin:0;padding:0;color:#47382c;text-shadow:0 1px 2px #fff8eaa8;filter:drop-shadow(0 2px 5px #fff7e27a);animation:cabinetQuoteWrite 1.15s ease 1.05s both}
.cabinetTraceQuote p{font:italic 400 19px/1.16 Georgia,serif;letter-spacing:-.035em;margin:0 0 9px}
.cabinetTraceQuote cite{font:700 8px/1.35 Arial,sans-serif;letter-spacing:.1em;text-transform:uppercase;font-style:normal}
.cabinetFrame>.cabinetHeader,.cabinetFrame>.cabinetContent,.cabinetFrame>.cabinetShelf,.cabinetFrame>.cabinetEcho{z-index:2}
.cabinetObject.hasTrace .cabinetPaper:after{content:"";position:absolute;right:5px;top:5px;width:5px;height:5px;border-radius:50%;background:#ffe4ab;box-shadow:0 0 0 1px #6c553b,0 0 10px 3px #ffd285;z-index:4}
.cabinetObject.hasTrace .cabinetObjectName:after{content:" ·";color:#f4d6a8}
.cabinetFinale[hidden]{display:none!important}
.cabinetFrame.isFinale>.cabinetHeader,.cabinetFrame.isFinale>.cabinetContent,.cabinetFrame.isFinale>.cabinetShelf,.cabinetFrame.isFinale>.cabinetEcho,.cabinetFrame.isFinale>.cabinetTrace{display:none!important}
.cabinetFinale{position:absolute;inset:0;z-index:10;display:flex;flex-direction:column;justify-content:space-between;isolation:isolate;overflow:hidden;background:#101613;color:#fff7e9;padding:clamp(22px,3.6vw,58px)}
.cabinetFinalePanels{position:absolute;inset:0;z-index:-2;display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
.cabinetFinalePanels img{width:100%;height:100%;object-fit:cover;filter:brightness(.47) saturate(.74);border-right:1px solid #e6d0a74d;animation:cabinetPanelReveal .95s cubic-bezier(.16,.7,.2,1) both}
.cabinetFinalePanels img:nth-child(1){object-position:57% center;animation-delay:0s}
.cabinetFinalePanels img:nth-child(2){object-position:52% center;animation-delay:.15s}
.cabinetFinalePanels img:nth-child(3){object-position:52% center;animation-delay:.3s}
.cabinetFinale:after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(0deg,#0c1412e8,transparent 37%,#0c14128a),linear-gradient(90deg,#10161242,transparent 24%,#10161242);pointer-events:none}
.cabinetFinaleTop,.cabinetFinaleBottom{display:flex;justify-content:space-between;align-items:center;gap:20px;font:700 10px/1.4 Arial,sans-serif;letter-spacing:.18em;text-transform:uppercase;color:#eedbbd}
.cabinetFinaleTopActions{display:flex;align-items:center;justify-content:flex-end;gap:8px}
.cabinetFinaleTop button,.cabinetFinaleBottom button{appearance:none;background:#0d1716b8;border:1px solid #e9d7bca6;color:#fff7e9;padding:12px 16px;min-height:44px;font:inherit;letter-spacing:.1em;cursor:pointer}
.cabinetFinaleBottom button{background:#e5d1ac;color:#19231e;border-color:#e5d1ac}
.cabinetFinaleCenter{width:min(900px,100%);align-self:center;text-align:center;display:flex;flex-direction:column;align-items:center;gap:18px;text-shadow:0 4px 25px #000e}
.cabinetFinaleThread{width:min(780px,84vw);height:100px;overflow:visible}
.cabinetFinaleThread path{fill:none;stroke:#f3d59f;stroke-width:1.5;stroke-dasharray:1100;stroke-dashoffset:1100;filter:drop-shadow(0 0 7px #ffe0a7)}
.cabinetFinaleThread circle{fill:#ffdeac;opacity:0;filter:drop-shadow(0 0 8px #ffe4b2)}
.cabinetFinale:not([hidden]) .cabinetFinaleThread path{animation:cabinetFinaleLine 2s cubic-bezier(.18,.65,.3,1) .45s both}
.cabinetFinale:not([hidden]) .cabinetFinaleThread circle{animation:cabinetFinalePoint .5s ease 1.9s both}
.cabinetFinaleCenter h2{font:italic 400 clamp(44px,5.7vw,88px)/.98 Georgia,serif;letter-spacing:-.052em;max-width:970px;margin:0;text-wrap:balance;animation:cabinetFinaleText .9s ease 1.3s both}
.cabinetFinaleCenter p{font:400 clamp(16px,1.3vw,20px)/1.5 Georgia,serif;max-width:590px;margin:0;color:#f1e5d4;animation:cabinetFinaleText .9s ease 1.55s both}
.cabinetFinaleBottom>span{max-width:360px;color:#e2d3bf}
@keyframes cabinetTraceDraw{0%{stroke-dashoffset:var(--trace-length);opacity:0}12%{opacity:1}78%{stroke-dashoffset:0;opacity:1}100%{stroke-dashoffset:0;opacity:.72}}
@keyframes cabinetBookTraceDraw{0%{stroke-dashoffset:var(--trace-length);opacity:0}8%{opacity:1}43%{stroke-dashoffset:var(--trace-heart-start)}68%{stroke-dashoffset:var(--trace-heart-end)}94%{stroke-dashoffset:0;opacity:.92}100%{stroke-dashoffset:0;opacity:.82}}
@keyframes cabinetLightFlight{0%{transform:translate(var(--from-x),var(--from-y)) scale(.15);opacity:0}18%{opacity:1}75%{opacity:1}100%{transform:translate(0,0) scale(1);opacity:1}}
@keyframes cabinetLampGlow{from{opacity:0;scale:.4}to{opacity:.9;scale:1}}
@keyframes cabinetQuoteWrite{from{opacity:0;clip-path:inset(0 100% 0 0)}to{opacity:1;clip-path:inset(0)}}
@keyframes cabinetSign{0%,28%{clip-path:inset(0 100% 0 0);opacity:0}35%{opacity:.9}100%{clip-path:inset(0 0 0 0);opacity:.9}}
@keyframes cabinetFlare{0%,35%{opacity:0;scale:.3}65%{opacity:1;scale:1}100%{opacity:.7;scale:1.25}}
@keyframes cabinetPanelReveal{from{clip-path:inset(100% 0 0 0);filter:brightness(.18) saturate(.5)}to{clip-path:inset(0 0 0 0);filter:brightness(.47) saturate(.74)}}
@keyframes cabinetFinaleLine{to{stroke-dashoffset:0}}
@keyframes cabinetFinalePoint{to{opacity:1}}
@keyframes cabinetFinaleText{from{opacity:0;translate:0 18px;filter:blur(4px)}to{opacity:1;translate:0 0;filter:blur(0)}}
@media(max-width:700px){.cabinetTraceSignature{position:relative;width:min(300px,100%);height:125px;margin:0 auto}.cabinetTraceSignature img{top:-123px}.cabinetTraceQuote{position:relative;width:100%;max-width:335px;min-height:78px;padding:13px 17px;border-left:2px solid #f4d9a7;background:#f2e6d4e8;color:#493a2e;text-shadow:none;filter:none;box-shadow:0 8px 24px #0006}.cabinetTraceQuote p{font-size:16px;line-height:1.2;margin-bottom:7px}.cabinetTraceQuote cite{font-size:7px}.cabinetFinale{min-height:100dvh;padding:20px 21px calc(22px + env(safe-area-inset-bottom))}.cabinetFinalePanels img{object-position:center}.cabinetFinaleTop,.cabinetFinaleBottom{font-size:9px;letter-spacing:.11em}.cabinetFinaleTop span{max-width:200px}.cabinetFinaleCenter{gap:13px}.cabinetFinaleThread{height:75px;width:91vw}.cabinetFinaleCenter h2{font-size:clamp(43px,11.5vw,61px)}.cabinetFinaleCenter p{font-size:16px}.cabinetFinaleBottom{align-items:end}.cabinetFinaleBottom>span{max-width:145px;font-size:8px}.cabinetFinaleBottom button{max-width:160px}}
@media(max-width:370px){.cabinetFinaleTop span{max-width:175px}.cabinetFinaleCenter h2{font-size:41px}.cabinetFinaleBottom{gap:10px}.cabinetFinaleBottom button{font-size:9px;padding:10px}}
@media(prefers-reduced-motion:reduce){.cabinetTrace.isVisible path,.cabinetTraceQuote,.cabinetTrace[data-theme="festival"].isVisible .cabinetTraceMotes i,.cabinetTrace[data-theme="festival"].isVisible .cabinetTraceMotes i:after,.cabinetOverlay[data-active="book"].isActivated .cabinetTraceSignature,.cabinetTrace[data-theme="wedding"].isVisible:after,.cabinetFinalePanels img,.cabinetFinale:not([hidden]) .cabinetFinaleThread path,.cabinetFinale:not([hidden]) .cabinetFinaleThread circle,.cabinetFinaleCenter h2,.cabinetFinaleCenter p{animation:none!important}.cabinetTrace.isVisible path{opacity:.72;stroke-dashoffset:0}.cabinetTraceQuote{opacity:1;clip-path:none}.cabinetTrace[data-theme="festival"].isVisible .cabinetTraceMotes i{opacity:.9;transform:none}.cabinetTrace[data-theme="festival"].isVisible .cabinetTraceMotes i:after{opacity:.7;scale:1}.cabinetOverlay[data-active="book"].isActivated .cabinetTraceSignature{clip-path:none;opacity:.9}.cabinetTrace[data-theme="wedding"].isVisible:after{opacity:.7}.cabinetFinaleThread path{stroke-dashoffset:0}.cabinetFinaleThread circle{opacity:1}}
