ds-one 0.2.5-alpha.12 → 0.2.5-alpha.13

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.
@@ -104,6 +104,10 @@ export function initDeviceDetection(): DeviceInfo {
104
104
  scalingFactor.toFixed(3)
105
105
  );
106
106
 
107
+ // Add .mobile class to html element for CSS targeting
108
+ document.documentElement.classList.add("mobile");
109
+ document.documentElement.classList.remove("desktop");
110
+
107
111
  console.log(
108
112
  `[DS one] Mobile device detected - ${deviceInfo.deviceType} (${deviceInfo.screenWidth}x${deviceInfo.screenHeight}), scaling factor: ${scalingFactor.toFixed(2)}`
109
113
  );
@@ -113,6 +117,10 @@ export function initDeviceDetection(): DeviceInfo {
113
117
  document.documentElement.style.setProperty("--sf", "1");
114
118
  // Also set --sf for backwards compatibility
115
119
  document.documentElement.style.setProperty("--sf", "1");
120
+
121
+ // Add .desktop class and remove .mobile class
122
+ document.documentElement.classList.add("desktop");
123
+ document.documentElement.classList.remove("mobile");
116
124
  }
117
125
  console.log(
118
126
  `[DS one] Desktop device detected (${deviceInfo.screenWidth}x${deviceInfo.screenHeight})`
@@ -1,4 +1,4 @@
1
- /* version 0.2.5-alpha.12 */
1
+ /* version 0.2.5-alpha.13 */
2
2
 
3
3
  @import url("https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@200");
4
4
 
@@ -54,9 +54,14 @@ input {
54
54
  --typeface-regular: "GT-America-Standard-Regular";
55
55
  --typeface-medium: "GT-America-Standard-Medium";
56
56
  --typeface-compressed: "GT-America-Compressed-Regular";
57
- --typeface-regular-jp: "Noto Sans JP";
58
57
  --typeface-mono: "Iosevka";
59
58
 
59
+ /* language specific typefaces */
60
+
61
+ --typeface-regular-jp: "Noto Sans JP";
62
+
63
+ /* typefaces sizes and weight */
64
+
60
65
  --type-size-default: calc(14px * var(--sf));
61
66
  --type-size-small: calc(10px * var(--sf));
62
67
  --type-weight-default: 500;
@@ -73,6 +78,35 @@ input {
73
78
  --type-weight-book: 400;
74
79
  --type-lineheight-book: 15px;
75
80
 
81
+ /* ----------------------------------------------------------
82
+ SIZING SCALE
83
+ - Define a base unit ( --1 ) and derive all other sizes
84
+ - Larger sizes are simple multipliers (×2, ×3, ×4)
85
+ - Smaller sizes use fractional multipliers (0.1, 0.25, 0.8)
86
+ ---------------------------------------------------------- */
87
+
88
+ --01: calc(var(--1) * 0.1);
89
+ --025: calc(var(--1) * 0.25);
90
+ --05: calc(var(--1) * 0.5);
91
+ --08: calc(var(--1) * 0.8);
92
+ --1: 20px; /* SET BASE UNIT HERE FOR EXAMPLE 20px */
93
+ --2: calc(var(--1) * 2);
94
+ --3: calc(var(--1) * 3);
95
+ --4: calc(var(--1) * 4);
96
+ --8: calc(var(--1) * 8);
97
+
98
+ /* Semantic sizing units */
99
+
100
+ --tenth: var(--01);
101
+ --quarter: var(--025);
102
+ --half: var(--05);
103
+ --eight-tenth: var(--08);
104
+ --unit: var(--1);
105
+ --double: var(--2);
106
+ --triple: var(--3);
107
+ --quad: var(--4);
108
+ --oct: var(--8);
109
+
76
110
  /* size */
77
111
  --outline-stroke: 1px solid light-dark(var(--black), var(--slate-dark));
78
112
  --outline-stroke-mobile: calc(1px * var(--sf)) solid
@@ -81,20 +115,6 @@ input {
81
115
  --item-height: calc(19px * var(--sf));
82
116
  --margin-correction: calc(1px * var(--sf));
83
117
 
84
- /* SIZING */
85
-
86
- /* main unit */
87
- --1: 20px;
88
- /* bigger sizes */
89
- --2: calc(var(--1) * 2);
90
- --3: calc(var(--1) * 3);
91
- --4: calc(var(--1) * 4);
92
-
93
- /* smaller sizes */
94
- --01: calc(var(--1) * 0.1);
95
- --025: calc(var(--1) * 0.25);
96
- --08: calc(var(--1) * 0.8);
97
-
98
118
  /* button */
99
119
  --button-background-color-primary: var(--accent-color);
100
120
  --button-background-color-secondary: light-dark(
@@ -58,8 +58,7 @@ export class Button extends LitElement {
58
58
  max-height: calc(var(--08) * var(--sf));
59
59
  border: none;
60
60
  cursor: pointer;
61
- font-size: calc(var(--type-size-default) * var(--sf));
62
- padding: 0 calc(1px * var(--sf));
61
+ padding: 0 calc(2px * var(--sf));
63
62
  color: var(--button-text-color);
64
63
  font-family: var(--typeface-regular);
65
64
  }
@@ -50,7 +50,7 @@ export class Text extends LitElement {
50
50
  :host {
51
51
  display: inline;
52
52
  font-family: var(--typeface-regular);
53
- font-size: calc(var(--type-size-default) * var(--sf));
53
+ font-size: var(--type-size-default);
54
54
  font-weight: var(--type-weight-default);
55
55
  line-height: calc(var(--type-lineheight-default) * var(--sf));
56
56
  letter-spacing: calc(var(--type-letterspacing-default) * var(--sf));
@@ -0,0 +1,59 @@
1
+ // ds-container.ts
2
+ // Container component with responsive width constraints
3
+
4
+ import { LitElement, html, css } from "lit";
5
+
6
+ declare global {
7
+ interface CustomElementRegistry {
8
+ define(name: string, constructor: typeof LitElement): void;
9
+ }
10
+ var customElements: CustomElementRegistry;
11
+ }
12
+
13
+ export class Container extends LitElement {
14
+ static styles = css`
15
+ :host {
16
+ display: flex;
17
+ width: 100%;
18
+ max-width: 100%;
19
+ flex-direction: column;
20
+ box-sizing: border-box;
21
+ }
22
+
23
+ /* Ensure children don't overflow */
24
+ :host ::slotted(*) {
25
+ max-width: 100%;
26
+ box-sizing: border-box;
27
+ }
28
+
29
+ /* Mobile: 100% width */
30
+ @media (max-width: 820px) {
31
+ :host {
32
+ width: 100%;
33
+ max-width: 100%;
34
+ }
35
+ }
36
+
37
+ /* Desktop: max-width 1000px, centered */
38
+ @media (min-width: 821px) {
39
+ :host {
40
+ max-width: 1000px;
41
+ margin-left: auto;
42
+ margin-right: auto;
43
+ width: 100%;
44
+ }
45
+ }
46
+ `;
47
+
48
+ render() {
49
+ return html`<slot></slot>`;
50
+ }
51
+ }
52
+
53
+ customElements.define("ds-container", Container);
54
+
55
+ declare global {
56
+ interface HTMLElementTagNameMap {
57
+ "ds-container": Container;
58
+ }
59
+ }
@@ -2,6 +2,7 @@
2
2
  // Simple grid layout component
3
3
 
4
4
  import { LitElement, html, css } from "lit";
5
+ import { detectMobileDevice } from "../0-face/device";
5
6
 
6
7
  declare global {
7
8
  interface CustomElementRegistry {
@@ -16,6 +17,8 @@ export class Grid extends LitElement {
16
17
  };
17
18
 
18
19
  align?: string;
20
+ private resizeObserver?: () => void;
21
+ private resizeTimeout?: any;
19
22
 
20
23
  static styles = css`
21
24
  :host {
@@ -23,13 +26,13 @@ export class Grid extends LitElement {
23
26
  margin-left: 0.5px !important;
24
27
  display: grid;
25
28
  width: 1440px;
26
- height: 360px;
29
+ height: 1280px;
27
30
  grid-template-columns: repeat(auto-fill, 19px);
28
31
  grid-template-rows: repeat(auto-fill, 19px);
29
32
  gap: 1px;
30
33
  row-rule: calc(1px * var(--sf)) solid var(--grid-color);
31
34
  column-rule: calc(1px * var(--sf)) solid var(--grid-color);
32
- outline: 1px solid black;
35
+ outline: calc(1px * var(--sf)) solid var(--yellow);
33
36
  position: fixed;
34
37
  top: 0;
35
38
  left: 50%;
@@ -42,7 +45,7 @@ export class Grid extends LitElement {
42
45
  :host(.mobile) {
43
46
  width: calc(100% - calc(1px * var(--sf)));
44
47
  max-width: 100vw;
45
- margin-left: 0 !important;
48
+ margin-left: 0.5px !important;
46
49
  margin-top: 0 !important;
47
50
  box-sizing: border-box;
48
51
  position: fixed;
@@ -73,6 +76,43 @@ export class Grid extends LitElement {
73
76
  }
74
77
  `;
75
78
 
79
+ connectedCallback() {
80
+ super.connectedCallback();
81
+ this.updateMobileClass();
82
+
83
+ // Listen for resize events to update mobile class
84
+ this.resizeObserver = () => {
85
+ if (this.resizeTimeout) {
86
+ clearTimeout(this.resizeTimeout);
87
+ }
88
+ this.resizeTimeout = setTimeout(() => {
89
+ this.updateMobileClass();
90
+ }, 100);
91
+ };
92
+ window.addEventListener("resize", this.resizeObserver);
93
+ }
94
+
95
+ disconnectedCallback() {
96
+ super.disconnectedCallback();
97
+ if (this.resizeObserver) {
98
+ window.removeEventListener("resize", this.resizeObserver);
99
+ }
100
+ if (this.resizeTimeout) {
101
+ clearTimeout(this.resizeTimeout);
102
+ }
103
+ }
104
+
105
+ private updateMobileClass() {
106
+ const isMobile = detectMobileDevice();
107
+ if (isMobile) {
108
+ this.classList.add("mobile");
109
+ this.classList.remove("desktop");
110
+ } else {
111
+ this.classList.add("desktop");
112
+ this.classList.remove("mobile");
113
+ }
114
+ }
115
+
76
116
  render() {
77
117
  return html``;
78
118
  }
@@ -1,5 +1,5 @@
1
1
  // ds-layout.ts
2
- // Simple grid layout component with debug mode
2
+ // Simple grid layout component with view mode
3
3
 
4
4
  import { LitElement, html, css } from "lit";
5
5
 
@@ -14,12 +14,12 @@ export class Layout extends LitElement {
14
14
  static properties = {
15
15
  mode: { type: String },
16
16
  align: { type: String },
17
- debug: { type: Boolean },
17
+ view: { type: Boolean },
18
18
  };
19
19
 
20
20
  mode: string = "portfolio";
21
21
  align?: string;
22
- debug?: boolean;
22
+ view?: boolean;
23
23
 
24
24
  static styles = css`
25
25
  :host {
@@ -29,79 +29,103 @@ export class Layout extends LitElement {
29
29
  }
30
30
 
31
31
  :host([mode="portfolio"]) {
32
- grid-template-columns: 120px 480px 40px;
33
- grid-template-rows: 120px 120px 60px 180px 60px 120px 60px 20px 120px 120px;
34
- grid-template-areas:
35
- "square . ."
36
- ". title ."
37
- ". header ."
38
- ". projects ."
39
- ". . ."
40
- ". bio ."
41
- ". . ."
42
- ". nav ."
43
- ". . ."
44
- ". footer ."
45
- ". . .";
32
+ --portfolio-cols: 120px 480px 40px;
33
+ --portfolio-rows: 120px 120px 60px 180px 60px 120px 60px 20px 120px 120px;
34
+ --portfolio-areas: "square . ." ". title ." ". header ." ". projects ."
35
+ ". . ." ". bio ." ". . ." ". nav ." ". . ." ". footer ." ". . .";
36
+ --portfolio-overlay-cols: 120px 480px;
37
+ --portfolio-overlay-areas: "square ." ". title" ". header" ". projects"
38
+ ". ." ". bio" ". ." ". nav" ". ." ". footer" ". .";
39
+ grid-template-columns: var(--portfolio-cols);
40
+ grid-template-rows: var(--portfolio-rows);
41
+ grid-template-areas: var(--portfolio-areas);
46
42
  min-height: 600px;
47
43
  background-color: rgba(165, 165, 165, 0.03);
48
44
  max-width: 640px;
49
- margin: 0 auto;
45
+ margin: 0;
46
+ }
47
+
48
+ :host([mode="portfolio"]) .view-overlay {
49
+ grid-template-columns: var(--portfolio-overlay-cols);
50
+ grid-template-rows: var(--portfolio-rows);
51
+ grid-template-areas: var(--portfolio-overlay-areas);
50
52
  }
51
53
 
52
54
  :host([mode="company"]) {
53
- grid-template-columns: auto 400px auto;
54
- grid-template-rows: 80px 20px 20px 120px 20px 120px;
55
- grid-template-areas:
56
- ". . ."
57
- ". header ."
58
- ". . ."
59
- ". content ."
60
- ". . ."
55
+ --company-cols: auto 400px auto;
56
+ --company-rows: 80px 20px 20px 120px 20px 120px;
57
+ --company-areas: ". . ." ". header ." ". . ." ". content ." ". . ."
61
58
  ". footer .";
59
+ grid-template-columns: var(--company-cols);
60
+ grid-template-rows: var(--company-rows);
61
+ grid-template-areas: var(--company-areas);
62
62
  gap: 0;
63
63
  max-width: 100%;
64
64
  }
65
65
 
66
- :host([align="left"]) {
66
+ :host([mode="company"]) .view-overlay {
67
+ grid-template-columns: var(--company-cols);
68
+ grid-template-rows: var(--company-rows);
69
+ grid-template-areas: var(--company-areas);
70
+ gap: 0;
71
+ }
72
+
73
+ :host([align="left"]),
74
+ :host([mode="portfolio"][align="left"]),
75
+ :host([mode="company"][align="left"]),
76
+ :host([mode="app"][align="left"]) {
67
77
  margin: 0;
68
78
  justify-self: start;
69
79
  }
70
80
 
71
- :host([align="center"]) {
81
+ :host([align="center"]),
82
+ :host([mode="portfolio"][align="center"]),
83
+ :host([mode="company"][align="center"]),
84
+ :host([mode="app"][align="center"]) {
72
85
  margin: 0 auto;
73
86
  justify-self: center;
74
87
  }
75
88
 
76
- :host([align="right"]) {
89
+ :host([align="right"]),
90
+ :host([mode="portfolio"][align="right"]),
91
+ :host([mode="company"][align="right"]),
92
+ :host([mode="app"][align="right"]) {
77
93
  margin: 0 0 0 auto;
78
94
  justify-self: end;
79
95
  }
80
96
 
81
97
  /* App mode - Base */
82
98
  :host([mode="app"]) {
83
- grid-template-columns: 1fr;
84
- grid-template-rows: calc(var(--1) * var(--sf)) 20px 1fr auto;
85
- grid-template-areas:
86
- "banner"
87
- "main"
88
- "footer";
99
+ --app-cols: calc(var(--double) * var(--sf));
100
+ --app-rows: calc(var(--unit) * var(--sf)) calc(var(--2) * var(--sf))
101
+ calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))
102
+ calc(var(--unit) * var(--sf));
103
+ --app-areas: "1" "." "2" "." "3";
104
+ --app-overlay-cols: calc(var(--oct) * var(--sf));
105
+ --app-overlay-rows: calc(var(--unit) * var(--sf))
106
+ calc(var(--double) * var(--sf)) calc(var(--unit) * var(--sf))
107
+ calc(var(--unit) * var(--sf));
108
+ --app-overlay-areas: "banner" "." "header" "." "main" "." "footer";
109
+ grid-template-columns: var(--app-cols);
110
+ grid-template-rows: var(--app-rows);
111
+ grid-template-areas: var(--app-areas);
89
112
  min-height: 100vh;
90
113
  background-color: transparent;
91
114
  width: 100%;
92
- margin: 0 auto;
93
115
  gap: 0;
94
- }
95
-
96
- /* App mode - with scaling factor */
97
- :host([mode="app"]) {
98
116
  max-width: calc(400px * var(--sf, 1));
99
117
  padding: calc(60px * var(--sf, 1)) calc(28px * var(--sf, 1))
100
118
  calc(9.751px * var(--sf, 1));
101
119
  gap: calc(28px * var(--sf, 1));
102
120
  }
103
121
 
104
- .debug-overlay {
122
+ :host([mode="app"]) .view-overlay {
123
+ grid-template-columns: var(--app-overlay-cols);
124
+ grid-template-rows: var(--app-overlay-rows);
125
+ grid-template-areas: var(--app-overlay-areas);
126
+ }
127
+
128
+ .view-overlay {
105
129
  position: absolute;
106
130
  margin-left: -1px;
107
131
  top: 0;
@@ -115,37 +139,7 @@ export class Layout extends LitElement {
115
139
  font-weight: bold;
116
140
  }
117
141
 
118
- :host([mode="portfolio"]) .debug-overlay {
119
- grid-template-columns: 120px 480px;
120
- grid-template-rows: 120px 120px 60px 180px 60px 120px 60px 20px 120px 120px;
121
- grid-template-areas:
122
- "square ."
123
- ". title"
124
- ". header"
125
- ". projects"
126
- ". ."
127
- ". bio"
128
- ". ."
129
- ". nav"
130
- ". ."
131
- ". footer"
132
- ". .";
133
- }
134
-
135
- :host([mode="company"]) .debug-overlay {
136
- grid-template-columns: auto 400px auto;
137
- grid-template-rows: 80px 20px 20px 120px 20px 120px;
138
- grid-template-areas:
139
- ". . ."
140
- ". header ."
141
- ". . ."
142
- ". content ."
143
- ". . ."
144
- ". footer .";
145
- gap: 0;
146
- }
147
-
148
- .debug-area {
142
+ .view-area {
149
143
  display: flex;
150
144
  align-items: center;
151
145
  justify-content: center;
@@ -153,145 +147,156 @@ export class Layout extends LitElement {
153
147
  font-weight: var(--type-weight-default);
154
148
  font-family: var(--typeface-regular);
155
149
  color: var(--black);
156
- border: 1px solid red;
150
+ border: 1px solid;
157
151
  opacity: 1;
158
152
  }
159
153
 
160
- .debug-square {
154
+ :host([mode="portfolio"]) .view-area:nth-of-type(1) {
155
+ border-color: var(--tuned-red);
156
+ }
157
+ :host([mode="portfolio"]) .view-area:nth-of-type(2) {
158
+ border-color: var(--sharp-blue);
159
+ }
160
+ :host([mode="portfolio"]) .view-area:nth-of-type(3) {
161
+ border-color: var(--yellow);
162
+ }
163
+ :host([mode="portfolio"]) .view-area:nth-of-type(4) {
164
+ border-color: var(--apple-green);
165
+ }
166
+ :host([mode="portfolio"]) .view-area:nth-of-type(5) {
167
+ border-color: var(--pink);
168
+ }
169
+ :host([mode="portfolio"]) .view-area:nth-of-type(6) {
170
+ border-color: var(--orange);
171
+ }
172
+ :host([mode="portfolio"]) .view-area:nth-of-type(7) {
173
+ border-color: var(--zenith-blue);
174
+ }
175
+
176
+ :host([mode="company"]) .view-area:nth-of-type(1) {
177
+ border-color: var(--tuned-red);
178
+ }
179
+ :host([mode="company"]) .view-area:nth-of-type(2) {
180
+ border-color: var(--sharp-blue);
181
+ }
182
+ :host([mode="company"]) .view-area:nth-of-type(3) {
183
+ border-color: var(--yellow);
184
+ }
185
+
186
+ :host([mode="app"]) .view-area:nth-of-type(1) {
187
+ border-color: var(--tuned-red);
188
+ }
189
+ :host([mode="app"]) .view-area:nth-of-type(2) {
190
+ border-color: var(--sharp-blue);
191
+ }
192
+ :host([mode="app"]) .view-area:nth-of-type(3) {
193
+ border-color: var(--yellow);
194
+ }
195
+ :host([mode="app"]) .view-area:nth-of-type(4) {
196
+ border-color: var(--apple-green);
197
+ }
198
+
199
+ .view-square {
161
200
  grid-area: square;
162
201
  }
163
202
 
164
- .debug-title {
203
+ .view-title {
165
204
  grid-area: title;
166
205
  }
167
206
 
168
- .debug-header {
207
+ .view-header {
169
208
  grid-area: header;
170
- border-color: #0000ff;
171
209
  }
172
210
 
173
- .debug-projects {
211
+ .view-projects {
174
212
  grid-area: projects;
175
- border-color: #ffff00;
176
213
  }
177
214
 
178
- .debug-bio {
215
+ .view-bio {
179
216
  grid-area: bio;
180
- border-color: #ff00ff;
181
217
  }
182
218
 
183
- .debug-nav {
219
+ .view-nav {
184
220
  grid-area: nav;
185
- border-color: #00ffff;
186
221
  }
187
222
 
188
- .debug-footer {
223
+ .view-footer {
189
224
  grid-area: footer;
190
- border-color: rgb(24, 147, 73);
191
- background-color: rgba(127, 123, 11, 0.1);
192
225
  }
193
226
 
194
- .debug-content {
227
+ .view-content {
195
228
  grid-area: content;
196
- border-color: rgba(71, 231, 71, 0.63);
197
229
  }
198
230
 
199
- :host([mode="app"]) .debug-overlay {
200
- grid-template-columns: 1fr;
201
- grid-template-rows:
202
- calc(var(--1) * var(--sf))
203
- calc(var(--2) * var(--sf))
204
- calc(var(--4) * var(--sf))
205
- calc(var(--1) * var(--sf));
206
- grid-template-areas:
207
- "banner"
208
- "header"
209
- "main"
210
- "footer";
211
- }
212
-
213
- .debug-banner {
231
+ .view-banner {
214
232
  grid-area: banner;
215
- border-color: #daed09;
216
- }
217
-
218
- .debug-header {
219
- grid-area: header;
220
- border-color: #0000ff;
221
- background-color: rgba(127, 123, 11, 0.5);
222
233
  }
223
234
 
224
- .debug-main {
235
+ .view-main {
225
236
  grid-area: main;
226
- border-color: #0000ff;
227
- }
228
-
229
- .debug-footer-app {
230
- grid-area: footer;
231
- border-color: #ffa500;
232
237
  }
233
238
  `;
234
239
 
235
240
  render() {
236
- const isDebug = this.debug || this.mode === "debug";
241
+ const isView = this.view || this.mode === "view";
237
242
  const isPortfolio = this.mode === "portfolio";
238
243
  const isCompany = this.mode === "company";
239
244
  const isApp = this.mode === "app";
240
245
 
241
246
  return html`
242
247
  <slot></slot>
243
- ${isDebug
248
+ ${isView
244
249
  ? html`
245
- <div class="debug-overlay">
250
+ <div class="view-overlay">
246
251
  ${isApp
247
252
  ? html`
248
- <div class="debug-area debug-banner">
253
+ <div class="view-area view-banner">
249
254
  <ds-text key="banner">banner</ds-text>
250
255
  </div>
251
- <div class="debug-area debug-header">
256
+ <div class="view-area view-header">
252
257
  <ds-text key="header">header</ds-text>
253
258
  </div>
254
259
 
255
- <div class="debug-area debug-main">
260
+ <div class="view-area view-main">
256
261
  <ds-text key="main">main</ds-text>
257
262
  </div>
258
- <div class="debug-area debug-footer-app">
263
+ <div class="view-area view-footer">
259
264
  <ds-text key="footer">footer</ds-text>
260
265
  </div>
261
266
  `
262
267
  : isCompany
263
268
  ? html`
264
- <div class="debug-area debug-header">
269
+ <div class="view-area view-header">
265
270
  <ds-text key="header">header</ds-text>
266
271
  </div>
267
- <div class="debug-area debug-content">
272
+ <div class="view-area view-content">
268
273
  <ds-text key="content">content</ds-text>
269
274
  </div>
270
- <div class="debug-area debug-footer">
275
+ <div class="view-area view-footer">
271
276
  <ds-text key="footer">footer</ds-text>
272
277
  </div>
273
278
  `
274
279
  : isPortfolio
275
280
  ? html`
276
- <div class="debug-area debug-square">
281
+ <div class="view-area view-square">
277
282
  <ds-text key="square">square</ds-text>
278
283
  </div>
279
- <div class="debug-area debug-title">
284
+ <div class="view-area view-title">
280
285
  <ds-text key="title">title</ds-text>
281
286
  </div>
282
- <div class="debug-area debug-header">
287
+ <div class="view-area view-header">
283
288
  <ds-text key="header">header</ds-text>
284
289
  </div>
285
- <div class="debug-area debug-projects">
290
+ <div class="view-area view-projects">
286
291
  <ds-text key="projects">projects</ds-text>
287
292
  </div>
288
- <div class="debug-area debug-bio">
293
+ <div class="view-area view-bio">
289
294
  <ds-text key="bio">bio</ds-text>
290
295
  </div>
291
- <div class="debug-area debug-nav">
296
+ <div class="view-area view-nav">
292
297
  <ds-text key="nav">nav</ds-text>
293
298
  </div>
294
- <div class="debug-area debug-footer">
299
+ <div class="view-area view-footer">
295
300
  <ds-text key="footer">footer</ds-text>
296
301
  </div>
297
302
  `