/* ===========================================================
 * 演示门户 portal.css · v1.1
 * 复用两端 token；一屏布局；无截图；新增核心架构 + 可拖动 floatingTools
 * =========================================================== */

:root{
  --bg-deep:#0a1124;
  --bg-page:#0e1730;
  --bg-panel:#152244;
  --bg-panel-2:#1a2a52;
  --bg-card:#1e2f5f;
  --bg-hover:#243a72;

  --bd-soft:#27396b;
  --bd:#324b8a;
  --bd-strong:#4a67b3;

  --tx-1:#eaf0ff;
  --tx-2:#b9c5e6;
  --tx-3:#8294c4;
  --tx-4:#5b6da0;

  --gov-blue:#2b6cff;
  --gov-blue-2:#4a8bff;
  --tech-cyan:#3edaf4;
  --ai-purple:#a974ff;
  --ok:#37c98a;
  --warn:#ffb547;
  --high:#ff3d4f;
  --orange:#ff8a3d;
  --yellow:#ffd64a;
  --agri-green:#22c55e;
  --agri-green-2:#16a34a;
  --wheat-gold:#f6c761;
  --wheat-gold-2:#d4a843;

  --r-sm:6px;
  --r-md:8px;
  --r-lg:10px;
  --top-h:68px;
  --status-h:30px;
}

*{margin:0; padding:0; box-sizing:border-box;}

