.nisi-jmlock{position:relative;display:grid;gap:var(--space-4);align-items:center;margin:var(--space-3) 0}.nisi-jmlock__toggle{position:absolute;top:0;left:0;width:1px;height:1px;margin:0;opacity:0;pointer-events:none}.nisi-jmlock__stage{position:relative;width:min(100%,240px)}.nisi-jmlock__stage svg{display:block;width:100%;height:auto}.nisi-jmlock__ring{fill:var(--ink)}.nisi-jmlock__knurl{fill:none;stroke:var(--surface-dark);stroke-width:8;stroke-dasharray:1.5 2.5}.nisi-jmlock__marks{fill:none;stroke:var(--surface);stroke-width:3;stroke-linecap:round}.nisi-jmlock--prolock .nisi-jmlock__filter{transform:rotate(-90deg)}.nisi-jmlock__marks--lume{stroke:var(--lume);stroke-width:5;filter:drop-shadow(0 0 4px var(--lume))}.nisi-jmlock__frame{fill:var(--surface-dark)}.nisi-jmlock__glass{fill:var(--ink-muted);opacity:.55}.nisi-jmlock__shine{fill:none;stroke:var(--surface);stroke-width:4;stroke-linecap:round;opacity:.5}.nisi-jmlock__tab{fill:none;stroke:var(--nisi-yellow);stroke-width:12;stroke-linecap:round}.nisi-jmlock__filter{transform:rotate(-45deg);transform-origin:120px 120px;transition:transform 0.6s cubic-bezier(.3,.7,.2,1)}.nisi-jmlock__toggle:checked~.nisi-jmlock__stage .nisi-jmlock__filter{transform:rotate(0)}.nisi-jmlock__badge{position:absolute;top:50%;left:50%;margin:0;padding:0 var(--space-2);background:var(--surface);border-radius:var(--radius-pill);font-size:var(--fs-label);line-height:var(--lh-label);font-weight:var(--fw-label);letter-spacing:var(--ls-label);text-transform:uppercase;transform:translate(-50%,-50%)}.nisi-jmlock__text{margin:0 0 var(--space-3)}.nisi-jmlock__toggle:not(:checked)~* .nisi-jmlock__on,.nisi-jmlock__toggle:checked~* .nisi-jmlock__off{display:none}.nisi-jmlock__toggle:checked~.nisi-jmlock__stage .nisi-jmlock__badge{background:var(--success-soft);box-shadow:0 0 0 1px var(--success)}.nisi-jmlock__btn{cursor:pointer}.nisi-jmlock__toggle:focus-visible~.nisi-jmlock__side .nisi-jmlock__btn{outline:2px solid var(--focus-ring);outline-offset:2px}@media (prefers-reduced-motion:reduce){.nisi-jmlock__filter{transition:none}}@media (width>=768px){.nisi-jmlock{grid-template-columns:240px minmax(0,1fr);column-gap:var(--space-6)}}