diff --git a/.gitignore b/.gitignore index 46e0057..4e71e37 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ venv/ platform_data.db exams/ *.pdf +.secret_key diff --git a/assets/style.css b/assets/style.css index 605b354..9be34d4 100644 --- a/assets/style.css +++ b/assets/style.css @@ -982,3 +982,440 @@ pre code { font-size: 1.6rem; } } + +/* ========================================================================== + 🚀 IT-PRAXISPORTAL – MODERN LUXURY UX & PORTAL DESIGN SYSTEM + ========================================================================== */ + +.portal-header-bar { + position: sticky; + top: 0; + z-index: 50; + background: rgba(15, 23, 42, 0.85); + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); + border-bottom: 1px solid rgba(255, 255, 255, 0.08); + padding: 12px 24px; +} + +.portal-nav-container { + max-width: 1280px; + margin: 0 auto; + display: flex; + justify-content: space-between; + align-items: center; + gap: 16px; +} + +.portal-brand { + display: flex; + align-items: center; + gap: 12px; + text-decoration: none; + color: white; +} + +.portal-brand-logo { + width: 38px; + height: 38px; + border-radius: 10px; + background: linear-gradient(135deg, rgba(56, 189, 248, 0.2), rgba(37, 99, 235, 0.2)); + border: 1px solid rgba(56, 189, 248, 0.4); + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 0 15px rgba(56, 189, 248, 0.15); +} + +.portal-brand-title { + font-size: 1.15rem; + font-weight: 800; + letter-spacing: -0.4px; + color: #f8fafc; + line-height: 1.2; +} + +.portal-brand-badge { + font-size: 0.68rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.8px; + background: linear-gradient(90deg, #0284c7, #2563eb); + color: white; + padding: 2px 6px; + border-radius: 4px; + margin-left: 6px; + vertical-align: middle; +} + +.portal-nav-links { + display: flex; + align-items: center; + gap: 20px; +} + +.portal-nav-link { + color: #94a3b8; + text-decoration: none; + font-size: 0.88rem; + font-weight: 600; + transition: color 0.15s ease; +} + +.portal-nav-link:hover, .portal-nav-link.active { + color: #38bdf8; +} + +.portal-hero { + background: radial-gradient(circle at 50% 0%, rgba(37, 99, 235, 0.15) 0%, transparent 60%), #0b0f19; + border-bottom: 1px solid rgba(255, 255, 255, 0.06); + padding: 56px 24px 44px 24px; + text-align: center; + color: #f8fafc; +} + +.portal-hero-pill { + display: inline-flex; + align-items: center; + gap: 8px; + background: rgba(56, 189, 248, 0.1); + border: 1px solid rgba(56, 189, 248, 0.3); + color: #38bdf8; + padding: 6px 14px; + border-radius: 99px; + font-size: 0.82rem; + font-weight: 700; + margin-bottom: 20px; +} + +.portal-hero h1 { + font-size: 2.7rem; + font-weight: 900; + letter-spacing: -1px; + line-height: 1.15; + margin: 0 auto 16px auto; + max-width: 820px; + color: #ffffff; +} + +.portal-hero p { + font-size: 1.12rem; + line-height: 1.6; + color: #94a3b8; + max-width: 680px; + margin: 0 auto 28px auto; +} + +.portal-hero-actions { + display: flex; + justify-content: center; + align-items: center; + gap: 12px; + flex-wrap: wrap; +} + +.portal-btn-primary { + background: linear-gradient(135deg, #0284c7, #2563eb); + color: white; + padding: 12px 24px; + border-radius: 10px; + font-weight: 700; + font-size: 0.95rem; + text-decoration: none; + box-shadow: 0 4px 14px rgba(37, 99, 235, 0.35); + transition: transform 0.15s ease, box-shadow 0.15s ease; + display: inline-flex; + align-items: center; + gap: 8px; + border: none; + cursor: pointer; +} + +.portal-btn-primary:hover { + transform: translateY(-1px); + box-shadow: 0 6px 20px rgba(37, 99, 235, 0.45); +} + +.portal-btn-secondary { + background: rgba(255, 255, 255, 0.06); + color: #f1f5f9; + border: 1px solid rgba(255, 255, 255, 0.12); + padding: 12px 22px; + border-radius: 10px; + font-weight: 600; + font-size: 0.95rem; + text-decoration: none; + transition: background 0.15s ease, border-color 0.15s ease; + display: inline-flex; + align-items: center; + gap: 8px; + cursor: pointer; +} + +.portal-btn-secondary:hover { + background: rgba(255, 255, 255, 0.12); + border-color: rgba(255, 255, 255, 0.25); +} + +.portal-stats-bar { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 16px; + max-width: 1080px; + margin: 36px auto 0 auto; +} + +.portal-stat-card { + background: rgba(15, 23, 42, 0.6); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 12px; + padding: 16px; + text-align: left; +} + +.portal-stat-num { + font-size: 1.6rem; + font-weight: 900; + color: #38bdf8; + line-height: 1; + margin-bottom: 4px; +} + +.portal-stat-label { + font-size: 0.82rem; + font-weight: 700; + color: #f1f5f9; + margin-bottom: 2px; +} + +.portal-stat-desc { + font-size: 0.75rem; + color: #64748b; +} + +/* Filter Bar */ +.portal-filter-bar { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + gap: 14px; + margin: 36px 0 24px 0; +} + +.portal-filter-tabs { + display: flex; + gap: 8px; + flex-wrap: wrap; +} + +.portal-tab-pill { + background: white; + border: 1px solid #cbd5e1; + color: #475569; + padding: 8px 16px; + border-radius: 99px; + font-size: 0.85rem; + font-weight: 700; + cursor: pointer; + transition: all 0.15s ease; +} + +.portal-tab-pill:hover { + border-color: #94a3b8; + color: #0f172a; +} + +.portal-tab-pill.active { + background: #0f172a; + color: white; + border-color: #0f172a; +} + +.portal-search-box { + display: flex; + align-items: center; + background: white; + border: 1px solid #cbd5e1; + border-radius: 99px; + padding: 6px 14px; + min-width: 280px; + transition: border-color 0.15s ease, box-shadow 0.15s ease; +} + +.portal-search-box:focus-within { + border-color: #0284c7; + box-shadow: 0 0 0 3px rgba(2, 132, 199, 0.15); +} + +.portal-search-box input { + border: none; + outline: none; + background: transparent; + font-size: 0.85rem; + width: 100%; + margin-left: 8px; + color: #0f172a; +} + +/* Course Cards Grid */ +.portal-courses-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); + gap: 20px; + margin-bottom: 48px; +} + +.portal-card { + background: #ffffff; + border: 1px solid #e2e8f0; + border-radius: 14px; + padding: 22px; + display: flex; + flex-direction: column; + justify-content: space-between; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.03); + transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease; + position: relative; + overflow: hidden; +} + +.portal-card:hover { + transform: translateY(-3px); + box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.08); + border-color: #cbd5e1; +} + +.portal-card-top { + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 12px; +} + +.portal-card-icon { + font-size: 2rem; + width: 52px; + height: 52px; + border-radius: 12px; + display: flex; + align-items: center; + justify-content: center; + background: #f8fafc; + border: 1px solid #e2e8f0; +} + +.portal-card-badge { + font-size: 0.72rem; + font-weight: 700; + padding: 4px 10px; + border-radius: 99px; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.portal-card-title { + font-size: 1.15rem; + font-weight: 800; + color: #0f172a; + margin: 0 0 6px 0; + line-height: 1.3; +} + +.portal-card-desc { + font-size: 0.86rem; + color: #475569; + line-height: 1.5; + margin: 0 0 16px 0; + flex-grow: 1; +} + +.portal-card-tags { + display: flex; + gap: 6px; + flex-wrap: wrap; + margin-bottom: 16px; +} + +.portal-card-tag { + background: #f1f5f9; + color: #475569; + font-size: 0.72rem; + font-weight: 600; + padding: 3px 8px; + border-radius: 4px; +} + +.portal-card-footer { + display: flex; + justify-content: space-between; + align-items: center; + padding-top: 14px; + border-top: 1px solid #f1f5f9; +} + +.portal-card-meta { + font-size: 0.78rem; + color: #64748b; + font-weight: 600; +} + +.portal-card-btn { + background: #0f172a; + color: white; + text-decoration: none; + font-size: 0.82rem; + font-weight: 700; + padding: 8px 14px; + border-radius: 8px; + transition: background 0.15s ease; + display: inline-flex; + align-items: center; + gap: 6px; +} + +.portal-card-btn:hover { + background: #0284c7; +} + +/* Bento Grid */ +.bento-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); + gap: 16px; + margin: 32px 0; +} + +.bento-item { + background: #ffffff; + border: 1px solid #e2e8f0; + border-radius: 14px; + padding: 24px; + box-shadow: 0 1px 3px rgba(0,0,0,0.04); +} + +.bento-item h4 { + font-size: 1.05rem; + font-weight: 800; + color: #0f172a; + margin: 8px 0 6px 0; +} + +.bento-item p { + font-size: 0.86rem; + color: #64748b; + line-height: 1.5; + margin: 0; +} + +@media (max-width: 768px) { + .portal-stats-bar { + grid-template-columns: repeat(2, 1fr); + } + .portal-hero h1 { + font-size: 2rem; + } + .portal-nav-links { + display: none; + } +} diff --git a/index.html b/index.html index f6ba72c..fdb3def 100644 --- a/index.html +++ b/index.html @@ -3,1165 +3,594 @@
-