@tokenoftrust/cli 1.2.2 → 1.2.3

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 (29) hide show
  1. package/bin/tot.mjs +1 -5
  2. package/package.json +1 -2
  3. package/src/commands/checkout.mjs +1 -1
  4. package/src/commands/dev.mjs +50 -11
  5. package/src/commands/start.mjs +22 -15
  6. package/src/commands/submit.mjs +4 -5
  7. package/src/sample.mjs +6 -1
  8. package/template/sample-store/content/chrome.html +0 -152
  9. package/template/sample-store/content/chrome.json +0 -94
  10. package/template/sample-store/content/home.html +0 -194
  11. package/template/sample-store/content/home.json +0 -50
  12. package/template/sample-store/content/pages/about.json +0 -10
  13. package/template/sample-store/content/pages/privacy.json +0 -6
  14. package/template/sample-store/content/pages/shipping-returns.json +0 -6
  15. package/template/sample-store/content/pages-html/blogs/news.html +0 -68
  16. package/template/sample-store/content/pages-html/pages/about-us.html +0 -95
  17. package/template/sample-store/content/pages-html/pages/contact-us.html +0 -68
  18. package/template/sample-store/content/pages-html/pages/privacy-policy.html +0 -65
  19. package/template/sample-store/content/pages-html/pages/shipping-returns.html +0 -77
  20. package/template/sample-store/content/themes/giant-navy.json +0 -73
  21. package/template/sample-store/public/img/hero-suicide-bunny.jpg +0 -0
  22. package/template/sample-store/public/img/hero.webp +0 -0
  23. package/template/sample-store/public/img/og.jpg +0 -0
  24. package/template/sample-store/public/logo-wordmark.png +0 -0
  25. package/template/sample-store/public/pages/home.css +0 -120
  26. package/template/sample-store/public/pages/mkt.css +0 -185
  27. package/template/sample-store/public/pages/page.css +0 -155
  28. package/template/sample-store/public/themes/giant-navy.css +0 -76
  29. package/template/sample-store/theme.json +0 -39
