Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"/> | |
| <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"/> | |
| <title>MoneyQuest — Financial Literacy for Gen Alpha</title> | |
| <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700;800;900&display=swap" rel="stylesheet"/> | |
| <style> | |
| :root{ | |
| --sky:#6ECCF5;--sun:#FFD93D;--mint:#4ECDC4;--coral:#FF6B6B;--purple:#A855F7; | |
| --lime:#95E67A;--pink:#FF85C2;--navy:#0F1E3C;--cream:#FFFEF5; | |
| --card:#FFFFFF;--border:rgba(15,30,60,.1); | |
| --sh:0 4px 20px rgba(15,30,60,.1);--sh2:0 2px 10px rgba(15,30,60,.07); | |
| --r:18px;--r2:14px;--r3:10px; | |
| --font:'Nunito',sans-serif; | |
| } | |
| *{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent} | |
| html,body{font-family:var(--font);background:var(--cream);color:var(--navy);min-height:100vh;overflow-x:hidden;-webkit-font-smoothing:antialiased} | |
| /* ── ANIMATIONS ── */ | |
| @keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}} | |
| @keyframes pop{0%{transform:scale(.8);opacity:0}70%{transform:scale(1.08)}100%{transform:scale(1);opacity:1}} | |
| @keyframes slideUp{from{transform:translateY(24px);opacity:0}to{transform:translateY(0);opacity:1}} | |
| @keyframes spin{to{transform:rotate(360deg)}} | |
| @keyframes confetti{0%{transform:translateY(-10px) rotate(0deg);opacity:1}100%{transform:translateY(90px) rotate(360deg);opacity:0}} | |
| @keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}} | |
| @keyframes bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}} | |
| @keyframes fadeIn{from{opacity:0}to{opacity:1}} | |
| @keyframes typingBounce{0%,80%,100%{transform:translateY(0)}40%{transform:translateY(-6px)}} | |
| /* ── SCREENS ── */ | |
| .screen{display:none;min-height:100vh;flex-direction:column} | |
| .screen.active{display:flex} | |
| /* ══ WELCOME ══ */ | |
| #screen-welcome{ | |
| background:linear-gradient(160deg,#7C3AED 0%,#2563EB 50%,#0EA5E9 100%); | |
| align-items:center;justify-content:center;text-align:center; | |
| padding:40px 24px;position:relative;overflow:hidden; | |
| } | |
| .wb{position:absolute;border-radius:50%;filter:blur(80px);opacity:.25;pointer-events:none;animation:float 6s ease-in-out infinite} | |
| .wb1{width:320px;height:320px;background:#FFD93D;top:-120px;right:-80px} | |
| .wb2{width:240px;height:240px;background:#4ECDC4;bottom:-80px;left:-60px;animation-delay:3s} | |
| .wl-wrap{position:relative;z-index:2;width:100%;max-width:340px} | |
| .logo-emoji{font-size:80px;display:block;animation:float 3s ease-in-out infinite;filter:drop-shadow(0 8px 20px rgba(0,0,0,.25));margin-bottom:8px} | |
| .logo-name{font-size:40px;font-weight:900;color:#fff;letter-spacing:-1px} | |
| .logo-tag{font-size:15px;font-weight:700;color:rgba(255,255,255,.8);margin-top:4px;margin-bottom:28px} | |
| .wl-pills{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-bottom:32px} | |
| .wpill{background:rgba(255,255,255,.18);border:1.5px solid rgba(255,255,255,.3);border-radius:50px;padding:8px 16px;font-size:13px;font-weight:800;color:#fff} | |
| .wl-btn{display:block;width:100%;padding:17px;border-radius:50px;border:none;font-size:17px;font-weight:900;cursor:pointer;transition:transform .15s,box-shadow .15s;margin-bottom:12px;letter-spacing:-.2px} | |
| .wl-btn:active{transform:scale(.97)} | |
| .wl-btn-main{background:#fff;color:#7C3AED;box-shadow:0 6px 24px rgba(0,0,0,.25)} | |
| .wl-btn-sec{background:rgba(255,255,255,.15);color:#fff;border:2px solid rgba(255,255,255,.35)} | |
| .wl-btn-par{background:#0F1E3C;color:#fff;font-size:15px;padding:14px} | |
| .wl-powered{margin-top:20px;font-size:11px;font-weight:700;color:rgba(255,255,255,.6);letter-spacing:.5px} | |
| .wl-powered span{color:#FFD93D} | |
| /* ══ ONBOARD ══ */ | |
| #screen-onboard{background:var(--cream);padding:0} | |
| .ob-inner{padding:20px 22px 32px;max-width:480px;margin:0 auto;width:100%} | |
| .ob-back{background:none;border:none;font-size:14px;font-weight:800;color:rgba(15,30,60,.5);cursor:pointer;padding:4px 0;margin-bottom:14px;display:flex;align-items:center;gap:5px} | |
| .dots-row{display:flex;gap:6px;justify-content:center;margin-bottom:24px} | |
| .dot{width:8px;height:8px;border-radius:50%;background:rgba(15,30,60,.15);transition:all .3s} | |
| .dot.done{background:var(--purple);width:22px;border-radius:4px} | |
| .dot.active{background:var(--purple);transform:scale(1.3)} | |
| .ob-hero{text-align:center;margin-bottom:24px} | |
| .ob-big-emoji{font-size:64px;display:block;animation:float 3s ease-in-out infinite;margin-bottom:10px} | |
| .ob-title{font-size:26px;font-weight:900;color:var(--navy);line-height:1.2} | |
| .ob-sub{font-size:14px;color:rgba(15,30,60,.55);margin-top:7px;line-height:1.5} | |
| .step{display:none} | |
| .step.active{display:block;animation:slideUp .35s ease} | |
| .av-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0} | |
| .av-opt{padding:12px 6px;background:var(--card);border:2.5px solid transparent;border-radius:var(--r2);text-align:center;cursor:pointer;transition:all .2s;box-shadow:var(--sh2)} | |
| .av-opt:active{transform:scale(.94)} | |
| .av-opt.sel{border-color:var(--purple);background:rgba(168,85,247,.08)} | |
| .av-em{font-size:30px;display:block;margin-bottom:3px} | |
| .av-nm{font-size:10px;font-weight:800;color:var(--navy)} | |
| .name-in{width:100%;padding:15px 20px;background:var(--card);border:2.5px solid var(--border);border-radius:50px;font-size:18px;font-weight:700;color:var(--navy);margin:12px 0;text-align:center;font-family:var(--font)} | |
| .name-in:focus{outline:none;border-color:var(--purple)} | |
| .age-big{font-size:62px;font-weight:900;color:var(--purple);text-align:center;line-height:1} | |
| .age-sub{text-align:center;font-size:13px;font-weight:700;color:rgba(15,30,60,.45);margin-top:3px;margin-bottom:14px} | |
| input[type=range]{width:100%;-webkit-appearance:none;height:8px;border-radius:4px;background:rgba(168,85,247,.2);outline:none;margin:10px 0} | |
| input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:30px;height:30px;border-radius:50%;background:var(--purple);cursor:pointer;box-shadow:0 3px 10px rgba(168,85,247,.4);border:3px solid #fff} | |
| .goal-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:14px 0} | |
| .gc{padding:15px 10px;background:var(--card);border:2.5px solid transparent;border-radius:var(--r2);text-align:center;cursor:pointer;transition:all .2s;box-shadow:var(--sh2)} | |
| .gc:active{transform:scale(.95)} | |
| .gc.sel{border-color:var(--sun);background:rgba(255,217,61,.08)} | |
| .gc-icon{font-size:34px;display:block;margin-bottom:5px} | |
| .gc-name{font-size:13px;font-weight:800;color:var(--navy)} | |
| .gc-desc{font-size:10px;color:rgba(15,30,60,.5);margin-top:2px} | |
| .cash-hero{text-align:center;margin:16px 0} | |
| .cash-em{font-size:56px;display:block;animation:bounce 2s infinite;margin-bottom:8px} | |
| .cash-num{font-size:52px;font-weight:900;color:var(--mint);line-height:1} | |
| .cash-lbl{font-size:13px;color:rgba(15,30,60,.5);font-weight:600;margin-top:4px} | |
| .fact-box{background:rgba(78,205,196,.1);border:2px solid rgba(78,205,196,.3);border-radius:var(--r2);padding:14px;margin:14px 0;font-size:13px;font-weight:700;color:var(--navy);line-height:1.6} | |
| .btn-cta{width:100%;padding:17px;border:none;border-radius:50px;font-size:17px;font-weight:900;cursor:pointer;margin-top:14px;font-family:var(--font);transition:transform .15s,box-shadow .15s} | |
| .btn-cta:active{transform:scale(.97)} | |
| .btn-purple{background:var(--purple);color:#fff;box-shadow:0 5px 18px rgba(168,85,247,.4)} | |
| .btn-mint{background:var(--mint);color:#fff;box-shadow:0 5px 18px rgba(78,205,196,.4)} | |
| /* ══ APP HEADER ══ */ | |
| .app-hdr{background:linear-gradient(135deg,var(--purple) 0%,var(--sky) 100%);padding:20px 18px 52px;position:relative;overflow:hidden} | |
| .app-hdr::after{content:'';position:absolute;bottom:-1px;left:0;right:0;height:38px;background:var(--cream);border-radius:38px 38px 0 0} | |
| .hdr-top{display:flex;align-items:center;justify-content:space-between} | |
| .hdr-greet{color:rgba(255,255,255,.75);font-size:12px;font-weight:700} | |
| .hdr-name{color:#fff;font-size:20px;font-weight:900} | |
| .hdr-av{width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-size:24px;border:2px solid rgba(255,255,255,.35);cursor:pointer;flex-shrink:0} | |
| .nw-card{background:rgba(255,255,255,.16);backdrop-filter:blur(8px);border:1.5px solid rgba(255,255,255,.22);border-radius:var(--r);padding:18px;margin-top:14px;position:relative;z-index:1} | |
| .nw-lbl{font-size:11px;font-weight:700;color:rgba(255,255,255,.65);letter-spacing:.5px;text-transform:uppercase} | |
| .nw-amt{font-size:42px;font-weight:900;color:#fff;line-height:1;margin:3px 0} | |
| .nw-ch{font-size:13px;font-weight:700} | |
| .nw-ch.pos{color:#95E67A}.nw-ch.neg{color:#FF6B6B} | |
| .xp-wrap{margin-top:12px} | |
| .xp-row{display:flex;justify-content:space-between;font-size:11px;font-weight:700;color:rgba(255,255,255,.65);margin-bottom:5px} | |
| .xp-bar{height:8px;background:rgba(255,255,255,.18);border-radius:4px;overflow:hidden} | |
| .xp-fill{height:100%;background:var(--sun);border-radius:4px;transition:width .8s ease} | |
| /* ══ APP BODY ══ */ | |
| .app-body{padding:0 16px 100px} | |
| .stats3{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin:14px 0} | |
| .sc{background:var(--card);border-radius:var(--r2);padding:13px 10px;text-align:center;box-shadow:var(--sh2)} | |
| .sc-icon{font-size:22px;display:block;margin-bottom:3px} | |
| .sc-val{font-size:16px;font-weight:900} | |
| .sc-lbl{font-size:10px;font-weight:700;color:rgba(15,30,60,.4);text-transform:uppercase;letter-spacing:.3px;margin-top:2px} | |
| .sec-row{display:flex;align-items:center;justify-content:space-between;margin:18px 0 10px} | |
| .sec-title{font-size:17px;font-weight:900} | |
| .sec-link{font-size:13px;font-weight:800;color:var(--purple);background:rgba(168,85,247,.1);padding:4px 12px;border-radius:50px;border:none;cursor:pointer;font-family:var(--font)} | |
| .sec-link:active{transform:scale(.95)} | |
| .goal-banner{background:var(--card);border-radius:var(--r);padding:15px;display:flex;align-items:center;gap:12px;box-shadow:var(--sh);cursor:pointer;border:2px solid transparent;transition:border-color .2s;margin-bottom:10px} | |
| .gb-icon{font-size:38px;flex-shrink:0} | |
| .gb-body{flex:1;min-width:0} | |
| .gb-name{font-size:15px;font-weight:800} | |
| .gb-sub{font-size:11px;color:rgba(15,30,60,.5);margin-top:2px} | |
| .gb-bar{height:9px;background:rgba(15,30,60,.08);border-radius:5px;overflow:hidden;margin-top:7px} | |
| .gb-fill{height:100%;border-radius:5px;background:linear-gradient(90deg,var(--sun),var(--coral));transition:width 1s ease} | |
| .gb-pct{font-size:11px;font-weight:800;color:var(--coral);margin-top:3px} | |
| .act-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:0 0 14px} | |
| .act{background:var(--card);border-radius:var(--r2);padding:15px 12px;text-align:center;cursor:pointer;box-shadow:var(--sh2);border:2px solid transparent;transition:transform .15s,border-color .2s;-webkit-tap-highlight-color:transparent} | |
| .act:active{transform:scale(.95)} | |
| .act-s{border-color:rgba(78,205,196,.4);background:rgba(78,205,196,.06)} | |
| .act-i{border-color:rgba(168,85,247,.4);background:rgba(168,85,247,.06)} | |
| .act-g{border-color:rgba(255,217,61,.4);background:rgba(255,217,61,.06)} | |
| .act-a{border-color:rgba(255,107,107,.4);background:rgba(255,107,107,.06)} | |
| .act-ic{font-size:28px;display:block;margin-bottom:5px} | |
| .act-nm{font-size:13px;font-weight:800} | |
| .act-sb{font-size:10px;color:rgba(15,30,60,.5);margin-top:2px} | |
| .port-grid{display:flex;flex-direction:column;gap:9px} | |
| .asset-card{background:var(--card);border-radius:var(--r2);padding:13px 15px;display:flex;align-items:center;gap:12px;box-shadow:var(--sh2);cursor:pointer;border:2px solid transparent;transition:transform .15s,border-color .2s} | |
| .asset-card:active{transform:scale(.98)} | |
| .asset-ic{font-size:30px;width:46px;height:46px;display:flex;align-items:center;justify-content:center;background:rgba(15,30,60,.04);border-radius:12px;flex-shrink:0} | |
| .asset-inf{flex:1;min-width:0} | |
| .asset-nm{font-size:14px;font-weight:800} | |
| .asset-ds{font-size:11px;color:rgba(15,30,60,.5);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} | |
| .asset-rt{text-align:right} | |
| .asset-val{font-size:16px;font-weight:900} | |
| .asset-ch{font-size:11px;font-weight:700;margin-top:2px} | |
| .chg-p{color:var(--mint)}.chg-n{color:var(--coral)} | |
| .ai-card{background:linear-gradient(135deg,var(--purple),var(--sky));border-radius:var(--r);padding:15px;margin:0 0 14px;cursor:pointer;box-shadow:0 6px 22px rgba(168,85,247,.28);transition:transform .15s} | |
| .ai-card:active{transform:scale(.98)} | |
| .ai-top{display:flex;align-items:center;gap:10px;margin-bottom:10px} | |
| .ai-av{width:40px;height:40px;background:rgba(255,255,255,.2);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:20px;border:2px solid rgba(255,255,255,.35);animation:pulse 3s infinite} | |
| .ai-nm{font-size:13px;font-weight:800;color:#fff} | |
| .ai-st{font-size:11px;color:rgba(255,255,255,.65)} | |
| .ai-bubble{background:rgba(255,255,255,.15);border-radius:12px 12px 12px 4px;padding:11px 13px;font-size:13px;font-weight:600;color:#fff;line-height:1.55} | |
| .typing-dots{display:flex;gap:4px;align-items:center} | |
| .td{width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.65)} | |
| .td:nth-child(1){animation:typingBounce .9s infinite 0s} | |
| .td:nth-child(2){animation:typingBounce .9s infinite .15s} | |
| .td:nth-child(3){animation:typingBounce .9s infinite .3s} | |
| .act-list{display:flex;flex-direction:column;gap:8px} | |
| .act-item{background:var(--card);border-radius:var(--r3);padding:11px 13px;display:flex;align-items:center;gap:10px;box-shadow:var(--sh2)} | |
| .ai-ico{font-size:22px;width:38px;height:38px;background:rgba(15,30,60,.04);border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0} | |
| .ai-text{font-size:13px;font-weight:700} | |
| .ai-time{font-size:10px;color:rgba(15,30,60,.4);margin-top:2px} | |
| .ai-amt{font-size:13px;font-weight:800;margin-left:auto;flex-shrink:0} | |
| .empty-state{background:var(--card);border-radius:var(--r2);padding:20px;text-align:center;color:rgba(15,30,60,.4);font-weight:600;font-size:13px;border:2px dashed rgba(15,30,60,.1)} | |
| /* ══ LEARN ══ */ | |
| #screen-learn{background:var(--cream);padding-bottom:90px} | |
| .learn-hdr{background:linear-gradient(135deg,#F59E0B 0%,#EF4444 100%);padding:20px 18px 52px;position:relative} | |
| .learn-hdr::after{content:'';position:absolute;bottom:-1px;left:0;right:0;height:38px;background:var(--cream);border-radius:38px 38px 0 0} | |
| .screen-body{padding:0 16px} | |
| .lesson-grid{display:flex;flex-direction:column;gap:10px;margin:14px 0} | |
| .lcard{background:var(--card);border-radius:var(--r);padding:15px;display:flex;align-items:center;gap:13px;box-shadow:var(--sh);cursor:pointer;transition:transform .15s,border-color .2s;border:2px solid transparent} | |
| .lcard:active{transform:scale(.98)} | |
| .lcard.done{border-color:rgba(78,205,196,.4);background:rgba(78,205,196,.04)} | |
| .lcard.locked{opacity:.5;cursor:not-allowed} | |
| .lbadge{width:50px;height:50px;border-radius:var(--r2);display:flex;align-items:center;justify-content:center;font-size:26px;flex-shrink:0;background:rgba(168,85,247,.1)} | |
| .lcard.done .lbadge{background:rgba(78,205,196,.15)} | |
| .linfo{flex:1} | |
| .ltitle{font-size:14px;font-weight:800} | |
| .lsub{font-size:11px;color:rgba(15,30,60,.5);margin-top:2px} | |
| .lxp{font-size:11px;font-weight:800;color:var(--purple);background:rgba(168,85,247,.1);padding:2px 8px;border-radius:20px;display:inline-block;margin-top:4px} | |
| .lstatus{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0;background:rgba(15,30,60,.05)} | |
| /* ══ GOALS ══ */ | |
| #screen-goals{background:var(--cream);padding-bottom:90px} | |
| .goals-hdr{background:linear-gradient(135deg,var(--mint) 0%,var(--sky) 100%);padding:20px 18px 52px;position:relative} | |
| .goals-hdr::after{content:'';position:absolute;bottom:-1px;left:0;right:0;height:38px;background:var(--cream);border-radius:38px 38px 0 0} | |
| .gcard{background:var(--card);border-radius:var(--r);padding:18px;box-shadow:var(--sh);margin:0 0 12px;animation:pop .4s ease} | |
| .gcard-top{display:flex;align-items:center;gap:12px;margin-bottom:14px} | |
| .gcard-icon{font-size:44px} | |
| .gcard-title{font-size:19px;font-weight:900} | |
| .gcard-desc{font-size:12px;color:rgba(15,30,60,.5);margin-top:2px} | |
| .gamts{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin:12px 0} | |
| .gamt{text-align:center;padding:11px 6px;background:rgba(15,30,60,.04);border-radius:var(--r3)} | |
| .gamt-val{font-size:17px;font-weight:900} | |
| .gamt-lbl{font-size:10px;font-weight:700;color:rgba(15,30,60,.4);text-transform:uppercase;margin-top:2px} | |
| .gbig-bar{height:14px;background:rgba(15,30,60,.08);border-radius:7px;overflow:hidden;margin:6px 0 4px} | |
| .gbig-fill{height:100%;border-radius:7px;background:linear-gradient(90deg,var(--mint),var(--sky));transition:width 1.2s ease} | |
| .g-pct{font-size:12px;font-weight:800;color:var(--mint);margin-bottom:10px} | |
| .contrib-row{display:flex;gap:8px;margin-top:12px} | |
| .contrib-in{flex:1;padding:13px 15px;background:rgba(15,30,60,.04);border:2px solid transparent;border-radius:50px;font-size:16px;font-weight:700;color:var(--navy);font-family:var(--font)} | |
| .contrib-in:focus{outline:none;border-color:var(--mint)} | |
| .btn-add{padding:13px 20px;background:var(--mint);border:none;border-radius:50px;font-size:15px;font-weight:800;color:#fff;cursor:pointer;font-family:var(--font);transition:transform .15s} | |
| .btn-add:active{transform:scale(.95)} | |
| .ai-plan-btn{width:100%;padding:14px;background:linear-gradient(135deg,var(--purple),var(--coral));border:none;border-radius:var(--r2);font-size:14px;font-weight:800;color:#fff;cursor:pointer;margin-top:10px;display:flex;align-items:center;justify-content:center;gap:7px;font-family:var(--font);transition:transform .15s} | |
| .ai-plan-btn:active{transform:scale(.97)} | |
| .add-goal-btn{width:100%;padding:17px;background:transparent;border:2.5px dashed rgba(15,30,60,.2);border-radius:var(--r);font-size:16px;font-weight:800;color:rgba(15,30,60,.4);cursor:pointer;margin-top:4px;font-family:var(--font);transition:all .2s} | |
| .add-goal-btn:hover,.add-goal-btn:active{border-color:var(--purple);color:var(--purple)} | |
| /* ══ AI SCREEN ══ */ | |
| #screen-ai{background:var(--cream);padding-bottom:90px} | |
| .ai-hdr{background:linear-gradient(135deg,var(--coral) 0%,var(--purple) 100%);padding:20px 18px 52px;position:relative} | |
| .ai-hdr::after{content:'';position:absolute;bottom:-1px;left:0;right:0;height:38px;background:var(--cream);border-radius:38px 38px 0 0} | |
| .chat-body{padding:0 16px} | |
| .chat-msgs{display:flex;flex-direction:column;gap:11px;margin:14px 0} | |
| .msg{max-width:86%;animation:pop .3s ease} | |
| .msg-ai{align-self:flex-start} | |
| .msg-user{align-self:flex-end} | |
| .msg-hdr{display:flex;align-items:center;gap:6px;margin-bottom:5px} | |
| .msg-hdr-av{font-size:16px} | |
| .msg-hdr-nm{font-size:11px;font-weight:800;color:rgba(15,30,60,.4)} | |
| .bubble{padding:12px 15px;border-radius:18px;font-size:14px;font-weight:600;line-height:1.6} | |
| .bubble-ai{background:var(--card);color:var(--navy);border-radius:18px 18px 18px 4px;box-shadow:var(--sh2)} | |
| .bubble-user{background:var(--purple);color:#fff;border-radius:18px 18px 4px 18px} | |
| .quick-qs{display:flex;flex-wrap:wrap;gap:7px;margin:10px 0} | |
| .qq{padding:8px 13px;background:var(--card);border:2px solid var(--border);border-radius:50px;font-size:12px;font-weight:700;cursor:pointer;transition:all .2s;box-shadow:var(--sh2);font-family:var(--font)} | |
| .qq:active{background:rgba(168,85,247,.1);border-color:var(--purple);color:var(--purple)} | |
| .chat-bar{position:fixed;bottom:70px;left:0;right:0;padding:9px 14px;background:rgba(255,254,245,.97);backdrop-filter:blur(10px);border-top:1px solid var(--border);display:flex;gap:9px;z-index:40} | |
| .chat-in{flex:1;padding:12px 16px;background:var(--card);border:2px solid var(--border);border-radius:50px;font-size:14px;font-weight:600;color:var(--navy);box-shadow:var(--sh2);transition:border-color .2s;font-family:var(--font)} | |
| .chat-in:focus{outline:none;border-color:var(--purple)} | |
| .chat-send{width:44px;height:44px;background:var(--purple);border:none;border-radius:50%;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 12px rgba(168,85,247,.4);flex-shrink:0;transition:transform .15s} | |
| .chat-send:active{transform:scale(.93)} | |
| /* ══ PARENT ══ */ | |
| #screen-parent{background:#080F20;padding-bottom:40px;color:#fff;min-height:100vh} | |
| .par-hdr{padding:20px 18px 24px;background:linear-gradient(135deg,#0F1E3C,#1a3060)} | |
| .par-back{background:none;border:none;color:rgba(255,255,255,.6);font-size:14px;font-weight:700;cursor:pointer;padding:0 0 12px;display:flex;align-items:center;gap:5px;font-family:var(--font)} | |
| .par-title{font-size:24px;font-weight:900;color:#fff} | |
| .par-sub{font-size:13px;color:rgba(255,255,255,.45);margin-top:3px} | |
| .par-body{padding:16px} | |
| .pcard{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:var(--r);padding:18px;margin-bottom:13px} | |
| .pcard-title{font-size:11px;font-weight:800;color:rgba(255,255,255,.4);text-transform:uppercase;letter-spacing:.5px;margin-bottom:13px} | |
| .par-ai-card{background:linear-gradient(135deg,rgba(168,85,247,.18),rgba(110,204,245,.1));border:1px solid rgba(168,85,247,.28);border-radius:var(--r);padding:16px;margin-bottom:13px} | |
| .pai-hdr{display:flex;align-items:center;gap:10px;margin-bottom:10px} | |
| .pai-title{font-size:15px;font-weight:800;color:#fff} | |
| .pai-sub{font-size:12px;color:rgba(255,255,255,.45);margin-top:2px} | |
| .pai-body{font-size:13px;color:rgba(255,255,255,.8);line-height:1.7} | |
| .lc-bars{display:flex;align-items:flex-end;gap:7px;height:80px;margin-bottom:22px} | |
| .lc-bar{flex:1;border-radius:4px 4px 0 0;background:linear-gradient(to top,var(--purple),var(--sky));min-height:4px;position:relative;transition:height .8s ease} | |
| .lc-bar-lbl{position:absolute;bottom:-18px;left:50%;transform:translateX(-50%);font-size:9px;color:rgba(255,255,255,.35);white-space:nowrap} | |
| .ins-row{display:flex;align-items:center;gap:11px;padding:10px 0;border-bottom:1px solid rgba(255,255,255,.06)} | |
| .ins-row:last-child{border-bottom:none} | |
| .ins-ic{font-size:20px;width:36px;height:36px;background:rgba(255,255,255,.07);border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0} | |
| .ins-txt{flex:1;font-size:13px;color:rgba(255,255,255,.75);line-height:1.45} | |
| .ins-badge{font-size:10px;font-weight:800;padding:3px 9px;border-radius:50px;white-space:nowrap} | |
| .bg-good{background:rgba(78,205,196,.2);color:var(--mint)} | |
| .bg-warn{background:rgba(255,217,61,.2);color:var(--sun)} | |
| .bg-info{background:rgba(168,85,247,.2);color:#C084FC} | |
| .dt-item{display:flex;gap:11px;padding:9px 0;position:relative} | |
| .dt-item::before{content:'';position:absolute;left:14px;top:30px;bottom:-9px;width:2px;background:rgba(255,255,255,.08)} | |
| .dt-item:last-child::before{display:none} | |
| .dt-dot{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;flex-shrink:0;border:2px solid transparent} | |
| .dt-save{background:rgba(78,205,196,.18);border-color:var(--mint)} | |
| .dt-invest{background:rgba(168,85,247,.18);border-color:var(--purple)} | |
| .dt-goal{background:rgba(255,217,61,.18);border-color:var(--sun)} | |
| .dt-text{font-size:13px;color:rgba(255,255,255,.7);line-height:1.5;padding-top:3px} | |
| .dt-time{font-size:10px;color:rgba(255,255,255,.3);margin-top:2px} | |
| /* ══ BOTTOM NAV ══ */ | |
| .bnav{position:fixed;bottom:0;left:0;right:0;z-index:50;background:rgba(255,254,245,.97);backdrop-filter:blur(12px);border-top:1.5px solid var(--border);display:grid;grid-template-columns:repeat(4,1fr);padding:7px 0 max(8px,env(safe-area-inset-bottom))} | |
| .nb{display:flex;flex-direction:column;align-items:center;gap:2px;background:none;border:none;cursor:pointer;padding:5px 8px;border-radius:var(--r3);transition:all .2s;font-family:var(--font)} | |
| .nb:active{transform:scale(.93)} | |
| .nb.on .nb-ic{background:var(--purple);box-shadow:0 3px 10px rgba(168,85,247,.3)} | |
| .nb.on .nb-lbl{color:var(--purple)} | |
| .nb-ic{width:36px;height:36px;border-radius:11px;background:transparent;display:flex;align-items:center;justify-content:center;font-size:19px;transition:all .2s} | |
| .nb-lbl{font-size:10px;font-weight:800;color:rgba(15,30,60,.38);transition:color .2s;letter-spacing:.2px} | |
| /* ══ MODALS ══ */ | |
| .mbg{position:fixed;inset:0;background:rgba(15,30,60,.45);backdrop-filter:blur(4px);z-index:100;display:none;align-items:flex-end;justify-content:center} | |
| .mbg.open{display:flex;animation:fadeIn .2s ease} | |
| .msheet{background:var(--cream);border-radius:26px 26px 0 0;width:100%;max-width:500px;max-height:88vh;overflow-y:auto;padding:8px 20px 36px} | |
| .mhandle{width:36px;height:4px;background:rgba(15,30,60,.14);border-radius:2px;margin:12px auto 18px} | |
| .m-emoji{font-size:60px;text-align:center;display:block;margin:0 auto 14px;animation:float 3s infinite} | |
| .m-title{font-size:22px;font-weight:900;margin-bottom:5px} | |
| .m-sub{font-size:14px;color:rgba(15,30,60,.5);margin-bottom:18px;line-height:1.55} | |
| .amt-row{display:flex;gap:8px;margin:10px 0;flex-wrap:wrap} | |
| .amt-btn{flex:1;min-width:60px;padding:12px 8px;background:rgba(15,30,60,.05);border:2.5px solid transparent;border-radius:var(--r2);font-size:14px;font-weight:800;cursor:pointer;text-align:center;transition:all .2s;font-family:var(--font)} | |
| .amt-btn:active{transform:scale(.95)} | |
| .amt-btn.sel{background:rgba(168,85,247,.1);border-color:var(--purple);color:var(--purple)} | |
| .btn-confirm{width:100%;padding:16px;background:var(--purple);border:none;border-radius:50px;font-size:17px;font-weight:800;color:#fff;cursor:pointer;margin-top:14px;box-shadow:0 5px 18px rgba(168,85,247,.38);transition:transform .15s,opacity .2s;font-family:var(--font)} | |
| .btn-confirm:active{transform:scale(.97)} | |
| .btn-confirm:disabled{opacity:.4;cursor:not-allowed;transform:none} | |
| .btn-cancel{width:100%;padding:13px;background:none;border:none;font-size:15px;font-weight:700;color:rgba(15,30,60,.38);cursor:pointer;margin-top:6px;font-family:var(--font)} | |
| .invest-opt{background:var(--card);border-radius:var(--r2);padding:13px 15px;display:flex;align-items:center;gap:11px;box-shadow:var(--sh2);margin-bottom:9px;cursor:pointer;border:2.5px solid transparent;transition:all .2s} | |
| .invest-opt:active{transform:scale(.98)} | |
| .invest-opt.sel{border-color:var(--purple);background:rgba(168,85,247,.06)} | |
| .io-ic{font-size:28px;width:44px;height:44px;background:rgba(15,30,60,.04);border-radius:11px;display:flex;align-items:center;justify-content:center;flex-shrink:0} | |
| .io-inf{flex:1} | |
| .io-nm{font-size:14px;font-weight:800} | |
| .io-ds{font-size:11px;color:rgba(15,30,60,.5);margin-top:2px} | |
| .io-risk{font-size:11px;font-weight:700;margin-left:auto;white-space:nowrap} | |
| .rb-chart{display:flex;height:110px;gap:6px;align-items:flex-end;margin:14px 0} | |
| .rb-bar{flex:1;border-radius:5px 5px 0 0;position:relative;min-height:6px;transition:height .8s ease} | |
| .rb-val{position:absolute;top:-18px;left:50%;transform:translateX(-50%);font-size:9px;font-weight:800;white-space:nowrap} | |
| .rb-lbl{position:absolute;bottom:-18px;left:50%;transform:translateX(-50%);font-size:9px;font-weight:700;color:rgba(15,30,60,.45);white-space:nowrap} | |
| .rb-suggest{background:rgba(168,85,247,.08);border:2px solid rgba(168,85,247,.2);border-radius:var(--r2);padding:13px;margin:26px 0 10px} | |
| .rb-suggest-title{font-size:13px;font-weight:800;color:var(--purple);margin-bottom:5px} | |
| .rb-suggest-text{font-size:13px;line-height:1.6} | |
| .spin{display:flex;align-items:center;gap:8px;padding:16px 0} | |
| .spinner{width:28px;height:28px;border:3px solid rgba(168,85,247,.2);border-top-color:var(--purple);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0} | |
| .spin-txt{font-size:13px;font-weight:600;color:rgba(15,30,60,.5)} | |
| /* ══ CONFETTI ══ */ | |
| #confetti{position:fixed;top:0;left:0;right:0;pointer-events:none;z-index:999;overflow:hidden;height:100vh} | |
| .cp{position:absolute;border-radius:2px} | |
| </style> | |
| </head> | |
| <body> | |
| <div id="confetti"></div> | |
| <!-- ══ WELCOME ══ --> | |
| <div class="screen active" id="screen-welcome"> | |
| <div class="wb wb1"></div> | |
| <div class="wb wb2"></div> | |
| <div class="wl-wrap"> | |
| <span class="logo-emoji">🚀</span> | |
| <div class="logo-name">MoneyQuest</div> | |
| <div class="logo-tag">Your money adventure starts here! 💰</div> | |
| <div class="wl-pills"> | |
| <span class="wpill">🎮 Fun & Addictive</span> | |
| <span class="wpill">🤖 K2 AI Mentor</span> | |
| <span class="wpill">📈 Real Investing</span> | |
| </div> | |
| <button class="wl-btn wl-btn-main" onclick="showScreen('screen-onboard')">🎮 Start My Quest!</button> | |
| <button class="wl-btn wl-btn-sec" onclick="continuePlay()">📱 Continue Playing</button> | |
| <button class="wl-btn wl-btn-par" onclick="showScreen('screen-parent');loadParentDash()">👨👩👧 Parent Dashboard</button> | |
| <div class="wl-powered">Powered by <span>K2-Think-V2</span> · MBZUAI · IFM</div> | |
| </div> | |
| </div> | |
| <!-- ══ ONBOARD ══ --> | |
| <div class="screen" id="screen-onboard"> | |
| <div class="ob-inner"> | |
| <button class="ob-back" onclick="showScreen('screen-welcome')">← Back</button> | |
| <div class="dots-row"> | |
| <div class="dot active" id="d0"></div> | |
| <div class="dot" id="d1"></div> | |
| <div class="dot" id="d2"></div> | |
| <div class="dot" id="d3"></div> | |
| </div> | |
| <!-- Step 0 --> | |
| <div class="step active" id="s0"> | |
| <div class="ob-hero"> | |
| <span class="ob-big-emoji" id="sel-av-em">🦊</span> | |
| <div class="ob-title">Pick your hero!</div> | |
| <div class="ob-sub">This is your money champion 🦸</div> | |
| </div> | |
| <div class="av-grid"> | |
| <div class="av-opt sel" data-em="🦊" onclick="pickAv(this)"><span class="av-em">🦊</span><span class="av-nm">Fox</span></div> | |
| <div class="av-opt" data-em="🐼" onclick="pickAv(this)"><span class="av-em">🐼</span><span class="av-nm">Panda</span></div> | |
| <div class="av-opt" data-em="🦁" onclick="pickAv(this)"><span class="av-em">🦁</span><span class="av-nm">Lion</span></div> | |
| <div class="av-opt" data-em="🐉" onclick="pickAv(this)"><span class="av-em">🐉</span><span class="av-nm">Dragon</span></div> | |
| <div class="av-opt" data-em="🦋" onclick="pickAv(this)"><span class="av-em">🦋</span><span class="av-nm">Butterfly</span></div> | |
| <div class="av-opt" data-em="🐬" onclick="pickAv(this)"><span class="av-em">🐬</span><span class="av-nm">Dolphin</span></div> | |
| <div class="av-opt" data-em="🦄" onclick="pickAv(this)"><span class="av-em">🦄</span><span class="av-nm">Unicorn</span></div> | |
| <div class="av-opt" data-em="🐧" onclick="pickAv(this)"><span class="av-em">🐧</span><span class="av-nm">Penguin</span></div> | |
| </div> | |
| <button class="btn-cta btn-purple" onclick="goStep(1)">Next →</button> | |
| </div> | |
| <!-- Step 1 --> | |
| <div class="step" id="s1"> | |
| <div class="ob-hero"> | |
| <span class="ob-big-emoji">👋</span> | |
| <div class="ob-title">What's your name?</div> | |
| <div class="ob-sub">Tell us about you!</div> | |
| </div> | |
| <input class="name-in" id="nm-input" type="text" placeholder="Your first name..." maxlength="20" autocomplete="off"/> | |
| <div style="margin-top:20px"> | |
| <div class="ob-title" style="font-size:20px;text-align:center;margin-bottom:4px">How old are you?</div> | |
| <div class="age-big" id="age-disp">10</div> | |
| <div class="age-sub">years old</div> | |
| <input type="range" id="age-range" min="7" max="15" value="10" oninput="updAge(this.value)"/> | |
| </div> | |
| <button class="btn-cta btn-purple" onclick="goStep(2)">Next →</button> | |
| </div> | |
| <!-- Step 2 --> | |
| <div class="step" id="s2"> | |
| <div class="ob-hero"> | |
| <span class="ob-big-emoji">🎯</span> | |
| <div class="ob-title">What's your goal?</div> | |
| <div class="ob-sub">What are you saving for first?</div> | |
| </div> | |
| <div class="goal-grid"> | |
| <div class="gc sel" data-goal="gaming" onclick="pickGoal(this)"><span class="gc-icon">🎮</span><div class="gc-name">Gaming Setup</div><div class="gc-desc">Save for a console</div></div> | |
| <div class="gc" data-goal="sneakers" onclick="pickGoal(this)"><span class="gc-icon">👟</span><div class="gc-name">Cool Sneakers</div><div class="gc-desc">Get that dream pair</div></div> | |
| <div class="gc" data-goal="trip" onclick="pickGoal(this)"><span class="gc-icon">✈️</span><div class="gc-name">Dream Trip</div><div class="gc-desc">Travel adventure</div></div> | |
| <div class="gc" data-goal="college" onclick="pickGoal(this)"><span class="gc-icon">🎓</span><div class="gc-name">College Fund</div><div class="gc-desc">Invest in future</div></div> | |
| <div class="gc" data-goal="business" onclick="pickGoal(this)"><span class="gc-icon">🏪</span><div class="gc-name">My Business</div><div class="gc-desc">Start something!</div></div> | |
| <div class="gc" data-goal="custom" onclick="pickGoal(this)"><span class="gc-icon">⭐</span><div class="gc-name">My Dream</div><div class="gc-desc">I'll decide!</div></div> | |
| </div> | |
| <button class="btn-cta btn-purple" onclick="goStep(3)">Next →</button> | |
| </div> | |
| <!-- Step 3 --> | |
| <div class="step" id="s3"> | |
| <div class="ob-hero"> | |
| <span class="ob-big-emoji">🎉</span> | |
| <div class="ob-title">You're getting a gift!</div> | |
| <div class="ob-sub">This is your virtual money to learn with!</div> | |
| </div> | |
| <div class="cash-hero"> | |
| <span class="cash-em">💰</span> | |
| <div class="cash-num">$500</div> | |
| <div class="cash-lbl">Your starting balance</div> | |
| </div> | |
| <div class="fact-box">💡 <strong>Did you know?</strong> Warren Buffett started investing at age 11! You already have a head start. Let's grow this $500 together! 🚀</div> | |
| <button class="btn-cta btn-mint" onclick="finishOnboard()">🚀 Start My Quest!</button> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ APP ══ --> | |
| <div class="screen" id="screen-app"> | |
| <div class="app-hdr"> | |
| <div class="hdr-top"> | |
| <div> | |
| <div class="hdr-greet" id="hdr-greet">Good morning! 🌅</div> | |
| <div class="hdr-name" id="hdr-name">MoneyQuest</div> | |
| </div> | |
| <div class="hdr-av" id="hdr-av" onclick="navTo('screen-learn','nb-learn');renderLessons()">🦊</div> | |
| </div> | |
| <div class="nw-card"> | |
| <div class="nw-lbl">💰 Total Wealth</div> | |
| <div class="nw-amt" id="nw-amt">$500.00</div> | |
| <div class="nw-ch pos" id="nw-ch">+$0.00 today</div> | |
| <div class="xp-wrap"> | |
| <div class="xp-row"><span id="xp-title">🌱 Money Seed · Level 1</span><span id="xp-num">0/100 XP</span></div> | |
| <div class="xp-bar"><div class="xp-fill" id="xp-fill" style="width:0%"></div></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="app-body"> | |
| <div class="stats3"> | |
| <div class="sc"><span class="sc-icon">💵</span><div class="sc-val" id="s-cash">$500</div><div class="sc-lbl">Cash</div></div> | |
| <div class="sc"><span class="sc-icon">📈</span><div class="sc-val" id="s-inv">$0</div><div class="sc-lbl">Invested</div></div> | |
| <div class="sc"><span class="sc-icon">🏆</span><div class="sc-val" id="s-xp">Lv 1</div><div class="sc-lbl">Level</div></div> | |
| </div> | |
| <div class="sec-row"><div class="sec-title">🎯 My Goal</div><button class="sec-link" onclick="navTo('screen-goals','nb-goals');renderGoals()">All goals</button></div> | |
| <div id="goal-banner"></div> | |
| <div class="sec-row"><div class="sec-title">⚡ Quick Actions</div></div> | |
| <div class="act-grid"> | |
| <div class="act act-s" onclick="openSaveMdl()"><span class="act-ic">🏦</span><div class="act-nm">Save Money</div><div class="act-sb">Earn interest</div></div> | |
| <div class="act act-i" onclick="openInvMdl()"><span class="act-ic">📈</span><div class="act-nm">Invest</div><div class="act-sb">Grow it!</div></div> | |
| <div class="act act-g" onclick="navTo('screen-goals','nb-goals');renderGoals()"><span class="act-ic">🎯</span><div class="act-nm">My Goals</div><div class="act-sb">Track progress</div></div> | |
| <div class="act act-a" onclick="navTo('screen-ai','nb-ai');loadAIWelcome()"><span class="act-ic">🤖</span><div class="act-nm">Ask Kai</div><div class="act-sb">K2 AI advice</div></div> | |
| </div> | |
| <div class="sec-row"><div class="sec-title">📊 Portfolio</div><button class="sec-link" onclick="openRbMdl()">Rebalance ✨</button></div> | |
| <div class="port-grid" id="port-grid"></div> | |
| <div class="ai-card" onclick="navTo('screen-ai','nb-ai');loadAIWelcome()" style="margin-top:14px"> | |
| <div class="ai-top"> | |
| <div class="ai-av">🤖</div> | |
| <div><div class="ai-nm">Kai — K2 AI Money Mentor</div><div class="ai-st">K2-Think-V2 · Always online</div></div> | |
| </div> | |
| <div class="ai-bubble" id="ai-teaser">Hey! 👋 I'm watching your portfolio. Tap me for personalised money advice!</div> | |
| </div> | |
| <div class="sec-row" style="margin-top:14px"><div class="sec-title">📋 Recent Activity</div></div> | |
| <div class="act-list" id="act-list"></div> | |
| </div> | |
| </div> | |
| <!-- ══ LEARN ══ --> | |
| <div class="screen" id="screen-learn"> | |
| <div class="learn-hdr"> | |
| <div class="hdr-top"> | |
| <div><div class="hdr-greet" style="color:rgba(255,255,255,.75)">📚 Money School</div><div class="hdr-name" style="color:#fff;font-size:20px">Learn & Earn XP</div></div> | |
| <div class="hdr-av" style="background:rgba(255,255,255,.2)">🎓</div> | |
| </div> | |
| </div> | |
| <div class="screen-body"> | |
| <div class="sec-row" style="margin-top:14px"><div class="sec-title">📖 Lessons</div><span style="font-size:13px;font-weight:700;color:rgba(15,30,60,.4)" id="lessons-done">0/7 done</span></div> | |
| <div class="lesson-grid" id="lesson-grid"></div> | |
| <div style="height:20px"></div> | |
| </div> | |
| </div> | |
| <!-- ══ GOALS ══ --> | |
| <div class="screen" id="screen-goals"> | |
| <div class="goals-hdr"> | |
| <div class="hdr-top"> | |
| <div><div class="hdr-greet" style="color:rgba(255,255,255,.75)">🎯 My Dreams</div><div class="hdr-name" style="color:#fff;font-size:20px">Goal Tracker</div></div> | |
| <div class="hdr-av" style="background:rgba(255,255,255,.2)">💫</div> | |
| </div> | |
| </div> | |
| <div class="screen-body"> | |
| <div id="goals-list" style="margin-top:14px"></div> | |
| <button class="add-goal-btn" onclick="openNewGoalMdl()">+ Add New Goal</button> | |
| <div style="height:20px"></div> | |
| </div> | |
| </div> | |
| <!-- ══ AI SCREEN ══ --> | |
| <div class="screen" id="screen-ai"> | |
| <div class="ai-hdr"> | |
| <div class="hdr-top"> | |
| <div><div class="hdr-greet" style="color:rgba(255,255,255,.75)">🤖 Money Mentor</div><div class="hdr-name" style="color:#fff;font-size:20px">Kai · K2-Think-V2</div></div> | |
| <div class="hdr-av" style="background:rgba(255,255,255,.2);animation:pulse 3s infinite">🤖</div> | |
| </div> | |
| </div> | |
| <div class="chat-body"> | |
| <div class="chat-msgs" id="chat-msgs"></div> | |
| <div class="quick-qs" id="quick-qs"></div> | |
| <div style="height:130px"></div> | |
| </div> | |
| <div class="chat-bar"> | |
| <input class="chat-in" id="chat-in" placeholder="Ask Kai about money..." onkeydown="if(event.key==='Enter')sendMsg()"/> | |
| <button class="chat-send" onclick="sendMsg()">🚀</button> | |
| </div> | |
| </div> | |
| <!-- ══ PARENT ══ --> | |
| <div class="screen" id="screen-parent"> | |
| <div class="par-hdr"> | |
| <button class="par-back" onclick="showScreen('screen-welcome')">← Back</button> | |
| <div class="par-title">Parent Dashboard 👨👩👧</div> | |
| <div class="par-sub" id="par-sub">Your child's financial journey</div> | |
| </div> | |
| <div class="par-body"> | |
| <div class="par-ai-card"> | |
| <div class="pai-hdr"><div style="font-size:28px">🤖</div><div><div class="pai-title">K2 AI Parent Report</div><div class="pai-sub">Powered by K2-Think-V2</div></div></div> | |
| <div class="pai-body" id="pai-body"><div class="spin"><div class="spinner"></div><div class="spin-txt">K2 AI is generating your report...</div></div></div> | |
| </div> | |
| <div class="pcard"><div class="pcard-title">📈 Learning Curve</div><div class="lc-bars" id="lc-bars"></div></div> | |
| <div class="pcard"><div class="pcard-title">💡 Key Insights</div><div id="par-insights"></div></div> | |
| <div class="pcard"><div class="pcard-title">🕐 Decision Timeline</div><div id="par-timeline"></div></div> | |
| <div class="pcard"><div class="pcard-title">❤️ Financial Health</div><div id="par-health"></div></div> | |
| </div> | |
| </div> | |
| <!-- ══ BOTTOM NAV ══ --> | |
| <nav class="bnav" id="bnav" style="display:none"> | |
| <button class="nb on" id="nb-home" onclick="navTo('screen-app','nb-home')"><div class="nb-ic">🏠</div><span class="nb-lbl">Home</span></button> | |
| <button class="nb" id="nb-learn" onclick="navTo('screen-learn','nb-learn');renderLessons()"><div class="nb-ic">📚</div><span class="nb-lbl">Learn</span></button> | |
| <button class="nb" id="nb-goals" onclick="navTo('screen-goals','nb-goals');renderGoals()"><div class="nb-ic">🎯</div><span class="nb-lbl">Goals</span></button> | |
| <button class="nb" id="nb-ai" onclick="navTo('screen-ai','nb-ai');loadAIWelcome()"><div class="nb-ic">🤖</div><span class="nb-lbl">Ask Kai</span></button> | |
| </nav> | |
| <!-- ══ MODALS ══ --> | |
| <div class="mbg" id="mdl-save"><div class="msheet"><div class="mhandle"></div><span class="m-emoji">🏦</span><div class="m-title">Save Money</div><div class="m-sub">Every dollar saved earns interest and works for your future! 💪</div><div class="amt-row" id="save-amts"></div><button class="btn-confirm" onclick="doSave()">Save it! 🎉</button><button class="btn-cancel" onclick="closeMdl('mdl-save')">Cancel</button></div></div> | |
| <div class="mbg" id="mdl-invest"><div class="msheet"><div class="mhandle"></div><span class="m-emoji">📈</span><div class="m-title">Invest Your Money</div><div class="m-sub">Buy a tiny piece of a company. If it grows, your money grows too! 🚀</div><div id="inv-opts"></div><button class="btn-confirm" id="inv-confirm-btn" onclick="doInvest()" disabled>Pick an investment first!</button><button class="btn-cancel" onclick="closeMdl('mdl-invest')">Cancel</button></div></div> | |
| <div class="mbg" id="mdl-lesson"><div class="msheet"><div class="mhandle"></div><span class="m-emoji" id="les-em">📖</span><div class="m-title" id="les-title">Lesson</div><div id="les-body"></div><div id="les-quiz"></div><button class="btn-confirm" id="les-btn" onclick="checkAnswer()" disabled>Pick an answer first!</button><button class="btn-cancel" onclick="closeMdl('mdl-lesson')">Skip for now</button></div></div> | |
| <div class="mbg" id="mdl-rebalance"><div class="msheet"><div class="mhandle"></div><span class="m-emoji">⚖️</span><div class="m-title">Rebalance Portfolio</div><div class="m-sub">K2 AI will analyse your investments and suggest the best mix!</div><div class="rb-chart" id="rb-chart"></div><div class="rb-suggest" id="rb-suggest"><div class="spin"><div class="spinner"></div><div class="spin-txt">K2 AI is analysing...</div></div></div><button class="btn-confirm" id="rb-btn" onclick="applyRb()" disabled>Apply K2's Suggestion ✨</button><button class="btn-cancel" onclick="closeMdl('mdl-rebalance')">Not now</button></div></div> | |
| <div class="mbg" id="mdl-newgoal"><div class="msheet"><div class="mhandle"></div><span class="m-emoji">🎯</span><div class="m-title">New Goal!</div><div class="m-sub">What are you saving for? K2 AI will help you make a plan!</div><div class="goal-grid" id="new-goal-grid"></div><button class="btn-confirm" onclick="doAddGoal()">Add this goal! 🚀</button><button class="btn-cancel" onclick="closeMdl('mdl-newgoal')">Cancel</button></div></div> | |
| <script> | |
| </script> | |
| </body> | |
| </html> | |