/* ========== Reset & Base ========== */
*{box-sizing:border-box;margin:0;padding:0}
html{width:100%;min-width:100%;overflow-x:hidden}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif;font-size:14px;color:#1e293b;background:#f8fafc;width:100%;min-width:100%;overflow-x:hidden}
a{color:inherit;text-decoration:none}
ul,li{list-style:none}

/* ========== Auth Pages (Login/Register) ========== */
.auth-body{min-height:100vh;background:linear-gradient(135deg,#0f172a 0%,#1e293b 40%,#0f2851 100%);display:flex;align-items:center;justify-content:center}
.auth-particles{position:fixed;inset:0;z-index:0;overflow:hidden}
.auth-particle{position:absolute;border-radius:50%;animation:authFloat linear infinite;opacity:.3}
@keyframes authFloat{0%{transform:translateY(100vh) rotate(0deg)}100%{transform:translateY(-10px) rotate(720deg)}}
.auth-wrap{position:relative;z-index:10;display:flex;width:900px;min-height:520px;border-radius:20px;overflow:hidden;box-shadow:0 25px 60px rgba(0,0,0,.5)}
.auth-left{flex:1;background:linear-gradient(135deg,#1a56db 0%,#6d28d9 100%);padding:60px 50px;color:#fff;display:flex;flex-direction:column;justify-content:center}
.auth-left h1{font-size:28px;font-weight:700;margin-bottom:12px}
.auth-left p{font-size:14px;opacity:.8;line-height:1.8;margin-bottom:30px}
.auth-feature{display:flex;align-items:center;gap:10px;margin-bottom:14px;font-size:13px}
.auth-f-icon{width:28px;height:28px;background:rgba(255,255,255,.15);border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}
.auth-right{width:420px;background:#fff;padding:50px 45px;display:flex;flex-direction:column;justify-content:center}
.auth-right h2{font-size:22px;color:#1e293b;margin-bottom:6px;font-weight:700}
.auth-sub{font-size:13px;color:#64748b;margin-bottom:28px}
.auth-field{margin-bottom:16px}
.auth-field label{display:block;font-size:13px;color:#374151;margin-bottom:6px;font-weight:500}
.auth-field input,.auth-field select{width:100%;height:42px;border:1.5px solid #e2e8f0;border-radius:10px;padding:0 14px;font-size:14px;outline:none;transition:border-color .2s;background:#fff}
.auth-field input:focus,.auth-field select:focus{border-color:#1a56db;box-shadow:0 0 0 3px rgba(26,86,219,.1)}
.auth-row{display:flex}
.auth-btn{width:100%;height:44px;border:none;border-radius:10px;cursor:pointer;background:linear-gradient(135deg,#1a56db,#6d28d9);color:#fff;font-size:15px;font-weight:600;letter-spacing:.5px;transition:opacity .2s;margin-top:4px}
.auth-btn:hover{opacity:.9}
.auth-btn:disabled{opacity:.6;cursor:not-allowed}
.auth-error{color:#ef4444;font-size:13px;text-align:center;min-height:20px;margin-top:10px}
.auth-links{text-align:center;margin-top:16px}
.auth-links a{font-size:13px;color:#1a56db}
.auth-links a:hover{text-decoration:underline}

/* ========== Portal Layout ========== */
.portal-body{background:#f1f5f9;width:100%;min-width:100%}
.portal-layout{min-height:100vh;display:flex;flex-direction:column;width:100%;max-width:none}

/* Header */
.portal-header{height:60px;background:#fff;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;justify-content:space-between;padding:0 24px;position:sticky;top:0;z-index:100;box-shadow:0 1px 3px rgba(0,0,0,.04)}
.portal-logo{font-size:18px;font-weight:600;color:#1e293b;display:flex;align-items:center;gap:6px}
.portal-logo-img{height:36px;width:auto;display:block;border-radius:4px}
.portal-logo b{color:#1a56db;font-weight:600}
.portal-header-info{display:flex;align-items:center;gap:20px}

/* Score Badge */
.portal-score-badge{display:flex;align-items:center;gap:6px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:20px;padding:4px 14px;font-size:13px}
.portal-score-icon{color:#16a34a}
.portal-score-num{font-weight:700;color:#15803d;font-size:15px}
.portal-score-label{color:#16a34a}
.portal-score-recharge{background:#16a34a;color:#fff;padding:2px 10px;border-radius:12px;font-size:12px;margin-left:4px}
.portal-score-recharge:hover{background:#15803d}
.portal-money-badge{display:flex;align-items:center;gap:6px;background:#fffbeb;border:1px solid #fde68a;border-radius:20px;padding:4px 14px;font-size:13px}
.portal-money-icon{color:#d97706;font-weight:700;font-size:13px}
.portal-money-num{font-weight:700;color:#b45309;font-size:15px}
.portal-money-label{color:#d97706}

/* User Menu */
.portal-user-menu{position:relative;cursor:pointer}
.portal-user-name{font-size:14px;color:#374151;font-weight:500;padding:8px 12px;border-radius:8px;transition:background .2s}
.portal-user-menu:hover .portal-user-name{background:#f1f5f9}
.portal-user-dropdown{position:absolute;top:100%;right:0;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.08);min-width:140px;display:none;z-index:200}
.portal-user-menu:hover .portal-user-dropdown{display:block}
.portal-user-dropdown a{display:block;padding:10px 16px;font-size:13px;color:#374151;transition:background .15s}
.portal-user-dropdown a:hover{background:#f1f5f9;color:#1a56db}

/* Container */
.portal-container{display:flex;flex:1;width:100%;max-width:none;overflow:hidden}

/* Sidebar */
.portal-sidebar{width:200px;background:#fff;border-right:1px solid #e2e8f0;padding:12px 0;flex-shrink:0}
.portal-nav{padding:0 8px}
.portal-nav-item{margin-bottom:2px}
.portal-nav-item a{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:8px;font-size:14px;color:#475569;transition:all .15s}
.portal-nav-item a:hover{background:#f1f5f9;color:#1a56db}
.portal-nav-item a.active{background:#eff6ff;color:#1a56db;font-weight:500}
.portal-nav-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;background:#e2e8f0;border-radius:6px;font-size:11px;font-weight:700;color:#64748b}
.portal-nav-item a.active .portal-nav-icon{background:#1a56db;color:#fff}

/* Submenu */
.portal-nav-item.has-submenu > a{position:relative;cursor:pointer}
.portal-nav-item.has-submenu > a::after{content:'▸';margin-left:auto;font-size:10px;transition:transform .2s;color:#94a3b8}
.portal-nav-item.has-submenu.open > a::after{transform:rotate(90deg)}
.portal-nav-submenu{max-height:0;overflow:hidden;transition:max-height .25s ease;padding-left:8px}
.portal-nav-item.open .portal-nav-submenu{max-height:200px}
.portal-nav-submenu .portal-nav-item{margin-bottom:0}
.portal-nav-submenu .portal-nav-item a{padding:8px 14px 8px 34px;font-size:13px;color:#64748b}
.portal-nav-submenu .portal-nav-item a:hover{color:#1a56db;background:#f1f5f9}
.portal-nav-submenu .portal-nav-item a.active{color:#1a56db;background:#eff6ff;font-weight:500}
.portal-nav-submenu .portal-nav-icon{width:18px;height:18px;font-size:10px}

/* Main Content */
.portal-main{flex:1;padding:0;overflow-y:auto;min-width:0;width:100%}
.portal-page-header{padding:20px 28px;border-bottom:1px solid #e2e8f0;background:#fff}
.portal-page-header h2{font-size:18px;font-weight:600;color:#1e293b}
.portal-content{padding:24px 28px}

/* ========== Common Components ========== */
/* Stat Cards */
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:24px}
.stat-card{background:#fff;border-radius:12px;padding:20px;border:1px solid #e2e8f0;transition:box-shadow .2s}
.stat-card:hover{box-shadow:0 4px 12px rgba(0,0,0,.06)}
.stat-card-label{font-size:13px;color:#64748b;margin-bottom:8px}
.stat-card-value{font-size:28px;font-weight:700;color:#1e293b}
.stat-card-value.primary{color:#1a56db}
.stat-card-value.success{color:#16a34a}
.stat-card-value.warning{color:#d97706}
.stat-card-sub{font-size:12px;color:#94a3b8;margin-top:4px}

/* Panel */
.panel{background:#fff;border-radius:12px;border:1px solid #e2e8f0;margin-bottom:20px}
.panel-header{padding:16px 20px;border-bottom:1px solid #f1f5f9;display:flex;align-items:center;justify-content:space-between}
.panel-header h3{font-size:15px;font-weight:600;color:#1e293b}
.panel-body{padding:20px}

/* Table */
.portal-table{width:100%;border-collapse:collapse;font-size:13px}
.portal-table th{background:#f8fafc;color:#64748b;font-weight:500;padding:10px 12px;text-align:left;border-bottom:1px solid #e2e8f0;white-space:nowrap}
.portal-table td{padding:10px 12px;border-bottom:1px solid #f1f5f9;color:#374151}
.portal-table tr:hover td{background:#f8fafc}

/* Buttons */
.btn{display:inline-flex;align-items:center;gap:4px;padding:8px 16px;border-radius:8px;font-size:13px;cursor:pointer;border:none;transition:all .15s}
.btn-primary{background:#1a56db;color:#fff}
.btn-primary:hover{background:#1849c4}
.btn-success{background:#16a34a;color:#fff}
.btn-success:hover{background:#15803d}
.btn-warning{background:#d97706;color:#fff}
.btn-danger{background:#dc2626;color:#fff}
.btn-outline{background:#fff;border:1px solid #cbd5e1;color:#475569}
.btn-outline:hover{border-color:#1a56db;color:#1a56db}
.btn-sm{padding:5px 10px;font-size:12px}

/* Badges */
.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;font-weight:500}
.badge-success{background:#dcfce7;color:#16a34a}
.badge-warning{background:#fef3c7;color:#d97706}
.badge-danger{background:#fee2e2;color:#dc2626}
.badge-info{background:#dbeafe;color:#2563eb}
.badge-gray{background:#f1f5f9;color:#64748b}

/* Forms */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.form-grid .form-full{grid-column:1/-1}
.form-item{margin-bottom:16px}
.form-item label{display:block;font-size:13px;color:#374151;margin-bottom:6px;font-weight:500}
.form-item input,.form-item select,.form-item textarea{width:100%;height:40px;border:1.5px solid #e2e8f0;border-radius:8px;padding:0 12px;font-size:14px;outline:none;transition:border-color .2s}
.form-item textarea{height:auto;padding:10px 12px;min-height:80px;resize:vertical}
.form-item input:focus,.form-item select:focus,.form-item textarea:focus{border-color:#1a56db;box-shadow:0 0 0 3px rgba(26,86,219,.08)}

/* Empty State */
.empty-state{text-align:center;padding:40px 20px;color:#94a3b8}
.empty-state-icon{font-size:48px;margin-bottom:12px;opacity:.3}
.empty-state-text{font-size:14px}

/* Keyword Tags */
.kw-tag{display:inline-flex;align-items:center;gap:4px;background:#eff6ff;color:#1a56db;padding:4px 10px;border-radius:6px;font-size:12px;margin:2px}
.kw-tag-remove{cursor:pointer;opacity:.5;font-size:14px}
.kw-tag-remove:hover{opacity:1}

/* Diagnosis Result */
.diag-platform{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid #e2e8f0;border-radius:10px;margin-bottom:8px}
.diag-platform-logo{width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;color:#fff}
.diag-platform-info{flex:1}
.diag-platform-name{font-size:14px;font-weight:500;color:#1e293b}
.diag-platform-status{font-size:12px;color:#64748b;margin-top:2px}
.diag-platform-score{font-size:20px;font-weight:700}

/* Article Card */
.article-card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:20px;margin-bottom:12px;transition:box-shadow .2s}
.article-card:hover{box-shadow:0 4px 12px rgba(0,0,0,.06)}
.article-card-title{font-size:15px;font-weight:600;color:#1e293b;margin-bottom:8px}
.article-card-meta{display:flex;gap:16px;font-size:12px;color:#94a3b8;margin-bottom:8px}
.article-card-summary{font-size:13px;color:#64748b;line-height:1.6}

/* Package Card */
.pkg-card{background:#fff;border:2px solid #e2e8f0;border-radius:16px;padding:28px;text-align:center;transition:all .2s;position:relative}
.pkg-card:hover{border-color:#1a56db;transform:translateY(-2px)}
.pkg-card.featured{border-color:#1a56db}
.pkg-card.featured::before{content:'推荐';position:absolute;top:-10px;left:50%;transform:translateX(-50%);background:#1a56db;color:#fff;font-size:12px;padding:2px 12px;border-radius:10px}
.pkg-card-name{font-size:18px;font-weight:600;color:#1e293b;margin-bottom:8px}
.pkg-card-price{font-size:36px;font-weight:700;color:#1a56db;margin:12px 0}
.pkg-card-price small{font-size:14px;font-weight:400;color:#64748b}
.pkg-card-features{text-align:left;margin:16px 0}
.pkg-card-features li{padding:6px 0;font-size:13px;color:#475569;display:flex;align-items:center;gap:8px}
.pkg-card-features li::before{content:'✓';color:#16a34a;font-weight:700}
.pkg-card-btn{width:100%;padding:10px;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;border:none;transition:all .15s}
.pkg-card-btn.primary{background:#1a56db;color:#fff}
.pkg-card-btn.primary:hover{background:#1849c4}
.pkg-card-btn.outline{background:#fff;border:1.5px solid #cbd5e1;color:#475569}
.pkg-card-btn.outline:hover{border-color:#1a56db;color:#1a56db}

/* Pagination */
.portal-pagination{display:flex;justify-content:center;gap:4px;padding:20px 0}
.portal-pagination a,.portal-pagination span{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:32px;border-radius:6px;font-size:13px;color:#475569;padding:0 8px}
.portal-pagination a:hover{background:#f1f5f9}
.portal-pagination .current{background:#1a56db;color:#fff}

/* ========== Dashboard v2 — 整合版数据大屏 ========== */
:root {
  --primary: #6366f1;
  --primary-light: #818cf8;
  --green: #10b981;
  --orange: #f59e0b;
  --red: #ef4444;
  --purple: #8b5cf6;
}

/* 顶部通知横幅 */
.dash-notice {
  display: flex; align-items: center; gap: 12px;
  background: linear-gradient(135deg, #eff6ff 0%, #faf5ff 50%, #fef3c7 100%);
  border: 1px solid #e0e7ff; border-radius: 12px;
  padding: 12px 20px; margin-bottom: 20px; font-size: 13px; color: #475569;
}
.dash-notice-icon { font-size: 18px; flex-shrink: 0; }
.dash-notice-text { flex: 1; line-height: 1.5; }
.dash-notice-badge { background: rgba(255,255,255,.7); padding: 4px 14px; border-radius: 20px; font-size: 12px; white-space: nowrap; }

/* 统计卡片升级 */
.stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 24px; }
.stat-card { background: #fff; border-radius: 16px; padding: 22px; border: 1px solid #e2e8f0; transition: all .25s; position: relative; overflow: hidden; }
.stat-card:hover { transform: translateY(-3px); box-shadow: 0 12px 28px rgba(0,0,0,.08); }
.stat-card::before { content:''; position: absolute; top: 0; left: 0; right: 0; height: 3px; }
.stat-card--balance::before { background: linear-gradient(90deg, #10b981, #34d399); }
.stat-card--keyword::before { background: linear-gradient(90deg, #6366f1, #a5b4fc); }
.stat-card--article::before { background: linear-gradient(90deg, #8b5cf6, #c084fc); }
.stat-card--diagnose::before { background: linear-gradient(90deg, #f59e0b, #fbbf24); }

.stat-card__top { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }
.stat-card__icon { width: 36px; height: 36px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 17px; flex-shrink: 0; }
.stat-card__icon--green { background: #ecfdf5; }
.stat-card__icon--blue { background: #eef2ff; }
.stat-card__icon--purple { background: #f5f3ff; }
.stat-card__icon--orange { background: #fffbeb; }
.stat-card__label { font-size: 13px; color: #64748b; font-weight: 500; }
.stat-card__value { font-size: 30px; font-weight: 700; color: #1e293b; margin-bottom: 4px; letter-spacing: -0.5px; }
.stat-card__value small { font-size: 14px; color: #94a3b8; font-weight: 400; margin-left: 2px; }
.stat-card__sub { font-size: 12px; color: #94a3b8; }

/* 快捷功能入口（4卡片） */
.quick-entry-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 24px; }
.quick-card { display: block; background: #fff; border-radius: 16px; padding: 20px; border: 1px solid #e2e8f0; transition: all .25s; position: relative; overflow: hidden; text-decoration: none; }
.quick-card:hover { transform: translateY(-4px); box-shadow: 0 14px 32px rgba(0,0,0,.09); border-color: transparent; }
.quick-card__badge { position: absolute; top: 12px; right: 12px; color: #fff; font-size: 11px; font-weight: 600; padding: 3px 10px; border-radius: 20px; }
.quick-card__icon { font-size: 32px; margin-bottom: 10px; }
.quick-card__title { font-size: 15px; font-weight: 700; color: #1e293b; margin-bottom: 6px; }
.quick-card__desc { font-size: 12.5px; color: #64748b; line-height: 1.65; margin-bottom: 12px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.quick-card__action { font-size: 13px; font-weight: 600; color: var(--primary); }
.quick-card__action span { display: inline-block; padding: 4px 14px; background: #eef2ff; border-radius: 20px; transition: background .2s; }
.quick-card:hover .quick-card__action span { background: var(--primary); color: #fff; }

/* 图表区域 */
.chart-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 24px; }
.chart-panel--full { grid-column: 1 / -1; }
.panel-header__dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 8px; vertical-align: middle; }
.panel-header__sub { font-size: 12px; color: #94a3b8; font-weight: 400; margin-left: 8px; }

/* 双图表并排（饼图+条形图） */
.dual-chart-wrap { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.dual-chart__left, .dual-chart__right { min-width: 0; }

/* 右侧快捷导航栏 */
.side-nav-bar { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 24px; }
.side-card { background: #fff; border-radius: 14px; padding: 18px; border: 1px solid #e2e8f0; text-align: center; transition: all .2s; text-decoration: none; display: block; }
.side-card:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(0,0,0,.06); }
.side-card--balance { background: linear-gradient(135deg, #ecfdf5 0%, #f0fdf4 100%); border-color: #bbf7d0; }
.side-card__icon { font-size: 26px; margin-bottom: 6px; }
.side-card__title { font-size: 15px; font-weight: 700; color: #1e293b; margin-bottom: 2px; }
.side-card__value { font-size: 20px; font-weight: 700; color: #15803d; }
.side-card__sub { font-size: 12px; color: #64748b; }

/* 底部双栏：最近动态 + 操作流程 */
.bottom-grid { display: grid; grid-template-columns: 1.4fr 1fr; gap: 16px; margin-bottom: 24px; }
.bottom-panel { margin-bottom: 0; }

/* 最近动态表格 */
.recent-table tbody tr td:first-child { padding-left: 20px; }
.recent-table tbody tr td:last-child { padding-right: 20px; }

/* 操作流程步骤 */
.flow-steps { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.flow-step { text-align: center; flex: 1; }
.flow-step__num { width: 32px; height: 32px; border-radius: 50%; background: linear-gradient(135deg, var(--primary), var(--primary-light)); color: #fff; font-size: 14px; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; margin-bottom: 8px; }
.flow-step__title { font-size: 13px; font-weight: 600; color: #1e293b; margin-bottom: 4px; }
.flow-step__link { font-size: 12px; color: var(--primary); font-weight: 500; }
.flow-step__link:hover { text-decoration: underline; }
.flow-step__arrow { color: #cbd5e1; font-size: 18px; margin-top: 20px; flex-shrink: 0; }

/* 响应式 */
@media(max-width:1200px){
  .quick-entry-row { grid-template-columns: repeat(2, 1fr); }
  .side-nav-bar { grid-template-columns: repeat(2, 1fr); }
}
@media(max-width:768px){
  .stat-grid { grid-template-columns: repeat(2, 1fr); }
  .chart-grid { grid-template-columns: 1fr; }
  .chart-panel--full { grid-column: auto; }
  .dual-chart-wrap { grid-template-columns: 1fr; }
  .quick-entry-row { grid-template-columns: 1fr; }
  .side-nav-bar { grid-template-columns: repeat(2, 1fr); }
  .bottom-grid { grid-template-columns: 1fr; }
  .flow-steps { flex-direction: column; align-items: center; }
  .flow-step__arrow { transform: rotate(90deg); margin-top: 4px; margin-bottom: 4px; }
}

/* Responsive */
@media(max-width:768px){
  .stat-grid{grid-template-columns:repeat(2,1fr)}
  .portal-sidebar{display:none}
  .form-grid{grid-template-columns:1fr}
  .auth-wrap{flex-direction:column;width:90%}
  .auth-left{display:none}
}

/* ========== Layui 全局样式覆盖（防止干扰 Portal 全屏布局） ========== */
.portal-body .layui-container,
.portal-body .layui-fluid,
.portal-layout .layui-container,
.portal-layout .layui-fluid{width:100%!important;max-width:none!important;margin:0!important;padding:0!important}
.portal-layout{width:100%!important;max-width:none!important}
.portal-container{width:100%!important;max-width:none!important}
