site: first page on Teahub pages
This commit is contained in:
1 parent
88572faff4
commit
1b0d14c18c
1 file changed
+73
+73
@@ -0,0 +1,73 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#f5f3ee" />
|
||||
<meta name="description" content="Phast — connect your agent, compose what you need, launch when it's worth keeping." />
|
||||
<title>phast</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root{--paper:#f5f3ee;--ink:#121211;--muted:#77746c;--line:rgba(18,18,17,.15);--signal:#ff4d00;--pad:clamp(22px,3vw,48px)}
|
||||
*{box-sizing:border-box}html,body{min-height:100%}
|
||||
body{margin:0;background:var(--paper);color:var(--ink);font-family:"Manrope",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}
|
||||
button,a{font:inherit}a{color:inherit;text-decoration:none}
|
||||
.shell{min-height:100svh;padding:var(--pad);display:grid;grid-template-rows:auto 1fr auto;gap:28px;overflow:hidden}
|
||||
.masthead,.footer{display:flex;align-items:center;justify-content:space-between;gap:24px}
|
||||
.brand{position:relative;display:inline-flex;align-items:baseline;font-size:clamp(27px,2.2vw,38px);font-weight:700;letter-spacing:-.075em;line-height:1}
|
||||
.brand::after{content:"";position:absolute;left:0;right:0;bottom:-8px;height:2px;background:var(--ink);transform:scaleX(0);transform-origin:right;transition:transform 220ms cubic-bezier(.2,.8,.2,1)}
|
||||
.brand:hover::after{transform:scaleX(1);transform-origin:left}.brand-dot{color:var(--signal)}
|
||||
.tiny-link{border:0;padding:0;margin:0;background:transparent;color:inherit;cursor:pointer;display:grid;justify-items:end;gap:2px}
|
||||
.tiny-label{color:var(--muted);font-size:10px;letter-spacing:.09em;text-transform:uppercase}
|
||||
.tiny-value{font-family:"DM Mono",ui-monospace,monospace;font-size:12px;border-bottom:1px solid var(--line);transition:border-color 160ms ease}
|
||||
.tiny-link:hover .tiny-value{border-color:var(--ink)}
|
||||
.hero{align-self:center;width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:clamp(44px,8vw,130px)}
|
||||
.hero-copy{min-width:0}.eyebrow{margin:0 0 clamp(18px,2vw,28px);font-family:"DM Mono",ui-monospace,monospace;font-size:clamp(10px,.8vw,12px);letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
|
||||
h1{margin:0;max-width:8.5ch;font-size:clamp(62px,10.5vw,176px);font-weight:500;line-height:.82;letter-spacing:-.087em}
|
||||
.speed-word{position:relative;display:inline-block;cursor:default}
|
||||
.speed-word::after{content:"";position:absolute;height:.075em;left:.08em;right:-.16em;bottom:-.085em;background:var(--signal);transform:scaleX(.16);transform-origin:left;transition:transform 280ms cubic-bezier(.2,.85,.2,1)}
|
||||
.speed-word:hover::after{transform:scaleX(1)}
|
||||
.action-stack{width:min(100%,360px);padding-bottom:.45vw}
|
||||
.primary-action{min-height:74px;padding:0 22px 0 24px;background:var(--ink);color:var(--paper);display:flex;align-items:center;justify-content:space-between;gap:26px;border:1px solid var(--ink);font-size:16px;font-weight:600;letter-spacing:-.02em;transition:transform 160ms ease,background 160ms ease,color 160ms ease}
|
||||
.primary-action:hover{background:var(--signal);border-color:var(--signal);transform:translateY(-3px)}.primary-action:active{transform:translateY(0)}
|
||||
.arrow{font-size:24px;line-height:1;transition:transform 160ms ease}.primary-action:hover .arrow{transform:translate(3px,-3px)}
|
||||
.microcopy{margin:14px 0 0;max-width:32ch;color:var(--muted);font-size:12px;line-height:1.5}
|
||||
.footer{font-family:"DM Mono",ui-monospace,monospace;font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
|
||||
.status{display:inline-flex;align-items:center;gap:8px}.status i{width:6px;height:6px;border-radius:50%;background:var(--signal);box-shadow:0 0 0 0 rgba(255,77,0,.35);animation:pulse 2.4s ease-out infinite}.manifesto{color:var(--ink)}
|
||||
.toast{position:fixed;top:var(--pad);left:50%;transform:translate(-50%,-12px);opacity:0;pointer-events:none;background:var(--ink);color:var(--paper);padding:9px 12px;font-family:"DM Mono",ui-monospace,monospace;font-size:11px;text-transform:uppercase;letter-spacing:.06em;transition:opacity 140ms ease,transform 140ms ease}
|
||||
.toast.show{opacity:1;transform:translate(-50%,0)}
|
||||
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(255,77,0,.34)}55%,100%{box-shadow:0 0 0 9px rgba(255,77,0,0)}}
|
||||
@media(max-width:800px){.shell{min-height:100dvh}.hero{grid-template-columns:1fr;align-items:start;gap:clamp(48px,10vh,88px)}h1{font-size:clamp(64px,18vw,112px);line-height:.84}.action-stack{width:100%}.primary-action{width:100%}.microcopy{max-width:38ch}}
|
||||
@media(max-width:520px){.tiny-label{display:none}.tiny-value{font-size:10px}.footer{align-items:flex-end}.manifesto{text-align:right}}
|
||||
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="shell" aria-labelledby="phast-title">
|
||||
<header class="masthead" aria-label="Phast">
|
||||
<a class="brand" href="/" aria-label="Phast home">phast<span class="brand-dot">.</span></a>
|
||||
<button class="tiny-link" type="button" id="copyConnector" aria-label="Copy your Phast connector address">
|
||||
<span class="tiny-label">your connector</span>
|
||||
<span class="tiny-value">my.phast.app/mcp</span>
|
||||
</button>
|
||||
</header>
|
||||
<section class="hero">
|
||||
<div class="hero-copy">
|
||||
<p class="eyebrow" aria-hidden="true">connect → compose → launch</p>
|
||||
<h1 id="phast-title">make something.<br><span class="speed-word">phast.</span></h1>
|
||||
</div>
|
||||
<div class="action-stack">
|
||||
<a class="primary-action" href="https://my.phast.app" id="connectAgent"><span>Connect your agent</span><span class="arrow" aria-hidden="true">↗</span></a>
|
||||
<p class="microcopy">Bring the intelligence. Phast turns it into something you can use.</p>
|
||||
</div>
|
||||
</section>
|
||||
<footer class="footer"><span class="status"><i></i> ready to make</span><span class="manifesto">idea → app</span></footer>
|
||||
</main>
|
||||
<div class="toast" id="toast" role="status" aria-live="polite">copied</div>
|
||||
<script>
|
||||
const connector='my.phast.app/mcp';const copyButton=document.querySelector('#copyConnector');const toast=document.querySelector('#toast');let toastTimer;function showToast(message='copied'){toast.textContent=message;toast.classList.add('show');clearTimeout(toastTimer);toastTimer=setTimeout(()=>toast.classList.remove('show'),1200)}copyButton?.addEventListener('click',async()=>{try{await navigator.clipboard.writeText(connector);showToast('connector copied')}catch{showToast(connector)}});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user