*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--green: #1db954;--green-dark: #158a3e;--green-glow: rgba(29, 185, 84, .12);--bg: #0e0e0e;--bg2: #161616;--surface: #1e1e1e;--surface2: #252525;--border: rgba(255,255,255,.07);--text: #f0f0f0;--text-dim: #a0a0a0;--text-faint: #4a4a4a;--radius: 14px}[data-theme=light]{--green: #17a34a;--green-dark: #15803d;--green-glow: rgba(23,163,74,.1);--bg: #f5f5f5;--bg2: #ffffff;--surface: #ffffff;--surface2: #f0f0f0;--border: rgba(0,0,0,.08);--text: #111111;--text-dim: #555555;--text-faint: #999999}*,*:before,*:after{transition:background-color .2s ease,border-color .2s ease,color .15s ease}body{background:var(--bg);background-image:radial-gradient(ellipse 80% 40% at 50% -10%,var(--green-glow) 0%,transparent 70%);color:var(--text);font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:15px;line-height:1.5;min-height:100vh;-webkit-font-smoothing:antialiased}h1,h2,h3,.header-brand,.login-logo,.top5-title{font-family:Outfit,Inter,sans-serif}img{display:block}a{color:inherit;text-decoration:none}button{cursor:pointer;border:none;background:none;font:inherit;color:inherit}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--surface2);border-radius:9999px}.login-page{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;gap:1.75rem;text-align:center;padding:2rem}.login-page:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse 60% 50% at 50% 40%,rgba(29,185,84,.1) 0%,transparent 70%);pointer-events:none}.login-logo{font-size:2.8rem;font-weight:900;letter-spacing:-.05em}.login-logo span{color:var(--green)}.login-tagline{font-size:1rem;color:var(--text-dim);max-width:300px;line-height:1.65}.login-btn{display:flex;align-items:center;gap:.75rem;background:var(--green);color:#000;font-weight:700;font-size:.88rem;letter-spacing:.06em;text-transform:uppercase;padding:.9rem 2.25rem;border-radius:9999px;box-shadow:0 4px 24px #1db9544d;transition:background .2s,transform .15s,box-shadow .2s}.login-btn:hover{background:#21d45e;transform:scale(1.04);box-shadow:0 6px 32px #1db95473}.login-btn:active{transform:scale(.97)}.login-credit{position:absolute;bottom:1.75rem;font-size:.76rem;color:var(--text-faint);letter-spacing:.04em}.header{display:flex;align-items:center;justify-content:space-between;padding:1rem 2rem;background:#0e0e0ebf;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10}.header-brand{font-size:1.2rem;font-weight:900;letter-spacing:-.03em}.header-brand span{color:var(--green)}.header-user{display:flex;align-items:center;gap:.75rem}.header-avatar{width:34px;height:34px;border-radius:50%;object-fit:cover;background:var(--surface);border:2px solid var(--border)}.header-name{font-size:.88rem;font-weight:600;color:var(--text-dim)}.header-logout{font-size:.78rem;color:var(--text-faint);padding:.35rem .9rem;border:1px solid var(--border);border-radius:9999px;transition:color .2s,border-color .2s,background .2s}.header-theme-btn{font-size:1rem;padding:.3rem .5rem;border-radius:8px;transition:background .2s;cursor:pointer;background:none;border:none;line-height:1}.header-theme-btn:hover{background:var(--surface2)}.header-logout:hover{color:var(--text);border-color:#fff3;background:var(--surface)}@media(max-width:500px){.header{padding:.75rem 1rem}.header-name{display:none}.header-brand{font-size:1rem}}.time-toggle{display:flex;gap:.5rem;background:var(--surface);border:1px solid var(--border);border-radius:9999px;padding:.3rem;width:fit-content}.time-toggle-btn{padding:.45rem 1.1rem;border-radius:9999px;font-size:.8rem;font-weight:600;color:var(--text-dim);transition:all .2s}.time-toggle-btn:hover{color:var(--text)}.time-toggle-btn.active{background:var(--green);color:#000;box-shadow:0 2px 12px #1db95459}@media(max-width:500px){.time-toggle-btn{padding:.4rem .7rem;font-size:.72rem}}.top-tracks{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem}.top-tracks-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.25rem;gap:.75rem}.top-tracks-header h2{margin-bottom:0}.track-search{background:var(--surface2);border:1px solid var(--border);border-radius:9999px;padding:.3rem .85rem;font-size:.78rem;color:var(--text);font-family:inherit;width:110px;transition:border-color .2s,width .2s;outline:none}.track-search:focus{border-color:var(--green);width:140px}.track-search::placeholder{color:var(--text-faint)}@media(max-width:400px){.track-search{width:90px}.track-search:focus{width:110px}}.top-tracks h2{font-size:.78rem;font-weight:700;margin-bottom:1.25rem;letter-spacing:.1em;text-transform:uppercase;color:var(--text-faint)}.track-list{display:flex;flex-direction:column;gap:.25rem}.track-skeleton{height:56px;border-radius:10px;background:var(--surface2);animation:skeleton-pulse 1.4s ease-in-out infinite}.track-item{display:flex;align-items:center;gap:.875rem;padding:.5rem .6rem;border-radius:10px;border-left:2px solid transparent;text-decoration:none;color:inherit;transition:background .15s,border-color .15s;animation:fade-in .35s ease both}.track-item:hover{background:var(--surface2);border-left-color:var(--green)}.track-item:hover .track-rank,.track-item:hover .track-name{color:var(--green)}.track-rank{width:20px;text-align:right;font-size:.78rem;color:var(--text-faint);flex-shrink:0;transition:color .15s;font-variant-numeric:tabular-nums}.track-art-wrap{position:relative;flex-shrink:0;width:44px;height:44px}.track-art{width:44px;height:44px;border-radius:6px;object-fit:cover;background:var(--surface2);transition:transform .15s}.track-item:hover .track-art{transform:scale(1.06)}.track-play-btn{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#0000008c;border-radius:6px;font-size:.65rem;color:#fff;opacity:0;transition:opacity .15s}.track-item:hover .track-play-btn{opacity:1}.track-info{min-width:0;flex:1}.track-name{font-size:.875rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .15s}.track-artist{font-size:.775rem;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:.15rem}.track-duration{font-size:.72rem;color:var(--text-faint);flex-shrink:0;opacity:0;transition:opacity .15s;font-variant-numeric:tabular-nums}.track-item:hover .track-duration{opacity:1}.top-artists{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem}.top-artists h2{font-size:.78rem;font-weight:700;margin-bottom:1.25rem;letter-spacing:.1em;text-transform:uppercase;color:var(--text-faint)}.artist-list{display:flex;flex-direction:column;gap:.25rem}.artist-skeleton{height:56px;border-radius:10px;background:var(--surface2);animation:skeleton-pulse 1.4s ease-in-out infinite}.artist-item{display:flex;align-items:center;gap:.875rem;padding:.5rem .6rem;border-radius:10px;border-left:2px solid transparent;text-decoration:none;color:inherit;transition:background .15s,border-color .15s;animation:fade-in .35s ease both}@keyframes fade-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.artist-item:hover{background:var(--surface2);border-left-color:var(--green)}.artist-item:hover .artist-rank,.artist-item:hover .artist-name{color:var(--green)}.artist-rank{width:20px;text-align:right;font-size:.78rem;color:var(--text-faint);flex-shrink:0;transition:color .15s;font-variant-numeric:tabular-nums}.artist-photo{width:44px;height:44px;border-radius:50%;object-fit:cover;flex-shrink:0;background:var(--surface2);transition:transform .15s,box-shadow .15s}.artist-item:hover .artist-photo{transform:scale(1.08);box-shadow:0 0 0 2px var(--green)}.artist-name{font-size:.875rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .15s}.recently-played{margin-top:1.5rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem}.recently-played h2{font-size:.78rem;font-weight:700;margin-bottom:1.25rem;letter-spacing:.1em;text-transform:uppercase;color:var(--text-faint)}.recently-played-strip{display:flex;gap:.875rem;overflow-x:auto;padding-bottom:.5rem}.recently-played-strip::-webkit-scrollbar{height:3px}.recently-played-strip::-webkit-scrollbar-track{background:transparent}.recently-played-strip::-webkit-scrollbar-thumb{background:var(--surface2);border-radius:9999px}.recent-skeleton{flex-shrink:0;width:130px;height:130px;border-radius:10px;background:var(--surface2);animation:skeleton-pulse 1.4s ease-in-out infinite}@keyframes skeleton-pulse{0%,to{opacity:.5}50%{opacity:1}}.recent-card{position:relative;flex-shrink:0;width:130px;border-radius:10px;overflow:hidden;text-decoration:none;color:inherit;transition:transform .2s}.recent-card:hover{transform:scale(1.05)}.recent-card-art{width:130px;height:130px;object-fit:cover;display:block;background:var(--surface2)}.recent-card-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(to top,#000000e6 50%,#00000026);display:flex;flex-direction:column;align-items:center;justify-content:center;opacity:0;transition:opacity .2s}.recent-card:hover .recent-card-overlay{opacity:1}.recent-card-play{font-size:1.5rem;color:#fff;margin-bottom:.4rem;filter:drop-shadow(0 0 8px var(--green))}.recent-card-info{width:100%;padding:0 .5rem;text-align:center}.recent-card-name{font-size:.72rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.recent-card-artist{font-size:.65rem;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:.1rem}.stats-bar{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin-bottom:1.5rem}@media(max-width:700px){.stats-bar{grid-template-columns:repeat(2,1fr)}}@media(max-width:400px){.stats-bar{grid-template-columns:1fr 1fr;gap:.75rem}.stat-card{padding:.875rem 1rem}.stat-icon{font-size:1.1rem}}.stat-card{display:flex;align-items:center;gap:.875rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1rem 1.25rem;transition:transform .2s,box-shadow .2s;animation:fade-up .4s ease both}@keyframes fade-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.stat-card:hover{transform:translateY(-2px);box-shadow:0 6px 24px #00000040}.stat-value-skeleton{width:80px;height:1.1rem;background:var(--surface2);border-radius:6px;animation:skeleton-pulse 1.4s ease-in-out infinite}.stat-icon{font-size:1.4rem;flex-shrink:0}.stat-content{min-width:0}.stat-value{font-family:Outfit,sans-serif;font-size:1.1rem;font-weight:800;min-height:1.4rem;font-variant-numeric:tabular-nums}.stat-value--text{font-size:.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;animation:fade-in .4s ease both}@keyframes fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.stat-label{font-size:.72rem;color:var(--text-faint);text-transform:uppercase;letter-spacing:.08em;margin-top:.1rem}.genre-chart{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem}.genre-chart h2{font-size:.78rem;font-weight:700;margin-bottom:1.25rem;letter-spacing:.1em;text-transform:uppercase;color:var(--text-faint)}.genre-empty{font-size:.85rem;color:var(--text-faint)}.genre-list{display:flex;flex-direction:column;gap:.75rem}.genre-skeleton{height:28px;border-radius:6px;background:var(--surface2);animation:skeleton-pulse 1.4s ease-in-out infinite}.genre-row{display:grid;grid-template-columns:120px 1fr 24px;align-items:center;gap:.75rem;animation:fade-in .35s ease both}.genre-name{font-size:.82rem;font-weight:500;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.genre-bar-track{height:6px;background:var(--surface2);border-radius:9999px;overflow:hidden}.genre-bar-fill{height:100%;background:linear-gradient(90deg,var(--green),#4ade80);border-radius:9999px;width:0%;transition:width .7s cubic-bezier(.4,0,.2,1)}.genre-count{font-size:.72rem;color:var(--text-faint);text-align:right;font-variant-numeric:tabular-nums}.audio-features{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem}.audio-features h2{font-size:.78rem;font-weight:700;margin-bottom:.25rem;letter-spacing:.1em;text-transform:uppercase;color:var(--text-faint)}.audio-features-sub{font-size:.75rem;color:var(--text-faint);margin-bottom:1.25rem}.af-empty{font-size:.85rem;color:var(--text-faint)}.af-list{display:flex;flex-direction:column;gap:.9rem}.af-skeleton{height:28px;border-radius:6px;background:var(--surface2);animation:skeleton-pulse 1.4s ease-in-out infinite}.af-row{display:grid;grid-template-columns:90px 1fr 36px;align-items:center;gap:.75rem;animation:fade-in .35s ease both}@keyframes fade-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.af-label{font-size:.82rem;font-weight:500;color:var(--text-dim)}.af-bar-track{height:8px;background:var(--surface2);border-radius:9999px;overflow:hidden}.af-bar-fill{height:100%;border-radius:9999px;width:0%;transition:width .8s cubic-bezier(.4,0,.2,1);box-shadow:0 0 8px currentColor;opacity:.9}.af-value{font-size:.75rem;color:var(--text-faint);text-align:right;font-variant-numeric:tabular-nums}.dashboard{min-height:100vh}.dashboard-body{max-width:1140px;margin:0 auto;padding:2.5rem 2rem 4rem}.dashboard-top-bar{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem}.top5-link{font-size:.82rem;font-weight:700;color:var(--green);padding:.45rem 1.1rem;border:1px solid rgba(29,185,84,.3);border-radius:9999px;transition:background .2s,border-color .2s}.top5-link:hover{background:#1db9541a;border-color:var(--green)}.dashboard-columns{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem}.dashboard-error{text-align:center;padding:4rem 2rem;color:var(--text-dim)}.dashboard-bottom-row{display:grid;grid-template-columns:1fr 2fr;gap:1.5rem;margin-top:1.5rem}@media(max-width:700px){.dashboard-columns,.dashboard-bottom-row{grid-template-columns:1fr}.dashboard-body{padding:1.25rem 1rem 3rem}}@media(max-width:500px){.dashboard-top-bar{flex-wrap:wrap;gap:.75rem}.top5-link{font-size:.75rem;padding:.4rem .875rem}}.share-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:100;display:flex;align-items:center;justify-content:center;padding:1rem;animation:overlay-in .2s ease}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}.share-modal{background:var(--surface);border:1px solid var(--border);border-radius:20px;padding:1.75rem;width:100%;max-width:420px;max-height:90vh;overflow-y:auto;animation:modal-in .25s cubic-bezier(.34,1.56,.64,1)}@keyframes modal-in{0%{opacity:0;transform:scale(.92) translateY(12px)}to{opacity:1;transform:scale(1) translateY(0)}}.share-modal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.25rem}.share-modal-header h2{font-size:1.1rem;font-weight:800;letter-spacing:-.02em}.share-close{font-size:.9rem;color:var(--text-faint);padding:.3rem .6rem;border-radius:6px;transition:color .15s,background .15s;cursor:pointer;background:none;border:none;font:inherit}.share-close:hover{color:var(--text);background:var(--surface2)}.share-preview{background:#0e0e0e;border-radius:14px;padding:1.25rem;margin-bottom:1.25rem;border:1px solid rgba(255,255,255,.05)}.share-card-title{font-family:Outfit,sans-serif;font-size:1.3rem;font-weight:900;letter-spacing:-.04em;margin-bottom:.15rem}.share-card-title .green{color:var(--green)}.share-card-period{font-size:.7rem;color:var(--text-faint);text-transform:uppercase;letter-spacing:.08em;margin-bottom:.875rem}.share-section-label{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--text-faint);margin-bottom:.5rem}.share-row{display:flex;align-items:center;gap:.6rem;padding:.3rem 0}.share-rank{font-family:Outfit,sans-serif;font-size:.85rem;font-weight:900;width:28px;flex-shrink:0}.share-row-name{font-size:.8rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.share-row-sub{font-size:.7rem;color:var(--text-dim)}.share-card-footer{font-size:.65rem;color:var(--text-faint);text-align:center;margin-top:1rem;padding-top:.75rem;border-top:1px solid rgba(255,255,255,.05)}.share-download-btn{width:100%;padding:.85rem;background:var(--green);color:#000;font-family:inherit;font-size:.88rem;font-weight:700;letter-spacing:.04em;border-radius:9999px;border:none;cursor:pointer;transition:background .2s,transform .15s,box-shadow .2s;box-shadow:0 4px 20px #1db9544d}.share-download-btn:hover{background:#21d45e;transform:scale(1.02);box-shadow:0 6px 28px #1db95473}.share-download-btn:active{transform:scale(.98)}.top5-page{min-height:100vh;padding:2.5rem 2rem 4rem;max-width:900px;margin:0 auto}.top5-header{display:flex;align-items:center;gap:1.5rem;margin-bottom:2.5rem;flex-wrap:wrap}.top5-back{font-size:.85rem;color:var(--text-dim);padding:.4rem .9rem;border:1px solid var(--border);border-radius:9999px;transition:color .2s,border-color .2s;cursor:pointer;background:none;font:inherit}.top5-back:hover{color:var(--text);border-color:#fff3}.top5-theme-btn{font-size:1rem;padding:.35rem .6rem;border-radius:8px;background:none;border:none;cursor:pointer;font:inherit;transition:background .2s}.top5-theme-btn:hover{background:var(--surface2)}.top5-title{font-size:1.8rem;font-weight:900;letter-spacing:-.04em;flex:1}.top5-share-btn{font-size:.82rem;font-weight:700;color:var(--green);padding:.45rem 1.1rem;border:1px solid rgba(29,185,84,.3);border-radius:9999px;background:none;font-family:inherit;cursor:pointer;transition:background .2s,border-color .2s}.top5-share-btn:hover{background:#1db9541a;border-color:var(--green)}.top5-toggle{display:flex;gap:.4rem;background:var(--surface);border:1px solid var(--border);border-radius:9999px;padding:.3rem}.top5-toggle-btn{padding:.4rem 1rem;border-radius:9999px;font-size:.78rem;font-weight:600;color:var(--text-dim);transition:all .2s;cursor:pointer;background:none;border:none;font:inherit}.top5-toggle-btn:hover{color:var(--text)}.top5-toggle-btn.active{background:var(--green);color:#000;box-shadow:0 2px 12px #1db95459}.top5-body{display:grid;grid-template-columns:1fr 1fr;gap:2rem}@media(max-width:650px){.top5-body{grid-template-columns:1fr}.top5-header{flex-direction:column;align-items:flex-start;gap:.75rem}.top5-title{font-size:1.4rem}.top5-toggle-btn{padding:.35rem .8rem;font-size:.74rem}.top5-page{padding:1.5rem 1rem 3rem}}.top5-section-title{font-size:.78rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--text-faint);margin-bottom:1rem}.top5-list{display:flex;flex-direction:column;gap:.75rem}.top5-skeleton{height:80px;border-radius:14px;background:var(--surface);animation:skeleton-pulse 1.4s ease-in-out infinite}@keyframes skeleton-pulse{0%,to{opacity:.4}50%{opacity:.9}}.top5-card{display:flex;align-items:center;gap:1rem;padding:.75rem 1rem;border-radius:14px;border:1px solid var(--border);background:var(--surface);text-decoration:none;color:inherit;transition:transform .2s,background .2s,box-shadow .2s,border-color .2s;animation:fade-up .4s ease both;position:relative;overflow:hidden}@keyframes fade-up{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.top5-card:hover{transform:translateY(-2px);background:var(--surface2);box-shadow:0 8px 30px #0000004d}.rank-1{border-left:3px solid #FFD700}.rank-2{border-left:3px solid #C0C0C0}.rank-3{border-left:3px solid #CD7F32}.rank-4,.rank-5{border-left:3px solid var(--border)}.rank-1:hover{border-left-color:gold;box-shadow:0 8px 30px #ffd7001f}.rank-2:hover{border-left-color:silver;box-shadow:0 8px 30px #c0c0c01a}.rank-3:hover{border-left-color:#cd7f32;box-shadow:0 8px 30px #cd7f321a}.top5-rank{font-size:1.1rem;font-weight:900;letter-spacing:-.04em;width:32px;flex-shrink:0;text-align:center}.rank-1 .top5-rank{color:gold}.rank-2 .top5-rank{color:silver}.rank-3 .top5-rank{color:#cd7f32}.rank-4 .top5-rank,.rank-5 .top5-rank{color:var(--text-faint)}.top5-img{width:56px;height:56px;object-fit:cover;border-radius:8px;flex-shrink:0;background:var(--surface2)}.top5-img--circle{border-radius:50%}.top5-info{flex:1;min-width:0}.top5-name{font-size:.95rem;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.top5-sub{font-size:.8rem;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:.2rem}.top5-arrow{font-size:1rem;color:var(--text-faint);opacity:0;transition:opacity .15s,color .15s;flex-shrink:0}.top5-card:hover .top5-arrow{opacity:1;color:var(--green)}
