@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@500;600;700;800&display=swap');
:root{--bg:#f4f5f8;--panel:#fff;--ink:#121526;--muted:#74798b;--line:#e9eaf0;--purple:#655cf6;--purple2:#7d5cff;--green:#20c997;--nav:#0e1120;--shadow:0 18px 55px rgba(18,21,38,.08)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;font-family:'DM Sans',system-ui,-apple-system,sans-serif;color:var(--ink);background:var(--bg)}button,input,select{font:inherit}.brand{display:flex;align-items:center;gap:11px}.brand-logo{width:42px;height:42px}.brand strong{font:800 17px/1 'Manrope';letter-spacing:-.4px}.brand span{display:block;margin-top:5px;color:#858b9d;font-size:11px;letter-spacing:.06em;text-transform:uppercase}.eyebrow{font-size:10px;font-weight:700;letter-spacing:.16em;color:#9a9eab}.btn{border:0;border-radius:14px;padding:13px 17px;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:10px;transition:.2s ease}.btn:disabled{opacity:.65;cursor:wait}.btn-primary{background:linear-gradient(135deg,var(--purple),var(--purple2));color:#fff;box-shadow:0 10px 25px rgba(101,92,246,.27)}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 14px 32px rgba(101,92,246,.33)}.btn-dark{background:#171a2a;color:white}.btn-ghost{background:#f6f6fa;color:#4e5365;border:1px solid var(--line)}.full{width:100%}
/* login */.login-body{min-height:100vh;background:#0d1020}.login-shell{min-height:100vh;display:grid;grid-template-columns:minmax(420px,560px) 1fr}.login-card{background:#fff;padding:54px clamp(30px,5vw,72px);display:flex;flex-direction:column;justify-content:center;position:relative;z-index:2}.brand-login{position:absolute;top:42px;left:clamp(30px,5vw,72px)}.login-copy{max-width:430px;margin-top:30px}.login-copy h1{font:800 clamp(38px,5vw,58px)/1.02 'Manrope';letter-spacing:-2.6px;margin:13px 0 18px}.login-copy h1 em{font-style:normal;color:var(--purple)}.login-copy p{color:var(--muted);font-size:15px;line-height:1.7;margin:0 0 30px}.login-form{display:grid;gap:17px;max-width:430px}.login-form label>span{font-size:12px;font-weight:700;color:#5f6474;display:block;margin-bottom:8px}.login-form input{width:100%;border:1px solid #dfe1e8;border-radius:13px;padding:14px 15px;outline:none;background:#fbfbfd;color:var(--ink);transition:.2s}.login-form input:focus{border-color:#8c85fa;box-shadow:0 0 0 4px rgba(101,92,246,.1);background:#fff}.password-wrap{position:relative}.password-wrap input{padding-right:74px}.password-wrap button{position:absolute;right:7px;top:7px;bottom:7px;border:0;background:#ececf4;border-radius:9px;font-size:11px;font-weight:700;color:#656a7a;cursor:pointer}.btn-login{margin-top:5px;padding:15px 17px;justify-content:space-between}.login-card footer{max-width:430px;margin-top:34px;padding-top:18px;border-top:1px solid var(--line);font-size:10px;letter-spacing:.08em;color:#a1a5b1;text-transform:uppercase}.alert{max-width:430px;border-radius:12px;padding:12px 14px;margin:0 0 17px;font-size:13px}.alert-error{background:#fff1f2;color:#b4233e;border:1px solid #ffd6dc}.login-visual{position:relative;overflow:hidden;background:radial-gradient(circle at 65% 30%,#2a2665 0,#17192c 35%,#0d1020 70%)}.orb{position:absolute;border-radius:50%;filter:blur(1px)}.orb-a{width:420px;height:420px;background:rgba(104,92,246,.18);top:-130px;right:-80px}.orb-b{width:300px;height:300px;background:rgba(32,201,151,.1);bottom:-120px;left:8%}.mock-window{position:absolute;width:min(620px,70%);left:50%;top:50%;transform:translate(-45%,-50%) rotate(-2deg);background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.11);border-radius:25px;backdrop-filter:blur(18px);box-shadow:0 45px 100px rgba(0,0,0,.35);padding:22px}.mock-top{display:flex;align-items:center;gap:7px;color:#747a95;font-size:9px;letter-spacing:.13em}.mock-top i{width:7px;height:7px;border-radius:50%;background:#464b65}.mock-top span{margin-left:auto}.mock-stat{margin:45px 6px 28px;border-radius:18px;padding:24px;background:linear-gradient(135deg,rgba(107,93,247,.23),rgba(32,201,151,.07));color:white}.mock-stat span{font:700 12px 'Manrope';color:#a8a4ff}.mock-stat strong{display:block;font:800 50px 'Manrope';margin:5px 0}.mock-stat small{color:#858ba2}.mock-comments{display:grid;gap:11px}.mock-comments>div{display:flex;gap:12px;padding:15px;background:rgba(255,255,255,.045);border-radius:14px}.mock-comments>div>i{width:34px;height:34px;border-radius:50%;background:linear-gradient(135deg,#6b5df7,#25c99b)}.mock-comments p{margin:0;flex:1}.mock-comments b,.mock-comments span{display:block;border-radius:10px;background:rgba(255,255,255,.12);height:7px;margin:4px 0 8px}.mock-comments b{width:28%;height:8px}.mock-comments span{width:88%}.mock-comments span:last-child{width:60%}
/* app */.app-body{min-height:100vh}.app-layout{display:grid;grid-template-columns:245px 1fr;min-height:100vh}.sidebar{background:var(--nav);color:white;padding:27px 20px;position:fixed;inset:0 auto 0 0;width:245px;z-index:50;display:flex;flex-direction:column}.sidebar .brand{padding:0 8px 28px}.sidebar .brand strong{color:#fff}.sidebar .brand span{color:#5f6578}.sidebar nav{display:grid;gap:7px}.nav-link{display:flex;align-items:center;gap:12px;text-decoration:none;color:#8e94a7;padding:12px 13px;border-radius:12px;font-size:13px;font-weight:600}.nav-link:hover,.nav-link.active{background:#191d31;color:#fff}.nav-link.active{box-shadow:inset 3px 0 0 #7265ff}.nav-icon{width:25px;text-align:center;color:#7770ff;font-size:19px}.sidebar-bottom{margin-top:auto;border-top:1px solid #202438;padding:20px 8px 4px}.status-dot{display:flex;align-items:center;gap:9px;color:#7e8499;font-size:11px;margin-bottom:15px}.status-dot i{width:7px;height:7px;border-radius:50%;background:#26cf9f;box-shadow:0 0 0 5px rgba(38,207,159,.08)}.sidebar-bottom a{color:#aaaec0;font-size:12px;text-decoration:none;display:flex;justify-content:space-between}.main-panel{grid-column:2;padding:0 38px 50px;max-width:1600px;width:100%;margin:0 auto}.topbar{height:116px;display:flex;align-items:center;justify-content:space-between}.topbar h1{font:800 28px/1.1 'Manrope';letter-spacing:-1px;margin:7px 0 0}.top-actions{display:flex;align-items:center;gap:10px}.mini-avatar{width:38px;height:38px;border-radius:12px;background:#171a2a;color:#fff;display:grid;place-items:center;font-weight:800}.mobile-menu{display:none;border:0;background:white;border-radius:12px;width:42px;height:42px;box-shadow:var(--shadow)}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:15px;margin-bottom:15px}.stat-card{background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:19px 21px;box-shadow:0 6px 22px rgba(18,21,38,.03)}.stat-card>span{font-size:11px;color:#8a8f9e;font-weight:600}.stat-card strong{display:block;font:800 29px 'Manrope';letter-spacing:-1px;margin:7px 0 1px}.stat-card small{font-size:10px;color:#adb0ba}.stat-card.accent{background:linear-gradient(135deg,#171a2a,#252840);color:white;border-color:#252840}.stat-card.accent>span,.stat-card.accent small{color:#858ba1}.control-card{background:linear-gradient(118deg,#fff 0,#fff 58%,#f1efff 100%);border:1px solid var(--line);border-radius:22px;padding:26px 28px;display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:19px;box-shadow:var(--shadow)}.control-copy{max-width:620px}.pulse-label{font-size:9px;font-weight:800;letter-spacing:.14em;color:#7265f5;display:flex;align-items:center;gap:7px}.pulse-label i{width:7px;height:7px;background:#28ce9e;border-radius:50%;box-shadow:0 0 0 5px rgba(40,206,158,.1)}.control-copy h2{font:800 24px 'Manrope';letter-spacing:-.7px;margin:10px 0 6px}.control-copy p{font-size:12px;color:#7e8392;line-height:1.55;margin:0}.refresh-controls{display:flex;gap:10px;min-width:420px}.refresh-controls select{flex:1;min-width:180px;border:1px solid #e1e2e8;background:#fff;border-radius:14px;padding:0 13px;color:#373b4b;outline:none}.refresh-btn{white-space:nowrap}.refresh-btn.loading .refresh-icon{animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.content-grid{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:19px}.feed-card,.source-card,.info-card{background:white;border:1px solid var(--line);border-radius:20px;box-shadow:0 8px 28px rgba(18,21,38,.035)}.feed-card{overflow:hidden}.section-head{display:flex;align-items:center;justify-content:space-between;padding:22px 24px;border-bottom:1px solid var(--line)}.section-head.compact{padding:20px;border-bottom:0}.section-head h2{font:800 17px 'Manrope';margin:5px 0 0;letter-spacing:-.35px}.section-meta{font-size:10px;color:#969aa8}.comment-item{display:flex;gap:14px;padding:19px 24px;border-bottom:1px solid #f0f1f4;transition:.15s}.comment-item:last-child{border-bottom:0}.comment-item:hover{background:#fafaff}.avatar-wrap{width:39px;height:39px;flex:0 0 39px;border-radius:50%;overflow:hidden;background:#ececf5;box-shadow:0 0 0 3px #f4f4f8}.avatar-wrap img{width:100%;height:100%;object-fit:cover}.avatar-fallback{width:100%;height:100%;display:grid;place-items:center;background:linear-gradient(135deg,#6b5df7,#28c9a0);color:white;font-weight:800;font-size:13px}.comment-main{min-width:0;flex:1}.comment-top{display:flex;justify-content:space-between;gap:12px}.comment-top strong{font-size:12px}.comment-top div>span{display:block;color:#9ba0ae;font-size:9px;margin-top:3px}.symbol-pill{align-self:flex-start;background:#f0efff;color:#665cf4;border-radius:999px;padding:4px 8px;font-size:9px;font-weight:800}.comment-main p{font-size:13px;line-height:1.62;color:#414655;margin:10px 0 11px;word-break:break-word}.comment-actions{display:flex;gap:14px;align-items:center}.comment-actions button,.comment-actions a{border:0;background:none;padding:0;color:#777d8f;font-size:10px;font-weight:700;text-decoration:none;cursor:pointer}.comment-actions button:hover,.comment-actions a:hover{color:#655cf6}.empty-state{text-align:center;padding:60px 20px;color:#8d92a2}.empty-state div{width:54px;height:54px;border-radius:17px;background:#f2f1ff;color:#6d62f5;display:grid;place-items:center;font-size:25px;margin:auto}.empty-state h3{font:800 16px 'Manrope';color:#3c4050;margin:14px 0 5px}.empty-state p{font-size:11px}.side-stack{display:grid;align-content:start;gap:16px}.source-list{padding:0 11px 11px}.source-group-label{padding:7px 10px 5px;color:#a4a8b5;font-size:8px;font-weight:800;letter-spacing:.14em}.source-group-spaced{margin-top:8px;padding-top:12px;border-top:1px solid #f0f1f4}.source-row{display:grid;grid-template-columns:64px 1fr 20px;align-items:center;text-decoration:none;color:#353949;padding:12px 10px;border-radius:11px}.source-row:hover,.source-row.selected{background:#f6f6fb}.source-row span{font:800 12px 'Manrope'}.source-row small{font-size:9px;color:#a1a5b1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.source-row b{text-align:right;color:#a5a9b5}.source-card>.btn{margin:0 16px 16px;width:calc(100% - 32px)}.add-source-form{display:grid;gap:9px;padding:0 16px 17px}.add-source-form input{width:100%;border:1px solid #e4e5eb;background:#fafafd;border-radius:11px;padding:11px 12px;font-size:11px;outline:none}.add-source-form input:focus{border-color:#8c85fa;box-shadow:0 0 0 3px rgba(101,92,246,.08)}.info-card{padding:17px;display:flex;gap:12px}.info-icon{width:28px;height:28px;flex:0 0 28px;border-radius:9px;background:#eef9f5;color:#1fad86;display:grid;place-items:center;font-weight:800}.info-card strong{font-size:11px}.info-card p{font-size:10px;line-height:1.55;color:#8b8f9d;margin:5px 0 0}.toast{position:fixed;right:24px;bottom:24px;z-index:1000;background:#171a2a;color:white;padding:13px 16px;border-radius:12px;font-size:11px;font-weight:700;box-shadow:0 20px 50px rgba(0,0,0,.22);transform:translateY(20px);opacity:0;pointer-events:none;transition:.2s}.toast.show{opacity:1;transform:none}.toast.success{border-left:3px solid #23cb9b}.toast.error{border-left:3px solid #ff6378}.sidebar-backdrop{display:none}
@media(max-width:1100px){.content-grid{grid-template-columns:1fr}.side-stack{grid-template-columns:1fr 1fr}.refresh-controls{min-width:360px}.control-card{align-items:flex-end}}
@media(max-width:820px){.app-layout{display:block}.sidebar{transform:translateX(-105%);transition:.22s}.sidebar.open{transform:none}.sidebar-backdrop{display:block;position:fixed;inset:0;background:rgba(8,10,18,.52);z-index:40;opacity:0;pointer-events:none;transition:.2s}.sidebar-backdrop.show{opacity:1;pointer-events:auto}.main-panel{padding:0 18px 35px}.topbar{height:92px;justify-content:flex-start;gap:14px}.top-actions{margin-left:auto}.mobile-menu{display:block}.stats-grid{grid-template-columns:1fr 1fr}.stat-card:last-child{grid-column:1/-1}.control-card{display:block;padding:21px}.refresh-controls{min-width:0;margin-top:18px}.content-grid{display:block}.side-stack{display:grid;grid-template-columns:1fr;margin-top:16px}.login-shell{grid-template-columns:1fr}.login-visual{display:none}.login-card{min-height:100vh}.brand-login{top:30px}.login-copy{margin-top:65px}}
@media(max-width:560px){.main-panel{padding:0 12px 28px}.topbar h1{font-size:24px}.stats-grid{gap:9px}.stat-card{padding:16px}.stat-card strong{font-size:24px}.control-card{border-radius:18px}.refresh-controls{display:grid}.refresh-controls select{height:47px}.refresh-btn{height:48px}.section-head{padding:18px}.comment-item{padding:17px 18px}.comment-main p{font-size:12px}.side-stack{grid-template-columns:1fr}.login-card{padding:30px 22px}.brand-login{left:22px}.login-copy h1{font-size:40px;letter-spacing:-1.8px}.toast{left:12px;right:12px;bottom:12px;text-align:center}}


/* server-side comment delete */
.comment-tools{display:flex;align-items:center;gap:8px;align-self:flex-start}
.delete-comment-form{margin:0;padding:0;display:inline-flex}
.delete-comment-btn{width:26px;height:26px;border:1px solid #ececf2;background:#fff;color:#9b9fad;border-radius:8px;display:grid;place-items:center;font:700 17px/1 Arial,sans-serif;cursor:pointer;transition:.16s;padding:0}
.delete-comment-btn:hover{color:#e1465a;border-color:#ffd5dc;background:#fff5f7;transform:translateY(-1px)}
.server-notice{margin:0 0 14px;padding:11px 14px;border-radius:12px;font-size:12px;font-weight:700}
.server-notice.success{background:#ecfdf5;color:#067647;border:1px solid #a6f4c5}
.server-notice.error{background:#fff1f3;color:#b4233e;border:1px solid #fecdd6}
