/* ============================================================
   Sakurumii · loader.css
   页面加载遮罩：严格仿照 loader.html（SYS.LINK Uplink Sequence）
   ============================================================ */

.boot{
  --bg:#030806;
  --green:#2fe07d;
  --green-dim:rgba(55,225,130,.26);
  --line:rgba(120,255,185,.46);
  --ink-hi:#d9f4e6;
  position:fixed;inset:0;z-index:3000;background:var(--bg);overflow:hidden;
  font-family:"Geist Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  -webkit-font-smoothing:antialiased;
  transition:opacity .6s ease,visibility .6s ease;
}
.boot.done{opacity:0;visibility:hidden;pointer-events:none}
.boot .pool{position:fixed;inset:0;pointer-events:none;
  background:radial-gradient(ellipse 60% 44% at 50% 52%,rgba(24,150,92,.17) 0%,rgba(16,104,66,.08) 38%,rgba(10,58,38,.025) 66%,transparent 100%)}
.boot .scene{position:fixed;inset:0;overflow:hidden}
.boot .stage{position:absolute;left:50%;top:50%;width:1200px;height:800px;transform:translate(-50%,-50%) scale(var(--s,1));transform-origin:center}
.boot .stage>*{position:absolute}
.boot .plate{left:530px;top:270px;width:140px;height:84px;background:var(--line);
  clip-path:polygon(14px 0,100% 0,100% calc(100% - 14px),calc(100% - 14px) 100%,0 100%,0 14px)}
