1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="utf-8"> 5 <title>Tender Quotations â Sri Venkateswara College</title> 6 <meta content="width=device-width, initial-scale=1.0" name="viewport"> 7 8 <link rel="preconnect" href="https://fonts.googleapis.com"> 9 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 10 <link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;500;600;700&family=Poppins:wght@200;300;400;500;600&display=swap" rel="stylesheet"> 11 12 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css"/> 13 <link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css" rel="stylesheet"> 14 <link href="https://svc.ac.in/svc_home/lib/animate/animate.min.css" rel="stylesheet"> 15 <link href="https://svc.ac.in/svc_home/css/bootstrap.min.css" rel="stylesheet"> 16 <link href="https://svc.ac.in/svc_home/css/style.css" rel="stylesheet"> 17
17<script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script>
17 18 19 20 <link rel="stylesheet" href="https://cdn.datatables.net/1.13.8/css/dataTables.bootstrap5.min.css"> 21 <link rel="stylesheet" href="https://cdn.datatables.net/responsive/2.5.0/css/responsive.bootstrap5.min.css"> 22 23 <style> 24 :root { 25 --svc-blue: #1d4ed8; 26 --svc-ink: #1f2937; 27 --svc-surface: #ffffff; 28 --svc-surface-soft: #eff6ff; 29 --svc-line: rgba(29, 78, 216, 0.12); 30 --svc-shadow: 0 18px 45px rgba(33, 37, 41, 0.08); 31 } 32 33 /* Extended Link "Link as a Button" â colours come from an inline 34 style (per-link background/text colour, or these defaults when 35 left blank); this class only supplies the button chrome. */ 36 .svc-extlink-btn { 37 display: inline-flex !important; 38 align-items: center; 39 gap: .4rem; 40 padding: .4rem 1rem !important; 41 border: 1px solid transparent; 42 border-radius: .375rem; 43 background-color: var(--svc-blue); 44 color: #ffffff !important; 45 text-decoration: none !important; 46 line-height: 1.4; 47 transition: filter .15s ease, transform .15s ease; 48 } 49 .svc-extlink-btn:hover, 50 .svc-extlink-btn:focus { 51 filter: brightness(0.92); 52 color: #ffffff !important; 53 text-decoration: none !important; 54 } 55 56 /* The actual scrolling element for the viewport is <html>, not 57 <body> (document.scrollingElement) â body's overflow-x is 58 *supposed* to propagate up to it per spec, but several mobile 59 browsers don't do that reliably, so it's set on both. Without 60 this, things like the rightmost nav dropdown (sits partly 61 off-screen at left:0 even while closed/hidden) and the Google 62 Translate widget's off-screen loading spinner (positioned at 63 left:-1000px) can inflate the page's scrollable width and let 64 a swipe reveal blank space past the real content â a phantom 65 horizontal scrollbar. Nothing on this page needs horizontal 66 scroll, so clip it defensively at both levels. */ 67 html { 68 overflow-x: hidden; 69 } 70 71 body { 72 color: var(--svc-ink); 73 font-family: 'Open Sans', sans-serif; 74 background: 75 radial-gradient(circle at top left, rgba(37, 99, 235, 0.06), transparent 26%), 76 linear-gradient(180deg, #fffdfa 0%, #f8fafc 100%); 77 overflow-x: hidden; 78 } 79 80 h1, h2, h3, h4, h5, .navbar-light .navbar-nav .nav-link, .btn { 81 font-family: 'Poppins', sans-serif; 82 } 83 84 .container, 85 .section-shell > .container-fluid { 86 position: relative; 87 z-index: 1; 88 } 89 90 .home-brand-bar { 91 background: linear-gradient(135deg, #eef4ff 0%, #ffffff 45%, #f4f8ff 100%); 92 border-bottom: 1px solid rgba(29, 78, 216, 0.1); 93 } 94 95 .home-brand-wrap { 96 padding: 1rem 1.25rem; 97 } 98 99 .brand-cluster, 100 .brand-actions, 101 .top-links-wrap { 102 display: flex; 103 align-items: center; 104 gap: 1rem; 105 flex-wrap: wrap; 106 } 107 108 .brand-cluster, 109 .brand-actions { 110 justify-content: center; 111 } 112 113 .brand-logo-wide, 114 .brand-logo-square, 115 .brand-logo-accent { 116 display: block; 117 object-fit: contain; 118 max-width: 100%; 119 } 120 121 .brand-logo-wide { 122 width: 130px; 123 height: 80px; 124 } 125 126 .brand-logo-square { 127 width: 80px; 128 height: 80px; 129 } 130 131 .brand-logo-accent { 132 width: 130px; 133 height: 80px; 134 } 135 136 .brand-audio { 137 width: 100%; 138 max-width: 180px; 139 height: 52px; 140 opacity: 0.9; 141 } 142 143 .brand-title-block { 144 display: block; 145 text-align: center; 146 padding: 0.5rem 0; 147 text-decoration: none; 148 } 149 150 .brand-title-top, 151 .brand-title-main, 152 .brand-title-sub { 153 display: block; 154 } 155 156 .brand-title-top { 157 color: #1e40af; 158 font-size: 1rem; 159 font-size: clamp(1rem, 1.5vw, 1.25rem); 160 line-height: 1.4; 161 } 162 163 .brand-title-main { 164 color: #1d4ed8; 165 font-size: 1.9rem; 166 font-size: clamp(1.9rem, 3vw, 2.5rem); 167 font-weight: 700; 168 line-height: 1.15; 169 } 170 171 .brand-title-sub {
172 color: #3d4654; 173 font-size: 0.95rem; 174 font-size: clamp(0.95rem, 1.1vw, 1rem); 175 line-height: 1.5; 176 } 177 178 .top-links-bar { 179 background: #EFF6FF; 180 /* No left padding â the first link's colour block runs flush 181 to the edge instead of leaving a bare white gap. */ 182 padding: 0 1.25rem 0 0; 183 box-shadow: inset 0 -1px 0 rgba(15, 23, 42, 0.08); 184 } 185 186 .top-links-wrap { 187 flex-wrap: nowrap; 188 justify-content: space-between; 189 min-height: 58px; 190 gap: 1rem; 191 } 192 193 .top-links-primary { 194 flex: 1 1 auto; 195 width: auto; 196 min-width: 0; 197 /* Overrides the row's align-items-center so this column (and 198 the colour blocks inside it) stretch the full bar height. */ 199 align-self: stretch; 200 } 201 202 .top-links-translate { 203 flex: 0 0 auto; 204 width: auto; 205 } 206 207 .translate-wrap { 208 display: flex; 209 align-items: center; 210 gap: 0.65rem 0.9rem; 211 flex-wrap: wrap; 212 } 213 214 .top-links-list { 215 display: flex; 216 align-items: stretch; 217 height: 100%; 218 gap: 0; 219 flex-wrap: wrap; 220 row-gap: 0.6rem; 221 } 222 223 .top-links-accessibility { 224 display: flex; 225 align-items: center; 226 justify-content: center; 227 } 228 229 /* Each link is a solid colour block spanning the bar's full 230 height, sitting flush against the next one â no gap, no 231 separate divider element. Every link after the first has its 232 top-left corner cut on a diagonal and is pulled left to 233 overlap the previous link by the same amount, so the earlier 234 link's colour shows through the cut: a seamless diagonal seam 235 with nothing else drawn on top. The first link's left edge and 236 every link's right edge stay straight. */ 237 .top-links-list a { 238 display: inline-flex; 239 flex: 0 0 auto; 240 /* Every box is the same width â wide enough for the longest 241 label ("SCREEN READER ACCESS") â so short labels like 242 "MOU" sit centred in a box the same size as the rest. */ 243 width: 225px; 244 align-items: center; 245 justify-content: center; 246 gap: 0.4rem; 247 padding: 0 1.15rem; 248 color: #ffffff; 249 text-decoration: none; 250 text-align: center; 251 white-space: nowrap; 252 overflow: hidden; 253 text-overflow: ellipsis; 254 font-weight: 700; 255 font-size: 0.86rem; 256 letter-spacing: 0.02em; 257 line-height: 1.2; 258 transition: filter 0.2s ease; 259 } 260 261 .top-links-list a:hover, 262 .top-links-list a:focus { 263 color: #ffffff; 264 filter: brightness(1.12); 265 } 266 267 .top-links-list a + a { 268 margin-left: -14px; 269 padding-left: calc(1.15rem + 14px); 270 clip-path: polygon(14px 0, 100% 0, 100% 100%, 0 100%); 271 } 272 273 /* A different Bootstrap-style hue per link, cycling through 7 colours */ 274 .top-links-list a:nth-of-type(7n + 1) { background: #0d6efd; } 275 .top-links-list a:nth-of-type(7n + 2) { background: #198754; } 276 .top-links-list a:nth-of-type(7n + 3) { background: #dc3545; } 277 .top-links-list a:nth-of-type(7n + 4) { background: #fd7e14; } 278 .top-links-list a:nth-of-type(7n + 5) { background: #0aa2c0; } 279 .top-links-list a:nth-of-type(7n + 6) { background: #6f42c1; } 280 .top-links-list a:nth-of-type(7n + 7) { background: #495057; } 281 282 .translate-wrap { 283 padding: 0.2rem 0.45rem; 284 border-radius: 999px; 285 background: linear-gradient(135deg, rgba(239, 246, 255, 0.96) 0%, rgba(219, 234, 254, 0.96) 100%); 286 border: 1px solid rgba(191, 219, 254, 0.9); 287 box-shadow: 0 10px 20px rgba(10, 37, 99, 0.14); 288 justify-content: center; 289 } 290 291 .translate-wrap #google_translate_element { 292 min-height: 32px; 293 display: flex; 294 align-items: center; 295 justify-content: center; 296 min-width: 220px; 297 } 298 299 #google_translate_element .goog-te-gadget { 300 display: inline-flex !important; 301 align-items: center; 302 justify-content: center; 303 min-height: 32px; 304 color: #1e3a8a !important; 305 font-family: 'Poppins', sans-serif !important; 306 font-size: 0.88rem !important; 307 line-height: 1.2 !important; 308 white-space: nowrap; 309 } 310 311 #google_translate_element .goog-te-gadget span { 312 color: #1e3a8a !important; 313 } 314 315 #google_translate_element .goog-te-gadget-simple { 316 display: inline-flex !important; 317 align-items: center; 318 min-height: 34px; 319 padding: 0.25rem 0.75rem; 320 border: 1px solid rgba(191, 219, 254, 0.9) !important; 321 border-radius: 999px !important; 322 background: #ffffff !important; 323 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.92); 324 } 325 326 #google_translate_element .goog-te-gadget-simple .goog-te-menu-value { 327 color: #1e3a8a !important; 328 display: inline-flex !important; 329 align-items: center; 330 gap: 0.35rem; 331 margin: 0 !important; 332 } 333 334 #google_translate_element .goog-te-gadget-simple .goog-te-menu-value span { 335 border: 0 !important; 336 color: #1e3a8a !important; 337 } 338 339 #google_translate_element .goog-te-gadget-simple .goog-te-menu-value img { 340 display: none !important; 341 } 342 343 #google_translate_element .goog-te-banner-frame, 344 .skiptranslate iframe { 345 max-width: 100%; 346 } 347 348 .screen-reader-toolbar { 349 display: inline-flex; 350 align-items: center; 351 gap: 0.35rem; 352 padding: 0.2rem 0.35rem; 353 border: 1px solid rgba(191, 219, 254, 0.9); 354 border-radius: 999px; 355 background: linear-gradient(135deg, rgba(239, 246, 255, 0.98) 0%, rgba(219, 234, 254, 0.98) 100%); 356 box-shadow: 0 10px 20px rgba(10, 37, 99, 0.14); 357 flex-wrap: wrap; 358 justify-content: center; 359 } 360 361 .screen-reader-btn { 362 display: inline-flex; 363 align-items: center; 364 justify-content: center; 365 min-width: 42px; 366 min-height: 34px; 367 padding: 0.35rem 0.65rem; 368 border: 1px solid rgba(191, 219, 254, 0.9); 369 border-radius: 999px; 370 background: rgba(255, 255, 255, 0.78); 371 color: #1e3a8a; 372 font-family: 'Poppins', sans-serif; 373 font-size: 0.84rem; 374 font-weight: 700; 375 line-height: 1; 376 transition: transform 0.2s ease, background 0.2s ease, color 0.2s ease, box-shadow 0.2s ease; 377 } 378 379 .screen-reader-btn:hover, 380 .screen-reader-btn:focus { 381 color: #ffffff; 382 background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%); 383 box-shadow: 0 12px 22px rgba(10, 37, 99, 0.18); 384 transform: translateY(-1px); 385 } 386 387 .screen-reader-btn.is-active { 388 color: #ffffff; 389 background: linear-gradient(135deg, #1e3a8a 0%, #1d4ed8 100%); 390 border-color: rgba(147, 197, 253, 0.95); 391 } 392 393 .header-hero { 394 background: linear-gradient(135deg, #eef4ff 0%, #ffffff 45%, #f4f8ff 100%); 395 border-bottom: 1px solid rgba(29, 78, 216, 0.1); 396 } 397 398 .header-hero-row { 399 min-height: 130px; 400 } 401 402 .header-hero-media { 403 display: flex; 404 align-items: center; 405 justify-content: center; 406 padding: 1rem 1.5rem; 407 } 408 409 .header-hero-media-link { 410 display: block; 411 width: 100%; 412 text-align: center; 413 } 414 415 .header-hero-image { 416 display: block; 417 width: auto; 418 max-width: min(100%, 900px); 419 height: auto; 420 margin: 0 auto; 421 } 422 423 .header-hero-actions { 424 display: flex; 425 align-items: center; 426 justify-content: space-between; 427 padding: 0.5rem 0; 428 background: rgba(128, 0, 0, 0.03); 429 border-left: 1px solid rgba(128, 0, 0, 0.1); 430 } 431 432 /* .container-fluid has no max-width, so the fluid col-lg-3 keeps
433 growing on wide screens well past what the Viksit Bharat image 434 (~208px at its fixed 92px max-height) plus the 175px button 435 stack actually need â leaving a large empty gap. Fix the box 436 at a width sized to fit that unchanged content snugly instead 437 of letting it keep stretching. */ 438 @media (min-width: 992px) { 439 .header-hero-actions { 440 flex: 0 0 420px; 441 width: 420px; 442 max-width: 420px; 443 } 444 445 .header-hero-media { 446 flex: 1 1 auto; 447 width: auto; 448 max-width: calc(100% - 420px); 449 } 450 } 451 452 .header-hero-actions-row { 453 display: flex; 454 align-items: center; 455 /* flex-end (not space-between) so the image and the button 456 stack sit together, flush against the right edge of the 457 column, with only a slight gap between the two of them. */ 458 justify-content: flex-end; 459 flex-wrap: wrap; 460 row-gap: 0.5rem; 461 gap: 0.65rem; 462 width: 100%; 463 } 464 465 .header-hero-actions-media { 466 display: flex; 467 align-items: center; 468 justify-content: flex-start; 469 flex: 0 1 auto; 470 min-width: 0; 471 } 472 473 .header-hero-actions-image { 474 display: block; 475 max-width: 100%; 476 max-height: 92px; 477 object-fit: contain; 478 } 479 480 .header-hero-actions-buttons { 481 display: flex; 482 flex-direction: column; 483 gap: 0.35rem; 484 flex: 0 0 auto; 485 width: 175px; 486 } 487 488 .header-action-block { 489 display: flex; 490 align-items: center; 491 justify-content: center; 492 gap: 0.4rem; 493 width: 100%; 494 height: 42px; 495 border-radius: 10px; 496 background: #ffffff; 497 color: #800000; 498 border: 2px solid #800000; 499 font-family: 'Poppins', sans-serif; 500 font-weight: 700; 501 font-size: 0.78rem; 502 text-decoration: none; 503 cursor: pointer; 504 overflow: visible; 505 box-shadow: 0 6px 14px rgba(128, 0, 0, 0.15); 506 transition: background 0.25s ease, color 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease, transform 0.25s ease; 507 } 508 509 .header-action-block:hover, 510 .header-action-block:focus-within { 511 background: #800000; 512 color: #ffffff; 513 border-color: #ffffff; 514 box-shadow: 0 12px 22px rgba(128, 0, 0, 0.3); 515 transform: translateY(-1px); 516 } 517 518 .header-action-block > i { 519 color: inherit; 520 font-size: 0.88rem; 521 } 522 523 .header-action-erp span { 524 letter-spacing: 0.02em; 525 } 526 527 .header-action-erp { 528 background: #ffc107; 529 color: #000000; 530 border-color: #ffc107; 531 } 532 533 .header-action-erp:hover, 534 .header-action-erp:focus-within { 535 background: #ffca2c; 536 color: #000000; 537 border-color: #ffc720; 538 } 539 540 .header-action-textsize { 541 gap: 0.3rem; 542 } 543 544 .header-action-textsize .screen-reader-btn { 545 min-width: 28px; 546 min-height: 28px; 547 padding: 0.15rem 0.35rem; 548 border: 1px solid rgba(128, 0, 0, 0.45); 549 border-radius: 7px; 550 background: transparent; 551 color: #800000; 552 font-size: 0.74rem; 553 box-shadow: none; 554 transform: none; 555 } 556
557 .header-action-textsize:hover .screen-reader-btn, 558 .header-action-textsize:focus-within .screen-reader-btn { 559 color: #ffffff; 560 border-color: rgba(255, 255, 255, 0.55); 561 } 562 563 .header-action-textsize .screen-reader-btn:hover, 564 .header-action-textsize .screen-reader-btn:focus, 565 .header-action-textsize .screen-reader-btn.is-active { 566 background: rgba(128, 0, 0, 0.12); 567 box-shadow: none; 568 transform: none; 569 } 570 571 .header-action-textsize:hover .screen-reader-btn.is-active, 572 .header-action-textsize:focus-within .screen-reader-btn.is-active, 573 .header-action-textsize:hover .screen-reader-btn:hover, 574 .header-action-textsize:focus-within .screen-reader-btn:focus { 575 background: rgba(255, 255, 255, 0.25); 576 } 577 578 .header-action-language { 579 height: auto; 580 min-height: 42px; 581 padding: 0.3rem 0.45rem; 582 } 583 584 .header-action-language #google_translate_element { 585 min-height: 24px; 586 min-width: auto; 587 width: 100%; 588 display: flex; 589 flex-direction: column; 590 align-items: center; 591 justify-content: center; 592 } 593 594 .header-action-language #google_translate_element .goog-te-gadget { 595 display: flex !important; 596 flex-direction: column !important; 597 align-items: center !important; 598 white-space: normal !important; 599 gap: 2px; 600 min-height: 24px; 601 width: 100%; 602 color: #800000 !important; 603 font-family: 'Poppins', sans-serif !important; 604 font-size: 0.58rem !important; 605 line-height: 1.2 !important; 606 text-align: center; 607 } 608 609 .header-action-language #google_translate_element .goog-te-gadget-simple { 610 display: flex !important; 611 align-items: center; 612 justify-content: center; 613 width: 100%; 614 min-height: 24px; 615 padding: 0.12rem 0.35rem !important; 616 border: 1px solid rgba(128, 0, 0, 0.45) !important; 617 border-radius: 999px !important; 618 background: transparent !important; 619 box-shadow: none !important; 620 } 621 622 .header-action-language #google_translate_element .goog-te-gadget-simple .goog-te-menu-value, 623 .header-action-language #google_translate_element .goog-te-gadget-simple .goog-te-menu-value span { 624 color: #800000 !important; 625 font-size: 0.72rem !important; 626 } 627 628 .header-action-language #google_translate_element .goog-te-gadget-simple .goog-te-menu-value img { 629 display: none !important; 630 } 631 632 .header-action-language #google_translate_element select.goog-te-combo { 633 width: 100% !important; 634 max-width: 100% !important; 635 min-height: 24px !important; 636 padding: 0.12rem 0.35rem !important; 637 margin: 0 !important; 638 border: 1px solid rgba(128, 0, 0, 0.45) !important; 639 border-radius: 999px !important; 640 background: #ffffff !important; 641 color: #800000 !important; 642 font-size: 0.72rem !important; 643 font-family: 'Poppins', sans-serif !important; 644 } 645 646 .header-action-language:hover #google_translate_element select.goog-te-combo, 647 .header-action-language:focus-within #google_translate_element select.goog-te-combo { 648 background: #800000 !important; 649 color: #ffffff !important; 650 border-color: rgba(255, 255, 255, 0.55) !important; 651 } 652 653 .header-action-language #google_translate_element .goog-te-gadget a, 654 .header-action-language #google_translate_element .goog-te-gadget a:visited { 655 color: #800000 !important; 656 } 657 658 .header-action-language:hover #google_translate_element .goog-te-gadget-simple, 659 .header-action-language:focus-within #google_translate_element .goog-te-gadget-simple { 660 border-color: rgba(255, 255, 255, 0.55) !important; 661 } 662 663 .header-action-language:hover #google_translate_element .goog-te-gadget, 664 .header-action-language:focus-within #google_translate_element .goog-te-gadget, 665 .header-action-language:hover #google_translate_element .goog-te-gadget a, 666 .header-action-language:focus-within #google_translate_element .goog-te-gadget a, 667 .header-action-language:hover #google_translate_element .goog-te-gadget-simple .goog-te-menu-value, 668 .header-action-language:hover #google_translate_element .goog-te-gadget-simple .goog-te-menu-value span, 669 .header-action-language:focus-within #google_translate_element .goog-te-gadget-simple .goog-te-menu-value, 670 .header-action-language:focus-within #google_translate_element .goog-te-gadget-simple .goog-te-menu-value span { 671 color: #ffffff !important; 672 } 673 674 .top-links-search { 675 flex: 0 0 auto; 676 width: auto; 677 /* Same background as the .top-links-bar container itself. */ 678 background: #EFF6FF; 679 } 680 681 @media (max-width: 991.98px) { 682 .header-hero-actions { 683 border-left: none; 684 border-top: 1px solid rgba(128, 0, 0, 0.1); 685 } 686 } 687 688 @media (max-width: 420px) { 689 .header-hero-actions-row { 690 flex-wrap: wrap; 691 justify-content: center; 692 } 693 694 .header-hero-actions-buttons { 695 width: 100%; 696 margin-left: 0; 697 } 698 } 699 700 .nav-bar { 701 box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06); 702 position: -webkit-sticky; 703 position: sticky; 704 top: 0; 705 z-index: 1025; 706 background: #ffffff; 707 } 708 709 .navbar { 710 min-height: 82px; 711 width: 100%; 712 max-width: none; 713 margin: 0; 714 } 715 716 .navbar-brand { 717 width: 0; 718 flex: 0 0 0; 719 padding: 0; 720 margin: 0; 721 overflow: hidden; 722 } 723 724 .navbar-menu-wrap { 725 flex: 1 1 auto; 726 min-width: 0; 727 width: auto; 728 justify-content: center !important; 729 } 730 731 .navbar-login-wrap { 732 flex: 0 0 auto; 733 width: auto; 734 display: flex; 735 align-items: center; 736 justify-content: flex-end; 737 gap: 0.75rem; 738 text-align: right; 739 } 740 741 .navbar-login-btn { 742 display: inline-flex; 743 align-items: center; 744 justify-content: center; 745 gap: 0.45rem; 746 min-height: 40px; 747 padding: 0.5rem 1.1rem; 748 border-radius: 999px; 749 background: #800000; 750 color: #ffffff !important; 751 font-weight: 600; 752 font-size: 0.88rem; 753 letter-spacing: 0.02em; 754 text-decoration: none; 755 white-space: nowrap; 756 border: 2px solid #800000; 757 box-shadow: 0 12px 22px rgba(128, 0, 0, 0.22); 758 transition: transform 0.25s ease, box-shadow 0.25s ease, background 0.25s ease, color 0.25s ease; 759 } 760 761 .navbar-login-btn:hover, 762 .navbar-login-btn:focus { 763 color: #800000 !important; 764 background: #ffffff; 765 border-color: #800000; 766 transform: translateY(-1px); 767 box-shadow: 0 20px 34px rgba(128, 0, 0, 0.18); 768 } 769 770 .navbar-login-btn i { 771 font-size: 0.95rem; 772 } 773 774 @media (min-width: 992px) { 775 #navbarCollapse { 776 display: flex !important; 777 align-items: center; 778 justify-content: center; 779 width: 100%; 780 gap: 1rem; 781 } 782 783 .navbar-menu-wrap { 784 display: flex; 785 align-items: center; 786 justify-content: center !important; 787 flex: 1 1 auto; 788 max-width: none; 789 } 790 791 .navbar-light .navbar-nav { 792 display: flex; 793 flex-direction: row; 794 flex-wrap: nowrap; 795 width: auto; 796 margin-left: auto !important; 797 margin-right: auto !important; 798 justify-content: center; 799 align-items: center; 800 text-align: left; 801 gap: 0.1rem; 802 } 803 } 804 805 @media (min-width: 992px) and (max-width: 1199.98px) { 806 #navbarCollapse { 807 align-items: flex-start; 808 flex-wrap: wrap; 809 row-gap: 0.85rem; 810 } 811 812 .navbar-menu-wrap { 813 width: 100%; 814 flex: 1 1 100%; 815 } 816 817 .navbar-light .navbar-nav { 818 flex-wrap: wrap; 819 row-gap: 0.35rem; 820 } 821 822 .navbar-login-wrap { 823 width: 100%; 824 min-width: 0; 825 justify-content: flex-start; 826 margin-left: 0; 827 text-align: left; 828 } 829 } 830 831 @media (max-width: 991.98px) { 832 .navbar-light .navbar-nav { 833 width: 100%; 834 row-gap: 0.25rem; 835 justify-content: flex-start; 836 align-items: flex-start; 837 text-align: left; 838 } 839 } 840 841 .navbar-light .navbar-nav .nav-link { 842 letter-spacing: 0.02em; 843 display: inline-flex; 844 align-items: center; 845 gap: 0.5rem; 846 } 847 848 .navbar-light .navbar-nav .nav-link-icon { 849 font-size: 0.9em; 850 color: inherit; 851 } 852 853 /* Main links keep only their own fa icon â no extra down-caret 854 next to the label (sub-links / sub-sub-links keep theirs). */ 855 .navbar-light .navbar-nav > .nav-item.dropdown > a.nav-link .dropdown-toggle::after { 856 content: none; 857 } 858 859 /* style.css draws an animated top/bottom hairline (::before/::after) 860 on nav-link hover â remove it, we don't want that effect here. */ 861 .navbar-light .navbar-nav .nav-link::before, 862 .navbar-light .navbar-nav .nav-link::after { 863 content: none !important; 864 } 865 866 .navbar-light .navbar-nav .nav-link:hover, 867 .navbar-light .navbar-nav .nav-link:focus, 868 .navbar-light .navbar-nav .nav-link.active:hover { 869 color: #800000 !important; 870 font-weight: 700; 871 } 872 873 .navbar-toggler { 874 border: 1px solid rgba(29, 78, 216, 0.18); 875 border-radius: 14px; 876 padding: 0.55rem 0.8rem; 877 } 878 879 .navbar-toggler:focus { 880 box-shadow: 0 0 0 0.2rem rgba(29, 78, 216, 0.12); 881 } 882 883 .navbar-light .navbar-nav .dropdown-menu { 884 border-radius: 18px; 885 border: 1px solid rgba(29, 78, 216, 0.08); 886 box-shadow: 0 18px 36px rgba(15, 23, 42, 0.12); 887 overflow: visible; 888 text-align: left; 889 width: max-content; 890 min-width: 260px; 891 max-width: calc(100vw - 20px); 892 padding: 0.35rem 0; 893 /* Slim, rounded scrollbar for whichever menus end up with 894 overflow-y: auto, instead of the bulky default OS one. */ 895 scrollbar-width: thin; 896 scrollbar-color: rgba(29, 78, 216, 0.35) transparent; 897 } 898 899 .navbar-light .navbar-nav .dropdown-menu::-webkit-scrollbar {
900 width: 6px; 901 } 902 903 .navbar-light .navbar-nav .dropdown-menu::-webkit-scrollbar-track { 904 background: transparent; 905 } 906 907 .navbar-light .navbar-nav .dropdown-menu::-webkit-scrollbar-thumb { 908 background-color: rgba(29, 78, 216, 0.35); 909 border-radius: 999px; 910 } 911 912 .navbar-light .navbar-nav .dropdown-menu::-webkit-scrollbar-thumb:hover { 913 background-color: rgba(29, 78, 216, 0.55); 914 } 915 916 .navbar-light .navbar-nav .dropdown-item { 917 display: flex; 918 align-items: center; 919 gap: 0.3rem; 920 padding: 0.4rem 1.1rem; 921 font-size: 1rem; 922 white-space: normal; 923 word-break: break-word; 924 line-height: 1.3; 925 } 926 927 .navbar-light .navbar-nav .dropdown-item-caret { 928 flex: 0 0 auto; 929 font-size: 0.78em; 930 color: #1d4ed8; 931 } 932 933 .navbar-light .navbar-nav .dropdown-item-text { 934 flex: 1 1 auto; 935 min-width: 0; 936 } 937 938 .navbar-light .navbar-nav .dropdown-menu > li:first-child > .dropdown-item { 939 border-radius: 16px 16px 0 0; 940 } 941 942 .navbar-light .navbar-nav .dropdown-menu > li:last-child > .dropdown-item { 943 border-radius: 0 0 16px 16px; 944 } 945 946 .navbar-light .navbar-nav .dropdown-item:hover, 947 .navbar-light .navbar-nav .dropdown-item:focus { 948 font-weight: 700; 949 background-color: transparent !important; 950 color: inherit !important; 951 } 952 953 /* Desktop: sub links and nested sub-sub links each display as a plain 954 vertical (single-column) list, same as before the grid experiment. 955 Visibility responds to both :hover (instant, no JS needed) and the 956 .show class (set by JS with a short close-delay â see 957 main_navigation.blade.php â so a main link's sub-menu stays open 958 while the mouse is moving toward a nested sub-sub panel). */ 959 @media (min-width: 992px) { 960 .navbar-light .navbar-nav .dropdown-menu { 961 display: block; 962 visibility: hidden; 963 opacity: 0; 964 transform: rotateX(-75deg); 965 transform-origin: 0% 0%; 966 transition: .5s; 967 } 968 969 /* Long lists scroll internally instead of running off the 970 bottom edge of the viewport with no way to reach them â 971 but only on a "leaf" menu (one with no nested sub-sub 972 menu of its own). A menu that contains a .dropdown-submenu 973 must stay overflow:visible: per the CSS overflow spec, 974 overflow-y: auto here would force overflow-x to auto too, 975 clipping (and adding a scrollbar for) the nested submenu 976 the moment it renders outside this box on any edge. */ 977 .navbar-light .navbar-nav .dropdown-menu:not(:has(.dropdown-submenu)) { 978 max-height: calc(100vh - 110px); 979 overflow-y: auto; 980 } 981 982 .navbar-light .navbar-nav .nav-item:hover > .dropdown-menu, 983 .navbar-light .navbar-nav .nav-item.show > .dropdown-menu { 984 visibility: visible; 985 opacity: 1; 986 transform: rotateX(0deg); 987 background: var(--bs-light) !important; 988 } 989 990 /* Desktop only: keep each link name on one line so the menu 991 sizes itself to fit the longest item (width: max-content 992 above) instead of wrapping. Mobile keeps wrapping (base 993 rule) since its menu is a fixed, narrow full-width column. */ 994 .navbar-light .navbar-nav .dropdown-item { 995 white-space: nowrap; 996 word-break: normal; 997 } 998 } 999 1000 .carousel-header { 1001 background: #eef2f6; 1002 position: relative; 1003 overflow: hidden; 1004 height: auto !important; 1005 border-bottom: 1px solid rgba(29, 78, 216, 0.08); 1006 box-shadow: inset 0 -24px 30px rgba(255, 255, 255, 0.32); 1007 } 1008 1009 .carousel-header .hero-carousel { 1010 position: relative; 1011 height: auto; 1012 } 1013 1014 .carousel-header .carousel-inner { 1015 position: relative; 1016 overflow: hidden; 1017 height: clamp(260px, 55vw, 720px); 1018 } 1019 1020 .carousel-header .carousel-inner .carousel-item { 1021 position: relative; 1022 min-height: clamp(260px, 55vw, 720px); 1023 height: clamp(260px, 55vw, 720px); 1024 background: #dbeafe; 1025 } 1026 1027 .carousel-header .carousel-inner .carousel-item img { 1028 display: block; 1029 width: 100%; 1030 height: 100%; 1031 object-fit: cover; 1032 object-position: center center; 1033 } 1034 1035 .carousel-header .carousel-control-prev, 1036 .carousel-header .carousel-control-next { 1037 position: absolute; 1038 top: 50%; 1039 bottom: auto; 1040 transform: translateY(-50%); 1041 z-index: 3; 1042 width: 70px; 1043 height: 70px; 1044 opacity: 1; 1045 display: flex; 1046 align-items: center; 1047 justify-content: center; 1048 } 1049 1050 .carousel-header .carousel-control-prev { 1051 left: 1rem; 1052 } 1053 1054 .carousel-header .carousel-control-next { 1055 right: 1rem; 1056 } 1057 1058 .carousel-header .carousel-control-prev-icon, 1059 .carousel-header .carousel-control-next-icon { 1060 width: 3.2rem; 1061 height: 3.2rem; 1062 margin: 0 !important; 1063 border-radius: 50%; 1064 background-color: rgba(29, 78, 216, 0.72); 1065 background-size: 42% 42%; 1066 box-shadow: 0 10px 24px rgba(15, 23, 42, 0.18); 1067 } 1068 1069 .carousel-header .carousel-indicators { 1070 margin-bottom: 1rem; 1071 z-index: 3; 1072 } 1073 1074 .carousel-header .carousel-indicators [data-bs-target] { 1075 width: 10px; 1076 height: 10px; 1077 border-radius: 999px; 1078 border: 0; 1079 background-color: rgba(255, 255, 255, 0.62); 1080 opacity: 1; 1081 margin: 0 0.3rem; 1082 } 1083 1084 .carousel-header .carousel-indicators .active { 1085 background-color: #ffffff; 1086 box-shadow: 0 0 0 4px rgba(29, 78, 216, 0.18); 1087 } 1088 1089 .carousel-header::after { 1090 content: ""; 1091 position: absolute; 1092 left: 0; 1093 right: 0; 1094 bottom: 0; 1095 height: 140px; 1096 background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(248, 250, 252, 0.95) 100%); 1097 pointer-events: none; 1098 z-index: 2; 1099 } 1100 1101 .carousel-header + .section-shell-full { 1102 position: relative; 1103 margin-top: 20px; 1104 } 1105 1106 .carousel-header + .section-shell-full::after { 1107 content: ""; 1108 position: absolute; 1109 top: -20px; 1110 left: 0; 1111 right: 0; 1112 height: 20px; 1113 background: linear-gradient(180deg, rgba(29, 78, 216, 0.08) 0%, rgba(29, 78, 216, 0) 100%); 1114 pointer-events: none; 1115 z-index: 0; 1116 } 1117 1118 .important-strip + .section-shell-full { 1119 position: relative; 1120 margin-top: 0; 1121 padding-top: 1.25rem !important; 1122 } 1123 1124 .important-strip + .section-shell-full > .container-fluid.py-5 { 1125 padding-top: 1rem !important; 1126 } 1127 1128 .important-strip { 1129 width: 100%; 1130 background: linear-gradient(135deg, #800000 0%, #a3122b 55%, #800000 100%); 1131 box-shadow: 0 6px 18px rgba(128, 0, 0, 0.22); 1132 position: relative; 1133 z-index: 2; 1134 } 1135 1136 .important-strip-inner { 1137 display: flex; 1138 align-items: stretch; 1139 max-width: 100%; 1140 } 1141 1142 .important-strip-label { 1143 flex: 0 0 auto; 1144 display: inline-flex; 1145 align-items: center; 1146 gap: 0.5rem; 1147 padding: 0.65rem 1.5rem; 1148 background: #ffffff; 1149 color: #800000; 1150 font-family: 'Poppins', sans-serif; 1151 font-weight: 700; 1152 font-size: 0.95rem; 1153 letter-spacing: 0.04em; 1154 text-transform: uppercase; 1155 white-space: nowrap; 1156 clip-path: polygon(0 0, 100% 0, calc(100% - 14px) 100%, 0 100%); 1157 padding-right: 2.1rem; 1158 } 1159 1160 .important-strip-scroll { 1161 flex: 1 1 auto; 1162 overflow: hidden; 1163 display: flex; 1164 align-items: center; 1165 min-width: 0; 1166 } 1167 1168 .important-strip-track { 1169 display: flex; 1170 align-items: center; 1171 gap: 3.5rem; 1172 white-space: nowrap; 1173 padding: 0.65rem 1.5rem; 1174 animation: svcMarqueeLoop 240s linear infinite; 1175 will-change: transform; 1176 } 1177 1178 .important-strip-track.is-static { 1179 animation: none; 1180 } 1181 1182 .important-strip-scroll:hover .important-strip-track { 1183 animation-play-state: paused; 1184 } 1185 1186 .important-strip-item { 1187 display: inline-flex; 1188 align-items: center; 1189 gap: 0.55rem; 1190 background: none; 1191 border: 0; 1192 margin: 0; 1193 padding: 0; 1194 color: #ffffff; 1195 font-family: inherit; 1196 font-weight: 600; 1197 font-size: 0.95rem; 1198 text-decoration: none; 1199 text-transform: uppercase; 1200 white-space: nowrap; 1201 cursor: pointer; 1202 } 1203 1204 .important-strip-item strong { 1205 font-family: 'Poppins', sans-serif; 1206 letter-spacing: 0.02em; 1207 } 1208 1209 .important-strip-item:hover, 1210 .important-strip-item:focus { 1211 color: #ffe4e4; 1212 text-decoration: underline; 1213 outline: none; 1214 } 1215 1216 .important-strip-item i { 1217 font-size: 0.4rem; 1218 color: #ffd7d7; 1219 } 1220 1221 .important-strip-empty { 1222 color: rgba(255, 255, 255, 0.85); 1223 } 1224 1225 @media (prefers-reduced-motion: reduce) { 1226 .important-strip-track { 1227 animation: none; 1228 } 1229 } 1230 1231 @media (max-width: 767.98px) { 1232 .important-strip-inner { 1233 flex-direction: column; 1234 } 1235 1236 .important-strip-label { 1237 clip-path: none; 1238 padding: 0.5rem 1rem; 1239 justify-content: center; 1240 } 1241 } 1242 1243 @keyframes svcMarqueeLoop { 1244 0% { 1245 transform: translateX(0); 1246 } 1247 100% { 1248 transform: translateX(-50%); 1249 } 1250 } 1251 1252 1253 .section-title .display-5 { 1254 color: var(--svc-blue); 1255 font-size: clamp(1.85rem, 3vw, 2.7rem); 1256 font-weight: 700; 1257 letter-spacing: -0.03em; 1258 margin-bottom: 0.75rem !important; 1259 } 1260 1261 .section-title .section-copy { 1262 max-width: 720px; 1263 margin: 0 auto; 1264 color: #5b6677; 1265 font-size: 1rem; 1266 line-height: 1.75; 1267 } 1268 1269 .section-shell { 1270 position: relative; 1271 } 1272 1273 .section-shell::before { 1274 content: ""; 1275 position: absolute; 1276 inset: 28px 12px; 1277 border-radius: 32px; 1278 background: rgba(255, 255, 255, 0.72); 1279 box-shadow: var(--svc-shadow); 1280 z-index: 0; 1281 } 1282 1283 .section-shell.section-shell-soft::before { 1284 background: linear-gradient(180deg, rgba(255, 248, 243, 0.96) 0%, rgba(255, 255, 255, 0.92) 100%); 1285 } 1286 1287 .section-shell-full::before { 1288 inset: 0; 1289 border-radius: 0; 1290 } 1291 1292 .principal-photo { 1293 width: 100%; 1294 min-height: 320px; 1295 max-height: 500px; 1296 object-fit: cover; 1297 margin-bottom: -7px; 1298 border-radius: 8px; 1299 } 1300 1301 .principal-photo-card { 1302 position: relative; 1303 padding: 14px; 1304 border-radius: 32px; 1305 background: linear-gradient(145deg, #ffffff 0%, #eef4ff 100%); 1306 border: 1px solid rgba(29, 78, 216, 0.12); 1307 box-shadow: 1308 0 22px 40px rgba(15, 23, 42, 0.1), 1309 inset 0 1px 0 rgba(255, 255, 255, 0.8); 1310 overflow: hidden; 1311 } 1312 1313 .principal-photo-card::before { 1314 content: ""; 1315 position: absolute; 1316 inset: 10px; 1317 border-radius: 24px; 1318 border: 1px solid rgba(255, 255, 255, 0.7); 1319 pointer-events: none; 1320 } 1321 1322 .principal-content-panel { 1323 height: 100%; 1324 padding: 1.9rem 2rem;
1325 border-radius: 36px; 1326 background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(244, 248, 255, 0.98) 100%); 1327 border: 1px solid rgba(29, 78, 216, 0.1); 1328 box-shadow: 0 24px 48px rgba(15, 23, 42, 0.12); 1329 position: relative; 1330 overflow: hidden; 1331 } 1332 1333 .principal-content-grid { 1334 --bs-gutter-x: 2rem; 1335 --bs-gutter-y: 1.5rem; 1336 } 1337 1338 .principal-photo-shell { 1339 padding: 0.15rem 0; 1340 } 1341 1342 .principal-content-panel::before { 1343 content: ""; 1344 position: absolute; 1345 top: 0; 1346 left: 0; 1347 right: 0; 1348 height: 6px; 1349 background: linear-gradient(90deg, #1d4ed8 0%, #60a5fa 100%); 1350 } 1351 1352 .principal-panel-heading { 1353 color: var(--svc-blue); 1354 font-size: 1.2rem; 1355 font-weight: 700; 1356 margin-bottom: 1.25rem; 1357 } 1358 1359 .principal-image-wrap { 1360 position: relative; 1361 } 1362 1363 .principal-caption { 1364 position: absolute; 1365 left: 30px; 1366 right: 30px; 1367 bottom: 24px; 1368 margin: 0; 1369 padding: 0.9rem 1.15rem; 1370 border-radius: 18px; 1371 background: linear-gradient(135deg, rgba(29, 78, 216, 0.94) 0%, rgba(30, 64, 175, 0.92) 100%); 1372 color: #ffffff; 1373 font-family: 'Poppins', sans-serif; 1374 font-size: 1rem; 1375 font-weight: 600; 1376 letter-spacing: 0.01em; 1377 box-shadow: 0 18px 28px rgba(15, 23, 42, 0.18); 1378 z-index: 2; 1379 } 1380 1381 .principal-quote { 1382 color: #1f2937; 1383 text-align: justify; 1384 line-height: 1.8; 1385 font-size: 1.02rem; 1386 } 1387 1388 .principal-contact { 1389 letter-spacing: 1px; 1390 } 1391 1392 .principal-stat-card { 1393 border-radius: 24px; 1394 background: linear-gradient(180deg, #ffffff 0%, #eef4ff 100%); 1395 box-shadow: var(--svc-shadow); 1396 border: 1px solid var(--svc-line); 1397 } 1398 1399 .principal-points p { 1400 margin-bottom: 0.85rem !important; 1401 } 1402 1403 .home-stats-grid { 1404 row-gap: 1.25rem; 1405 } 1406 1407 .principal-side-stats { 1408 height: 100%; 1409 display: flex; 1410 align-items: center; 1411 } 1412 1413 .home-stat-card { 1414 height: 100%; 1415 text-align: center; 1416 padding: 1.5rem 1.25rem; 1417 border-radius: 24px; 1418 background: linear-gradient(180deg, #ffffff 0%, #eff6ff 100%); 1419 border: 1px solid rgba(29, 78, 216, 0.1); 1420 box-shadow: var(--svc-shadow); 1421 } 1422 1423 .home-stat-card a { 1424 color: inherit; 1425 text-decoration: none; 1426 } 1427 1428 .home-stat-icon { 1429 width: 88px; 1430 height: 88px; 1431 margin: 0 auto 1rem; 1432 display: flex; 1433 align-items: center; 1434 justify-content: center; 1435 border-radius: 24px; 1436 background: #ffffff; 1437 border: 1px solid rgba(15, 23, 42, 0.08); 1438 box-shadow: 0 12px 24px rgba(15, 23, 42, 0.08); 1439 } 1440 1441 .home-stat-icon i { 1442 color: #111111; 1443 font-size: 2rem; 1444 } 1445 1446 .home-stat-title { 1447 margin-bottom: 0.6rem; 1448 color: var(--svc-blue); 1449 font-size: 1.05rem; 1450 font-weight: 600; 1451 letter-spacing: 0.01em; 1452 } 1453 1454 .home-stat-value { 1455 display: flex; 1456 align-items: baseline; 1457 justify-content: center; 1458 gap: 0.2rem; 1459 color: var(--svc-ink); 1460 } 1461 1462 .home-stat-value .counter-value, 1463 .home-stat-value .stat-symbol { 1464 font-family: 'Poppins', sans-serif; 1465 font-weight: 700; 1466 } 1467 1468 .home-stat-value .counter-value { 1469 font-size: 2rem; 1470 line-height: 1; 1471 } 1472 1473 .home-stat-value .stat-symbol { 1474 font-size: 1.35rem; 1475 color: var(--svc-blue); 1476 } 1477 1478 .section-separator { 1479 display: flex; 1480 align-items: center; 1481 justify-content: center; 1482 gap: 1rem; 1483 margin-top: 2.75rem; 1484 padding-top: 0.5rem; 1485 } 1486 1487 .section-separator::before, 1488 .section-separator::after { 1489 content: ""; 1490 width: min(140px, 18vw); 1491 height: 1px; 1492 background: linear-gradient(90deg, rgba(29, 78, 216, 0), rgba(29, 78, 216, 0.45), rgba(29, 78, 216, 0)); 1493 } 1494 1495 .section-separator-badge { 1496 width: 64px; 1497 height: 64px; 1498 display: inline-flex; 1499 align-items: center; 1500 justify-content: center; 1501 border-radius: 50%; 1502 background: linear-gradient(135deg, #ffffff 0%, #eaf2ff 100%); 1503 border: 1px solid rgba(29, 78, 216, 0.16); 1504 box-shadow: 0 14px 28px rgba(15, 23, 42, 0.08); 1505 color: var(--svc-blue); 1506 font-size: 1.35rem; 1507 } 1508 1509 .section-separator-vertical { 1510 height: 100%; 1511 min-height: 100%; 1512 margin-top: 0; 1513 padding-top: 0; 1514 flex-direction: column; 1515 gap: 0.9rem; 1516 } 1517 1518 .section-separator-vertical::before, 1519 .section-separator-vertical::after { 1520 width: 1px; 1521 height: min(140px, 20vh); 1522 background: linear-gradient(180deg, rgba(29, 78, 216, 0), rgba(29, 78, 216, 0.45), rgba(29, 78, 216, 0)); 1523 } 1524 1525 .notice-board { 1526 width: 100%; 1527 } 1528 1529 .notice-board > [class*="col-"] { 1530 display: flex; 1531 } 1532 1533 .notice-box { 1534 height: 100%; 1535 width: 100%; 1536 display: flex; 1537 flex-direction: column; 1538 padding: 1.35rem; 1539 border-radius: 28px; 1540 background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(239, 246, 255, 0.96) 100%); 1541 border: 1px solid rgba(29, 78, 216, 0.1); 1542 box-shadow: 0 20px 38px rgba(15, 23, 42, 0.1); 1543 } 1544 1545 .notice-box-header { 1546 display: flex; 1547 align-items: center; 1548 gap: 0.85rem; 1549 margin-bottom: 1rem; 1550 } 1551 1552 .notice-box-icon { 1553 width: 52px; 1554 height: 52px; 1555 display: inline-flex; 1556 align-items: center; 1557 justify-content: center; 1558 border-radius: 18px; 1559 background: linear-gradient(135deg, #1d4ed8 0%, #2563eb 100%); 1560 color: #ffffff; 1561 font-size: 1.1rem; 1562 box-shadow: 0 14px 24px rgba(29, 78, 216, 0.2); 1563 flex: 0 0 auto; 1564 } 1565 1566 .notice-box-title { 1567 margin: 0; 1568 color: var(--svc-blue); 1569 font-family: 'Poppins', sans-serif; 1570 font-size: 1.2rem; 1571 font-weight: 700; 1572 } 1573 1574 .notice-box-subtitle { 1575 margin: 0.2rem 0 0; 1576 color: #5b6677; 1577 font-size: 0.95rem; 1578 } 1579 1580 .notice-list { 1581 display: grid; 1582 gap: 0.9rem; 1583 flex: 1 1 auto; 1584 align-content: start; 1585 } 1586 1587 .notice-link-card { 1588 display: flex; 1589 align-items: center; 1590 justify-content: space-between; 1591 gap: 0.85rem; 1592 width: 100%; 1593 padding: 0.95rem 1rem; 1594 border-radius: 18px; 1595 background: #ffffff; 1596 border: 1px solid rgba(29, 78, 216, 0.12); 1597 color: #1e3a8a; 1598 font-weight: 600; 1599 line-height: 1.55; 1600 text-decoration: none; 1601 text-align: left; 1602 cursor: pointer; 1603 box-shadow: 0 10px 20px rgba(15, 23, 42, 0.06); 1604 transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease; 1605 } 1606 1607 .notice-link-card:hover, 1608 .notice-link-card:focus { 1609 transform: translateY(-2px); 1610 box-shadow: 0 14px 26px rgba(15, 23, 42, 0.1); 1611 border-color: rgba(29, 78, 216, 0.22); 1612 color: #1d4ed8; 1613 } 1614 1615 .notice-link-card strong { 1616 display: block; 1617 margin: 0; 1618 font-family: 'Poppins', sans-serif; 1619 font-size: 1rem; 1620 } 1621 1622 .notice-link-text { 1623 flex: 1 1 auto; 1624 min-width: 0;
1625 overflow-wrap: anywhere; 1626 } 1627 1628 .notice-link-meta { 1629 display: block; 1630 margin-top: 0.22rem; 1631 color: #64748b; 1632 font-size: 0.84rem; 1633 font-weight: 600; 1634 line-height: 1.4; 1635 } 1636 1637 .notice-link-attachment { 1638 width: 40px; 1639 height: 40px; 1640 display: inline-flex; 1641 align-items: center; 1642 justify-content: center; 1643 border-radius: 14px; 1644 background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%); 1645 color: var(--svc-blue); 1646 box-shadow: 0 10px 18px rgba(29, 78, 216, 0.12); 1647 flex: 0 0 auto; 1648 font-size: 1rem; 1649 } 1650 1651 .notice-vertical-slider { 1652 position: relative; 1653 height: 320px; 1654 flex: 1 1 auto; 1655 overflow: hidden; 1656 border-radius: 22px; 1657 background: linear-gradient(180deg, rgba(255, 255, 255, 0.75) 0%, rgba(231, 240, 255, 0.78) 100%); 1658 border: 1px solid rgba(29, 78, 216, 0.1); 1659 padding: 0.75rem; 1660 } 1661 1662 .notice-vertical-track { 1663 display: flex; 1664 flex-direction: column; 1665 gap: 0.85rem; 1666 animation: svcVerticalLoop 22s linear infinite; 1667 will-change: transform; 1668 } 1669 1670 .notice-vertical-group { 1671 display: grid; 1672 gap: 0.85rem; 1673 } 1674 1675 .notice-vertical-slider.is-static .notice-vertical-track { 1676 animation: none; 1677 } 1678 1679 .notice-modal .modal-content { 1680 border: 0; 1681 border-radius: 28px; 1682 overflow: hidden; 1683 box-shadow: 0 30px 60px rgba(15, 23, 42, 0.22); 1684 } 1685 1686 .notice-modal .modal-dialog { 1687 max-width: 760px; 1688 } 1689 1690 .notice-modal .modal-header { 1691 padding: 1.2rem 1.5rem; 1692 background: linear-gradient(135deg, #1d4ed8 0%, #2563eb 100%); 1693 border-bottom: 0; 1694 } 1695 1696 .notice-modal .modal-title { 1697 color: #ffffff; 1698 font-family: 'Poppins', sans-serif; 1699 font-weight: 700; 1700 } 1701 1702 .notice-modal .btn-close { 1703 filter: brightness(0) invert(1); 1704 opacity: 0.95; 1705 } 1706 1707 .notice-modal .modal-body { 1708 padding: 1.7rem 1.55rem 1.35rem; 1709 background: linear-gradient(180deg, #ffffff 0%, #eef4ff 100%); 1710 } 1711 1712 .notice-modal-tag { 1713 display: inline-flex; 1714 align-items: center; 1715 gap: 0.45rem; 1716 margin-bottom: 0.9rem; 1717 padding: 0.45rem 0.75rem; 1718 border-radius: 999px; 1719 background: rgba(29, 78, 216, 0.1); 1720 color: #1d4ed8; 1721 font-size: 0.88rem; 1722 font-weight: 700; 1723 text-transform: uppercase; 1724 letter-spacing: 0.04em; 1725 } 1726 1727 .notice-modal-summary { 1728 margin: 0; 1729 color: #334155; 1730 font-size: 1rem; 1731 line-height: 1.75; 1732 } 1733 1734 .notice-modal-meta { 1735 margin-top: 1rem; 1736 color: #475569; 1737 font-size: 0.92rem; 1738 } 1739 1740 .notice-modal-attachments { 1741 margin-top: 1.3rem; 1742 display: grid; 1743 gap: 0.75rem; 1744 } 1745 1746 .notice-modal-attachment { 1747 display: flex; 1748 align-items: center; 1749 justify-content: space-between; 1750 gap: 0.8rem; 1751 padding: 0.85rem 1rem; 1752 border-radius: 16px; 1753 background: #ffffff; 1754 border: 1px solid rgba(29, 78, 216, 0.12); 1755 box-shadow: 0 10px 20px rgba(15, 23, 42, 0.05); 1756 } 1757 1758 .notice-modal-attachment-name { 1759 color: #1e3a8a; 1760 font-weight: 600; 1761 line-height: 1.45; 1762 word-break: break-word; 1763 } 1764 1765 .notice-modal-attachment-link { 1766 display: inline-flex; 1767 align-items: center; 1768 gap: 0.45rem; 1769 color: #1d4ed8; 1770 font-weight: 600; 1771 text-decoration: none; 1772 white-space: nowrap; 1773 } 1774 1775 .notice-modal .modal-footer { 1776 padding: 1rem 1.5rem 1.4rem; 1777 background: linear-gradient(180deg, #f8fbff 0%, #eef4ff 100%); 1778 border-top: 0; 1779 gap: 0.75rem; 1780 } 1781 1782 .notice-modal-open { 1783 display: inline-flex; 1784 align-items: center; 1785 gap: 0.55rem; 1786 min-height: 46px; 1787 padding: 0.75rem 1.2rem; 1788 border-radius: 999px; 1789 background: linear-gradient(135deg, #1d4ed8 0%, #2563eb 100%); 1790 color: #ffffff !important; 1791 font-weight: 600; 1792 text-decoration: none; 1793 box-shadow: 0 14px 24px rgba(29, 78, 216, 0.18); 1794 } 1795 1796 .notice-vertical-slider:hover .notice-vertical-track { 1797 animation-play-state: paused; 1798 } 1799 1800 /* View All button inside notice boxes */ 1801 .notice-view-all-wrap { 1802 padding: 0.55rem 1rem 0.4rem; 1803 text-align: right; 1804 } 1805 .notice-view-all-btn { 1806 display: inline-flex; align-items: center; 1807 font-size: 0.78rem; font-weight: 600; text-decoration: none; 1808 color: #1d4ed8; background: #ffffff; 1809 padding: 0.3rem 0.9rem; border-radius: 999px; 1810 border: 1.5px solid #1d4ed8; 1811 transition: background 0.2s, color 0.2s; 1812 white-space: nowrap; 1813 } 1814 .notice-view-all-btn:hover { background: #1d4ed8; color: #ffffff; } 1815 1816 @media (prefers-reduced-motion: reduce) { 1817 .notice-vertical-track { 1818 animation: none; 1819 } 1820 } 1821 1822 @media (min-width: 992px) { 1823 .notice-board { 1824 flex-wrap: nowrap; 1825 } 1826 1827 .notice-board > [class*="col-"] { 1828 width: 33.333333%; 1829 } 1830 } 1831 1832 @keyframes svcVerticalLoop { 1833 0% { 1834 transform: translateY(0); 1835 } 1836 100% { 1837 transform: translateY(calc(-50% - 0.425rem)); 1838 } 1839 } 1840 1841 .service, 1842 .features, 1843 .country, 1844 .training, 1845 .contact { 1846 position: relative; 1847 } 1848 1849 .service-item, 1850 .country-item, 1851 .training-item, 1852 .office-item, 1853 .counter, 1854 .footer-item { 1855 height: 100%; 1856 } 1857 1858 .service-item, 1859 .feature-item, 1860 .country-item, 1861 .training-item, 1862 .office-item { 1863 border-radius: 24px; 1864 overflow: hidden; 1865 box-shadow: var(--svc-shadow); 1866 transition: transform 0.3s ease, box-shadow 0.3s ease; 1867 } 1868 1869 .service-item:hover, 1870 .feature-item:hover, 1871 .country-item:hover, 1872 .training-item:hover, 1873 .office-item:hover { 1874 transform: translateY(-6px); 1875 box-shadow: 0 24px 48px rgba(33, 37, 41, 0.14); 1876 } 1877 1878 .service .service-item .service-inner .service-img img, 1879 .training .training-item .training-inner img, 1880 .country .country-item img, 1881 .contact .office .office-item .office-img img { 1882 aspect-ratio: 4 / 3; 1883 object-fit: cover; 1884 } 1885 1886 .service .service-item .service-inner .service-title .service-title-name .bg-primary { 1887 margin-left: 1.25rem !important; 1888 margin-right: 1.25rem !important; 1889 background: linear-gradient(135deg, var(--svc-blue) 0%, #2563eb 100%) !important; 1890 box-shadow: 0 12px 28px rgba(29, 78, 216, 0.2); 1891 } 1892 1893 .service .service-item .service-inner .service-title .service-content { 1894 background: linear-gradient(180deg, rgba(29, 78, 216, 0.96) 0%, rgba(30, 58, 138, 0.95) 100%); 1895 } 1896 1897 .service .service-item .service-inner .service-title .service-content .btn, 1898 .feature-item .btn, 1899 .training-content .btn { 1900 white-space: normal; 1901 } 1902 1903 .counter { 1904 border: 1px solid rgba(29, 78, 216, 0.08); 1905 } 1906 1907 .counter .counter-content h3 { 1908 color: var(--svc-blue); 1909 font-size: 1.15rem; 1910 font-weight: 600; 1911 } 1912 1913 .feature-item { 1914 background: linear-gradient(180deg, #ffffff 0%, #eff6ff 100%); 1915 border: 1px solid var(--svc-line); 1916 } 1917 1918 .feature-item .feature-icon { 1919 width: 92px; 1920 height: 92px; 1921 margin: 0 auto 1.5rem; 1922 border-radius: 50%; 1923 display: flex; 1924 align-items: center; 1925 justify-content: center; 1926 background: rgba(29, 78, 216, 0.08); 1927 } 1928 1929 .feature-item h5 { 1930 line-height: 1.5; 1931 margin-bottom: 0; 1932 } 1933 1934 .dual-link-panels { 1935 display: grid; 1936 grid-template-columns: repeat(2, minmax(0, 1fr)); 1937 gap: 1.5rem; 1938 align-items: stretch; 1939 } 1940 1941 .link-panel { 1942 position: relative; 1943 height: 100%; 1944 padding: 1.5rem; 1945 border-radius: 32px; 1946 background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(248, 250, 252, 0.96) 100%);
1947 border: 1px solid rgba(148, 163, 184, 0.16); 1948 box-shadow: var(--svc-shadow); 1949 overflow: hidden; 1950 } 1951 1952 .link-panel-header { 1953 padding-bottom: 1rem; 1954 margin-bottom: 1.25rem; 1955 border-bottom: 1px solid rgba(148, 163, 184, 0.22); 1956 } 1957 1958 .link-panel-kicker { 1959 display: inline-flex; 1960 align-items: center; 1961 padding: 0.4rem 0.9rem; 1962 border-radius: 999px; 1963 background: var(--panel-kicker-bg, rgba(29, 78, 216, 0.1)); 1964 color: var(--panel-kicker-color, #1d4ed8); 1965 font-family: 'Poppins', sans-serif; 1966 font-size: 0.78rem; 1967 font-weight: 600; 1968 letter-spacing: 0.08em; 1969 text-transform: uppercase; 1970 } 1971 1972 .link-panel-title { 1973 color: #10213d; 1974 font-size: clamp(1.45rem, 2vw, 1.85rem); 1975 font-weight: 700; 1976 margin: 0.9rem 0 0.6rem; 1977 } 1978 1979 .link-panel-copy { 1980 color: #5b6677; 1981 font-size: 0.98rem; 1982 line-height: 1.7; 1983 margin: 0; 1984 } 1985 1986 .link-panel-grid { 1987 display: grid; 1988 grid-template-columns: repeat(4, minmax(0, 1fr)); 1989 gap: 1rem; 1990 } 1991 1992 .link-panel-item { 1993 display: flex; 1994 min-width: 0; 1995 } 1996 1997 .link-panel-link { 1998 width: 100%; 1999 min-height: 155px; 2000 display: flex; 2001 flex-direction: column; 2002 align-items: center; 2003 justify-content: center; 2004 gap: 0.85rem; 2005 padding: 1.2rem 0.8rem; 2006 border-radius: 24px; 2007 text-align: center; 2008 text-decoration: none; 2009 background: #ffffff; 2010 border: 1px solid rgba(148, 163, 184, 0.16); 2011 box-shadow: 0 14px 30px rgba(15, 23, 42, 0.08); 2012 transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease; 2013 min-width: 0; 2014 } 2015 2016 .link-panel-link:hover, 2017 .link-panel-link:focus { 2018 transform: translateY(-4px); 2019 box-shadow: 0 22px 42px rgba(15, 23, 42, 0.14); 2020 border-color: rgba(100, 116, 139, 0.24); 2021 } 2022 2023 .link-panel-icon { 2024 width: 74px; 2025 height: 74px; 2026 border-radius: 22px; 2027 display: inline-flex; 2028 align-items: center; 2029 justify-content: center; 2030 background: var(--item-icon-bg, rgba(219, 234, 254, 0.6)); 2031 border: 1px solid var(--item-icon-border, rgba(29, 78, 216, 0.12)); 2032 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.92); 2033 } 2034 2035 .link-panel-icon i { 2036 color: var(--item-icon-color, #1d4ed8); 2037 font-size: 1.9rem; 2038 font-weight: 700; 2039 } 2040 2041 .link-panel-label { 2042 color: var(--item-text-color, #1e3a8a); 2043 font-family: 'Poppins', sans-serif; 2044 font-size: 0.95rem; 2045 font-weight: 600; 2046 line-height: 1.35; 2047 margin: 0; 2048 max-width: 100%; 2049 overflow-wrap: anywhere; 2050 word-break: break-word; 2051 hyphens: auto; 2052 } 2053 2054 .link-panel--campus { 2055 --panel-accent: linear-gradient(180deg, #1d4ed8 0%, #0f766e 100%); 2056 --panel-kicker-bg: rgba(29, 78, 216, 0.1); 2057 --panel-kicker-color: #1d4ed8; 2058 --item-icon-bg: linear-gradient(135deg, rgba(219, 234, 254, 0.7) 0%, rgba(204, 251, 241, 0.7) 100%); 2059 --item-icon-border: rgba(29, 78, 216, 0.16); 2060 --item-icon-color: #1d4ed8; 2061 --item-text-color: #155e75; 2062 } 2063 2064 .link-panel--campus .link-panel-grid { 2065 grid-template-columns: repeat(4, minmax(0, 1fr)); 2066 } 2067 2068 .link-panel--quick { 2069 --panel-accent: linear-gradient(180deg, #f97316 0%, #dc2626 100%); 2070 --panel-kicker-bg: rgba(249, 115, 22, 0.12); 2071 --panel-kicker-color: #c2410c; 2072 --item-icon-bg: linear-gradient(135deg, rgba(255, 237, 213, 0.85) 0%, rgba(254, 226, 226, 0.75) 100%); 2073 --item-icon-border: rgba(249, 115, 22, 0.16); 2074 --item-icon-color: #ea580c; 2075 --item-text-color: #9a3412; 2076 } 2077 2078 /* Researchers / Alumni panels â each gets its own distinct panel 2079 background fill (not just an icon accent), so the two boxes 2080 read as visibly different from one another. */ 2081 .link-panel--research { 2082 --panel-kicker-bg: rgba(79, 70, 229, 0.12); 2083 --panel-kicker-color: #4338ca; 2084 --item-icon-bg: linear-gradient(135deg, rgba(224, 231, 255, 0.85) 0%, rgba(199, 210, 254, 0.7) 100%); 2085 --item-icon-border: rgba(79, 70, 229, 0.18); 2086 --item-icon-color: #4338ca; 2087 --item-text-color: #3730a3; 2088 background: linear-gradient(180deg, rgba(238, 242, 255, 0.95) 0%, rgba(255, 255, 255, 0.94) 100%); 2089 } 2090 2091 .link-panel--alumni { 2092 --panel-kicker-bg: rgba(217, 119, 6, 0.12); 2093 --panel-kicker-color: #b45309; 2094 --item-icon-bg: linear-gradient(135deg, rgba(254, 243, 199, 0.9) 0%, rgba(253, 230, 138, 0.7) 100%); 2095 --item-icon-border: rgba(217, 119, 6, 0.18); 2096 --item-icon-color: #b45309; 2097 --item-text-color: #92400e; 2098 background: linear-gradient(180deg, rgba(255, 251, 235, 0.95) 0%, rgba(255, 255, 255, 0.94) 100%); 2099 } 2100 2101 /* Single-destination feature body (icon + one CTA button) used by 2102 panels that link to just one page, instead of the multi-tile 2103 .link-panel-grid used by Campus Life / Quick Access. */ 2104 .link-panel-feature { 2105 display: flex; 2106 flex-direction: column; 2107 align-items: center; 2108 text-align: center; 2109 gap: 1.15rem; 2110 padding: 1rem 0.5rem 0.5rem; 2111 } 2112 2113 .link-panel-feature-icon { 2114 width: 96px; 2115 height: 96px; 2116 border-radius: 28px; 2117 display: inline-flex; 2118 align-items: center; 2119 justify-content: center; 2120 background: var(--item-icon-bg, rgba(219, 234, 254, 0.6)); 2121 border: 1px solid var(--item-icon-border, rgba(29, 78, 216, 0.12)); 2122 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.92); 2123 } 2124 2125 .link-panel-feature-icon i { 2126 color: var(--item-icon-color, #1d4ed8); 2127 font-size: 2.3rem; 2128 } 2129 2130 .link-panel-feature-btn { 2131 display: inline-flex; 2132 align-items: center; 2133 gap: 0.5rem; 2134 padding: 0.7rem 1.6rem; 2135 border-radius: 999px; 2136 background: var(--item-icon-color, #1d4ed8); 2137 color: #ffffff; 2138 font-family: 'Poppins', sans-serif; 2139 font-weight: 600; 2140 font-size: 0.92rem; 2141 text-decoration: none; 2142 box-shadow: 0 14px 28px rgba(15, 23, 42, 0.14); 2143 transition: transform 0.25s ease, box-shadow 0.25s ease; 2144 } 2145 2146 .link-panel-feature-btn:hover, 2147 .link-panel-feature-btn:focus { 2148 color: #ffffff; 2149 transform: translateY(-3px); 2150 box-shadow: 0 20px 36px rgba(15, 23, 42, 0.2); 2151 } 2152 2153 .link-panel-feature--compact { 2154 padding-top: 0.25rem; 2155 } 2156 2157 /* SVC Researchers spotlight â one large photo + caption at a time. */ 2158 .researcher-spotlight { 2159 margin-bottom: 0.5rem; 2160 } 2161 2162 .researcher-spotlight-carousel { 2163 border-radius: 26px; 2164 overflow: hidden; 2165 box-shadow: 0 18px 40px rgba(67, 56, 202, 0.18); 2166 } 2167 2168 .researcher-spotlight-card { 2169 position: relative; 2170 width: 100%; 2171 aspect-ratio: 3 / 4; 2172 max-height: 460px; 2173 background: linear-gradient(180deg, #eef2ff 0%, #e0e7ff 100%); 2174 } 2175 2176 .researcher-spotlight-photo { 2177 width: 100%; 2178 height: 100%; 2179 } 2180 2181 .researcher-spotlight-photo img { 2182 width: 100%; 2183 height: 100%; 2184 object-fit: cover; 2185 object-position: center top; 2186 display: block; 2187 } 2188 2189 .researcher-spotlight-caption { 2190 position: absolute; 2191 left: 0; 2192 right: 0; 2193 bottom: 0; 2194 padding: 2.1rem 1.5rem 1.6rem; 2195 background: linear-gradient(180deg, rgba(16, 21, 61, 0) 0%, rgba(16, 21, 61, 0.55) 42%, rgba(16, 21, 61, 0.94) 100%); 2196 color: #ffffff; 2197 text-align: center; 2198 } 2199 2200 .researcher-spotlight-pub { 2201 display: inline-block; 2202 max-width: 100%; 2203 margin-bottom: 0.65rem; 2204 padding: 0.32rem 0.9rem; 2205 border-radius: 999px; 2206 background: rgba(255, 255, 255, 0.16); 2207 border: 1px solid rgba(255, 255, 255, 0.28); 2208 font-family: 'Poppins', sans-serif; 2209 font-size: 0.66rem; 2210 font-weight: 600; 2211 letter-spacing: 0.05em; 2212 overflow: hidden; 2213 text-overflow: ellipsis; 2214 white-space: nowrap; 2215 } 2216 2217 .researcher-spotlight-name { 2218 font-family: 'Poppins', sans-serif; 2219 font-size: clamp(1.02rem, 1.6vw, 1.3rem); 2220 font-weight: 700; 2221 letter-spacing: 0.02em; 2222 margin-bottom: 0.3rem; 2223 } 2224 2225 .researcher-spotlight-desig { 2226 font-size: 0.82rem; 2227 font-weight: 600; 2228 letter-spacing: 0.04em; 2229 color: #c7d2fe; 2230 margin-bottom: 0.2rem; 2231 } 2232 2233 .researcher-spotlight-dept { 2234 font-size: 0.76rem; 2235 letter-spacing: 0.03em; 2236 color: rgba(255, 255, 255, 0.78); 2237 } 2238 2239 .researcher-spotlight-carousel .carousel-control-prev, 2240 .researcher-spotlight-carousel .carousel-control-next { 2241 width: 44px; 2242 height: 44px; 2243 top: calc(50% - 22px); 2244 margin: 0 0.85rem; 2245 border-radius: 50%; 2246 background: rgba(67, 56, 202, 0.55); 2247 opacity: 1; 2248 transition: background 0.25s ease, transform 0.25s ease; 2249 } 2250 2251 .researcher-spotlight-carousel .carousel-control-prev:hover, 2252 .researcher-spotlight-carousel .carousel-control-next:hover { 2253 background: rgba(67, 56, 202, 0.88); 2254 transform: translateY(-50%) scale(1.06); 2255 } 2256 2257 .researcher-spotlight-carousel .carousel-control-prev-icon, 2258 .researcher-spotlight-carousel .carousel-control-next-icon { 2259 width: 1.1rem; 2260 height: 1.1rem; 2261 } 2262 2263 .researcher-spotlight-indicators { 2264 position: absolute; 2265 bottom: 0.6rem; 2266 margin: 0; 2267 padding: 0; 2268 } 2269 2270 .researcher-spotlight-indicators [data-bs-target] { 2271 width: 7px; 2272 height: 7px; 2273 border-radius: 50%; 2274 background-color: rgba(255, 255, 255, 0.5); 2275 border: 0; 2276 opacity: 1; 2277 transition: width 0.25s ease, background-color 0.25s ease; 2278 } 2279 2280 .researcher-spotlight-indicators .active { 2281 background-color: #ffffff;
2282 width: 20px; 2283 border-radius: 999px; 2284 } 2285 2286 .showcase-split { 2287 display: grid; 2288 grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.88fr); 2289 gap: 1.25rem; 2290 align-items: stretch; 2291 } 2292 2293 .showcase-panel { 2294 height: 100%; 2295 padding: 1.35rem; 2296 border-radius: 32px; 2297 background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(245, 248, 252, 0.96) 100%); 2298 border: 1px solid rgba(148, 163, 184, 0.16); 2299 box-shadow: var(--svc-shadow); 2300 display: flex; 2301 flex-direction: column; 2302 } 2303 2304 .showcase-panel--initiatives { 2305 background: 2306 radial-gradient(circle at top right, rgba(37, 99, 235, 0.08), transparent 30%), 2307 linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(241, 245, 249, 0.96) 100%); 2308 } 2309 2310 .showcase-panel--resources { 2311 background: 2312 radial-gradient(circle at top left, rgba(14, 165, 233, 0.08), transparent 32%), 2313 linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(248, 250, 252, 0.96) 100%); 2314 } 2315 2316 .showcase-header { 2317 padding-bottom: 0.85rem; 2318 margin-bottom: 1rem; 2319 border-bottom: 1px solid rgba(148, 163, 184, 0.2); 2320 } 2321 2322 .showcase-kicker { 2323 display: inline-flex; 2324 align-items: center; 2325 padding: 0.38rem 0.85rem; 2326 border-radius: 999px; 2327 font-family: 'Poppins', sans-serif; 2328 font-size: 0.78rem; 2329 font-weight: 600; 2330 letter-spacing: 0.08em; 2331 text-transform: uppercase; 2332 } 2333 2334 .showcase-panel--initiatives .showcase-kicker { 2335 background: rgba(29, 78, 216, 0.1); 2336 color: #1d4ed8; 2337 } 2338 2339 .showcase-panel--resources .showcase-kicker { 2340 background: rgba(8, 145, 178, 0.12); 2341 color: #0f766e; 2342 } 2343 2344 .media-highlight-grid { 2345 display: grid; 2346 grid-template-columns: minmax(0, 3fr) minmax(0, 1fr); 2347 gap: 1.5rem; 2348 align-items: stretch; 2349 } 2350 2351 .media-highlight-card { 2352 height: 100%; 2353 padding: 1.4rem; 2354 border-radius: 30px; 2355 background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(244, 247, 251, 0.96) 100%); 2356 border: 1px solid rgba(148, 163, 184, 0.16); 2357 box-shadow: var(--svc-shadow); 2358 display: flex; 2359 flex-direction: column; 2360 min-width: 0; 2361 } 2362 2363 .media-highlight-card--tour { 2364 background: 2365 radial-gradient(circle at top right, rgba(59, 130, 246, 0.08), transparent 30%), 2366 linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(241, 245, 249, 0.96) 100%); 2367 } 2368 2369 .media-highlight-card--achiever { 2370 background: 2371 radial-gradient(circle at top left, rgba(245, 158, 11, 0.09), transparent 32%), 2372 linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 251, 235, 0.94) 100%); 2373 } 2374 2375 .media-highlight-header { 2376 display: flex; 2377 align-items: flex-start; 2378 justify-content: space-between; 2379 gap: 1rem; 2380 padding-bottom: 1rem; 2381 margin-bottom: 1rem; 2382 border-bottom: 1px solid rgba(148, 163, 184, 0.2); 2383 } 2384 2385 .media-highlight-header h2 { 2386 color: #10213d; 2387 font-size: clamp(1.35rem, 2vw, 1.8rem); 2388 font-weight: 700; 2389 margin: 0.25rem 0 0; 2390 } 2391 2392 .media-highlight-kicker { 2393 display: inline-flex; 2394 align-items: center; 2395 padding: 0.38rem 0.82rem; 2396 border-radius: 999px; 2397 font-family: 'Poppins', sans-serif; 2398 font-size: 0.76rem; 2399 font-weight: 600; 2400 letter-spacing: 0.08em; 2401 text-transform: uppercase; 2402 } 2403 2404 .media-highlight-card--tour .media-highlight-kicker { 2405 background: rgba(37, 99, 235, 0.1); 2406 color: #1d4ed8; 2407 } 2408 2409 .media-highlight-card--achiever .media-highlight-kicker { 2410 background: rgba(245, 158, 11, 0.12); 2411 color: #b45309; 2412 } 2413 2414 .media-highlight-icon { 2415 width: 56px; 2416 height: 56px; 2417 border-radius: 18px; 2418 display: inline-flex; 2419 align-items: center; 2420 justify-content: center; 2421 flex: 0 0 auto; 2422 } 2423 2424 .media-highlight-card--tour .media-highlight-icon { 2425 background: linear-gradient(135deg, rgba(219, 234, 254, 0.95) 0%, rgba(224, 242, 254, 0.92) 100%); 2426 color: #1d4ed8; 2427 } 2428 2429 .media-highlight-card--achiever .media-highlight-icon { 2430 background: linear-gradient(135deg, rgba(254, 243, 199, 0.95) 0%, rgba(255, 237, 213, 0.92) 100%); 2431 color: #c2410c; 2432 } 2433 2434 .media-highlight-icon i { 2435 font-size: 1.45rem; 2436 } 2437 2438 .media-highlight-body { 2439 flex: 1 1 auto; 2440 display: flex; 2441 min-width: 0; 2442 } 2443 2444 .media-highlight-empty, 2445 .media-highlight-content { 2446 width: 100%; 2447 min-height: 280px; 2448 border-radius: 24px;
2449 border: 1px dashed rgba(148, 163, 184, 0.28); 2450 background: rgba(255, 255, 255, 0.72); 2451 display: flex; 2452 align-items: center; 2453 justify-content: center; 2454 text-align: center; 2455 padding: 1.25rem; 2456 } 2457 2458 .media-highlight-empty-inner { 2459 max-width: 320px; 2460 } 2461 2462 .media-highlight-empty i { 2463 font-size: 2.5rem; 2464 margin-bottom: 0.85rem; 2465 } 2466 2467 .media-highlight-card--tour .media-highlight-empty i { 2468 color: #2563eb; 2469 } 2470 2471 .media-highlight-card--achiever .media-highlight-empty i { 2472 color: #d97706; 2473 } 2474 2475 .media-highlight-empty h3, 2476 .media-highlight-achiever-name { 2477 color: #10213d; 2478 font-size: 1.15rem; 2479 font-weight: 700; 2480 margin-bottom: 0.45rem; 2481 } 2482 2483 .media-highlight-empty p, 2484 .media-highlight-copy, 2485 .media-highlight-achiever-copy { 2486 color: #64748b; 2487 font-size: 0.95rem; 2488 line-height: 1.65; 2489 margin: 0; 2490 } 2491 2492 .media-highlight-content { 2493 padding: 0; 2494 border-style: solid; 2495 overflow: hidden; 2496 align-items: stretch; 2497 } 2498 2499 .media-highlight-tour { 2500 display: grid; 2501 grid-template-columns: minmax(0, 1.45fr) minmax(0, 1fr); 2502 width: 100%; 2503 min-width: 0; 2504 align-items: stretch; 2505 } 2506 2507 .media-highlight-tour-video { 2508 position: relative; 2509 min-height: 320px; 2510 background: #0f172a; 2511 height: 100%; 2512 overflow: hidden; 2513 } 2514 2515 .media-highlight-tour-video iframe { 2516 width: 100%; 2517 height: 100%; 2518 border: 0; 2519 display: block; 2520 } 2521 2522 .media-highlight-tour-image img { 2523 width: 100%; 2524 height: 100%; 2525 object-fit: cover; 2526 display: block; 2527 } 2528 2529 .media-highlight-tour-copy { 2530 padding: 1.25rem; 2531 display: flex; 2532 flex-direction: column; 2533 justify-content: center; 2534 gap: 0.8rem; 2535 min-width: 0; 2536 } 2537 2538 .media-highlight-title { 2539 color: #10213d; 2540 font-size: 1.2rem; 2541 font-weight: 700; 2542 margin: 0; 2543 } 2544 2545 .media-highlight-link { 2546 display: inline-flex; 2547 align-items: center; 2548 gap: 0.45rem; 2549 color: #1d4ed8; 2550 font-weight: 600; 2551 text-decoration: none; 2552 } 2553 2554 .media-highlight-achiever { 2555 display: flex; 2556 flex-direction: column; 2557 width: 100%; 2558 min-width: 0; 2559 } 2560 2561 .media-highlight-achiever-carousel { 2562 width: 100%; 2563 } 2564 2565 .media-highlight-achiever-image { 2566 aspect-ratio: 4 / 3; 2567 min-height: 320px; 2568 display: flex; 2569 align-items: center; 2570 justify-content: center; 2571 overflow: hidden; 2572 background: linear-gradient(180deg, #f8fafc 0%, #eef2ff 100%); 2573 padding: 0.2rem; 2574 } 2575 2576 .media-highlight-achiever-image img { 2577 width: 100%; 2578 height: 100%; 2579 object-fit: contain; 2580 object-position: center top; 2581 display: block; 2582 } 2583 2584 .media-highlight-achiever-copy-wrap { 2585 padding: 1rem 1rem 1.15rem; 2586 } 2587 2588 .media-highlight-achiever-carousel .carousel-control-prev, 2589 .media-highlight-achiever-carousel .carousel-control-next { 2590 width: 44px; 2591 height: 44px; 2592 top: calc(50% - 22px); 2593 margin: 0 0.75rem; 2594 border-radius: 50%; 2595 background: rgba(15, 23, 42, 0.6); 2596 } 2597 2598 .media-highlight-achiever-carousel .carousel-control-prev-icon, 2599 .media-highlight-achiever-carousel .carousel-control-next-icon { 2600 width: 1.2rem; 2601 height: 1.2rem; 2602 } 2603 2604 .media-highlight-achiever-carousel .carousel-indicators { 2605 position: static; 2606 margin: 0; 2607 padding: 0 0 0.85rem; 2608 } 2609 2610 .media-highlight-achiever-carousel .carousel-indicators [data-bs-target] { 2611 background-color: #1d4ed8; 2612 } 2613 2614 .media-highlight-achiever-caption { 2615 padding: 0.8rem 1rem 0.55rem; 2616 text-align: center; 2617 } 2618 2619 .showcase-title { 2620 color: #10213d; 2621 font-size: clamp(1.3rem, 1.8vw, 1.7rem); 2622 font-weight: 700; 2623 margin: 0.75rem 0 0.45rem; 2624 } 2625 2626 .showcase-copy { 2627 color: #5b6677; 2628 font-size: 0.93rem; 2629 line-height: 1.6; 2630 margin: 0; 2631 } 2632 2633 .initiative-grid { 2634 display: grid; 2635 grid-template-columns: repeat(2, minmax(0, 1fr)); 2636 gap: 0.85rem; 2637 flex: 1 1 auto; 2638 } 2639 2640 .initiative-card, 2641 .resource-card { 2642 display: block; 2643 height: 100%; 2644 text-decoration: none; 2645 } 2646 2647 .initiative-card { 2648 position: relative; 2649 min-height: 172px; 2650 border-radius: 26px; 2651 overflow: hidden; 2652 box-shadow: 0 18px 36px rgba(15, 23, 42, 0.12); 2653 } 2654 2655 .initiative-card img { 2656 width: 100%; 2657 height: 100%; 2658 object-fit: cover; 2659 transition: transform 0.35s ease; 2660 } 2661 2662 .initiative-card:hover img, 2663 .initiative-card:focus img { 2664 transform: scale(1.04); 2665 } 2666 2667 .initiative-card::after { 2668 content: ""; 2669 position: absolute; 2670 inset: 0; 2671 background: linear-gradient(180deg, rgba(15, 23, 42, 0.02) 18%, rgba(15, 23, 42, 0.82) 100%); 2672 } 2673 2674 .initiative-card-body { 2675 position: absolute; 2676 left: 0; 2677 right: 0; 2678 bottom: 0; 2679 z-index: 1; 2680 padding: 0.9rem 1rem 1rem; 2681 color: #ffffff; 2682 } 2683 2684 .initiative-card-badge { 2685 display: inline-flex; 2686 align-items: center; 2687 padding: 0.28rem 0.65rem; 2688 border-radius: 999px; 2689 background: rgba(255, 255, 255, 0.16); 2690 -webkit-backdrop-filter: blur(8px); 2691 backdrop-filter: blur(8px); 2692 font-size: 0.7rem; 2693 font-weight: 600; 2694 letter-spacing: 0.05em; 2695 text-transform: uppercase; 2696 } 2697 2698 .initiative-card-title { 2699 color: #ffffff; 2700 font-size: 1.08rem; 2701 font-weight: 700; 2702 margin: 0.65rem 0 0; 2703 } 2704 2705 .resource-stack { 2706 display: grid; 2707 gap: 0.85rem; 2708 grid-auto-rows: 1fr; 2709 flex: 1 1 auto; 2710 } 2711 2712 .resource-card { 2713 padding: 0.85rem; 2714 border-radius: 26px; 2715 background: #ffffff;
2716 border: 1px solid rgba(148, 163, 184, 0.16); 2717 box-shadow: 0 14px 30px rgba(15, 23, 42, 0.08); 2718 transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease; 2719 display: flex; 2720 flex-direction: column; 2721 } 2722 2723 .resource-card:hover, 2724 .resource-card:focus { 2725 transform: translateY(-4px); 2726 box-shadow: 0 22px 42px rgba(15, 23, 42, 0.14); 2727 border-color: rgba(14, 165, 233, 0.24); 2728 } 2729 2730 .resource-image { 2731 border-radius: 20px; 2732 overflow: hidden; 2733 margin-bottom: 0.8rem; 2734 } 2735 2736 .resource-image img { 2737 width: 100%; 2738 aspect-ratio: 2.9 / 1; 2739 object-fit: cover; 2740 } 2741 2742 .resource-title { 2743 color: #10213d; 2744 font-size: 1.02rem; 2745 font-weight: 700; 2746 margin-bottom: 0.3rem; 2747 } 2748 2749 .resource-meta { 2750 color: #0f766e; 2751 font-size: 0.88rem; 2752 font-weight: 600; 2753 margin-bottom: 0.2rem; 2754 } 2755 2756 .resource-subtext { 2757 color: #64748b; 2758 font-size: 0.88rem; 2759 margin: 0; 2760 } 2761 2762 .country .country-item .country-name { 2763 background: linear-gradient(135deg, rgba(29, 78, 216, 0.94) 0%, rgba(30, 58, 138, 0.88) 100%); 2764 } 2765 2766 .training { 2767 background: 2768 linear-gradient(180deg, rgba(255, 252, 248, 0.9) 0%, rgba(243, 247, 251, 0.92) 100%); 2769 } 2770 2771 .training .training-item .training-content { 2772 background: linear-gradient(180deg, rgba(29, 78, 216, 0.94) 0%, rgba(30, 58, 138, 0.96) 100%) !important; 2773 } 2774 2775 .contact .office .office-item { 2776 background: linear-gradient(180deg, #ffffff 0%, #f4f8ff 100%); 2777 border: 1px solid var(--svc-line); 2778 } 2779 2780 .footer { 2781 background: 2782 linear-gradient(135deg, rgba(43, 16, 16, 0.95) 0%, rgba(0, 58, 102, 0.95) 100%); 2783 } 2784 2785 .footer-counter { 2786 max-width: 100%; 2787 height: auto; 2788 } 2789 2790 @media (hover: none), (max-width: 991.98px) { 2791 .service .service-item .service-inner .service-title .service-content, 2792 .training .training-item .training-content { 2793 position: static; 2794 opacity: 1; 2795 bottom: auto; 2796 margin: 1rem 0 0; 2797 } 2798 2799 .service .service-item .service-inner .service-title .service-title-name, 2800 .training .training-item .training-inner .training-title-name { 2801 position: static; 2802 height: auto; 2803 background: var(--bs-primary); 2804 margin-top: 1rem; 2805 } 2806 2807 .service .service-item:hover .service-inner .service-title .service-title-name, 2808 .training .training-item:hover .training-inner .training-title-name a { 2809 opacity: 1; 2810 } 2811 } 2812 2813 @media (max-width: 991.98px) { 2814 .carousel-header, 2815 .carousel-header .hero-carousel, 2816 .carousel-header .carousel-inner, 2817 .carousel-header .carousel-inner .carousel-item { 2818 height: 320px !important; 2819 min-height: 320px !important; 2820 } 2821 2822 .top-links-wrap, 2823 .brand-cluster, 2824 .brand-actions { 2825 justify-content: center; 2826 } 2827 2828 .top-links-wrap { 2829 flex-wrap: wrap; 2830 } 2831 2832 .top-links-primary, 2833 .top-links-translate { 2834 width: 100%; 2835 flex: 1 1 100%; 2836 } 2837 2838 .dual-link-panels { 2839 grid-template-columns: 1fr; 2840 } 2841 2842 .link-panel-grid { 2843 grid-template-columns: repeat(3, minmax(0, 1fr)); 2844 } 2845 2846 .link-panel--campus .link-panel-grid, 2847 .link-panel--quick .link-panel-grid { 2848 grid-template-columns: repeat(3, minmax(0, 1fr)); 2849 } 2850 2851 .showcase-split { 2852 grid-template-columns: 1fr; 2853 } 2854 2855 .media-highlight-grid { 2856 grid-template-columns: 1fr; 2857 } 2858 2859 .media-highlight-tour { 2860 grid-template-columns: 1fr; 2861 } 2862 2863 .media-highlight-tour-video iframe { 2864 min-height: 220px; 2865 } 2866 2867 .top-links-list, 2868 .translate-wrap { 2869 justify-content: center; 2870 } 2871 2872 .translate-wrap #google_translate_element { 2873 min-width: 180px; 2874 } 2875 2876 #google_translate_element .goog-te-gadget { 2877 display: flex !important; 2878 flex-direction: column; 2879 align-items: center; 2880 justify-content: center; 2881 gap: 0.2rem; 2882 white-space: normal; 2883 text-align: center; 2884 } 2885 2886 #google_translate_element .goog-te-gadget > span { 2887 display: block; 2888 width: 100%; 2889 line-height: 1.3 !important; 2890 } 2891 2892 .section-shell::before { 2893 inset: 18px 0; 2894 border-radius: 24px; 2895 } 2896 2897 .navbar-light .navbar-nav .nav-link { 2898 margin-right: 0; 2899 padding: 0.75rem 0; 2900 } 2901 2902 .navbar { 2903 min-height: auto; 2904 } 2905 2906 #navbarCollapse { 2907 margin-top: 1rem; 2908 padding: 1rem; 2909 border-radius: 22px; 2910 background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(250, 244, 239, 0.98) 100%); 2911 border: 1px solid rgba(29, 78, 216, 0.09); 2912 box-shadow: 0 20px 40px rgba(15, 23, 42, 0.1); 2913 } 2914 2915 .navbar-brand { 2916 width: auto; 2917 flex: 0 0 auto; 2918 overflow: visible; 2919 } 2920 2921 .navbar-menu-wrap, 2922 .navbar-login-wrap { 2923 width: 100%; 2924 } 2925 2926 .navbar-login-wrap { 2927 flex: 0 0 auto; 2928 flex-direction: column; 2929 align-items: center; 2930 gap: 0.65rem; 2931 margin-top: 0.75rem; 2932 text-align: center; 2933 } 2934 2935 .navbar-login-btn { 2936 width: 100%; 2937 max-width: 280px; 2938 white-space: nowrap; 2939 } 2940 2941 .navbar-light .navbar-nav .nav-link, 2942 .navbar-light .navbar-nav .dropdown-item { 2943 font-size: 0.98rem; 2944 } 2945 2946 .navbar-light .navbar-nav .nav-link { 2947 min-height: 48px; 2948 display: flex; 2949 align-items: center; 2950 justify-content: flex-start; 2951 gap: 0.6rem; 2952 padding: 0.9rem 0.25rem; 2953 border-bottom: 1px solid rgba(29, 78, 216, 0.08); 2954 } 2955 2956 .navbar-light .navbar-nav .nav-item:last-child > .nav-link, 2957 .navbar-light .navbar-nav > .nav-link:last-child { 2958 border-bottom: 0; 2959 } 2960 2961 .navbar-light .navbar-nav .dropdown-menu { 2962 position: static !important; 2963 inset: auto !important; 2964 transform: none !important; 2965 display: none; 2966 margin: 0.35rem 0 0.85rem; 2967 padding: 0.35rem; 2968 background: rgba(29, 78, 216, 0.03); 2969 box-shadow: none; 2970 width: 100%; 2971 min-width: 100%; 2972 max-width: 100%; 2973 } 2974 2975 .navbar-light .navbar-nav .dropdown-menu.show { 2976 display: block !important; 2977 } 2978 2979 .navbar .dropdown-menu { 2980 border: 0; 2981 box-shadow: none; 2982 padding-top: 0; 2983 } 2984 2985 .carousel-header .carousel-control-prev, 2986 .carousel-header .carousel-control-next { 2987 width: 56px; 2988 height: 56px; 2989 } 2990 2991 .notice-vertical-slider { 2992 height: 280px; 2993 } 2994 } 2995 2996 @media (max-width: 767.98px) { 2997 .home-brand-wrap { 2998 padding-left: 0.85rem; 2999 padding-right: 0.85rem; 3000 } 3001 3002 .top-links-bar { 3003 padding-right: 0.85rem; 3004 } 3005 3006 .top-links-wrap { 3007 gap: 0.75rem; 3008 } 3009 3010 .top-links-list { 3011 justify-content: center; 3012 } 3013 3014 .top-links-list a { 3015 width: 165px; 3016 padding: 0 0.8rem; 3017 font-size: 0.8rem; 3018 } 3019 3020 .top-links-list a + a { 3021 padding-left: calc(0.8rem + 14px); 3022 } 3023 3024 .container.py-5, 3025 .container-fluid.py-5, 3026 .container.pt-5, 3027 .container-fluid.pt-5, 3028 .container.pb-5, 3029 .container-fluid.pb-5 { 3030 padding-top: 2.5rem !important; 3031 padding-bottom: 2.5rem !important; 3032 } 3033 3034 .row.g-5 { 3035 --bs-gutter-y: 1.75rem; 3036 } 3037 3038 .row.g-4 { 3039 --bs-gutter-y: 1.25rem; 3040 } 3041 3042 .brand-logo-wide, 3043 .brand-logo-accent { 3044 width: 108px; 3045 height: 66px; 3046 } 3047 3048 .brand-logo-square { 3049 width: 66px; 3050 height: 66px; 3051 } 3052 3053 .brand-audio { 3054 width: 100%; 3055 } 3056 3057 .principal-contact { 3058 letter-spacing: 0.4px; 3059 font-size: 1rem; 3060 } 3061 3062 .section-title { 3063 margin-bottom: 2rem !important; 3064 } 3065 3066 .section-title .display-5 { 3067 font-size: 1.7rem; 3068 } 3069 3070 .section-title .section-copy { 3071 font-size: 0.95rem; 3072 line-height: 1.65; 3073 } 3074 3075 .service .service-item .service-inner .service-title .service-title-name .bg-primary { 3076 margin-left: 0.75rem !important; 3077 margin-right: 0.75rem !important; 3078 padding: 0.85rem !important; 3079 } 3080 3081 .service .service-item .service-inner .service-title .service-content { 3082 margin-top: 0.75rem; 3083 padding-bottom: 1.25rem !important; 3084 } 3085 3086 .feature-item, 3087 .office-item { 3088 padding: 1.25rem !important; 3089 } 3090 3091 .link-panel { 3092 padding: 1.2rem; 3093 border-radius: 26px; 3094 } 3095 3096 .link-panel-grid { 3097 grid-template-columns: repeat(2, minmax(0, 1fr)); 3098 gap: 0.85rem; 3099 } 3100 3101 .link-panel--campus .link-panel-grid, 3102 .link-panel--quick .link-panel-grid { 3103 grid-template-columns: repeat(2, minmax(0, 1fr)); 3104 } 3105 3106 .link-panel-link { 3107 min-height: 138px; 3108 padding: 1rem 0.7rem; 3109 } 3110 3111 .link-panel-icon { 3112 width: 66px; 3113 height: 66px; 3114 } 3115 3116 .link-panel-label { 3117 font-size: 0.9rem; 3118 } 3119 3120 .showcase-panel { 3121 padding: 1.2rem; 3122 border-radius: 26px; 3123 } 3124 3125 .translate-wrap { 3126 width: 100%; 3127 } 3128 3129 .translate-wrap #google_translate_element { 3130 width: 100%; 3131 min-width: 0; 3132 } 3133 3134 .media-highlight-card { 3135 padding: 1.2rem; 3136 border-radius: 26px; 3137 } 3138 3139 .media-highlight-empty, 3140 .media-highlight-content { 3141 min-height: 220px; 3142 } 3143 3144 .initiative-grid { 3145 grid-template-columns: 1fr; 3146 } 3147 3148 .initiative-card { 3149 min-height: 168px; 3150 } 3151 3152 .media-highlight-header { 3153 gap: 0.75rem; 3154 } 3155 3156 .media-highlight-header h2 { 3157 font-size: 1.35rem; 3158 } 3159 3160 .country .country-item .country-name a.fs-4, 3161 .training .training-item .training-inner .training-title-name a { 3162 font-size: 1.15rem !important; 3163 } 3164 3165 .principal-photo { 3166 min-height: 260px; 3167 } 3168 3169 .principal-photo-card { 3170 padding: 10px; 3171 border-radius: 24px; 3172 } 3173 3174 .principal-content-panel { 3175 padding: 1.35rem 1.15rem; 3176 border-radius: 26px; 3177 } 3178 3179 .principal-content-grid { 3180 --bs-gutter-x: 1.25rem; 3181 --bs-gutter-y: 1.25rem; 3182 } 3183 3184 .principal-caption { 3185 left: 18px; 3186 right: 18px; 3187 bottom: 16px; 3188 padding: 0.75rem 0.95rem; 3189 border-radius: 14px; 3190 font-size: 0.92rem; 3191 } 3192 3193 .home-stat-card { 3194 padding: 1.25rem 1rem; 3195 border-radius: 20px; 3196 } 3197 3198 .home-stat-icon { 3199 width: 72px; 3200 height: 72px; 3201 border-radius: 20px; 3202 } 3203 3204 .home-stat-icon i { 3205 font-size: 1.65rem; 3206 } 3207 3208 .section-separator-vertical { 3209 display: none; 3210 } 3211 3212 .principal-side-stats { 3213 margin-top: 0.5rem; 3214 } 3215 3216 .notice-box { 3217 padding: 1.1rem; 3218 border-radius: 22px; 3219 } 3220 3221 .notice-box-header { 3222 align-items: flex-start; 3223 } 3224 3225 .section-separator { 3226 margin-top: 2rem; 3227 gap: 0.75rem; 3228 } 3229 3230 .section-separator-badge { 3231 width: 54px; 3232 height: 54px; 3233 font-size: 1.15rem; 3234 } 3235 3236 .footer .footer-item a:hover { 3237 letter-spacing: 0; 3238 } 3239 3240 .back-to-top { 3241 right: 15px; 3242 bottom: 15px; 3243 } 3244 } 3245 3246 @media (max-width: 479.98px) { 3247 .media-highlight-card { 3248 padding: 1rem; 3249 } 3250 3251 .media-highlight-empty, 3252
3252 .media-highlight-content { 3253 min-height: 190px; 3254 border-radius: 20px; 3255 } 3256 3257 .media-highlight-icon { 3258 width: 48px; 3259 height: 48px; 3260 border-radius: 15px; 3261 } 3262 3263 .media-highlight-icon i { 3264 font-size: 1.2rem; 3265 } 3266 3267 .media-highlight-header h2 { 3268 font-size: 1.2rem; 3269 } 3270 3271 .media-highlight-tour-video iframe { 3272 min-height: 190px; 3273 } 3274 3275 .link-panel-grid, 3276 .link-panel--campus .link-panel-grid, 3277 .link-panel--quick .link-panel-grid { 3278 grid-template-columns: repeat(2, minmax(0, 1fr)); 3279 gap: 0.75rem; 3280 } 3281 3282 .link-panel-link { 3283 min-height: 128px; 3284 padding: 0.9rem 0.6rem; 3285 } 3286 3287 .link-panel-icon { 3288 width: 58px; 3289 height: 58px; 3290 } 3291 3292 .link-panel-icon i { 3293 font-size: 1.55rem; 3294 } 3295 3296 .link-panel-label { 3297 font-size: 0.82rem; 3298 line-height: 1.25; 3299 } 3300 } 3301 3302 @media (max-width: 575.98px) { 3303 .carousel-header, 3304 .carousel-header .hero-carousel, 3305 .carousel-header .carousel-inner, 3306 .carousel-header .carousel-inner .carousel-item { 3307 height: 220px !important; 3308 min-height: 220px !important; 3309 } 3310 3311 .navbar.navbar-light { 3312 padding-left: 1rem !important; 3313 padding-right: 1rem !important; 3314 } 3315 3316 .navbar-toggler { 3317 padding: 0.48rem 0.72rem; 3318 } 3319 3320 #navbarCollapse { 3321 padding: 0.85rem 0.9rem; 3322 border-radius: 18px; 3323 } 3324 3325 .navbar-login-btn { 3326 min-height: 40px; 3327 padding: 0.5rem 1.1rem; 3328 white-space: nowrap; 3329 } 3330 3331 .translate-wrap { 3332 width: 100%; 3333 border-radius: 22px; 3334 padding: 0.45rem 0.6rem; 3335 } 3336 3337 .translate-wrap #google_translate_element { 3338 min-width: 0; 3339 width: 100%; 3340 } 3341 3342 #google_translate_element .goog-te-gadget-simple { 3343 width: 100%; 3344 justify-content: center; 3345 } 3346 3347 .navbar-light .navbar-nav .nav-link { 3348 padding: 0.82rem 0.15rem; 3349 font-size: 0.95rem; 3350 } 3351 3352 .carousel-header .carousel-inner .carousel-item { 3353 min-height: 220px; 3354 height: 220px; 3355 } 3356 3357 .notice-vertical-slider { 3358 height: 250px; 3359 } 3360 3361 .carousel-header + .section-shell-full { 3362 margin-top: 14px; 3363 } 3364 3365 .carousel-header + .section-shell-full::after { 3366 top: -14px; 3367 height: 14px; 3368 } 3369 3370 .carousel-header::after { 3371 height: 72px; 3372 } 3373 3374 .carousel-header .carousel-control-prev, 3375 .carousel-header .carousel-control-next { 3376 width: 48px; 3377 height: 48px; 3378 top: 50%; 3379 bottom: auto; 3380 transform: translateY(-50%); 3381 } 3382 3383 .carousel-header .carousel-control-prev-icon, 3384 .carousel-header .carousel-control-next-icon { 3385 width: 2.4rem; 3386 height: 2.4rem; 3387 margin: 0 !important; 3388 } 3389 3390 .carousel-header .carousel-control-prev { 3391 left: 0.75rem; 3392 } 3393 3394 .carousel-header .carousel-control-next { 3395 right: 0.75rem; 3396 } 3397 3398 .carousel-header .carousel-indicators { 3399 justify-content: center; 3400 margin-bottom: 0.55rem; 3401 padding: 0 3.5rem; 3402 } 3403 } 3404 3405 /* Extended navigation: nested dropdown submenus (Link Master driven). 3406 The sub-sub-links container opens beside (adjacent to, to the 3407 right of) its parent sub-link, not below it. This used to get 3408 clipped â the sub-links container it's anchored inside had 3409 overflow-y: auto for long lists, and per the CSS overflow spec 3410 that forces overflow-x to auto as well, clipping (and adding a 3411 scrollbar for) anything positioned outside its right edge. Fixed 3412 above: a .dropdown-menu that itself contains a .dropdown-submenu 3413 now stays overflow: visible, so the flyout can render outside 3414 it without being clipped or triggering a horizontal scrollbar. 3415 JS in main_navigation.blade.php still nudges/caps it if it 3416 would overflow the viewport edges. */ 3417 .navbar-light .navbar-nav .dropdown-submenu { 3418 position: relative; 3419 } 3420 3421 .navbar-light .navbar-nav .dropdown-submenu > .dropdown-item.dropdown-toggle::after { 3422 margin-left: auto; 3423 transform: rotate(-90deg); 3424 } 3425 3426 .navbar-light .navbar-nav .dropdown-submenu > .dropdown-menu { 3427 position: absolute; 3428 top: 0; 3429 left: 100%; 3430 margin-top: 0; 3431 z-index: 1050; 3432 display: none; 3433 max-height: calc(100vh - 110px); 3434 overflow-y: auto; 3435 } 3436 3437 @media (min-width: 992px) { 3438 /* :hover keeps the instant/direct case working with no JS 3439 dependency; .show is toggled by JS with a short close-delay 3440 (see main_navigation.blade.php) so moving the mouse from a 3441 sub-link down into its sub-sub panel doesn't prematurely 3442 close things over a tiny gap or path wobble. */ 3443 .navbar-light .navbar-nav .dropdown-submenu:hover > .dropdown-menu, 3444 .navbar-light .navbar-nav .dropdown-submenu.show > .dropdown-menu { 3445 display: block !important; 3446 } 3447 } 3448 3449 .homepage-nav-search { 3450 position: relative; 3451 width: min(100%, 22rem); 3452 } 3453 3454 .homepage-search-shell { 3455 display: flex; 3456 align-items: center; 3457 gap: 0.6rem; 3458 min-height: 44px; 3459 padding: 0.3rem 0.4rem 0.3rem 0.9rem; 3460 border-radius: 999px; 3461 background: var(--svc-surface-soft); 3462 border: 1px solid var(--svc-line); 3463 } 3464 3465 .homepage-search-input { 3466 flex: 1 1 auto; 3467 min-width: 0; 3468 border: 0; 3469 background: transparent; 3470 color: var(--svc-ink); 3471 font-size: 0.92rem; 3472 outline: none; 3473 } 3474 3475 .homepage-search-icon { 3476 color: var(--svc-blue); 3477 } 3478 3479 .homepage-search-button { 3480 border: 0; 3481 border-radius: 999px; 3482 padding: 0.55rem 1rem; 3483 background: var(--svc-blue); 3484 color: #ffffff; 3485 font-size: 0.8rem; 3486 font-weight: 700; 3487 } 3488 3489 .homepage-voice-btn { 3490 position: relative; 3491 border: 0; 3492 border-radius: 50%; 3493 width: 34px; 3494 height: 34px; 3495 background: transparent; 3496 color: var(--svc-blue); 3497 font-size: 0.95rem; 3498 cursor: pointer; 3499 display: flex; 3500 align-items: center; 3501 justify-content: center; 3502 flex-shrink: 0; 3503 padding: 0; 3504 transition: background 0.15s, color 0.15s; 3505 } 3506 3507 .homepage-voice-btn:hover { 3508 background: rgba(29, 78, 216, 0.12); 3509 } 3510 3511 .homepage-voice-btn.is-listening { 3512 color: #dc2626; 3513 background: rgba(220, 38, 38, 0.1); 3514 animation: svc-mic-pulse 1.4s ease-out infinite; 3515 } 3516 3517 /* Swap the static mic glyph for an animated "I'm listening" equalizer 3518 while active, so the button visibly reacts instead of just pulsing. */ 3519 .homepage-voice-btn.is-listening .fa-microphone { 3520 display: none; 3521 } 3522 3523 .homepage-voice-btn .voice-listening-bars { 3524 display: none; 3525 align-items: flex-end; 3526 justify-content: center; 3527 gap: 2.5px; 3528 height: 16px; 3529 } 3530 3531 .homepage-voice-btn.is-listening .voice-listening-bars { 3532 display: flex; 3533 } 3534 3535 .homepage-voice-btn .voice-listening-bars span { 3536 display: block; 3537 width: 3px; 3538 height: 4px; 3539 border-radius: 2px; 3540 background: #dc2626; 3541 animation: svc-voice-bar 0.9s ease-in-out infinite; 3542 } 3543 3544 .homepage-voice-btn .voice-listening-bars span:nth-child(1) { animation-delay: 0s; } 3545 .homepage-voice-btn .voice-listening-bars span:nth-child(2) { animation-delay: 0.15s; } 3546 .homepage-voice-btn .voice-listening-bars span:nth-child(3) { animation-delay: 0.3s; } 3547 .homepage-voice-btn .voice-listening-bars span:nth-child(4) { animation-delay: 0.45s; } 3548 3549 @keyframes svc-voice-bar { 3550 0%, 100% { height: 4px; } 3551 50% { height: 16px; } 3552 } 3553 3554 @keyframes svc-mic-pulse { 3555 0% { 3556 box-shadow: 0 0 0 0 rgba(220, 38, 38, 0.45); 3557 } 3558 70% { 3559 box-shadow: 0 0 0 10px rgba(220, 38, 38, 0); 3560 } 3561 100% { 3562 box-shadow: 0 0 0 0 rgba(220, 38, 38, 0); 3563 } 3564 } 3565 3566 .homepage-search-dropdown { 3567 position: absolute; 3568 top: calc(100% + 0.5rem); 3569 /* Anchored to the right edge (not the left) of the search box, 3570 so it expands back into the page instead of off the right 3571 edge of the viewport â the search box itself sits near the 3572 right side of the header. */ 3573 right: 0; 3574 width: min(26rem, 92vw); 3575 max-height: min(60vh, 28rem); 3576 overflow-y: auto; 3577 overflow-x: hidden; 3578 padding: 0.6rem; 3579 border-radius: 1.1rem; 3580 background: #ffffff; 3581 border: 1px solid var(--svc-line); 3582 box-shadow: var(--svc-shadow); 3583 z-index: 1080; 3584 } 3585 3586 .homepage-search-results-list { 3587 display: grid; 3588 gap: 0.5rem; 3589 } 3590 3591 .homepage-search-result { 3592 display: block; 3593 padding: 0.75rem 0.85rem; 3594 border-radius: 0.85rem; 3595 text-decoration: none; 3596 background: var(--svc-surface-soft); 3597 border: 1px solid var(--svc-line); 3598 } 3599 3600 .homepage-search-result:hover, 3601 .homepage-search-result.is-active { 3602 background: #ffffff; 3603 border-color: rgba(29, 78, 216, 0.3); 3604 } 3605 3606 .homepage-search-result-path { 3607 display: block; 3608 color: #1e3a8a; 3609 font-size: 0.82rem; 3610 font-weight: 700;
3611 overflow-wrap: anywhere; 3612 } 3613 3614 .homepage-search-result-preview { 3615 display: block; 3616 margin-top: 0.25rem; 3617 color: #334155; 3618 font-size: 0.86rem; 3619 overflow-wrap: anywhere; 3620 } 3621 3622 .homepage-search-status { 3623 padding: 0.9rem; 3624 border-radius: 0.85rem; 3625 color: #334155; 3626 font-size: 0.88rem; 3627 font-weight: 600; 3628 background: var(--svc-surface-soft); 3629 } 3630 3631 @media (max-width: 991.98px) { 3632 /* Mobile: sub links and sub-sub links stay a single vertical 3633 column that fills the collapsed nav width. Display itself is 3634 left alone here so Bootstrap's .show toggle (open/closed) 3635 still controls visibility â only the box's own sizing changes. */ 3636 .navbar-light .navbar-nav .dropdown-menu { 3637 width: 100%; 3638 min-width: 0; 3639 max-width: 100%; 3640 } 3641 3642 .navbar-light .navbar-nav .dropdown-submenu > .dropdown-menu { 3643 position: static; 3644 left: auto; 3645 z-index: auto; 3646 } 3647 3648 .homepage-nav-search { 3649 width: 100%; 3650 margin: 0; 3651 } 3652 3653 .homepage-search-dropdown { 3654 position: static; 3655 width: 100%; 3656 margin-top: 0.5rem; 3657 } 3658 } 3659 3660 /* Fixed social share bar â pinned in a horizontal row along the 3661 top of the viewport and stays put while the page content 3662 scrolls underneath it. Each tab drops down on load 3663 (staggered) and unfurls a label on hover. */ 3664 .social-fixed-rail { 3665 position: fixed; 3666 top: 0; 3667 left: 18px; 3668 z-index: 1030; 3669 display: flex; 3670 flex-direction: row; 3671 gap: 6px; 3672 } 3673 3674 .social-fixed-rail a { 3675 position: relative; 3676 display: flex; 3677 align-items: center; 3678 justify-content: flex-start; 3679 width: 46px; 3680 height: 46px; 3681 padding-left: 13px; 3682 border-radius: 0 0 12px 12px; 3683 color: #ffffff !important; 3684 font-size: 1.1rem; 3685 text-decoration: none; 3686 overflow: hidden; 3687 box-shadow: 0 4px 10px rgba(15, 23, 42, 0.2); 3688 opacity: 0; 3689 transform: translateY(-60px); 3690 transform-origin: top center; 3691 animation: svcSocialDropIn 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; 3692 animation-delay: calc(var(--i, 0) * 0.1s + 0.45s); 3693 transition: width 0.35s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.3s ease, filter 0.3s ease; 3694 } 3695 3696 .social-fixed-rail a i { 3697 position: relative; 3698 z-index: 1; 3699 flex: 0 0 20px; 3700 text-align: center; 3701 transition: transform 0.35s ease; 3702 } 3703 3704 .social-fixed-rail a .social-fixed-label { 3705 position: relative; 3706 z-index: 1; 3707 max-width: 0; 3708 overflow: hidden; 3709 white-space: nowrap; 3710 font-family: 'Poppins', sans-serif; 3711 font-size: 0.82rem; 3712 font-weight: 600; 3713 letter-spacing: 0.02em; 3714 transition: max-width 0.35s ease, margin 0.35s ease; 3715 } 3716 3717 .social-fixed-rail a:hover, 3718 .social-fixed-rail a:focus { 3719 width: 168px; 3720 box-shadow: 0 10px 18px rgba(15, 23, 42, 0.3); 3721 filter: brightness(1.08); 3722 color: #ffffff !important; 3723 } 3724 3725 .social-fixed-rail a:hover .social-fixed-label, 3726 .social-fixed-rail a:focus .social-fixed-label { 3727 max-width: 120px; 3728 margin-left: 0.7rem; 3729 } 3730 3731 .social-fixed-rail a:hover i, 3732 .social-fixed-rail a:focus i { 3733 transform: scale(1.15) rotate(6deg); 3734 } 3735 3736 .social-fixed-rail a::after { 3737 content: ""; 3738 position: absolute; 3739 inset: 0; 3740 background: rgba(255, 255, 255, 0.22); 3741 transform: translateX(-100%); 3742 transition: transform 0.45s ease; 3743 } 3744 3745 .social-fixed-rail a:hover::after, 3746 .social-fixed-rail a:focus::after { 3747 transform: translateX(0); 3748 } 3749 3750 .social-fixed-rail a.social-fixed-facebook { background: linear-gradient(135deg, #4267B2 0%, #3b5998 100%); } 3751 .social-fixed-rail a.social-fixed-twitter { background: linear-gradient(135deg, #6cc6f2 0%, #1da1f2 100%); } 3752 .social-fixed-rail a.social-fixed-instagram { background: radial-gradient(circle at 30% 110%, #fdf497 0%, #fdf497 5%, #fd5949 45%, #d6249f 60%, #285AEB 90%); } 3753 .social-fixed-rail a.social-fixed-linkedin { background: linear-gradient(135deg, #0e9fe0 0%, #0077b5 100%); } 3754 3755 /* Static "share" marker at the front of the bar â same tab 3756 shape and entrance animation as the links beside it, but not 3757 clickable and doesn't expand on hover. */ 3758 .social-fixed-rail .social-fixed-share { 3759 display: flex; 3760 align-items: center; 3761 justify-content: center; 3762 width: 46px; 3763 height: 46px; 3764 border-radius: 0 0 12px 12px; 3765 background: linear-gradient(135deg, #64748b 0%, #475569 100%); 3766 color: #ffffff; 3767 font-size: 1.05rem; 3768 box-shadow: 0 4px 10px rgba(15, 23, 42, 0.2); 3769 opacity: 0; 3770 transform: translateY(-60px); 3771 transform-origin: top center; 3772 animation: svcSocialDropIn 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; 3773 animation-delay: calc(var(--i, 0) * 0.1s + 0.45s); 3774 } 3775 3776 @keyframes svcSocialDropIn { 3777 0% { 3778 opacity: 0; 3779 transform: translateY(-60px); 3780 } 3781 60% { 3782 transform: translateY(6px); 3783 } 3784 100% { 3785 opacity: 1; 3786 transform: translateY(0); 3787 } 3788 } 3789 3790 @media (prefers-reduced-motion: reduce) { 3791 .social-fixed-rail a { 3792 opacity: 1; 3793 transform: none; 3794 animation: none; 3795 } 3796 } 3797 3798 @media (max-width: 575.98px) { 3799 .social-fixed-rail { 3800 left: 10px; 3801 gap: 4px; 3802 } 3803 3804 .social-fixed-rail a { 3805 width: 38px; 3806 height: 38px; 3807 padding-left: 10px; 3808 font-size: 0.92rem; 3809 } 3810 3811 .social-fixed-rail .social-fixed-share { 3812 width: 38px; 3813 height: 38px; 3814 font-size: 0.92rem; 3815 } 3816 3817 .social-fixed-rail a:hover, 3818 .social-fixed-rail a:focus { 3819 width: 38px; 3820 } 3821 3822 .social-fixed-rail a:hover .social-fixed-label, 3823 .social-fixed-rail a:focus .social-fixed-label { 3824 max-width: 0; 3825 margin-left: 0; 3826 } 3827 } 3828 3829 /* ââ Voice Search modal ââ */ 3830 .voice-search-modal .modal-content { 3831 border: 0; 3832 border-radius: 28px; 3833 overflow: hidden; 3834 box-shadow: 0 30px 70px rgba(15, 23, 42, 0.28); 3835 } 3836 3837 .voice-search-modal-header { 3838 padding: 1.25rem 1.6rem; 3839 background: linear-gradient(135deg, #1d4ed8 0%, #2563eb 55%, #1e40af 100%); 3840 border-bottom: 0; 3841 } 3842 3843 .voice-search-modal-header .modal-title { 3844 display: flex; 3845 align-items: center; 3846 gap: 0.6rem; 3847 color: #ffffff; 3848 font-family: 'Poppins', sans-serif; 3849 font-weight: 700; 3850 } 3851 3852 .voice-search-modal-header .btn-close { 3853 filter: brightness(0) invert(1); 3854 opacity: 0.95; 3855 } 3856 3857 .voice-search-modal-body { 3858 padding: 2rem 1.75rem 1.75rem; 3859 background: linear-gradient(180deg, #ffffff 0%, #f4f8ff 100%); 3860 } 3861 3862 .voice-modal-mic-stage { 3863 display: flex; 3864 flex-direction: column; 3865 align-items: center; 3866 text-align: center; 3867 padding-bottom: 1.5rem; 3868 margin-bottom: 1.5rem; 3869 border-bottom: 1px dashed rgba(29, 78, 216, 0.18); 3870 } 3871 3872 .voice-modal-mic-wrap { 3873 position: relative; 3874 display: flex; 3875 align-items: center; 3876 justify-content: center; 3877 width: 128px; 3878 height: 128px; 3879 margin-bottom: 1.1rem; 3880 border: 0; 3881 background: none; 3882 padding: 0; 3883 cursor: pointer; 3884 } 3885 3886 .voice-modal-mic-circle { 3887 position: relative; 3888 z-index: 2; 3889 display: flex; 3890 align-items: center; 3891 justify-content: center; 3892 width: 96px; 3893 height: 96px; 3894 border-radius: 50%; 3895 background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%); 3896 color: #ffffff;
3897 font-size: 2.75rem; 3898 box-shadow: 0 18px 34px rgba(29, 78, 216, 0.35); 3899 transition: background 0.35s ease, box-shadow 0.35s ease, transform 0.25s ease; 3900 } 3901 3902 .voice-modal-mic-wrap:hover .voice-modal-mic-circle { 3903 transform: scale(1.05); 3904 } 3905 3906 .voice-modal-mic-ring { 3907 position: absolute; 3908 inset: 0; 3909 border-radius: 50%; 3910 border: 2px solid rgba(29, 78, 216, 0.35); 3911 opacity: 0; 3912 } 3913 3914 /* Listening state: mic turns "recording red" and the rings pulse 3915 outward continuously so the big icon reads as dynamically alive, 3916 not a static graphic. */ 3917 .voice-modal-mic-stage.is-listening .voice-modal-mic-circle { 3918 background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%); 3919 box-shadow: 0 18px 34px rgba(220, 38, 38, 0.4); 3920 animation: svcVoiceModalPulse 1.6s ease-in-out infinite; 3921 } 3922 3923 .voice-modal-mic-stage.is-listening .voice-modal-mic-ring { 3924 border-color: rgba(220, 38, 38, 0.45); 3925 animation: svcVoiceModalRing 1.8s ease-out infinite; 3926 } 3927 3928 .voice-modal-mic-stage.is-listening .voice-modal-mic-ring-2 { 3929 animation-delay: 0.6s; 3930 } 3931 3932 @keyframes svcVoiceModalPulse { 3933 0%, 100% { transform: scale(1); } 3934 50% { transform: scale(1.045); } 3935 } 3936 3937 @keyframes svcVoiceModalRing { 3938 0% { transform: scale(0.85); opacity: 0.65; } 3939 100% { transform: scale(1.55); opacity: 0; } 3940 } 3941 3942 .voice-modal-status { 3943 margin: 0; 3944 color: #1e293b; 3945 font-family: 'Poppins', sans-serif; 3946 font-weight: 700; 3947 font-size: 1.02rem; 3948 } 3949 3950 .voice-modal-transcript { 3951 margin: 0.4rem 0 0; 3952 color: #1d4ed8; 3953 font-style: italic; 3954 font-size: 0.95rem; 3955 } 3956 3957 .voice-modal-steps { 3958 display: grid; 3959 gap: 1rem; 3960 } 3961 3962 .voice-modal-step { 3963 display: flex; 3964 align-items: flex-start; 3965 gap: 0.9rem; 3966 padding: 0.9rem 1rem; 3967 border-radius: 18px; 3968 background: #ffffff; 3969 border: 1px solid rgba(29, 78, 216, 0.1); 3970 box-shadow: 0 10px 20px rgba(15, 23, 42, 0.05); 3971 } 3972 3973 .voice-modal-step-num { 3974 flex: 0 0 auto; 3975 display: inline-flex; 3976 align-items: center; 3977 justify-content: center; 3978 width: 32px; 3979 height: 32px; 3980 border-radius: 50%; 3981 background: linear-gradient(135deg, #1d4ed8 0%, #2563eb 100%); 3982 color: #ffffff; 3983 font-family: 'Poppins', sans-serif; 3984 font-weight: 700; 3985 font-size: 0.92rem; 3986 } 3987 3988 .voice-modal-step-text strong { 3989 display: block; 3990 color: #10213d; 3991 font-family: 'Poppins', sans-serif; 3992 font-size: 0.96rem; 3993 margin-bottom: 0.15rem; 3994 } 3995 3996 .voice-modal-step-text p { 3997 margin: 0; 3998 color: #5b6677; 3999 font-size: 0.88rem; 4000 line-height: 1.55; 4001 } 4002 4003 /* ââ Results: best-match card, suggestion accordion, empty state ââ */ 4004 .voice-modal-match-card { 4005 display: flex; 4006 align-items: center; 4007 gap: 1rem; 4008 padding: 1.15rem 1.3rem; 4009 border-radius: 22px; 4010 background: linear-gradient(135deg, rgba(29, 78, 216, 0.08) 0%, rgba(37, 99, 235, 0.04) 100%); 4011 border: 1px solid rgba(29, 78, 216, 0.18); 4012 } 4013 4014 .voice-modal-match-icon { 4015 flex: 0 0 auto; 4016 color: #16a34a; 4017 font-size: 2rem; 4018 } 4019 4020 .voice-modal-match-body { 4021 flex: 1 1 auto; 4022 min-width: 0; 4023 } 4024 4025 .voice-modal-match-label { 4026 display: block; 4027 color: #64748b; 4028 font-size: 0.78rem; 4029 font-weight: 700; 4030 text-transform: uppercase; 4031 letter-spacing: 0.06em; 4032 } 4033 4034 .voice-modal-match-title { 4035 margin: 0.15rem 0 0; 4036 color: #10213d; 4037 font-family: 'Poppins', sans-serif; 4038 font-weight: 700;
4039 overflow-wrap: anywhere; 4040 } 4041 4042 .voice-modal-match-countdown { 4043 margin: 0.5rem 0 0; 4044 color: #1d4ed8; 4045 font-size: 0.86rem; 4046 font-weight: 600; 4047 } 4048 4049 .voice-modal-match-countdown strong { 4050 display: inline-block; 4051 min-width: 1.1em; 4052 font-size: 1rem; 4053 } 4054 4055 .voice-modal-match-btn { 4056 flex: 0 0 auto; 4057 display: inline-flex; 4058 align-items: center; 4059 gap: 0.5rem; 4060 padding: 0.65rem 1.15rem; 4061 border-radius: 999px; 4062 background: linear-gradient(135deg, #1d4ed8 0%, #2563eb 100%); 4063 color: #ffffff !important; 4064 font-weight: 700; 4065 text-decoration: none; 4066 white-space: nowrap; 4067 box-shadow: 0 14px 24px rgba(29, 78, 216, 0.22); 4068 transition: transform 0.2s ease, box-shadow 0.2s ease; 4069 } 4070 4071 .voice-modal-match-btn:hover { 4072 transform: translateY(-1px); 4073 box-shadow: 0 18px 30px rgba(29, 78, 216, 0.3); 4074 } 4075 4076 .voice-modal-suggestions-title { 4077 display: flex; 4078 align-items: center; 4079 gap: 0.5rem; 4080 margin: 0 0 0.85rem; 4081 color: #10213d; 4082 font-family: 'Poppins', sans-serif; 4083 font-weight: 700; 4084 font-size: 0.98rem; 4085 } 4086 4087 .voice-modal-accordion .accordion-item.voice-modal-accordion-item { 4088 border: 1px solid rgba(29, 78, 216, 0.12); 4089 border-radius: 16px !important; 4090 overflow: hidden; 4091 margin-bottom: 0.7rem; 4092 box-shadow: 0 8px 18px rgba(15, 23, 42, 0.05); 4093 } 4094 4095 .voice-modal-accordion .accordion-item:last-child { 4096 margin-bottom: 0; 4097 } 4098 4099 .voice-modal-accordion .accordion-button { 4100 padding: 0.85rem 1.1rem; 4101 background: #ffffff; 4102 color: #1e3a8a; 4103 font-weight: 600; 4104 font-size: 0.94rem; 4105 box-shadow: none; 4106 } 4107 4108 .voice-modal-accordion .accordion-button:not(.collapsed) { 4109 background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%); 4110 color: #1d4ed8; 4111 box-shadow: inset 0 -1px 0 rgba(29, 78, 216, 0.12); 4112 } 4113 4114 .voice-modal-accordion .accordion-button:focus { 4115 box-shadow: 0 0 0 0.15rem rgba(29, 78, 216, 0.18); 4116 } 4117 4118 .voice-modal-accordion .accordion-button::after { 4119 flex-shrink: 0; 4120 } 4121 4122 .voice-modal-crumb { 4123 overflow-wrap: anywhere; 4124 } 4125 4126 .voice-modal-crumb-sep { 4127 margin: 0 0.25rem; 4128 color: #93a5c9; 4129 font-weight: 400; 4130 } 4131 4132 .voice-modal-accordion .accordion-body { 4133 padding: 1rem 1.1rem 1.15rem; 4134 background: #fbfdff; 4135 } 4136 4137 .voice-modal-result-preview { 4138 margin: 0 0 0.8rem; 4139 color: #475569; 4140 font-size: 0.9rem; 4141 line-height: 1.6; 4142 } 4143 4144 .voice-modal-result-link { 4145 display: inline-flex; 4146 align-items: center; 4147 gap: 0.45rem; 4148 padding: 0.5rem 1rem; 4149 border-radius: 999px; 4150 background: linear-gradient(135deg, #1d4ed8 0%, #2563eb 100%); 4151 color: #ffffff !important; 4152 font-weight: 600; 4153 font-size: 0.86rem; 4154 text-decoration: none; 4155 box-shadow: 0 10px 18px rgba(29, 78, 216, 0.2); 4156 transition: transform 0.2s ease, box-shadow 0.2s ease; 4157 } 4158 4159 .voice-modal-result-link:hover { 4160 transform: translateY(-1px); 4161 box-shadow: 0 14px 22px rgba(29, 78, 216, 0.26); 4162 } 4163 4164 .voice-modal-empty { 4165 display: flex; 4166 flex-direction: column; 4167 align-items: center; 4168 gap: 0.6rem; 4169 padding: 2rem 1rem; 4170 text-align: center; 4171 color: #64748b; 4172 } 4173 4174 .voice-modal-empty i { 4175 font-size: 2.4rem; 4176 color: #93a5c9; 4177 } 4178 4179 .voice-modal-empty p { 4180 margin: 0; 4181 font-size: 0.94rem; 4182 } 4183 4184 .voice-modal-retry-btn { 4185 display: flex; 4186 align-items: center; 4187 justify-content: center; 4188 gap: 0.55rem; 4189 width: 100%; 4190 margin-top: 1.4rem; 4191 padding: 0.75rem 1.2rem; 4192 border: 2px solid #1d4ed8; 4193 border-radius: 999px; 4194 background: #ffffff; 4195 color: #1d4ed8; 4196 font-family: 'Poppins', sans-serif; 4197 font-weight: 700; 4198 transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease; 4199 } 4200 4201 .voice-modal-retry-btn:hover { 4202 background: #1d4ed8; 4203 color: #ffffff; 4204 transform: translateY(-1px); 4205 } 4206 4207 @media (prefers-reduced-motion: reduce) { 4208 .voice-modal-mic-stage.is-listening .voice-modal-mic-circle, 4209 .voice-modal-mic-stage.is-listening .voice-modal-mic-ring { 4210 animation: none; 4211 } 4212 } 4213 4214 @media (max-width: 575.98px) { 4215 .voice-modal-mic-wrap { 4216 width: 104px; 4217 height: 104px; 4218 } 4219 4220 .voice-modal-mic-circle { 4221 width: 78px; 4222 height: 78px; 4223 font-size: 2.2rem; 4224 } 4225 4226 .voice-modal-match-card { 4227 flex-wrap: wrap; 4228 } 4229 4230 .voice-modal-match-btn { 4231 width: 100%; 4232 justify-content: center; 4233 } 4234 } 4235 </style> 4236 4237 <style> 4238 .listing-page-hero { 4239 background: #ffffff; 4240 border-bottom: 2px solid #e5e7eb; 4241 padding: 2.5rem 0 2rem; 4242 color: #1e3a8a; 4243 } 4244 .listing-page-hero h1 { font-size: 1.75rem; font-weight: 700; margin: 0; color: #1e3a8a; } 4245 .listing-page-hero .breadcrumb-item, .listing-page-hero .breadcrumb-item a { color: #3b5bdb; font-size: 0.875rem; } 4246 .listing-page-hero .breadcrumb-item.active { color: #1e3a8a; } 4247 .listing-page-hero .breadcrumb-divider { color: #93c5fd; } 4248 4249 .listing-wrap { padding: 2.5rem 0 3.5rem; background: #f8f9fb; min-height: 60vh; } 4250 .listing-card { 4251 background: #fff; 4252 border-radius: 16px; 4253 box-shadow: 0 4px 24px rgba(15,23,42,0.08); 4254 padding: 1.75rem 1.5rem; 4255 } 4256 4257 /* Search bar above table */ 4258 .listing-search-row { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; margin-bottom: 1.25rem; } 4259 .listing-search-wrap { position: relative; flex: 1 1 280px; max-width: 440px; } 4260 .listing-search-wrap input { 4261 width: 100%; padding: 0.55rem 0.9rem 0.55rem 2.4rem; 4262 border-radius: 999px; border: 1.5px solid #d1d5db; 4263 font-size: 0.9rem; background: #f8f9fb; outline: none; 4264 transition: border-color 0.2s; 4265 } 4266 .listing-search-wrap input:focus { border-color: #800000; background: #fff; } 4267 .listing-search-wrap .search-icon { position: absolute; left: 0.85rem; top: 50%; transform: translateY(-50%); color: #800000; font-size: 0.85rem; } 4268 .listing-search-clear { position: absolute; right: 0.85rem; top: 50%; transform: translateY(-50%); cursor: pointer; color: #9ca3af; font-size: 0.85rem; display: none; } 4269 .listing-search-wrap input:not(:placeholder-shown) ~ .listing-search-clear { display: block; } 4270 4271 /* DataTable overrides */ 4272 table.dataTable { border-collapse: collapse !important; } 4273 table.dataTable thead th { 4274 background: #e5e7eb; color: #000000 !important; font-weight: 700; 4275 font-size: 0.84rem; border: none !important; white-space: nowrap; 4276 padding: 0.75rem 1rem; 4277 } 4278 table.dataTable thead th.sorting::after, 4279 table.dataTable thead th.sorting_asc::after, 4280 table.dataTable thead th.sorting_desc::after { color: rgba(0,0,0,0.5) !important; } 4281 table.dataTable tbody tr:hover { background: #fff8f8 !important; } 4282 table.dataTable tbody td { font-size: 0.875rem; vertical-align: middle; padding: 0.65rem 1rem;
4282 border-bottom: 1px solid #f0f0f0; } 4283 .dataTables_wrapper .dataTables_paginate .paginate_button.current, 4284 .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { background: #800000 !important; border-color: #800000 !important; color: #fff !important; border-radius: 6px; } 4285 .dataTables_wrapper .dataTables_paginate .paginate_button:hover { background: #fde8e8 !important; color: #800000 !important; border-color: #fde8e8 !important; border-radius: 6px; } 4286 .dataTables_wrapper .dataTables_info { font-size: 0.82rem; color: #6b7280; } 4287 .dataTables_wrapper .dataTables_length select { border-radius: 6px; border: 1px solid #d1d5db; padding: 0.2rem 0.4rem; } 4288 /* Hide default DataTables search (we use our own) */ 4289 .dataTables_wrapper .dataTables_filter { display: none !important; } 4290 4291 .listing-title { font-weight: 600; color: #1e293b; } 4292 .listing-dl-icon { 4293 display: inline-flex; align-items: center; justify-content: center; 4294 width: 36px; height: 36px; margin: 0 4px 4px 0; border-radius: 50%; 4295 background: linear-gradient(135deg, #800000 0%, #a3122b 100%); 4296 color: #ffffff; font-size: 0.95rem; 4297 box-shadow: 0 4px 10px rgba(128, 0, 0, 0.25); 4298 transition: transform 0.2s ease, box-shadow 0.2s ease, background 0.2s ease; 4299 } 4300 .listing-dl-icon:hover, .listing-dl-icon:focus { 4301 color: #ffffff; transform: translateY(-2px); 4302 box-shadow: 0 8px 18px rgba(128, 0, 0, 0.32); 4303 background: linear-gradient(135deg, #a3122b 0%, #800000 100%); 4304 } 4305 4306 .listing-back-btn { color: #800000; font-weight: 600; text-decoration: none; font-size: 0.9rem; } 4307 .listing-back-btn:hover { color: #5a0000; text-decoration: underline; } 4308 4309 @media (max-width: 576px) { 4310 .listing-card { padding: 1rem 0.75rem; } 4311 table.dataTable thead th, table.dataTable tbody td { font-size: 0.78rem; padding: 0.5rem 0.5rem; } 4312 } 4313 </style> 4314</head> 4315<body> 4316 4317<div id="spinner" class="show bg-white position-fixed translate-middle w-100 vh-100 top-50 start-50 d-flex align-items-center justify-content-center"> 4318 <div class="spinner-border text-secondary" style="width:3rem;height:3rem;" role="status"><span class="sr-only">Loading...</span></div> 4319</div> 4320 4321<!-- Fixed Social Share Rail Start --> 4322 <div class="social-fixed-rail" aria-label="Follow us on social media"> 4323 <span class="social-fixed-share" style="--i:0" aria-hidden="true"> 4324 <i class="fas fa-share"></i> 4325 </span> 4326 <a class="social-fixed-facebook" style="--i:1" href="" target="_blank" rel="noopener" aria-label="Facebook"> 4327 <i class="fab fa-facebook-f"></i><span class="social-fixed-label">Facebook</span> 4328 </a> 4329 <a class="social-fixed-twitter" style="--i:2" href="" target="_blank" rel="noopener" aria-label="Twitter"> 4330 <i class="fab fa-twitter"></i><span class="social-fixed-label">Twitter</span> 4331 </a> 4332 <a class="social-fixed-instagram" style="--i:3" href="" target="_blank" rel="noopener" aria-label="Instagram"> 4333 <i class="fab fa-instagram"></i><span class="social-fixed-label">Instagram</span> 4334 </a> 4335 <a class="social-fixed-linkedin" style="--i:4" href="" target="_blank" rel="noopener" aria-label="LinkedIn"> 4336 <i class="fab fa-linkedin-in"></i><span class="social-fixed-label">LinkedIn</span> 4337 </a> 4338 </div> 4339 <!-- Fixed Social Share Rail End --> 4340 4341 <!-- Header Hero Start --> 4342 <div class="container-fluid header-hero"> 4343 <div class="row gx-0 align-items-stretch header-hero-row"> 4344 <div class="col-12 col-lg-9 header-hero-media"> 4345 <a href="https://svc.ac.in" class="header-hero-media-link"> 4346 <img src="https://svc.ac.in/svc_home/img/main_top.fw.png" class="img-fluid header-hero-image" alt="Sri Venkateswara College, University of Delhi"> 4347 </a> 4348 </div> 4349 <div class="col-12 col-lg-3 header-hero-actions"> 4350 <div class="header-hero-actions-row"> 4351 <div class="header-hero-actions-media"> 4352 <a href="https://svc.ac.in/linkedpage/1/40/0/All/All"> 4353 <img src="https://svc.ac.in/svc_home/mainpage/Viksit.jpg" class="img-fluid img-thumbnail header-hero-actions-image" alt="Viksit Bharat"> 4354 </a> 4355 </div> 4356 <div class="header-hero-actions-buttons"> 4357 <div class="header-action-block header-action-textsize" role="group" aria-label="Accessibility text size controls"> 4358 <button type="button" class="screen-reader-btn" data-font-scale="1.1" aria-label="Increase text size">A+</button> 4359 <button type="button" class="screen-reader-btn is-active" data-font-scale="1" aria-label="Reset text size">A</button> 4360 <button type="button" class="screen-reader-btn" data-font-scale="0.95" aria-label="Decrease text size">A-</button> 4361 </div> 4362 <div class="header-action-block header-action-language"> 4363 <i class="fas fa-language"></i> 4364 <div id="google_translate_element"></div> 4365
4365<script type="text/javascript"> 4366 function googleTranslateElementInit() { 4367 new google.translate.TranslateElement( 4368 {pageLanguage: 'en'}, 4369 'google_translate_element' 4370 ); 4371 } 4372 </script>
4372 4373
4373<script type="text/javascript" src="https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
4373 4374 </div> 4375 <a href="https://sas.svc.ac.in/login" class="header-action-block header-action-erp" target="_blank" rel="noopener"> 4376 <i class="fas fa-sign-in-alt"></i> 4377 <span>ERP Login</span> 4378 </a> 4379 </div> 4380 </div> 4381 </div> 4382 </div> 4383 </div> 4384 <!-- Header Hero End --> 4385 4386 <!-- Topbar Start --> 4387 <div class="container-fluid top-links-bar"> 4388 <div class="row gx-0 align-items-center top-links-wrap justify-content-between"> 4389 <div class="col top-links-primary text-center text-lg-start mb-0"> 4390 <div class="top-links-list justify-content-center justify-content-lg-start"> 4391 4392 <a href="https://svc.ac.in/extended/4" ><i class="fa fa-caret-right" aria-hidden="true"></i> MOU</a> 4393 4394 <a href="https://svc.ac.in/extended/142" ><i class="fa fa-caret-right" aria-hidden="true"></i> NIRF</a> 4395 4396 <a href="https://svc.ac.in/extended/8" ><i class="fa fa-caret-right" aria-hidden="true"></i> VIRTUAL TOUR</a> 4397 4398 <a href="https://svc.ac.in/extended/12" ><i class="fa fa-caret-right" aria-hidden="true"></i> HELPDESK</a> 4399 4400 <a href="https://svc.ac.in/extended/16" ><i class="fa fa-caret-right" aria-hidden="true"></i> SCREEN READER ACCESS</a> 4401 4402 <a href="https://svc.ac.in/extended/18" ><i class="fa fa-caret-right" aria-hidden="true"></i> FLC/PGDBT</a> 4403 </div> 4404 </div> 4405 <div class="col-auto top-links-search text-center text-lg-end mb-0"> 4406 <div class="homepage-nav-search" data-home-search data-search-url="https://svc.ac.in/extended/search"> 4407 <form class="homepage-search-shell" role="search" autocomplete="off" onsubmit="return false;"> 4408 <label class="visually-hidden" for="homepageNavSearch">Search website contents</label> 4409 <i class="fa fa-search homepage-search-icon" aria-hidden="true"></i> 4410 <input 4411 id="homepageNavSearch" 4412 class="homepage-search-input" 4413 type="search" 4414 name="q" 4415 placeholder="Search SVC website" 4416 aria-label="Search SVC website" 4417 aria-autocomplete="list" 4418 aria-expanded="false" 4419 aria-controls="homepageSearchResults" 4420 spellcheck="false" 4421 > 4422 <button class="homepage-search-button" type="submit">Search</button> 4423 <button class="homepage-voice-btn" type="button" data-bs-toggle="modal" data-bs-target="#voiceSearchModal" title="Search by voice" aria-label="Search by voice" style="display:none;"> 4424 <i class="fa fa-microphone" aria-hidden="true"></i>
4425 <span class="voice-listening-bars" aria-hidden="true"> 4426 <span></span><span></span><span></span><span></span> 4427 </span> 4428 </button> 4429 </form> 4430 <div class="homepage-search-dropdown" id="homepageSearchResults" data-home-search-results hidden></div> 4431 </div> 4432 </div> 4433 </div> 4434 </div> 4435 <!-- Topbar End --> 4436 4437 <!-- Voice Search Modal Start --> 4438 <div class="modal fade voice-search-modal" id="voiceSearchModal" tabindex="-1" aria-labelledby="voiceSearchModalLabel" aria-hidden="true"> 4439 <div class="modal-dialog modal-dialog-centered modal-lg"> 4440 <div class="modal-content voice-search-modal-content"> 4441 <div class="modal-header voice-search-modal-header"> 4442 <h5 class="modal-title" id="voiceSearchModalLabel"> 4443 <i class="fas fa-microphone-alt" aria-hidden="true"></i> Voice Search 4444 </h5> 4445 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 4446 </div> 4447 <div class="modal-body voice-search-modal-body"> 4448 <div class="voice-modal-mic-stage" data-voice-modal-mic-stage> 4449 <button type="button" class="voice-modal-mic-wrap" data-voice-modal-mic-btn aria-label="Start listening"> 4450 <span class="voice-modal-mic-ring voice-modal-mic-ring-1" aria-hidden="true"></span> 4451 <span class="voice-modal-mic-ring voice-modal-mic-ring-2" aria-hidden="true"></span> 4452 <span class="voice-modal-mic-circle"> 4453 <i class="fas fa-microphone-alt" data-voice-modal-mic-icon aria-hidden="true"></i> 4454 </span> 4455 </button> 4456 <p class="voice-modal-status" data-voice-modal-status aria-live="polite">Tap the microphone to start speaking</p> 4457 <p class="voice-modal-transcript" data-voice-modal-transcript aria-live="polite" hidden></p> 4458 </div> 4459 4460 <div class="voice-modal-steps" data-voice-modal-steps> 4461 <div class="voice-modal-step"> 4462 <span class="voice-modal-step-num">1</span> 4463 <div class="voice-modal-step-text"> 4464 <strong>Say something</strong> 4465 <p>Like <em>"About Us"</em>, <em>"Fee Structure"</em>, <em>"Admission"</em> or <em>"Seating Plan"</em>, etc.</p> 4466 </div> 4467 </div> 4468 <div class="voice-modal-step"> 4469 <span class="voice-modal-step-num">2</span> 4470 <div class="voice-modal-step-text"> 4471 <strong>System will search</strong> 4472 <p>We look through the website for the relevant content(s).</p> 4473 </div> 4474 </div> 4475 <div class="voice-modal-step"> 4476 <span class="voice-modal-step-num">3</span> 4477 <div class="voice-modal-step-text"> 4478 <strong>Get your result</strong> 4479 <p>A direct match opens right away â otherwise you'll get suggested links to choose from.</p> 4480 </div> 4481 </div> 4482 </div> 4483 4484 <div class="voice-modal-results" data-voice-modal-results aria-live="polite" hidden> 4485 <div class="voice-modal-best-match" data-voice-modal-best-match hidden></div> 4486 4487 <div class="voice-modal-suggestions" data-voice-modal-suggestions hidden> 4488 <p class="voice-modal-suggestions-title"><i class="fas fa-list-ul" aria-hidden="true"></i> Suggested pages</p> 4489 <div class="accordion voice-modal-accordion" id="voiceModalAccordion" data-voice-modal-accordion></div> 4490 </div> 4491 4492 <div class="voice-modal-empty" data-voice-modal-empty hidden> 4493 <i class="fas fa-satellite-dish" aria-hidden="true"></i> 4494 <p>We couldn't find anything for that. Try saying it a different way.</p> 4495 </div> 4496 </div> 4497 4498 <button type="button" class="voice-modal-retry-btn" data-voice-modal-retry hidden> 4499 <i class="fas fa-rotate-left" aria-hidden="true"></i> Search Again 4500 </button> 4501 </div> 4502 </div> 4503 </div> 4504 </div> 4505 <!-- Voice Search Modal End --> 4506 4507
4507<script> 4508 document.addEventListener('DOMContentLoaded', function () { 4509 var modalEl = document.getElementById('voiceSearchModal'); 4510 var searchRoot = document.querySelector('[data-home-search]'); 4511 if (!modalEl || !searchRoot || typeof bootstrap === 'undefined') { return; } 4512 4513 var voiceBtn = searchRoot.querySelector('.homepage-voice-btn'); 4514 var searchUrl = searchRoot.getAttribute('data-search-url'); 4515 var SpeechRecognitionCtor = window.SpeechRecognition || window.webkitSpeechRecognition; 4516 4517 // Browser doesn't support the Web Speech API â leave the mic 4518 // button hidden (it defaults to display:none) rather than 4519 // showing a control that can never work. 4520 if (!voiceBtn || !searchUrl || !SpeechRecognitionCtor) { return; } 4521 4522 voiceBtn.style.display = ''; 4523 4524 var micStage = modalEl.querySelector('[data-voice-modal-mic-stage]'); 4525 var micBtn = modalEl.querySelector('[data-voice-modal-mic-btn]'); 4526 var statusText = modalEl.querySelector('[data-voice-modal-status]'); 4527 var transcriptEl = modalEl.querySelector('[data-voice-modal-transcript]'); 4528 var stepsEl = modalEl.querySelector('[data-voice-modal-steps]'); 4529 var resultsEl = modalEl.querySelector('[data-voice-modal-results]'); 4530 var bestMatchEl = modalEl.querySelector('[data-voice-modal-best-match]'); 4531 var suggestionsEl = modalEl.querySelector('[data-voice-modal-suggestions]'); 4532 var accordionEl = modalEl.querySelector('[data-voice-modal-accordion]'); 4533 var emptyEl = modalEl.querySelector('[data-voice-modal-empty]'); 4534 var retryBtn = modalEl.querySelector('[data-voice-modal-retry]'); 4535 4536 var DEFAULT_STATUS = 'Tap the microphone and say something'; 4537 var FILLER_RE = /^(please\s+|can you\s+|could you\s+)?(navigate to|take me to|go to|show me|open|goto)\s+/; 4538 4539 // Only links with their own contents (hasContents) become spoken 4540 // targets â a pure grouping node like "About" never matches on 4541 // its own, only concrete pages like "About Us" do. 4542 var voiceNavTargets = [{ title: 'Home', url: 'https://svc.ac.in' }] 4543 .concat([{"title":"ABOUT US","url":"https:\/\/svc.ac.in\/extended\/23"},{"title":"GOVERNING BODY","url":"https:\/\/svc.ac.in\/extended\/38"},{"title":"ADMINISTRATION","url":"https:\/\/svc.ac.in\/extended\/44"},{"title":"ORGANOGRAM","url":"https:\/\/svc.ac.in\/extended\/51"},{"title":"ANNUAL REPORTS","url":"https:\/\/svc.ac.in\/extended\/57"},{"title":"VISION \u0026 MISSION","url":"https:\/\/svc.ac.in\/extended\/62"},{"title":"TENDER QUOTATIONS","url":"https:\/\/svc.ac.in\/notices\/tenders"},{"title":"VIKSIT BHARAT","url":"https:\/\/svc.ac.in\/extended\/70"},{"title":"RAJBHASHA","url":"https:\/\/svc.ac.in\/extended\/76"},{"title":"DOWNLOAD CENTER","url":"https:\/\/svc.ac.in\/extended\/79"},{"title":"JOB","url":"https:\/\/svc.ac.in\/notices\/jobs"},{"title":"PRINCIPAL\u0027S DESK","url":"https:\/\/svc.ac.in\/extended\/83"},{"title":"STAFF ELECTION","url":"https:\/\/svc.ac.in\/extended\/84"},{"title":"MOU","url":"https:\/\/svc.ac.in\/extended\/4"},{"title":"BIOCHEMISTRY","url":"https:\/\/svc.ac.in\/extended\/85"},{"title":"BOTANY","url":"https:\/\/svc.ac.in\/extended\/87"},{"title":"CHEMISTRY","url":"https:\/\/svc.ac.in\/extended\/89"},{"title":"COMMERCE","url":"https:\/\/svc.ac.in\/extended\/91"},{"title":"ECONOMICS","url":"https:\/\/svc.ac.in\/extended\/93"},{"title":"ELECTRONICS","url":"https:\/\/svc.ac.in\/extended\/95"},{"title":"ENGLISH","url":"https:\/\/svc.ac.in\/extended\/97"},{"title":"ENVIRONMENTAL SCIENCE","url":"https:\/\/svc.ac.in\/extended\/99"},{"title":"HINDI","url":"https:\/\/svc.ac.in\/extended\/101"},{"title":"HISTORY","url":"https:\/\/svc.ac.in\/extended\/103"},{"title":"MATHEMATICS","url":"https:\/\/svc.ac.in\/extended\/105"},{"title":"PHYSICAL EDUCATION","url":"https:\/\/svc.ac.in\/extended\/107"},{"title":"PHYSICS","url":"https:\/\/svc.ac.in\/extended\/109"},{"title":"POLITICAL SCIENCE","url":"https:\/\/svc.ac.in\/extended\/111"},{"title":"SANSKRIT","url":"https:\/\/svc.ac.in\/extended\/113"},{"title":"SOCIOLOGY","url":"https:\/\/svc.ac.in\/extended\/115"},{"title":"STATISTICS","url":"https:\/\/svc.ac.in\/extended\/117"},{"title":"TAMIL","url":"https:\/\/svc.ac.in\/extended\/119"},{"title":"TELUGU","url":"https:\/\/svc.ac.in\/extended\/121"},{"title":"ZOOLOGY","url":"https:\/\/svc.ac.in\/extended\/123"},{"title":"B. A. PROGRAMME","url":"https:\/\/svc.ac.in\/extended\/125"},{"title":"LIFE SCIENCE","url":"https:\/\/svc.ac.in\/extended\/127"},{"title":"BIOLOGICAL SCIENCE","url":"https:\/\/svc.ac.in\/extended\/129"},{"title":"COURSES OFFERED","url":"https:\/\/svc.ac.in\/extended\/31"},{"title":"SYLLABUS","url":"https:\/\/svc.ac.in\/extended\/45"},{"title":"TIME TABLE","url":"https:\/\/svc.ac.in\/extended\/52"},{"title":"ACADEMIC CALENDAR","url":"https:\/\/svc.ac.in\/extended\/58"},{"title":"TRAINING \u0026 INTERNSHIP","url":"https:\/\/svc.ac.in\/extended\/63"},{"title":"ADDITIONAL COURSES\/ FOREIGN LANGUAGE","url":"https:\/\/svc.ac.in\/extended\/68"},{"title":"COLLEGE NOTICES \u0026 CIRCULARS","url":"https:\/\/svc.ac.in\/notices\/college"},{"title":"STUDENT NOTICES \u0026 CIRCULARS","url":"https:\/\/svc.ac.in\/notices\/students"},{"title":"RTI","url":"https:\/\/svc.ac.in\/extended\/6"},{"title":"TEACHING ROSTER","url":"https:\/\/svc.ac.in\/extended\/7"},{"title":"VIRTUAL TOUR","url":"https:\/\/svc.ac.in\/extended\/8"},{"title":"PG Courses","url":"https:\/\/svc.ac.in\/extended\/147"},{"title":"2026-2027","url":"https:\/\/svc.ac.in\/extended\/146"},{"title":"2025-2026","url":"https:\/\/svc.ac.in\/extended\/145"},{"title":"COLLEGE PROSPECTUS","url":"https:\/\/svc.ac.in\/extended\/39"},{"title":"HELPDESK","url":"https:\/\/svc.ac.in\/extended\/12"},{"title":"SCREEN READER ACCESS","url":"https:\/\/svc.ac.in\/extended\/16"},{"title":"ACHIEVEMENTS","url":"https:\/\/svc.ac.in\/extended\/33"},{"title":"FOREIGN STUDENTS","url":"https:\/\/svc.ac.in\/extended\/157"},{"title":"180DC SVC","url":"https:\/\/svc.ac.in\/extended\/86"},{"title":"CONNECTING DREAMS FOUNDATION","url":"https:\/\/svc.ac.in\/extended\/90"},{"title":"ECO CLUB","url":"https:\/\/svc.ac.in\/extended\/92"},{"title":"EMPATHISE","url":"https:\/\/svc.ac.in\/extended\/96"},{"title":"ENACTUS","url":"https:\/\/svc.ac.in\/extended\/98"},{"title":"NCC","url":"https:\/\/svc.ac.in\/extended\/112"},{"title":"NSS","url":"https:\/\/svc.ac.in\/extended\/118"},{"title":"YOUTH INDIA FOUNDATION","url":"https:\/\/svc.ac.in\/extended\/122"},{"title":"CONSTELLATION HR CELL","url":"https:\/\/svc.ac.in\/extended\/124"},{"title":"BRAINIACS","url":"https:\/\/svc.ac.in\/extended\/126"},{"title":"Fine Arts Association","url":"https:\/\/svc.ac.in\/extended\/104"},{"title":"FINE ARTS-ALAAP","url":"https:\/\/svc.ac.in\/extended\/128"},{"title":"FINE ARTS-ANUBHUTI","url":"https:\/\/svc.ac.in\/extended\/130"},{"title":"FINE ARTS-PETRICHOR","url":"https:\/\/svc.ac.in\/extended\/138"},{"title":"FINE ARTS-VIMARSH","url":"https:\/\/svc.ac.in\/extended\/141"},{"title":"PLACEMENTS","url":"https:\/\/svc.ac.in\/placements"},{"title":"FREESHIP","url":"https:\/\/svc.ac.in\/extended\/46"},{"title":"STUDENTS\u0027 ELECTION","url":"https:\/\/svc.ac.in\/extended\/53"},{"title":"2025-26","url":"https:\/\/svc.ac.in\/extended\/160"},{"title":"2026-27","url":"https:\/\/svc.ac.in\/extended\/161"},{"title":"SCHOLARSHIP","url":"https:\/\/svc.ac.in\/extended\/80"},{"title":"COUNSELLOR","url":"https:\/\/svc.ac.in\/extended\/82"},{"title":"FLC\/PGDBT","url":"https:\/\/svc.ac.in\/extended\/18"},{"title":"IQAC","url":"https:\/\/svc.ac.in\/extended\/17"},{"title":"IQAC COMPOSITION","url":"https:\/\/svc.ac.in\/extended\/29"},{"title":"IQAC ACTIVITIES","url":"https:\/\/svc.ac.in\/extended\/37"},{"title":"IQAC MINUTES","url":"https:\/\/svc.ac.in\/extended\/43"},{"title":"NIRF","url":"https:\/\/svc.ac.in\/extended\/34"},{"title":"LIBRARY","url":"https:\/\/svc.ac.in\/extended\/27"},{"title":"ICT","url":"https:\/\/svc.ac.in\/extended\/35"},{"title":"HOSTEL","url":"https:\/\/svc.ac.in\/extended\/41"},{"title":"SPORTS","url":"https:\/\/svc.ac.in\/extended\/47"},{"title":"SEMINAR HALL","url":"https:\/\/svc.ac.in\/extended\/54"},{"title":"CANTEEN","url":"https:\/\/svc.ac.in\/extended\/60"},{"title":"MEDICAL ROOM","url":"https:\/\/svc.ac.in\/extended\/64"},{"title":"LABORATORIES","url":"https:\/\/svc.ac.in\/extended\/67"},{"title":"BOTANICAL GARDEN","url":"https:\/\/svc.ac.in\/extended\/69"},{"title":"STAFF COUNCIL","url":"https:\/\/svc.ac.in\/extended\/28"},{"title":"SC\/ST\/OBC COMMITTEE","url":"https:\/\/svc.ac.in\/extended\/42"},{"title":"ICC","url":"https:\/\/svc.ac.in\/extended\/49"},{"title":"SITE MAP","url":"https:\/\/svc.ac.in\/sitemap"},{"title":"OLD WEBSITE","url":"https:\/\/svc.ac.in\/public\/oldsvcweb.php"}]); 4544 (function dedupeByUrl() { 4545 var seen = {}; 4546 voiceNavTargets = voiceNavTargets.filter(function (t) { 4547 if (seen[t.url]) { return false; } 4548 seen[t.url] = true; 4549 return true; 4550 }); 4551 })(); 4552 4553 function escapeHtml(value) { 4554 return String(value || '') 4555 .replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>') 4556 .replace(/"/g, '"').replace(/'/g, '''); 4557 } 4558 4559 function normalizeStr(s) { 4560 return (s || '').toLowerCase().replace(/[^a-z0-9\s]/g, ' ').replace(/\s+/g, ' ').trim(); 4561 } 4562
4563 function stripFillers(command) { 4564 var stripped = command.replace(FILLER_RE, '').trim(); 4565 return stripped || command; 4566 } 4567 4568 // Strips conversational filler words from ANY position in the 4569 // phrase (not just a fixed lead-in pattern), so "I want to know 4570 // about fee structure" reduces to "fee structure" the same way 4571 // "open fee structure" does â important for blind users, who are 4572 // speaking whole sentences rather than typing short keywords. 4573 var STOPWORDS = {}; 4574 [ 4575 'a', 'an', 'the', 'is', 'are', 'was', 'were', 'am', 'be', 'been', 4576 'to', 'of', 'for', 'on', 'in', 'at', 'by', 'and', 'or', 'it', 4577 'this', 'that', 'these', 'those', 'about', 'regarding', 'related', 4578 'know', 'want', 'wanna', 'wants', 'wanted', 'tell', 'give', 'me', 4579 'my', 'mine', 'we', 'our', 'us', 'you', 'your', 'i', 'id', 4580 'please', 'can', 'could', 'would', 'should', 'will', 'shall', 4581 'do', 'does', 'did', 'how', 'what', 'where', 'when', 'which', 4582 'who', 'whom', 'get', 'find', 'show', 'see', 'look', 'looking', 4583 'need', 'needed', 'like', 'page', 'section', 'details', 'detail', 4584 'info', 'information', 'here', 'there', 'search', 'searching', 4585 'lookup' 4586 ].forEach(function (w) { STOPWORDS[w] = true; }); 4587 4588 function extractKeywords(text) { 4589 var normalized = normalizeStr(text); 4590 var tokens = normalized.split(' ').filter(
4590Boolean); 4591 var kept = tokens.filter(function (t) { return !STOPWORDS[t]; }); 4592 return kept.length ? kept.join(' ') : normalized; 4593 } 4594 4595 // Spoken feedback â the modal's visible text/countdown/accordion 4596 // mean nothing to a blind user unless something actually speaks 4597 // it. Mirrors the speak() helper already used by the "Venki" 4598 // wake-word navigator elsewhere on this site. 4599 function speak(text, onDone) { 4600 if (!window.speechSynthesis) { 4601 if (onDone) { onDone(); } 4602 return; 4603 } 4604 window.speechSynthesis.cancel(); 4605 var utt = new SpeechSynthesisUtterance(text); 4606 utt.lang = 'en-US'; 4607 utt.rate = 1.02; 4608 if (onDone) { 4609 utt.addEventListener('end', onDone); 4610 utt.addEventListener('error', onDone); 4611 } 4612 window.speechSynthesis.speak(utt); 4613 } 4614 4615 function levenshtein(a, b) { 4616 var m = a.length, n = b.length; 4617 if (m === 0) { return n; } 4618 if (n === 0) { return m; } 4619 var row = []; 4620 for (var j = 0; j <= n; j++) { row[j] = j; } 4621 for (var i = 1; i <= m; i++) { 4622 var prev = row[0]; 4623 row[0] = i; 4624 for (var k = 1; k <= n; k++) { 4625 var tmp = row[k]; 4626 row[k] = a[i - 1] === b[k - 1] 4627 ? prev 4628 : Math.min(prev + 1, row[k] + 1, row[k - 1] + 1); 4629 prev = tmp; 4630 } 4631 } 4632 return row[n]; 4633 } 4634 4635 function levSimilarity(a, b) { 4636 var maxLen = Math.max(a.length, b.length) || 1; 4637 return 1 - (levenshtein(a, b) / maxLen); 4638 } 4639 4640 function scoreMatch(command, title) { 4641 var c = normalizeStr(command); 4642 var t = normalizeStr(title); 4643 if (!c || !t) { return 0; } 4644 if (c === t) { return 1; } 4645 if (t.indexOf(c) !== -1 || c.indexOf(t) !== -1) { return 0.9; } 4646
4647 var cTokens = c.split(' ').filter(Boolean); 4648 var tTokens = t.split(' ').filter(Boolean); 4649 var tSet = {}; 4650 tTokens.forEach(function (w) { tSet[w] = true; }); 4651 var unionSet = {}; 4652 cTokens.concat(tTokens).forEach(function (w) { unionSet[w] = true; }); 4653 var intersectionCount = 0; 4654 cTokens.forEach(function (w) { if (tSet[w]) { intersectionCount++; } }); 4655 var unionCount = Object.keys(unionSet).length || 1; 4656 4657 return (intersectionCount / unionCount) * 0.8; 4658 } 4659 4660 function findNavMatches(command) { 4661 return voiceNavTargets 4662 .map(function (target) { 4663 return { title: target.title, url: target.url, score: scoreMatch(command, target.title) }; 4664 }) 4665 .sort(function (a, b) { 4666 if (Math.abs(a.score - b.score) > 0.0001) { return b.score - a.score; } 4667 return levSimilarity(normalizeStr(command), normalizeStr(b.title)) - levSimilarity(normalizeStr(command), normalizeStr(a.title)); 4668 }); 4669 } 4670 4671 var recognition = null; 4672 var isListening = false; 4673 var finalFired = false; 4674 var safetyTimer = null; 4675 var searchRequestCounter = 0; 4676 var redirectCountdownTimer = null; 4677 var redirectTimer = null; 4678 4679 function clearRedirectTimers() { 4680 window.clearInterval(redirectCountdownTimer); 4681 window.clearTimeout(redirectTimer); 4682 redirectCountdownTimer = null; 4683 redirectTimer = null; 4684 } 4685 4686 /* ââ Stage control: idle â listening â searching â results ââ */ 4687 function setStage(stage) { 4688 micStage.classList.toggle('is-listening', stage === 'listening'); 4689 stepsEl.hidden = (stage === 'results'); 4690 resultsEl.hidden = (stage !== 'results'); 4691 retryBtn.hidden = (stage !== 'results'); 4692 4693 if (stage === 'idle') { 4694 statusText.textContent = DEFAULT_STATUS; 4695 transcriptEl.hidden = true; 4696 transcriptEl.textContent = ''; 4697 } else if (stage === 'listening') { 4698 statusText.textContent = 'Listening⦠speak now'; 4699 } else if (stage === 'searching') { 4700 statusText.textContent = 'Searchingâ¦'; 4701 } 4702 } 4703 4704 function resetResults() { 4705 clearRedirectTimers(); 4706 stopPickListening(); 4707 bestMatchEl.hidden = true; bestMatchEl.innerHTML = ''; 4708 suggestionsEl.hidden = true; accordionEl.innerHTML = ''; 4709 emptyEl.hidden = true; 4710 } 4711
4712 // The single voice-driven "we found it" moment â used for a 4713 // confident nav-menu match, a single content-search hit, AND a 4714 // spoken pick off a suggestion list. No click required: it's 4715 // announced out loud, shown with a countdown, then the modal 4716 // closes itself and the page navigates there automatically. 4717 function confirmAndOpen(target) { 4718 stopPickListening(); 4719 resetResults(); 4720 bestMatchEl.hidden = false; 4721 bestMatchEl.innerHTML = 4722 '<div class="voice-modal-match-card">' + 4723 '<span class="voice-modal-match-icon"><i class="fas fa-circle-check" aria-hidden="true"></i></span>' + 4724 '<div class="voice-modal-match-body">' + 4725 '<span class="voice-modal-match-label">We found this for you</span>' + 4726 '<h6 class="voice-modal-match-title">' + escapeHtml(target.title) + '</h6>' + 4727 '<p class="voice-modal-match-countdown" data-voice-modal-countdown></p>' + 4728 '</div>' + 4729 '</div>'; 4730 statusText.textContent = 'Direct match found'; 4731 setStage('results'); 4732 micStage.classList.remove('is-listening'); 4733 4734 userStopped = true; 4735 if (recognition) { try { recognition.abort(); } catch (e) {} } 4736 4737 speak('Found it. ' + target.title + '. Opening it now.'); 4738 4739 var countdownEl = bestMatchEl.querySelector('[data-voice-modal-countdown]'); 4740 var secondsLeft = 3; 4741 4742 function renderCountdown() { 4743 if (!countdownEl) { return; } 4744 countdownEl.innerHTML = 'Redirecting to your search page in <strong>' + secondsLeft + '</strong> second' + (secondsLeft === 1 ? '' : 's') + '…'; 4745 } 4746 4747 renderCountdown(); 4748 4749 redirectCountdownTimer = window.setInterval(function () { 4750 secondsLeft -= 1; 4751 if (secondsLeft > 0) { renderCountdown(); } 4752 }, 1000); 4753 4754 redirectTimer = window.setTimeout(function () { 4755 clearRedirectTimers(); 4756 var closeBtn = modalEl.querySelector('[data-bs-dismiss="modal"]'); 4757 if (closeBtn) { closeBtn.click(); } 4758 window.location.href = target.url; 4759 }, 3000); 4760 } 4761 4762 function formatBreadcrumb(path) { 4763 return escapeHtml(String(path || '')).split(' > ').join(' <span class="voice-modal-crumb-sep">»</span> '); 4764 } 4765 4766 /* ââ Ordinal words ("first", "second", â¦) let a blind user pick 4767 by position instead of having to repeat a whole title. ââ */ 4768 var ORDINAL_WORDS = { 4769 first: 0, one: 0, '1': 0, top: 0, 4770 second: 1, two: 1, '2': 1, 4771 third: 2, three: 2, '3': 2, 4772 fourth: 3, four: 3, '4': 3, 4773 fifth: 4, five: 4, '5': 4 4774 }; 4775 4776 function pickByOrdinal(text, count) { 4777 var tokens = normalizeStr(text).split(' '); 4778 for (var i = 0; i < tokens.length; i++) { 4779 if (Object.prototype.hasOwnProperty.call(ORDINAL_WORDS, tokens[i])) { 4780 var idx = ORDINAL_WORDS[tokens[i]]; 4781 if (idx < count) { return idx; } 4782 } 4783 } 4784 return -1; 4785 } 4786 4787 var pickRecognition = null; 4788 var pickRetries = 0; 4789 4790 function stopPickListening() { 4791 if (pickRecognition) { try { pickRecognition.abort(); } catch (e) {} pickRecognition = null; } 4792 } 4793 4794 /* ââ The suggestions accordion stays for anyone browsing by 4795 sight or by screen reader, but for a blind user speaking is 4796 the primary path: we read the options out loud and listen 4797 for their answer â by title or by position ("second") â 4798 and open it the same way a direct match would. ââ */ 4799 function startPickListening(results) { 4800 if (!modalEl.classList.contains('show')) { return; } 4801 stopPickListening(); 4802 micStage.classList.add('is-listening'); 4803 statusText.textContent = 'Listening for your choiceâ¦'; 4804 4805 var r = new SpeechRecognitionCtor(); 4806 r.lang = 'en-US'; 4807 r.continuous = false;
4808 r.interimResults = false; 4809 r.maxAlternatives = 3; 4810 pickRecognition = r; 4811 4812 r.addEventListener('result', function (e) { 4813 var alternatives = e.results[0]; 4814 var ordinalIdx = -1; 4815 var best = null; 4816 4817 for (var i = 0; i < alternatives.length; i++) { 4818 var said = alternatives[i].transcript.trim(); 4819 var idx = pickByOrdinal(said, results.length); 4820 if (idx !== -1) { ordinalIdx = idx; break; } 4821 4822 var scored = results 4823 .map(function (item, itemIdx) { return { idx: itemIdx, score: scoreMatch(extractKeywords(said), item.path) }; }) 4824 .sort(function (a, b) { return b.score - a.score; }); 4825 4826 if (scored[0] && (!best || scored[0].score > best.score)) { best = scored[0]; } 4827 } 4828 4829 var chosenIdx = ordinalIdx !== -1 ? ordinalIdx : ((best && best.score >= 0.45) ? best.idx : -1); 4830 4831 if (chosenIdx !== -1) { 4832 var chosen = results[chosenIdx]; 4833 confirmAndOpen({ title: chosen.path, url: chosen.url }); 4834 return; 4835 } 4836 4837 pickRetries++; 4838 if (pickRetries < 3 && modalEl.classList.contains('show')) { 4839 speak("Sorry, I didn't catch that. Please say the page name again, or say first, second, or third.", function () { 4840 startPickListening(results); 4841 }); 4842 } else { 4843 micStage.classList.remove('is-listening'); 4844 statusText.textContent = 'Say a page name, or browse the list below'; 4845 speak('You can browse the list below, or tap the microphone to search again.'); 4846 } 4847 }); 4848 4849 r.addEventListener('error', function (e) { 4850 if (pickRecognition === r) { pickRecognition = null; } 4851 micStage.classList.remove('is-listening'); 4852 if (e.error === 'aborted' || !modalEl.classList.contains('show')) { return; } 4853 4854 pickRetries++; 4855 if (pickRetries < 3) { 4856 window.setTimeout(function () { startPickListening(results); }, 500); 4857 } else { 4858 statusText.textContent = 'Say a page name, or browse the list below'; 4859 } 4860 }); 4861 4862 r.addEventListener('end', function () { 4863 if (pickRecognition === r) { pickRecognition = null; } 4864 }); 4865 4866 try { r.start(); } catch (e) {} 4867 } 4868 4869 function listenForPick(results) { 4870 pickRetries = 0; 4871 var names = results.slice(0, 4).map(function (item) { return item.path; }).join('. '); 4872 var extra = results.length > 4 ? ', and more' : ''; 4873 var announcement = 'I found ' + results.length + (results.length === 1 ? ' result' : ' results') + '. ' + names + extra + '. Say the page name you want, or say first, second, or third.'; 4874 speak(announcement, function () { startPickListening(results); }); 4875 } 4876 4877 function showSuggestions(results) { 4878 resetResults(); 4879 suggestionsEl.hidden = false;
4880 accordionEl.innerHTML = results.map(function (item, idx) { 4881 var collapseId = 'voiceModalResult' + idx; 4882 return ( 4883 '<div class="accordion-item voice-modal-accordion-item">' + 4884 '<h2 class="accordion-header">' + 4885 '<button class="accordion-button' + (idx === 0 ? '' : ' collapsed') + '" type="button" data-bs-toggle="collapse" data-bs-target="#' + collapseId + '">' + 4886 '<span class="voice-modal-crumb">' + formatBreadcrumb(item.path) + '</span>' + 4887 '</button>' + 4888 '</h2>' + 4889 '<div id="' + collapseId + '" class="accordion-collapse collapse' + (idx === 0 ? ' show' : '') + '" data-bs-parent="#voiceModalAccordion">' + 4890 '<div class="accordion-body">' + 4891 '<p class="voice-modal-result-preview">' + escapeHtml(item.preview || '') + '</p>' + 4892 '<a href="' + escapeHtml(item.url) + '" class="voice-modal-result-link">Visit Page <i class="fas fa-arrow-right" aria-hidden="true"></i></a>' + 4893 '</div>' + 4894 '</div>' + 4895 '</div>' 4896 ); 4897 }).join(''); 4898 statusText.textContent = 'Suggested pages for you'; 4899 setStage('results'); 4900 4901 userStopped = true; 4902 if (recognition) { try { recognition.abort(); } catch (e) {} } 4903 4904 listenForPick(results); 4905 } 4906 4907 function showEmpty() { 4908 resetResults(); 4909 emptyEl.hidden = false; 4910 statusText.textContent = 'No matches found'; 4911 setStage('results'); 4912 speak("I couldn't find anything for that. Tap the microphone and try again."); 4913 } 4914 4915 // Accepts either one query string or a list of candidate queries 4916 // (speech-to-text's n-best guesses, in confidence order). Tries 4917 // each in turn and stops at the first one that finds anything â 4918 // a misheard top guess ("Rajiv Goyal") no longer means "no 4919 // results" if guess #2 or #3 ("Rajiv Goel") actually matches. 4920 function runContentSearch(queries) { 4921 var queryList = (Array.isArray(queries) ? queries : [queries]) 4922 .filter(Boolean) 4923 .slice(0, 3); 4924 4925 if (!queryList.length) { showEmpty(); return; } 4926 4927 setStage('searching'); 4928 searchRequestCounter += 1; 4929 var currentRequest = searchRequestCounter; 4930 4931 function tryQuery(idx) { 4932 if (idx >= queryList.length) { 4933 if (currentRequest === searchRequestCounter) { showEmpty(); } 4934 return; 4935 } 4936 4937 window.fetch(searchUrl + '?q=' + encodeURIComponent(queryList[idx]), { 4938 headers: { 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json' }, 4939 }) 4940 .then(function (response) { 4941 if (!response.ok) { throw new Error('unavailable'); } 4942 return response.json(); 4943 }) 4944 .then(function (payload) { 4945 if (currentRequest !== searchRequestCounter) { return; } 4946 var results = Array.isArray(payload.results) ? payload.results : []; 4947 if (results.length === 1) {
4948 // Unambiguous â just open it, same as a direct nav match. 4949 confirmAndOpen({ title: results[0].path, url: results[0].url }); 4950 } else if (results.length > 1) { 4951 showSuggestions(results); 4952 } else { 4953 tryQuery(idx + 1); 4954 } 4955 }) 4956 .catch(function () { 4957 if (currentRequest !== searchRequestCounter) { return; } 4958 tryQuery(idx + 1); 4959 }); 4960 } 4961 4962 tryQuery(0); 4963 } 4964 4965 /* ââ Decide what a spoken phrase means. Accepts one transcript or 4966 a list of n-best alternatives (in confidence order): a 4967 confident nav-menu match on any of them opens immediately; 4968 otherwise all of them are tried, in order, against full-text 4969 content search until one finds something. ââ */ 4970 function handleTranscript(transcripts) { 4971 var candidates = (Array.isArray(transcripts) ? transcripts : [transcripts]) 4972 .map(function (t) { return extractKeywords(stripFillers(normalizeStr(t))); }) 4973 .filter(Boolean); 4974 4975 var seen = {}; 4976 candidates = candidates.filter(function (c) { 4977 if (seen[c]) { return false; } 4978 seen[c] = true; 4979 return true; 4980 }); 4981 4982 if (!candidates.length) { showEmpty(); return; } 4983 4984 for (var i = 0; i < candidates.length; i++) { 4985 var matches = findNavMatches(candidates[i]); 4986 var top = matches[0]; 4987 var second = matches[1]; 4988 4989 if (top && top.score >= 0.72 && (!second || (top.score - second.score) >= 0.15)) { 4990 confirmAndOpen(top); 4991 return; 4992 } 4993 } 4994 4995 runContentSearch(candidates); 4996 } 4997 4998 var userStopped = false; 4999 5000 /* ââ Build a brand-new recognition instance for every listen 5001 attempt instead of restarting one shared object â reusing a 5002 single instance across start/abort/end cycles is what made 5003 the mic button appear to "stop working": browsers can throw 5004 on .start() if called before the previous session has fully 5005 torn down. `continuous: true` also keeps the mic actively 5006 listening instead of the engine auto-closing the session 5007 after a couple of quiet seconds. ââ */ 5008 function createRecognition() { 5009 var r = new SpeechRecognitionCtor(); 5010 r.lang = 'en-US'; 5011 r.continuous = true; 5012 r.interimResults = true; 5013 r.maxAlternatives = 5; 5014 5015 r.addEventListener('start', function () { 5016 isListening = true; 5017 finalFired = false; 5018 setStage('listening'); 5019 safetyTimer = window.setTimeout(function () { 5020 try { r.abort(); } catch (e) {} 5021 }, 20000); 5022 }); 5023 5024 r.addEventListener('result', function (e) { 5025 var interimText = ''; 5026 var finalAlternatives = []; 5027 5028 // Collect every alternative the engine offered, in its own 5029 // confidence order â scoring them against the nav menu here 5030 // is meaningless for a query like a person's name (nothing to 5031 // score against), so the ranking-among-alternatives now 5032 // happens downstream in handleTranscript/runContentSearch, 5033 // which can actually try each one against real search results. 5034 for (var i = e.resultIndex; i < e.results.length; i++) { 5035 if (e.results[i].isFinal) { 5036 for (var j = 0; j < e.results[i].length; j++) { 5037 var candidateText = e.results[i][j].transcript.trim(); 5038 if (candidateText) { finalAlternatives.push(candidateText); } 5039 } 5040 } else { 5041 interimText = e.results[i][0].transcript.trim(); 5042 } 5043 } 5044 5045 if (finalAlternatives.length) { 5046 finalFired = true; 5047 transcriptEl.hidden = false;
5048 transcriptEl.textContent = 'â' + finalAlternatives[0] + 'â'; 5049 // We only want the first phrase â stop the (continuous) 5050 // session now that we have it instead of continuing to listen. 5051 try { r.stop(); } catch (e) {} 5052 handleTranscript(finalAlternatives); 5053 } else if (interimText) { 5054 transcriptEl.hidden = false; 5055 transcriptEl.textContent = 'â' + interimText + 'â'; 5056 } 5057 }); 5058 5059 r.addEventListener('end', function () { 5060 window.clearTimeout(safetyTimer); 5061 isListening = false; 5062 if (recognition === r) { recognition = null; } 5063 5064 if (finalFired || !modalEl.classList.contains('show')) { return; } 5065 5066 if (userStopped) { 5067 micStage.classList.remove('is-listening'); 5068 setStage('idle'); 5069 return; 5070 } 5071 5072 var pending = transcriptEl.textContent.replace(/[ââ]/g, '').trim(); 5073 if (pending.length >= 2) { 5074 handleTranscript(pending); 5075 } else { 5076 // Session closed itself out (engine-side quiet timeout) 5077 // without us hearing anything â keep the mic effectively 5078 // "active" by transparently starting a new session rather 5079 // than dumping the user back to a dead idle screen. 5080 startRecognition(); 5081 } 5082 }); 5083 5084 r.addEventListener('error', function (e) { 5085 window.clearTimeout(safetyTimer); 5086 isListening = false; 5087 if (recognition === r) { recognition = null; } 5088 micStage.classList.remove('is-listening'); 5089 5090 if (e.error === 'aborted') { return; } 5091 5092 if (e.error === 'no-speech') { 5093 if (!userStopped && modalEl.classList.contains('show')) { startRecognition(); } 5094 return; 5095 } 5096 5097 var msg = 'Voice search failed. Please try again.'; 5098 if (e.error === 'not-allowed' || e.error === 'service-not-allowed') { msg = 'Microphone is blocked for this site. Allow it in your browser settings and reload the page.'; } 5099 else if (e.error === 'network') { msg = 'Network error during voice recognition.'; } 5100 else if (e.error === 'audio-capture') { msg = 'No microphone found. Please connect a microphone.'; } 5101 statusText.textContent = msg; 5102 speak(msg); 5103 }); 5104 5105 return r; 5106 } 5107 5108 function startRecognition() { 5109 userStopped = false; 5110 finalFired = false; 5111 if (recognition) { try { recognition.abort(); } catch (e) {} } 5112 recognition = createRecognition(); 5113 try { recognition.start(); } catch (e) {} 5114 } 5115 5116 function requestListen() { 5117 if (navigator.permissions && navigator.permissions.query) { 5118 navigator.permissions.query({ name: 'microphone' }).then(function (status) { 5119 if (status.state === 'denied') { 5120 var msg = 'Microphone is blocked for this site. Allow it in your browser settings and reload the page.'; 5121 statusText.textContent = msg; 5122 speak(msg); 5123 return; 5124 } 5125 startRecognition(); 5126 }).catch(startRecognition); 5127 } else { 5128 startRecognition(); 5129 } 5130 } 5131 5132 function isAnyListening() { 5133 return isListening || !!pickRecognition; 5134 } 5135 5136 // The mic button opens the modal via its own 5137 // data-bs-toggle="modal" attribute â Bootstrap handles 5138 // show/hide natively, so we only hook its lifecycle
5139 // events rather than instantiating bootstrap.Modal 5140 // ourselves (avoids relying on Modal.getOrCreateInstance, 5141 // which doesn't exist in the Bootstrap 5.0 build this 5142 // site loads). 5143 modalEl.addEventListener('show.bs.modal', function () { 5144 resetResults(); 5145 setStage('idle'); 5146 }); 5147 5148 modalEl.addEventListener('shown.bs.modal', function () { 5149 // Spoken for blind users before the mic opens, so they know 5150 // what to say instead of talking over dead air. 5151 speak('Voice search. Say something like About Us, Fee Structure, Admission or NAAC etc.', function () { 5152 requestListen(); 5153 }); 5154 }); 5155 5156 micBtn.addEventListener('click', function () { 5157 if (isAnyListening()) { 5158 userStopped = true; 5159 if (recognition) { try { recognition.abort(); } catch (e) {} } 5160 stopPickListening(); 5161 setStage('idle'); 5162 return; 5163 } 5164 setStage('idle'); 5165 startRecognition(); 5166 }); 5167 5168 retryBtn.addEventListener('click', function () { 5169 resetResults(); 5170 setStage('idle'); 5171 startRecognition(); 5172 }); 5173 5174 modalEl.addEventListener('hidden.bs.modal', function () { 5175 userStopped = true; 5176 if (recognition) { try { recognition.abort(); } catch (e) {} } 5177 window.clearTimeout(safetyTimer); 5178 if (window.speechSynthesis) { window.speechSynthesis.cancel(); } 5179 resetResults(); 5180 setStage('idle'); 5181 }); 5182 }); 5183 </script>
5183 5184 <div class="container-fluid nav-bar p-0"> 5185 <nav class="navbar navbar-expand-lg navbar-light bg-white px-4 px-lg-5 py-3 py-lg-0"> 5186 <a href="https://svc.ac.in" class="navbar-brand p-0"> 5187 5188 </a> 5189 <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"> 5190 <span class="fa fa-bars"></span> 5191 </button> 5192 <div class="collapse navbar-collapse" id="navbarCollapse"> 5193 <div class="navbar-menu-wrap d-flex justify-content-center"> 5194 <div class="navbar-nav py-0"> 5195 <a href="https://svc.ac.in" class="nav-item nav-link active"><i class="fa fa-home nav-link-icon" aria-hidden="true"></i><span>Home</span></a> 5196 <div class="nav-item dropdown"> 5197 <a href="#" class="nav-link" data-bs-toggle="dropdown"><i class="fa fa-info-circle nav-link-icon" aria-hidden="true"></i><span class="dropdown-toggle">ABOUT</span></a> 5198 <ul class="dropdown-menu list-unstyled m-0"> 5199 <li> 5200 <a class="dropdown-item" href="https://svc.ac.in/extended/23" > 5201 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5202 <span class="dropdown-item-text">ABOUT US</span> 5203 </a> 5204 </li> 5205 <li> 5206 <a class="dropdown-item" href="https://svc.ac.in/extended/30" > 5207 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5208 <span class="dropdown-item-text">TTD</span> 5209 </a> 5210 </li> 5211 <li> 5212 <a class="dropdown-item" href="https://svc.ac.in/extended/38" > 5213 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5214 <span class="dropdown-item-text">GOVERNING BODY</span> 5215 </a> 5216 </li> 5217 <li> 5218 <a class="dropdown-item" href="https://svc.ac.in/extended/44" > 5219 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5220 <span class="dropdown-item-text">ADMINISTRATION</span> 5221 </a> 5222 </li> 5223 <li> 5224 <a class="dropdown-item" href="https://svc.ac.in/extended/51" > 5225 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5226 <span class="dropdown-item-text">ORGANOGRAM</span> 5227 </a> 5228 </li> 5229 <li> 5230 <a class="dropdown-item" href="https://svc.ac.in/extended/57" > 5231 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5232 <span class="dropdown-item-text">ANNUAL REPORTS</span> 5233 </a> 5234 </li> 5235 <li> 5236 <a class="dropdown-item" href="https://svc.ac.in/extended/62" > 5237 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5238 <span class="dropdown-item-text">VISION & MISSION</span> 5239 </a> 5240 </li> 5241 <li> 5242 <a class="dropdown-item" href="https://svc.ac.in/notices/tenders" > 5243 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5244 <span class="dropdown-item-text">TENDER QUOTATIONS</span> 5245 </a> 5246 </li> 5247 <li> 5248 <a class="dropdown-item" href="https://svc.ac.in/extended/70" > 5249 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5250 <span class="dropdown-item-text">VIKSIT BHARAT</span> 5251 </a> 5252 </li> 5253 <li> 5254 <a class="dropdown-item" href="https://svc.ac.in/extended/74" > 5255 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5256 <span class="dropdown-item-text">PHOTO GALLERY</span> 5257 </a> 5258 </li> 5259 <li> 5260 <a class="dropdown-item" href="https://svc.ac.in/extended/76" > 5261 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i>
5262 <span class="dropdown-item-text">RAJBHASHA</span> 5263 </a> 5264 </li> 5265 <li> 5266 <a class="dropdown-item" href="https://svc.ac.in/extended/79" > 5267 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5268 <span class="dropdown-item-text">DOWNLOAD CENTER</span> 5269 </a> 5270 </li> 5271 <li> 5272 <a class="dropdown-item" href="https://svc.ac.in/notices/jobs" > 5273 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5274 <span class="dropdown-item-text">JOB</span> 5275 </a> 5276 </li> 5277 <li> 5278 <a class="dropdown-item" href="https://svc.ac.in/extended/83" > 5279 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5280 <span class="dropdown-item-text">PRINCIPAL'S DESK</span> 5281 </a> 5282 </li> 5283 <li> 5284 <a class="dropdown-item" href="https://svc.ac.in/extended/84" > 5285 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5286 <span class="dropdown-item-text">STAFF ELECTION</span> 5287 </a> 5288 </li> 5289 </ul> 5290 </div> 5291 <div class="nav-item dropdown"> 5292 <a href="#" class="nav-link" data-bs-toggle="dropdown"><i class="fa fa-graduation-cap nav-link-icon" aria-hidden="true"></i><span class="dropdown-toggle">ACADEMICS</span></a> 5293 <ul class="dropdown-menu list-unstyled m-0"> 5294 <li class="dropdown-submenu"> 5295 <a class="dropdown-item dropdown-toggle submenu-toggle" href="#" role="button" aria-expanded="false"> 5296 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5297 <span class="dropdown-item-text">DEPARTMENTS</span> 5298 </a> 5299 <ul class="dropdown-menu list-unstyled m-0"> 5300 <li> 5301 <a class="dropdown-item" href="https://svc.ac.in/extended/85" > 5302 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5303 <span class="dropdown-item-text">BIOCHEMISTRY</span> 5304 </a> 5305 </li> 5306 <li> 5307 <a class="dropdown-item" href="https://svc.ac.in/extended/87" > 5308 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5309 <span class="dropdown-item-text">BOTANY</span> 5310 </a> 5311 </li> 5312 <li> 5313 <a class="dropdown-item" href="https://svc.ac.in/extended/89" > 5314 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5315 <span class="dropdown-item-text">CHEMISTRY</span> 5316 </a> 5317 </li> 5318 <li> 5319 <a class="dropdown-item" href="https://svc.ac.in/extended/91" > 5320 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5321 <span class="dropdown-item-text">COMMERCE</span> 5322 </a> 5323 </li> 5324 <li> 5325 <a class="dropdown-item" href="https://svc.ac.in/extended/93" > 5326 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5327 <span class="dropdown-item-text">ECONOMICS</span> 5328 </a> 5329 </li> 5330 <li> 5331 <a class="dropdown-item" href="https://svc.ac.in/extended/95" > 5332 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5333 <span class="dropdown-item-text">ELECTRONICS</span> 5334 </a> 5335 </li> 5336 <li> 5337 <a class="dropdown-item" href="https://svc.ac.in/extended/97" > 5338 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i>
5339 <span class="dropdown-item-text">ENGLISH</span> 5340 </a> 5341 </li> 5342 <li> 5343 <a class="dropdown-item" href="https://svc.ac.in/extended/99" > 5344 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5345 <span class="dropdown-item-text">ENVIRONMENTAL SCIENCE</span> 5346 </a> 5347 </li> 5348 <li> 5349 <a class="dropdown-item" href="https://svc.ac.in/extended/101" > 5350 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5351 <span class="dropdown-item-text">HINDI</span> 5352 </a> 5353 </li> 5354 <li> 5355 <a class="dropdown-item" href="https://svc.ac.in/extended/103" > 5356 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5357 <span class="dropdown-item-text">HISTORY</span> 5358 </a> 5359 </li> 5360 <li> 5361 <a class="dropdown-item" href="https://svc.ac.in/extended/105" > 5362 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5363 <span class="dropdown-item-text">MATHEMATICS</span> 5364 </a> 5365 </li> 5366 <li> 5367 <a class="dropdown-item" href="https://svc.ac.in/extended/107" > 5368 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5369 <span class="dropdown-item-text">PHYSICAL EDUCATION</span> 5370 </a> 5371 </li> 5372 <li> 5373 <a class="dropdown-item" href="https://svc.ac.in/extended/109" > 5374 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5375 <span class="dropdown-item-text">PHYSICS</span> 5376 </a> 5377 </li> 5378 <li> 5379 <a class="dropdown-item" href="https://svc.ac.in/extended/111" > 5380 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5381 <span class="dropdown-item-text">POLITICAL SCIENCE</span> 5382 </a> 5383 </li> 5384 <li> 5385 <a class="dropdown-item" href="https://svc.ac.in/extended/113" > 5386 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5387 <span class="dropdown-item-text">SANSKRIT</span> 5388 </a> 5389 </li> 5390 <li> 5391 <a class="dropdown-item" href="https://svc.ac.in/extended/115" > 5392 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5393 <span class="dropdown-item-text">SOCIOLOGY</span> 5394 </a> 5395 </li> 5396 <li> 5397 <a class="dropdown-item" href="https://svc.ac.in/extended/117" > 5398 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5399 <span class="dropdown-item-text">STATISTICS</span> 5400 </a> 5401 </li> 5402 <li> 5403 <a class="dropdown-item" href="https://svc.ac.in/extended/119" > 5404 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5405 <span class="dropdown-item-text">TAMIL</span> 5406 </a> 5407 </li> 5408 <li> 5409 <a class="dropdown-item" href="https://svc.ac.in/extended/121" > 5410 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5411 <span class="dropdown-item-text">TELUGU</span> 5412 </a> 5413 </li> 5414 <li> 5415 <a class="dropdown-item" href="https://svc.ac.in/extended/123" > 5416 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5417 <span class="dropdown-item-text">ZOOLOGY</span> 5418 </a> 5419 </li> 5420 <li> 5421 <a class="dropdown-item" href="https://svc.ac.in/extended/125" > 5422 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5423 <span class="dropdown-item-text">B. A. PROGRAMME</span> 5424 </a> 5425 </li> 5426 <li> 5427 <a class="dropdown-item" href="https://svc.ac.in/extended/127" > 5428 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i>
5429 <span class="dropdown-item-text">LIFE SCIENCE</span> 5430 </a> 5431 </li> 5432 <li> 5433 <a class="dropdown-item" href="https://svc.ac.in/extended/129" > 5434 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5435 <span class="dropdown-item-text">BIOLOGICAL SCIENCE</span> 5436 </a> 5437 </li> 5438 </ul> 5439 </li> 5440 <li> 5441 <a class="dropdown-item" href="https://svc.ac.in/extended/31" > 5442 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5443 <span class="dropdown-item-text">COURSES OFFERED</span> 5444 </a> 5445 </li> 5446 <li> 5447 <a class="dropdown-item" href="https://svc.ac.in/extended/45" > 5448 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5449 <span class="dropdown-item-text">SYLLABUS</span> 5450 </a> 5451 </li> 5452 <li> 5453 <a class="dropdown-item" href="https://svc.ac.in/extended/52" > 5454 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5455 <span class="dropdown-item-text">TIME TABLE</span> 5456 </a> 5457 </li> 5458 <li> 5459 <a class="dropdown-item" href="https://svc.ac.in/extended/58" > 5460 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5461 <span class="dropdown-item-text">ACADEMIC CALENDAR</span> 5462 </a> 5463 </li> 5464 <li> 5465 <a class="dropdown-item" href="https://svc.ac.in/extended/63" > 5466 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5467 <span class="dropdown-item-text">TRAINING & INTERNSHIP</span> 5468 </a> 5469 </li> 5470 <li> 5471 <a class="dropdown-item" href="https://svc.ac.in/extended/68" > 5472 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5473 <span class="dropdown-item-text">ADDITIONAL COURSES/ FOREIGN LANGUAGE</span> 5474 </a> 5475 </li> 5476 <li> 5477 <a class="dropdown-item" href="https://svc.ac.in/notices/college" > 5478 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5479 <span class="dropdown-item-text">COLLEGE NOTICES & CIRCULARS</span> 5480 </a> 5481 </li> 5482 <li> 5483 <a class="dropdown-item" href="https://svc.ac.in/notices/students" > 5484 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5485 <span class="dropdown-item-text">STUDENT NOTICES & CIRCULARS</span> 5486 </a> 5487 </li> 5488 </ul> 5489 </div> 5490 <div class="nav-item dropdown"> 5491 <a href="#" class="nav-link" data-bs-toggle="dropdown"><i class="fa fa-user-plus nav-link-icon" aria-hidden="true"></i><span class="dropdown-toggle">ADMISSIONS</span></a> 5492 <ul class="dropdown-menu list-unstyled m-0"> 5493 <li class="dropdown-submenu"> 5494 <a class="dropdown-item dropdown-toggle submenu-toggle" href="#" role="button" aria-expanded="false"> 5495 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5496 <span class="dropdown-item-text">PG Courses</span> 5497 </a> 5498 <ul class="dropdown-menu list-unstyled m-0"> 5499 <li> 5500 <a class="dropdown-item" href="https://svc.ac.in/extended/149" > 5501 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5502 <span class="dropdown-item-text">2026-2027</span> 5503 </a> 5504 </li> 5505 <li> 5506 <a class="dropdown-item" href="https://svc.ac.in/extended/148" > 5507 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i>
5508 <span class="dropdown-item-text">2025-2026</span> 5509 </a> 5510 </li> 5511 </ul> 5512 </li> 5513 <li class="dropdown-submenu"> 5514 <a class="dropdown-item dropdown-toggle submenu-toggle" href="#" role="button" aria-expanded="false"> 5515 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5516 <span class="dropdown-item-text">UG Courses</span> 5517 </a> 5518 <ul class="dropdown-menu list-unstyled m-0"> 5519 <li> 5520 <a class="dropdown-item" href="https://svc.ac.in/extended/146" > 5521 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5522 <span class="dropdown-item-text">2026-2027</span> 5523 </a> 5524 </li> 5525 <li> 5526 <a class="dropdown-item" href="https://svc.ac.in/extended/145" > 5527 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5528 <span class="dropdown-item-text">2025-2026</span> 5529 </a> 5530 </li> 5531 </ul> 5532 </li> 5533 <li> 5534 <a class="dropdown-item" href="https://svc.ac.in/extended/39" > 5535 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5536 <span class="dropdown-item-text">COLLEGE PROSPECTUS</span> 5537 </a> 5538 </li> 5539 </ul> 5540 </div> 5541 <div class="nav-item dropdown"> 5542 <a href="#" class="nav-link" data-bs-toggle="dropdown"><i class="fa fa-user-graduate nav-link-icon" aria-hidden="true"></i><span class="dropdown-toggle">STUDENTS' CORNER</span></a> 5543 <ul class="dropdown-menu list-unstyled m-0"> 5544 <li> 5545 <a class="dropdown-item" href="https://svc.ac.in/extended/33" > 5546 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5547 <span class="dropdown-item-text">ACHIEVEMENTS</span> 5548 </a> 5549 </li> 5550 <li> 5551 <a class="dropdown-item" href="https://svc.ac.in/extended/157" > 5552 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5553 <span class="dropdown-item-text">FOREIGN STUDENTS</span> 5554 </a> 5555 </li> 5556 <li class="dropdown-submenu"> 5557 <a class="dropdown-item dropdown-toggle submenu-toggle" href="#" role="button" aria-expanded="false"> 5558 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5559 <span class="dropdown-item-text">SOCIETIES</span> 5560 </a> 5561 <ul class="dropdown-menu list-unstyled m-0"> 5562 <li> 5563 <a class="dropdown-item" href="https://svc.ac.in/extended/86" > 5564 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5565 <span class="dropdown-item-text">180DC SVC</span> 5566 </a> 5567 </li> 5568 <li> 5569 <a class="dropdown-item" href="https://svc.ac.in/extended/88" > 5570 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5571 <span class="dropdown-item-text">CATALYSIS</span> 5572 </a> 5573 </li> 5574 <li> 5575 <a class="dropdown-item" href="https://svc.ac.in/extended/90" > 5576 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5577 <span class="dropdown-item-text">CONNECTING DREAMS FOUNDATION</span> 5578 </a> 5579 </li> 5580 <li> 5581 <a class="dropdown-item" href="https://svc.ac.in/extended/92" > 5582 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5583 <span class="dropdown-item-text">ECO CLUB</span> 5584 </a> 5585 </li> 5586 <li> 5587 <a class="dropdown-item" href="https://svc.ac.in/extended/94" > 5588 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i>
5589 <span class="dropdown-item-text">ECONOMICS ASSOCIATION</span> 5590 </a> 5591 </li> 5592 <li> 5593 <a class="dropdown-item" href="https://svc.ac.in/extended/96" > 5594 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5595 <span class="dropdown-item-text">EMPATHISE</span> 5596 </a> 5597 </li> 5598 <li> 5599 <a class="dropdown-item" href="https://svc.ac.in/extended/98" > 5600 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5601 <span class="dropdown-item-text">ENACTUS</span> 5602 </a> 5603 </li> 5604 <li> 5605 <a class="dropdown-item" href="https://svc.ac.in/extended/100" > 5606 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5607 <span class="dropdown-item-text">EQUAL OPPORTUNITY CELL</span> 5608 </a> 5609 </li> 5610 <li> 5611 <a class="dropdown-item" href="https://svc.ac.in/extended/102" > 5612 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5613 <span class="dropdown-item-text">EXORDIUM</span> 5614 </a> 5615 </li> 5616 <li> 5617 <a class="dropdown-item" href="https://svc.ac.in/extended/112" > 5618 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5619 <span class="dropdown-item-text">NCC</span> 5620 </a> 5621 </li> 5622 <li> 5623 <a class="dropdown-item" href="https://svc.ac.in/extended/118" > 5624 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5625 <span class="dropdown-item-text">NSS</span> 5626 </a> 5627 </li> 5628 <li> 5629 <a class="dropdown-item" href="https://svc.ac.in/extended/122" > 5630 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5631 <span class="dropdown-item-text">YOUTH INDIA FOUNDATION</span> 5632 </a> 5633 </li> 5634 <li> 5635 <a class="dropdown-item" href="https://svc.ac.in/extended/124" > 5636 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5637 <span class="dropdown-item-text">CONSTELLATION HR CELL</span> 5638 </a> 5639 </li> 5640 <li> 5641 <a class="dropdown-item" href="https://svc.ac.in/extended/126" > 5642 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5643 <span class="dropdown-item-text">BRAINIACS</span> 5644 </a> 5645 </li> 5646 <li> 5647 <a class="dropdown-item" href="https://svc.ac.in/extended/104" > 5648 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5649 <span class="dropdown-item-text">Fine Arts Association</span> 5650 </a> 5651 </li> 5652 <li> 5653 <a class="dropdown-item" href="https://svc.ac.in/extended/128" > 5654 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5655 <span class="dropdown-item-text">FINE ARTS-ALAAP</span> 5656 </a> 5657 </li> 5658 <li> 5659 <a class="dropdown-item" href="https://svc.ac.in/extended/130" > 5660 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5661 <span class="dropdown-item-text">FINE ARTS-ANUBHUTI</span> 5662 </a> 5663 </li> 5664 <li> 5665 <a class="dropdown-item" href="https://svc.ac.in/extended/132" > 5666 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5667 <span class="dropdown-item-text">FINE ARTS-CRESCENDO</span> 5668 </a> 5669 </li> 5670 <li> 5671 <a class="dropdown-item" href="https://svc.ac.in/extended/133" > 5672 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i>
5673 <span class="dropdown-item-text">FINE ARTS-EFFULGENCE FILMS</span> 5674 </a> 5675 </li> 5676 <li> 5677 <a class="dropdown-item" href="https://svc.ac.in/extended/134" > 5678 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5679 <span class="dropdown-item-text">FINE ARTS-EFFULGENCE PHOTOGRAPHY</span> 5680 </a> 5681 </li> 5682 <li> 5683 <a class="dropdown-item" href="https://svc.ac.in/extended/135" > 5684 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5685 <span class="dropdown-item-text">FINE ARTS-LEONCI</span> 5686 </a> 5687 </li> 5688 <li> 5689 <a class="dropdown-item" href="https://svc.ac.in/extended/136" > 5690 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5691 <span class="dropdown-item-text">FINE ARTS-NRITYA</span> 5692 </a> 5693 </li> 5694 <li> 5695 <a class="dropdown-item" href="https://svc.ac.in/extended/137" > 5696 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5697 <span class="dropdown-item-text">FINE ARTS-NRITYANAGANA</span> 5698 </a> 5699 </li> 5700 <li> 5701 <a class="dropdown-item" href="https://svc.ac.in/extended/138" > 5702 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5703 <span class="dropdown-item-text">FINE ARTS-PETRICHOR</span> 5704 </a> 5705 </li> 5706 <li> 5707 <a class="dropdown-item" href="https://svc.ac.in/extended/139" > 5708 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5709 <span class="dropdown-item-text">FINE ARTS-VERBUM</span> 5710 </a> 5711 </li> 5712 <li> 5713 <a class="dropdown-item" href="https://svc.ac.in/extended/140" > 5714 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5715 <span class="dropdown-item-text">FINE ARTS-VERVE</span> 5716 </a> 5717 </li> 5718 <li> 5719 <a class="dropdown-item" href="https://svc.ac.in/extended/141" > 5720 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5721 <span class="dropdown-item-text">FINE ARTS-VIMARSH</span> 5722 </a> 5723 </li> 5724 </ul> 5725 </li> 5726 <li> 5727 <a class="dropdown-item" href="https://svc.ac.in/placements" > 5728 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5729 <span class="dropdown-item-text">PLACEMENTS</span> 5730 </a> 5731 </li> 5732 <li> 5733 <a class="dropdown-item" href="https://svc.ac.in/extended/46" > 5734 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5735 <span class="dropdown-item-text">FREESHIP</span> 5736 </a> 5737 </li> 5738 <li class="dropdown-submenu"> 5739 <a class="dropdown-item dropdown-toggle submenu-toggle" href="#" role="button" aria-expanded="false"> 5740 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5741 <span class="dropdown-item-text">STUDENTS' ELECTION</span> 5742 </a> 5743 <ul class="dropdown-menu list-unstyled m-0"> 5744 <li> 5745 <a class="dropdown-item" href="https://svc.ac.in/extended/160" > 5746 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5747 <span class="dropdown-item-text">2025-26</span> 5748 </a> 5749 </li> 5750 <li> 5751 <a class="dropdown-item" href="https://svc.ac.in/extended/161" > 5752 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5753 <span class="dropdown-item-text">2026-27</span> 5754 </a> 5755 </li> 5756 </ul> 5757 </li> 5758 <li> 5759 <a class="dropdown-item" href="https://svc.ac.in/extended/59" > 5760 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i>
5761 <span class="dropdown-item-text">ALUMNI</span> 5762 </a> 5763 </li> 5764 <li> 5765 <a class="dropdown-item" href="https://svc.ac.in/extended/80" > 5766 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5767 <span class="dropdown-item-text">SCHOLARSHIP</span> 5768 </a> 5769 </li> 5770 <li> 5771 <a class="dropdown-item" href="https://svc.ac.in/extended/82" > 5772 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5773 <span class="dropdown-item-text">COUNSELLOR</span> 5774 </a> 5775 </li> 5776 </ul> 5777 </div> 5778 <div class="nav-item dropdown"> 5779 <a href="#" class="nav-link" data-bs-toggle="dropdown"><i class="fa fa-award nav-link-icon" aria-hidden="true"></i><span class="dropdown-toggle">IQAC</span></a> 5780 <ul class="dropdown-menu list-unstyled m-0"> 5781 <li> 5782 <a class="dropdown-item" href="https://svc.ac.in/extended/29" > 5783 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5784 <span class="dropdown-item-text">IQAC COMPOSITION</span> 5785 </a> 5786 </li> 5787 <li> 5788 <a class="dropdown-item" href="https://svc.ac.in/extended/37" > 5789 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5790 <span class="dropdown-item-text">IQAC ACTIVITIES</span> 5791 </a> 5792 </li> 5793 <li> 5794 <a class="dropdown-item" href="https://svc.ac.in/extended/43" > 5795 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5796 <span class="dropdown-item-text">IQAC MINUTES</span> 5797 </a> 5798 </li> 5799 <li> 5800 <a class="dropdown-item" href="https://svc.ac.in/extended/50" > 5801 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5802 <span class="dropdown-item-text">IQAC BEST PRACTICES</span> 5803 </a> 5804 </li> 5805 <li> 5806 <a class="dropdown-item" href="https://svc.ac.in/extended/55" > 5807 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5808 <span class="dropdown-item-text">IQAC INSTITUTIONAL DISTINCTIVENESS</span> 5809 </a> 5810 </li> 5811 </ul> 5812 </div> 5813 <div class="nav-item dropdown"> 5814 <a href="#" class="nav-link" data-bs-toggle="dropdown"><i class="fa fa-certificate nav-link-icon" aria-hidden="true"></i><span class="dropdown-toggle">ACCREDITATION</span></a> 5815 <ul class="dropdown-menu list-unstyled m-0"> 5816 <li> 5817 <a class="dropdown-item" href="https://svc.ac.in/extended/26" > 5818 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5819 <span class="dropdown-item-text">NAAC</span> 5820 </a> 5821 </li> 5822 <li> 5823 <a class="dropdown-item" href="https://svc.ac.in/extended/34" > 5824 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5825 <span class="dropdown-item-text">NIRF</span> 5826 </a> 5827 </li> 5828 </ul> 5829 </div> 5830 <div class="nav-item dropdown"> 5831 <a href="#" class="nav-link" data-bs-toggle="dropdown"><i class="fa fa-building nav-link-icon" aria-hidden="true"></i><span class="dropdown-toggle">INFRASTRUCTURE</span></a> 5832 <ul class="dropdown-menu list-unstyled m-0"> 5833 <li> 5834 <a class="dropdown-item" href="https://svc.ac.in/extended/27" > 5835 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i>
5836 <span class="dropdown-item-text">LIBRARY</span> 5837 </a> 5838 </li> 5839 <li> 5840 <a class="dropdown-item" href="https://svc.ac.in/extended/35" > 5841 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5842 <span class="dropdown-item-text">ICT</span> 5843 </a> 5844 </li> 5845 <li> 5846 <a class="dropdown-item" href="https://svc.ac.in/extended/41" > 5847 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5848 <span class="dropdown-item-text">HOSTEL</span> 5849 </a> 5850 </li> 5851 <li> 5852 <a class="dropdown-item" href="https://svc.ac.in/extended/47" > 5853 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5854 <span class="dropdown-item-text">SPORTS</span> 5855 </a> 5856 </li> 5857 <li> 5858 <a class="dropdown-item" href="https://svc.ac.in/extended/54" > 5859 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5860 <span class="dropdown-item-text">SEMINAR HALL</span> 5861 </a> 5862 </li> 5863 <li> 5864 <a class="dropdown-item" href="https://svc.ac.in/extended/60" > 5865 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5866 <span class="dropdown-item-text">CANTEEN</span> 5867 </a> 5868 </li> 5869 <li> 5870 <a class="dropdown-item" href="https://svc.ac.in/extended/64" > 5871 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5872 <span class="dropdown-item-text">MEDICAL ROOM</span> 5873 </a> 5874 </li> 5875 <li> 5876 <a class="dropdown-item" href="https://svc.ac.in/extended/67" > 5877 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5878 <span class="dropdown-item-text">LABORATORIES</span> 5879 </a> 5880 </li> 5881 <li> 5882 <a class="dropdown-item" href="https://svc.ac.in/extended/69" > 5883 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5884 <span class="dropdown-item-text">BOTANICAL GARDEN</span> 5885 </a> 5886 </li> 5887 <li> 5888 <a class="dropdown-item" href="https://svc.ac.in/extended/72" > 5889 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5890 <span class="dropdown-item-text">ROCK GARDEN</span> 5891 </a> 5892 </li> 5893 </ul> 5894 </div> 5895 <div class="nav-item dropdown"> 5896 <a href="#" class="nav-link" data-bs-toggle="dropdown"><i class="fa fa-users nav-link-icon" aria-hidden="true"></i><span class="dropdown-toggle">COMMITTEES</span></a> 5897 <ul class="dropdown-menu list-unstyled m-0"> 5898 <li> 5899 <a class="dropdown-item" href="https://svc.ac.in/extended/28" > 5900 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5901 <span class="dropdown-item-text">STAFF COUNCIL</span> 5902 </a> 5903 </li> 5904 <li> 5905 <a class="dropdown-item" href="https://svc.ac.in/extended/42" > 5906 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5907 <span class="dropdown-item-text">SC/ST/OBC COMMITTEE</span> 5908 </a> 5909 </li> 5910 <li> 5911 <a class="dropdown-item" href="https://svc.ac.in/extended/49" > 5912 <i class="fa fa-caret-right dropdown-item-caret" aria-hidden="true"></i> 5913 <span class="dropdown-item-text">ICC</span> 5914 </a> 5915 </li> 5916 </ul> 5917 </div> 5918 <a href="https://svc.ac.in/sitemap" class="nav-link" ><i class="fa fa-sitemap nav-link-icon" aria-hidden="true"></i><span>SITE MAP</span></a> 5919 <a href="https://svc.ac.in/public/oldsvcweb.php" class="nav-link" style="color:#f90637 !important;" target="_blank" rel="noopener" ><i class="fa fa-angle-right nav-link-icon" aria-hidden="true"></i><span>OLD WEBSITE</span></a> 5920 5921 </div> 5922 </div> 5923 </div> 5924 </nav> 5925</div> 5926 5927
5927<script> 5928 document.addEventListener('DOMContentLoaded', function () { 5929 function toArray(nodes) { 5930 return Array.prototype.slice.call(nodes || []); 5931 } 5932 5933 function bindDesktopSubmenuDirection() { 5934 // The nested dropdown-menu opens beside (adjacent to, to the 5935 // right of) its parent sub-link (see site_styles.blade.php). 5936 // This shifts it left if it would overflow the right edge of 5937 // the viewport, and caps its height (rather than sliding it 5938 // up past its trigger) if it would overflow the bottom edge. 5939 toArray(document.querySelectorAll('.navbar-nav .dropdown-submenu')).forEach(function (submenuItem) { 5940 if (submenuItem.dataset.desktopDirectionBound === 'true') { 5941 return; 5942 } 5943 submenuItem.dataset.desktopDirectionBound = 'true'; 5944 5945 function updateDirection() { 5946 var submenu = submenuItem.querySelector(':scope > .dropdown-menu'); 5947 if (!submenu) { 5948 return; 5949 } 5950 5951 if (!window.matchMedia('(min-width: 992px)').matches) { 5952 submenu.style.removeProperty('transform'); 5953 submenu.style.removeProperty('max-height'); 5954 return; 5955 } 5956 5957 submenu.style.removeProperty('transform'); 5958 submenu.style.removeProperty('max-height'); 5959 var viewportWidth = document.documentElement.clientWidth || window.innerWidth; 5960 var viewportHeight = document.documentElement.clientHeight || window.innerHeight; 5961 var margin = 10; 5962 var rect = submenu.getBoundingClientRect(); 5963 var shiftX = 0; 5964 5965 if (rect.right > viewportWidth - margin) { 5966 shiftX = (viewportWidth - margin) - rect.right; 5967 } 5968 if (rect.left + shiftX < margin) { 5969 shiftX = margin - rect.left; 5970 } 5971 5972 if (shiftX !== 0) { 5973 submenu.style.transform = 'translateX(' + shiftX + 'px)'; 5974 } 5975 5976 // Never slide the panel up past its own trigger â 5977 // that visually disconnects it from the sub-link that 5978 // opened it. Instead, when there isn't enough room 5979 // between the trigger and the bottom of the viewport, 5980 // cap the panel's height to what's available and let 5981 // its own overflow-y: auto (site_styles.blade.php) 5982 // scroll the remainder. 5983 var available = viewportHeight - rect.top - margin; 5984 if (available > 0 && available < rect.height) { 5985 submenu.style.maxHeight = available + 'px'; 5986 } 5987 } 5988 5989 submenuItem.addEventListener('mouseenter', updateDirection); 5990 submenuItem.addEventListener('focusin', updateDirection); 5991 }); 5992 } 5993 5994 function bindDesktopDropdownAlignment() { 5995 toArray(document.querySelectorAll('.navbar-nav > .nav-item.dropdown')).forEach(function (navItem) { 5996 if (navItem.dataset.desktopAlignBound === 'true') { 5997 return; 5998 } 5999 navItem.dataset.desktopAlignBound = 'true'; 6000 6001 function updateAlignment() { 6002 var menu = navItem.querySelector(':scope > .dropdown-menu'); 6003 if (!menu) { 6004 return; 6005 } 6006 6007 if (!window.matchMedia('(min-width: 992px)').matches) { 6008 menu.style.removeProperty('left'); 6009 menu.style.removeProperty('margin-top'); 6010 return; 6011 } 6012 6013 // The grid can now be several columns wide, so a simple 6014 // left/right flip can push it further off-screen than it 6015 // started. Instead, nudge it by exactly the pixel amount 6016 // needed to stay within the viewport on both edges. 6017 menu.style.removeProperty('left'); 6018 menu.style.removeProperty('margin-top'); 6019 var rect = menu.getBoundingClientRect(); 6020 var viewportWidth = document.documentElement.clientWidth || window.innerWidth;
6021 var viewportHeight = document.documentElement.clientHeight || window.innerHeight; 6022 var margin = 10; 6023 var shift = 0; 6024 var shiftY = 0; 6025 6026 if (rect.right > viewportWidth - margin) { 6027 shift = (viewportWidth - margin) - rect.right; 6028 } 6029 if (rect.left + shift < margin) { 6030 shift = margin - rect.left; 6031 } 6032 6033 // Pull the menu up toward the top of the viewport when 6034 // it would otherwise extend past the bottom edge (this 6035 // is what was making long sub-link lists unreachable). 6036 if (rect.bottom > viewportHeight - margin) { 6037 shiftY = (viewportHeight - margin) - rect.bottom; 6038 } 6039 if (rect.top + shiftY < margin) { 6040 shiftY = margin - rect.top; 6041 } 6042 6043 if (shift !== 0) { 6044 menu.style.left = shift + 'px'; 6045 } 6046 if (shiftY !== 0) { 6047 menu.style.marginTop = shiftY + 'px'; 6048 } 6049 } 6050 6051 navItem.addEventListener('mouseenter', updateAlignment); 6052 navItem.addEventListener('focusin', updateAlignment); 6053 }); 6054 } 6055 6056 function bindDesktopHoverPersistence() { 6057 // Pure CSS :hover closes the instant the cursor leaves the element â 6058 // including the small gap between a sub-link and the sub-sub panel 6059 // that opens below it. That's too eager: hovering a sub-link that 6060 // has children should keep its menu (and the parent main link's 6061 // menu) open until the user actually moves to a *different* main 6062 // link, not just because the mouse briefly left a box. We layer a 6063 // short close-delay on top of :hover via a JS-controlled .show 6064 // class so quick, natural mouse movement within the same dropdown 6065 // never prematurely closes it. 6066 var CLOSE_DELAY = 350; 6067 var navCloseTimers = new WeakMap(); 6068 var subCloseTimers = new WeakMap(); 6069 6070 var navItems = toArray(document.querySelectorAll('.navbar-nav > .nav-item.dropdown')); 6071 6072 function closeNavItem(item) { 6073 item.classList.remove('show'); 6074 toArray(item.querySelectorAll('.dropdown-submenu.show')).forEach(function (sub) { 6075 sub.classList.remove('show'); 6076 }); 6077 } 6078 6079 function openNavItem(item) { 6080 navItems.forEach(function (other) { 6081 if (other !== item) { 6082 var otherTimer = navCloseTimers.get(other); 6083 if (otherTimer) { 6084 clearTimeout(otherTimer); 6085 navCloseTimers.delete(other); 6086 } 6087 closeNavItem(other); 6088 } 6089 }); 6090 item.classList.add('show'); 6091 } 6092 6093 navItems.forEach(function (item) { 6094 if (item.dataset.hoverPersistBound === 'true') { 6095 return; 6096 } 6097 item.dataset.hoverPersistBound = 'true'; 6098 6099 item.addEventListener('mouseenter', function () { 6100 if (!window.matchMedia('(min-width: 992px)').matches) { 6101 return; 6102 } 6103 var timer = navCloseTimers.get(item); 6104 if (timer) { 6105 clearTimeout(timer); 6106 navCloseTimers.delete(item); 6107 } 6108 openNavItem(item); 6109 }); 6110 6111 item.addEventListener('mouseleave', function () { 6112 if (!window.matchMedia('(min-width: 992px)').matches) { 6113 return; 6114 } 6115 var timer = window.setTimeout(function () { 6116 closeNavItem(item); 6117 navCloseTimers.delete(item); 6118 }, CLOSE_DELAY); 6119 navCloseTimers.set(item, timer); 6120 }); 6121 }); 6122 6123 toArray(document.querySelectorAll('.navbar-nav .dropdown-submenu')).forEac
6123h(function (sub) { 6124 if (sub.dataset.hoverPersistBound === 'true') { 6125 return; 6126 } 6127 sub.dataset.hoverPersistBound = 'true'; 6128 6129 sub.addEventListener('mouseenter', function () { 6130 if (!window.matchMedia('(min-width: 992px)').matches) { 6131 return; 6132 } 6133 var timer = subCloseTimers.get(sub); 6134 if (timer) { 6135 clearTimeout(timer); 6136 subCloseTimers.delete(sub); 6137 } 6138 6139 // Only one sub-sub panel open at a time within the same list. 6140 toArray(sub.parentElement.children).forEach(function (sibling) { 6141 if (sibling !== sub && sibling.classList && sibling.classList.contains('dropdown-submenu')) { 6142 sibling.classList.remove('show'); 6143 } 6144 }); 6145 6146 sub.classList.add('show'); 6147 }); 6148 6149 sub.addEventListener('mouseleave', function () { 6150 if (!window.matchMedia('(min-width: 992px)').matches) { 6151 return; 6152 } 6153 var timer = window.setTimeout(function () { 6154 sub.classList.remove('show'); 6155 subCloseTimers.delete(sub); 6156 }, CLOSE_DELAY); 6157 subCloseTimers.set(sub, timer); 6158 }); 6159 }); 6160 } 6161 6162 function bindMobileSubmenuToggles() { 6163 toArray(document.querySelectorAll('.dropdown-submenu >
6163 .submenu-toggle')).forEach(function (toggle) { 6164 if (toggle.dataset.mobileBound === 'true') { 6165 return; 6166 } 6167 toggle.dataset.mobileBound = 'true'; 6168 6169 toggle.addEventListener('click', function (event) { 6170 if (!window.matchMedia('(max-width: 991.98px)').matches) { 6171 return; 6172 } 6173 6174 event.preventDefault(); 6175 event.stopPropagation(); 6176 6177 var submenu = this.nextElementSibling; 6178 var isOpen = submenu.classList.contains('show'); 6179 submenu.classList.toggle('show', !isOpen); 6180 }); 6181 }); 6182 } 6183 6184 function initHomepageNavbarSearch() { 6185 var searchRoot = document.querySelector('[data-home-search]'); 6186 if (!searchRoot) { 6187 return; 6188 } 6189 6190 var form = searchRoot.querySelector('form'); 6191 var input = searchRoot.querySelector('.homepage-search-input'); 6192 var dropdown = searchRoot.querySelector('[data-home-search-results]'); 6193 var searchUrl = searchRoot.getAttribute('data-search-url'); 6194 var debounceTimer = null; 6195 var requestCounter = 0; 6196 6197 if (!form || !input || !dropdown || !searchUrl) { 6198 return; 6199 } 6200 6201 function escapeHtml(value) { 6202 return String(value || '') 6203 .replace(/&/g, '&') 6204 .replace(/</g, '<') 6205 .replace(/>/g, '>') 6206 .replace(/"/g, '"') 6207 .replace(/'/g, '''); 6208 } 6209 6210 function closeDropdown() { 6211 dropdown.hidden = true; 6212 input.setAttribute('aria-expanded', 'false'); 6213 } 6214 6215 function openDropdown() { 6216 dropdown.hidden = false; 6217 input.setAttribute('aria-expanded', 'true'); 6218 } 6219 6220 function setStatus(message) { 6221 dropdown.innerHTML = '<div class="homepage-search-status">' + escapeHtml(message) + '</div>'; 6222 openDropdown(); 6223 } 6224 6225 function renderResults(results) { 6226 if (!results.length) { 6227 setStatus('No matching content found.'); 6228 return; 6229 } 6230 6231 dropdown.innerHTML = '<div class="homepage-search-results-list">' + results.map(function (item) { 6232 var resultUrl = item.url || '#'; 6233 return '' + 6234 '<a class="homepage-search-result" href="' + escapeHtml(resultUrl) + '">' + 6235 '<span class="homepage-search-result-path">' + escapeHtml(item.path) + '</span>' + 6236 '<span class="homepage-search-result-preview">' + escapeHtml(item.preview || item.path) + '</span>' + 6237 '</a>'; 6238 }).join('') + '</div>'; 6239 6240 openDropdown(); 6241 } 6242 6243 function fetchResults() { 6244 var query = (input.value || '').trim(); 6245 requestCounter += 1; 6246 var currentRequest = requestCounter; 6247 6248 if (query.length < 2) { 6249 closeDropdown(); 6250 return; 6251 } 6252 6253 setStatus('Searching...'); 6254 6255 window.fetch(searchUrl + '?q=' + encodeURIComponent(query), { 6256 headers: { 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json' }, 6257 }) 6258 .then(function (response) { 6259 if (!response.ok) { 6260 throw new Error('Search is unavailable right now.'); 6261 } 6262 return response.json(); 6263 }) 6264 .then(function (payload) { 6265 if (currentRequest !== requestCounter) { 6266 return; 6267 } 6268 renderResults(Array.isArray(payload.results) ? payload.results : []); 6269 }) 6270 .catch(function (error) { 6271 if (currentRequest !== requestCounter) { 6272 return; 6273 } 6274 setStatus(error && error.message ? error.message : 'Search is unavailable right now.'); 6275 }); 6276 } 6277 6278 input.addEventListener('input', function () { 6279 window.clearTimeout(debounceTimer); 6280 debounceTimer = window.setTimeout(fetchResults, 220); 6281 }); 6282 6283 document.addEventListener('click', function (event) { 6284 if (!searchRoot.contains(event.target)) { 6285 closeDropdown(); 6286 } 6287 }); 6288 6289 // ââ Voice search now lives entirely in the Voice Search modal â see 6290 // the `initVoiceSearchModal()` script in site_header.blade.php. The 6291 // mic button itself, and its recognition lifecycle, are wired there. 6292 } 6293 6294 bindDesktopSubmenuDirection(); 6295 bindDesktopDropdownAlignment(); 6296 bindDesktopHoverPersistence(); 6297 bindMobileSubmenuToggles(); 6298 initHomepageNavbarSearch(); 6299 window.addEventListener('resize', bindDesktopSubmenuDirection); 6300 window.addEventListener('resize', bindDesktopDropdownAlignment); 6301 }); 6302 </script>
6302 6303 6304 6305<div class="listing-page-hero"> 6306 <div class="container-fluid px-4 px-lg-5"> 6307 <nav aria-label="breadcrumb" class="mb-2"> 6308 <ol class="breadcrumb mb-0"> 6309 <li class="breadcrumb-item"><a href="https://svc.ac.in">Home</a></li> 6310 <li class="breadcrumb-item active">Tender Quotations</li> 6311 </ol> 6312 </nav> 6313 <div class="d-flex align-items-center gap-3 flex-wrap"> 6314 <h1><i class="fas fa-bullhorn me-2" style="font-size:1.3rem;opacity:.85;"></i>Tender Quotations</h1> 6315 </div> 6316 </div> 6317</div> 6318 6319 6320<section class="listing-wrap"> 6321 <div class="container-fluid px-4 px-lg-5"> 6322 <div class="listing-card"> 6323 6324 6325 <div class="listing-search-row"> 6326 <div class="listing-search-wrap"> 6327 <i class="fas fa-search search-icon"></i> 6328 <input type="text" id="noticeSearchInput" placeholder="Search by notice/circular titleâ¦" autocomplete="off"> 6329 <span class="listing-search-clear" id="noticeSearchClear" title="Clear search"><i class="fas fa-times"></i></span> 6330 </div> 6331 <a href="https://svc.ac.in" class="listing-back-btn ms-auto"> 6332 <i class="fas fa-arrow-left me-1"></i> Back to Home 6333 </a> 6334 </div> 6335 6336 6337 <div class="table-responsive"> 6338 <table id="noticeTable" class="table table-hover w-100" style="width:100%"> 6339 <thead> 6340 <tr> 6341 <th style="width:50px;">#</th> 6342 <th>Title</th> 6343 <th style="width:140px;">Attachments</th> 6344 </tr> 6345 </thead> 6346 <tbody></tbody> 6347 </table> 6348 </div> 6349 6350 </div> 6351 </div> 6352</section> 6353 6354<!-- Footer Start --> 6355 <div class="container-fluid footer py-5 wow fadeIn" data-wow-delay="0.2s"> 6356 <div class="container py-5"> 6357 <div class="row g-5"> 6358 <div class="col-12 col-md-6 col-lg-6 col-xl-3"> 6359 <div class="footer-item d-flex flex-column"> 6360 <h4 class="text-secondary mb-4">Contact Info</h4> 6361 <a href=""><i class="fa fa-map-marker-alt me-2"></i> Benito Juarez Road, Dhaula Kuan, New Delhi</a> 6362 <a href=""><i class="fas fa-envelope me-2"></i> [email protected]</a> 6363 <a href=""><i class="fas fa-phone me-2"></i> +91-11-2411-2196</a> 6364 <div class="d-flex align-items-center"> 6365 <i class="fas fa-share fa-2x text-secondary me-2"></i> 6366 <a class="btn mx-1" href=""><i class="fab fa-facebook-f"></i></a> 6367 <a class="btn mx-1" href=""><i class="fab fa-twitter"></i></a> 6368 <a class="btn mx-1" href=""><i class="fab fa-instagram"></i></a> 6369 <a class="btn mx-1" href=""><i class="fab fa-linkedin-in"></i></a> 6370 </div> 6371 </div> 6372 </div> 6373 <div class="col-12 col-md-6 col-lg-6 col-xl-3"> 6374 <div class="footer-item d-flex flex-column"> 6375 <h4 class="text-secondary mb-4">Office Timings</h4> 6376 <div class="mb-3"> 6377 <h6 class="text-muted mb-0">Mon - Friday:</h6> 6378 <p class="text-white mb-0">09.00 am to 05.30 pm</p> 6379 </div> 6380 6381 <div class="mb-3"> 6382 <h6 class="text-muted mb-0">Visitors' Count:</h6> 6383 <a href="https://www.hitwebcounter.com" target="_blank"> 6384 <img src="https://hitwebcounter.com/counter/counter.php?page=8000919&style=0006&nbdigits=9&type=page&initCount=0" title="Free Counter" alt="Website visitor counter" border="0" class="footer-counter" /></a> 6385 <br> 6386 Website Updated on 2026-10-02<br> 6387 <div style="float: left;"> 6388 6389 </div> 6390 </div> 6391 6392 </div> 6393 </div> 6394 <div class="col-12 col-md-6 col-lg-6 col-xl-3"> 6395 <div class="footer-item d-flex flex-column"> 6396 <h4 class="text-secondary mb-4">Quick Links</h4> 6397 <a href="https://svc.ac.in/extended/10" ><i class="fas fa-angle-right me-2"></i> FEEDBACK</a> 6398 <a href="https://svc.ac.in/extended/2" ><i class="fas fa-angle-right me-2"></i> ICC</a> 6399 <a href="https://svc.ac.in/extended/6" ><i class="fas fa-angle-right me-2"></i> RTI</a> 6400 <a href="https://svc.ac.in/extended/14" ><i class="fas fa-angle-right me-2"></i> RULES & POLICY</a> 6401 </div> 6402 </div> 6403 <div class="col-12 col-md-6 col-lg-6 col-xl-3"> 6404 <div class="footer-item d-flex flex-column"> 6405 <h4 class="text-secondary mb-4">Quick Links</h4> 6406 <a href="https://svc.ac.in/extended/15" ><i class="fas fa-angle-right me-2"></i> COUNSELLING</a> 6407 <a href="https://svc.ac.in/extended/11" ><i class="fas fa-angle-right me-2"></i> NON-TEACHING ROSTER</a> 6408 <a href="https://svc.ac.in/extended/7" ><i class="fas fa-angle-right me-2"></i> TEACHING ROSTER</a> 6409 <a href="https://svc.ac.in/extended/3" ><i class="fas fa-angle-right me-2"></i> UGC</a> 6410 </div> 6411 </div> 6412 </div> 6413 </div> 6414 </div> 6415 <!-- Footer End --> 6416 6417 <!-- Copyright Start --> 6418 <div class="container-fluid copyright py-4"> 6419 <div class="container"> 6420 <div class="row g-4 align-items-center"> 6421 <div class="col-12 col-md-8 text-center text-md-start mb-md-0">
6422 <span class="text-white"><a href="https://svc.ac.in" class="border-bottom text-white"><i class="fas fa-copyright text-light me-2">2025</i></a> Designed & Developed by ICT Department - Sri Venkateswara College</span> 6423 </div> 6424 <div class="col-12 col-md-4 text-center text-md-end text-white"> 6425 <a class="border-bottom text-white" href="https://svc.ac.in/sitemap">Site Map</a> 6426 </div> 6427 </div> 6428 </div> 6429 </div> 6430 <!-- Copyright End --> 6431 6432 <!-- Back to Top --> 6433 <a href="#" class="btn btn-primary btn-lg-square back-to-top"><i class="fa fa-arrow-up"></i></a> 6434
6435<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
vendor: 1 bytes, line 6435
6435
6436<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
vendor: 1 bytes, line 6436
6436
6437<script src="https://svc.ac.in/svc_home/lib/wow/wow.min.js"></script>
vendor: 1 bytes, line 6437
6437
6438<script src="https://svc.ac.in/svc_home/js/main.js"></script>
6438 6439 6440
6441<script src="https://cdn.datatables.net/1.13.8/js/jquery.dataTables.min.js"></script>
vendor: 1 bytes, line 6441
6441
6442<script src="https://cdn.datatables.net/1.13.8/js/dataTables.bootstrap5.min.js"></script>
vendor: 1 bytes, line 6442
6442
6443<script src="https://cdn.datatables.net/responsive/2.5.0/js/dataTables.responsive.min.js"></script>
vendor: 1 bytes, line 6443
6443
6444<script src="https://cdn.datatables.net/responsive/2.5.0/js/responsive.bootstrap5.min.js"></script>
6444 6445
6446<script> 6447$(function () { 6448 var table = $('#noticeTable').DataTable({ 6449 processing: true, 6450 serverSide: true, 6451 ajax: { 6452 url: 'https://svc.ac.in/notices/tenders/data', 6453 type: 'GET', 6454 data: function (d) { 6455 d._token = '6Y1TvBH5ak0HUSuFULMaGIo7dgw6rVPtzYJhEY7V'; 6456 }, 6457 error: function () { 6458 $('#noticeTable tbody').html('<tr><td colspan="3" class="text-center text-danger py-4">Failed to load data. Please refresh the page.</td></tr>'); 6459 } 6460 }, 6461 columns: [ 6462 { orderable: false, searchable: false }, 6463 { orderable: true }, 6464 { orderable: false, searchable: false } 6465 ], 6466 order: [], 6467 pageLength: 15, 6468 lengthMenu: [10, 15, 25, 50], 6469 language: { 6470 processing: '<div class="text-center py-3"><div class="spinner-border spinner-border-sm text-danger"></div> Loadingâ¦</div>', 6471 emptyTable: '<div class="text-center py-4 text-muted">No notices found.</div>', 6472 zeroRecords: '<div class="text-center py-4 text-muted">No matching notices found.</div>', 6473 info: 'Showing _START_ to _END_ of _TOTAL_ notices', 6474 infoFiltered: '(filtered from _MAX_ total)', 6475 lengthMenu: 'Show _MENU_ per page', 6476 paginate: { previous: '«', next: '»' } 6477 } 6478 }); 6479 6480 // Custom search input â debounce â DataTables search 6481 var searchTimer; 6482 $('#noticeSearchInput').on('input', function () { 6483 clearTimeout(searchTimer); 6484 var val = $(this).val(); 6485 searchTimer = setTimeout(function () { 6486 table.search(val).draw(); 6487 }, 350); 6488 }); 6489 6490 $('#noticeSearchClear').on('click', function () { 6491 $('#noticeSearchInput').val(''); 6492 table.search('').draw(); 6493 }); 6494 6495 // Spinner hide 6496 $('#spinner').hide(); 6497}); 6498</script>
6498 6499</body> 6500</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.