miguelgargallo commited on
Commit
65aa41e
·
1 Parent(s): 5e74587

Source Code

Browse files
Files changed (4) hide show
  1. .gitignore +2 -1
  2. index.html +12 -92
  3. main.js +72 -0
  4. styles.css +41 -3
.gitignore CHANGED
@@ -1 +1,2 @@
1
- .env
 
 
1
+ .env
2
+ Instructions.md
index.html CHANGED
@@ -4,7 +4,7 @@
4
  <head>
5
  <meta charset="UTF-8" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title data-title>PylarAI 3rd Party License</title>
8
  <link rel="stylesheet" href="styles.css" />
9
  </head>
10
 
@@ -13,16 +13,16 @@
13
  <div class="frame">
14
  <div class="card">
15
  <header>
16
- <div class="badge" data-badge>PYLARAI 3RD PARTY LICENSE</div>
17
- <h1 data-title>
18
- PylarAI 3rd Party License
19
- <span data-version>Version 1.0 December 2025</span>
20
- </h1>
 
21
  <p class="subtitle" data-subtitle></p>
22
- <p class="meta" data-meta>
23
- SOFTWARE LICENSE AGREEMENT / THIRD-PARTY COMPLIANCE
24
- </p>
25
  </header>
 
26
  <main>
27
  <section class="license-content" data-sections></section>
28
 
@@ -30,94 +30,14 @@
30
  </main>
31
 
32
  <div class="source-block" data-source>
33
- <strong data-source-text>Source:</strong>
34
  <a data-source-url href="#" target="_blank" rel="noreferrer"></a>
35
  </div>
36
  </div>
37
  </div>
 
38
 
39
- <script>
40
- async function loadContent() {
41
- try {
42
- const response = await fetch("content.json");
43
- const content = await response.json();
44
-
45
- // Header
46
- document.querySelector("[data-title]").textContent = content.title;
47
- document.querySelector("[data-version]").textContent =
48
- content.version;
49
- document.querySelector("[data-subtitle]").textContent =
50
- content.subtitle;
51
- document.querySelector("[data-meta]").textContent = content.meta;
52
- document.querySelector("[data-badge]").textContent = content.badge;
53
- document.title = content.title;
54
-
55
- // Source
56
- document.querySelector("[data-source-url]").href = content.sourceUrl;
57
- document.querySelector("[data-source-url]").textContent =
58
- content.sourceUrl;
59
- document.querySelector("[data-source-text]").textContent =
60
- content.sourceText;
61
-
62
- // Sections
63
- const sectionsContainer = document.querySelector("[data-sections]");
64
- content.sections.forEach((section) => {
65
- const sectionEl = document.createElement("div");
66
- sectionEl.innerHTML = `
67
- <div class="section-label">${content.sectionLabel}</div>
68
- <h2>${section.title}</h2>
69
- ${Array.isArray(section.content)
70
- ? `<ul>${section.content
71
- .map((item) => `<li>${item}</li>`)
72
- .join("")}</ul>`
73
- : `<p>${section.content}</p>`
74
- }
75
- `;
76
- sectionsContainer.appendChild(sectionEl);
77
- });
78
-
79
- // Side panel
80
- const sidePanel = document.querySelector("[data-sidepanel]");
81
- sidePanel.innerHTML = `
82
- <div class="side-card">
83
- <div class="pill">
84
- <span class="pill-dot"></span>
85
- ${content.sidePanel.pill}
86
- </div>
87
- <h3 class="side-title">${content.sidePanel.principles.title
88
- }</h3>
89
- <p class="side-text">${content.sidePanel.principles.text
90
- }</p>
91
- </div>
92
- <div class="side-card">
93
- <h3 class="side-title">${content.sidePanel.snapshot.title
94
- }</h3>
95
- <div class="meta-grid">
96
- ${content.sidePanel.snapshot.items
97
- .map(
98
- ([key, value]) => `
99
- <div class="meta-item">
100
- <span>${key}</span>
101
- <span>${value}</span>
102
- </div>
103
- `
104
- )
105
- .join("")}
106
- </div>
107
- </div>
108
- <div class="side-card">
109
- <h3 class="side-title">${content.sidePanel.hint.title
110
- }</h3>
111
- <p class="side-text">${content.sidePanel.hint.text}</p>
112
- </div>
113
- `;
114
- } catch (error) {
115
- console.error("Error loading content:", error);
116
- }
117
- }
118
-
119
- loadContent();
120
- </script>
121
  </body>
122
 
123
  </html>
 
4
  <head>
5
  <meta charset="UTF-8" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title data-title></title>
8
  <link rel="stylesheet" href="styles.css" />
9
  </head>
10
 
 
13
  <div class="frame">
14
  <div class="card">
15
  <header>
16
+ <h1 class="htitle" data-badge></h1>
17
+
18
+ <hpill>
19
+ <span class="title-version" data-version></span>
20
+ </hpill>
21
+
22
  <p class="subtitle" data-subtitle></p>
23
+ <p class="meta" data-meta></p>
 
 
24
  </header>
25
+
26
  <main>
27
  <section class="license-content" data-sections></section>
28
 
 
30
  </main>
31
 
32
  <div class="source-block" data-source>
33
+ <strong data-source-text></strong>
34
  <a data-source-url href="#" target="_blank" rel="noreferrer"></a>
35
  </div>
36
  </div>
37
  </div>
38
+ </div>
39
 
40
+ <script src="main.js"></script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  </body>
42
 
