:root{--bg:#fff;--card:#fff;--text:#1a1a1a;--muted:#999;--line:#e8e8e8;--accent:#1a1a1a;--accent-soft:#f5f5f5;--green:#116423;--header-h:128px;--tabs-h:56px;--radius:8px;--shadow:0 1px 3px #0000000f}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--text);margin:0;font-family:PingFang SC,Microsoft YaHei,Hiragino Sans GB,system-ui,-apple-system,sans-serif;line-height:1.6}a{color:var(--text);text-decoration:none}a:hover{text-decoration:underline}.site-header{z-index:10;border-bottom:1px solid var(--line);background:#fff;flex-direction:column;align-items:center;gap:10px;padding:16px 24px 12px;display:flex;position:sticky;top:0}.site-brand{align-items:center;gap:12px;text-decoration:none;display:flex}.site-brand:hover{text-decoration:none}.site-logo{width:auto;height:56px}.site-title{color:var(--text);letter-spacing:2px;font-size:20px;font-weight:800}.site-nav{flex-wrap:wrap;justify-content:center;gap:2px;display:flex}.nav-link{color:var(--muted);border-radius:6px;padding:6px 14px;font-size:14px}.nav-link:hover{background:var(--accent-soft);color:var(--text);text-decoration:none}.nav-link.active,.nav-link.active:hover{background:var(--green);color:#fff}.site-main{max-width:1080px;margin:0 auto;padding:32px 16px 48px}.site-footer{text-align:center;max-width:1080px;color:var(--muted);border-top:1px solid var(--line);margin:0 auto;padding:20px 16px;font-size:12px}h1{margin:8px 0;font-size:24px;font-weight:700}h2{border-left:4px solid var(--green);margin:32px 0 12px;padding-left:10px;font-size:18px;font-weight:700}h3{margin:20px 0 8px;font-size:15px;font-weight:700}.empty{color:var(--muted);background:var(--accent-soft);border:1px dashed var(--line);border-radius:var(--radius);padding:16px}.table-wrap{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:16px;overflow-x:auto}.team-table{max-width:720px;margin:0 auto 16px}.player-table{max-width:1000px;margin:0 auto 16px}table{border-collapse:collapse;white-space:nowrap;width:100%;font-size:14px}th,td{text-align:center;border-bottom:1px solid var(--line);padding:6px 10px}thead th{background:var(--accent-soft);font-size:13px;font-weight:700}tbody tr:hover{background:#fafafa}tr[data-href]{cursor:pointer}td.rank{width:50px}.col-rank-t{font-size:16px;font-weight:700}td.rank-safe{color:var(--text);background:#eaf0f8}td.rank-bubble{color:var(--text);background:#fff3e6}td.rank-out{color:#c00;background:#fff}td.team-col{font-weight:700}tr.sep td{border-top:2px solid #c00}.col-pts{background:#fff5ec;width:16%;position:relative}.col-pts-p{background:#fff5ec;width:8.7%}.col-diff{width:4%}.col-avg{width:4.5%}.avg-short{display:none}.col-rank-p{font-variant-numeric:tabular-nums;font-size:14px;font-weight:400}.neg{color:#c00}.pts-val{font-size:16px;font-weight:700}.pts-val.neg{color:#c00}.penalty{color:#c00;font-weight:700}.pts-label{color:var(--text);font-size:10px;font-weight:700;line-height:1;position:absolute;bottom:2px;right:4px}td.raw{font-style:italic}.col-games{width:6%}.games-num{font-weight:700}.games-total{color:var(--muted);vertical-align:super;font-size:9px}.col-w{width:3.5%}.alumni-grid{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);grid-template-columns:repeat(8,1fr);gap:8px;margin-bottom:16px;padding:16px;display:grid}.alumni-chip{background:var(--accent-soft);min-width:0;color:var(--text);box-shadow:none;text-align:center;aspect-ratio:1.618;border-radius:8px;justify-content:center;align-items:center;padding:8px 4px;font-size:14px;font-weight:700;text-decoration:none;transition:box-shadow .15s;display:flex}.alumni-chip:hover{box-shadow:0 2px 12px var(--tc,#0000001f);text-decoration:none}td.num{font-variant-numeric:tabular-nums}.as-of{text-align:right;color:var(--text);margin-top:-6px;font-size:15px;font-weight:700}.as-of-team{max-width:720px;margin:-6px auto 0}.as-of-player{max-width:1000px;margin:-6px auto 0}.advance-note{color:var(--muted);margin-top:-6px;font-size:13px}.honors{color:var(--muted);margin-left:8px;font-size:12px}.stage-tabs{top:var(--header-h);z-index:5;background:var(--bg);gap:8px;margin:0;padding:12px 0;display:flex;position:sticky}.stage-tab{cursor:pointer;color:var(--text);background:0 0;border:none;border-radius:8px;padding:8px 16px;font-size:14px;font-weight:700}.stage-tab.active{background:var(--green);color:#fff}.stage-panel{display:none}.stage-panel.active{display:block}.az-layout{grid-template-columns:44px 1fr;align-items:start;gap:16px;display:grid}.az-layout>*{min-width:0}.az-nav{top:calc(var(--header-h) + var(--tabs-h));flex-direction:column;gap:2px;display:flex;position:sticky}.az-link{width:28px;height:28px;color:var(--text);border-radius:50%;justify-content:center;align-items:center;font-size:13px;font-weight:700;text-decoration:none;display:flex}.az-link:hover{background:var(--accent-soft);text-decoration:none}.az-link.active{background:var(--green);color:#fff}.az-link.month-link{border-radius:14px;width:auto;min-width:52px;height:28px;padding:0 8px;font-size:12px}.nav-toggle{display:none}.team-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:20px;padding:20px}.game-card{background:var(--card);border-radius:var(--radius);max-width:780px;margin:0 auto;padding:8px 20px 16px}.team-card h2{border:none;align-items:center;gap:10px;margin:0 0 12px;padding:0;font-size:16px;display:flex}.game-card h2{margin:0 0 12px}.team-dot{border-radius:3px;width:12px;height:12px;display:inline-block}.player-grid{grid-template-columns:repeat(4,1fr);gap:12px;margin-top:10px;display:grid}.player-chip{background:var(--accent-soft);min-width:0;color:var(--text);box-shadow:none;aspect-ratio:1.618;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;padding:20px 14px;font-size:28px;font-weight:700;text-decoration:none;transition:box-shadow .15s;display:flex}.player-chip:hover{box-shadow:0 4px 20px var(--tc,#0000001f);text-decoration:none}.player-name{line-height:1.3}.captain-tag{color:var(--muted);margin-top:6px;font-size:13px}.news-list{padding:0;list-style:none}.news-list li{border-bottom:1px solid var(--line);padding:10px 0}.news-list time{color:var(--muted);margin-right:12px;font-size:13px}.charter-layout{grid-template-columns:220px 1fr;gap:24px;display:grid}.charter-nav{top:var(--header-h);background:var(--card);border:1px solid var(--line);border-radius:var(--radius);align-self:start;padding:12px;position:sticky}.charter-nav a{color:var(--text);border-radius:4px;padding:4px 8px;font-size:13px;display:block}.charter-nav a:hover{background:var(--accent-soft);text-decoration:none}.charter-block{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:16px;padding:16px 20px}.charter-block h2{border:none;margin-top:0;padding-left:0}.charter-block p{margin:8px 0}@media (width<=720px){.charter-layout{grid-template-columns:1fr}.charter-nav{position:static}}html{scroll-padding-top:45vh}.player-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);max-width:100%;margin-bottom:16px;padding:12px 16px}.player-card h3{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 8px;display:flex}.cur-season td{border-top:2px solid var(--green);background:#eaf6ee}.final-rank{margin:8px 0;padding-left:20px}.news-meta{color:var(--muted);margin:4px 0 8px;font-size:13px}.news-body{white-space:pre-wrap;word-break:break-word;line-height:1.7}.back-link{margin-bottom:12px}.back-link a{color:var(--accent);text-decoration:none}.back-link a:hover{text-decoration:underline}.game-players{grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:12px;display:grid}.game-player{border:1px solid #ccc;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:2px;padding:10px;font-weight:700;line-height:1.3;display:flex;position:relative}.gp-team{opacity:.9;font-size:14px;position:absolute;top:6px;left:8px}.gp-seat{opacity:.85;font-size:11px}.gp-name,.gp-pts{font-size:18px}.gp-rank{opacity:.9;font-size:12px}@media (width<=720px){.game-players,.player-grid{grid-template-columns:repeat(2,1fr)}.alumni-grid{grid-template-columns:repeat(4,1fr)}.player-chip{font-size:20px}.player-name{white-space:nowrap}.avg-full{display:none}.avg-short{display:inline}.charter-block{scroll-margin-top:calc(175px - 45vh)}.stage-tabs{top:175px}.az-layout{grid-template-columns:1fr}.nav-toggle{z-index:30;background:var(--green);color:#fff;cursor:pointer;border:none;border-radius:50%;justify-content:center;align-items:center;width:46px;height:46px;font-size:18px;display:flex;position:fixed;bottom:20px;right:16px;box-shadow:0 2px 10px #00000040}.az-nav{z-index:30;border:1px solid var(--line);background:#fff;border-radius:10px;flex-direction:column;gap:2px;max-height:50vh;padding:10px;display:none;position:fixed;bottom:80px;left:auto;right:12px;overflow-y:auto;box-shadow:0 4px 16px #00000026}.az-nav.open{display:flex}}.future-layout{min-width:0}.future-layout.has-guide{grid-template-columns:64px 1fr;align-items:start;gap:16px;display:grid}.month-groups{min-width:0}.month-group{margin-bottom:24px}.month-group h2{margin:0 0 12px}.future-row{justify-content:center;align-items:center;gap:16px;margin-bottom:16px;display:flex}.future-meta{text-align:left;color:var(--text);white-space:nowrap;flex-shrink:0;font-size:14px;font-weight:700}.fm-date{text-align:center;width:84px;display:inline-block}.fm-time{text-align:center;width:84px;color:var(--muted);font-size:14px;font-weight:400}.fm-subrow{align-items:center;display:flex}.fm-live{color:var(--muted);white-space:nowrap;padding-left:6px;font-size:14px;font-weight:400}.future-seats{gap:10px;display:flex}.future-seat{aspect-ratio:1.618;border:1px solid #ccc;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:2px;width:108px;min-width:0;font-weight:700;line-height:1.3;display:flex}.fs-seat{opacity:.6;font-size:12px}.fs-team{font-size:22px}.fs-player{opacity:.9;font-size:13px;font-weight:600}.month-layout{grid-template-columns:64px 1fr;align-items:start;gap:16px;display:grid}@media (width<=720px){.future-layout.has-guide,.month-layout{grid-template-columns:1fr}.future-row{flex-direction:column;align-items:center}.future-meta{text-align:left;width:fit-content}.future-seats{width:100%}.future-seat{flex:1;width:auto;min-width:0}.fs-seat{font-size:11px}.fs-team{font-size:18px}.fs-player{font-size:12px}.team-sep{display:none}.team-table th:first-child,.team-table td:first-child,.team-table th:nth-child(2),.team-table td:nth-child(2),.player-table th:first-child,.player-table td:first-child,.player-table th:nth-child(2),.player-table td:nth-child(2),.player-table th:nth-child(3),.player-table td:nth-child(3),.history-table th:first-child,.history-table td:first-child,.history-table th:nth-child(2),.history-table td:nth-child(2){z-index:1;position:sticky}.team-table thead th:nth-child(-n+2),.player-table thead th:nth-child(-n+3),.history-table thead th:nth-child(-n+2){z-index:2}.team-table th:first-child,.team-table td:first-child{width:50px;min-width:50px;left:0}.team-table th:nth-child(2),.team-table td:nth-child(2){width:70px;min-width:70px;left:50px}.player-table table{table-layout:fixed;width:767px}.player-table th:first-child,.player-table td:first-child{width:36px;min-width:36px;left:0}.player-table th:nth-child(2),.player-table td:nth-child(2){width:45px;min-width:45px;left:36px}.player-table th:nth-child(3),.player-table td:nth-child(3){background:var(--card);width:90px;min-width:90px;left:81px}.player-table thead th:nth-child(4){width:70px}.player-table thead th:nth-child(5){width:60px}.player-table thead th:nth-child(6),.player-table thead th:nth-child(7){width:40px}.player-table thead th:nth-child(8){width:50px}.player-table thead th:nth-child(9),.player-table thead th:nth-child(10),.player-table thead th:nth-child(11),.player-table thead th:nth-child(12){width:30px}.player-table thead th:nth-child(13),.player-table thead th:nth-child(14),.player-table thead th:nth-child(15){width:55px}.player-table thead th:nth-child(16){width:60px}.history-table table{table-layout:fixed;width:605px}.history-table th:first-child,.history-table td:first-child{background:var(--card);width:55px;min-width:55px;left:0}.history-table th:nth-child(2),.history-table td:nth-child(2){width:70px;min-width:70px;left:55px}.history-table tr.cur-season td:first-child,.history-table tr.cur-season td:nth-child(2){background:#eaf6ee}.player-table td.col-rank-p,.team-table.stage-决赛 tbody tr:nth-child(2) td.rank,.team-table.stage-决赛 tbody tr:nth-child(3) td.rank,.team-table.stage-决赛 tbody tr:nth-child(4) td.rank{background:#fff}}.admin-shell{min-height:60vh}.admin-nav{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:20px;padding:10px 14px;display:flex}.admin-nav a{color:var(--text);border-radius:6px;padding:6px 12px;font-size:15px}.admin-nav a:hover{background:var(--accent-soft);text-decoration:none}.admin-logout{border:1px solid var(--line);background:var(--card);cursor:pointer;color:var(--text);border-radius:6px;margin-left:auto;padding:6px 14px;font-size:14px}.admin-logout:hover{background:var(--accent);color:#fff}.admin-main{min-width:0}.admin-err{color:#b91c1c;font-size:14px}.admin-links{flex-wrap:wrap;gap:10px;padding:0;list-style:none;display:flex}.admin-links li a{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);color:var(--text);padding:10px 18px;font-size:15px;display:inline-block}.admin-links li a:hover{background:var(--accent-soft);text-decoration:none}.login-wrap{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);max-width:420px;margin:40px auto;padding:24px}.login-form{flex-direction:column;gap:14px;display:flex}.login-form label{flex-direction:column;gap:6px;font-size:14px;display:flex}.login-form input{border:1px solid var(--line);border-radius:6px;padding:10px 12px;font-size:15px}.login-form button{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;padding:12px;font-size:16px}.login-err{color:#b91c1c;min-height:20px;font-size:14px}.ann-form,.team-form,.game-form{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px;padding:14px;display:flex}.ann-form input,.team-form input,.game-form input,.ann-form select,.team-form select,.game-form select,.ann-form textarea,.team-form textarea{border:1px solid var(--line);border-radius:6px;padding:8px 10px;font-size:14px}.ann-form textarea{min-width:240px}.ann-form button,.team-form button,.game-form button{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;padding:9px 18px;font-size:14px}.ann-table{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.ann-table button{border:1px solid var(--line);background:var(--card);cursor:pointer;border-radius:4px;margin-right:4px;padding:4px 10px;font-size:13px}.captain-shell{max-width:720px}.cap-game{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:12px;padding:14px}.cap-meta{margin-bottom:8px;font-size:15px;font-weight:700}.cap-game select{border:1px solid var(--line);border-radius:6px;min-width:160px;padding:8px 10px;font-size:14px}.captain-shell>button{border:1px solid var(--line);background:var(--card);cursor:pointer;border-radius:6px;margin-top:12px;padding:10px 18px;font-size:14px}
