*{box-sizing:border-box;margin:0;padding:0}:root{--accent: #3BA79A;--accent-active: #2e8b80;--accent-soft: #f0faf9;--accent-soft-border: #e0f2f0;--accent-soft-text: #2a7f75;--bg: #ffffff;--text: #2d3748;--text-strong: #1a202c;--text-muted: #718096;--text-faint: #a0aec0;--input-bg: #f7fafa;--border: #e2e8f0;--error: #e53e3e}body.dark{--accent-soft: #0d1117;--accent-soft-border: #21262d;--accent-soft-text: #4ec9b0;--bg: #151b23;--text: #c9d1d9;--text-strong: #e6edf3;--text-muted: #7d8590;--text-faint: #484f58;--input-bg: #0d1117;--border: #30363d;--error: #f85149}html,body{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;padding:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.container{max-width:480px;margin:0 auto;position:relative}h1{text-align:center;font-size:1.3rem;margin-bottom:4px;color:var(--text-strong)}.subtitle{text-align:center;font-size:.8rem;color:var(--text-faint);margin-bottom:20px}.input-group{margin-bottom:14px}.input-group label{display:block;font-size:.85rem;color:var(--text-muted);margin-bottom:4px}.input,input[type=text],input[type=email],input[type=password],input[type=date],input[type=number]{width:100%;padding:12px;border:1px solid var(--border);border-radius:8px;background:var(--input-bg);color:var(--text-strong);font-size:1rem;outline:none;-webkit-appearance:none;appearance:none;font-family:inherit}.input:focus,input:focus{border-color:var(--accent);box-shadow:0 0 0 2px #3ba79a40}.input.code{letter-spacing:6px;text-align:center;font-size:1.4rem;font-family:SF Mono,Fira Code,monospace}.btn{width:100%;padding:14px;border:none;border-radius:8px;background:var(--accent);color:#fff;font-size:1rem;font-weight:600;cursor:pointer;margin-top:6px;transition:background .2s,opacity .2s;font-family:inherit}.btn:active:not([disabled]){background:var(--accent-active)}.btn[disabled]{opacity:.5;cursor:not-allowed}.btn.secondary{background:var(--accent-soft);color:var(--accent-soft-text);border:1px solid var(--accent-soft-border)}.btn.secondary:active:not([disabled]){background:var(--accent);color:#fff}.btn.destructive{background:var(--error)}.btn.destructive:active:not([disabled]){background:#c53030}.btn.link{background:transparent;color:var(--accent-soft-text);text-decoration:underline;padding:6px;font-size:.85rem;font-weight:400;margin-top:0}.btn-row{display:flex;gap:8px;margin-top:6px}.btn-row .btn{flex:1}.error{color:var(--error);font-size:.85rem;margin-top:8px}.hint{font-size:.7rem;color:var(--text-faint);margin-top:2px}.card{background:var(--accent-soft);border:1px solid var(--accent-soft-border);border-radius:10px;padding:14px;margin-bottom:10px}.card .label{font-size:.8rem;color:var(--text-muted);margin-bottom:4px}.card .value{font-size:1.6rem;font-weight:700;font-family:SF Mono,Fira Code,monospace;color:var(--accent-soft-text);letter-spacing:2px;cursor:pointer;user-select:all;-webkit-user-select:all;word-break:break-all}.card .value:active{opacity:.6}.toast{position:fixed;bottom:30px;left:50%;transform:translate(-50%) translateY(100px);background:var(--accent);color:#fff;padding:10px 24px;border-radius:20px;font-size:.9rem;font-weight:600;transition:transform .3s ease;z-index:100;pointer-events:none}.toast.show{transform:translate(-50%) translateY(0)}.toast.error{background:var(--error)}.top-actions{position:absolute;top:0;right:0;display:flex;flex-direction:row;align-items:center;gap:8px;height:36px}.top-logo{position:absolute;top:0;left:0;display:flex;align-items:center;height:36px;line-height:0}.top-logo img{height:31px;width:auto;display:block}body.dark .top-logo img{filter:brightness(1.05) saturate(.9)}.icon-btn{width:36px;height:36px;border:none;border-radius:50%;background:var(--accent-soft);color:var(--accent-soft-text);font-size:1.1rem;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;font-family:inherit;transition:background .2s,color .2s}.icon-btn:active{background:var(--accent);color:#fff}.qr-wrap{display:flex;justify-content:center;margin:16px 0;padding:12px;background:#fff;border-radius:8px;border:1px solid var(--border)}.qr-wrap svg{width:100%;max-width:240px;height:auto}.captcha-wrap{display:flex;align-items:center;gap:8px;margin-bottom:14px}.captcha-wrap img{border-radius:6px;background:#fff;border:1px solid var(--border);cursor:pointer}.captcha-wrap .reload{width:50px;height:50px;border:none;border-radius:8px;background:var(--accent);color:#fff;cursor:pointer;font-size:1.6rem;font-weight:600;line-height:1;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s,transform .2s}.captcha-wrap .reload:active{background:var(--accent-active);transform:rotate(-90deg)}.week-table{width:100%;border-collapse:collapse;margin-top:14px}.week-table th,.week-table td{padding:8px 6px;text-align:left;font-size:.8rem;border-bottom:1px solid var(--border)}.week-table th{color:var(--text-faint);font-weight:400}.week-table td.code{font-family:SF Mono,Fira Code,monospace;color:var(--accent-soft-text);letter-spacing:1px;cursor:pointer}.week-table td.code:active{opacity:.5}.week-table tr.today{background:#3ba79a1a}.muted{color:var(--text-muted);font-size:.85rem}.center{text-align:center}.mt-md{margin-top:16px}.mt-lg{margin-top:24px}.spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite;vertical-align:middle}@keyframes spin{to{transform:rotate(360deg)}}.modal-backdrop{position:fixed;inset:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:1000;padding:16px;animation:fade-in .15s ease-out}.modal{background:var(--bg);border-radius:14px;padding:22px 20px 18px;max-width:360px;width:100%;box-shadow:0 12px 40px #00000059;animation:pop-in .18s ease-out}.modal-title{font-size:1.1rem;font-weight:700;color:var(--text-strong);margin:0 0 8px;text-align:left}.modal-message{font-size:.95rem;color:var(--text);margin:0 0 18px;line-height:1.5}.modal-actions{display:flex;gap:10px}.modal-actions .btn{flex:1;margin-top:0}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes pop-in{0%{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}
