@rileybathurst/paddle 1.0.9 → 1.0.11

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@rileybathurst/paddle",
3
3
  "private": false,
4
- "version": "1.0.9",
4
+ "version": "1.0.11",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "vite",
@@ -26,6 +26,7 @@
26
26
  "@biomejs/biome": "2.0.2",
27
27
  "@chromatic-com/storybook": "^4.0.0",
28
28
  "@faker-js/faker": "^9.8.0",
29
+ "@storybook/addon-a11y": "^9.0.13",
29
30
  "@storybook/addon-docs": "^9.0.11",
30
31
  "@storybook/addon-links": "^9.0.11",
31
32
  "@storybook/addon-themes": "^9.0.11",
@@ -55,4 +56,4 @@
55
56
  "overrides": {
56
57
  "storybook": "$storybook"
57
58
  }
58
- }
59
+ }
@@ -0,0 +1,18 @@
1
+ // this is the Name.stories.tsx file
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { Badges } from './Badges';
4
+
5
+ const meta = {
6
+ component: Badges,
7
+ title: 'Atoms/Badges',
8
+ args: {},
9
+ } satisfies Meta<typeof Badges>;
10
+
11
+ export default meta;
12
+ type Story = StoryObj<typeof meta>;
13
+
14
+ export const Primary: Story = {
15
+ args: {
16
+ primary: true,
17
+ },
18
+ };
package/src/Badges.tsx ADDED
@@ -0,0 +1,33 @@
1
+ // this is the Name.tsx file
2
+ import { faker } from '@faker-js/faker/locale/zu_ZA';
3
+ import React from 'react';
4
+
5
+ interface NameTypes {
6
+ name: string;
7
+ }
8
+ const Name = ({ name }: NameTypes) => {
9
+ return (
10
+ <div className="badge">
11
+ <h5 className="capitalize">{name}</h5>
12
+ </div>
13
+ );
14
+ }
15
+
16
+ export const Badges = () => {
17
+ // TODO: deal with multiple
18
+
19
+ // Discount
20
+ if (faker.datatype.boolean()) {
21
+ return (
22
+ <div className="badge">
23
+ <h5 className="capitalize">{faker.number.int({ min: 1, max: 100 })}% off</h5>
24
+ </div>
25
+ );
26
+ }
27
+
28
+ if (faker.datatype.boolean()) {
29
+ return <Name name={faker.helpers.arrayElement(['inflatable', 'demo', faker.airline.airline().name])} />;
30
+ }
31
+
32
+ return null;
33
+ };
@@ -0,0 +1,18 @@
1
+ // this is the Name.stories.tsx file
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { Bag } from './Bag';
4
+
5
+ const meta = {
6
+ component: Bag,
7
+ title: 'Organisms/Bag',
8
+ args: {},
9
+ } satisfies Meta<typeof Bag>;
10
+
11
+ export default meta;
12
+ type Story = StoryObj<typeof meta>;
13
+
14
+ export const Primary: Story = {
15
+ args: {
16
+ primary: true,
17
+ },
18
+ };
package/src/Bag.tsx ADDED
@@ -0,0 +1,14 @@
1
+ // this is the Name.tsx file
2
+ import React from "react";
3
+ import { faker } from "@faker-js/faker";
4
+ import { Purchase } from "./Purchase";
5
+
6
+ export const Bag = () => {
7
+ return (
8
+ <div className="bag">
9
+ {Array.from({ length: faker.number.int({ min: 1, max: 10 }) }).map(() => (
10
+ <Purchase key={faker.string.uuid()} />
11
+ ))}
12
+ </div>
13
+ );
14
+ };
@@ -117,7 +117,7 @@ interface ContentTypes {
117
117
  season_end?: string;
118
118
 
119
119
  offSeasonDetails?: string;
120
- phone?: number;
120
+ phoneNumber?: number;
121
121
 
122
122
  streetAddress?: string;
123
123
  addressLocality?: string;
@@ -129,7 +129,6 @@ const PhoneContent = ({
129
129
  link,
130
130
  svg,
131
131
  name,
132
- address,
133
132
  description,
134
133
  opening_time,
135
134
  closing_time,
@@ -141,7 +140,7 @@ const PhoneContent = ({
141
140
  season_start,
142
141
  season_end,
143
142
  offSeasonDetails,
144
- phone,
143
+ phoneNumber,
145
144
  }: ContentTypes) => {
146
145
  return (
147
146
  <>
@@ -156,9 +155,11 @@ const PhoneContent = ({
156
155
  <div className="svg" dangerouslySetInnerHTML={{ __html: svg }} />
157
156
  </a>
158
157
  ) : (
159
- <Link to={link} className="location">
160
- <div className="svg" dangerouslySetInnerHTML={{ __html: svg }} />
161
- </Link>
158
+ link && (
159
+ <Link to={link} className="location">
160
+ <div className="svg" dangerouslySetInnerHTML={{ __html: svg }} />
161
+ </Link>
162
+ )
162
163
  )}
163
164
 
164
165
  <div>
@@ -173,11 +174,15 @@ const PhoneContent = ({
173
174
  <h3>{name}</h3>
174
175
  </a>
175
176
  ) : (
176
- <Link to={link} title={name}>
177
- <h3>{name}</h3>
178
- </Link>
177
+ link && (
178
+ <Link to={link} title={name}>
179
+ <h3>{name}</h3>
180
+ </Link>
181
+ )
182
+ )}
183
+ {phoneNumber && (
184
+ <Phone phone={phoneNumber} />
179
185
  )}
180
- <Phone phone={phone} />
181
186
  </div>
182
187
 
183
188
  {streetAddress ||
@@ -202,15 +207,17 @@ const PhoneContent = ({
202
207
  />
203
208
  </a>
204
209
  ) : (
205
- <Link to={link} title={name}>
206
- <Place
207
- commonName={commonName}
208
- streetAddress={streetAddress}
209
- addressLocality={addressLocality}
210
- addressRegion={addressRegion}
211
- postalCode={postalCode}
212
- />
213
- </Link>
210
+ link && (
211
+ <Link to={link} title={name}>
212
+ <Place
213
+ commonName={commonName}
214
+ streetAddress={streetAddress}
215
+ addressLocality={addressLocality}
216
+ addressRegion={addressRegion}
217
+ postalCode={postalCode}
218
+ />
219
+ </Link>
220
+ )
214
221
  )
215
222
  ) : null}
216
223
 
@@ -236,7 +243,6 @@ const PhoneContent = ({
236
243
  const Content = ({
237
244
  svg,
238
245
  name,
239
- address,
240
246
  description,
241
247
  opening_time,
242
248
  closing_time,
@@ -330,7 +336,7 @@ export const PaddleLocationCard = ({
330
336
  season_start={season_start}
331
337
  season_end={season_end}
332
338
  offSeasonDetails={offSeasonDetails}
333
- phone={phoneNumber}
339
+ phoneNumber={phoneNumber}
334
340
  />
335
341
  </div>
336
342
  );
@@ -13,19 +13,17 @@ export const PaddleLocationDeck = ({
13
13
  nodes,
14
14
  season_start,
15
15
  season_end,
16
- phone,
17
- background,
16
+ phone
18
17
  }: LocationDeckTypes) => {
19
18
  return (
20
19
  <section className="location-deck">
21
20
  {nodes.map((location: PaddleLocationCardTypes) => (
22
21
  <PaddleLocationCard
23
22
  key={location.id}
24
- {...location}
25
- background={background}
26
23
  season_start={season_start}
27
24
  season_end={season_end}
28
- phone={phone}
25
+ phoneNumber={phone}
26
+ {...location}
29
27
  />
30
28
  ))}
31
29
  </section>
@@ -1,23 +1,25 @@
1
- import * as React from "react"
2
- import PaddleRemainder from "./paddle-remainder.tsx"
1
+ import * as React from "react";
2
+ import PaddleRemainder from "./paddle-remainder.tsx";
3
3
 
4
4
  interface SpecsTypes {
5
- [key: string]: string | number | {
6
- [key: string]: string | number[];
7
- };
5
+ [key: string]:
6
+ | string
7
+ | number
8
+ | {
9
+ [key: string]: string | number[];
10
+ };
8
11
  }
9
12
  // * moving the section tag to the parent component means you can loop yourself
10
13
  export const PaddleSpecs = (specs: SpecsTypes) =>
11
14
  // <section className='specs'>
12
15
  Object.entries(specs).map(([key, value]) => {
13
-
14
16
  // console.log(key, value);
15
17
 
16
18
  if (!value) {
17
19
  return null;
18
20
  }
19
21
 
20
- if (key === 'time' && typeof value === 'object') {
22
+ if (key === "time" && typeof value === "object") {
21
23
  return (
22
24
  <div key={key} className="spec">
23
25
  <h2>{value.value}</h2>
@@ -28,22 +30,22 @@ export const PaddleSpecs = (specs: SpecsTypes) =>
28
30
  // * I cant remeber others yet
29
31
  }
30
32
 
31
- if (key === 'cost' && typeof value === 'object' && value.discount) {
32
-
33
- const amount = Number(value.price) - (Number(value.discount) * (Number(value.price) / 100)) as number;
33
+ if (key === "cost" && typeof value === "object" && value.discount) {
34
+ const amount = (Number(value.price) -
35
+ Number(value.discount) * (Number(value.price) / 100)) as number;
34
36
 
35
37
  return (
36
38
  <>
37
39
  {/* // TODO: add color */}
38
40
  <div className="spec">
39
- <h2><del>Original Price</del></h2>
41
+ <h2>
42
+ <del>Original Price</del>
43
+ </h2>
40
44
  <h3>
41
- <del>
42
- ${value.price}
43
- </del>
45
+ <del>${value.price}</del>
44
46
  </h3>
45
47
  </div>
46
- <div className="spec ruby">
48
+ <div className="spec">
47
49
  <h2>Sale Price</h2>
48
50
  {value.discount}% off
49
51
  <h3>${amount}</h3>
@@ -54,22 +56,28 @@ export const PaddleSpecs = (specs: SpecsTypes) =>
54
56
 
55
57
  /* I didnt know you could call yourself like this */
56
58
  /* I guess its not a infinite loop as its not calling an object */
57
- if (typeof value === 'object') {
58
- return (
59
- <PaddleSpecs {...value} />
60
- );
59
+ if (typeof value === "object") {
60
+ return <PaddleSpecs {...value} />;
61
61
  }
62
62
 
63
63
  return (
64
64
  <div key={key} className="spec">
65
65
  <h2>{key}</h2>
66
66
  <h3>
67
- {key === 'price' ? <span className="spec__unit">$</span> : null}
68
- {key === 'length' && typeof value === 'number' ? <PaddleRemainder inches={value} /> : value}
69
- {key === 'hullweight' || key === 'riggedweight' ? <span className="spec__unit">lbs</span> : null}
70
- {key === 'width' || key === 'length' || key === 'capacity' ? <span className="spec__unit">"</span> : null}
67
+ {key === "price" ? <span className="spec__unit">$</span> : null}
68
+ {key === "length" && typeof value === "number" ? (
69
+ <PaddleRemainder inches={value} />
70
+ ) : (
71
+ value
72
+ )}
73
+ {key === "hullweight" || key === "riggedweight" ? (
74
+ <span className="spec__unit">lbs</span>
75
+ ) : null}
76
+ {key === "width" || key === "length" || key === "capacity" ? (
77
+ <span className="spec__unit">"</span>
78
+ ) : null}
71
79
  </h3>
72
80
  </div>
73
- )
74
- })
75
- // </section>
81
+ );
82
+ });
83
+ // </section>
@@ -0,0 +1,18 @@
1
+ // this is the Name.stories.tsx file
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { Purchase } from './Purchase';
4
+
5
+ const meta = {
6
+ component: Purchase,
7
+ title: 'Molecules/Purchase',
8
+ args: {},
9
+ } satisfies Meta<typeof Purchase>;
10
+
11
+ export default meta;
12
+ type Story = StoryObj<typeof meta>;
13
+
14
+ export const Primary: Story = {
15
+ args: {
16
+ primary: true,
17
+ },
18
+ };
@@ -0,0 +1,51 @@
1
+ // Retail Card
2
+ import React from "react";
3
+ // import { GatsbyImage } from 'gatsby-plugin-image';
4
+ import { faker } from "@faker-js/faker";
5
+ import { Badges } from "./Badges";
6
+ // import { Badges } from './Badges';
7
+ // import { Remainder } from './Remainder';
8
+ // import { useRetailContext } from '../context/RetailContext';
9
+ import { TextureBackgrounds } from "./TextureBackgrounds";
10
+
11
+ export const Purchase = () => {
12
+ return (
13
+ <article key={faker.string.uuid()} className="purchase">
14
+ {/* // This is currently a wrapper and not used */}
15
+ <div className="purchase-collage">
16
+ <TextureBackgrounds />
17
+ <a href={faker.music.songName()} className="image-link">
18
+ {/* <GatsbyImage
19
+ image={cutout?.localFile?.childImageSharp?.gatsbyImageData}
20
+ alt={cutout?.alternativeText || `${title} by ${brand.slug}`}
21
+ className="cutout"
22
+ objectFit="contain"
23
+ // TODO: this has been causing some problems but keep an eye on it
24
+ /> */}
25
+ </a>
26
+
27
+ <Badges
28
+ // inflatable={faker.datatype.boolean()}
29
+ // demo={faker.datatype.boolean()}
30
+ // discount={faker.datatype.boolean() ? faker.number.int({ min: 1, max: 100 }) : undefined}
31
+ />
32
+ </div>
33
+ <h4 className="purchase__title">
34
+ <a href={faker.music.songName()}>{faker.music.album()}</a>
35
+ </h4>
36
+ <hr />
37
+ {/* // ? I think this is too long */}
38
+ <p>{faker.lorem.paragraph()}</p>
39
+ <hr />
40
+ <div className="purchase__details">
41
+ <h4>
42
+ {/* <Remainder inches={length} /> */}
43
+ long by {faker.number.int({ min: 1, max: 100 })}" wide
44
+ </h4>
45
+ <h5 className="capitalize">
46
+ Capacity {faker.number.int({ min: 1, max: 100 })}&thinsp;lbs
47
+ </h5>
48
+ </div>
49
+ </article>
50
+ );
51
+ };
@@ -0,0 +1,18 @@
1
+ // this is the Name.stories.tsx file
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { TextureBackgrounds } from './TextureBackgrounds';
4
+
5
+ const meta = {
6
+ component: TextureBackgrounds,
7
+ title: 'Atoms/TextureBackgrounds',
8
+ args: {},
9
+ } satisfies Meta<typeof TextureBackgrounds>;
10
+
11
+ export default meta;
12
+ type Story = StoryObj<typeof meta>;
13
+
14
+ export const Primary: Story = {
15
+ args: {
16
+ primary: true,
17
+ },
18
+ };
@@ -0,0 +1,31 @@
1
+ // this is the Name.tsx file
2
+ import React from "react";
3
+ import { faker } from "@faker-js/faker";
4
+
5
+ export const TextureBackgrounds = () => {
6
+ return (
7
+ <>
8
+ <img
9
+ src={faker.image.dataUri()}
10
+ className="texture-slice crop"
11
+ alt="top texture"
12
+ />
13
+ <img
14
+ src={faker.image.dataUri()}
15
+ className="texture-slice"
16
+ alt="bottom texture"
17
+ />
18
+ <svg viewBox="0 0 1200 630" xmlns="http://www.w3.org/2000/svg">
19
+ <title>Diagonal line decoration</title>
20
+ <line
21
+ x1="0"
22
+ y1="630"
23
+ x2="1200"
24
+ y2="0"
25
+ // only color the stroke in css so it has dark mode
26
+ strokeWidth="3"
27
+ />
28
+ </svg>
29
+ </>
30
+ );
31
+ };
@@ -1,4 +1,4 @@
1
- /* straight pull for menu so its going to take a bunch of work but this keeps everything sperate */
1
+ /* TODO: Not in use yet straight pull for menu so its going to take a bunch of work but this keeps everything sperate */
2
2
 
3
3
  .menu-button {
4
4
  background-color: hotpink !important;
@@ -1,16 +1,20 @@
1
1
  /*------------------*/
2
- /* #CARDS */
2
+ /* #CARDS / PURCHASE / TICKET */
3
3
  /*------------------*/
4
4
 
5
- .deck {
5
+ /* was deck */
6
+ .bag {
6
7
  margin-block-end: var(--aconcagua);
7
8
 
8
9
  display: grid;
9
10
  grid-template-columns: repeat(auto-fill, minmax(var(--condor), 1fr));
11
+
12
+ /* TODO: clamp */
13
+ gap: var(--kosciuszko);
10
14
  }
11
15
 
12
- /* TODO: v1.2 I think this may have already be removed by check it properly before deleteing it card is becoming purchase and splitting more */
13
- .card {
16
+ /* was card */
17
+ .purchase {
14
18
  padding: 0;
15
19
  display: flex;
16
20
  flex-direction: column;
@@ -19,12 +23,58 @@
19
23
  border-radius: var(--card-radius);
20
24
  /* needed to control nested elements */
21
25
  text-decoration: none;
26
+ box-shadow: var(--penumbra);
27
+
28
+ background-color: white;
22
29
 
23
- .card__placeholder {
24
- max-height: 5rem;
25
- border: none;
26
- border-radius: 0;
27
- margin-block-end: var(--kilimanjaro);
30
+ .purchase-collage {
31
+ display: grid;
32
+ width: 100%;
33
+
34
+ > * {
35
+ grid-row: 1;
36
+ grid-column: 1;
37
+ }
38
+
39
+ .texture-slice {
40
+ width: calc(100% - var(--elbrus));
41
+ aspect-ratio: 16/9;
42
+ height: 100%;
43
+ align-self: center;
44
+ margin: calc(var(--elbrus) / 2);
45
+ border-radius: 0.25rem;
46
+ box-shadow: var(--penumbra);
47
+ border: 1px solid whitesmoke;
48
+ stroke: whitesmoke;
49
+
50
+ @media (prefers-color-scheme: dark) {
51
+ border-color: var(--black-metal);
52
+ stroke: var(--black-metal);
53
+ }
54
+ }
55
+
56
+ .cutout {
57
+ object-fit: contain;
58
+ place-self: center;
59
+ /* box-shadow: var(--umbra); */
60
+ z-index: 2; /* TODO: variable */
61
+ grid-row: 1/1;
62
+ filter: drop-shadow(5px 5px 5px var(--black-out));
63
+ aspect-ratio: 16/9;
64
+ width: 100%;
65
+ }
66
+
67
+ svg {
68
+ z-index: 1; /* TODO: variable */
69
+ max-height: 100%; /* overwrite the default */
70
+ margin: calc(var(--elbrus) / 2);
71
+ width: calc(100% - var(--elbrus));
72
+ stroke: whitesmoke;
73
+
74
+ @media (prefers-color-scheme: dark) {
75
+ stroke: var(--black-metal);
76
+ }
77
+ }
28
78
  }
29
79
 
30
80
  .image-link {
@@ -37,49 +87,21 @@
37
87
  transform: scale(1.05);
38
88
  }
39
89
 
40
- .card__image {
41
- margin-block-end: var(--kilimanjaro);
42
- transition: var(--fade);
43
- }
44
-
45
- .card__image:where(:hover, :focus) {
46
- filter: brightness(80%);
47
- }
48
-
49
- .card__title {
90
+ .purchase__title {
50
91
  font-size: var(--denali);
51
92
  margin-inline: var(--kosciuszko);
52
93
  line-height: var(--aconcagua);
53
94
  }
54
95
 
55
- .card__specs {
56
- width: calc(100% - var(--kilimanjaro));
57
- display: flex;
58
- flex-flow: row wrap;
59
- align-items: baseline;
60
- justify-content: space-between;
61
- margin-inline: var(--kosciuszko);
62
- margin-block-end: var(--elbrus);
63
-
64
- > * {
65
- margin: 0; /* reset */
66
- }
67
- }
68
-
69
- .card__span {
70
- font-size: var(--vinson);
71
- text-transform: uppercase;
72
- }
73
-
74
- hr {
96
+ hr, p {
75
97
  margin-inline: var(--kosciuszko);
76
98
  }
77
99
 
78
- img {
100
+ /* img {
79
101
  width: 100%;
80
- }
102
+ } */
81
103
 
82
- .card__details {
104
+ .purchase__details {
83
105
  display: flex;
84
106
  gap: var(--vinson);
85
107
  width: calc(100% - var(--kilimanjaro));
@@ -109,10 +131,14 @@
109
131
 
110
132
  .badge {
111
133
  z-index: var(--floor);
112
- place-self: start;
134
+ justify-self: end;
135
+ align-self: start;
113
136
  padding: var(--kosciuszko);
114
137
  margin: var(--kosciuszko);
115
138
  border-radius: var(--card-radius);
139
+
140
+ background-color: var(--neutral-200);
141
+ border: 1px solid var(--neutral-100);
116
142
  opacity: 0.9;
117
143
 
118
144
  h5 {
@@ -123,7 +149,17 @@
123
149
  }
124
150
  }
125
151
 
126
- .card:hover,
152
+ .tahoe-city .purchase {
153
+ background-color: var(--sand-100);
154
+
155
+ hr {
156
+ border-color: var(--sand-400);
157
+ }
158
+ }
159
+
160
+ /* south-tahoe currently does not have a purchase */
161
+
162
+ .purchase:hover,
127
163
  .ticket:hover {
128
164
  p {
129
165
  text-decoration: underline;
@@ -135,15 +171,11 @@
135
171
  }
136
172
  }
137
173
 
138
- .deck:empty {
174
+ .bag:empty {
139
175
  display: none;
140
176
  }
141
177
 
142
- .deck__column {
143
- grid-template-columns: 1fr;
144
- }
145
-
146
- .deck__more {
178
+ .bag__more {
147
179
  max-width: var(--pelican);
148
180
  margin-inline: auto;
149
181
  padding-inline: var(--kosciuszko);
@@ -154,28 +186,6 @@
154
186
  }
155
187
  }
156
188
 
157
- .ticket img {
158
- aspect-ratio: 16 / 9;
159
- }
160
-
161
- .south-tahoe .ticket {
162
- background-color: var(--lake-200);
163
- border: 1px solid var(--lake-300);
164
- box-shadow: var(--penumbra);
165
- color: var(--lake-600);
166
-
167
- @media (prefers-color-scheme: dark) {
168
- background-color: var(--lake-700);
169
- border-color: var(--lake-600);
170
- /* box-shadow: var(--penumbra--dark); */
171
- color: var(--lake-200);
172
-
173
- a:not(.book-now) {
174
- color: var(--lake-200);
175
- }
176
- }
177
- }
178
-
179
189
  /*------------------*/
180
190
  /* #RETAIL LOGO */
181
191
  /*------------------*/
@@ -237,6 +247,7 @@
237
247
 
238
248
  img {
239
249
  width: 100%;
250
+ aspect-ratio: 16 / 9;
240
251
  }
241
252
 
242
253
  > a {
@@ -263,6 +274,20 @@
263
274
  }
264
275
  }
265
276
 
266
- /* .south-tahoe .ticket {
267
- }
268
- */
277
+ .south-tahoe .ticket {
278
+ background-color: var(--lake-200);
279
+ border: 1px solid var(--lake-300);
280
+ box-shadow: var(--penumbra);
281
+ color: var(--lake-600);
282
+
283
+ @media (prefers-color-scheme: dark) {
284
+ background-color: var(--lake-700);
285
+ border-color: var(--lake-600);
286
+ /* box-shadow: var(--penumbra--dark); */
287
+ color: var(--lake-200);
288
+
289
+ a:not(.book-now) {
290
+ color: var(--lake-200);
291
+ }
292
+ }
293
+ }
@@ -25,6 +25,13 @@ body:has(#storybook-root) {
25
25
  }
26
26
  }
27
27
 
28
+ body .tahoe-city {
29
+ @media (prefers-color-scheme: dark) {
30
+ background-color: var(--navy-300);
31
+ color: var(--brilliance);
32
+ }
33
+ }
34
+
28
35
  body .south-tahoe {
29
36
  @media (prefers-color-scheme: dark) {
30
37
  background-color: var(--lake-800);
@@ -71,3 +78,11 @@ body .south-tahoe {
71
78
  color: var(--neutral-200);
72
79
  }
73
80
  }
81
+
82
+ /*------------------------------------*/
83
+ /* #SPECS */
84
+ /*------------------------------------*/
85
+
86
+ .specs h2, .specs .spec__unit {
87
+ color: grey;
88
+ }
@@ -17,6 +17,7 @@ main,
17
17
  footer,
18
18
  .react-aria-Breadcrumbs,
19
19
  .deck,
20
+ .bag,
20
21
  .flight {
21
22
  margin-inline: auto;
22
23
  padding-inline: var(--kosciuszko);
@@ -54,6 +55,7 @@ main,
54
55
  .albatross,
55
56
  footer,
56
57
  .deck,
58
+ .bag,
57
59
  .flight,
58
60
  .react-aria-Breadcrumbs {
59
61
  max-width: min(var(--albatross), calc(100vw - var(--denali)));
@@ -404,7 +406,6 @@ header {
404
406
  grid-column: 3;
405
407
  grid-row: 2;
406
408
  aspect-ratio: 1;
407
- border: none;
408
409
  box-shadow: none;
409
410
  margin-block: 1rem;
410
411
  border-radius: 50%;
@@ -446,3 +447,45 @@ header {
446
447
  height: auto;
447
448
  }
448
449
  }
450
+
451
+ /*------------------*/
452
+ /* #SPECS */
453
+ /*------------------*/
454
+
455
+ .spec {
456
+ display: flex;
457
+ gap: 1rem;
458
+ flex-flow: row wrap;
459
+ justify-content: space-between;
460
+ align-items: baseline;
461
+ align-items: flex-start;
462
+ /* addding this border has to flip the margins */
463
+ border-block-start: 1px solid var(--tin-soldier);
464
+ text-transform: uppercase;
465
+
466
+ height: 2lh;
467
+ margin-block-start: 1lh;
468
+ @supports not (margin: 1lh) {
469
+ height: 2.5rem;
470
+ margin-block-start: 1.25rem;
471
+ }
472
+
473
+ h2,
474
+ h3 {
475
+ line-height: 2rem;
476
+ margin-block-end: 0.25rem;
477
+ }
478
+
479
+ .spec-flex {
480
+ display: flex;
481
+ }
482
+ }
483
+
484
+ /* bug fix that maybe could be done with .sr-only being different but this works */
485
+ .spec:has(.sr-only) {
486
+ align-items: center;
487
+ }
488
+
489
+ .spec:last-child {
490
+ border-bottom: none;
491
+ }
@@ -14,7 +14,7 @@ a:where(:hover, :focus) {
14
14
 
15
15
  /* this is getting too big and complex try go the other way for what it is */
16
16
  .tahoe-city a:not(.social a):not(button):not(.button):not(.book-now) {
17
- color: var(--ruby-100);
17
+ color: var(--tanager-100);
18
18
  }
19
19
 
20
20
  .south-tahoe a {
@@ -7,8 +7,9 @@
7
7
  /*------------------*/
8
8
 
9
9
  ul {
10
- padding-inline-start: 0.75rem;
10
+ padding-inline-start: var(--kosciuszko);
11
11
  margin: 0; /* reset */
12
+ list-style: none; /* reset */
12
13
 
13
14
  li {
14
15
  display: block;
@@ -17,6 +18,7 @@ ul {
17
18
  }
18
19
 
19
20
  ol {
21
+ margin-block-start: 0;
20
22
  li {
21
23
  display: inline flow-root list-item;
22
24
  margin-block-end: var(--baseline);
@@ -70,7 +72,8 @@ ol {
70
72
  display: flex;
71
73
  flex-flow: row wrap;
72
74
  gap: 1rem;
73
- align-items: center;
75
+ align-items: baseline;
76
+ justify-content: space-between;
74
77
  }
75
78
 
76
79
  /*------------------*/
@@ -176,7 +179,8 @@ ol {
176
179
 
177
180
  svg {
178
181
  transition: var(--fade);
179
- margin: var(--baseline);
182
+ margin-block: var(--baseline);
183
+ margin-inline: auto;
180
184
  min-width: 3rem; /* guess and check */
181
185
 
182
186
  @media (min-width: 20rem) {
@@ -201,18 +205,21 @@ ol {
201
205
 
202
206
  .date-time {
203
207
  display: flex;
204
- flex-flow: column;
208
+ flex-flow: row wrap;
205
209
  gap: 0.5rem;
206
- justify-items: center;
207
- text-align: center;
210
+ place-items: baseline;
208
211
 
209
- .date {
212
+ > * {
213
+ margin: 0;
214
+ padding: 0;
215
+ line-height: 2;
210
216
  width: max-content;
211
217
  }
212
218
 
219
+ /* .date {
220
+ } */
221
+
213
222
  .time {
214
- padding: 0.5rem;
215
223
  border-radius: var(--border-radius);
216
- width: max-content;
217
224
  }
218
225
  }
@@ -2,6 +2,11 @@
2
2
  /* #MEDIA */
3
3
  /*------------------------------------*/
4
4
 
5
+ img {
6
+ width: 100%;
7
+ height: auto;
8
+ }
9
+
5
10
  svg {
6
11
  width: 100%;
7
12
  height: 100%;
@@ -26,6 +26,11 @@
26
26
  border-color: white;
27
27
  }
28
28
  }
29
+
30
+ /* * fixes color bleed check the tours page */
31
+ > *:last-child {
32
+ margin-block-end: 0;
33
+ }
29
34
  }
30
35
 
31
36
  .aurora {
@@ -67,7 +67,6 @@ h3,
67
67
 
68
68
  h4,
69
69
  .kilimanjaro,
70
- /* .spec h2 put this inline */
71
70
  .spec h2 {
72
71
  font-size: 1.5rem; /* 24px */
73
72
  line-height: 2rem; /* 32px */
@@ -231,9 +230,12 @@ select {
231
230
  /* #DEL */
232
231
  /*------------------*/
233
232
 
234
- del {
233
+ /* TODO: v1.2 */
234
+ /* I think this is the only place its used but describes why */
235
+ /* .single__description del {
235
236
  color: hsl(var(--sand__base), var(--dim));
236
237
  @media (prefers-color-scheme: dark) {
237
238
  color: hsl(var(--sand__base), var(--dark));
238
239
  }
239
240
  }
241
+ */
@@ -7,11 +7,6 @@
7
7
  /* #COLOR */
8
8
  /*------------------------------------*/
9
9
 
10
- /* TODO: v1.2 swap to tanager and remove */
11
- --ruby-100: hsl(0, 50%, 50%); /* base */
12
- --ruby-200: hsl(0, 50%, 37.5%);
13
- --ruby-300: hsl(0, 50%, 25%);
14
-
15
10
  --sand-100: hsl(25, 37%, 95%);
16
11
  --sand-150: hsl(25, 37%, 92.5%);
17
12
  --sand-200: hsl(25, 37%, 87.5%);
@@ -21,7 +16,7 @@
21
16
  --navy-200: oklch(37.5% 0.07 230);
22
17
  --navy-300: oklch(25% 0.04 230);
23
18
 
24
- @supports not (oklch: 50% 0.09 230) {
19
+ @supports not (color: oklch(50% 0.09 230)) {
25
20
  --navy-100: #1b6c8c;
26
21
  --navy-200: #0a475f;
27
22
  --navy-300: #092531;
@@ -55,7 +50,7 @@
55
50
  --sand-400: oklch(0.88 0.04 50);
56
51
  /* this finishes where 500 normally would go dark */
57
52
 
58
- @supports not (color: oklch(0.55 0.2 25)) {
53
+ @supports not (color: oklch(0.97 0.01 50)) {
59
54
  --sand-100: #fbf3ef;
60
55
  --sand-200: #faebe3;
61
56
  --sand-300: #f6dfd3;
@@ -65,8 +60,9 @@
65
60
  /* South Tahoe */
66
61
  /* Lake */
67
62
 
68
- --lake-100: oklch(99% 0.001 230);
69
- --lake-100: oklch(95% 0.03 230);
63
+ /* ! whats going on with the 2x 100? */
64
+ /* --lake-100: oklch(99% 0.001 230); */
65
+ --lake-100: oklch(94% 0.03 230);
70
66
  --lake-200: oklch(93% 0.04 230);
71
67
  --lake-300: oklch(90% 0.055 230);
72
68
  --lake-400: oklch(83% 0.08 230);
@@ -30,7 +30,8 @@ export interface PaddleLocationCardTypes {
30
30
 
31
31
  season_start?: string;
32
32
  season_end?: string;
33
- phone?: string;
33
+ phoneNumber?: string;
34
34
 
35
35
  offSeasonDetails?: string;
36
+ phone?: boolean;
36
37
  }