.routine-shell{width:min(calc(100% - 24px),1260px);margin:28px auto 0}.routine-hero{display:flex;justify-content:space-between;align-items:end;gap:20px;margin-bottom:18px}.routine-hero h1{font-size:clamp(2.2rem,6vw,4.4rem);margin:.12em 0}.routine-hero p{color:var(--muted);margin:0}.routine-actions{display:flex;gap:8px;flex-wrap:wrap}.mini-btn,.danger-btn{color:var(--muted);background:rgba(255,255,255,.05);border:1px solid var(--line);border-radius:12px;padding:9px 11px;cursor:pointer}.routine-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(340px,.9fr);gap:16px}.town-card,.habit-card,.summary-card{border:1px solid var(--line);background:rgba(23,26,35,.94);border-radius:24px;box-shadow:var(--shadow);overflow:hidden}.town-card{grid-column:1/2}.sky{height:360px;position:relative;overflow:hidden;background:linear-gradient(#4f8aa1,#e4a66c 75%,#425843);transition:background .5s ease}.cloud{position:absolute;font-size:3rem;opacity:.7;filter:grayscale(1) brightness(2)}.cloud-a{left:12%;top:15%;animation:float 12s ease-in-out infinite}.cloud-b{right:16%;top:28%;animation:float 15s ease-in-out infinite reverse}@keyframes float{50%{transform:translateX(25px)}}.town-scene{position:absolute;inset:0;display:flex;justify-content:center;align-items:flex-end;padding:30px;font-size:clamp(3rem,10vw,7rem);letter-spacing:-.15em;text-shadow:0 8px 18px rgba(0,0,0,.35);transition:transform .5s ease}.town-scene.level-up{animation:townPop .65s ease}@keyframes townPop{40%{transform:scale(1.08);filter:brightness(1.3)}}.town-info{padding:18px}.town-info>div:first-child{display:flex;justify-content:space-between;gap:12px}.town-info span{color:var(--muted)}.town-info strong{font-size:1.35rem}.xp-track{height:12px;background:#0e1117;border-radius:999px;overflow:hidden;margin:13px 0 7px}.xp-track i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--accent-3),#b9e979);transition:width .45s ease}.town-info p{display:flex;justify-content:space-between;margin:0;font-size:.78rem}.habit-card{grid-column:1/2;padding:20px}.habit-head{display:flex;justify-content:space-between;align-items:center;gap:14px}.habit-head h2{margin-bottom:2px}.habit-head p{color:var(--muted);font-size:.84rem;margin:0}.habit-list{display:grid;gap:10px;margin-top:18px}.habit-item{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:12px;border:1px solid var(--line);border-radius:16px;padding:12px;background:rgba(255,255,255,.035);transition:transform .15s ease,opacity .15s ease}.habit-item.done{opacity:.72;background:rgba(112,199,183,.08);border-color:rgba(112,199,183,.28)}.complete-btn{width:48px;height:48px;border-radius:15px;border:1px solid var(--line);background:#11151c;color:#fff;font-size:1.45rem;cursor:pointer}.habit-item.done .complete-btn{background:var(--accent-3);color:#10201c}.habit-main strong{display:block}.habit-main span{color:var(--muted);font-size:.75rem}.habit-menu{display:flex;gap:5px}.icon-btn{border:0;background:transparent;color:var(--muted);cursor:pointer;padding:7px;border-radius:9px}.icon-btn:hover{background:rgba(255,255,255,.08);color:#fff}.empty-state{text-align:center;padding:42px 10px;color:var(--muted)}.empty-state>div{font-size:3.5rem}.summary-card{grid-column:2/3;grid-row:1/3;padding:20px}.week-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin:18px 0}.day-cell{text-align:center}.day-cell span{display:block;color:var(--muted);font-size:.66rem}.day-cell i{display:grid;place-items:center;height:38px;margin-top:5px;border-radius:10px;background:rgba(255,255,255,.04);font-style:normal;font-size:.72rem}.day-cell.today i{outline:2px solid var(--accent)}.day-cell i.full{background:rgba(112,199,183,.24);color:#cbfff6}.summary-stats{display:grid;gap:8px}.summary-stats div{display:flex;justify-content:space-between;border-bottom:1px solid var(--line);padding:11px 0}.summary-stats span{color:var(--muted)}.tip-box{margin-top:20px;border-radius:15px;padding:14px;background:rgba(240,163,74,.09);border:1px solid rgba(240,163,74,.2)}.tip-box p{color:var(--muted);font-size:.86rem;margin:6px 0 0}.routine-dialog{width:min(500px,calc(100% - 28px));color:var(--text);background:#1c202b;border:1px solid var(--line);border-radius:22px;padding:24px;box-shadow:0 30px 80px #000}.routine-dialog::backdrop{background:rgba(0,0,0,.72);backdrop-filter:blur(5px)}.routine-dialog form{position:relative}.dialog-close{position:absolute;right:-10px;top:-13px;width:35px;height:35px;border-radius:50%;border:1px solid var(--line);background:#282d39;color:#fff;cursor:pointer}.dialog-buttons{display:grid;gap:10px}.file-label{cursor:pointer}.setting-row{display:flex;justify-content:space-between;gap:14px;align-items:center;border-bottom:1px solid var(--line);padding:10px 0 18px}.setting-row p{margin:3px 0;color:var(--muted);font-size:.8rem}.switch input{display:none}.switch span{display:block;width:48px;height:28px;border-radius:999px;background:#0e1117;border:1px solid var(--line);position:relative;cursor:pointer}.switch span::after{content:"";position:absolute;width:20px;height:20px;left:3px;top:3px;border-radius:50%;background:#888;transition:.2s}.switch input:checked+span{background:rgba(112,199,183,.35)}.switch input:checked+span::after{left:23px;background:var(--accent-3)}.danger-btn{width:100%;color:#ffb4b4;margin-top:18px}.xp-toast{position:fixed;z-index:80;left:50%;bottom:28px;transform:translate(-50%,30px);opacity:0;background:#1b302a;color:#cbfff6;border:1px solid rgba(112,199,183,.4);border-radius:999px;padding:10px 18px;font-weight:900;pointer-events:none}.xp-toast.show{animation:xpToast 1s ease}@keyframes xpToast{20%,70%{opacity:1;transform:translate(-50%,0)}100%{opacity:0;transform:translate(-50%,-18px)}}
@media(max-width:900px){.routine-grid{grid-template-columns:1fr}.town-card,.habit-card,.summary-card{grid-column:1;grid-row:auto}.sky{height:300px}.summary-card{order:3}}
@media(max-width:600px){.routine-hero{display:block}.routine-actions{margin-top:14px}.habit-card,.summary-card{padding:14px}.habit-head{align-items:flex-start}.habit-item{grid-template-columns:auto 1fr}.habit-menu{grid-column:2}.sky{height:240px}.week-grid{gap:3px}.day-cell i{height:32px}}
