:root{color:#1f2723;background:#f4f8ff;font-family:Zen Kaku Gothic New,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}body{min-width:320px;margin:0;font-family:Zen Kaku Gothic New,sans-serif}button{font:inherit}.screen{min-height:100vh;padding:28px 18px}.home-screen,.vote-screen,.admin-login-screen{display:grid;align-items:center;background:#f4f8ff}.narrow-panel,.vote-panel{width:min(100%,520px);margin:0 auto}.narrow-panel{padding:28px 22px}.vote-panel{width:min(100%,680px);padding:20px 0 28px}.festival-label{margin:0 0 8px;color:#0057ff;font-size:.88rem;font-weight:700}h1{margin:0 0 18px;color:#142019;font-size:clamp(1.8rem,8vw,2.55rem);line-height:1.16;letter-spacing:0}h2{margin:0 0 14px;font-size:1.2rem;letter-spacing:0}.lead{margin:0 0 12px;color:#24322b;font-size:1.08rem;font-weight:650;line-height:1.7}.muted{margin:0;color:#68756e;line-height:1.7}.status-panel{display:grid;justify-items:center;gap:10px;padding:32px 24px;border:1px solid rgba(255,255,255,.82);border-radius:24px;background:#ffffffe6;text-align:center}.status-panel.spark{border-color:#ffc35cb3;background:#fffdf7}.status-panel.error{border-color:#ffd0cb}.status-title{margin:0;color:#17231d;font-size:clamp(1.45rem,7vw,2.15rem);font-weight:700;line-height:1.35}.loading-spinner{width:38px;height:38px;border:4px solid rgba(0,87,255,.14);border-top-color:#0057ff;border-radius:50%;animation:spin .9s linear infinite}.status-reload{margin-top:8px}.vote-hero{position:relative;overflow:hidden;padding:28px 22px;border:1px solid rgba(255,255,255,.86);border-radius:24px;background:#fff}.vote-hero h1{margin-bottom:8px;font-weight:700}.class-list{display:grid;gap:10px;margin:12px 0 0}.class-option{display:flex;gap:12px;align-items:center;justify-content:space-between;width:100%;min-height:76px;padding:15px;border:2px solid #eadfd0;border-radius:16px;background:#fff;color:#1e2923;text-align:left}.class-option.selected{border-color:#0057ff;background:#eef4ff}.class-option:hover{border-color:#0057ff;transform:translateY(-1px)}.class-option:focus-visible,.rating-button:focus-visible,.primary-action:focus-visible,.secondary-action:focus-visible,.icon-button:focus-visible{outline:3px solid rgba(42,126,199,.35);outline-offset:3px}.class-option-main{display:grid;gap:4px;min-width:0}.class-name{color:#0057ff;font-size:.95rem;font-weight:800}.class-title{overflow-wrap:anywhere;font-weight:650;line-height:1.45}.selected-badge{flex:0 0 auto;min-width:76px;color:#0057ff;font-size:.84rem;font-weight:850;text-align:right}.form-section{margin:18px 0 0;padding:20px;border:1px solid rgba(255,255,255,.82);border-radius:22px;background:#ffffffe6}.form-section h2{margin:0;color:#17231d;font-size:1.18rem;line-height:1.55}.section-title-row{display:grid;gap:2px}.section-title-row span{color:#596760;font-size:.95rem;font-weight:700;line-height:1.55}.rating-row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin-top:12px}.rating-button{display:grid;place-items:center;min-height:62px;border:2px solid #eadfd0;border-radius:16px;background:#fff;color:#233229;font-weight:850}.rating-button.selected{border-color:#0057ff;background:#eef4ff;color:#0057ff}.rating-number{font-size:1.18rem;line-height:1}.rating-star{color:#f2b441;font-size:.9rem;line-height:1}.comment-box{width:100%;min-height:116px;resize:vertical;margin-top:12px;padding:14px;border:2px solid #eadfd0;border-radius:16px;background:#fff;color:#1f2723;font:inherit;line-height:1.6}.comment-box:focus{outline:3px solid rgba(42,126,199,.24);border-color:#2a7ec7}.char-count{margin:6px 0 0;color:#68756e;font-size:.85rem;text-align:right}.primary-action,.secondary-action,.icon-button{border:0;cursor:pointer;transition:transform .12s ease,opacity .12s ease,background .12s ease}.primary-action:active,.secondary-action:active,.icon-button:active{transform:translateY(1px)}.primary-action{width:100%;min-height:58px;margin-top:18px;padding:15px 18px;border-radius:18px;background:#0057ff;color:#fff;font-weight:800}.primary-action:disabled,.secondary-action:disabled{cursor:not-allowed;opacity:.55}.secondary-action{min-height:44px;padding:10px 14px;border:1px solid #d4dcd3;border-radius:8px;background:#fff;color:#233229;font-weight:750}.compact{width:auto}.icon-action{display:inline-flex;gap:8px;align-items:center;justify-content:center}.button-row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.signed-in-box{display:grid;gap:14px}.signed-in-box p{margin:0;color:#596760;overflow-wrap:anywhere}.error-text,.success-text{margin:12px 0;padding:12px 14px;border-radius:8px;line-height:1.5}.error-text{background:#fff1f0;color:#9b241e}.success-text{background:#edf8f1;color:#0057ff}.missing-text{margin:14px 0 0;padding:11px 13px;border:1px solid #f0d29d;border-radius:14px;background:#fff8e8;color:#8a5c17;font-weight:800;line-height:1.5}.admin-screen{min-height:100vh;padding:24px;background:#f7f8f5}.admin-header{display:flex;gap:18px;align-items:flex-start;justify-content:space-between;max-width:1080px;margin:0 auto 24px}.admin-header h1{margin-bottom:8px;font-size:clamp(1.6rem,4vw,2.2rem)}.icon-button{display:inline-grid;place-items:center;width:44px;height:44px;border:1px solid #d4dcd3;border-radius:8px;background:#fff;color:#26332b}.toolbar,.stat-grid,.results-section,.admin-loading,.admin-screen>.error-text,.admin-screen>.success-text{max-width:1080px;margin-right:auto;margin-left:auto}.toolbar{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:18px}.stat-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin-bottom:26px}.stat-card{min-height:108px;padding:16px;border:1px solid #dfe5de;border-radius:8px;background:#fff}.stat-card p{margin:0 0 12px;color:#69766f;font-size:.92rem;font-weight:700}.stat-card strong{color:#142019;font-size:1.7rem;letter-spacing:0}.results-section{margin-bottom:28px;padding-bottom:0}.results-table{overflow:hidden;border:1px solid #dfe5de;border-radius:8px;background:#fff}.table-row{display:grid;grid-template-columns:120px 1fr 96px;gap:12px;align-items:center;min-height:52px;padding:12px 16px;border-bottom:1px solid #edf0ec}.table-row:last-child{border-bottom:0}.table-row span{overflow-wrap:anywhere}.table-row strong{text-align:right}.table-head{min-height:44px;background:#eef2ed;color:#4d5b53;font-size:.9rem;font-weight:800}.issue-panel{display:grid;grid-template-columns:130px 180px minmax(260px,1fr) 96px;gap:12px;align-items:end;padding:16px;border:1px solid #dfe5de;border-radius:8px;background:#fff}.issue-panel label{display:grid;gap:6px;color:#4d5b53;font-size:.88rem;font-weight:800}.issue-panel input{width:100%;min-height:42px;padding:8px 10px;border:1px solid #ccd6ce;border-radius:8px;color:#1f2723;font:inherit}.batch-table{overflow-x:auto;border:1px solid #dfe5de;border-radius:8px;background:#fff}.batch-row{display:grid;grid-template-columns:minmax(150px,1fr) 90px 90px 90px minmax(160px,210px) 330px;gap:12px;align-items:center;min-width:980px;min-height:58px;padding:12px 16px;border-bottom:1px solid #edf0ec}.batch-row:last-child{border-bottom:0}.batch-head{min-height:44px;background:#eef2ed;color:#4d5b53;font-size:.9rem;font-weight:800}.batch-row span{overflow-wrap:anywhere}.batch-row small,.batch-row span>small{display:block;margin-top:4px;color:#68756e;font-size:.82rem}.batch-actions{display:flex;flex-wrap:wrap;gap:8px}.inline-download{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.inline-download a{color:#0057ff;font-weight:800}.token-table{overflow-x:auto;border:1px solid #dfe5de;border-radius:8px;background:#fff}.token-row{display:grid;grid-template-columns:90px minmax(320px,1fr) 120px minmax(140px,180px) 190px;gap:12px;align-items:center;min-width:900px;min-height:58px;padding:12px 16px;border-bottom:1px solid #edf0ec}.token-row:last-child{border-bottom:0}.token-head{min-height:44px;background:#eef2ed;color:#4d5b53;font-size:.9rem;font-weight:800}.token-url-cell{display:grid;gap:4px}.token-url-cell strong,.token-url-cell a,.token-url-cell small,.token-row>span{overflow-wrap:anywhere}.token-url-cell a{color:#0057ff;font-size:.92rem}.token-url-cell small{color:#68756e;font-size:.82rem}.status-chip{display:inline-flex;align-items:center;justify-content:center;min-height:30px;padding:4px 9px;border-radius:999px;background:#eef7f1;color:#0057ff;font-size:.84rem;font-weight:800}.status-chip.used{background:#fff1e8;color:#a74c1f}.token-actions{display:flex;flex-wrap:wrap;gap:8px}.secondary-action.danger{border-color:#efcdbf;color:#9d3e1c}.admin-loading{padding:18px 0;color:#68756e}.rating-summary{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}.rating-stat{min-height:84px;padding:14px;border:1px solid #dfe5de;border-radius:8px;background:#fff}.rating-stat span{display:block;color:#68756e;font-weight:800}.rating-stat strong{display:block;margin-top:8px;font-size:1.5rem}.comment-list{display:grid;gap:10px}.comment-item{padding:14px;border:1px solid #dfe5de;border-radius:8px;background:#fff}.comment-meta{display:flex;flex-wrap:wrap;gap:8px 14px;color:#68756e;font-size:.86rem;font-weight:750}.comment-item p{margin:10px 0;overflow-wrap:anywhere;line-height:1.65}.comment-item small{color:#68756e;overflow-wrap:anywhere}@keyframes spin{to{transform:rotate(360deg)}}@media (min-width: 720px){.class-list{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 760px){.screen{padding:20px 14px}.vote-panel{padding:8px 0 22px}.vote-hero,.form-section{border-radius:20px}.admin-screen{padding:20px 16px}.admin-header{margin-bottom:18px}.toolbar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.toolbar .secondary-action{width:100%}.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.issue-panel{grid-template-columns:1fr}.rating-summary{grid-template-columns:repeat(5,minmax(0,1fr))}.table-row{grid-template-columns:78px 1fr 58px;gap:8px;padding:12px}}@media (max-width: 430px){.class-option{align-items:flex-start;flex-direction:column;gap:8px}.selected-badge{min-width:0;text-align:left}.rating-row{gap:7px}.rating-button{min-height:56px;border-radius:14px}.toolbar,.stat-grid{grid-template-columns:1fr}.rating-summary{grid-template-columns:repeat(5,minmax(0,1fr));gap:6px}.rating-stat{min-height:68px;padding:10px 6px;text-align:center}.rating-stat strong{font-size:1.18rem}}
