/* v7: Projects section */
.projects{display:grid;gap:26px}
.project{position:relative;display:grid;grid-template-columns:1.05fr 1fr;gap:44px;align-items:center;padding:42px;border:1px solid #26344e;border-radius:22px;background:linear-gradient(150deg,#101a2d,#0c1526);overflow:hidden;transition:transform .35s cubic-bezier(.2,.7,.2,1),border-color .3s,box-shadow .35s}
.project:before{content:'';position:absolute;inset:0;border-radius:inherit;background:radial-gradient(520px circle at var(--mx,50%) var(--my,0%),#29b8f21c,transparent 55%);opacity:0;transition:opacity .3s;pointer-events:none}
.project:hover{border-color:#3a6f98;box-shadow:0 28px 70px #0008}
.project:hover:before{opacity:1}
.project:nth-child(even) .project-visual{order:-1}
.project-info,.project-visual{position:relative}
.project .category{display:inline-block;padding:4px 11px;border:1px solid #38bdf833;border-radius:20px;background:#38bdf10f}
.project h3{font-size:clamp(26px,3vw,36px);letter-spacing:-.8px;margin:18px 0 12px}
.project-desc{font-size:15px;line-height:1.85;color:#aebdd3;margin:0 0 22px;max-width:520px}
.chips{list-style:none;margin:0 0 28px;padding:0;display:flex;flex-wrap:wrap;gap:9px}
.chips li{font-size:13px;line-height:1.4;color:#d5e6f7;padding:8px 13px;border-radius:30px;background:#ffffff08;border:1px solid #ffffff14;transition:border-color .25s,background .25s,transform .25s}
.chips li:hover{border-color:#38bdf866;background:#29b8f214;transform:translateY(-2px)}
.chips li:before{content:'';display:inline-block;width:6px;height:6px;margin-inline-end:9px;border-radius:50%;background:var(--fx-c,#16e0c4);vertical-align:middle}
.project-meta{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.project-meta .muted{font-size:12px}
/* abstract product visuals */
.mock{border:1px solid #33415c;border-radius:16px;background:linear-gradient(160deg,#16233a,#0b1424);box-shadow:0 24px 60px #0006;overflow:hidden;transition:transform .35s cubic-bezier(.2,.7,.2,1)}
.project:hover .mock{transform:translateY(-6px) scale(1.01)}
.mock-bar{display:flex;gap:6px;padding:12px 14px;border-bottom:1px solid #ffffff10;background:#ffffff06}
.mock-bar i{width:9px;height:9px;border-radius:50%;background:#ffffff2b}
.mock-bar i:first-child{background:#16e0c4aa}
.mock-bar span{margin-inline-start:auto;width:70px;height:8px;border-radius:6px;background:#ffffff14}
.mock-body{padding:18px;display:grid;gap:11px;min-height:250px;align-content:start}
.m-row{display:flex;align-items:center;gap:12px;padding:11px 13px;border-radius:11px;background:#ffffff07;border:1px solid #ffffff0d}
.m-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;background:#38bdf8}
.m-dot.ok{background:#16e0c4}.m-dot.warn{background:#ffb454}.m-dot.hi{background:#7d8cff}
.m-line{height:8px;border-radius:6px;background:#ffffff1f;flex:1}
.m-line.s{flex:0 0 38%;background:#ffffff12}
.m-pill{width:46px;height:16px;border-radius:12px;background:#29b8f233;border:1px solid #29b8f255;flex-shrink:0}
.m-pill.ok{background:#16e0c433;border-color:#16e0c455}
.m-pill.warn{background:#ffb45433;border-color:#ffb45455}
.m-row:nth-child(1) .m-line{max-width:78%}.m-row:nth-child(2) .m-line{max-width:60%}.m-row:nth-child(3) .m-line{max-width:84%}.m-row:nth-child(4) .m-line{max-width:52%}.m-row:nth-child(5) .m-line{max-width:70%}
.m-row{animation:mRow 5s ease-in-out infinite}
.m-row:nth-child(2){animation-delay:.6s}.m-row:nth-child(3){animation-delay:1.2s}.m-row:nth-child(4){animation-delay:1.8s}.m-row:nth-child(5){animation-delay:2.4s}
@keyframes mRow{0%,70%,100%{background:#ffffff07}35%{background:#29b8f214}}
.m-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.m-dev{aspect-ratio:1;border-radius:11px;background:#ffffff07;border:1px solid #ffffff0d;display:grid;place-items:center;position:relative}
.m-dev:before{content:'';width:46%;height:34%;border-radius:4px;border:2px solid #ffffff33}
.m-dev:after{content:'';position:absolute;top:8px;inset-inline-end:8px;width:7px;height:7px;border-radius:50%;background:#16e0c4}
.m-dev.warn:after{background:#ffb454}.m-dev.hi:after{background:#7d8cff;animation:fxPulse 2s infinite}
.m-prog{height:10px;border-radius:8px;background:#ffffff12;overflow:hidden}
.m-prog b{display:block;height:100%;width:72%;border-radius:8px;background:linear-gradient(90deg,#16e0c4,#29b8f2,#7d8cff);animation:mProg 6s ease-in-out infinite}
@keyframes mProg{0%{width:12%}70%,100%{width:88%}}
.m-split{display:grid;grid-template-columns:1.5fr 1fr;gap:12px}
.m-list{display:grid;gap:9px}
.m-total{border-radius:12px;border:1px solid #29b8f244;background:linear-gradient(160deg,#29b8f21f,#ffffff05);padding:16px;display:grid;gap:12px;align-content:space-between}
.m-total .m-line{height:10px}
.m-btn{height:34px;border-radius:9px;background:linear-gradient(110deg,#16e0c4,#29b8f2);opacity:.9}
@media(max-width:900px){.project{grid-template-columns:1fr;padding:28px;gap:30px}.project:nth-child(even) .project-visual{order:0}.mock-body{min-height:0}}
@media(max-width:540px){.project{padding:22px;border-radius:18px}.chips li{font-size:12px}.m-grid{grid-template-columns:repeat(4,1fr);gap:7px}}
@media(prefers-reduced-motion:reduce){.m-row,.m-prog b,.m-dev.hi:after{animation:none!important}.project,.mock,.chips li{transition:none}}
