.alpl-root,
.alpl-root *{box-sizing:border-box}
.alpl-root{--alpl-bg:#061527;--alpl-panel:#0b2038;--alpl-panel2:#0e2948;--alpl-line:rgba(255,255,255,.10);--alpl-text:#f5f8fc;--alpl-muted:#9fb3c9;--alpl-primary:#36a9ff;--alpl-primary2:#7dd3fc;--alpl-good:#34d399;--alpl-warn:#fbbf24;--alpl-bad:#fb7185;--alpl-metal1:#f4f7fa;--alpl-metal2:#aeb9c5;--alpl-metal3:#667586;--alpl-shadow:0 18px 55px rgba(0,0,0,.24);font-family:Inter,"Noto Sans Sinhala","Iskoola Pota","Malithi Web",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--alpl-text);line-height:1.55;width:100%;max-width:1180px;margin:24px auto;isolation:isolate}
.alpl-root button,.alpl-root input,.alpl-root select{font:inherit}
.alpl-shell{position:relative;overflow:hidden;border:1px solid rgba(110,190,255,.16);border-radius:28px;background:radial-gradient(circle at 10% 0%,rgba(54,169,255,.16),transparent 35%),radial-gradient(circle at 100% 20%,rgba(125,211,252,.10),transparent 30%),linear-gradient(145deg,#061424 0%,#081a2e 55%,#071626 100%);box-shadow:var(--alpl-shadow)}
.alpl-shell:before{content:"";position:absolute;inset:0;pointer-events:none;background-image:linear-gradient(rgba(255,255,255,.018) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.018) 1px,transparent 1px);background-size:28px 28px;mask-image:linear-gradient(to bottom,#000,transparent 82%)}
.alpl-topbar{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:22px 24px;border-bottom:1px solid var(--alpl-line);background:rgba(2,12,24,.36);backdrop-filter:blur(12px)}
.alpl-brand{display:flex;align-items:center;gap:13px;min-width:0}.alpl-brand-icon{width:48px;height:48px;display:grid;place-items:center;border-radius:15px;background:linear-gradient(145deg,rgba(54,169,255,.22),rgba(54,169,255,.06));border:1px solid rgba(125,211,252,.25);font-size:25px;box-shadow:inset 0 1px rgba(255,255,255,.12)}
.alpl-brand h2{margin:0;font-size:clamp(19px,2.2vw,28px);letter-spacing:-.02em;color:#fff}.alpl-brand p{margin:2px 0 0;color:var(--alpl-muted);font-size:13px}
.alpl-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.alpl-pill,.alpl-lang button{min-height:40px;border:1px solid var(--alpl-line);border-radius:999px;background:rgba(255,255,255,.055);color:var(--alpl-text);padding:8px 12px;font-weight:700;font-size:13px}.alpl-pill b{color:#fff}.alpl-lang{display:flex;border:1px solid var(--alpl-line);border-radius:999px;padding:3px;background:rgba(0,0,0,.18)}.alpl-lang button{border:0;background:transparent;min-width:48px;padding:5px 10px;cursor:pointer}.alpl-lang button.is-active{background:var(--alpl-primary);color:#03111f;box-shadow:0 4px 16px rgba(54,169,255,.25)}
.alpl-main{position:relative;z-index:1;padding:22px;display:grid;grid-template-columns:minmax(0,1.65fr) minmax(280px,.75fr);gap:18px}.alpl-panel{border:1px solid var(--alpl-line);border-radius:22px;background:linear-gradient(180deg,rgba(14,41,72,.72),rgba(7,25,44,.82));box-shadow:inset 0 1px rgba(255,255,255,.035)}
.alpl-stage{padding:20px;min-width:0}.alpl-stage-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:15px}.alpl-kicker{display:inline-flex;align-items:center;gap:7px;margin-bottom:6px;color:var(--alpl-primary2);font-weight:800;font-size:12px;letter-spacing:.09em;text-transform:uppercase}.alpl-stage h3{margin:0;font-size:clamp(20px,2.6vw,31px);line-height:1.25;color:#fff}.alpl-stage-desc{color:var(--alpl-muted);margin:6px 0 0;max-width:780px;font-size:14px}.alpl-mode{display:flex;gap:6px;padding:4px;border-radius:13px;background:rgba(0,0,0,.22);border:1px solid var(--alpl-line);flex-shrink:0}.alpl-mode button{border:0;background:transparent;color:var(--alpl-muted);font-size:12px;font-weight:800;padding:8px 10px;border-radius:9px;cursor:pointer}.alpl-mode button.is-active{background:rgba(54,169,255,.15);color:#dff3ff}
.alpl-workbench{position:relative;border-radius:18px;padding:14px 14px 10px;background:linear-gradient(180deg,rgba(2,12,23,.86),rgba(5,18,32,.76));border:1px solid rgba(255,255,255,.08);overflow:hidden}.alpl-workbench:after{content:"";position:absolute;left:0;right:0;bottom:0;height:38%;pointer-events:none;background:linear-gradient(180deg,transparent,rgba(13,41,63,.25)),repeating-linear-gradient(90deg,rgba(255,255,255,.015) 0 2px,transparent 2px 10px)}
.alpl-instrument-wrap{position:relative;z-index:1;width:100%;overflow-x:auto;scrollbar-width:thin}.alpl-caliper{display:block;width:100%;min-width:680px;height:auto;touch-action:none;user-select:none}.alpl-caliper .metal{fill:url(#alplMetal)}.alpl-caliper .metal-dark{fill:url(#alplMetalDark)}.alpl-caliper .engrave{stroke:#2a3848;stroke-width:1}.alpl-caliper .scale-text{font-size:11px;fill:#243241;font-weight:700}.alpl-caliper .vernier-text{font-size:10px;fill:#182634;font-weight:800}.alpl-caliper .object{filter:drop-shadow(0 10px 14px rgba(0,0,0,.32))}.alpl-caliper .drag-handle{cursor:grab}.alpl-caliper .drag-handle:active{cursor:grabbing}.alpl-caliper .glow-contact{filter:drop-shadow(0 0 10px rgba(52,211,153,.55))}
.alpl-touch-note{display:flex;justify-content:center;align-items:center;gap:8px;color:#b7c8d9;font-size:12px;margin-top:4px}.alpl-mini-controls{display:flex;align-items:center;justify-content:center;gap:9px;margin-top:10px;flex-wrap:wrap}.alpl-mini-controls button{height:42px;min-width:42px;border-radius:12px;border:1px solid var(--alpl-line);background:rgba(255,255,255,.06);color:#fff;font-weight:900;cursor:pointer}.alpl-mini-controls button:hover{background:rgba(255,255,255,.10)}.alpl-mini-controls .alpl-reset-jaw{padding:0 14px;font-size:12px;color:#c9d6e4}
.alpl-contact{margin-top:12px;border-radius:13px;padding:10px 12px;display:flex;gap:9px;align-items:center;font-size:13px;font-weight:700;background:rgba(251,191,36,.09);border:1px solid rgba(251,191,36,.18);color:#fde68a}.alpl-contact.good{background:rgba(52,211,153,.10);border-color:rgba(52,211,153,.24);color:#a7f3d0}.alpl-contact.bad{background:rgba(251,113,133,.10);border-color:rgba(251,113,133,.22);color:#fecdd3}
.alpl-zoom{margin-top:16px;padding:15px;border-radius:16px;background:rgba(4,17,30,.72);border:1px solid var(--alpl-line)}.alpl-zoom-title{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px}.alpl-zoom-title strong{font-size:13px}.alpl-zoom-title span{font-size:11px;color:var(--alpl-muted)}.alpl-zoom svg{width:100%;min-width:560px;height:auto;display:block}.alpl-zoom-scroll{overflow-x:auto}.alpl-zoom .main-line,.alpl-zoom .vernier-line{stroke:#dce6ef;stroke-width:1.5}.alpl-zoom .major{stroke-width:2}.alpl-zoom .zoom-label{fill:#b9c9d8;font-size:11px}.alpl-zoom .match{stroke:var(--alpl-good);stroke-width:3;filter:drop-shadow(0 0 4px rgba(52,211,153,.6))}
.alpl-side{padding:17px;display:flex;flex-direction:column;gap:14px}.alpl-mission-card{padding:16px;border-radius:17px;background:linear-gradient(145deg,rgba(54,169,255,.10),rgba(255,255,255,.025));border:1px solid rgba(54,169,255,.16)}.alpl-mission-card h4{margin:0 0 7px;font-size:15px;color:#fff}.alpl-mission-card p{margin:0;color:var(--alpl-muted);font-size:13px}.alpl-object-chip{margin-top:12px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 11px;border-radius:12px;background:rgba(255,255,255,.045);font-size:12px}.alpl-object-chip strong{color:#fff}
.alpl-progress{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.alpl-stat{padding:12px 10px;border-radius:14px;background:rgba(255,255,255,.045);border:1px solid var(--alpl-line);text-align:center}.alpl-stat span{display:block;color:var(--alpl-muted);font-size:10px;text-transform:uppercase;letter-spacing:.07em;font-weight:800}.alpl-stat strong{display:block;font-size:19px;color:#fff;margin-top:2px}.alpl-hearts{letter-spacing:2px}
.alpl-answer{padding:15px;border-radius:17px;background:rgba(0,0,0,.17);border:1px solid var(--alpl-line)}.alpl-answer h4{margin:0 0 12px;font-size:14px}.alpl-field{margin-bottom:10px}.alpl-field label{display:flex;justify-content:space-between;gap:8px;margin-bottom:6px;color:#dbe8f5;font-size:12px;font-weight:750}.alpl-field label small{color:var(--alpl-muted);font-weight:600}.alpl-input-row{display:flex;align-items:center;gap:8px}.alpl-input-row input{width:100%;min-width:0;height:46px;border-radius:12px;border:1px solid rgba(255,255,255,.12);background:#06182a;color:#fff;padding:0 12px;outline:none;transition:.2s}.alpl-input-row input:focus{border-color:rgba(54,169,255,.72);box-shadow:0 0 0 3px rgba(54,169,255,.13)}.alpl-unit{flex:0 0 auto;color:var(--alpl-muted);font-weight:700;font-size:12px}.alpl-check{width:100%;height:48px;border:0;border-radius:13px;background:linear-gradient(135deg,var(--alpl-primary),#68c6ff);color:#03111f;font-weight:900;cursor:pointer;box-shadow:0 9px 24px rgba(54,169,255,.18);transition:transform .15s,filter .15s}.alpl-check:hover{filter:brightness(1.04);transform:translateY(-1px)}.alpl-check:active{transform:translateY(0)}.alpl-check:disabled{opacity:.5;cursor:not-allowed;transform:none;filter:none}
.alpl-feedback{display:none;padding:12px 13px;border-radius:13px;font-size:13px;border:1px solid var(--alpl-line)}.alpl-feedback.show{display:block}.alpl-feedback.success{background:rgba(52,211,153,.10);border-color:rgba(52,211,153,.24);color:#bbf7d0}.alpl-feedback.error{background:rgba(251,113,133,.10);border-color:rgba(251,113,133,.22);color:#fecdd3}.alpl-feedback.info{background:rgba(54,169,255,.08);border-color:rgba(54,169,255,.18);color:#d7efff}.alpl-feedback strong{display:block;color:inherit;margin-bottom:2px}.alpl-hint-btn,.alpl-next{height:43px;border-radius:12px;border:1px solid var(--alpl-line);background:rgba(255,255,255,.055);color:#e8f1fa;font-weight:800;font-size:12px;cursor:pointer;padding:0 13px}.alpl-side-actions{display:flex;gap:8px}.alpl-side-actions>*{flex:1}.alpl-next{background:rgba(52,211,153,.12);border-color:rgba(52,211,153,.22);color:#c7f9df}.alpl-next[hidden]{display:none}
.alpl-tutorial{padding:14px 15px;border-radius:15px;border:1px dashed rgba(125,211,252,.22);background:rgba(54,169,255,.045);color:#cfe5f7;font-size:12px}.alpl-tutorial b{color:#fff}.alpl-tutorial[hidden]{display:none}
.alpl-footer{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:15px;padding:14px 22px;border-top:1px solid var(--alpl-line);color:var(--alpl-muted);font-size:11px}.alpl-footer strong{color:#d9e8f6}.alpl-roundbar{height:6px;background:rgba(255,255,255,.07);border-radius:999px;overflow:hidden;flex:1;max-width:260px}.alpl-roundbar>i{display:block;height:100%;background:linear-gradient(90deg,var(--alpl-primary),var(--alpl-good));border-radius:inherit;transition:width .4s ease}
.alpl-summary{padding:32px 22px;text-align:center}.alpl-summary-badge{width:92px;height:92px;border-radius:28px;display:grid;place-items:center;margin:0 auto 16px;background:linear-gradient(145deg,rgba(52,211,153,.18),rgba(54,169,255,.12));border:1px solid rgba(125,211,252,.22);font-size:42px}.alpl-summary h3{font-size:30px;margin:0;color:#fff}.alpl-summary p{color:var(--alpl-muted);max-width:620px;margin:8px auto 20px}.alpl-score-ring{width:132px;height:132px;border-radius:50%;display:grid;place-items:center;margin:16px auto;background:conic-gradient(var(--alpl-primary) calc(var(--score)*1%),rgba(255,255,255,.08) 0);position:relative}.alpl-score-ring:before{content:"";position:absolute;inset:11px;border-radius:50%;background:#081a2e}.alpl-score-ring strong{position:relative;font-size:28px;color:#fff}.alpl-summary-grid{max-width:560px;margin:18px auto;display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.alpl-summary-grid div{padding:12px;border:1px solid var(--alpl-line);border-radius:13px;background:rgba(255,255,255,.04)}.alpl-summary-grid span{display:block;color:var(--alpl-muted);font-size:11px}.alpl-summary-grid strong{display:block;color:#fff;font-size:18px}.alpl-restart{height:48px;padding:0 20px;border:0;border-radius:13px;background:var(--alpl-primary);color:#03111f;font-weight:900;cursor:pointer}
.alpl-noscript{padding:18px;border:1px solid #ddd;border-radius:10px;background:#fff;color:#222}
@media (max-width:900px){.alpl-main{grid-template-columns:1fr}.alpl-side{display:grid;grid-template-columns:1fr 1fr}.alpl-side .alpl-answer,.alpl-side .alpl-feedback,.alpl-side .alpl-side-actions,.alpl-side .alpl-tutorial{grid-column:1/-1}}
@media (max-width:650px){.alpl-root{margin:12px auto}.alpl-shell{border-radius:18px}.alpl-topbar{align-items:flex-start;padding:16px;flex-direction:column}.alpl-actions{justify-content:flex-start}.alpl-main{padding:12px;gap:12px}.alpl-panel{border-radius:17px}.alpl-stage{padding:14px}.alpl-stage-head{flex-direction:column}.alpl-side{display:flex;padding:13px}.alpl-progress{grid-template-columns:repeat(3,1fr)}.alpl-footer{padding:12px 14px;align-items:flex-start;flex-direction:column}.alpl-roundbar{width:100%;max-width:none}.alpl-summary-grid{grid-template-columns:1fr 1fr}.alpl-brand-icon{width:42px;height:42px;border-radius:13px}.alpl-pill{padding:7px 10px;font-size:12px}.alpl-lang button{min-width:44px}.alpl-stage h3{font-size:22px}}
@media (prefers-reduced-motion:reduce){.alpl-root *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}

/* v1.1 navigation, roadmap and leaderboard */
.alpl-view[hidden]{display:none!important}
.alpl-game-nav{position:relative;z-index:3;display:flex;align-items:center;gap:7px;padding:10px 22px;border-bottom:1px solid var(--alpl-line);background:rgba(3,14,27,.52);overflow-x:auto;scrollbar-width:none}
.alpl-game-nav::-webkit-scrollbar{display:none}
.alpl-game-nav button{min-height:43px;display:inline-flex;align-items:center;justify-content:center;gap:8px;flex:0 0 auto;border:1px solid transparent;border-radius:12px;padding:8px 15px;background:transparent;color:var(--alpl-muted);font-weight:850;font-size:12px;cursor:pointer;transition:background .18s,border-color .18s,color .18s,transform .18s}
.alpl-game-nav button span{font-size:16px}
.alpl-game-nav button:hover{background:rgba(255,255,255,.05);color:#fff}
.alpl-game-nav button.is-active{border-color:rgba(54,169,255,.24);background:linear-gradient(145deg,rgba(54,169,255,.18),rgba(54,169,255,.07));color:#e8f7ff;box-shadow:inset 0 1px rgba(255,255,255,.05)}
.alpl-game-nav button:focus-visible,.alpl-road-play:focus-visible,.alpl-refresh:focus-visible,.alpl-summary-board:focus-visible{outline:3px solid rgba(125,211,252,.38);outline-offset:2px}

.alpl-section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:18px}
.alpl-section-kicker{display:block;margin-bottom:5px;color:var(--alpl-primary2);font-weight:900;font-size:11px;letter-spacing:.12em}
.alpl-section-head h3{margin:0;color:#fff;font-size:clamp(23px,3vw,34px);line-height:1.2;letter-spacing:-.025em}
.alpl-section-head p{max-width:710px;margin:7px 0 0;color:var(--alpl-muted);font-size:13px}

.alpl-roadmap-wrap,.alpl-leader-wrap{position:relative;z-index:2;padding:24px 24px 28px}
.alpl-road-summary{flex:0 0 auto;min-width:145px;padding:13px 15px;border:1px solid rgba(125,211,252,.16);border-radius:16px;background:linear-gradient(145deg,rgba(54,169,255,.11),rgba(255,255,255,.025));text-align:right}
.alpl-road-summary span,.alpl-road-summary small{display:block;color:var(--alpl-muted);font-size:10px;font-weight:750}
.alpl-road-summary strong{display:block;color:#fff;font-size:29px;line-height:1.1;margin:3px 0}
.alpl-road-progress{height:8px;margin:0 0 24px;border-radius:999px;background:rgba(255,255,255,.06);overflow:hidden;border:1px solid rgba(255,255,255,.05)}
.alpl-road-progress i{display:block;height:100%;min-width:0;border-radius:inherit;background:linear-gradient(90deg,var(--alpl-primary),var(--alpl-good));box-shadow:0 0 18px rgba(54,169,255,.18)}
.alpl-road-list{position:relative;display:grid;gap:13px;max-width:900px;margin:0 auto}
.alpl-road-list:before{content:"";position:absolute;top:34px;bottom:34px;left:34px;width:2px;background:linear-gradient(to bottom,rgba(54,169,255,.7),rgba(125,211,252,.22) 18%,rgba(255,255,255,.07) 58%,rgba(255,255,255,.035));z-index:0}
.alpl-road-card{position:relative;z-index:1;display:grid;grid-template-columns:70px minmax(0,1fr);gap:14px;align-items:stretch}
.alpl-road-node{display:grid;place-items:center;align-self:start;width:70px;height:70px;border:1px solid var(--alpl-line);border-radius:22px;background:#091d32;box-shadow:0 8px 24px rgba(0,0,0,.18);font-size:28px}
.alpl-road-content{min-width:0;padding:15px 17px;border:1px solid var(--alpl-line);border-radius:18px;background:linear-gradient(145deg,rgba(13,41,72,.82),rgba(6,23,40,.84));transition:border-color .18s,transform .18s,background .18s}
.alpl-road-content:hover{transform:translateY(-1px);border-color:rgba(125,211,252,.2)}
.alpl-road-meta{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:4px}
.alpl-road-meta span{color:var(--alpl-primary2);font-size:10px;font-weight:900;letter-spacing:.11em}
.alpl-road-meta b{border:1px solid var(--alpl-line);border-radius:999px;padding:4px 8px;color:var(--alpl-muted);background:rgba(255,255,255,.035);font-size:9px;text-transform:uppercase;letter-spacing:.06em}
.alpl-road-content h4{margin:0;color:#fff;font-size:17px}
.alpl-road-content p{margin:5px 0 0;color:var(--alpl-muted);font-size:12px}
.alpl-road-card.is-active .alpl-road-node,.alpl-road-card.is-completed .alpl-road-node{border-color:rgba(54,169,255,.35);background:linear-gradient(145deg,rgba(54,169,255,.25),#0a2036);box-shadow:0 0 0 5px rgba(54,169,255,.055),0 10px 26px rgba(0,0,0,.18)}
.alpl-road-card.is-active .alpl-road-content{border-color:rgba(54,169,255,.28);background:linear-gradient(145deg,rgba(54,169,255,.12),rgba(7,25,44,.9))}
.alpl-road-card.is-completed .alpl-road-node{border-color:rgba(52,211,153,.32);box-shadow:0 0 0 5px rgba(52,211,153,.05),0 10px 26px rgba(0,0,0,.18)}
.alpl-road-card.is-completed .alpl-road-meta b{color:#a7f3d0;border-color:rgba(52,211,153,.25);background:rgba(52,211,153,.08)}
.alpl-road-card.is-next .alpl-road-node{border-color:rgba(251,191,36,.25);background:linear-gradient(145deg,rgba(251,191,36,.10),#091d32)}
.alpl-road-card.is-next .alpl-road-meta b{color:#fde68a;border-color:rgba(251,191,36,.18);background:rgba(251,191,36,.06)}
.alpl-road-card.is-planned{opacity:.76}
.alpl-road-play{margin-top:11px;min-height:39px;border:0;border-radius:11px;padding:8px 13px;background:linear-gradient(135deg,var(--alpl-primary),#72cbff);color:#03111f;font-size:11px;font-weight:900;cursor:pointer}
.alpl-coming{display:inline-flex;align-items:center;gap:5px;margin-top:10px;color:#8097ad;font-size:10px;font-weight:800}
.alpl-road-note{max-width:900px;margin:16px auto 0;padding:12px 14px;border:1px dashed rgba(125,211,252,.18);border-radius:13px;background:rgba(54,169,255,.04);color:#bfd5e7;font-size:11px}

.alpl-refresh{min-height:42px;flex:0 0 auto;border:1px solid var(--alpl-line);border-radius:12px;padding:8px 13px;background:rgba(255,255,255,.05);color:#e5f2fc;font-size:11px;font-weight:850;cursor:pointer}
.alpl-loading,.alpl-empty,.alpl-leader-error{min-height:170px;display:flex;align-items:center;justify-content:center;gap:10px;border:1px solid var(--alpl-line);border-radius:18px;background:rgba(0,0,0,.12);color:var(--alpl-muted);font-size:13px;text-align:center;padding:20px}
.alpl-spinner{width:20px;height:20px;border-radius:50%;border:2px solid rgba(255,255,255,.14);border-top-color:var(--alpl-primary);animation:alplSpin .8s linear infinite}
@keyframes alplSpin{to{transform:rotate(360deg)}}
.alpl-leader-error{color:#fecdd3;border-color:rgba(251,113,133,.2);background:rgba(251,113,133,.06)}
.alpl-login-prompt{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;padding:12px 14px;border:1px solid rgba(54,169,255,.18);border-radius:14px;background:rgba(54,169,255,.065);color:#cfe8f8;font-size:11px}
.alpl-login-prompt a{flex:0 0 auto;border-radius:9px;padding:7px 11px;background:var(--alpl-primary);color:#03111f!important;text-decoration:none!important;font-weight:900}
.alpl-my-rank{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin-bottom:17px}
.alpl-my-rank>div{padding:12px 13px;border:1px solid rgba(54,169,255,.19);border-radius:14px;background:linear-gradient(145deg,rgba(54,169,255,.10),rgba(255,255,255,.02))}
.alpl-my-rank span{display:block;color:var(--alpl-muted);font-size:10px;font-weight:800}
.alpl-my-rank strong{display:block;margin-top:2px;color:#fff;font-size:19px}
.alpl-podium{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:11px;margin:0 0 17px}
.alpl-podium-card{position:relative;min-width:0;padding:17px 13px;text-align:center;border:1px solid var(--alpl-line);border-radius:18px;background:linear-gradient(180deg,rgba(14,41,72,.75),rgba(6,23,40,.88))}
.alpl-podium-card.rank-1{border-color:rgba(251,191,36,.25);background:radial-gradient(circle at 50% 0%,rgba(251,191,36,.12),transparent 55%),linear-gradient(180deg,rgba(14,41,72,.8),rgba(6,23,40,.9))}
.alpl-medal{position:absolute;top:9px;right:10px;font-size:16px;font-weight:900;color:#a8bdd0}
.alpl-avatar,.alpl-table-avatar{display:grid;place-items:center;border:1px solid rgba(125,211,252,.2);background:linear-gradient(145deg,rgba(54,169,255,.22),rgba(54,169,255,.06));color:#eaf8ff;font-weight:950;letter-spacing:.02em}
.alpl-avatar{width:50px;height:50px;margin:4px auto 9px;border-radius:16px;font-size:15px}
.alpl-podium-card strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff;font-size:13px}
.alpl-podium-card span{display:block;margin-top:5px;color:#dff3ff;font-size:11px;font-weight:850}
.alpl-podium-card small{display:block;margin-top:2px;color:var(--alpl-muted);font-size:9px}
.alpl-table-scroll{overflow-x:auto;border:1px solid var(--alpl-line);border-radius:17px;background:rgba(3,14,27,.4)}
.alpl-leader-table{width:100%;min-width:650px;border-collapse:collapse;font-size:11px}
.alpl-leader-table th{padding:11px 13px;text-align:left;color:#8fa8be;background:rgba(255,255,255,.035);font-size:9px;text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}
.alpl-leader-table td{padding:11px 13px;border-top:1px solid rgba(255,255,255,.055);color:#bdd0e1;vertical-align:middle}
.alpl-leader-table td:first-child{width:70px;color:#fff}
.alpl-leader-table td:nth-child(2){display:flex;align-items:center;gap:9px;min-width:220px;color:#fff}
.alpl-leader-table tr.is-me td{background:rgba(54,169,255,.075)}
.alpl-leader-table em{font-style:normal;font-size:8px;border-radius:999px;padding:3px 6px;background:rgba(54,169,255,.16);color:#9edcff;font-weight:900}
.alpl-table-avatar{width:31px;height:31px;flex:0 0 31px;border-radius:10px;font-size:9px}
.alpl-summary-actions{display:flex;align-items:center;justify-content:center;gap:9px;flex-wrap:wrap}
.alpl-summary-board{height:48px;padding:0 18px;border:1px solid rgba(125,211,252,.18);border-radius:13px;background:rgba(255,255,255,.055);color:#eaf6ff;font-weight:900;cursor:pointer}

/* Keep the main instrument responsive without a page-level horizontal scrollbar. */
.alpl-instrument-wrap{overflow:hidden}
.alpl-caliper{min-width:0}

@media (max-width:700px){
  .alpl-game-nav{padding:9px 12px}.alpl-game-nav button{min-height:41px;padding:7px 11px;font-size:11px}
  .alpl-roadmap-wrap,.alpl-leader-wrap{padding:17px 13px 20px}.alpl-section-head{flex-direction:column}.alpl-road-summary{width:100%;text-align:left;display:grid;grid-template-columns:1fr auto;align-items:center}.alpl-road-summary small{grid-column:1/-1}.alpl-road-summary strong{font-size:24px}
  .alpl-road-card{grid-template-columns:54px minmax(0,1fr);gap:10px}.alpl-road-node{width:54px;height:54px;border-radius:17px;font-size:22px}.alpl-road-list:before{left:26px;top:28px;bottom:28px}.alpl-road-content{padding:13px 13px}.alpl-road-content h4{font-size:15px}.alpl-road-meta{align-items:flex-start}.alpl-road-meta b{white-space:nowrap}
  .alpl-podium{grid-template-columns:1fr}.alpl-podium-card{display:grid;grid-template-columns:48px 1fr auto;grid-template-rows:auto auto;gap:2px 10px;text-align:left;align-items:center;padding:12px}.alpl-avatar{grid-row:1/3;width:44px;height:44px;margin:0;border-radius:13px}.alpl-podium-card strong{align-self:end}.alpl-podium-card span{align-self:start;margin:0}.alpl-podium-card small{grid-column:3;grid-row:1/3;align-self:center}.alpl-medal{position:static;grid-column:3;grid-row:1;justify-self:end}.alpl-my-rank{grid-template-columns:1fr}.alpl-login-prompt{align-items:flex-start;flex-direction:column}.alpl-leader-table{min-width:600px}
}

@media (max-width:420px){
  .alpl-game-nav button{padding:7px 9px}.alpl-game-nav button span{font-size:14px}.alpl-road-content p{font-size:11px}.alpl-road-meta{flex-direction:column;gap:4px}.alpl-road-meta b{align-self:flex-start}.alpl-podium-card small{display:none}.alpl-summary-actions>*{width:100%}
}

/* v1.2 — separate shortcode components */
.alpl-component-game .alpl-shell,
.alpl-component-roadmap .alpl-shell,
.alpl-component-leaderboard .alpl-shell{width:100%}

.alpl-back-roadmap{min-height:40px;border:1px solid rgba(125,211,252,.20);border-radius:999px;padding:8px 13px;background:rgba(54,169,255,.08);color:#dff4ff;font-weight:850;font-size:12px;cursor:pointer;transition:background .18s,border-color .18s,transform .18s}
.alpl-back-roadmap:hover{background:rgba(54,169,255,.15);border-color:rgba(125,211,252,.34);transform:translateY(-1px)}
.alpl-back-roadmap:focus-visible{outline:3px solid rgba(125,211,252,.38);outline-offset:2px}

.alpl-roadmap-shell .alpl-roadmap-wrap{padding-top:28px}
.alpl-standalone-shell .alpl-leader-wrap{padding-top:28px}
.alpl-component-leaderboard .alpl-section-head{padding-bottom:2px}
.alpl-component-leaderboard .alpl-podium{margin-top:4px}
.alpl-component-leaderboard .alpl-podium-card.rank-1{transform:translateY(-4px)}
.alpl-component-leaderboard .alpl-table-scroll{box-shadow:inset 0 1px rgba(255,255,255,.03)}

.alpl-road-play{min-height:43px;padding:9px 16px;font-size:12px;box-shadow:0 9px 22px rgba(54,169,255,.15);transition:transform .16s,filter .16s,box-shadow .16s}
.alpl-road-play:hover{transform:translateY(-1px);filter:brightness(1.04);box-shadow:0 12px 26px rgba(54,169,255,.20)}

.alpl-game-shell .alpl-main{animation:alplPanelIn .22s ease-out}
@keyframes alplPanelIn{from{opacity:.45;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}

@media (max-width:650px){
  .alpl-back-roadmap{order:-1;width:100%;justify-content:center;border-radius:12px;text-align:center}
  .alpl-component-roadmap .alpl-actions{width:100%}
  .alpl-component-roadmap .alpl-actions .alpl-pill{flex:1;text-align:center}
  .alpl-component-leaderboard .alpl-topbar{padding-bottom:14px}
  .alpl-component-leaderboard .alpl-actions{width:100%}
  .alpl-component-leaderboard .alpl-lang{margin-left:0}
  .alpl-component-leaderboard .alpl-podium-card.rank-1{transform:none}
}


/* v1.3 — Micrometer Screw Gauge simulator */
.alpl-micrometer{display:block;width:100%;height:auto;min-width:0;touch-action:none;user-select:none}
.alpl-micrometer .scale-text{font-size:11px;fill:#243241;font-weight:800}
.alpl-micrometer [data-drag]{cursor:ew-resize}
.alpl-micrometer [data-drag]:active{cursor:grabbing}
.alpl-component-roadmap .alpl-road-card.is-active:nth-child(2) .alpl-road-node{border-color:rgba(125,211,252,.42);box-shadow:0 0 0 5px rgba(125,211,252,.055),0 10px 26px rgba(0,0,0,.18)}
@media (max-width:650px){.alpl-micrometer{min-width:0}.alpl-mini-controls button{min-width:48px;padding:0 8px;font-size:11px}}

/* v1.4 — exact-contact geometry + first-visit animated guides */
.alpl-stage-tools{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;flex:0 0 auto}
.alpl-guide-open{min-height:40px;border:1px solid rgba(125,211,252,.22);border-radius:12px;padding:7px 11px;background:rgba(54,169,255,.08);color:#dff5ff;font-size:11px;font-weight:850;cursor:pointer;transition:.18s}
.alpl-guide-open:hover{background:rgba(54,169,255,.15);border-color:rgba(125,211,252,.36)}
.alpl-guide-open:focus-visible,.alpl-guide-skip:focus-visible,.alpl-guide-actions button:focus-visible{outline:3px solid rgba(125,211,252,.38);outline-offset:2px}
.alpl-caliper,.alpl-micrometer{overflow:visible}
.alpl-svg-label text{fill:#dff1ff;font-size:14px;font-weight:850;paint-order:stroke;stroke:#061424;stroke-width:4px;stroke-linejoin:round}
.alpl-svg-label path{fill:none;stroke:#7dd3fc;stroke-width:2;stroke-linecap:round}
.alpl-measured-object{filter:drop-shadow(0 8px 12px rgba(0,0,0,.34))}
.alpl-caliper .glow-contact,.alpl-micrometer .glow-contact,.alpl-spherometer .glow-contact{filter:drop-shadow(0 0 10px rgba(52,211,153,.62))}

.alpl-guide-overlay{position:absolute;inset:0;z-index:30;display:flex;align-items:flex-start;justify-content:center;padding:76px 18px 28px;background:rgba(2,10,20,.82);backdrop-filter:blur(9px);overflow:auto}
.alpl-guide-card{width:min(820px,100%);border:1px solid rgba(125,211,252,.24);border-radius:24px;background:linear-gradient(160deg,#0c2743 0%,#07192c 70%);box-shadow:0 24px 70px rgba(0,0,0,.42);padding:20px;animation:alplGuideIn .24s ease-out}
.alpl-guide-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}
.alpl-guide-head span{display:block;color:#7dd3fc;font-size:10px;font-weight:900;letter-spacing:.1em;text-transform:uppercase}
.alpl-guide-head h3{margin:4px 0 0;color:#fff;font-size:clamp(20px,3vw,29px);line-height:1.25}
.alpl-guide-skip{flex:0 0 auto;min-height:39px;border:1px solid rgba(255,255,255,.12);border-radius:11px;padding:7px 11px;background:rgba(255,255,255,.05);color:#c9d9e7;font-size:11px;font-weight:800;cursor:pointer}
.alpl-guide-visual{min-height:245px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.08);border-radius:18px;background:radial-gradient(circle at 50% 20%,rgba(54,169,255,.10),transparent 45%),rgba(2,12,24,.62);overflow:hidden;padding:10px}
.alpl-guide-visual svg{display:block;width:100%;max-height:270px;height:auto}
.alpl-guide-visual svg text{fill:#d8ebf8;font-size:14px;font-weight:800}
.alpl-guide-visual svg line,.alpl-guide-visual svg path{vector-effect:non-scaling-stroke}
.alpl-guide-visual .g-metal{fill:#aebdca;stroke:#edf4f8;stroke-width:1.5}
.alpl-guide-visual .g-dark{fill:#3e5365;stroke:#8ea2b4;stroke-width:1.5}
.alpl-guide-visual .g-object{fill:#3bb6f6;stroke:#9adeff;stroke-width:2;filter:drop-shadow(0 8px 12px rgba(0,0,0,.3))}
.alpl-guide-visual .g-scale{stroke:#dfeaf2;stroke-width:2;fill:none}
.alpl-guide-visual .g-reference{stroke:#36a9ff;stroke-width:3;fill:none}
.alpl-guide-visual .g-match{stroke:#34d399;stroke-width:4;filter:drop-shadow(0 0 4px rgba(52,211,153,.7))}
.alpl-guide-visual .g-highlight{fill:#a7f3d0;font-size:16px;font-weight:950}
.alpl-guide-visual .g-motion{fill:none;stroke:#7dd3fc;stroke-width:2.5;stroke-dasharray:7 7;animation:alplDash 1.1s linear infinite}
.alpl-guide-text{margin:14px 2px 0;color:#c6d9e8;font-size:14px;line-height:1.7}
.alpl-guide-formula{margin-top:12px;padding:13px 15px;border:1px solid rgba(52,211,153,.22);border-radius:14px;background:rgba(52,211,153,.07);color:#dffcf0;text-align:center;font-size:clamp(16px,2.5vw,22px);font-weight:800}
.alpl-guide-formula b{color:#86efac}
.alpl-guide-dots{display:flex;align-items:center;justify-content:center;gap:7px;margin:16px 0 13px}
.alpl-guide-dots i{width:8px;height:8px;border-radius:999px;background:rgba(255,255,255,.14);transition:.2s}
.alpl-guide-dots i.is-done{background:rgba(52,211,153,.55)}
.alpl-guide-dots i.is-active{width:25px;background:#36a9ff;box-shadow:0 0 14px rgba(54,169,255,.35)}
.alpl-guide-actions{display:flex;align-items:center;justify-content:space-between;gap:14px;padding-top:13px;border-top:1px solid rgba(255,255,255,.07)}
.alpl-guide-actions>span{color:#829bb0;font-size:10px}
.alpl-guide-actions>div{display:flex;gap:8px;flex:0 0 auto}
.alpl-guide-actions button{min-height:42px;border:1px solid rgba(255,255,255,.12);border-radius:11px;padding:8px 14px;background:rgba(255,255,255,.06);color:#e5f3fc;font-size:11px;font-weight:900;cursor:pointer}
.alpl-guide-actions .alpl-guide-next{border-color:rgba(54,169,255,.34);background:linear-gradient(135deg,#36a9ff,#78d2ff);color:#03111f}
.alpl-guide-calc{display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap;padding:28px 18px;color:#eaf7ff;font-size:clamp(18px,3vw,29px);font-weight:800}
.alpl-guide-calc span{padding:12px 15px;border:1px solid rgba(255,255,255,.11);border-radius:13px;background:rgba(255,255,255,.055)}
.alpl-guide-calc b{color:#7dd3fc;font-size:30px}
.alpl-guide-calc strong{padding:13px 18px;border-radius:14px;background:rgba(52,211,153,.12);border:1px solid rgba(52,211,153,.26);color:#a7f3d0}
.guide-v-jaw{transform-box:view-box;transform-origin:0 0;animation:alplGuideJaw 2.8s ease-in-out infinite alternate}
.guide-m-spindle{transform-box:view-box;transform-origin:0 0;animation:alplGuideSpindle 2.8s ease-in-out infinite alternate}
@keyframes alplGuideIn{from{opacity:.2;transform:translateY(8px) scale(.99)}to{opacity:1;transform:none}}
@keyframes alplGuideJaw{0%,18%{transform:translateX(500px)}78%,100%{transform:translateX(344px)}}
@keyframes alplGuideSpindle{0%,18%{transform:translateX(430px)}78%,100%{transform:translateX(284px)}}
@keyframes alplDash{to{stroke-dashoffset:-28}}

@media (max-width:780px){
 .alpl-stage-head{flex-direction:column}.alpl-stage-tools{width:100%;justify-content:space-between}.alpl-guide-open{flex:1}.alpl-mode{flex:0 0 auto}
 .alpl-guide-overlay{padding:58px 10px 18px}.alpl-guide-card{padding:14px;border-radius:18px}.alpl-guide-visual{min-height:190px}.alpl-guide-head{gap:8px}.alpl-guide-head h3{font-size:20px}.alpl-guide-text{font-size:13px}.alpl-guide-actions{align-items:flex-start;flex-direction:column}.alpl-guide-actions>div{width:100%}.alpl-guide-actions button{flex:1}
 .alpl-svg-label text{font-size:12px}
}
@media (max-width:480px){
 .alpl-stage-tools{align-items:stretch;flex-direction:column}.alpl-mode{width:100%}.alpl-mode button{flex:1}.alpl-guide-open{width:100%}
 .alpl-guide-head{flex-direction:column}.alpl-guide-skip{align-self:flex-end;margin-top:-40px}.alpl-guide-visual{min-height:160px;padding:5px}.alpl-guide-actions>span{display:none}.alpl-guide-calc{gap:8px;padding:18px 5px;font-size:16px}.alpl-guide-calc b{font-size:22px}.alpl-guide-calc span,.alpl-guide-calc strong{padding:8px 10px}
}
@media (prefers-reduced-motion:reduce){
 .alpl-guide-card,.guide-v-jaw,.guide-m-spindle,.alpl-guide-visual .g-motion{animation:none!important}.guide-v-jaw{transform:translateX(344px)}.guide-m-spindle{transform:translateX(284px)}
}
.alpl-measured-object.is-contact{filter:drop-shadow(0 0 9px rgba(52,211,153,.72)) drop-shadow(0 8px 12px rgba(0,0,0,.30))}

/* v1.4.2 — clearer Vernier match indicators */
.alpl-v-small .v-small-line{stroke:#dce6ef;stroke-width:1.5}
.alpl-v-small .v-small-line.match{stroke:var(--alpl-good);stroke-width:3;filter:drop-shadow(0 0 4px rgba(52,211,153,.7))}
.alpl-v-small .v-small-label{fill:#9db1c2;font-size:9px}
.alpl-zoom .match-text{fill:var(--alpl-good);font-weight:700}
.alpl-zoom .match-arrow{fill:var(--alpl-good);filter:drop-shadow(0 0 4px rgba(52,211,153,.7))}
.alpl-zoom .match-pill{fill:rgba(52,211,153,.16);stroke:rgba(52,211,153,.65);stroke-width:1}
.alpl-zoom .match-pill-text{fill:#baf7d8;font-size:11px;font-weight:700}

/* v1.4.3 — Vernier scale readability + practice-mode coincidence assist */
.alpl-v-small .v-small-line{stroke:#dce6ef;stroke-width:1.35}
.alpl-v-small .v-small-line.match{stroke:var(--alpl-good);stroke-width:3.2;filter:drop-shadow(0 0 5px rgba(52,211,153,.9))}
.alpl-v-small .v-small-label{fill:#13202b;font-size:7px;font-weight:800;paint-order:stroke;stroke:#f4f8fb;stroke-width:1.6px;stroke-linejoin:round}
.alpl-v-small .v-small-label.match-label{fill:#10b981;stroke:#eafff6;stroke-width:1.8px;font-size:8px}
.alpl-zoom .vernier-number{fill:#e7f0f7;font-size:14px;font-weight:800}
.alpl-zoom .main-number{font-size:13px;font-weight:700}
.alpl-zoom .match-text{fill:#34d399;font-size:16px;font-weight:900;filter:drop-shadow(0 0 4px rgba(52,211,153,.8))}
.alpl-zoom .match-arrow{fill:#34d399;filter:drop-shadow(0 0 5px rgba(52,211,153,.8))}
.alpl-zoom .match-pill{fill:rgba(16,185,129,.18);stroke:#34d399;stroke-width:1.5}
.alpl-zoom .match-pill-text{fill:#c9ffe7;font-size:12px;font-weight:900}
.alpl-zoom .v-assist rect{fill:rgba(16,185,129,.14);stroke:rgba(52,211,153,.72);stroke-width:1}
.alpl-zoom .v-assist text{fill:#bfffe0;font-size:12px;font-weight:800}

/* v1.5.0 — Mission 03: ගෝලමානය */
.alpl-formula-chip{margin-top:10px;padding:10px 12px;border-radius:12px;border:1px solid rgba(125,211,252,.16);background:rgba(54,169,255,.055);display:flex;align-items:center;justify-content:space-between;gap:10px}
.alpl-formula-chip span{color:var(--alpl-muted);font-size:11px}.alpl-formula-chip strong{color:#dff4ff;font-size:13px}
.alpl-spherometer{width:100%;height:auto;display:block}.alpl-spherometer [data-drag]{touch-action:none}
.guide-sph-screw{transform-box:view-box;transform-origin:center;animation:alplGuideSph 2.8s ease-in-out infinite alternate}
@keyframes alplGuideSph{0%,18%{transform:translateY(-34px)}78%,100%{transform:translateY(8px)}}
@media (prefers-reduced-motion:reduce){.guide-sph-screw{animation:none!important;transform:translateY(8px)}}

.alpl-zero-note{margin-top:8px;color:#8eacc0;font-size:10px;line-height:1.5}


/* v1.6.0 — Mission 04: සරල අවලම්බය */
.alpl-pendulum{width:100%;height:auto;display:block;min-width:620px;touch-action:none;user-select:none}
.alpl-pend-workbench .alpl-instrument-wrap{overflow-x:auto}
.alpl-pendulum .pend-string{stroke:#dbe9f4;stroke-width:2.4;stroke-linecap:round;filter:drop-shadow(0 1px 2px rgba(0,0,0,.5))}
.alpl-pendulum .pend-bob{cursor:ns-resize;filter:drop-shadow(0 10px 14px rgba(0,0,0,.34))}
.alpl-pendulum .pend-equilibrium{stroke:rgba(125,211,252,.25);stroke-width:1.5;stroke-dasharray:6 7}
.alpl-pendulum .pend-angle-arc{fill:none;stroke:#34d399;stroke-width:2;stroke-dasharray:4 4}
.alpl-pendulum .pend-angle-label{fill:#a7f3d0;font-size:12px;font-weight:800}
.alpl-pendulum .pend-ruler-axis,.alpl-pendulum .pend-ruler-line{stroke:#91a9bd;stroke-width:1.4}
.alpl-pendulum .pend-ruler-text{fill:#9fb5c8;font-size:10px}
.alpl-pendulum .pend-target-mark{stroke:#34d399;stroke-width:3;filter:drop-shadow(0 0 4px rgba(52,211,153,.6))}
.alpl-pendulum .pend-target-text{fill:#a7f3d0;font-size:11px;font-weight:900}
.alpl-pend-settings{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:8px;padding:12px;border-radius:14px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.035)}
.alpl-pend-settings label{display:grid;grid-template-columns:1fr auto;gap:6px 10px;align-items:center;color:#dce8f3;font-size:12px;font-weight:800}
.alpl-pend-settings label strong{color:#7dd3fc;font-size:13px}
.alpl-pend-settings input[type=range]{grid-column:1/-1;width:100%;accent-color:#36a9ff;cursor:pointer}
.alpl-pend-actions{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin-top:11px}
.alpl-pend-actions button{min-height:44px;border-radius:12px;border:1px solid rgba(255,255,255,.12);padding:0 16px;font-weight:900;cursor:pointer}
.alpl-pend-start{background:linear-gradient(135deg,#36a9ff,#78d2ff);color:#03111f;border:0!important;min-width:190px}
.alpl-pend-start:disabled{opacity:.42;cursor:not-allowed;filter:grayscale(.2)}
.alpl-pend-readout{overflow:hidden}
.alpl-pend-digits{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.alpl-pend-digits>div{padding:14px 10px;border-radius:14px;border:1px solid rgba(255,255,255,.08);background:#06182a;text-align:center}
.alpl-pend-digits span{display:block;color:#94aabd;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.06em}
.alpl-pend-digits strong{display:block;margin-top:3px;color:#fff;font-size:clamp(18px,3vw,27px);font-variant-numeric:tabular-nums}
.alpl-pend-formulas{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;margin-top:11px}
.alpl-pend-formulas span{padding:7px 11px;border-radius:999px;background:rgba(54,169,255,.08);border:1px solid rgba(54,169,255,.17);color:#dff2ff;font-size:12px;font-weight:850}
.alpl-pend-formulas small{width:100%;text-align:center;color:#7895aa;font-size:10px}
.guide-pend-swing{transform-box:view-box;transform-origin:380px 30px;animation:alplPendGuideSwing 1.7s ease-in-out infinite alternate}
@keyframes alplPendGuideSwing{from{transform:rotate(-8deg)}to{transform:rotate(8deg)}}
@media (max-width:650px){.alpl-pendulum{min-width:560px}.alpl-pend-settings{grid-template-columns:1fr}.alpl-pend-digits{grid-template-columns:1fr 1fr}.alpl-pend-digits>div:last-child{grid-column:1/-1}}
@media (prefers-reduced-motion:reduce){.guide-pend-swing{animation:none!important}}

/* v1.7 — Mission 05: Forces & Moments */
.alpl-moment-svg{width:100%;height:auto;display:block;min-width:680px;touch-action:none;user-select:none}
.alpl-moment-workbench .alpl-instrument-wrap{overflow-x:auto}
.alpl-moment-svg .moment-centre-line{stroke:rgba(125,211,252,.16);stroke-width:1.5;stroke-dasharray:7 8}
.alpl-moment-svg .moment-tick{stroke:#4b351b;stroke-width:1.15}
.alpl-moment-svg .moment-scale-text{fill:#2d2115;font-size:10px;font-weight:800}
.alpl-moment-svg .moment-pivot-mark{stroke:#0b1825;stroke-width:3}
.alpl-moment-svg .moment-rule-label{fill:#f4eadb;font-size:10px;font-weight:900}
.alpl-moment-svg .moment-pivot{fill:#8fa2b2;stroke:#dce7ef;stroke-width:2;filter:drop-shadow(0 8px 9px rgba(0,0,0,.28))}
.alpl-moment-svg .moment-base{fill:#405365;stroke:#94a9ba;stroke-width:1.5}
.alpl-moment-svg .moment-hook{fill:#e9f4fb;stroke:#7dd3fc;stroke-width:2}
.alpl-moment-svg .moment-string{stroke:#d7e5ef;stroke-width:2.2;stroke-linecap:round}
.alpl-moment-svg .moment-mass-text{fill:#fff;font-size:13px;font-weight:900;pointer-events:none}
.alpl-moment-svg .moment-draggable{cursor:ew-resize;filter:drop-shadow(0 8px 9px rgba(0,0,0,.27))}
.alpl-moment-svg .moment-distance{fill:none;stroke:#6ea7c6;stroke-width:1.6;stroke-dasharray:6 5}
.alpl-moment-svg .moment-distance.is-balanced{stroke:#34d399;stroke-width:2.5;filter:drop-shadow(0 0 4px rgba(52,211,153,.55))}
.alpl-moment-svg .moment-distance-text{fill:#bcd2e1;font-size:11px;font-weight:850}
.alpl-moment-svg .moment-status-label{fill:#8ea8bb;font-size:11px;font-weight:800}
.alpl-moment-svg .moment-status-label.is-balanced{fill:#a7f3d0;font-size:13px;font-weight:950}
.alpl-moment-digits{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.alpl-moment-digits>div{padding:14px 10px;border-radius:14px;border:1px solid rgba(255,255,255,.08);background:#06182a;text-align:center}
.alpl-moment-digits span{display:block;color:#94aabd;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.04em}
.alpl-moment-digits strong{display:block;margin-top:4px;color:#fff;font-size:clamp(17px,2.8vw,24px);font-variant-numeric:tabular-nums}
.alpl-moment-formula-strip{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin-top:11px}
.alpl-moment-formula-strip span{padding:7px 12px;border-radius:999px;background:rgba(54,169,255,.08);border:1px solid rgba(54,169,255,.17);color:#dff2ff;font-size:12px;font-weight:850}
.alpl-guide-visual .g-wood{fill:#c58b3d;stroke:#f1cf91;stroke-width:2}
.guide-moment-balance{transform-box:view-box;transform-origin:380px 135px;animation:alplMomentGuide 1.7s ease-in-out infinite alternate}
@keyframes alplMomentGuide{0%{transform:rotate(-5deg)}100%{transform:rotate(5deg)}}
@media (max-width:650px){.alpl-moment-svg{min-width:620px}.alpl-moment-digits{grid-template-columns:1fr 1fr}.alpl-moment-digits>div:last-child{grid-column:1/-1}}
@media (prefers-reduced-motion:reduce){.guide-moment-balance{animation:none!important}}

/* v1.7.2 — Mission 05 gravity assumption */
.alpl-moment-g-note{margin-top:10px;font-weight:700;text-align:center}

/* v1.8.0 — Mission 06: Electric Circuit Practical */
.alpl-elec-workbench .alpl-instrument-wrap{overflow-x:auto}
.alpl-electric-svg{width:100%;height:auto;display:block;min-width:680px;user-select:none}
.alpl-elec-toolbar{display:flex;justify-content:center;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:9px}
.alpl-meter-pick{min-height:48px;border:1px solid rgba(125,211,252,.2);border-radius:13px;padding:6px 13px;background:rgba(54,169,255,.06);color:#dff3ff;display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:850}
.alpl-meter-pick b{width:31px;height:31px;border-radius:50%;display:grid;place-items:center;background:#06182a;border:2px solid #7dd3fc;color:#fff;font-size:17px}
.alpl-meter-pick span{font-size:11px}.alpl-meter-pick.is-selected{border-color:#34d399;background:rgba(52,211,153,.12);box-shadow:0 0 0 3px rgba(52,211,153,.06)}
.alpl-elec-help{text-align:center;color:#88a4b8;font-size:10px;margin-bottom:5px}
.alpl-electric-svg .elec-wire{fill:none;stroke:#9fb3c2;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;transition:.2s}
.alpl-electric-svg .elec-wire.is-live{stroke:#53c8ff;filter:drop-shadow(0 0 5px rgba(83,200,255,.5))}
.alpl-electric-svg .elec-parallel{stroke-width:4}.alpl-electric-svg .elec-node{fill:#dce8f1;stroke:#7dd3fc;stroke-width:2}
.alpl-electric-svg .elec-switch-blade{stroke:#e6edf2;stroke-width:6;stroke-linecap:round}.alpl-electric-svg .elec-switch-blade.is-closed{stroke:#34d399}
.alpl-electric-svg .elec-component{fill:none;stroke:#f0c879;stroke-width:5;stroke-linecap:round;stroke-linejoin:round}
.alpl-electric-svg .elec-rheo-arrow{fill:none;stroke:#7dd3fc;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.alpl-electric-svg .elec-battery-long,.alpl-electric-svg .elec-battery-short{stroke:#e8f2f8;stroke-width:6;stroke-linecap:round}
.alpl-electric-svg .elec-label{fill:#dcebf6;font-size:13px;font-weight:850}.alpl-electric-svg .elec-value{fill:#8edcff;font-size:12px;font-weight:900}
.alpl-electric-svg .elec-slot circle{fill:#071b2e;stroke:#6e8799;stroke-width:3;cursor:pointer;transition:.18s}.alpl-electric-svg .elec-slot text{fill:#a9bfd0;font-size:28px;font-weight:950;pointer-events:none}
.alpl-electric-svg .elec-slot:hover circle{stroke:#7dd3fc}.alpl-electric-svg .elec-slot.is-filled circle{fill:#0b2943;stroke:#7dd3fc}.alpl-electric-svg .elec-slot.is-filled text{fill:#fff}.alpl-electric-svg .elec-slot.is-correct circle{stroke:#34d399;filter:drop-shadow(0 0 7px rgba(52,211,153,.55))}.alpl-electric-svg .elec-slot-label{fill:#89a5b9;font-size:10px;font-weight:800}
.alpl-electric-svg .elec-target-rheo line{stroke:#55768d;stroke-width:3}.alpl-electric-svg .elec-target-rheo circle{fill:#7dd3fc;stroke:#dff7ff;stroke-width:2}.alpl-electric-svg .elec-target-rheo path{stroke:#34d399;stroke-width:4;filter:drop-shadow(0 0 4px rgba(52,211,153,.65))}.alpl-electric-svg .elec-target-rheo text{fill:#a7f3d0;font-size:10px;font-weight:850}
.alpl-elec-controls{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;margin-top:8px;padding:11px;border:1px solid rgba(255,255,255,.07);border-radius:14px;background:rgba(255,255,255,.03)}
.alpl-elec-switch{min-height:44px;border:1px solid rgba(52,211,153,.24);border-radius:12px;padding:0 17px;background:rgba(52,211,153,.08);color:#d9fff0;font-weight:900;cursor:pointer}.alpl-elec-switch.is-on{background:linear-gradient(135deg,#34d399,#86efac);color:#04160f}
.alpl-elec-controls label{min-width:min(360px,100%);display:grid;grid-template-columns:1fr auto;gap:5px 10px;align-items:center;color:#dbe9f2;font-size:11px;font-weight:850}.alpl-elec-controls label strong{color:#7dd3fc}.alpl-elec-controls input[type=range]{grid-column:1/-1;width:100%;accent-color:#36a9ff}
.alpl-elec-info{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-bottom:10px}.alpl-elec-info>div{padding:10px;border:1px solid rgba(255,255,255,.08);border-radius:12px;background:#06182a;text-align:center}.alpl-elec-info span{display:block;color:#91a9bc;font-size:9px;font-weight:800}.alpl-elec-info strong{display:block;color:#fff;margin-top:3px;font-size:16px}
.alpl-elec-meter-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.alpl-elec-meter-grid>div{border:1px solid rgba(255,255,255,.08);border-radius:14px;background:linear-gradient(180deg,#081e33,#061522);padding:8px;text-align:center}.alpl-elec-meter-grid>div>span{color:#9ab1c3;font-size:10px;font-weight:850}.alpl-elec-meter-grid svg{display:block;width:100%;height:auto;margin-top:-6px}
.alpl-elec-meter-grid .elec-dial-arc{fill:none;stroke:#304b60;stroke-width:5}.alpl-elec-meter-grid .elec-dial-tick{stroke:#b8cbd9;stroke-width:1.4}.alpl-elec-meter-grid .elec-dial-tick.major{stroke:#eef6fb;stroke-width:2.2}.alpl-elec-meter-grid .elec-dial-num{fill:#bdcfdb;font-size:10px;font-weight:800}.alpl-elec-meter-grid .elec-dial-needle{stroke:#ff6b6b;stroke-width:3;stroke-linecap:round;filter:drop-shadow(0 0 3px rgba(255,107,107,.5))}.alpl-elec-meter-grid .elec-dial-hub{fill:#e4edf4;stroke:#60798b;stroke-width:3}.alpl-elec-meter-grid .elec-dial-unit{fill:#dff3ff;font-size:19px;font-weight:950}
@media (max-width:650px){.alpl-electric-svg{min-width:620px}.alpl-elec-info{grid-template-columns:1fr 1fr}.alpl-elec-info>div:last-child{grid-column:1/-1}.alpl-elec-meter-grid{grid-template-columns:1fr}.alpl-meter-pick span{display:none}}


/* v1.9.0 — Mission 06 Optics Lab Part 1 */
.alpl-optics-workbench{background:radial-gradient(circle at 52% 46%,rgba(38,97,135,.18),transparent 38%),rgba(2,13,25,.72)}
.alpl-optics-svg{width:100%;min-width:650px;height:auto;display:block}
.alpl-optics-controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:12px 0}
.alpl-optics-controls>div{padding:12px;border:1px solid var(--alpl-line);border-radius:14px;background:rgba(12,34,54,.58)}
.alpl-optics-controls>div>span{display:block;font-size:12px;color:var(--alpl-muted);margin-bottom:8px}
.alpl-optics-readout{overflow:hidden}
.alpl-optics-view-grid{display:grid;grid-template-columns:minmax(260px,1.1fr) minmax(210px,.9fr);gap:18px;align-items:center}
.alpl-optics-view-grid svg{width:100%;height:auto;display:block}
.alpl-optics-values{display:grid;gap:10px}
.alpl-optics-values>div{padding:12px 14px;border:1px solid var(--alpl-line);border-radius:12px;background:rgba(7,24,40,.72)}
.alpl-optics-values span{display:block;color:var(--alpl-muted);font-size:11px;margin-bottom:4px}.alpl-optics-values strong{font-size:18px}
.alpl-optics-formula{margin-top:12px;padding:10px 12px;border-radius:10px;text-align:center;border:1px solid rgba(76,189,255,.2);background:rgba(33,119,168,.12);font-weight:700}
.opt-ring{fill:none;stroke:#60778a;stroke-width:4}.opt-table{fill:#0d2335;stroke:#8fa7ba;stroke-width:3}.opt-prism{stroke:#a6ebff;stroke-width:3}.opt-device{stroke:#8ba0b2;stroke-width:2}.opt-device-label{fill:#e7f2fa;font-size:15px;font-weight:700}.opt-ray-in{stroke:#e7edf4;stroke-width:3}.opt-ray-out{stroke:#ffd94d;stroke-width:5;filter:drop-shadow(0 0 6px rgba(255,217,77,.55))}.opt-sodium-ray{stroke:#ffd94d;stroke-width:4;filter:drop-shadow(0 0 5px rgba(255,217,77,.5))}.opt-sodium-label{fill:#ffd94d;font-size:13px;font-weight:700}.opt-lens{fill:#123f5d;stroke:#9fe7ff;stroke-width:3}.opt-telescope-pointer{stroke:#6bc6f1;stroke-width:2;stroke-dasharray:6 6}.opt-centre{fill:#dff5ff;stroke:#67cfff;stroke-width:3}.opt-scale-tick{stroke:#73899a;stroke-width:1.4}.opt-scale-num{fill:#8ea5b8;font-size:11px}.opt-scope-circle{stroke:#7793a8;stroke-width:3}.opt-crosshair{stroke:#9db6c9;stroke-width:1.3;opacity:.8}.opt-cross-centre{fill:none;stroke:#d6e9f5;stroke-width:1.5}.opt-sodium-slit{fill:#ffd94d;filter:drop-shadow(0 0 7px rgba(255,217,77,.8))}.opt-sodium-slit.is-centred{fill:#52e6a0;filter:drop-shadow(0 0 8px rgba(82,230,160,.9))}.opt-turning-text{fill:#52e6a0;font-size:12px;font-weight:800;letter-spacing:1.2px}
@media(max-width:720px){.alpl-optics-controls{grid-template-columns:1fr}.alpl-optics-view-grid{grid-template-columns:1fr}.alpl-optics-svg{min-width:560px}}


/* v1.9.1 — Optics prism-side image tracking */
.opt-prism-group{transform-origin:500px 245px}
.opt-image-path{fill:none;stroke:rgba(255,217,77,.42);stroke-width:4;stroke-dasharray:7 7;filter:drop-shadow(0 0 4px rgba(255,217,77,.3))}
.opt-image-path-label{fill:#c8d8e5;font-size:11px;font-weight:650}
.opt-minimum-point{fill:#ffd94d;stroke:#fff3a8;stroke-width:2;opacity:.65}
.opt-minimum-point.is-active{fill:#52e6a0;stroke:#c8ffe3;opacity:1;filter:drop-shadow(0 0 8px rgba(82,230,160,.95))}
.opt-prism-image{pointer-events:none}
.opt-image-halo{animation:alplOptImagePulse 1.05s ease-out both}
.opt-image-slit{fill:#ffd94d;stroke:#fff6b7;stroke-width:1.5;filter:drop-shadow(0 0 8px rgba(255,217,77,.95))}
.opt-image-ring{fill:none;stroke:#ffe973;stroke-width:2;opacity:.9;filter:drop-shadow(0 0 5px rgba(255,217,77,.8))}
.opt-image-label{fill:#ffe973;font-size:12px;font-weight:800;paint-order:stroke;stroke:#071a2d;stroke-width:3px;stroke-linejoin:round}
.opt-prism-image.is-minimum .opt-image-slit{fill:#52e6a0;stroke:#c7ffe2;filter:drop-shadow(0 0 10px rgba(82,230,160,1))}
.opt-prism-image.is-minimum .opt-image-ring{stroke:#52e6a0;stroke-width:3;filter:drop-shadow(0 0 8px rgba(82,230,160,.95))}
.opt-prism-image.is-minimum .opt-image-label{fill:#84f3ba}
@keyframes alplOptImagePulse{0%{opacity:.25}45%{opacity:1}100%{opacity:.55}}
@media (prefers-reduced-motion:reduce){.opt-image-halo{animation:none;opacity:.55}}
.alpl-guide-visual .guide-opt-image circle{fill:rgba(255,217,77,.18);stroke:#ffd94d;stroke-width:3;filter:drop-shadow(0 0 6px rgba(255,217,77,.8))}
.alpl-guide-visual .guide-opt-image rect{fill:#ffd94d;filter:drop-shadow(0 0 7px rgba(255,217,77,.95))}

/* v1.9.2 — optics prism/table rotate in place around a fixed centre */
.opt-table-rotor{transform-box:fill-box;transform-origin:center;will-change:transform}
.opt-table-index{stroke:#7fd8ff;stroke-width:4;stroke-linecap:round;opacity:.95;filter:drop-shadow(0 0 4px rgba(127,216,255,.45))}
