@charset "UTF-8";

:root {
  --ink: #172235;
  --muted: #617087;
  --line: #dce3ec;
  --paper: #f5f7fa;
  --primary: #0b3976;
  --primary-light: #15549d;
  --navy: #071f43;
  --soft: #eaf2fb;
}

* { box-sizing: border-box; }
[hidden] { display: none !important; }
body { margin: 0; font: 13px/1.6 "Microsoft YaHei", "PingFang SC", Arial, sans-serif; }
button { font: inherit; cursor: pointer; }
.page { min-height: 100vh; }
.filter-options { display:flex; flex-wrap:wrap; gap:9px 11px; }
.filter-options { padding:9px 10px 3px 0; }
.filter-btn { position:relative; min-width:58px; min-height:34px; padding:5px 11px; overflow:visible; border:1px solid var(--line); background:#fff; font-size:12px; font-weight:600; }
.btn { display:inline-flex; align-items:center; justify-content:center; gap:5px; min-height:34px; padding:6px 12px; border:1px solid var(--line); color:var(--ink); background:#fff; font-size:12px; font-weight:700; }
.refresh-time { font-size:10px; white-space:nowrap; }
.building,.release-building { margin-bottom:10px; overflow:hidden; border:1px solid var(--line); background:#fff; }
.building-head { display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid var(--line); }
.building-head h2 { margin:0; font-size:14px; }
.building-head span { color:var(--muted); font-size:10px; }
.files { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); align-items:stretch; gap:11px; padding:14px; }
.file { position:relative; display:flex; min-width:0; min-height:108px; padding:14px 15px; overflow:hidden; border:1px solid var(--line); border-radius:12px; background:#fff; box-shadow:0 7px 22px rgba(14,48,88,.04); transition:border-color .2s,box-shadow .2s,transform .2s; flex-direction:column; }
.file:hover { border-color:#9fb9d5; box-shadow:0 12px 30px rgba(11,57,118,.1); transform:translateY(-2px); }
.file:focus-within { border-color:#7fa8d2; box-shadow:0 0 0 3px rgba(21,84,157,.08),0 12px 30px rgba(11,57,118,.08); }
.file h3 { flex:1; min-width:0; margin:0; overflow:hidden; color:#20344f; font-size:17px; font-weight:750; line-height:1.35; text-overflow:ellipsis; white-space:nowrap; }
.file.installed h3 { color:#247443; }
.file.abnormal h3 { color:#b4342b; }
.abnormal-reason { margin-top:9px; color:#b4342b; font-size:10px; line-height:1.45; overflow-wrap:anywhere; }
.download { flex:0 0 auto; width:auto; min-width:64px; min-height:32px; padding:5px 7px; color:#52657d; border:0; background:transparent; box-shadow:none; font-size:12px; font-weight:600; gap:5px; }
.download:hover { color:var(--primary); border:0; background:var(--soft); box-shadow:none; }
.download:focus-visible { color:var(--primary); border:0; outline:2px solid #9fc2e5; outline-offset:1px; background:var(--soft); box-shadow:none; }
.file.installed .download { color:#8792a0; border:0; background:transparent; }
.file.installed .download:hover { color:#667383; border:0; background:#eef1f4; }
.download svg { display:block; flex:0 0 auto; width:16px; height:16px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.download span { line-height:16px; }
.empty { padding:70px 20px; color:var(--muted); border:1px dashed #bbc8c0; border-radius:12px; background:#fff; text-align:center; }
.empty strong { display:block; margin-bottom:8px; color:var(--ink); font-size:17px; }
.toast { position:fixed; right:22px; bottom:22px; padding:12px 16px; color:#fff; border-radius:7px; opacity:0; transform:translateY(15px); transition:.2s; }
.toast.show { opacity:1; transform:none; }
.directory-tools { overflow:hidden; border:1px solid #d6e4f3; background:#fff; }
.school-filter-heading { position:relative; display:flex; align-items:center; gap:15px; padding:21px 22px 17px; background:linear-gradient(105deg,#f1f7fe 0%,#f8fbff 68%,#fff 100%); }
.school-filter-icon { display:grid; width:48px; height:48px; flex:0 0 48px; color:#1769bd; border:1px solid #cfe4f8; border-radius:12px; background:#e3f1ff; box-shadow:0 5px 14px rgba(21,84,157,.08); place-items:center; }
.school-filter-icon svg { width:24px; height:24px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.school-filter-copy { min-width:0; flex:1; }
.school-filter-copy small,.school-filter-copy h1,.school-filter-copy p { display:block; margin:0; }
.school-filter-copy small { color:#3974ae; font-size:9px; font-weight:750; letter-spacing:1.4px; }
.school-filter-copy h1 { margin-top:1px; color:#203650; font-size:20px; line-height:1.45; }
.school-filter-copy p { margin-top:2px; color:#6d7f94; font-size:11px; }
.filter-reset { margin-left:auto; flex:0 0 auto; padding:6px 2px; color:#55708e; border:0; background:transparent; font-size:11px; }
.filter-reset::before { margin-right:5px; content:"↺"; font-size:13px; }
.filter-reset:hover { color:var(--primary); }
.directory-steps { display:flex; align-items:center; gap:10px; padding:11px 22px; color:#8290a1; border-top:1px solid #e8eff7; border-bottom:1px solid #e8eff7; background:#fbfdff; font-size:10px; }
.directory-steps span { display:flex; align-items:center; gap:6px; }
.directory-steps b { display:grid; width:20px; height:20px; color:#64768b; border:1px solid #cbd6e2; border-radius:50%; background:#fff; font-size:9px; place-items:center; }
.directory-steps i { font-style:normal; font-weight:650; }
.directory-steps .active { color:#185b9d; }
.directory-steps .active b { color:#fff; border-color:#1769bd; background:#1769bd; }
.directory-steps em { width:32px; height:1px; background:#ccd7e3; }
.school-filters { display:grid; grid-template-columns:145px 145px 145px minmax(250px,1fr); gap:12px; padding:16px 22px 20px; }
.school-filters[data-region-count="2"] { grid-template-columns:160px 160px minmax(250px,1fr); }
.school-filters[data-region-count="1"] { grid-template-columns:180px minmax(250px,1fr); }
.school-filters[data-region-count="0"] { grid-template-columns:minmax(250px,1fr); }
.school-filter-field { display:block; min-width:0; color:#607187; font-size:11px; font-style:normal; font-weight:600; }
.school-filter-field>span { display:block; margin:0 0 6px 2px; }
.school-filter-field.active>span { color:var(--primary); }
.select-shell,.school-search { position:relative; display:flex; height:40px; align-items:center; overflow:hidden; border:1px solid #d7e0ea; border-radius:8px; background:#fff; box-shadow:0 1px 2px rgba(24,53,84,.025); font-style:normal; transition:border-color .18s,box-shadow .18s,background .18s; }
.select-shell::after { position:absolute; right:13px; width:7px; height:7px; margin-top:-4px; border-right:1.5px solid #718197; border-bottom:1.5px solid #718197; content:""; pointer-events:none; transform:rotate(45deg); }
.select-shell:focus-within,.school-search:focus-within { border-color:#69a7e3; box-shadow:0 0 0 3px rgba(21,84,157,.09); }
.school-filter-field.active .select-shell,.school-filter-field.active .school-search { border-color:#a7c8e9; background:#fbfdff; }
.school-filter-field.disabled { color:#9aa6b4; }
.school-filter-field.disabled .select-shell { border-color:#e4e9ef; background:#f7f9fb; }
.school-filters select { width:100%; height:38px; padding:0 34px 0 12px; color:#334a65; border:0; outline:0; appearance:none; background:transparent; font:12px "Microsoft YaHei","PingFang SC",Arial,sans-serif; cursor:pointer; }
.school-filters select:disabled { color:#a3adba; cursor:not-allowed; }
.school-search svg { width:17px; height:17px; margin-left:12px; flex:0 0 17px; fill:none; stroke:#73849a; stroke-width:1.8; stroke-linecap:round; }
.school-search input { min-width:0; height:38px; padding:0 8px 0 9px; flex:1; color:var(--ink); border:0; outline:0; background:transparent; font:12px "Microsoft YaHei","PingFang SC",Arial,sans-serif; }
.school-search input::placeholder { color:#9ba7b5; }
.school-search input::-webkit-search-cancel-button { display:none; }
.school-search button { width:36px; height:36px; flex:0 0 36px; padding:0; color:#8793a2; border:0; background:transparent; font-size:18px; line-height:36px; }
.school-search button:hover { color:var(--primary); }
.filter-btn small { position:absolute; top:-7px; right:-8px; display:inline-flex; align-items:center; justify-content:center; min-width:18px; height:18px; padding:0 5px; color:#fff; border:2px solid #fff; border-radius:9px; background:#7d8b9d; box-shadow:0 2px 6px rgba(23,34,53,.16); font-size:9px; font-weight:700; line-height:14px; pointer-events:none; }
.filter-btn.active small { color:#fff; background:#2877c7; }
.release-list { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:12px; }
.release-card { display:grid; grid-template-columns:38px minmax(0,1fr) auto; align-items:center; gap:11px; padding:13px 14px; color:var(--ink); border:1px solid var(--line); background:#fff; text-decoration:none; transition:.2s ease; }
.release-card h3 { margin:0; overflow:hidden; font-size:14px; text-overflow:ellipsis; white-space:nowrap; }
.release-card-head { display:flex; align-items:center; justify-content:space-between; gap:12px; }
.release-progress-row { display:flex; align-items:baseline; justify-content:space-between; gap:8px; margin-top:18px; color:#68778b; font-size:10px; }
.release-progress-row strong { color:#294767; font-size:17px; line-height:1; }
.release-progress-row strong small { color:#8491a0; font-size:10px; font-weight:500; }
.release-progress-bar { height:6px; margin-top:8px; overflow:hidden; border-radius:4px; background:#e9eef3; }
.release-progress-bar i { display:block; height:100%; border-radius:3px; background:linear-gradient(90deg,#15549d,#4a91d1); }
.pagination { display:flex; align-items:center; justify-content:center; gap:14px; min-height:54px; color:var(--muted); border-top:1px solid var(--line); font-size:11px; }
.pagination b { color:var(--ink); }

body {
  color: var(--ink);
  background:
    linear-gradient(rgba(11,57,118,.026) 1px,transparent 1px),
    linear-gradient(90deg,rgba(11,57,118,.026) 1px,transparent 1px),
    var(--paper);
  background-size: 48px 48px;
  font-family: "Noto Sans SC", "Microsoft YaHei", "PingFang SC", Arial, sans-serif;
}

.hero {
  position: relative;
  overflow: hidden;
  color: #fff;
  background: linear-gradient(125deg, #061f44 0%, #0c3b78 58%, #15599d 100%);
  box-shadow: 0 4px 18px rgba(7,31,67,.14);
}

.hero::before {
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(255,255,255,.06) 1px, transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.06) 1px,transparent 1px);
  background-size: 52px 52px;
  content: "";
  opacity: .22;
  mask-image: linear-gradient(90deg,#000,transparent);
}

.site-nav {
  position: relative;
  z-index: 1;
}

.site-nav {
  border-bottom: 1px solid rgba(255,255,255,.13);
}

.site-nav-inner,
.main {
  width: min(1180px, calc(100% - 48px));
  margin-inline: auto;
}

.site-nav-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 76px;
}

.site-brand {
  display: flex;
  align-items: center;
  gap: 12px;
  color: #fff;
  text-decoration: none;
}

.site-brand img {
  width: 44px;
  height: 44px;
  border-radius: 11px;
  background: #fff;
  box-shadow: 0 5px 16px rgba(0,0,0,.16);
}

.site-brand span,
.site-brand strong,
.site-brand small { display: block; }

.site-brand strong {
  font: 700 19px/1.35 "Noto Serif SC", "Songti SC", serif;
  letter-spacing: 1px;
}

.site-brand strong i {
  margin-left: 5px;
  color: #8fc4f3;
  font: 700 10px Arial, sans-serif;
  letter-spacing: .5px;
}

.site-brand small {
  margin-top: 1px;
  color: #9fb6cf;
  font-size: 9px;
  letter-spacing: .5px;
}

.site-home {
  padding: 8px 14px;
  color: #dce9f5;
  border: 1px solid rgba(255,255,255,.25);
  border-radius: 7px;
  text-decoration: none;
  font-size: 12px;
  transition: .2s ease;
}

.site-home:hover { color: #fff; background: rgba(255,255,255,.08); }

.status-panel { display:flex; align-items:center; gap:15px; padding:24px 26px; color:#5f4b1e; border:1px solid #ead59c; border-radius:12px; background:#fffaf0; box-shadow:0 9px 28px rgba(14,48,88,.05); }
.status-panel-mark { display:grid; flex:0 0 auto; width:38px; height:38px; color:#fff; border-radius:50%; background:#c99a4a; font-size:20px; font-weight:700; place-items:center; }
.status-panel div { flex:1; min-width:0; }
.status-panel h2 { margin:0 0 3px; font-size:16px; }
.status-panel p { margin:0; color:#796b4d; font-size:12px; }
.status-panel a { flex:0 0 auto; color:var(--primary); font-size:12px; font-weight:600; text-decoration:none; }

.main { padding: 30px 0 55px; }

.directory-tools {
  border-color: var(--line);
  border-radius: 13px;
  background: rgba(255,255,255,.97);
  box-shadow: 0 12px 32px rgba(14,48,88,.075);
}

.directory-tools { margin-bottom: 14px; }
.filter-btn {
  color: #41536b;
  border-color: #d5dde7;
  border-radius: 7px;
  transition: .18s ease;
}

.filter-btn:hover { color: var(--primary); border-color: #9fb9d5; background: #f6f9fd; }
.filter-btn.active { color:#fff; border-color:var(--primary); background:var(--primary); box-shadow:0 4px 11px rgba(11,57,118,.16); }

.refresh-time { color: var(--muted); }

.btn {
  border-color: #cfd9e5;
  border-radius: 7px;
  transition: .18s ease;
}

.btn:hover { color:var(--primary); border-color:#9fb9d5; background:#f6f9fd; }
.btn-primary { color:#fff; border-color:var(--primary); background:var(--primary); }
.btn-primary:hover { color:#fff; border-color:var(--primary-light); background:var(--primary-light); }
@keyframes refresh-spin { to { transform:rotate(360deg); } }

.building,
.release-building {
  border-color: var(--line);
  border-radius: 13px;
  box-shadow: 0 9px 28px rgba(14,48,88,.055);
}

.building-head { padding: 11px 15px; background:#f8fafc; }
.building-head h2 { color:#294767; font-family:"Noto Serif SC","Songti SC",serif; }
.file { border-color:#e9eef3; }
.file h3 { color:#20344f; }

.release-building .release-list { gap:13px; padding:16px; }
.release-card { border-color:var(--line); border-radius:12px; box-shadow:0 7px 22px rgba(14,48,88,.04); }
.release-card:hover { border-color:#9fb9d5; box-shadow:0 12px 30px rgba(11,57,118,.1); transform:translateY(-2px); }
.release-card h3 { color:#253a55; }
.toast { background:var(--navy); box-shadow:0 10px 30px rgba(7,31,67,.23); }
.release-list-head { min-height:50px; padding:9px 16px; }
.release-list-head>div { display:flex; min-width:0; align-items:center; gap:9px; }
.release-list-head #filterSummary { max-width:430px; overflow:hidden; padding-left:9px; color:#47709b; border-left:1px solid #d7e0e9; text-overflow:ellipsis; white-space:nowrap; }
.release-list-tools { justify-content:flex-end; }
.release-list-tools>span { white-space:nowrap; }
.list-refresh { display:inline-flex; width:82px; height:34px; padding:0 12px; align-items:center; justify-content:center; gap:6px; color:#fff !important; border:1px solid var(--primary); border-radius:7px; background:var(--primary) !important; box-shadow:0 4px 10px rgba(11,57,118,.16); font-size:12px; font-weight:600; line-height:1; }
.list-refresh:hover { color:#fff !important; border-color:var(--primary-light); background:var(--primary-light) !important; }
.list-refresh:focus-visible { outline:2px solid #9fc2e5; outline-offset:2px; }
.list-refresh:disabled { color:#fff !important; border-color:#7697bd; background:#7697bd !important; cursor:wait; opacity:1; }
.list-refresh svg { width:14px; height:14px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.list-refresh.loading svg { animation:refresh-spin .8s linear infinite; }
.building-head .list-refresh,
.building-head .list-refresh span { color:#fff !important; }
.school-release-card { display:block; min-height:165px; padding:0; overflow:hidden; }
.school-release-card .release-card-head { min-height:56px; padding:10px 13px 8px; align-items:center; justify-content:flex-start; border-bottom:1px solid #edf1f5; }
.release-school-mark { display:grid; width:38px; height:38px; flex:0 0 38px; color:#1769bd; border-radius:9px; background:#eaf3fc; place-items:center; }
.release-school-mark svg { width:19px; height:19px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.release-school-copy { min-width:0; flex:1; }
.release-school-copy h3 { font-size:14px; }
.release-school-copy p { margin:3px 0 0; overflow:hidden; color:#778698; font-size:9px; text-overflow:ellipsis; white-space:nowrap; }
.school-release-card>.release-progress-row,.school-release-card>.release-progress-bar { margin-right:13px; margin-left:13px; }
.school-release-card .release-card-foot { display:flex; min-height:40px; margin-top:8px; padding:7px 13px; align-items:center; justify-content:space-between; gap:10px; border-top:1px solid #edf1f5; background:#fbfcfe; }
.school-release-card .release-progress-row { margin-top:13px; }
.release-card-foot>small { min-width:0; overflow:hidden; color:#929eac; font-size:9px; text-overflow:ellipsis; white-space:nowrap; }
.enter-install { margin-left:auto; flex:0 0 auto; color:#15549d; font-size:10px; font-weight:700; }
.enter-install b { margin-left:3px; font-size:14px; font-weight:400; transition:transform .18s; }
.school-release-card:hover .enter-install b { display:inline-block; transform:translateX(3px); }
.school-release-card.complete .release-school-mark { color:#277b49; background:#e9f7ee; }
.school-release-card.complete .release-card-foot { background:#f7fcf9; }
.school-release-card.progress .release-school-mark { color:#1769bd; background:#eaf3fc; }
.skeleton-card { display:block; min-height:190px; padding:18px; pointer-events:none; }
.skeleton-card i { display:block; height:11px; margin-bottom:15px; border-radius:6px; background:linear-gradient(90deg,#edf1f5 25%,#f7f9fb 37%,#edf1f5 63%); background-size:400% 100%; animation:skeleton 1.25s ease infinite; }
.skeleton-card i:first-child { width:64%; height:17px; }
.skeleton-card i:nth-child(2) { width:42%; }
.skeleton-card i:nth-child(3) { width:100%; height:6px; margin-top:35px; }
.skeleton-card i:nth-child(4) { width:55%; margin-top:30px; }
@keyframes skeleton { 0% { background-position:100% 50%; } 100% { background-position:0 50%; } }
.school-empty { grid-column:1/-1; margin:4px; padding:58px 20px; border-color:#d9e2eb; background:#fbfcfe; }
.school-empty p { margin:0 0 16px; }
.empty-search-icon { display:grid; width:44px; height:44px; margin:0 auto 12px; color:#70849b; border-radius:50%; background:#edf3f8; font-size:24px; place-items:center; }
.school-empty.error .empty-search-icon { color:#b5443c; background:#fff0ef; }

@media (max-width: 560px) {
  .site-nav-inner,
  .main { width: calc(100% - 28px); }
  .site-nav-inner { min-height: 66px; }
  .site-brand img { width: 40px; height: 40px; }
  .site-brand small { display:none; }
  .site-home { padding:7px 10px; }
  .school-filter-heading { align-items:flex-start; padding:17px 14px 14px; }
  .school-filter-icon { width:40px; height:40px; flex-basis:40px; }
  .school-filter-copy h1 { font-size:18px; }
  .school-filter-copy p { line-height:1.55; }
  .filter-reset { align-self:flex-start; }
  .directory-steps { padding:10px 14px; }
  .school-filters,
  .school-filters[data-region-count="2"],
  .school-filters[data-region-count="1"],
  .school-filters[data-region-count="0"] { grid-template-columns:repeat(2,minmax(0,1fr)); gap:11px 9px; padding:14px; }
  .school-filters[data-region-count="1"] .school-filter-field:not([hidden]) { grid-column:1/-1; }
  .school-search-field { grid-column:1/-1; }
  .release-list-head { align-items:flex-start; gap:8px; flex-direction:column; }
  .release-list-head>div { width:100%; }
  .release-list-tools { justify-content:space-between; }
  .release-list-tools .refresh-time { display:none; }
}

@media (min-width:561px) and (max-width:850px) {
  .school-filters,
  .school-filters[data-region-count="2"],
  .school-filters[data-region-count="1"],
  .school-filters[data-region-count="0"] { grid-template-columns:repeat(3,minmax(0,1fr)); }
  .school-search-field { grid-column:1/-1; }
}

@media (max-width:1050px) { .files { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:1100px) { .release-list { grid-template-columns:repeat(3,minmax(0,1fr)); } }
@media (max-width:850px) { .files { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:560px) { .release-list { grid-template-columns:1fr; } }
@media (max-width:560px) { .file { min-height:102px; } .download { min-width:64px; } }

.completion-panel { display:flex; align-items:center; justify-content:space-between; gap:18px; margin-bottom:12px; padding:14px 16px; color:#32485f; border:1px solid #cbd9e8; border-left:4px solid #4a91d1; border-radius:10px; background:#f7fbff; }
.completion-panel>div:first-child { min-width:0; }
.completion-eyebrow { color:#5d7692; font-size:9px; font-weight:700; letter-spacing:1px; }
.completion-panel h2 { margin:2px 0; font-size:14px; }
.completion-panel p { margin:0; color:#68788b; font-size:10px; }
.completion-counts { display:flex; flex:0 0 auto; gap:8px; }
.completion-counts button { min-width:72px; padding:7px 9px; color:#68788b; border:1px solid #dce5ee; border-radius:7px; background:#fff; font:inherit; font-size:9px; text-align:center; }
.completion-counts button { cursor:pointer; transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease; }
.completion-counts button:hover:not(:disabled) { border-color:#9fb9d5; box-shadow:0 3px 9px rgba(14,48,88,.08); transform:translateY(-1px); }
.completion-counts button.active { color:#15549d; border-color:#4a91d1; box-shadow:0 0 0 2px rgba(74,145,209,.14); }
.completion-counts button:disabled { cursor:default; opacity:.5; }
.completion-counts b { display:block; color:#294767; font-size:16px; line-height:1.2; }
.completion-panel.complete { border-color:#b8dfc6; border-left-color:#2d9654; background:#f2fbf5; }
.completion-panel.complete h2,.completion-panel.complete .completion-counts b { color:#237443; }
.completion-panel.attention { border-color:#ecc9c6; border-left-color:#d64a40; background:#fff7f6; }
.completion-panel.attention h2,.completion-panel.attention .abnormal-count b { color:#b4342b; }
.release-card-head h3 { flex:1; }
.release-state { flex:0 0 auto; padding:2px 7px; color:#667383; border-radius:9px; background:#edf0f4; font-size:9px; font-weight:700; }
.release-state.progress { color:#15549d; background:#eaf2fb; }
.release-state.complete { color:#237443; background:#e9f7ee; }
.release-card.complete { border-color:#b8dfc6; }
.release-card.complete .release-progress-bar i { background:#36a260; }

@media (max-width:560px) {
  .completion-panel { align-items:stretch; flex-direction:column; }
  .completion-counts { width:100%; }
  .completion-counts button { flex:1; min-width:0; }
  .release-card-head { flex-wrap:wrap; }
  .release-card-head h3 { flex-basis:calc(100% - 90px); }
}

/* Public device installation workflow */
.terminal-main { padding-top:30px; }
.terminal-overview { margin-bottom:14px; overflow:hidden; border:1px solid var(--line); border-radius:13px; background:rgba(255,255,255,.97); box-shadow:0 12px 32px rgba(14,48,88,.075); }
.terminal-overview-head { display:flex; align-items:center; gap:15px; padding:21px 22px 17px; background:linear-gradient(105deg,#f1f7fe 0%,#f8fbff 68%,#fff 100%); }
.terminal-school-mark { display:grid; width:48px; height:48px; flex:0 0 48px; color:#1769bd; border:1px solid #cfe4f8; border-radius:12px; background:#e3f1ff; box-shadow:0 5px 14px rgba(21,84,157,.08); place-items:center; }
.terminal-school-mark svg,.terminal-device-mark svg { width:24px; height:24px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.terminal-overview-copy { min-width:0; flex:1; }
.terminal-overview-copy small,.terminal-overview-copy h1,.terminal-overview-copy p { display:block; margin:0; }
.terminal-overview-copy small { color:#3974ae; font-size:9px; font-weight:750; letter-spacing:1.2px; }
.terminal-overview-copy h1 { margin-top:1px; overflow:hidden; color:#203650; font-size:20px; line-height:1.45; text-overflow:ellipsis; white-space:nowrap; }
.terminal-overview-copy p { margin-top:2px; color:#6d7f94; font-size:11px; }
.terminal-back { flex:0 0 auto; padding:7px 10px; color:#55708e; border:1px solid #d5e0eb; border-radius:7px; background:#fff; font-size:10px; font-weight:650; text-decoration:none; }
.terminal-back::before { margin-right:5px; content:"‹"; font-size:15px; vertical-align:-1px; }
.terminal-back:hover { color:var(--primary); border-color:#9fb9d5; }
.terminal-steps .complete { color:#39745a; }
.terminal-steps .complete b { color:#fff; border-color:#3b9564; background:#3b9564; }
.terminal-completion { align-items:center; padding:20px 22px; }
.terminal-sticky-tools { position:sticky; top:0; z-index:10; padding-bottom:12px; background:rgba(245,247,250,.96); box-shadow:0 8px 18px rgba(14,48,88,.08); backdrop-filter:blur(10px); }
.terminal-sticky-tools .terminal-completion { margin-bottom:12px; }
.terminal-list-toolbar { margin-bottom:0; }
.completion-copy { min-width:0; flex:1; }
.completion-meter { height:6px; margin-top:13px; overflow:hidden; border-radius:4px; background:#e1e9f1; }
.completion-meter i { display:block; width:0; height:100%; border-radius:4px; background:linear-gradient(90deg,#15549d,#4a91d1); transition:width .25s ease; }
.terminal-completion.complete .completion-meter i { background:#36a260; }
.terminal-filters { display:grid; grid-template-columns:minmax(220px,auto) minmax(220px,auto) minmax(270px,1fr); gap:15px; padding:14px 22px 19px; border-top:1px solid #e8eff7; background:#fbfdff; }
.terminal-filters[data-visible-filters="1"] { grid-template-columns:minmax(300px,1fr) minmax(270px,1fr); }
.terminal-filters[data-visible-filters="0"] { grid-template-columns:1fr; }
.terminal-filter-field { min-width:0; color:#607187; font-size:11px; font-weight:600; }
.terminal-filter-field>span { display:block; margin:0 0 7px 2px; }
.terminal-filter-field.active>span { color:var(--primary); }
.terminal-filter-field .filter-options { gap:7px; padding:0; }
.terminal-filter-field .filter-btn { min-width:52px; min-height:40px; padding:6px 12px; border-radius:8px; }
.terminal-filter-field .filter-btn small { position:static; min-width:16px; height:16px; margin-left:5px; padding:0 4px; border:0; box-shadow:none; line-height:16px; vertical-align:1px; }
.terminal-search-field .school-search { height:40px; font-style:normal; }
.terminal-device-list .building-head { min-height:57px; padding:10px 16px; }
.terminal-device-list .building-head>div { min-width:0; }
.terminal-device-list .building-head h2,.terminal-device-list .building-head span { display:block; }
.terminal-device-list .building-head span { margin-top:1px; }
.terminal-list-head>div { display:flex; min-width:0; align-items:center; gap:9px; }
.terminal-list-head>div:first-child span { padding-left:9px; border-left:1px solid #d7e0e9; }
.terminal-list-tools { justify-content:flex-end; }
.terminal-list-tools strong { color:#52708e; font-size:10px; white-space:nowrap; }
.terminal-device-card { min-height:122px; padding:0; }
.terminal-card-head { display:flex; min-width:0; min-height:68px; padding:11px 13px; align-items:center; gap:10px; border-bottom:1px solid #edf1f5; }
.terminal-device-mark { display:grid; width:40px; height:40px; flex:0 0 40px; color:#1769bd; border-radius:9px; background:#eaf3fc; place-items:center; }
.terminal-device-mark svg { width:20px; height:20px; }
.terminal-device-copy { min-width:0; flex:1; }
.terminal-device-copy small { display:block; overflow:hidden; color:#7b899a; font-size:9px; text-overflow:ellipsis; white-space:nowrap; }
.terminal-device-copy h3 { margin-top:1px; font-size:18px; }
.terminal-state { flex:0 0 auto; padding:3px 8px; color:#667383; border-radius:10px; background:#edf0f4; font-size:9px; font-weight:700; }
.terminal-device-card.installed .terminal-device-mark { color:#277b49; background:#e9f7ee; }
.terminal-device-card.installed .terminal-state { color:#237443; background:#e9f7ee; }
.terminal-device-card.abnormal .terminal-device-mark { color:#b4342b; background:#fff0ef; }
.terminal-device-card.abnormal .terminal-state { color:#b4342b; background:#fff0ef; }
.terminal-card-foot { display:flex; min-height:52px; padding:8px 10px 8px 13px; align-items:center; justify-content:space-between; gap:10px; background:#fbfcfe; }
.terminal-card-foot>span { overflow:hidden; color:#68798d; font-size:10px; text-overflow:ellipsis; white-space:nowrap; }
.terminal-card-foot .download { min-width:88px; color:#fff; border:1px solid var(--primary); border-radius:7px; background:var(--primary); }
.terminal-card-foot .download:hover { color:#fff; border:1px solid var(--primary-light); background:var(--primary-light); }
.terminal-device-card.installed .terminal-card-foot .download,.terminal-device-card.abnormal .terminal-card-foot .download { color:#52657d; border-color:#d7e0ea; background:#fff; }
.terminal-device-card.installed .terminal-card-foot .download:hover,.terminal-device-card.abnormal .terminal-card-foot .download:hover { color:var(--primary); border-color:#9fb9d5; background:#f6f9fd; }
.terminal-device-card .abnormal-reason { margin:10px 15px 0; padding:8px 9px; border-radius:6px; background:#fff3f2; }
.terminal-list-more { display:flex; padding:13px 16px 16px; align-items:center; justify-content:center; gap:13px; color:#748397; border-top:1px solid #edf1f5; font-size:10px; }
.terminal-list-more .btn { min-width:100px; }
.terminal-device-card .abnormal-reason strong { margin-right:7px; }
.terminal-empty { grid-column:1/-1; margin-bottom:14px; }
.terminal-empty p { margin:0 0 16px; }
.terminal-skeleton { min-height:190px; background:linear-gradient(90deg,#edf1f5 25%,#f8fafc 37%,#edf1f5 63%); background-size:400% 100%; animation:skeleton 1.25s ease infinite; }

@media (max-width:850px) {
  .terminal-filters,.terminal-filters[data-visible-filters="1"] { grid-template-columns:1fr 1fr; }
  .terminal-filters[data-visible-filters="0"] { grid-template-columns:1fr; }
  .terminal-search-field { grid-column:1/-1; }
}

@media (max-width:560px) {
  .terminal-main { padding-top:20px; }
  .terminal-overview-head { align-items:flex-start; padding:17px 14px 14px; }
  .terminal-school-mark { width:40px; height:40px; flex-basis:40px; }
  .terminal-overview-copy h1 { font-size:17px; white-space:normal; }
  .terminal-overview-copy p { line-height:1.55; }
  .terminal-back { padding:5px 7px; font-size:9px; }
  .terminal-completion { padding:17px 15px; }
  .terminal-sticky-tools { padding-bottom:10px; }
  .terminal-filters,.terminal-filters[data-visible-filters="1"],.terminal-filters[data-visible-filters="0"] { grid-template-columns:1fr; gap:13px; padding:13px 14px 16px; }
  .terminal-search-field { grid-column:auto; }
  .terminal-filter-field .filter-options { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:7px; }
  .terminal-filter-field .filter-btn { width:100%; min-width:0; }
  .terminal-device-card { min-height:137px; }
  .terminal-card-head { flex-wrap:nowrap; }
  .terminal-device-copy h3 { flex-basis:auto; }
  .terminal-list-head { align-items:flex-start; gap:8px; flex-direction:column; }
  .terminal-list-head>div { width:100%; }
  .terminal-list-tools { justify-content:space-between; }
  .terminal-list-tools .refresh-time { display:none; }
}