.boot .plate::after{content:"";position:absolute;inset:1.2px;background:linear-gradient(180deg,#07251a,#041a12);
  clip-path:polygon(13px 0,100% 0,100% calc(100% - 13px),calc(100% - 13px) 100%,0 100%,0 13px)}
.boot .brk{width:9px;height:9px;pointer-events:none}
.boot .brk::before,.boot .brk::after{content:"";position:absolute;background:var(--green);opacity:.9}
.boot .brk::before{width:9px;height:1.2px}.boot .brk::after{width:1.2px;height:9px}
.boot .brk.tr{left:661px;top:270px}.boot .brk.tr::before{right:0;top:0}.boot .brk.tr::after{right:0;top:0}
.boot .brk.bl{left:530px;top:345px}.boot .brk.bl::before{left:0;bottom:0}.boot .brk.bl::after{left:0;bottom:0}
.boot .readout{left:530px;top:284.9px;width:140px;height:0;text-align:center;line-height:1;white-space:pre;color:var(--green);
  text-shadow:0 0 4px rgba(70,235,145,.6),0 0 14px rgba(48,210,125,.55),0 0 36px rgba(32,175,105,.4)}
.boot .readout b{font-size:47px;font-weight:280;letter-spacing:2.4px}
.boot .readout u{font-size:15px;font-weight:400;letter-spacing:0;text-decoration:none;opacity:.62;position:relative;top:-1px;left:3px}
.boot .haze{left:298px;top:438px;width:0;height:0;pointer-events:none}
.boot .haze i{position:absolute;left:0;top:0;width:calc(var(--lit-w,0px) + 250px);height:250px;transform:translate(-125px,-128px);
  background:radial-gradient(ellipse 50% 50% at center,rgba(56,225,140,.26) 0%,rgba(46,200,126,.17) 22%,rgba(38,170,108,.082) 45%,rgba(30,140,90,.024) 70%,transparent 100%);
  filter:blur(6px);transition:width .16s linear}
.boot .bar{left:298px;top:420px;width:604px;height:44px;display:flex;justify-content:space-between;align-items:flex-end}
.boot .tick{width:5.4px;height:32px;background:var(--green-dim);transform:skewX(12deg)}
.boot .tick.mk{height:44px}
.boot .tick.on{background:#33cf76;box-shadow:0 0 4px rgba(95,240,155,.6),0 0 11px rgba(55,205,125,.32),0 0 24px rgba(40,175,105,.16)}
.boot .barlabel{left:298px;top:396.4px;font-size:20.4px;font-weight:500;letter-spacing:.9px;line-height:1;color:var(--ink-hi);
  text-shadow:0 0 3px rgba(200,250,225,.34),0 0 11px rgba(120,235,175,.3),0 0 26px rgba(60,195,130,.22)}
.boot .status{left:0;top:507px;width:1200px;text-align:center;font-size:14px;font-weight:500;line-height:1;letter-spacing:1.42px;text-indent:1.42px;color:#9fd0b6;white-space:pre;
  text-shadow:0 0 3px rgba(185,240,215,.3),0 0 10px rgba(110,220,160,.22)}
.boot .status .dots{letter-spacing:-1.9px;margin-left:-6px}
.boot .marker{width:0;height:0}
.boot .marker i{position:absolute;background:var(--green);opacity:.72}
.boot .marker .h{width:9px;height:1.2px}.boot .marker .v{width:1.2px;height:9px}
.boot .marker .a-h{left:-17px;top:-17px}.boot .marker .a-v{left:-17px;top:-17px}
.boot .marker .b-h{left:8px;top:-17px}.boot .marker .b-v{left:15.8px;top:-17px}
.boot .marker .c-h{left:-17px;top:15.8px}.boot .marker .c-v{left:-17px;top:8px}
.boot .marker .d-h{left:8px;top:15.8px}.boot .marker .d-v{left:15.8px;top:8px}
.boot .marker .dia{left:-4px;top:-4px;width:8px;height:8px;opacity:1;background:var(--green);transform:rotate(45deg);
  box-shadow:0 0 6px rgba(70,235,145,.7);animation:diaPulse 3.2s ease-in-out infinite}
@keyframes diaPulse{0%,100%{opacity:.55;transform:rotate(45deg) scale(.8)}50%{opacity:1;transform:rotate(45deg) scale(1)}}
.boot .m-tl{left:274px;top:340px}.boot .m-tr{left:926px;top:340px}
.boot .m-bl{left:274px;top:508px}.boot .m-br{left:926px;top:508px}
.boot .m-tr .dia{animation-delay:.5s}.boot .m-bl .dia{animation-delay:1.1s}.boot .m-br .dia{animation-delay:1.6s}
.boot .rail{left:0;top:0;width:1200px;height:800px}
.boot .rail.right{transform:scaleX(-1)}
.boot .rail>*{position:absolute}
.boot .rail .wire{left:104px;top:433px;width:92px;height:1.4px;background:rgba(120,255,185,.24)}
.boot .rail .cap{top:428px;height:5px;background:#2bd074;box-shadow:0 0 5px rgba(70,235,145,.6)}
.boot .rail .cap.a{left:104px;width:10px}
.boot .rail .cap.b{left:181px;width:15px;animation:capPulse 2.4s ease-in-out infinite}
.boot .mod{left:104px;top:372px;width:180px;height:56px;border:1.2px solid rgba(120,255,185,.34)}
.boot .mod .hatch{position:absolute;left:-3px;top:-3px;width:5px;height:5px;background:var(--green)}
.boot .mod .ret{position:absolute;right:-3px;bottom:-3px;width:5px;height:5px;background:var(--green)}
.boot .mod .dot{position:absolute;left:6px;top:6px;width:3px;height:3px;background:var(--green);box-shadow:0 0 4px rgba(70,235,145,.6)}
.boot .mod .slab{position:absolute;right:6px;bottom:6px;width:26px;height:8px;background:rgba(120,255,185,.16)}
.boot .mod .led{position:absolute;width:2.6px;height:2.6px;border-radius:50%;background:var(--green);opacity:.8;box-shadow:0 0 4px rgba(70,235,145,.55);animation:capPulse 2s ease-in-out infinite}
.boot .mod .led:nth-of-type(1){left:26px;top:6px}
.boot .mod .led:nth-of-type(2){left:34px;top:6px;animation-delay:.5s}
.boot .mod .led:nth-of-type(3){left:42px;top:6px;animation-delay:1s}
.boot .mod .led:nth-of-type(4){left:50px;top:6px;animation-delay:1.5s}
@keyframes capPulse{0%,100%{opacity:1}50%{opacity:.5}}
.boot .scan{position:fixed;inset:0;pointer-events:none;opacity:.18;
  background:repeating-linear-gradient(to bottom,rgba(160,255,205,.05) 0 calc(1px * var(--s,1)),transparent calc(1px * var(--s,1)) calc(3px * var(--s,1)))}
.boot .grain{position:fixed;inset:-60px;pointer-events:none;background-repeat:repeat;background-size:80px 80px;animation:grainShift .6s steps(1,end) infinite}
.boot .grain.mul{mix-blend-mode:overlay;opacity:.40}
.boot .grain.add{opacity:.035;animation-duration:.72s}
@keyframes grainShift{
  0%{transform:translate(0,0)}20%{transform:translate(-22px,14px)}
  40%{transform:translate(17px,-19px)}60%{transform:translate(-13px,-9px)}
  80%{transform:translate(9px,21px)}100%{transform:translate(0,0)}}

@media (prefers-reduced-motion:reduce){
  .boot .grain,.boot .readout,.boot .marker .dia,.boot .rail .cap.b{animation:none !important}
  .boot{transition:none}
}
