@media (prefers-color-scheme: dark) { :root { color-scheme: dark; --text: 64 58.621% 94.314%; --subtext1: 152 20.588% 73.333%; --subtext0: 160 16.667% 64.706%; --overlay1: 182 10.121% 48.431%; --surface0: 200 12.245% 19.216%; --base: 202 13.58% 15.882%; --mantle: 200 13.846% 12.745%; --crust: 203 14.815% 10.588%; --pink: 316 68% 85.294%; --blue: 216 62.105% 81.373%; } :root { --shadow: var(--crust); --on-accent: var(--crust); } } @media (prefers-color-scheme: light) { :root { color-scheme: light; --text: 203 14.815% 10.588%; --subtext1: 195 13.333% 29.412%; --subtext0: 193 12.299% 36.667%; --overlay1: 193 10.843% 51.176%; --surface0: 203 22.5% 84.314%; --base: 210 33.333% 88.235%; --mantle: 209 29.412% 83.333%; --crust: 212 29.412% 80%; --pink: 318 29.333% 70.588%; --blue: 214 25.683% 64.118%; } :root { --shadow: var(--subtext1); --on-accent: var(--text); } } :root { --ease: cubic-bezier(0.4, 0, 0.2, 1); --accent: var(--pink); --transition-properties: margin, grid-template-rows, grid-template-columns, stroke-dasharray, stroke-dashoffset, outline-color, outline-offset, color, background-color, box-shadow, outline, border-color, border-radius, font-weight, opacity, transform, backdrop-filter, text-decoration-color, filter, scale, height, left; --transition-duration: 0.2s; --transition: var(--transition-duration) var(--ease); } ::-webkit-scrollbar { width: 0.5rem; height: 6px; background: transparent; } ::-webkit-scrollbar-thumb { background: hsla(var(--overlay1) / 1); border-radius: 3px; } ::-webkit-scrollbar-track { background: transparent; } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; scrollbar-width: thin; scrollbar-color: hsla(var(--overlay1) / 1) transparent; -webkit-tap-highlight-color: transparent; outline: 2px solid; outline-offset: 2px; outline-color: hsla(var(--blue) / 0); transition-property: var(--transition-properties); transition-duration: var(--transition-duration); transition-timing-function: var(--ease); } *:focus-visible { outline-color: hsl(var(--blue)); z-index: 5; } ::selection { background-color: hsla(var(--overlay1) / 1); color: hsl(var(--crust)); } body { color: hsl(var(--text)); font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; font-weight: 500; background-color: hsl(var(--crust)); font-size: 15px; line-height: 1.5; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; } h1, h2, h3, h4 { font-variation-settings: "ROND" 0; } html, body { min-height: 100vh; height: 100%; } body { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 0 1rem; } main { position: relative; max-width: 512px; width: 100%; margin: 0 auto; background: hsl(var(--base)); padding: 0.25rem; border-radius: 2rem; display: flex; flex-direction: column; gap: 0.25rem; } h1, p { text-align: center; } header { padding: 1rem; border-radius: 1.75rem 1.75rem 0.5rem 0.5rem; background: hsl(var(--mantle)); } form { padding: 1rem; border-radius: 0.5rem 0.5rem 1.75rem 1.75rem; background: hsl(var(--mantle)); display: flex; flex-direction: column; gap: 0.5rem; .field { display: flex; flex-direction: column; } label { font-size: 0.85rem; font-weight: 900; color: hsl(var(--subtext0)); } input { background-color: hsl(var(--surface0)); border: 1px solid transparent; padding: 0.5rem; border-radius: 0.5rem; margin-left: -0.5rem; margin-right: -0.5rem; color: hsl(var(--text)); } button { position: relative; overflow: hidden; margin: auto; margin-bottom: -0.5rem; padding: 0.5rem 1rem; background-color: hsla(var(--accent) / 0.9); border: 2px solid transparent; border-radius: 5rem; color: hsl(var(--on-accent)); font-weight: 900; &:hover { background-color: hsla(var(--accent) / 1); box-shadow: 0 0 0 0.4rem hsla(var(--accent) / 0.12); } &:active { background-color: hsla(var(--accent) / 0.8); transform: scale(0.94); } &:disabled { cursor: wait; opacity: 0.7; } .btn-label, .btn-state { display: inline-block; } .btn-state { position: absolute; inset: 50% auto auto 50%; opacity: 0; transform: translate(-50%, calc(-50% + 5px)); white-space: nowrap; i { display: inline-block; width: 0.7em; height: 0.7em; margin-left: 0.15em; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; vertical-align: -0.05em; animation: spin 600ms linear infinite; } } &.is-sending { .btn-label { opacity: 0; transform: translateY(-5px); } .btn-state { opacity: 1; transform: translate(-50%, -50%); } } &.is-sent { background-color: hsl(var(--accent)) !important; .btn-label { animation: sent-pop 500ms var(--ease); } } } } main { .status-box { position: absolute; top: 100%; left: 0; width: 100%; padding-top: 0.75rem; text-align: center; visibility: hidden; opacity: 0; transform: translateY(-3px); &.success, &.error { visibility: visible; opacity: 1; transform: translateY(0); } &.dismissing { visibility: visible; opacity: 0; transform: translateY(-3px); } &.success { color: hsl(var(--accent)); } &.error { color: hsl(var(--red)); } &.pop { animation: status-pop 320ms var(--ease); } } } @keyframes spin { to { transform: rotate(360deg); } } @keyframes sent-pop { 50% { transform: scale(1.12); } } @keyframes status-pop { 50% { transform: translateY(0) scale(1.04); } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; } }