Files changed (1) hide show
  1. static/css/styles.css +695 -355
static/css/styles.css CHANGED
@@ -1,365 +1,705 @@
1
- :root {
2
- --bg: #f5f5f5;
3
- --panel-bg: #ffffff;
4
- --text: #202124;
5
- --muted: #5f6368;
6
- --accent: #1a73e8;
7
- --danger: #c5221f;
8
- --border: #dadce0;
9
- --radius: 10px;
10
- --shadow: 0 10px 30px rgba(0, 0, 0, 0.08);
11
- font-family: "Segoe UI", Tahoma, sans-serif;
12
- }
13
-
14
- * {
15
- box-sizing: border-box;
16
- }
17
-
18
- body {
19
- margin: 0;
20
- background: linear-gradient(180deg, #f7f9fc 0%, #eef1f6 100%);
21
- color: var(--text);
22
- }
23
-
24
- .container {
25
- max-width: 980px;
26
- margin: 0 auto;
27
- padding: 40px 20px 64px;
28
- }
29
-
30
- h1 {
31
- text-align: center;
32
- font-size: 32px;
33
- margin-bottom: 32px;
34
- }
35
-
36
- .panel {
37
- background: var(--panel-bg);
38
- border-radius: var(--radius);
39
- box-shadow: var(--shadow);
40
- padding: 28px 32px;
41
- margin-bottom: 32px;
42
- border: 1px solid rgba(32, 33, 36, 0.08);
43
- }
44
-
45
- .panel h2 {
46
- margin-top: 0;
47
- }
48
-
49
- .hidden {
50
- display: none;
51
- }
52
-
53
- .form {
54
- display: grid;
55
- gap: 20px;
56
- }
57
-
58
- .field-grid {
59
- display: grid;
60
- gap: 18px 24px;
61
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
62
- }
63
-
64
- label {
65
- display: grid;
66
- gap: 8px;
67
- font-weight: 600;
68
- font-size: 15px;
69
- }
70
-
71
- input,
72
- textarea,
73
- select {
74
- padding: 12px 14px;
75
- border-radius: 8px;
76
- border: 1px solid var(--border);
77
- font-size: 15px;
78
- background: #fbfbff;
79
- }
80
-
81
- input:focus,
82
- textarea:focus,
83
- select:focus {
84
- outline: 2px solid rgba(26, 115, 232, 0.35);
85
- outline-offset: 1px;
86
- border-color: var(--accent);
87
- background: #ffffff;
88
- }
89
-
90
- textarea {
91
- resize: vertical;
92
- min-height: 96px;
93
- }
94
-
95
- button {
96
- padding: 12px 20px;
97
- border-radius: 8px;
98
- border: none;
99
- font-size: 15px;
100
- font-weight: 600;
101
- background: var(--accent);
102
- color: white;
103
- cursor: pointer;
104
- transition: background 0.2s ease;
105
- }
106
-
107
- button:hover {
108
- background: #0f5ec4;
109
- }
110
-
111
- button:disabled {
112
- opacity: 0.6;
113
- cursor: not-allowed;
114
- }
115
-
116
- .link-button {
117
- background: none;
118
- color: var(--accent);
119
- padding: 0;
120
- }
121
-
122
- .link-button:hover {
123
- color: #0f5ec4;
124
- background: none;
125
- }
126
-
127
- .hint {
128
- color: var(--muted);
129
- font-size: 13px;
130
- margin: 0;
131
- }
132
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  .feedback {
134
  color: var(--muted);
135
  min-height: 20px;
136
  font-size: 14px;
137
  }
138
 
139
- .feedback.error {
140
- color: var(--danger);
141
- }
142
-
143
- .feedback.success {
144
- color: #188038;
145
- }
146
-
147
- .invoice-header {
148
- display: flex;
149
- justify-content: space-between;
150
- align-items: center;
151
- margin-bottom: 24px;
152
- }
153
-
154
- .business-section {
155
- border: 1px solid rgba(32, 33, 36, 0.08);
156
- border-radius: var(--radius);
157
- padding: 20px 24px;
158
- background: #fbfcff;
159
- margin-bottom: 24px;
160
- }
161
-
162
- .business-section-header {
163
- display: flex;
164
- justify-content: space-between;
165
- align-items: center;
166
- margin-bottom: 12px;
167
- }
168
-
169
- .business-display {
170
- display: grid;
171
- gap: 6px;
172
- font-size: 15px;
173
- line-height: 1.4;
174
- }
175
-
176
- .business-display strong {
177
- font-weight: 600;
178
- }
179
-
180
- .form-actions {
181
- display: flex;
182
- align-items: center;
183
- gap: 16px;
184
- }
185
-
186
- .items-section {
187
- border: 1px solid rgba(32, 33, 36, 0.08);
188
- border-radius: var(--radius);
189
- padding: 20px 24px;
190
- background: #ffffff;
191
- display: grid;
192
- gap: 18px;
193
- }
194
-
195
- .items-header {
196
- display: flex;
197
- justify-content: space-between;
198
- align-items: center;
199
- }
200
-
201
- .items-table-wrapper {
202
- overflow-x: auto;
203
- }
204
-
205
- .items-table {
206
- width: 100%;
207
- border-collapse: collapse;
208
- font-size: 14px;
209
- }
210
-
211
- .items-table th,
212
- .items-table td {
213
- border: 1px solid var(--border);
214
- padding: 10px 12px;
215
- text-align: left;
216
- }
217
-
218
- .items-table th {
219
- background: #f1f3f7;
220
- font-weight: 600;
221
- text-transform: uppercase;
222
- letter-spacing: 0.02em;
223
- }
224
-
225
- .items-table input,
226
- .items-table select {
227
- width: 100%;
228
- padding: 8px 10px;
229
- border-radius: 6px;
230
- border: 1px solid var(--border);
231
- background: #ffffff;
232
  }
233
 
234
- .items-table .remove-item {
235
  color: var(--danger);
236
- background: none;
237
- padding: 0;
238
- }
239
-
240
- .items-table .remove-item:hover {
241
- text-decoration: underline;
242
- }
243
-
244
- .totals {
245
- display: flex;
246
- flex-wrap: wrap;
247
- gap: 16px;
248
- font-weight: 600;
249
- margin-top: 8px;
250
- padding: 12px 16px;
251
- border-radius: 8px;
252
- background: #f7f9ff;
253
- }
254
-
255
- .rate-summary {
256
- display: grid;
257
- gap: 10px;
258
- margin-top: 8px;
259
- }
260
-
261
- .rate-summary-item {
262
- display: flex;
263
- flex-wrap: wrap;
264
- gap: 12px;
265
- font-weight: 600;
266
- padding: 8px 12px;
267
- border: 1px dashed rgba(26, 115, 232, 0.25);
268
- border-radius: 6px;
269
- background: #ffffff;
270
- }
271
-
272
- .invoice-preview {
273
- display: grid;
274
- gap: 24px;
275
- }
276
-
277
- .invoice-preview-meta {
278
- display: flex;
279
- flex-wrap: wrap;
280
- gap: 24px;
281
- font-size: 14px;
282
- }
283
-
284
- .invoice-preview-meta span {
285
- display: inline-flex;
286
- align-items: center;
287
- gap: 6px;
288
- }
289
-
290
- .invoice-preview-header {
291
- display: flex;
292
- flex-wrap: wrap;
293
- gap: 24px;
294
- }
295
-
296
- .invoice-preview-card {
297
- flex: 1 1 280px;
298
- border: 1px solid var(--border);
299
- border-radius: var(--radius);
300
- padding: 16px 20px;
301
- background: #f9fafc;
302
- }
303
-
304
- .invoice-preview-card h4 {
305
- margin: 0 0 12px;
306
- font-size: 14px;
307
- text-transform: uppercase;
308
- letter-spacing: 0.05em;
309
- }
310
-
311
- .invoice-preview-card p {
312
- margin: 4px 0;
313
- font-size: 14px;
314
- }
315
-
316
- .invoice-preview table {
317
- width: 100%;
318
- border-collapse: collapse;
319
- font-size: 14px;
320
- }
321
-
322
- .invoice-preview th,
323
- .invoice-preview td {
324
- border: 1px solid var(--border);
325
- padding: 10px 12px;
326
- text-align: left;
327
- }
328
-
329
- .invoice-preview th {
330
- background: #f1f3f7;
331
- font-weight: 600;
332
- }
333
-
334
- .invoice-preview-summary {
335
- display: flex;
336
- justify-content: flex-end;
337
- flex-wrap: wrap;
338
- gap: 16px;
339
- font-weight: 600;
340
- font-size: 15px;
341
- }
342
-
343
- .invoice-preview-note {
344
- padding: 12px 16px;
345
- border-left: 3px solid var(--accent);
346
- background: #f4f8ff;
347
- font-size: 14px;
348
- }
349
-
350
- @media (max-width: 640px) {
351
- .panel {
352
- padding: 20px;
353
- }
354
-
355
- .invoice-header {
356
- flex-direction: column;
357
- gap: 12px;
358
- align-items: flex-start;
359
- }
360
-
361
- .business-section,
362
- .items-section {
363
- padding: 16px;
364
- }
365
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ --bg: #f5f5f5;
3
+ --panel-bg: #ffffff;
4
+ --text: #202124;
5
+ --muted: #5f6368;
6
+ --accent: #1a73e8;
7
+ --danger: #c5221f;
8
+ --border: #dadce0;
9
+ --radius: 10px;
10
+ --shadow: 0 10px 30px rgba(0, 0, 0, 0.08);
11
+ font-family: "Roboto", "Segoe UI", Tahoma, sans-serif;
12
+ }
13
+
14
+ * {
15
+ box-sizing: border-box;
16
+ }
17
+
18
+ body {
19
+ margin: 0;
20
+ background: linear-gradient(180deg, #f7f9fc 0%, #eef1f6 100%);
21
+ color: var(--text);
22
+ }
23
+
24
+ .container {
25
+ max-width: 980px;
26
+ margin: 0 auto;
27
+ padding: 40px 20px 64px;
28
+ }
29
+
30
+ .header-section {
31
+ display: flex;
32
+ flex-direction: column;
33
+ align-items: center;
34
+ gap: 16px;
35
+ margin-bottom: 32px;
36
+ text-align: center;
37
+ }
38
+
39
+ .logo-container {
40
+ display: flex;
41
+ flex-direction: column;
42
+ align-items: center;
43
+ gap: 12px;
44
+ }
45
+
46
+ .logo {
47
+ max-width: 180px;
48
+ height: auto;
49
+ border-radius: 8px;
50
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
51
+ }
52
+
53
+ .app-title {
54
+ text-align: center;
55
+ font-size: 24px;
56
+ margin: 0;
57
+ font-weight: 600;
58
+ }
59
+
60
+ .app-description {
61
+ text-align: center;
62
+ font-size: 16px;
63
+ color: var(--muted);
64
+ line-height: 1.5;
65
+ margin: 0;
66
+ max-width: 600px;
67
+ }
68
+
69
+ .panel {
70
+ background: var(--panel-bg);
71
+ border-radius: var(--radius);
72
+ box-shadow: var(--shadow);
73
+ padding: 28px 32px;
74
+ margin-bottom: 32px;
75
+ border: 1px solid rgba(32, 33, 36, 0.08);
76
+ }
77
+
78
+ .auth-card {
79
+ border: 1px solid rgba(32, 33, 36, 0.12);
80
+ border-radius: var(--radius);
81
+ padding: 24px 28px;
82
+ background: #f9fbff;
83
+ display: grid;
84
+ gap: 18px;
85
+ max-width: 520px;
86
+ margin: 0 auto;
87
+ width: 100%;
88
+ }
89
+
90
+ .auth-login {
91
+ display: flex;
92
+ justify-content: center;
93
+ }
94
+
95
+ .login-card {
96
+ width: 100%;
97
+ }
98
+
99
+ #register-section {
100
+ display: flex;
101
+ justify-content: center;
102
+ }
103
+
104
+ #register-section .register-card {
105
+ max-width: 640px;
106
+ width: 100%;
107
+ }
108
+
109
+ .register-header {
110
+ display: flex;
111
+ justify-content: space-between;
112
+ align-items: center;
113
+ gap: 16px;
114
+ }
115
+
116
+ .auth-card h3 {
117
+ margin: 0;
118
+ }
119
+
120
+ .auth-card .form {
121
+ gap: 18px;
122
+ width: 100%;
123
+ }
124
+
125
+
126
+ .auth-actions {
127
+ margin-top: 4px;
128
+
129
+ display: flex;
130
+ flex-direction: column;
131
+ align-items: center;
132
+ justify-content: center;
133
+ gap: 10px;
134
+ font-size: 14px;
135
+ color: var(--muted);
136
+ text-align: center;
137
+ }
138
+
139
+ .ghost-button {
140
+ padding: 10px 20px;
141
+ border: 1px solid var(--accent);
142
+ border-radius: 8px;
143
+ background: transparent;
144
+ color: var(--accent);
145
+ font-weight: 600;
146
+ cursor: pointer;
147
+ transition: background 0.2s ease, color 0.2s ease;
148
+ }
149
+
150
+ .ghost-button:hover {
151
+ background: rgba(26, 115, 232, 0.12);
152
+ }
153
+
154
+ .form-divider {
155
+ border: none;
156
+ border-top: 1px solid var(--border);
157
+ margin: 16px 0 0;
158
+ }
159
+
160
+ .register-fields {
161
+ display: grid;
162
+ gap: 24px;
163
+ }
164
+
165
+ .register-credentials {
166
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
167
+ }
168
+
169
+ .register-company {
170
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
171
+ }
172
+
173
+ .hidden {
174
+ display: none;
175
+ }
176
+
177
+ .form {
178
+ display: grid;
179
+ gap: 20px;
180
+ }
181
+
182
+ .field-grid {
183
+ display: grid;
184
+ gap: 18px 24px;
185
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
186
+ }
187
+
188
+ label {
189
+ display: grid;
190
+ gap: 8px;
191
+ font-weight: 600;
192
+ font-size: 15px;
193
+ }
194
+
195
+ input,
196
+ textarea,
197
+ select {
198
+ padding: 12px 14px;
199
+ border-radius: 8px;
200
+ border: 1px solid var(--border);
201
+ font-size: 15px;
202
+ background: #fbfbff;
203
+ }
204
+
205
+ input:focus,
206
+ textarea:focus,
207
+ select:focus {
208
+ outline: 2px solid rgba(26, 115, 232, 0.35);
209
+ outline-offset: 1px;
210
+ border-color: var(--accent);
211
+ background: #ffffff;
212
+ }
213
+
214
+ textarea {
215
+ resize: vertical;
216
+ min-height: 96px;
217
+ }
218
+
219
+ #exemption-note-wrapper {
220
+ display: grid;
221
+ gap: 12px;
222
+ }
223
+
224
+ #exemption-note-wrapper textarea[readonly] {
225
+ background: #f4f6fb;
226
+ color: var(--muted);
227
+ }
228
+
229
+ button {
230
+ padding: 12px 20px;
231
+ border-radius: 8px;
232
+ border: none;
233
+ font-size: 15px;
234
+ font-weight: 600;
235
+ background: var(--accent);
236
+ color: white;
237
+ cursor: pointer;
238
+ transition: background 0.2s ease;
239
+ }
240
+
241
+ button:hover {
242
+ background: #0f5ec4;
243
+ }
244
+
245
+ .button {
246
+ display: inline-flex;
247
+ align-items: center;
248
+ justify-content: center;
249
+ gap: 8px;
250
+ padding: 12px 20px;
251
+ border-radius: 8px;
252
+ border: none;
253
+ font-size: 15px;
254
+ font-weight: 600;
255
+ background: var(--accent);
256
+ color: #ffffff;
257
+ cursor: pointer;
258
+ transition: background 0.2s ease;
259
+ }
260
+
261
+ .button.secondary {
262
+ background: rgba(26, 115, 232, 0.12);
263
+ color: var(--accent);
264
+ border: 1px solid rgba(26, 115, 232, 0.25);
265
+ }
266
+
267
+ .button.secondary:hover {
268
+ background: rgba(26, 115, 232, 0.2);
269
+ }
270
+
271
+ .button input[type="file"] {
272
+ display: none;
273
+ }
274
+
275
+ button:disabled {
276
+ opacity: 0.6;
277
+ cursor: not-allowed;
278
+ }
279
+
280
+ .link-button {
281
+ background: none;
282
+ color: var(--accent);
283
+ padding: 0;
284
+ }
285
+
286
+ .link-button:hover {
287
+ color: #0f5ec4;
288
+ background: none;
289
+ }
290
+
291
+ .hint {
292
+ color: var(--muted);
293
+ font-size: 13px;
294
+ margin: 0;
295
+ }
296
+
297
  .feedback {
298
  color: var(--muted);
299
  min-height: 20px;
300
  font-size: 14px;
301
  }
