@font-face{font-family:MoonHand;src:url('/assets/moon-hand.ttf') format('truetype');font-display:swap}
@font-face{font-family:YaoHand;src:url('/assets/yao-hand.woff2') format('woff2');font-display:swap}

/* v10 夜間版（2026-11-11）。樹洞是深夜躺在床上滑的網站：整頁是夜色，信紙是檯燈下的暗暖紙，
   不再有大片亮白。顏色都從插畫取：夜藍、燈火金、月紫、小花粉。主要文字對比都在 7:1 以上。
   品牌字「曜室」用曜室網站同一套 YaoHand；MoonHand 只收了 43 個字，只給標題用。 */
:root{
  color-scheme:dark;
  --desk:#131d27;--night:#172533;--night-soft:#1f3843;
  --paper:#2f2a23;--paper-shade:#3a342b;--kraft:#3a3226;--rule:#4f4536;--line-input:#9a8661;
  --ink:#efe4cc;--sub:#c2b59a;--placeholder:#a8997c;
  --btn:#e9bf6b;--btn-d:#a77a35;--btn-ink:#2a2116;--quiet:#4a4033;--quiet-d:#2a241c;
  --tick-edge:#b49c70;--tick-on:#e9bf6b;--tick-mark:#1b2a33;
  --lantern:#f3cb7e;--lantern-hi:#ffdc97;--gold-text:#d9b36a;
  --moon:#b7addb;--focus:#c3b8ea;
  --flower:#e2938c;--alert:#f0907a;--stamp:#e8826a;
  --serif:"Songti TC","Noto Serif TC","Noto Serif CJK TC","PMingLiU",serif;
  --sans:"PingFang TC","Heiti TC","Noto Sans CJK TC",system-ui,sans-serif;
  --hand:MoonHand,YaoHand,"Songti TC",serif;
  --brand:YaoHand,"Hannotate TC","PingFang TC",sans-serif;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html{background:var(--desk)}
body{margin:0;min-width:0;background:var(--desk) url('/assets/grain.9951688dab.webp') 0 0/160px auto;color:var(--ink);font:16px/1.65 var(--sans);-webkit-text-size-adjust:100%}
button,input,textarea,select{font:inherit;color:inherit}
button,a{touch-action:manipulation}
button{cursor:pointer}
a{color:inherit}
h1,h2,h3,h4,p,dl,dd,ol,ul{margin:0}
ol,ul{padding:0;list-style:none}
:focus-visible{outline:3px solid var(--focus);outline-offset:3px}
h1:focus,h2:focus,h3:focus,main:focus{outline:none}
.symbols{position:absolute;width:0;height:0;overflow:hidden}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.icon{width:1.25em;height:1.25em;fill:none;stroke:currentColor;stroke-width:1.65;stroke-linecap:round;stroke-linejoin:round;flex:none}
.icon .fill{fill:currentColor;fill-opacity:.16}
.skip{position:absolute;z-index:10;left:12px;top:8px;transform:translateY(-170%);background:var(--lantern-hi);color:var(--btn-ink);padding:10px}
.skip:focus{transform:none}

/* 主星小角色：借曜室網站的剪紙主星（太陰、廉貞），豆豆眼加腮紅。 */
.pal{display:inline-block;width:36px;height:36px;background:url('/assets/cast-tree.webp') 0 0/200% 100% no-repeat;flex:none}
.pal-lian{background-position:100% 0}

/* ── 按鈕：跟曜室網站同一種剪紙（紙紋、不平的邊、底下一條厚度）。夜裡主按鈕用燈火金。
   紙邊用一個完整形狀剪出來（clip-path），不再用九宮格拼接：滑過、按下時不會露出拼接縫（2026-11-11）。── */
.btn{--b:var(--btn);--bd:var(--btn-d);--glow:0 0 0 transparent;position:relative;isolation:isolate;display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:56px;padding:12px 30px 16px;border:0;background:none;font:700 17px/1.3 var(--sans);letter-spacing:.1em;text-decoration:none;color:var(--btn-ink);
  filter:drop-shadow(0 2px 0 rgba(0,0,0,.28)) drop-shadow(0 6px 9px rgba(0,0,0,.22)) drop-shadow(var(--glow));transition:transform .18s ease,filter .25s ease}
.btn::before{content:"";position:absolute;inset:0;z-index:-1;background:radial-gradient(90% 120% at 18% 0%,#ffffff2e,transparent 60%),var(--b) url('/assets/grain.9951688dab.webp') 0 0/160px auto;
  box-shadow:inset 0 -5px 0 var(--bd),inset 0 2px 0 #ffffff4d;transition:background-color .2s,box-shadow .12s;
  clip-path:polygon(0 2.5px,4% 1px,9% 1.8px,15% .4px,22% 1.4px,29% .6px,36% 1.9px,43% .8px,51% 1.6px,58% .2px,65% 1.3px,72% .7px,79% 2px,86% .5px,92% 1.5px,97% .6px,100% 1.2px,calc(100% - 1.4px) 18%,100% 37%,calc(100% - 2px) 58%,calc(100% - .4px) 79%,calc(100% - 1.2px) 100%,95% calc(100% - 1.3px),89% 100%,82% calc(100% - 1.8px),75% calc(100% - .5px),68% calc(100% - 1.6px),61% 100%,54% calc(100% - 1.2px),47% calc(100% - .3px),40% calc(100% - 1.9px),33% calc(100% - .6px),26% calc(100% - 1.5px),19% 100%,12% calc(100% - 1.7px),6% calc(100% - .4px),0 calc(100% - 1.2px),1.6px 80%,.3px 60%,1.8px 39%,.6px 19%)}
/* 滑過：輕輕浮起、像被燈照亮，不歪斜；按下：沉下去、厚度變薄。 */
.btn:hover:enabled{--b:#f2cb7c;--glow:0 0 14px rgba(243,203,126,.45);transform:translateY(-2px)}
.btn:active:enabled{transform:translateY(1px);--glow:0 0 0 transparent}
.btn:active:enabled::before{box-shadow:inset 0 -2px 0 var(--bd),inset 0 2px 0 #ffffff33}
.btn:focus-visible{outline:3px solid var(--focus);outline-offset:4px}
.btn-main:disabled{--b:#5a5143;--bd:#3b342a;color:#cfc3a8;cursor:not-allowed}
[aria-busy=true] .btn-main:disabled{cursor:progress}
.btn-quiet{--b:var(--quiet);--bd:var(--quiet-d);min-height:48px;padding:9px 24px 13px;font-size:16px;font-weight:650;color:var(--ink)}
.btn-quiet:hover:enabled{--b:#564b3c;--glow:0 0 10px rgba(243,203,126,.25)}
.nav-link,.text-link,.back{border:0;background:none;padding:8px 0;font:500 15px/1.5 var(--sans);color:var(--ink)}
.text-link{min-height:44px;padding:8px 3px 12px;font-weight:650;letter-spacing:.06em;background:url('/assets/wave-night.svg') center bottom 5px/100% 6px no-repeat}
.text-link:hover{background-size:100% 8px}
.text-link:disabled{opacity:.45;cursor:not-allowed}
.nav-link{min-height:44px;letter-spacing:.04em;color:#e7dcc3}
.nav-link:hover,.back:hover,footer a:hover{text-decoration:underline;text-underline-offset:5px}
.scene :focus-visible{outline-color:var(--lantern-hi)}
.scene .btn:focus-visible{outline-color:var(--lantern-hi)}

/* ── 頁首頁尾：品牌字跟曜室網站一致 ── */
.top,footer{width:min(100% - clamp(36px,8vw,152px),1460px);margin:auto;display:flex;align-items:center;justify-content:space-between;gap:18px}
.top{min-height:76px}
.brand{display:inline-flex;align-items:center;text-decoration:none;gap:10px;color:#f1e6cd}
.brand img{object-fit:contain}
.brand>span{font:400 30px/1 var(--brand);letter-spacing:.16em;font-synthesis:none;color:#f3e2bd}
.brand small{font:700 10px/1.4 var(--sans);letter-spacing:.32em;color:var(--gold-text)}
nav{display:flex;align-items:center;gap:clamp(14px,2.5vw,40px)}
footer{min-height:84px;margin-top:26px;border-top:1px solid #ffffff12;color:var(--sub);font-size:14px;flex-wrap:wrap;row-gap:4px;justify-content:center;column-gap:18px;padding:14px 0 22px}
footer a{padding:10px 0;text-decoration:none;font-size:14px;color:#e7dcc3}
footer small{flex-basis:100%;text-align:center;font-size:13px}
.foot-cast{display:inline-flex;gap:2px}.foot-cast .pal{width:30px;height:30px}
.foot-mark{display:inline-flex;align-items:center;gap:8px;font:400 19px var(--brand);letter-spacing:.14em;font-synthesis:none;color:#f1e6cd}
.foot-mark span{font:700 9.5px var(--sans);letter-spacing:.3em;color:var(--gold-text)}

/* ── 夜景首頁 ── */
.scene{width:min(100% - clamp(30px,5vw,100px),1520px);min-height:clamp(590px,calc(100svh - 154px),820px);margin:0 auto;position:relative;isolation:isolate;overflow:hidden;border-radius:14px;background:var(--night);color:#fff3d7;display:flex;align-items:center;box-shadow:0 0 0 1px #ffffff0d,0 14px 34px #00000059}
.scene-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 55%;z-index:-3}
.scene:after{content:"";position:absolute;inset:0;z-index:-2;background:linear-gradient(90deg,#111e29e0 0%,#13212ca6 27%,#12202b22 50%,transparent 67%);pointer-events:none}
.scene-copy{width:48%;max-width:700px;padding:clamp(38px,5vw,86px) 0 clamp(42px,6vw,94px) clamp(35px,6.6vw,114px)}
h1{font:500 clamp(60px,6.2vw,100px)/1.14 var(--hand);letter-spacing:.08em;white-space:nowrap;text-shadow:0 2px 9px #0b222b38}
.tagline{max-width:31em;margin-top:16px;font-size:15px;line-height:1.9;color:#efdfc0;letter-spacing:.045em}
.rule{width:55px;height:1px;background:#cfae74ab;position:relative;margin:28px 0 25px}
.rule i{position:absolute;right:-1px;top:-2px;width:5px;height:5px;transform:rotate(45deg);background:#dfbf82}
.greeting{font:500 clamp(21px,1.6vw,27px)/1.65 var(--serif);letter-spacing:.026em;text-wrap:pretty}
.words{margin-top:10px;font-size:clamp(15px,1.12vw,18px);line-height:1.95;color:#f7edda;letter-spacing:.035em;max-width:30em}
.invitation .btn-main{margin-top:30px;min-height:60px;padding-inline:34px;font-size:18px}
.home-status{color:var(--lantern-hi);padding-top:12px;font-size:15px}
.how{counter-reset:how;display:grid;gap:7px;margin-top:32px;max-width:36em;font-size:15px;line-height:1.6;color:#f1e3c3;letter-spacing:.03em}
.how li{counter-increment:how;display:flex;align-items:baseline;gap:8px}
.how li::before{content:counter(how);flex:none;display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:#f3cb7e2e;box-shadow:inset 0 0 0 1px #f3cb7e8c;color:var(--lantern-hi);font:600 12px/1 var(--sans);transform:translateY(2px)}
.how-note{margin-top:12px;max-width:36em;font-size:14px;line-height:1.75;color:#d9cdb2}
/* 求助資訊：每個人都看得到，不依信的內容出現。安靜、不嚇人，但號碼點了就能撥。 */
.sos{margin-top:14px;max-width:36em;font-size:14px;line-height:1.75;color:#d9cdb2}
.sos a{color:var(--lantern-hi);text-decoration:underline;text-decoration-color:#ffdc9766;text-underline-offset:4px;white-space:nowrap}

body:not([data-view="home"]) .scene{min-height:0;height:clamp(220px,21vw,310px);border-radius:10px;background:radial-gradient(ellipse at 47% 105%,#28424a,transparent 65%),#172c35}
body:not([data-view="home"]) .scene:before{content:"";position:absolute;inset:0 37% 0 0;z-index:-3;background:url('/assets/moon-tree-crescent-v4.webp') left 45% / 255% auto no-repeat;mask-image:linear-gradient(90deg,#000 40%,transparent)}
body:not([data-view="home"]) .scene:after{background:linear-gradient(90deg,#172b34a1,transparent 55%)}
body:not([data-view="home"]) .scene-art{position:absolute;inset:-13% 0 auto auto;height:155%;width:auto;max-width:none;object-fit:fill;mask-image:linear-gradient(90deg,transparent,#000 23%)}
body:not([data-view="home"]) .scene-copy{padding:16px clamp(20px,5vw,70px);width:auto}
body:not([data-view="home"]) h1{font-size:clamp(35px,4.2vw,60px)}
body:not([data-view="home"]) .invitation{display:none}

/* ── 信紙：檯燈下的暗暖紙，左上一圈很淡的燈光 ── */
.sheet{max-width:720px;margin:0 auto;padding:18px 22px 12px;scroll-margin-top:8px}
.sheet-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px;margin-bottom:8px}
.back{display:inline-flex;align-items:center;gap:7px;min-height:44px;color:var(--sub)}
.steps{display:flex;align-items:center;font-size:14px;line-height:1.3;color:#a89d86;letter-spacing:.05em}
.steps li{display:flex;align-items:center;gap:7px}
.steps li::before{content:"";flex:none;width:11px;height:11px;border-radius:50%;box-shadow:inset 0 0 0 1.5px #8d8270}
.steps li:not(:last-child)::after{content:"";width:22px;height:1.5px;margin:0 9px 0 3px;background:#4f4638}
.steps li[data-state=done]::before{background:var(--moon);box-shadow:none}
.steps li[data-state=done]::after{background:var(--moon)}
.steps li[data-state=now]{color:var(--ink);font-weight:650}
.steps li[data-state=now]::before{background:var(--lantern);box-shadow:0 0 0 4px #f3cb7e3d;animation:dot-pop .4s ease-out}

.paper-lift{filter:drop-shadow(0 2px 0 rgba(0,0,0,.35)) drop-shadow(0 12px 18px rgba(0,0,0,.35))}
.paper{position:relative;background:radial-gradient(120% 60% at 10% 0%,#f3cb7e14,transparent 62%),var(--paper) url('/assets/grain.9951688dab.webp') 0 0/160px auto;border-radius:6px;padding:clamp(28px,4.6vw,58px);-webkit-mask-box-image:url('/assets/edge-card.03ce73fb6b.png') 32 fill / 16px round;mask-border:url('/assets/edge-card.03ce73fb6b.png') 32 fill / 16px round}
.paper[data-step="3"]::before{content:"";position:absolute;inset:0;pointer-events:none;background:
  linear-gradient(180deg,transparent calc(33.3% - 6px),rgba(0,0,0,.18) 33.3%,rgba(255,240,210,.07) calc(33.3% + 1.5px),transparent calc(33.3% + 8px)),
  linear-gradient(180deg,transparent calc(66.6% - 6px),rgba(0,0,0,.18) 66.6%,rgba(255,240,210,.07) calc(66.6% + 1.5px),transparent calc(66.6% + 8px))}
.paper-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-bottom:16px;margin-bottom:6px;border-bottom:3px double #5d5240}
h2{font:500 clamp(31px,3.2vw,45px)/1.27 var(--hand);letter-spacing:.055em}
.stamp{--tilt:7deg;display:grid;place-items:center;border:1px dashed #9a8661;outline:1px solid #5d5240;outline-offset:3px;width:44px;height:46px;transform:rotate(var(--tilt));background:var(--paper-shade);animation:thump .5s cubic-bezier(.3,1.6,.5,1) .3s both}
.stamp .pal{width:34px;height:34px}
/* 太陰說話：位置先留好，泡泡出現不會把版面推開。 */
.pal-row{display:flex;justify-content:flex-end;min-height:38px;margin:0 0 10px}
.pal-say{position:relative;max-width:100%;margin-top:6px;padding:6px 13px;border-radius:12px;background:#3c3850;color:#f1e8d4;font-size:14px;line-height:1.5;letter-spacing:.03em;opacity:0;transform:translateY(-4px);transition:opacity .45s,transform .45s;pointer-events:none}
.pal-say::before{content:"";position:absolute;right:16px;top:-6px;border:6px solid transparent;border-top:0;border-bottom-color:#3c3850}
.pal-say.show{opacity:1;transform:none}
.pal-say:empty{display:none}
.letter-fields{margin:0;padding:0;border:0;min-inline-size:0}
.step-title{font:600 22px/1.5 var(--serif);letter-spacing:.06em;color:var(--ink)}
.step-title.second{margin-top:34px;padding-top:28px;border-top:1px solid var(--rule)}
.step{animation:sheet-in .45s cubic-bezier(.2,.9,.3,1.2) both}
.step-note{margin:0 0 22px;font-size:15px;line-height:1.75;color:var(--sub)}
.step-title.second + .field{margin-top:20px}
.step-actions{display:flex;justify-content:flex-end;margin-top:34px}

.field{margin:0 0 26px;padding:0;min-inline-size:0;border:0}
label,legend{display:block;font-size:15.5px;font-weight:650;line-height:1.5;letter-spacing:.04em}
legend{padding:0;margin-bottom:8px}
.optional{margin-left:10px;padding:1px 8px;border-radius:99px;background:var(--paper-shade);color:var(--sub);font-size:13px;font-weight:400;letter-spacing:.04em}
.field small{display:block;font-size:14px;line-height:1.7;color:var(--sub);margin-top:6px}
.under{display:flex;justify-content:space-between;gap:14px;align-items:baseline}
#count{white-space:nowrap;font-variant-numeric:tabular-nums}
#count.over{color:var(--alert);font-weight:650}
.error{color:var(--alert);font-size:15px;line-height:1.7;margin:18px 0 0}
.field small.error,small.field-error{display:block;color:var(--alert);font-size:14.5px;font-weight:600;margin-top:6px}
.permission small.field-error{margin:6px 0 0 33px}
.soft-note{color:#e6c98f!important}

.salute{font:500 27px/1.5 var(--hand);letter-spacing:.1em;margin-bottom:4px}
.story-field label{font-size:15px;font-weight:400;color:var(--sub)}
.sign{display:grid;justify-items:end;margin-top:36px}
.sign-field{width:min(100%,15em);margin-bottom:8px}
.sign-date{font:15px/1.6 var(--serif);letter-spacing:.1em;color:var(--sub)}
textarea{display:block;width:100%;min-height:204px;margin-top:8px;padding:0 4px;border:0;border-top:1px solid var(--rule);border-radius:0;resize:none;overflow:hidden;background:repeating-linear-gradient(transparent 0,transparent 33px,var(--rule) 33px,var(--rule) 34px) local;font:17px/34px var(--serif);letter-spacing:.03em;color:var(--ink);caret-color:var(--lantern)}
textarea:focus{outline:none;background:repeating-linear-gradient(#f3cb7e0d 0,#f3cb7e0d 33px,#8d7448 33px,#8d7448 34px) local;border-top-color:#8d7448}
textarea:focus-visible{box-shadow:0 0 0 3px #c3b8ea4d}

.chart-field > label,.chart-field > legend{display:flex;align-items:center;gap:6px;margin:0 0 4px}
.chart-icon{display:inline-block;width:26px;height:26px;flex:none;background:url('/assets/icons-a.fea63c54d9.webp') 0 0/400% 100% no-repeat}
.calendar-icon{background-position-x:33.3333%}.clock-icon{background-position-x:66.6667%}.pin-icon{background-position-x:100%}
.chart-duo,.chart-sex-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
.chart-duo{gap:18px}.chart-duo .field{margin-bottom:8px}
.chart-field :is(input,select).chart-line{
  display:block;width:100%;min-width:0;min-height:48px;margin:0;padding:8px 2px 6px;
  border:0;border-bottom:2px solid var(--line-input);border-radius:0;background-color:transparent;color:var(--ink);
  font:600 18px/1.3 var(--sans);letter-spacing:.02em;appearance:none;-webkit-appearance:none;caret-color:var(--lantern);
}
.chart-field select.chart-line{padding-inline-end:38px;background:url('/assets/select-chevron-night.svg') right 12px center/14px 10px no-repeat;cursor:pointer}
.chart-field select.chart-line option,.chart-field select.chart-line optgroup{background:#2f2a23;color:var(--ink)}
.chart-line:is([type=date],[type=time]){cursor:pointer;font-variant-numeric:tabular-nums}
.chart-line::-webkit-date-and-time-value{text-align:left}
.chart-line::-webkit-calendar-picker-indicator{opacity:.75}
.chart-line:invalid::-webkit-datetime-edit,.chart-line::placeholder{color:var(--placeholder);font-weight:400}
.chart-field .chart-line:focus{border-bottom-color:var(--focus);background-color:#f3cb7e12}
.chart-field .chart-line:focus-visible{outline:none;box-shadow:0 2px 0 var(--focus)}
.chart-field .chart-line:disabled{border-bottom-style:dashed;color:#8f8573;cursor:default}
input:-webkit-autofill{-webkit-box-shadow:0 0 0 40px var(--paper) inset;-webkit-text-fill-color:var(--ink)}
.when-field{max-width:24em}
.when-row{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:16px}

.tick{display:flex;gap:11px;align-items:flex-start;font-size:15.5px;font-weight:400;line-height:1.75;letter-spacing:.02em;cursor:pointer}
.tick input[type=checkbox]{position:relative;appearance:none;-webkit-appearance:none;width:22px;height:22px;margin:3px 0 0;flex:none;border:2px solid var(--tick-edge);border-radius:5px;transform:rotate(-3deg);background:#00000026;cursor:pointer}
.tick input:checked{background:var(--tick-on);border-color:var(--tick-on)}
.tick input:checked::after{content:"";position:absolute;left:5px;top:0;width:7px;height:13px;border:solid var(--tick-mark);border-width:0 3px 3px 0;transform:rotate(40deg);animation:tick-in .18s ease-out}
.chart-unknown{align-items:center;min-height:44px;width:fit-content;margin:2px 0 20px;color:var(--sub)}
.chart-unknown input[type=checkbox]{margin-top:0}

.chart-sex-options{gap:14px}
.chart-sex-options label{position:relative;display:block;cursor:pointer;border-radius:4px}
.chart-sex-options input[type=radio]{position:absolute;inset:0;z-index:1;margin:0;opacity:0;width:100%;height:100%;cursor:pointer}
.chart-sex .chart-sex-options label > span{
  display:grid;place-items:center;position:relative;min-height:52px;background:var(--kraft) url('/assets/grain.9951688dab.webp') repeat;background-size:160px;
  -webkit-mask-box-image:url('/assets/edge-card.03ce73fb6b.png') 32 fill / 14px round;
  mask-border:url('/assets/edge-card.03ce73fb6b.png') 32 fill / 14px round;
  box-shadow:inset 0 -4px #241f18;color:var(--ink);font:700 18px/1.4 var(--sans);
}
.chart-sex .chart-sex-options input:checked + span{background-color:var(--btn);box-shadow:inset 0 -4px var(--btn-d);color:var(--btn-ink)}
.chart-sex-options input:checked + span::after{content:"";position:absolute;right:16px;top:50%;width:10px;height:10px;border-radius:50%;transform:translateY(-50%);background:var(--tick-mark);box-shadow:0 0 0 3px #1b2a3333}
.chart-sex-options label:has(:focus-visible){outline:3px solid var(--focus);outline-offset:2px}

.permission,.enclosed{padding:24px 22px 20px;border-radius:5px;background:var(--kraft) url('/assets/grain.9951688dab.webp') 0 0/160px auto;-webkit-mask-box-image:url('/assets/edge-card.03ce73fb6b.png') 32 fill / 14px round;mask-border:url('/assets/edge-card.03ce73fb6b.png') 32 fill / 14px round}
.permission{margin-top:30px}
.permission legend{float:left;width:100%;margin-bottom:14px;font:600 16px/1.5 var(--serif);letter-spacing:.06em}
.permission legend + *{clear:both}
.permission small{margin:8px 0 0 33px}
.selection-check{border-top:2px dashed #ffffff1f;margin-top:16px;padding-top:16px}

.review-head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.review-head h4{font:600 17px/1.5 var(--serif);letter-spacing:.08em}
.review-head .salute{margin:0}
.letter-text{margin-top:6px;padding:0 4px;font:17px/34px var(--serif);letter-spacing:.03em;white-space:pre-wrap;overflow-wrap:anywhere;border-top:1px solid var(--rule);background:repeating-linear-gradient(transparent 0,transparent 33px,var(--rule) 33px,var(--rule) 34px)}
.review dt{font-size:14px;color:var(--sub);letter-spacing:.05em}
.review dd{margin-top:2px;font-size:17px;font-weight:600;line-height:1.6;overflow-wrap:anywhere}
.letter-ask{display:grid;gap:14px;margin-top:22px}
.letter-ask dd{font-family:var(--serif)}
.letter-sign{margin-top:26px;text-align:right;font:600 20px/1.6 var(--serif);letter-spacing:.08em}
.enclosed{margin-top:34px}
.enclosed dl{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 24px;margin-top:10px;padding-bottom:16px}
.enclosed dl .wide{grid-column:1/-1}
.agreed{padding-top:14px;border-top:2px dashed #ffffff1f;font-size:14.5px;line-height:1.7;color:var(--sub)}
.agreed li{position:relative;padding-left:26px}
.agreed li + li{margin-top:4px}
.agreed li::before{content:"";position:absolute;left:5px;top:5px;width:6px;height:11px;border:solid var(--moon);border-width:0 2.5px 2.5px 0;transform:rotate(40deg)}
.form-foot{margin:26px 0 0;text-align:center}
.form-foot .text-link{font-size:14px;font-weight:500;color:var(--sub)}
.sos-paper{margin:6px auto 0;text-align:center;font-size:14px;color:var(--sub)}
.step-note-soft{margin-top:-14px;color:#d9c79f}
.chip{display:inline-flex;align-items:center;min-height:40px;margin-top:8px;padding:6px 14px;border:1px dashed var(--line-input);border-radius:99px;background:#00000026;color:var(--ink);font-size:14.5px;letter-spacing:.03em}
.chip:hover{border-style:solid;background:#f3cb7e14}

/* ── 晚安：信摺好、飄進樹洞、樹洞亮一下，然後安靜下來 ── */
.centered{text-align:center}
.goodnight{font:500 21px/1.7 var(--serif);letter-spacing:.06em}
body[data-view="receipt"] main{display:grid;align-content:center;min-height:calc(100svh - 160px)}
.sheet.receipt{width:min(calc(100% - 28px),610px);max-width:none;margin:clamp(8px,2vh,22px) auto 18px;padding:0}
.paper.night-card{padding:0;overflow:hidden;cursor:default}
.night-picture{position:relative;isolation:isolate;overflow:hidden;background:#1b2b36;aspect-ratio:8/5;container-type:inline-size}
.night-picture img{display:block;width:100%;height:auto;aspect-ratio:8/5}
.night-sign{position:absolute;bottom:12px;left:18px;font:500 22px/1.4 var(--hand);letter-spacing:.1em;color:#fff1d3;text-shadow:0 1px 5px #15242c,0 0 13px #15242c}
.hollow-glow{position:absolute;left:86.3%;top:89.3%;width:30cqw;height:30cqw;margin:-15cqw 0 0 -15cqw;border-radius:50%;background:radial-gradient(circle,#ffd086cc 0%,#ffbe6a4d 32%,transparent 66%);opacity:.45;mix-blend-mode:screen;pointer-events:none}
.sparks i{position:absolute;left:86%;top:85%;width:5px;height:5px;border-radius:50%;background:#ffe5a8;box-shadow:0 0 7px #ffd27a;opacity:0}
.flyer{position:absolute;left:24%;top:58%;width:15%;pointer-events:none}
.flyer-y{display:block}
.flyer svg{display:block;width:100%;height:auto;overflow:visible;opacity:0;transform-origin:50% 50%}
.sheet-paper rect{fill:#f4e8cd}.sheet-paper path{fill:none;stroke:#c9b48a;stroke-width:1.6;stroke-linecap:round}
.envelope{opacity:0}.envelope rect{fill:#efdcb6}.envelope path{fill:none;stroke:#b39760;stroke-width:1.6;stroke-linejoin:round}
.seal{fill:#c9604a;opacity:0}
.sheet-paper,.seal{transform-box:fill-box;transform-origin:center}
.night-copy{position:relative;padding:clamp(24px,3.4vw,38px) 22px 28px}
.postmark{--tilt:8deg;position:absolute;right:22px;top:-38px;z-index:2;display:grid;place-items:center;align-content:center;width:72px;height:72px;border-radius:50%;border:2.5px solid var(--stamp);outline:1px solid var(--stamp);outline-offset:2px;background:var(--paper);color:var(--stamp);font:700 14px/1.2 var(--sans);letter-spacing:.14em;text-indent:.14em;transform:rotate(var(--tilt))}
.postmark small{display:block;margin-top:2px;font:600 10px/1.2 var(--sans);letter-spacing:.06em;text-indent:0;white-space:nowrap}
.night-card .night-copy h1{font:500 clamp(34px,3.6vw,46px)/1.32 var(--hand);letter-spacing:.06em;white-space:normal;text-shadow:none}
.night-copy .goodnight{margin:6px 0 20px}
.after{max-width:30em;margin:0 auto;font-size:14.5px;line-height:1.8;color:var(--sub)}
.after p + p{margin-top:6px}
.after a{color:var(--lantern-hi);text-underline-offset:4px}
.night-actions{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px 26px;margin-top:14px}
.replay{display:inline-flex;align-items:center;justify-content:center;gap:6px}
.replay svg{width:16px;height:16px}
.sos-night{margin:16px auto 0;padding-top:14px;border-top:1px solid #ffffff14;font-size:14px}
/* 播放中：每一拍照分鏡出現；沒有播放（減少動態、跳過、播完）就是完整的最後畫面。 */
/* 飛行一氣呵成：左右、上下（拋物線）、縮小拆成三層，各自只有一段，沒有中途停頓；摺信的尾巴接著起飛。 */
.playing .flyer{animation:fly-x 1.7s .8s cubic-bezier(.45,0,.4,1) both}
.playing .flyer-y{animation:fly-y 1.7s .8s cubic-bezier(.3,-1.1,.7,1) both}
.playing .flyer svg{animation:appear .3s ease-out both,shrink 1.7s .8s cubic-bezier(.55,0,.8,.6) forwards}
.playing .sheet-paper{animation:fold .5s .25s ease-in-out both}
.playing .envelope{animation:show .15s .68s both}
.playing .seal{animation:seal .3s .7s cubic-bezier(.3,1.6,.5,1) both}
.playing .hollow-glow{animation:glow 3.6s ease-out both}
.playing .sparks i{animation:spark 1.1s 2.45s ease-out both}
.playing .sparks i:nth-child(2){--dx:-3cqw;animation-delay:2.55s}
.playing .sparks i:nth-child(3){--dx:3cqw;animation-delay:2.65s}
.playing .reveal{animation:rise .7s ease-out both}
.playing .r1{animation-delay:.25s}.playing .r2{animation-delay:2.8s}.playing .r3{animation-delay:3.6s}
.playing .postmark{animation:press .45s 3.1s ease-out both}
.night-card.playing{cursor:pointer}
@keyframes fly-x{from{transform:translateX(0)}to{transform:translateX(55cqw)}}
@keyframes fly-y{from{transform:translateY(0)}to{transform:translateY(14cqw)}}
@keyframes appear{from{opacity:0;transform:translateY(3cqw)}to{opacity:1;transform:none}}
@keyframes shrink{0%{opacity:1;transform:scale(1) rotate(-3deg)}82%{opacity:1}100%{opacity:0;transform:scale(.14) rotate(9deg)}}
@keyframes fold{0%{transform:scaleY(1)}45%{transform:scaleY(.66)}90%{transform:scaleY(.36);opacity:1}100%{transform:scaleY(.33);opacity:0}}
@keyframes show{from{opacity:0}to{opacity:1}}
@keyframes seal{from{opacity:0;transform:scale(2)}to{opacity:1;transform:scale(1)}}
@keyframes glow{0%,66%{opacity:.3;transform:scale(1)}76%{opacity:1;transform:scale(1.18)}100%{opacity:.45;transform:scale(1)}}
@keyframes spark{0%{opacity:0;transform:translate(0,0)}25%{opacity:1}100%{opacity:0;transform:translate(var(--dx,0),-10cqw)}}
@keyframes rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes press{from{opacity:0;transform:rotate(var(--tilt)) scale(1.25)}to{opacity:1;transform:rotate(var(--tilt)) scale(1)}}

/* ── 關於來信 ── */
dialog{width:min(92vw,520px);max-height:85svh;overflow:auto;padding:0;border:1px solid #5d5240;border-radius:10px;color:var(--ink);background:var(--paper) url('/assets/grain.9951688dab.webp') 0 0/160px auto;box-shadow:0 18px 90px #000000a0}
dialog::backdrop{background:#050a10b3}
.dialog-inner{position:relative;padding:34px}
dialog h2{margin:0 30px 15px 0;font-size:32px}
dialog p{font-size:15px;line-height:1.85;margin:12px 0}
dialog .btn{margin-top:14px}
.dialog-inner a{text-decoration:underline;text-underline-offset:3px;color:var(--lantern-hi)}
.dialog-inner a[href^="https://line.me/"]{white-space:nowrap}
.sos-title{margin:26px 0 0;padding-top:18px;border-top:1px solid var(--rule);font:600 17px/1.5 var(--serif);letter-spacing:.06em}
.sos-list{display:grid;gap:6px;font-size:15px;line-height:1.7}
.sos-list li{padding-left:16px;position:relative}
.sos-list li::before{content:"";position:absolute;left:2px;top:.75em;width:5px;height:5px;border-radius:50%;background:var(--lantern)}
.close{position:absolute;right:10px;top:10px;width:44px;height:44px;display:grid;place-items:center;border:0;border-radius:50%;background:transparent;color:var(--sub)}
.close:hover{background:var(--paper-shade)}

@keyframes sheet-in{from{opacity:0;transform:translateY(-10px) rotate(-.6deg)}}
@keyframes thump{from{opacity:0;transform:rotate(var(--tilt)) scale(1.7)}}
@keyframes dot-pop{0%{transform:scale(.4)}60%{transform:scale(1.35)}}
@keyframes tick-in{from{opacity:0;transform:rotate(40deg) scale(.4)}}

/* ── Sizes ── */
@media(min-width:1500px){.scene-copy{width:49%}}
@media(max-width:950px) and (min-width:701px){.scene-copy{width:53%;padding-left:5.2vw}.rule{margin:20px 0}.scene:after{background:linear-gradient(90deg,#13262de8,#14282daa 35%,transparent 68%)}}
@media(max-width:700px){
  .top{width:calc(100% - 40px);min-height:57px}.brand{gap:6px}.brand img{width:26px;height:26px}.brand>span{font-size:25px}.brand small{font-size:8.5px;letter-spacing:.26em}nav{gap:14px}.nav-link{font-size:14px}
  .scene{width:calc(100% - 20px);min-height:0;display:block;border-radius:12px;background:#172634}
  .scene-art{position:relative;z-index:-2;display:block;width:100%;height:clamp(240px,38svh,360px);object-position:77% 48%;object-fit:cover;mask-image:linear-gradient(black 84%,transparent)}
  .scene:after{display:none}.scene-copy{width:100%;max-width:none;margin-top:-14px;padding:0 22px 26px}
  h1{font-size:clamp(43px,11vw,62px);letter-spacing:.085em}.tagline{max-width:38em;font-size:14.5px;line-height:1.75;margin-top:8px}.rule{margin:14px 0;width:38px}
  .greeting{font-size:18px;line-height:1.6;letter-spacing:0;text-wrap:balance}.words{font-size:15px;line-height:1.85;margin-top:7px}
  .invitation .btn-main{width:100%;margin-top:20px;min-height:58px;font-size:17px}
  .how{margin-top:24px;font-size:14.5px}.how-note,.sos{font-size:14px}
  footer{width:calc(100% - 32px);min-height:70px;column-gap:12px}
  body:not([data-view="home"]) .scene{height:clamp(162px,51vw,224px);display:flex}
  body:not([data-view="home"]) .scene-copy{margin:0;padding:12px 17px}
  body:not([data-view="home"]) h1{font-size:clamp(26px,7.2vw,36px)}
  body:not([data-view="home"]) .scene-art{mask-image:linear-gradient(90deg,transparent,#000 23%)}

  .sheet{padding:8px 12px 14px}.sheet-bar{margin-bottom:4px}
  .paper{padding:26px 20px 28px}.paper-head{padding-bottom:13px}.paper-head h2{font-size:30px}.stamp{width:36px;height:38px}.stamp .pal{width:28px;height:28px}
  .step-title{font-size:20px}.step-note{font-size:14.5px;margin-bottom:22px}.field{margin-bottom:22px}
  .step-actions{margin-top:28px}.step-actions .btn{width:100%}
  .chart-duo{gap:14px}.permission,.enclosed{padding:20px 16px 18px}.permission small{margin-left:0}.permission small.field-error{margin-left:0}
  .enclosed dl{gap:12px 16px}.review dd{font-size:16px}.salute{font-size:24px}.postmark{right:14px;top:-34px;width:64px;height:64px;font-size:13px}
  .dialog-inner{padding:26px 22px}
  .night-sign{font-size:18px;bottom:9px;left:12px}.night-copy{padding:22px 16px 22px}
  .goodnight{font-size:19px}
  body[data-view="receipt"] main{min-height:calc(100svh - 125px)}
}
@media(max-width:420px){
  .chart-field :is(input,select).chart-line{font-size:16px}
  .steps li:not([data-state=now]){font-size:0}
  .steps li:not(:last-child)::after{width:14px;margin:0 6px 0 3px}
}
@media(max-width:359px){.chart-duo{gap:8px}.chart-duo .chart-line::-webkit-calendar-picker-indicator{padding:0;margin:0}}
@media(max-width:355px){.brand small,.foot-mark span{display:none}.scene-copy{padding-left:17px;padding-right:17px}.top{width:calc(100% - 28px)}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
@media(forced-colors:active){
  .chart-field select.chart-line,.tick input[type=checkbox]{appearance:auto;background-image:none}
  .tick input:checked::after{display:none}
  .chart-sex .chart-sex-options label > span{-webkit-mask-box-image:none;mask-border:none;border:1px solid ButtonText}
  .chart-sex .chart-sex-options input:checked + span{border:3px solid Highlight}
  .chart-sex-options input:checked + span::after{background:Highlight;forced-color-adjust:none}
  .chart-field .chart-line:focus-visible{outline:2px solid Highlight}
  .btn,.paper,.permission,.enclosed{-webkit-mask-box-image:none;mask-border:none;border:1px solid ButtonText}
}

/* Last, so no size rule can bring the banner back beside the goodnight card. */
body[data-view="receipt"] .scene{display:none}

/* Entry preview used by integration/lobby-preview.html (unchanged). */
.entry-preview{width:min(92vw,860px);margin:10vh auto}.entry-preview h1{text-align:center;margin-bottom:28px;color:var(--ink)}
.entry-preview .notices{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.entry-preview .board{min-height:155px;display:grid;place-content:center;text-align:center;text-decoration:none;padding:16px;background:#f3e2bd;color:#2b2a26;border:1px solid #c0b9a2;border-radius:6px}.entry-preview .board-tree{background:#e8e7ce}.entry-preview .board-ig{background:#dfeaf2}.entry-preview .board-title{font:27px var(--hand)}.entry-preview .board-sub{font-size:14px;margin-top:8px}.entry-preview .board-tree .board-star{height:42px;margin-bottom:8px;background:url('/assets/taiyin.png') center/contain no-repeat}
@media(max-width:719px){.entry-preview .notices{grid-template-columns:repeat(2,minmax(0,1fr))}.entry-preview .board-ig{grid-column:1/-1}}

/* ── 來信與個資說明（/policy）── */
.policy-page .sheet{max-width:760px;padding-top:6px}
.policy{font-size:15.5px;line-height:1.9}
.policy-title{font:500 clamp(30px,6vw,42px)/1.3 var(--serif);letter-spacing:.06em;white-space:normal;text-shadow:none}
.policy-meta{margin:8px 0 18px;font-size:13.5px;color:var(--sub)}
.policy h2{margin:28px 0 8px;padding-top:16px;border-top:1px solid var(--rule);font:600 18px/1.5 var(--serif);letter-spacing:.05em}
.policy p{margin:8px 0}
.policy ul:not(.sos-list){display:grid;gap:4px;margin:6px 0}
.policy ul:not(.sos-list) li{position:relative;padding-left:16px}
.policy ul:not(.sos-list) li::before{content:"";position:absolute;left:2px;top:.8em;width:5px;height:5px;border-radius:50%;background:var(--moon)}
.policy a:not(.text-link){color:var(--lantern-hi);text-underline-offset:3px}
.policy-back{margin-top:26px!important;text-align:center}
.clear-draft{color:#e7dcc3;font-size:14px;font-weight:500}

/* ── 信紙改回米白（2026-11-11 合夥人偏好），但比原版暗一階、偏暖，夜裡看不刺眼。
   頁面底維持夜色；只有「紙」（信紙、晚安卡、關於來信、告知頁）換成淺色系，裡面的字與元件跟著換。── */
.paper,dialog{
  --paper:#e8dfcb;--paper-shade:#ddd2b8;--kraft:#e3d7bb;--rule:#cfc2a4;--line-input:#ad9a72;
  --ink:#2e2a23;--sub:#5b5447;--placeholder:#7a6f59;
  --tick-edge:#a8946b;--alert:#a8402c;--focus:#665a9e;--stamp:#b4432f;--link:#8a4f1c;
  color-scheme:light;color:var(--ink);
}
.paper{background:radial-gradient(120% 60% at 10% 0%,#fff8e866,transparent 62%),var(--paper) url('/assets/grain.9951688dab.webp') 0 0/160px auto}
/* 信摺三折的摺痕：米白紙上只留很淡的一道陰影，不再有亮白線。 */
.paper[data-step="3"]::before{background:
  linear-gradient(180deg,transparent calc(33.3% - 10px),rgba(120,84,40,.06) 33.3%,rgba(255,248,232,.12) calc(33.3% + 1px),transparent calc(33.3% + 10px)),
  linear-gradient(180deg,transparent calc(66.6% - 10px),rgba(120,84,40,.06) 66.6%,rgba(255,248,232,.12) calc(66.6% + 1px),transparent calc(66.6% + 10px))}
.paper-head{border-bottom-color:#cfbf9c}
.stamp{outline-color:#cdbb95;border-color:#a38f67}
.pal-say{background:#e2dbf0;color:#3b3355}
.pal-say::before{border-bottom-color:#e2dbf0}
.paper textarea,.paper .chart-line{caret-color:#8a6a2e}
.paper textarea:focus{background:repeating-linear-gradient(#f3cb7e1f 0,#f3cb7e1f 33px,#bf9a5c 33px,#bf9a5c 34px) local;border-top-color:#bf9a5c}
.paper .chart-field select.chart-line{background-image:url('/assets/select-chevron.svg')}
.paper .chart-field select.chart-line option,.paper .chart-field select.chart-line optgroup{background:#fffaf0;color:#2b2a26}
.paper .chart-field .chart-line:focus{background-color:#f3cb7e24}
.paper .chart-field .chart-line:disabled{color:#8a8172}
.paper .tick input[type=checkbox]{background:#fffcf3}
.paper .tick input:checked{background:#1f3550;border-color:#1f3550}
.paper .tick input:checked::after{border-color:var(--lantern)}
.paper .chart-sex .chart-sex-options label > span{background-color:#f1e7cf;box-shadow:inset 0 -4px #d9c89f}
.paper .chart-sex .chart-sex-options input:checked + span{background-color:#1f3550;background-blend-mode:soft-light;box-shadow:inset 0 -4px #0f1d2c;color:#fff5dc}
.paper .chart-sex-options input:checked + span::after{background:var(--lantern);box-shadow:0 0 0 3px #f3cb7e40}
.paper .selection-check,.paper .agreed{border-top-color:rgba(120,84,40,.28)}
.paper .agreed li::before{border-color:#665a9e}
.paper .chip{background:#fffaf099}
.paper .chip:hover{background:#f3cb7e2e}
.paper .soft-note{color:#8a5a14!important}
.paper .step-note-soft{color:#6f5a32}
.paper .text-link,dialog .text-link{background-image:url('/assets/wave.svg')}
.paper .sos a,.paper .after a,dialog .dialog-inner a,.policy a:not(.text-link){color:var(--link);text-decoration-color:#8a4f1c66}
.paper .sos-night{border-top-color:rgba(120,84,40,.2)}
.paper .btn-quiet,dialog .btn-quiet{--b:#e2d3b1;--bd:#c4ad7e;color:var(--ink)}
.paper .btn-quiet:hover:enabled,dialog .btn-quiet:hover:enabled{--b:#eadcbc}
dialog{border-color:#c3b494;box-shadow:0 18px 90px #00000080}
.sos-list li::before{background:#b98738}
.close:hover{background:var(--paper-shade)}
.night-picture{background:#203540}
.paper .sos,dialog .sos{color:var(--sub)}

/* 斷句：置中的句子只在標點後換行，不會把一個詞切成兩半（2026-11-11）。 */
.ph{display:inline-block}
.tagline,.greeting,.words,.how-note,.sos,.receipt-text{text-wrap:balance}
.receipt-text{font:18px/1.85 var(--serif);letter-spacing:.04em;margin:14px 0 6px}
.night-copy .goodnight{font:500 26px/1.5 var(--hand);margin:6px 0 18px}
@media(max-width:700px){.receipt-text{font-size:16.5px}}
