@terreno/mcp 57.19.2 → 57.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +393 -0
- package/README.md +32 -269
- package/dist/bootstrap.d.ts +12 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +77 -122
- package/dist/bootstrap.js.map +1 -1
- package/dist/docs/guidelines/ui/guidelines/core.md +1 -1
- package/dist/docs/resources/overview.md +4 -2
- package/dist/docs/resources/patterns.md +237 -176
- package/dist/docs/resources/ui.md +48 -17
- package/dist/docs/templates/bootstrap/frontend/app/(tabs)/profile.template.tsx +0 -26
- package/dist/docs/templates/bootstrap/frontend/app/_layout.template.tsx +3 -2
- package/dist/docs/templates/bootstrap/frontend/app/login.template.tsx +1 -1
- package/dist/docs/upgrades/57.20.0.md +238 -0
- package/dist/docs/versioned/next/approval-rubric.md +30 -12
- package/dist/docs/versioned/next/explanation/README.md +5 -0
- package/dist/docs/versioned/next/explanation/account-linking.md +169 -0
- package/dist/docs/versioned/next/explanation/admin-interface.md +1 -1
- package/dist/docs/versioned/next/explanation/agent-guidelines.md +173 -0
- package/dist/docs/versioned/next/explanation/ai-development-loop.md +196 -0
- package/dist/docs/versioned/next/explanation/authentication.md +45 -1
- package/dist/docs/versioned/next/explanation/consent-forms.md +105 -0
- package/dist/docs/versioned/next/explanation/example-coverage.md +1 -0
- package/dist/docs/versioned/next/explanation/local-first-data.md +1 -1
- package/dist/docs/versioned/next/explanation/organizations.md +37 -0
- package/dist/docs/versioned/next/explanation/planning-plugins.md +4 -0
- package/dist/docs/versioned/next/explanation/responsive-design.md +143 -0
- package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +11 -0
- package/dist/docs/versioned/next/explanation/schema-metadata.md +5 -0
- package/dist/docs/versioned/next/how-to/README.md +7 -2
- package/dist/docs/versioned/next/how-to/audit-log.md +22 -3
- package/dist/docs/versioned/next/how-to/automate-terreno-upgrades.md +169 -0
- package/dist/docs/versioned/next/how-to/build-list-detail-screens.md +160 -0
- package/dist/docs/versioned/next/how-to/circleci.md +15 -5
- package/dist/docs/versioned/next/how-to/configure-better-auth.md +673 -53
- package/dist/docs/versioned/next/how-to/create-a-terreno-app.md +8 -5
- package/dist/docs/versioned/next/how-to/debug-with-mcp.md +393 -23
- package/dist/docs/versioned/next/how-to/enable-mcp-oauth.md +54 -3
- package/dist/docs/versioned/next/how-to/migrate-rtk-to-syncdb.md +9 -0
- package/dist/docs/versioned/next/how-to/password-reset.md +1 -1
- package/dist/docs/versioned/next/how-to/recover-locked-out-user.md +112 -0
- package/dist/docs/versioned/next/how-to/run-tests-locally.md +37 -8
- package/dist/docs/versioned/next/how-to/set-up-social-login.md +424 -0
- package/dist/docs/versioned/next/how-to/set-up-terreno-mcp.md +241 -36
- package/dist/docs/versioned/next/how-to/sign-consent-on-behalf.md +139 -0
- package/dist/docs/versioned/next/how-to/upgrade-terreno.md +4 -0
- package/dist/docs/versioned/next/implementationPlans/ai-dev-loop-boost.md +47 -32
- package/dist/docs/versioned/next/implementationPlans/auth-experience.md +952 -0
- package/dist/docs/versioned/next/implementationPlans/consent-forms.md +8 -0
- package/dist/docs/versioned/next/implementationPlans/list-detail-layout.md +297 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/HANDOFF.md +211 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/boards/AnotherWay.html +121 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/boards/BackupCode.html +72 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/boards/Cancelled.html +87 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/boards/ContinueEmail.html +64 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/boards/FirstVisit.html +81 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/boards/Main.html +88 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/boards/ManageAccounts.html +77 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/boards/NotLinked.html +92 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/boards/SigningIn.html +60 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/boards/TwoFactor.html +76 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/boards/TwoFactorError.html +81 -0
- package/dist/docs/versioned/next/implementationPlans/login-redesign/boards/WrongPassword.html +69 -0
- package/dist/docs/versioned/next/implementationPlans/mcp-boost-parity.md +1 -1
- package/dist/docs/versioned/next/plans/2026-10-23-provisional-consent.md +297 -0
- package/dist/docs/versioned/next/plans/2026-10-29-fix-mcp-oauth-native-and-machine.md +68 -0
- package/dist/docs/versioned/next/reference/README.md +1 -0
- package/dist/docs/versioned/next/reference/account-security.md +700 -0
- package/dist/docs/versioned/next/reference/admin-backend.md +3 -1
- package/dist/docs/versioned/next/reference/admin-frontend.md +225 -1
- package/dist/docs/versioned/next/reference/api.md +461 -35
- package/dist/docs/versioned/next/reference/cli.md +1 -1
- package/dist/docs/versioned/next/reference/comms.md +8 -0
- package/dist/docs/versioned/next/reference/create-terreno-app.md +3 -1
- package/dist/docs/versioned/next/reference/environment-variables.md +9 -3
- package/dist/docs/versioned/next/reference/legacy/rtk.md +19 -3
- package/dist/docs/versioned/next/reference/lifecycle-plugin.md +6 -0
- package/dist/docs/versioned/next/reference/mcp-server.md +1158 -441
- package/dist/docs/versioned/next/reference/syncdb.md +8 -1
- package/dist/docs/versioned/next/reference/ui.md +1271 -27
- package/dist/docs/versioned/next/tasks/ai-dev-loop-boost.md +28 -16
- package/dist/docs/versioned/next/tutorials/README.md +4 -0
- package/dist/httpApp.d.ts +14 -0
- package/dist/httpApp.d.ts.map +1 -0
- package/dist/httpApp.js +99 -0
- package/dist/httpApp.js.map +1 -0
- package/dist/index.js +8 -90
- package/dist/index.js.map +1 -1
- package/dist/local/localTools.d.ts.map +1 -1
- package/dist/local/localTools.js +44 -14
- package/dist/local/localTools.js.map +1 -1
- package/dist/local/metro/metroDevSession.d.ts +18 -0
- package/dist/local/metro/metroDevSession.d.ts.map +1 -1
- package/dist/local/metro/metroDevSession.js +42 -3
- package/dist/local/metro/metroDevSession.js.map +1 -1
- package/dist/local/tools/databaseQuery.d.ts.map +1 -1
- package/dist/local/tools/databaseQuery.js +3 -13
- package/dist/local/tools/databaseQuery.js.map +1 -1
- package/dist/local/tools/databaseSchema.d.ts.map +1 -1
- package/dist/local/tools/databaseSchema.js +3 -13
- package/dist/local/tools/databaseSchema.js.map +1 -1
- package/dist/local/tools/localMongo.d.ts +10 -0
- package/dist/local/tools/localMongo.d.ts.map +1 -0
- package/dist/local/tools/localMongo.js +30 -0
- package/dist/local/tools/localMongo.js.map +1 -0
- package/dist/local/tools/runtime.d.ts +18 -2
- package/dist/local/tools/runtime.d.ts.map +1 -1
- package/dist/local/tools/runtime.js +75 -20
- package/dist/local/tools/runtime.js.map +1 -1
- package/dist/local/tools/syncDb.d.ts +11 -0
- package/dist/local/tools/syncDb.d.ts.map +1 -1
- package/dist/local/tools/syncDb.js +15 -3
- package/dist/local/tools/syncDb.js.map +1 -1
- package/dist/rateLimit.d.ts +35 -0
- package/dist/rateLimit.d.ts.map +1 -0
- package/dist/rateLimit.js +112 -0
- package/dist/rateLimit.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +42 -60
- package/dist/tools.js.map +1 -1
- package/package.json +4 -3
- package/src/docs/guidelines/ui/guidelines/core.md +1 -1
- package/src/docs/resources/overview.md +4 -2
- package/src/docs/resources/patterns.md +237 -176
- package/src/docs/resources/ui.md +48 -17
- package/src/docs/templates/bootstrap/frontend/app/(tabs)/profile.template.tsx +0 -26
- package/src/docs/templates/bootstrap/frontend/app/_layout.template.tsx +3 -2
- package/src/docs/templates/bootstrap/frontend/app/login.template.tsx +1 -1
- package/src/docs/upgrades/57.20.0.md +238 -0
- package/src/docs/versioned/next/approval-rubric.md +30 -12
- package/src/docs/versioned/next/explanation/README.md +5 -0
- package/src/docs/versioned/next/explanation/account-linking.md +169 -0
- package/src/docs/versioned/next/explanation/admin-interface.md +1 -1
- package/src/docs/versioned/next/explanation/agent-guidelines.md +173 -0
- package/src/docs/versioned/next/explanation/ai-development-loop.md +196 -0
- package/src/docs/versioned/next/explanation/authentication.md +45 -1
- package/src/docs/versioned/next/explanation/consent-forms.md +105 -0
- package/src/docs/versioned/next/explanation/example-coverage.md +1 -0
- package/src/docs/versioned/next/explanation/local-first-data.md +1 -1
- package/src/docs/versioned/next/explanation/organizations.md +37 -0
- package/src/docs/versioned/next/explanation/planning-plugins.md +4 -0
- package/src/docs/versioned/next/explanation/responsive-design.md +143 -0
- package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +11 -0
- package/src/docs/versioned/next/explanation/schema-metadata.md +5 -0
- package/src/docs/versioned/next/how-to/README.md +7 -2
- package/src/docs/versioned/next/how-to/audit-log.md +22 -3
- package/src/docs/versioned/next/how-to/automate-terreno-upgrades.md +169 -0
- package/src/docs/versioned/next/how-to/build-list-detail-screens.md +160 -0
- package/src/docs/versioned/next/how-to/circleci.md +15 -5
- package/src/docs/versioned/next/how-to/configure-better-auth.md +673 -53
- package/src/docs/versioned/next/how-to/create-a-terreno-app.md +8 -5
- package/src/docs/versioned/next/how-to/debug-with-mcp.md +393 -23
- package/src/docs/versioned/next/how-to/enable-mcp-oauth.md +54 -3
- package/src/docs/versioned/next/how-to/migrate-rtk-to-syncdb.md +9 -0
- package/src/docs/versioned/next/how-to/password-reset.md +1 -1
- package/src/docs/versioned/next/how-to/recover-locked-out-user.md +112 -0
- package/src/docs/versioned/next/how-to/run-tests-locally.md +37 -8
- package/src/docs/versioned/next/how-to/set-up-social-login.md +424 -0
- package/src/docs/versioned/next/how-to/set-up-terreno-mcp.md +241 -36
- package/src/docs/versioned/next/how-to/sign-consent-on-behalf.md +139 -0
- package/src/docs/versioned/next/how-to/upgrade-terreno.md +4 -0
- package/src/docs/versioned/next/implementationPlans/ai-dev-loop-boost.md +47 -32
- package/src/docs/versioned/next/implementationPlans/auth-experience.md +952 -0
- package/src/docs/versioned/next/implementationPlans/consent-forms.md +8 -0
- package/src/docs/versioned/next/implementationPlans/list-detail-layout.md +297 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/HANDOFF.md +211 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/boards/AnotherWay.html +121 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/boards/BackupCode.html +72 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/boards/Cancelled.html +87 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/boards/ContinueEmail.html +64 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/boards/FirstVisit.html +81 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/boards/Main.html +88 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/boards/ManageAccounts.html +77 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/boards/NotLinked.html +92 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/boards/SigningIn.html +60 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/boards/TwoFactor.html +76 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/boards/TwoFactorError.html +81 -0
- package/src/docs/versioned/next/implementationPlans/login-redesign/boards/WrongPassword.html +69 -0
- package/src/docs/versioned/next/implementationPlans/mcp-boost-parity.md +1 -1
- package/src/docs/versioned/next/plans/2026-10-23-provisional-consent.md +297 -0
- package/src/docs/versioned/next/plans/2026-10-29-fix-mcp-oauth-native-and-machine.md +68 -0
- package/src/docs/versioned/next/reference/README.md +1 -0
- package/src/docs/versioned/next/reference/account-security.md +700 -0
- package/src/docs/versioned/next/reference/admin-backend.md +3 -1
- package/src/docs/versioned/next/reference/admin-frontend.md +225 -1
- package/src/docs/versioned/next/reference/api.md +461 -35
- package/src/docs/versioned/next/reference/cli.md +1 -1
- package/src/docs/versioned/next/reference/comms.md +8 -0
- package/src/docs/versioned/next/reference/create-terreno-app.md +3 -1
- package/src/docs/versioned/next/reference/environment-variables.md +9 -3
- package/src/docs/versioned/next/reference/legacy/rtk.md +19 -3
- package/src/docs/versioned/next/reference/lifecycle-plugin.md +6 -0
- package/src/docs/versioned/next/reference/mcp-server.md +1158 -441
- package/src/docs/versioned/next/reference/syncdb.md +8 -1
- package/src/docs/versioned/next/reference/ui.md +1271 -27
- package/src/docs/versioned/next/tasks/ai-dev-loop-boost.md +28 -16
- package/src/docs/versioned/next/tutorials/README.md +4 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>Sign in: account not linked</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&family=Titillium+Web:wght@600;700&display=swap">
|
|
9
|
+
<style>
|
|
10
|
+
body{margin:0;background:#e9eef0;display:flex;justify-content:center;padding:24px 0}
|
|
11
|
+
a{color:#0a7092}a:hover{color:#095a75}
|
|
12
|
+
.screen{--surface-base:#ffffff;--surface-primary:#0e9dcd;--surface-sec-xl:#f2f9fa;--surface-sec-l:#b6cdd5;--surface-sec-xd:#092e3a;--surface-warningLight:#ffe3c6;--text-primary:#1c1c1c;--text-secondary:#686868;--text-extraLight:#949494;--text-link:#0a7092;--text-warning:#b14202;--text-sec-d:#092e3a;--border-default:#cdcdcd;--border-warning:#f36719;box-sizing:border-box;width:390px;min-height:100%;padding:56px 24px 32px;background:var(--surface-base);color:var(--text-primary);font-family:Nunito,system-ui,sans-serif;display:flex;flex-direction:column;gap:24px}
|
|
13
|
+
.logo{width:48px;height:48px;border-radius:16px;background:var(--surface-sec-xd);color:#fff;display:grid;place-items:center;font:700 12px/1 Nunito,sans-serif}
|
|
14
|
+
.h1{margin:0;font:700 32px/38px "Titillium Web",sans-serif}
|
|
15
|
+
.sub{margin:4px 0 0;font-size:16px;line-height:24px;color:var(--text-secondary)}
|
|
16
|
+
.banner{display:flex;gap:12px;align-items:flex-start;padding:16px;border-radius:16px;background:var(--surface-warningLight);border:1px solid var(--border-warning);color:var(--text-primary);font-size:16px;line-height:22px}
|
|
17
|
+
.banner .ico{flex:none;width:20px;height:20px;margin-top:1px;color:var(--text-warning)}
|
|
18
|
+
.banner-body{flex:1;display:flex;flex-direction:column;gap:12px}
|
|
19
|
+
.banner-title{margin:0;font-weight:700}
|
|
20
|
+
.banner p{margin:0}
|
|
21
|
+
.btn-sm{align-self:flex-start;height:36px;padding:0 16px;border-radius:360px;border:1px solid var(--text-primary);background:none;font:700 14px/1 Nunito,sans-serif;color:var(--text-primary);cursor:pointer}
|
|
22
|
+
.link{font:700 16px/24px Nunito,sans-serif;color:var(--text-link);text-decoration:none;background:none;border:0;padding:0;cursor:pointer}
|
|
23
|
+
.btn{position:relative;display:flex;align-items:center;justify-content:center;gap:10px;width:100%;height:48px;box-sizing:border-box;padding:0 20px;border-radius:360px;border:1px solid var(--border-default);background:var(--surface-base);color:var(--text-primary);font:700 16px/1 Nunito,sans-serif;cursor:pointer}
|
|
24
|
+
.btn .ico{position:absolute;left:20px;width:18px;height:18px}
|
|
25
|
+
.btn-primary{background:var(--surface-primary);border-color:var(--surface-primary);color:#fff;font-size:19px}
|
|
26
|
+
.stack{display:flex;flex-direction:column;gap:12px}
|
|
27
|
+
.divider{display:flex;align-items:center;gap:12px;font-size:12px;line-height:16px;color:var(--text-secondary)}
|
|
28
|
+
.divider::before,.divider::after{content:"";flex:1;height:1px;background:var(--border-default)}
|
|
29
|
+
.form{display:flex;flex-direction:column;gap:16px}
|
|
30
|
+
.field{display:flex;flex-direction:column;gap:6px}
|
|
31
|
+
.lbl-row{display:flex;justify-content:space-between;align-items:baseline}
|
|
32
|
+
.lbl{font:600 16px/24px Nunito,sans-serif}
|
|
33
|
+
.input{box-sizing:border-box;width:100%;height:48px;padding:0 14px;border:1px solid var(--border-default);border-radius:4px;background:var(--surface-base);font:16px Nunito,sans-serif;color:var(--text-primary)}
|
|
34
|
+
.input::placeholder{color:var(--text-extraLight)}
|
|
35
|
+
.foot{margin-top:auto;text-align:center;font-size:16px;line-height:24px;color:var(--text-secondary)}
|
|
36
|
+
</style>
|
|
37
|
+
<main class="screen">
|
|
38
|
+
<div class="logo" aria-label="Your app logo">LOGO</div>
|
|
39
|
+
<div>
|
|
40
|
+
<h1 class="h1">Sign in</h1>
|
|
41
|
+
<p class="sub">Choose how you want to sign in.</p>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<div class="banner" role="alert">
|
|
45
|
+
<svg class="ico" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3 2 20h20L12 3z"></path><path d="M12 10v4M12 17h.01"></path></svg>
|
|
46
|
+
<div class="banner-body">
|
|
47
|
+
<p class="banner-title">You already have an account</p>
|
|
48
|
+
<p>That email is already used with a password. Sign in with email, then link GitHub from Security.</p>
|
|
49
|
+
<button class="btn-sm" type="button">Sign in with email</button>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div class="stack">
|
|
54
|
+
<button class="btn" type="button">
|
|
55
|
+
<svg class="ico" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z"></path></svg>
|
|
56
|
+
Continue with Google
|
|
57
|
+
</button>
|
|
58
|
+
<button class="btn" type="button">
|
|
59
|
+
<svg class="ico" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701"></path></svg>
|
|
60
|
+
Continue with Apple
|
|
61
|
+
</button>
|
|
62
|
+
<button class="btn" type="button">
|
|
63
|
+
<svg class="ico" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path></svg>
|
|
64
|
+
Continue with GitHub
|
|
65
|
+
</button>
|
|
66
|
+
<button class="btn" type="button">
|
|
67
|
+
<svg class="ico" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="7.5" cy="15.5" r="4.5"></circle><path d="M10.7 12.3 21 2M17 6l3 3M14.5 8.5l2.5 2.5"></path></svg>
|
|
68
|
+
Sign in with a passkey
|
|
69
|
+
</button>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<div class="divider">or use your email</div>
|
|
73
|
+
|
|
74
|
+
<form class="form">
|
|
75
|
+
<div class="field">
|
|
76
|
+
<label class="lbl" for="nl-email">Email</label>
|
|
77
|
+
<input class="input" id="nl-email" type="email" placeholder="you@example.com" autocomplete="username webauthn">
|
|
78
|
+
</div>
|
|
79
|
+
<div class="field">
|
|
80
|
+
<div class="lbl-row">
|
|
81
|
+
<label class="lbl" for="nl-pw">Password</label>
|
|
82
|
+
<a class="link" href="#" style="font-size: 14px">Forgot password?</a>
|
|
83
|
+
</div>
|
|
84
|
+
<input class="input" id="nl-pw" type="password" autocomplete="current-password">
|
|
85
|
+
</div>
|
|
86
|
+
<button class="btn btn-primary" type="submit">Sign in</button>
|
|
87
|
+
</form>
|
|
88
|
+
|
|
89
|
+
<p class="foot">New here? <a href="#">Create an account</a></p>
|
|
90
|
+
</main>
|
|
91
|
+
</body>
|
|
92
|
+
</html>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>Sign in: signing in</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&family=Titillium+Web:wght@600;700&display=swap">
|
|
9
|
+
<style>
|
|
10
|
+
body{margin:0;background:#e9eef0;display:flex;justify-content:center;padding:24px 0}
|
|
11
|
+
a{color:#0a7092}a:hover{color:#095a75}
|
|
12
|
+
.screen{--surface-base:#ffffff;--surface-alt:#f2f2f2;--surface-primary:#0e9dcd;--surface-sec-xl:#f2f9fa;--surface-sec-l:#b6cdd5;--text-primary:#1c1c1c;--text-secondary:#686868;--text-extraLight:#949494;--text-link:#0a7092;--border-default:#cdcdcd;box-sizing:border-box;width:390px;min-height:100%;padding:24px 24px 32px;background:var(--surface-base);color:var(--text-primary);font-family:Nunito,system-ui,sans-serif;display:flex;flex-direction:column;gap:24px}
|
|
13
|
+
.back{display:inline-flex;align-items:center;gap:4px;height:44px;align-self:flex-start;margin-left:-8px;padding:0 8px;border:0;background:none;font:700 16px/1 Nunito,sans-serif;color:var(--text-secondary);cursor:default}
|
|
14
|
+
.back svg{width:20px;height:20px}
|
|
15
|
+
.h1{margin:0;font:700 32px/38px "Titillium Web",sans-serif}
|
|
16
|
+
.who{display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:16px;background:var(--surface-sec-xl);border:1px solid var(--surface-sec-l)}
|
|
17
|
+
.avatar{flex:none;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;color:#fff;font:700 18px/1 "Titillium Web",sans-serif}
|
|
18
|
+
.who-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
|
|
19
|
+
.who-name{font-weight:700;font-size:16px;line-height:22px}
|
|
20
|
+
.who-meta{font-size:12px;line-height:16px;color:var(--text-secondary)}
|
|
21
|
+
.form{display:flex;flex-direction:column;gap:16px}
|
|
22
|
+
.field{display:flex;flex-direction:column;gap:6px}
|
|
23
|
+
.lbl{font:600 16px/24px Nunito,sans-serif}
|
|
24
|
+
.input{box-sizing:border-box;width:100%;height:48px;padding:0 14px;border:1px solid var(--border-default);border-radius:4px;background:var(--surface-alt);font:16px Nunito,sans-serif;color:var(--text-secondary)}
|
|
25
|
+
.btn{position:relative;display:flex;align-items:center;justify-content:center;gap:10px;width:100%;height:48px;box-sizing:border-box;padding:0 20px;border-radius:360px;border:1px solid var(--border-default);font:700 16px/1 Nunito,sans-serif}
|
|
26
|
+
.btn-primary{background:var(--surface-primary);border-color:var(--surface-primary);color:#fff;font-size:19px;cursor:progress}
|
|
27
|
+
.spin{width:20px;height:20px}
|
|
28
|
+
.foot{margin-top:auto;text-align:center;font-size:16px;line-height:24px;color:var(--text-secondary)}
|
|
29
|
+
</style>
|
|
30
|
+
<main class="screen" aria-busy="true">
|
|
31
|
+
<button class="back" type="button" disabled>
|
|
32
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m15 6-6 6 6 6"></path></svg>
|
|
33
|
+
All sign-in options
|
|
34
|
+
</button>
|
|
35
|
+
|
|
36
|
+
<h1 class="h1">Enter your password</h1>
|
|
37
|
+
|
|
38
|
+
<div class="who">
|
|
39
|
+
<span class="avatar" style="background: #0a7092" aria-hidden="true">J</span>
|
|
40
|
+
<span class="who-body">
|
|
41
|
+
<span class="who-name">Josh Gachnang</span>
|
|
42
|
+
<span class="who-meta">josh@example.com</span>
|
|
43
|
+
</span>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<form class="form">
|
|
47
|
+
<div class="field">
|
|
48
|
+
<label class="lbl" for="si-pw">Password</label>
|
|
49
|
+
<input class="input" id="si-pw" type="password" value="password123" disabled>
|
|
50
|
+
</div>
|
|
51
|
+
<button class="btn btn-primary" type="submit" disabled>
|
|
52
|
+
<svg class="spin" viewBox="0 0 24 24" fill="none" aria-hidden="true"><circle cx="12" cy="12" r="9" stroke="currentColor" stroke-opacity="0.35" stroke-width="3"></circle><path d="M21 12a9 9 0 0 0-9-9" stroke="currentColor" stroke-width="3" stroke-linecap="round"></path></svg>
|
|
53
|
+
Signing in
|
|
54
|
+
</button>
|
|
55
|
+
</form>
|
|
56
|
+
|
|
57
|
+
<p class="foot">New here? <a href="#">Create an account</a></p>
|
|
58
|
+
</main>
|
|
59
|
+
</body>
|
|
60
|
+
</html>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>Two-factor: authenticator code</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&family=Titillium+Web:wght@600;700&display=swap">
|
|
9
|
+
<style>
|
|
10
|
+
body{margin:0;background:#e9eef0;display:flex;justify-content:center;padding:24px 0}
|
|
11
|
+
a{color:#0a7092}a:hover{color:#095a75}
|
|
12
|
+
.screen{--surface-base:#ffffff;--surface-primary:#0e9dcd;--surface-sec-xl:#f2f9fa;--surface-sec-l:#b6cdd5;--text-primary:#1c1c1c;--text-secondary:#686868;--text-link:#0a7092;--text-sec-d:#092e3a;--border-default:#cdcdcd;--border-focus:#73cae8;box-sizing:border-box;width:390px;min-height:100%;padding:24px 24px 32px;background:var(--surface-base);color:var(--text-primary);font-family:Nunito,system-ui,sans-serif;display:flex;flex-direction:column;gap:24px}
|
|
13
|
+
.back{display:inline-flex;align-items:center;gap:4px;height:44px;align-self:flex-start;margin-left:-8px;padding:0 8px;border:0;background:none;font:700 16px/1 Nunito,sans-serif;color:var(--text-link);cursor:pointer}
|
|
14
|
+
.back svg{width:20px;height:20px}
|
|
15
|
+
.badge{width:56px;height:56px;border-radius:16px;display:grid;place-items:center;background:var(--surface-sec-xl);color:var(--text-sec-d)}
|
|
16
|
+
.badge svg{width:28px;height:28px}
|
|
17
|
+
.h1{margin:0;font:700 32px/38px "Titillium Web",sans-serif}
|
|
18
|
+
.sub{margin:8px 0 0;font-size:16px;line-height:24px;color:var(--text-secondary)}
|
|
19
|
+
.otp{display:flex;gap:8px;justify-content:space-between}
|
|
20
|
+
.digit{box-sizing:border-box;width:48px;height:56px;border:1px solid var(--border-default);border-radius:4px;text-align:center;font:700 24px/1 "Titillium Web",sans-serif;color:var(--text-primary);background:var(--surface-base)}
|
|
21
|
+
.digit-focus{border-color:var(--surface-primary);box-shadow:0 0 0 3px var(--border-focus)}
|
|
22
|
+
.check{display:flex;gap:12px;align-items:flex-start;font-size:16px;line-height:22px;cursor:pointer}
|
|
23
|
+
.check input{flex:none;width:20px;height:20px;margin:1px 0 0;accent-color:#0e9dcd}
|
|
24
|
+
.check small{display:block;font-size:12px;line-height:16px;color:var(--text-secondary)}
|
|
25
|
+
.btn{display:flex;align-items:center;justify-content:center;width:100%;height:48px;box-sizing:border-box;border-radius:360px;border:1px solid var(--border-default);background:var(--surface-base);color:var(--text-primary);font:700 16px/1 Nunito,sans-serif;cursor:pointer}
|
|
26
|
+
.btn-primary{background:var(--surface-primary);border-color:var(--surface-primary);color:#fff;font-size:19px}
|
|
27
|
+
.alt{display:flex;flex-direction:column;align-items:center;gap:4px}
|
|
28
|
+
.link{font:700 16px/24px Nunito,sans-serif;color:var(--text-link);text-decoration:none;background:none;border:0;padding:10px 0;cursor:pointer}
|
|
29
|
+
.foot{margin-top:auto;text-align:center}
|
|
30
|
+
</style>
|
|
31
|
+
<main class="screen">
|
|
32
|
+
<button class="back" type="button">
|
|
33
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m15 6-6 6 6 6"></path></svg>
|
|
34
|
+
Back
|
|
35
|
+
</button>
|
|
36
|
+
|
|
37
|
+
<div class="badge" aria-hidden="true">
|
|
38
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3 4 6v6c0 4.5 3.4 8.3 8 9 4.6-.7 8-4.5 8-9V6l-8-3z"></path><path d="m9 12 2 2 4-4"></path></svg>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<div>
|
|
42
|
+
<h1 class="h1">Enter your code</h1>
|
|
43
|
+
<p class="sub">Open your authenticator app and enter the 6-digit code for j***@n***.io.</p>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<form style="display: flex; flex-direction: column; gap: 24px">
|
|
47
|
+
<fieldset style="border: 0; margin: 0; padding: 0">
|
|
48
|
+
<legend style="position: absolute; width: 1px; height: 1px; overflow: hidden">Authentication code</legend>
|
|
49
|
+
<div class="otp">
|
|
50
|
+
<input class="digit" value="4" inputmode="numeric" maxlength="1" aria-label="Digit 1" autocomplete="one-time-code">
|
|
51
|
+
<input class="digit" value="8" inputmode="numeric" maxlength="1" aria-label="Digit 2">
|
|
52
|
+
<input class="digit" value="2" inputmode="numeric" maxlength="1" aria-label="Digit 3">
|
|
53
|
+
<input class="digit digit-focus" value="" inputmode="numeric" maxlength="1" aria-label="Digit 4">
|
|
54
|
+
<input class="digit" value="" inputmode="numeric" maxlength="1" aria-label="Digit 5">
|
|
55
|
+
<input class="digit" value="" inputmode="numeric" maxlength="1" aria-label="Digit 6">
|
|
56
|
+
</div>
|
|
57
|
+
</fieldset>
|
|
58
|
+
|
|
59
|
+
<label class="check">
|
|
60
|
+
<input type="checkbox" checked>
|
|
61
|
+
<span>Trust this device<small>We won't ask for a code here for 30 days.</small></span>
|
|
62
|
+
</label>
|
|
63
|
+
|
|
64
|
+
<button class="btn btn-primary" type="submit">Verify</button>
|
|
65
|
+
</form>
|
|
66
|
+
|
|
67
|
+
<div class="alt">
|
|
68
|
+
<button class="link" type="button">Use a backup code instead</button>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div class="foot">
|
|
72
|
+
<button class="link" type="button" style="color: #686868">Sign in a different way</button>
|
|
73
|
+
</div>
|
|
74
|
+
</main>
|
|
75
|
+
</body>
|
|
76
|
+
</html>
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>Two-factor: wrong code</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&family=Titillium+Web:wght@600;700&display=swap">
|
|
9
|
+
<style>
|
|
10
|
+
body{margin:0;background:#e9eef0;display:flex;justify-content:center;padding:24px 0}
|
|
11
|
+
a{color:#0a7092}a:hover{color:#095a75}
|
|
12
|
+
.screen{--surface-base:#ffffff;--surface-primary:#0e9dcd;--surface-sec-xl:#f2f9fa;--text-primary:#1c1c1c;--text-secondary:#686868;--text-link:#0a7092;--text-error:#bd1111;--text-sec-d:#092e3a;--border-default:#cdcdcd;--border-error:#d33232;box-sizing:border-box;width:390px;min-height:100%;padding:24px 24px 32px;background:var(--surface-base);color:var(--text-primary);font-family:Nunito,system-ui,sans-serif;display:flex;flex-direction:column;gap:24px}
|
|
13
|
+
.back{display:inline-flex;align-items:center;gap:4px;height:44px;align-self:flex-start;margin-left:-8px;padding:0 8px;border:0;background:none;font:700 16px/1 Nunito,sans-serif;color:var(--text-link);cursor:pointer}
|
|
14
|
+
.back svg{width:20px;height:20px}
|
|
15
|
+
.badge{width:56px;height:56px;border-radius:16px;display:grid;place-items:center;background:var(--surface-sec-xl);color:var(--text-sec-d)}
|
|
16
|
+
.badge svg{width:28px;height:28px}
|
|
17
|
+
.h1{margin:0;font:700 32px/38px "Titillium Web",sans-serif}
|
|
18
|
+
.sub{margin:8px 0 0;font-size:16px;line-height:24px;color:var(--text-secondary)}
|
|
19
|
+
.otp{display:flex;gap:8px;justify-content:space-between}
|
|
20
|
+
.digit{box-sizing:border-box;width:48px;height:56px;border:2px solid var(--border-error);border-radius:4px;text-align:center;font:700 24px/1 "Titillium Web",sans-serif;color:var(--text-primary);background:var(--surface-base)}
|
|
21
|
+
.err{display:flex;gap:6px;align-items:flex-start;margin:8px 0 0;font-size:14px;line-height:20px;color:var(--text-error)}
|
|
22
|
+
.err svg{flex:none;width:16px;height:16px;margin-top:2px}
|
|
23
|
+
.check{display:flex;gap:12px;align-items:flex-start;font-size:16px;line-height:22px;cursor:pointer}
|
|
24
|
+
.check input{flex:none;width:20px;height:20px;margin:1px 0 0;accent-color:#0e9dcd}
|
|
25
|
+
.check small{display:block;font-size:12px;line-height:16px;color:var(--text-secondary)}
|
|
26
|
+
.btn{display:flex;align-items:center;justify-content:center;width:100%;height:48px;box-sizing:border-box;border-radius:360px;border:1px solid var(--border-default);background:var(--surface-base);color:var(--text-primary);font:700 16px/1 Nunito,sans-serif;cursor:pointer}
|
|
27
|
+
.btn-primary{background:var(--surface-primary);border-color:var(--surface-primary);color:#fff;font-size:19px}
|
|
28
|
+
.alt{display:flex;flex-direction:column;align-items:center;gap:4px}
|
|
29
|
+
.link{font:700 16px/24px Nunito,sans-serif;color:var(--text-link);text-decoration:none;background:none;border:0;padding:10px 0;cursor:pointer}
|
|
30
|
+
.foot{margin-top:auto;text-align:center}
|
|
31
|
+
</style>
|
|
32
|
+
<main class="screen">
|
|
33
|
+
<button class="back" type="button">
|
|
34
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m15 6-6 6 6 6"></path></svg>
|
|
35
|
+
Back
|
|
36
|
+
</button>
|
|
37
|
+
|
|
38
|
+
<div class="badge" aria-hidden="true">
|
|
39
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3 4 6v6c0 4.5 3.4 8.3 8 9 4.6-.7 8-4.5 8-9V6l-8-3z"></path><path d="m9 12 2 2 4-4"></path></svg>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<div>
|
|
43
|
+
<h1 class="h1">Enter your code</h1>
|
|
44
|
+
<p class="sub">Open your authenticator app and enter the 6-digit code for j***@n***.io.</p>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<form style="display: flex; flex-direction: column; gap: 24px">
|
|
48
|
+
<fieldset style="border: 0; margin: 0; padding: 0">
|
|
49
|
+
<legend style="position: absolute; width: 1px; height: 1px; overflow: hidden">Authentication code</legend>
|
|
50
|
+
<div class="otp">
|
|
51
|
+
<input class="digit" value="4" inputmode="numeric" maxlength="1" aria-label="Digit 1" aria-invalid="true" aria-describedby="tfe-err">
|
|
52
|
+
<input class="digit" value="8" inputmode="numeric" maxlength="1" aria-label="Digit 2" aria-invalid="true">
|
|
53
|
+
<input class="digit" value="2" inputmode="numeric" maxlength="1" aria-label="Digit 3" aria-invalid="true">
|
|
54
|
+
<input class="digit" value="1" inputmode="numeric" maxlength="1" aria-label="Digit 4" aria-invalid="true">
|
|
55
|
+
<input class="digit" value="0" inputmode="numeric" maxlength="1" aria-label="Digit 5" aria-invalid="true">
|
|
56
|
+
<input class="digit" value="7" inputmode="numeric" maxlength="1" aria-label="Digit 6" aria-invalid="true">
|
|
57
|
+
</div>
|
|
58
|
+
<p class="err" id="tfe-err" role="alert">
|
|
59
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"></circle><path d="M12 7v6M12 16h.01"></path></svg>
|
|
60
|
+
That code didn't work. Codes change every 30 seconds, so enter the one your app shows now.
|
|
61
|
+
</p>
|
|
62
|
+
</fieldset>
|
|
63
|
+
|
|
64
|
+
<label class="check">
|
|
65
|
+
<input type="checkbox" checked>
|
|
66
|
+
<span>Trust this device<small>We won't ask for a code here for 30 days.</small></span>
|
|
67
|
+
</label>
|
|
68
|
+
|
|
69
|
+
<button class="btn btn-primary" type="submit">Verify</button>
|
|
70
|
+
</form>
|
|
71
|
+
|
|
72
|
+
<div class="alt">
|
|
73
|
+
<button class="link" type="button">Use a backup code instead</button>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<div class="foot">
|
|
77
|
+
<button class="link" type="button" style="color: #686868">Sign in a different way</button>
|
|
78
|
+
</div>
|
|
79
|
+
</main>
|
|
80
|
+
</body>
|
|
81
|
+
</html>
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>Sign in: wrong password</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&family=Titillium+Web:wght@600;700&display=swap">
|
|
9
|
+
<style>
|
|
10
|
+
body{margin:0;background:#e9eef0;display:flex;justify-content:center;padding:24px 0}
|
|
11
|
+
a{color:#0a7092}a:hover{color:#095a75}
|
|
12
|
+
.screen{--surface-base:#ffffff;--surface-primary:#0e9dcd;--surface-sec-xl:#f2f9fa;--surface-sec-l:#b6cdd5;--text-primary:#1c1c1c;--text-secondary:#686868;--text-link:#0a7092;--text-error:#bd1111;--border-default:#cdcdcd;--border-error:#d33232;box-sizing:border-box;width:390px;min-height:100%;padding:24px 24px 32px;background:var(--surface-base);color:var(--text-primary);font-family:Nunito,system-ui,sans-serif;display:flex;flex-direction:column;gap:24px}
|
|
13
|
+
.back{display:inline-flex;align-items:center;gap:4px;height:44px;align-self:flex-start;margin-left:-8px;padding:0 8px;border:0;background:none;font:700 16px/1 Nunito,sans-serif;color:var(--text-link);cursor:pointer}
|
|
14
|
+
.back svg{width:20px;height:20px}
|
|
15
|
+
.h1{margin:0;font:700 32px/38px "Titillium Web",sans-serif}
|
|
16
|
+
.who{display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:16px;background:var(--surface-sec-xl);border:1px solid var(--surface-sec-l)}
|
|
17
|
+
.avatar{flex:none;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;color:#fff;font:700 18px/1 "Titillium Web",sans-serif}
|
|
18
|
+
.who-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
|
|
19
|
+
.who-name{font-weight:700;font-size:16px;line-height:22px}
|
|
20
|
+
.who-meta{font-size:12px;line-height:16px;color:var(--text-secondary)}
|
|
21
|
+
.link{font:700 16px/24px Nunito,sans-serif;color:var(--text-link);text-decoration:none;background:none;border:0;padding:0;cursor:pointer}
|
|
22
|
+
.form{display:flex;flex-direction:column;gap:16px}
|
|
23
|
+
.field{display:flex;flex-direction:column;gap:6px}
|
|
24
|
+
.lbl-row{display:flex;justify-content:space-between;align-items:baseline}
|
|
25
|
+
.lbl{font:600 16px/24px Nunito,sans-serif}
|
|
26
|
+
.input{box-sizing:border-box;width:100%;height:48px;padding:0 14px;border:1px solid var(--border-default);border-radius:4px;background:var(--surface-base);font:16px Nunito,sans-serif;color:var(--text-primary)}
|
|
27
|
+
.input-error{border:2px solid var(--border-error);padding:0 13px}
|
|
28
|
+
.err{display:flex;gap:6px;align-items:flex-start;margin:0;font-size:14px;line-height:20px;color:var(--text-error)}
|
|
29
|
+
.err svg{flex:none;width:16px;height:16px;margin-top:2px}
|
|
30
|
+
.btn{position:relative;display:flex;align-items:center;justify-content:center;gap:10px;width:100%;height:48px;box-sizing:border-box;padding:0 20px;border-radius:360px;border:1px solid var(--border-default);background:var(--surface-base);color:var(--text-primary);font:700 16px/1 Nunito,sans-serif;cursor:pointer}
|
|
31
|
+
.btn-primary{background:var(--surface-primary);border-color:var(--surface-primary);color:#fff;font-size:19px}
|
|
32
|
+
.foot{margin-top:auto;text-align:center;font-size:16px;line-height:24px;color:var(--text-secondary)}
|
|
33
|
+
</style>
|
|
34
|
+
<main class="screen">
|
|
35
|
+
<button class="back" type="button">
|
|
36
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m15 6-6 6 6 6"></path></svg>
|
|
37
|
+
All sign-in options
|
|
38
|
+
</button>
|
|
39
|
+
|
|
40
|
+
<h1 class="h1">Enter your password</h1>
|
|
41
|
+
|
|
42
|
+
<div class="who">
|
|
43
|
+
<span class="avatar" style="background: #0a7092" aria-hidden="true">J</span>
|
|
44
|
+
<span class="who-body">
|
|
45
|
+
<span class="who-name">Josh Gachnang</span>
|
|
46
|
+
<span class="who-meta">josh@example.com</span>
|
|
47
|
+
</span>
|
|
48
|
+
<button class="link" type="button" style="font-size: 14px">Not you?</button>
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<form class="form">
|
|
52
|
+
<div class="field">
|
|
53
|
+
<div class="lbl-row">
|
|
54
|
+
<label class="lbl" for="wp-pw">Password</label>
|
|
55
|
+
<a class="link" href="#" style="font-size: 14px">Forgot password?</a>
|
|
56
|
+
</div>
|
|
57
|
+
<input class="input input-error" id="wp-pw" type="password" value="password123" aria-invalid="true" aria-describedby="wp-err">
|
|
58
|
+
<p class="err" id="wp-err">
|
|
59
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"></circle><path d="M12 7v6M12 16h.01"></path></svg>
|
|
60
|
+
That password doesn't match. Try again or reset it.
|
|
61
|
+
</p>
|
|
62
|
+
</div>
|
|
63
|
+
<button class="btn btn-primary" type="submit">Sign in</button>
|
|
64
|
+
</form>
|
|
65
|
+
|
|
66
|
+
<p class="foot">New here? <a href="#">Create an account</a></p>
|
|
67
|
+
</main>
|
|
68
|
+
</body>
|
|
69
|
+
</html>
|
|
@@ -113,7 +113,7 @@ Boost keys guidelines by package major version (`.ai/laravel/11/`, `12/`). Terre
|
|
|
113
113
|
```jsonc
|
|
114
114
|
{
|
|
115
115
|
"mcpServers": {
|
|
116
|
-
"terreno": { "type": "http", "url": "https://mcp.terreno.
|
|
116
|
+
"terreno": { "type": "http", "url": "https://mcp.terreno.app/mcp" },
|
|
117
117
|
"terreno-local": { "command": "bunx", "args": ["terreno-mcp-local"] }
|
|
118
118
|
}
|
|
119
119
|
}
|