:root{font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif;color:#192534;background:#f6f8fb;font-synthesis:none;font-size:16px;--blue:#234ed9;--line:#e3e8f0;--muted:#69768a}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,input,select{touch-action:manipulation}button,a{ -webkit-tap-highlight-color:transparent}button{cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #91adff;outline-offset:3px}button:disabled{cursor:wait;opacity:.6}[hidden]{display:none!important}.topbar{height:88px;padding:0 5.6%;display:flex;align-items:center;background:white;border-bottom:1px solid var(--line);gap:64px}.brand{display:flex;align-items:center;gap:12px;font-size:23px;font-weight:700;white-space:nowrap}.brand-mark{background:var(--blue);color:white;border-radius:12px;width:43px;height:43px;display:grid;place-items:center;font-size:24px;box-shadow:0 4px 10px #234ed928}.brand-divider{font-weight:300;color:#c6cedb;margin:0 15px}.brand-small{font-size:16px;font-weight:500;color:#627085}nav{display:flex;align-self:stretch;gap:36px}nav a{font-size:15px;display:flex;align-items:center;color:var(--muted);border-bottom:3px solid transparent;padding:3px 0 0}nav a.active{color:var(--blue);border-bottom-color:var(--blue);font-weight:600}.local-badge{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:13px;color:#627085;white-space:nowrap}.local-badge span{height:6px;width:6px;border-radius:50%;background:#7394bb}main{max-width:1440px;padding:48px 5.6% 0;margin:auto}.heading{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:34px}.eyebrow{font-size:12px;letter-spacing:2px;font-weight:700;color:var(--blue)}h1{font-size:34px;letter-spacing:.02em;margin:12px 0 10px;font-weight:700;line-height:1.4}.heading p{font-size:15px;color:var(--muted);margin:0}.primary,.secondary,.danger{border:1px solid transparent;border-radius:9px;padding:12px 20px;font-weight:600;font-size:15px;display:inline-flex;align-items:center;justify-content:center;gap:10px}.primary{background:var(--blue);color:#fff;box-shadow:0 3px 7px #234ed91a}.primary:hover{background:#1c40ba}.primary span{font-size:22px;line-height:1}.secondary{background:#fff;border-color:var(--line);color:#536075}.secondary:hover{background:#f5f7fb}.danger{background:#bd3349;color:white}.toolbar{display:flex;gap:14px;margin-bottom:32px}.search{display:flex;align-items:center;gap:12px;background:white;border:1px solid var(--line);border-radius:10px;padding:0 18px;flex:1;height:56px}.search svg{height:21px;width:21px;fill:none;stroke:#738196;stroke-width:1.7;flex-shrink:0}.search input{border:0;outline:none;background:none;width:100%;min-width:0;font-size:15px;color:#192534}.search:focus-within{border-color:#7892e5;box-shadow:0 0 0 3px #234ed910}.search input:focus-visible{outline:none}.search-hint{font-size:12px;color:#91a0b3;border:1px solid var(--line);border-radius:4px;padding:3px 6px;white-space:nowrap}.category-label select{height:56px;min-width:180px;border:1px solid var(--line);border-radius:10px;color:#485569;background:#fff;padding:0 36px 0 18px;font-size:15px;max-width:240px}.collection-heading{display:flex;justify-content:space-between;gap:20px;align-items:center;margin-bottom:22px}.filters{display:flex;gap:8px;flex-wrap:wrap}.filters button{border:0;color:#738096;background:transparent;padding:10px 16px;border-radius:7px;font-size:14px;white-space:nowrap}.filters button.active{color:var(--blue);background:#e7edff;font-weight:700}.filters span{font-size:12px;border-radius:4px;background:white;padding:1px 6px;margin-left:5px}.sort-label{font-size:13px;color:#8792a3;white-space:nowrap}.grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px;min-height:360px;align-items:start}.card{background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden;transition:transform .18s,box-shadow .18s}.card:hover{transform:translateY(-3px);box-shadow:0 12px 30px #2133560c}.card-cover{width:100%;height:150px;border:0;display:flex;align-items:center;justify-content:center;position:relative;background:#edf2ff;color:#4162d4}.card-cover.pdf{background:#eaf5f4;color:#268779}.card-cover.video{background:#eaf0fa;color:#4a6084}.cover-lines{position:absolute;inset:0;background-image:linear-gradient(#fff5 1px,transparent 1px),linear-gradient(90deg,#fff5 1px,transparent 1px);background-size:25px 25px;mask-image:linear-gradient(to right,black,transparent)}.file-glyph{width:58px;height:72px;border:2px solid currentColor;border-radius:6px;position:relative;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:700;background:#ffffff80;box-shadow:6px 7px 0 #ffffff70;transform:rotate(-5deg)}.video .file-glyph{height:56px;width:78px;transform:none;border-radius:10px}.file-glyph svg{height:26px;width:26px;fill:currentColor}.type-badge{position:absolute;left:16px;top:14px;font-size:11px;letter-spacing:1px;font-weight:700;background:#ffffffa6;padding:4px 8px;border-radius:4px}.cover-action{position:absolute;right:14px;bottom:12px;background:white;border-radius:100px;padding:5px 10px;font-size:12px;font-weight:500;color:#53637d}.card-content{padding:20px}.category-chip{color:var(--muted);font-size:12px;letter-spacing:.03em;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card h2{font-size:17px;line-height:1.6;margin:7px 0 16px;overflow-wrap:anywhere}.title-button{border:0;background:none;padding:0;text-align:left;font:inherit;color:inherit}.card-meta{font-size:12px;color:#8a96a7;display:flex;justify-content:space-between;gap:8px;border-top:1px solid #eef1f6;padding-top:14px}.card-admin{display:flex;gap:12px;padding-top:14px;justify-content:flex-end}.card-admin button{font-size:13px;border:0;background:none;color:#6c7990;padding:3px}.card-admin button.remove{color:#ba4e61}.card-status{font-size:13px;margin:12px 0 0;color:#85711e;line-height:1.6}.empty{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:350px;border:1px dashed #d4dce8;border-radius:14px;text-align:center;padding:32px;background:#ffffff85}.empty-icon{font-size:36px;color:#8da2d4;width:76px;height:76px;border-radius:23px;background:#edf2ff;display:grid;place-items:center;margin-bottom:20px}.empty h2{font-size:20px;margin:0 0 10px}.empty p{font-size:15px;color:var(--muted);line-height:1.8;margin:0 0 20px}.notice{padding:14px 18px;border-radius:8px;background:#fff3d9;color:#765719;margin-bottom:20px;font-size:14px}footer{border-top:1px solid var(--line);margin-top:46px;padding:24px 0;display:flex;justify-content:space-between;color:#8a96a6;font-size:12px;gap:15px}dialog{border:1px solid var(--line);border-radius:18px;box-shadow:0 25px 100px #07112f33;padding:28px;width:min(560px,calc(100% - 32px));max-height:calc(100dvh - 40px);color:#192534}dialog::backdrop{background:#18243c88;backdrop-filter:blur(4px)}.dialog-heading{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:22px}.dialog-heading h2{font-size:23px;margin:7px 0 0}.icon-button{border:0;background:#f0f3f8;border-radius:50%;color:#65748a;width:36px;height:36px;font-size:25px;flex-shrink:0;display:grid;place-items:center}.drop-zone{position:relative;display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;padding:27px 15px;border:1.5px dashed #bbc9ed;border-radius:10px;background:#f6f8ff;cursor:pointer}.drop-zone.dragover{background:#e2eaff;border-color:var(--blue)}.drop-zone strong{font-size:15px;max-width:100%;overflow-wrap:anywhere}.drop-zone>span:last-of-type{font-size:12px;color:var(--muted)}.upload-symbol{font-size:28px;color:var(--blue)}.drop-zone input{position:absolute;inset:0;opacity:0;width:100%;cursor:pointer}.drop-zone:focus-within{outline:3px solid #91adff}.field{font-size:14px;font-weight:600;display:flex;flex-direction:column;gap:9px;margin-top:20px}.field input{border:1px solid #d9e0eb;padding:12px;border-radius:7px;width:100%;font-size:15px;color:#26354a}.upload-help{font-size:13px;line-height:1.8;color:#7a8799;margin:18px 0}.dialog-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:24px}.error-text{font-size:14px;color:#b43d51;line-height:1.7}.error-text:empty{display:none}progress{width:100%;accent-color:var(--blue);height:8px}#progress-text{font-size:13px;color:var(--muted)}.viewer{padding:0;width:min(1280px,calc(100% - 32px));height:calc(100dvh - 48px);max-height:none;overflow:hidden}.viewer-top{height:90px;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:16px 24px;background:#fff}.viewer h2{margin:0;font-size:18px;max-width:65vw;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.viewer p{margin:6px 0 0;color:var(--muted);font-size:12px}.viewer-actions{display:flex;align-items:center;gap:20px;flex-shrink:0}.viewer-actions a{font-size:13px;color:var(--blue)}#viewer-body{height:calc(100% - 90px);background:#222b39;display:flex;align-items:center;justify-content:center}#viewer-body iframe{width:100%;height:100%;border:0;background:#e9edf3}#viewer-body video{width:100%;height:100%;max-height:100%;background:#121720}#video-error{position:absolute;bottom:10px;left:20px;right:20px;background:#fff0f0;border-radius:8px;padding:12px}.toast{position:fixed;bottom:30px;left:50%;transform:translateX(-50%);background:#263851;color:#fff;padding:13px 22px;border-radius:10px;font-size:14px;box-shadow:0 5px 25px #0002;z-index:5;max-width:90%;text-align:center}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
@media(min-width:1500px){main{padding-left:70px;padding-right:70px}.card-cover{height:175px}}@media(max-width:1000px){.grid{grid-template-columns:repeat(2,minmax(0,1fr))}.topbar{gap:35px}.sort-label{display:none}}@media(max-width:650px){.topbar{height:72px;padding:0 20px;gap:20px}.brand{font-size:20px;gap:9px}.brand-mark{width:35px;height:35px;font-size:20px;border-radius:10px}.brand-small,.brand-divider,.local-badge{display:none}nav{gap:20px;margin-left:auto}nav a{font-size:14px}main{padding:30px 20px 0}h1{font-size:27px}.heading{align-items:flex-start;margin-bottom:26px;gap:12px}.heading .primary{padding:10px 12px;margin-top:23px;font-size:13px;white-space:nowrap}.heading p{font-size:14px;line-height:1.8}.eyebrow{font-size:11px;letter-spacing:1.6px}.toolbar{gap:9px;margin-bottom:22px}.search{padding:0 12px;height:50px}.search input{font-size:14px}.search-hint{display:none}.category-label select{min-width:105px;width:105px;height:50px;font-size:13px;padding:0 5px}.filters{gap:3px}.filters button{padding:9px 10px;font-size:13px}.filters span{display:none}.grid{grid-template-columns:1fr;gap:20px}.card-cover{height:155px}.card h2{font-size:18px}.card-meta{font-size:13px}.empty{min-height:340px;padding:25px 14px}.empty p{font-size:14px}footer{margin-top:30px;line-height:1.8;flex-direction:column;gap:4px}.viewer{width:100%;height:100dvh;max-height:100dvh;border:0;border-radius:0;margin:0}.viewer-top{height:92px;padding:12px 16px;gap:10px}.viewer h2{max-width:58vw;font-size:16px}.viewer-actions{gap:10px}.viewer-actions a{font-size:12px;max-width:4em;line-height:1.7}#viewer-body{height:calc(100% - 92px)}dialog{padding:22px}.dialog-heading h2{font-size:21px}.drop-zone{padding:22px 10px}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}

/* The same library adapts to desktops, tablets, and phones. */
html { -webkit-text-size-adjust: 100%; }
body:has(dialog[open]) { overflow: hidden; }
.heading > div, .search, .viewer-top > div:first-child { min-width: 0; }
.viewer[open] { display: flex; flex-direction: column; }
.viewer-top { flex: 0 0 auto; height: auto; min-height: 90px; }
.viewer-top > div:first-child { flex: 1; }
.viewer h2 { max-width: none; }
.viewer p { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#viewer-body { flex: 1; min-height: 0; height: auto; }
.icon-button { min-width: 44px; min-height: 44px; }
.card-meta { flex-wrap: wrap; }
.dialog-actions { flex-wrap: wrap; }
@media (max-width: 650px) {
  .topbar { padding-left: max(16px, env(safe-area-inset-left)); padding-right: max(16px, env(safe-area-inset-right)); gap: 12px; }
  main { padding: 26px max(16px, env(safe-area-inset-right)) 0 max(16px, env(safe-area-inset-left)); }
  .toolbar { flex-direction: column; }
  .search { flex: none; width: 100%; }
  .search input, .field input, .category-label select { font-size: 16px; }
  .category-label select { width: 100%; max-width: none; height: 46px; padding: 0 12px; }
  .filters { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 3px; width: 100%; }
  .filters button { min-height: 44px; font-size: 13px; padding: 8px 3px; }
  .heading:has(#upload-open:not([hidden])) { flex-direction: column; gap: 16px; }
  .heading .primary { margin-top: 0; min-height: 44px; font-size: 15px; }
  .viewer { padding: 0; max-width: none; }
  .viewer-top { min-height: 80px; padding: max(10px, env(safe-area-inset-top)) max(12px, env(safe-area-inset-right)) 10px max(12px, env(safe-area-inset-left)); }
  .viewer h2 { max-width: none; }
  .viewer-actions { gap: 8px; }
  .viewer-actions a { font-size: 13px; min-height: 44px; display: flex; align-items: center; }
  #viewer-body { height: auto; padding-bottom: env(safe-area-inset-bottom); }
  dialog:not(.viewer) { width: calc(100% - 24px); max-height: calc(100dvh - 24px); padding: 20px; }
  .dialog-heading { gap: 10px; }
  .dialog-heading h2 { font-size: 20px; }
  .dialog-actions > button { flex: 1; min-height: 46px; }
  .card-admin button { min-height: 44px; padding: 8px 12px; }
  footer { padding-bottom: max(20px, env(safe-area-inset-bottom)); }
}
@media (max-width: 950px) and (max-height: 500px) {
  .viewer { width: 100%; height: 100dvh; max-height: 100dvh; max-width: none; margin: 0; border: 0; border-radius: 0; padding: 0; }
  .viewer-top { min-height: 56px; padding: 6px max(12px, env(safe-area-inset-right)) 6px max(12px, env(safe-area-inset-left)); }
  .viewer h2 { font-size: 16px; }
  .viewer p { display: none; }
}

.viewer-back { min-height: 44px; padding: 0 12px; border: 1px solid #cbd7fa; border-radius: 8px; background: #edf2ff; color: #234ed9; font-size: 14px; font-weight: 600; white-space: nowrap; }
@media (max-width: 550px) { .viewer-actions:has(.viewer-back:not([hidden])) #open-file { display: none; } }

@media (max-width: 550px) { .viewer-actions #open-file { display: none; } }

.field select{border:1px solid #d9e0eb;padding:12px;border-radius:7px;width:100%;font-size:15px;color:#26354a;background:#fff;min-width:0}
.download-setting{display:flex;align-items:flex-start;gap:12px;margin-top:20px;padding:15px;border:1px solid #dce4f3;border-radius:9px;background:#f7f9ff;cursor:pointer}
.download-setting input{width:20px;height:20px;flex-shrink:0;margin:1px 0 0;accent-color:var(--blue)}
.download-setting strong{display:block;font-size:14px;font-weight:600}.download-setting small{display:block;color:var(--muted);font-size:12px;line-height:1.7;margin-top:5px}
.chapter-chip{display:block;font-size:12px;color:#5371a0;margin-top:6px;overflow-wrap:anywhere}.video-permission{font-size:12px;color:var(--muted);margin:10px 0 0}
.card-admin{flex-wrap:wrap}.toolbar .category-label select{min-width:145px;max-width:210px}
@media(max-width:900px) and (min-width:651px){.toolbar{flex-wrap:wrap}.toolbar .search{flex-basis:100%}.toolbar .category-label{flex:1}.toolbar .category-label select{max-width:none;width:100%}}
@media(max-width:650px){.filters{grid-template-columns:repeat(3,minmax(0,1fr))}.toolbar .category-label select{max-width:none;width:100%}.field select{font-size:16px}.viewer-top:has(.viewer-back:not([hidden])){flex-wrap:wrap}.viewer-top:has(.viewer-back:not([hidden]))>div:first-child{flex-basis:100%}.viewer-top:has(.viewer-back:not([hidden])) .viewer-actions{width:100%;justify-content:flex-end}.viewer-back{margin-right:auto}}