43
  </html>
main.js ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ async function loadContent() {
2
+ try {
3
+ const response = await fetch("content.json");
4
+ const content = await response.json();
5
+
6
+ // Header
7
+ document.querySelector("[data-title]").textContent = content.title;
8
+ document.querySelector("[data-version]").textContent = content.version;
9
+ document.querySelector("[data-subtitle]").textContent = content.subtitle;
10
+ document.querySelector("[data-meta]").textContent = content.meta;
11
+ document.querySelector("[data-badge]").textContent = content.badge;
12
+ document.title = content.title;
13
+
14
+ // Source
15
+ document.querySelector("[data-source-url]").href = content.sourceUrl;
16
+ document.querySelector("[data-source-url]").textContent = content.sourceUrl;
17
+ document.querySelector("[data-source-text]").textContent = content.sourceText;
18
+
19
+ // Sections
20
+ const sectionsContainer = document.querySelector("[data-sections]");
21
+ content.sections.forEach((section) => {
22
+ const sectionEl = document.createElement("div");
23
+ sectionEl.innerHTML = `
24
+ <div class="section-label">${content.sectionLabel}</div>
25
+ <h2>${section.title}</h2>
26
+ ${Array.isArray(section.content)
27
+ ? `<ul>${section.content
28
+ .map((item) => `<li>${item}</li>`)
29
+ .join("")}</ul>`
30
+ : `<p>${section.content}</p>`
31
+ }
32
+ `;
33
+ sectionsContainer.appendChild(sectionEl);
34
+ });
35
+
36
+ // Side panel
37
+ const sidePanel = document.querySelector("[data-sidepanel]");
38
+ sidePanel.innerHTML = `
39
+ <div class="side-card">
40
+ <div class="pill">
41
+ <span class="pill-dot"></span>
42
+ ${content.sidePanel.pill}
43
+ </div>
44
+ <h3 class="side-title">${content.sidePanel.principles.title}</h3>
45
+ <p class="side-text">${content.sidePanel.principles.text}</p>
46
+ </div>
47
+ <div class="side-card">
48
+ <h3 class="side-title">${content.sidePanel.snapshot.title}</h3>
49
+ <div class="meta-grid">
50
+ ${content.sidePanel.snapshot.items
51
+ .map(
52
+ ([key, value]) => `
53
+ <div class="meta-item">
54
+ <span>${key}</span>
55
+ <span>${value}</span>
56
+ </div>
57
+ `
58
+ )
59
+ .join("")}
60
+ </div>
61
+ </div>
62
+ <div class="side-card">
63
+ <h3 class="side-title">${content.sidePanel.hint.title}</h3>
64
+ <p class="side-text">${content.sidePanel.hint.text}</p>
65
+ </div>
66
+ `;
67
+ } catch (error) {
68
+ console.error("Error loading content:", error);
69
+ }
70
+ }
71
+
72
+ loadContent();
styles.css CHANGED
@@ -83,10 +83,32 @@ header {
83
  box-shadow: 0 0 12px var(--accent);
84
  }
85
 
86
- h1 {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  font-size: 22px;
88
- font-weight: 630;
89
- letter-spacing: 0.03em;
90
  text-transform: uppercase;
91
  display: flex;
92
  flex-wrap: wrap;
@@ -94,6 +116,16 @@ h1 {
94
  gap: 8px;
95
  }
96
 
 
 
 
 
 
 
 
 
 
 
97
  h1 span {
98
  font-size: 12px;
99
  font-weight: 400;
@@ -275,6 +307,12 @@ a:hover {
275
  }
276
 
277
  /* Responsive */
 
 
 
 
 
 
278
  @media (max-width: 900px) {
279
  body {
280
  padding: 16px 10px;
 
83
  box-shadow: 0 0 12px var(--accent);
84
  }
85
 
86
+ .h1 {
87
+ /* font-size: 26px;
88
+ font-weight: 650;
89
+ letter-spacing: 0.04em;
90
+ text-transform: uppercase;
91
+ display: flex;
92
+ flex-wrap: wrap;
93
+ align-items: center;
94
+ gap: 8px; */
95
+ }
96
+
97
+ .htitle {
98
+ font-size: 22px;
99
+ font-weight: 650;
100
+ letter-spacing: 0.04em;
101
+ text-transform: uppercase;
102
+ display: flex;
103
+ flex-wrap: wrap;
104
+ align-items: center;
105
+ gap: 8px;
106
+ }
107
+
108
+ hpill {
109
  font-size: 22px;
110
+ font-weight: 650;
111
+ letter-spacing: 0.04em;
112
  text-transform: uppercase;
113
  display: flex;
114
  flex-wrap: wrap;
 
116
  gap: 8px;
117
  }
118
 
119
+ .title-version {
120
+ font-size: 12px;
121
+ font-weight: 400;
122
+ color: var(--accent);
123
+ padding: 3px 9px;
124
+ border-radius: 999px;
125
+ background: var(--accent-soft);
126
+ border: 1px solid rgba(230, 57, 70, 0.45);
127
+ }
128
+
129
  h1 span {
130
  font-size: 12px;
131
  font-weight: 400;
 
307
  }
308
 
309
  /* Responsive */
310
+ @media (min-width: 900px) {
311
+ h1 {
312
+ font-size: 28px;
313
+ }
314
+ }
315
+
316
  @media (max-width: 900px) {
317
  body {
318
  padding: 16px 10px;