Sai/dist/sai.css
2026-06-04 21:13:52 +01:00

994 lines
20 KiB
CSS

.sai-player {
--sai-title-font: var(
--titleFont,
Inter,
ui-sans-serif,
system-ui,
sans-serif
);
--sai-body-font: var(--bodyFont, Inter, ui-sans-serif, system-ui, sans-serif);
}
.sai-player {
display: grid;
gap: 0.9rem;
margin: 1.3rem 0 1.6rem;
padding: clamp(0.8rem, 2vw, 1.1rem);
border: 1px solid rgba(255, 198, 120, 0.2);
border-radius: 22px;
background:
radial-gradient(
circle at 16% 12%,
rgba(255, 198, 120, 0.12),
transparent 24%
),
radial-gradient(
circle at 82% 10%,
rgba(104, 172, 255, 0.1),
transparent 26%
),
linear-gradient(180deg, rgba(7, 8, 12, 0.98), rgba(9, 13, 19, 0.96));
box-shadow:
0 18px 38px rgba(0, 0, 0, 0.24),
inset 0 1px 0 rgba(255, 255, 255, 0.03);
}
.sai-status {
position: relative;
z-index: 1;
margin: 0;
color: rgba(255, 138, 42, 0.96);
font-family: var(--sai-title-font);
font-size: 0.8rem;
font-weight: 300;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.sai-cinematic-stage {
position: relative;
min-height: clamp(480px, 62vh, 680px);
border-radius: 24px;
overflow: hidden;
border: 1px solid rgba(255, 198, 120, 0.18);
background: #05070b;
box-shadow:
0 28px 68px rgba(0, 0, 0, 0.44),
inset 0 1px 0 rgba(255, 255, 255, 0.04);
}
.sai-visual,
.sai-visual-plate,
.sai-visual-scrim {
position: absolute;
inset: 0;
}
.sai-visual-plate {
background-position: center;
background-size: cover;
opacity: 0;
transform: scale(1.035);
filter: saturate(1.08) contrast(1.02) brightness(0.86);
transition:
opacity 780ms ease,
transform 1400ms ease;
}
.sai-visual-plate.is-active {
opacity: 1;
transform: scale(1);
}
.sai-visual-scrim {
background:
radial-gradient(
circle at 50% 32%,
transparent 0%,
rgba(0, 0, 0, 0.1) 34%,
rgba(0, 0, 0, 0.7) 100%
),
linear-gradient(180deg, rgba(3, 5, 8, 0.18), rgba(3, 5, 8, 0.82));
}
.sai-visual-caption {
position: absolute;
top: 1rem;
left: 1rem;
margin: 0;
padding: 0.4rem 0.65rem;
border: 1px solid rgba(255, 198, 120, 0.24);
border-radius: 999px;
background: rgba(5, 8, 13, 0.62);
color: rgba(255, 225, 184, 0.92);
font-family: var(--sai-title-font);
font-size: 0.72rem;
letter-spacing: 0.12em;
text-transform: uppercase;
backdrop-filter: blur(12px);
}
.sai-slide-references {
position: absolute;
top: 1rem;
right: 1rem;
z-index: 1;
width: min(24rem, calc(100% - 2rem));
max-width: 42%;
padding: 0.62rem 0.72rem 0.68rem;
border: 1px solid rgba(255, 198, 120, 0.22);
border-radius: 18px;
background: rgba(5, 8, 13, 0.68);
color: rgba(226, 238, 252, 0.9);
box-shadow: 0 14px 32px rgba(0, 0, 0, 0.28);
backdrop-filter: blur(14px);
}
.sai-slide-references[hidden] {
display: none;
}
.sai-slide-references-title {
margin: 0 0 0.38rem;
color: rgba(255, 225, 184, 0.94);
font-family: var(--sai-title-font);
font-size: 0.68rem;
letter-spacing: 0.12em;
line-height: 1.1;
text-transform: uppercase;
}
.sai-slide-references-list {
display: grid;
gap: 0.24rem;
margin: 0;
padding: 0;
list-style: none;
}
.sai-slide-references-list li {
margin: 0;
color: rgba(226, 238, 252, 0.88);
font-size: clamp(0.72rem, 1.1vw, 0.82rem);
line-height: 1.28;
}
.sai-slide-references-list a {
color: rgba(255, 198, 120, 0.94);
}
.sai-slide-references-list a:hover,
.sai-slide-references-list a:focus-visible {
color: #fff3e8;
}
.sai-section {
position: absolute;
inset: auto clamp(0.85rem, 3vw, 2rem) clamp(1.5rem, 6vh, 4rem);
display: grid;
place-items: end stretch;
}
.sai-section-text {
max-width: min(760px, 100%);
padding: clamp(1rem, 2.3vw, 1.45rem);
border: 1px solid rgba(255, 198, 120, 0.18);
border-radius: 24px;
background:
linear-gradient(135deg, rgba(7, 10, 15, 0.72), rgba(10, 16, 23, 0.54)),
radial-gradient(
circle at 14% 0%,
rgba(255, 198, 120, 0.14),
transparent 26%
);
box-shadow:
0 20px 54px rgba(0, 0, 0, 0.42),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
backdrop-filter: blur(18px);
}
.sai-line,
.sai-end,
.sai-error {
margin: 0;
color: rgba(246, 241, 226, 0.96);
font-size: clamp(1.05rem, 1.8vw, 1.32rem);
line-height: 1.65;
text-shadow: 0 2px 18px rgba(0, 0, 0, 0.55);
}
.sai-end,
.sai-error {
position: relative;
z-index: 1;
}
.sai-error {
color: #ffb7a6;
}
.sai-section-text.is-entering {
animation: saiTextIn 520ms cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
.sai-section-text.is-exiting {
animation: saiTextOut 220ms ease both;
}
.sai-player-speaker {
box-sizing: border-box;
width: 100%;
max-width: 100%;
gap: 0;
padding: 0;
border: 0;
border-radius: 0;
background: transparent;
box-shadow: none;
}
.sai-player-speaker > .sai-status {
display: none;
}
.sai-speaker-stage {
position: relative;
height: clamp(320px, 42vw, 560px);
max-height: calc(100vh - 8rem);
min-height: 320px;
overflow: hidden;
border: 0;
border-radius: 0;
background: #05070b;
box-shadow: 0 26px 72px rgba(0, 0, 0, 0.44);
}
.sai-speaker-stage.has-dom-cards {
height: clamp(520px, 74vh, 820px);
}
.sai-speaker-stage.has-sprites.has-dom-cards {
height: clamp(620px, 78vh, 860px);
}
.sai-speaker-stage.can-continue {
cursor: pointer;
}
.sai-speaker-background,
.sai-speaker-scrim {
position: absolute;
inset: 0;
}
.sai-speaker-background {
background-position: center;
background-repeat: no-repeat;
background-size: cover;
filter: saturate(1.06) contrast(1.02) brightness(0.92);
}
.sai-speaker-scrim {
background:
linear-gradient(
180deg,
rgba(3, 4, 7, 0.04),
rgba(3, 4, 7, 0.48) 56%,
rgba(3, 4, 7, 0.76)
),
radial-gradient(
circle at 50% 24%,
transparent 0%,
rgba(0, 0, 0, 0.08) 44%,
rgba(0, 0, 0, 0.5) 100%
);
}
.sai-speaker-scene {
position: absolute;
top: 1rem;
left: 1rem;
z-index: 1;
margin: 0;
padding: 0.42rem 0.68rem;
border: 1px solid rgba(255, 198, 120, 0.24);
border-radius: 999px;
background: rgba(5, 8, 13, 0.64);
color: rgba(255, 225, 184, 0.92);
font-family: var(--sai-title-font);
font-size: 0.72rem;
letter-spacing: 0.12em;
text-transform: uppercase;
backdrop-filter: blur(12px);
}
.sai-speaker-scene[hidden] {
display: none;
}
.sai-graph-layer {
position: absolute;
top: 3.2rem;
left: 1rem;
z-index: 4;
width: min(24rem, calc(100% - 2rem));
height: min(15rem, 34vh);
overflow: hidden;
border: 1px solid rgba(89, 183, 255, 0.18);
border-radius: 12px;
background:
linear-gradient(180deg, rgba(5, 9, 15, 0.72), rgba(3, 6, 11, 0.52)),
radial-gradient(circle at 16% 10%, rgba(89, 183, 255, 0.12), transparent 36%);
box-shadow:
0 18px 42px rgba(0, 0, 0, 0.34),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
pointer-events: auto;
backdrop-filter: blur(8px);
}
.sai-graph-layer[hidden] {
display: none;
}
.sai-graph-layer svg {
display: block;
width: 100%;
height: 100%;
overflow: hidden;
pointer-events: auto;
}
.sai-graph-edges line {
stroke: rgba(89, 183, 255, 0.38);
stroke-width: 2.6;
stroke-linecap: round;
}
.sai-graph-node {
cursor: pointer;
outline: none;
transition: opacity 140ms ease;
}
.sai-graph-node circle {
fill: rgba(7, 17, 26, 0.32);
stroke: rgba(89, 183, 255, 0.72);
stroke-width: 2.5;
transition:
fill 160ms ease,
stroke 160ms ease,
stroke-width 160ms ease;
}
.sai-graph-node text {
fill: rgba(246, 241, 226, 0.92);
font-family: var(--sai-title-font);
font-size: 14px;
font-weight: 600;
text-anchor: middle;
dominant-baseline: middle;
paint-order: stroke;
stroke: rgba(0, 0, 0, 0.76);
stroke-width: 4px;
pointer-events: none;
transition: opacity 140ms ease;
}
.sai-graph-node.is-visited circle {
fill: rgba(89, 183, 255, 0.12);
}
.sai-graph-node.is-available circle {
stroke: rgba(255, 198, 120, 0.88);
}
.sai-graph-node.is-current circle {
fill: rgba(255, 138, 42, 0.24);
stroke: rgba(255, 138, 42, 1);
stroke-width: 4;
}
.sai-graph-node.is-current text {
fill: rgba(255, 138, 42, 1);
stroke: rgba(3, 5, 8, 0.92);
stroke-width: 5px;
opacity: 1;
}
.sai-graph-node:hover circle,
.sai-graph-node:focus-visible circle {
fill: rgba(255, 198, 120, 0.18);
stroke: rgba(255, 236, 207, 1);
stroke-width: 4;
}
.sai-graph-error {
max-width: 30rem;
margin: 0;
color: #ffb7a6;
font-size: 0.9rem;
line-height: 1.4;
}
.sai-sprite-layer {
position: absolute;
inset: 0 0 128px;
z-index: 1;
pointer-events: none;
}
.sai-sprite-layer[hidden] {
display: none;
}
.sai-sprite-layer.is-entering .sai-sprite {
animation: saiSpriteIn 360ms cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
.sai-sprite {
position: absolute;
bottom: clamp(0.3rem, 2vw, 1.4rem);
left: 50%;
display: grid;
width: min(34vw, 18rem);
max-width: 42%;
min-width: 9rem;
margin: 0;
transform: translateX(-50%)
translate(
var(--sai-sprite-offset-x, 0),
var(--sai-sprite-offset-y, 0)
)
scale(calc(var(--sai-sprite-scale, 1) * var(--sai-sprite-pixel-scale, 1)));
transform-origin: bottom center;
filter: drop-shadow(0 1.2rem 1.8rem rgba(0, 0, 0, 0.55));
}
.sai-sprite[data-sai-position="left"] {
left: 22%;
}
.sai-sprite[data-sai-position="midleft"],
.sai-sprite[data-sai-position="centerleft"] {
left: 34%;
}
.sai-sprite[data-sai-position="right"] {
left: 78%;
}
.sai-sprite[data-sai-position="midright"],
.sai-sprite[data-sai-position="centerright"] {
left: 66%;
}
.sai-sprite[data-sai-position="farleft"] {
left: 12%;
}
.sai-sprite[data-sai-position="farright"] {
left: 88%;
}
.sai-sprite-image {
display: block;
width: 100%;
height: auto;
image-rendering: pixelated;
object-fit: contain;
}
.sai-dom-layer {
position: absolute;
inset: 3.6rem 1rem 9rem;
z-index: 2;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
gap: 0.9rem;
align-items: stretch;
overflow: auto;
padding: 0.2rem;
}
.sai-speaker-stage.has-sprites.has-dom-cards .sai-dom-layer {
inset: 3.6rem 1rem 44%;
align-items: start;
}
.sai-speaker-stage.has-adventure-graph.has-dom-cards .sai-dom-layer {
inset: 3.6rem 1rem 9rem calc(min(24rem, calc(100% - 2rem)) + 2rem);
}
.sai-speaker-stage.has-sprites.has-dom-cards .sai-dom-card {
max-height: 100%;
}
.sai-speaker-stage.has-sprites.has-dom-cards .sai-sprite {
bottom: clamp(0.8rem, 3vw, 2.6rem);
}
.sai-dom-layer[hidden] {
display: none;
}
.sai-dom-layer.is-entering {
animation: saiSpeakerIn 320ms cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
.sai-dom-card {
box-sizing: border-box;
min-width: 0;
max-height: 100%;
overflow: auto;
padding: 0.95rem 1rem;
border: 1px solid rgba(255, 198, 120, 0.22);
border-radius: 18px;
background:
linear-gradient(180deg, rgba(8, 12, 18, 0.78), rgba(7, 10, 15, 0.62)),
radial-gradient(
circle at 10% 0%,
rgba(255, 198, 120, 0.1),
transparent 28%
);
box-shadow:
0 18px 44px rgba(0, 0, 0, 0.32),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
backdrop-filter: blur(16px);
}
.sai-dom-card-title {
margin: 0 0 0.55rem;
color: rgba(255, 198, 120, 0.96);
font-family: var(--sai-title-font);
font-size: 0.72rem;
letter-spacing: 0.12em;
line-height: 1.15;
text-transform: uppercase;
}
.sai-dom-card-body {
min-width: 0;
}
.sai-dom-card-body > * {
margin: 0;
}
.sai-dom-card-body h1,
.sai-dom-card-body h2,
.sai-dom-card-body h3 {
margin: 0 0 0.45rem;
color: rgba(246, 241, 226, 0.98);
font-family: var(--sai-title-font);
line-height: 1.05;
}
.sai-dom-card-body h1 {
font-size: clamp(1.25rem, 2.3vw, 1.7rem);
}
.sai-dom-card-body h2,
.sai-dom-card-body h3 {
font-size: clamp(1rem, 1.7vw, 1.24rem);
}
.sai-dom-card-body p,
.sai-dom-card-body li {
color: rgba(226, 238, 252, 0.9);
font-size: 0.94rem;
line-height: 1.48;
}
.sai-dom-card-body a {
color: rgba(255, 198, 120, 0.95);
}
.sai-dom-card-body ul {
margin: 0.45rem 0 0;
padding-left: 1.1rem;
}
.sai-speaker-card {
position: absolute;
box-sizing: border-box;
right: 0;
bottom: 0;
left: 0;
z-index: 3;
display: grid;
grid-template-columns: 128px minmax(0, 1fr);
align-items: stretch;
width: 100%;
height: 128px;
min-height: 128px;
margin: 0;
padding: 0;
border: 1px solid rgba(255, 198, 120, 0.24);
border-right: 0;
border-bottom: 0;
border-left: 0;
border-radius: 0;
background:
linear-gradient(135deg, rgba(5, 8, 13, 0.9), rgba(9, 14, 22, 0.78)),
radial-gradient(circle at 8% 4%, rgba(255, 198, 120, 0.14), transparent 26%);
box-shadow:
0 24px 60px rgba(0, 0, 0, 0.5),
inset 0 1px 0 rgba(255, 255, 255, 0.06);
backdrop-filter: blur(16px);
}
.sai-speaker-card.is-entering {
animation: saiSpeakerIn 360ms cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
.sai-speaker-card.is-exiting {
animation: saiTextOut 160ms ease both;
}
.sai-speaker-avatar-shell {
display: grid;
place-items: center;
width: 100%;
height: 100%;
min-height: inherit;
overflow: hidden;
border: 0;
border-right: 1px solid rgba(255, 198, 120, 0.24);
border-radius: 0;
background: rgba(3, 5, 8, 0.72);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
}
.sai-speaker-avatar {
width: 100%;
height: 100%;
object-fit: cover;
}
.sai-speaker-avatar[hidden] {
display: none;
}
.sai-speaker-body {
display: grid;
grid-template-columns: minmax(0, 1fr);
grid-template-rows: auto minmax(0, 1fr);
gap: 0.32rem;
align-content: stretch;
min-width: 0;
padding: 0.74rem 1rem;
}
.sai-speaker-controls {
position: absolute;
right: 1rem;
bottom: calc(128px + 0.55rem);
left: clamp(12rem, 42vw, 58rem);
z-index: 6;
display: flex;
flex-wrap: wrap;
gap: 0.35rem;
align-items: flex-end;
justify-content: flex-end;
min-width: 0;
margin: 0;
padding: 0;
border: 0;
pointer-events: none;
}
.sai-speaker-controls .sai-choices {
display: flex;
flex: 0 1 auto;
flex-wrap: wrap;
gap: 0.35rem;
justify-content: flex-end;
width: auto;
max-width: 100%;
pointer-events: auto;
}
.sai-speaker-controls .sai-choices:empty {
display: none;
}
.sai-speaker-controls .sai-choice,
.sai-speaker-controls .sai-continue {
min-height: 2rem;
max-width: min(22rem, 100%);
padding: 0.38rem 0.58rem;
border: 1px solid rgba(255, 198, 120, 0.2);
border-radius: 6px;
background: rgba(4, 7, 11, 0.58);
color: rgba(255, 236, 207, 0.96);
font-size: 0.82rem;
line-height: 1.15;
text-align: left;
box-shadow:
0 10px 24px rgba(0, 0, 0, 0.28),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
backdrop-filter: blur(10px);
pointer-events: auto;
}
.sai-speaker-controls .sai-restart {
display: none;
}
.sai-speaker-controls .sai-continue {
justify-self: auto;
align-self: flex-end;
font-family: var(--sai-body-font);
letter-spacing: 0;
text-transform: none;
white-space: nowrap;
}
.sai-speaker-stage > .sai-continue {
position: absolute;
right: 1rem;
bottom: calc(128px + 0.85rem);
z-index: 7;
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 2rem;
padding: 0.25rem 0;
border: 0;
background: transparent;
color: rgba(255, 244, 230, 1);
font-family: var(--sai-body-font);
font-size: 0.96rem;
font-weight: 800;
line-height: 1;
text-align: center;
white-space: nowrap;
text-shadow:
0 2px 10px rgba(0, 0, 0, 0.82),
0 0 18px rgba(255, 138, 42, 0.46);
box-shadow: none;
backdrop-filter: none;
}
.sai-speaker-stage > .sai-continue::after {
content: ">";
margin-left: 0.55rem;
color: rgba(255, 198, 120, 1);
font-family: var(--sai-title-font);
font-weight: 800;
}
.sai-speaker-stage > .sai-continue:hover,
.sai-speaker-stage > .sai-continue:focus-visible {
color: rgba(255, 198, 120, 1);
transform: translateY(-1px);
}
.sai-speaker-controls .sai-choice:hover,
.sai-speaker-controls .sai-choice:focus-visible,
.sai-speaker-controls .sai-continue:hover,
.sai-speaker-controls .sai-continue:focus-visible {
background: rgba(255, 198, 120, 0.12);
color: rgba(255, 198, 120, 1);
transform: translateY(-1px);
}
.sai-speaker-name {
grid-column: 1;
margin: 0;
color: rgba(255, 198, 120, 0.96);
font-family: var(--sai-title-font);
font-size: 0.96rem;
letter-spacing: 0.1em;
line-height: 1.15;
text-transform: uppercase;
}
.sai-speaker-line {
grid-column: 1;
margin: 0;
color: rgba(246, 241, 226, 0.96);
font-size: 1.06rem;
line-height: 1.28;
text-shadow: 0 2px 18px rgba(0, 0, 0, 0.55);
}
@media (max-width: 760px) {
.sai-speaker-stage.has-dom-cards {
height: min(760px, calc(100vh - 2rem));
min-height: 620px;
}
.sai-dom-layer {
inset: 3.2rem 0.65rem 13.5rem;
grid-template-columns: minmax(0, 1fr);
}
.sai-graph-layer {
top: 3.2rem;
left: 0.65rem;
width: min(18rem, calc(100% - 1.3rem));
height: min(11rem, 28vh);
}
.sai-speaker-stage.has-sprites.has-dom-cards .sai-dom-layer {
inset: 3.2rem 0.65rem 50%;
}
.sai-speaker-stage.has-adventure-graph.has-dom-cards .sai-dom-layer {
inset: calc(3.2rem + min(11rem, 28vh) + 0.75rem) 0.65rem 13.5rem;
}
.sai-sprite-layer {
bottom: 13rem;
}
.sai-sprite {
width: min(42vw, 12rem);
min-width: 7.5rem;
max-width: 48%;
}
.sai-sprite[data-sai-position="left"],
.sai-sprite[data-sai-position="farleft"] {
left: 25%;
}
.sai-sprite[data-sai-position="right"],
.sai-sprite[data-sai-position="farright"] {
left: 75%;
}
.sai-speaker-card {
grid-template-columns: 96px minmax(0, 1fr);
height: auto;
min-height: 128px;
}
.sai-speaker-body {
grid-template-columns: minmax(0, 1fr);
}
.sai-speaker-controls {
right: 0.65rem;
bottom: calc(128px + 0.5rem);
left: 0.65rem;
max-height: 8rem;
overflow: auto;
justify-content: center;
}
.sai-speaker-controls .sai-choices {
flex: 1 1 100%;
justify-content: center;
}
.sai-speaker-controls .sai-choice,
.sai-speaker-controls .sai-continue {
flex: 1 1 min(100%, 13rem);
}
.sai-speaker-stage > .sai-continue {
right: 0.75rem;
bottom: calc(128px + 0.65rem);
}
}
.sai-choices {
position: relative;
z-index: 1;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
gap: 0.65rem;
}
.sai-choice,
.sai-continue,
.sai-restart {
position: relative;
z-index: 1;
cursor: pointer;
border: 1px solid rgba(255, 198, 120, 0.28);
background: rgba(255, 198, 120, 0.1);
color: rgba(255, 235, 205, 0.94);
transition:
background 160ms ease,
border-color 160ms ease,
transform 160ms ease;
}
.sai-choice {
padding: 0.75rem 0.95rem;
border-radius: 18px;
text-align: left;
}
.sai-continue,
.sai-restart {
justify-self: center;
padding: 0.65rem 1rem;
border-radius: 999px;
font-family: var(--sai-title-font);
letter-spacing: 0.08em;
text-transform: uppercase;
}
.sai-choice:hover,
.sai-choice:focus-visible,
.sai-continue:hover,
.sai-continue:focus-visible,
.sai-restart:hover,
.sai-restart:focus-visible {
border-color: rgba(255, 198, 120, 0.6);
background: rgba(255, 198, 120, 0.18);
transform: translateY(-1px);
}
.sai-continue[hidden],
.sai-variables[hidden] {
display: none;
}
@keyframes saiTextIn {
from {
opacity: 0;
transform: translateY(0.75rem);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes saiTextOut {
from {
opacity: 1;
transform: translateY(0);
}
to {
opacity: 0;
transform: translateY(0.45rem);
}
}
@keyframes saiSpeakerIn {
from {
opacity: 0;
transform: translateY(0.7rem);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes saiSpriteIn {
from {
opacity: 0;
transform: translateX(-50%)
translate(
var(--sai-sprite-offset-x, 0),
calc(var(--sai-sprite-offset-y, 0) + 1.2rem)
)
scale(
calc(
var(--sai-sprite-scale, 1) * var(--sai-sprite-pixel-scale, 1) * 0.98
)
);
}
to {
opacity: 1;
transform: translateX(-50%)
translate(
var(--sai-sprite-offset-x, 0),
var(--sai-sprite-offset-y, 0)
)
scale(
calc(var(--sai-sprite-scale, 1) * var(--sai-sprite-pixel-scale, 1))
);
}
}