PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.3
Yatra – Travel Booking & Tour Operator Software v3.0.3
3.0.15 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 All 83 releases
yatra / assets / css / common.css

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

585 lines 14.8 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 }
391
392 .yatra-listing-container,
393 .yatra-booking-container,
394 .yatra-trip-container,
395 .yatra-horizontal-search-container,
396 .yatra-similar-section-container {
397 width: 100%;
398 max-width: var(--yatra-container-max-width, 1300px);
399 margin-left: auto;
400 margin-right: auto;
401 }
402
403 .yatra-traveler-selector .yatra-quantity-controls {
404 gap: 6px;
405 }
406
407 .yatra-traveler-selector .yatra-quantity-btn,
408 .yatra-traveler-selector .yatra-qty-btn {
409 width: 32px;
410 height: 32px;
411 min-width: 32px;
412 border-radius: 10px;
413 border: 1px solid #e5e7eb;
414 background: #ffffff;
415 color: #0f172a;
416 display: inline-flex;
417 align-items: center;
418 justify-content: center;
419 box-shadow: 0 1px 2px rgba(0,0,0,0.05);
420 transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;
421 }
422
423 .yatra-traveler-selector .yatra-quantity-btn:hover:not(:disabled),
424 .yatra-traveler-selector .yatra-qty-btn:hover:not(:disabled) {
425 background: #f8fafc;
426 border-color: #cbd5e1;
427 transform: translateY(-1px);
428 box-shadow: 0 6px 16px rgba(15, 23, 42, 0.08);
429 }
430
431 .yatra-traveler-selector .yatra-quantity-btn:active:not(:disabled),
432 .yatra-traveler-selector .yatra-qty-btn:active:not(:disabled) {
433 transform: translateY(0);
434 box-shadow: 0 2px 6px rgba(15, 23, 42, 0.10);
435 }
436
437 .yatra-traveler-selector .yatra-quantity-btn:disabled,
438 .yatra-traveler-selector .yatra-qty-btn:disabled {
439 opacity: 0.45;
440 cursor: not-allowed;
441 transform: none;
442 box-shadow: none;
443 }
444
445 .yatra-traveler-selector .yatra-quantity-btn svg,
446 .yatra-traveler-selector .yatra-qty-btn svg {
447 width: 16px;
448 height: 16px;
449 stroke-width: 2.25;
450 }
451
452 /* Quick facts: single-trip layout lives in trip.css (hairline grid, neutral icons). */
453
454 /* ============================================
455 STICKY NAVIGATION - Single Trip Page
456 ============================================ */
457 .yatra-sticky-nav-price {
458 display: flex;
459 flex-direction: column;
460 align-items: flex-end;
461 gap: 2px;
462 padding: 8px 16px;
463 margin-left: auto;
464 min-width: 140px;
465 text-align: right;
466 }
467
468 .yatra-sticky-nav-price-label {
469 font-size: 10px;
470 font-weight: 600;
471 text-transform: uppercase;
472 letter-spacing: 0.5px;
473 color: var(--yatra-text-muted);
474 line-height: 1.2;
475 }
476
477 .yatra-sticky-nav-price-amount {
478 display: flex;
479 align-items: center;
480 gap: 4px;
481 font-size: 18px;
482 font-weight: 700;
483 color: var(--yatra-primary);
484 line-height: 1.2;
485 }
486
487 .yatra-sticky-nav-price-amount svg {
488 width: 16px;
489 height: 16px;
490 flex-shrink: 0;
491 }
492
493 .yatra-sticky-nav-price-note {
494 font-size: 10px;
495 font-weight: 400;
496 color: var(--yatra-text-muted);
497 line-height: 1.2;
498 }
499
500 @media (max-width: 768px) {
501 .yatra-sticky-nav-price {
502 min-width: 120px;
503 padding: 6px 12px;
504 }
505
506 .yatra-sticky-nav-price-amount {
507 font-size: 16px;
508 }
509 }
510
511 /* ============================================
512 SHORTCODES & BLOCK FRONTEND — content width
513 (--yatra-container-max-width from :root; theme.json / $content_width via PHP when set)
514 ============================================ */
515 .yatra-tour-shortcode,
516 .yatra-destination-shortcode,
517 .yatra-activity-shortcode,
518 .yatra-discount-shortcode,
519 .yatra-search-shortcode,
520 .yatra-login-shortcode,
521 .yatra-my-account-login {
522 width: 100%;
523 max-width: var(--yatra-container-max-width, 1300px);
524 margin-left: auto;
525 margin-right: auto;
526 padding-left: var(--yatra-container-padding);
527 padding-right: var(--yatra-container-padding);
528 box-sizing: border-box;
529 }
530
531 /* React account (standalone route + [yatra_my_account]): inner grid uses horizontal padding; width only here */
532 .yatra-account-react-root {
533 width: 100%;
534 max-width: var(--yatra-container-max-width, 1300px);
535 margin-left: auto;
536 margin-right: auto;
537 box-sizing: border-box;
538 }
539
540 /* ============================================
541 LEGACY ARCHIVE — .yatra-page-wrapper pagination
542 ============================================ */
543 .yatra-page-wrapper .pagination a.page-numbers,
544 .yatra-page-wrapper .pagination span.page-numbers {
545 border-color: var(--yatra-border-color, #e5e7eb);
546 color: var(--yatra-text-primary, #374151);
547 text-decoration: none;
548 }
549
550 .yatra-page-wrapper .pagination a.page-numbers:hover,
551 .yatra-page-wrapper .pagination span.page-numbers.current {
552 border-color: var(--yatra-primary, #3b82f6);
553 background: var(--yatra-primary, #3b82f6);
554 color: #fff;
555 }
556
557 .yatra-page-wrapper .pagination a.page-numbers:hover {
558 background: var(--yatra-primary-dark, #2563eb);
559 border-color: var(--yatra-primary-dark, #2563eb);
560 }
561
562 /* Paginate links (templates/parts/pagination.php — nav.yatra-pagination) */
563 .yatra-pagination-wrap nav .page-numbers,
564 nav.yatra-pagination .page-numbers {
565 border-color: var(--yatra-border-color, #e5e7eb);
566 color: var(--yatra-text-primary, #374151);
567 text-decoration: none;
568 }
569
570 .yatra-pagination-wrap nav a.page-numbers:hover,
571 nav.yatra-pagination a.page-numbers:hover,
572 .yatra-pagination-wrap nav span.page-numbers.current,
573 nav.yatra-pagination span.page-numbers.current {
574 border-color: var(--yatra-primary, #3b82f6);
575 background: var(--yatra-primary, #3b82f6);
576 color: #fff;
577 }
578
579 .yatra-pagination-wrap nav a.page-numbers:hover,
580 nav.yatra-pagination a.page-numbers:hover {
581 background: var(--yatra-primary-dark, #2563eb);
582 border-color: var(--yatra-primary-dark, #2563eb);
583 }
584
585