Restrictated commited on
Commit
5956687
·
verified ·
1 Parent(s): d992e49

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +198 -106
README.md CHANGED
@@ -3,102 +3,190 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Cubic — Copyable Card</title>
 
 
 
7
  <style>
8
- body {
9
- margin: 0;
10
- min-height: 100vh;
11
- display: flex;
12
- align-items: center;
13
- justify-content: center;
14
- font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji";
15
- background: radial-gradient(1200px 800px at 10% -10%, #1e293b, #0f172a);
16
- color: #e2e8f0;
17
- padding: 24px;
18
- }
19
- .card {
20
- width: 100%;
21
- max-width: 760px;
22
- background: #0b1220;
23
- border: 1px solid #22304790;
24
- border-radius: 16px;
25
- box-shadow: 0 20px 60px rgba(0,0,0,0.45);
26
- padding: 22px;
27
- }
28
- .title {
29
- margin: 0 0 16px;
30
- font-size: 22px;
31
- font-weight: 700;
32
- letter-spacing: 0.2px;
33
- background: linear-gradient(90deg, #60a5fa, #a78bfa);
34
- -webkit-background-clip: text;
35
- background-clip: text;
36
- color: transparent;
37
- }
38
- .field {
39
- display: flex;
40
- flex-direction: column;
41
- gap: 6px;
42
- margin-bottom: 12px;
43
- }
44
- label {
45
- font-size: 12px;
46
- text-transform: uppercase;
47
- letter-spacing: 0.08em;
48
- color: #94a3b8;
49
- }
50
- textarea {
51
- width: 100%;
52
- min-height: 320px;
53
- resize: vertical;
54
- border-radius: 10px;
55
- border: 1px solid #22304790;
56
- background: #0f172a;
57
- color: #e2e8f0;
58
- padding: 12px;
59
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
60
- font-size: 14px;
61
- line-height: 1.55;
62
- }
63
- .actions {
64
- display: flex;
65
- gap: 10px;
66
- justify-content: flex-end;
67
- }
68
- button {
69
- padding: 10px 14px;
70
- border-radius: 10px;
71
- border: none;
72
- cursor: pointer;
73
- font-weight: 600;
74
- font-size: 14px;
75
- }
76
- .copy-btn {
77
- background: linear-gradient(90deg, #60a5fa, #a78bfa);
78
- color: white;
79
- }
80
- .copy-btn.copied {
81
- background: #16a34a;
82
- color: white;
83
- }
84
- .reset-btn {
85
- background: #223047;
86
- color: #e2e8f0;
87
- }
88
- .hint {
89
- margin: 10px 0 0;
90
- font-size: 12px;
91
- color: #64748b;
92
- text-align: right;
93
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  </style>
95
  </head>
96
  <body>
97
  <div class="card">
98
- <div class="title">Cubic — Copyable Card</div>
99
-
100
- <div class="field">
101
- <label>Content</label>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  <textarea id="content" spellcheck="false">---
103
  title: Cubic
104
  emoji: "🧠"
@@ -168,46 +256,50 @@ The org card includes functional calculators:
168
  ---
169
 
170
  *CPU-first AI for everyone.*</textarea>
 
 
 
 
 
 
 
171
  </div>
172
-
173
- <div class="actions">
174
- <button class="reset-btn" id="reset">Reset</button>
175
- <button class="copy-btn" id="copy">Copy</button>
176
- </div>
177
- <div class="hint" id="status"></div>
178
  </div>
179
 
180
  <script>
181
  const textarea = document.getElementById('content');
182
  const copyBtn = document.getElementById('copy');
183
  const resetBtn = document.getElementById('reset');
184
- const status = document.getElementById('status');
185
-
186
  const original = textarea.value;
187
 
 
 
 
 
 
 
188
  copyBtn.addEventListener('click', async () => {
189
  try {
190
  await navigator.clipboard.writeText(textarea.value);
191
- copyBtn.textContent = 'Copied!';
192
  copyBtn.classList.add('copied');
193
- status.textContent = 'Copied to clipboard';
194
  setTimeout(() => {
195
  copyBtn.textContent = 'Copy';
196
  copyBtn.classList.remove('copied');
197
- status.textContent = '';
198
- }, 1500);
199
  } catch (e) {
200
- status.textContent = 'Copy failed — try selecting manually.';
 
201
  }
202
  });
203
 
204
  resetBtn.addEventListener('click', () => {
205
  textarea.value = original;
206
- status.textContent = 'Reset to saved content';
207
  copyBtn.textContent = 'Copy';
208
  copyBtn.classList.remove('copied');
209
- setTimeout(() => { status.textContent = ''; }, 1500);
210
  });
211
  </script>
212
  </body>
213
- </html>
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Cubic — README Card</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
10
  <style>
11
+ :root{
12
+ --bg-0:#0a0d12;
13
+ --bg-1:#10151c;
14
+ --panel:#0e1319;
15
+ --line:#1f2933;
16
+ --amber:#e8a355;
17
+ --teal:#4fd1c5;
18
+ --text:#d7dde5;
19
+ --muted:#6b7684;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  }
21
+ *{box-sizing:border-box;}
22
+ body{
23
+ margin:0;
24
+ min-height:100vh;
25
+ display:flex;
26
+ align-items:center;
27
+ justify-content:center;
28
+ padding:32px;
29
+ font-family:'Inter',ui-sans-serif,system-ui;
30
+ color:var(--text);
31
+ background:
32
+ radial-gradient(900px 500px at 85% -10%, #1a2430 0%, transparent 60%),
33
+ radial-gradient(700px 500px at -10% 110%, #16202a 0%, transparent 55%),
34
+ var(--bg-0);
35
+ background-attachment:fixed;
36
+ }
37
+ body::before{
38
+ content:"";
39
+ position:fixed;
40
+ inset:0;
41
+ background-image:
42
+ linear-gradient(var(--line) 1px, transparent 1px),
43
+ linear-gradient(90deg, var(--line) 1px, transparent 1px);
44
+ background-size:42px 42px;
45
+ opacity:0.06;
46
+ pointer-events:none;
47
+ }
48
+ .card{
49
+ position:relative;
50
+ width:100%;
51
+ max-width:780px;
52
+ background:var(--panel);
53
+ border:1px solid var(--line);
54
+ border-radius:14px;
55
+ box-shadow:0 30px 70px rgba(0,0,0,0.55);
56
+ overflow:hidden;
57
+ }
58
+ .trace{
59
+ height:3px;
60
+ width:100%;
61
+ background:linear-gradient(90deg, var(--amber), var(--teal) 60%, transparent);
62
+ }
63
+ .header{
64
+ display:flex;
65
+ align-items:center;
66
+ justify-content:space-between;
67
+ padding:18px 22px 14px;
68
+ border-bottom:1px solid var(--line);
69
+ }
70
+ .brand{
71
+ display:flex;
72
+ align-items:center;
73
+ gap:10px;
74
+ }
75
+ .chip{
76
+ width:22px;
77
+ height:22px;
78
+ flex-shrink:0;
79
+ }
80
+ .chip rect{fill:none;stroke:var(--amber);stroke-width:1.4;}
81
+ .chip circle{fill:var(--teal);}
82
+ .chip line{stroke:var(--amber);stroke-width:1.2;}
83
+ .title{
84
+ font-family:'Space Grotesk',sans-serif;
85
+ font-size:15px;
86
+ font-weight:600;
87
+ letter-spacing:0.01em;
88
+ color:var(--text);
89
+ }
90
+ .title span{color:var(--muted);font-weight:500;}
91
+ .status-dot{
92
+ width:7px;height:7px;border-radius:50%;
93
+ background:var(--teal);
94
+ box-shadow:0 0 0 0 rgba(79,209,197,0.6);
95
+ animation:pulse 2s infinite;
96
+ }
97
+ @keyframes pulse{
98
+ 0%{box-shadow:0 0 0 0 rgba(79,209,197,0.45);}
99
+ 70%{box-shadow:0 0 0 6px rgba(79,209,197,0);}
100
+ 100%{box-shadow:0 0 0 0 rgba(79,209,197,0);}
101
+ }
102
+ .body{
103
+ padding:20px 22px 22px;
104
+ }
105
+ textarea{
106
+ width:100%;
107
+ min-height:340px;
108
+ resize:vertical;
109
+ border-radius:10px;
110
+ border:1px solid var(--line);
111
+ background:var(--bg-1);
112
+ color:var(--text);
113
+ padding:16px;
114
+ font-family:'JetBrains Mono',ui-monospace,monospace;
115
+ font-size:13px;
116
+ line-height:1.6;
117
+ outline:none;
118
+ transition:border-color 0.15s ease;
119
+ }
120
+ textarea:focus{border-color:var(--amber);}
121
+ .footer{
122
+ display:flex;
123
+ align-items:center;
124
+ justify-content:space-between;
125
+ margin-top:14px;
126
+ gap:12px;
127
+ }
128
+ .meta{
129
+ font-family:'JetBrains Mono',monospace;
130
+ font-size:11.5px;
131
+ color:var(--muted);
132
+ letter-spacing:0.02em;
133
+ }
134
+ .meta b{color:var(--teal);font-weight:500;}
135
+ .actions{
136
+ display:flex;
137
+ gap:10px;
138
+ }
139
+ button{
140
+ padding:9px 16px;
141
+ border-radius:8px;
142
+ border:1px solid transparent;
143
+ cursor:pointer;
144
+ font-family:'Space Grotesk',sans-serif;
145
+ font-weight:600;
146
+ font-size:13px;
147
+ letter-spacing:0.01em;
148
+ transition:transform 0.1s ease, filter 0.15s ease;
149
+ }
150
+ button:active{transform:scale(0.97);}
151
+ .copy-btn{
152
+ background:linear-gradient(90deg, var(--amber), #d98f3d);
153
+ color:#1a1206;
154
+ }
155
+ .copy-btn:hover{filter:brightness(1.08);}
156
+ .copy-btn.copied{
157
+ background:var(--teal);
158
+ color:#06201d;
159
+ }
160
+ .reset-btn{
161
+ background:transparent;
162
+ border:1px solid var(--line);
163
+ color:var(--muted);
164
+ }
165
+ .reset-btn:hover{color:var(--text);border-color:#33404d;}
166
  </style>
167
  </head>
168
  <body>
169
  <div class="card">
170
+ <div class="trace"></div>
171
+ <div class="header">
172
+ <div class="brand">
173
+ <svg class="chip" viewBox="0 0 24 24">
174
+ <rect x="6" y="6" width="12" height="12" rx="1.5"/>
175
+ <line x1="9" y1="2" x2="9" y2="6"/>
176
+ <line x1="15" y1="2" x2="15" y2="6"/>
177
+ <line x1="9" y1="18" x2="9" y2="22"/>
178
+ <line x1="15" y1="18" x2="15" y2="22"/>
179
+ <line x1="2" y1="9" x2="6" y2="9"/>
180
+ <line x1="2" y1="15" x2="6" y2="15"/>
181
+ <line x1="18" y1="9" x2="22" y2="9"/>
182
+ <line x1="18" y1="15" x2="22" y2="15"/>
183
+ <circle cx="12" cy="12" r="1.6"/>
184
+ </svg>
185
+ <div class="title">README.md <span>· Cubic</span></div>
186
+ </div>
187
+ <div class="status-dot" title="ready"></div>
188
+ </div>
189
+ <div class="body">
190
  <textarea id="content" spellcheck="false">---
191
  title: Cubic
192
  emoji: "🧠"
 
256
  ---
257
 
258
  *CPU-first AI for everyone.*</textarea>
259
+ <div class="footer">
260
+ <div class="meta"><b id="charcount">0</b> chars ready to ship</div>
261
+ <div class="actions">
262
+ <button class="reset-btn" id="reset">Reset</button>
263
+ <button class="copy-btn" id="copy">Copy</button>
264
+ </div>
265
+ </div>
266
  </div>
 
 
 
 
 
 
267
  </div>
268
 
269
  <script>
270
  const textarea = document.getElementById('content');
271
  const copyBtn = document.getElementById('copy');
272
  const resetBtn = document.getElementById('reset');
273
+ const charcount = document.getElementById('charcount');
 
274
  const original = textarea.value;
275
 
276
+ function updateCount(){
277
+ charcount.textContent = textarea.value.length.toLocaleString();
278
+ }
279
+ updateCount();
280
+ textarea.addEventListener('input', updateCount);
281
+
282
  copyBtn.addEventListener('click', async () => {
283
  try {
284
  await navigator.clipboard.writeText(textarea.value);
285
+ copyBtn.textContent = 'Copied';
286
  copyBtn.classList.add('copied');
 
287
  setTimeout(() => {
288
  copyBtn.textContent = 'Copy';
289
  copyBtn.classList.remove('copied');
290
+ }, 1400);
 
291
  } catch (e) {
292
+ copyBtn.textContent = 'Select manually';
293
+ setTimeout(() => { copyBtn.textContent = 'Copy'; }, 1600);
294
  }
295
  });
296
 
297
  resetBtn.addEventListener('click', () => {
298
  textarea.value = original;
299
+ updateCount();
300
  copyBtn.textContent = 'Copy';
301
  copyBtn.classList.remove('copied');
 
302
  });
303
  </script>
304
  </body>
305
+ </html>