miguelgargallo commited on
Commit
33b3704
·
1 Parent(s): 9ee0993

Design Update

Browse files
Files changed (6) hide show
  1. README.md +4 -4
  2. assets/avoid.svg +7 -0
  3. assets/correct.svg +4 -0
  4. content.json +23 -10
  5. main.js +37 -10
  6. styles.css +90 -45
README.md CHANGED
@@ -1,11 +1,11 @@
1
  ---
2
- title: PYLAR AI NON FREE LICENSE
3
- emoji: 👀
4
- colorFrom: green
5
  colorTo: indigo
6
  sdk: static
7
  pinned: false
8
  license: other
9
  ---
10
 
11
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: Pylar AI creative ML Non Free License
3
+ emoji: 🏛️
4
+ colorFrom: indigo
5
  colorTo: indigo
6
  sdk: static
7
  pinned: false
8
  license: other
9
  ---
10
 
11
+ Licenses written by PylarAI. Important: If your project uses this licenses, does not means the code or contents of the project was generated with AI. Just the License is written with PylarAI.
assets/avoid.svg ADDED
assets/correct.svg ADDED
content.json CHANGED
@@ -1,8 +1,8 @@
1
  {
2
- "title": "Pylar AI Creative ML Non Free License",
3
- "version": "Version 1.0 December 2025",
4
- "subtitle": "Software License Agreement prohibiting all usage, with strict no-permission terms and legal action warnings.",
5
- "meta": "SOFTWARE LICENSE AGREEMENT / NON-FREE LICENSE",
6
  "badge": "PYLAR AI NON FREE LICENSE",
7
  "sectionLabel": "Overview",
8
  "sourceUrl": "https://huggingface.co/spaces/superdatas/nonfree",
@@ -25,10 +25,23 @@
25
  }
26
  ],
27
  "sidePanel": {
28
- "pill": "No Permission",
29
  "principles": {
30
- "title": "Design Principles",
31
- "text": "Minimal surface, maximum clarity: the focus stays on the legal text, with a layout optimized for reading and section scanning across devices."
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  },
33
  "snapshot": {
34
  "title": "License Snapshot",
@@ -43,7 +56,7 @@
43
  ],
44
  [
45
  "Updated",
46
- "December 2025"
47
  ],
48
  [
49
  "Jurisdiction",
@@ -52,8 +65,8 @@
52
  ]
53
  },
54
  "hint": {
55
- "title": "Implementation Hint",
56
- "text": "Include this license alongside your model or application documentation and reference it explicitly in your project's README or Terms section for transparency."
57
  }
58
  }
59
  }
 
1
  {
2
+ "title": "Pylar AI creative ML Non Free License",
3
+ "version": "Version 1.0 2023",
4
+ "subtitle": "Complete prohibition of usage with legal action warnings.",
5
+ "meta": "SOFTWARE LICENSE AGREEMENT / NON-FREE",
6
  "badge": "PYLAR AI NON FREE LICENSE",
7
  "sectionLabel": "Overview",
8
  "sourceUrl": "https://huggingface.co/spaces/superdatas/nonfree",
 
25
  }
26
  ],
27
  "sidePanel": {
28
+ "pill": "No Permission",
29
  "principles": {
30
+ "title": "Access Denied",
31
+ "items": [
32
+ {
33
+ "type": "avoid",
34
+ "text": "No usage allowed"
35
+ },
36
+ {
37
+ "type": "avoid",
38
+ "text": "Legal action risk"
39
+ },
40
+ {
41
+ "type": "avoid",
42
+ "text": "No distribution"
43
+ }
44
+ ]
45
  },
46
  "snapshot": {
47
  "title": "License Snapshot",
 
56
  ],
57
  [
58
  "Updated",
59
+ "2023"
60
  ],
61
  [
62
  "Jurisdiction",
 
65
  ]
66
  },
67
  "hint": {
68
+ "title": "License Validity",
69
+ "text": "Always link to source URL below"
70
  }
71
  }
72
  }
