:root{--bg: #ffffff;--text: #222222;--muted: #666666;--line: #dddddd;--card: #ffffff;--accent: #d03333;--accent-dark: #b02a2a}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,Segoe UI,Microsoft YaHei,PingFang SC,Helvetica Neue,Arial,sans-serif;font-size:15px;line-height:1.6}img{display:block;max-width:100%}button{font:inherit;cursor:pointer}button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.num{font-variant-numeric:tabular-nums}.container{max-width:1024px;margin:0 auto;padding:0 14px}.site-header{border-bottom:1px solid var(--line);background:var(--bg)}.site-header__bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px}.site-header__title{margin:0;font-size:20px;font-weight:700}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--line);background:#fff;color:var(--text);padding:6px 14px;border-radius:4px;font-size:14px}.btn:hover{border-color:var(--muted)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn--primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn--primary:hover{background:var(--accent-dark);border-color:var(--accent-dark)}.btn--vote{background:#fff;border-color:var(--accent);color:var(--accent);padding:3px 10px}.btn--vote:hover:not(:disabled){background:#fbeaea}.btn--block{width:100%}.btn--lg{padding:8px 18px;font-size:15px}.config-banner{margin:12px auto 0;padding:10px 14px;border:1px solid var(--line);border-left:4px solid var(--accent);background:#fff;font-size:13px}.config-banner__title{margin:0 0 4px;font-size:14px;font-weight:700;color:var(--accent)}.config-banner__text{margin:0;color:var(--muted)}.tabs{display:flex;gap:2px;margin:14px 0 0;border-bottom:1px solid var(--line)}.tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;border-bottom:3px solid transparent;padding:8px 14px;font-size:15px;color:var(--muted)}.tab.is-active{color:var(--text);font-weight:700;border-bottom-color:var(--accent)}.tab__count{font-size:13px;color:var(--muted)}.leaderboard{padding:14px 0 0}.section-title{margin:0 0 6px;font-size:15px;font-weight:700}.leaderboard__list{list-style:none;margin:0;padding:0}.leaderboard__row{display:flex;align-items:center;gap:10px;width:100%;padding:8px 6px;border:none;border-bottom:1px dashed var(--line);background:none;color:var(--text);text-align:left;font-size:14px;border-radius:0}.leaderboard__row:last-child{border-bottom:none}.leaderboard__row:hover{background:#f7f7f7}.leaderboard__rank{width:22px;font-weight:700;color:var(--accent)}.leaderboard__name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.leaderboard__votes{color:var(--muted)}.leaderboard__go{margin-left:auto;color:var(--accent);font-size:13px}.candidate-grid{display:grid;gap:14px;padding:14px 0 20px;grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}@media (min-width: 720px){.candidate-grid{grid-template-columns:repeat(3,1fr)}}@media (min-width: 1024px){.candidate-grid{grid-template-columns:repeat(4,1fr)}}.candidate-card{background:var(--card);border:1px solid var(--line);border-radius:4px;overflow:hidden;cursor:pointer}.candidate-card:hover{border-color:var(--accent)}.candidate-card__photo{aspect-ratio:3 / 4;background:#eee}.candidate-card__photo img{width:100%;height:100%;object-fit:cover}.candidate-card__caption{padding:8px 10px 10px}.candidate-card__name{margin:0;font-size:15px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.candidate-card__desc{margin:2px 0 0;font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.candidate-card__foot{display:flex;align-items:center;justify-content:space-between;margin-top:8px}.candidate-card__votes{font-size:13px;color:var(--muted)}.empty-state{text-align:center;padding:48px 16px 60px;color:var(--muted)}.empty-state__text{margin:0 0 12px}.loading-text{padding:40px 0;text-align:center;color:var(--muted)}.candidate-page{padding:16px 0 30px}.candidate-page__back{margin-bottom:14px}.candidate-page__card{display:flex;align-items:flex-start;gap:18px;flex-wrap:wrap}.candidate-page__photo{width:220px;max-width:100%;aspect-ratio:3 / 4;overflow:hidden;border:1px solid var(--line);border-radius:4px;background:#eee}.candidate-page__photo img{width:100%;height:100%;object-fit:cover}.candidate-page__info{flex:1;min-width:200px}.candidate-page__name{margin:0 0 6px;font-size:22px;font-weight:700}.candidate-page__desc{margin:0 0 10px;color:var(--muted)}.candidate-page__votes{margin:0 0 12px;font-size:16px}.candidate-page__gallery{margin-top:22px}.candidate-page__gallery-title{margin:0 0 8px;font-size:14px;color:var(--muted)}.candidate-page__thumbs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.candidate-page__thumb{width:76px;height:76px;padding:0;border:2px solid var(--line);border-radius:4px;overflow:hidden;background:#eee}.candidate-page__thumb img{width:100%;height:100%;object-fit:cover}.candidate-page__thumb.is-active{border-color:var(--accent)}.candidate-page__input{display:none}.not-found{padding:40px 0;text-align:center;color:var(--muted)}.not-found__text{margin:0 0 12px}.site-footer{border-top:1px solid var(--line);text-align:center;color:var(--muted);font-size:13px;padding:12px 14px;margin-top:8px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;align-items:center;justify-content:center;padding:16px;background:#0006}.modal__panel{width:100%;max-width:420px;max-height:90vh;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:6px;padding:16px}.modal__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.modal__title{margin:0;font-size:18px;font-weight:700}.modal__close{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid var(--line);background:#fff;color:var(--muted);border-radius:4px;width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center}.field{margin-bottom:12px}.field__label{display:block;margin-bottom:4px;font-size:14px}.field__input,.field__textarea{width:100%;border:1px solid var(--line);border-radius:4px;padding:7px 9px;font:inherit;color:var(--text)}.field__textarea{resize:vertical}.field--invalid .field__input,.field--invalid .field__textarea,.upload-zone.has-error{border-color:var(--accent)}.field__error{margin:4px 0 0;font-size:12px;color:var(--accent)}.choice-row{display:flex;gap:10px}.choice{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);background:#fff;border-radius:4px;padding:8px 12px;font-size:14px}.choice.is-active{border-color:var(--accent);color:var(--accent)}.choice__box{display:inline-flex}.upload-zone{display:block;border:1px dashed var(--line);border-radius:4px;padding:16px 10px;text-align:center;color:var(--muted);font-size:13px;cursor:pointer}.upload-zone.is-dragover{border-color:var(--accent);color:var(--accent)}.upload-zone__input{display:none}.upload-zone__preview{max-height:160px;margin:0 auto}.form__actions{margin-top:14px}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);z-index:60;padding:8px 16px;border-radius:4px;font-size:14px;color:#fff;background:#222}.toast--ok{background:#2c7a3f}.toast--err{background:var(--accent)}@media (prefers-reduced-motion: reduce){*{animation:none!important;transition:none!important}}
