hydrogen-forge 0.1.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.
Files changed (118) hide show
  1. package/README.md +212 -0
  2. package/dist/commands/add.d.ts +7 -0
  3. package/dist/commands/add.d.ts.map +1 -0
  4. package/dist/commands/add.js +123 -0
  5. package/dist/commands/add.js.map +1 -0
  6. package/dist/commands/create.d.ts +8 -0
  7. package/dist/commands/create.d.ts.map +1 -0
  8. package/dist/commands/create.js +160 -0
  9. package/dist/commands/create.js.map +1 -0
  10. package/dist/commands/setup-mcp.d.ts +7 -0
  11. package/dist/commands/setup-mcp.d.ts.map +1 -0
  12. package/dist/commands/setup-mcp.js +179 -0
  13. package/dist/commands/setup-mcp.js.map +1 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +50 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/lib/generators.d.ts +6 -0
  19. package/dist/lib/generators.d.ts.map +1 -0
  20. package/dist/lib/generators.js +470 -0
  21. package/dist/lib/generators.js.map +1 -0
  22. package/dist/lib/utils.d.ts +17 -0
  23. package/dist/lib/utils.d.ts.map +1 -0
  24. package/dist/lib/utils.js +101 -0
  25. package/dist/lib/utils.js.map +1 -0
  26. package/package.json +54 -0
  27. package/templates/starter/.env.example +21 -0
  28. package/templates/starter/.graphqlrc.ts +27 -0
  29. package/templates/starter/README.md +117 -0
  30. package/templates/starter/app/assets/favicon.svg +28 -0
  31. package/templates/starter/app/components/AddToCartButton.tsx +102 -0
  32. package/templates/starter/app/components/Aside.tsx +136 -0
  33. package/templates/starter/app/components/CartLineItem.tsx +229 -0
  34. package/templates/starter/app/components/CartMain.tsx +131 -0
  35. package/templates/starter/app/components/CartSummary.tsx +315 -0
  36. package/templates/starter/app/components/CollectionFilters.tsx +330 -0
  37. package/templates/starter/app/components/CollectionGrid.tsx +141 -0
  38. package/templates/starter/app/components/Footer.tsx +218 -0
  39. package/templates/starter/app/components/Header.tsx +296 -0
  40. package/templates/starter/app/components/PageLayout.tsx +174 -0
  41. package/templates/starter/app/components/PaginatedResourceSection.tsx +41 -0
  42. package/templates/starter/app/components/ProductCard.tsx +151 -0
  43. package/templates/starter/app/components/ProductForm.tsx +156 -0
  44. package/templates/starter/app/components/ProductGallery.tsx +164 -0
  45. package/templates/starter/app/components/ProductGrid.tsx +64 -0
  46. package/templates/starter/app/components/ProductImage.tsx +23 -0
  47. package/templates/starter/app/components/ProductItem.tsx +44 -0
  48. package/templates/starter/app/components/ProductPrice.tsx +97 -0
  49. package/templates/starter/app/components/SearchDialog.tsx +599 -0
  50. package/templates/starter/app/components/SearchForm.tsx +68 -0
  51. package/templates/starter/app/components/SearchFormPredictive.tsx +76 -0
  52. package/templates/starter/app/components/SearchResults.tsx +161 -0
  53. package/templates/starter/app/components/SearchResultsPredictive.tsx +461 -0
  54. package/templates/starter/app/entry.client.tsx +21 -0
  55. package/templates/starter/app/entry.server.tsx +53 -0
  56. package/templates/starter/app/graphql/customer-account/CustomerAddressMutations.ts +64 -0
  57. package/templates/starter/app/graphql/customer-account/CustomerDetailsQuery.ts +40 -0
  58. package/templates/starter/app/graphql/customer-account/CustomerOrderQuery.ts +90 -0
  59. package/templates/starter/app/graphql/customer-account/CustomerOrdersQuery.ts +63 -0
  60. package/templates/starter/app/graphql/customer-account/CustomerUpdateMutation.ts +25 -0
  61. package/templates/starter/app/lib/context.ts +60 -0
  62. package/templates/starter/app/lib/fragments.ts +234 -0
  63. package/templates/starter/app/lib/orderFilters.ts +90 -0
  64. package/templates/starter/app/lib/redirect.ts +23 -0
  65. package/templates/starter/app/lib/search.ts +79 -0
  66. package/templates/starter/app/lib/session.ts +72 -0
  67. package/templates/starter/app/lib/variants.ts +46 -0
  68. package/templates/starter/app/root.tsx +209 -0
  69. package/templates/starter/app/routes/$.tsx +11 -0
  70. package/templates/starter/app/routes/[robots.txt].tsx +117 -0
  71. package/templates/starter/app/routes/[sitemap.xml].tsx +16 -0
  72. package/templates/starter/app/routes/_index.tsx +167 -0
  73. package/templates/starter/app/routes/account.$.tsx +9 -0
  74. package/templates/starter/app/routes/account._index.tsx +5 -0
  75. package/templates/starter/app/routes/account.addresses.tsx +516 -0
  76. package/templates/starter/app/routes/account.orders.$id.tsx +222 -0
  77. package/templates/starter/app/routes/account.orders._index.tsx +222 -0
  78. package/templates/starter/app/routes/account.profile.tsx +133 -0
  79. package/templates/starter/app/routes/account.tsx +97 -0
  80. package/templates/starter/app/routes/account_.authorize.tsx +5 -0
  81. package/templates/starter/app/routes/account_.login.tsx +7 -0
  82. package/templates/starter/app/routes/account_.logout.tsx +11 -0
  83. package/templates/starter/app/routes/api.$version.[graphql.json].tsx +14 -0
  84. package/templates/starter/app/routes/blogs.$blogHandle.$articleHandle.tsx +129 -0
  85. package/templates/starter/app/routes/blogs.$blogHandle._index.tsx +175 -0
  86. package/templates/starter/app/routes/blogs._index.tsx +109 -0
  87. package/templates/starter/app/routes/cart.$lines.tsx +70 -0
  88. package/templates/starter/app/routes/cart.tsx +117 -0
  89. package/templates/starter/app/routes/collections.$handle.tsx +161 -0
  90. package/templates/starter/app/routes/collections._index.tsx +133 -0
  91. package/templates/starter/app/routes/collections.all.tsx +122 -0
  92. package/templates/starter/app/routes/discount.$code.tsx +48 -0
  93. package/templates/starter/app/routes/pages.$handle.tsx +88 -0
  94. package/templates/starter/app/routes/policies.$handle.tsx +93 -0
  95. package/templates/starter/app/routes/policies._index.tsx +69 -0
  96. package/templates/starter/app/routes/products.$handle.tsx +232 -0
  97. package/templates/starter/app/routes/search.tsx +426 -0
  98. package/templates/starter/app/routes/sitemap.$type.$page[.xml].tsx +23 -0
  99. package/templates/starter/app/routes.ts +9 -0
  100. package/templates/starter/app/styles/app.css +574 -0
  101. package/templates/starter/app/styles/reset.css +139 -0
  102. package/templates/starter/app/styles/tailwind.css +116 -0
  103. package/templates/starter/customer-accountapi.generated.d.ts +543 -0
  104. package/templates/starter/env.d.ts +7 -0
  105. package/templates/starter/eslint.config.js +247 -0
  106. package/templates/starter/guides/predictiveSearch/predictiveSearch.jpg +0 -0
  107. package/templates/starter/guides/predictiveSearch/predictiveSearch.md +394 -0
  108. package/templates/starter/guides/search/search.jpg +0 -0
  109. package/templates/starter/guides/search/search.md +335 -0
  110. package/templates/starter/package.json +71 -0
  111. package/templates/starter/postcss.config.js +6 -0
  112. package/templates/starter/public/.gitkeep +0 -0
  113. package/templates/starter/react-router.config.ts +13 -0
  114. package/templates/starter/server.ts +59 -0
  115. package/templates/starter/storefrontapi.generated.d.ts +1264 -0
  116. package/templates/starter/tailwind.config.js +83 -0
  117. package/templates/starter/tsconfig.json +67 -0
  118. package/templates/starter/vite.config.ts +32 -0
