diff --git a/apps/web/public/brand/favicon.svg b/apps/web/public/brand/favicon.svg index cef6a31..ecd65ed 100644 --- a/apps/web/public/brand/favicon.svg +++ b/apps/web/public/brand/favicon.svg @@ -1,7 +1,40 @@ - - - - + + T-HUB + + + + + + + + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/brand/t-hub.svg b/apps/web/public/brand/t-hub.svg new file mode 100644 index 0000000..ecd65ed --- /dev/null +++ b/apps/web/public/brand/t-hub.svg @@ -0,0 +1,40 @@ + + T-HUB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/fonts/Anton-OFL.txt b/apps/web/public/fonts/Anton-OFL.txt new file mode 100644 index 0000000..93fedde --- /dev/null +++ b/apps/web/public/fonts/Anton-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Anton Project Authors (https://github.com/googlefonts/AntonFont.git) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/apps/web/public/fonts/anton.woff2 b/apps/web/public/fonts/anton.woff2 new file mode 100644 index 0000000..46fd713 Binary files /dev/null and b/apps/web/public/fonts/anton.woff2 differ diff --git a/apps/web/src/app/(main)/control-room/control-room.css b/apps/web/src/app/(main)/control-room/control-room.css index 265c367..9ea7701 100644 --- a/apps/web/src/app/(main)/control-room/control-room.css +++ b/apps/web/src/app/(main)/control-room/control-room.css @@ -13,4 +13,4 @@ } .control-room label { max-width: 100%; } .control-room button { min-width: 44px; } -.control-room :focus-visible { outline: 2px solid #ff1610; outline-offset: 3px; } +.control-room :focus-visible { outline: 2px solid #00e5ff; outline-offset: 3px; } diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css index c3e8a36..c349d0d 100644 --- a/apps/web/src/app/globals.css +++ b/apps/web/src/app/globals.css @@ -1,17 +1,25 @@ @import "tailwindcss"; +/* Anton (SIL OFL 1.1, public/fonts/Anton-OFL.txt) — same title face as acampada26s.net. */ +@font-face { + font-family: "Anton"; + src: url("/fonts/anton.woff2") format("woff2"); + font-display: swap; +} + @theme { - --color-bg: oklch(0.11 0.008 25); - --color-surface: oklch(0.15 0.01 25); - --color-surface-2: oklch(0.19 0.012 25); - --color-border: oklch(0.26 0.02 25); - --color-border-subtle: oklch(0.22 0.015 25); - --color-text: oklch(0.93 0.005 25); - --color-text-dim: oklch(0.62 0.02 25); - --color-text-faint: oklch(0.46 0.02 25); - --color-accent: #ff1610; - --color-accent-hover: #e3130e; - --color-accent-dim: rgb(255 22 16 / 0.15); + /* T-HUB: the acampada26s.net palette (black, white, neon) on a dark base. */ + --color-bg: #000; + --color-surface: #0d0d0d; + --color-surface-2: #181818; + --color-border: #3d3d3d; + --color-border-subtle: #262626; + --color-text: #fff; + --color-text-dim: #b3b3b3; + --color-text-faint: #808080; + --color-accent: #00e5ff; + --color-accent-hover: #5cefff; + --color-accent-dim: rgb(0 229 255 / 0.15); --color-live: oklch(0.72 0.19 145); --color-warn: oklch(0.78 0.16 85); --color-danger: oklch(0.55 0.24 15); @@ -20,6 +28,7 @@ --font-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; --font-mono: ui-monospace, "SF Mono", Menlo, monospace; + --font-title: "Anton", Impact, "Arial Narrow", sans-serif; --radius-sm: 0.375rem; --radius-md: 0.5rem; @@ -55,6 +64,23 @@ body { html, body { max-width: 100%; } +/* Titles as on acampada26s.net: Anton, uppercase, hard neon offset. */ +h1, h2 { + font-family: var(--font-title); + font-weight: 400; + text-transform: uppercase; + letter-spacing: 0.01em; +} +h1 { + text-shadow: 0.04em 0.04em 0 var(--color-accent); +} + +/* Neon fills need dark text; unlayered so it outranks the text-white utility. */ +.bg-accent.text-white, +.bg-accent .text-white { + color: #000; +} + @media (max-width: 1023px) { body { overflow-x: hidden; } [data-mobile-main] :is(button, a[href], input, select, textarea, [role="tab"]) { diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx index 4e436ad..cef64d0 100644 --- a/apps/web/src/app/layout.tsx +++ b/apps/web/src/app/layout.tsx @@ -13,7 +13,7 @@ export const viewport: Viewport = { initialScale: 1, viewportFit: "cover", interactiveWidget: "resizes-content", - themeColor: "#FF1610", + themeColor: "#000000", }; export default function RootLayout({ children }: { children: ReactNode }): React.ReactNode { diff --git a/apps/web/src/app/submit/[token]/page.tsx b/apps/web/src/app/submit/[token]/page.tsx index b2f0c0c..6089bfb 100644 --- a/apps/web/src/app/submit/[token]/page.tsx +++ b/apps/web/src/app/submit/[token]/page.tsx @@ -135,7 +135,7 @@ export default function SubmitPage({ params }: { params: { token: string } }): R tone="warn" title="Can't reach the server" body="Your link is still fine — the server isn't answering. Try again in a moment." - action={} + action={} /> ); @@ -165,7 +165,7 @@ function DeadCard({ tone, title, body, action }: { tone: "warn" | "danger"; titl
{tone === "warn" ? "!" : "✕"} @@ -283,7 +283,7 @@ function SubmitForm({ token, box }: { token: string; box: SubmissionBoxInfo }): if (phase === "sent" && done !== null) { return (
- +

Received

Received — the collective will review it. Nothing is published until they approve it. @@ -304,7 +304,7 @@ function SubmitForm({ token, box }: { token: string; box: SubmissionBoxInfo }): className="mx-auto flex w-full max-w-xl flex-col gap-6 rounded-lg border border-[#2a2320] bg-[#0F0A09] p-6 sm:p-8" >

- +

Send footage to the collective

@@ -340,7 +340,7 @@ function SubmitForm({ token, box }: { token: string; box: SubmissionBoxInfo }): className={`flex min-h-[180px] flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed px-4 py-8 text-center transition-colors duration-150 ${ uploading ? "cursor-not-allowed border-[#3a312e] opacity-60" - : "cursor-pointer border-[#3a312e] hover:border-[#FF1610] focus-visible:border-[#FF1610]" + : "cursor-pointer border-[#3a312e] hover:border-[#00E5FF] focus-visible:border-[#00E5FF]" }`} > {uploading ? ( @@ -350,7 +350,7 @@ function SubmitForm({ token, box }: { token: string; box: SubmissionBoxInfo }): {progress < 100 ? `Uploading ${progress}%` : "Upload sent — the collective's server is taking it in…"}{" "} {file !== null && `${file.name} (${formatBytes(file.size)})`} - +

) : file !== null && kind !== null ? ( <> @@ -365,7 +365,7 @@ function SubmitForm({ token, box }: { token: string; box: SubmissionBoxInfo }): or browse your device, or paste a file. Nothing is sent until you press Send. - Browse files + Browse files )} {fileError !== null &&

{fileError}

} - {error !== null &&

{error}

} + {error !== null &&

{error}

}
@@ -407,7 +407,7 @@ function SubmitForm({ token, box }: { token: string; box: SubmissionBoxInfo }): onChange={(event) => setCreditName(event.target.value)} disabled={uploading} placeholder="How your name should appear in the credit" - className="mt-1 w-full rounded-md border border-[#3a312e] bg-[#060403] px-3 py-2 text-sm text-[#f5efed] placeholder:text-[#6b6563] focus:border-[#FF1610] focus:outline-none" + className="mt-1 w-full rounded-md border border-[#3a312e] bg-[#060403] px-3 py-2 text-sm text-[#f5efed] placeholder:text-[#6b6563] focus:border-[#00E5FF] focus:outline-none" /> {creditTooLong && Up to {SUBMISSION_CREDIT_MAX} characters.} @@ -421,7 +421,7 @@ function SubmitForm({ token, box }: { token: string; box: SubmissionBoxInfo }): disabled={uploading} rows={2} placeholder="How licensors can reach you — shown only to admins" - className="mt-1 w-full resize-none rounded-md border border-[#3a312e] bg-[#060403] px-3 py-2 text-sm text-[#f5efed] placeholder:text-[#6b6563] focus:border-[#FF1610] focus:outline-none" + className="mt-1 w-full resize-none rounded-md border border-[#3a312e] bg-[#060403] px-3 py-2 text-sm text-[#f5efed] placeholder:text-[#6b6563] focus:border-[#00E5FF] focus:outline-none" /> {contactTooLong && Up to {SUBMISSION_CONTACT_MAX} characters.} @@ -430,7 +430,7 @@ function SubmitForm({ token, box }: { token: string; box: SubmissionBoxInfo }): diff --git a/docs/brand/t-hub.svg b/docs/brand/t-hub.svg new file mode 100644 index 0000000..ecd65ed --- /dev/null +++ b/docs/brand/t-hub.svg @@ -0,0 +1,40 @@ + + T-HUB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +