*,:before,:after{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--ink);font-family:var(--font);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none;margin:0;font-size:16px;line-height:1.5}h1,h2,h3,p{margin:0}h1{font-size:26px;line-height:1.25}h2{font-size:18px}button,input{font:inherit;color:inherit}.muted{color:var(--muted);font-size:14px}.error{color:#b4232f;font-size:14px}.stack{flex-direction:column;gap:16px;display:flex}.row{align-items:center;gap:12px;display:flex}.row.wrap{flex-wrap:wrap}.grow{flex:1;min-width:0}.card{background:var(--surface);border:var(--card-border);box-shadow:var(--card-shadow);border-radius:var(--radius);padding:18px}.btn{border-radius:var(--radius-sm);border:var(--card-border);background:var(--accent);min-height:48px;color:var(--accent-ink);cursor:pointer;justify-content:center;align-items:center;gap:8px;padding:0 20px;font-weight:500;text-decoration:none;display:inline-flex}.btn:disabled{opacity:.55;cursor:default}.btn.ghost{background:var(--surface);color:var(--ink);border:1.5px solid var(--line)}.btn.line{color:#0b2b17;background:#06c755}.btn.danger{background:var(--surface);color:#b4232f;border:1.5px solid #b4232f}.btn.small{min-height:44px;padding:0 14px;font-size:14px}.btn.block{width:100%}.link{color:var(--accent);cursor:pointer;background:0 0;border:none;min-height:44px;padding:0 4px;text-decoration:underline}.field{color:var(--muted);flex-direction:column;gap:6px;font-size:14px;display:flex}.field input{border-radius:var(--radius-sm);border:1.5px solid var(--line);background:var(--surface);min-height:48px;color:var(--ink);width:100%;padding:0 14px;font-size:16px}.field input:focus-visible,.btn:focus-visible,.link:focus-visible,.nav button:focus-visible,.theme-option:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.code-input input{letter-spacing:6px;text-transform:uppercase;text-align:center;font-size:22px}.avatar{border:var(--card-border);object-fit:cover;color:#1f1b2e;border-radius:50%;flex:none;justify-content:center;align-items:center;width:44px;height:44px;font-weight:700;display:inline-flex}.center-page{min-height:100%;padding:calc(24px + env(safe-area-inset-top)) 20px calc(24px + env(safe-area-inset-bottom));justify-content:center;align-items:center;display:flex}.center-page>.stack{width:100%;max-width:420px}.brand{border-radius:22px;width:72px;height:72px}.tabs{background:var(--surface);border:var(--card-border);border-radius:var(--radius-sm);grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;padding:6px;display:grid}.tabs button{border-radius:calc(var(--radius-sm) - 4px);cursor:pointer;background:0 0;border:none;min-height:44px}.tabs button[aria-selected=true]{background:var(--accent);color:var(--accent-ink)}.steps{flex-direction:column;gap:8px;margin:0;padding-left:22px;display:flex}.shell{flex-direction:column;height:100%;display:flex}.shell main{padding:calc(20px + env(safe-area-inset-top)) 20px 24px;flex:1;overflow-y:auto}.shell main>.stack{max-width:880px;margin:0 auto}.nav{margin:0 12px calc(12px + env(safe-area-inset-bottom));background:var(--surface);border:var(--card-border);box-shadow:var(--card-shadow);border-radius:var(--radius);grid-template-columns:repeat(6,minmax(0,1fr));gap:4px;padding:6px;display:grid}:root[data-theme=minimal] .nav{border:none;border-top:1px solid var(--line);padding-bottom:calc(6px + env(safe-area-inset-bottom));border-radius:0;margin:0}.nav button{min-height:52px;color:var(--muted);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;flex-direction:column;justify-content:center;align-items:center;gap:2px;font-size:11px;display:flex}.nav button[aria-current=page]{background:var(--accent);color:var(--accent-ink)}.nav .nav-title,.nav .nav-spacer{display:none}@media (width>=900px){.shell{flex-direction:row-reverse}.shell main{padding:36px 40px}.nav{flex-direction:column;width:220px;margin:20px 0 20px 20px;padding:16px;display:flex}:root[data-theme=minimal] .nav{border-right:1px solid var(--line);border-top:none;padding:24px 16px}.nav .nav-title{padding:4px 12px 16px;font-size:20px;font-weight:700;display:block}.nav .nav-spacer{flex:1;display:block}.nav button{min-height:48px;color:var(--ink);flex-direction:row;justify-content:flex-start;gap:12px;padding:0 12px;font-size:15px}}.member-list{flex-wrap:wrap;gap:16px;display:flex}.member{text-align:center;overflow-wrap:anywhere;flex-direction:column;align-items:center;gap:4px;width:64px;font-size:13px;display:flex}.invite-code{letter-spacing:8px;text-align:center;font-size:34px;font-weight:700}.qr{background:#fff;border-radius:12px;align-self:center;width:220px;height:220px;padding:8px}.placeholder{text-align:center;padding:48px 20px}.theme-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;display:grid}.theme-option{text-align:left;cursor:pointer;border:2px solid #0000;border-radius:16px;flex-direction:column;gap:8px;min-height:44px;padding:12px;display:flex}.theme-option[aria-pressed=true]{outline:3px solid var(--accent);outline-offset:2px}.theme-swatches{gap:6px;display:flex}.theme-swatches span{border-radius:50%;width:22px;height:22px}.room-item{border-top:1px solid var(--line);padding:12px 0}.room-item:first-of-type{border-top:none}.badge{background:var(--tint2);color:#1f1b2e;border-radius:999px;padding:2px 10px;font-size:12px}.modal-backdrop{z-index:10;background:#1410188c;justify-content:center;align-items:flex-end;padding:16px;display:flex;position:fixed;inset:0}.modal{width:100%;max-width:420px;max-height:90vh;margin-bottom:env(safe-area-inset-bottom);overflow-y:auto}@media (width>=900px){.modal-backdrop{align-items:center}}.scanner video{aspect-ratio:1;object-fit:cover;border-radius:var(--radius-sm);background:#000;width:100%}.field textarea,.field select{border-radius:var(--radius-sm);border:1.5px solid var(--line);background:var(--surface);min-height:48px;color:var(--ink);font:inherit;width:100%;padding:12px 14px;font-size:16px}.field textarea{resize:vertical;min-height:120px}.check{cursor:pointer;align-items:center;gap:10px;min-height:44px;display:flex}.check input{width:22px;height:22px;accent-color:var(--accent);flex:none}.add-bar{gap:8px;display:flex}.add-bar input{border-radius:var(--radius-sm);border:1.5px solid var(--line);background:var(--surface);flex:1;min-width:0;min-height:48px;padding:0 14px;font-size:16px}.section-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.tile{text-align:left;cursor:pointer;width:100%;font:inherit;color:inherit;display:block}.tile:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.wish-list{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px;display:grid}.wish{flex-direction:column;gap:6px;padding:10px;display:flex}.wish-thumb{border-radius:calc(var(--radius) - 8px);background:var(--tint1) center / cover no-repeat;flex:none;height:110px;padding:8px}.wish:nth-child(3n+2) .wish-thumb{background-color:var(--tint2)}.wish:nth-child(3n) .wish-thumb{background-color:var(--tint3)}.wish-title{-webkit-line-clamp:2;overflow-wrap:anywhere;-webkit-box-orient:vertical;font-weight:500;display:-webkit-box;overflow:hidden}.wish.done .wish-title{color:var(--muted);text-decoration:line-through}.source{color:#1f1b2e;background:#fff;border:1px solid #00000026;border-radius:999px;padding:2px 9px;font-size:11px;display:inline-block}:root[data-wishlist=list] .wish-list{grid-template-columns:minmax(0,1fr);gap:0}:root[data-wishlist=list] .wish{border:none;border-bottom:1px solid var(--line);box-shadow:none;border-radius:0;flex-direction:row;align-items:center;gap:14px;padding:12px 0}:root[data-wishlist=list] .wish-thumb{border-radius:var(--radius-sm);width:56px;height:56px;padding:0}:root[data-wishlist=list] .wish-thumb .source{display:none}.cal-head{align-items:center;gap:8px;display:flex}.cal-grid{text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));gap:2px;display:grid}.cal-grid .dow{color:var(--muted);padding:6px 0;font-size:12px}.cal-day{border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;flex-direction:column;justify-content:center;align-items:center;gap:3px;min-height:46px;display:flex}.cal-day.today{color:var(--accent);font-weight:700}.cal-day[aria-pressed=true]{background:var(--accent);color:var(--accent-ink)}.cal-day:focus-visible{outline:3px solid var(--accent);outline-offset:1px}.cal-dot{background:currentColor;border-radius:50%;width:6px;height:6px}.event-row{border-top:1px solid var(--line);align-items:center;gap:14px;padding:12px 0;display:flex}.event-row:first-child{border-top:none}.memo-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;display:grid}.memo-snippet{-webkit-line-clamp:3;white-space:pre-line;overflow-wrap:anywhere;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.item-row{align-items:center;gap:8px;display:flex}.item-row .grow{overflow-wrap:anywhere}.item-row.done .grow{color:var(--muted);text-decoration:line-through}.shell main:has(>.chat){flex-direction:column;padding-bottom:12px;display:flex;overflow:hidden}.chat{flex-direction:column;flex:1;gap:12px;width:100%;max-width:880px;min-height:0;margin:0 auto;display:flex}.chat-list{overscroll-behavior:contain;flex-direction:column;flex:1;gap:8px;min-height:0;display:flex;overflow-y:auto}.chat-day{text-align:center;padding:8px 0;font-size:12px}.chat-row{align-items:flex-end;gap:8px;display:flex}.chat-row.mine{flex-direction:row-reverse}.chat-body{flex-direction:column;gap:2px;max-width:75%;display:flex}.chat-name,.chat-time{font-size:11px}.bubble{border-radius:var(--radius-sm);background:var(--tint2);color:#1f1b2e;border:var(--card-border);white-space:pre-wrap;overflow-wrap:anywhere;padding:9px 14px}.chat-row.mine .bubble{background:var(--accent);color:var(--accent-ink)}.sync-banner{border-radius:var(--radius-sm);background:var(--tint1);color:#1f1b2e;border:var(--card-border);text-align:center;max-width:880px;margin:0 auto 12px;padding:8px 14px;font-size:14px}.memo-cover{object-fit:cover;border-radius:calc(var(--radius) - 8px);width:100%;height:120px}.image-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.image-cell{flex-direction:column;gap:4px;display:flex}.image-cell img{aspect-ratio:1;object-fit:cover;border-radius:var(--radius-sm);width:100%}html.on-brand body{background:#fbf3ec}.brand-page{--paper:#fbf3ec;--wine:#872a4b;--wine-deep:#5e1b33;--blossom:#fac0ce;--blossom-soft:#fde6eb;--leaf:#5f8a4f;--yolk:#f2b632;--bg:var(--paper);--surface:#fff;--ink:#3b1a28;--muted:#7c5665;--accent:var(--wine);--accent-ink:#fff;--line:var(--blossom);--card-border:none;--card-shadow:none;--radius:20px;--radius-sm:14px;--font:"Noto Sans TC", "PingFang TC", system-ui, sans-serif;--serif:"Noto Serif TC", "Songti TC", serif;isolation:isolate;background:var(--paper);min-height:100%;color:var(--ink);font-family:var(--font);padding:calc(28px + env(safe-area-inset-top)) max(24px, env(safe-area-inset-left)) calc(24px + env(safe-area-inset-bottom)) max(24px, env(safe-area-inset-right));flex-direction:column;align-items:center;display:flex;position:relative;overflow:hidden}.brand-heart,.petals{z-index:-1;pointer-events:none;position:absolute}.brand-page>:not(.brand-heart):not(.petals){z-index:1;position:relative}.brand-logo{flex:none;display:block}.brand-page .btn{border-radius:18px;min-height:54px;font-size:17px;font-weight:700}.brand-page .btn.ghost{background:var(--paper);font-weight:500}.brand-page .btn:focus-visible,.brand-page .field input:focus-visible,.brand-page .tabs button:focus-visible,.brand-page .link:focus-visible{outline-color:var(--yolk)}.brand-page .btn.shine{position:relative;overflow:hidden}.brand-page .btn.shine:after{content:"";background:linear-gradient(105deg,#0000 35%,#fac0ce73 50%,#0000 65%);animation:4.5s ease-in-out infinite brand-sheen;position:absolute;inset:0;transform:translate(-120%)}.brand-page .btn.line{color:#fff;background:#06c755}.line-icon{flex:none;width:28px;height:28px}.brand-page .tabs{background:var(--blossom-soft);border-radius:14px;gap:4px;padding:4px}.brand-page .tabs button{color:var(--wine);border-radius:11px}.brand-page .tabs button[aria-selected=true]{color:var(--wine-deep);background:#fff;font-weight:700;box-shadow:0 1px 4px #5e1b3324}.brand-page .field input{min-height:50px}.brand-page .card{background:var(--paper);border:1.5px solid var(--blossom)}.brand-page h2{font-family:var(--serif);color:var(--wine-deep)}.halo{text-shadow:0 0 6px var(--paper), 0 0 12px var(--paper), 0 0 18px var(--paper)}.petals{inset:0}.petals span{background:var(--blossom);opacity:.85;border-radius:80% 0;width:12px;height:16px;animation:linear infinite brand-fall;position:absolute;top:-24px}.petals span:first-child{animation-duration:11s;left:10%}.petals span:nth-child(2){width:9px;height:12px;animation-duration:15s;animation-delay:-6s;left:34%}.petals span:nth-child(3){border:1px solid var(--blossom);background:#fff;animation-duration:13s;animation-delay:-3s;left:58%}.petals span:nth-child(4){animation-duration:12s;animation-delay:-9s;left:78%}.petals span:nth-child(5){width:9px;height:12px;animation-duration:17s;animation-delay:-12s;left:92%}.rise{animation:.8s cubic-bezier(.2,.7,.2,1) both brand-rise}.rise:nth-child(2){animation-delay:80ms}.rise:nth-child(3){animation-delay:.16s}.rise:nth-child(4){animation-delay:.24s}.rise:nth-child(5){animation-delay:.32s}.rise:nth-child(6){animation-delay:.4s}.landing .brand-heart{width:100%;height:100%;inset:0;-webkit-mask-image:linear-gradient(#0000 17%,#000 29% 66%,#0000 80%);mask-image:linear-gradient(#0000 17%,#000 29% 66%,#0000 80%)}.landing-copy{text-align:center;flex-direction:column;flex:1;align-items:center;width:100%;max-width:420px;display:flex}.landing .brand-logo{border-radius:30px;width:132px;height:132px}.landing-tagline{font-family:var(--serif);color:var(--wine-deep);text-wrap:balance;margin-top:6px;font-size:22px;font-weight:700;line-height:1.5}.landing-sub{color:var(--muted);margin-top:8px;font-size:14px}.landing-gap{flex:1;min-height:190px}.landing-chips{flex-wrap:wrap;justify-content:center;gap:8px;margin-bottom:18px;display:flex}.landing-chips span{background:var(--paper);border:1.5px solid var(--blossom);color:var(--wine);border-radius:999px;padding:5px 13px;font-size:13px}.landing-chips span:nth-child(2){border-color:var(--leaf);color:#3f6233}.landing-guide{text-align:left;flex-direction:column;gap:12px;width:100%;display:flex}.landing-guide.plain{text-align:center}.landing-guide .steps{color:var(--ink)}@media (width>=900px){.landing{flex-direction:row;justify-content:flex-start;align-items:center;padding-left:8vw}.landing-copy{text-align:left;flex:0 440px;align-items:flex-start}.landing-tagline{font-size:clamp(30px,3.2vw,44px);line-height:1.3}.landing-sub{font-size:16px}.landing-gap{flex:none;min-height:28px}.landing-chips{justify-content:flex-start}.landing-guide.plain{text-align:left}.landing-guide .btn{align-self:flex-start;width:auto;padding:0 34px}.landing .brand-heart{width:55%;inset:0 0 0 auto;-webkit-mask-image:none;mask-image:none}}.login-page{justify-content:center}.login-page .brand-heart{opacity:.55;width:260px;height:260px;top:-30px;right:-70px}.login-box{flex-direction:column;gap:14px;width:100%;max-width:400px;display:flex}.login-head{align-items:center;gap:14px;margin-bottom:6px;display:flex}.login-head .brand-logo{border-radius:18px;width:76px;height:76px}.login-head h1{font-family:var(--serif);color:var(--wine-deep);font-size:24px}.or-line{color:var(--muted);align-items:center;gap:12px;font-size:13px;display:flex}.or-line:before,.or-line:after{content:"";background:var(--blossom);flex:1;height:1px}@media (width>=900px){.login-page .brand-heart{opacity:.7;width:38vw;max-width:520px;height:38vw;max-height:520px;top:50%;right:6vw;transform:translateY(-50%)}.login-page{align-items:flex-start;padding-left:10vw}}@keyframes brand-rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes brand-sheen{0%,55%{transform:translate(-120%)}85%,to{transform:translate(120%)}}@keyframes brand-fall{0%{transform:translateY(-24px)rotate(0)}to{transform:translate(-60px,105vh)rotate(420deg)}}@media (prefers-reduced-motion:reduce){.rise,.brand-page .btn.shine:after{animation:none}.petals{display:none}}
