:root{--bg:#eef2f7;--bg-elevated:#fff;--card:#fff;--text:#15202b;--muted:#5a6b7c;--accent:#2563eb;--accent-hover:#1d4ed8;--accent-soft:#eff6ff;--border:#d8e0ea;--success:#059669;--success-soft:#d1fae5;--error:#dc2626;--error-soft:#fee2e2;--copy-from:#475569;--copy-to:#334155;--copy-hover-from:#64748b;--copy-hover-to:#475569;--copy-hover-top:#94a3b8;--shadow:0 1px 3px #0f172a0f;--shadow-md:0 4px 14px #0f172a14;--radius:12px;--radius-sm:8px}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;background-image:radial-gradient(120% 80% at 50% -20%,#dbeafe 0%,#0000 55%);min-height:100vh;margin:0;padding:1.75rem 1rem 2.5rem;font-family:Segoe UI,system-ui,-apple-system,sans-serif;line-height:1.55}#root{margin:0 auto}.app{max-width:46rem;margin:0 auto}.auth-page{place-items:center;min-height:70vh;display:grid}.auth-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);width:100%;max-width:30rem;box-shadow:var(--shadow-md);text-align:center;padding:1.5rem}.auth-card h1{letter-spacing:-.01em;color:var(--text);margin:0 0 .6rem;font-size:1.45rem}.auth-login-btn{margin-top:1rem}.app-header{margin-bottom:1.75rem}.app-header-row{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem 1.25rem;display:flex}.app-header-main{text-align:center;flex:1;min-width:12rem;margin:0 auto}.auth-panel{flex-wrap:wrap;flex-shrink:0;justify-content:flex-end;align-items:center;gap:.5rem .65rem;display:flex}.auth-email{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;max-width:14rem;font-size:.82rem;font-weight:600;overflow:hidden}button:not(.tabs button).auth-btn{background:var(--accent-soft);width:auto;color:var(--accent);border-radius:var(--radius-sm);box-shadow:none;cursor:pointer;border:1px solid #bfdbfe;flex:none;margin:0;padding:.45rem .85rem;font-size:.82rem;font-weight:600;transition:background .15s,color .15s}button:not(.tabs button).auth-btn:hover{color:var(--accent-hover);background:#dbeafe}.app-header h1{letter-spacing:-.02em;color:var(--text);margin:0 0 .4rem;font-size:1.65rem;font-weight:700}.badge{text-transform:uppercase;letter-spacing:.06em;color:var(--accent);background:var(--accent-soft);border-radius:999px;margin-bottom:.5rem;padding:.2rem .55rem;font-size:.7rem;font-weight:600;display:inline-block}.sub{color:var(--muted);max-width:34rem;margin:0 auto;font-size:.92rem;line-height:1.5}.tabs{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);gap:.35rem;margin-bottom:1.25rem;padding:.35rem;display:flex}.tabs button{border-radius:var(--radius-sm);color:var(--muted);cursor:pointer;background:0 0;border:none;flex:1;margin:0;padding:.6rem 1rem;font-size:.9rem;font-weight:600;transition:background .15s,color .15s}.tabs button:hover{filter:none;background:var(--bg);color:var(--text)}.tabs button.active{background:var(--accent);color:#fff;box-shadow:var(--shadow)}.tabs button.active:hover{background:var(--accent-hover);color:#fff}.tab-panel{animation:.2s fadeIn}@keyframes fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:1rem;padding:1.35rem 1.4rem}.card:hover{box-shadow:var(--shadow-md);transition:box-shadow .2s}.card-sheet{border-left:3px solid var(--accent);padding-left:calc(1.4rem - 3px)}.card-lead{color:var(--muted);margin:0 0 1rem;font-size:.9rem;line-height:1.55}.hint-muted{color:var(--muted);margin:0 0 1rem;font-size:.82rem;line-height:1.5}.flow-steps{counter-reset:flow;margin:0 0 1.1rem;padding:0;list-style:none}.flow-steps li{color:var(--text);margin-bottom:.8rem;padding-left:2.5rem;font-size:.9rem;line-height:1.55;position:relative}.flow-steps li:last-child{margin-bottom:0}.flow-steps li:before{counter-increment:flow;content:counter(flow);background:var(--accent-soft);width:1.65rem;height:1.65rem;color:var(--accent);border-radius:999px;justify-content:center;align-items:center;font-size:.76rem;font-weight:700;line-height:1;display:flex;position:absolute;top:0;left:0;box-shadow:0 1px 2px #2563eb1f}.flow-steps a{color:var(--accent);font-weight:600;text-decoration:none}.flow-steps a:hover{text-decoration:underline}.flow-step-kicker{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:.35rem;font-size:.78rem;font-weight:600;display:block}.sheet-direct-link{word-break:break-all;max-width:100%;color:var(--accent);font-size:.84rem;font-weight:600;line-height:1.45;text-decoration:none;display:inline-block}.sheet-direct-link:hover{text-decoration:underline}.flow-step-warn{color:var(--error);font-size:.88rem;line-height:1.55}.flow-step-warn code{font-size:.82em}label{color:var(--muted);margin-bottom:.4rem;font-size:.78rem;font-weight:600;display:block}input[type=text],input[type=password]{border-radius:var(--radius-sm);border:1px solid var(--border);width:100%;color:var(--text);background:#fafbfd;padding:.6rem .75rem;font-size:.95rem;transition:border-color .15s,box-shadow .15s}input[type=text]:focus,input[type=password]:focus{border-color:var(--accent);background:#fff;outline:none;box-shadow:0 0 0 3px #2563eb26}.row{margin-bottom:1rem}.row:last-child{margin-bottom:0}button:not(.tabs button){border-radius:var(--radius-sm);cursor:pointer;background:var(--accent);color:#fff;border:none;width:100%;padding:.7rem 1rem;font-size:.95rem;font-weight:600;transition:background .15s,transform 50ms;box-shadow:0 1px 2px #2563eb40}button:not(.tabs button):hover{filter:none;background:var(--accent-hover)}button:not(.tabs button):active{transform:scale(.99)}button:not(.tabs button).secondary{color:var(--text);border:1px solid var(--border);box-shadow:var(--shadow);background:#fff}button:not(.tabs button).secondary:hover{background:var(--bg);border-color:#c5d0dc}button:not(.tabs button).btn-copy{background:linear-gradient(180deg, var(--copy-hover-from) 0%, var(--copy-from) 100%);color:#fff;border:1px solid var(--copy-to);box-shadow:0 1px 3px #33415547,inset 0 1px #ffffff1f}button:not(.tabs button).btn-copy:hover:not(:disabled){background:linear-gradient(180deg, var(--copy-hover-top) 0%, var(--copy-hover-from) 100%);border-color:var(--copy-hover-to);color:#fff}button:not(.tabs button).btn-copy:active:not(:disabled){transform:scale(.99)}button:not(.tabs button).btn-copy:disabled{opacity:.45;cursor:not-allowed;filter:grayscale(.15)}button.ghost{background:var(--accent-soft);width:auto;color:var(--accent);box-shadow:none;border:1px solid #bfdbfe;flex:none;padding:.45rem .75rem;font-size:.82rem;font-weight:600}button.ghost:hover{color:var(--accent-hover);background:#dbeafe}button.ghost:disabled{opacity:.45;cursor:not-allowed}.card-title{color:var(--text);letter-spacing:-.01em;margin:0 0 .4rem;font-size:1.05rem;font-weight:700}.hint{color:var(--muted);margin:0 0 1.1rem;font-size:.84rem;line-height:1.5}.hint code{background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:.12rem .35rem;font-size:.82em}textarea.result,textarea.input-area{border-radius:var(--radius-sm);border:1px solid var(--border);width:100%;color:var(--text);resize:vertical;background:#fafbfd;margin-top:.75rem;padding:.65rem .75rem;font-family:ui-monospace,Cascadia Code,Consolas,monospace;font-size:.78rem;line-height:1.45;transition:border-color .15s,box-shadow .15s}textarea.input-area{min-height:6.5rem;margin-top:0}textarea.result:focus,textarea.input-area:focus{border-color:var(--accent);background:#fff;outline:none;box-shadow:0 0 0 3px #2563eb1f}.actions{flex-wrap:wrap;gap:.5rem;margin-top:.65rem;display:flex}.actions button{flex:1;min-width:8rem;margin-top:0}.chip-row{flex-wrap:wrap;gap:.5rem;margin-bottom:.85rem;display:flex}.chip-row button.ghost{flex:1;width:auto;min-width:10rem;margin-top:0}.decrypt-result{border-radius:var(--radius-sm);border:1px solid var(--border);background:#f8fafc;max-height:22rem;margin-top:1rem;padding:1rem;overflow:auto}.decrypt-result pre{white-space:pre-wrap;word-break:break-word;margin:0;font-family:ui-monospace,Consolas,monospace;font-size:.78rem;line-height:1.45}.match-banner{border-radius:var(--radius-sm);background:var(--success-soft);color:var(--success);border:1px solid #a7f3d0;margin-top:.85rem;padding:.65rem .85rem;font-size:.88rem;font-weight:600}.status-bar{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--card);box-shadow:var(--shadow-md);margin-top:1.25rem;padding:.85rem 1rem;font-size:.88rem;position:sticky;bottom:0}.status-bar.err{background:var(--error-soft);color:var(--error);border-color:#fecaca}.msg{color:var(--muted);white-space:pre-wrap;margin-top:.75rem;font-size:.88rem}.msg.err{color:var(--error)}code{font-family:ui-monospace,Consolas,monospace;font-size:.88em}.oauth-allowlist-card{margin-bottom:1.25rem}.oauth-allowlist-loc{margin-top:.25rem;margin-bottom:.75rem;font-size:.82rem}.oauth-allowlist-toolbar{flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:.75rem;display:flex}.oauth-allowlist-input{border:1px solid var(--border);border-radius:var(--radius-sm);flex:1;min-width:12rem;padding:.45rem .6rem;font-size:.9rem}.oauth-allowlist-table-wrap{overflow-x:auto}.oauth-allowlist-table{border-collapse:collapse;width:100%;font-size:.86rem}.oauth-allowlist-table th,.oauth-allowlist-table td{text-align:left;border-bottom:1px solid var(--border);vertical-align:middle;padding:.45rem .5rem}.oauth-allowlist-table th{color:var(--muted);font-weight:600}.oauth-allowlist-empty{color:var(--muted);font-style:italic}.oauth-allowlist-badge{color:var(--accent);text-transform:uppercase;margin-left:.35rem;font-size:.72rem;font-weight:700}.oauth-allowlist-remove{color:var(--error);border:1px solid var(--border);border-radius:var(--radius-sm);background:0 0;padding:.25rem .5rem;font-size:.8rem}.auth-card-lead{margin-top:.35rem}.auth-features{text-align:left;max-width:22rem;color:var(--muted);margin:1rem auto 1.2rem;padding-left:1.1rem;font-size:.88rem;line-height:1.55}.auth-features li{margin-bottom:.35rem}button.primary-btn,.primary-btn{border-radius:var(--radius-sm);background:var(--accent);color:#fff;cursor:pointer;box-shadow:var(--shadow);border:none;justify-content:center;align-items:center;margin-top:.25rem;padding:.65rem 1.35rem;font-size:.95rem;font-weight:600;transition:background .15s,transform .12s;display:inline-flex}button.primary-btn:hover,.primary-btn:hover{background:var(--accent-hover)}button.primary-btn:active,.primary-btn:active{transform:translateY(1px)}button.auth-btn-primary{background:var(--accent);color:#fff;border-color:var(--accent)}button.auth-btn-primary:hover{background:var(--accent-hover);color:#fff}button.auth-btn-quiet{color:var(--muted);border-color:var(--border);background:0 0}button.auth-btn-quiet:hover{background:var(--bg);color:var(--text)}.oauth-allowlist-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1rem;display:flex}.oauth-allowlist-title{margin-bottom:.35rem}.oauth-allowlist-intro{max-width:36rem;margin:0}.oauth-back-btn{flex-shrink:0}.oauth-allowlist-system-hint{margin-top:0;margin-bottom:.75rem;font-size:.86rem}.oauth-allowlist-toolbar-hint{margin:.35rem 0 .85rem;font-size:.82rem;line-height:1.45}.oauth-add-btn{align-self:center;margin:0}.oauth-allowlist-pill{text-transform:uppercase;letter-spacing:.04em;color:#14532d;white-space:nowrap;background:#dcfce7;border:1px solid #bbf7d0;border-radius:999px;padding:.12rem .45rem;font-size:.68rem;font-weight:700}.oauth-allowlist-pill-muted{color:var(--accent);background:var(--accent-soft);text-transform:none;letter-spacing:normal;border-color:#bfdbfe;font-size:.75rem;font-weight:600}.oauth-login-yes{color:#166534;font-weight:600}.oauth-login-no{color:var(--error);font-weight:600}.oauth-allowlist-row-protected{background:linear-gradient(90deg,#22c55e12,#0000)}.muted{color:var(--muted)}
