/* ============================================================
 * boot.css —— 启动页（工作室 logo + 资源完整性自检）
 *
 * 层次：盖在 .screen 之上（z 120 > overlay 70 / sheet 88 / cg 110）。
 * 它是一层"开机画面"：底下主菜单照常就绪，校验通过淡出即见。
 *
 * 视觉：沿用全局暖纸底与排版体系（material.css 的 token）。
 * 这里是全屏静态层，不浮不滚 —— 所以不用玻璃、不用阴影，
 * 只靠留白、字重和一条分隔线撑住版面。
 * ============================================================ */

.boot {
  position: absolute;
  inset: 0;
  z-index: 120;
  display: flex;
  flex-direction: column;
  align-items: center;
  /* 上松下紧的版式重心：logo 区占上 1/3，清单压着下半 */
  padding: 74px 30px 26px;
  background: linear-gradient(172deg, #F1F0ED 0%, #ECEBE7 58%, #E7E5E0 100%);
  transition: opacity .32s cubic-bezier(.4, 0, .2, 1), transform .32s cubic-bezier(.4, 0, .2, 1);
}
/* 退场：淡出 + 极轻微下沉，像一张揭开的纸 */
.boot.out { opacity: 0; transform: scale(.985); pointer-events: none; }

/* ---------- 工作室标 ---------- */
.boot-mark { flex: none; }
.boot-mark svg { display: block; width: 66px; height: 59px; }

/* A 标的两幕：先描边生长，后填色落定。
 * pathLength=1 把 dash 归一化，免 JS 量长度。 */
.boot-mark .bmk-stroke {
  fill-opacity: 0;
  stroke-dasharray: 1;
  stroke-dashoffset: 1;
  animation: bmk-draw .82s cubic-bezier(.16, 1, .3, 1) forwards,
             bmk-fill .42s ease-out .68s forwards;
}
@keyframes bmk-draw  { to { stroke-dashoffset: 0; } }
@keyframes bmk-fill  { to { fill-opacity: 1; } }

.boot-studio {
  margin-top: 22px;
  font-family: 'Outfit', sans-serif;
  font-size: 26px;
  letter-spacing: .02em;
  line-height: 1;
  color: var(--text);
  white-space: nowrap;
}
/* 字重反差：实心工作室名 + 细体后缀，不再加任何图形装饰 */
.boot-studio b { font-weight: 600; }
.boot-studio i { font-style: normal; font-weight: 200; color: var(--text-2); }

/* 分隔：一条细线从中心展开，是"工作室 → 作品"的转场 */
.boot-rule {
  width: 44px; height: 1px;
  margin: 20px 0 14px;
  background: var(--md-primary-l);
  transform: scaleX(0);
  animation: bmk-rule .38s cubic-bezier(.16, 1, .3, 1) .95s forwards;
}
@keyframes bmk-rule { to { transform: scaleX(1); } }

.boot-game {
  font-size: 13px;
  letter-spacing: .08em;
  color: var(--text-2);
}
.boot-game b { font-weight: 500; color: var(--text); }

/* ---------- 自检清单 ---------- */
.boot-checks {
  width: 100%;
  max-width: 268px;
  margin-top: 46px;
  display: flex;
  flex-direction: column;
  gap: 11px;
}

.bchk {
  display: flex;
  align-items: baseline;
  gap: 9px;
  opacity: 0;
  transform: translateY(8px);
  animation: bchk-in .4s cubic-bezier(.16, 1, .3, 1) forwards;
}
@keyframes bchk-in { to { opacity: 1; transform: none; } }

.bchk-ic {
  flex: none;
  width: 16px; height: 16px;
  align-self: center;
  color: var(--text-3);
}
.bchk-ic svg { display: block; width: 100%; height: 100%; }
/* 状态点：待检的空心圈呼吸一下，告诉人"轮到它了" */
.bchk-ic .bic-wait { animation: bic-breathe 1.1s ease-in-out infinite; transform-origin: center; }
@keyframes bic-breathe { 50% { opacity: .35; } }
.bchk.is-pass .bchk-ic { color: var(--ok); }
.bchk.is-warn .bchk-ic { color: var(--warn); }
.bchk.is-fail .bchk-ic { color: var(--danger); }

.bchk-name { flex: none; font-size: 13px; font-weight: 500; color: var(--text); }
.bchk-note {
  flex: 1;
  min-width: 0;
  text-align: right;
  font-size: 11px;
  color: var(--text-3);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.bchk.is-fail .bchk-note { color: var(--danger); }

/* 失败明细：只在实际失败时渲染，不预留位置 */
.bchk-detail {
  margin: -5px 0 0 25px;
  padding: 8px 10px;
  border-left: 2px solid var(--danger);
  background: rgba(176, 85, 78, .06);
  border-radius: 0 8px 8px 0;
  font-size: 11px;
  line-height: 1.7;
  color: var(--danger);
  word-break: break-all;
}

/* ---------- 出口 ---------- */
.boot-foot {
  margin-top: auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  opacity: 0;
  transform: translateY(8px);
  animation: bchk-in .4s cubic-bezier(.16, 1, .3, 1) forwards;
}

.boot-enter {
  appearance: none;
  border: 0;
  padding: 11px 38px;
  border-radius: var(--r);
  background: var(--md-primary-d);
  color: #FFFDFB;
  font-family: inherit;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: .14em;
  cursor: pointer;
  box-shadow: var(--e2);
  transition: transform var(--mag), box-shadow var(--fast), background var(--fast);
}
.boot-enter:hover { background: var(--md-primary); }
.boot-enter:active { transform: scale(.97); box-shadow: var(--e1); }
.boot-enter:focus-visible { outline: 2px solid var(--md-accent); outline-offset: 3px; }

.boot-hint { font-size: 11px; color: var(--text-3); letter-spacing: .04em; }
.boot-hint b { font-weight: 500; color: var(--warn); }

/* ---------- 动效降级 ---------- */
@media (prefers-reduced-motion: reduce) {
  .boot-mark .bmk-stroke { animation: none; stroke-dashoffset: 0; fill-opacity: 1; }
  .boot-rule { animation: none; transform: none; }
  .bchk, .boot-foot { animation-duration: .01s; animation-delay: 0s !important; }
  .bchk-ic .bic-wait { animation: none; }
}
