/* A self-playing film, with a single caption and one visual idea per scene. */
.dojo .dojo-film-section{padding:65px 5vw 55px;background:#081b17;border-top:1px solid #384c3c}
.film-heading{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:25px;gap:20px}.film-heading h2{font:400 34px/1.2 Georgia,serif;margin:0;letter-spacing:-.025em}.film-heading>span{font-size:14px;color:#b8bba5}
.shifu-film{position:relative;isolation:isolate;height:650px;overflow:hidden;background:#081711;border:1px solid #8e876055;box-shadow:0 20px 70px #020b0866;color:#f0ead7;outline-offset:5px!important}
.film-backgrounds,.film-wash,.film-edge{position:absolute;inset:0;pointer-events:none}.film-backgrounds{z-index:-3;overflow:hidden}.film-background{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:65% 40%;opacity:0;filter:saturate(.6);transform:scale(1.035);transition:opacity 1.4s ease}.film-background.is-timed{opacity:.42;animation:film-drift 9s linear both}
.film-wash{z-index:-2;background:linear-gradient(90deg,#071b18d9,#06171155 60%,#06171133),linear-gradient(0deg,#061711 0%,#061711a8 25%,#06171115 65%,#07191199)}.film-edge{z-index:5;box-shadow:inset 0 0 120px #02110b44;border:1px solid #c8af7020}
.film-phase{position:absolute;top:29px;left:36px;right:36px;display:flex;align-items:center;gap:20px;color:#e0d4b5;font-size:14px;z-index:2}.film-phase>span:first-child{font-variant-numeric:tabular-nums;color:#c4b481}.film-phase>span:last-child{padding-left:20px;border-left:1px solid #c5b37b66}
.film-scenes{position:absolute;inset:70px 0 86px}.film-scene{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:20px 70px 0;opacity:0;visibility:hidden;transform:translateY(12px);transition:opacity .85s ease,transform .85s cubic-bezier(.2,.7,.2,1),visibility .85s;pointer-events:none}.film-scene.is-active{visibility:visible;opacity:1;transform:none}.film-graphic{width:min(100%,770px);height:290px;display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative}.film-caption{max-width:900px;margin:16px auto 0;text-align:center;font:400 clamp(23px,2.45vw,34px)/1.35 Georgia,serif;letter-spacing:-.02em;text-wrap:balance;color:#eee9d7;min-height:94px}.film-scene.is-timed .film-caption{animation:film-caption-in 1s .25s both}
.film-transport{position:absolute;left:36px;right:36px;bottom:19px;z-index:6}.film-progress{display:flex;gap:6px;height:2px;margin-bottom:15px}.film-progress>span{background:#a8a78044;overflow:hidden}.film-progress i{display:block;width:100%;height:100%;background:#e0c68a;transform:scaleX(0);transform-origin:left}.film-buttons{display:flex;align-items:center;justify-content:flex-end;gap:20px;height:39px}.film-buttons>span{font-size:13px;font-variant-numeric:tabular-nums;margin-right:auto;color:#b8bba6}.film-buttons button{min-height:44px;min-width:75px;background:transparent;border:1px solid #a79c6a77;color:#ead7a9;padding:8px 15px;font-size:14px}.film-buttons button:hover{background:#d6ba7922}.film-buttons button:focus-visible{outline:2px solid #eed59b;outline-offset:3px}
.film-bottom{display:flex;justify-content:space-between;gap:25px;align-items:flex-start;padding-top:17px;color:#aebbab;font-size:13px}.film-transcript{max-width:600px}.film-transcript summary{cursor:pointer;min-height:32px;color:#d8c18c;font-size:14px;text-align:right}.film-transcript ol{list-style:none;padding:20px 0 0;margin:0;display:grid;gap:18px}.film-transcript strong{color:#e0d7bd;font-size:16px;font-weight:500}.film-transcript p{font-size:16px;line-height:1.6;margin:5px 0 0}
/* Specialization plates resolve from research into distinct rulesets. */
.film-specializations{display:flex;align-items:center;justify-content:center;gap:45px;width:100%;perspective:800px}.film-spec{width:155px;display:flex;flex-direction:column;align-items:center;gap:12px;padding:17px 12px 15px;border-top:1px solid #a9956266;border-bottom:1px solid #a9956266;background:linear-gradient(#17302322,#0a1b17cc);position:relative}.film-spec img{width:105px;height:105px;object-fit:contain;mix-blend-mode:lighten}.film-spec>span{font:400 22px Georgia,serif}.film-spec.side{opacity:.7;transform:scale(.88)}.film-spec.focus{width:205px;border-color:#d2b67c;background:linear-gradient(#a88f4922,#172c20e6);box-shadow:0 0 55px #b7964620}.film-spec.focus img{width:120px;height:120px}.rule-lines{width:95px;display:grid;gap:5px;margin-top:3px}.rule-lines i{display:block;background:#b8ac784d;height:2px;transform-origin:left}.film-reference{font-size:14px;color:#c5c9b5;margin-top:25px;text-align:center}.is-timed .film-spec{animation:plate-arrive 1.5s cubic-bezier(.2,.8,.2,1) both}.is-timed .film-spec.focus{animation-delay:.3s}.is-timed .film-spec:last-child{animation-delay:.5s}.is-timed .rule-lines i{animation:rail-fill 1.4s 1.7s both}.is-timed .rule-lines i:nth-child(2){animation-delay:2s}.is-timed .rule-lines i:nth-child(3){animation-delay:2.3s}
/* Signals flow into the live state read. */
.film-read{width:100%;display:flex;align-items:center;flex-direction:column}.read-sources{display:grid;grid-template-columns:repeat(3,1fr);gap:45px;width:100%;max-width:670px}.read-sources>div{text-align:center;font:400 23px Georgia,serif;border-bottom:1px solid #ad9f6966;padding-bottom:17px}.read-sources i{display:block;height:4px;width:85%;margin:20px auto 0;background:linear-gradient(90deg,#cfb876 65%,#5f796444 65%);transform-origin:left}.read-sources .target-scan{background:repeating-linear-gradient(90deg,#cfb876 0 4px,transparent 4px 17px)}.read-sources .cooldown-scan{background:linear-gradient(90deg,#b1c6a4 85%,#4e6855 85%)}.read-wires{height:67px;width:71%;display:flex;justify-content:space-between}.read-wires i{width:1px;height:100%;background:linear-gradient(#baad7088,#baad7011);position:relative}.read-wires i:first-child{transform:skewX(43deg);transform-origin:top}.read-wires i:last-child{transform:skewX(-43deg);transform-origin:top}.read-core{font:400 46px Georgia,serif;letter-spacing:.08em;text-align:center;border:1px solid #bea66d88;padding:13px 36px;background:#15291fec;position:relative;overflow:hidden}.core-scan{position:absolute;left:0;top:0;width:100%;height:2px;background:#ecdbac;box-shadow:0 0 28px #e0c883}.film-source{font-size:14px;color:#c3c5ad;margin-top:17px}.is-timed .read-sources i{animation:read-signal 2.6s .4s both}.is-timed .read-sources>div:nth-child(2) i{animation-delay:.7s}.is-timed .read-sources>div:nth-child(3) i{animation-delay:1s}.is-timed .read-wires i{animation:wire-arrive 1s 1.4s both}.is-timed .core-scan{animation:core-sweep 2.7s 1.6s both}
/* Priority selection leaves the host request boundary visible. */
.film-priority{display:flex;align-items:center;width:100%;gap:0}.priority-stack{width:52%;display:grid;gap:12px}.priority-item{display:flex;gap:20px;align-items:center;padding:18px 22px;border:1px solid #82916d55;background:#0c211adb;font-size:20px}.priority-item>span{font-size:13px;color:#a7b39b}.priority-item b{font-weight:400}.priority-item i{width:7px;height:7px;background:#8f987255;margin-left:auto}.priority-item.blocked{color:#a1af9e;opacity:.52}.priority-item.waiting{opacity:.55}.priority-item.chosen{border-color:#d1b376;color:#eddfb7;background:#3b472ac9;box-shadow:inset 3px 0 #ddbf81}.priority-item.chosen i{background:#dbc184}.request-wire{width:11%;height:1px;background:#c5b47c66;position:relative}.request-wire>i{display:block;height:2px;width:25px;background:#efdaad;box-shadow:0 0 16px #d5bb74}.request-destination{width:37%;padding:24px 15px;text-align:center;border:1px solid #b9aa7566;background:#10291ee8;position:relative}.request-destination>span{display:block;font-size:15px;color:#c3c8b2}.request-destination>strong{display:block;font:400 29px Georgia,serif;margin-top:9px}.request-seal{position:absolute;inset:5px;border:1px solid #d4be7855}.is-timed .priority-item{animation:priority-check 1.2s .4s both}.is-timed .priority-item.chosen{animation:priority-choice 2s .9s both}.is-timed .request-wire>i{animation:request-travel 2s 2.4s both}.is-timed .request-seal{animation:request-arrive 1.2s 3.5s both}
/* Held cooldowns and ordinary actions take visibly separate paths. */
.film-control{width:min(100%,600px)}.cooldown-tile{display:grid;grid-template-columns:80px 1fr auto;align-items:center;gap:20px;padding:20px 27px;background:#15281edc;border:1px solid #c5ae795e;position:relative;overflow:hidden}.cooldown-tile img{width:70px;height:85px;object-fit:contain;mix-blend-mode:lighten}.cooldown-tile>span{font:400 26px Georgia,serif}.cooldown-tile strong{font-size:17px;font-weight:400;padding:8px 15px;border:1px solid #cbb47a88;color:#ead29a}.gate-lines{position:absolute;bottom:0;left:0;right:0;height:3px;display:flex;gap:3px}.gate-lines i{height:100%;flex:1;background:#c6a866;transform-origin:left}.ordinary-route{display:flex;align-items:center;gap:20px;margin-top:44px;font-size:17px;white-space:nowrap}.flow-rail{height:1px;background:#9bad8188;flex:1;position:relative;overflow:hidden}.flow-rail i{position:absolute;left:0;top:0;height:2px;width:30%;background:#e1d2a2}.is-timed .gate-lines i{animation:rail-fill 1.2s .5s both}.is-timed .cooldown-tile strong{animation:request-arrive .8s 1.5s both}.is-timed .flow-rail i{animation:flow-continue 2.3s 1s infinite}.is-timed .flow-rail i:nth-child(2){animation-delay:1.8s}.is-timed .flow-rail i:nth-child(3){animation-delay:2.6s}
/* NEC prepares a request ahead of a known hit; no cast or protection is invented. */
.film-nec{width:100%}.danger-horizon{display:flex;align-items:center;gap:25px;color:#dfb697;margin-bottom:48px;font-size:16px}.danger-track{height:1px;flex:1;background:#a37f5555;position:relative}.danger-track i{position:absolute;right:8%;top:-9px;height:19px;width:2px;background:#db9f73;box-shadow:0 0 23px #d5805244}.danger-track b{position:absolute;left:4%;top:-4px;height:9px;width:1px;background:#c2c5a3}.nec-route{display:flex;align-items:center}.nec-node{background:#10261edf;border:1px solid #8c9f7777;padding:26px 14px;text-align:center;flex:1;min-width:0}.nec-node>span{font:400 24px Georgia,serif}.nec-node small{display:block;font-size:14px;margin-top:11px;color:#c0cbb2}.nec-wire{height:1px;width:35px;background:#bba76c;transform-origin:left}.nec-node.last{border-color:#c8b17a;color:#e6d5ab}.nec-modes{color:#c0c6b0;font-size:14px;margin-top:23px;text-align:center}.is-timed .danger-track i{animation:hit-approaches 7s linear both}.is-timed .nec-node.first{animation:nec-light 1.2s .7s both}.is-timed .nec-wire.first{animation:rail-fill 1s 1.8s both}.is-timed .nec-node.second{animation:nec-light 1.2s 2.5s both}.is-timed .nec-wire.second{animation:rail-fill 1s 3.5s both}.is-timed .nec-node.last{animation:nec-light 1.2s 4.4s both}
/* Research stays visibly outside the active packages. */
.film-research{display:flex;align-items:center;width:100%}.log-sheet,.review-sheet{flex:1;min-width:0;padding:22px 28px;border-top:1px solid #b29d6966;border-bottom:1px solid #b29d6966;background:linear-gradient(135deg,#142b22ee,#10221bdd)}.log-sheet>span,.review-sheet>span{font:400 27px Georgia,serif}.log-sheet small,.review-sheet small{display:block;font-size:14px;color:#bec6b2;margin-top:18px}.log-tracks{display:grid;gap:11px;margin-top:23px}.log-tracks i{height:4px;background:linear-gradient(90deg,transparent 0 12%,#b9a775 12% 45%,transparent 45% 62%,#849a79 62% 85%,transparent 85%);transform-origin:left}.log-tracks i:nth-child(2){background-position:35px}.log-tracks i:nth-child(3){background-position:-40px}.log-tracks i:nth-child(4){background-position:65px}.research-wire{width:70px;height:1px;background:#b7a66d66;position:relative;overflow:hidden}.research-wire i{position:absolute;width:25px;height:2px;background:#e2cd94}.review-lines{display:grid;gap:11px;margin-top:26px}.review-lines i{height:4px;background:#b0bc9355;transform-origin:left}.review-lines i:nth-child(2){width:80%}.review-lines i:nth-child(3){width:58%}.research-boundary{font-size:15px;line-height:1.5;text-align:center;color:#e2c895;border-bottom:1px solid #bea87066;padding:17px 14px 9px}.is-timed .log-tracks i{animation:rail-fill 1.3s .4s both}.is-timed .log-tracks i:nth-child(2){animation-delay:.6s}.is-timed .log-tracks i:nth-child(3){animation-delay:.8s}.is-timed .log-tracks i:nth-child(4){animation-delay:1s}.is-timed .research-wire i{animation:request-travel 1.6s 1.8s both}.is-timed .review-lines i{animation:rail-fill 1s 3s both}.is-timed .review-lines i:nth-child(2){animation-delay:3.5s}.is-timed .review-lines i:nth-child(3){animation-delay:4s}.is-timed .research-boundary{animation:film-caption-in 1s 4.8s both}
.shifu-film[data-playing=false] *,.shifu-film[data-playing=false] *:before,.shifu-film[data-playing=false] *:after{animation-play-state:paused!important}
@keyframes film-drift{from{transform:scale(1.035) translateX(0)}to{transform:scale(1.09) translateX(-1%)}}
@keyframes film-caption-in{from{opacity:0;transform:translateY(12px);filter:blur(3px)}to{opacity:1;transform:none;filter:blur(0)}}
@keyframes plate-arrive{from{opacity:0;transform:translateY(30px) rotateX(12deg)}to{opacity:1;transform:none}}
@keyframes rail-fill{from{transform:scaleX(0);opacity:.3}to{transform:scaleX(1);opacity:1}}
@keyframes read-signal{0%{transform:scaleX(.15);opacity:.3}45%{transform:scaleX(.85);opacity:1}70%{transform:scaleX(.6)}100%{transform:scaleX(1)}}
@keyframes wire-arrive{from{opacity:0}to{opacity:1}}
@keyframes core-sweep{0%{transform:translateY(-5px);opacity:0}20%{opacity:1}85%{opacity:1}100%{transform:translateY(95px);opacity:0}}
@keyframes priority-check{from{opacity:.1;transform:translateX(-15px)}to{opacity:.5;transform:none}}
@keyframes priority-choice{0%{opacity:.35;transform:translateX(-15px);box-shadow:inset 0 0 transparent}55%,100%{opacity:1;transform:translateX(9px);box-shadow:inset 3px 0 #e1c486,0 0 35px #b9a05b18}}
@keyframes request-travel{0%{left:0;opacity:0}15%{opacity:1}85%{opacity:1}100%{left:100%;opacity:0}}
@keyframes request-arrive{from{opacity:0;transform:scale(.97)}to{opacity:1;transform:none}}
@keyframes flow-continue{from{transform:translateX(-110%)}to{transform:translateX(440%)}}
@keyframes hit-approaches{from{right:4%}to{right:58%}}
@keyframes nec-light{from{opacity:.45;box-shadow:inset 0 0 transparent}to{opacity:1;box-shadow:inset 0 -2px #d2b879,0 0 30px #a8925019}}
@media(max-width:1000px){.film-scene{padding-left:35px;padding-right:35px}.film-specializations{gap:25px}.nec-node>span{font-size:22px}.nec-node small{font-size:13px}.log-sheet,.review-sheet{padding:22px}.film-caption{font-size:28px}}
@media(max-width:600px){
 .dojo .dojo-film-section{padding:40px 20px}.film-heading{margin-bottom:22px}.film-heading h2{font-size:30px}.film-heading>span{font-size:13px}.shifu-film{height:610px}.film-phase{top:23px;left:20px;right:20px;gap:11px;font-size:14px}.film-phase>span:last-child{padding-left:11px}.film-scenes{inset:70px 0 88px}.film-scene{padding:12px 20px 0}.film-graphic{height:285px}.film-caption{font-size:23px;line-height:1.35;min-height:130px;margin-top:16px}.film-background{object-position:76% center}.film-wash{background:linear-gradient(0deg,#061711 0%,#061711c4 30%,#06171160 75%,#071911bb)}.film-transport{left:20px;right:20px}.film-progress{gap:4px}.film-bottom{display:block}.film-transcript{margin-top:10px}.film-transcript summary{text-align:left}.film-bottom>span{font-size:13px}
 .film-specializations{gap:8px;align-items:center}.film-spec{width:28%;padding:15px 4px;gap:11px}.film-spec img{width:65px;height:80px}.film-spec.focus{width:44%;padding:16px 3px}.film-spec.focus img{width:88px;height:100px}.film-spec>span{font-size:18px}.film-spec.focus>span{font-size:17px}.rule-lines{width:62px}.film-reference{font-size:13px;line-height:1.6;max-width:230px;margin-top:20px}
 .read-sources{gap:12px}.read-sources>div{font-size:17px;padding-bottom:12px}.read-sources i{margin-top:15px}.read-wires{width:64%;height:65px}.read-wires i:first-child{transform:skewX(29deg)}.read-wires i:last-child{transform:skewX(-29deg)}.read-core{font-size:37px;padding:10px 25px}.film-source{font-size:13px}
 .film-priority{flex-direction:column}.priority-stack{width:100%;gap:7px}.priority-item{font-size:17px;padding:11px 14px;gap:16px}.request-wire{height:24px;width:1px}.request-wire>i{width:2px;height:10px}.request-destination{width:100%;padding:10px 15px;display:flex;align-items:center;justify-content:space-around;gap:8px}.request-destination>span{font-size:14px}.request-destination>strong{font-size:22px;margin:0}.is-timed .request-wire>i{animation-name:request-travel-down}
 .cooldown-tile{grid-template-columns:55px 1fr;gap:14px;padding:19px 15px}.cooldown-tile img{width:50px;height:70px;grid-row:span 2}.cooldown-tile>span{font-size:21px}.cooldown-tile strong{justify-self:start;font-size:16px;padding:5px 13px}.ordinary-route{gap:12px;font-size:14px;margin-top:35px}
 .danger-horizon{gap:15px;margin-bottom:22px;font-size:15px}.nec-route{flex-direction:column}.nec-node{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;padding:12px 14px;text-align:left}.nec-node>span{font-size:20px}.nec-node small{font-size:13px;margin:0;text-align:right}.nec-wire{height:16px;width:1px;transform-origin:top}.is-timed .nec-wire{animation-name:rail-fill-y}.nec-modes{font-size:13px;margin-top:15px}
 .film-research{width:100%;gap:0;flex-direction:column}.log-sheet,.review-sheet{width:100%;padding:13px 17px}.log-sheet>span,.review-sheet>span{font-size:22px}.log-tracks{gap:7px;margin-top:12px}.log-tracks i{height:3px}.log-tracks i:nth-child(4){display:none}.log-sheet small,.review-sheet small{font-size:13px;margin-top:10px}.research-wire{height:18px;width:1px}.research-wire i{width:2px;height:10px}.is-timed .research-wire i{animation-name:request-travel-down}.review-lines{gap:7px;margin-top:12px}.review-lines i{height:3px}.review-lines i:last-child{display:none}.research-boundary{font-size:14px;padding:13px 0 5px}
}
@media(max-width:360px){.shifu-film{height:625px}.film-scenes{inset:70px 0 88px}.film-scene{padding-left:14px;padding-right:14px}.film-caption{font-size:22px;min-height:143px}.film-graphic{height:288px}.film-phase{left:15px;right:15px;gap:9px;font-size:13px}.film-spec.focus>span{font-size:15px}.film-spec img{width:55px}.film-spec.focus img{width:75px}.film-heading>span{font-size:12px}.film-transport{left:15px;right:15px}.nec-node{padding:11px}.nec-node>span{font-size:18px}.nec-node small{font-size:12px}.read-sources{gap:7px}.read-sources>div{font-size:16px}}
@keyframes request-travel-down{0%{top:0;opacity:0}15%{opacity:1}85%{opacity:1}100%{top:100%;opacity:0}}
@keyframes rail-fill-y{from{transform:scaleY(0);opacity:.3}to{transform:scaleY(1);opacity:1}}
.film-reduced *{animation:none!important;transition:none!important}.film-reduced .film-spec.side{opacity:.7}.film-reduced .film-background.is-timed{opacity:.42}.film-reduced .core-scan{display:none}
@media(prefers-reduced-motion:reduce){.shifu-film *{animation:none!important;transition:none!important}}
/* Keep outgoing captions clear during the image dissolve. */
.film-scene:not(.is-active) .film-caption{opacity:0;transition:opacity .2s}
.request-wire>i{position:absolute;left:0;top:0}
/* Let the selected emblem blend with the scene after its entrance. */
.class-scene-copy{animation-fill-mode:backwards}
