:root{color-scheme:light;--ink:#253334;--muted:#72796e;--paper:#f4ebd8;--line:#d5cfbf;--green:#496e59;--red:#b74737;font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif;color:var(--ink);background:#eee9dd;font-synthesis:none}
*{box-sizing:border-box}body{margin:0;background-image:radial-gradient(#a6a38b30 .65px,transparent .65px);background-size:6px 6px}button{font:inherit;color:inherit;cursor:pointer}button:focus-visible{outline:3px solid #b74737;outline-offset:-3px}[hidden]{display:none!important}
.office-app{width:min(1120px,100%);height:100dvh;min-height:420px;margin:auto;padding:22px 32px 12px;display:grid;grid-template-columns:minmax(0,1fr) 290px;grid-template-rows:66px 30px minmax(0,1fr) 26px;gap:10px 34px}
.masthead{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between}.eyebrow{font-size:10px;letter-spacing:.18em;margin:0 0 7px}.tiny-square{display:inline-block;width:7px;height:7px;background:#b9654e;margin-right:5px}.edition{color:var(--muted);letter-spacing:.1em;margin-left:5px}h1{font-family:Georgia,"Songti SC",serif;font-size:30px;margin:0;letter-spacing:.1em;font-weight:700}.title-dot{color:#bf694f}.clock{text-align:right;font-size:10px;color:var(--muted)}.clock time{display:block;font:22px/1.25 Menlo,monospace;color:var(--ink);letter-spacing:.06em}.clock small{font-size:9px}
.mode{grid-column:1/-1;font-size:11px;letter-spacing:.05em;display:flex;align-items:center;gap:8px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding-left:2px;color:#62532f}.mode:before{content:"";width:6px;height:6px;background:#c49a3c;box-shadow:2px 2px 0 #dfcfab}.mode.live{color:var(--green)}.guestbook{margin-left:auto;padding-right:2px;font:11px Menlo,monospace;letter-spacing:0;color:#9a5a3a;white-space:nowrap}.mode.live:before{background:#5e9274;box-shadow:2px 2px 0 #b6cbbb}
.room-section{min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative}.room-meta{align-self:stretch;display:flex;justify-content:space-between;font-size:10px;color:var(--muted);margin-bottom:8px;letter-spacing:.04em}.room-meta span:last-child{font:9px Menlo,monospace}#canvas-wrap{position:relative;aspect-ratio:6/7;max-height:calc(100% - 46px);max-width:100%;height:100%;isolation:isolate}canvas{display:block;width:100%;height:100%;image-rendering:pixelated} .room-foot{display:flex;gap:15px;justify-content:center;font-size:10px;color:#5e665f;padding-top:10px;white-space:nowrap}.dot{display:inline-block;width:6px;height:6px;margin-right:5px}.busy{background:#668b76}.waiting{background:#d96952}.done{background:#ca9c3c}.unknown{background:#939a97}
.paper{position:absolute;left:34%;bottom:23%;width:62%;background:#fff7d9;border:2px solid #786747;box-shadow:4px 5px 0 #25333428;padding:9px 10px;font-size:11px;line-height:1.55;word-break:break-word;z-index:2}.paper:after{content:"";position:absolute;bottom:-9px;left:44%;width:12px;height:12px;background:#fff7d9;border-bottom:2px solid #786747;border-right:2px solid #786747;transform:rotate(45deg)}.paper span{font-size:9px;letter-spacing:.12em;color:#8e6642}
.treat{position:absolute;left:3%;bottom:4%;z-index:3;display:flex;flex-direction:column;align-items:flex-start;gap:5px;max-width:52%}
.treat button{border:2px solid #786747;background:#fffdf6;color:#4b3b24;font-size:11px;padding:5px 9px;min-height:30px;cursor:pointer;box-shadow:3px 3px 0 #25333428}
.treat-row{display:flex;gap:5px;flex-wrap:wrap}
.treat-menu{display:flex;gap:5px;flex-wrap:wrap}
.photo-hint{margin:0 0 4px;font-size:9px;color:#8e6642}
.treat-menu button{background:#f1e5c6}
/* 找到我 (11-03, Alice: 「我最终目的都是希望别人看见我」): the first button, in the warm accent; its menu holds links and handles. */
.treat button.find{background:#efc66c;color:#4b2f12;font-weight:600}
.find-menu a,.find-menu span{border:2px solid #786747;background:#fff6dc;color:#4b3b24;font-size:11px;padding:5px 9px;min-height:30px;display:inline-flex;align-items:center;text-decoration:none;box-shadow:3px 3px 0 #25333428}
.find-menu a{background:#f1e5c6;cursor:pointer}
.treat button:disabled{opacity:.55;cursor:default}
.treat-note{margin:0;font-size:10px;color:#5a4b33;background:#fffdf6cc;padding:2px 5px;max-width:100%}
.treat-note:empty{display:none}
.photo{position:absolute;right:3%;bottom:4%;width:52%;max-width:300px;background:#fffdf6;border:2px solid #786747;box-shadow:4px 5px 0 #25333428;padding:6px;z-index:3;display:grid;grid-template-columns:56px minmax(0,1fr);gap:7px;align-items:center}
.photo img{display:block;width:56px;height:72px;object-fit:cover;object-position:top;border:1px solid #d9cfb6;background:#eee6d2;image-rendering:pixelated}
.photo-body{display:flex;flex-direction:column;gap:3px;min-width:0}
.photo p{margin:0;font-size:10px;line-height:1.4;color:#5a4b33}
.photo-hint{font-size:9px;color:#8e6642}
.photo-actions{display:flex;gap:6px;align-items:center}
.photo-actions button{border:1px solid #786747;background:#f1e5c6;color:#4b3b24;font-size:11px;padding:4px 8px;min-height:28px;cursor:pointer}
#photo-close{margin-left:auto;background:transparent;border-color:transparent;font-size:14px;color:#8e6642}
@media(max-width:700px){.photo{width:62%;max-width:none;right:3%;bottom:3%;grid-template-columns:44px minmax(0,1fr)}.photo img{width:44px;height:56px}.photo p{font-size:9px}}.paper p{margin:4px 0 0}
.drawer{display:flex;flex-direction:column;min-height:0;border:1px solid #d0c8b4;background:#f8f3e7;box-shadow:4px 4px 0 #c8c0ac40;position:relative}.drawer-toggle{border:0;background:transparent;padding:13px 15px;display:flex;justify-content:space-between;align-items:center;text-align:left;min-height:49px;cursor:default}.drawer-toggle b{font-size:14px;font-family:Georgia,"Songti SC",serif;letter-spacing:.06em}.drawer-toggle small{display:block;color:var(--muted);font-size:10px;margin-top:3px}.handle-icon{display:none}.tabs{display:flex;border-top:1px solid #dfd7c6;border-bottom:1px solid #dfd7c6;padding:0 12px;gap:16px}.tabs button{border:0;border-bottom:2px solid transparent;padding:11px 2px 9px;background:transparent;font-size:11px;color:var(--muted);min-height:42px}.tabs button.active{border-color:#557b61;color:#365440}.tabs span{font:10px Menlo,monospace;margin-left:5px}.drawer-body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 14px;scrollbar-width:thin}ul,ol{padding:0;margin:0;list-style:none}.member{display:grid;grid-template-columns:21px auto minmax(0,1fr) auto;align-items:center;gap:8px;min-height:40px;border-bottom:1px solid #e4ddcd}.avatar{width:14px;height:16px;background:var(--actor);border:2px solid #35413a;box-shadow:2px 2px 0 #c8c0ae;margin-left:2px;position:relative}.avatar:before{content:"";position:absolute;top:3px;left:2px;width:2px;height:2px;background:#27312c;box-shadow:5px 0 #27312c}.member-name{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.member-name small{font-size:9px;color:var(--muted);margin-left:5px}.member-work{text-align:center;font:9px Menlo,monospace;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.member-meta{text-align:right;font-size:10px}.duration{display:block;font:9px/1.6 Menlo,monospace;color:var(--muted);font-variant-numeric:tabular-nums}.status-waiting{color:#b53b30}.status-busy{color:#37654d}.status-done{color:#917027}.status-unknown{color:#687170}.panel-foot{font-size:10px;text-align:center;color:#899080;margin:3px 10px}.empty{font-size:12px;line-height:1.8;margin:30px 0;color:#606b5b}.empty span{font-size:10px;color:var(--muted)}#notices li{padding:15px 0;border-bottom:1px solid #dfd7c6;font-size:12px;line-height:1.65;word-break:break-word}#notices time{display:block;font:9px Menlo,monospace;color:#899080;margin-bottom:5px}.signature{grid-column:1/-1;text-align:center;font-size:9px;letter-spacing:.08em;color:#8a8f80;align-self:end}.signature span{margin:0 8px}
@media(max-width:700px){.office-app{padding:13px 16px 7px;grid-template-columns:minmax(0,1fr);grid-template-rows:59px 28px minmax(0,1fr) 128px 14px;gap:6px}.masthead{grid-column:1}.eyebrow{font-size:9px;margin-bottom:4px}h1{font-size:26px}.clock time{font-size:19px}.clock small{font-size:8px}.mode{grid-column:1;font-size:10px}.room-meta{font-size:9px;margin-bottom:2px}.room-meta span:last-child{font-size:8px}#canvas-wrap{max-height:calc(100% - 34px)}.room-foot{font-size:9px;gap:12px;padding-top:6px}.drawer{grid-column:1;grid-row:4;z-index:3}.drawer-toggle{min-height:44px;padding:7px 12px;cursor:pointer}.drawer-toggle b{font-size:12px}.drawer-toggle small{display:inline;margin-left:8px;font-size:9px}.handle-icon{display:block;font-size:17px}.tabs{height:34px;min-height:34px;padding:0 12px}.tabs button{min-height:32px;font-size:10px;padding:6px 2px}.drawer-body{padding:0 12px}.member{min-height:43px}.panel-foot{display:none}.drawer.expanded{position:fixed;left:16px;right:16px;bottom:27px;height:min(65dvh,440px);box-shadow:0 -10px 35px #25333425}.drawer.expanded .handle-icon{transform:rotate(180deg)}.signature{grid-row:5;font-size:8px;grid-column:1}.paper{padding:7px 8px;font-size:11px;left:31%;width:66%}}
@media(max-height:580px) and (max-width:700px){.office-app{padding-top:7px;grid-template-rows:50px 25px minmax(0,1fr) 112px 12px;gap:4px}.drawer-toggle{min-height:40px}.tabs{min-height:30px;height:30px}.tabs button{min-height:28px}h1{font-size:23px}.room-meta{display:none}#canvas-wrap{max-height:calc(100% - 24px)}}
@media(min-width:701px) and (max-height:500px){.office-app{min-height:0;padding:8px 20px;grid-template-rows:50px 25px minmax(0,1fr) 16px;gap:5px 20px;grid-template-columns:minmax(0,1fr) 260px}.room-meta{display:none}#canvas-wrap{max-height:calc(100% - 24px)}h1{font-size:23px}.drawer-toggle{min-height:42px;padding:7px 12px}}
@media(prefers-reduced-motion:reduce){.mode:before{box-shadow:none}}
@media(max-width:700px){.office-app{grid-template-rows:59px 28px minmax(0,1fr) 138px 14px}.drawer-toggle{min-height:44px}.tabs{height:44px;min-height:44px}.tabs button{min-height:44px;padding:10px 2px}.drawer-toggle,.tabs button{touch-action:manipulation}}
@media(max-height:580px) and (max-width:700px){.office-app{grid-template-rows:50px 25px minmax(0,1fr) 132px 12px}}
/* MV mode (?mv=1): a 540×960 portrait stage for the short film, recorded at 2× = 1080×1920. Only the room, a small
   title above, one subtitle line below (its box ends at 740 CSS px = y 1480, above the 视频号 player's overlays). */
body.mv{--mv-bg:#eee9dd;--mv-ink:#253334;--mv-muted:#72796e;background-color:var(--mv-bg);overflow:hidden}
body.mv .office-app{display:block;width:540px;height:960px;padding:0;margin:0;position:relative}
body.mv .masthead,body.mv .mode,body.mv .room-meta,body.mv .room-foot,body.mv .drawer,body.mv .signature,body.mv .treat,body.mv .photo{display:none!important}
body.mv .room-section{position:absolute;left:0;top:116px;width:540px;height:588px;display:block}
body.mv #canvas-wrap{width:540px;height:588px;max-height:none;aspect-ratio:auto}
body.mv .paper{left:30%;bottom:21%;width:64%;font-size:15px;line-height:1.5;padding:10px 12px}
body.mv .paper span{font-size:11px}
#mv-title{position:fixed;left:24px;right:24px;top:86px;height:28px;display:flex;align-items:baseline;justify-content:space-between;color:var(--mv-ink)}
#mv-title .mv-name{font:700 21px/28px Georgia,"Songti SC",serif;letter-spacing:.12em}
#mv-title .mv-clock{font:20px/28px Menlo,monospace;letter-spacing:.06em;color:var(--mv-ink)}
#mv-sub{position:fixed;left:0;right:0;top:706px;height:34px;display:flex;justify-content:center;opacity:0}
#mv-sub span{display:block;height:34px;padding:0 16px;font:500 20px/30px "PingFang SC",system-ui,sans-serif;letter-spacing:.06em;color:#3c3020;background:#fff7d9;border:2px solid #786747;box-shadow:3px 3px 0 #25333430;white-space:nowrap}
#mv-day{position:fixed;left:0;top:756px;width:540px;height:60px;image-rendering:pixelated}
#mv-sign{position:fixed;left:0;right:0;top:830px;text-align:center;font-size:11px;letter-spacing:.12em;color:var(--mv-muted)}
#mv-dark{position:fixed;inset:0;background:#000;opacity:0;pointer-events:none;z-index:10}
body.mv *,body.mv *::before,body.mv *::after{transition:none!important;animation:none!important}
/* Wallpaper mode (?wall=1, for Plash): the room in the empty part of the desktop on a dark ground, so the white
   labels under the desktop icons stay readable. Only the caption line and the room; the banner shows only when not live. */
body.wall{background-color:#2b302c;background-image:radial-gradient(#ffffff14 .7px,transparent .7px);background-size:6px 6px;overflow:hidden;min-height:100vh}
body.wall .office-app{display:flex;flex-direction:column;position:fixed;left:var(--wl);top:var(--wt);width:var(--ww);height:var(--wh);padding:0;margin:0;gap:6px}
body.wall .masthead,body.wall .room-foot,body.wall .drawer,body.wall .signature,body.wall .treat,body.wall .photo,body.wall .mode.live{display:none!important}
body.wall .mode{border:0;color:#e2c98f;font-size:11px;padding:0}
body.wall .room-section{flex:1;min-height:0}
body.wall .room-meta{color:#d9d3c3;font-size:12px}body.wall .room-meta span:last-child{font-size:11px}
body.wall #canvas-wrap{max-height:calc(100% - 26px);box-shadow:0 10px 30px #00000055}

/* The annex keeps the old room's coordinates. Scroll the room on a phone instead of shrinking its lettering. */
#room-viewport{width:100%;min-height:0;flex:1;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;border-radius:2px}
#canvas-wrap{width:min(100%,480px);height:auto;max-height:none;max-width:100%;aspect-ratio:9/26;margin:0 auto}
#office{width:100%;height:auto;aspect-ratio:9/26}
.room-meta{flex-wrap:wrap;gap:3px}.room-foot{flex-shrink:0}
.treat{bottom:46%;max-width:67%}.paper{bottom:57%}.photo{bottom:45%}
.tabs{gap:13px}.tabs button{min-width:48px}
#totals{font-size:11px;line-height:1.7;color:#665636;border-bottom:1px solid #dfd7c6;padding-bottom:12px;overflow-wrap:anywhere}
#events li{display:flex;align-items:baseline;gap:9px;padding:12px 0;border-bottom:1px solid #dfd7c6;font-size:12px;line-height:1.7;overflow-wrap:anywhere}
#events time{flex:none;font:10px Menlo,monospace;color:#72796e;font-variant-numeric:tabular-nums}#events span{min-width:0}
body.mv #room-viewport{overflow:visible;height:100%}body.mv #office{aspect-ratio:auto;height:100%}
body.wall #room-viewport{display:flex;justify-content:center;overflow:hidden;min-height:0}
body.wall #canvas-wrap{width:auto;height:100%;max-height:none;max-width:100%;aspect-ratio:9/26;margin:0}
body.wall #office{height:100%;width:100%}
@media(max-width:700px){.photo{bottom:45%}.paper{bottom:57%}.treat button{min-height:44px}.tabs{gap:12px}#room-viewport{scroll-padding-top:8px}}

/* A keepsake belongs to the visible room panel, outside its scrolling canvas. */
.room-section>.photo{bottom:30px;right:3%}.photo-actions button{min-height:44px}

/* Keep the downstairs hint readable on short phones too. */
@media(max-height:580px) and (max-width:700px){body:not(.mv) .room-meta{display:flex}}

/* Foot plates extend below the game corner; keep mobile controls beneath their last row. */
@media(max-width:700px){body:not(.mv):not(.wall) .treat{bottom:45%}}
body.wall.wall-room #canvas-wrap{aspect-ratio:var(--wr,6/7)}
/* ?notes=1: the office notes stand to the right of the wallpaper room */
body.wall.wall-notes .drawer{display:flex!important;position:fixed;left:calc(var(--wl) + var(--ww) + 18px);top:var(--wt);width:var(--nw,24vw);height:var(--wh);z-index:2;box-shadow:0 10px 30px #00000055}body.wall.wall-notes .drawer-toggle{cursor:default}body.wall.wall-notes .handle-icon{display:none}
/* Desktop keeps the complete horizontal floor beside the notebook. Its width is fitted to the room viewport. */
@media(min-width:1000px) and (min-aspect-ratio:5/4){
  body:not(.mv):not(.wall) .office-app{width:min(1600px,100%);grid-template-columns:minmax(0,1fr) 300px;grid-template-rows:auto auto minmax(0,1fr) 22px;gap:10px 24px;padding:18px 24px 12px}
  body:not(.mv):not(.wall) .masthead{grid-column:2;grid-row:1;align-items:flex-start}
  body:not(.mv):not(.wall) .mode{grid-column:2;grid-row:2;flex-wrap:wrap;row-gap:4px;padding:6px 2px}
  body:not(.mv):not(.wall) .guestbook{margin-left:0;flex-basis:100%;font-size:13px}
  body:not(.mv):not(.wall) .room-section{grid-column:1;grid-row:1/4}
  body:not(.mv):not(.wall) .drawer{grid-column:2;grid-row:3}
}
body.landscape #room-viewport{display:block;overflow-y:auto;overflow-x:hidden}
body.landscape #canvas-wrap,body.landscape #office{aspect-ratio:8/7}body.landscape #canvas-wrap{margin:0 auto}
body.landscape .treat{position:static;max-width:100%;padding:0 12px 10px;flex-shrink:0}
body.landscape .treat button{min-height:36px}
body.landscape .paper{left:12%;bottom:15%;width:40%}
body.landscape .photo img{height:44px;object-fit:contain}
#wall-board{position:absolute;padding:0;border:0;background:transparent;cursor:pointer;touch-action:manipulation;min-height:44px;-webkit-tap-highlight-color:transparent}
#guest-notices{font-size:12px;line-height:1.7;color:#8e6642}
/* The narrowest phones keep the rights line on one row and drop the tagline. */
@media(max-width:400px){.signature .tagline{display:none}}

/* Reception and treat menus live outside the scrolling artwork, including on short phones. */
body:not(.mv):not(.wall) .room-section>.treat{position:relative;left:auto;bottom:auto;max-width:100%;width:100%;flex:none;padding:0 0 7px}
body:not(.mv):not(.wall) .treat button{min-height:44px;touch-action:manipulation}
body:not(.mv):not(.wall) .treat-row{flex-wrap:nowrap}
body:not(.mv):not(.wall) .treat-row button{white-space:nowrap}
#meet-menu{gap:6px}

/* Replay controls stay above the scrolling room and never cover its actors. */
.replay-banner{flex:none;width:100%;background:#fff4d5;border:1px solid #b59b72;padding:6px 9px;margin-bottom:6px;font-size:12px}
.replay-heading,.replay-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.replay-heading label{margin-left:auto}
#replay-clock{font:14px Menlo,monospace;font-variant-numeric:tabular-nums}
.replay-banner button,.replay-banner select,#history-days button{min-height:44px;border:1px solid #b59b72;background:#f8f3e7;padding:5px 9px;font:inherit;color:inherit;touch-action:manipulation}
.replay-actions{gap:8px;margin-top:4px}.replay-banner p{margin:5px 0 0;line-height:1.5}#replay-note{color:#8e6642}#replay-line:empty{display:none}
#history-note{font-size:12px;line-height:1.8;color:#72796e}#history-days button{width:100%;text-align:left;margin:0 0 8px}#history-days small{display:block;color:#72796e;margin-top:3px}
body.replaying #treat,body.replaying #photo{display:none!important}
.tabs{gap:9px}.tabs button{min-width:40px}

.hotspot{position:absolute;padding:0;border:0;background:transparent;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;z-index:2}
.hotspot:focus-visible{outline:2px dashed #c85b4a;outline-offset:2px}
.arcade{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);width:min(92vw,420px);max-height:80vh;overflow:auto;box-sizing:border-box;z-index:1001;background:#fffdf6;border:2px solid #786747;box-shadow:4px 4px 0 #25333430;padding:8px 10px}
.arcade-head{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#4b3b24;margin-bottom:6px}
.arcade-head button{border:0;background:none;font-size:16px;cursor:pointer;color:#786747;min-width:32px;min-height:32px}
.arcade-list{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}
.arcade-list a{display:block;padding:7px 4px;background:#f1e5c6;border:2px solid #786747;color:#4b3b24;font-size:11px;text-align:center;text-decoration:none}
.arcade-list a:hover{background:#efc66c}
.arcade-note{margin:6px 0 0;font-size:10px;color:#7e6a4a}
body.mv .hotspot,body.mv .arcade,body.wall .hotspot,body.wall .arcade{display:none!important}
.arcade-sub{margin:8px 0 4px;font-size:10px;color:#7e6a4a}
.arcade-plain{display:block;padding:5px 4px;border:2px dashed #b9a07a;color:#4b3b24;font-size:10px;text-align:center;line-height:1.3}
.scrim{position:fixed;inset:0;z-index:1000;background:#25333433}
.scrim[hidden]{display:none}
.arcade[hidden]{display:none}
.arcade-head{position:sticky;top:-8px;background:#fffdf6;padding-top:2px;z-index:1}
body.mv .scrim,body.wall .scrim{display:none!important}
.hotspot:hover{outline:2px dashed #c85b4a;outline-offset:-2px}
.to-fun{position:absolute;right:10px;bottom:12px;z-index:4;border:2px solid #786747;background:#fff6dc;color:#8a4a3e;font-size:12px;padding:6px 10px;min-height:36px;cursor:pointer;box-shadow:3px 3px 0 #25333428}
.to-fun[hidden]{display:none}
body.mv .to-fun,body.wall .to-fun{display:none!important}
.arcade-head button{min-width:44px;min-height:44px}
.arcade-list a{min-height:40px;display:flex;align-items:center;justify-content:center;box-sizing:border-box}
