nodebb-plugin-sso-biogrenci 2.0.9 → 2.0.10

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.
package/custom-css.txt CHANGED
@@ -1,602 +1,2 @@
1
- /* ================================================
2
- bi'öğrenci Premium Fırsatlar Custom CSS
3
- NodeBB Admin > Appearance > Custom CSS/LESS
4
- ================================================ */
5
-
6
- :root {
7
- --bio-primary: #2563eb;
8
- --bio-primary-dark: #1d4ed8;
9
- --bio-primary-light: #eff6ff;
10
- --bio-accent: #f43f5e;
11
- --bio-bg: #f8fafc;
12
- --bio-card-bg: rgba(255, 255, 255, 0.85);
13
- --bio-text-main: #0f172a;
14
- --bio-text-mut: #64748b;
15
- --bio-border: rgba(226, 232, 240, 0.8);
16
- --bio-border-glass: rgba(255, 255, 255, 0.5);
17
- --bio-shadow-sm: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -2px rgba(0, 0, 0, 0.05);
18
- --bio-shadow-md: 0 10px 15px -3px rgba(0, 0, 0, 0.05), 0 4px 6px -4px rgba(0, 0, 0, 0.05);
19
- --bio-shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.05), 0 8px 10px -6px rgba(0, 0, 0, 0.05);
20
- --bio-shadow-glow: 0 0 20px rgba(37, 99, 235, 0.15);
21
- --bio-radius: 20px;
22
- --bio-radius-sm: 12px;
23
- }
24
-
25
- /* ---------- Page Container ---------- */
26
- #biogrenci-firsatlar {
27
- max-width: 1280px;
28
- margin: 0 auto;
29
- padding: 0 20px 80px;
30
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
31
- color: var(--bio-text-main);
32
- position: relative;
33
- }
34
-
35
- /* ---------- Aurora Animated Background ---------- */
36
- .bio-aurora {
37
- position: absolute;
38
- top: 0;
39
- left: 0;
40
- width: 100%;
41
- height: 600px;
42
- overflow: hidden;
43
- z-index: -1;
44
- pointer-events: none;
45
- opacity: 0.6;
46
- }
47
- .bio-aurora-orb {
48
- position: absolute;
49
- border-radius: 50%;
50
- filter: blur(80px);
51
- animation: aurora-float 20s infinite alternate ease-in-out;
52
- }
53
- .bio-orb-1 {
54
- width: 400px;
55
- height: 400px;
56
- background: rgba(59, 130, 246, 0.3);
57
- top: -100px;
58
- left: -100px;
59
- }
60
- .bio-orb-2 {
61
- width: 500px;
62
- height: 500px;
63
- background: rgba(236, 72, 153, 0.2);
64
- top: 100px;
65
- right: -200px;
66
- animation-delay: -5s;
67
- }
68
- .bio-orb-3 {
69
- width: 300px;
70
- height: 300px;
71
- background: rgba(139, 92, 246, 0.25);
72
- bottom: -50px;
73
- left: 30%;
74
- animation-delay: -10s;
75
- }
76
-
77
- @keyframes aurora-float {
78
- 0% { transform: translate(0, 0) scale(1); }
79
- 50% { transform: translate(50px, 30px) scale(1.1); }
80
- 100% { transform: translate(-30px, -50px) scale(0.9); }
81
- }
82
-
83
- /* ---------- Hero Section ---------- */
84
- .bio-hero {
85
- padding: 80px 20px 60px;
86
- text-align: center;
87
- position: relative;
88
- z-index: 10;
89
- }
90
- .bio-badge-premium {
91
- display: inline-flex;
92
- align-items: center;
93
- gap: 8px;
94
- background: linear-gradient(135deg, rgba(255,255,255,0.9), rgba(255,255,255,0.7));
95
- backdrop-filter: blur(10px);
96
- -webkit-backdrop-filter: blur(10px);
97
- padding: 8px 20px;
98
- border-radius: 100px;
99
- font-size: 13px;
100
- font-weight: 800;
101
- color: var(--bio-primary-dark);
102
- margin-bottom: 24px;
103
- border: 1px solid var(--bio-border-glass);
104
- box-shadow: var(--bio-shadow-sm);
105
- text-transform: uppercase;
106
- letter-spacing: 1px;
107
- }
108
- .bio-badge-premium i { color: #f59e0b; }
109
- .bio-hero h1 {
110
- margin: 0 0 16px;
111
- font-size: 48px;
112
- font-weight: 900;
113
- letter-spacing: -1.5px;
114
- line-height: 1.1;
115
- background: linear-gradient(135deg, #0f172a 0%, #334155 100%);
116
- -webkit-background-clip: text;
117
- -webkit-text-fill-color: transparent;
118
- }
119
- .bio-hero p {
120
- margin: 0 auto;
121
- font-size: 18px;
122
- color: var(--bio-text-mut);
123
- max-width: 600px;
124
- line-height: 1.6;
125
- }
126
-
127
- /* ---------- Sticky Glass Controls ---------- */
128
- .bio-controls-wrapper {
129
- position: sticky;
130
- top: 70px; /* Adjust based on navbar height */
131
- z-index: 40;
132
- margin-bottom: 40px;
133
- padding: 10px 0;
134
- }
135
- .bio-controls {
136
- display: flex;
137
- align-items: center;
138
- gap: 16px;
139
- background: rgba(255, 255, 255, 0.75);
140
- backdrop-filter: blur(20px);
141
- -webkit-backdrop-filter: blur(20px);
142
- border: 1px solid var(--bio-border-glass);
143
- padding: 12px 16px;
144
- border-radius: var(--bio-radius);
145
- box-shadow: var(--bio-shadow-md);
146
- flex-wrap: wrap;
147
- }
148
-
149
- /* Search */
150
- .bio-search {
151
- flex: 1;
152
- min-width: 240px;
153
- position: relative;
154
- }
155
- .bio-search > i {
156
- position: absolute;
157
- left: 20px;
158
- top: 50%;
159
- transform: translateY(-50%);
160
- color: #94a3b8;
161
- font-size: 16px;
162
- z-index: 2;
163
- transition: color 0.3s ease;
164
- }
165
- .bio-search input {
166
- width: 100%;
167
- height: 52px;
168
- padding: 0 20px 0 52px;
169
- border: 2px solid transparent;
170
- background: rgba(255, 255, 255, 0.9);
171
- border-radius: var(--bio-radius-sm);
172
- font-size: 15px;
173
- font-weight: 500;
174
- color: var(--bio-text-main);
175
- outline: none;
176
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
177
- box-shadow: inset 0 2px 4px rgba(0,0,0,0.02);
178
- }
179
- .bio-search input::placeholder { color: #94a3b8; }
180
- .bio-search input:focus {
181
- background: #fff;
182
- border-color: var(--bio-primary);
183
- box-shadow: 0 0 0 4px rgba(37,99,235,0.1), inset 0 2px 4px rgba(0,0,0,0);
184
- }
185
- .bio-search input:focus + .bio-search-ring {
186
- opacity: 1;
187
- transform: scale(1);
188
- }
189
- .bio-search input:focus ~ i { color: var(--bio-primary); }
190
-
191
- /* Filters */
192
- .bio-filters {
193
- display: flex;
194
- gap: 10px;
195
- flex-wrap: nowrap;
196
- overflow-x: auto;
197
- -webkit-overflow-scrolling: touch;
198
- scrollbar-width: none;
199
- padding: 4px 0;
200
- }
201
- .bio-filters::-webkit-scrollbar { display: none; }
202
- .bio-chip {
203
- display: inline-flex;
204
- align-items: center;
205
- gap: 8px;
206
- padding: 12px 24px;
207
- border-radius: 100px;
208
- border: 1px solid var(--bio-border);
209
- background: #fff;
210
- color: var(--bio-text-mut);
211
- font-size: 14px;
212
- font-weight: 600;
213
- cursor: pointer;
214
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
215
- white-space: nowrap;
216
- box-shadow: var(--bio-shadow-sm);
217
- }
218
- .bio-chip i { font-size: 14px; }
219
- .bio-chip:hover {
220
- border-color: #cbd5e1;
221
- background: #f8fafc;
222
- transform: translateY(-2px);
223
- box-shadow: var(--bio-shadow-md);
224
- color: var(--bio-text-main);
225
- }
226
- .bio-chip.active {
227
- background: var(--bio-text-main);
228
- color: #fff;
229
- border-color: var(--bio-text-main);
230
- box-shadow: 0 8px 16px rgba(15, 23, 42, 0.2);
231
- }
232
-
233
- /* Sort */
234
- .bio-sort {
235
- position: relative;
236
- min-width: 160px;
237
- }
238
- .bio-sort-icon {
239
- position: absolute;
240
- left: 16px;
241
- top: 50%;
242
- transform: translateY(-50%);
243
- color: #94a3b8;
244
- pointer-events: none;
245
- z-index: 2;
246
- }
247
- .bio-sort select {
248
- width: 100%;
249
- height: 52px;
250
- padding: 0 40px 0 44px;
251
- border: 1px solid var(--bio-border);
252
- border-radius: var(--bio-radius-sm);
253
- background: #fff;
254
- color: var(--bio-text-main);
255
- font-size: 14px;
256
- font-weight: 600;
257
- cursor: pointer;
258
- outline: none;
259
- appearance: none;
260
- transition: all 0.3s ease;
261
- box-shadow: var(--bio-shadow-sm);
262
- }
263
- .bio-sort::after {
264
- content: '\f107'; /* FontAwesome chevron-down */
265
- font-family: 'FontAwesome';
266
- position: absolute;
267
- right: 16px;
268
- top: 50%;
269
- transform: translateY(-50%);
270
- color: #94a3b8;
271
- pointer-events: none;
272
- }
273
- .bio-sort select:focus {
274
- border-color: var(--bio-primary);
275
- box-shadow: 0 0 0 4px rgba(37,99,235,0.1);
276
- }
277
-
278
- /* ---------- Grid ---------- */
279
- .bio-grid {
280
- column-count: 3;
281
- column-gap: 32px;
282
- }
283
-
284
- /* ---------- Premium Card ---------- */
285
- a.bio-card {
286
- background: var(--bio-card-bg);
287
- backdrop-filter: blur(10px);
288
- -webkit-backdrop-filter: blur(10px);
289
- border-radius: var(--bio-radius);
290
- overflow: hidden;
291
- border: 1px solid var(--bio-border-glass);
292
- display: flex;
293
- flex-direction: column;
294
- transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
295
- text-decoration: none;
296
- color: inherit;
297
- cursor: pointer;
298
- break-inside: avoid;
299
- margin-bottom: 32px;
300
- box-shadow: 0 10px 30px -10px rgba(0,0,0,0.05), inset 0 1px 0 rgba(255,255,255,1);
301
- position: relative;
302
- animation: card-entrance 0.6s backwards;
303
- }
304
- @keyframes card-entrance {
305
- from { opacity: 0; transform: translateY(40px) scale(0.95); }
306
- to { opacity: 1; transform: translateY(0) scale(1); }
307
- }
308
-
309
- a.bio-card:hover {
310
- transform: translateY(-12px) scale(1.02);
311
- box-shadow: 0 30px 60px -15px rgba(0,0,0,0.1), inset 0 1px 0 rgba(255,255,255,1);
312
- text-decoration: none;
313
- }
314
- a.bio-card.featured {
315
- border: 2px solid rgba(245, 158, 11, 0.4);
316
- box-shadow: 0 20px 40px rgba(245, 158, 11, 0.1), inset 0 1px 0 rgba(255,255,255,1);
317
- }
318
-
319
- /* Card Image Area */
320
- .bio-card-img {
321
- position: relative;
322
- overflow: hidden;
323
- background: #f1f5f9;
324
- border-radius: var(--bio-radius) var(--bio-radius) 0 0;
325
- }
326
- .bio-card-img img {
327
- width: 100%;
328
- height: auto;
329
- display: block;
330
- transition: transform 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
331
- filter: saturate(1.1);
332
- }
333
- a.bio-card:hover .bio-card-img img {
334
- transform: scale(1.08);
335
- }
336
- .bio-card-img::after {
337
- content: '';
338
- position: absolute;
339
- top: 0; left: 0; right: 0; bottom: 0;
340
- background: linear-gradient(to bottom, transparent 60%, rgba(0,0,0,0.7) 100%);
341
- pointer-events: none;
342
- opacity: 0.8;
343
- transition: opacity 0.3s ease;
344
- }
345
- a.bio-card:hover .bio-card-img::after {
346
- opacity: 1;
347
- }
348
-
349
- /* Card Badges */
350
- .bio-tag {
351
- position: absolute;
352
- top: 16px;
353
- left: 16px;
354
- padding: 6px 16px;
355
- border-radius: 100px;
356
- font-size: 11px;
357
- font-weight: 800;
358
- text-transform: uppercase;
359
- letter-spacing: 1px;
360
- z-index: 2;
361
- display: inline-flex;
362
- align-items: center;
363
- gap: 6px;
364
- background: rgba(255,255,255,0.9);
365
- backdrop-filter: blur(8px);
366
- -webkit-backdrop-filter: blur(8px);
367
- box-shadow: 0 4px 12px rgba(0,0,0,0.1);
368
- border: 1px solid rgba(255,255,255,0.5);
369
- }
370
- .bio-tag-kupon { color: #10b981; }
371
- .bio-tag-qr { color: var(--bio-primary); }
372
- .bio-tag-affiliate { color: #f43f5e; }
373
-
374
- /* Favorite/Star */
375
- .bio-star {
376
- position: absolute;
377
- top: 16px;
378
- right: 16px;
379
- width: 36px;
380
- height: 36px;
381
- background: rgba(255,255,255,0.9);
382
- backdrop-filter: blur(8px);
383
- border-radius: 50%;
384
- display: flex;
385
- align-items: center;
386
- justify-content: center;
387
- box-shadow: 0 4px 12px rgba(0,0,0,0.1);
388
- z-index: 2;
389
- border: 1px solid rgba(255,255,255,0.5);
390
- }
391
- .bio-star i { color: #f59e0b; font-size: 16px; }
392
-
393
- /* Timer */
394
- .bio-timer {
395
- position: absolute;
396
- bottom: 0;
397
- left: 0;
398
- right: 0;
399
- padding: 16px 20px;
400
- color: #fff;
401
- font-size: 13px;
402
- font-weight: 600;
403
- z-index: 2;
404
- display: flex;
405
- align-items: center;
406
- gap: 8px;
407
- }
408
- .bio-timer i { color: #facc15; }
409
-
410
- /* Card Body */
411
- .bio-card-body {
412
- padding: 24px;
413
- display: flex;
414
- flex-direction: column;
415
- flex: 1;
416
- background: #fff;
417
- }
418
- .bio-brand {
419
- font-size: 12px;
420
- font-weight: 800;
421
- color: var(--bio-primary);
422
- text-transform: uppercase;
423
- letter-spacing: 1.5px;
424
- margin-bottom: 8px;
425
- display: block;
426
- }
427
- .bio-card-body h3 {
428
- font-size: 20px;
429
- font-weight: 800;
430
- color: var(--bio-text-main);
431
- margin: 0 0 10px;
432
- line-height: 1.3;
433
- display: -webkit-box;
434
- -webkit-line-clamp: 2;
435
- -webkit-box-orient: vertical;
436
- overflow: hidden;
437
- }
438
- .bio-card-body p {
439
- font-size: 14px;
440
- color: var(--bio-text-mut);
441
- margin: 0 0 24px;
442
- line-height: 1.6;
443
- display: -webkit-box;
444
- -webkit-line-clamp: 2;
445
- -webkit-box-orient: vertical;
446
- overflow: hidden;
447
- flex: 1;
448
- }
449
-
450
- /* CTA Button */
451
- .bio-cta {
452
- display: flex;
453
- align-items: center;
454
- justify-content: center;
455
- gap: 10px;
456
- width: 100%;
457
- padding: 16px 24px;
458
- border-radius: var(--bio-radius-sm);
459
- background: var(--bio-text-main);
460
- color: #fff;
461
- font-size: 15px;
462
- font-weight: 700;
463
- margin-top: auto;
464
- transition: all 0.3s ease;
465
- letter-spacing: 0.5px;
466
- }
467
- a.bio-card:hover .bio-cta {
468
- background: var(--bio-primary);
469
- box-shadow: var(--bio-shadow-glow);
470
- }
471
- .bio-cta i {
472
- transition: transform 0.3s ease;
473
- }
474
- a.bio-card:hover .bio-cta i {
475
- transform: translateX(6px);
476
- }
477
-
478
- /* ---------- Skeleton Loading (Shimmer) ---------- */
479
- .bio-skeleton-card {
480
- background: #fff;
481
- border-radius: var(--bio-radius);
482
- border: 1px solid var(--bio-border);
483
- overflow: hidden;
484
- break-inside: avoid;
485
- margin-bottom: 32px;
486
- display: flex;
487
- flex-direction: column;
488
- }
489
- .bio-shimmer {
490
- background: #e2e8f0;
491
- background-image: linear-gradient(
492
- 90deg,
493
- rgba(255, 255, 255, 0) 0,
494
- rgba(255, 255, 255, 0.4) 20%,
495
- rgba(255, 255, 255, 0.6) 60%,
496
- rgba(255, 255, 255, 0)
497
- );
498
- background-size: 200% 100%;
499
- animation: shimmer 1.5s infinite linear;
500
- }
501
- .bio-skel-img {
502
- height: 200px;
503
- width: 100%;
504
- }
505
- .bio-skel-body {
506
- padding: 24px;
507
- display: flex;
508
- flex-direction: column;
509
- gap: 16px;
510
- }
511
- .bio-skel-brand { height: 16px; width: 40%; border-radius: 4px; }
512
- .bio-skel-title { height: 24px; width: 90%; border-radius: 4px; }
513
- .bio-skel-desc { height: 14px; width: 100%; border-radius: 4px; }
514
- .bio-skel-btn { height: 48px; width: 100%; border-radius: var(--bio-radius-sm); margin-top: 16px; }
515
-
516
- @keyframes shimmer {
517
- 0% { background-position: -200% 0; }
518
- 100% { background-position: 200% 0; }
519
- }
520
-
521
- /* ---------- Empty State ---------- */
522
- .bio-state.bio-empty {
523
- grid-column: 1 / -1;
524
- text-align: center;
525
- padding: 100px 20px;
526
- background: rgba(255,255,255,0.5);
527
- backdrop-filter: blur(10px);
528
- border-radius: var(--bio-radius);
529
- border: 1px dashed var(--bio-border);
530
- }
531
- .bio-state.bio-empty i {
532
- font-size: 64px;
533
- color: #cbd5e1;
534
- margin-bottom: 24px;
535
- }
536
- .bio-state.bio-empty h3 {
537
- font-size: 24px;
538
- font-weight: 800;
539
- color: var(--bio-text-main);
540
- margin: 0 0 10px;
541
- }
542
- .bio-state.bio-empty p {
543
- color: var(--bio-text-mut);
544
- font-size: 16px;
545
- }
546
-
547
- /* ---------- Pagination (Premium Bubble) ---------- */
548
- .bio-pager {
549
- display: flex;
550
- justify-content: center;
551
- align-items: center;
552
- gap: 16px;
553
- margin-top: 50px;
554
- }
555
- .bio-pager-btn {
556
- width: 54px;
557
- height: 54px;
558
- border-radius: 50%;
559
- border: none;
560
- background: #fff;
561
- color: var(--bio-text-main);
562
- display: flex;
563
- align-items: center;
564
- justify-content: center;
565
- cursor: pointer;
566
- transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
567
- font-size: 16px;
568
- box-shadow: var(--bio-shadow-md);
569
- }
570
- .bio-pager-btn:hover:not(:disabled) {
571
- background: var(--bio-primary);
572
- color: #fff;
573
- transform: scale(1.1);
574
- box-shadow: var(--bio-shadow-glow);
575
- }
576
- .bio-pager-btn:disabled { opacity: 0.4; cursor: not-allowed; box-shadow: none; }
577
- .bio-page-bubble {
578
- background: #fff;
579
- padding: 14px 28px;
580
- border-radius: 100px;
581
- font-size: 15px;
582
- font-weight: 800;
583
- color: var(--bio-text-main);
584
- box-shadow: var(--bio-shadow-sm);
585
- }
586
-
587
- /* ---------- Responsive Adjustments ---------- */
588
- @media (max-width: 1024px) {
589
- .bio-grid { column-count: 2; column-gap: 24px; }
590
- }
591
-
592
- @media (max-width: 768px) {
593
- .bio-hero h1 { font-size: 36px; }
594
- .bio-hero { padding: 40px 20px 30px; }
595
- .bio-controls-wrapper { top: 50px; }
596
- .bio-controls { flex-direction: column; padding: 16px; gap: 16px; border-radius: 24px; }
597
- .bio-search, .bio-sort { width: 100%; min-width: 100%; }
598
- .bio-filters { width: 100%; padding-bottom: 8px; }
599
- .bio-grid { column-count: 1; }
600
- a.bio-card:hover { transform: translateY(-4px) scale(1.01); }
601
- .bio-aurora { height: 400px; }
602
- }
1
+ /* CSS artık plugin ile birlikte yükleniyor (style.less).
2
+ NodeBB Admin > Appearance > Custom CSS'den eski bi'öğrenci CSS'ini kaldırabilirsiniz. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-sso-biogrenci",
3
- "version": "2.0.9",
3
+ "version": "2.0.10",
4
4
  "description": "bi'öğrenci öğrenci fırsatları sayfası for NodeBB",
5
5
  "main": "library.js",
6
6
  "keywords": [
package/plugin.json CHANGED
@@ -13,5 +13,6 @@
13
13
  { "hook": "static:app.load", "method": "init" },
14
14
  { "hook": "filter:admin.header.build", "method": "addAdminNavigation" }
15
15
  ],
16
- "templates": "static/templates"
16
+ "templates": "static/templates",
17
+ "less": ["static/style.less"]
17
18
  }
package/static/style.less CHANGED
@@ -1 +1,843 @@
1
- /* placeholder — asil CSS NodeBB custom CSS'den verilecek */
1
+ /* ================================================
2
+ bi'öğrenci Premium Fırsatlar
3
+ ================================================ */
4
+
5
+ :root {
6
+ --bio-primary: #2563eb;
7
+ --bio-primary-dark: #1d4ed8;
8
+ --bio-primary-light: #eff6ff;
9
+ --bio-accent: #f43f5e;
10
+ --bio-bg: #f8fafc;
11
+ --bio-card-bg: rgba(255, 255, 255, 0.85);
12
+ --bio-card-body-bg: #fff;
13
+ --bio-text-main: #0f172a;
14
+ --bio-text-mut: #64748b;
15
+ --bio-border: rgba(226, 232, 240, 0.8);
16
+ --bio-border-glass: rgba(255, 255, 255, 0.5);
17
+ --bio-controls-bg: rgba(255, 255, 255, 0.75);
18
+ --bio-input-bg: rgba(255, 255, 255, 0.9);
19
+ --bio-input-focus-bg: #fff;
20
+ --bio-chip-bg: #fff;
21
+ --bio-chip-hover-bg: #f8fafc;
22
+ --bio-chip-active-bg: #0f172a;
23
+ --bio-chip-active-color: #fff;
24
+ --bio-select-bg: #fff;
25
+ --bio-skeleton-bg: #e2e8f0;
26
+ --bio-shimmer-color: rgba(255, 255, 255, 0.4);
27
+ --bio-empty-bg: rgba(255, 255, 255, 0.5);
28
+ --bio-pager-bg: #fff;
29
+ --bio-tag-bg: rgba(255, 255, 255, 0.9);
30
+ --bio-star-bg: rgba(255, 255, 255, 0.9);
31
+ --bio-placeholder-bg: #f1f5f9;
32
+ --bio-shadow-sm: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -2px rgba(0, 0, 0, 0.05);
33
+ --bio-shadow-md: 0 10px 15px -3px rgba(0, 0, 0, 0.05), 0 4px 6px -4px rgba(0, 0, 0, 0.05);
34
+ --bio-shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.05), 0 8px 10px -6px rgba(0, 0, 0, 0.05);
35
+ --bio-shadow-glow: 0 0 20px rgba(37, 99, 235, 0.15);
36
+ --bio-card-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.05), inset 0 1px 0 rgba(255, 255, 255, 1);
37
+ --bio-card-hover-shadow: 0 30px 60px -15px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 1);
38
+ --bio-hero-gradient: linear-gradient(135deg, #0f172a 0%, #334155 100%);
39
+ --bio-badge-bg: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.7));
40
+ --bio-radius: 20px;
41
+ --bio-radius-sm: 12px;
42
+ }
43
+
44
+ /* ---------- Dark Theme ---------- */
45
+ html[data-theme="dark"],
46
+ html[data-bs-theme="dark"] {
47
+ --bio-primary: #3b82f6;
48
+ --bio-primary-dark: #2563eb;
49
+ --bio-primary-light: #1e3a5f;
50
+ --bio-bg: #0f172a;
51
+ --bio-card-bg: rgba(30, 41, 59, 0.85);
52
+ --bio-card-body-bg: #1e293b;
53
+ --bio-text-main: #e2e8f0;
54
+ --bio-text-mut: #94a3b8;
55
+ --bio-border: rgba(51, 65, 85, 0.8);
56
+ --bio-border-glass: rgba(51, 65, 85, 0.5);
57
+ --bio-controls-bg: rgba(15, 23, 42, 0.8);
58
+ --bio-input-bg: rgba(30, 41, 59, 0.9);
59
+ --bio-input-focus-bg: #1e293b;
60
+ --bio-chip-bg: #1e293b;
61
+ --bio-chip-hover-bg: #334155;
62
+ --bio-chip-active-bg: #e2e8f0;
63
+ --bio-chip-active-color: #0f172a;
64
+ --bio-select-bg: #1e293b;
65
+ --bio-skeleton-bg: #334155;
66
+ --bio-shimmer-color: rgba(255, 255, 255, 0.06);
67
+ --bio-empty-bg: rgba(30, 41, 59, 0.5);
68
+ --bio-pager-bg: #1e293b;
69
+ --bio-tag-bg: rgba(30, 41, 59, 0.9);
70
+ --bio-star-bg: rgba(30, 41, 59, 0.9);
71
+ --bio-placeholder-bg: #334155;
72
+ --bio-shadow-sm: 0 4px 6px -1px rgba(0, 0, 0, 0.2), 0 2px 4px -2px rgba(0, 0, 0, 0.2);
73
+ --bio-shadow-md: 0 10px 15px -3px rgba(0, 0, 0, 0.25), 0 4px 6px -4px rgba(0, 0, 0, 0.2);
74
+ --bio-shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.3), 0 8px 10px -6px rgba(0, 0, 0, 0.2);
75
+ --bio-shadow-glow: 0 0 20px rgba(59, 130, 246, 0.25);
76
+ --bio-card-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.2);
77
+ --bio-card-hover-shadow: 0 30px 60px -15px rgba(0, 0, 0, 0.35);
78
+ --bio-hero-gradient: linear-gradient(135deg, #e2e8f0 0%, #94a3b8 100%);
79
+ --bio-badge-bg: linear-gradient(135deg, rgba(30, 41, 59, 0.9), rgba(30, 41, 59, 0.7));
80
+ }
81
+
82
+ /* ---------- Page Container ---------- */
83
+ #biogrenci-firsatlar {
84
+ max-width: 1280px;
85
+ margin: 0 auto;
86
+ padding: 0 20px 80px;
87
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
88
+ color: var(--bio-text-main);
89
+ position: relative;
90
+ overflow-x: hidden;
91
+ }
92
+
93
+ /* ---------- Aurora Animated Background ---------- */
94
+ .bio-aurora {
95
+ position: absolute;
96
+ top: 0;
97
+ left: 0;
98
+ width: 100%;
99
+ height: 600px;
100
+ overflow: hidden;
101
+ z-index: -1;
102
+ pointer-events: none;
103
+ opacity: 0.6;
104
+ }
105
+ .bio-aurora-orb {
106
+ position: absolute;
107
+ border-radius: 50%;
108
+ filter: blur(80px);
109
+ animation: aurora-float 20s infinite alternate ease-in-out;
110
+ }
111
+ .bio-orb-1 {
112
+ width: 400px;
113
+ height: 400px;
114
+ background: rgba(59, 130, 246, 0.3);
115
+ top: -100px;
116
+ left: -100px;
117
+ }
118
+ .bio-orb-2 {
119
+ width: 500px;
120
+ height: 500px;
121
+ background: rgba(236, 72, 153, 0.2);
122
+ top: 100px;
123
+ right: -200px;
124
+ animation-delay: -5s;
125
+ }
126
+ .bio-orb-3 {
127
+ width: 300px;
128
+ height: 300px;
129
+ background: rgba(139, 92, 246, 0.25);
130
+ bottom: -50px;
131
+ left: 30%;
132
+ animation-delay: -10s;
133
+ }
134
+
135
+ html[data-theme="dark"] .bio-aurora,
136
+ html[data-bs-theme="dark"] .bio-aurora {
137
+ opacity: 0.3;
138
+ }
139
+
140
+ @keyframes aurora-float {
141
+ 0% { transform: translate(0, 0) scale(1); }
142
+ 50% { transform: translate(50px, 30px) scale(1.1); }
143
+ 100% { transform: translate(-30px, -50px) scale(0.9); }
144
+ }
145
+
146
+ /* ---------- Hero Section ---------- */
147
+ .bio-hero {
148
+ padding: 80px 20px 60px;
149
+ text-align: center;
150
+ position: relative;
151
+ z-index: 10;
152
+ }
153
+ .bio-badge-premium {
154
+ display: inline-flex;
155
+ align-items: center;
156
+ gap: 8px;
157
+ background: var(--bio-badge-bg);
158
+ backdrop-filter: blur(10px);
159
+ -webkit-backdrop-filter: blur(10px);
160
+ padding: 8px 20px;
161
+ border-radius: 100px;
162
+ font-size: 13px;
163
+ font-weight: 800;
164
+ color: var(--bio-primary-dark);
165
+ margin-bottom: 24px;
166
+ border: 1px solid var(--bio-border-glass);
167
+ box-shadow: var(--bio-shadow-sm);
168
+ text-transform: uppercase;
169
+ letter-spacing: 1px;
170
+ }
171
+ .bio-badge-premium i { color: #f59e0b; }
172
+ .bio-hero h1 {
173
+ margin: 0 0 16px;
174
+ font-size: 48px;
175
+ font-weight: 900;
176
+ letter-spacing: -1.5px;
177
+ line-height: 1.1;
178
+ background: var(--bio-hero-gradient);
179
+ -webkit-background-clip: text;
180
+ -webkit-text-fill-color: transparent;
181
+ background-clip: text;
182
+ }
183
+ .bio-hero p {
184
+ margin: 0 auto;
185
+ font-size: 18px;
186
+ color: var(--bio-text-mut);
187
+ max-width: 600px;
188
+ line-height: 1.6;
189
+ }
190
+
191
+ /* ---------- Sticky Glass Controls ---------- */
192
+ .bio-controls-wrapper {
193
+ position: sticky;
194
+ top: 70px;
195
+ z-index: 40;
196
+ margin-bottom: 40px;
197
+ padding: 10px 0;
198
+ }
199
+ .bio-controls {
200
+ display: flex;
201
+ align-items: center;
202
+ gap: 16px;
203
+ background: var(--bio-controls-bg);
204
+ backdrop-filter: blur(20px);
205
+ -webkit-backdrop-filter: blur(20px);
206
+ border: 1px solid var(--bio-border-glass);
207
+ padding: 12px 16px;
208
+ border-radius: var(--bio-radius);
209
+ box-shadow: var(--bio-shadow-md);
210
+ flex-wrap: wrap;
211
+ }
212
+
213
+ /* Search */
214
+ .bio-search {
215
+ flex: 1;
216
+ min-width: 200px;
217
+ position: relative;
218
+ }
219
+ .bio-search > i {
220
+ position: absolute;
221
+ left: 20px;
222
+ top: 50%;
223
+ transform: translateY(-50%);
224
+ color: var(--bio-text-mut);
225
+ font-size: 16px;
226
+ z-index: 2;
227
+ transition: color 0.3s ease;
228
+ }
229
+ .bio-search input {
230
+ width: 100%;
231
+ height: 48px;
232
+ padding: 0 20px 0 48px;
233
+ border: 2px solid transparent;
234
+ background: var(--bio-input-bg);
235
+ border-radius: var(--bio-radius-sm);
236
+ font-size: 15px;
237
+ font-weight: 500;
238
+ color: var(--bio-text-main);
239
+ outline: none;
240
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
241
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.02);
242
+ box-sizing: border-box;
243
+ }
244
+ .bio-search input::placeholder { color: var(--bio-text-mut); }
245
+ .bio-search input:focus {
246
+ background: var(--bio-input-focus-bg);
247
+ border-color: var(--bio-primary);
248
+ box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.1);
249
+ }
250
+ .bio-search input:focus ~ i { color: var(--bio-primary); }
251
+
252
+ /* Filters */
253
+ .bio-filters {
254
+ display: flex;
255
+ gap: 8px;
256
+ flex-wrap: nowrap;
257
+ overflow-x: auto;
258
+ -webkit-overflow-scrolling: touch;
259
+ scrollbar-width: none;
260
+ padding: 4px 0;
261
+ }
262
+ .bio-filters::-webkit-scrollbar { display: none; }
263
+ .bio-chip {
264
+ display: inline-flex;
265
+ align-items: center;
266
+ gap: 6px;
267
+ padding: 10px 20px;
268
+ border-radius: 100px;
269
+ border: 1px solid var(--bio-border);
270
+ background: var(--bio-chip-bg);
271
+ color: var(--bio-text-mut);
272
+ font-size: 14px;
273
+ font-weight: 600;
274
+ cursor: pointer;
275
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
276
+ white-space: nowrap;
277
+ box-shadow: var(--bio-shadow-sm);
278
+ -webkit-tap-highlight-color: transparent;
279
+ }
280
+ .bio-chip i { font-size: 13px; }
281
+ .bio-chip:hover {
282
+ border-color: var(--bio-border);
283
+ background: var(--bio-chip-hover-bg);
284
+ color: var(--bio-text-main);
285
+ }
286
+ .bio-chip.active {
287
+ background: var(--bio-chip-active-bg);
288
+ color: var(--bio-chip-active-color);
289
+ border-color: var(--bio-chip-active-bg);
290
+ box-shadow: 0 8px 16px rgba(15, 23, 42, 0.15);
291
+ }
292
+
293
+ /* Sort */
294
+ .bio-sort {
295
+ position: relative;
296
+ min-width: 160px;
297
+ }
298
+ .bio-sort-icon {
299
+ position: absolute;
300
+ left: 16px;
301
+ top: 50%;
302
+ transform: translateY(-50%);
303
+ color: var(--bio-text-mut);
304
+ pointer-events: none;
305
+ z-index: 2;
306
+ }
307
+ .bio-sort select {
308
+ width: 100%;
309
+ height: 48px;
310
+ padding: 0 40px 0 44px;
311
+ border: 1px solid var(--bio-border);
312
+ border-radius: var(--bio-radius-sm);
313
+ background: var(--bio-select-bg);
314
+ color: var(--bio-text-main);
315
+ font-size: 14px;
316
+ font-weight: 600;
317
+ cursor: pointer;
318
+ outline: none;
319
+ appearance: none;
320
+ -webkit-appearance: none;
321
+ transition: all 0.3s ease;
322
+ box-shadow: var(--bio-shadow-sm);
323
+ box-sizing: border-box;
324
+ }
325
+ .bio-sort::after {
326
+ content: '\f107';
327
+ font-family: 'FontAwesome';
328
+ position: absolute;
329
+ right: 16px;
330
+ top: 50%;
331
+ transform: translateY(-50%);
332
+ color: var(--bio-text-mut);
333
+ pointer-events: none;
334
+ }
335
+ .bio-sort select:focus {
336
+ border-color: var(--bio-primary);
337
+ box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.1);
338
+ }
339
+
340
+ /* ---------- Grid ---------- */
341
+ .bio-grid {
342
+ display: grid;
343
+ grid-template-columns: repeat(3, 1fr);
344
+ gap: 24px;
345
+ }
346
+
347
+ /* ---------- Premium Card ---------- */
348
+ a.bio-card {
349
+ background: var(--bio-card-bg);
350
+ backdrop-filter: blur(10px);
351
+ -webkit-backdrop-filter: blur(10px);
352
+ border-radius: var(--bio-radius);
353
+ overflow: hidden;
354
+ border: 1px solid var(--bio-border-glass);
355
+ display: flex;
356
+ flex-direction: column;
357
+ transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275), box-shadow 0.4s ease;
358
+ text-decoration: none !important;
359
+ color: inherit;
360
+ cursor: pointer;
361
+ box-shadow: var(--bio-card-shadow);
362
+ position: relative;
363
+ animation: card-entrance 0.5s backwards;
364
+ }
365
+ a.bio-card:nth-child(3n+2) { animation-delay: 0.08s; }
366
+ a.bio-card:nth-child(3n+3) { animation-delay: 0.16s; }
367
+
368
+ @keyframes card-entrance {
369
+ from { opacity: 0; transform: translateY(30px); }
370
+ to { opacity: 1; transform: translateY(0); }
371
+ }
372
+
373
+ a.bio-card:hover {
374
+ transform: translateY(-8px);
375
+ box-shadow: var(--bio-card-hover-shadow);
376
+ text-decoration: none !important;
377
+ color: inherit;
378
+ }
379
+ a.bio-card.featured {
380
+ border: 2px solid rgba(245, 158, 11, 0.4);
381
+ box-shadow: 0 20px 40px rgba(245, 158, 11, 0.08);
382
+ }
383
+
384
+ /* Card Image Area */
385
+ .bio-card-img {
386
+ position: relative;
387
+ overflow: hidden;
388
+ background: var(--bio-placeholder-bg);
389
+ aspect-ratio: 16 / 10;
390
+ }
391
+ .bio-card-img img {
392
+ width: 100%;
393
+ height: 100%;
394
+ object-fit: cover;
395
+ display: block;
396
+ transition: transform 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
397
+ }
398
+ a.bio-card:hover .bio-card-img img {
399
+ transform: scale(1.06);
400
+ }
401
+ .bio-card-img::after {
402
+ content: '';
403
+ position: absolute;
404
+ top: 0; left: 0; right: 0; bottom: 0;
405
+ background: linear-gradient(to bottom, transparent 50%, rgba(0, 0, 0, 0.6) 100%);
406
+ pointer-events: none;
407
+ opacity: 0.7;
408
+ transition: opacity 0.3s ease;
409
+ }
410
+ a.bio-card:hover .bio-card-img::after {
411
+ opacity: 1;
412
+ }
413
+
414
+ /* Card Image Placeholder */
415
+ .bio-card-ph {
416
+ width: 100%;
417
+ height: 100%;
418
+ display: flex;
419
+ align-items: center;
420
+ justify-content: center;
421
+ background: linear-gradient(135deg, var(--bio-placeholder-bg), var(--bio-border));
422
+ }
423
+ .bio-card-ph i {
424
+ font-size: 48px;
425
+ color: var(--bio-text-mut);
426
+ opacity: 0.3;
427
+ }
428
+
429
+ /* Card Badges */
430
+ .bio-tag {
431
+ position: absolute;
432
+ top: 12px;
433
+ left: 12px;
434
+ padding: 5px 12px;
435
+ border-radius: 100px;
436
+ font-size: 11px;
437
+ font-weight: 800;
438
+ text-transform: uppercase;
439
+ letter-spacing: 0.8px;
440
+ z-index: 2;
441
+ display: inline-flex;
442
+ align-items: center;
443
+ gap: 5px;
444
+ background: var(--bio-tag-bg);
445
+ backdrop-filter: blur(8px);
446
+ -webkit-backdrop-filter: blur(8px);
447
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
448
+ border: 1px solid var(--bio-border-glass);
449
+ }
450
+ .bio-tag-kupon { color: #10b981; }
451
+ .bio-tag-qr { color: var(--bio-primary); }
452
+ .bio-tag-affiliate { color: #f43f5e; }
453
+
454
+ /* Star */
455
+ .bio-star {
456
+ position: absolute;
457
+ top: 12px;
458
+ right: 12px;
459
+ width: 32px;
460
+ height: 32px;
461
+ background: var(--bio-star-bg);
462
+ backdrop-filter: blur(8px);
463
+ border-radius: 50%;
464
+ display: flex;
465
+ align-items: center;
466
+ justify-content: center;
467
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
468
+ z-index: 2;
469
+ border: 1px solid var(--bio-border-glass);
470
+ }
471
+ .bio-star i { color: #f59e0b; font-size: 14px; }
472
+
473
+ /* Timer */
474
+ .bio-timer {
475
+ position: absolute;
476
+ bottom: 0;
477
+ left: 0;
478
+ right: 0;
479
+ padding: 14px 16px;
480
+ color: #fff;
481
+ font-size: 12px;
482
+ font-weight: 600;
483
+ z-index: 2;
484
+ display: flex;
485
+ align-items: center;
486
+ gap: 6px;
487
+ }
488
+ .bio-timer i { color: #facc15; }
489
+
490
+ /* Card Body */
491
+ .bio-card-body {
492
+ padding: 20px;
493
+ display: flex;
494
+ flex-direction: column;
495
+ flex: 1;
496
+ background: var(--bio-card-body-bg);
497
+ }
498
+ .bio-brand {
499
+ font-size: 11px;
500
+ font-weight: 800;
501
+ color: var(--bio-primary);
502
+ text-transform: uppercase;
503
+ letter-spacing: 1.5px;
504
+ margin-bottom: 6px;
505
+ display: block;
506
+ }
507
+ .bio-card-body h3 {
508
+ font-size: 17px;
509
+ font-weight: 800;
510
+ color: var(--bio-text-main);
511
+ margin: 0 0 8px;
512
+ line-height: 1.35;
513
+ display: -webkit-box;
514
+ -webkit-line-clamp: 2;
515
+ -webkit-box-orient: vertical;
516
+ overflow: hidden;
517
+ }
518
+ .bio-card-body p {
519
+ font-size: 13px;
520
+ color: var(--bio-text-mut);
521
+ margin: 0 0 16px;
522
+ line-height: 1.6;
523
+ display: -webkit-box;
524
+ -webkit-line-clamp: 2;
525
+ -webkit-box-orient: vertical;
526
+ overflow: hidden;
527
+ flex: 1;
528
+ }
529
+
530
+ /* CTA Button */
531
+ .bio-cta {
532
+ display: flex;
533
+ align-items: center;
534
+ justify-content: center;
535
+ gap: 8px;
536
+ width: 100%;
537
+ padding: 12px 20px;
538
+ border-radius: var(--bio-radius-sm);
539
+ background: var(--bio-chip-active-bg);
540
+ color: var(--bio-chip-active-color);
541
+ font-size: 14px;
542
+ font-weight: 700;
543
+ margin-top: auto;
544
+ transition: all 0.3s ease;
545
+ letter-spacing: 0.3px;
546
+ }
547
+ a.bio-card:hover .bio-cta {
548
+ background: var(--bio-primary);
549
+ color: #fff;
550
+ box-shadow: var(--bio-shadow-glow);
551
+ }
552
+ .bio-cta i {
553
+ transition: transform 0.3s ease;
554
+ font-size: 12px;
555
+ }
556
+ a.bio-card:hover .bio-cta i {
557
+ transform: translateX(4px);
558
+ }
559
+
560
+ /* ---------- Skeleton Loading ---------- */
561
+ .bio-skeleton-card {
562
+ background: var(--bio-card-body-bg);
563
+ border-radius: var(--bio-radius);
564
+ border: 1px solid var(--bio-border);
565
+ overflow: hidden;
566
+ display: flex;
567
+ flex-direction: column;
568
+ }
569
+ .bio-shimmer {
570
+ background: var(--bio-skeleton-bg);
571
+ background-image: linear-gradient(
572
+ 90deg,
573
+ rgba(255, 255, 255, 0) 0,
574
+ var(--bio-shimmer-color) 20%,
575
+ var(--bio-shimmer-color) 60%,
576
+ rgba(255, 255, 255, 0)
577
+ );
578
+ background-size: 200% 100%;
579
+ animation: shimmer 1.5s infinite linear;
580
+ }
581
+ .bio-skel-img {
582
+ height: 180px;
583
+ width: 100%;
584
+ }
585
+ .bio-skel-body {
586
+ padding: 20px;
587
+ display: flex;
588
+ flex-direction: column;
589
+ gap: 12px;
590
+ }
591
+ .bio-skel-brand { height: 14px; width: 40%; border-radius: 4px; }
592
+ .bio-skel-title { height: 20px; width: 90%; border-radius: 4px; }
593
+ .bio-skel-desc { height: 14px; width: 100%; border-radius: 4px; }
594
+ .bio-skel-btn { height: 44px; width: 100%; border-radius: var(--bio-radius-sm); margin-top: 8px; }
595
+
596
+ @keyframes shimmer {
597
+ 0% { background-position: -200% 0; }
598
+ 100% { background-position: 200% 0; }
599
+ }
600
+
601
+ /* ---------- Empty State ---------- */
602
+ .bio-state.bio-empty {
603
+ grid-column: 1 / -1;
604
+ text-align: center;
605
+ padding: 80px 20px;
606
+ background: var(--bio-empty-bg);
607
+ backdrop-filter: blur(10px);
608
+ border-radius: var(--bio-radius);
609
+ border: 1px dashed var(--bio-border);
610
+ }
611
+ .bio-state.bio-empty i {
612
+ font-size: 56px;
613
+ color: var(--bio-text-mut);
614
+ opacity: 0.4;
615
+ margin-bottom: 20px;
616
+ display: block;
617
+ }
618
+ .bio-state.bio-empty h3 {
619
+ font-size: 22px;
620
+ font-weight: 800;
621
+ color: var(--bio-text-main);
622
+ margin: 0 0 8px;
623
+ }
624
+ .bio-state.bio-empty p {
625
+ color: var(--bio-text-mut);
626
+ font-size: 15px;
627
+ margin: 0;
628
+ }
629
+
630
+ /* ---------- Pagination ---------- */
631
+ .bio-pager {
632
+ display: flex;
633
+ justify-content: center;
634
+ align-items: center;
635
+ gap: 12px;
636
+ margin-top: 48px;
637
+ }
638
+ .bio-pager-btn {
639
+ width: 48px;
640
+ height: 48px;
641
+ border-radius: 50%;
642
+ border: 1px solid var(--bio-border);
643
+ background: var(--bio-pager-bg);
644
+ color: var(--bio-text-main);
645
+ display: flex;
646
+ align-items: center;
647
+ justify-content: center;
648
+ cursor: pointer;
649
+ transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
650
+ font-size: 15px;
651
+ box-shadow: var(--bio-shadow-sm);
652
+ -webkit-tap-highlight-color: transparent;
653
+ }
654
+ .bio-pager-btn:hover:not(:disabled) {
655
+ background: var(--bio-primary);
656
+ color: #fff;
657
+ border-color: var(--bio-primary);
658
+ transform: scale(1.1);
659
+ box-shadow: var(--bio-shadow-glow);
660
+ }
661
+ .bio-pager-btn:disabled { opacity: 0.35; cursor: not-allowed; box-shadow: none; }
662
+ .bio-page-bubble {
663
+ background: var(--bio-pager-bg);
664
+ padding: 12px 24px;
665
+ border-radius: 100px;
666
+ font-size: 14px;
667
+ font-weight: 800;
668
+ color: var(--bio-text-main);
669
+ box-shadow: var(--bio-shadow-sm);
670
+ border: 1px solid var(--bio-border);
671
+ }
672
+
673
+ /* ---------- Responsive: Tablet ---------- */
674
+ @media (max-width: 1024px) {
675
+ .bio-grid {
676
+ grid-template-columns: repeat(2, 1fr);
677
+ gap: 20px;
678
+ }
679
+ .bio-hero h1 { font-size: 40px; }
680
+ }
681
+
682
+ /* ---------- Responsive: Mobile ---------- */
683
+ @media (max-width: 768px) {
684
+ #biogrenci-firsatlar {
685
+ padding: 0 12px 60px;
686
+ }
687
+ .bio-hero {
688
+ padding: 40px 12px 24px;
689
+ }
690
+ .bio-hero h1 {
691
+ font-size: 32px;
692
+ letter-spacing: -1px;
693
+ }
694
+ .bio-hero p {
695
+ font-size: 15px;
696
+ }
697
+ .bio-badge-premium {
698
+ font-size: 11px;
699
+ padding: 6px 14px;
700
+ margin-bottom: 16px;
701
+ }
702
+ .bio-controls-wrapper {
703
+ top: 56px;
704
+ margin-bottom: 24px;
705
+ padding: 6px 0;
706
+ }
707
+ .bio-controls {
708
+ flex-direction: column;
709
+ padding: 12px;
710
+ gap: 10px;
711
+ border-radius: 16px;
712
+ }
713
+ .bio-search {
714
+ width: 100%;
715
+ min-width: unset;
716
+ }
717
+ .bio-search input {
718
+ height: 44px;
719
+ font-size: 14px;
720
+ padding: 0 16px 0 42px;
721
+ }
722
+ .bio-search > i {
723
+ left: 14px;
724
+ font-size: 14px;
725
+ }
726
+ .bio-filters {
727
+ width: 100%;
728
+ gap: 6px;
729
+ padding: 2px 0;
730
+ }
731
+ .bio-chip {
732
+ padding: 8px 14px;
733
+ font-size: 13px;
734
+ gap: 5px;
735
+ }
736
+ .bio-sort {
737
+ width: 100%;
738
+ min-width: unset;
739
+ }
740
+ .bio-sort select {
741
+ height: 44px;
742
+ font-size: 13px;
743
+ }
744
+ .bio-grid {
745
+ grid-template-columns: repeat(2, 1fr);
746
+ gap: 12px;
747
+ }
748
+ a.bio-card {
749
+ border-radius: 14px;
750
+ }
751
+ a.bio-card:hover {
752
+ transform: translateY(-4px);
753
+ }
754
+ .bio-card-img {
755
+ aspect-ratio: 16 / 10;
756
+ }
757
+ .bio-card-body {
758
+ padding: 14px;
759
+ }
760
+ .bio-card-body h3 {
761
+ font-size: 14px;
762
+ margin: 0 0 6px;
763
+ }
764
+ .bio-card-body p {
765
+ font-size: 12px;
766
+ margin: 0 0 12px;
767
+ -webkit-line-clamp: 2;
768
+ }
769
+ .bio-brand {
770
+ font-size: 10px;
771
+ letter-spacing: 1px;
772
+ margin-bottom: 4px;
773
+ }
774
+ .bio-cta {
775
+ padding: 10px 14px;
776
+ font-size: 13px;
777
+ border-radius: 10px;
778
+ }
779
+ .bio-tag {
780
+ top: 8px;
781
+ left: 8px;
782
+ padding: 4px 8px;
783
+ font-size: 9px;
784
+ letter-spacing: 0.5px;
785
+ gap: 3px;
786
+ }
787
+ .bio-star {
788
+ top: 8px;
789
+ right: 8px;
790
+ width: 26px;
791
+ height: 26px;
792
+ }
793
+ .bio-star i { font-size: 11px; }
794
+ .bio-timer {
795
+ padding: 10px 12px;
796
+ font-size: 11px;
797
+ }
798
+ .bio-skel-img { height: 140px; }
799
+ .bio-skeleton-card {
800
+ border-radius: 14px;
801
+ }
802
+ .bio-skel-body { padding: 14px; gap: 10px; }
803
+ .bio-skel-btn { height: 38px; }
804
+ .bio-pager { margin-top: 32px; gap: 10px; }
805
+ .bio-pager-btn { width: 42px; height: 42px; font-size: 14px; }
806
+ .bio-page-bubble { padding: 10px 18px; font-size: 13px; }
807
+ .bio-state.bio-empty { padding: 60px 16px; }
808
+ .bio-state.bio-empty i { font-size: 40px; }
809
+ .bio-state.bio-empty h3 { font-size: 18px; }
810
+ .bio-state.bio-empty p { font-size: 14px; }
811
+ .bio-aurora { height: 350px; }
812
+ .bio-card-ph i { font-size: 32px; }
813
+ }
814
+
815
+ /* ---------- Responsive: Small Mobile ---------- */
816
+ @media (max-width: 400px) {
817
+ .bio-hero h1 { font-size: 26px; }
818
+ .bio-hero p { font-size: 14px; }
819
+ .bio-grid {
820
+ grid-template-columns: 1fr;
821
+ gap: 12px;
822
+ }
823
+ .bio-card-img {
824
+ aspect-ratio: 16 / 9;
825
+ }
826
+ .bio-card-body h3 { font-size: 15px; }
827
+ .bio-card-body p { font-size: 13px; }
828
+ .bio-cta { font-size: 14px; padding: 12px 16px; }
829
+ }
830
+
831
+ /* ---------- Touch device: disable hover transform ---------- */
832
+ @media (hover: none) {
833
+ a.bio-card:hover {
834
+ transform: none;
835
+ box-shadow: var(--bio-card-shadow);
836
+ }
837
+ a.bio-card:active {
838
+ transform: scale(0.98);
839
+ }
840
+ .bio-chip:hover {
841
+ transform: none;
842
+ }
843
+ }