*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } :root { --bg: #f4f4f5; --card: #ffffff; --ink: #18181b; --subtle: #71717a; --line: #e4e4e7; --accent: #2563eb; --accent-hover: #1d4ed8; --danger: #dc2626; --danger-hover: #b91c1c; --radius: 12px; --shadow: 0 1px 3px rgba(0,0,0,.08), 0 8px 24px rgba(0,0,0,.06); } body { min-height: 100vh; background: var(--bg); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; font-size: 14px; color: var(--ink); display: grid; grid-template-rows: 1fr auto; place-items: center; padding: 24px 16px 0; } /* ── Layout ── */ .shell { width: min(100%, 400px); padding-bottom: 24px; } footer { width: 100%; padding: 16px; text-align: center; font-size: 12px; color: var(--subtle); } footer a { color: var(--subtle); text-decoration: none; } footer a:hover { color: var(--ink); } /* ── Brand ── */ .brand { text-align: center; margin-bottom: 20px; } .brand-name { font-size: 15px; font-weight: 600; color: var(--ink); letter-spacing: -0.01em; } /* ── Card ── */ .card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); padding: 28px; } .card-title { font-size: 18px; font-weight: 700; letter-spacing: -0.02em; margin-bottom: 4px; } .card-subtitle { font-size: 13px; color: var(--subtle); margin-bottom: 20px; line-height: 1.5; } hr { border: none; border-top: 1px solid var(--line); margin: 20px 0; } /* ── Form ── */ .stack { display: grid; gap: 12px; } .field { display: grid; gap: 5px; } .field span { font-size: 13px; font-weight: 500; } input[type="text"], input[type="password"] { width: 100%; padding: 9px 12px; border: 1px solid var(--line); border-radius: 8px; background: #fff; font: inherit; font-size: 14px; color: var(--ink); outline: none; transition: border-color 120ms, box-shadow 120ms; } input:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(37,99,235,.12); } /* ── Buttons ── */ .btn { display: inline-flex; align-items: center; justify-content: center; width: 100%; padding: 9px 16px; border: none; border-radius: 8px; font: inherit; font-size: 14px; font-weight: 500; cursor: pointer; text-decoration: none; transition: background 120ms, box-shadow 120ms; } .btn-primary { background: var(--accent); color: #fff; } .btn-primary:hover { background: var(--accent-hover); } .btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--line); } .btn-secondary:hover { background: var(--bg); } .btn-danger { background: var(--danger); color: #fff; } .btn-danger:hover { background: var(--danger-hover); } /* ── Alert ── */ .alert { padding: 9px 12px; border-radius: 8px; font-size: 13px; line-height: 1.4; margin-bottom: 16px; } .alert-error { background: #fef2f2; color: var(--danger); border: 1px solid #fecaca; } /* ── Info table ── */ .info-table { width: 100%; border-collapse: collapse; } .info-table tr + tr td { border-top: 1px solid var(--line); } .info-table td { padding: 9px 0; font-size: 13px; vertical-align: top; line-height: 1.5; } .info-table td:first-child { color: var(--subtle); width: 36%; padding-right: 12px; } /* ── Badge ── */ .badge { display: inline-block; padding: 1px 8px; border-radius: 99px; font-size: 12px; font-weight: 500; background: #eff6ff; color: var(--accent); border: 1px solid #dbeafe; margin: 2px 2px 2px 0; }