@@ -0,0 +1,23 @@
1
+ import type {Route} from './+types/sitemap.$type.$page[.xml]';
2
+ import {getSitemap} from '@shopify/hydrogen';
3
+
4
+ export async function loader({
5
+ request,
6
+ params,
7
+ context: {storefront},
8
+ }: Route.LoaderArgs) {
9
+ const response = await getSitemap({
10
+ storefront,
11
+ request,
12
+ params,
13
+ locales: ['EN-US', 'EN-CA', 'FR-CA'],
14
+ getLink: ({type, baseUrl, handle, locale}) => {
15
+ if (!locale) return `${baseUrl}/${type}/${handle}`;
16
+ return `${baseUrl}/${locale}/${type}/${handle}`;
17
+ },
18
+ });
19
+
20
+ response.headers.set('Cache-Control', `max-age=${60 * 60 * 24}`);
21
+
22
+ return response;
23
+ }
@@ -0,0 +1,9 @@
1
+ import {flatRoutes} from '@react-router/fs-routes';
2
+ import {type RouteConfig} from '@react-router/dev/routes';
3
+ import {hydrogenRoutes} from '@shopify/hydrogen';
4
+
5
+ export default hydrogenRoutes([
6
+ ...(await flatRoutes()),
7
+ // Manual route definitions can be added to this array, in addition to or instead of using the `flatRoutes` file-based routing convention.
8
+ // See https://reactrouter.com/api/framework-conventions/routes.ts#routests
9
+ ]) satisfies RouteConfig;
@@ -0,0 +1,574 @@
1
+ :root {
2
+ --aside-width: 400px;
3
+ --cart-aside-summary-height-with-discount: 300px;
4
+ --cart-aside-summary-height: 250px;
5
+ --grid-item-width: 355px;
6
+ --header-height: 64px;
7
+ --color-dark: #000;
8
+ --color-light: #fff;
9
+ }
10
+
11
+ img {
12
+ border-radius: 4px;
13
+ }
14
+
15
+ /*
16
+ * --------------------------------------------------
17
+ * Non anchor links
18
+ * --------------------------------------------------
19
+ */
20
+ .link:hover {
21
+ text-decoration: underline;
22
+ cursor: pointer;
23
+ }
24
+
25
+ /*
26
+ * --------------------------------------------------
27
+ * components/Aside
28
+ * --------------------------------------------------
29
+ */
30
+ @media (max-width: 45em) {
31
+ html:has(.overlay.expanded) {
32
+ overflow: hidden;
33
+ }
34
+ }
35
+
36
+ aside {
37
+ background: var(--color-light);
38
+ box-shadow: 0 0 50px rgba(0, 0, 0, 0.3);
39
+ height: 100vh;
40
+ width: min(var(--aside-width), 100vw);
41
+ position: fixed;
42
+ right: calc(-1 * var(--aside-width));
43
+ top: 0;
44
+ transition: transform 200ms ease-in-out;
45
+ }
46
+
47
+ aside header {
48
+ align-items: center;
49
+ border-bottom: 1px solid var(--color-dark);
50
+ display: flex;
51
+ height: var(--header-height);
52
+ justify-content: space-between;
53
+ padding: 0 20px;
54
+ }
55
+
56
+ aside header h3 {
57
+ margin: 0;
58
+ }
59
+
60
+ aside header .close {
61
+ font-weight: bold;
62
+ opacity: 0.8;
63
+ text-decoration: none;
64
+ transition: all 200ms;
65
+ width: 20px;
66
+ }
67
+
68
+ aside header .close:hover {
69
+ opacity: 1;
70
+ }
71
+
72
+ aside header h2 {
73
+ margin-bottom: 0.6rem;
74
+ margin-top: 0;
75
+ }
76
+
77
+ aside main {
78
+ margin: 1rem;
79
+ }
80
+
81
+ aside p {
82
+ margin: 0 0 0.25rem;
83
+ }
84
+
85
+ aside p:last-child {
86
+ margin: 0;
87
+ }
88
+
89
+ aside li {
90
+ margin-bottom: 0.125rem;
91
+ }
92
+
93
+ .overlay {
94
+ background: rgba(0, 0, 0, 0.2);
95
+ bottom: 0;
96
+ left: 0;
97
+ opacity: 0;
98
+ pointer-events: none;
99
+ position: fixed;
100
+ right: 0;
101
+ top: 0;
102
+ transition: opacity 400ms ease-in-out;
103
+ transition: opacity 400ms;
104
+ visibility: hidden;
105
+ z-index: 10;
106
+ }
107
+
108
+ .overlay .close-outside {
109
+ background: transparent;
110
+ border: none;
111
+ color: transparent;
112
+ height: 100%;
113
+ left: 0;
114
+ position: absolute;
115
+ top: 0;
116
+ width: calc(100% - var(--aside-width));
117
+ }
118
+
119
+ .overlay .light {
120
+ background: rgba(255, 255, 255, 0.5);
121
+ }
122
+
123
+ .overlay .cancel {
124
+ cursor: default;
125
+ height: 100%;
126
+ position: absolute;
127
+ width: 100%;
128
+ }
129
+
130
+ .overlay.expanded {
131
+ opacity: 1;
132
+ pointer-events: auto;
133
+ visibility: visible;
134
+ }
135
+ /* reveal aside */
136
+ .overlay.expanded aside {
137
+ transform: translateX(calc(var(--aside-width) * -1));
138
+ }
139
+
140
+ button.reset {
141
+ border: 0;
142
+ background: inherit;
143
+ font-size: inherit;
144
+ }
145
+
146
+ button.reset > * {
147
+ margin: 0;
148
+ }
149
+
150
+ button.reset:not(:has(> *)) {
151
+ height: 1.5rem;
152
+ line-height: 1.5rem;
153
+ }
154
+
155
+ button.reset:hover:not(:has(> *)) {
156
+ text-decoration: underline;
157
+ cursor: pointer;
158
+ }
159
+
160
+ /*
161
+ * --------------------------------------------------
162
+ * components/Header
163
+ * --------------------------------------------------
164
+ */
165
+ .header {
166
+ align-items: center;
167
+ background: #fff;
168
+ display: flex;
169
+ height: var(--header-height);
170
+ padding: 0 1rem;
171
+ position: sticky;
172
+ top: 0;
173
+ z-index: 1;
174
+ }
175
+
176
+ .header-menu-mobile-toggle {
177
+ @media (min-width: 48em) {
178
+ display: none;
179
+ }
180
+ }
181
+
182
+ .header-menu-mobile {
183
+ display: flex;
184
+ flex-direction: column;
185
+ grid-gap: 1rem;
186
+ }
187
+
188
+ .header-menu-desktop {
189
+ display: none;
190
+ grid-gap: 1rem;
191
+ @media (min-width: 45em) {
192
+ display: flex;
193
+ grid-gap: 1rem;
194
+ margin-left: 3rem;
195
+ }
196
+ }
197
+
198
+ .header-menu-item {
199
+ cursor: pointer;
200
+ }
201
+
202
+ .header-ctas {
203
+ align-items: center;
204
+ display: flex;
205
+ grid-gap: 1rem;
206
+ margin-left: auto;
207
+ }
208
+
209
+ .header-ctas > * {
210
+ min-width: fit-content;
211
+ }
212
+
213
+ /*
214
+ * --------------------------------------------------
215
+ * components/Footer
216
+ * --------------------------------------------------
217
+ */
218
+ .footer {
219
+ background: var(--color-dark);
220
+ margin-top: auto;
221
+ }
222
+
223
+ .footer-menu {
224
+ justify-content: center;
225
+ display: flex;
226
+ flex-wrap: wrap;
227
+ grid-gap: 1rem;
228
+ padding: 1rem;
229
+ }
230
+
231
+ .footer-menu a {
232
+ color: var(--color-light);
233
+ min-width: fit-content;
234
+ }
235
+
236
+ /*
237
+ * --------------------------------------------------
238
+ * components/Cart
239
+ * --------------------------------------------------
240
+ */
241
+ .cart-main {
242
+ height: 100%;
243
+ max-height: calc(100vh - var(--cart-aside-summary-height));
244
+ overflow-y: auto;
245
+ width: auto;
246
+ }
247
+
248
+ .cart-main.with-discount {
249
+ max-height: calc(100vh - var(--cart-aside-summary-height-with-discount));
250
+ }
251
+
252
+ .cart-line {
253
+ display: flex;
254
+ padding: 0.75rem 0;
255
+ }
256
+
257
+ .cart-line img {
258
+ height: 100%;
259
+ display: block;
260
+ margin-right: 0.75rem;
261
+ }
262
+
263
+ .cart-summary-page {
264
+ position: relative;
265
+ }
266
+
267
+ .cart-summary-aside {
268
+ background: white;
269
+ border-top: 1px solid var(--color-dark);
270
+ bottom: 0;
271
+ padding-top: 0.75rem;
272
+ position: absolute;
273
+ width: calc(var(--aside-width) - 40px);
274
+ }
275
+
276
+ .cart-line-quantity {
277
+ display: flex;
278
+ }
279
+
280
+ .cart-discount {
281
+ align-items: center;
282
+ display: flex;
283
+ margin-top: 0.25rem;
284
+ }
285
+
286
+ .cart-subtotal {
287
+ align-items: center;
288
+ display: flex;
289
+ }
290
+ /*
291
+ * --------------------------------------------------
292
+ * components/Search
293
+ * --------------------------------------------------
294
+ */
295
+ .predictive-search {
296
+ height: calc(100vh - var(--header-height) - 40px);
297
+ overflow-y: auto;
298
+ }
299
+
300
+ .predictive-search-form {
301
+ background: var(--color-light);
302
+ position: sticky;
303
+ top: 0;
304
+ }
305
+
306
+ .predictive-search-result {
307
+ margin-bottom: 2rem;
308
+ }
309
+
310
+ .predictive-search-result h5 {
311
+ text-transform: uppercase;
312
+ }
313
+
314
+ .predictive-search-result-item {
315
+ margin-bottom: 0.5rem;
316
+ }
317
+
318
+ .predictive-search-result-item a {
319
+ align-items: center;
320
+ display: flex;
321
+ }
322
+
323
+ .predictive-search-result-item a img {
324
+ margin-right: 0.75rem;
325
+ height: 100%;
326
+ }
327
+
328
+ .search-result {
329
+ margin-bottom: 1.5rem;
330
+ }
331
+
332
+ .search-results-item {
333
+ margin-bottom: 0.5rem;
334
+ }
335
+
336
+ .search-results-item a {
337
+ display: flex;
338
+ flex: row;
339
+ align-items: center;
340
+ gap: 1rem;
341
+ }
342
+
343
+ /*
344
+ * --------------------------------------------------
345
+ * routes/__index
346
+ * --------------------------------------------------
347
+ */
348
+ .featured-collection {
349
+ display: block;
350
+ margin-bottom: 2rem;
351
+ position: relative;
352
+ }
353
+
354
+ .featured-collection-image {
355
+ aspect-ratio: 1 / 1;
356
+ @media (min-width: 45em) {
357
+ aspect-ratio: 16 / 9;
358
+ }
359
+ }
360
+
361
+ .featured-collection img {
362
+ height: auto;
363
+ max-height: 100%;
364
+ object-fit: cover;
365
+ }
366
+
367
+ .recommended-products-grid {
368
+ display: grid;
369
+ grid-gap: 1.5rem;
370
+ grid-template-columns: repeat(2, 1fr);
371
+ @media (min-width: 45em) {
372
+ grid-template-columns: repeat(4, 1fr);
373
+ }
374
+ }
375
+
376
+ .recommended-product img {
377
+ height: auto;
378
+ }
379
+
380
+ /*
381
+ * --------------------------------------------------
382
+ * routes/collections._index.tsx
383
+ * --------------------------------------------------
384
+ */
385
+ .collections-grid {
386
+ display: grid;
387
+ grid-gap: 1.5rem;
388
+ grid-template-columns: repeat(auto-fit, minmax(var(--grid-item-width), 1fr));
389
+ margin-bottom: 2rem;
390
+ }
391
+
392
+ .collection-item img {
393
+ height: auto;
394
+ }
395
+
396
+ /*
397
+ * --------------------------------------------------
398
+ * routes/collections.$handle.tsx
399
+ * --------------------------------------------------
400
+ */
401
+ .collection-description {
402
+ margin-bottom: 1rem;
403
+ max-width: 95%;
404
+ @media (min-width: 45em) {
405
+ max-width: 600px;
406
+ }
407
+ }
408
+
409
+ .products-grid {
410
+ display: grid;
411
+ grid-gap: 1.5rem;
412
+ grid-template-columns: repeat(auto-fit, minmax(var(--grid-item-width), 1fr));
413
+ margin-bottom: 2rem;
414
+ }
415
+
416
+ .product-item img {
417
+ height: auto;
418
+ width: 100%;
419
+ }
420
+
421
+ /*
422
+ * --------------------------------------------------
423
+ * routes/products.$handle.tsx
424
+ * --------------------------------------------------
425
+ */
426
+ .product {
427
+ display: grid;
428
+ @media (min-width: 45em) {
429
+ grid-template-columns: 1fr 1fr;
430
+ grid-gap: 4rem;
431
+ }
432
+ }
433
+
434
+ .product h1 {
435
+ margin-top: 0;
436
+ }
437
+
438
+ .product-image img {
439
+ height: auto;
440
+ width: 100%;
441
+ }
442
+
443
+ .product-main {
444
+ align-self: start;
445
+ position: sticky;
446
+ top: 6rem;
447
+ }
448
+
449
+ .product-price-on-sale {
450
+ display: flex;
451
+ grid-gap: 0.5rem;
452
+ }
453
+
454
+ .product-price-on-sale s {
455
+ opacity: 0.5;
456
+ }
457
+
458
+ .product-options-grid {
459
+ display: flex;
460
+ flex-wrap: wrap;
461
+ grid-gap: 0.75rem;
462
+ }
463
+
464
+ .product-options-item,
465
+ .product-options-item:disabled {
466
+ padding: 0.25rem 0.5rem;
467
+ background-color: transparent;
468
+ font-size: 1rem;
469
+ font-family: inherit;
470
+ }
471
+
472
+ .product-option-label-swatch {
473
+ width: 1.25rem;
474
+ height: 1.25rem;
475
+ margin: 0.25rem 0;
476
+ }
477
+
478
+ .product-option-label-swatch img {
479
+ width: 100%;
480
+ }
481
+
482
+ /*
483
+ * --------------------------------------------------
484
+ * routes/blog._index.tsx
485
+ * --------------------------------------------------
486
+ */
487
+ .blog-grid {
488
+ display: grid;
489
+ grid-gap: 1.5rem;
490
+ grid-template-columns: repeat(auto-fit, minmax(var(--grid-item-width), 1fr));
491
+ margin-bottom: 2rem;
492
+ }
493
+
494
+ .blog-article-image {
495
+ aspect-ratio: 3/2;
496
+ display: block;
497
+ }
498
+
499
+ .blog-article-image img {
500
+ height: 100%;
501
+ }
502
+
503
+ /*
504
+ * --------------------------------------------------
505
+ * routes/blog.$articlehandle.tsx
506
+ * --------------------------------------------------
507
+ */
508
+ .article img {
509
+ height: auto;
510
+ width: 100%;
511
+ }
512
+
513
+ /*
514
+ * --------------------------------------------------
515
+ * routes/account
516
+ * --------------------------------------------------
517
+ */
518
+
519
+ .account-logout {
520
+ display: inline-block;
521
+ }
522
+
523
+ /*
524
+ * --------------------------------------------------
525
+ * Order Search Form - Minimal & Responsive
526
+ * --------------------------------------------------
527
+ */
528
+ .order-search-form {
529
+ margin-bottom: 1.5rem;
530
+ }
531
+
532
+ .order-search-fieldset {
533
+ border: 1px solid #e5e5e5;
534
+ border-radius: 4px;
535
+ padding: 1rem;
536
+ }
537
+
538
+ .order-search-legend {
539
+ font-weight: 600;
540
+ padding: 0 0.5rem;
541
+ }
542
+
543
+ .order-search-active {
544
+ font-weight: normal;
545
+ opacity: 0.7;
546
+ margin-left: 0.5rem;
547
+ }
548
+
549
+ .order-search-inputs {
550
+ display: grid;
551
+ gap: 1rem;
552
+ margin: 0.25rem 0 1rem;
553
+ grid-template-columns: 1fr;
554
+ }
555
+
556
+ @media (min-width: 640px) {
557
+ .order-search-inputs {
558
+ grid-template-columns: 1fr 1fr;
559
+ }
560
+ }
561
+
562
+ .order-search-input {
563
+ width: 100%;
564
+ padding: 0.5rem;
565
+ border: 1px solid #d1d5db;
566
+ border-radius: 4px;
567
+ font-size: 1rem;
568
+ }
569
+
570
+ .order-search-buttons {
571
+ display: flex;
572
+ gap: 0.75rem;
573
+ flex-wrap: wrap;
574
+ }
@@ -0,0 +1,139 @@
1
+ body {
2
+ font-family:
3
+ system-ui,
4
+ -apple-system,
5
+ BlinkMacSystemFont,
6
+ 'Segoe UI',
7
+ Roboto,
8
+ Oxygen,
9
+ Ubuntu,
10
+ Cantarell,
11
+ 'Open Sans',
12
+ 'Helvetica Neue',
13
+ sans-serif;
14
+ margin: 0;
15
+ padding: 0;
16
+ }
17
+
18
+ h1,
19
+ h2,
20
+ p {
21
+ margin: 0;
22
+ padding: 0;
23
+ }
24
+
25
+ h1 {
26
+ font-size: 1.6rem;
27
+ font-weight: 700;
28
+ line-height: 1.4;
29
+ margin-bottom: 2rem;
30
+ margin-top: 2rem;
31
+ }
32
+
33
+ h2 {
34
+ font-size: 1.2rem;
35
+ font-weight: 700;
36
+ line-height: 1.4;
37
+ margin-bottom: 1rem;
38
+ }
39
+
40
+ h4 {
41
+ margin-top: 0.5rem;
42
+ margin-bottom: 0.5rem;
43
+ }
44
+
45
+ h5 {
46
+ margin-bottom: 1rem;
47
+ margin-top: 0.5rem;
48
+ }
49
+
50
+ p {
51
+ font-size: 1rem;
52
+ line-height: 1.4;
53
+ }
54
+
55
+ a {
56
+ color: #000;
57
+ text-decoration: none;
58
+ }
59
+
60
+ a:hover {
61
+ text-decoration: underline;
62
+ cursor: pointer;
63
+ }
64
+
65
+ hr {
66
+ border-bottom: none;
67
+ border-top: 1px solid #000;
68
+ margin: 0;
69
+ }
70
+
71
+ pre {
72
+ white-space: pre-wrap;
73
+ }
74
+
75
+ body {
76
+ display: flex;
77
+ flex-direction: column;
78
+ min-height: 100vh;
79
+ }
80
+
81
+ body > main {
82
+ margin: 0 1rem 1rem 1rem;
83
+ }
84
+
85
+ section {
86
+ padding: 1rem 0;
87
+ @media (min-width: 768px) {
88
+ padding: 2rem 0;
89
+ }
90
+ }
91
+
92
+ fieldset {
93
+ display: flex;
94
+ flex-direction: column;
95
+ margin-bottom: 0.5rem;
96
+ padding: 1rem;
97
+ }
98
+
99
+ form {
100
+ max-width: 100%;
101
+ @media (min-width: 768px) {
102
+ max-width: 400px;
103
+ }
104
+ }
105
+
106
+ input {
107
+ border-radius: 4px;
108
+ border: 1px solid #000;
109
+ font-size: 1rem;
110
+ margin-bottom: 0.5rem;
111
+ margin-top: 0.25rem;
112
+ padding: 0.5rem;
113
+ }
114
+
115
+ legend {
116
+ font-weight: 600;
117
+ margin-bottom: 0.5rem;
118
+ }
119
+
120
+ ul {
121
+ list-style: none;
122
+ margin: 0;
123
+ padding: 0;
124
+ }
125
+
126
+ li {
127
+ margin-bottom: 0.5rem;
128
+ }
129
+
130
+ dl {
131
+ margin: 0.5rem 0;
132
+ }
133
+
134
+ code {
135
+ background: #ddd;
136
+ border-radius: 4px;
137
+ font-family: monospace;
138
+ padding: 0.25rem;
139
+ }