PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.10
Yatra – Travel Booking & Tour Operator Software v3.0.10
3.0.14 3.0.14.1 3.0.14.2 3.0.12 3.0.13 3.0.11 3.0.10 3.0.9 3.0.8 3.0.7 3.0.6 3.0.5 3.0.5.1 3.0.4 3.0.3 3.0.2.9 3.0.2.7 3.0.2.8 3.0.2.6 trunk 1.0.0 2.0.0 2.0.1 2.0.10 2.0.11 All 82 releases
yatra / assets / css / common.css

common.css in Yatra – Travel Booking & Tour Operator Software 3.0.10, at assets/css/common.css

588 lines 14.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Yatra Common Styles
3 * Base styles and wrapper system for all Yatra pages
4 *
5 * Design System:
6 * - Max content width: 1200px
7 * - Side padding: 20px (mobile) / 24px (tablet) / 32px (desktop)
8 * - Page background: #f9fafb
9 *
10 * @package Yatra
11 */
12
13 /* ============================================
14 CSS VARIABLES (Design Tokens)
15 ============================================ */
16 :root {
17 /* Layout */
18 --yatra-container-max-width: 1300px;
19 --yatra-container-padding: 20px;
20 --yatra-container-padding-md: 24px;
21 --yatra-container-padding-lg: 32px;
22
23 /* Colors */
24 --yatra-bg-page: #f9fafb;
25 --yatra-bg-white: #ffffff;
26 --yatra-bg-gray-50: #f9fafb;
27 --yatra-bg-gray-100: #f3f4f6;
28
29 --yatra-text-primary: #1f2937;
30 --yatra-text-secondary: #4b5563;
31 --yatra-text-muted: #6b7280;
32 --yatra-text-light: #9ca3af;
33
34 --yatra-border-color: #e5e7eb;
35 --yatra-border-light: #f3f4f6;
36
37 --yatra-primary: #3b82f6;
38 --yatra-primary-dark: #2563eb;
39 --yatra-primary-light: #60a5fa;
40 --yatra-primary-darker: #1e40af;
41 --yatra-primary-color: var(--yatra-primary);
42 --yatra-primary-light-soft: #eff6ff;
43 --yatra-primary-color-dark: #60a5fa;
44 --yatra-primary-light-dark: #1e3a8a;
45
46 --yatra-success: #10b981;
47 --yatra-warning: #f59e0b;
48 --yatra-error: #ef4444;
49 --yatra-star: #fbbf24;
50
51 /* Shadows */
52 --yatra-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
53 --yatra-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
54 --yatra-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
55 --yatra-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
56
57 /* Border Radius */
58 --yatra-radius-sm: 6px;
59 --yatra-radius: 8px;
60 --yatra-radius-md: 12px;
61 --yatra-radius-lg: 16px;
62 --yatra-radius-xl: 24px;
63
64 /* Spacing */
65 --yatra-space-xs: 4px;
66 --yatra-space-sm: 8px;
67 --yatra-space-md: 16px;
68 --yatra-space-lg: 24px;
69 --yatra-space-xl: 32px;
70 --yatra-space-2xl: 48px;
71
72 /* Typography */
73 --yatra-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
74 --yatra-font-size-xs: 12px;
75 --yatra-font-size-sm: 13px;
76 --yatra-font-size-base: 15px;
77 --yatra-font-size-md: 16px;
78 --yatra-font-size-lg: 18px;
79 --yatra-font-size-xl: 20px;
80 --yatra-font-size-2xl: 24px;
81 --yatra-font-size-3xl: 30px;
82 --yatra-font-size-4xl: 36px;
83 }
84
85 /* ============================================
86 BASE PAGE WRAPPER
87 ============================================ */
88 .yatra-page {
89 width: 100%;
90 min-height: 100vh;
91 background: var(--yatra-bg-page);
92 font-family: var(--yatra-font-family);
93 color: var(--yatra-text-primary);
94 line-height: 1.6;
95 -webkit-font-smoothing: antialiased;
96 -moz-osx-font-smoothing: grayscale;
97 }
98
99 /* ============================================
100 CONTAINER SYSTEM
101 ============================================ */
102 .yatra-container {
103 width: 100%;
104 max-width: var(--yatra-container-max-width);
105 margin-left: auto;
106 margin-right: auto;
107 padding-left: var(--yatra-container-padding);
108 padding-right: var(--yatra-container-padding);
109 }
110
111 /* Full-width container with max-width inner content */
112 .yatra-container-fluid {
113 width: 100%;
114 padding-left: var(--yatra-container-padding);
115 padding-right: var(--yatra-container-padding);
116 }
117
118 .yatra-container-fluid > .yatra-container-inner {
119 max-width: var(--yatra-container-max-width);
120 margin-left: auto;
121 margin-right: auto;
122 }
123
124 /* Narrow container for content-focused pages */
125 .yatra-container-narrow {
126 max-width: 900px;
127 }
128
129 /* Wide container for dashboard/admin pages */
130 .yatra-container-wide {
131 max-width: 1400px;
132 }
133
134 /* ============================================
135 SECTION SYSTEM
136 ============================================ */
137 .yatra-section {
138 padding-top: var(--yatra-space-xl);
139 padding-bottom: var(--yatra-space-xl);
140 }
141
142 .yatra-section-sm {
143 padding-top: var(--yatra-space-lg);
144 padding-bottom: var(--yatra-space-lg);
145 }
146
147 .yatra-section-lg {
148 padding-top: var(--yatra-space-2xl);
149 padding-bottom: var(--yatra-space-2xl);
150 }
151
152 /* ============================================
153 PAGE HEADER
154 ============================================ */
155 .yatra-page-header {
156 background: var(--yatra-bg-white);
157 border-bottom: 1px solid var(--yatra-border-color);
158 padding: var(--yatra-space-lg) 0;
159 }
160
161 .yatra-page-title {
162 font-size: var(--yatra-font-size-3xl);
163 font-weight: 700;
164 color: var(--yatra-text-primary);
165 margin: 0 0 var(--yatra-space-sm) 0;
166 }
167
168 .yatra-page-subtitle {
169 font-size: var(--yatra-font-size-base);
170 color: var(--yatra-text-muted);
171 margin: 0;
172 }
173
174 /* ============================================
175 CONTENT AREA
176 ============================================ */
177 .yatra-content {
178 padding: var(--yatra-space-lg) 0;
179 }
180
181 /* Two-column layout with sidebar */
182 .yatra-content-with-sidebar {
183 display: grid;
184 grid-template-columns: 1fr 320px;
185 gap: var(--yatra-space-xl);
186 }
187
188 .yatra-content-main {
189 min-width: 0;
190 }
191
192 .yatra-content-sidebar {
193 position: relative;
194 }
195
196 .yatra-sidebar-sticky {
197 position: sticky;
198 top: 100px;
199 }
200
201 /* Reversed layout (sidebar on left) */
202 .yatra-content-with-sidebar.yatra-sidebar-left {
203 grid-template-columns: 280px 1fr;
204 }
205
206 /* ============================================
207 CARD SYSTEM
208 ============================================ */
209 .yatra-card {
210 background: var(--yatra-bg-white);
211 border-radius: var(--yatra-radius-md);
212 box-shadow: var(--yatra-shadow);
213 overflow: hidden;
214 }
215
216 .yatra-card-bordered {
217 box-shadow: none;
218 border: 1px solid var(--yatra-border-color);
219 }
220
221 .yatra-card-header {
222 padding: var(--yatra-space-lg);
223 border-bottom: 1px solid var(--yatra-border-color);
224 }
225
226 .yatra-card-body {
227 padding: var(--yatra-space-lg);
228 }
229
230 .yatra-card-footer {
231 padding: var(--yatra-space-lg);
232 border-top: 1px solid var(--yatra-border-color);
233 background: var(--yatra-bg-gray-50);
234 }
235
236 /* ============================================
237 GRID SYSTEM
238 ============================================ */
239 .yatra-grid {
240 display: grid;
241 gap: var(--yatra-space-lg);
242 }
243
244 .yatra-grid-2 {
245 grid-template-columns: repeat(2, 1fr);
246 }
247
248 .yatra-grid-3 {
249 grid-template-columns: repeat(3, 1fr);
250 }
251
252 .yatra-grid-4 {
253 grid-template-columns: repeat(4, 1fr);
254 }
255
256 .yatra-grid-auto {
257 grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
258 }
259
260 /* ============================================
261 RESPONSIVE BREAKPOINTS
262 ============================================ */
263 @media (min-width: 640px) {
264 :root {
265 --yatra-container-padding: var(--yatra-container-padding-md);
266 }
267 }
268
269 @media (min-width: 1024px) {
270 :root {
271 --yatra-container-padding: var(--yatra-container-padding-lg);
272 }
273 }
274
275 @media (max-width: 1024px) {
276 .yatra-content-with-sidebar {
277 grid-template-columns: 1fr;
278 }
279
280 .yatra-content-with-sidebar.yatra-sidebar-left {
281 grid-template-columns: 1fr;
282 }
283
284 .yatra-content-sidebar {
285 order: -1;
286 }
287
288 .yatra-grid-4 {
289 grid-template-columns: repeat(3, 1fr);
290 }
291 }
292
293 @media (max-width: 768px) {
294 .yatra-grid-3,
295 .yatra-grid-4 {
296 grid-template-columns: repeat(2, 1fr);
297 }
298
299 .yatra-page-title {
300 font-size: var(--yatra-font-size-2xl);
301 }
302 }
303
304 @media (max-width: 480px) {
305 .yatra-grid-2,
306 .yatra-grid-3,
307 .yatra-grid-4 {
308 grid-template-columns: 1fr;
309 }
310 }
311
312 /* ============================================
313 UTILITY CLASSES
314 ============================================ */
315 .yatra-text-center { text-align: center; }
316 .yatra-text-left { text-align: left; }
317 .yatra-text-right { text-align: right; }
318
319 .yatra-mb-0 { margin-bottom: 0; }
320 .yatra-mb-sm { margin-bottom: var(--yatra-space-sm); }
321 .yatra-mb-md { margin-bottom: var(--yatra-space-md); }
322 .yatra-mb-lg { margin-bottom: var(--yatra-space-lg); }
323 .yatra-mb-xl { margin-bottom: var(--yatra-space-xl); }
324
325 .yatra-mt-0 { margin-top: 0; }
326 .yatra-mt-sm { margin-top: var(--yatra-space-sm); }
327 .yatra-mt-md { margin-top: var(--yatra-space-md); }
328 .yatra-mt-lg { margin-top: var(--yatra-space-lg); }
329 .yatra-mt-xl { margin-top: var(--yatra-space-xl); }
330
331 .yatra-hidden { display: none !important; }
332 .yatra-visible { display: block !important; }
333
334 /* ============================================
335 LOADING STATES
336 ============================================ */
337 .yatra-loading {
338 position: relative;
339 pointer-events: none;
340 }
341
342 .yatra-loading::after {
343 content: '';
344 position: absolute;
345 top: 50%;
346 left: 50%;
347 width: 24px;
348 height: 24px;
349 margin: -12px 0 0 -12px;
350 border: 2px solid var(--yatra-border-color);
351 border-top-color: var(--yatra-primary);
352 border-radius: 50%;
353 animation: yatra-spin 0.8s linear infinite;
354 }
355
356 /**
357 * Shared rotate animation (loading dots, shortcode overlays, trip/booking/stripe spinners).
358 * Defined once here so front-end bundles do not redefine the same name.
359 */
360 @keyframes yatra-spin {
361 to {
362 transform: rotate(360deg);
363 }
364 }
365
366 /**
367 * Skeleton / card loading sheen (shortcode listing placeholders).
368 */
369 @keyframes yatra-shimmer {
370 0% {
371 left: -100%;
372 }
373 100% {
374 left: 100%;
375 }
376 }
377
378 /* ============================================
379 LEGACY COMPATIBILITY
380 Keep old class names working while transitioning
381 ============================================ */
382 .yatra-booking-page {
383 width: 100%;
384 min-height: 100vh;
385 }
386
387 .yatra-single-trip {
388 width: 100%;
389 min-height: 100vh;
390 max-width: var(--yatra-container-max-width, 1300px)!important;
391 margin-left: auto;
392 margin-right: auto;
393 }
394
395 .yatra-listing-container,
396 .yatra-booking-container,
397 .yatra-trip-container,
398 .yatra-horizontal-search-container,
399 .yatra-similar-section-container {
400 width: 100%;
401 max-width: var(--yatra-container-max-width, 1300px);
402 margin-left: auto;
403 margin-right: auto;
404 }
405
406 .yatra-traveler-selector .yatra-quantity-controls {
407 gap: 6px;
408 }
409
410 .yatra-traveler-selector .yatra-quantity-btn,
411 .yatra-traveler-selector .yatra-qty-btn {
412 width: 32px;
413 height: 32px;
414 min-width: 32px;
415 border-radius: 10px;
416 border: 1px solid #e5e7eb;
417 background: #ffffff;
418 color: #0f172a;
419 display: inline-flex;
420 align-items: center;
421 justify-content: center;
422 box-shadow: 0 1px 2px rgba(0,0,0,0.05);
423 transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;
424 }
425
426 .yatra-traveler-selector .yatra-quantity-btn:hover:not(:disabled),
427 .yatra-traveler-selector .yatra-qty-btn:hover:not(:disabled) {
428 background: #f8fafc;
429 border-color: #cbd5e1;
430 transform: translateY(-1px);
431 box-shadow: 0 6px 16px rgba(15, 23, 42, 0.08);
432 }
433
434 .yatra-traveler-selector .yatra-quantity-btn:active:not(:disabled),
435 .yatra-traveler-selector .yatra-qty-btn:active:not(:disabled) {
436 transform: translateY(0);
437 box-shadow: 0 2px 6px rgba(15, 23, 42, 0.10);
438 }
439
440 .yatra-traveler-selector .yatra-quantity-btn:disabled,
441 .yatra-traveler-selector .yatra-qty-btn:disabled {
442 opacity: 0.45;
443 cursor: not-allowed;
444 transform: none;
445 box-shadow: none;
446 }
447
448 .yatra-traveler-selector .yatra-quantity-btn svg,
449 .yatra-traveler-selector .yatra-qty-btn svg {
450 width: 16px;
451 height: 16px;
452 stroke-width: 2.25;
453 }
454
455 /* Quick facts: single-trip layout lives in trip.css (hairline grid, neutral icons). */
456
457 /* ============================================
458 STICKY NAVIGATION - Single Trip Page
459 ============================================ */
460 .yatra-sticky-nav-price {
461 display: flex;
462 flex-direction: column;
463 align-items: flex-end;
464 gap: 2px;
465 padding: 8px 16px;
466 margin-left: auto;
467 min-width: 140px;
468 text-align: right;
469 }
470
471 .yatra-sticky-nav-price-label {
472 font-size: 10px;
473 font-weight: 600;
474 text-transform: uppercase;
475 letter-spacing: 0.5px;
476 color: var(--yatra-text-muted);
477 line-height: 1.2;
478 }
479
480 .yatra-sticky-nav-price-amount {
481 display: flex;
482 align-items: center;
483 gap: 4px;
484 font-size: 18px;
485 font-weight: 700;
486 color: var(--yatra-primary);
487 line-height: 1.2;
488 }
489
490 .yatra-sticky-nav-price-amount svg {
491 width: 16px;
492 height: 16px;
493 flex-shrink: 0;
494 }
495
496 .yatra-sticky-nav-price-note {
497 font-size: 10px;
498 font-weight: 400;
499 color: var(--yatra-text-muted);
500 line-height: 1.2;
501 }
502
503 @media (max-width: 768px) {
504 .yatra-sticky-nav-price {
505 min-width: 120px;
506 padding: 6px 12px;
507 }
508
509 .yatra-sticky-nav-price-amount {
510 font-size: 16px;
511 }
512 }
513
514 /* ============================================
515 SHORTCODES & BLOCK FRONTEND — content width
516 (--yatra-container-max-width from :root; theme.json / $content_width via PHP when set)
517 ============================================ */
518 .yatra-tour-shortcode,
519 .yatra-destination-shortcode,
520 .yatra-activity-shortcode,
521 .yatra-discount-shortcode,
522 .yatra-search-shortcode,
523 .yatra-login-shortcode,
524 .yatra-my-account-login {
525 width: 100%;
526 max-width: var(--yatra-container-max-width, 1300px);
527 margin-left: auto;
528 margin-right: auto;
529 padding-left: var(--yatra-container-padding);
530 padding-right: var(--yatra-container-padding);
531 box-sizing: border-box;
532 }
533
534 /* React account (standalone route + [yatra_my_account]): inner grid uses horizontal padding; width only here */
535 .yatra-account-react-root {
536 width: 100%;
537 max-width: var(--yatra-container-max-width, 1300px);
538 margin-left: auto;
539 margin-right: auto;
540 box-sizing: border-box;
541 }
542
543 /* ============================================
544 LEGACY ARCHIVE — .yatra-page-wrapper pagination
545 ============================================ */
546 .yatra-page-wrapper .pagination a.page-numbers,
547 .yatra-page-wrapper .pagination span.page-numbers {
548 border-color: var(--yatra-border-color, #e5e7eb);
549 color: var(--yatra-text-primary, #374151);
550 text-decoration: none;
551 }
552
553 .yatra-page-wrapper .pagination a.page-numbers:hover,
554 .yatra-page-wrapper .pagination span.page-numbers.current {
555 border-color: var(--yatra-primary, #3b82f6);
556 background: var(--yatra-primary, #3b82f6);
557 color: #fff;
558 }
559
560 .yatra-page-wrapper .pagination a.page-numbers:hover {
561 background: var(--yatra-primary-dark, #2563eb);
562 border-color: var(--yatra-primary-dark, #2563eb);
563 }
564
565 /* Paginate links (templates/parts/pagination.php — nav.yatra-pagination) */
566 .yatra-pagination-wrap nav .page-numbers,
567 nav.yatra-pagination .page-numbers {
568 border-color: var(--yatra-border-color, #e5e7eb);
569 color: var(--yatra-text-primary, #374151);
570 text-decoration: none;
571 }
572
573 .yatra-pagination-wrap nav a.page-numbers:hover,
574 nav.yatra-pagination a.page-numbers:hover,
575 .yatra-pagination-wrap nav span.page-numbers.current,
576 nav.yatra-pagination span.page-numbers.current {
577 border-color: var(--yatra-primary, #3b82f6);
578 background: var(--yatra-primary, #3b82f6);
579 color: #fff;
580 }
581
582 .yatra-pagination-wrap nav a.page-numbers:hover,
583 nav.yatra-pagination a.page-numbers:hover {
584 background: var(--yatra-primary-dark, #2563eb);
585 border-color: var(--yatra-primary-dark, #2563eb);
586 }
587
588