From abd412bd220ce6127eb7fbd2912465f7a5bbb41e Mon Sep 17 00:00:00 2001 From: dev Date: Wed, 20 Mar 2024 15:09:08 -0400 Subject: [PATCH] started scaffolding with our brand styles using tailwind --- app/reset.css | 73 ----- app/root.tsx | 11 +- app/rootStyles/base.scss | 0 app/rootStyles/colours.scss | 82 +++++ app/rootStyles/normalize.css | 349 +++++++++++++++++++++ app/{ => rootStyles}/tailwind.css | 0 app/routes/ColourGuide.tsx | 0 app/routes/ComponentLibrary.tsx | 0 app/routes/_index.tsx | 8 +- app/template/TopBar/TopBar.tsx | 43 +++ app/template/TopBar/index.tsx | 1 + package-lock.json | 47 +++ package.json | 1 + public/resources/images/FakeYou-Logo-2.png | Bin 0 -> 20935 bytes tailwind.config.ts | 15 +- 15 files changed, 551 insertions(+), 79 deletions(-) delete mode 100644 app/reset.css create mode 100644 app/rootStyles/base.scss create mode 100644 app/rootStyles/colours.scss create mode 100644 app/rootStyles/normalize.css rename app/{ => rootStyles}/tailwind.css (100%) create mode 100644 app/routes/ColourGuide.tsx create mode 100644 app/routes/ComponentLibrary.tsx create mode 100644 app/template/TopBar/TopBar.tsx create mode 100644 app/template/TopBar/index.tsx create mode 100644 public/resources/images/FakeYou-Logo-2.png diff --git a/app/reset.css b/app/reset.css deleted file mode 100644 index 6183ec0cc1..0000000000 --- a/app/reset.css +++ /dev/null @@ -1,73 +0,0 @@ -*, -*::before, -*::after { - box-sizing: border-box; -} - -/* Prevent font size inflation */ -html { - -moz-text-size-adjust: none; - -webkit-text-size-adjust: none; - text-size-adjust: none; -} - -/* Remove default margin in favour of better control in authored CSS */ -body, h1, h2, h3, h4, p, -figure, blockquote, dl, dd { - margin-block-end: 0; -} -body { - margin:0; -} -/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */ -ul[role='list'], -ol[role='list'] { - list-style: none; -} - -/* Set core body defaults */ -body { - min-height: 100vh; - line-height: 1.5; -} - -/* Set shorter line heights on headings and interactive elements */ -h1, h2, h3, h4, -button, input, label { - line-height: 1.1; -} - -/* Balance text wrapping on headings */ -h1, h2, -h3, h4 { - text-wrap: balance; -} - -/* A elements that don't have a class get default styles */ -a:not([class]) { - text-decoration-skip-ink: auto; - color: currentColor; -} - -/* Make images easier to work with */ -img, -picture { - max-width: 100%; - display: block; -} - -/* Inherit fonts for inputs and buttons */ -input, button, -textarea, select { - font: inherit; -} - -/* Make sure textareas without a rows attribute are not tiny */ -textarea:not([rows]) { - min-height: 10em; -} - -/* Anything that has been anchored to should have extra scroll margin */ -:target { - scroll-margin-block: 5ex; -} \ No newline at end of file diff --git a/app/root.tsx b/app/root.tsx index 45bda64d12..a29e97345b 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -7,12 +7,14 @@ import { ScrollRestoration, } from "@remix-run/react"; -import tailwindCss from "./tailwind.css?url"; -import resetCss from "./tailwind.css?url"; +import tailwindCss from "./rootStyles/tailwind.css?url"; +import normalizeCss from "./rootStyles/normalize.css?url"; + +import { TopBar } from "./template/TopBar"; export const links : LinksFunction = () => [{ rel: "stylesheet", - href: resetCss, + href: normalizeCss, },{ rel: "stylesheet", href: tailwindCss, @@ -27,7 +29,8 @@ export default function App() { - + + diff --git a/app/rootStyles/base.scss b/app/rootStyles/base.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/rootStyles/colours.scss b/app/rootStyles/colours.scss new file mode 100644 index 0000000000..9ef966d8bc --- /dev/null +++ b/app/rootStyles/colours.scss @@ -0,0 +1,82 @@ +// Default colours +$primary: #e66462; +$secondary: #39394c; +$bg: #1a1a27; +$input: #39394c; +$input-placeholder: #aeaeb3; +$danger: #8f4951; +$input-dark: #39394c; +$info: #252d43; +$success: #40ad48; +$warning: darken(#f7941c, 5%); +$accent: #80cfd3; +$workflow: $primary; +$panel: #242433; +$panel-inner: #2b2b3b; +$panel-inner-border: lighten($panel, 8%); + +$primary-lm: #000; + +// Darken some of the grays, since the default bootswatch grays are almost impossible to see against white +$gray-100: #ecf0f1; +$gray-200: #dee2e6; +$gray-300: #ced4da; +$gray-400: #b4bcc2; +$gray-500: #a5b2b4; +// These have not been changed yet +$gray-600: #95a5a6 !default; +$gray-700: #7b8a8b !default; +$gray-800: #343a40 !default; +$gray-900: #212529 !default; +$black: #000; +$white: #fff; + +// Changes and new classes +$gray-750: #5c656e; +$light: $gray-300; +$lighter: $gray-200; +$medium: $gray-500; +$medium-dark: $gray-600; +$dark: $gray-750; + +// lighter and darker colors +$primary-light: desaturate(lighten($primary, 20%), 15%); +$primary-dark: saturate(darken($primary, 15%), 10%); +$primary-very-light: desaturate(lighten($primary, 45%), 35%); + +$secondary-light: lighten($secondary, 5%); +$secondary-lighter: lighten($secondary, 12%); +$secondary-very-light: lighten($secondary, 24%); +$secondary-lightest: lighten($secondary, 60%); + +$info-light: desaturate(lighten($info, 15%), 15%); +$info-dark: darken($info, 10%); +$info-very-light: desaturate(lighten($info, 55%), 30%); + +$success-light: desaturate(lighten($success, 15%), 15%); +$success-dark: darken($success, 10%); + +$warning-light: desaturate(lighten($warning, 15%), 15%); +$warning-dark: darken($warning, 10%); + +$danger-light: desaturate(lighten($danger, 15%), 15%); +$danger-dark: darken($danger, 10%); + +$accent-light: desaturate(lighten($accent, 20%), 15%); +$accent-dark: saturate(darken($accent, 15%), 10%); + +$badge-colors: ( + "gray": #5b7282, + "red": #d91f11, + "orange": #e86427, + "yellow": #f5c518, + "lime": #3c7d0e, + "green": #077d55, + "teal": #167b7d, + "turquoise": #067a91, + "aqua": #0073ba, + "blue": #186ade, + "ultramarine": #535fe8, + "purple": #8f49de, + "pink": #cc1d92, +); diff --git a/app/rootStyles/normalize.css b/app/rootStyles/normalize.css new file mode 100644 index 0000000000..b6eb821659 --- /dev/null +++ b/app/rootStyles/normalize.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + + html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} \ No newline at end of file diff --git a/app/tailwind.css b/app/rootStyles/tailwind.css similarity index 100% rename from app/tailwind.css rename to app/rootStyles/tailwind.css diff --git a/app/routes/ColourGuide.tsx b/app/routes/ColourGuide.tsx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/routes/ComponentLibrary.tsx b/app/routes/ComponentLibrary.tsx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/routes/_index.tsx b/app/routes/_index.tsx index eb49aad3d1..7c9037bbfd 100644 --- a/app/routes/_index.tsx +++ b/app/routes/_index.tsx @@ -15,7 +15,13 @@ export default function Index() { sonic ); diff --git a/app/template/TopBar/TopBar.tsx b/app/template/TopBar/TopBar.tsx new file mode 100644 index 0000000000..201adb2828 --- /dev/null +++ b/app/template/TopBar/TopBar.tsx @@ -0,0 +1,43 @@ +import { Fragment, useState } from 'react' +import { Dialog, Disclosure, Popover, Transition } from '@headlessui/react' + + +const products = [ + { name: 'Analytics', description: 'Get a better understanding of your traffic', href: '#', //icon: ChartPieIcon + }, + { name: 'Engagement', description: 'Speak directly to your customers', href: '#', //icon: CursorArrowRaysIcon + }, + { name: 'Security', description: 'Your customers’ data will be safe and secure', href: '#', //icon: FingerPrintIcon + }, + { name: 'Integrations', description: 'Connect with third-party tools', href: '#', //icon: SquaresPlusIcon + }, + { name: 'Automations', description: 'Build strategic funnels that will convert', href: '#', //icon: ArrowPathIcon + }, +] +const callsToAction = [ + { name: 'Watch demo', href: '#', //icon: PlayCircleIcon + }, + { name: 'Contact sales', href: '#', //icon: PhoneIcon + }, +] + +function classNames({...classes}:Array) { + return classes.filter(Boolean).join(' ') +} + +export const TopBar = () => { + const [mobileMenuOpen, setMobileMenuOpen] = useState(false) + + return ( +
+ +
+ ) +} diff --git a/app/template/TopBar/index.tsx b/app/template/TopBar/index.tsx new file mode 100644 index 0000000000..b8adf3c4f4 --- /dev/null +++ b/app/template/TopBar/index.tsx @@ -0,0 +1 @@ +export { TopBar } from "./TopBar"; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 628632df16..6f421030dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,6 +6,7 @@ "": { "name": "gottagofast_v0.0.0", "dependencies": { + "@headlessui/react": "^1.7.18", "@netlify/edge-functions": "^2.3.1", "@netlify/remix-edge-adapter": "^3.2.0", "@netlify/remix-runtime": "^2.2.0", @@ -1276,6 +1277,22 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "node_modules/@headlessui/react": { + "version": "1.7.18", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.18.tgz", + "integrity": "sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ==", + "dependencies": { + "@tanstack/react-virtual": "^3.0.0-beta.60", + "client-only": "^0.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18", + "react-dom": "^16 || ^17 || ^18" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -2105,6 +2122,31 @@ "win32" ] }, + "node_modules/@tanstack/react-virtual": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.2.0.tgz", + "integrity": "sha512-OEdMByf2hEfDa6XDbGlZN8qO6bTjlNKqjM3im9JG+u3mCL8jALy0T/67oDI001raUUPh1Bdmfn4ZvPOV5knpcg==", + "dependencies": { + "@tanstack/virtual-core": "3.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.2.0.tgz", + "integrity": "sha512-P5XgYoAw/vfW65byBbJQCw+cagdXDT/qH6wmABiLt4v4YBT2q2vqCOhihe+D1Nt325F/S/0Tkv6C5z0Lv+VBQQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -3481,6 +3523,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", diff --git a/package.json b/package.json index 207dae0916..58495700ec 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "typecheck": "tsc" }, "dependencies": { + "@headlessui/react": "^1.7.18", "@netlify/edge-functions": "^2.3.1", "@netlify/remix-edge-adapter": "^3.2.0", "@netlify/remix-runtime": "^2.2.0", diff --git a/public/resources/images/FakeYou-Logo-2.png b/public/resources/images/FakeYou-Logo-2.png new file mode 100644 index 0000000000000000000000000000000000000000..616af230d2d7370d50a0bc9dba6c6dc0636966b1 GIT binary patch literal 20935 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