302
 
303
+ .feedback:empty {
304
+ display: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
305
  }
306
 
307
+ .feedback.error {
308
  color: var(--danger);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
309
  }
310
+
311
+ .feedback.success {
312
+ color: #188038;
313
+ }
314
+
315
+ .app-header {
316
+ display: flex;
317
+ justify-content: space-between;
318
+ align-items: center;
319
+ margin-bottom: 24px;
320
+ flex-wrap: wrap;
321
+ gap: 16px;
322
+ }
323
+
324
+ .app-subtitle {
325
+ margin: 4px 0 0;
326
+ color: var(--muted);
327
+ font-size: 14px;
328
+ }
329
+
330
+ .app-nav {
331
+ display: flex;
332
+ align-items: center;
333
+ gap: 8px;
334
+ flex-wrap: wrap;
335
+ }
336
+
337
+ .app-nav-button {
338
+ background: rgba(26, 115, 232, 0.12);
339
+ color: var(--accent);
340
+ border: 1px solid rgba(26, 115, 232, 0.25);
341
+ }
342
+
343
+ .app-nav-button:hover {
344
+ background: rgba(26, 115, 232, 0.2);
345
+ }
346
+
347
+ .app-nav-button.active {
348
+ background: var(--accent);
349
+ color: #ffffff;
350
+ }
351
+
352
+ .app-nav-button.active:hover {
353
+ background: #0f5ec4;
354
+ }
355
+
356
+ .business-section {
357
+ border: 1px solid rgba(32, 33, 36, 0.08);
358
+ border-radius: var(--radius);
359
+ padding: 20px 24px;
360
+ background: #fbfcff;
361
+ margin-bottom: 24px;
362
+ }
363
+
364
+ .app-view {
365
+ display: grid;
366
+ gap: 24px;
367
+ }
368
+
369
+ .business-section-header {
370
+ display: flex;
371
+ justify-content: space-between;
372
+ align-items: center;
373
+ margin-bottom: 12px;
374
+ }
375
+
376
+ .business-actions {
377
+ display: flex;
378
+ gap: 12px;
379
+ flex-wrap: wrap;
380
+ align-items: center;
381
+ }
382
+
383
+ .business-display {
384
+ font-size: 15px;
385
+ line-height: 1.4;
386
+ }
387
+
388
+ .business-display-grid {
389
+ display: grid;
390
+ gap: 12px;
391
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
392
+ }
393
+
394
+ .business-display-item {
395
+ display: flex;
396
+ flex-direction: column;
397
+ gap: 4px;
398
+ }
399
+
400
+ .business-display-item strong {
401
+ font-weight: 600;
402
+ }
403
+
404
+ .logo-preview {
405
+ margin-top: 16px;
406
+ border: 1px solid var(--border);
407
+ border-radius: 8px;
408
+ padding: 12px;
409
+ display: grid;
410
+ gap: 8px;
411
+ max-width: 260px;
412
+ background: #ffffff;
413
+ }
414
+
415
+ .logo-preview-label {
416
+ font-size: 12px;
417
+ text-transform: uppercase;
418
+ letter-spacing: 0.05em;
419
+ color: var(--muted);
420
+ font-weight: 600;
421
+ }
422
+
423
+ .logo-preview img {
424
+ max-width: 100%;
425
+ max-height: 120px;
426
+ object-fit: contain;
427
+ }
428
+
429
+ .form-actions {
430
+ display: flex;
431
+ align-items: center;
432
+ gap: 16px;
433
+ }
434
+
435
+ .items-section {
436
+ border: 1px solid rgba(32, 33, 36, 0.08);
437
+ border-radius: var(--radius);
438
+ padding: 20px 24px;
439
+ background: #ffffff;
440
+ display: grid;
441
+ gap: 18px;
442
+ }
443
+
444
+ .items-header {
445
+ display: flex;
446
+ justify-content: space-between;
447
+ align-items: center;
448
+ }
449
+
450
+ .items-table-wrapper {
451
+ overflow-x: auto;
452
+ }
453
+
454
+ .items-table {
455
+ width: 100%;
456
+ border-collapse: collapse;
457
+ font-size: 14px;
458
+ }
459
+
460
+ .items-table th,
461
+ .items-table td {
462
+ border: 1px solid var(--border);
463
+ padding: 10px 12px;
464
+ text-align: left;
465
+ }
466
+
467
+ .items-table th {
468
+ background: #f1f3f7;
469
+ font-weight: 600;
470
+ text-transform: uppercase;
471
+ letter-spacing: 0.02em;
472
+ }
473
+
474
+ .items-table input,
475
+ .items-table select {
476
+ width: 100%;
477
+ padding: 8px 10px;
478
+ border-radius: 6px;
479
+ border: 1px solid var(--border);
480
+ background: #ffffff;
481
+ }
482
+
483
+ .items-table .remove-item {
484
+ color: var(--danger);
485
+ background: none;
486
+ padding: 0;
487
+ }
488
+
489
+ .items-table .remove-item:hover {
490
+ text-decoration: underline;
491
+ }
492
+
493
+ .totals {
494
+ display: flex;
495
+ flex-wrap: wrap;
496
+ gap: 16px;
497
+ font-weight: 600;
498
+ margin-top: 8px;
499
+ padding: 12px 16px;
500
+ border-radius: 8px;
501
+ background: #f7f9ff;
502
+ }
503
+
504
+ .rate-summary {
505
+ display: grid;
506
+ gap: 10px;
507
+ margin-top: 8px;
508
+ }
509
+
510
+ .rate-summary-item {
511
+ display: flex;
512
+ flex-wrap: wrap;
513
+ gap: 12px;
514
+ font-weight: 600;
515
+ padding: 8px 12px;
516
+ border: 1px dashed rgba(26, 115, 232, 0.25);
517
+ border-radius: 6px;
518
+ background: #ffffff;
519
+ }
520
+
521
+ .invoice-preview {
522
+ display: grid;
523
+ gap: 24px;
524
+ }
525
+
526
+ .invoice-preview-meta {
527
+ display: flex;
528
+ flex-wrap: wrap;
529
+ gap: 24px;
530
+ font-size: 14px;
531
+ }
532
+
533
+ .invoice-preview-meta span {
534
+ display: inline-flex;
535
+ align-items: center;
536
+ gap: 6px;
537
+ }
538
+
539
+ .invoice-preview-header {
540
+ display: flex;
541
+ flex-wrap: wrap;
542
+ gap: 24px;
543
+ }
544
+
545
+ .invoice-preview-card {
546
+ flex: 1 1 280px;
547
+ border: 1px solid var(--border);
548
+ border-radius: var(--radius);
549
+ padding: 16px 20px;
550
+ background: #f9fafc;
551
+ }
552
+
553
+ .invoice-preview-card h4 {
554
+ margin: 0 0 12px;
555
+ font-size: 14px;
556
+ text-transform: uppercase;
557
+ letter-spacing: 0.05em;
558
+ }
559
+
560
+ .invoice-preview-card p {
561
+ margin: 4px 0;
562
+ font-size: 14px;
563
+ }
564
+
565
+ .invoice-preview table {
566
+ width: 100%;
567
+ border-collapse: collapse;
568
+ font-size: 14px;
569
+ }
570
+
571
+ .invoice-preview th,
572
+ .invoice-preview td {
573
+ border: 1px solid var(--border);
574
+ padding: 10px 12px;
575
+ text-align: left;
576
+ }
577
+
578
+ .invoice-preview th {
579
+ background: #f1f3f7;
580
+ font-weight: 600;
581
+ }
582
+
583
+ .invoice-preview-summary {
584
+ display: flex;
585
+ justify-content: flex-end;
586
+ flex-wrap: wrap;
587
+ gap: 16px;
588
+ font-weight: 600;
589
+ font-size: 15px;
590
+ }
591
+
592
+ .invoice-preview-note {
593
+ padding: 12px 16px;
594
+ border-left: 3px solid var(--accent);
595
+ background: #f4f8ff;
596
+ font-size: 14px;
597
+ }
598
+
599
+ .dashboard-header {
600
+ display: flex;
601
+ flex-wrap: wrap;
602
+ align-items: center;
603
+ justify-content: space-between;
604
+ gap: 16px;
605
+ }
606
+
607
+ .filters {
608
+ display: flex;
609
+ flex-wrap: wrap;
610
+ gap: 16px;
611
+ align-items: flex-end;
612
+ }
613
+
614
+ .dashboard-summary {
615
+ display: grid;
616
+ gap: 16px;
617
+ margin: 24px 0;
618
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
619
+ }
620
+
621
+ .summary-card {
622
+ border: 1px solid rgba(32, 33, 36, 0.08);
623
+ border-radius: var(--radius);
624
+ background: #fbfcff;
625
+ padding: 16px;
626
+ display: grid;
627
+ gap: 6px;
628
+ }
629
+
630
+ .summary-label {
631
+ font-size: 13px;
632
+ font-weight: 600;
633
+ color: var(--muted);
634
+ text-transform: uppercase;
635
+ letter-spacing: 0.05em;
636
+ }
637
+
638
+ .summary-count {
639
+ font-size: 20px;
640
+ font-weight: 700;
641
+ }
642
+
643
+ .summary-amount {
644
+ font-size: 16px;
645
+ font-weight: 600;
646
+ color: var(--accent);
647
+ }
648
+
649
+ .dashboard-chart {
650
+ border: 1px solid rgba(32, 33, 36, 0.08);
651
+ border-radius: var(--radius);
652
+ background: #ffffff;
653
+ padding: 16px;
654
+ }
655
+
656
+ .dashboard-table .items-table th,
657
+ .dashboard-table .items-table td {
658
+ white-space: nowrap;
659
+ }
660
+
661
+ .dashboard-table .items-table td:last-child {
662
+ width: 160px;
663
+ }
664
+
665
+ .table-actions {
666
+ display: flex;
667
+ flex-wrap: wrap;
668
+ gap: 8px;
669
+ }
670
+
671
+ #invoices-empty {
672
+ margin-top: 12px;
673
+ text-align: center;
674
+ }
675
+
676
+ @media (max-width: 640px) {
677
+ .panel {
678
+ padding: 20px;
679
+ }
680
+
681
+ .header-section {
682
+ flex-direction: column;
683
+ text-align: center;
684
+ gap: 16px;
685
+ }
686
+
687
+ .logo {
688
+ max-width: 150px;
689
+ }
690
+
691
+ .app-title {
692
+ font-size: 20px;
693
+ }
694
+
695
+ .app-header {
696
+ flex-direction: column;
697
+ gap: 12px;
698
+ align-items: flex-start;
699
+ }
700
+
701
+ .business-section,
702
+ .items-section {
703
+ padding: 16px;
704
+ }
705
+ }