[data-cube="mark"] { --size: 1rem; --empty-alpha: 0.4; --step: 0.033; --width: calc(var(--size) * sqrt(3)); --height: calc(var(--size) * 2); --face-base: currentColor; --face-top: var(--face-base); --face-right: oklch(from var(--face-base) calc(l - var(--step) * 2) c h); --face-left: oklch(from var(--face-base) calc(l - var(--step)) c h); --face-bottom: oklch(from var(--face-base) calc(l - var(--step) * 3) c h); --is-empty: round(down, calc(1 - var(--fill)), 1); display: inline-block; position: relative; flex-shrink: 0; width: var(--width); height: var(--height); overflow: hidden; clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%); [data-face] { position: absolute; inset: 0; } [data-role="liquid"] { background: var(--face-color); transform: translateY(calc((1 - var(--fill)) * 50%)); opacity: calc(1 - var(--is-empty)); } [data-role="glass"] { background: oklch(from var(--face-color) l c h / var(--empty-alpha)); } [data-side="bottom"] { --face-color: var(--face-bottom); clip-path: polygon(50% 50%, 100% 75%, 50% 100%, 0 75%); } [data-side="top"] { --face-color: var(--face-top); clip-path: polygon(50% 0, 100% 25%, 50% 50%, 0 25%); } [data-side="right"] { --face-color: var(--face-right); clip-path: polygon(100% 25%, 100% 75%, 50% 100%, 50% 50%); } [data-side="left"] { --face-color: var(--face-left); clip-path: polygon(0 25%, 50% 50%, 50% 100%, 0 75%); } [data-side="rear-right"] { --face-color: var(--face-left); clip-path: polygon(50% 50%, 100% 75%, 100% 25%, 50% 0); } [data-side="rear-left"] { --face-color: var(--face-top); clip-path: polygon(50% 50%, 0 75%, 0 25%, 50% 0); } } @keyframes cube-fill { from { --fill: 0.01; } to { --fill: 1; } } @property --fill { syntax: ""; inherits: true; initial-value: 0; }