@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Baloo+2:wght@700;800&display=swap');
*{box-sizing:border-box;margin:0;padding:0;}
:root{
  --bg:#0f1117;--sidebar:#151822;--surface:#1a1f2e;--surface2:#222840;
  --border:#252d45;--border2:#2e3a5a;
  --text:#dde3f5;--muted:#5a6890;--muted2:#8892b0;
  --accent:#4a9eff;--green:#3dd68c;--red:#f07070;--amber:#f0b84a;--purple:#a78bfa;
  --r:6px;
}
html,body{height:100%;font-family:'Inter',sans-serif;background:var(--bg);color:var(--text);font-size:13px;}
.app{display:grid;grid-template-columns:220px 1fr 280px;grid-template-rows:48px 1fr;height:100vh;}
.topbar{grid-column:1/-1;background:#0d1018;border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 20px;gap:16px;}
.tb-brand{font-size:16px;font-weight:700;color:#fff;letter-spacing:-.02em;}
.tb-brand span{color:var(--accent);}
.tb-right{margin-left:auto;display:flex;align-items:center;gap:14px;font-size:12px;}
.live{display:flex;align-items:center;gap:6px;color:var(--green);font-size:11px;font-weight:600;}
.live-dot{width:7px;height:7px;border-radius:50%;background:var(--green);animation:bl 1.5s infinite;}
@keyframes bl{0%,100%{opacity:1}50%{opacity:.2}}
.sidebar{background:var(--sidebar);border-right:1px solid var(--border);padding:14px 10px;display:flex;flex-direction:column;gap:3px;overflow-y:auto;}
.sb-section{font-size:9px;font-weight:700;color:var(--muted);letter-spacing:.1em;text-transform:uppercase;padding:10px 8px 5px;margin-top:4px;}
.nav-item{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:var(--r);cursor:pointer;color:var(--muted2);font-size:13px;font-weight:500;transition:all .15s;}
.nav-item:hover{background:var(--surface);color:var(--text);}
.nav-item.active{background:var(--accent);color:#fff;font-weight:600;}
.nav-item svg{width:15px;height:15px;flex-shrink:0;}
.main{background:var(--bg);overflow-y:auto;}
.page{display:none;flex-direction:column;height:100%;}
.page.active{display:flex;}
.page-header{padding:20px 24px 14px;border-bottom:1px solid var(--border);}
.page-title{font-size:20px;font-weight:700;color:#fff;display:flex;align-items:center;gap:10px;}
.page-title svg{width:20px;height:20px;color:var(--accent);}
.page-sub{font-size:12px;color:var(--muted2);margin-top:4px;}
.page-body{padding:20px 24px;flex:1;display:flex;flex-direction:column;gap:16px;overflow-y:auto;}
.right-panel{background:var(--sidebar);border-left:1px solid var(--border);overflow-y:auto;display:flex;flex-direction:column;}
.rp-section{padding:16px;border-bottom:1px solid var(--border);}
.rp-title{font-size:13px;font-weight:700;color:#fff;display:flex;align-items:center;gap:8px;margin-bottom:12px;}
.rp-title svg{width:15px;height:15px;color:var(--accent);}
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);overflow:hidden;}
.ch{padding:12px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;}
.ct{font-size:11px;font-weight:600;color:var(--muted2);letter-spacing:.05em;text-transform:uppercase;}
.cb{padding:14px 16px;}
.g{display:grid;gap:12px;}
.g3{grid-template-columns:1fr 1fr 1fr;}
.g4{grid-template-columns:repeat(4,1fr);}
.kpi{padding:14px 16px;border-left:3px solid;}
.kv{font-size:24px;font-weight:700;color:#fff;line-height:1;letter-spacing:-.02em;margin:5px 0 4px;}
.kl{font-size:10px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;}
.kc{font-size:11px;font-weight:500;}
.up{color:var(--green);}
.dn{color:var(--red);}
.tbl{width:100%;border-collapse:collapse;}
.tbl th{font-size:10px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;padding:7px 12px;text-align:left;border-bottom:1px solid var(--border);}
.tbl td{padding:8px 12px;border-bottom:1px solid #1a2035;font-size:12px;}
.tbl tr:last-child td{border-bottom:none;}
.tbl tr:hover td{background:var(--surface2);}
.wh-hero{background:linear-gradient(135deg,#162040,#1a2d60);border:1px solid #1e3070;border-radius:var(--r);padding:20px 24px;display:flex;align-items:center;gap:24px;}
.wh-temp{font-size:54px;font-weight:700;color:#fff;line-height:1;}
.wh-city{font-size:14px;font-weight:600;color:#90b0ff;margin-bottom:3px;}
.wh-desc{font-size:12px;color:#5070a0;}
.wh-icon{font-size:56px;margin-left:auto;}
.ws-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;}
.ws-c{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:10px;text-align:center;}
.ws-v{font-size:14px;font-weight:700;color:var(--accent);}
.ws-l{font-size:9px;color:var(--muted);margin-top:2px;text-transform:uppercase;letter-spacing:.05em;}
.fc-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;}
.fc-c{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:12px;text-align:center;}
.fc-day{font-size:9px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;}
.fc-i{font-size:24px;margin:6px 0;}
.fc-t{font-size:16px;font-weight:700;color:#fff;}
.fc-sub{font-size:10px;color:var(--muted);margin-top:2px;}
.cal-dows{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:2px;}
.cal-dow{text-align:center;font-size:9px;font-weight:600;color:var(--muted);padding:3px 0;}
.cal-grid-mini{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;}
.cday{aspect-ratio:1;border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:500;cursor:pointer;color:var(--muted2);transition:all .12s;position:relative;border:1px solid transparent;}
.cday:hover{background:var(--surface2);color:var(--text);}
.cday.today{background:var(--accent);color:#fff;font-weight:700;}
.cday.other{opacity:.2;}
.inp{background:var(--bg);border:1px solid var(--border2);border-radius:5px;padding:7px 10px;color:var(--text);font-size:12px;font-family:'Inter',sans-serif;outline:none;width:100%;}
.inp:focus{border-color:var(--accent);}
.inp::placeholder{color:var(--muted);}
.btn{padding:7px 14px;border-radius:var(--r);border:none;font-size:12px;font-family:'Inter',sans-serif;font-weight:600;cursor:pointer;transition:all .15s;}
.btn-acc{background:var(--accent);color:#fff;}
.btn-ghost{background:transparent;border:1px solid var(--border2);color:var(--muted2);cursor:pointer;font-size:12px;font-family:'Inter',sans-serif;border-radius:var(--r);padding:4px 10px;}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent);}
.fp-row{display:flex;gap:5px;flex-wrap:wrap;}
.fp{padding:4px 11px;border-radius:4px;border:1px solid var(--border2);background:transparent;color:var(--muted2);font-size:11px;font-family:'Inter',sans-serif;font-weight:500;cursor:pointer;transition:all .15s;}
.fp.active{background:var(--accent);border-color:var(--accent);color:#fff;}
.td-row{display:flex;align-items:center;gap:10px;padding:8px 12px;border-bottom:1px solid #181e30;transition:background .1s;}
.td-row:hover{background:var(--surface2);}
.td-row:last-child{border-bottom:none;}
.td-cb{width:16px;height:16px;border-radius:3px;border:1.5px solid var(--border2);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:10px;transition:all .15s;}
.td-cb.chk{background:var(--green);border-color:var(--green);color:#fff;}
.td-t{flex:1;font-size:12px;font-weight:500;}
.td-row.done .td-t{text-decoration:line-through;color:var(--muted);}
.cat-tag{font-size:9px;padding:2px 6px;border-radius:3px;font-weight:600;text-transform:uppercase;}
.prog-row{display:flex;align-items:center;gap:10px;margin-bottom:8px;}
.prog-l{font-size:11px;color:var(--muted2);width:80px;flex-shrink:0;}
.prog-tr{flex:1;height:4px;background:var(--border);border-radius:2px;}
.prog-f{height:100%;border-radius:2px;transition:width .3s;}
.prog-v{font-size:11px;font-weight:600;width:20px;text-align:right;}
.dtbar{display:flex;align-items:center;gap:5px;padding:10px 14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);flex-wrap:wrap;}
.tlbl{font-size:9px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.07em;}
.csw{width:20px;height:20px;border-radius:3px;cursor:pointer;border:2px solid transparent;transition:transform .12s;}
.csw:hover,.csw.active{transform:scale(1.25);border-color:#fff;}
.szb{width:26px;height:26px;border-radius:4px;border:1px solid var(--border);background:transparent;display:flex;align-items:center;justify-content:center;cursor:pointer;}
.szb.active{border-color:var(--accent);}
.szd{border-radius:50%;background:var(--text);}
.tsep{width:1px;height:20px;background:var(--border);margin:0 3px;}
.tbtn{padding:5px 10px;border-radius:4px;border:1px solid var(--border);background:transparent;color:var(--muted2);font-size:11px;font-family:'Inter',sans-serif;cursor:pointer;}
.tbtn:hover{border-color:var(--accent);color:var(--accent);}
.tbtn.active{background:var(--accent);border-color:var(--accent);color:#fff;}
canvas#dc{display:block;width:100%;cursor:crosshair;touch-action:none;background:#fff;border-radius:var(--r);}
.etf-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:14px;cursor:pointer;transition:all .15s;border-top:3px solid;}
.etf-card:hover,.etf-card.sel{background:var(--surface2);border-color:var(--accent);}
.etf-ticker{font-size:9px;font-weight:700;color:var(--muted);letter-spacing:.08em;text-transform:uppercase;}
.etf-name{font-size:12px;font-weight:600;margin:3px 0;}
.etf-price{font-size:20px;font-weight:700;letter-spacing:-.02em;margin:3px 0;}
.etf-chg{font-size:11px;font-weight:600;}
.pbtn{padding:4px 10px;border-radius:4px;border:1px solid var(--border);background:transparent;color:var(--muted2);font-size:11px;font-family:'Inter',sans-serif;font-weight:500;cursor:pointer;transition:all .15s;}
.pbtn.active{background:var(--accent);border-color:var(--accent);color:#fff;}
.notice-display{background:var(--surface2);border:1px solid var(--border2);border-radius:var(--r);padding:14px;font-size:13px;color:var(--text);min-height:60px;margin-bottom:10px;line-height:1.6;}
.notice-empty{color:var(--muted);font-style:italic;}
.spinner{display:inline-block;width:14px;height:14px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite;vertical-align:middle;}
@keyframes spin{to{transform:rotate(360deg)}}

/* ===== GOOGLE CALENDAR OAuth ===== */
.gcal-signin{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;padding:60px 24px;text-align:center;}
.gcal-signin-icon{font-size:64px;}
.gcal-signin-title{font-size:20px;font-weight:700;color:#fff;}
.gcal-signin-sub{font-size:13px;color:var(--muted2);max-width:400px;line-height:1.6;}
.gcal-btn{display:flex;align-items:center;gap:12px;padding:12px 24px;background:#fff;border:none;border-radius:8px;cursor:pointer;font-size:14px;font-weight:600;color:#1a1a2e;transition:all .15s;}
.gcal-btn:hover{background:#f0f0f0;transform:translateY(-1px);}
.gcal-btn img{width:20px;height:20px;}
.gcal-config{background:var(--surface2);border:1px solid var(--border2);border-radius:var(--r);padding:16px;max-width:500px;text-align:left;}
.gcal-config-title{font-size:12px;font-weight:600;color:var(--muted2);margin-bottom:10px;text-transform:uppercase;letter-spacing:.05em;}
.gcal-config-step{display:flex;gap:10px;margin-bottom:8px;font-size:12px;color:var(--muted2);line-height:1.5;}
.gcal-config-num{width:20px;height:20px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;flex-shrink:0;margin-top:1px;}
.gcal-inp-row{display:flex;gap:8px;margin-top:12px;}
.gcal-events{display:flex;flex-direction:column;gap:8px;}
.gcal-event{background:var(--surface2);border-radius:var(--r);padding:10px 14px;border-left:3px solid var(--accent);display:flex;align-items:flex-start;gap:12px;}
.gcal-event-time{font-size:10px;color:var(--muted2);font-weight:600;white-space:nowrap;margin-top:2px;}
.gcal-event-title{font-size:13px;font-weight:600;color:var(--text);}
.gcal-event-cal{font-size:10px;color:var(--muted);margin-top:2px;}
.gcal-month-nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;}
.gcal-month-title{font-size:15px;font-weight:700;color:#fff;}
.gcal-week-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--border);border-radius:var(--r);overflow:hidden;}
.gcal-week-header{background:var(--surface2);text-align:center;font-size:10px;font-weight:600;color:var(--muted);padding:6px 0;text-transform:uppercase;letter-spacing:.05em;}
.gcal-day-cell{background:var(--surface);min-height:80px;padding:6px;position:relative;}
.gcal-day-cell:hover{background:var(--surface2);}
.gcal-day-num{font-size:12px;font-weight:600;color:var(--muted2);margin-bottom:4px;}
.gcal-day-cell.today .gcal-day-num{color:#fff;background:var(--accent);width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;}
.gcal-day-cell.other-month .gcal-day-num{opacity:.3;}
.gcal-day-event{font-size:9px;padding:1px 4px;border-radius:2px;margin-bottom:2px;cursor:pointer;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:500;}

/* ===== KIDS ===== */
.kids-bg{background:linear-gradient(160deg,#1a1040 0%,#0d1f3a 50%,#0f2a1a 100%);min-height:100%;padding:24px;display:flex;flex-direction:column;gap:20px;}
.kids-title{font-family:'Baloo 2',cursive;font-size:32px;font-weight:800;background:linear-gradient(90deg,#ff6b9d,#ffd93d,#6bcb77,#4d96ff,#c77dff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;margin-bottom:4px;}
.kids-date{font-size:13px;color:var(--muted2);font-weight:500;}
.kids-progress-bar{background:var(--surface);border:1px solid var(--border);border-radius:30px;padding:12px 20px;display:flex;align-items:center;gap:16px;}
.kids-pb-track{flex:1;height:12px;background:#1a2035;border-radius:6px;overflow:hidden;}
.kids-pb-fill{height:100%;border-radius:6px;background:linear-gradient(90deg,#ff6b9d,#ffd93d,#6bcb77);transition:width .5s ease;}
.kids-pb-label{font-size:13px;font-weight:700;color:#fff;white-space:nowrap;}
.kids-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}
.kids-task{background:var(--surface);border:2px solid var(--border);border-radius:16px;padding:20px 16px;display:flex;flex-direction:column;align-items:center;gap:10px;cursor:pointer;transition:all .3s;user-select:none;position:relative;overflow:hidden;}
.kids-task:hover{transform:translateY(-3px);}
.kids-task-icon{font-size:52px;line-height:1;transition:transform .3s;}
.kids-task-name{font-family:'Baloo 2',cursive;font-size:15px;font-weight:700;color:var(--text);text-align:center;line-height:1.2;}
.kids-checkbox{width:32px;height:32px;border-radius:50%;border:2px solid var(--border2);display:flex;align-items:center;justify-content:center;font-size:18px;transition:all .2s;background:var(--bg);}

/* disappear animation */
@keyframes taskDone{
  0%{transform:scale(1);opacity:1;}
  40%{transform:scale(1.15);}
  100%{transform:scale(0);opacity:0;max-height:0;padding:0;margin:0;border-width:0;}
}
.kids-task.disappearing{animation:taskDone .6s ease forwards;pointer-events:none;}

/* confetti overlay */
#confettiCanvas{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;display:none;}

/* congrats overlay */
.kids-congrats-overlay{position:fixed;inset:0;background:rgba(0,0,0,.7);display:flex;align-items:center;justify-content:center;z-index:9998;display:none;}
.kids-congrats-overlay.show{display:flex;}
.kids-congrats-box{background:linear-gradient(135deg,#1a1040,#0d1f3a);border:2px solid #a78bfa;border-radius:24px;padding:40px 50px;text-align:center;animation:pop .4s ease;}
@keyframes pop{0%{transform:scale(.5);opacity:0}70%{transform:scale(1.05)}100%{transform:scale(1);opacity:1}}
.kids-congrats-title{font-family:'Baloo 2',cursive;font-size:36px;font-weight:800;background:linear-gradient(90deg,#ff6b9d,#ffd93d,#6bcb77,#4d96ff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;margin-bottom:8px;}
.kids-congrats-sub{font-size:16px;color:#ffd93d;margin-bottom:24px;}
.kids-congrats-btn{padding:12px 32px;background:linear-gradient(135deg,#ff6b9d,#a78bfa);border:none;border-radius:30px;color:#fff;font-family:'Baloo 2',cursive;font-size:16px;font-weight:700;cursor:pointer;}
.kids-reset-btn{text-align:center;}
.kids-reset-btn button{padding:10px 24px;background:transparent;border:2px solid var(--border2);border-radius:30px;color:var(--muted2);font-size:13px;font-family:'Baloo 2',cursive;font-weight:700;cursor:pointer;transition:all .15s;}
.kids-reset-btn button:hover{border-color:var(--accent);color:var(--accent);}
.kids-done-row{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px 16px;}
.kids-done-title{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px;}
.kids-done-chips{display:flex;flex-wrap:wrap;gap:6px;}
.kids-done-chip{display:flex;align-items:center;gap:5px;padding:4px 10px;border-radius:20px;font-size:12px;font-weight:600;background:var(--surface2);border:1px solid var(--border2);color:var(--green);}