diff --git a/assets/css/custom.css b/assets/css/custom.css index d4b0e0e..9511a9d 100644 --- a/assets/css/custom.css +++ b/assets/css/custom.css @@ -415,7 +415,7 @@ textarea::placeholder { height: 142px; border-radius: 30px; transform-origin: right bottom; - transform: translateZ(66px) rotate(calc(-6deg + (var(--angle) * 0.38deg))); + transform: translateZ(66px) rotate(calc(-6deg + (var(--angle) * 0.38deg) + (var(--back-angle) * 1deg))); } .recliner-back-inner { @@ -428,7 +428,7 @@ textarea::placeholder { border: 1px solid rgba(255, 255, 255, 0.08); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08); transform-origin: right bottom; - transform: translateZ(82px) rotate(calc(-6deg + (var(--angle) * 0.38deg))); + transform: translateZ(82px) rotate(calc(-6deg + (var(--angle) * 0.38deg) + (var(--back-angle) * 1deg))); } .recliner-head { @@ -437,7 +437,8 @@ textarea::placeholder { width: 74px; height: 38px; border-radius: 22px; - transform: translateZ(86px) rotate(calc(-10deg + (var(--angle) * 0.14deg))); + transform-origin: right bottom; + transform: translateZ(86px) rotate(calc(-10deg + (var(--angle) * 0.14deg) + (var(--head-angle) * 1deg))); } .recliner-leg { @@ -447,7 +448,7 @@ textarea::placeholder { height: 118px; border-radius: 20px; transform-origin: left center; - transform: translateZ(46px) rotate(calc(10deg + (var(--angle) * 0.34deg))); + transform: translateZ(46px) rotate(calc(10deg + (var(--angle) * 0.34deg) + (var(--leg-angle) * 1deg))); } .recliner-footpad { @@ -457,7 +458,7 @@ textarea::placeholder { height: 58px; border-radius: 18px; transform-origin: left center; - transform: translateZ(30px) rotate(calc(10deg + (var(--angle) * 0.2deg))); + transform: translateZ(30px) rotate(calc(10deg + (var(--angle) * 0.2deg) + (var(--leg-angle) * 1deg))); } .recliner-figure.is-vibrating .recliner-glow { @@ -745,4 +746,4 @@ footer { top: 52px; padding: 10px 12px; } -} +} \ No newline at end of file diff --git a/assets/js/main.js b/assets/js/main.js index e54a5a6..fefb5e1 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -6,6 +6,9 @@ document.addEventListener('DOMContentLoaded', () => { const controls = { angle: document.getElementById('angle_deg'), + backAngle: document.getElementById('back_angle'), + legAngle: document.getElementById('leg_angle'), + headAngle: document.getElementById('head_angle'), intensity: document.getElementById('intensity_pct'), pattern: document.getElementById('pattern_mode'), name: document.getElementById('name'), @@ -18,6 +21,9 @@ document.addEventListener('DOMContentLoaded', () => { motionState: document.getElementById('motion-state'), angleValue: document.getElementById('angle-value'), anglePill: document.getElementById('angle-pill'), + backAnglePill: document.getElementById('back-angle-pill'), + legAnglePill: document.getElementById('leg-angle-pill'), + headAnglePill: document.getElementById('head-angle-pill'), intensityPill: document.getElementById('intensity-pill'), statAngle: document.getElementById('stat-angle'), statIntensity: document.getElementById('stat-intensity'), @@ -63,6 +69,9 @@ document.addEventListener('DOMContentLoaded', () => { const currentState = () => ({ angle: Number(controls.angle?.value || 0), + backAngle: Number(controls.backAngle?.value || 0), + legAngle: Number(controls.legAngle?.value || 0), + headAngle: Number(controls.headAngle?.value || 0), intensity: Number(controls.intensity?.value || 0), pattern: controls.pattern?.value || 'continuous' }); @@ -95,6 +104,9 @@ document.addEventListener('DOMContentLoaded', () => { const glowOpacity = Math.min(0.92, 0.36 + state.intensity / 180).toFixed(2); ui.figure.style.setProperty('--angle', String(state.angle)); + ui.figure.style.setProperty('--back-angle', String(state.backAngle)); + ui.figure.style.setProperty('--leg-angle', String(state.legAngle)); + ui.figure.style.setProperty('--head-angle', String(state.headAngle)); ui.figure.style.setProperty('--intensity', String(state.intensity)); ui.figure.style.setProperty('--drift-x', `${driftX}px`); ui.figure.style.setProperty('--drift-y', `${driftY}px`); @@ -128,6 +140,9 @@ document.addEventListener('DOMContentLoaded', () => { const map = { angleValue: `${state.angle}`, anglePill: `${state.angle}°`, + backAnglePill: `${state.backAngle}°`, + legAnglePill: `${state.legAngle}°`, + headAnglePill: `${state.headAngle}°`, intensityPill: `${state.intensity}%`, statAngle: `${state.angle}°`, statIntensity: `${state.intensity}%`, @@ -405,7 +420,7 @@ document.addEventListener('DOMContentLoaded', () => { }); } - [controls.angle, controls.intensity].forEach((element) => { + [controls.angle, controls.backAngle, controls.legAngle, controls.headAngle, controls.intensity].forEach((element) => { if (element) { element.addEventListener('input', updateVisualization); element.addEventListener('change', updateVisualization); @@ -459,4 +474,4 @@ document.addEventListener('DOMContentLoaded', () => { } stopEffect(activeActuator).catch(() => {}); }); -}); +}); \ No newline at end of file diff --git a/index.php b/index.php index f6a1d22..ea9c5d3 100644 --- a/index.php +++ b/index.php @@ -151,7 +151,7 @@ if (isset($_GET['saved']) && ctype_digit((string) $_GET['saved'])) {
upright
full recline
Preview idle
-