/* research-upload.css — /research 页的数据上传入口。

   这一份是**手写**的样式表，不是 tools/ 里的生成物：
     · check-generated-css.py 只管 run-<hash> / base-<hash> / sub-<hash> /
       blk-<id>.<hash> 四类「文件名带内容哈希」的表。本文件名不在其中，
       所以它可以手改（生成物改了内容而文件名哈希没变 = 缓存击穿事故）。
     · check-deploy-assets.py：必须放 /_astro/，不能放 dist/assets/ —— deploy.sh
       与 CI 的 rsync 都带 --exclude='/assets/'，放那儿等于线上 404。
     · check-asset-version-parity.py：引用它的两页（research / zh/research）
       必须带**同一个** ?v=，否则中文回访用户会一直吃到旧的缓存副本。

   取值来源是**实测的计算样式**，不是抄的源码（页面是 dark → light 两层覆盖出来的，
   读源码容易抄到被覆盖掉的那一层）：.rcard 白底 + 1px rgba(14,15,17,.12) + 16px 圆角；
   主按钮 #224EEE / 白字 / 8px 圆角 / 14px 500；正文 #111827；次要文字 rgba(17,24,39,.68)。
   容器复用页面既有的 .cta-panel（max-width 1440 + 80px 侧边距，窄屏 20px），
   这样本区与收尾 CTA 面板的左右边界逐像素对齐。

   ⚠️ 刻意**不**使用的类名（check-style-consistency.py 的角色取样按 DOM 顺序取第一个命中，
   而本区插在那些元素之前，用了就会把闸门取样点挪到新元素上）：
     .sec-title（角色「区块标题」）、.cta（角色「主CTA-面板」的 `.cta-panel .cta`）、
     .card/.pillar/.tcard/.linkcard/.metric（角色「卡片」）、.sec-inner（角色「容器-区块」）。
   .eyebrow 是安全的：它在本页的第一个实例在 hero 里，排在本区之前。
*/

.up-panel{background:#fff;border:1px solid rgba(14,15,17,.12);border-radius:16px;
  padding:40px;box-sizing:border-box}
.up-head{max-width:680px}
.up-title{font-size:28px;line-height:34px;font-weight:500;letter-spacing:-.02em;
  color:#111827;margin:12px 0 8px}
.up-desc{font-size:16px;line-height:24px;color:rgba(17,24,39,.68);margin:0}

.up-form{margin-top:24px;display:flex;flex-direction:column;gap:10px}
.up-filelabel{font-size:13px;font-weight:500;letter-spacing:.15px;color:#111827}
.up-file{width:100%;box-sizing:border-box;font-family:inherit;font-size:14px;color:#111827;
  padding:12px;border:1px dashed rgba(14,15,17,.24);border-radius:8px;background:#F6F7F9;
  cursor:pointer;transition:border-color .15s,background-color .15s}
.up-file::file-selector-button{font-family:inherit;font-size:14px;font-weight:500;color:#fff;
  background:#224EEE;border:0;border-radius:8px;padding:8px 16px;margin-right:12px;cursor:pointer}
.up-file::file-selector-button:hover{background:#1B3FC4}
.up-file:hover{border-color:rgba(14,15,17,.4)}
.up-file.up-over{border-color:#224EEE;background:rgba(34,78,238,.05)}
.up-file:focus-visible{outline:2px solid #224EEE;outline-offset:2px}

.up-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:2px}
.up-run{font-family:inherit;font-size:14px;font-weight:500;letter-spacing:.15px;color:#fff;
  background:#224EEE;border:0;border-radius:8px;padding:10px 24px;cursor:pointer;
  transition:background-color .15s}
.up-run:hover:enabled{background:#1B3FC4}
.up-run:focus-visible{outline:2px solid #224EEE;outline-offset:2px}
.up-run:disabled{background:#C7CBD3;cursor:not-allowed}
.up-name{font-family:var(--font-mono,ui-monospace,Menlo,monospace);font-size:13px;
  color:#111827;word-break:break-all}
.up-name:empty{display:none}
.up-hint{font-size:13px;line-height:19px;color:rgba(17,24,39,.56);margin:0;max-width:680px}

/* 结果区：job 卡片的**形态**沿用 chat 侧（状态行 + 交付卡 + 产物按钮），
   但样式是自己的一份浅色实现 —— 不引 chat-task.css（那是 .kc-kosmos-shell 作用域下的
   深色聊天外壳，41KB，且本页不是聊天页）。 */
.up-out{margin-top:28px}
.up-out:empty{display:none}
.up-card{border:1px solid rgba(14,15,17,.12);border-radius:16px;background:#F6F7F9;
  padding:20px;box-sizing:border-box}
.up-card+.up-card{margin-top:16px}
.up-card-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.up-state{font-family:var(--font-mono,ui-monospace,Menlo,monospace);font-size:12px;font-weight:600;
  letter-spacing:1.68px;text-transform:uppercase;color:#111827}
.up-ts{font-family:var(--font-mono,ui-monospace,Menlo,monospace);font-size:12px;
  color:rgba(17,24,39,.56)}
.up-spin{width:10px;height:10px;border-radius:50%;background:#224EEE;flex:none;
  animation:up-pulse 1.2s ease-in-out infinite}
@keyframes up-pulse{0%,100%{opacity:.25}50%{opacity:1}}
.up-line{font-size:14px;line-height:21px;color:rgba(17,24,39,.72);margin:10px 0 0}
.up-err{font-size:14px;line-height:21px;color:#B42318;margin:10px 0 0}
.up-warn{font-size:13px;line-height:19px;color:#92400E;margin:8px 0 0}
.up-sub{font-family:var(--font-mono,ui-monospace,Menlo,monospace);font-size:12px;font-weight:600;
  letter-spacing:1.68px;text-transform:uppercase;color:rgba(17,24,39,.56);margin:20px 0 6px}
.up-kv{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 16px;margin:0;
  font-size:14px;line-height:21px}
.up-kv dt{color:rgba(17,24,39,.56)}
.up-kv dd{margin:0;color:#111827;font-family:var(--font-mono,ui-monospace,Menlo,monospace);
  font-size:13px;word-break:break-word}
.up-claims{list-style:none;margin:0;padding:0}
.up-claims li{padding:12px 0;border-top:1px solid rgba(14,15,17,.09);font-size:14px;
  line-height:21px;color:#111827}
.up-claims li:first-child{border-top:0;padding-top:0}
.up-anchor{display:block;margin-top:5px;font-family:var(--font-mono,ui-monospace,Menlo,monospace);
  font-size:12px;line-height:18px;color:rgba(17,24,39,.56);word-break:break-all}
.up-anchor b{font-weight:600;color:#1B3FC4}
.up-btn{font-family:inherit;font-size:14px;font-weight:500;letter-spacing:.15px;color:#111827;
  background:#fff;border:1px solid rgba(17,24,39,.16);border-radius:8px;padding:10px 18px;
  cursor:pointer;margin-top:16px;transition:border-color .15s}
.up-btn:hover:enabled{border-color:rgba(17,24,39,.4)}
.up-btn:focus-visible{outline:2px solid #224EEE;outline-offset:2px}
.up-btn:disabled{color:rgba(17,24,39,.4);cursor:not-allowed}

.up-visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}

@media (max-width:720px){
  .up-panel{padding:24px 20px}
  .up-title{font-size:22px;line-height:28px}
  .up-actions{gap:10px}
  .up-run{width:100%}
}
@media (prefers-reduced-motion:reduce){
  .up-spin{animation:none;opacity:1}
  .up-file,.up-run,.up-btn{transition:none}
}
