{
    "maintenance": false,
    "disabled_message": "",
    "popup": {
        "enabled": true,
        "image": "https://i.postimg.cc/Xq89nVBm/photo-2025-09-30-18-51-01.jpg",
        "title": "Use \"NORMAL PLAYER\", other players are currently not stable. We are working on it.",
        "button_text": "Tutorial",
        "button_url": "https://titaniumtech.site/app/ed/up_app.html",
        "html": "<!--\r\n  Titanium Ed-Tech \u2014 Professional Festival & Quote Greeting Popup\r\n  Features:\r\n  - Fetches festival data from Google Calendar API\r\n  - Fetches inspirational quotes from API\r\n  - Professional design with rich animations\r\n  - Responsive and accessible\r\n-->\r\n<style>\r\n  /* Reset for the snippet only */\r\n  .titanium-popup * { box-sizing: border-box; margin: 0; padding: 0; }\r\n\r\n  /* Backdrop */\r\n  .titanium-backdrop {\r\n    position: fixed;\r\n    inset: 0;\r\n    background: linear-gradient(180deg, rgba(8,12,25,0.6), rgba(8,12,25,0.8));\r\n    backdrop-filter: blur(6px) saturate(120%);\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    z-index: 9999;\r\n    opacity: 0;\r\n    pointer-events: none;\r\n    transition: opacity 300ms ease;\r\n  }\r\n  .titanium-backdrop.show { opacity: 1; pointer-events: auto; }\r\n\r\n  /* Modal shell */\r\n  .titanium-modal {\r\n    width: min(920px, calc(100% - 48px));\r\n    max-width: 920px;\r\n    border-radius: 16px;\r\n    padding: 32px;\r\n    background: linear-gradient(180deg, rgba(255,255,255,0.98), rgba(248,250,252,0.96));\r\n    box-shadow: 0 24px 60px rgba(6,10,25,0.6), inset 0 1px 0 rgba(255,255,255,0.8);\r\n    transform: translateY(30px) scale(0.98);\r\n    opacity: 0;\r\n    transition: transform 400ms cubic-bezier(.2,.9,.2,1), opacity 400ms ease;\r\n    position: relative;\r\n    overflow: hidden;\r\n    display: grid;\r\n    grid-template-columns: 1fr 380px;\r\n    gap: 24px;\r\n  }\r\n  .titanium-backdrop.show .titanium-modal {\r\n    transform: translateY(0) scale(1);\r\n    opacity: 1;\r\n  }\r\n\r\n  /* Left content */\r\n  .titanium-content {\r\n    padding-right: 8px;\r\n    position: relative;\r\n    z-index: 2;\r\n  }\r\n  \r\n  /* Brand section with helmet */\r\n  .titanium-brand {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 14px;\r\n    margin-bottom: 12px;\r\n    position: relative;\r\n  }\r\n  \r\n  .titanium-logo {\r\n    width: 64px;\r\n    height: 64px;\r\n    border-radius: 14px;\r\n    display: grid;\r\n    place-items: center;\r\n    background: linear-gradient(135deg,#0ea5a4,#6366f1);\r\n    color: white;\r\n    font-weight: 800;\r\n    font-size: 24px;\r\n    font-family: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial;\r\n    box-shadow: 0 8px 24px rgba(99,102,241,0.25);\r\n    animation: logoFloat 4s ease-in-out infinite;\r\n    position: relative;\r\n  }\r\n  \r\n  /* Iron Man Helmet Animation */\r\n  .iron-helmet {\r\n    position: absolute;\r\n    right: -70px;\r\n    top: 50%;\r\n    transform: translateY(-50%);\r\n    width: 56px;\r\n    height: 56px;\r\n    animation: helmetGlow 3s ease-in-out infinite;\r\n  }\r\n  \r\n  @keyframes helmetGlow {\r\n    0%, 100% { \r\n      filter: drop-shadow(0 0 8px rgba(220, 38, 38, 0.4));\r\n      transform: translateY(-50%) scale(1);\r\n    }\r\n    50% { \r\n      filter: drop-shadow(0 0 16px rgba(220, 38, 38, 0.8));\r\n      transform: translateY(-50%) scale(1.05);\r\n    }\r\n  }\r\n  \r\n  @keyframes logoFloat {\r\n    0%, 100% { transform: translateY(0) rotate(0deg); }\r\n    50% { transform: translateY(-6px) rotate(2deg); }\r\n  }\r\n  \r\n  .titanium-title {\r\n    font-size: 20px;\r\n    line-height: 1.1;\r\n    font-weight: 800;\r\n    color: #06203a;\r\n    letter-spacing: -0.5px;\r\n  }\r\n\r\n  /* Right panel - Professional card design */\r\n  .titanium-side {\r\n    background: linear-gradient(135deg, rgba(99,102,241,0.08), rgba(14,165,164,0.04));\r\n    border-radius: 14px;\r\n    padding: 24px;\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: center;\r\n    gap: 16px;\r\n    align-items: center;\r\n    min-width: 240px;\r\n    border: 1px solid rgba(99,102,241,0.1);\r\n    position: relative;\r\n    overflow: hidden;\r\n  }\r\n  \r\n  .titanium-side::before {\r\n    content: '';\r\n    position: absolute;\r\n    top: -50%;\r\n    left: -50%;\r\n    width: 200%;\r\n    height: 200%;\r\n    background: radial-gradient(circle, rgba(99,102,241,0.05) 0%, transparent 70%);\r\n    animation: sideGlow 8s linear infinite;\r\n  }\r\n  \r\n  @keyframes sideGlow {\r\n    0% { transform: rotate(0deg); }\r\n    100% { transform: rotate(360deg); }\r\n  }\r\n  \r\n  .titanium-halo {\r\n    width: 100px;\r\n    height: 100px;\r\n    border-radius: 999px;\r\n    display: grid;\r\n    place-items: center;\r\n    font-weight: 800;\r\n    font-size: 18px;\r\n    background: radial-gradient(circle at 30% 20%, rgba(99,102,241,0.3), rgba(14,165,164,0.2));\r\n    box-shadow: 0 10px 40px rgba(99,102,241,0.15);\r\n    animation: pulse 3s ease-in-out infinite;\r\n    position: relative;\r\n    z-index: 1;\r\n  }\r\n  \r\n  @keyframes pulse {\r\n    0%, 100% { transform: scale(1); box-shadow: 0 10px 40px rgba(99,102,241,0.15); }\r\n    50% { transform: scale(1.08); box-shadow: 0 15px 50px rgba(99,102,241,0.25); }\r\n  }\r\n  \r\n  .titanium-side p { \r\n    font-size: 15px; \r\n    color: #0f172a; \r\n    text-align: center; \r\n    margin: 0;\r\n    position: relative;\r\n    z-index: 1;\r\n  }\r\n\r\n  /* Professional Quote Section - Eye-catching design */\r\n  .quote-section {\r\n    margin-top: 20px;\r\n    padding: 32px;\r\n    background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\r\n    border-radius: 16px;\r\n    border: 3px solid rgba(255,255,255,0.2);\r\n    position: relative;\r\n    overflow: hidden;\r\n    animation: fadeInUp 0.7s ease 0.3s both;\r\n    box-shadow: \r\n      0 20px 50px rgba(99,102,241,0.3),\r\n      0 0 0 1px rgba(255,255,255,0.1) inset,\r\n      0 0 40px rgba(139,92,246,0.2);\r\n  }\r\n  \r\n  /* Animated gradient overlay */\r\n  .quote-section::after {\r\n    content: '';\r\n    position: absolute;\r\n    top: -50%;\r\n    left: -50%;\r\n    width: 200%;\r\n    height: 200%;\r\n    background: linear-gradient(45deg, \r\n      transparent 30%, \r\n      rgba(255,255,255,0.1) 50%, \r\n      transparent 70%);\r\n    animation: quoteSweep 6s linear infinite;\r\n    pointer-events: none;\r\n  }\r\n  \r\n  @keyframes quoteSweep {\r\n    0% { transform: translateX(-100%) translateY(-100%) rotate(45deg); }\r\n    100% { transform: translateX(100%) translateY(100%) rotate(45deg); }\r\n  }\r\n  \r\n  .quote-section::before {\r\n    content: '\"';\r\n    position: absolute;\r\n    top: -15px;\r\n    left: 20px;\r\n    font-size: 140px;\r\n    font-family: Georgia, serif;\r\n    color: rgba(255,255,255,0.15);\r\n    line-height: 1;\r\n    z-index: 0;\r\n    font-weight: bold;\r\n    text-shadow: 0 0 30px rgba(255,255,255,0.3);\r\n  }\r\n  \r\n  /* Quote icon decoration */\r\n  .quote-icon {\r\n    position: absolute;\r\n    top: 20px;\r\n    right: 20px;\r\n    width: 48px;\r\n    height: 48px;\r\n    background: rgba(255,255,255,0.15);\r\n    border-radius: 50%;\r\n    display: grid;\r\n    place-items: center;\r\n    animation: quoteIconPulse 3s ease-in-out infinite;\r\n    backdrop-filter: blur(10px);\r\n  }\r\n  \r\n  @keyframes quoteIconPulse {\r\n    0%, 100% { transform: scale(1) rotate(0deg); box-shadow: 0 0 0 rgba(255,255,255,0.4); }\r\n    50% { transform: scale(1.1) rotate(10deg); box-shadow: 0 0 20px rgba(255,255,255,0.4); }\r\n  }\r\n  \r\n  .quote-text {\r\n    font-size: 18px;\r\n    line-height: 1.9;\r\n    color: #ffffff;\r\n    font-style: italic;\r\n    margin-bottom: 20px;\r\n    position: relative;\r\n    z-index: 1;\r\n    font-weight: 600;\r\n    text-shadow: 0 2px 8px rgba(0,0,0,0.15);\r\n    letter-spacing: 0.3px;\r\n  }\r\n  \r\n  .quote-author {\r\n    font-size: 16px;\r\n    font-weight: 800;\r\n    color: #fbbf24;\r\n    text-align: right;\r\n    position: relative;\r\n    z-index: 1;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: flex-end;\r\n    gap: 10px;\r\n    text-shadow: 0 2px 4px rgba(0,0,0,0.2);\r\n    letter-spacing: 0.5px;\r\n  }\r\n  \r\n  .quote-author::before {\r\n    content: '\u2014';\r\n    color: rgba(255,255,255,0.8);\r\n    font-size: 18px;\r\n  }\r\n  \r\n  .quote-author::after {\r\n    content: '';\r\n    width: 4px;\r\n    height: 4px;\r\n    background: #fbbf24;\r\n    border-radius: 50%;\r\n    box-shadow: 0 0 10px #fbbf24;\r\n    animation: authorDot 2s ease-in-out infinite;\r\n  }\r\n  \r\n  @keyframes authorDot {\r\n    0%, 100% { opacity: 1; transform: scale(1); }\r\n    50% { opacity: 0.5; transform: scale(1.3); }\r\n  }\r\n  \r\n  @keyframes fadeInUp {\r\n    from { opacity: 0; transform: translateY(20px); }\r\n    to { opacity: 1; transform: translateY(0); }\r\n  }\r\n\r\n  /* Festival greeting section */\r\n  .festival-greeting {\r\n    margin-top: 20px;\r\n    padding: 24px;\r\n    background: linear-gradient(135deg, rgba(245,158,11,0.06), rgba(239,68,68,0.04));\r\n    border-radius: 14px;\r\n    border: 2px solid rgba(245,158,11,0.12);\r\n    position: relative;\r\n    overflow: hidden;\r\n    animation: fadeInUp 0.7s ease 0.5s both;\r\n  }\r\n  \r\n  .festival-title {\r\n    font-size: 26px;\r\n    font-weight: 900;\r\n    color: #dc2626;\r\n    margin-bottom: 10px;\r\n    animation: slideIn 0.9s ease 0.7s both;\r\n    letter-spacing: -0.5px;\r\n  }\r\n  \r\n  @keyframes slideIn {\r\n    from { opacity: 0; transform: translateX(-30px); }\r\n    to { opacity: 1; transform: translateX(0); }\r\n  }\r\n  \r\n  .festival-message {\r\n    font-size: 16px;\r\n    color: #0b2540;\r\n    line-height: 1.7;\r\n    margin-bottom: 14px;\r\n    font-weight: 500;\r\n  }\r\n  \r\n  .festival-date {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    padding: 10px 18px;\r\n    background: white;\r\n    border-radius: 10px;\r\n    font-size: 15px;\r\n    font-weight: 700;\r\n    color: #475569;\r\n    box-shadow: 0 3px 12px rgba(0,0,0,0.08);\r\n    animation: bounceIn 0.7s ease 1s both;\r\n  }\r\n  \r\n  @keyframes bounceIn {\r\n    0% { opacity: 0; transform: scale(0.3); }\r\n    50% { transform: scale(1.08); }\r\n    100% { opacity: 1; transform: scale(1); }\r\n  }\r\n  \r\n  .calendar-icon {\r\n    width: 22px;\r\n    height: 22px;\r\n    animation: swing 2.5s ease-in-out infinite;\r\n  }\r\n  \r\n  @keyframes swing {\r\n    0%, 100% { transform: rotate(-8deg); }\r\n    50% { transform: rotate(8deg); }\r\n  }\r\n\r\n  /* Loading spinner */\r\n  .loading-spinner {\r\n    display: inline-block;\r\n    width: 24px;\r\n    height: 24px;\r\n    border: 3px solid rgba(99,102,241,0.2);\r\n    border-top-color: #6366f1;\r\n    border-radius: 50%;\r\n    animation: spin 0.8s linear infinite;\r\n  }\r\n  \r\n  @keyframes spin {\r\n    to { transform: rotate(360deg); }\r\n  }\r\n\r\n  /* Button */\r\n  .titanium-actions {\r\n    margin-top: 24px;\r\n    display: flex;\r\n    gap: 12px;\r\n    flex-wrap: wrap;\r\n  }\r\n  \r\n  .btn {\r\n    cursor: pointer;\r\n    border: none;\r\n    padding: 14px 28px;\r\n    border-radius: 12px;\r\n    font-weight: 700;\r\n    font-size: 15px;\r\n    transition: all 250ms ease;\r\n    outline: none;\r\n    position: relative;\r\n    overflow: hidden;\r\n    font-family: system-ui, -apple-system, sans-serif;\r\n  }\r\n  \r\n  .btn::before {\r\n    content: '';\r\n    position: absolute;\r\n    top: 50%;\r\n    left: 50%;\r\n    width: 0;\r\n    height: 0;\r\n    border-radius: 50%;\r\n    background: rgba(255,255,255,0.3);\r\n    transform: translate(-50%, -50%);\r\n    transition: width 0.6s, height 0.6s;\r\n  }\r\n  \r\n  .btn:active::before {\r\n    width: 350px;\r\n    height: 350px;\r\n  }\r\n  \r\n  .btn:focus { box-shadow: 0 0 0 4px rgba(99,102,241,0.15); }\r\n  \r\n  .btn-primary {\r\n    background: linear-gradient(135deg,#0ea5a4,#6366f1);\r\n    color: white;\r\n    box-shadow: 0 10px 25px rgba(99,102,241,0.2);\r\n  }\r\n  \r\n  .btn:hover { \r\n    transform: translateY(-3px); \r\n    box-shadow: 0 15px 35px rgba(99,102,241,0.3);\r\n  }\r\n\r\n  /* Animated background */\r\n  .titanium-modal::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: -30%;\r\n    top: -20%;\r\n    width: 220%;\r\n    height: 220%;\r\n    background:\r\n      radial-gradient(600px 120px at 10% 10%, rgba(99,102,241,0.05), transparent 10%),\r\n      radial-gradient(600px 120px at 90% 90%, rgba(14,165,164,0.03), transparent 12%);\r\n    transform: rotate(15deg);\r\n    pointer-events: none;\r\n    animation: floaty 7s ease-in-out infinite;\r\n    z-index: 0;\r\n  }\r\n  \r\n  @keyframes floaty {\r\n    0% { transform: rotate(15deg) translateY(0); }\r\n    50% { transform: rotate(15deg) translateY(-10px); }\r\n    100% { transform: rotate(15deg) translateY(0); }\r\n  }\r\n\r\n  /* Floating Books */\r\n  .floating-book {\r\n    position: absolute;\r\n    width: 40px;\r\n    height: 50px;\r\n    animation: bookFloat 6s ease-in-out infinite;\r\n    z-index: 1;\r\n    opacity: 0.6;\r\n  }\r\n  \r\n  .book1 { left: 6%; top: 18%; animation-delay: 0s; }\r\n  .book2 { right: 8%; top: 22%; animation-delay: 1.5s; }\r\n  .book3 { left: 10%; bottom: 18%; animation-delay: 3s; }\r\n  \r\n  @keyframes bookFloat {\r\n    0%, 100% { transform: translateY(0) rotate(-5deg); opacity: 0.4; }\r\n    50% { transform: translateY(-25px) rotate(5deg); opacity: 0.7; }\r\n  }\r\n\r\n  /* Skill Icons */\r\n  .skill-icon {\r\n    position: absolute;\r\n    width: 35px;\r\n    height: 35px;\r\n    animation: skillRotate 8s linear infinite;\r\n    opacity: 0.5;\r\n    z-index: 1;\r\n  }\r\n  \r\n  .skill1 { left: 18%; top: 38%; animation-delay: 0s; }\r\n  .skill2 { right: 12%; top: 48%; animation-delay: 2s; }\r\n  .skill3 { left: 12%; bottom: 12%; animation-delay: 4s; }\r\n  \r\n  @keyframes skillRotate {\r\n    0% { transform: rotate(0deg) scale(1); }\r\n    50% { transform: rotate(180deg) scale(1.2); }\r\n    100% { transform: rotate(360deg) scale(1); }\r\n  }\r\n\r\n  /* Enhanced particles */\r\n  .particle {\r\n    position: absolute;\r\n    width: 8px;\r\n    height: 8px;\r\n    border-radius: 50%;\r\n    opacity: 0;\r\n    animation: particleFall 4s ease-in-out infinite;\r\n    z-index: 1;\r\n  }\r\n  \r\n  .p1 { left: 12%; top: -5%; background: #f59e0b; animation-delay: 0s; }\r\n  .p2 { left: 28%; top: -8%; background: #ef4444; animation-delay: 0.5s; }\r\n  .p3 { left: 45%; top: -3%; background: #10b981; animation-delay: 1s; }\r\n  .p4 { left: 62%; top: -7%; background: #60a5fa; animation-delay: 1.5s; }\r\n  .p5 { left: 78%; top: -4%; background: #a855f7; animation-delay: 2s; }\r\n  .p6 { right: 8%; top: -6%; background: #ec4899; animation-delay: 2.5s; }\r\n  \r\n  @keyframes particleFall {\r\n    0% { transform: translateY(0) scale(1); opacity: 0; }\r\n    10% { opacity: 1; }\r\n    100% { transform: translateY(150px) rotate(720deg) scale(0.5); opacity: 0; }\r\n  }\r\n\r\n  /* Glowing stars */\r\n  .glow-star {\r\n    position: absolute;\r\n    width: 6px;\r\n    height: 6px;\r\n    background: #fbbf24;\r\n    border-radius: 50%;\r\n    animation: starGlow 3s ease-in-out infinite;\r\n    z-index: 1;\r\n  }\r\n  \r\n  .gs1 { left: 16%; top: 24%; animation-delay: 0s; }\r\n  .gs2 { right: 14%; top: 20%; animation-delay: 0.6s; }\r\n  .gs3 { left: 22%; bottom: 22%; animation-delay: 1.2s; }\r\n  .gs4 { right: 18%; bottom: 16%; animation-delay: 1.8s; }\r\n  \r\n  @keyframes starGlow {\r\n    0%, 100% { transform: scale(1); opacity: 0.6; box-shadow: 0 0 8px #fbbf24; }\r\n    50% { transform: scale(1.8); opacity: 1; box-shadow: 0 0 20px #fbbf24; }\r\n  }\r\n\r\n  /* Close button */\r\n  .titanium-close {\r\n    position: absolute;\r\n    right: 16px;\r\n    top: 16px;\r\n    background: rgba(255,255,255,0.8);\r\n    border: 1px solid rgba(100,116,139,0.2);\r\n    width: 44px;\r\n    height: 44px;\r\n    border-radius: 12px;\r\n    display: grid;\r\n    place-items: center;\r\n    cursor: pointer;\r\n    transition: all 250ms ease;\r\n    z-index: 10;\r\n  }\r\n  \r\n  .titanium-close:hover {\r\n    background: rgba(239,68,68,0.1);\r\n    transform: rotate(90deg) scale(1.1);\r\n    border-color: rgba(239,68,68,0.3);\r\n  }\r\n  \r\n  .titanium-close:focus { \r\n    box-shadow: 0 0 0 4px rgba(99,102,241,0.15); \r\n    outline: none;\r\n  }\r\n\r\n  /* Responsive */\r\n  @media (max-width: 768px) {\r\n    .titanium-modal { \r\n      grid-template-columns: 1fr; \r\n      padding: 20px; \r\n      gap: 16px;\r\n      width: calc(100% - 24px);\r\n      max-height: 85vh;\r\n      overflow-y: auto;\r\n      overscroll-behavior: contain;\r\n    }\r\n    .titanium-side { \r\n      order: -1; \r\n      min-width: auto; \r\n      padding: 16px;\r\n      gap: 12px;\r\n    }\r\n    .titanium-logo { \r\n      width: 52px; \r\n      height: 52px; \r\n      font-size: 20px; \r\n    }\r\n    .iron-helmet { \r\n      width: 44px; \r\n      height: 44px; \r\n      right: -54px; \r\n    }\r\n    .titanium-title {\r\n      font-size: 17px;\r\n    }\r\n    .festival-title { \r\n      font-size: 20px;\r\n      word-break: break-word;\r\n    }\r\n    .quote-text { \r\n      font-size: 15px;\r\n      line-height: 1.7;\r\n    }\r\n    .quote-author {\r\n      font-size: 14px;\r\n    }\r\n    .quote-section::before {\r\n      font-size: 100px;\r\n      top: -10px;\r\n      left: 15px;\r\n    }\r\n    .quote-icon {\r\n      width: 40px;\r\n      height: 40px;\r\n      top: 16px;\r\n      right: 16px;\r\n    }\r\n    .quote-icon svg {\r\n      width: 20px;\r\n      height: 20px;\r\n    }\r\n    .festival-greeting, .quote-section { \r\n      padding: 18px;\r\n      margin-top: 16px;\r\n    }\r\n    .festival-message {\r\n      font-size: 15px;\r\n      line-height: 1.6;\r\n    }\r\n    .festival-date {\r\n      font-size: 14px;\r\n      padding: 8px 14px;\r\n    }\r\n    .calendar-icon {\r\n      width: 20px;\r\n      height: 20px;\r\n    }\r\n    .titanium-halo {\r\n      width: 80px;\r\n      height: 80px;\r\n      font-size: 16px;\r\n    }\r\n    .btn {\r\n      padding: 12px 20px;\r\n      font-size: 14px;\r\n      width: 100%;\r\n    }\r\n    .titanium-close {\r\n      width: 38px;\r\n      height: 38px;\r\n      right: 12px;\r\n      top: 12px;\r\n    }\r\n    \r\n    /* Hide some floating elements on mobile for cleaner look */\r\n    .floating-book.book2,\r\n    .floating-book.book3,\r\n    .skill-icon.skill2,\r\n    .skill-icon.skill3,\r\n    .particle.p4,\r\n    .particle.p5,\r\n    .particle.p6,\r\n    .glow-star.gs3,\r\n    .glow-star.gs4 {\r\n      display: none;\r\n    }\r\n    \r\n    /* Adjust visible elements */\r\n    .floating-book.book1 {\r\n      left: 5%;\r\n      top: 20%;\r\n      width: 32px;\r\n      height: 40px;\r\n    }\r\n    .skill-icon.skill1 {\r\n      left: 85%;\r\n      top: 25%;\r\n      width: 28px;\r\n      height: 28px;\r\n    }\r\n    .particle {\r\n      width: 6px;\r\n      height: 6px;\r\n    }\r\n    .glow-star {\r\n      width: 4px;\r\n      height: 4px;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 480px) {\r\n    .titanium-modal {\r\n      padding: 16px;\r\n      gap: 12px;\r\n      width: calc(100% - 16px);\r\n      overscroll-behavior: contain;\r\n    }\r\n    .titanium-content {\r\n      padding-right: 0;\r\n    }\r\n    .titanium-brand {\r\n      gap: 10px;\r\n    }\r\n    .titanium-logo {\r\n      width: 48px;\r\n      height: 48px;\r\n      font-size: 18px;\r\n    }\r\n    .iron-helmet {\r\n      width: 40px;\r\n      height: 40px;\r\n      right: -48px;\r\n    }\r\n    .titanium-title {\r\n      font-size: 16px;\r\n    }\r\n    .festival-title {\r\n      font-size: 18px;\r\n    }\r\n    .quote-text {\r\n      font-size: 14px;\r\n    }\r\n    .quote-section::before {\r\n      font-size: 80px;\r\n      top: -8px;\r\n      left: 12px;\r\n    }\r\n    .quote-icon {\r\n      width: 36px;\r\n      height: 36px;\r\n      top: 14px;\r\n      right: 14px;\r\n    }\r\n    .quote-icon svg {\r\n      width: 18px;\r\n      height: 18px;\r\n    }\r\n    .quote-section {\r\n      padding: 24px;\r\n    }\r\n    .festival-greeting, .quote-section {\r\n      padding: 16px;\r\n      margin-top: 12px;\r\n    }\r\n    .titanium-halo {\r\n      width: 70px;\r\n      height: 70px;\r\n      font-size: 14px;\r\n    }\r\n    .titanium-side p {\r\n      font-size: 14px;\r\n    }\r\n    .titanium-side small {\r\n      font-size: 12px;\r\n    }\r\n  }\r\n</style>\r\n\r\n<div class=\"titanium-popup\">\r\n  <div class=\"titanium-backdrop\" id=\"titanium-backdrop\" role=\"presentation\" aria-hidden=\"true\">\r\n    <div class=\"titanium-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"titanium-title\" aria-describedby=\"titanium-desc\" tabindex=\"-1\">\r\n\r\n      <!-- Animated decorative elements -->\r\n      <div class=\"particle p1\"></div>\r\n      <div class=\"particle p2\"></div>\r\n      <div class=\"particle p3\"></div>\r\n      <div class=\"particle p4\"></div>\r\n      <div class=\"particle p5\"></div>\r\n      <div class=\"particle p6\"></div>\r\n      \r\n      <div class=\"glow-star gs1\"></div>\r\n      <div class=\"glow-star gs2\"></div>\r\n      <div class=\"glow-star gs3\"></div>\r\n      <div class=\"glow-star gs4\"></div>\r\n\r\n      <!-- Floating books -->\r\n      <svg class=\"floating-book book1\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#6366f1\" stroke-width=\"2\">\r\n        <path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"></path>\r\n        <path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"></path>\r\n      </svg>\r\n      <svg class=\"floating-book book2\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#0ea5a4\" stroke-width=\"2\">\r\n        <path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"></path>\r\n        <path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"></path>\r\n      </svg>\r\n      <svg class=\"floating-book book3\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#f59e0b\" stroke-width=\"2\">\r\n        <path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"></path>\r\n        <path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"></path>\r\n      </svg>\r\n\r\n      <!-- Skill icons -->\r\n      <svg class=\"skill-icon skill1\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#8b5cf6\" stroke-width=\"2\">\r\n        <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\r\n        <path d=\"M12 16v-4\"></path>\r\n        <path d=\"M12 8h.01\"></path>\r\n      </svg>\r\n      <svg class=\"skill-icon skill2\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#10b981\" stroke-width=\"2\">\r\n        <polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\"></polyline>\r\n      </svg>\r\n      <svg class=\"skill-icon skill3\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#ef4444\" stroke-width=\"2\">\r\n        <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"></path>\r\n        <polyline points=\"22 4 12 14.01 9 11.01\"></polyline>\r\n      </svg>\r\n\r\n      <!-- Close button -->\r\n      <button class=\"titanium-close\" id=\"titanium-close\" aria-label=\"Close dialog\">\r\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n          <path d=\"M18 6L6 18\" stroke=\"#0b2540\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n          <path d=\"M6 6L18 18\" stroke=\"#0b2540\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n        </svg>\r\n      </button>\r\n\r\n      <!-- Left: main content -->\r\n      <div class=\"titanium-content\">\r\n        <div class=\"titanium-brand\">\r\n          <div class=\"titanium-logo\" aria-hidden=\"true\">Ti</div>\r\n          <div style=\"flex: 1;\">\r\n            <div id=\"titanium-title\" class=\"titanium-title\">Titanium Ed-Tech</div>\r\n            <div style=\"font-size:13px;color:#64748b;font-weight:600;margin-top:2px;\">Official platform update</div>\r\n          </div>\r\n          <!-- Iron Man Helmet -->\r\n          <svg class=\"iron-helmet\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n            <defs>\r\n              <linearGradient id=\"helmetGrad\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\r\n                <stop offset=\"0%\" style=\"stop-color:#dc2626;stop-opacity:1\" />\r\n                <stop offset=\"100%\" style=\"stop-color:#991b1b;stop-opacity:1\" />\r\n              </linearGradient>\r\n            </defs>\r\n            <path d=\"M12 2L4 7v9c0 3.5 2.5 6.5 8 8 5.5-1.5 8-4.5 8-8V7l-8-5z\" fill=\"url(#helmetGrad)\" stroke=\"#7f1d1d\" stroke-width=\"1.5\"/>\r\n            <circle cx=\"9\" cy=\"10\" r=\"1.5\" fill=\"#fbbf24\"/>\r\n            <circle cx=\"15\" cy=\"10\" r=\"1.5\" fill=\"#fbbf24\"/>\r\n            <path d=\"M12 12v4M10 14h4\" stroke=\"#fbbf24\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\r\n          </svg>\r\n        </div>\r\n\r\n        <!-- Quote Section -->\r\n        <div class=\"quote-section\" id=\"quote-section\">\r\n          <div class=\"quote-icon\">\r\n            <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"pink\" stroke-width=\"2\">\r\n              <path d=\"M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z\"></path>\r\n              <path d=\"M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z\"></path>\r\n            </svg>\r\n          </div>\r\n          <div id=\"quote-content\">\r\n            <div style=\"display: flex; align-items: center; gap: 12px; justify-content: center; padding: 20px;\">\r\n              <div class=\"loading-spinner\" style=\"border-color: rgba(255,255,255,0.3); border-top-color: white;\"></div>\r\n              <span style=\"color: rgba(255,255,255,0.9); font-size: 15px; font-weight: 600;\">Loading inspirational quote...</span>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Festival Greeting Section -->\r\n        <div class=\"festival-greeting\" id=\"festival-section\">\r\n          <div id=\"festival-content\">\r\n            <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 12px;\">\r\n              <div class=\"loading-spinner\"></div>\r\n              <span style=\"color: #64748b; font-size: 15px; font-weight: 600;\">Fetching festival information...</span>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"titanium-actions\">\r\n          <button class=\"btn btn-primary\" id=\"titanium-ack\">Got it, Thanks! \u2728</button>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Right: date info -->\r\n      <aside class=\"titanium-side\" aria-hidden=\"false\">\r\n        <div class=\"titanium-halo\" id=\"current-date\">\r\n          <div class=\"loading-spinner\"></div>\r\n        </div>\r\n        <p><strong style=\"font-size: 16px;\">Today's Date</strong><br/><span id=\"full-date\" style=\"font-size: 14px; color: #475569;\">Loading...</span></p>\r\n        <small style=\"color:#64748b; font-weight: 600;\">Wishing you success in your journey!</small>\r\n      </aside>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<script>\r\n  (function () {\r\n    const backdrop = document.getElementById('titanium-backdrop');\r\n    const modal = backdrop.querySelector('.titanium-modal');\r\n    const btnClose = document.getElementById('titanium-close');\r\n    const btnAck = document.getElementById('titanium-ack');\r\n    const focusableSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\r\n\r\n    // Format date\r\n    function formatDate(date) {\r\n      const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };\r\n      return date.toLocaleDateString('en-IN', options);\r\n    }\r\n\r\n    // Update date display\r\n    function updateDateDisplay() {\r\n      const now = new Date();\r\n      const dateHalo = document.getElementById('current-date');\r\n      const fullDate = document.getElementById('full-date');\r\n      \r\n      const day = now.getDate();\r\n      const month = now.toLocaleDateString('en-IN', { month: 'short' });\r\n      \r\n      dateHalo.innerHTML = `<div style=\"font-size:12px;line-height:1.3;font-weight:700;\">${month}<br/><span style=\"font-size:26px;\">${day}</span></div>`;\r\n      fullDate.textContent = formatDate(now);\r\n    }\r\n\r\n    // Fetch inspirational quote\r\n    async function fetchQuote() {\r\n      try {\r\n        const response = await fetch('https://quotes-api-self.vercel.app/quote');\r\n        const data = await response.json();\r\n        \r\n        displayQuote(data.quote, data.author);\r\n      } catch (error) {\r\n        console.error('Error fetching quote:', error);\r\n        displayQuote(\r\n          'Education is the most powerful weapon which you can use to change the world.',\r\n          'Nelson Mandela'\r\n        );\r\n      }\r\n    }\r\n\r\n    // Display quote\r\n    function displayQuote(quote, author) {\r\n      const quoteContent = document.getElementById('quote-content');\r\n      quoteContent.innerHTML = `\r\n        <div class=\"quote-text\">${quote}</div>\r\n        <div class=\"quote-author\">${author}</div>\r\n      `;\r\n    }\r\n\r\n    // Fetch festival information from Google Calendar API\r\n    async function fetchFestivalInfo() {\r\n      try {\r\n        const now = new Date();\r\n        const year = now.getFullYear();\r\n        const month = String(now.getMonth() + 1).padStart(2, '0');\r\n        const day = String(now.getDate()).padStart(2, '0');\r\n        const todayStr = `${year}-${month}-${day}`;\r\n        \r\n        const calendarId = 'en.indian%23holiday%40group.v.calendar.google.com';\r\n        const apiKey = 'AIzaSyBNlYH01_9Hc5S1J9vuFmu2nUqBZJNAXxs';\r\n        \r\n        const timeMin = `${todayStr}T00:00:00Z`;\r\n        const timeMax = `${todayStr}T23:59:59Z`;\r\n        \r\n        const url = `https://www.googleapis.com/calendar/v3/calendars/${calendarId}/events?key=${apiKey}&timeMin=${timeMin}&timeMax=${timeMax}&singleEvents=true&orderBy=startTime`;\r\n        \r\n        const response = await fetch(url);\r\n        const data = await response.json();\r\n        \r\n        if (data.items && data.items.length > 0) {\r\n          // If multiple events, display all of them\r\n          if (data.items.length > 1) {\r\n            const festivalNames = data.items.map(event => event.summary).join(' & ');\r\n            const festivalDesc = generateMultipleFestivalMessage(data.items);\r\n            displayFestival(festivalNames, festivalDesc, formatDate(now));\r\n          } else {\r\n            const event = data.items[0];\r\n            const festivalName = event.summary;\r\n            const festivalDesc = event.description || generateFestivalMessage(festivalName);\r\n            displayFestival(festivalName, festivalDesc, formatDate(now));\r\n          }\r\n        } else {\r\n          checkLocalFestivals(now);\r\n        }\r\n      } catch (error) {\r\n        console.error('Error fetching from Google Calendar:', error);\r\n        checkLocalFestivals(new Date());\r\n      }\r\n    }\r\n\r\n    // Generate message for multiple festivals\r\n    function generateMultipleFestivalMessage(events) {\r\n      const names = events.map(e => e.summary);\r\n      return `Today we celebrate multiple special occasions: ${names.join(', ')}! May these auspicious days bring you joy, wisdom, and success in your educational journey.`;\r\n    }\r\n\r\n    // Generate contextual message for festival\r\n    function generateFestivalMessage(festivalName) {\r\n      const messages = {\r\n        'Diwali': 'May the festival of lights illuminate your path to knowledge and success! Continue your learning journey with renewed energy.',\r\n        'Holi': 'Celebrate the vibrant colors of learning! May your educational journey be as colorful and joyful as this beautiful festival.',\r\n        'Republic Day': 'Happy Republic Day! Celebrating the spirit of democracy, education, and empowerment for all citizens.',\r\n        'Independence Day': 'Happy Independence Day! Education empowers minds and builds a stronger, independent nation.',\r\n        'Gandhi Jayanti': 'Remembering Mahatma Gandhi - \"Live as if you were to die tomorrow. Learn as if you were to live forever.\"',\r\n        'Christmas': 'Merry Christmas! May this festive season bring you joy, peace, and countless opportunities to learn and grow.',\r\n        'Eid': 'Eid Mubarak! May this blessed occasion bring you happiness, prosperity, and success in all your educational endeavors.',\r\n        'Durga Puja': 'Happy Durga Puja! May Goddess Durga bless you with wisdom, strength, and the courage to overcome all challenges.'\r\n      };\r\n      \r\n      for (let key in messages) {\r\n        if (festivalName.includes(key)) {\r\n          return messages[key];\r\n        }\r\n      }\r\n      \r\n      return `Wishing you a joyous ${festivalName}! May this special occasion inspire you to reach new heights in your learning journey.`;\r\n    }\r\n\r\n    // Fallback local festival check\r\n    function checkLocalFestivals(now) {\r\n      const festivals = {\r\n       // \"1-1\": { name: \"New Year's Day\", message: \"Wishing you a wonderful year ahead filled with learning, growth, and endless opportunities!\" },\r\n        //\"1-26\": { name: \"Republic Day\", message: \"Happy Republic Day! Celebrating the spirit of democracy, education, and constitutional values.\" },\r\n       // \"8-15\": { name: \"Independence Day\", message: \"Happy Independence Day! Education empowers minds and builds a stronger, independent nation.\" },\r\n        \"10-2\": { name: \"Gandhi Jayanti\", message: \"Remembering Mahatma Gandhi's wisdom - Education is the key to unlocking human potential.\" },\r\n      //  \"10-24\": { name: \"Diwali\", message: \"Happy Diwali! May the festival of lights illuminate your path to knowledge and success!\" },\r\n        //\"10-31\": { name: \"Diwali\", message: \"Wishing you a joyous Diwali filled with light, prosperity, and the wisdom of continuous learning!\" },\r\n      //  \"11-1\": { name: \"Diwali\", message: \"Happy Diwali! Celebrating the triumph of light over darkness and knowledge over ignorance!\" },\r\n        //\"12-25\": { name: \"Christmas\", message: \"Merry Christmas! Wishing you joy, peace, and a wonderful season of learning and celebration!\" }\r\n      };\r\n\r\n      const today = `${now.getMonth() + 1}-${now.getDate()}`;\r\n      const festivalInfo = festivals[today];\r\n\r\n      if (festivalInfo) {\r\n        displayFestival(festivalInfo.name, festivalInfo.message, formatDate(now));\r\n      } else {\r\n        const greetings = [\r\n          \"Have a productive and inspiring day of learning ahead! \ud83d\udcda\",\r\n          \"Keep exploring new horizons and expanding your knowledge! \ud83c\udf31\",\r\n          \"Every day brings a new opportunity to learn something remarkable! \u2728\",\r\n          \"Your educational journey continues with endless possibilities today! \ud83d\ude80\",\r\n          \"Embrace today's learning opportunities with enthusiasm! \ud83d\udca1\",\r\n          \"Knowledge is your superpower - keep building it every day! \ud83c\udf93\"\r\n        ];\r\n        const randomGreeting = greetings[Math.floor(Math.random() * greetings.length)];\r\n        displayGenericGreeting(randomGreeting, formatDate(now));\r\n      }\r\n    }\r\n\r\n    // Display festival information\r\n    function displayFestival(name, message, date) {\r\n      const festivalContent = document.getElementById('festival-content');\r\n      festivalContent.innerHTML = `\r\n        <div class=\"festival-title\">\ud83c\udf8a ${name}! \ud83c\udf8a</div>\r\n        <div class=\"festival-message\">${message}</div>\r\n        <div class=\"festival-date\">\r\n          <svg class=\"calendar-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\r\n            <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" stroke-width=\"2\"/>\r\n            <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" stroke-width=\"2\"/>\r\n            <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" stroke-width=\"2\"/>\r\n            <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" stroke-width=\"2\"/>\r\n          </svg>\r\n          <span>${date}</span>\r\n        </div>\r\n      `;\r\n    }\r\n\r\n    // Display generic greeting\r\n    function displayGenericGreeting(message, date) {\r\n      const festivalContent = document.getElementById('festival-content');\r\n      festivalContent.innerHTML = `\r\n        <div class=\"festival-title\">\u2728 Welcome to Titanium Ed-Tech! \u2728</div>\r\n        <div class=\"festival-message\">${message}</div>\r\n        <div class=\"festival-date\">\r\n          <svg class=\"calendar-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\r\n            <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" stroke-width=\"2\"/>\r\n            <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" stroke-width=\"2\"/>\r\n            <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" stroke-width=\"2\"/>\r\n            <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" stroke-width=\"2\"/>\r\n          </svg>\r\n          <span>${date}</span>\r\n        </div>\r\n      `;\r\n    }\r\n\r\n    // Show modal\r\n    function openModal() {\r\n      backdrop.classList.add('show');\r\n      backdrop.setAttribute('aria-hidden', 'false');\r\n      setTimeout(() => modal.focus(), 120);\r\n      trapFocus();\r\n      updateDateDisplay();\r\n      fetchQuote();\r\n      fetchFestivalInfo();\r\n    }\r\n\r\n    // Close modal\r\n    function closeModal() {\r\n      backdrop.classList.remove('show');\r\n      backdrop.setAttribute('aria-hidden', 'true');\r\n      document.removeEventListener('focus', keepFocus, true);\r\n    }\r\n\r\n    // Click outside to close\r\n    backdrop.addEventListener('click', function (e) {\r\n      if (e.target === backdrop) closeModal();\r\n    });\r\n\r\n    // Close buttons\r\n    btnClose.addEventListener('click', function (e) { e.stopPropagation(); closeModal(); });\r\n    btnAck.addEventListener('click', function (e) { e.stopPropagation(); closeModal(); });\r\n\r\n    // ESC to close\r\n    document.addEventListener('keydown', function (e) {\r\n      if (e.key === 'Escape' && backdrop.classList.contains('show')) {\r\n        closeModal();\r\n      }\r\n    });\r\n\r\n    // Focus trap\r\n    let firstFocusable = null, lastFocusable = null;\r\n    function trapFocus() {\r\n      const nodes = modal.querySelectorAll(focusableSelector);\r\n      if (!nodes.length) return;\r\n      firstFocusable = nodes[0];\r\n      lastFocusable = nodes[nodes.length - 1];\r\n      modal.addEventListener('keydown', handleTab);\r\n      document.addEventListener('focus', keepFocus, true);\r\n    }\r\n    function handleTab(e) {\r\n      if (e.key !== 'Tab') return;\r\n      if (e.shiftKey) {\r\n        if (document.activeElement === firstFocusable) {\r\n          e.preventDefault();\r\n          lastFocusable.focus();\r\n        }\r\n      } else {\r\n        if (document.activeElement === lastFocusable) {\r\n          e.preventDefault();\r\n          firstFocusable.focus();\r\n        }\r\n      }\r\n    }\r\n    function keepFocus(e) {\r\n      if (!modal.contains(e.target)) {\r\n        e.stopPropagation();\r\n        firstFocusable && firstFocusable.focus();\r\n      }\r\n    }\r\n\r\n    // Expose API\r\n    window.TitaniumPopup = {\r\n      open: openModal,\r\n      close: closeModal\r\n    };\r\n\r\n    // Auto-open\r\n    setTimeout(openModal, 100);\r\n  })();\r\n</script>"
    },
    "assign_free_batch": {
        "last_batch": {
            "_id": "68889a7c1de3a90b5b0b2cc5",
            "name": "JEE Coaching Plus 2026",
            "byName": "For JEE Aspirants",
            "previewImage": "https://static.pw.live/5eb393ee95fab7468a79d189/ADMIN/56f647ac-27b1-4d88-975a-8c1c0ea037e5.png",
            "language": "Hinglish",
            "exam": "IIT-JEE",
            "class": "12+",
            "start_date": "2025-08-24",
            "end_date": "2026-06-30"
        }
    }
}