PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.2.8
Yatra – Travel Booking & Tour Operator Software v3.0.2.8
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.2.8, at assets/css/common.css

488 lines 11.7 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
41 --yatra-success: #10b981;
42 --yatra-warning: #f59e0b;
43 --yatra-error: #ef4444;
44 --yatra-star: #fbbf24;
45
46 /* Shadows */
47 --yatra-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
48 --yatra-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
49 --yatra-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
50 --yatra-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
51
52 /* Border Radius */
53 --yatra-radius-sm: 6px;
54 --yatra-radius: 8px;
55 --yatra-radius-md: 12px;
56 --yatra-radius-lg: 16px;
57 --yatra-radius-xl: 24px;
58
59 /* Spacing */
60 --yatra-space-xs: 4px;
61 --yatra-space-sm: 8px;
62 --yatra-space-md: 16px;
63 --yatra-space-lg: 24px;
64 --yatra-space-xl: 32px;
65 --yatra-space-2xl: 48px;
66
67 /* Typography */
68 --yatra-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
69 --yatra-font-size-xs: 12px;
70 --yatra-font-size-sm: 13px;
71 --yatra-font-size-base: 15px;
72 --yatra-font-size-md: 16px;
73 --yatra-font-size-lg: 18px;
74 --yatra-font-size-xl: 20px;
75 --yatra-font-size-2xl: 24px;
76 --yatra-font-size-3xl: 30px;
77 --yatra-font-size-4xl: 36px;
78 }
79
80 /* ============================================
81 BASE PAGE WRAPPER
82 ============================================ */
83 .yatra-page {
84 width: 100%;
85 min-height: 100vh;
86 background: var(--yatra-bg-page);
87 font-family: var(--yatra-font-family);
88 color: var(--yatra-text-primary);
89 line-height: 1.6;
90 -webkit-font-smoothing: antialiased;
91 -moz-osx-font-smoothing: grayscale;
92 }
93
94 /* ============================================
95 CONTAINER SYSTEM
96 ============================================ */
97 .yatra-container {
98 width: 100%;
99 max-width: var(--yatra-container-max-width);
100 margin-left: auto;
101 margin-right: auto;
102 padding-left: var(--yatra-container-padding);
103 padding-right: var(--yatra-container-padding);
104 }
105
106 /* Full-width container with max-width inner content */
107 .yatra-container-fluid {
108 width: 100%;
109 padding-left: var(--yatra-container-padding);
110 padding-right: var(--yatra-container-padding);
111 }
112
113 .yatra-container-fluid > .yatra-container-inner {
114 max-width: var(--yatra-container-max-width);
115 margin-left: auto;
116 margin-right: auto;
117 }
118
119 /* Narrow container for content-focused pages */
120 .yatra-container-narrow {
121 max-width: 900px;
122 }
123
124 /* Wide container for dashboard/admin pages */
125 .yatra-container-wide {
126 max-width: 1400px;
127 }
128
129 /* ============================================
130 SECTION SYSTEM
131 ============================================ */
132 .yatra-section {
133 padding-top: var(--yatra-space-xl);
134 padding-bottom: var(--yatra-space-xl);
135 }
136
137 .yatra-section-sm {
138 padding-top: var(--yatra-space-lg);
139 padding-bottom: var(--yatra-space-lg);
140 }
141
142 .yatra-section-lg {
143 padding-top: var(--yatra-space-2xl);
144 padding-bottom: var(--yatra-space-2xl);
145 }
146
147 /* ============================================
148 PAGE HEADER
149 ============================================ */
150 .yatra-page-header {
151 background: var(--yatra-bg-white);
152 border-bottom: 1px solid var(--yatra-border-color);
153 padding: var(--yatra-space-lg) 0;
154 }
155
156 .yatra-page-title {
157 font-size: var(--yatra-font-size-3xl);
158 font-weight: 700;
159 color: var(--yatra-text-primary);
160 margin: 0 0 var(--yatra-space-sm) 0;
161 }
162
163 .yatra-page-subtitle {
164 font-size: var(--yatra-font-size-base);
165 color: var(--yatra-text-muted);
166 margin: 0;
167 }
168
169 /* ============================================
170 CONTENT AREA
171 ============================================ */
172 .yatra-content {
173 padding: var(--yatra-space-lg) 0;
174 }
175
176 /* Two-column layout with sidebar */
177 .yatra-content-with-sidebar {
178 display: grid;
179 grid-template-columns: 1fr 320px;
180 gap: var(--yatra-space-xl);
181 }
182
183 .yatra-content-main {
184 min-width: 0;
185 }
186
187 .yatra-content-sidebar {
188 position: relative;
189 }
190
191 .yatra-sidebar-sticky {
192 position: sticky;
193 top: 100px;
194 }
195
196 /* Reversed layout (sidebar on left) */
197 .yatra-content-with-sidebar.yatra-sidebar-left {
198 grid-template-columns: 280px 1fr;
199 }
200
201 /* ============================================
202 CARD SYSTEM
203 ============================================ */
204 .yatra-card {
205 background: var(--yatra-bg-white);
206 border-radius: var(--yatra-radius-md);
207 box-shadow: var(--yatra-shadow);
208 overflow: hidden;
209 }
210
211 .yatra-card-bordered {
212 box-shadow: none;
213 border: 1px solid var(--yatra-border-color);
214 }
215
216 .yatra-card-header {
217 padding: var(--yatra-space-lg);
218 border-bottom: 1px solid var(--yatra-border-color);
219 }
220
221 .yatra-card-body {
222 padding: var(--yatra-space-lg);
223 }
224
225 .yatra-card-footer {
226 padding: var(--yatra-space-lg);
227 border-top: 1px solid var(--yatra-border-color);
228 background: var(--yatra-bg-gray-50);
229 }
230
231 /* ============================================
232 GRID SYSTEM
233 ============================================ */
234 .yatra-grid {
235 display: grid;
236 gap: var(--yatra-space-lg);
237 }
238
239 .yatra-grid-2 {
240 grid-template-columns: repeat(2, 1fr);
241 }
242
243 .yatra-grid-3 {
244 grid-template-columns: repeat(3, 1fr);
245 }
246
247 .yatra-grid-4 {
248 grid-template-columns: repeat(4, 1fr);
249 }
250
251 .yatra-grid-auto {
252 grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
253 }
254
255 /* ============================================
256 RESPONSIVE BREAKPOINTS
257 ============================================ */
258 @media (min-width: 640px) {
259 :root {
260 --yatra-container-padding: var(--yatra-container-padding-md);
261 }
262 }
263
264 @media (min-width: 1024px) {
265 :root {
266 --yatra-container-padding: var(--yatra-container-padding-lg);
267 }
268 }
269
270 @media (max-width: 1024px) {
271 .yatra-content-with-sidebar {
272 grid-template-columns: 1fr;
273 }
274
275 .yatra-content-with-sidebar.yatra-sidebar-left {
276 grid-template-columns: 1fr;
277 }
278
279 .yatra-content-sidebar {
280 order: -1;
281 }
282
283 .yatra-grid-4 {
284 grid-template-columns: repeat(3, 1fr);
285 }
286 }
287
288 @media (max-width: 768px) {
289 .yatra-grid-3,
290 .yatra-grid-4 {
291 grid-template-columns: repeat(2, 1fr);
292 }
293
294 .yatra-page-title {
295 font-size: var(--yatra-font-size-2xl);
296 }
297 }
298
299 @media (max-width: 480px) {
300 .yatra-grid-2,
301 .yatra-grid-3,
302 .yatra-grid-4 {
303 grid-template-columns: 1fr;
304 }
305 }
306
307 /* ============================================
308 UTILITY CLASSES
309 ============================================ */
310 .yatra-text-center { text-align: center; }
311 .yatra-text-left { text-align: left; }
312 .yatra-text-right { text-align: right; }
313
314 .yatra-mb-0 { margin-bottom: 0; }
315 .yatra-mb-sm { margin-bottom: var(--yatra-space-sm); }
316 .yatra-mb-md { margin-bottom: var(--yatra-space-md); }
317 .yatra-mb-lg { margin-bottom: var(--yatra-space-lg); }
318 .yatra-mb-xl { margin-bottom: var(--yatra-space-xl); }
319
320 .yatra-mt-0 { margin-top: 0; }
321 .yatra-mt-sm { margin-top: var(--yatra-space-sm); }
322 .yatra-mt-md { margin-top: var(--yatra-space-md); }
323 .yatra-mt-lg { margin-top: var(--yatra-space-lg); }
324 .yatra-mt-xl { margin-top: var(--yatra-space-xl); }
325
326 .yatra-hidden { display: none !important; }
327 .yatra-visible { display: block !important; }
328
329 /* ============================================
330 LOADING STATES
331 ============================================ */
332 .yatra-loading {
333 position: relative;
334 pointer-events: none;
335 }
336
337 .yatra-loading::after {
338 content: '';
339 position: absolute;
340 top: 50%;
341 left: 50%;
342 width: 24px;
343 height: 24px;
344 margin: -12px 0 0 -12px;
345 border: 2px solid var(--yatra-border-color);
346 border-top-color: var(--yatra-primary);
347 border-radius: 50%;
348 animation: yatra-spinner 0.8s linear infinite;
349 }
350
351 @keyframes yatra-spinner {
352 to { transform: rotate(360deg); }
353 }
354
355 /* ============================================
356 LEGACY COMPATIBILITY
357 Keep old class names working while transitioning
358 ============================================ */
359 .yatra-booking-page {
360 width: 100%;
361 min-height: 100vh;
362 }
363
364 .yatra-single-trip {
365 width: 100%;
366 min-height: 100vh;
367 }
368
369 .yatra-listing-container,
370 .yatra-booking-container,
371 .yatra-trip-container,
372 .yatra-horizontal-search-container,
373 .yatra-similar-section-container {
374 width: 100%;
375 max-width: var(--yatra-container-max-width, 1300px);
376 margin-left: auto;
377 margin-right: auto;
378 }
379
380 .yatra-traveler-selector .yatra-quantity-controls {
381 gap: 6px;
382 }
383
384 .yatra-traveler-selector .yatra-quantity-btn,
385 .yatra-traveler-selector .yatra-qty-btn {
386 width: 32px;
387 height: 32px;
388 min-width: 32px;
389 border-radius: 10px;
390 border: 1px solid #e5e7eb;
391 background: #ffffff;
392 color: #0f172a;
393 display: inline-flex;
394 align-items: center;
395 justify-content: center;
396 box-shadow: 0 1px 2px rgba(0,0,0,0.05);
397 transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;
398 }
399
400 .yatra-traveler-selector .yatra-quantity-btn:hover:not(:disabled),
401 .yatra-traveler-selector .yatra-qty-btn:hover:not(:disabled) {
402 background: #f8fafc;
403 border-color: #cbd5e1;
404 transform: translateY(-1px);
405 box-shadow: 0 6px 16px rgba(15, 23, 42, 0.08);
406 }
407
408 .yatra-traveler-selector .yatra-quantity-btn:active:not(:disabled),
409 .yatra-traveler-selector .yatra-qty-btn:active:not(:disabled) {
410 transform: translateY(0);
411 box-shadow: 0 2px 6px rgba(15, 23, 42, 0.10);
412 }
413
414 .yatra-traveler-selector .yatra-quantity-btn:disabled,
415 .yatra-traveler-selector .yatra-qty-btn:disabled {
416 opacity: 0.45;
417 cursor: not-allowed;
418 transform: none;
419 box-shadow: none;
420 }
421
422 .yatra-traveler-selector .yatra-quantity-btn svg,
423 .yatra-traveler-selector .yatra-qty-btn svg {
424 width: 16px;
425 height: 16px;
426 stroke-width: 2.25;
427 }
428
429 /* Quick facts: single-trip layout lives in trip.css (hairline grid, neutral icons). */
430
431 /* ============================================
432 STICKY NAVIGATION - Single Trip Page
433 ============================================ */
434 .yatra-sticky-nav-price {
435 display: flex;
436 flex-direction: column;
437 align-items: flex-end;
438 gap: 2px;
439 padding: 8px 16px;
440 margin-left: auto;
441 min-width: 140px;
442 text-align: right;
443 }
444
445 .yatra-sticky-nav-price-label {
446 font-size: 10px;
447 font-weight: 600;
448 text-transform: uppercase;
449 letter-spacing: 0.5px;
450 color: var(--yatra-text-muted);
451 line-height: 1.2;
452 }
453
454 .yatra-sticky-nav-price-amount {
455 display: flex;
456 align-items: center;
457 gap: 4px;
458 font-size: 18px;
459 font-weight: 700;
460 color: var(--yatra-primary);
461 line-height: 1.2;
462 }
463
464 .yatra-sticky-nav-price-amount svg {
465 width: 16px;
466 height: 16px;
467 flex-shrink: 0;
468 }
469
470 .yatra-sticky-nav-price-note {
471 font-size: 10px;
472 font-weight: 400;
473 color: var(--yatra-text-muted);
474 line-height: 1.2;
475 }
476
477 @media (max-width: 768px) {
478 .yatra-sticky-nav-price {
479 min-width: 120px;
480 padding: 6px 12px;
481 }
482
483 .yatra-sticky-nav-price-amount {
484 font-size: 16px;
485 }
486 }
487
488