:root{--bg: #1f1a17;--surface: #2b2420;--surface-2: #362d28;--line: #473b34;--ink: #f2e9dd;--ink-dim: #bbaa9c;--ink-mute: #93837a;--accent: #7c9a84;--accent-ink: #1f1a17;--warm: #e8c88a;--pink: #d9a1a1;--danger: #b5705a;--radius: 14px;--radius-sm: 10px;--tap: 44px;--pad: 16px;--max: 720px;--font: system-ui, -apple-system, "Segoe UI", "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, "Noto Sans JP", sans-serif;--font-pixel: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-size:16px;line-height:1.6;-webkit-text-size-adjust:100%;overflow-x:hidden}body{overscroll-behavior-y:contain}img,canvas{image-rendering:pixelated}.boot{padding:var(--pad);color:var(--ink-dim)}.app-shell{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;max-width:var(--max);margin:0 auto}.hidden{display:none!important}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.app-header{padding:12px var(--pad) 8px;border-bottom:1px solid var(--line);background:var(--surface);position:sticky;top:0;z-index:5}.app-title{margin:0;font-size:1.05rem;letter-spacing:.08em}.pixel-head{font-family:var(--font-pixel);font-weight:700;letter-spacing:.04em}h1.pixel-head{font-size:1.15rem;margin:0 0 4px}h2.pixel-head{font-size:.95rem;margin:20px 0 8px}.app-main{flex:1;padding:var(--pad) var(--pad) calc(var(--tap) + 44px);min-width:0}.page{min-width:0}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:14px;margin:12px 0}p{margin:6px 0;overflow-wrap:anywhere}.muted{color:var(--ink-dim)}.small{font-size:.82rem}.warn{color:var(--warm)}.brand{font-family:var(--font-pixel);letter-spacing:.1em;color:var(--accent);margin:0}.concept{color:var(--ink-dim);font-size:.88rem;margin:2px 0 14px}.field-label{font-size:.8rem;color:var(--ink-dim);margin:14px 0 6px}.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}button{font-family:inherit;font-size:.92rem;color:var(--ink);background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-sm);min-height:var(--tap);padding:8px 14px;cursor:pointer;transition:transform .12s ease,background .16s ease,border-color .16s ease}button:active{transform:translateY(1px)}button:focus-visible{outline:2px solid var(--warm);outline-offset:2px}button:disabled{opacity:.45;cursor:not-allowed}.btn{min-height:var(--tap)}.btn-primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:700}.btn-quiet{background:transparent}.btn-danger{color:var(--danger);border-color:var(--danger);background:transparent}.btn-wide{width:100%;margin-top:8px}.input{width:100%;min-height:var(--tap);padding:10px 12px;margin:4px 0;font-family:inherit;font-size:1rem;color:var(--ink);background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-sm)}.input:focus-visible{outline:2px solid var(--warm);outline-offset:1px}.select{appearance:none;background-image:none}.textarea{min-height:80px;resize:vertical;font-size:.9rem}.room-stage{margin-bottom:12px}.room-frame{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--surface);line-height:0}.room-canvas{display:block;width:100%;height:auto}.room-meta{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:6px;flex-wrap:wrap}.light-chip{font-family:var(--font-pixel);font-size:.78rem;color:var(--warm);border:1px solid var(--line);border-radius:999px;padding:2px 10px}.stat-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:10px 0}.stat-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);padding:8px 10px;min-width:0}.stat-label{display:block;font-size:.72rem;color:var(--ink-mute)}.stat-value{display:flex;align-items:center;gap:4px;font-family:var(--font-pixel);font-size:1.2rem;font-weight:700}.stat-unit{font-size:.78rem;color:var(--ink-dim)}.coin-card .stat-value{color:var(--warm)}.mood-row{display:flex;align-items:center;gap:4px;margin:8px 0 4px;flex-wrap:wrap}.heart-on{opacity:1}.heart-off{opacity:.22}.mood-row .muted{margin-left:6px}.pixel-icon{display:inline-block;vertical-align:middle}.pixel-preview{display:block;margin:0 auto 4px;background:transparent}.pixel-preview.small{margin:0}.pixel-preview.locked{opacity:.3;filter:grayscale(1)}.today-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.challenge-list,.manage-list,.shop-list,.collect-list,.suggest-list{list-style:none;margin:8px 0;padding:0}.challenge{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin-bottom:8px;min-width:0}.challenge.done{border-color:var(--accent);background:#2f3029}.challenge-main{display:flex;align-items:center;gap:10px;min-width:0}.challenge-emoji{font-size:1.3rem;line-height:1}.challenge-title{margin:0;font-weight:600;overflow-wrap:anywhere}.challenge.done .challenge-title{color:var(--accent)}.challenge-main p{margin:0}.paw-btn{flex:0 0 auto;width:var(--tap);height:var(--tap);min-height:var(--tap);display:grid;place-items:center;padding:0;border-radius:50%;background:var(--surface-2)}.paw-btn .pixel-icon{opacity:.4}.paw-btn.on{background:var(--accent);border-color:var(--accent)}.paw-btn.on .pixel-icon{opacity:1}.perfect-banner{display:flex;align-items:center;gap:8px;font-family:var(--font-pixel);color:var(--warm);border:1px dashed var(--warm);border-radius:var(--radius-sm);padding:8px 10px}.milestone-line{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:.88rem}.reward-box{border-color:var(--warm)}.reward-item{display:flex;align-items:center;justify-content:space-between;gap:10px;border-top:1px solid var(--line);padding-top:10px;margin-top:10px;flex-wrap:wrap}.reward-name{margin:0;font-weight:700;color:var(--warm)}.reward-item p{margin:0}.claim-btn{flex:0 0 auto}.chip-row{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0}.scroll-row{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin;-webkit-overflow-scrolling:touch}.scroll-row .chip{flex:0 0 auto}.chip{min-height:var(--tap);padding:6px 12px;border-radius:999px;font-size:.85rem}.chip.on{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:700}.chip-emoji{font-size:1.1rem;padding:6px 10px}.swatch-row{display:flex;gap:8px;flex-wrap:wrap}.swatch{width:var(--tap);height:var(--tap);min-height:var(--tap);padding:0;border-radius:50%;background:var(--swatch);border:2px solid var(--line)}.swatch.on{border-color:var(--warm);border-width:3px}.onboard{margin-top:8px}.onboard-steps{display:flex;gap:6px;justify-content:center;padding:14px 0 0}.dot{width:8px;height:8px;border-radius:50%;background:var(--line)}.dot.on{background:var(--accent)}.suggest-list{display:grid;gap:8px}.suggest{display:flex;align-items:center;gap:10px;width:100%;text-align:left;min-height:var(--tap)}.suggest.on{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.suggest-emoji{font-size:1.2rem}.suggest-title{flex:1;font-weight:600;min-width:0;overflow-wrap:anywhere}.suggest-cat{font-size:.75rem;opacity:.75}.custom-row{margin-top:10px}.custom-row .input{flex:1 1 140px}.custom-added{font-size:.85rem;color:var(--accent);margin:2px 0}.cat-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.cat-pick,.collect-card{display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 6px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);font-size:.85rem;min-width:0}.cat-pick.on{border-color:var(--accent);background:#2f3029}.collect-card.locked{opacity:.55}.manage-item{display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin-bottom:8px;flex-wrap:wrap;min-width:0}.manage-main{display:flex;align-items:center;gap:10px;min-width:0;flex:1 1 160px}.manage-main p{margin:0}.manage-actions{display:flex;gap:6px;flex:0 0 auto}.manage-actions .btn{padding:6px 12px;font-size:.85rem}.add-form .btn-wide{margin-top:10px}.edit-form{display:flex;gap:6px;flex-wrap:wrap;width:100%}.edit-form .input{flex:1 1 140px}.month-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.month-head h1{flex:1;text-align:center}.month-nav{width:var(--tap);padding:0;font-size:1.2rem}.calendar{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px;margin:10px 0}.cal-weekday{text-align:center;font-size:.7rem;color:var(--ink-mute);padding:2px 0}.cal-cell{position:relative;aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:2px;min-width:0;overflow:hidden}.cal-cell.empty{background:transparent;border-color:transparent}.cal-cell.future{opacity:.4}.cal-cell.today{border-color:var(--warm)}.cal-cell.achieved{background:#2f3029}.cal-day{font-family:var(--font-pixel);font-size:.62rem;color:var(--ink-mute);line-height:1.2}.stamp{margin-top:-2px;max-width:100%;height:auto}.stamp-perfect{filter:drop-shadow(0 0 2px var(--warm))}.legend{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin:6px 0}.legend-item{display:inline-flex;align-items:center;gap:4px}.review p{font-size:.9rem;margin:4px 0}.shop-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.coin-pill{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-pixel);font-weight:700;color:var(--warm);border:1px solid var(--line);border-radius:999px;padding:4px 12px}.shop-item,.collect-row{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:10px;margin-bottom:8px;flex-wrap:wrap;min-width:0}.shop-info,.collect-row>div:not(.collect-icon):not(.collect-status){flex:1 1 140px;min-width:0}.shop-info p,.collect-row p{margin:0}.shop-name,.collect-name{font-weight:600}.price-row{display:flex;align-items:center;gap:4px;font-family:var(--font-pixel);color:var(--warm);font-size:.9rem}.owned-tag{font-size:.72rem;color:var(--accent);margin-left:6px;font-family:var(--font)}.shop-actions{display:flex;gap:6px;flex:0 0 auto;flex-wrap:wrap}.shop-actions .btn{padding:8px 12px;font-size:.85rem}.ledger-line{display:flex;justify-content:space-between;gap:10px;font-size:.85rem}.slot-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:10px 0}.slot{display:flex;flex-direction:column;align-items:center;gap:2px;aspect-ratio:1;padding:6px;background:var(--surface);border:1px dashed var(--line);border-radius:var(--radius-sm);font-size:.72rem;min-width:0;overflow:hidden}.slot.filled{border-style:solid;background:var(--surface-2)}.slot.target{border-color:var(--accent);background:#2f3029}.slot-canvas{display:block}.slot-label{overflow-wrap:anywhere;text-align:center;line-height:1.2}.shelf{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.shelf-item{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 4px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);font-size:.72rem;min-width:0}.shelf-item span{overflow-wrap:anywhere;text-align:center;line-height:1.2}.shelf-item.on{border-color:var(--accent);background:#2f3029}.shelf-item.placed{opacity:.75}.collect-icon{flex:0 0 auto;width:48px;display:grid;place-items:center}.collect-status{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:2px}.collect-row.locked{opacity:.55}.collect-row.ready{border-color:var(--warm)}.collect-row.owned{border-color:var(--accent)}.ready-tag{color:var(--warm)}.theme-chip{display:block;width:36px;height:36px;border-radius:8px;background:var(--chip);border:1px solid var(--line)}.tab-bar{position:fixed;bottom:0;left:0;right:0;z-index:10;display:flex;background:var(--surface);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);max-width:var(--max);margin:0 auto;overflow-x:auto;scrollbar-width:none}.tab-bar::-webkit-scrollbar{display:none}.tab{flex:1 0 auto;min-width:52px;min-height:var(--tap);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:4px 2px;background:transparent;border:none;border-radius:0;color:var(--ink-mute);font-size:.62rem}.tab-icon{font-size:1.05rem;line-height:1.1}.tab-label{white-space:nowrap}.tab.on{color:var(--accent);font-weight:700}.toast-host{position:fixed;left:50%;bottom:calc(var(--tap) + 20px);transform:translate(-50%);z-index:50;display:flex;flex-direction:column;gap:6px;align-items:center;pointer-events:none;width:min(92vw,420px)}.toast{display:flex;align-items:center;gap:8px;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:8px 16px;font-size:.88rem;box-shadow:0 6px 20px #00000059;animation:toast-in .26s ease both;max-width:100%}.toast-text{overflow-wrap:anywhere}.toast-perfect{border-color:var(--warm);color:var(--warm)}.toast-coins{font-family:var(--font-pixel);font-weight:700;color:var(--warm)}.toast-out{animation:toast-out .3s ease both}.toast-static{animation:none}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes toast-out{0%{opacity:1}to{opacity:0;transform:translateY(-6px)}}.coin-fly{position:fixed;z-index:60;pointer-events:none;animation:coin-rise 1s ease-out both}@keyframes coin-rise{0%{opacity:0;transform:translateY(0) scale(.9)}25%{opacity:1}to{opacity:0;transform:translateY(-56px) scale(1.05)}}@media(min-width:720px){.app-main{padding:20px 24px calc(var(--tap) + 48px)}.cat-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.slot-grid,.shelf{grid-template-columns:repeat(5,minmax(0,1fr))}.suggest-list{grid-template-columns:repeat(2,minmax(0,1fr))}.tab{font-size:.7rem}.tab-icon{font-size:1.15rem}h1.pixel-head{font-size:1.3rem}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.coin-fly{display:none}button:active{transform:none}}
