/* Base and variables */ :root{ --bg0: #0b0c10; --bg1: #0f1117; --card: rgba(255,255,255,0.06); --card-2: rgba(255,255,255,0.08); --border: rgba(255,255,255,0.10); --text: #e6e6e6; --muted: #9aa4b2; --accent: #7c3aed; /* purple */ --accent-2: #00c6ff; /* cyan */ --ok: #22c55e; --warn: #f59e0b; --err: #ef4444; --shadow: 0 20px 60px rgba(0,0,0,.45), 0 10px 30px rgba(124,58,237,.20); } *, *::before, *::after{ box-sizing: border-box; } html, body{ height: 100%; } body{ margin: 0; font-family: 'Inter', system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif; color: var(--text); background: radial-gradient(1200px 800px at 10% -10%, rgba(124,58,237,.25), transparent 60%), radial-gradient(900px 700px at 110% 20%, rgba(0,198,255,.18), transparent 60%), linear-gradient(180deg, var(--bg1), var(--bg0) 60%); overflow-x: hidden; } /* Ambient glow blob */ .glow{ position: fixed; left: 50%; top: -20vmax; width: 90vmax; height: 90vmax; transform: translateX(-50%); background: radial-gradient(closest-side, rgba(124,58,237,.18), rgba(124,58,237,0) 60%), radial-gradient(closest-side, rgba(0,198,255,.16), rgba(0,198,255,0) 60%); filter: blur(40px); pointer-events: none; z-index: 0; animation: drift 24s ease-in-out infinite alternate; } @keyframes drift{ from{ transform: translateX(-55%) translateY(0); } to{ transform: translateX(-45%) translateY(2vmax); } } /* Confetti canvas behind everything */ #fx{ position: fixed; inset: 0; z-index: 0; pointer-events: none; } /* Layout wrapper to center the card */ .wrap{ position: relative; z-index: 1; min-height: 100vh; display: grid; place-items: center; padding: 24px; } /* Card (glass) */ .card{ width: 100%; max-width: 980px; background: var(--card); border: 1px solid var(--border); border-radius: 16px; backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); box-shadow: var(--shadow); padding: 28px; } h1{ margin: 0 0 8px 0; font-size: 28px; line-height: 1.2; background: linear-gradient(90deg, var(--accent), var(--accent-2)); -webkit-background-clip: text; background-clip: text; color: transparent; } .sub{ color: var(--muted); font-size: 14.5px; line-height: 1.5; margin-bottom: 18px; } /* Form grid row */ .row{ display: grid; grid-template-columns: 1fr 140px 220px 140px; gap: 14px; align-items: end; margin-bottom: 16px; } .long{ min-width: 220px; } label{ display: block; color: var(--muted); font-size: 13px; margin: 0 0 6px 2px; } input, select, button{ height: 44px; width: 100%; border-radius: 12px; border: 1px solid var(--border); background: rgba(255,255,255,0.06); color: var(--text); padding: 0 12px; font-size: 14.5px; outline: none; transition: border-color .2s ease, box-shadow .2s ease, transform .06s ease-in-out, background .2s ease; } input::placeholder{ color: #7e8a99; } input:hover, select:hover{ background: rgba(255,255,255,0.08); border-color: rgba(124,58,237,.35); } input:focus, select:focus{ border-color: rgba(0,198,255,.55); box-shadow: 0 0 0 4px rgba(0,198,255,.15); } /* Native select caret subtle tweak (optional safe) */ select{ appearance: none; -webkit-appearance: none; background-image: linear-gradient(45deg, transparent 50%, #aab4c0 50%), linear-gradient(135deg, #aab4c0 50%, transparent 50%), linear-gradient(to right, transparent, transparent); background-position: calc(100% - 18px) 18px, calc(100% - 12px) 18px, 100% 0; background-size: 6px 6px, 6px 6px, 2.5em 2.5em; background-repeat: no-repeat; padding-right: 34px; } /* Primary button */ button{ background: linear-gradient(180deg, var(--accent-2), #0072ff); color: #031018; border: none; font-weight: 700; letter-spacing: .2px; box-shadow: 0 8px 24px rgba(0,114,255,.35), inset 0 -6px 16px rgba(0,0,0,.15); } button:hover{ transform: translateY(-1px); box-shadow: 0 10px 28px rgba(0,114,255,.45), inset 0 -6px 16px rgba(0,0,0,.18); } button:active{ transform: translateY(0); box-shadow: 0 6px 18px rgba(0,114,255,.35), inset 0 -6px 16px rgba(0,0,0,.18); } button:disabled{ opacity: .6; pointer-events: none; } /* Status bar */ .status{ display: flex; align-items: center; gap: 12px; background: rgba(255,255,255,0.05); border: 1px solid var(--border); border-radius: 12px; padding: 10px 12px; min-height: 44px; } #text{ font-size: 14.5px; color: var(--text); } /* Status dot */ .dot{ width: 12px; height: 12px; border-radius: 50%; background: #7a8696; box-shadow: 0 0 0 0 rgba(122,134,150,0.0); transition: background .2s ease, box-shadow .2s ease; } .dot.ok{ background: var(--ok); box-shadow: 0 0 0 4px rgba(34,197,94,.18), 0 0 24px rgba(34,197,94,.35); } .dot.warn{ background: var(--warn); box-shadow: 0 0 0 4px rgba(245,158,11,.18), 0 0 24px rgba(245,158,11,.35); } .dot.err{ background: var(--err); box-shadow: 0 0 0 4px rgba(239,68,68,.18), 0 0 24px rgba(239,68,68,.35); } /* Spinner wrapper (right-aligned) */ #spinner{ margin-left: auto; display: none; } .spinner{ width: 18px; height: 18px; border: 2px solid rgba(255,255,255,.18); border-top-color: rgba(0,198,255,.9); border-right-color: rgba(0,198,255,.5); border-radius: 50%; animation: spin 0.9s linear infinite; } @keyframes spin{ to{ transform: rotate(360deg); } } /* Tips grid and chips */ .grid{ display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 14px; } .chip{ display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-radius: 999px; background: rgba(255,255,255,0.05); border: 1px solid var(--border); color: var(--muted); font-size: 13.5px; } /* KBD-style inline tag */ .kbd{ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; font-size: 12.5px; padding: 2px 7px; border-radius: 6px; border: 1px solid rgba(255,255,255,.14); background: rgba(255,255,255,0.06); color: var(--text); } /* Help block */ .help{ margin-top: 14px; color: var(--muted); font-size: 14px; line-height: 1.5; padding: 12px 14px; background: rgba(255,255,255,0.04); border: 1px solid var(--border); border-radius: 12px; } /* Footer */ footer{ margin-top: 16px; display: flex; flex-wrap: wrap; gap: 12px 20px; color: var(--muted); font-size: 13px; } /* Toast (bottom-center) */ .toast{ position: fixed; left: 50%; bottom: 18px; transform: translateX(-50%); display: none; /* JS toggles to flex */ align-items: center; gap: 10px; padding: 10px 14px; background: rgba(17, 20, 28, .8); color: var(--text); border: 1px solid var(--border); border-radius: 12px; box-shadow: 0 12px 40px rgba(0,0,0,.45); z-index: 10; backdrop-filter: blur(10px); } /* First child (dot) is added inline in HTML; ensure it looks right if inline style removed */ .toast > div:first-child{ width: 12px; height: 12px; border-radius: 50%; background: var(--warn); } /* Responsiveness */ @media (max-width: 980px){ .card{ max-width: 820px; } } @media (max-width: 860px){ .row{ grid-template-columns: 1fr 120px 1fr 120px; } } @media (max-width: 700px){ .row{ grid-template-columns: 1fr; } button#check{ height: 48px; } .grid{ grid-template-columns: 1fr; } } /* Better focus-visible */ :focus-visible{ outline: 2px solid rgba(0,198,255,.65); outline-offset: 2px; }