main.js CHANGED
@@ -12,21 +12,21 @@ async function loadContent() {
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
  `;
@@ -42,20 +42,18 @@ async function loadContent() {
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>
@@ -64,8 +62,37 @@ async function loadContent() {
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
 
 
12
  document.title = content.title;
13
 
14
  // Source
15
+ const sourceUrlEl = document.querySelector("[data-source-url]");
16
+ sourceUrlEl.href = content.sourceUrl;
17
+ sourceUrlEl.textContent = content.sourceUrl || "No source available";
18
  document.querySelector("[data-source-text]").textContent = content.sourceText;
19
 
20
  // Sections
21
  const sectionsContainer = document.querySelector("[data-sections]");
22
  content.sections.forEach((section) => {
23
  const sectionEl = document.createElement("div");
24
+ sectionEl.className = "section";
25
  sectionEl.innerHTML = `
26
  <div class="section-label">${content.sectionLabel}</div>
27
  <h2>${section.title}</h2>
28
  ${Array.isArray(section.content)
29
+ ? `<ul>${section.content.map((item) => `<li>${item}</li>`).join("")}</ul>`
 
 
30
  : `<p>${section.content}</p>`
31
  }
32
  `;
 
42
  ${content.sidePanel.pill}
43
  </div>
44
  <h3 class="side-title">${content.sidePanel.principles.title}</h3>
45
+ <div class="principles-list" data-principles></div>
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(([key, value]) => `
 
52
  <div class="meta-item">
53
  <span>${key}</span>
54
  <span>${value}</span>
55
  </div>
56
+ `)
 
57
  .join("")}
58
  </div>
59
  </div>
 
62
  <p class="side-text">${content.sidePanel.hint.text}</p>
63
  </div>
64
  `;
65
+
66
+ // Render principles with SVG icons
67
+ const principlesList = document.querySelector("[data-principles]");
68
+ if (content.sidePanel.principles.items) {
69
+ const items = content.sidePanel.principles.items;
70
+ const allowedItems = items.filter(item => item.type === 'allow');
71
+ const avoidItems = items.filter(item => item.type === 'avoid');
72
+
73
+ principlesList.innerHTML = `
74
+ <div class="permissions-group">
75
+ ${allowedItems.map(item => `
76
+ <div class="permission-item">
77
+ <img src="assets/correct.svg" width="16" height="16" alt="Allowed" />
78
+ <span>${item.text}</span>
79
+ </div>
80
+ `).join('')}
81
+ </div>
82
+ <div class="permissions-group avoid">
83
+ ${avoidItems.map(item => `
84
+ <div class="permission-item">
85
+ <img src="assets/avoid.svg" width="16" height="16" alt="Prohibited" />
86
+ <span>${item.text}</span>
87
+ </div>
88
+ `).join('')}
89
+ </div>
90
+ `;
91
+ }
92
+
93
  } catch (error) {
94
  console.error("Error loading content:", error);
95
+ document.body.innerHTML = "<h1>Error loading license content</h1>";
96
  }
97
  }
98
 
styles.css CHANGED
@@ -56,6 +56,7 @@ body {
56
  backdrop-filter: blur(16px);
57
  }
