*{box-sizing:border-box}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#333;background:#f5f7fa;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}h1,h2,h3,h4,h5,h6{color:#1a1a2e}a{color:inherit;text-decoration:none}button{cursor:pointer;font-family:inherit}.layout{background:#f5f7fa;flex-direction:column;min-height:100vh;display:flex}.header{color:#fff;z-index:100;background:#1a1a2e;position:sticky;top:0;box-shadow:0 2px 8px #00000026}.header-inner{align-items:center;gap:32px;max-width:1200px;height:60px;margin:0 auto;padding:0 24px;display:flex}.logo{color:#fff;white-space:nowrap;font-size:20px;font-weight:700;text-decoration:none}.nav{flex:1;gap:4px;display:flex}.nav a{color:#ffffffb3;border-radius:6px;padding:8px 16px;font-size:15px;text-decoration:none;transition:all .2s}.nav a:hover{color:#fff;background:#ffffff1a}.nav a.active{color:#fff;background:#e63946}.user-area{align-items:center;gap:10px;margin-left:auto;display:flex}.user-name{color:#ffffffd9;background:#ffffff1a;border-radius:20px;padding:6px 12px;font-size:14px}.logout-btn{color:#ffffffb3;cursor:pointer;background:0 0;border:1px solid #ffffff4d;border-radius:4px;padding:5px 12px;font-size:13px;transition:all .2s}.logout-btn:hover{color:#fff;border-color:#fff}.auth-link{color:#ffffffd9;border-radius:6px;padding:6px 14px;font-size:14px;text-decoration:none;transition:all .2s}.auth-link:hover{color:#fff;background:#ffffff1a}.auth-link.register-link{color:#fff;background:#e63946}.auth-link.register-link:hover{background:#c62828}.main{flex:1;width:100%;max-width:1200px;margin:0 auto;padding:24px}.footer{text-align:center;color:#999;background:#fff;border-top:1px solid #e8e8e8;padding:20px;font-size:13px}@media (width<=768px){.header-inner{gap:16px;padding:0 16px}.nav a{padding:6px 10px;font-size:14px}.main{padding:16px}}.home{flex-direction:column;gap:24px;display:flex}.stats-overview{grid-template-columns:repeat(4,1fr);gap:16px;display:grid}.stat-card{text-align:center;background:#fff;border-radius:12px;padding:20px;box-shadow:0 2px 8px #0000000f}.stat-card.highlight{color:#fff;background:linear-gradient(135deg,#e63946,#ff6b6b)}.stat-value{margin-bottom:4px;font-size:28px;font-weight:700}.stat-label{opacity:.8;font-size:13px}.recent-form{background:#fff;border-radius:12px;padding:20px;box-shadow:0 2px 8px #0000000f}.recent-form h3{color:#333;margin:0 0 12px;font-size:15px}.form-dots{gap:8px;display:flex}.dot{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:36px;height:36px;font-size:12px;font-weight:600;display:flex}.dot.hit{background:#e63946}.dot.miss{background:#333}.section{background:#fff;border-radius:12px;padding:20px;box-shadow:0 2px 8px #0000000f}.section-header{align-items:center;gap:12px;margin-bottom:16px;display:flex}.section-header h2{color:#1a1a2e;margin:0;font-size:18px}.badge{color:#fff;background:#e63946;border-radius:10px;padding:2px 8px;font-size:12px}.prediction-cards{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;display:grid}.prediction-card{border:1px solid #eee;border-radius:10px;padding:16px;transition:box-shadow .2s}.prediction-card:hover{box-shadow:0 4px 12px #0000001a}.match-league{color:#888;margin-bottom:8px;font-size:12px}.match-teams{align-items:center;gap:8px;margin-bottom:6px;display:flex}.match-teams .team{color:#1a1a2e;font-size:15px;font-weight:600}.match-teams .vs{color:#ccc;font-size:12px}.match-time{color:#999;margin-bottom:12px;font-size:13px}.prediction-info{border-top:1px solid #f0f0f0;align-items:center;gap:12px;padding-top:12px;display:flex}.predict-result{color:#fff;background:#e63946;border-radius:4px;padding:3px 10px;font-size:13px;font-weight:600}.confidence{color:#666;font-size:13px}.odds{color:#e63946;font-size:13px;font-weight:600}.match-list-compact{flex-direction:column;gap:4px;display:flex}.match-row-compact{background:#fafafa;border-radius:6px;align-items:center;gap:12px;padding:10px 12px;font-size:13px;display:flex}.match-row-compact:hover{background:#f0f0f0}.match-row-compact .code{color:#666;min-width:60px;font-weight:500}.league-tag-sm{color:#fff;white-space:nowrap;border-radius:3px;padding:1px 6px;font-size:11px}.match-row-compact .team-home{color:#1a1a2e;text-align:right;min-width:70px;font-weight:600}.match-row-compact .vs-sm{color:#ccc;font-size:12px}.match-row-compact .team-away{color:#1a1a2e;min-width:70px;font-weight:600}.match-row-compact .time-sm{color:#999;margin-left:auto}.match-row-compact .odds-sm{color:#666;text-align:right;min-width:120px;font-size:12px}@media (width<=768px){.stats-overview{grid-template-columns:repeat(2,1fr)}.prediction-cards{grid-template-columns:1fr}}.matches-page{flex-direction:column;gap:20px;display:flex}.page-tabs{border-bottom:2px solid #eee;gap:0;display:flex}.tab-btn{color:#666;cursor:pointer;background:0 0;border:none;padding:14px 28px;font-size:16px;font-weight:600;transition:color .2s;position:relative}.tab-btn:hover,.tab-btn.active{color:#e63946}.tab-btn.active:after{content:"";background:#e63946;height:2px;position:absolute;bottom:-2px;left:0;right:0}.filter-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;display:flex}.filter-left{align-items:center;gap:14px;display:flex}.time-tabs{border:1px solid #ddd;border-radius:6px;gap:0;display:flex;overflow:hidden}.time-tab{color:#666;cursor:pointer;background:#fff;border:none;padding:8px 18px;font-size:14px;transition:all .2s}.time-tab:first-child{border-right:1px solid #ddd}.time-tab:hover{color:#e63946}.time-tab.active{color:#fff;background:#e63946}.league-filter{position:relative}.league-filter-btn{color:#333;cursor:pointer;background:#fff;border:1px solid #ddd;border-radius:6px;align-items:center;gap:6px;padding:8px 16px;font-size:14px;transition:border-color .2s;display:flex}.league-filter-btn:hover,.league-filter-btn.open{color:#e63946;border-color:#e63946}.filter-count{color:#fff;background:#e63946;border-radius:9px;justify-content:center;align-items:center;min-width:18px;height:18px;padding:0 5px;font-size:11px;display:inline-flex}.league-panel{z-index:200;background:#fff;border:1px solid #eee;border-radius:10px;min-width:500px;padding:20px;position:absolute;top:calc(100% + 8px);left:0;box-shadow:0 8px 24px #0000001f}.league-panel-grid{grid-template-columns:repeat(3,1fr);gap:14px 28px;margin-bottom:18px;display:grid}.league-checkbox{cursor:pointer;color:#333;align-items:center;gap:8px;font-size:14px;display:flex}.league-checkbox input[type=checkbox]{display:none}.checkbox-custom{border:2px solid #ddd;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;width:18px;height:18px;transition:all .15s;display:flex}.league-checkbox input:checked+.checkbox-custom{background:#e63946;border-color:#e63946}.league-checkbox input:checked+.checkbox-custom:after{content:"✓";color:#fff;font-size:12px;font-weight:700}.league-name{white-space:nowrap}.league-panel-footer{border-top:1px solid #f0f0f0;justify-content:center;align-items:center;gap:16px;padding-top:14px;display:flex}.panel-action{color:#666;cursor:pointer;background:0 0;border:none;padding:6px 20px;font-size:14px}.panel-action:hover{color:#333}.panel-confirm{color:#e63946;cursor:pointer;background:#fff;border:1px solid #e63946;border-radius:4px;margin-left:auto;padding:6px 24px;font-size:14px;transition:all .2s}.panel-confirm:hover{color:#fff;background:#e63946}.filter-right{align-items:center;display:flex}.search-box{align-items:center;display:flex;position:relative}.search-box input{color:#333;background:#fff;border:1px solid #ddd;border-radius:6px;width:260px;padding:8px 36px 8px 14px;font-size:14px}.search-box input::placeholder{color:#bbb}.search-icon{color:#999;font-size:14px;position:absolute;right:12px}.matches-table-wrapper{background:#fff;border-radius:12px;overflow-x:auto;box-shadow:0 2px 8px #0000000f}.table-legend{color:#555;border-bottom:1px solid #f0f0f0;align-items:center;gap:24px;padding:14px 20px;font-size:13px;display:flex}.legend-item{align-items:center;gap:6px;display:flex}.legend-dot{border-radius:3px;width:14px;height:14px}.legend-dot.wen-dan{background:#fef2f2;border:2px solid #e63946}.legend-dot.dan{background:#fffbeb;border:2px solid #f59e0b}.legend-dot.picked{background:#fef2f2;border:2px solid #e63946;position:relative}.legend-dot.picked:after{content:"";background:#e63946;border-radius:1px;position:absolute;inset:2px}.matches-table{border-collapse:collapse;table-layout:fixed;width:100%;min-width:1000px;font-size:14px}.matches-table thead th{text-align:center;color:#555;white-space:nowrap;background:#fafafa;border-bottom:1px solid #eee;padding:14px 10px;font-size:14px;font-weight:600}.matches-table thead th.col-tip{width:60px}.matches-table thead th.col-code{width:80px}.matches-table thead th.col-league{width:60px}.matches-table thead th.col-time{width:85px}.matches-table thead th.col-teams{width:280px}.matches-table thead th.col-handicap{width:50px}.matches-table thead th.col-odds,.matches-table thead th.col-probability{width:65px}.matches-table tbody td{text-align:center;vertical-align:middle;padding:10px;font-size:14px}.date-group-row td{color:#333;cursor:pointer;-webkit-user-select:none;user-select:none;background:#f8f9fa;border-top:1px solid #eee;font-size:14px;text-align:left!important;padding:12px 20px!important}.date-group-row:hover td{background:#f0f1f3}.date-label{color:#1a73e8;font-weight:600}.collapse-btn{color:#1a73e8;margin-left:14px;font-size:13px}.collapse-btn.collapsed{color:#666}.match-row-top td{border-top:1px solid #eee;padding-top:14px}.match-row-bottom td{padding-bottom:14px}.col-code{color:#333;font-size:13px;font-weight:500}.col-league .league-tag{color:#fff;border-radius:3px;padding:3px 8px;font-size:12px;display:inline-block}.col-time{color:#666;white-space:nowrap;font-size:13px}.col-teams{text-align:left!important}.teams-cell{border-radius:6px;padding:6px 8px;position:relative}.teams-cell.dan-mark{background:#fffbeb;border:2px solid #f59e0b}.teams-cell.wen-dan-mark{background:#fef2f2;border:2px solid #e63946}.teams-display{align-items:center;gap:6px;font-size:15px;display:flex}.teams-display .rank{color:#999;font-size:12px}.teams-display .team-name{color:#1a1a2e;font-weight:600}.teams-display .vs-text{color:#999;margin:0 6px;font-size:13px}.handicap-val{color:#666;min-width:28px;font-size:14px;font-weight:600;display:inline-block}.handicap-val.has-val{color:#e63946}.col-odds{color:#333;font-size:14px;font-weight:500}.col-odds.odds-picked{color:#e63946;background:#fef2f2;font-weight:700}.col-probability{color:#e63946;font-size:15px;font-weight:700}.col-tip{width:60px}.recommend-tag{color:#fff;background:#e63946;border-radius:3px;padding:3px 8px;font-size:12px;font-weight:600;display:inline-block}.empty{text-align:center;color:#999;padding:80px 20px;font-size:16px}@media (width<=768px){.filter-bar{flex-direction:column;align-items:stretch}.filter-left,.filter-right,.search-box input{width:100%}.league-panel{min-width:320px}.league-panel-grid{grid-template-columns:repeat(2,1fr)}}.predictions-page h1{color:#1a1a2e;margin:0 0 8px;font-size:22px}.page-desc{color:#666;margin:0 0 24px;font-size:14px}.predictions-table-wrapper{background:#fff;border-radius:12px;overflow-x:auto;box-shadow:0 2px 8px #0000000f}.predictions-table{border-collapse:collapse;width:100%;font-size:14px}.predictions-table th{text-align:left;color:#666;white-space:nowrap;background:#fafafa;border-bottom:1px solid #eee;padding:12px 16px;font-size:13px;font-weight:600}.predictions-table td{vertical-align:middle;border-bottom:1px solid #f5f5f5;padding:14px 16px}.predictions-table tr:last-child td{border-bottom:none}.predictions-table tr:hover td{background:#fafafa}.league-badge{color:#fff;background:#1a1a2e;border-radius:4px;padding:2px 8px;font-size:12px}.match-cell{color:#1a1a2e;white-space:nowrap;font-weight:500}.time-cell{color:#999;white-space:nowrap;font-size:13px}.result-badge{color:#fff;background:#e63946;border-radius:4px;padding:3px 10px;font-size:12px;font-weight:600}.confidence-bar{align-items:center;gap:8px;min-width:100px;display:flex}.confidence-bar span{color:#666;white-space:nowrap;font-size:13px}.confidence-fill{background:linear-gradient(90deg,#e63946,#ff6b6b);border-radius:3px;flex:1;max-width:60px;height:6px}.odds-cell{color:#e63946;font-weight:600}.hit-tag{border-radius:4px;padding:3px 8px;font-size:12px;font-weight:500}.hit-tag.hit-0{color:#999;background:#f5f5f5}.hit-tag.hit-1{color:#2e7d32;background:#e8f5e9}.hit-tag.hit-2{color:#c62828;background:#fbe9e7}@media (width<=768px){.predictions-table-wrapper{border-radius:8px}.predictions-table th,.predictions-table td{padding:10px 12px}}.recommends-page h1{color:#1a1a2e;margin:0 0 4px;font-size:22px}.recommends-header{justify-content:space-between;align-items:flex-start;margin-bottom:24px;display:flex}.btn-publish{color:#fff;cursor:pointer;background:#e63946;border:none;border-radius:8px;padding:10px 20px;font-size:14px;font-weight:600;transition:background .2s}.btn-publish:hover{background:#c62828}.recommend-list{flex-direction:column;gap:16px;display:flex}.recommend-card{background:#fff;border-radius:12px;padding:20px;box-shadow:0 2px 8px #0000000f}.recommend-top{justify-content:space-between;align-items:center;margin-bottom:14px;display:flex}.author{align-items:center;gap:10px;display:flex}.avatar{color:#fff;background:linear-gradient(135deg,#e63946,#ff6b6b);border-radius:50%;justify-content:center;align-items:center;width:36px;height:36px;font-size:14px;font-weight:600;display:flex}.author-info{flex-direction:column;display:flex}.author-name{color:#1a1a2e;font-size:14px;font-weight:600}.publish-time{color:#999;font-size:12px}.hit-status{border-radius:4px;padding:4px 10px;font-size:12px;font-weight:500}.hit-status.hit-0{color:#999;background:#f5f5f5}.hit-status.hit-1{color:#2e7d32;background:#e8f5e9}.hit-status.hit-2{color:#c62828;background:#fbe9e7}.recommend-match{background:#f8f9fa;border-radius:8px;align-items:center;gap:10px;margin-bottom:12px;padding:10px 14px;display:flex}.recommend-match .league-tag{color:#fff;background:#1a1a2e;border-radius:4px;padding:2px 8px;font-size:11px}.recommend-match .match-info{color:#1a1a2e;font-size:14px;font-weight:500}.recommend-match .match-time{color:#999;margin-left:auto;font-size:12px}.recommend-content{color:#444;margin-bottom:14px;font-size:14px;line-height:1.6}.recommend-bottom{border-top:1px solid #f0f0f0;align-items:center;gap:12px;padding-top:12px;display:flex}.predict-tag{color:#fff;background:#e63946;border-radius:4px;padding:4px 12px;font-size:12px;font-weight:600}@media (width<=768px){.recommends-header{flex-direction:column;gap:16px}.recommend-match{flex-wrap:wrap}.recommend-match .match-time{width:100%;margin-left:0}}.auth-page{background:#f5f7fa;justify-content:center;align-items:center;min-height:100vh;padding:20px;display:flex}.auth-card{background:#fff;border-radius:16px;width:100%;max-width:400px;padding:40px;box-shadow:0 4px 24px #00000014}.auth-header{text-align:center;margin-bottom:32px}.auth-header h1{color:#1a1a2e;margin:0 0 8px;font-size:24px}.auth-header p{color:#666;margin:0;font-size:14px}.auth-form{flex-direction:column;gap:18px;display:flex}.auth-error{color:#dc2626;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:10px 14px;font-size:13px}.form-group{flex-direction:column;gap:6px;display:flex}.form-group label{color:#333;font-size:13px;font-weight:600}.form-group input{color:#333;background:#fff;border:1px solid #ddd;border-radius:8px;padding:10px 14px;font-size:14px;transition:border-color .2s}.form-group input:focus{border-color:#e63946;outline:none;box-shadow:0 0 0 3px #e639461a}.form-group input::placeholder{color:#bbb}.auth-btn{color:#fff;cursor:pointer;background:#e63946;border:none;border-radius:8px;margin-top:8px;padding:12px;font-size:15px;font-weight:600;transition:background .2s}.auth-btn:hover:not(:disabled){background:#c62828}.auth-btn:disabled{opacity:.6;cursor:not-allowed}.auth-footer{text-align:center;color:#666;margin-top:24px;font-size:14px}.auth-footer a{color:#e63946;font-weight:500;text-decoration:none}.auth-footer a:hover{text-decoration:underline}
