:root{--paper:#f6f4ed;--ink:#354b3f;--muted:#7a8075;--green:#3d604b;--line:#e2e3d8;--lavender:#ebe6f2;--peach:#f7e6d8;--yellow:#f0d68d;--serif:Georgia,'Times New Roman',serif}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:14px/1.5 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}button,input,select{font:inherit}button{cursor:pointer;color:inherit;transition:background .15s,transform .15s}button:disabled{cursor:not-allowed;opacity:.45}button:not(:disabled):active{transform:translateY(1px)}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid #9b82bd;outline-offset:4px}button{border:0}h1,h2,h3,p{margin:0}button,a{-webkit-tap-highlight-color:transparent}button svg{pointer-events:none}.topbar{height:106px;max-width:1380px;margin:auto;padding:0 46px;display:flex;align-items:center;border-bottom:1px solid var(--line);gap:34px}.brand{display:flex;gap:11px;align-items:center;text-decoration:none;color:var(--ink);font-size:22px;font-weight:800;line-height:.93;letter-spacing:-1px}.brand-icon{font-size:36px;transform:rotate(-15deg);background:#e8e9dc;border-radius:17px;padding:11px 8px}.brand-dot{color:#b28973}.tagline,.eyebrow{font-size:10px;font-weight:700;letter-spacing:2px}.tagline{color:#88897b}.top-actions{margin-left:auto;display:flex;align-items:center;gap:11px}.icon-button{width:36px;height:36px;border:1px solid #d9ddcf;border-radius:50%;background:transparent;font-weight:700}.save-status{font-size:11px;background:transparent;color:#6b7e6a;margin-right:7px}.save-status.offline{color:#a47847}main{max-width:1380px;padding:38px 46px 0;margin:auto}.welcome{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px}.eyebrow{color:#909380;margin-bottom:9px}h1{font-family:var(--serif);font-size:42px;font-weight:400;letter-spacing:-1.6px;line-height:1.2}h1 span{font-style:italic;color:#899475}.welcome p{color:var(--muted);margin-top:9px;font-size:13px}.wallet{display:flex;align-items:center;gap:13px;background:#f0ede1;border:1px solid #e3dfcd;padding:13px 24px;border-radius:15px}.coin{display:grid;place-items:center;background:#efd487;color:#9a7840;border:3px double #cfaa58;border-radius:50%;width:38px;height:38px;font-size:22px}.wallet small{font-size:8px;letter-spacing:1.5px;display:block;color:#8c866f;font-weight:700}.wallet strong{font-size:24px;line-height:1.3}.wallet strong>span:last-child{font-size:12px;font-weight:400;color:#8b8978}.game-layout{display:grid;grid-template-columns:minmax(0,1fr) 344px;gap:26px;align-items:start}.room-card{border:1px solid #dcdfd2;border-radius:20px;overflow:hidden;background:#fffdf5}.room-header{height:55px;padding:0 24px;display:flex;align-items:center;justify-content:space-between;font-size:12px;background:#fcfbf6}.room-header>div{display:flex;align-items:center;gap:10px}.live-dot{height:7px;width:7px;background:#819475;border-radius:50%;display:inline-block}.room-divider{color:#c7cabb;margin:0 2px}.day-chip{font-size:9px;letter-spacing:1px;background:#eeeee4;padding:4px 9px;border-radius:5px}.room{position:relative;overflow:hidden;background:#eee8d6}.room-art{display:block;width:100%;height:auto}.room-speech{position:absolute;z-index:1;top:22px;left:50%;transform:translateX(-50%);background:#fffcf0;border:1px solid #ded5bf;box-shadow:0 3px 0 #d9cbb544;padding:10px 17px;border-radius:11px;font-family:var(--serif);font-style:italic;white-space:nowrap;font-size:13px}.room-speech:after{content:'';position:absolute;bottom:-6px;left:69%;height:10px;width:10px;background:#fffcf0;border-right:1px solid #ded5bf;border-bottom:1px solid #ded5bf;transform:rotate(45deg)}.scene-badge{position:absolute;bottom:16px;left:18px;font-size:10px;border:1px solid #f8eddd80;background:#faf4e6d9;border-radius:20px;padding:5px 11px}.objective{display:flex;gap:15px;padding:23px 25px 21px;align-items:center}.objective-icon{font-size:29px;background:var(--lavender);padding:10px;border-radius:13px}.objective small{display:block;font-size:8px;letter-spacing:1.4px;color:#8c9484;margin-bottom:5px;font-weight:700}.objective strong{display:block;font-family:var(--serif);font-weight:400;font-size:20px;line-height:1.3}.objective div>span{display:block;font-size:11px;color:var(--muted);margin-top:5px}.goal-time{font:35px/1 var(--serif);margin-left:auto;border:1px dashed #d2d6c6;border-radius:12px;padding:8px 14px;text-align:center}.goal-time span{display:block;font:8px/1.5 sans-serif;letter-spacing:1px;color:#89927b;margin-top:2px}.level-strip{border-top:1px solid #e9e9de;display:flex;align-items:center;gap:17px;padding:15px 24px;background:#f5f6ee}.level-strip>span{font-size:8px;letter-spacing:1px;color:#8a9280;font-weight:700}.level-strip strong{margin-left:auto;font-size:10px;font-weight:500}.level-strip #level-dots{display:flex;gap:5px}.level-dot{width:8px;height:8px;border-radius:50%;background:#dde1d3}.level-dot.done{background:#729077}.level-dot.current{background:#b5a2c6;box-shadow:0 0 0 3px #e3dced}.tablet{background:#fffdf7;border:1px solid #dce0d4;border-radius:20px;padding:21px;box-shadow:0 7px 0 #e8e9de}.tablet-heading{display:flex;justify-content:space-between;align-items:center;font-size:9px;letter-spacing:2px;font-weight:700;color:#909680;padding:0 1px 18px}.tablet-dot{width:6px;height:6px;border-radius:50%;background:#c6cdbb}.tabs{display:flex;background:#f0f1e9;padding:4px;border-radius:9px;gap:2px;margin-bottom:22px}.tabs button{flex:1;padding:8px 3px;background:transparent;border-radius:6px;font-size:11px;color:#7a8472}.tabs button.active{background:#fffdf7;box-shadow:0 2px 5px #354b3f10;font-weight:600;color:var(--green)}.panel-title{font:25px/1.25 var(--serif);letter-spacing:-.5px;margin-bottom:6px}.panel-description{color:var(--muted);font-size:11px;margin-bottom:19px;line-height:1.7}.chore-list{display:grid;gap:9px}.chore-card{display:flex;align-items:center;gap:11px;text-align:left;border:1px solid #e4e4d9;background:#fffdf8;border-radius:12px;padding:12px 11px}.chore-card:hover{background:#f4f5ea;border-color:#bdcbb9}.chore-icon{display:grid;place-items:center;width:42px;height:44px;font-size:24px;border-radius:10px;background:#e9eee4;flex-shrink:0}.chore-card:nth-child(2) .chore-icon{background:#f5e9dc}.chore-card:nth-child(3) .chore-icon{background:#ece7f1}.chore-card:nth-child(4) .chore-icon{background:#f4edce}.chore-info{flex:1}.chore-info strong{display:block;font-size:12px;font-weight:600}.chore-info small{font-size:9px;color:#909482}.reward{font-size:10px;color:#967836;background:#f8efcf;padding:3px 6px;border-radius:5px;white-space:nowrap;font-weight:600}.chore-arrow{font-size:14px;color:#a4ad97}.deadline{margin-top:23px}.deadline-label{display:flex;justify-content:space-between;font-size:10px;color:#848d78;margin-bottom:8px}.deadline-label strong{color:#587352;font-size:10px;font-weight:600;font-variant-numeric:tabular-nums}.progress-track{height:5px;background:#e9ecdf;border-radius:5px;overflow:hidden}.progress-fill{height:100%;background:#9dac87;transition:width .1s linear;border-radius:inherit}.primary{width:100%;padding:12px 18px;background:var(--green);border-radius:9px;color:#fffdf1;font-size:12px;font-weight:600;letter-spacing:.1px}.primary:hover{background:#2e513c}.meal-button{margin-top:16px;display:flex;justify-content:space-between}.quiet-note{font-size:9px;text-align:center;color:#979d8b;margin-top:9px}.bottom-row{display:flex;align-items:center;gap:20px;margin:25px 0}.tip{display:flex;gap:13px;align-items:center;flex:1}.tip>span{color:#a9926b;font-size:27px}.tip strong{display:block;font-size:10px;margin-bottom:3px;font-weight:600}.tip p>span{color:#929582;font-size:10px}.text-button{background:none;color:#8d9582;font-size:10px;padding:8px 0}.text-button:hover{color:var(--green);text-decoration:underline}footer{border-top:1px solid var(--line);padding:20px 0 24px;color:#a0a493;font-size:9px;display:flex;justify-content:space-between}.heart{font-size:15px;color:#aa8d86;margin-left:5px}.shop-item{padding:13px 0;border-bottom:1px solid var(--line)}.shop-item:first-of-type{padding-top:0}.shop-top{display:flex;gap:10px;align-items:center}.shop-icon{font-size:31px;background:var(--peach);width:50px;height:52px;display:grid;place-items:center;border-radius:11px}.shop-top strong{font-size:12px}.shop-top p{font-size:9px;color:var(--muted);margin-top:2px}.shop-bottom{display:flex;align-items:center;justify-content:space-between;margin-top:10px;font-size:10px}.small-button{padding:7px 12px;border:1px solid #d8dfce;background:#eef1e7;border-radius:7px;font-size:10px}.inventory-count{color:#959b8b;font-size:9px}.school-art{font-size:58px;background:var(--lavender);border-radius:15px;text-align:center;padding:20px;margin-bottom:15px}.meal-options{display:flex;gap:7px;margin:14px 0}.food-option{background:#f5f2e7;border:1px solid transparent;border-radius:10px;padding:10px 5px;flex:1;font-size:10px}.food-option span{display:block;font-size:28px;margin-bottom:5px}.food-option.selected{border-color:#97a38a;background:#edf1e3}.attention{background:#f3e7d6;border-radius:10px;padding:12px;margin:13px 0}.attention.safe{background:#e8efdf}.attention.warning{background:#f7dec8}.attention strong{display:block;font-size:12px}.attention p{font-size:10px;color:#858572;margin-top:3px}.distractions{display:grid;gap:6px;margin:12px 0}.distraction{border:1px solid #dfe3d5;background:#f6f7ef;border-radius:8px;padding:8px 10px;display:flex;justify-content:space-between;font-size:11px}.distraction span:last-child{color:#7e8c71;font-size:10px}.feet-button{touch-action:none;user-select:none;-webkit-user-select:none;font-size:15px;padding:18px 10px;margin-top:8px;background:#a294b9;color:white;box-shadow:0 4px 0 #82749c}.feet-button:hover{background:#9382ac}.feet-button.held{background:#547b58;box-shadow:0 2px 0 #34583b}.challenge-meter{margin-top:16px}.challenge-meter .progress-track{height:8px}.challenge-meter .progress-fill{background:#a997c1}.challenge-label{display:flex;justify-content:space-between;font-size:10px;margin-bottom:7px}.room.feet-up #feet-up{opacity:1}.room.feet-up #legs-down{opacity:0}.room.distracted #grandma-head{transform:translateX(6px) rotate(15deg);transform-origin:603px 220px}.room.distracted #grandma-eyes{transform:translateX(5px)}#grandma-head{transition:transform .3s}.room.won #kid{animation:happy .6s ease 2}.room.juice #grandma{opacity:.2}.room.pop #balloon-art{opacity:0}.room.pet #dog{animation:happy .4s ease infinite}.pause-cover{position:absolute;inset:0;background:#f6f4edea;z-index:3;display:flex;align-items:center;justify-content:center;flex-direction:column;backdrop-filter:blur(4px)}[hidden]{display:none!important}.pause-cover>span{font-size:45px}.pause-cover h2{font:30px var(--serif);margin:14px 0 8px}.pause-cover p{color:var(--muted)}.pause-cover button{width:auto;margin-top:20px}.result{padding:24px 0;text-align:center}.result-icon{font-size:59px;display:block;margin-bottom:12px}.result h2{font:30px var(--serif);margin-bottom:10px}.result p{font-size:12px;color:var(--muted);line-height:1.8}.result .primary{margin-top:24px}.bonus{display:inline-block;margin-top:16px;background:#f5e8b5;padding:6px 14px;border-radius:20px;color:#8b723e;font-size:12px}.stats{display:flex;justify-content:space-around;margin-top:20px;background:#f1f2e9;border-radius:10px;padding:13px}.stats strong{display:block;font-size:24px}.stats small{font-size:9px;color:var(--muted)}dialog{padding:0;border:1px solid #dbdece;border-radius:20px;width:min(520px,calc(100% - 28px));color:var(--ink);background:#fffdf5;box-shadow:0 30px 100px #27352940;max-height:90dvh}dialog::backdrop{background:#34423655;backdrop-filter:blur(5px)}#modal-content{padding:28px}.modal-heading{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:10px}.modal-heading h2{font:27px var(--serif)}.modal-heading button{background:#eff0e6;border-radius:50%;width:31px;height:31px;font-size:20px;flex-shrink:0}.modal-copy{font-size:12px;line-height:1.8;color:var(--muted);margin-bottom:18px}.task-timer{font-size:10px;color:#a17e52;float:right}.task-progress{font-size:11px;color:var(--muted);margin:12px 0}.task-area{background:#f2f1e6;border:1px solid #e2e3d7;border-radius:15px;padding:22px;text-align:center;min-height:200px}.plate{position:relative;width:190px;height:190px;border:10px solid #c7d7d2;box-shadow:inset 0 0 0 5px #ecf1e8,0 4px 0 #dadfd1;border-radius:50%;background:#fbfcf3;margin:auto;touch-action:none}.dirt{position:absolute;background:#b89665;color:transparent;width:28px;height:26px;border-radius:40% 60% 35% 55%;padding:0;touch-action:none}.dirt.clean{opacity:0;pointer-events:none}.plate.scrubbing{cursor:crosshair}.task-controls{display:flex;gap:10px;margin-top:18px}.task-controls button{flex:1}.secondary{padding:11px 14px;border:1px solid #d9dfcc;border-radius:9px;background:#edf0e5;font-size:12px}.task-piece{font-size:53px;display:block;margin:5px 0 10px}.sorting-label{display:block;font-size:16px;margin-bottom:15px}.task-input{width:100%;font-size:26px;text-align:center;border:1px solid #b7c4aa;border-radius:10px;padding:12px;background:#fffef8;color:var(--ink);margin-top:18px}.math-question{font:40px var(--serif);margin:20px 0}.tidy-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:13px}.tidy-grid button{font-size:32px;background:#e8e1d1;min-height:64px;border-radius:10px}.tidy-grid button.cleaned{opacity:.2}.feedback{color:#967452;font-size:11px;min-height:20px;margin-top:12px}.help-list{padding-left:22px;font-size:13px}.help-list li{padding:7px}.help-list strong{display:block}.help-list span{font-size:12px;color:var(--muted)}.code-input{font-family:monospace;font-size:11px;width:100%;padding:12px;margin:10px 0;border:1px solid #d4dac8;border-radius:8px;color:var(--ink);background:#f5f5ee}.journal-list{max-height:290px;overflow:auto;font-size:10px;background:#eff1e9;padding:14px;border-radius:9px;white-space:pre-wrap;word-break:break-word}#toast{position:fixed;bottom:26px;left:50%;transform:translate(-50%,20px);background:#344e3e;color:#fffdec;border-radius:12px;padding:12px 22px;box-shadow:0 5px 20px #24392b25;z-index:20;font-size:12px;opacity:0;pointer-events:none;transition:.2s;max-width:calc(100% - 30px);text-align:center}#toast.show{opacity:1;transform:translate(-50%,0)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@keyframes happy{50%{transform:translateY(-5px)}}@media(min-width:1500px){main{padding-top:48px}.welcome{margin-bottom:38px}.game-layout{grid-template-columns:minmax(0,1fr) 370px}.tablet{padding:25px}.chore-card{padding:15px 12px}.panel-description{margin-bottom:23px}}@media(max-width:1050px){.topbar{padding:0 24px}.tagline{display:none}main{padding:28px 24px 0}.game-layout{grid-template-columns:minmax(0,1fr) 305px;gap:18px}.tablet{padding:17px}.room-speech{font-size:10px;padding:8px 10px;top:13px}.objective{padding:18px;gap:10px}.objective strong{font-size:17px}.objective-icon{font-size:23px;padding:8px}.goal-time{font-size:27px;padding:7px 11px}.level-strip{gap:12px;padding:14px}.level-strip strong{font-size:9px}.level-dot{width:6px;height:6px}}@media(max-width:760px){.topbar{height:82px;padding:0 19px;gap:10px}.brand{font-size:18px}.brand-icon{font-size:28px;padding:9px 6px}.save-status{font-size:10px;margin:0}.top-actions{gap:7px}.icon-button{width:31px;height:31px}main{padding:25px 17px 0}.welcome{margin-bottom:23px;gap:10px}h1{font-size:29px;letter-spacing:-1px}.eyebrow{font-size:8px;letter-spacing:1.3px}.welcome p{font-size:10px;margin-top:7px}.wallet{padding:9px 10px;gap:7px;border-radius:11px}.wallet small{font-size:6px;letter-spacing:.7px}.wallet strong{font-size:20px}.wallet strong>span:last-child{font-size:10px}.coin{width:27px;height:27px;font-size:16px}.game-layout{grid-template-columns:1fr}.room-header{height:45px;padding:0 16px;font-size:10px}.room-speech{font-size:10px;top:13px}.objective{padding:16px}.objective strong{font-size:18px}.objective small{font-size:7px}.objective div>span{font-size:10px}.level-strip{padding:13px 17px}.level-strip strong{font-size:10px}.tablet{padding:21px}.chore-list{grid-template-columns:1fr 1fr}.chore-card{padding:11px 8px;gap:7px;flex-wrap:wrap}.chore-icon{width:33px;height:36px;font-size:20px}.chore-info strong{font-size:11px}.chore-info small{font-size:8px}.chore-arrow{display:none}.reward{margin-left:auto}.deadline{margin-top:19px}.panel-description{margin-bottom:15px}.tablet-heading{padding-bottom:12px}.tabs{margin-bottom:17px}.bottom-row{flex-wrap:wrap;gap:8px 20px;margin:23px 0 18px}.tip{flex-basis:100%;margin-bottom:5px}.tip p>span{font-size:10px}footer{font-size:8px;gap:20px;padding-top:16px}footer span{max-width:60%}.scene-badge{font-size:8px;bottom:10px;left:10px}.distractions{grid-template-columns:1fr}.room-card{border-radius:16px}.school-art{padding:12px}.meal-options{max-width:400px}.feet-button{padding:20px}#modal-content{padding:23px}}@media(max-width:390px){h1{font-size:25px}.wallet .coin{display:none}.objective strong{font-size:16px}.level-strip{gap:9px}.room-speech{font-size:9px}.save-status{max-width:92px}.objective-icon{display:none}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
/* Stable scene bounds, also while the 3D renderer initializes.
   The room never sizes itself from the canvas: fixed aspect ratio + absolute canvas
   prevents the ResizeObserver feedback loop. */
.room{aspect-ratio:900/520;width:100%;isolation:isolate;background:linear-gradient(#eee8d6 67%,#dcc3a6 67%);box-shadow:inset 0 -1px 0 #e2dccb}
.room-art{width:100%;height:100%}
.scene-canvas{position:absolute;inset:0;width:100%!important;height:100%!important;display:block;pointer-events:none;z-index:0}
.room.scene-3d-ready .room-art{visibility:hidden}
.room-speech{z-index:2}.scene-badge{z-index:2;backdrop-filter:blur(3px);color:#5d6a58}.pause-cover{z-index:4}
.scene-label{position:absolute;z-index:2;top:14px;right:14px;font-size:8px;font-weight:700;letter-spacing:1.6px;color:#6f7a68;background:#fbf8efb8;border:1px solid #e6e0cf;border-radius:20px;padding:3px 8px;pointer-events:none;opacity:0;transition:opacity .4s}
.room.scene-3d-ready .scene-label{opacity:.85}
/* Small typographic polish */
h1,.panel-title,.objective strong{text-wrap:balance}body{-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
.goal-time,#coins,.stats strong{font-variant-numeric:tabular-nums}
.chore-card{transition:background .15s,border-color .15s,transform .15s}.chore-card:not(:disabled):hover{transform:translateY(-1px)}
@media(max-width:760px){.scene-label{top:9px;right:9px;font-size:7px}}
@media(max-width:390px){.scene-label{display:none}}
/* Give each mobile chore its full card width for readable text. */
@media(max-width:760px){.chore-card{display:grid;grid-template-columns:1fr auto;gap:9px;padding:12px;align-content:start}.chore-card .chore-icon{grid-column:1;grid-row:1}.chore-card .reward{grid-column:2;grid-row:1;margin-left:0;align-self:center;justify-self:end}.chore-card .chore-info{grid-column:1/-1;grid-row:2;min-width:0}.chore-card .chore-info strong{font-size:12px;line-height:1.4}.chore-card .chore-info small{display:block;font-size:9px;line-height:1.5;margin-top:4px}}
