/* ==========================================================
   I-05 / PROTOCOL 02 — ADAPTATION
   既存の質感（protocol01.css）をそのまま使い、
   ここでは02固有の要素だけを足す。
   ========================================================== */

/* 開始時の短い暗転 */
#p2Veil{
  position:absolute;inset:0;z-index:95;pointer-events:none;
  background:#020406;opacity:0;
  transition:opacity .55s ease;
}
#p2Veil.on{opacity:1}

/* 生命反応が落ちている間、基盤全体の光が弱る */
#gridView.p02{transition:filter 1.6s ease}
#gridView.p02.fading{filter:brightness(.72) saturate(.72)}

/* ---------- 走査 ---------- */
.p2-scan{transition:opacity .6s ease}
.p2-scan.out{opacity:0}
.p2-scan-box{
  fill:none;stroke:rgba(130,215,200,.42);stroke-width:.8;
  stroke-dasharray:4 3;
}
.p2-scan-line{
  stroke:rgba(150,235,215,.75);stroke-width:1;
  animation:p2Sweep 1.4s ease-in-out infinite;
}
@keyframes p2Sweep{
  0%,100%{transform:translateY(-16px);opacity:.25}
  50%{transform:translateY(16px);opacity:.9}
}

/* ---------- 内部空隙 ---------- */
.p2-cav{animation:p2CavIn .9s ease 1 both}
@keyframes p2CavIn{from{opacity:0}to{opacity:1}}
.p2-cav-fill{
  fill:rgba(120,215,200,.10);
  stroke:rgba(130,220,205,.42);stroke-width:.7;stroke-dasharray:3 2.5;
  animation:p2CavPulse 3.4s ease-in-out infinite;
}
@keyframes p2CavPulse{0%,100%{opacity:.72}50%{opacity:1}}
.p2-cav.settled .p2-cav-fill{
  fill:rgba(120,215,200,.07);
  stroke:rgba(130,220,205,.26);stroke-dasharray:none;
  animation:none;
}
.p2-cav-label{
  fill:rgba(180,238,222,.8);
  font-family:var(--mono);font-size:9px;letter-spacing:.06em;
  text-anchor:middle;
}
.p2-cav.settled .p2-cav-label{fill:rgba(160,215,200,.5)}

/* ---------- 中央へ伸びる組織 ---------- */
.p2-grow{transition:stroke-dashoffset 1.05s cubic-bezier(.3,.5,.4,1)}

/* 観察中は盤面へ触れない */
#gridView.p02,#gridView.p02 *{pointer-events:none}

@media (prefers-reduced-motion: reduce){
  .p2-scan-line,.p2-cav-fill{animation:none}
}
