*{margin:0;padding:0;box-sizing:border-box}
:root{--bg:#f5f5f7;--card:#fff;--text:#1d1d1f;--sub:#6e6e73;--accent:#0071e3;--badge:#e8e8ed;--badge-text:#1d1d1f;--border:#d2d2d7;--stat-bg:#fff;--danger:#ff3b30;--success:#34c759;--shadow:0 2px 12px rgba(0,0,0,.08)}
@media(prefers-color-scheme:dark){:root{--bg:#1a1a1e;--card:#2c2c30;--text:#f5f5f7;--sub:#98989d;--accent:#2997ff;--badge:#3a3a3e;--badge-text:#f5f5f7;--border:#48484a;--stat-bg:#2c2c30;--shadow:0 2px 12px rgba(0,0,0,.3)}}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;min-height:100vh}
.header{background:var(--card);border-bottom:1px solid var(--border);padding:16px 0;position:sticky;top:0;z-index:100;box-shadow:var(--shadow)}
.container{max-width:1200px;margin:0 auto;padding:0 20px}
.header-row{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px}
.header h1{font-size:1.4rem;font-weight:700;letter-spacing:-.02em}
.header p{color:var(--sub);font-size:.8rem;margin-top:2px}
.btn-group{display:flex;gap:8px;flex-wrap:wrap}
.btn{border:none;padding:8px 16px;border-radius:10px;font-size:.85rem;font-weight:600;cursor:pointer;transition:opacity .15s;display:flex;align-items:center;gap:6px}
.btn:hover{opacity:.85}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn svg{width:16px;height:16px;fill:currentColor}
.btn-primary{background:var(--accent);color:#fff}
.btn-export{background:var(--success);color:#fff}
.btn-danger{background:var(--danger);color:#fff}
.btn-ghost{background:transparent;color:var(--accent);border:1px solid var(--accent)}

/* Filters */
.filters{display:flex;gap:8px;flex-wrap:wrap;margin:16px 0;align-items:center}
.filter-select{padding:6px 12px;border:1px solid var(--border);border-radius:8px;background:var(--card);color:var(--text);font-size:.85rem;cursor:pointer;appearance:auto}
.search-input{padding:6px 12px;border:1px solid var(--border);border-radius:8px;background:var(--card);color:var(--text);font-size:.85rem;flex:1;min-width:160px;max-width:300px}
.filter-count{font-size:.8rem;color:var(--sub);margin-left:auto;white-space:nowrap}

/* View Toggle */
.view-toggle{display:inline-flex;border-radius:8px;overflow:hidden;border:1px solid var(--border);margin-left:8px}
.view-toggle button{padding:5px 10px;border:none;background:var(--card);color:var(--sub);cursor:pointer;font-size:.8rem;font-weight:600;transition:all .15s}
.view-toggle button.active{background:var(--accent);color:#fff}
.view-toggle button:hover:not(.active){background:var(--badge)}

/* Stats */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:16px}
.stat{background:var(--stat-bg);border:1px solid var(--border);border-radius:12px;padding:12px 16px;box-shadow:var(--shadow)}
.stat .label{font-size:.7rem;color:var(--sub);text-transform:uppercase;letter-spacing:.05em;font-weight:600}
.stat .value{font-size:1.5rem;font-weight:700;margin-top:2px}
.stat .value.accent{color:var(--accent)}

/* Select bar */
.select-bar{display:none;background:var(--accent);color:#fff;border-radius:10px;padding:10px 16px;margin-bottom:12px;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px}
.select-bar.visible{display:flex}
.select-bar .info{font-size:.85rem;font-weight:600}
.select-bar button{background:rgba(255,255,255,.2);color:#fff;border:none;padding:5px 12px;border-radius:8px;font-size:.8rem;font-weight:600;cursor:pointer}
.select-bar button:hover{background:rgba(255,255,255,.35)}
.select-bar button.danger{background:rgba(255,59,48,.8)}
.select-bar button.export-btn{background:#fff;color:var(--accent)}

/* Upload */
.upload-area{display:none;background:var(--card);border:2px dashed var(--border);border-radius:16px;padding:32px 20px;text-align:center;margin-bottom:16px;cursor:pointer;transition:border-color .2s}
.upload-area.visible{display:block}
.upload-area.dragover{border-color:var(--accent)}
.upload-area h3{font-size:1rem;margin-bottom:4px}
.upload-area p{color:var(--sub);font-size:.8rem}
.upload-area input{display:none}
.upload-progress{display:none;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:16px;margin-bottom:16px}
.upload-progress.visible{display:block}
.progress-text{font-size:.85rem;margin-bottom:8px;font-weight:600}
.progress-bar-bg{background:var(--badge);border-radius:6px;height:6px;overflow:hidden}
.progress-bar{background:var(--accent);height:100%;border-radius:6px;width:0%;transition:width .3s}
.progress-detail{font-size:.75rem;color:var(--sub);margin-top:6px}

/* ═══ List View Cards ═══ */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(520px,100%),1fr));gap:16px;padding-bottom:40px}
@media(max-width:600px){.cards{grid-template-columns:1fr}}
.card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:20px;box-shadow:var(--shadow);transition:transform .15s,border-color .15s;position:relative}
.card:hover{transform:translateY(-2px)}
.card.selected,.gallery-card.selected{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent),var(--shadow)}
.card-check{position:absolute;top:10px;right:10px;width:22px;height:22px;border-radius:50%;border:2px solid var(--border);background:var(--card);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s;z-index:2}
.card-check:hover{border-color:var(--accent)}
.card.selected .card-check,.gallery-card.selected .card-check{background:var(--accent);border-color:var(--accent)}
.card.selected .card-check::after,.gallery-card.selected .card-check::after{content:'';display:block;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);margin-top:-2px}
.exam-info{font-size:.75rem;display:flex;gap:4px;flex-wrap:wrap;margin-bottom:8px}
.exam-tag{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);padding:2px 7px;border-radius:5px;font-weight:600}
.card-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px;gap:8px;padding-right:28px}
.q-num{font-size:1.1rem;font-weight:700;white-space:nowrap}
.q-num span{color:var(--accent)}
.pts-badge{background:#ff9f0a20;color:#ff9f0a;font-size:.7rem;font-weight:700;padding:2px 7px;border-radius:5px;margin-left:6px}
.diff{display:inline-flex;align-items:center;gap:3px;font-size:.75rem;font-weight:600;padding:3px 8px;border-radius:16px;white-space:nowrap}
.diff-1{background:#34c75920;color:#34c759}.diff-2{background:#ff9f0a20;color:#ff9f0a}.diff-3{background:#ff6b6b20;color:#ff6b6b}.diff-4{background:#ff3b3020;color:#ff3b30}.diff-5{background:#af52de20;color:#af52de}
.q-text{font-size:.9rem;margin-bottom:12px;overflow-x:auto}

/* Answer Row (collapsed choices) */
.answer-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.answer-badge{font-size:.8rem;font-weight:700;color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent);padding:3px 10px;border-radius:6px}
.toggle-choices{font-size:.7rem;color:var(--sub);background:none;border:1px solid var(--border);padding:2px 8px;border-radius:5px;cursor:pointer;font-weight:500}
.toggle-choices:hover{border-color:var(--accent);color:var(--accent)}

/* Choices */
.choices{list-style:none;margin-bottom:12px}
.choices li{padding:6px 10px;border-radius:6px;margin-bottom:3px;font-size:.85rem;display:flex;align-items:baseline;gap:6px;background:var(--badge);overflow-x:auto}
.choices li.answer{background:var(--success);color:#fff}
.choice-num{font-weight:700;min-width:18px;flex-shrink:0}

.tags{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:10px}
.tag{background:var(--badge);color:var(--badge-text);font-size:.7rem;padding:3px 8px;border-radius:16px;font-weight:500}
.meta{font-size:.7rem;color:var(--sub);display:flex;flex-wrap:wrap;gap:10px;border-top:1px solid var(--border);padding-top:10px}
.meta span{white-space:nowrap}
.hint-toggle{font-size:.75rem;color:var(--accent);cursor:pointer;background:none;border:none;font-weight:600;margin-bottom:6px}
.hint{font-size:.8rem;color:var(--sub);margin-bottom:12px;display:none;padding:10px;background:var(--badge);border-radius:6px;overflow-x:auto}
.hint.show{display:block}
.btn-tex{font-size:.7rem;color:var(--accent);background:none;border:1px solid var(--accent);padding:3px 8px;border-radius:6px;cursor:pointer;font-weight:600;margin-left:auto}
.btn-tex:hover{background:var(--accent);color:#fff}
.btn-json{font-size:.7rem;color:#e8a838;background:none;border:1px solid #e8a838;padding:3px 8px;border-radius:6px;cursor:pointer;font-weight:600;margin-left:4px}
.btn-json:hover{background:#e8a838;color:#fff}
.btn-png{font-size:.7rem;color:#af52de;background:none;border:1px solid #af52de;padding:3px 8px;border-radius:6px;cursor:pointer;font-weight:600;margin-left:4px}
.btn-png:hover{background:#af52de;color:#fff}
.btn-solution{font-size:.7rem;color:#34c759;background:none;border:1px solid #34c759;padding:3px 8px;border-radius:6px;cursor:pointer;font-weight:600;margin-left:4px}
.btn-solution:hover{background:#34c759;color:#fff}
.loading{text-align:center;padding:60px 20px;color:var(--sub);font-size:1rem}
.empty{text-align:center;padding:60px 20px;color:var(--sub);grid-column:1/-1}
#loginBtn{font-size:.75rem;padding:6px 12px}
#loginBtn.logged-in{background:#2d2d2d;border:1px solid var(--border)}
@media(prefers-color-scheme:light){#loginBtn.logged-in{background:#f0f0f0;color:#333}}

/* Solution */
.solution-area{margin-top:12px;padding:14px;background:var(--badge);border-radius:10px;border:1px solid var(--border)}
.sol-text{font-size:.85rem;line-height:1.8;margin-top:8px;overflow-x:auto}
.sol-text strong{color:var(--accent)}
.sol-step{display:inline-block;margin-top:10px;font-size:.9rem}
.sol-badge{font-size:.65rem;padding:2px 8px;border-radius:10px;font-weight:700}
.sol-badge.cached{background:#34c75920;color:#34c759}
.sol-badge.new-sol{background:#0071e320;color:#0071e3}
.sol-error{color:var(--danger);font-size:.85rem;padding:8px}
.btn-regen{font-size:.7rem;color:var(--sub);background:none;border:1px solid var(--border);padding:3px 10px;border-radius:6px;cursor:pointer;margin-top:8px}
.btn-regen:hover{border-color:var(--accent);color:var(--accent)}

/* Stats Charts */
.stats-toggle-wrap{margin-bottom:8px}
#statsToggle{font-size:.8rem;padding:6px 14px}
#chartSection{display:none;background:var(--card);border:1px solid var(--border);border-radius:14px;padding:20px;margin-bottom:16px;box-shadow:var(--shadow)}
.chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media(max-width:700px){.chart-grid{grid-template-columns:1fr}}
.chart-grid canvas{max-height:260px}
#chartSummary{display:flex;gap:20px;justify-content:center;margin-top:12px;font-size:.85rem;color:var(--sub)}
#chartSummary b{color:var(--accent)}

/* ═══ Gallery View ═══ */
.gallery-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;padding-bottom:40px}
@media(max-width:900px){.gallery-grid{grid-template-columns:repeat(3,1fr)}}@media(max-width:600px){.gallery-grid{grid-template-columns:repeat(2,1fr)}}
.gallery-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:18px;box-shadow:var(--shadow);cursor:pointer;transition:transform .15s,box-shadow .15s;position:relative;display:flex;flex-direction:column;min-height:260px}
.gallery-card:hover{transform:translateY(-3px);box-shadow:0 6px 20px rgba(0,0,0,.12)}
.gallery-card .card-check{width:18px;height:18px;top:8px;right:8px}
.g-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;padding-right:24px}
.g-qnum{font-size:1rem;font-weight:800;color:var(--accent)}
.g-pts{font-size:.65rem;font-weight:700;background:#ff9f0a20;color:#ff9f0a;padding:2px 6px;border-radius:4px}
.g-info{display:flex;gap:4px;align-items:center;margin-bottom:8px;flex-wrap:wrap}
.g-tag{font-size:.65rem;background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);padding:2px 6px;border-radius:4px;font-weight:600}
.g-diff{font-size:.65rem;font-weight:600}
.g-preview{font-size:.78rem;color:var(--text);flex:1;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;line-height:1.5;margin-bottom:8px;word-break:break-all}
.g-footer{margin-top:auto;border-top:1px solid var(--border);padding-top:8px}
.g-answer{font-size:.75rem;font-weight:700;color:var(--accent)}

/* ═══ Detail Modal ═══ */
.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:1000;display:none;justify-content:center;align-items:center;padding:20px}
.modal-overlay.visible{display:flex}
.modal-content{background:var(--card);border-radius:16px;max-width:680px;width:100%;max-height:85vh;max-height:85dvh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.3);position:relative;-webkit-overflow-scrolling:touch}
@media(max-width:600px){.modal-content{max-height:95vh;max-height:95dvh;border-radius:12px}.modal-overlay{padding:8px}}
.modal-close{position:absolute;top:12px;right:16px;background:none;border:none;font-size:1.5rem;color:var(--sub);cursor:pointer;z-index:2;width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center}
.modal-close:hover{background:var(--badge);color:var(--text)}
.modal-body{padding:24px}
.modal-body .q-text{font-size:.95rem;margin-bottom:14px}
.modal-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}
.modal-actions .btn-tex,.modal-actions .btn-json,.modal-actions .btn-png,.modal-actions .btn-solution{font-size:.75rem;padding:5px 12px;margin-left:0}

/* ── Mobile (iOS Safari) ── */
@media(max-width:600px){
  .container{padding:0 12px}
  .header h1{font-size:1.1rem}
  .btn-group{gap:6px}
  .btn{min-height:44px;padding:10px 14px;font-size:.8rem}
  .filters{gap:6px}
  .filter-select,.search-input{font-size:16px;padding:8px 10px;min-height:44px}
  .card{padding:14px}
  .card-head{padding-right:32px}
  .q-text{font-size:.85rem}
  .meta{gap:6px}
  .btn-tex,.btn-json,.btn-png,.btn-solution{min-height:36px;padding:6px 10px}
  .modal-body{padding:16px}
  .modal-actions{gap:6px}
  .modal-actions .btn-tex,.modal-actions .btn-json,.modal-actions .btn-png,.modal-actions .btn-solution{min-height:36px;padding:6px 10px}
  .gallery-grid{grid-template-columns:1fr!important;gap:10px}
  .stats{grid-template-columns:repeat(2,1fr);gap:8px}
  .select-bar{padding:8px 12px}
  .upload-area{padding:20px 14px}
}