html, body{
  width:100%;
  height:100%;
  overflow:hidden;
}
body{
  min-width:1280px;
  min-height:720px;
  background: radial-gradient(ellipse 1400px 800px at 50% -200px,#143a6f 0%,#0e1730 38%,#0a1124 100%);
  color: var(--tx-1);
  font-family:"PingFang SC","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;
  font-size:13px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
a{color:inherit; text-decoration:none;}
button{font-family:inherit; cursor:pointer; border:none; outline:none; background:none; color:inherit;}
ul, ol{list-style:none;}
h1, h2, h3{font-weight:600;}

::-webkit-scrollbar{width:6px; height:6px;}
::-webkit-scrollbar-thumb{background:var(--bd); border-radius:3px;}
::-webkit-scrollbar-thumb:hover{background:var(--bd-strong);}
::-webkit-scrollbar-track{background:transparent;}

/* ===== 整体三段式 ===== */
.portal-shell{
  width:100%;
  height:100vh;
  height:100dvh;
  overflow:hidden;
  display:grid;
  grid-template-rows: var(--top-h) minmax(0, 1fr) var(--status-h);
}

/* ===== 顶栏（复用两端 .topbar 视觉） ===== */
.topbar{
  height: var(--top-h);
  padding: 0 22px;
  display:flex; align-items:center; gap:18px;
  background: linear-gradient(90deg,#0b1732 0%,#10264a 50%,#0b1732 100%);
  border-bottom: 1px solid rgba(47,109,255,.45);
}
.brand{display:flex; align-items:center; gap:14px; min-width:0;}
.brand-logo{
  flex:0 0 auto;
  width:44px; height:44px; border-radius:10px;
  background:linear-gradient(135deg,#2f7cff 0%,#22d3ee 100%);
  display:flex; align-items:center; justify-content:center; color:#fff;
  font-size:12px; font-weight:700; letter-spacing:1px; line-height:1.05;
  box-shadow:0 0 14px rgba(62,218,244,.45);
}
.brand-title-wrap{ line-height:1.25; min-width:0;}
.brand-main-title{
  font-size:17px; font-weight:700; color:#fff;
  letter-spacing:1.2px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.brand-sub-title{
  font-size:11.5px; color:var(--tx-3); letter-spacing:.6px;
  margin-top:3px;
}

.top-status{
  margin-left:auto;
  display:flex; align-items:center; gap:8px;
}
.status-pill{
  display:inline-flex; align-items:center;
  height:24px; padding:0 10px; border-radius:999px;
  font-size:11.5px; letter-spacing:.4px;
  color:var(--tx-2);
  background:rgba(43,108,255,.10);
  border:1px solid rgba(43,108,255,.32);
}
.status-pill.emph{
  color:#ffe8a6;
  background:rgba(246,199,97,.12);
  border-color:rgba(246,199,97,.45);
}
.status-pill.ghost{
  color:var(--tx-3);
  background:transparent;
  border-color:var(--bd-soft);
}

.top-actions{display:flex; align-items:center; gap:8px;}

.btn{
  height:32px; padding:0 14px;
  display:inline-flex; align-items:center; gap:6px;
  font-size:12.5px; color:var(--tx-1);
  background:rgba(15,30,60,.6);
  border:1px solid var(--bd);
  border-radius:var(--r-sm);
  transition:border-color .2s, color .2s, background .2s;
  white-space:nowrap;
}
.btn:hover{border-color:var(--tech-cyan); color:#fff;}

.fullscreen-btn{
  border:1px solid rgba(62,218,244,.55);
  background: rgba(43,108,255,.18);
  color:#eaf0ff;
}
.fullscreen-btn:hover{
  border-color: var(--tech-cyan);
  background: rgba(43,108,255,.28);
  color:#fff;
}
.fullscreen-btn.is-fullscreen{
  border-color: rgba(246,199,97,.75);
  background: rgba(246,199,97,.18);
  color:#ffe8a6;
}
.fullscreen-btn.is-fullscreen:hover{
  background: rgba(246,199,97,.28);
  color:#fff;
}

/* ===== 主区 ===== */
.portal-main{
  min-height:0;
  overflow:hidden;
  display:grid;
  grid-template-rows: minmax(210px, 0.42fr) minmax(270px, 0.58fr);
  gap:14px;
  padding:14px 18px;
}

.panel{
  background: linear-gradient(180deg, rgba(21,34,68,.92) 0%, rgba(14,23,48,.92) 100%);
  border: 1px solid var(--bd-soft);
  border-radius: var(--r-lg);
  box-shadow: 0 6px 18px rgba(0,12,36,.32);
}

/* ===== 第一行：项目说明 + 核心架构 ===== */
.overview-row{
  min-height:0;
  display:grid;
  grid-template-columns: minmax(360px, 0.36fr) minmax(640px, 0.64fr);
  gap:14px;
}

/* --- 左 brief --- */
.portal-brief{
  min-height:0;
  padding:18px 22px;
  display:flex; flex-direction:column;
  position:relative;
  overflow:hidden;
}
.portal-brief::before{
  content:"";
  position:absolute; right:-80px; top:-90px;
  width:240px; height:240px; border-radius:50%;
  background: radial-gradient(circle, rgba(58,160,255,.22), transparent 65%);
  filter: blur(20px);
  pointer-events:none;
}
.brief-eyebrow{
  display:inline-block;
  font-size:10.5px; letter-spacing:3px;
  color:var(--tech-cyan);
  padding:3px 10px;
  border:1px solid rgba(62,218,244,.4);
  border-radius:999px;
  background:rgba(62,218,244,.08);
  align-self:flex-start;
}
.portal-title{
  margin-top:12px;
  font-size: clamp(26px, 2.1vw, 34px);
  line-height:1.32;
  letter-spacing:1.2px;
  background: linear-gradient(135deg, #fff 0%, #cfe3ff 70%, #9fe0c8 100%);
  -webkit-background-clip:text; background-clip:text; color:transparent;
}
.portal-desc{
  margin-top:12px;
  font-size:14px; line-height:1.95;
  color: var(--tx-2);
  display:-webkit-box;
  -webkit-line-clamp:4;
  -webkit-box-orient:vertical;
  overflow:hidden;
}
.brief-role-row{
  margin-top:auto;
  display:flex; flex-direction:column; gap:6px;
  padding-top:12px;
  border-top:1px dashed var(--bd-soft);
}
.role-item{ display:flex; align-items:center; gap:10px; font-size:12.5px; }
.role-dot{ width:8px; height:8px; border-radius:50%; flex:0 0 auto; }
.prov-dot{ background:var(--gov-blue-2); box-shadow:0 0 8px rgba(74,139,255,.6); }
.cnty-dot{ background:var(--agri-green);  box-shadow:0 0 8px rgba(34,197,94,.6); }
.role-key{ color:#fff; font-weight:600; min-width:78px; letter-spacing:.6px; }
.role-val{ color:var(--tx-3); }

/* --- 右 核心架构 --- */
.arch-panel{
  min-height:0;
  padding:16px 18px;
  display:flex; flex-direction:column;
  position:relative;
  overflow:hidden;
}
.arch-panel::before{
  content:"";
  position:absolute; left:-90px; top:-90px;
  width:240px; height:240px; border-radius:50%;
  background: radial-gradient(circle, rgba(34,197,94,.16), transparent 65%);
  filter: blur(22px);
  pointer-events:none;
}
.section-head{
  display:flex; align-items:baseline; gap:14px; margin-bottom:12px;
}
.section-kicker{
  font-size:10.5px; letter-spacing:3px;
  color:var(--tech-cyan);
  padding:3px 10px;
  border:1px solid rgba(62,218,244,.4);
  border-radius:999px;
  background:rgba(62,218,244,.08);
}
.section-head h2{
  font-size: clamp(16px, 1.25vw, 19px);
  color:#fff; letter-spacing:1.4px;
}
.section-head h2::before{
  content:"";
  display:inline-block;
  width:3px; height:14px;
  background: linear-gradient(180deg, var(--gov-blue), var(--agri-green));
  margin-right:10px; vertical-align:-2px;
  border-radius:3px;
}

.arch-grid{
  flex:1; min-height:0;
  display:grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: 1fr 1fr;
  gap:10px;
}
.arch-card{
  padding:10px 12px;
  border-radius: var(--r-md);
  border:1px solid var(--bd-soft);
  background: linear-gradient(180deg, rgba(30,47,95,.85), rgba(14,23,48,.85));
  display:flex; flex-direction:column;
  gap:4px;
  position:relative;
  overflow:hidden;
  transition: border-color .2s, transform .2s, background .2s;
}
.arch-card:hover{
  border-color: var(--bd-strong);
  background: linear-gradient(180deg, rgba(36,58,114,.92), rgba(18,30,60,.92));
}
.arch-card::before{
  content:""; position:absolute; left:0; top:0; bottom:0; width:2px;
  background: var(--gov-blue);
}
.arch-card.arch-1::before{ background: var(--tech-cyan); }
.arch-card.arch-2::before{ background: var(--gov-blue); }
.arch-card.arch-3::before{ background: var(--ai-purple); }
.arch-card.arch-4::before{ background: var(--wheat-gold); }
.arch-card.arch-5::before{ background: var(--agri-green); }
.arch-card.arch-6::before{ background: var(--orange); }

.arch-key{ display:flex; align-items:center; gap:8px; }
.arch-num{
  font-size: 14px;
  font-weight: 700;
  letter-spacing:1.4px;
  color: var(--tx-1);
}
.arch-1 .arch-num{ color: var(--tech-cyan); }
.arch-2 .arch-num{ color: var(--gov-blue-2); }
.arch-3 .arch-num{ color: #c8a7ff; }
.arch-4 .arch-num{ color: var(--wheat-gold); }
.arch-5 .arch-num{ color: #74e6a3; }
.arch-6 .arch-num{ color: #ffae72; }

.arch-name{
  font-size:13.2px; font-weight:600; color:#fff;
  letter-spacing:.6px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.arch-desc{
  font-size:12px; line-height:1.7;
  color: var(--tx-3);
  display:-webkit-box;
  -webkit-line-clamp:2;
  -webkit-box-orient:vertical;
  overflow:hidden;
}

/* ===== 第二行：双入口卡片 ===== */
.entry-row{
  min-height:0;
  display:grid;
  grid-template-columns: 1fr 1fr;
  gap:14px;
}

.entry-card{
  min-height:0;
  padding:18px 22px 16px;
  display:flex; flex-direction:column;
  position:relative;
  overflow:hidden;
  background: linear-gradient(180deg, rgba(21,34,68,.92) 0%, rgba(14,23,48,.92) 100%);
  border: 1px solid var(--bd-soft);
  border-radius: var(--r-lg);
  transition: border-color .2s, background .2s, transform .2s;
}
.entry-card:hover{
  border-color: var(--bd-strong);
}
.entry-card::after{
  content:"";
  position:absolute; left:0; top:0; bottom:0;
  width:3px;
  background: var(--gov-blue);
}
.county-card::after{ background: var(--agri-green); }

.entry-card::before{
  content:"";
  position:absolute; right:-110px; top:-110px;
  width:240px; height:240px; border-radius:50%;
  filter: blur(28px);
  pointer-events:none;
  background: radial-gradient(circle, rgba(43,108,255,.28), transparent 65%);
  opacity:.7;
}
.county-card::before{
  background: radial-gradient(circle, rgba(34,197,94,.26), transparent 65%);
}

.entry-corner-num{
  position:absolute; right:14px; top:12px;
  font-size:10.5px; letter-spacing:2.2px;
  color: var(--tx-4);
  font-weight:700;
  z-index:1;
}
.entry-head{
  display:flex; align-items:flex-end; gap:14px;
  margin-top:18px;
}
.entry-title{
  font-size: clamp(25px, 1.9vw, 31px);
  letter-spacing:2px;
  color:#fff;
}
.province-card .entry-title{
  background: linear-gradient(135deg, #cfe3ff, #74c1ff);
  -webkit-background-clip:text; background-clip:text; color:transparent;
}
.county-card .entry-title{
  background: linear-gradient(135deg, #d6ffe3, #6fe9c3);
  -webkit-background-clip:text; background-clip:text; color:transparent;
}
.entry-side{
  font-size:11.5px; color:var(--tx-3); letter-spacing:.6px;
  padding-bottom:6px;
}
.entry-subtitle{
  margin-top:8px;
  font-size:13.5px; color:var(--tx-2); letter-spacing:.6px;
}
.entry-desc{
  margin-top:10px;
  font-size:13.5px; line-height:1.9;
  color: var(--tx-2);
  display:-webkit-box;
  -webkit-line-clamp:3;
  -webkit-box-orient:vertical;
  overflow:hidden;
}
.entry-default-row{
  margin-top:12px;
  display:grid;
  grid-template-columns:repeat(2, 1fr);
  gap:8px 14px;
  padding:9px 12px;
  border:1px dashed var(--bd-soft);
  border-radius: var(--r-md);
  background: rgba(8,16,36,.45);
}
.edr-cell{
  display:flex; align-items:center; gap:8px;
  min-width:0;
}
.edr-key{
  flex:0 0 auto;
  font-size:11px; letter-spacing:1.2px;
  padding:2px 8px;
  border-radius:4px;
  color: var(--tx-3);
  background: rgba(74,139,255,.10);
  border:1px solid rgba(74,139,255,.28);
}
.county-card .edr-key{
  color: #b8efd1;
  background: rgba(34,197,94,.10);
  border-color: rgba(34,197,94,.32);
}
.edr-val{
  font-size:12.5px; color: var(--tx-2);
  letter-spacing:.4px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}

.entry-points{
  margin-top:12px;
  display:flex; flex-wrap:wrap; gap:6px 8px;
}
.entry-points li{
  font-size:12.2px; letter-spacing:.6px;
  padding:4px 11px;
  border-radius:4px;
  color: var(--tx-1);
  background: rgba(43,108,255,.12);
  border: 1px solid rgba(74,139,255,.4);
}
.county-card .entry-points li{
  background: rgba(34,197,94,.12);
  border-color: rgba(34,197,94,.42);
}

.entry-button{
  margin-top:auto;
  align-self:flex-start;
  height:42px; padding:0 22px;
  display:inline-flex; align-items:center; gap:8px;
  font-size:14.2px; font-weight:700; letter-spacing:1px;
  color:#fff;
  background: linear-gradient(135deg, var(--gov-blue) 0%, var(--gov-blue-2) 100%);
  border:1px solid rgba(62,218,244,.55);
  border-radius: var(--r-sm);
  box-shadow: 0 6px 16px rgba(43,108,255,.32);
  transition: transform .15s ease, box-shadow .15s ease, filter .15s ease;
}
.entry-button:hover{
  transform:translateY(-1px);
  filter:brightness(1.08);
}
.entry-button svg{ transition: transform .2s ease; }
.entry-button:hover svg{ transform: translateX(3px); }
.entry-button.county-button{
  background: linear-gradient(135deg, var(--agri-green) 0%, #16a34a 100%);
  border-color: rgba(125,255,200,.55);
  box-shadow: 0 6px 16px rgba(34,197,94,.32);
}

/* ===== 底部状态条 ===== */
.portal-statusbar{
  height: var(--status-h);
  padding: 0 18px;
  display:flex; align-items:center; gap:8px;
  font-size:11.5px; color: var(--tx-3);
  background: linear-gradient(90deg,#0a132a 0%,#101e3d 100%);
  border-top:1px solid var(--bd-soft);
}
.portal-statusbar .sep{
  color: var(--tx-4); font-style: normal;
  margin:0 2px;
}

/* ===== 演示壳（iframe 承载） ===== */
.demo-viewer[hidden]{ display:none !important; }
.demo-viewer{
  position:fixed; inset:0; z-index:9999;
  display:block;
  background: var(--bg-deep);
}
.demo-viewer iframe{
  width:100%; height:100%;
  border:0; display:block;
  background: var(--bg-deep);
}

/* ===== 可拖动 floatingTools ===== */
.floating-tools[hidden]{ display:none !important; }
.floating-tools{
  position:fixed;
  right:24px; bottom:24px;
  top:auto; left:auto;
  z-index:10020;
  display:inline-flex; align-items:center; gap:8px;
  padding:6px 10px 6px 8px;
  border-radius:999px;
  background: rgba(7,18,38,.82);
  border:1px solid rgba(62,218,244,.45);
  box-shadow: 0 10px 28px rgba(0,0,0,.35), inset 0 0 16px rgba(62,218,244,.08);
  -webkit-backdrop-filter: blur(12px);
          backdrop-filter: blur(12px);
  cursor: grab;
  user-select: none;
  touch-action: none;
  transition: opacity .15s ease, box-shadow .2s ease;
}
.floating-tools.is-dragging{
  cursor: grabbing;
  opacity:.95;
  box-shadow: 0 12px 32px rgba(0,0,0,.55), inset 0 0 16px rgba(62,218,244,.18);
}

.ft-handle{
  width:18px; height:24px;
  display:inline-flex; align-items:center; justify-content:center;
  color: rgba(62,218,244,.85);
  cursor: inherit;
}
.ft-label{
  font-size:11.5px;
  color: var(--tx-2);
  letter-spacing:.6px;
  padding:0 4px 0 2px;
  white-space:nowrap;
  max-width:120px;
  overflow:hidden; text-overflow:ellipsis;
}

.floating-home-btn,
.floating-fs-btn{
  height:30px; padding:0 12px;
  display:inline-flex; align-items:center; gap:5px;
  font-size:12px; font-weight:700; letter-spacing:.6px;
  color:#eaf6ff;
  border:1px solid rgba(62,218,244,.45);
  background: rgba(22,48,94,.82);
  border-radius:999px;
  cursor:pointer;
  transition: filter .15s ease, transform .15s ease, border-color .2s, background .2s;
}
.floating-home-btn{
  background: linear-gradient(135deg, rgba(43,108,255,.92), rgba(14,165,233,.88));
  border-color: rgba(74,139,255,.65);
  box-shadow: 0 4px 12px rgba(43,108,255,.32);
}
.floating-home-btn:hover{
  filter: brightness(1.08);
  transform: translateY(-1px);
}
.floating-fs-btn:hover{
  border-color: var(--tech-cyan);
  background: rgba(22,48,94,.95);
}
.floating-fs-btn.is-fullscreen{
  color:#ffe8a6;
  border-color: rgba(246,199,97,.68);
  background: rgba(246,199,97,.18);
}
.floating-fs-btn.is-fullscreen:hover{
  background: rgba(246,199,97,.28);
}

/* ===== 分辨率兜底 ===== */
/* ============================================================
 * 演示说明角标（仅在 iframe 演示壳期间显示，左下角）
 * 收起态：胶囊；展开态：磨砂卡片，含归属/联系/用途/版本
 * ============================================================ */

.demo-credit-badge[hidden]{ display:none !important; }

.demo-credit-badge{
  position: fixed;
  left: 18px;
  bottom: 18px;
  z-index: 10010;       /* 高于 .demo-viewer(9999)，低于 floatingTools(10020) */
  font-size: 12px;
  color: rgba(232, 244, 255, .88);
  user-select: none;
  letter-spacing: .3px;
  font-family: inherit;
}

.demo-credit-trigger,
.demo-credit-panel{
  background: rgba(9, 24, 48, .82);
  border: 1px solid rgba(125, 211, 252, .22);
  box-shadow: 0 10px 30px rgba(0, 0, 0, .26);
  -webkit-backdrop-filter: blur(10px);
          backdrop-filter: blur(10px);
  border-radius: 13px;
  color: inherit;
}

.demo-credit-trigger{
  display: inline-flex;
  align-items: center;
  gap: 7px;
  height: 36px;
  padding: 0 14px;
  font: inherit;
  color: rgba(232, 244, 255, .88);
  cursor: pointer;
  transition: color .15s, border-color .2s, background .2s;
}
.demo-credit-trigger:hover{
  color: #eaf6ff;
  border-color: rgba(125, 211, 252, .45);
}
.demo-credit-trigger svg{ opacity: .85; }

.demo-credit-panel{
  display: none;
  width: 286px;
  max-width: 90vw;
  padding: 11px 13px 12px;
  line-height: 1.55;
}

.demo-credit-badge:hover .demo-credit-panel,
.demo-credit-badge.is-open .demo-credit-panel{ display: block; }

.demo-credit-badge:hover .demo-credit-trigger,
.demo-credit-badge.is-open .demo-credit-trigger{ display: none; }

.credit-title{
  font-weight: 600;
  margin-bottom: 4px;
  color: #eaf6ff;
  letter-spacing: .4px;
}
.credit-line,
.credit-note,
.credit-version{ opacity: .86; }
.credit-line{ margin-top: 2px; }
.credit-note{ margin-top: 2px; color: rgba(232, 244, 255, .76); }
.credit-version{
  margin-top: 6px;
  padding-top: 6px;
  border-top: 1px dashed rgba(125, 211, 252, .18);
  font-size: 11.5px;
  color: rgba(232, 244, 255, .7);
  letter-spacing: .8px;
}

.demo-credit-panel a.credit-tel{
  color: inherit;
  text-decoration: none;
  border-bottom: 1px dotted rgba(125, 211, 252, .35);
  transition: color .15s, border-color .15s;
}
.demo-credit-panel a.credit-tel:hover{
  color: rgba(125, 211, 252, .98);
  border-bottom-color: rgba(125, 211, 252, .65);
}

/* 小屏紧凑兜底 */
@media (max-width: 1366px), (max-height: 780px){
  .demo-credit-badge{ left: 14px; bottom: 14px; font-size: 11.5px; }
  .demo-credit-trigger{ height: 32px; padding: 0 12px; }
  .demo-credit-panel{ width: 260px; padding: 9px 12px 10px; line-height: 1.5; }
}

/* 极端低高度兜底：确保两个入口按钮仍露出 */


/* === v12c 自动响应（恢复） ===
 *  本组规则让正常模式下根据可用高度做轻度自适应，
 *  恢复 v12c 时期的清爽视觉，避免 1440×900 这种窗口下
 *  左上"项目定位"框被标题挤出导致说明文字遮挡。
 *  投屏紧凑预案 body.projector-mode 仍独立工作，互不冲突。
 */
@media (max-height: 900px){
  .portal-main{ gap:12px; padding:12px 16px; }
  .arch-grid{ gap:8px; }
  .portal-title{ margin-top:10px; }
  .portal-desc{ -webkit-line-clamp:3; margin-top:8px; }
}
@media (max-height: 820px){
  .portal-brief{ padding:14px 18px; }
  .arch-panel{ padding:14px 16px; }
  .entry-card{ padding:14px 18px; }
  .entry-desc{ -webkit-line-clamp:2; }
  .entry-points{ margin-top:10px; }
  .entry-button{ height:36px; padding:0 16px; font-size:13px;}
  .arch-desc{ -webkit-line-clamp:2; }
}
@media (max-height: 780px){
  :root{ --top-h:58px; --status-h:24px;}
  .portal-main{
    padding:10px 12px; gap:10px;
    grid-template-rows: minmax(180px, 0.42fr) minmax(250px, 0.58fr);
  }
  .brand-main-title{ font-size:15px; }
  .brand-sub-title{ font-size:11px; }
  .brand-logo{ width:38px; height:38px; }
  .portal-title{ font-size:20px; letter-spacing:1px; margin-top:6px;}
  .portal-desc{ -webkit-line-clamp:3; font-size:12.5px; line-height:1.75;}
  .arch-grid{ gap:8px; }
  .arch-card{ padding:8px 10px; }
  .arch-desc{ -webkit-line-clamp:2; font-size:11px;}
  .entry-card{ padding:14px 16px;}
  .entry-head{ margin-top:14px;}
  .entry-desc{ -webkit-line-clamp:2; }
  .entry-points li{ font-size:11px; padding:2px 8px;}
  .entry-button{ height:34px; font-size:12.5px; padding:0 14px;}
  .top-status .ghost{ display:none; }
  .floating-tools{ right:16px; bottom:16px; top:auto; left:auto; }
  /* 字号上调后 1366×768 兜底 */
  .portal-title{ font-size:22px; }
  .portal-desc{ -webkit-line-clamp:3; font-size:13px; line-height:1.75;}
  .entry-title{ font-size:22px; letter-spacing:1.4px;}
  .entry-subtitle{ font-size:12.5px; }
  .entry-desc{ font-size:12.5px; line-height:1.7; -webkit-line-clamp:2;}
  .entry-points li{ font-size:11.5px; padding:3px 9px;}
  .entry-button{ height:36px; padding:0 16px; font-size:13px;}
  .entry-default-row{ padding:6px 10px; gap:4px 10px;}
  .edr-val{ font-size:11.5px; }
  .arch-name{ font-size:12.2px; }
  .arch-desc{ font-size:11px; line-height:1.6; -webkit-line-clamp:2;}
  .section-head h2{ font-size:15.5px; }
}
@media (max-width: 1440px){
  .brand-main-title{ font-size:15.5px; }
}
@media (max-width: 1366px){
  .top-status .status-pill.ghost{ display:none; }
}

/* ============================================================
 * 手动投屏模式（v1.3 新增）
 *   仅在 <body class="projector-mode"> 时生效；
 *   触发方式：index.html?projector=1 / ?mode=projector / #projector
 *   正常模式（无 .projector-mode 类）下任何样式都不会被它影响
 * ============================================================ */

body.projector-mode { min-height: 0; }

body.projector-mode .topbar {
  min-height: 56px;
  padding: 8px 14px;
}
body.projector-mode .brand-logo {
  width: 38px; height: 38px; font-size: 12px;
}
body.projector-mode .brand-main-title {
  font-size: 15px; line-height: 1.25;
}
body.projector-mode .brand-sub-title { font-size: 11px; }
body.projector-mode .top-status .status-pill.ghost { display: none; }

body.projector-mode .portal-main {
  padding: 10px 14px;
  gap: 10px;
  min-height: 0;
}
body.projector-mode .overview-row { gap: 10px; min-height: 0; }
body.projector-mode .entry-row { gap: 10px; min-height: 0; }

body.projector-mode .portal-brief { padding: 14px 16px; }
body.projector-mode .brief-eyebrow { font-size: 11px; }
body.projector-mode .portal-title {
  font-size: 24px; line-height: 1.16; margin-top: 8px;
}
body.projector-mode .portal-desc {
  font-size: 12.5px; line-height: 1.65;
  -webkit-line-clamp: 3; overflow: hidden;
}

body.projector-mode .arch-panel { padding: 14px 16px; }
body.projector-mode .section-head { margin-bottom: 10px; }
body.projector-mode .section-head h2 { font-size: 15px; }
body.projector-mode .arch-grid { gap: 8px; }
body.projector-mode .arch-card { padding: 8px 10px; min-height: 0; }
body.projector-mode .arch-name { font-size: 12px; }
body.projector-mode .arch-desc {
  font-size: 11px; line-height: 1.45;
  -webkit-line-clamp: 2; overflow: hidden;
}

body.projector-mode .entry-card { padding: 14px 16px; min-height: 0; }
body.projector-mode .entry-head { margin-top: 10px; }
body.projector-mode .entry-title { font-size: 22px; line-height: 1.2; }
body.projector-mode .entry-subtitle { font-size: 12px; }
body.projector-mode .entry-desc {
  font-size: 12.5px; line-height: 1.6;
  -webkit-line-clamp: 2; overflow: hidden;
}
body.projector-mode .entry-points { margin-top: 8px; gap: 6px; }
body.projector-mode .entry-points li { font-size: 11px; padding: 3px 8px; }
body.projector-mode .entry-default-row { padding: 6px 10px; gap: 4px 10px; }
body.projector-mode .edr-val { font-size: 11px; }
body.projector-mode .entry-button {
  height: 34px; padding: 0 14px; font-size: 12.5px;
}

/* 低高度投屏兜底（仅 projector-mode 下生效） */
@media (max-height: 620px) {
  body.projector-mode .portal-main { padding: 8px 12px; gap: 8px; }
  body.projector-mode .portal-desc { -webkit-line-clamp: 2; }
  body.projector-mode .arch-desc { display: none; }
  body.projector-mode .entry-desc { -webkit-line-clamp: 1; }
  body.projector-mode .entry-points { display: none; }
}
