:root {
  color-scheme:light;
  --ink:#27372b;
  --muted:#738077;
  --moss:#48614b;
  --moss-deep:#314735;
  --sage:#839985;
  --leaf:#dfe9dc;
  --cream:#f7f1e3;
  --paper:#fffdf7;
  --line:#dedfd2;
  --amber:#bc8741;
  --rose:#aa625a;
  --shadow:0 22px 65px rgba(56,70,54,.12);
}
*{box-sizing:border-box}
html{min-width:320px;max-width:100%;overflow-x:hidden;background:#e9eadf}
body{
  margin:0;min-height:100vh;max-width:100%;overflow-x:hidden;color:var(--ink);
  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  background:
    radial-gradient(circle at 7% 2%,rgba(255,255,255,.95),transparent 30rem),
    radial-gradient(circle at 92% 13%,rgba(131,153,133,.25),transparent 25rem),
    linear-gradient(145deg,#eef0e7 0%,#f7f0e2 53%,#e5e9dd 100%);
}
body.modal-open{overflow:hidden}
button,input,textarea{font:inherit}
button{touch-action:manipulation}
button:focus-visible,input:focus-visible,textarea:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid rgba(72,97,75,.28);outline-offset:2px}
[hidden]{display:none!important}
a{color:inherit}
.grain{position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.18;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.13'/%3E%3C/svg%3E")}
.shell{width:min(1160px,100%);margin:0 auto;padding:18px 18px 48px}
.topbar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:16px}
.brand{display:flex;align-items:center;gap:11px;min-width:0;text-decoration:none}
.brand-mark{display:grid;width:48px;height:48px;flex:0 0 auto;place-items:center;border:1px solid rgba(255,255,255,.8);border-radius:16px;background:linear-gradient(145deg,#5d775f,#334a37);box-shadow:0 10px 25px rgba(49,71,53,.23);font-size:23px}
.brand strong{display:block;font-family:Georgia,"Noto Serif SC",serif;font-size:19px;letter-spacing:.1em}
.brand small{display:block;margin-top:2px;color:var(--muted);font-size:8px;font-weight:800;letter-spacing:.2em}
.top-actions{display:flex;gap:7px}
.pill-button{display:inline-grid;min-height:39px;padding:0 14px;place-items:center;border:1px solid rgba(255,255,255,.88);border-radius:999px;color:var(--moss-deep);background:rgba(255,253,247,.8);box-shadow:0 8px 22px rgba(56,70,54,.07);cursor:pointer;text-decoration:none;font-size:11px;font-weight:850;backdrop-filter:blur(12px)}
.icon-button{width:39px;padding:0;font-size:17px}
.hero{position:relative;overflow:hidden;display:grid;grid-template-columns:minmax(0,1fr) 280px;align-items:center;min-height:360px;padding:48px 54px;border:1px solid rgba(255,255,255,.35);border-radius:34px;color:#f9f7ec;background:linear-gradient(132deg,#304836 0%,#536b54 63%,#8a8460 100%);box-shadow:var(--shadow)}
.hero::before{content:"";position:absolute;width:440px;height:440px;right:-170px;top:-230px;border:1px solid rgba(255,255,255,.12);border-radius:50%;box-shadow:0 0 0 70px rgba(255,255,255,.028),0 0 0 140px rgba(255,255,255,.018)}
.hero-copy{position:relative;z-index:2}
.kicker,.section-kicker{margin:0;color:#dbc99c;font-size:10px;font-weight:900;letter-spacing:.22em}
.hero h1{max-width:680px;margin:13px 0 15px;font-family:Georgia,"Noto Serif SC",serif;font-size:clamp(32px,5.2vw,58px);font-weight:650;line-height:1.18;letter-spacing:.035em}
.hero-note{max-width:540px;margin:0;color:rgba(255,255,255,.7);font-size:12px;line-height:1.8}
.ticket-row{display:flex;gap:9px;min-height:51px;margin-top:25px}
.ticket{position:relative;display:grid;width:87px;height:48px;place-items:center;border:1px solid rgba(255,255,255,.22);border-radius:12px;color:#f7e8bd;background:rgba(255,255,255,.1);box-shadow:inset 0 0 20px rgba(255,255,255,.04);font-size:10px;font-weight:900;letter-spacing:.12em;transition:.25s}
.ticket::before,.ticket::after{content:"";position:absolute;top:50%;width:8px;height:14px;margin-top:-7px;background:#40583f}
.ticket::before{left:-1px;border-radius:0 10px 10px 0}.ticket::after{right:-1px;border-radius:10px 0 0 10px}
.ticket.used{color:rgba(255,255,255,.34);border-style:dashed;background:rgba(21,35,24,.13);text-decoration:line-through}
.ticket-login{align-self:center;color:rgba(255,255,255,.75);font-size:11px}
.hero-art{position:relative;z-index:1;display:grid;height:240px;place-items:center}
.bottle{position:relative;display:grid;width:142px;height:184px;place-items:center;border:1px solid rgba(255,255,255,.36);border-radius:45px 45px 29px 29px;background:linear-gradient(150deg,rgba(247,240,211,.37),rgba(205,213,181,.12));box-shadow:inset 12px 8px 20px rgba(255,255,255,.12),0 25px 45px rgba(20,35,23,.22);backdrop-filter:blur(6px)}
.bottle::before{content:"";position:absolute;width:62px;height:34px;top:-27px;border:1px solid rgba(255,255,255,.35);border-bottom:0;border-radius:10px 10px 0 0;background:#596d51}
.bottle i{display:grid;width:65px;height:65px;place-items:center;border:1px solid rgba(65,78,57,.25);border-radius:50%;color:#59684c;background:#f3ead2;font-family:Georgia,serif;font-size:34px;font-style:normal}
.bottle small{position:absolute;bottom:24px;font-size:8px;letter-spacing:.2em}
.leaf{position:absolute;color:rgba(231,229,187,.42);font-family:serif;font-size:74px}.leaf-one{left:1px;top:12px;transform:rotate(-30deg)}.leaf-two{right:0;bottom:8px;transform:rotate(33deg)}
.stat-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:14px 0}
.stat-strip article{padding:16px 18px;border:1px solid rgba(255,255,255,.9);border-radius:18px;background:rgba(255,253,247,.83);box-shadow:0 9px 26px rgba(56,70,54,.065);backdrop-filter:blur(10px)}
.stat-strip span{color:var(--muted);font-size:9px;font-weight:750}.stat-strip strong{display:block;margin-top:6px;color:var(--moss);font-family:Georgia,serif;font-size:25px;font-variant-numeric:tabular-nums}
.directory-card{padding:28px;border:1px solid rgba(255,255,255,.9);border-radius:27px;background:rgba(255,253,247,.88);box-shadow:0 14px 42px rgba(56,70,54,.08);backdrop-filter:blur(14px)}
.directory-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:22px}
.directory-head h2{margin:7px 0 4px;font-family:Georgia,"Noto Serif SC",serif;font-size:27px}.directory-head p:not(.section-kicker){margin:0;color:var(--muted);font-size:10px}.directory-head .section-kicker{color:var(--amber)}
.directory-tools{display:flex;align-items:center;gap:8px}
.sort-tabs{display:flex;padding:4px;border-radius:13px;background:#ececdf}.sort-tab{min-height:34px;padding:0 13px;border:0;border-radius:10px;color:var(--muted);background:transparent;cursor:pointer;font-size:10px;font-weight:900}.sort-tab.active{color:#fff;background:var(--moss);box-shadow:0 5px 12px rgba(72,97,75,.18)}
.search-box{display:flex;width:175px;min-height:42px;align-items:center;gap:7px;padding:0 11px;border:1px solid var(--line);border-radius:12px;color:var(--muted);background:#fff}.search-box input{width:100%;min-width:0;border:0;outline:0;color:var(--ink);background:transparent;font-size:11px}
.candidate-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.candidate-card{position:relative;overflow:hidden;display:grid;grid-template-columns:64px minmax(0,1fr);gap:13px;min-height:128px;padding:14px;border:1px solid var(--line);border-radius:18px;background:rgba(255,255,255,.82);transition:transform .18s,border-color .18s,box-shadow .18s}
.candidate-card:hover{border-color:#c8d1c3;box-shadow:0 12px 26px rgba(56,70,54,.09);transform:translateY(-2px)}
.candidate-card.voted{background:linear-gradient(145deg,#f6f9f2,#edf3e9);box-shadow:inset 0 0 0 1px rgba(72,97,75,.12)}
.rank-chip{position:absolute;top:9px;right:10px;color:#a3aba2;font-family:Georgia,serif;font-size:11px}
.portrait-wrap{position:relative;align-self:start}
.portrait{display:grid;width:64px;height:64px;overflow:hidden;padding:0;place-items:center;border:1px solid #d7dacd;border-radius:21px;color:#f7f2df;background:linear-gradient(145deg,#7f957f,#455c48);font-family:Georgia,"Noto Serif SC",serif;font-size:22px;box-shadow:0 8px 19px rgba(63,80,63,.16);cursor:pointer}
.portrait img{width:100%;height:100%;object-fit:cover;opacity:1;transition:opacity .18s ease}.portrait img.changing{opacity:0}
.avatar-action{position:absolute;right:-5px;bottom:-5px;display:grid;width:25px;height:25px;padding:0;place-items:center;border:2px solid #fff;border-radius:50%;color:var(--moss);background:#eef3e9;cursor:pointer;font-size:12px;font-weight:900}
.candidate-info{min-width:0;padding-top:4px}.candidate-info h3{margin:0 34px 5px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:Georgia,"Noto Serif SC",serif;font-size:17px}.profile-link{max-width:100%;overflow:hidden;padding:0;border:0;color:var(--ink);background:transparent;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;font:inherit;text-align:left}.profile-link:hover{color:var(--moss)}.vote-counts{display:flex;gap:9px;color:var(--muted);font-size:9px}.vote-counts b{color:var(--moss);font-size:12px}
.candidate-bio{display:block;width:100%;overflow:hidden;margin:0 0 7px;padding:0;border:0;color:#637466;background:transparent;cursor:pointer;text-align:left;text-overflow:ellipsis;white-space:nowrap;font-family:Georgia,"Noto Serif SC",serif;font-size:10px;line-height:1.5}.candidate-bio::before{content:"“";color:#a18b61}.candidate-bio::after{content:"”";color:#a18b61}.candidate-bio.empty-bio{color:#a3aca4;font-family:inherit}.candidate-bio:hover{color:var(--moss)}
.vote-button{width:100%;min-height:34px;margin-top:12px;border:0;border-radius:10px;color:#fff;background:var(--moss);cursor:pointer;font-size:10px;font-weight:900;transition:.18s}.vote-button:hover:not(:disabled){background:var(--moss-deep)}.vote-button:disabled{color:#879187;background:#e8ebe5;cursor:not-allowed}.candidate-card.voted .vote-button{color:var(--moss);background:var(--leaf)}
.empty,.loading{grid-column:1/-1;display:grid;min-height:240px;place-items:center;color:var(--muted);text-align:center;font-size:11px}.loading span{width:28px;height:28px;margin-bottom:-85px;border:3px solid #dfe4da;border-top-color:var(--moss);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
.rules-card{margin-top:14px;border:1px solid rgba(255,255,255,.9);border-radius:21px;background:rgba(255,253,247,.83);box-shadow:0 10px 30px rgba(56,70,54,.065)}
.rules-card summary{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:18px 22px;cursor:pointer;list-style:none}.rules-card summary::-webkit-details-marker{display:none}.rules-card summary b{display:block;font-size:12px}.rules-card summary small{display:block;margin-top:3px;color:var(--muted);font-size:9px;font-weight:500}.rules-card summary i{color:var(--moss);font-size:9px;font-style:normal}.rules-card[open] summary i{font-size:0}.rules-card[open] summary i::after{content:"收起";font-size:9px}
.rules-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;padding:0 20px 20px}.rules-grid article{padding:14px;border:1px solid var(--line);border-radius:14px;background:#fff}.rules-grid article>b{display:block;color:#a6b19f;font-family:Georgia,serif;font-size:24px}.rules-grid span{display:block;margin-top:7px;font-size:11px;font-weight:900}.rules-grid p{margin:4px 0 0;color:var(--muted);font-size:9px;line-height:1.6}
footer{padding:25px 0 0;color:#899189;text-align:center;font-size:9px}
.overlay{position:fixed;z-index:100;inset:0;display:grid;place-items:center;padding:16px;background:rgba(31,46,34,.5);backdrop-filter:blur(7px)}
.modal{position:relative;width:min(440px,100%);max-height:calc(100dvh - 32px);overflow-y:auto;padding:27px;border:1px solid rgba(255,255,255,.9);border-radius:25px;background:var(--paper);box-shadow:0 28px 80px rgba(21,36,25,.3)}
.modal-close{position:absolute;right:15px;top:14px;width:34px;height:34px;border:0;border-radius:50%;color:var(--muted);background:#eceee8;cursor:pointer;font-size:20px}.modal h2{margin:7px 40px 5px 0;font-family:Georgia,"Noto Serif SC",serif;font-size:25px}.modal .section-kicker{color:var(--amber)}.modal-note{margin:0 0 17px;color:var(--muted);font-size:10px;line-height:1.7}
.auth-tabs{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-bottom:14px;padding:4px;border-radius:13px;background:#ececdf}.auth-tabs button{min-height:37px;border:0;border-radius:10px;color:var(--muted);background:transparent;cursor:pointer;font-size:10px;font-weight:900}.auth-tabs button.active{color:#fff;background:var(--moss)}
.modal form{display:grid;gap:11px}.modal label{display:block;color:#506154;font-size:10px;font-weight:850}.modal input:not([type=file]){width:100%;min-height:45px;margin-top:6px;padding:10px 12px;border:1px solid #ced4c9;border-radius:11px;outline:0;background:#fff}.modal input:focus{border-color:#758c76;box-shadow:0 0 0 3px rgba(72,97,75,.1)}
.form-message{min-height:16px;margin:0;color:var(--rose);font-size:10px}.primary-button{width:100%;min-height:46px;border:0;border-radius:12px;color:#fff;background:var(--moss);box-shadow:0 8px 18px rgba(72,97,75,.2);cursor:pointer;font-size:11px;font-weight:900}.primary-button:disabled{opacity:.46;cursor:not-allowed;box-shadow:none}
.avatar-preview{display:grid;width:152px;height:152px;margin:17px auto;overflow:hidden;place-items:center;border:1px dashed #b8c0b3;border-radius:42px;color:var(--muted);background:#f0f2eb;font-size:10px}.avatar-preview img{width:100%;height:100%;object-fit:cover}.file-button{display:grid!important;min-height:42px;margin-bottom:11px;place-items:center;border:1px solid var(--line);border-radius:11px;color:var(--moss)!important;background:#fff;cursor:pointer}.file-button input{position:absolute;width:1px;height:1px;opacity:0}
.profile-modal{width:min(560px,100%)}.profile-head{display:grid;grid-template-columns:96px minmax(0,1fr);align-items:center;gap:18px;margin-bottom:18px}.profile-avatar{display:grid;width:96px;height:96px;overflow:hidden;place-items:center;border-radius:30px;color:#fff;background:linear-gradient(145deg,#7f957f,#455c48);box-shadow:0 12px 28px rgba(63,80,63,.18);font-family:Georgia,"Noto Serif SC",serif;font-size:30px}.profile-avatar img{width:100%;height:100%;object-fit:cover}.profile-head h2{margin-right:35px}.profile-stats{margin:7px 0 0;color:var(--muted);font-size:10px}.profile-bio{min-height:112px;padding:19px;border:1px solid var(--line);border-radius:17px;background:#f5f4ec;white-space:pre-wrap;font-family:Georgia,"Noto Serif SC",serif;font-size:14px;line-height:1.9}.profile-bio.empty-bio{display:grid;place-items:center;color:var(--muted);font-family:inherit;font-size:10px}.profile-edit-button{width:100%;min-height:42px;margin-top:12px;border:1px solid #cfd6cb;border-radius:12px;color:var(--moss);background:#fff;cursor:pointer;font-size:10px;font-weight:900}.bio-form{margin-top:13px;padding-top:14px;border-top:1px solid var(--line)}.bio-form textarea{width:100%;min-height:160px;margin-top:7px;padding:12px;border:1px solid #ced4c9;border-radius:12px;outline:0;resize:vertical;color:var(--ink);background:#fff;font-size:12px;line-height:1.7}.bio-form textarea:focus{border-color:#758c76;box-shadow:0 0 0 3px rgba(72,97,75,.1)}.bio-form-foot{display:flex;justify-content:space-between;gap:10px;color:var(--muted);font-size:9px}.bio-form .form-message{margin-top:8px}
.toast{position:fixed;z-index:180;left:50%;bottom:calc(22px + env(safe-area-inset-bottom));max-width:calc(100vw - 28px);padding:12px 17px;border-radius:999px;color:#fff;background:rgba(43,64,47,.96);box-shadow:0 12px 34px rgba(0,0,0,.22);opacity:0;transform:translate(-50%,14px);pointer-events:none;transition:.2s;font-size:10px}.toast.show{opacity:1;transform:translate(-50%,0)}
@media(max-width:880px){.hero{grid-template-columns:minmax(0,1fr) 210px;padding:39px}.candidate-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.directory-head{align-items:flex-start;flex-direction:column}.directory-tools{width:100%}.search-box{margin-left:auto}.rules-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:600px){.shell{padding:9px 9px 34px}.topbar{padding:2px}.brand-mark{width:43px;height:43px;border-radius:14px}.brand strong{font-size:17px}.hero{display:block;min-height:350px;padding:29px 23px;border-radius:25px}.hero h1{font-size:34px}.hero-art{position:absolute;right:-18px;bottom:-46px;width:180px;height:210px;opacity:.55}.bottle{width:112px;height:148px}.bottle::before{width:50px}.bottle i{width:52px;height:52px;font-size:27px}.ticket-row{position:relative;z-index:3;gap:6px}.ticket{width:76px}.stat-strip{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.stat-strip article{padding:13px 14px}.directory-card{padding:17px 13px;border-radius:21px}.directory-tools{display:grid;grid-template-columns:1fr;width:100%}.sort-tabs{width:100%}.sort-tab{flex:1}.search-box{width:100%;margin:0}.candidate-grid{grid-template-columns:1fr;gap:8px}.candidate-card{min-height:117px}.rules-grid{grid-template-columns:1fr 1fr;padding:0 12px 12px}.rules-card summary{padding:16px}.modal{padding:23px 19px}.profile-head{grid-template-columns:74px minmax(0,1fr);gap:13px}.profile-avatar{width:74px;height:74px;border-radius:23px}.profile-bio{padding:15px}.top-actions .pill-button:first-child{max-width:92px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}
@media(max-width:370px){.brand small{display:none}.hero h1{font-size:30px}.ticket{width:70px}.rules-grid{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
