:root{--ink: #3b2a22;--ink-soft: #7a6355;--paper: #fff8ee;--paper-edge: #f0e2cf;--accent: #d9822b;--accent-ink: #fff;--night: #1b1830;--radius: 16px;--shadow: 0 10px 30px rgba(20, 10, 30, .35);--serif: "Fraunces", "Noto Serif SC", "Songti SC", Georgia, serif;--sans: "Nunito", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;--safe-t: env(safe-area-inset-top, 0px);--safe-r: env(safe-area-inset-right, 0px);--safe-b: env(safe-area-inset-bottom, 0px);--safe-l: env(safe-area-inset-left, 0px)}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;overflow:hidden;background:var(--night);color:var(--ink);font-family:var(--sans)}.app{position:relative;width:100%;height:100%}.scene{display:block;width:100%;height:100%;outline:none;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.title-card{position:absolute;top:calc(24px + var(--safe-t));left:calc(28px + var(--safe-l));max-width:340px;color:#fdf1e2;pointer-events:none;text-shadow:0 2px 12px rgba(20,10,30,.5)}.title-card h1{font-family:var(--serif);font-weight:600;font-size:30px;margin:2px 0 6px}.title-card .caption{margin:0;font-size:15px;line-height:1.45;opacity:.85}.eyebrow{margin:0;font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;opacity:.7}.hint{position:absolute;bottom:calc(16px + var(--safe-b));left:50%;transform:translate(-50%);margin:0;color:#fdf1e2;opacity:.55;font-size:13px;pointer-events:none;white-space:nowrap}.bubbles{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden}.bubble{position:absolute;top:0;left:0;visibility:hidden;max-width:200px;padding:7px 12px;background:var(--paper);border-radius:14px;box-shadow:0 4px 14px #140a1e4d;font-size:13px;line-height:1.35;text-align:center;animation:pop .28s cubic-bezier(.3,1.6,.6,1);transition:opacity .3s}.bubble:after{content:"";position:absolute;left:50%;bottom:-6px;width:12px;height:12px;background:var(--paper);transform:translate(-50%) rotate(45deg);border-radius:2px}.bubble.leaving{opacity:0}.bubble.visitor{background:#fff2d6}.bubble.visitor:after{background:#fff2d6}.bubble-from{display:block;font-size:11px;color:var(--ink-soft);margin-top:2px}.bubble.offstage{background:var(--night);color:#fdf1e2}.bubble.offstage:after{background:var(--night)}.bubble-speaker{display:block;font-size:10px;font-weight:700;letter-spacing:.08em;color:var(--accent);margin-bottom:1px}.memory-switch{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px;pointer-events:auto}.memory-switch a{font-size:12px;font-weight:700;color:#fdf1e2;text-decoration:none;text-shadow:none;padding:4px 10px;border-radius:999px;background:#1b183059;border:1px solid rgba(253,241,226,.25)}.memory-switch a:hover{background:#1b18308c}.memory-switch a[aria-current=page]{background:var(--paper);color:var(--ink)}.locale-zh .bubble{font-size:14px;letter-spacing:.02em}.locale-zh .title-card h1{letter-spacing:.04em}.locale-zh .eyebrow{letter-spacing:.08em}.bubble-text{position:relative;z-index:1}@keyframes pop{0%{opacity:0;margin-top:6px}to{opacity:1;margin-top:0}}.panel{position:absolute;background:var(--paper);border:1px solid var(--paper-edge);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px 22px}.inspect{top:calc(24px + var(--safe-t));right:calc(24px + var(--safe-r));width:320px;animation:slide .25s ease-out}@keyframes slide{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}.inspect h2{font-family:var(--serif);font-weight:600;font-size:24px;margin:4px 0 8px}.inspect .eyebrow{color:var(--accent);opacity:1}.story{margin:0 0 4px;line-height:1.5;color:var(--ink-soft);white-space:pre-line}.nickname{margin:-4px 0 10px;font-size:13px;font-weight:700;color:var(--accent)}.close{position:absolute;top:10px;right:12px;border:none;background:none;font-size:22px;line-height:1;color:var(--ink-soft);cursor:pointer}button{font:inherit;font-weight:700;border:none;border-radius:10px;padding:8px 14px;background:var(--accent);color:var(--accent-ink);cursor:pointer}button:disabled{opacity:.45;cursor:default}button.secondary{background:var(--paper-edge);color:var(--ink)}button.link{background:none;color:var(--accent);padding:0;font-weight:600}.message-form{display:flex;flex-direction:column;gap:8px;margin-top:16px;padding-top:14px;border-top:1px dashed var(--paper-edge)}.message-form label{font-weight:700;font-size:14px}.message-form textarea,.message-form input{font:inherit;font-size:14px;color:var(--ink);background:#fff;border:1px solid var(--paper-edge);border-radius:10px;padding:8px 10px;resize:none}.message-form textarea:focus,.message-form input:focus{outline:2px solid var(--accent);outline-offset:-1px}.form-row{display:flex;gap:8px}.form-row input{flex:1;min-width:0}.count{align-self:flex-end;font-size:11px;color:var(--ink-soft)}.error{color:#b23a33;margin:0;font-size:13px}.form-sent{margin-top:16px;padding-top:14px;border-top:1px dashed var(--paper-edge);color:var(--ink-soft)}.form-sent p{margin:0 0 8px}.inspect{display:flex;flex-direction:column;max-height:calc(100vh - 48px)}.inspect.card{padding-bottom:0}.card-face{overflow-y:auto;min-height:0;flex:1;margin:0 -6px;padding:0 6px 4px}.card.turn-out{animation:card-out .16s ease-in forwards}.card.turn-in{animation:card-in .16s ease-out}@keyframes card-out{to{transform:perspective(900px) rotateY(90deg)}}@keyframes card-in{0%{transform:perspective(900px) rotateY(-90deg)}}.card.back{background:#f6ecdc}.write-switch{display:flex;gap:4px;margin-top:14px;padding:3px;border-radius:12px;background:var(--paper-edge)}.write-switch button{flex:1;padding:6px 8px;background:none;color:var(--ink-soft);font-size:14px}.write-switch button[aria-selected=true]{background:var(--paper);color:var(--accent);box-shadow:0 1px 3px #0000001f}.write-switch+.message-form,.write-switch+.form-sent{margin-top:10px;padding-top:0;border-top:none}.form-hint{margin:-4px 0 0;font-size:12px;color:var(--ink-soft)}.card-foot{display:flex;justify-content:flex-end;align-items:center;gap:14px;margin:10px -22px 0;padding:9px 22px 11px;border-top:1px dashed var(--paper-edge);font-size:13px}.card-foot .quiet{color:var(--ink-soft);margin-right:auto}.notes{list-style:none;margin:8px 0 0;padding:0}.notes li{padding:10px 0;border-bottom:1px dashed var(--paper-edge)}.notes li:last-child{border-bottom:none}.note-text{margin:0 0 4px;line-height:1.5;white-space:pre-line;overflow-wrap:anywhere}.note-meta{margin:0;font-size:12px;color:var(--ink-soft)}.empty-notes{margin:8px 0 12px}.storage{margin:8px 0 0;overflow-wrap:anywhere}.storage code{font-size:11px;-webkit-user-select:all;user-select:all}.curator{left:calc(24px + var(--safe-l));bottom:calc(24px + var(--safe-b));width:340px;max-height:60vh;overflow:auto;padding:14px 18px}.curator.collapsed{padding-bottom:14px}.curator-toggle{width:100%;background:var(--night);color:#fdf1e2}.curator ul{list-style:none;padding:0;margin:10px 0 0}.curator li{padding:10px 0;border-bottom:1px dashed var(--paper-edge)}.curator li p{margin:0 0 4px;font-size:14px}.curator .quote{color:var(--ink-soft)}.curator .actions{display:flex;gap:8px;margin-top:6px}.curator details{margin-top:10px;font-size:14px}.muted{color:var(--ink-soft);font-size:13px}@media(max-width:640px){.title-card{top:calc(16px + var(--safe-t));left:calc(16px + var(--safe-l));right:calc(16px + var(--safe-r))}.title-card h1{font-size:24px}.title-card .caption{display:none}.inspect{top:auto;bottom:calc(12px + var(--safe-b));left:calc(12px + var(--safe-l));right:calc(12px + var(--safe-r));width:auto;max-height:46vh;padding:14px 16px 0}.inspect:not(.card){padding-bottom:14px}.inspect h2{font-size:20px;margin:2px 0 4px}.inspect .story{font-size:14px;line-height:1.45}.card-foot{margin:8px -16px 0;padding:8px 16px 10px}.message-form textarea{min-height:0}.curator{left:calc(12px + var(--safe-l));right:calc(12px + var(--safe-r));bottom:calc(12px + var(--safe-b));width:auto;max-height:40vh}.app:has(.inspect) .perf{display:none}.hint{display:none}}.perf{position:absolute;right:calc(16px + var(--safe-r));bottom:calc(16px + var(--safe-b));min-width:190px;padding:8px 10px;border-radius:12px;background:#1b1830d1;color:#e9e4f2;font:12px/1.4 ui-monospace,Cascadia Mono,Consolas,monospace;box-shadow:0 6px 18px #0a061459;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.perf.closed{min-width:0}.perf-head{display:flex;width:100%;justify-content:space-between;align-items:center;gap:10px;padding:0;background:none;color:inherit;font:inherit;font-weight:700}.perf-fps.good{color:#8fe3a0}.perf-fps.ok{color:#f2d36b}.perf-fps.bad{color:#ff8a80}.perf-caret{opacity:.6}.perf dl{display:grid;grid-template-columns:auto auto;gap:1px 12px;margin:8px 0 0}.perf dt{opacity:.65}.perf dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}.perf-features{display:grid;gap:4px;margin-top:8px;padding-top:8px;border-top:1px solid rgba(233,228,242,.15)}.perf-features label{display:flex;justify-content:space-between;align-items:center;gap:10px}.perf-features select{font:inherit;color:#1b1830;background:#e9e4f2;border:none;border-radius:6px;padding:1px 4px}@media(max-width:640px){.perf{right:calc(8px + var(--safe-r));bottom:calc(8px + var(--safe-b))}.perf:not(.closed) dl,.perf:not(.closed) .perf-features{font-size:11px}}.venue-switch{display:inline-flex;margin-top:12px;padding:3px;gap:2px;border-radius:999px;background:#1b183073;pointer-events:auto}.venue-switch button{padding:4px 12px;border-radius:999px;background:none;color:#fdf1e2;font-size:12px}.venue-switch button[aria-pressed=true]{background:var(--accent);color:var(--accent-ink)}.camera-switch{display:flex;width:fit-content;margin-top:8px}.sound-toggle{display:block;margin-top:8px;padding:4px 12px;border-radius:999px;background:#1b183073;color:#fdf1e2;font-size:12px;pointer-events:auto}.sound-toggle[aria-pressed=false]{opacity:.6}.letterbox{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;animation:letterbox-in .9s ease-out both;background:linear-gradient(#000 0,#000 0) top / 100% 9vh no-repeat,linear-gradient(#000 0,#000 0) bottom / 100% 9vh no-repeat}@keyframes letterbox-in{0%{background-size:100% 0,100% 0}to{background-size:100% 9vh,100% 9vh}}.film .title-card{opacity:.55;transition:opacity .6s}.film .title-card:hover{opacity:1}.film .hint{display:none}.film-subtitle{position:absolute;left:50%;bottom:calc(9vh + 18px);transform:translate(-50%);margin:0;padding:2px 10px;color:#f4eee2;font-family:var(--serif);font-size:20px;letter-spacing:.12em;text-shadow:0 2px 10px rgba(0,0,0,.7);pointer-events:none;white-space:nowrap;animation:subtitle-in 1.6s ease-out both}@keyframes subtitle-in{0%{opacity:0;transform:translate(-50%,6px)}25%{opacity:1;transform:translate(-50%)}to{opacity:1;transform:translate(-50%)}}@media(max-width:640px){.film-subtitle{font-size:16px}}.film .title-card{top:calc(9vh + 12px)}@media(max-height:520px)and (orientation:landscape){.inspect{top:calc(8px + var(--safe-t));bottom:calc(8px + var(--safe-b));right:calc(8px + var(--safe-r));left:auto;width:min(320px,44vw);max-height:none;padding:12px 14px 0}.inspect.at-left{left:calc(8px + var(--safe-l));right:auto}.inspect:not(.card){bottom:auto;max-height:calc(100vh - 16px);padding-bottom:12px}.inspect h2{font-size:18px;margin:2px 0 4px}.inspect .story{font-size:13px;line-height:1.4}.nickname{margin-bottom:6px}.write-switch{margin-top:8px}.message-form{gap:6px}.message-form textarea{height:3.4em}.form-hint,.count{display:none}.card-foot{margin:6px -14px 0;padding:6px 14px 8px}.curator{top:8px;bottom:8px;left:8px;right:auto;width:min(300px,40vw);max-height:none}.curator.collapsed{bottom:auto}.app:has(.inspect) .perf{display:none}}.about-link{display:block;margin-top:10px;padding:0;background:none;border:none;color:#fdf1e2;font:inherit;font-size:13px;font-weight:600;opacity:.75;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:4px;cursor:pointer;pointer-events:auto}.about-link:hover{opacity:1}.about{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;overflow-y:auto;padding:calc(28px + var(--safe-t)) 16px calc(28px + var(--safe-b));background:#1410228c;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);animation:about-in .35s ease-out}@keyframes about-in{0%{opacity:0}}.about-page{position:relative;max-width:640px;margin:0 auto;overflow:hidden;border-radius:20px;background:radial-gradient(circle at 0% 30%,rgba(255,214,153,.35),transparent 40%),radial-gradient(circle at 100% 85%,rgba(166,218,196,.4),transparent 45%),linear-gradient(180deg,#fffaf1,#f6f8ee);color:#4d3d32;box-shadow:var(--shadow);animation:about-rise .45s cubic-bezier(.2,.8,.2,1)}@keyframes about-rise{0%{transform:translateY(18px)}}.about-poster{display:block;width:100%;height:auto}.about-close{position:absolute;top:10px;right:10px;width:34px;height:34px;padding:0;border-radius:50%;border:none;background:#fffaf1e0;color:var(--ink);font-size:22px;line-height:34px;cursor:pointer;box-shadow:0 2px 8px #0003}.about-body{padding:26px clamp(20px,6vw,48px) 34px}.about-body h1{margin:0;font-family:var(--serif);font-weight:600;font-size:26px;letter-spacing:.06em}.about-lede{margin:6px 0 22px;color:#6f9a86;font-weight:700;letter-spacing:.06em}.about-body p{margin:0 0 14px;font-size:16px;line-height:1.9}.about-quote{margin:22px 0!important;padding:12px 18px;border-left:4px solid #b9e0cc;border-radius:0 12px 12px 0;background:#fff9;font-family:var(--serif);font-weight:600}.about-sign{margin-top:26px;padding-top:18px;border-top:1px dashed #e3d6c2;color:#8a7766;font-style:italic}.about-sign p{margin:0;font-size:15px}@media(max-width:640px){.about{padding-left:10px;padding-right:10px}.about-body p{font-size:15px;line-height:1.85}}.photo-hint{position:absolute;top:0;left:0;pointer-events:none;padding:4px 11px;border-radius:999px;background:#fffaf1eb;color:var(--ink);font-size:13px;font-weight:700;letter-spacing:.08em;white-space:nowrap;box-shadow:0 3px 10px #140a1e38;animation:hint-in .2s ease-out}@keyframes hint-in{0%{opacity:0}}.photo-viewer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;display:flex;align-items:center;justify-content:center;padding:calc(16px + var(--safe-t)) calc(16px + var(--safe-r)) calc(16px + var(--safe-b)) calc(16px + var(--safe-l));background:#1b18306b;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);animation:viewer-in .3s ease-out}.photo-viewer.leaving{animation:viewer-out .28s ease-in forwards}@keyframes viewer-in{0%{opacity:0}}@keyframes viewer-out{to{opacity:0}}.print{position:relative;margin:0;padding:12px 12px 0;max-width:100%;background:#fffdf8;border-radius:6px;box-shadow:0 18px 44px #140a1e59,0 2px 6px #5a462826;transform:rotate(-1.2deg);animation:print-in .32s ease-out}.photo-viewer.leaving .print{animation:print-out .28s ease-in forwards}@keyframes print-in{0%{transform:rotate(-1.2deg) scale(.95)}}@keyframes print-out{to{transform:rotate(-1.2deg) scale(.96)}}.print:before{content:"";position:absolute;top:-11px;left:50%;width:92px;height:24px;margin-left:-46px;background:#bae2cdd9;transform:rotate(3deg);border-radius:2px;z-index:2}.print:focus{outline:none}.print .close{top:auto;bottom:12px;right:12px;z-index:1}.print-image{display:flex;justify-content:center;border-radius:3px;overflow:hidden;background:#2a2638}.print-image img{display:block;width:auto;height:auto;max-width:min(1000px,calc(100vw - 56px - var(--safe-l) - var(--safe-r)));max-height:calc(100vh - 180px - var(--safe-t) - var(--safe-b));max-height:calc(100dvh - 180px - var(--safe-t) - var(--safe-b))}.print-missing{margin:0;padding:80px 40px;min-width:min(360px,calc(100vw - 56px));text-align:center;color:#d9cdb8;background:#3a3548}.print figcaption{display:flex;align-items:baseline;justify-content:center;flex-wrap:wrap;gap:4px 12px;min-height:52px;padding:10px 44px 12px;text-align:center;color:#8a7766}.print-caption{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--ink)}.print-date{font-size:12px;font-weight:700;letter-spacing:.16em}@media(prefers-reduced-motion:reduce){.print,.photo-viewer.leaving .print{animation:none}}@media(orientation:landscape)and (max-height:500px){.print{padding:8px 8px 0}.print figcaption{min-height:40px;padding-top:6px;padding-bottom:8px}.print-image img{max-height:calc(100dvh - 90px - var(--safe-t) - var(--safe-b))}}