@@ -1,155 +0,0 @@
1
- /* ============================================================================
2
- Giant Vapes — shared marketing subpage styles (page.css)
3
- Page hero + prose + contact cards. Used by pages-html/**. Depends on tokens
4
- from themes/giant-navy.css and components from pages/mkt.css.
5
- ========================================================================== */
6
-
7
- /* --- Page hero ------------------------------------------------------------ */
8
- .page-hero { background: linear-gradient(135deg, var(--navy), var(--navy-ink)); color: #fff; }
9
- .page-hero .container { padding-block: clamp(2.5rem, 6vw, 4.5rem); }
10
- .page-hero .eyebrow { display: inline-block; font-family: var(--font-display); font-weight: 700; font-size: .78rem; letter-spacing: .14em; text-transform: uppercase; color: #afc2ff; margin-bottom: .7rem; }
11
- .page-hero h1 { color: #fff; max-width: 22ch; }
12
- .page-hero p { color: #dce5ff; font-size: 1.08rem; margin-top: .9rem; max-width: 60ch; }
13
- .crumbs { font-size: .82rem; color: #a9b8e6; margin-bottom: 1rem; }
14
- .crumbs a:hover { color: #fff; text-decoration: underline; }
15
-
16
- /* --- Prose ---------------------------------------------------------------- */
17
- .prose { max-width: 70ch; margin-inline: auto; }
18
- .prose h2 { margin-top: 2.2rem; margin-bottom: .6rem; }
19
- .prose h3 { margin-top: 1.6rem; margin-bottom: .4rem; }
20
- .prose p { margin-bottom: 1rem; color: var(--ink); }
21
- .prose p.lead { font-size: 1.15rem; color: var(--muted); }
22
- .prose ul.bullets { margin: 0 0 1rem; padding-left: 1.1rem; list-style: disc; }
23
- .prose ul.bullets li { margin-bottom: .4rem; color: var(--ink); }
24
- .prose a { color: var(--navy); font-weight: 600; }
25
- .prose a:hover { text-decoration: underline; }
26
-
27
- /* --- Value cards (about-page "what we're about" grid) --------------------- */
28
- .value-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(14px, 2vw, 22px); margin-top: 1.6rem; }
29
- .value-card { border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 24px; background: #fff; }
30
- .value-card h3 { color: var(--navy); font-size: 1.05rem; margin-bottom: .55rem; }
31
- .value-card p { color: var(--ink); font-size: .96rem; }
32
- @media (max-width: 860px) { .value-grid { grid-template-columns: 1fr; } }
33
-
34
- /* --- Contact cards -------------------------------------------------------- */
35
- .contact-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(14px, 2vw, 22px); margin-top: 1.5rem; }
36
- .contact-card { border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 24px; background: #fff; }
37
- .contact-card h3 { color: var(--navy); font-size: 1.05rem; margin-bottom: .5rem; }
38
- .contact-card a { color: var(--ink); font-weight: 600; }
39
- .contact-card a:hover { color: var(--navy); }
40
- .contact-card p { font-size: .92rem; }
41
-
42
- /* --- Brand chips ---------------------------------------------------------- */
43
- .brand-chips { display: flex; flex-wrap: wrap; gap: 10px; margin: 1rem 0 1.5rem; }
44
- .brand-chips a { border: 1px solid var(--border); border-radius: 999px; padding: 8px 16px; font-size: .88rem; font-weight: 600; color: var(--navy); background: var(--surface); }
45
- .brand-chips a:hover { background: var(--surface-2); }
46
-
47
- @media (max-width: 720px) {
48
- .contact-grid { grid-template-columns: 1fr; }
49
- }
50
-
51
- /* ============================================================================
52
- About page — hero overlay + alternating media/copy splits + pickers
53
- (clones bigdvapor.com/pages/about-us section-for-section)
54
- ========================================================================== */
55
-
56
- /* --- Full-bleed hero with image + left-aligned overlay copy --------------- */
57
- .hero-overlay { position: relative; overflow: hidden; background: var(--navy-ink); }
58
- .hero-overlay > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
59
- .hero-overlay::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(0,10,40,.62) 0%, rgba(0,10,40,.34) 45%, rgba(0,10,40,.08) 100%); }
60
- .hero-overlay__inner { position: relative; z-index: 1; padding-block: clamp(3rem, 9vw, 7rem); }
61
- .hero-overlay .crumbs { color: #cdd8f5; }
62
- .hero-overlay .crumbs a { color: #eaf0ff; }
63
- .hero-overlay h1 { color: #fff; max-width: 16ch; text-shadow: 0 2px 18px rgba(0,10,40,.4); }
64
- .hero-overlay p { color: #eaf0ff; font-size: clamp(1rem, 1.6vw, 1.2rem); margin-top: 1rem; max-width: 46ch; }
65
-
66
- /* --- Media / copy split (Our Story, Our Mission, Service) ------------------ */
67
- .split .container { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(1.75rem, 5vw, 4.5rem); align-items: center; }
68
- .split--rev .container { direction: rtl; }
69
- .split--rev .split__copy, .split--rev .split__media { direction: ltr; }
70
- .split__copy h2 { margin-bottom: 1rem; }
71
- .split__copy p { color: var(--ink); margin-bottom: 1rem; max-width: 52ch; }
72
- .split__copy .btn { margin-top: .4rem; }
73
- .split__media img { width: 100%; border-radius: var(--radius-lg); box-shadow: var(--shadow-md); object-fit: cover; }
74
- .split--center .split__copy { text-align: center; }
75
- .split--center .split__copy p { margin-inline: auto; }
76
- .split--center .split__copy .btn { display: inline-flex; }
77
-
78
- /* --- Trusted Brands band (centered) --------------------------------------- */
79
- .brands-band .brand-chips { justify-content: center; max-width: 780px; margin-inline: auto; }
80
-
81
- /* --- Centered CTA band (Service — decorative image absent from source) ----- */
82
- .cta-band { text-align: center; }
83
- .cta-band .container { max-width: 60ch; }
84
- .cta-band p { color: var(--ink); margin-top: 1rem; }
85
- .cta-band .btn { margin-top: 1.5rem; }
86
-
87
- /* --- Category picker (Find Your Fav) -------------------------------------- */
88
- .pick-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: clamp(12px, 1.6vw, 20px); }
89
- .pick-card {
90
- display: flex; flex-direction: column; justify-content: space-between; gap: 12px;
91
- min-height: 132px; padding: 22px 20px; background: #fff;
92
- border: 1px solid var(--border); border-radius: var(--radius-lg);
93
- transition: transform .14s, box-shadow .14s, border-color .14s;
94
- }
95
- .pick-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); border-color: var(--surface-2); }
96
- .pick-card h3 { color: var(--navy); font-size: 1.15rem; }
97
- .pick-card span { font-family: var(--font-display); font-weight: 600; font-size: .9rem; color: var(--navy); }
98
- .pick-card span::after { content: " →"; }
99
-
100
- /* ============================================================================
101
- Contact page — icon info band + form (clones /pages/contact-us)
102
- ========================================================================== */
103
- .page-hero--center { text-align: center; background: none; color: inherit; }
104
- .page-hero--center h1 { color: var(--ink); max-width: none; margin-inline: auto; }
105
- .page-hero--center p { color: var(--muted); margin-inline: auto; }
106
-
107
- .contact-band { background: var(--navy); border-radius: var(--radius-lg); color: #fff; }
108
- .contact-band .contact-band__inner { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(16px, 3vw, 32px); padding: clamp(28px, 5vw, 48px); text-align: center; }
109
- .contact-band__item svg { width: 40px; height: 40px; margin: 0 auto 16px; stroke: #fff; fill: none; stroke-width: 1.6; }
110
- .contact-band__item a, .contact-band__item span { color: #fff; font-size: 1.02rem; font-weight: 500; }
111
- .contact-band__item a:hover { text-decoration: underline; }
112
-
113
- .contact-form { margin-top: clamp(1.75rem, 4vw, 2.75rem); display: grid; gap: 16px; }
114
- .contact-form .row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
115
- .contact-form input, .contact-form textarea {
116
- width: 100%; font: inherit; color: var(--ink); background: var(--surface);
117
- border: 1px solid var(--border); border-radius: var(--radius); padding: 15px 18px;
118
- }
119
- .contact-form textarea { min-height: 180px; resize: vertical; }
120
- .contact-form input::placeholder, .contact-form textarea::placeholder { color: var(--muted); }
121
- .contact-form input:focus, .contact-form textarea:focus { outline: none; border-color: var(--navy); box-shadow: 0 0 0 3px rgba(0,48,160,.14); }
122
- .contact-form .btn-primary { width: 100%; padding-block: 1em; font-size: 1rem; }
123
-
124
- /* ============================================================================
125
- Blog index — post-card grid (clones /blogs/news "Latest News")
126
- ========================================================================== */
127
- .blog-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(16px, 2.4vw, 28px); }
128
- .blog-card {
129
- display: flex; flex-direction: column; gap: 10px; padding: 24px;
130
- background: #fff; border: 1px solid var(--border); border-radius: var(--radius-lg);
131
- transition: transform .14s, box-shadow .14s, border-color .14s;
132
- }
133
- .blog-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); border-color: var(--surface-2); }
134
- .blog-card__date { font-size: .8rem; color: var(--muted); font-weight: 600; letter-spacing: .02em; }
135
- .blog-card h2 { font-size: 1.18rem; line-height: 1.25; color: var(--ink); }
136
- .blog-card h2 a:hover { color: var(--navy); }
137
- .blog-card__more { margin-top: auto; font-family: var(--font-display); font-weight: 600; color: var(--navy); font-size: .9rem; }
138
- .blog-card__more:hover { text-decoration: underline; }
139
- .blog-card__more::after { content: " →"; }
140
-
141
- /* --- Responsive ----------------------------------------------------------- */
142
- @media (max-width: 900px) {
143
- .pick-grid { grid-template-columns: repeat(2, 1fr); }
144
- .blog-grid { grid-template-columns: repeat(2, 1fr); }
145
- }
146
- @media (max-width: 760px) {
147
- .split .container, .split--rev .container { grid-template-columns: 1fr; direction: ltr; }
148
- .split--rev .split__media { order: -1; }
149
- .contact-band .contact-band__inner { grid-template-columns: 1fr; }
150
- .contact-form .row2 { grid-template-columns: 1fr; }
151
- }
152
- @media (max-width: 560px) {
153
- .pick-grid { grid-template-columns: 1fr 1fr; }
154
- .blog-grid { grid-template-columns: 1fr; }
155
- }
@@ -1,76 +0,0 @@
1
- /* ============================================================================
2
- Giant Vapes — "giant-navy" theme (swappable token + base layer)
3
- Brand: deep navy #1b3b64 on white, warm gold accent #e0a83a. Mirrors
4
- giantvapes.com. This file is the reskinnable layer: design tokens, reset, and
5
- base element styles. Shared components live in pages/mkt.css; home-only in
6
- pages/home.css. Token values mirror tenants/giantvapes/theme.json.
7
- ========================================================================== */
8
-
9
- /* --- Design tokens -------------------------------------------------------- */
10
- :root {
11
- --navy: #1b3b64;
12
- --navy-dark: #142d4d;
13
- --navy-ink: #0f2138;
14
- --ink: #16243d;
15
- --muted: #5b6a82;
16
- --bg: #ffffff;
17
- --surface: #f5f7fa;
18
- --surface-2: #eaeef4;
19
- --border: #e3e8ef;
20
- --gold: #e0a83a;
21
- --gold-dark: #c8901f;
22
- --sale: #8a5d10;
23
- --ok: #2f8a5b;
24
-
25
- --radius-sm: 6px;
26
- --radius: 10px;
27
- --radius-lg: 16px;
28
- --shadow-sm: 0 1px 2px rgba(15, 33, 56, .06), 0 1px 3px rgba(15, 33, 56, .08);
29
- --shadow-md: 0 6px 18px rgba(15, 33, 56, .10);
30
- --shadow-lg: 0 18px 48px rgba(15, 33, 56, .16);
31
-
32
- --container: 1240px;
33
- --font-body: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
34
- --font-display: "Montserrat", var(--font-body);
35
- }
36
-
37
- /* --- Reset ---------------------------------------------------------------- */
38
- *, *::before, *::after { box-sizing: border-box; }
39
- * { margin: 0; }
40
- html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
41
- body {
42
- font-family: var(--font-body);
43
- color: var(--ink);
44
- background: var(--bg);
45
- line-height: 1.55;
46
- -webkit-font-smoothing: antialiased;
47
- text-rendering: optimizeLegibility;
48
- }
49
- img, svg, video { display: block; max-width: 100%; height: auto; }
50
- a { color: inherit; text-decoration: none; }
51
- button { font: inherit; cursor: pointer; }
52
- ul { list-style: none; padding: 0; }
53
-
54
- /* --- Base typography ------------------------------------------------------ */
55
- h1, h2, h3, h4 { font-family: var(--font-display); font-weight: 700; line-height: 1.12; color: var(--ink); letter-spacing: -.01em; }
56
- h1 { font-size: clamp(2rem, 4.6vw, 3.15rem); }
57
- h2 { font-size: clamp(1.6rem, 3.2vw, 2.35rem); }
58
- h3 { font-size: 1.2rem; }
59
- p { color: var(--muted); }
60
-
61
- /* --- Accessibility -------------------------------------------------------- */
62
- :focus-visible { outline: 3px solid var(--navy); outline-offset: 2px; border-radius: 4px; }
63
- .skip-link {
64
- position: absolute; left: 8px; top: -48px; z-index: 200;
65
- background: var(--navy); color: #fff; padding: 10px 16px; border-radius: 0 0 8px 8px;
66
- transition: top .15s ease;
67
- }
68
- .skip-link:focus { top: 0; }
69
- .sr-only {
70
- position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
71
- overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
72
- }
73
- @media (prefers-reduced-motion: reduce) {
74
- html { scroll-behavior: auto; }
75
- *, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
76
- }
@@ -1,39 +0,0 @@
1
- {
2
- "_vendor": "Giant Vapes",
3
- "_note": "Per-vendor theme override (DeepPartial<ThemeTokens>). Matched from giantvapes.com; the brand adopter can regenerate this file. Keyed by tenant_id (giantvapes). Recovered from the old 'pilot' fixture (git 4ed56c3^) when giantvapes was reconstituted as its own colocated tenant.",
4
- "color": {
5
- "bg": "#ffffff",
6
- "surface": "#f5f7fa",
7
- "text": "#16243d",
8
- "muted": "#5b6a82",
9
- "primary": "#1b3b64",
10
- "primary-contrast": "#ffffff",
11
- "accent": "#e0a83a",
12
- "border": "#e3e8ef",
13
- "success": "#2f8a5b",
14
- "sale": "#8a5d10"
15
- },
16
- "type": {
17
- "display": {
18
- "family": "Montserrat",
19
- "weights": [
20
- 600,
21
- 700,
22
- 800
23
- ]
24
- },
25
- "body": {
26
- "family": "Inter",
27
- "weights": [
28
- 400,
29
- 500,
30
- 600
31
- ]
32
- }
33
- },
34
- "brand": {
35
- "logoLight": "https://giantvapes.com/cdn/shop/files/GiantLogo_white_200x.png?v=1738709402",
36
- "ogImage": "https://giantvapes.com/cdn/shop/files/Giant_Logo_Black-01_56304d21-10fc-4a79-822e-dce1097f5c70.png?v=1738699970",
37
- "headerVariant": "dark"
38
- }
39
- }