From d0fa3ce52e783e6d7e4d7ddd539ea17c048cbfb3 Mon Sep 17 00:00:00 2001 From: Jeffrey Ramirez Date: Fri, 5 Jun 2026 10:58:25 +0800 Subject: [PATCH 01/10] feat: apply OpenLMS branding and design system customizations --- tutorindigo/plugin.py | 8 +- .../indigo/lms/static/css/dark.min.css | 449 ++++ .../indigo/lms/static/css/light.min.css | 482 +++++ .../indigo/lms/static/images/logo-white.png | Bin 2378 -> 5526 bytes .../indigo/lms/static/images/logo.png | Bin 3966 -> 5526 bytes .../sass/partials/lms/theme/_extras.scss | 1824 +++++++++++++++++ .../sass/partials/lms/theme/_variables.scss | 112 +- 7 files changed, 2837 insertions(+), 38 deletions(-) create mode 100644 tutorindigo/templates/indigo/lms/static/css/dark.min.css create mode 100644 tutorindigo/templates/indigo/lms/static/css/light.min.css diff --git a/tutorindigo/plugin.py b/tutorindigo/plugin.py index d8eca71ee..65e4da609 100644 --- a/tutorindigo/plugin.py +++ b/tutorindigo/plugin.py @@ -300,14 +300,14 @@ def _override_openedx_docker_image( "variants": { "light": { "urls": { - "default": "https://raw.githubusercontent.com/edly-io/brand-openedx/refs/heads/ulmo/indigo/dist/light.min.css", - "brandOverride": "https://raw.githubusercontent.com/edly-io/brand-openedx/refs/heads/ulmo/indigo/dist/light.min.css", + "default": "https://{{ LMS_HOST }}/static/indigo/css/light.min.css", + "brandOverride": "https://{{ LMS_HOST }}/static/indigo/css/light.min.css", }, }, "dark": { "urls": { - "default": "https://raw.githubusercontent.com/edly-io/brand-openedx/refs/heads/ulmo/indigo/dist/dark.min.css", - "brandOverride": "https://raw.githubusercontent.com/edly-io/brand-openedx/refs/heads/ulmo/indigo/dist/dark.min.css", + "default": "https://{{ LMS_HOST }}/static/indigo/css/dark.min.css", + "brandOverride": "https://{{ LMS_HOST }}/static/indigo/css/dark.min.css", } }, } diff --git a/tutorindigo/templates/indigo/lms/static/css/dark.min.css b/tutorindigo/templates/indigo/lms/static/css/dark.min.css new file mode 100644 index 000000000..b03bbf3aa --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/css/dark.min.css @@ -0,0 +1,449 @@ +:root { + --color-primary-50: #07223B; + --color-primary-100: #082440; + --color-primary-200: #082644; + --color-primary-300: #092B4D; + --color-primary-400: #0A3055; + --color-primary-500: #476480; + --color-primary-600: #8598AA; + --color-primary-700: #C2CBD5; + --color-primary-800: #F0F3F5; + --color-primary-900: #F8F9FA; + --color-brand-50: #6E003B; + --color-brand-100: #76003F; + --color-brand-200: #7E0043; + --color-brand-300: #8D004C; + --color-brand-400: #9D0054; + --color-brand-500: #B6407F; + --color-brand-600: #CE80AA; + --color-brand-700: #E7BFD4; + --color-brand-800: #F9F0F5; + --color-brand-900: #FCF7FA; + --color-blue-50: #192E6F; + --color-blue-100: #1A3177; + --color-blue-200: #1C347F; + --color-blue-300: #203B8F; + --color-blue-400: #23419F; + --color-blue-500: #5A71B7; + --color-blue-600: #91A0CF; + --color-blue-700: #C8D0E7; + --color-blue-800: #F2F4F9; + --color-blue-900: #F8F9FC; + --color-red-50: #891F29; + --color-red-100: #92222C; + --color-red-200: #9C242E; + --color-red-300: #B02934; + --color-red-400: #C32D3A; + --color-red-500: #D2626B; + --color-red-600: #E1969D; + --color-red-700: #F0CBCE; + --color-red-800: #FBF2F3; + --color-red-900: #FDF9F9; + --color-yellow-50: #B39800; + --color-yellow-100: #BFA300; + --color-yellow-200: #CCAE00; + --color-yellow-300: #E6C300; + --color-yellow-400: #FFD900; + --color-yellow-500: #FFE340; + --color-yellow-600: #FFEC80; + --color-yellow-700: #FFF6BF; + --color-yellow-800: #FFFDF0; + --color-yellow-900: #FFFEF7; + --color-green-50: #105B3A; + --color-green-100: #11623E; + --color-green-200: #126842; + --color-green-300: #15754B; + --color-green-400: #178253; + --color-green-500: #51A17E; + --color-green-600: #8BC1A9; + --color-green-700: #C5E0D4; + --color-green-800: #F1F8F5; + --color-green-900: #F8FBFA; + --color-teal-50: #004C77; + --color-teal-100: #005280; + --color-teal-200: #005788; + --color-teal-300: #006299; + --color-teal-400: #006DAA; + --color-teal-500: #4092BF; + --color-teal-600: #80B6D5; + --color-teal-700: #BFDBEA; + --color-teal-800: #F0F6FA; + --color-teal-900: #F7FBFC; + --color-dark-50: #1B2C21; + --color-dark-100: #1D2F23; + --color-dark-200: #1F3226; + --color-dark-300: #23392A; + --color-dark-400: #273F2F; + --color-dark-500: #5D6F63; + --color-dark-600: #939F97; + --color-dark-700: #C9CFCB; + --color-dark-800: #F2F3F3; + --color-dark-900: #F9F9F9; + --color-gray-50: #212529; + --color-gray-100: #333333; + --color-gray-200: #454545; + --color-gray-300: #5C5C5C; + --color-gray-400: #707070; + --color-gray-500: #8F8F8F; + --color-gray-600: #ADADAD; + --color-gray-700: #CCCCCC; + --color-gray-800: #EBEBEB; + --color-gray-900: #F8F8F8; +} + +.text-primary-50 { color: var(--primary-50); } +.bg-primary-50 { background-color: var(--primary-50); } +.border-primary-50 { border-color: var(--primary-50); } +.text-primary-100 { color: var(--primary-100); } +.bg-primary-100 { background-color: var(--primary-100); } +.border-primary-100 { border-color: var(--primary-100); } +.text-primary-200 { color: var(--primary-200); } +.bg-primary-200 { background-color: var(--primary-200); } +.border-primary-200 { border-color: var(--primary-200); } +.text-primary-300 { color: var(--primary-300); } +.bg-primary-300 { background-color: var(--primary-300); } +.border-primary-300 { border-color: var(--primary-300); } +.text-primary-400 { color: var(--primary-400); } +.bg-primary-400 { background-color: var(--primary-400); } +.border-primary-400 { border-color: var(--primary-400); } +.text-primary-500 { color: var(--primary-500); } +.bg-primary-500 { background-color: var(--primary-500); } +.border-primary-500 { border-color: var(--primary-500); } +.text-primary-600 { color: var(--primary-600); } +.bg-primary-600 { background-color: var(--primary-600); } +.border-primary-600 { border-color: var(--primary-600); } +.text-primary-700 { color: var(--primary-700); } +.bg-primary-700 { background-color: var(--primary-700); } +.border-primary-700 { border-color: var(--primary-700); } +.text-primary-800 { color: var(--primary-800); } +.bg-primary-800 { background-color: var(--primary-800); } +.border-primary-800 { border-color: var(--primary-800); } +.text-primary-900 { color: var(--primary-900); } +.bg-primary-900 { background-color: var(--primary-900); } +.border-primary-900 { border-color: var(--primary-900); } +.text-brand-50 { color: var(--brand-50); } +.bg-brand-50 { background-color: var(--brand-50); } +.border-brand-50 { border-color: var(--brand-50); } +.text-brand-100 { color: var(--brand-100); } +.bg-brand-100 { background-color: var(--brand-100); } +.border-brand-100 { border-color: var(--brand-100); } +.text-brand-200 { color: var(--brand-200); } +.bg-brand-200 { background-color: var(--brand-200); } +.border-brand-200 { border-color: var(--brand-200); } +.text-brand-300 { color: var(--brand-300); } +.bg-brand-300 { background-color: var(--brand-300); } +.border-brand-300 { border-color: var(--brand-300); } +.text-brand-400 { color: var(--brand-400); } +.bg-brand-400 { background-color: var(--brand-400); } +.border-brand-400 { border-color: var(--brand-400); } +.text-brand-500 { color: var(--brand-500); } +.bg-brand-500 { background-color: var(--brand-500); } +.border-brand-500 { border-color: var(--brand-500); } +.text-brand-600 { color: var(--brand-600); } +.bg-brand-600 { background-color: var(--brand-600); } +.border-brand-600 { border-color: var(--brand-600); } +.text-brand-700 { color: var(--brand-700); } +.bg-brand-700 { background-color: var(--brand-700); } +.border-brand-700 { border-color: var(--brand-700); } +.text-brand-800 { color: var(--brand-800); } +.bg-brand-800 { background-color: var(--brand-800); } +.border-brand-800 { border-color: var(--brand-800); } +.text-brand-900 { color: var(--brand-900); } +.bg-brand-900 { background-color: var(--brand-900); } +.border-brand-900 { border-color: var(--brand-900); } +.text-blue-50 { color: var(--blue-50); } +.bg-blue-50 { background-color: var(--blue-50); } +.border-blue-50 { border-color: var(--blue-50); } +.text-blue-100 { color: var(--blue-100); } +.bg-blue-100 { background-color: var(--blue-100); } +.border-blue-100 { border-color: var(--blue-100); } +.text-blue-200 { color: var(--blue-200); } +.bg-blue-200 { background-color: var(--blue-200); } +.border-blue-200 { border-color: var(--blue-200); } +.text-blue-300 { color: var(--blue-300); } +.bg-blue-300 { background-color: var(--blue-300); } +.border-blue-300 { border-color: var(--blue-300); } +.text-blue-400 { color: var(--blue-400); } +.bg-blue-400 { background-color: var(--blue-400); } +.border-blue-400 { border-color: var(--blue-400); } +.text-blue-500 { color: var(--blue-500); } +.bg-blue-500 { background-color: var(--blue-500); } +.border-blue-500 { border-color: var(--blue-500); } +.text-blue-600 { color: var(--blue-600); } +.bg-blue-600 { background-color: var(--blue-600); } +.border-blue-600 { border-color: var(--blue-600); } +.text-blue-700 { color: var(--blue-700); } +.bg-blue-700 { background-color: var(--blue-700); } +.border-blue-700 { border-color: var(--blue-700); } +.text-blue-800 { color: var(--blue-800); } +.bg-blue-800 { background-color: var(--blue-800); } +.border-blue-800 { border-color: var(--blue-800); } +.text-blue-900 { color: var(--blue-900); } +.bg-blue-900 { background-color: var(--blue-900); } +.border-blue-900 { border-color: var(--blue-900); } +.text-red-50 { color: var(--red-50); } +.bg-red-50 { background-color: var(--red-50); } +.border-red-50 { border-color: var(--red-50); } +.text-red-100 { color: var(--red-100); } +.bg-red-100 { background-color: var(--red-100); } +.border-red-100 { border-color: var(--red-100); } +.text-red-200 { color: var(--red-200); } +.bg-red-200 { background-color: var(--red-200); } +.border-red-200 { border-color: var(--red-200); } +.text-red-300 { color: var(--red-300); } +.bg-red-300 { background-color: var(--red-300); } +.border-red-300 { border-color: var(--red-300); } +.text-red-400 { color: var(--red-400); } +.bg-red-400 { background-color: var(--red-400); } +.border-red-400 { border-color: var(--red-400); } +.text-red-500 { color: var(--red-500); } +.bg-red-500 { background-color: var(--red-500); } +.border-red-500 { border-color: var(--red-500); } +.text-red-600 { color: var(--red-600); } +.bg-red-600 { background-color: var(--red-600); } +.border-red-600 { border-color: var(--red-600); } +.text-red-700 { color: var(--red-700); } +.bg-red-700 { background-color: var(--red-700); } +.border-red-700 { border-color: var(--red-700); } +.text-red-800 { color: var(--red-800); } +.bg-red-800 { background-color: var(--red-800); } +.border-red-800 { border-color: var(--red-800); } +.text-red-900 { color: var(--red-900); } +.bg-red-900 { background-color: var(--red-900); } +.border-red-900 { border-color: var(--red-900); } +.text-yellow-50 { color: var(--yellow-50); } +.bg-yellow-50 { background-color: var(--yellow-50); } +.border-yellow-50 { border-color: var(--yellow-50); } +.text-yellow-100 { color: var(--yellow-100); } +.bg-yellow-100 { background-color: var(--yellow-100); } +.border-yellow-100 { border-color: var(--yellow-100); } +.text-yellow-200 { color: var(--yellow-200); } +.bg-yellow-200 { background-color: var(--yellow-200); } +.border-yellow-200 { border-color: var(--yellow-200); } +.text-yellow-300 { color: var(--yellow-300); } +.bg-yellow-300 { background-color: var(--yellow-300); } +.border-yellow-300 { border-color: var(--yellow-300); } +.text-yellow-400 { color: var(--yellow-400); } +.bg-yellow-400 { background-color: var(--yellow-400); } +.border-yellow-400 { border-color: var(--yellow-400); } +.text-yellow-500 { color: var(--yellow-500); } +.bg-yellow-500 { background-color: var(--yellow-500); } +.border-yellow-500 { border-color: var(--yellow-500); } +.text-yellow-600 { color: var(--yellow-600); } +.bg-yellow-600 { background-color: var(--yellow-600); } +.border-yellow-600 { border-color: var(--yellow-600); } +.text-yellow-700 { color: var(--yellow-700); } +.bg-yellow-700 { background-color: var(--yellow-700); } +.border-yellow-700 { border-color: var(--yellow-700); } +.text-yellow-800 { color: var(--yellow-800); } +.bg-yellow-800 { background-color: var(--yellow-800); } +.border-yellow-800 { border-color: var(--yellow-800); } +.text-yellow-900 { color: var(--yellow-900); } +.bg-yellow-900 { background-color: var(--yellow-900); } +.border-yellow-900 { border-color: var(--yellow-900); } +.text-green-50 { color: var(--green-50); } +.bg-green-50 { background-color: var(--green-50); } +.border-green-50 { border-color: var(--green-50); } +.text-green-100 { color: var(--green-100); } +.bg-green-100 { background-color: var(--green-100); } +.border-green-100 { border-color: var(--green-100); } +.text-green-200 { color: var(--green-200); } +.bg-green-200 { background-color: var(--green-200); } +.border-green-200 { border-color: var(--green-200); } +.text-green-300 { color: var(--green-300); } +.bg-green-300 { background-color: var(--green-300); } +.border-green-300 { border-color: var(--green-300); } +.text-green-400 { color: var(--green-400); } +.bg-green-400 { background-color: var(--green-400); } +.border-green-400 { border-color: var(--green-400); } +.text-green-500 { color: var(--green-500); } +.bg-green-500 { background-color: var(--green-500); } +.border-green-500 { border-color: var(--green-500); } +.text-green-600 { color: var(--green-600); } +.bg-green-600 { background-color: var(--green-600); } +.border-green-600 { border-color: var(--green-600); } +.text-green-700 { color: var(--green-700); } +.bg-green-700 { background-color: var(--green-700); } +.border-green-700 { border-color: var(--green-700); } +.text-green-800 { color: var(--green-800); } +.bg-green-800 { background-color: var(--green-800); } +.border-green-800 { border-color: var(--green-800); } +.text-green-900 { color: var(--green-900); } +.bg-green-900 { background-color: var(--green-900); } +.border-green-900 { border-color: var(--green-900); } +.text-teal-50 { color: var(--teal-50); } +.bg-teal-50 { background-color: var(--teal-50); } +.border-teal-50 { border-color: var(--teal-50); } +.text-teal-100 { color: var(--teal-100); } +.bg-teal-100 { background-color: var(--teal-100); } +.border-teal-100 { border-color: var(--teal-100); } +.text-teal-200 { color: var(--teal-200); } +.bg-teal-200 { background-color: var(--teal-200); } +.border-teal-200 { border-color: var(--teal-200); } +.text-teal-300 { color: var(--teal-300); } +.bg-teal-300 { background-color: var(--teal-300); } +.border-teal-300 { border-color: var(--teal-300); } +.text-teal-400 { color: var(--teal-400); } +.bg-teal-400 { background-color: var(--teal-400); } +.border-teal-400 { border-color: var(--teal-400); } +.text-teal-500 { color: var(--teal-500); } +.bg-teal-500 { background-color: var(--teal-500); } +.border-teal-500 { border-color: var(--teal-500); } +.text-teal-600 { color: var(--teal-600); } +.bg-teal-600 { background-color: var(--teal-600); } +.border-teal-600 { border-color: var(--teal-600); } +.text-teal-700 { color: var(--teal-700); } +.bg-teal-700 { background-color: var(--teal-700); } +.border-teal-700 { border-color: var(--teal-700); } +.text-teal-800 { color: var(--teal-800); } +.bg-teal-800 { background-color: var(--teal-800); } +.border-teal-800 { border-color: var(--teal-800); } +.text-teal-900 { color: var(--teal-900); } +.bg-teal-900 { background-color: var(--teal-900); } +.border-teal-900 { border-color: var(--teal-900); } +.text-dark-50 { color: var(--dark-50); } +.bg-dark-50 { background-color: var(--dark-50); } +.border-dark-50 { border-color: var(--dark-50); } +.text-dark-100 { color: var(--dark-100); } +.bg-dark-100 { background-color: var(--dark-100); } +.border-dark-100 { border-color: var(--dark-100); } +.text-dark-200 { color: var(--dark-200); } +.bg-dark-200 { background-color: var(--dark-200); } +.border-dark-200 { border-color: var(--dark-200); } +.text-dark-300 { color: var(--dark-300); } +.bg-dark-300 { background-color: var(--dark-300); } +.border-dark-300 { border-color: var(--dark-300); } +.text-dark-400 { color: var(--dark-400); } +.bg-dark-400 { background-color: var(--dark-400); } +.border-dark-400 { border-color: var(--dark-400); } +.text-dark-500 { color: var(--dark-500); } +.bg-dark-500 { background-color: var(--dark-500); } +.border-dark-500 { border-color: var(--dark-500); } +.text-dark-600 { color: var(--dark-600); } +.bg-dark-600 { background-color: var(--dark-600); } +.border-dark-600 { border-color: var(--dark-600); } +.text-dark-700 { color: var(--dark-700); } +.bg-dark-700 { background-color: var(--dark-700); } +.border-dark-700 { border-color: var(--dark-700); } +.text-dark-800 { color: var(--dark-800); } +.bg-dark-800 { background-color: var(--dark-800); } +.border-dark-800 { border-color: var(--dark-800); } +.text-dark-900 { color: var(--dark-900); } +.bg-dark-900 { background-color: var(--dark-900); } +.border-dark-900 { border-color: var(--dark-900); } +.text-gray-50 { color: var(--gray-50); } +.bg-gray-50 { background-color: var(--gray-50); } +.border-gray-50 { border-color: var(--gray-50); } +.text-gray-100 { color: var(--gray-100); } +.bg-gray-100 { background-color: var(--gray-100); } +.border-gray-100 { border-color: var(--gray-100); } +.text-gray-200 { color: var(--gray-200); } +.bg-gray-200 { background-color: var(--gray-200); } +.border-gray-200 { border-color: var(--gray-200); } +.text-gray-300 { color: var(--gray-300); } +.bg-gray-300 { background-color: var(--gray-300); } +.border-gray-300 { border-color: var(--gray-300); } +.text-gray-400 { color: var(--gray-400); } +.bg-gray-400 { background-color: var(--gray-400); } +.border-gray-400 { border-color: var(--gray-400); } +.text-gray-500 { color: var(--gray-500); } +.bg-gray-500 { background-color: var(--gray-500); } +.border-gray-500 { border-color: var(--gray-500); } +.text-gray-600 { color: var(--gray-600); } +.bg-gray-600 { background-color: var(--gray-600); } +.border-gray-600 { border-color: var(--gray-600); } +.text-gray-700 { color: var(--gray-700); } +.bg-gray-700 { background-color: var(--gray-700); } +.border-gray-700 { border-color: var(--gray-700); } +.text-gray-800 { color: var(--gray-800); } +.bg-gray-800 { background-color: var(--gray-800); } +.border-gray-800 { border-color: var(--gray-800); } +.text-gray-900 { color: var(--gray-900); } +.bg-gray-900 { background-color: var(--gray-900); } +.border-gray-900 { border-color: var(--gray-900); } + +.p-0 { padding: 0px; } +.px-0 { padding-left: 0px; padding-right: 0px; } +.py-0 { padding-top: 0px; padding-bottom: 0px; } +.m-0 { margin: 0px; } +.mx-0 { margin-left: 0px; margin-right: 0px; } +.my-0 { margin-top: 0px; margin-bottom: 0px; } +.p-xs { padding: 4px; } +.px-xs { padding-left: 4px; padding-right: 4px; } +.py-xs { padding-top: 4px; padding-bottom: 4px; } +.m-xs { margin: 4px; } +.mx-xs { margin-left: 4px; margin-right: 4px; } +.my-xs { margin-top: 4px; margin-bottom: 4px; } +.p-sm { padding: 8px; } +.px-sm { padding-left: 8px; padding-right: 8px; } +.py-sm { padding-top: 8px; padding-bottom: 8px; } +.m-sm { margin: 8px; } +.mx-sm { margin-left: 8px; margin-right: 8px; } +.my-sm { margin-top: 8px; margin-bottom: 8px; } +.p-md { padding: 16px; } +.px-md { padding-left: 16px; padding-right: 16px; } +.py-md { padding-top: 16px; padding-bottom: 16px; } +.m-md { margin: 16px; } +.mx-md { margin-left: 16px; margin-right: 16px; } +.my-md { margin-top: 16px; margin-bottom: 16px; } +.p-lg { padding: 24px; } +.px-lg { padding-left: 24px; padding-right: 24px; } +.py-lg { padding-top: 24px; padding-bottom: 24px; } +.m-lg { margin: 24px; } +.mx-lg { margin-left: 24px; margin-right: 24px; } +.my-lg { margin-top: 24px; margin-bottom: 24px; } +.p-xl { padding: 32px; } +.px-xl { padding-left: 32px; padding-right: 32px; } +.py-xl { padding-top: 32px; padding-bottom: 32px; } +.m-xl { margin: 32px; } +.mx-xl { margin-left: 32px; margin-right: 32px; } +.my-xl { margin-top: 32px; margin-bottom: 32px; } +.p-2xl { padding: 48px; } +.px-2xl { padding-left: 48px; padding-right: 48px; } +.py-2xl { padding-top: 48px; padding-bottom: 48px; } +.m-2xl { margin: 48px; } +.mx-2xl { margin-left: 48px; margin-right: 48px; } +.my-2xl { margin-top: 48px; margin-bottom: 48px; } +.p-3xl { padding: 64px; } +.px-3xl { padding-left: 64px; padding-right: 64px; } +.py-3xl { padding-top: 64px; padding-bottom: 64px; } +.m-3xl { margin: 64px; } +.mx-3xl { margin-left: 64px; margin-right: 64px; } +.my-3xl { margin-top: 64px; margin-bottom: 64px; } +.p-4xl { padding: 80px; } +.px-4xl { padding-left: 80px; padding-right: 80px; } +.py-4xl { padding-top: 80px; padding-bottom: 80px; } +.m-4xl { margin: 80px; } +.mx-4xl { margin-left: 80px; margin-right: 80px; } +.my-4xl { margin-top: 80px; margin-bottom: 80px; } + +.rounded-xs { border-radius: 4px; } +.rounded-sm { border-radius: 6px; } +.rounded-md { border-radius: 7px; } +.rounded-lg { border-radius: 8px; } +.rounded-xl { border-radius: 16px; } +.rounded-pill { border-radius: 800px; } +.rounded-full { border-radius: 9999px; } + +.text-xl { font-size: 40px; } +.text-lg { font-size: 32px; } +.text-md { font-size: 22px; } +.text-sm { font-size: 18px; } +.text-xs { font-size: 14px; } +.text-regular { font-size: 12px; } + +.font-regular { font-weight: 400; } +.font-medium { font-weight: 500; } +.font-semibold { font-weight: 600; } +.font-bold { font-weight: 700; } + +.lh-display { line-height: 40px; } +.lh-heading { line-height: 28px; } +.lh-md { line-height: 28px; } +.lh-regular { line-height: 24px; } + +.font-primary { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, Segoe UI, Roboto, Helvetica Neue, Arial; } +.font-segoe-ui { font-family: Segoe UI; } +.font-roboto { font-family: Roboto; } +.font-helvetica-neue { font-family: Helvetica Neue; } +.font-arial { font-family: Arial; } diff --git a/tutorindigo/templates/indigo/lms/static/css/light.min.css b/tutorindigo/templates/indigo/lms/static/css/light.min.css new file mode 100644 index 000000000..3dc1f1511 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/css/light.min.css @@ -0,0 +1,482 @@ +:root { + --color-primary-50: #ecfdf5; + --color-primary-100: #d1fae5; + --color-primary-200: #a7f3d0; + --color-primary-300: #6ee7b7; + --color-primary-400: #34d399; + --color-primary-500: #059669; + --color-primary-600: #047857; + --color-primary-700: #065f46; + --color-primary-800: #064e3b; + --color-primary-900: #022c22; + --color-brand-50: #FCF7FA; + --color-brand-100: #F9F0F5; + --color-brand-200: #E7BFD4; + --color-brand-300: #CE80AA; + --color-brand-400: #B6407F; + --color-brand-500: #9D0054; + --color-brand-600: #8D004C; + --color-brand-700: #7E0043; + --color-brand-800: #76003F; + --color-brand-900: #6E003B; + --color-blue-50: #F8F9FC; + --color-blue-100: #F2F4F9; + --color-blue-200: #C8D0E7; + --color-blue-300: #91A0CF; + --color-blue-400: #5A71B7; + --color-blue-500: #23419F; + --color-blue-600: #203B8F; + --color-blue-700: #1C347F; + --color-blue-800: #1A3177; + --color-blue-900: #192E6F; + --color-red-50: #FDF9F9; + --color-red-100: #FBF2F3; + --color-red-200: #F0CBCE; + --color-red-300: #E1969D; + --color-red-400: #D2626B; + --color-red-500: #C32D3A; + --color-red-600: #B02934; + --color-red-700: #9C242E; + --color-red-800: #92222C; + --color-red-900: #891F29; + --color-yellow-50: #FFFEF7; + --color-yellow-100: #FFFDF0; + --color-yellow-200: #FFF6BF; + --color-yellow-300: #FFEC80; + --color-yellow-400: #FFE340; + --color-yellow-500: #FFD900; + --color-yellow-600: #E6C300; + --color-yellow-700: #CCAE00; + --color-yellow-800: #BFA300; + --color-yellow-900: #B39800; + --color-green-50: #F8FBFA; + --color-green-100: #F1F8F5; + --color-green-200: #C5E0D4; + --color-green-300: #8BC1A9; + --color-green-400: #51A17E; + --color-green-500: #178253; + --color-green-600: #15754B; + --color-green-700: #126842; + --color-green-800: #11623E; + --color-green-900: #105B3A; + --color-teal-50: #F7FBFC; + --color-teal-100: #F0F6FA; + --color-teal-200: #BFDBEA; + --color-teal-300: #80B6D5; + --color-teal-400: #4092BF; + --color-teal-500: #006DAA; + --color-teal-600: #006299; + --color-teal-700: #005788; + --color-teal-800: #005280; + --color-teal-900: #004C77; + --color-dark-50: #F9F9F9; + --color-dark-100: #F2F3F3; + --color-dark-200: #C9CFCB; + --color-dark-300: #939F97; + --color-dark-400: #5D6F63; + --color-dark-500: #273F2F; + --color-dark-600: #23392A; + --color-dark-700: #1F3226; + --color-dark-800: #1D2F23; + --color-dark-900: #1B2C21; + --color-gray-50: #F8F8F8; + --color-gray-100: #EBEBEB; + --color-gray-200: #CCCCCC; + --color-gray-300: #ADADAD; + --color-gray-400: #8F8F8F; + --color-gray-500: #707070; + --color-gray-600: #5C5C5C; + --color-gray-700: #454545; + --color-gray-800: #333333; + --color-gray-900: #212529; +} + +.text-primary-50 { color: var(--primary-50); } +.bg-primary-50 { background-color: var(--primary-50); } +.border-primary-50 { border-color: var(--primary-50); } +.text-primary-100 { color: var(--primary-100); } +.bg-primary-100 { background-color: var(--primary-100); } +.border-primary-100 { border-color: var(--primary-100); } +.text-primary-200 { color: var(--primary-200); } +.bg-primary-200 { background-color: var(--primary-200); } +.border-primary-200 { border-color: var(--primary-200); } +.text-primary-300 { color: var(--primary-300); } +.bg-primary-300 { background-color: var(--primary-300); } +.border-primary-300 { border-color: var(--primary-300); } +.text-primary-400 { color: var(--primary-400); } +.bg-primary-400 { background-color: var(--primary-400); } +.border-primary-400 { border-color: var(--primary-400); } +.text-primary-500 { color: var(--primary-500); } +.bg-primary-500 { background-color: var(--primary-500); } +.border-primary-500 { border-color: var(--primary-500); } +.text-primary-600 { color: var(--primary-600); } +.bg-primary-600 { background-color: var(--primary-600); } +.border-primary-600 { border-color: var(--primary-600); } +.text-primary-700 { color: var(--primary-700); } +.bg-primary-700 { background-color: var(--primary-700); } +.border-primary-700 { border-color: var(--primary-700); } +.text-primary-800 { color: var(--primary-800); } +.bg-primary-800 { background-color: var(--primary-800); } +.border-primary-800 { border-color: var(--primary-800); } +.text-primary-900 { color: var(--primary-900); } +.bg-primary-900 { background-color: var(--primary-900); } +.border-primary-900 { border-color: var(--primary-900); } +.text-brand-50 { color: var(--brand-50); } +.bg-brand-50 { background-color: var(--brand-50); } +.border-brand-50 { border-color: var(--brand-50); } +.text-brand-100 { color: var(--brand-100); } +.bg-brand-100 { background-color: var(--brand-100); } +.border-brand-100 { border-color: var(--brand-100); } +.text-brand-200 { color: var(--brand-200); } +.bg-brand-200 { background-color: var(--brand-200); } +.border-brand-200 { border-color: var(--brand-200); } +.text-brand-300 { color: var(--brand-300); } +.bg-brand-300 { background-color: var(--brand-300); } +.border-brand-300 { border-color: var(--brand-300); } +.text-brand-400 { color: var(--brand-400); } +.bg-brand-400 { background-color: var(--brand-400); } +.border-brand-400 { border-color: var(--brand-400); } +.text-brand-500 { color: var(--brand-500); } +.bg-brand-500 { background-color: var(--brand-500); } +.border-brand-500 { border-color: var(--brand-500); } +.text-brand-600 { color: var(--brand-600); } +.bg-brand-600 { background-color: var(--brand-600); } +.border-brand-600 { border-color: var(--brand-600); } +.text-brand-700 { color: var(--brand-700); } +.bg-brand-700 { background-color: var(--brand-700); } +.border-brand-700 { border-color: var(--brand-700); } +.text-brand-800 { color: var(--brand-800); } +.bg-brand-800 { background-color: var(--brand-800); } +.border-brand-800 { border-color: var(--brand-800); } +.text-brand-900 { color: var(--brand-900); } +.bg-brand-900 { background-color: var(--brand-900); } +.border-brand-900 { border-color: var(--brand-900); } +.text-blue-50 { color: var(--blue-50); } +.bg-blue-50 { background-color: var(--blue-50); } +.border-blue-50 { border-color: var(--blue-50); } +.text-blue-100 { color: var(--blue-100); } +.bg-blue-100 { background-color: var(--blue-100); } +.border-blue-100 { border-color: var(--blue-100); } +.text-blue-200 { color: var(--blue-200); } +.bg-blue-200 { background-color: var(--blue-200); } +.border-blue-200 { border-color: var(--blue-200); } +.text-blue-300 { color: var(--blue-300); } +.bg-blue-300 { background-color: var(--blue-300); } +.border-blue-300 { border-color: var(--blue-300); } +.text-blue-400 { color: var(--blue-400); } +.bg-blue-400 { background-color: var(--blue-400); } +.border-blue-400 { border-color: var(--blue-400); } +.text-blue-500 { color: var(--blue-500); } +.bg-blue-500 { background-color: var(--blue-500); } +.border-blue-500 { border-color: var(--blue-500); } +.text-blue-600 { color: var(--blue-600); } +.bg-blue-600 { background-color: var(--blue-600); } +.border-blue-600 { border-color: var(--blue-600); } +.text-blue-700 { color: var(--blue-700); } +.bg-blue-700 { background-color: var(--blue-700); } +.border-blue-700 { border-color: var(--blue-700); } +.text-blue-800 { color: var(--blue-800); } +.bg-blue-800 { background-color: var(--blue-800); } +.border-blue-800 { border-color: var(--blue-800); } +.text-blue-900 { color: var(--blue-900); } +.bg-blue-900 { background-color: var(--blue-900); } +.border-blue-900 { border-color: var(--blue-900); } +.text-red-50 { color: var(--red-50); } +.bg-red-50 { background-color: var(--red-50); } +.border-red-50 { border-color: var(--red-50); } +.text-red-100 { color: var(--red-100); } +.bg-red-100 { background-color: var(--red-100); } +.border-red-100 { border-color: var(--red-100); } +.text-red-200 { color: var(--red-200); } +.bg-red-200 { background-color: var(--red-200); } +.border-red-200 { border-color: var(--red-200); } +.text-red-300 { color: var(--red-300); } +.bg-red-300 { background-color: var(--red-300); } +.border-red-300 { border-color: var(--red-300); } +.text-red-400 { color: var(--red-400); } +.bg-red-400 { background-color: var(--red-400); } +.border-red-400 { border-color: var(--red-400); } +.text-red-500 { color: var(--red-500); } +.bg-red-500 { background-color: var(--red-500); } +.border-red-500 { border-color: var(--red-500); } +.text-red-600 { color: var(--red-600); } +.bg-red-600 { background-color: var(--red-600); } +.border-red-600 { border-color: var(--red-600); } +.text-red-700 { color: var(--red-700); } +.bg-red-700 { background-color: var(--red-700); } +.border-red-700 { border-color: var(--red-700); } +.text-red-800 { color: var(--red-800); } +.bg-red-800 { background-color: var(--red-800); } +.border-red-800 { border-color: var(--red-800); } +.text-red-900 { color: var(--red-900); } +.bg-red-900 { background-color: var(--red-900); } +.border-red-900 { border-color: var(--red-900); } +.text-yellow-50 { color: var(--yellow-50); } +.bg-yellow-50 { background-color: var(--yellow-50); } +.border-yellow-50 { border-color: var(--yellow-50); } +.text-yellow-100 { color: var(--yellow-100); } +.bg-yellow-100 { background-color: var(--yellow-100); } +.border-yellow-100 { border-color: var(--yellow-100); } +.text-yellow-200 { color: var(--yellow-200); } +.bg-yellow-200 { background-color: var(--yellow-200); } +.border-yellow-200 { border-color: var(--yellow-200); } +.text-yellow-300 { color: var(--yellow-300); } +.bg-yellow-300 { background-color: var(--yellow-300); } +.border-yellow-300 { border-color: var(--yellow-300); } +.text-yellow-400 { color: var(--yellow-400); } +.bg-yellow-400 { background-color: var(--yellow-400); } +.border-yellow-400 { border-color: var(--yellow-400); } +.text-yellow-500 { color: var(--yellow-500); } +.bg-yellow-500 { background-color: var(--yellow-500); } +.border-yellow-500 { border-color: var(--yellow-500); } +.text-yellow-600 { color: var(--yellow-600); } +.bg-yellow-600 { background-color: var(--yellow-600); } +.border-yellow-600 { border-color: var(--yellow-600); } +.text-yellow-700 { color: var(--yellow-700); } +.bg-yellow-700 { background-color: var(--yellow-700); } +.border-yellow-700 { border-color: var(--yellow-700); } +.text-yellow-800 { color: var(--yellow-800); } +.bg-yellow-800 { background-color: var(--yellow-800); } +.border-yellow-800 { border-color: var(--yellow-800); } +.text-yellow-900 { color: var(--yellow-900); } +.bg-yellow-900 { background-color: var(--yellow-900); } +.border-yellow-900 { border-color: var(--yellow-900); } +.text-green-50 { color: var(--green-50); } +.bg-green-50 { background-color: var(--green-50); } +.border-green-50 { border-color: var(--green-50); } +.text-green-100 { color: var(--green-100); } +.bg-green-100 { background-color: var(--green-100); } +.border-green-100 { border-color: var(--green-100); } +.text-green-200 { color: var(--green-200); } +.bg-green-200 { background-color: var(--green-200); } +.border-green-200 { border-color: var(--green-200); } +.text-green-300 { color: var(--green-300); } +.bg-green-300 { background-color: var(--green-300); } +.border-green-300 { border-color: var(--green-300); } +.text-green-400 { color: var(--green-400); } +.bg-green-400 { background-color: var(--green-400); } +.border-green-400 { border-color: var(--green-400); } +.text-green-500 { color: var(--green-500); } +.bg-green-500 { background-color: var(--green-500); } +.border-green-500 { border-color: var(--green-500); } +.text-green-600 { color: var(--green-600); } +.bg-green-600 { background-color: var(--green-600); } +.border-green-600 { border-color: var(--green-600); } +.text-green-700 { color: var(--green-700); } +.bg-green-700 { background-color: var(--green-700); } +.border-green-700 { border-color: var(--green-700); } +.text-green-800 { color: var(--green-800); } +.bg-green-800 { background-color: var(--green-800); } +.border-green-800 { border-color: var(--green-800); } +.text-green-900 { color: var(--green-900); } +.bg-green-900 { background-color: var(--green-900); } +.border-green-900 { border-color: var(--green-900); } +.text-teal-50 { color: var(--teal-50); } +.bg-teal-50 { background-color: var(--teal-50); } +.border-teal-50 { border-color: var(--teal-50); } +.text-teal-100 { color: var(--teal-100); } +.bg-teal-100 { background-color: var(--teal-100); } +.border-teal-100 { border-color: var(--teal-100); } +.text-teal-200 { color: var(--teal-200); } +.bg-teal-200 { background-color: var(--teal-200); } +.border-teal-200 { border-color: var(--teal-200); } +.text-teal-300 { color: var(--teal-300); } +.bg-teal-300 { background-color: var(--teal-300); } +.border-teal-300 { border-color: var(--teal-300); } +.text-teal-400 { color: var(--teal-400); } +.bg-teal-400 { background-color: var(--teal-400); } +.border-teal-400 { border-color: var(--teal-400); } +.text-teal-500 { color: var(--teal-500); } +.bg-teal-500 { background-color: var(--teal-500); } +.border-teal-500 { border-color: var(--teal-500); } +.text-teal-600 { color: var(--teal-600); } +.bg-teal-600 { background-color: var(--teal-600); } +.border-teal-600 { border-color: var(--teal-600); } +.text-teal-700 { color: var(--teal-700); } +.bg-teal-700 { background-color: var(--teal-700); } +.border-teal-700 { border-color: var(--teal-700); } +.text-teal-800 { color: var(--teal-800); } +.bg-teal-800 { background-color: var(--teal-800); } +.border-teal-800 { border-color: var(--teal-800); } +.text-teal-900 { color: var(--teal-900); } +.bg-teal-900 { background-color: var(--teal-900); } +.border-teal-900 { border-color: var(--teal-900); } +.text-dark-50 { color: var(--dark-50); } +.bg-dark-50 { background-color: var(--dark-50); } +.border-dark-50 { border-color: var(--dark-50); } +.text-dark-100 { color: var(--dark-100); } +.bg-dark-100 { background-color: var(--dark-100); } +.border-dark-100 { border-color: var(--dark-100); } +.text-dark-200 { color: var(--dark-200); } +.bg-dark-200 { background-color: var(--dark-200); } +.border-dark-200 { border-color: var(--dark-200); } +.text-dark-300 { color: var(--dark-300); } +.bg-dark-300 { background-color: var(--dark-300); } +.border-dark-300 { border-color: var(--dark-300); } +.text-dark-400 { color: var(--dark-400); } +.bg-dark-400 { background-color: var(--dark-400); } +.border-dark-400 { border-color: var(--dark-400); } +.text-dark-500 { color: var(--dark-500); } +.bg-dark-500 { background-color: var(--dark-500); } +.border-dark-500 { border-color: var(--dark-500); } +.text-dark-600 { color: var(--dark-600); } +.bg-dark-600 { background-color: var(--dark-600); } +.border-dark-600 { border-color: var(--dark-600); } +.text-dark-700 { color: var(--dark-700); } +.bg-dark-700 { background-color: var(--dark-700); } +.border-dark-700 { border-color: var(--dark-700); } +.text-dark-800 { color: var(--dark-800); } +.bg-dark-800 { background-color: var(--dark-800); } +.border-dark-800 { border-color: var(--dark-800); } +.text-dark-900 { color: var(--dark-900); } +.bg-dark-900 { background-color: var(--dark-900); } +.border-dark-900 { border-color: var(--dark-900); } +.text-gray-50 { color: var(--gray-50); } +.bg-gray-50 { background-color: var(--gray-50); } +.border-gray-50 { border-color: var(--gray-50); } +.text-gray-100 { color: var(--gray-100); } +.bg-gray-100 { background-color: var(--gray-100); } +.border-gray-100 { border-color: var(--gray-100); } +.text-gray-200 { color: var(--gray-200); } +.bg-gray-200 { background-color: var(--gray-200); } +.border-gray-200 { border-color: var(--gray-200); } +.text-gray-300 { color: var(--gray-300); } +.bg-gray-300 { background-color: var(--gray-300); } +.border-gray-300 { border-color: var(--gray-300); } +.text-gray-400 { color: var(--gray-400); } +.bg-gray-400 { background-color: var(--gray-400); } +.border-gray-400 { border-color: var(--gray-400); } +.text-gray-500 { color: var(--gray-500); } +.bg-gray-500 { background-color: var(--gray-500); } +.border-gray-500 { border-color: var(--gray-500); } +.text-gray-600 { color: var(--gray-600); } +.bg-gray-600 { background-color: var(--gray-600); } +.border-gray-600 { border-color: var(--gray-600); } +.text-gray-700 { color: var(--gray-700); } +.bg-gray-700 { background-color: var(--gray-700); } +.border-gray-700 { border-color: var(--gray-700); } +.text-gray-800 { color: var(--gray-800); } +.bg-gray-800 { background-color: var(--gray-800); } +.border-gray-800 { border-color: var(--gray-800); } +.text-gray-900 { color: var(--gray-900); } +.bg-gray-900 { background-color: var(--gray-900); } +.border-gray-900 { border-color: var(--gray-900); } + +.p-0 { padding: 0px; } +.px-0 { padding-left: 0px; padding-right: 0px; } +.py-0 { padding-top: 0px; padding-bottom: 0px; } +.m-0 { margin: 0px; } +.mx-0 { margin-left: 0px; margin-right: 0px; } +.my-0 { margin-top: 0px; margin-bottom: 0px; } +.p-xs { padding: 4px; } +.px-xs { padding-left: 4px; padding-right: 4px; } +.py-xs { padding-top: 4px; padding-bottom: 4px; } +.m-xs { margin: 4px; } +.mx-xs { margin-left: 4px; margin-right: 4px; } +.my-xs { margin-top: 4px; margin-bottom: 4px; } +.p-sm { padding: 8px; } +.px-sm { padding-left: 8px; padding-right: 8px; } +.py-sm { padding-top: 8px; padding-bottom: 8px; } +.m-sm { margin: 8px; } +.mx-sm { margin-left: 8px; margin-right: 8px; } +.my-sm { margin-top: 8px; margin-bottom: 8px; } +.p-md { padding: 16px; } +.px-md { padding-left: 16px; padding-right: 16px; } +.py-md { padding-top: 16px; padding-bottom: 16px; } +.m-md { margin: 16px; } +.mx-md { margin-left: 16px; margin-right: 16px; } +.my-md { margin-top: 16px; margin-bottom: 16px; } +.p-lg { padding: 24px; } +.px-lg { padding-left: 24px; padding-right: 24px; } +.py-lg { padding-top: 24px; padding-bottom: 24px; } +.m-lg { margin: 24px; } +.mx-lg { margin-left: 24px; margin-right: 24px; } +.my-lg { margin-top: 24px; margin-bottom: 24px; } +.p-xl { padding: 32px; } +.px-xl { padding-left: 32px; padding-right: 32px; } +.py-xl { padding-top: 32px; padding-bottom: 32px; } +.m-xl { margin: 32px; } +.mx-xl { margin-left: 32px; margin-right: 32px; } +.my-xl { margin-top: 32px; margin-bottom: 32px; } +.p-2xl { padding: 48px; } +.px-2xl { padding-left: 48px; padding-right: 48px; } +.py-2xl { padding-top: 48px; padding-bottom: 48px; } +.m-2xl { margin: 48px; } +.mx-2xl { margin-left: 48px; margin-right: 48px; } +.my-2xl { margin-top: 48px; margin-bottom: 48px; } +.p-3xl { padding: 64px; } +.px-3xl { padding-left: 64px; padding-right: 64px; } +.py-3xl { padding-top: 64px; padding-bottom: 64px; } +.m-3xl { margin: 64px; } +.mx-3xl { margin-left: 64px; margin-right: 64px; } +.my-3xl { margin-top: 64px; margin-bottom: 64px; } +.p-4xl { padding: 80px; } +.px-4xl { padding-left: 80px; padding-right: 80px; } +.py-4xl { padding-top: 80px; padding-bottom: 80px; } +.m-4xl { margin: 80px; } +.mx-4xl { margin-left: 80px; margin-right: 80px; } +.my-4xl { margin-top: 80px; margin-bottom: 80px; } + +.rounded-xs { border-radius: 4px; } +.rounded-sm { border-radius: 6px; } +.rounded-md { border-radius: 7px; } +.rounded-lg { border-radius: 8px; } +.rounded-xl { border-radius: 16px; } +.rounded-pill { border-radius: 800px; } +.rounded-full { border-radius: 9999px; } + +.text-xl { font-size: 40px; } +.text-lg { font-size: 32px; } +.text-md { font-size: 22px; } +.text-sm { font-size: 18px; } +.text-xs { font-size: 14px; } +.text-regular { font-size: 12px; } + +.font-regular { font-weight: 400; } +.font-medium { font-weight: 500; } +.font-semibold { font-weight: 600; } +.font-bold { font-weight: 700; } + +.lh-display { line-height: 40px; } +.lh-heading { line-height: 28px; } +.lh-md { line-height: 28px; } +.lh-regular { line-height: 24px; } + +.font-primary { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, Segoe UI, Roboto, Helvetica Neue, Arial; } +.font-segoe-ui { font-family: Segoe UI; } +.font-roboto { font-family: Roboto; } +.font-helvetica-neue { font-family: Helvetica Neue; } +.font-arial { font-family: Arial; } + +:root { + --pgn-color-primary-100: #d1fae5; + --pgn-color-primary-200: #a7f3d0; + --pgn-color-primary-500: #059669; + --pgn-color-primary-700: #065f46; + --pgn-color-primary-base: #059669; +} + +:root { + --pgn-color-nav-pills-base-link-active-bg: #ecfdf5; + --pgn-color-nav-pills-base-link-active-color: #059669; + --pgn-color-nav-tabs-base-link-active-bg: #ecfdf5; + --pgn-color-nav-tabs-base-link-active-color: #059669; + --pgn-color-nav-tabs-base-link-hover-bg: #ecfdf5; + --pgn-color-nav-pills-base-link-hover-bg: #ecfdf5; +} + +:root { + --pgn-color-primary-100: #d1fae5; + --pgn-color-primary-200: #a7f3d0; + --pgn-color-primary-500: #059669; + --pgn-color-primary-700: #065f46; + --pgn-color-primary-base: #059669; + --pgn-color-nav-pills-base-link-active-bg: #ecfdf5; + --pgn-color-nav-pills-base-link-active-color: #059669; + --pgn-color-nav-tabs-base-link-active-bg: #ecfdf5; + --pgn-color-nav-tabs-base-link-active-color: #059669; + --pgn-color-nav-tabs-base-link-hover-bg: #ecfdf5; + --pgn-color-nav-pills-base-link-hover-bg: #ecfdf5; + --pgn-color-bg-active: #ecfdf5; + --pgn-color-active: #059669; +} diff --git a/tutorindigo/templates/indigo/lms/static/images/logo-white.png b/tutorindigo/templates/indigo/lms/static/images/logo-white.png index 07f2a0d326767fb59ca5d0037cbbd7681864cc9e..040519f4199a0a4a7dcfda81f1cbbd467c06b106 100644 GIT binary patch delta 5520 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 R@|pku002ovPDHLkV1k=jI~xE1 diff --git a/tutorindigo/templates/indigo/lms/static/images/logo.png b/tutorindigo/templates/indigo/lms/static/images/logo.png index a222e4c744f509c2354f6ba5c65a17e20c4b6d68..040519f4199a0a4a7dcfda81f1cbbd467c06b106 100644 GIT binary patch delta 5520 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 Sc0()x0000*Q{t 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 a.active, + > a[aria-current="page"] { + background-color: $nav-selected-bg; + color: $nav-selected-color !important; + border-radius: $btn-border-radius; + + .icon, + svg { + color: $nav-selected-color; + fill: $nav-selected-color; + } + } + + &:hover:not(.active) { + background-color: $nav-hover-bg; + border-radius: $btn-border-radius; + } +} + + +// ── Course / Page Tabs ─────────────────────────────────────── + +.wrapper-course-material .tabs.course-tabs li { + a, + button { + border-width: 2px; + font-size: 14px; + font-weight: 500; + color: $light-dark; + + &:hover, + &:visited { + color: $dark; + border-color: transparent; + } + + &.active { + color: $tab-active-color; + background-color: $tab-active-bg; + border-color: transparent; + border-radius: 20px; + padding: 4px 14px; + } + } +} + +// Dashboard tabs (Continue Learning, Assigned Courses, etc.) +.tab-bar, +.tabs-container, +nav[role="tablist"], +.nav-tabs { + .tab, + .nav-item { + .tab-label, + .nav-link { + color: $light-dark; + font-weight: 500; + border-radius: 20px; + padding: 6px 16px; + border: none; + background: transparent; + transition: background 0.15s, color 0.15s; + + &:hover { + color: $dark; + background: $chip-neutral-bg; + } + } + + &.is-active .tab-label, + .nav-link.active, + .nav-link[aria-selected="true"] { + color: $tab-active-color; + background: $tab-active-bg; + font-weight: 600; + } + } +} + + +// ── Progress Bars ──────────────────────────────────────────── + +.progress, +.progress-bar-container { + background-color: #E5E7EB; + border-radius: 999px; + height: 6px; + overflow: hidden; + + .progress-fill, + .progress-bar { + background-color: $progress-active; + border-radius: 999px; + transition: width 0.3s ease; + } + + &.completed .progress-bar, + &.is-complete .progress-fill { + background-color: $progress-complete; + } +} + +// Course progress tracker — lesson list +.course-progress-tracker { + .lesson-item { + &.completed .lesson-icon { + color: $progress-complete; + } + &.active { + background-color: #EFF6FF; + border-radius: $btn-border-radius; + font-weight: 600; + } + } +} + + +// ── Status Badges ──────────────────────────────────────────── + +.badge, +.status-badge, +.enrollment-status { + border-radius: 999px; + font-size: 0.75rem; + font-weight: 600; + padding: 4px 12px; + display: inline-block; + line-height: 1.4; + + &.overdue, + &.badge-overdue { + background-color: $badge-overdue-bg; + color: $badge-overdue-text; + } + + &.due-soon, + &.badge-due-soon { + background-color: $badge-due-soon-bg; + color: $badge-due-soon-text; + } + + &.completed, + &.badge-complete { + background-color: $badge-complete-bg; + color: $badge-complete-text; + } +} + + +// ── Content Type Chips (neutral: Video, Course, etc.) ───────── + +.content-type-chip, +.tag-chip, +.chip-neutral { + display: inline-block; + background-color: $chip-neutral-bg; + color: $chip-neutral-text; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 500; + padding: 4px 12px; +} + + +// ── Category Chips (purple: Machine Learning, Design, etc.) ── + +.category-chip, +.chip-category, +.topic-tag { + display: inline-block; + background-color: $chip-category-bg; + color: $chip-category-text; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 500; + padding: 4px 12px; +} + + +// ── Selected / Active Filter Chips ─────────────────────────── + +.chip-selected, +.filter-chip.active, +.tag-chip.selected { + display: inline-flex; + align-items: center; + gap: 6px; + background-color: $chip-selected-bg; + color: $chip-selected-text; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 600; + padding: 4px 12px; + + .remove-icon, + .chip-remove { + cursor: pointer; + opacity: 0.7; + &:hover { opacity: 1; } + } +} + + +// ── Accordion (course modules) ─────────────────────────────── + +.accordion, +.module-accordion { + .accordion-header { + font-weight: 600; + font-size: 14px; + color: $dark; + display: flex; + align-items: center; + gap: 8px; + padding: 12px 0; + border-bottom: 1px solid $gray-light; + cursor: pointer; + } + + .accordion-lesson { + font-size: 14px; + color: $light-dark; + padding: 6px 0 6px 28px; + display: flex; + align-items: center; + gap: 8px; + + &:hover { + color: $dark; + } + } +} + + +// ── Course Progress Card ────────────────────────────────────── + +.course-progress-card { + border-radius: 12px; + border: 1px solid $gray-light; + padding: 20px; + + .progress-heading { + font-size: 16px; + font-weight: 700; + color: $dark; + margin-bottom: 12px; + } + + .lesson-count { + font-size: 13px; + color: $light-dark; + } + + .section-heading { + font-size: 13px; + font-weight: 700; + color: $dark; + margin: 16px 0 8px; + text-transform: none; + } +} + + +// ── Dark theme overrides for new variables ──────────────────── + +body.indigo-dark-theme { + .btn-primary, + .btn.btn-primary { + background-color: $primary-d; + border-color: $primary-d; + color: $btn-color-d; + + &:hover:not(:disabled) { + background-color: lighten($primary-d, 8%); + } + } + + .badge, .status-badge { + &.overdue, &.badge-overdue { + background-color: darken($badge-overdue-bg, 10%); + } + &.due-soon, &.badge-due-soon { + background-color: darken($badge-due-soon-bg, 10%); + } + } + + .chip-selected, + .filter-chip.active { + background-color: lighten($chip-selected-bg, 15%); + } + + .progress .progress-bar { + background-color: $primary-d; + } + + .nav-item.active, + .nav-item > a.active { + background-color: rgba($nav-selected-bg, 0.15); + color: lighten($nav-selected-color, 20%) !important; + } +} +// ============================================================ +// OpenLMS Component Overrides — based on design system +// Append or merge this into: +// tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_extras.scss +// ============================================================ + + +// ── Buttons ───────────────────────────────────────────────── +// Override tutor-indigo's zero border-radius with rounded corners + +%btn-pl-default-base { + border-radius: $btn-border-radius !important; +} + +.btn, +.global-header .nav-links .secondary .btn { + border-radius: $btn-border-radius !important; +} + +// Primary button +.btn-primary, +.btn.btn-primary { + background-color: $primary; + border-color: $primary; + color: #fff; + font-weight: 500; + border-radius: $btn-border-radius; + + &:hover:not(:disabled) { + background-color: darken($primary, 6%); + border-color: darken($primary, 6%); + color: #fff; + } + + &:disabled, + &.disabled { + background-color: $gray-light; + border-color: $gray-light; + color: #9CA3AF; + opacity: 1; + } +} + +// Secondary button +.btn-secondary, +.btn.btn-secondary { + background-color: #fff; + border: 1px solid $gray-light; + color: $dark; + font-weight: 500; + border-radius: $btn-border-radius; + + &:hover:not(:disabled) { + background-color: $primary; + border-color: $primary; + color: #fff; + } + + &:disabled, + &.disabled { + background-color: $gray-light; + border-color: $gray-light; + color: #9CA3AF; + opacity: 1; + } +} + +// Ghost / tertiary button +.btn-ghost, +.btn.btn-tertiary, +.btn-link.btn-ghost { + background-color: transparent; + border: none; + color: $dark; + font-weight: 500; + border-radius: $btn-border-radius; + + &:hover:not(:disabled) { + background-color: $primary; + color: #fff; + } + + &:disabled, + &.disabled { + color: #9CA3AF; + opacity: 1; + } +} + +// Icon-only button +.btn-icon { + background-color: transparent; + border: none; + border-radius: $btn-border-radius; + color: $dark; + padding: 6px; + + &:hover:not(:disabled) { + background-color: $primary; + color: #fff; + } +} + + +// ── Input / Search field ───────────────────────────────────── + +input[type="text"], +input[type="email"], +input[type="password"], +input[type="search"], +.input-text, +.form-control { + border-radius: $btn-border-radius; + border: 1px solid $gray-light; + font-family: $font-family-title; + transition: border-color 0.15s ease; + + &:focus, + &:focus-visible { + border-color: $input-focus-border; + box-shadow: 0 0 0 3px rgba($input-focus-border, 0.15); + outline: none; + } +} + +// Error state +.has-error input, +.field-error input, +input.is-invalid { + border-color: $input-error-border !important; + color: $input-error-color; + + &:focus { + box-shadow: 0 0 0 3px rgba($input-error-border, 0.15); + } +} + +.field-error .error-msg, +.has-error .help-block, +.invalid-feedback { + color: $input-error-color; + font-size: 0.875rem; + margin-top: 4px; +} + + +// ── Main Navigation (selected / hover states) ──────────────── + +header.global-header .nav-links .nav-item { + border-radius: $btn-border-radius; + + &.active, + &.is-active, + > a.active, + > a[aria-current="page"] { + background-color: $nav-selected-bg; + color: $nav-selected-color !important; + border-radius: $btn-border-radius; + + .icon, + svg { + color: $nav-selected-color; + fill: $nav-selected-color; + } + } + + &:hover:not(.active) { + background-color: $nav-hover-bg; + border-radius: $btn-border-radius; + } +} + + +// ── Course / Page Tabs ─────────────────────────────────────── + +.wrapper-course-material .tabs.course-tabs li { + a, + button { + border-width: 2px; + font-size: 14px; + font-weight: 500; + color: $light-dark; + + &:hover, + &:visited { + color: $dark; + border-color: transparent; + } + + &.active { + color: $tab-active-color; + background-color: $tab-active-bg; + border-color: transparent; + border-radius: 20px; + padding: 4px 14px; + } + } +} + +// Dashboard tabs (Continue Learning, Assigned Courses, etc.) +.tab-bar, +.tabs-container, +nav[role="tablist"], +.nav-tabs { + .tab, + .nav-item { + .tab-label, + .nav-link { + color: $light-dark; + font-weight: 500; + border-radius: 20px; + padding: 6px 16px; + border: none; + background: transparent; + transition: background 0.15s, color 0.15s; + + &:hover { + color: $dark; + background: $chip-neutral-bg; + } + } + + &.is-active .tab-label, + .nav-link.active, + .nav-link[aria-selected="true"] { + color: $tab-active-color; + background: $tab-active-bg; + font-weight: 600; + } + } +} + + +// ── Progress Bars ──────────────────────────────────────────── + +.progress, +.progress-bar-container { + background-color: #E5E7EB; + border-radius: 999px; + height: 6px; + overflow: hidden; + + .progress-fill, + .progress-bar { + background-color: $progress-active; + border-radius: 999px; + transition: width 0.3s ease; + } + + &.completed .progress-bar, + &.is-complete .progress-fill { + background-color: $progress-complete; + } +} + +// Course progress tracker — lesson list +.course-progress-tracker { + .lesson-item { + &.completed .lesson-icon { + color: $progress-complete; + } + &.active { + background-color: #EFF6FF; + border-radius: $btn-border-radius; + font-weight: 600; + } + } +} + + +// ── Status Badges ──────────────────────────────────────────── + +.badge, +.status-badge, +.enrollment-status { + border-radius: 999px; + font-size: 0.75rem; + font-weight: 600; + padding: 4px 12px; + display: inline-block; + line-height: 1.4; + + &.overdue, + &.badge-overdue { + background-color: $badge-overdue-bg; + color: $badge-overdue-text; + } + + &.due-soon, + &.badge-due-soon { + background-color: $badge-due-soon-bg; + color: $badge-due-soon-text; + } + + &.completed, + &.badge-complete { + background-color: $badge-complete-bg; + color: $badge-complete-text; + } +} + + +// ── Content Type Chips (neutral: Video, Course, etc.) ───────── + +.content-type-chip, +.tag-chip, +.chip-neutral { + display: inline-block; + background-color: $chip-neutral-bg; + color: $chip-neutral-text; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 500; + padding: 4px 12px; +} + + +// ── Category Chips (purple: Machine Learning, Design, etc.) ── + +.category-chip, +.chip-category, +.topic-tag { + display: inline-block; + background-color: $chip-category-bg; + color: $chip-category-text; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 500; + padding: 4px 12px; +} + + +// ── Selected / Active Filter Chips ─────────────────────────── + +.chip-selected, +.filter-chip.active, +.tag-chip.selected { + display: inline-flex; + align-items: center; + gap: 6px; + background-color: $chip-selected-bg; + color: $chip-selected-text; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 600; + padding: 4px 12px; + + .remove-icon, + .chip-remove { + cursor: pointer; + opacity: 0.7; + &:hover { opacity: 1; } + } +} + + +// ── Accordion (course modules) ─────────────────────────────── + +.accordion, +.module-accordion { + .accordion-header { + font-weight: 600; + font-size: 14px; + color: $dark; + display: flex; + align-items: center; + gap: 8px; + padding: 12px 0; + border-bottom: 1px solid $gray-light; + cursor: pointer; + } + + .accordion-lesson { + font-size: 14px; + color: $light-dark; + padding: 6px 0 6px 28px; + display: flex; + align-items: center; + gap: 8px; + + &:hover { + color: $dark; + } + } +} + + +// ── Course Progress Card ────────────────────────────────────── + +.course-progress-card { + border-radius: 12px; + border: 1px solid $gray-light; + padding: 20px; + + .progress-heading { + font-size: 16px; + font-weight: 700; + color: $dark; + margin-bottom: 12px; + } + + .lesson-count { + font-size: 13px; + color: $light-dark; + } + + .section-heading { + font-size: 13px; + font-weight: 700; + color: $dark; + margin: 16px 0 8px; + text-transform: none; + } +} + + +// ── Dark theme overrides for new variables ──────────────────── + +body.indigo-dark-theme { + .btn-primary, + .btn.btn-primary { + background-color: $primary-d; + border-color: $primary-d; + color: $btn-color-d; + + &:hover:not(:disabled) { + background-color: lighten($primary-d, 8%); + } + } + + .badge, .status-badge { + &.overdue, &.badge-overdue { + background-color: darken($badge-overdue-bg, 10%); + } + &.due-soon, &.badge-due-soon { + background-color: darken($badge-due-soon-bg, 10%); + } + } + + .chip-selected, + .filter-chip.active { + background-color: lighten($chip-selected-bg, 15%); + } + + .progress .progress-bar { + background-color: $primary-d; + } + + .nav-item.active, + .nav-item > a.active { + background-color: rgba($nav-selected-bg, 0.15); + color: lighten($nav-selected-color, 20%) !important; + } +} + +// === OpenLMS custom START === +// ============================================================ +// OpenLMS Component Overrides — based on design system +// Append or merge this into: +// tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_extras.scss +// ============================================================ + + +// ── Buttons ───────────────────────────────────────────────── +// Override tutor-indigo's zero border-radius with rounded corners + +%btn-pl-default-base { + border-radius: $btn-border-radius !important; +} + +.btn, +.global-header .nav-links .secondary .btn { + border-radius: $btn-border-radius !important; +} + +// Primary button +.btn-primary, +.btn.btn-primary { + background-color: $primary; + border-color: $primary; + color: #fff; + font-weight: 500; + border-radius: $btn-border-radius; + + &:hover:not(:disabled) { + background-color: darken($primary, 6%); + border-color: darken($primary, 6%); + color: #fff; + } + + &:disabled, + &.disabled { + background-color: $gray-light; + border-color: $gray-light; + color: #9CA3AF; + opacity: 1; + } +} + +// Secondary button +.btn-secondary, +.btn.btn-secondary { + background-color: #fff; + border: 1px solid $gray-light; + color: $dark; + font-weight: 500; + border-radius: $btn-border-radius; + + &:hover:not(:disabled) { + background-color: $primary; + border-color: $primary; + color: #fff; + } + + &:disabled, + &.disabled { + background-color: $gray-light; + border-color: $gray-light; + color: #9CA3AF; + opacity: 1; + } +} + +// Ghost / tertiary button +.btn-ghost, +.btn.btn-tertiary, +.btn-link.btn-ghost { + background-color: transparent; + border: none; + color: $dark; + font-weight: 500; + border-radius: $btn-border-radius; + + &:hover:not(:disabled) { + background-color: $primary; + color: #fff; + } + + &:disabled, + &.disabled { + color: #9CA3AF; + opacity: 1; + } +} + +// Icon-only button +.btn-icon { + background-color: transparent; + border: none; + border-radius: $btn-border-radius; + color: $dark; + padding: 6px; + + &:hover:not(:disabled) { + background-color: $primary; + color: #fff; + } +} + + +// ── Input / Search field ───────────────────────────────────── + +input[type="text"], +input[type="email"], +input[type="password"], +input[type="search"], +.input-text, +.form-control { + border-radius: $btn-border-radius; + border: 1px solid $gray-light; + font-family: $font-family-title; + transition: border-color 0.15s ease; + + &:focus, + &:focus-visible { + border-color: $input-focus-border; + box-shadow: 0 0 0 3px rgba($input-focus-border, 0.15); + outline: none; + } +} + +// Error state +.has-error input, +.field-error input, +input.is-invalid { + border-color: $input-error-border !important; + color: $input-error-color; + + &:focus { + box-shadow: 0 0 0 3px rgba($input-error-border, 0.15); + } +} + +.field-error .error-msg, +.has-error .help-block, +.invalid-feedback { + color: $input-error-color; + font-size: 0.875rem; + margin-top: 4px; +} + + +// ── Main Navigation (selected / hover states) ──────────────── + +header.global-header .nav-links .nav-item { + border-radius: $btn-border-radius; + + &.active, + &.is-active, + > a.active, + > a[aria-current="page"] { + background-color: $nav-selected-bg; + color: $nav-selected-color !important; + border-radius: $btn-border-radius; + + .icon, + svg { + color: $nav-selected-color; + fill: $nav-selected-color; + } + } + + &:hover:not(.active) { + background-color: $nav-hover-bg; + border-radius: $btn-border-radius; + } +} + + +// ── Course / Page Tabs ─────────────────────────────────────── + +.wrapper-course-material .tabs.course-tabs li { + a, + button { + border-width: 2px; + font-size: 14px; + font-weight: 500; + color: $light-dark; + + &:hover, + &:visited { + color: $dark; + border-color: transparent; + } + + &.active { + color: $tab-active-color; + background-color: $tab-active-bg; + border-color: transparent; + border-radius: 20px; + padding: 4px 14px; + } + } +} + +// Dashboard tabs (Continue Learning, Assigned Courses, etc.) +.tab-bar, +.tabs-container, +nav[role="tablist"], +.nav-tabs { + .tab, + .nav-item { + .tab-label, + .nav-link { + color: $light-dark; + font-weight: 500; + border-radius: 20px; + padding: 6px 16px; + border: none; + background: transparent; + transition: background 0.15s, color 0.15s; + + &:hover { + color: $dark; + background: $chip-neutral-bg; + } + } + + &.is-active .tab-label, + .nav-link.active, + .nav-link[aria-selected="true"] { + color: $tab-active-color; + background: $tab-active-bg; + font-weight: 600; + } + } +} + + +// ── Progress Bars ──────────────────────────────────────────── + +.progress, +.progress-bar-container { + background-color: #E5E7EB; + border-radius: 999px; + height: 6px; + overflow: hidden; + + .progress-fill, + .progress-bar { + background-color: $progress-active; + border-radius: 999px; + transition: width 0.3s ease; + } + + &.completed .progress-bar, + &.is-complete .progress-fill { + background-color: $progress-complete; + } +} + +// Course progress tracker — lesson list +.course-progress-tracker { + .lesson-item { + &.completed .lesson-icon { + color: $progress-complete; + } + &.active { + background-color: #EFF6FF; + border-radius: $btn-border-radius; + font-weight: 600; + } + } +} + + +// ── Status Badges ──────────────────────────────────────────── + +.badge, +.status-badge, +.enrollment-status { + border-radius: 999px; + font-size: 0.75rem; + font-weight: 600; + padding: 4px 12px; + display: inline-block; + line-height: 1.4; + + &.overdue, + &.badge-overdue { + background-color: $badge-overdue-bg; + color: $badge-overdue-text; + } + + &.due-soon, + &.badge-due-soon { + background-color: $badge-due-soon-bg; + color: $badge-due-soon-text; + } + + &.completed, + &.badge-complete { + background-color: $badge-complete-bg; + color: $badge-complete-text; + } +} + + +// ── Content Type Chips (neutral: Video, Course, etc.) ───────── + +.content-type-chip, +.tag-chip, +.chip-neutral { + display: inline-block; + background-color: $chip-neutral-bg; + color: $chip-neutral-text; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 500; + padding: 4px 12px; +} + + +// ── Category Chips (purple: Machine Learning, Design, etc.) ── + +.category-chip, +.chip-category, +.topic-tag { + display: inline-block; + background-color: $chip-category-bg; + color: $chip-category-text; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 500; + padding: 4px 12px; +} + + +// ── Selected / Active Filter Chips ─────────────────────────── + +.chip-selected, +.filter-chip.active, +.tag-chip.selected { + display: inline-flex; + align-items: center; + gap: 6px; + background-color: $chip-selected-bg; + color: $chip-selected-text; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 600; + padding: 4px 12px; + + .remove-icon, + .chip-remove { + cursor: pointer; + opacity: 0.7; + &:hover { opacity: 1; } + } +} + + +// ── Accordion (course modules) ─────────────────────────────── + +.accordion, +.module-accordion { + .accordion-header { + font-weight: 600; + font-size: 14px; + color: $dark; + display: flex; + align-items: center; + gap: 8px; + padding: 12px 0; + border-bottom: 1px solid $gray-light; + cursor: pointer; + } + + .accordion-lesson { + font-size: 14px; + color: $light-dark; + padding: 6px 0 6px 28px; + display: flex; + align-items: center; + gap: 8px; + + &:hover { + color: $dark; + } + } +} + + +// ── Course Progress Card ────────────────────────────────────── + +.course-progress-card { + border-radius: 12px; + border: 1px solid $gray-light; + padding: 20px; + + .progress-heading { + font-size: 16px; + font-weight: 700; + color: $dark; + margin-bottom: 12px; + } + + .lesson-count { + font-size: 13px; + color: $light-dark; + } + + .section-heading { + font-size: 13px; + font-weight: 700; + color: $dark; + margin: 16px 0 8px; + text-transform: none; + } +} + + +// ── Dark theme overrides for new variables ──────────────────── + +body.indigo-dark-theme { + .btn-primary, + .btn.btn-primary { + background-color: $primary-d; + border-color: $primary-d; + color: $btn-color-d; + + &:hover:not(:disabled) { + background-color: lighten($primary-d, 8%); + } + } + + .badge, .status-badge { + &.overdue, &.badge-overdue { + background-color: darken($badge-overdue-bg, 10%); + } + &.due-soon, &.badge-due-soon { + background-color: darken($badge-due-soon-bg, 10%); + } + } + + .chip-selected, + .filter-chip.active { + background-color: lighten($chip-selected-bg, 15%); + } + + .progress .progress-bar { + background-color: $primary-d; + } + + .nav-item.active, + .nav-item > a.active { + background-color: rgba($nav-selected-bg, 0.15); + color: lighten($nav-selected-color, 20%) !important; + } +} + +// === OpenLMS custom END === + +// === OpenLMS custom START === +// ============================================================ +// OpenLMS Component Overrides — based on design system +// Append or merge this into: +// tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_extras.scss +// ============================================================ + + +// ── Buttons ───────────────────────────────────────────────── +// Override tutor-indigo's zero border-radius with rounded corners + +%btn-pl-default-base { + border-radius: $btn-border-radius !important; +} + +.btn, +.global-header .nav-links .secondary .btn { + border-radius: $btn-border-radius !important; +} + +// Primary button +.btn-primary, +.btn.btn-primary { + background-color: $primary; + border-color: $primary; + color: #fff; + font-weight: 500; + border-radius: $btn-border-radius; + + &:hover:not(:disabled) { + background-color: darken($primary, 6%); + border-color: darken($primary, 6%); + color: #fff; + } + + &:disabled, + &.disabled { + background-color: $gray-light; + border-color: $gray-light; + color: #9CA3AF; + opacity: 1; + } +} + +// Secondary button +.btn-secondary, +.btn.btn-secondary { + background-color: #fff; + border: 1px solid $gray-light; + color: $dark; + font-weight: 500; + border-radius: $btn-border-radius; + + &:hover:not(:disabled) { + background-color: $primary; + border-color: $primary; + color: #fff; + } + + &:disabled, + &.disabled { + background-color: $gray-light; + border-color: $gray-light; + color: #9CA3AF; + opacity: 1; + } +} + +// Ghost / tertiary button +.btn-ghost, +.btn.btn-tertiary, +.btn-link.btn-ghost { + background-color: transparent; + border: none; + color: $dark; + font-weight: 500; + border-radius: $btn-border-radius; + + &:hover:not(:disabled) { + background-color: $primary; + color: #fff; + } + + &:disabled, + &.disabled { + color: #9CA3AF; + opacity: 1; + } +} + +// Icon-only button +.btn-icon { + background-color: transparent; + border: none; + border-radius: $btn-border-radius; + color: $dark; + padding: 6px; + + &:hover:not(:disabled) { + background-color: $primary; + color: #fff; + } +} + + +// ── Input / Search field ───────────────────────────────────── + +input[type="text"], +input[type="email"], +input[type="password"], +input[type="search"], +.input-text, +.form-control { + border-radius: $btn-border-radius; + border: 1px solid $gray-light; + font-family: $font-family-title; + transition: border-color 0.15s ease; + + &:focus, + &:focus-visible { + border-color: $input-focus-border; + box-shadow: 0 0 0 3px rgba($input-focus-border, 0.15); + outline: none; + } +} + +// Error state +.has-error input, +.field-error input, +input.is-invalid { + border-color: $input-error-border !important; + color: $input-error-color; + + &:focus { + box-shadow: 0 0 0 3px rgba($input-error-border, 0.15); + } +} + +.field-error .error-msg, +.has-error .help-block, +.invalid-feedback { + color: $input-error-color; + font-size: 0.875rem; + margin-top: 4px; +} + + +// ── Main Navigation (selected / hover states) ──────────────── + +header.global-header .nav-links .nav-item { + border-radius: $btn-border-radius; + + &.active, + &.is-active, + > a.active, + > a[aria-current="page"] { + background-color: $nav-selected-bg; + color: $nav-selected-color !important; + border-radius: $btn-border-radius; + + .icon, + svg { + color: $nav-selected-color; + fill: $nav-selected-color; + } + } + + &:hover:not(.active) { + background-color: $nav-hover-bg; + border-radius: $btn-border-radius; + } +} + + +// ── Course / Page Tabs ─────────────────────────────────────── + +.wrapper-course-material .tabs.course-tabs li { + a, + button { + border-width: 2px; + font-size: 14px; + font-weight: 500; + color: $light-dark; + + &:hover, + &:visited { + color: $dark; + border-color: transparent; + } + + &.active { + color: $tab-active-color; + background-color: $tab-active-bg; + border-color: transparent; + border-radius: 20px; + padding: 4px 14px; + } + } +} + +// Dashboard tabs (Continue Learning, Assigned Courses, etc.) +.tab-bar, +.tabs-container, +nav[role="tablist"], +.nav-tabs { + .tab, + .nav-item { + .tab-label, + .nav-link { + color: $light-dark; + font-weight: 500; + border-radius: 20px; + padding: 6px 16px; + border: none; + background: transparent; + transition: background 0.15s, color 0.15s; + + &:hover { + color: $dark; + background: $chip-neutral-bg; + } + } + + &.is-active .tab-label, + .nav-link.active, + .nav-link[aria-selected="true"] { + color: $tab-active-color; + background: $tab-active-bg; + font-weight: 600; + } + } +} + + +// ── Progress Bars ──────────────────────────────────────────── + +.progress, +.progress-bar-container { + background-color: #E5E7EB; + border-radius: 999px; + height: 6px; + overflow: hidden; + + .progress-fill, + .progress-bar { + background-color: $progress-active; + border-radius: 999px; + transition: width 0.3s ease; + } + + &.completed .progress-bar, + &.is-complete .progress-fill { + background-color: $progress-complete; + } +} + +// Course progress tracker — lesson list +.course-progress-tracker { + .lesson-item { + &.completed .lesson-icon { + color: $progress-complete; + } + &.active { + background-color: #EFF6FF; + border-radius: $btn-border-radius; + font-weight: 600; + } + } +} + + +// ── Status Badges ──────────────────────────────────────────── + +.badge, +.status-badge, +.enrollment-status { + border-radius: 999px; + font-size: 0.75rem; + font-weight: 600; + padding: 4px 12px; + display: inline-block; + line-height: 1.4; + + &.overdue, + &.badge-overdue { + background-color: $badge-overdue-bg; + color: $badge-overdue-text; + } + + &.due-soon, + &.badge-due-soon { + background-color: $badge-due-soon-bg; + color: $badge-due-soon-text; + } + + &.completed, + &.badge-complete { + background-color: $badge-complete-bg; + color: $badge-complete-text; + } +} + + +// ── Content Type Chips (neutral: Video, Course, etc.) ───────── + +.content-type-chip, +.tag-chip, +.chip-neutral { + display: inline-block; + background-color: $chip-neutral-bg; + color: $chip-neutral-text; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 500; + padding: 4px 12px; +} + + +// ── Category Chips (purple: Machine Learning, Design, etc.) ── + +.category-chip, +.chip-category, +.topic-tag { + display: inline-block; + background-color: $chip-category-bg; + color: $chip-category-text; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 500; + padding: 4px 12px; +} + + +// ── Selected / Active Filter Chips ─────────────────────────── + +.chip-selected, +.filter-chip.active, +.tag-chip.selected { + display: inline-flex; + align-items: center; + gap: 6px; + background-color: $chip-selected-bg; + color: $chip-selected-text; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 600; + padding: 4px 12px; + + .remove-icon, + .chip-remove { + cursor: pointer; + opacity: 0.7; + &:hover { opacity: 1; } + } +} + + +// ── Accordion (course modules) ─────────────────────────────── + +.accordion, +.module-accordion { + .accordion-header { + font-weight: 600; + font-size: 14px; + color: $dark; + display: flex; + align-items: center; + gap: 8px; + padding: 12px 0; + border-bottom: 1px solid $gray-light; + cursor: pointer; + } + + .accordion-lesson { + font-size: 14px; + color: $light-dark; + padding: 6px 0 6px 28px; + display: flex; + align-items: center; + gap: 8px; + + &:hover { + color: $dark; + } + } +} + + +// ── Course Progress Card ────────────────────────────────────── + +.course-progress-card { + border-radius: 12px; + border: 1px solid $gray-light; + padding: 20px; + + .progress-heading { + font-size: 16px; + font-weight: 700; + color: $dark; + margin-bottom: 12px; + } + + .lesson-count { + font-size: 13px; + color: $light-dark; + } + + .section-heading { + font-size: 13px; + font-weight: 700; + color: $dark; + margin: 16px 0 8px; + text-transform: none; + } +} + + +// ── Dark theme overrides for new variables ──────────────────── + +body.indigo-dark-theme { + .btn-primary, + .btn.btn-primary { + background-color: $primary-d; + border-color: $primary-d; + color: $btn-color-d; + + &:hover:not(:disabled) { + background-color: lighten($primary-d, 8%); + } + } + + .badge, .status-badge { + &.overdue, &.badge-overdue { + background-color: darken($badge-overdue-bg, 10%); + } + &.due-soon, &.badge-due-soon { + background-color: darken($badge-due-soon-bg, 10%); + } + } + + .chip-selected, + .filter-chip.active { + background-color: lighten($chip-selected-bg, 15%); + } + + .progress .progress-bar { + background-color: $primary-d; + } + + .nav-item.active, + .nav-item > a.active { + background-color: rgba($nav-selected-bg, 0.15); + color: lighten($nav-selected-color, 20%) !important; + } +} + +// === OpenLMS custom END === diff --git a/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_variables.scss b/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_variables.scss index b2b9d521e..db0c1ae00 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_variables.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_variables.scss @@ -1,45 +1,89 @@ -$primary: {{ INDIGO_PRIMARY_COLOR }}; -$primary-light: #F2F7F8; +// ============================================================ +// OpenLMS Brand Variables — drop-in override for tutor-indigo +// Place this file at: +// tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_variables.scss +// ============================================================ -// Theme fonts -$font-family-title: 'Inter', sans-serif; -$serif: Crimson; -$f-sans-serif: Crimson, 'Open Sans','Helvetica Neue', Helvetica, Arial, sans-serif; -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap'); -// Initialize the Open edX Bootstrap theme -@import 'edx-bootstrap/sass/open-edx/theme'; +// ── Core brand ────────────────────────────────────────────── +$primary: #15376D; // Primary dark navy (buttons, links, accents) +$primary-light: #F0F4FA; // Soft blue-gray background tint + +// ── Navigation selected state (green) ─────────────────────── +$nav-selected-bg: #ecfdf5; // Light green pill background +$nav-selected-color: #059669; // Green text & icon +$nav-hover-bg: #ecfdf5; // Lighter green on hover + +// ── Tab active state (teal) ────────────────────────────────── +$tab-active-color: #0F766E; // Teal-700 text +$tab-active-bg: #CCFBF1; // Light teal pill background + +// ── Progress bars ──────────────────────────────────────────── +$progress-active: #15376D; // In-progress fill (matches primary) +$progress-complete: #22C55E; // Completed fill (green) +// ── Status badge colors ────────────────────────────────────── +$badge-overdue-bg: #F97316; // Orange +$badge-overdue-text: #fff; +$badge-due-soon-bg: #F59E0B; // Amber +$badge-due-soon-text:#fff; +$badge-complete-bg: #22C55E; // Green +$badge-complete-text:#fff; -// Introducing new variables +// ── Content type chips (neutral) ───────────────────────────── +$chip-neutral-bg: #F3F4F6; +$chip-neutral-text: #374151; -$dark: #111827; -$light-dark: #374151; -$big-screen: 1200px; +// ── Category chips (purple/indigo) ─────────────────────────── +$chip-category-bg: #EDE9FE; +$chip-category-text: #7C3AED; +// ── Selected filter chips ──────────────────────────────────── +$chip-selected-bg: #1E293B; +$chip-selected-text: #fff; +// ── Input field states ─────────────────────────────────────── +$input-focus-border: #3B82F6; // Blue-500 +$input-error-border: #EF4444; // Red-500 +$input-error-color: #EF4444; + +// ── Button border radius ───────────────────────────────────── +$btn-border-radius: 6px; + +// ── Typography ─────────────────────────────────────────────── +$font-family-title: 'Inter', sans-serif; +$serif: Crimson; +$f-sans-serif: Crimson, 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap'); + +// ── Bootstrap / Open edX base ──────────────────────────────── +@import 'edx-bootstrap/sass/open-edx/theme'; -// Introducing dark-theme variables +// ── Layout ─────────────────────────────────────────────────── +$dark: #111827; +$light-dark: #1e293b; +$big-screen: 1200px; -$primary-d: #AEC7F6; -$primary-light-d: #292A2C; -$gray-light: #E5E7EB; -$gray-lighter: #c8c8c8; -$light-dark-d: #374151; -$text-color-d: #F8F8F8; -$text-color-primary: #DDDFE2; -$border-color-d: #777792; -$light-overlay-d: #36383B; -$danger-d: #FFA07A; -$success-d: #54CF5E; -$btn-color-d: #112F6B; -$body-bg-d: #0D0D0E; +// ── Dark-theme palette ─────────────────────────────────────── +$primary-d: #AEC7F6; +$primary-light-d: #292A2C; +$gray-light: #E5E7EB; +$gray-lighter: #c8c8c8; +$light-dark-d: #374151; +$text-color-d: #F8F8F8; +$text-color-primary:#DDDFE2; +$border-color-d: #777792; +$light-overlay-d: #36383B; +$danger-d: #FFA07A; +$success-d: #54CF5E; +$btn-color-d: #112F6B; +$body-bg-d: #0D0D0E; -$instructor-input-border-color: $gray-lighter; -$light-theme-switch-bg-color: $primary; -$dark-theme-switch-bg-color: #717D8A; +$instructor-input-border-color: $gray-lighter; +$light-theme-switch-bg-color: $primary; +$dark-theme-switch-bg-color: #717D8A; -$warning-400: #ffe340; -$warning-700: #9c4607; -$warning-accent-700: #fffcf5; +$warning-400: #ffe340; +$warning-700: #9c4607; +$warning-accent-700:#fffcf5; -$page-color-transition: transparent .2s ease, color .2s ease; +$page-color-transition: transparent .2s ease, color .2s ease; \ No newline at end of file From f3824c0024f8a27551f5997f70b4d541973b23a8 Mon Sep 17 00:00:00 2001 From: Jeffrey Ramirez Date: Fri, 5 Jun 2026 11:18:05 +0800 Subject: [PATCH 02/10] feat: apply OpenLMS branding logos and favicon --- .../indigo/lms/static/images/favicon.ico | Bin 12206 -> 15406 bytes .../indigo/lms/static/images/logo-white.svg | 24 ++++++++++++++++++ .../indigo/lms/static/images/logo.svg | 24 ++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 tutorindigo/templates/indigo/lms/static/images/logo-white.svg create mode 100644 tutorindigo/templates/indigo/lms/static/images/logo.svg diff --git a/tutorindigo/templates/indigo/lms/static/images/favicon.ico b/tutorindigo/templates/indigo/lms/static/images/favicon.ico index 5bc7c23de6143c2fb83b76060cce2632319fe12c..4269e725354f805c465d9ef749c2146eda77a58e 100644 GIT binary patch literal 15406 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 Y)k6A@ogVi?oMN=(we-_sf#z7?|8qHtg#Z8m literal 12206 zcmd6tTZmOv7{~W;7c++^;DYHTp_0(BE`!jl!oT%_g{N`htqbQIcv{3( zYn^>NCrJwYtzVV!zm$BiI!SI#lH@M19`pn0-G21VVuAW>5`@qdcT4V4j(6L&5tJW)5$Jp%~f}bUeJDZaH>AaVEv>sz?R}JUEi{Lur zr?J;%&l%McwSXctx*U2a3_mP4NWc>pZ2}FMuqE(7x=x0!u+O zCE0o(`R2*>9`>uee{{ZjhCbeE>Tkl=sb>wqkGoK31L{i0c~8rNXA$x(5PP2c7uylA1;nJuWuus21NaOmSE%N! zZWy}(pjx8x$qs1V-vqJuV^^^K2)OecGAdUdBgGV0)9py*QqF9>p?&pAwWy|PQ|dUl z5y<`$2*nHO_F}7RgX1`Dk_HdzGwpLJXNXHkr&?_+SS`i?G2U|?M}|> z9>jhYRFi5`jg@(_F>)jL6@>a1(v4x;2i&|zlW&qCdD9-090zd;aSZ8HqiS_M@Uj>A z8wlBlbfeg=8(%(m&tGbzk^llp8w>lYr!ud_MTGb!ChcZuKl*)$S>~VuoH+=%)F~c)oRy2H;?S! z3H1IT_S~uat`EVS^nkopyEw$&1FE)nfogSitCu!L>fZlta0$fraxb>72S}TmS(W-O z%;!|@*fpz~RGVt7)Lu>0>u37>Gwatz<4yhQw`z}>BiU%)_59;%udX>e#zwud=ik_C zgMFr+^#0kf4ewiA;raX|5Xo|lk6fLM-tH?a!@ zdw^bX3%uX#MjiyQam7JgX1#XnAGy*sIj8`5UdH z5r5-=>;&(CGhn(pbnp7V`vUgWN9jHX(_QNnTRD`=^}Z4A&Ga=s$Q|G;2=(AJ`fhMl zYU##0dews;LC9AzcT7IEtEK9$F2vQ4&PzYz?6Z^RZW}06`&5rPpXl1K6=c_tV)c)4 zZ5&^*soJIG#_+UrLLcK{py#wxKy^(!cXr&{%16G6p;*)Uwo)TJSIuP+><4;36~*7| zywCoT&fXH^;5|b#YA%;A7cX{|*-TEgPqk}*vTbOgPH-Gb_FPGDloN2{p#(RMVRKOuALolBD#cugTUo|wuEByr zD45LUs1$OnNYi_}!9>TCg2l18mdE9tOp2bzp0X0at1QO^uEyKym`d7RT{zsT&=IE{12Z?r`iAj diff --git a/tutorindigo/templates/indigo/lms/static/images/logo-white.svg b/tutorindigo/templates/indigo/lms/static/images/logo-white.svg new file mode 100644 index 000000000..254664eba --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/logo-white.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/logo.svg b/tutorindigo/templates/indigo/lms/static/images/logo.svg new file mode 100644 index 000000000..254664eba --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/logo.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + From abd0e295de306d1e8aceab17905778833ac05bdf Mon Sep 17 00:00:00 2001 From: Jeffrey Ramirez Date: Thu, 18 Jun 2026 13:27:49 +0800 Subject: [PATCH 03/10] Added custom header --- .../indigo/cms/static/images/favicon.ico | Bin 12206 -> 15406 bytes .../indigo/cms/static/images/studio-logo.png | Bin 3966 -> 5526 bytes .../indigo/lms/static/css/dark.min.css | 2 + .../indigo/lms/static/css/light.min.css | 2 + .../indigo/lms/static/sass/extra/_header.scss | 515 +++++++++++------- .../sass/partials/lms/theme/_variables.scss | 4 +- .../header/navbar-authenticated.html | 138 +++-- .../header/navbar-not-authenticated.html | 51 +- .../lms/templates/header/user_dropdown.html | 48 +- 9 files changed, 462 insertions(+), 298 deletions(-) diff --git a/tutorindigo/templates/indigo/cms/static/images/favicon.ico b/tutorindigo/templates/indigo/cms/static/images/favicon.ico index 5bc7c23de6143c2fb83b76060cce2632319fe12c..4269e725354f805c465d9ef749c2146eda77a58e 100644 GIT binary patch literal 15406 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 Y)k6A@ogVi?oMN=(we-_sf#z7?|8qHtg#Z8m literal 12206 zcmd6tTZmOv7{~W;7c++^;DYHTp_0(BE`!jl!oT%_g{N`htqbQIcv{3( zYn^>NCrJwYtzVV!zm$BiI!SI#lH@M19`pn0-G21VVuAW>5`@qdcT4V4j(6L&5tJW)5$Jp%~f}bUeJDZaH>AaVEv>sz?R}JUEi{Lur zr?J;%&l%McwSXctx*U2a3_mP4NWc>pZ2}FMuqE(7x=x0!u+O zCE0o(`R2*>9`>uee{{ZjhCbeE>Tkl=sb>wqkGoK31L{i0c~8rNXA$x(5PP2c7uylA1;nJuWuus21NaOmSE%N! zZWy}(pjx8x$qs1V-vqJuV^^^K2)OecGAdUdBgGV0)9py*QqF9>p?&pAwWy|PQ|dUl z5y<`$2*nHO_F}7RgX1`Dk_HdzGwpLJXNXHkr&?_+SS`i?G2U|?M}|> z9>jhYRFi5`jg@(_F>)jL6@>a1(v4x;2i&|zlW&qCdD9-090zd;aSZ8HqiS_M@Uj>A z8wlBlbfeg=8(%(m&tGbzk^llp8w>lYr!ud_MTGb!ChcZuKl*)$S>~VuoH+=%)F~c)oRy2H;?S! z3H1IT_S~uat`EVS^nkopyEw$&1FE)nfogSitCu!L>fZlta0$fraxb>72S}TmS(W-O z%;!|@*fpz~RGVt7)Lu>0>u37>Gwatz<4yhQw`z}>BiU%)_59;%udX>e#zwud=ik_C zgMFr+^#0kf4ewiA;raX|5Xo|lk6fLM-tH?a!@ zdw^bX3%uX#MjiyQam7JgX1#XnAGy*sIj8`5UdH z5r5-=>;&(CGhn(pbnp7V`vUgWN9jHX(_QNnTRD`=^}Z4A&Ga=s$Q|G;2=(AJ`fhMl zYU##0dews;LC9AzcT7IEtEK9$F2vQ4&PzYz?6Z^RZW}06`&5rPpXl1K6=c_tV)c)4 zZ5&^*soJIG#_+UrLLcK{py#wxKy^(!cXr&{%16G6p;*)Uwo)TJSIuP+><4;36~*7| zywCoT&fXH^;5|b#YA%;A7cX{|*-TEgPqk}*vTbOgPH-Gb_FPGDloN2{p#(RMVRKOuALolBD#cugTUo|wuEByr zD45LUs1$OnNYi_}!9>TCg2l18mdE9tOp2bzp0X0at1QO^uEyKym`d7RT{zsT&=IE{12Z?r`iAj diff --git a/tutorindigo/templates/indigo/cms/static/images/studio-logo.png b/tutorindigo/templates/indigo/cms/static/images/studio-logo.png index a222e4c744f509c2354f6ba5c65a17e20c4b6d68..040519f4199a0a4a7dcfda81f1cbbd467c06b106 100644 GIT binary patch delta 5520 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 Sc0()x0000*Q{t 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 +<%page expression_filter="h" args="online_help_token" /> -<%namespace name='static' file='../static_content.html'/> -<%namespace file='../main.html' import="login_query"/> +<%namespace name='static' file='../static_content.html' /> +<%namespace file='../main.html' import="login_query" /> <%! from django.urls import reverse from django.utils.translation import gettext as _ +from openedx.core.djangolib.markup import HTML from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers + +ICON_PATHS = { + 'Home': ( + '' + '' + '' + '' + ), + 'LibraryBooks': ( + '' + '' + '' + '' + '' + ), + 'ClockHour3': ( + '' + '' + '' + '' + ), + 'Search': ( + '' + '' + ), + 'HelpHexagon': ( + '' + '' + '' + '' + ), +} + +SVG_OPEN = ( + '' %> <% - show_explore_courses = settings.FEATURES.get('COURSES_ARE_BROWSABLE') self.real_user = getattr(user, 'real_user', user) - enable_help_link = settings.FEATURES.get('ENABLE_HELP_LINK') - - support_link = configuration_helpers.get_value('SUPPORT_SITE_LINK', settings.SUPPORT_SITE_LINK) - doc_link = get_online_help_info(online_help_token)['doc_url'] - - if online_help_token == "instructor": - help_link = doc_link - elif support_link: - help_link = support_link - else: - help_link = doc_link + nav_links = getattr(settings, 'HEADER_NAV_LINKS', [ + {"title": "My Courses", "url": reverse('dashboard'), "icon": "Home"}, + {"title": "Discover", "url": "/courses", "icon": "Search"}, + ]) + search_url = next((l['url'] for l in nav_links if l.get('icon') == 'Search'), '/courses') %>