/* Forge project file: one project as an engineering datasheet. Shared by the founder page and the student project database. */
.ff{border:1px solid var(--line,#2C3035);border-radius:18px;overflow:hidden;background:#15181B;color:var(--text,#F3F0E8)}
.ff+.ff{margin-top:28px}
.ff-head{display:flex;flex-wrap:wrap;gap:6px 18px;justify-content:space-between;padding:12px 18px;border-bottom:1px solid var(--line,#2C3035);color:var(--muted,#80878E)}
.ff-head b{color:var(--accent,#E4572E);font-weight:500}
.ff-body{display:grid}
@media(min-width:960px){.ff-body{grid-template-columns:7fr 5fr}}
.ff-media{position:relative;background:#0D0F11;min-height:320px;border-bottom:1px solid var(--line,#2C3035)}
@media(min-width:960px){.ff-media{border-bottom:0;border-right:1px solid var(--line,#2C3035)}}
.ff-stage{position:relative;aspect-ratio:4/3;overflow:hidden}
.ff-stage>*{position:absolute;inset:0;width:100%;height:100%}
.ff-stage img,.ff-stage video{object-fit:cover;filter:grayscale(.85) contrast(1.05);transition:filter .6s cubic-bezier(.32,.72,0,1)}
.ff:hover .ff-stage img,.ff:hover .ff-stage video{filter:none}
.ff-pane{display:none}
.ff-pane.on{display:block}
/* before / after slider */
.ba{position:absolute;inset:0;--x:50%;cursor:ew-resize;touch-action:pan-y}
.ba img{position:absolute;inset:0;width:100%;height:100%}
.ba .after{clip-path:inset(0 0 0 var(--x))}
.ba .line{position:absolute;top:0;bottom:0;left:var(--x);width:2px;margin-left:-1px;background:var(--paper,#F3F0E8);pointer-events:none}
.ba .knob{position:absolute;top:50%;left:var(--x);width:44px;height:44px;margin:-22px 0 0 -22px;border-radius:50%;background:var(--paper,#F3F0E8);color:var(--ink,#16191D);display:grid;place-items:center;font-family:var(--mono);font-size:12px;pointer-events:none}
.ba .tag{position:absolute;top:14px;padding:6px 10px;border-radius:999px;background:rgba(17,19,21,.75)}
.ba .tag.l{left:14px}.ba .tag.r{right:14px}
.ba input{position:absolute;inset:0;opacity:0;cursor:ew-resize;width:100%;height:100%;margin:0}
.ff-tabs{display:flex;gap:6px;padding:12px 14px}
.ff-tabs button{height:32px;padding:0 14px;border-radius:999px;border:1px solid var(--line,#2C3035);background:transparent;color:var(--text-2,#B9BDC1);cursor:pointer;transition:all .4s cubic-bezier(.32,.72,0,1)}
.ff-tabs button:hover{border-color:var(--text,#F3F0E8)}
.ff-tabs button[aria-selected="true"]{background:var(--paper,#F3F0E8);color:var(--ink,#16191D);border-color:var(--paper,#F3F0E8)}
.ff-slot{display:grid;place-items:center;text-align:center;padding:24px;color:var(--muted,#80878E);border:1px dashed var(--line,#2C3035);margin:14px;border-radius:12px;position:absolute;inset:0}
.ff-cad{position:absolute;inset:0}
.ff-cad canvas{display:block;width:100%!important;height:100%!important;cursor:grab}
.ff-info{padding:24px 22px 26px;display:flex;flex-direction:column;gap:18px}
.ff-info h3{font-size:clamp(28px,2.6vw,38px);line-height:1.04;letter-spacing:-.02em;font-weight:500}
.ff-info .one{color:var(--text-2,#B9BDC1)}
.ff-spec{border-top:1px solid var(--line,#2C3035)}
.ff-spec div{display:grid;grid-template-columns:120px 1fr;gap:14px;padding:9px 0;border-bottom:1px solid var(--line,#2C3035)}
.ff-spec dt{color:var(--muted,#80878E)}
.ff-sec h4{color:var(--muted,#80878E);margin-bottom:6px;font-weight:400}
.ff-sec p{color:var(--text-2,#B9BDC1);font-size:16px}
.ff-chips{display:flex;flex-wrap:wrap;gap:6px}
.ff-chips span{border:1px solid var(--line,#2C3035);border-radius:999px;padding:5px 10px}
.ff .gap{color:var(--accent,#E4572E)}

/* ---------- motion layer ---------- */
/* entrance: card rises, then spec rows print in one by one */
.ff{opacity:0;transform:translateY(48px);transition:opacity .9s cubic-bezier(.32,.72,0,1),transform .9s cubic-bezier(.32,.72,0,1)}
.ff.in{opacity:1;transform:none}
.ff-spec div,.ff-sec,.ff-chips span{opacity:0;transform:translateY(10px);transition:opacity .6s cubic-bezier(.32,.72,0,1),transform .6s cubic-bezier(.32,.72,0,1)}
.ff.in .ff-spec div,.ff.in .ff-sec,.ff.in .ff-chips span{opacity:1;transform:none}
/* scan line that sweeps the datasheet as it prints */
.ff-info{position:relative}
.ff-info::after{content:"";position:absolute;left:0;right:0;top:0;height:1px;background:var(--accent,#E4572E);opacity:0;box-shadow:0 0 12px rgba(228,87,46,.6)}
.ff.in .ff-info::after{animation:ffscan 1.4s cubic-bezier(.32,.72,0,1) .2s 1 both}
@keyframes ffscan{0%{opacity:.9;top:0}90%{opacity:.9}100%{opacity:0;top:100%}}
/* media: slow push-in, grain */
.ff-stage img{transform:scale(1.06);transition:filter .6s cubic-bezier(.32,.72,0,1),transform 1.6s cubic-bezier(.32,.72,0,1)}
.ff.in .ff-stage img{transform:scale(1)}
.ff-stage::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.08;mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
/* big number readout for numeric specs */
.ff-spec dd .num{font-variant-numeric:tabular-nums}

/* project list: rows that open their factfile in place */
.ffx{border-top:1px solid var(--line,#2C3035)}
.ffx-item{border-bottom:1px solid var(--line,#2C3035)}
.ffx-row{all:unset;box-sizing:border-box;width:100%;display:grid;grid-template-columns:60px minmax(0,1fr) 170px 180px 80px 24px;gap:16px;align-items:center;padding:18px 4px;cursor:pointer;color:var(--text-2,#B9BDC1);transition:color .4s cubic-bezier(.32,.72,0,1),padding .4s cubic-bezier(.32,.72,0,1),background .4s}
.ffx-row:hover,.ffx-row:focus-visible,.ffx-item.open .ffx-row{color:var(--text,#F3F0E8);padding-left:14px;background:rgba(243,240,232,.03)}
.ffx-row:focus-visible{outline:2px solid var(--accent,#E4572E);outline-offset:-2px}
.ffx .t{font-family:var(--sans);font-size:22px;letter-spacing:-.01em;color:inherit}
.ffx .arr{justify-self:end;font-family:var(--mono);font-size:20px;color:var(--accent,#E4572E);transition:transform .5s cubic-bezier(.32,.72,0,1)}
.ffx-item.open .arr{transform:rotate(45deg)}
.ffx-drawer{display:grid;grid-template-rows:0fr;transition:grid-template-rows .8s cubic-bezier(.32,.72,0,1)}
.ffx-item.open .ffx-drawer{grid-template-rows:1fr}
.ffx-inner{overflow:hidden}
.ffx-inner .ff{margin:4px 0 22px}
@media(max-width:700px){.ffx-row{grid-template-columns:44px minmax(0,1fr) auto 24px}.ffx .hide{display:none}}
.ffx .subj{color:var(--accent,#E4572E)}

/* flight profile chart */
.ff-prof{position:absolute;inset:0;background:#0D0F11}
.ff-prof svg{width:100%;height:100%}
.ff-prof .ax{stroke:#2C3035;stroke-width:1}
.ff-prof .grid{stroke:#1E2226;stroke-width:1}
.ff-prof .path{fill:none;stroke:var(--paper,#F3F0E8);stroke-width:2;stroke-dasharray:var(--len);stroke-dashoffset:var(--len)}
.ff-prof .area{fill:url(#ffg);opacity:0;transition:opacity 1s ease 1.6s}
.ff-prof text{font-family:var(--mono);font-size:11px;letter-spacing:.06em;fill:var(--muted,#80878E);text-transform:uppercase}
.ff-prof .hot{fill:var(--accent,#E4572E)}
.ff-prof .burst{opacity:0;transition:opacity .5s ease 1.4s}
.ff-pane.on .ff-prof.go .path{transition:stroke-dashoffset 2.2s cubic-bezier(.32,.72,0,1);stroke-dashoffset:0}
.ff-pane.on .ff-prof.go .area,.ff-pane.on .ff-prof.go .burst{opacity:1}

@media (prefers-reduced-motion:reduce){.ff,.ff-spec div,.ff-sec,.ff-chips span,.ff-stage img{opacity:1!important;transform:none!important;transition:none!important}.ff-info::after{display:none}.ff-prof .path{stroke-dashoffset:0}.ff-prof .area,.ff-prof .burst{opacity:1}}

/* connected open state: the row and its project file become one card */
.ffx-item{transition:background .5s cubic-bezier(.32,.72,0,1),border-color .5s,border-radius .5s,margin .5s cubic-bezier(.32,.72,0,1)}
.ffx-item.open{background:#15181B;border:1px solid var(--line,#2C3035);border-radius:18px;margin:10px 0;overflow:hidden}
.ffx-item.open .ffx-row{padding-left:18px;background:transparent}
.ffx-inner .ff{margin:0;border:0;border-radius:0;border-top:1px solid var(--line,#2C3035);background:transparent;transform:none}
.ffx-inner .ff.in{transform:none}
.ffx-inner .ff-head{border-bottom-style:dashed}
.ffx-inner .ff-info h3{display:none} /* the row above already carries the title */

.ff-load{border-style:solid}
.ff-load b{color:var(--accent,#E4572E);font-weight:400;margin-left:6px}
.ffx-row.faq-row{grid-template-columns:60px minmax(0,1fr) 24px}

/* gallery */
.gal{position:absolute;inset:0}
.gal-s{position:absolute;inset:0;opacity:0;transition:opacity .8s cubic-bezier(.32,.72,0,1)}
.gal-s.on{opacity:1}
.gal-s img,.gal-s video{width:100%;height:100%;object-fit:cover;display:block}
.gal-ticks{position:absolute;left:14px;right:14px;bottom:12px;display:flex;gap:6px;z-index:2}
.gal-ticks button{flex:1;height:14px;border:0;background:none;padding:0;cursor:pointer;position:relative}
.gal-ticks button::after{content:"";position:absolute;left:0;right:0;top:6px;height:2px;background:rgba(243,240,232,.3);transition:background .4s}
.gal-ticks button:hover::after{background:rgba(243,240,232,.7)}
.gal-ticks button.on::after{background:var(--accent,#E4572E)}
/* arrows: thin chevrons on a soft dark disc, quiet until you hover the picture */
.gal-nav{position:absolute;top:50%;z-index:2;width:36px;height:36px;margin-top:-18px;border-radius:50%;border:1px solid rgba(243,240,232,.25);background:rgba(17,19,21,.45);color:var(--text,#F3F0E8);display:grid;place-items:center;padding:0;cursor:pointer;opacity:.75;transition:opacity .4s,background .4s,border-color .4s;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
.gal-nav.prev{left:12px}
.gal-nav.next{right:12px}
.gal-nav svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
.gal:hover .gal-nav{opacity:1}
.gal-nav:hover{background:rgba(17,19,21,.7);border-color:rgba(243,240,232,.6)}
.gal-nav:focus-visible{opacity:1;outline:2px solid var(--accent,#E4572E);outline-offset:2px}