58
 
 
59
  header {
60
  display: flex;
61
  flex-direction: column;
@@ -65,35 +66,6 @@ header {
65
  padding-bottom: 16px;
66
  }
67
 
68
- .badge {
69
- display: inline-flex;
70
- align-items: center;
71
- gap: 8px;
72
- font-size: 11px;
73
- letter-spacing: 0.14em;
74
- text-transform: uppercase;
75
- color: var(--text-muted);
76
- }
77
-
78
- .badge-dot {
79
- width: 8px;
80
- height: 8px;
81
- border-radius: 999px;
82
- background: var(--accent);
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;
@@ -126,16 +98,6 @@ hpill {
126
  border: 1px solid rgba(230, 57, 70, 0.45);
127
  }
128
 
129
- h1 span {
130
- font-size: 12px;
131
- font-weight: 400;
132
- color: var(--accent);
133
- padding: 3px 9px;
134
- border-radius: 999px;
135
- background: var(--accent-soft);
136
- border: 1px solid rgba(230, 57, 70, 0.45);
137
- }
138
-
139
  .subtitle {
140
  font-size: 13px;
141
  color: var(--text-muted);
@@ -151,6 +113,7 @@ h1 span {
151
  margin-top: 2px;
152
  }
153
 
 
154
  main {
155
  display: grid;
156
  grid-template-columns: minmax(0, 1.3fr) minmax(0, 0.9fr);
@@ -210,6 +173,7 @@ main {
210
  margin-bottom: 2px;
211
  }
212
 
 
213
  .pill {
214
  display: inline-flex;
215
  align-items: center;
@@ -263,6 +227,37 @@ main {
263
  line-height: 1.5;
264
  }
265
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
266
  .meta-grid {
267
  display: grid;
268
  grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -295,24 +290,63 @@ a:hover {
295
  border-bottom-color: var(--accent);
296
  }
297
 
 
298
  .source-block {
299
- margin-top: 10px;
300
- font-size: 12px;
301
- padding: 8px 10px;
302
  border-radius: var(--radius-sm);
303
  background: var(--code-bg);
304
- border: 1px solid rgba(255, 255, 255, 0.04);
305
  color: var(--text-muted);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
306
  word-break: break-all;
 
 
 
 
 
 
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;
@@ -322,13 +356,24 @@ a:hover {
322
  padding: 20px 16px 18px;
323
  }
324
 
 
 
 
 
 
 
 
 
 
 
 
325
  main {
326
  grid-template-columns: minmax(0, 1fr);
327
  }
328
  }
329
 
330
  @media (max-width: 600px) {
331
- h1 {
332
  font-size: 18px;
333
  }
334
 
 
56
  backdrop-filter: blur(16px);
57
  }
58
 
59
+ /* Header styles */
60
  header {
61
  display: flex;
62
  flex-direction: column;
 
66
  padding-bottom: 16px;
67
  }
68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  .htitle {
70
  font-size: 22px;
71
  font-weight: 650;
 
98
  border: 1px solid rgba(230, 57, 70, 0.45);
99
  }
100
 
 
 
 
 
 
 
 
 
 
 
101
  .subtitle {
102
  font-size: 13px;
103
  color: var(--text-muted);
 
113
  margin-top: 2px;
114
  }
115
 
116
+ /* Main content */
117
  main {
118
  display: grid;
119
  grid-template-columns: minmax(0, 1.3fr) minmax(0, 0.9fr);
 
173
  margin-bottom: 2px;
174
  }
175
 
176
+ /* Side panel */
177
  .pill {
178
  display: inline-flex;
179
  align-items: center;
 
227
  line-height: 1.5;
228
  }
229
 
230
+ /* Permissions list */
231
+ .permissions-group {
232
+ margin-bottom: 12px;
233
+ }
234
+
235
+ .permissions-group:last-child {
236
+ margin-bottom: 0;
237
+ }
238
+
239
+ .permissions-group.avoid {
240
+ padding-top: 8px;
241
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
242
+ }
243
+
244
+ .permission-item {
245
+ display: flex;
246
+ align-items: center;
247
+ gap: 8px;
248
+ margin-bottom: 6px;
249
+ font-family: monospace;
250
+ font-size: 13px;
251
+ }
252
+
253
+ .permission-item span {
254
+ color: var(--text-muted);
255
+ }
256
+
257
+ .permissions-group.avoid .permission-item span {
258
+ color: #fca5a5;
259
+ }
260
+
261
  .meta-grid {
262
  display: grid;
263
  grid-template-columns: repeat(2, minmax(0, 1fr));
 
290
  border-bottom-color: var(--accent);
291
  }
292
 
293
+ /* FIXED Source Block - FULL RESPONSIVE */
294
  .source-block {
295
+ margin-top: 20px;
296
+ padding: 12px 16px;
 
297
  border-radius: var(--radius-sm);
298
  background: var(--code-bg);
299
+ border: 1px solid rgba(255, 255, 255, 0.08);
300
  color: var(--text-muted);
301
+ font-family: monospace;
302
+ font-size: 13px;
303
+ display: flex;
304
+ flex-direction: column;
305
+ gap: 6px;
306
+ }
307
+
308
+ .source-block strong {
309
+ font-weight: 600;
310
+ color: var(--text-main);
311
+ font-size: 12px;
312
+ text-transform: uppercase;
313
+ letter-spacing: 0.1em;
314
+ }
315
+
316
+ .source-block a {
317
+ color: var(--accent) !important;
318
+ text-decoration: none;
319
+ border-bottom: 1px solid rgba(230, 57, 70, 0.4);
320
+ font-size: 12px;
321
+ padding: 4px 0;
322
  word-break: break-all;
323
+ display: block;
324
+ line-height: 1.4;
325
+ }
326
+
327
+ .source-block a:hover {
328
+ border-bottom-color: var(--accent) !important;
329
  }
330
 
331
  /* Responsive */
332
  @media (min-width: 900px) {
333
+ .htitle {
334
  font-size: 28px;
335
  }
336
  }
337
 
338
+ /* Very small screens */
339
+ @media (max-width: 480px) {
340
+ .source-block {
341
+ padding: 20px;
342
+ margin-top: 28px;
343
+ }
344
+
345
+ .source-block strong {
346
+ font-size: 13px;
347
+ }
348
+ }
349
+
350
  @media (max-width: 900px) {
351
  body {
352
  padding: 16px 10px;
 
356
  padding: 20px 16px 18px;
357
  }
358
 
359
+ .source-block {
360
+ margin-top: 24px;
361
+ padding: 16px 20px;
362
+ gap: 8px;
363
+ }
364
+
365
+ .source-block a {
366
+ font-size: 13px;
367
+ padding: 6px 0;
368
+ }
369
+
370
  main {
371
  grid-template-columns: minmax(0, 1fr);
372
  }
373
  }
374
 
375
  @media (max-width: 600px) {
376
+ .htitle {
377
  font-size: 18px;
378
  }
379