Spaces:
Running
Running
:root { | |
--phone-body-color: #e0dacd; /* Creamy beige */ | |
--dial-plate-bg: linear-gradient(145deg, #d3cabd, #f8f5ee); /* Subtle gradient */ | |
--dial-plate-border: #a89d8a; | |
--hole-color: #5c554a; /* Dark brown */ | |
--number-color: #403a30; | |
--finger-stop-color: #b0a492; /* Metallic-ish stop */ | |
--finger-stop-border: #7d7365; | |
--display-bg: #4a443b; /* Dark display */ | |
--display-text: #ffc107; /* Amber text */ | |
--button-bg: #795548; /* Brown */ | |
--button-text: #ffffff; | |
--dial-size: 300px; /* Slightly larger */ | |
--hole-size: calc(var(--dial-size) * 0.13); | |
--number-font-size: calc(var(--dial-size) * 0.075); /* Slightly smaller number */ | |
} | |
body { | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
min-height: 100vh; | |
background-color: #f0ece3; /* Light background */ | |
font-family: 'Orbitron', sans-serif; /* Techy font */ | |
overflow: hidden; /* Prevent scrollbars during drag */ | |
user-select: none; /* Prevent text selection during drag */ | |
-webkit-user-select: none; | |
-moz-user-select: none; | |
-ms-user-select: none; | |
} | |
.phone-body { | |
background-color: var(--phone-body-color); | |
padding: 35px; | |
border-radius: 20px; | |
box-shadow: 8px 8px 20px rgba(0,0,0,0.25), | |
inset 0 0 15px rgba(255,255,255,0.3), | |
inset 0 0 10px rgba(0,0,0,0.1); | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
} | |
.display-panel { | |
display: flex; | |
align-items: stretch; /* Make items same height */ | |
width: 90%; | |
max-width: 320px; | |
height: 50px; | |
border-radius: 8px; | |
overflow: hidden; /* Clip corners */ | |
margin-bottom: 35px; | |
background-color: var(--display-bg); | |
box-shadow: inset 3px 3px 8px rgba(0,0,0,0.5); | |
} | |
#dialed-numbers { | |
flex-grow: 1; /* Take available space */ | |
color: var(--display-text); | |
font-size: 2em; | |
padding: 5px 15px; | |
display: flex; | |
align-items: center; | |
justify-content: flex-end; /* Numbers align right */ | |
letter-spacing: 3px; | |
text-shadow: 0 0 5px rgba(255, 193, 7, 0.5); /* Glow effect */ | |
overflow: hidden; /* Prevent long numbers breaking layout */ | |
white-space: nowrap; | |
} | |
#call-button { | |
flex-shrink: 0; /* Don't shrink */ | |
width: 60px; /* Fixed width */ | |
background-color: var(--button-bg); | |
color: var(--button-text); | |
border: none; | |
border-left: 2px solid rgba(0,0,0,0.2); | |
cursor: pointer; | |
font-size: 1.5em; | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
transition: background-color 0.2s; | |
} | |
#call-button:hover { | |
background-color: #9c786c; | |
} | |
.dial-assembly { | |
position: relative; | |
width: var(--dial-size); | |
height: var(--dial-size); | |
} | |
#dial { | |
position: absolute; | |
top: 0; | |
left: 0; | |
width: 100%; | |
height: 100%; | |
background: var(--dial-plate-bg); | |
border-radius: 50%; | |
border: 4px solid var(--dial-plate-border); | |
box-shadow: inset 0 0 15px rgba(0,0,0,0.2), 0 5px 10px rgba(0,0,0,0.2); | |
transform-origin: center center; | |
/* This transition controls the visual return speed */ | |
transition: transform 0.55s cubic-bezier(0.15, 0.85, 0.25, 1); | |
} | |
.dial-center-design { | |
position: absolute; | |
width: 25%; | |
height: 25%; | |
top: 50%; | |
left: 50%; | |
background: radial-gradient(circle, #c8bba8 0%, var(--finger-stop-color) 100%); | |
border-radius: 50%; | |
transform: translate(-50%, -50%); | |
box-shadow: inset 1px 1px 5px rgba(0,0,0,0.4), 0 0 3px rgba(0,0,0,0.2); | |
z-index: 3; /* Above holes/numbers */ | |
} | |
.hole { | |
position: absolute; | |
width: var(--hole-size); | |
height: var(--hole-size); | |
background-color: var(--hole-color); | |
border-radius: 50%; | |
top: 50%; /* Position origin for transform */ | |
left: 50%; | |
/* Center the hole using negative margins */ | |
margin-left: calc(var(--hole-size) / -2); | |
margin-top: calc(var(--hole-size) / -2); | |
cursor: grab; | |
z-index: 2; /* Above numbers */ | |
box-shadow: inset 2px 2px 4px rgba(0,0,0,0.6); | |
/* Actual position set by JS translate */ | |
} | |
.hole.dragging { | |
cursor: grabbing; | |
background-color: #7a7061; /* Lighter when dragging */ | |
} | |
.dial-plate-number { | |
position: absolute; | |
/* Define area based on font size for centering */ | |
width: calc(var(--number-font-size) * 1.5); | |
height: calc(var(--number-font-size) * 1.5); | |
top: 50%; /* Position origin for transform */ | |
left: 50%; | |
/* Translate -50% of element size to center it on calculated point */ | |
transform: translate(-50%, -50%); | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
font-size: var(--number-font-size); | |
font-weight: 700; | |
color: var(--number-color); | |
z-index: 1; /* Below holes */ | |
transform-origin: center center; /* Rotation point for text */ | |
/* Final position and text rotation set by JS */ | |
} | |
#finger-stop { | |
position: absolute; | |
width: 18px; | |
height: 45px; | |
background: linear-gradient(to bottom, #cac0b2, var(--finger-stop-color)); | |
border: 1px solid var(--finger-stop-border); | |
border-radius: 9px 9px 5px 5px; /* Shaped top/bottom */ | |
box-shadow: 1px 1px 4px rgba(0,0,0,0.5); | |
z-index: 4; /* Above everything */ | |
/* Position & Rotation set by JS */ | |
} | |
#clear-button { | |
margin-top: 30px; | |
padding: 10px 25px; | |
font-size: 1em; | |
background-color: var(--button-bg); | |
color: var(--button-text); | |
border: none; | |
border-radius: 5px; | |
cursor: pointer; | |
box-shadow: 2px 2px 5px rgba(0,0,0,0.2); | |
transition: background-color 0.2s, transform 0.1s; | |
} | |
#clear-button:hover { | |
background-color: #9c786c; | |
} | |
#clear-button:active { | |
transform: translateY(1px); | |
box-shadow: 1px 1px 3px rgba(0,0,0,0.2); | |
} |