From 9c05c3e35d1fadd0b421333ca1fdafd51720e145 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 3 Jul 2026 20:25:38 -0300 Subject: [PATCH] 4 temas modernos de login: aurora-glass, nordic-minimal, sunset-mesh, carbon-neon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Temas 100% CSS (sem fotos de fundo — gradientes, mesh e glassmorphism), seguindo o contrato de variáveis existente (btn-background/foreground, card-background) e estilizando o .card-body interno (o scss.class força .main-content-card transparente quando não há cor de cartão definida). - aurora-glass: glassmorphism escuro, aurora indigo/violeta/teal, backdrop-filter blur no cartão - nordic-minimal: claro escandinavo, grid sutil, acento azul profundo - sunset-mesh: mesh gradient quente (coral/âmbar/violeta), cartão translúcido estilo Stripe/Linear - carbon-neon: dark tech, grid de carbono, glow ciano no cartão e botão login.css fallback compilado com o próprio scssphp do core; previews renderizados por script PHP GD (gradientes por pixel + mockup do cartão). Co-Authored-By: Claude Fable 5 --- themes/aurora-glass/login.css | 77 +++++++++++++++++++ themes/aurora-glass/login.preview.jpg | Bin 0 -> 7894 bytes themes/aurora-glass/login.scss | 85 +++++++++++++++++++++ themes/aurora-glass/theme.json | 18 +++++ themes/carbon-neon/login.css | 84 +++++++++++++++++++++ themes/carbon-neon/login.preview.jpg | Bin 0 -> 6358 bytes themes/carbon-neon/login.scss | 95 ++++++++++++++++++++++++ themes/carbon-neon/theme.json | 18 +++++ themes/nordic-minimal/login.css | 71 ++++++++++++++++++ themes/nordic-minimal/login.preview.jpg | Bin 0 -> 4903 bytes themes/nordic-minimal/login.scss | 78 +++++++++++++++++++ themes/nordic-minimal/theme.json | 18 +++++ themes/sunset-mesh/login.css | 70 +++++++++++++++++ themes/sunset-mesh/login.preview.jpg | Bin 0 -> 7159 bytes themes/sunset-mesh/login.scss | 78 +++++++++++++++++++ themes/sunset-mesh/theme.json | 18 +++++ 16 files changed, 710 insertions(+) create mode 100644 themes/aurora-glass/login.css create mode 100644 themes/aurora-glass/login.preview.jpg create mode 100644 themes/aurora-glass/login.scss create mode 100644 themes/aurora-glass/theme.json create mode 100644 themes/carbon-neon/login.css create mode 100644 themes/carbon-neon/login.preview.jpg create mode 100644 themes/carbon-neon/login.scss create mode 100644 themes/carbon-neon/theme.json create mode 100644 themes/nordic-minimal/login.css create mode 100644 themes/nordic-minimal/login.preview.jpg create mode 100644 themes/nordic-minimal/login.scss create mode 100644 themes/nordic-minimal/theme.json create mode 100644 themes/sunset-mesh/login.css create mode 100644 themes/sunset-mesh/login.preview.jpg create mode 100644 themes/sunset-mesh/login.scss create mode 100644 themes/sunset-mesh/theme.json diff --git a/themes/aurora-glass/login.css b/themes/aurora-glass/login.css new file mode 100644 index 0000000..644ecf6 --- /dev/null +++ b/themes/aurora-glass/login.css @@ -0,0 +1,77 @@ +@charset "UTF-8"; +/* Tema Aurora Glass — glassmorphism escuro com aurora */ +body.page-anonymous { + min-height: 100vh; + background-color: #0b0e1a; + background-image: radial-gradient(40% 55% at 15% 20%, rgba(124, 108, 255, 0.45) 0%, transparent 70%), radial-gradient(45% 60% at 85% 15%, rgba(45, 212, 191, 0.35) 0%, transparent 70%), radial-gradient(50% 65% at 70% 90%, rgba(168, 85, 247, 0.35) 0%, transparent 70%), radial-gradient(35% 45% at 30% 80%, rgba(59, 130, 246, 0.3) 0%, transparent 70%); + background-attachment: fixed; +} + +.page-anonymous .main-content-card .card-body { + background: rgba(255, 255, 255, 0.07); + backdrop-filter: blur(18px); + -webkit-backdrop-filter: blur(18px); + border: 1px solid rgba(255, 255, 255, 0.14); + border-radius: 20px; + padding: 2.2rem !important; + box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45); +} + +.page-anonymous .card-header { + color: #f1f5f9; + border: 0; + background: transparent; +} + +.page-anonymous .form-label, +.page-anonymous .form-check-label, +.page-anonymous .text-muted, +.page-anonymous .copyright, +.page-anonymous a { + color: #cbd5e1 !important; +} + +.page-anonymous .form-control, +.page-anonymous .form-select { + background: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.16); + border-radius: 12px; + color: #f8fafc; + padding: 0.65rem 0.85rem; +} +.page-anonymous .form-control::placeholder, +.page-anonymous .form-select::placeholder { + color: rgba(241, 245, 249, 0.45); +} +.page-anonymous .form-control:focus, +.page-anonymous .form-select:focus { + background: rgba(255, 255, 255, 0.12); + border-color: rgba(124, 108, 255, 0.65); + box-shadow: 0 0 0 0.25rem rgba(124, 108, 255, 0.22); + color: #ffffff; +} + +.page-anonymous .form-check-input { + background-color: rgba(255, 255, 255, 0.12); + border-color: rgba(255, 255, 255, 0.25); +} + +.page-anonymous .btn.btn-primary { + background: linear-gradient(135deg, #7c6cff 0%, #4f8bff 100%); + border: 0; + border-radius: 12px; + color: #ffffff; + padding: 0.7rem; + font-weight: 600; + letter-spacing: 0.02em; + transition: transform 0.15s ease, box-shadow 0.15s ease; + box-shadow: 0 10px 24px rgba(124, 108, 255, 0.35); +} +.page-anonymous .btn.btn-primary:hover { + transform: translateY(-1px); + box-shadow: 0 14px 30px rgba(124, 108, 255, 0.45); +} + +.page-anonymous .glpi-logo { + filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.4)); +} \ No newline at end of file diff --git a/themes/aurora-glass/login.preview.jpg b/themes/aurora-glass/login.preview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c224515ffa9afc7c00933cc524193f157e4ae177 GIT binary patch literal 7894 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 rwWk+Q_?oH&tq#w^MbE_OXF literal 0 HcmV?d00001 diff --git a/themes/aurora-glass/login.scss b/themes/aurora-glass/login.scss new file mode 100644 index 0000000..a02f365 --- /dev/null +++ b/themes/aurora-glass/login.scss @@ -0,0 +1,85 @@ +/* Tema Aurora Glass — glassmorphism escuro com aurora */ + +$btn-background-color: #7c6cff !default; +$btn-foreground-color: #ffffff !default; + +body.page-anonymous { + min-height: 100vh; + background-color: #0b0e1a; + background-image: + radial-gradient(40% 55% at 15% 20%, rgba(124, 108, 255, 0.45) 0%, transparent 70%), + radial-gradient(45% 60% at 85% 15%, rgba(45, 212, 191, 0.35) 0%, transparent 70%), + radial-gradient(50% 65% at 70% 90%, rgba(168, 85, 247, 0.35) 0%, transparent 70%), + radial-gradient(35% 45% at 30% 80%, rgba(59, 130, 246, 0.30) 0%, transparent 70%); + background-attachment: fixed; +} + +.page-anonymous .main-content-card .card-body { + background: rgba(255, 255, 255, 0.07); + backdrop-filter: blur(18px); + -webkit-backdrop-filter: blur(18px); + border: 1px solid rgba(255, 255, 255, 0.14); + border-radius: 20px; + padding: 2.2rem !important; + box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45); +} + +.page-anonymous .card-header { + color: #f1f5f9; + border: 0; + background: transparent; +} + +.page-anonymous .form-label, +.page-anonymous .form-check-label, +.page-anonymous .text-muted, +.page-anonymous .copyright, +.page-anonymous a { + color: #cbd5e1 !important; +} + +.page-anonymous .form-control, +.page-anonymous .form-select { + background: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.16); + border-radius: 12px; + color: #f8fafc; + padding: 0.65rem 0.85rem; + + &::placeholder { + color: rgba(241, 245, 249, 0.45); + } + + &:focus { + background: rgba(255, 255, 255, 0.12); + border-color: rgba(124, 108, 255, 0.65); + box-shadow: 0 0 0 0.25rem rgba(124, 108, 255, 0.22); + color: #ffffff; + } +} + +.page-anonymous .form-check-input { + background-color: rgba(255, 255, 255, 0.12); + border-color: rgba(255, 255, 255, 0.25); +} + +.page-anonymous .btn.btn-primary { + background: linear-gradient(135deg, $btn-background-color 0%, #4f8bff 100%); + border: 0; + border-radius: 12px; + color: $btn-foreground-color; + padding: 0.7rem; + font-weight: 600; + letter-spacing: 0.02em; + transition: transform 0.15s ease, box-shadow 0.15s ease; + box-shadow: 0 10px 24px rgba(124, 108, 255, 0.35); + + &:hover { + transform: translateY(-1px); + box-shadow: 0 14px 30px rgba(124, 108, 255, 0.45); + } +} + +.page-anonymous .glpi-logo { + filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.4)); +} diff --git a/themes/aurora-glass/theme.json b/themes/aurora-glass/theme.json new file mode 100644 index 0000000..ff73881 --- /dev/null +++ b/themes/aurora-glass/theme.json @@ -0,0 +1,18 @@ +{ + "name": "Aurora Glass", + "description": "Glassmorphism escuro com aurora em indigo, violeta e teal", + "variables": { + "btn-background-color": { + "name": "Cor de fundo dos Botões", + "default": "#7c6cff" + }, + "btn-foreground-color": { + "name": "Cor do texto dos Botões", + "default": "#ffffff" + }, + "card-background-color": { + "name": "Cor do cartão", + "default": "" + } + } +} diff --git a/themes/carbon-neon/login.css b/themes/carbon-neon/login.css new file mode 100644 index 0000000..79b274e --- /dev/null +++ b/themes/carbon-neon/login.css @@ -0,0 +1,84 @@ +@charset "UTF-8"; +/* Tema Carbon Neon — dark tech com glow ciano */ +body.page-anonymous { + min-height: 100vh; + background-color: #07090d; + background-image: radial-gradient(55% 45% at 50% 0%, rgba(0, 229, 199, 0.14) 0%, transparent 70%), radial-gradient(40% 40% at 90% 90%, rgba(56, 189, 248, 0.1) 0%, transparent 70%), linear-gradient(rgba(148, 163, 184, 0.05) 1px, transparent 1px), linear-gradient(90deg, rgba(148, 163, 184, 0.05) 1px, transparent 1px); + background-size: 100% 100%, 100% 100%, 44px 44px, 44px 44px; + background-attachment: fixed; +} + +.page-anonymous .main-content-card .card-body { + background: rgba(15, 20, 28, 0.92); + border: 1px solid rgba(0, 229, 199, 0.22); + border-radius: 16px; + padding: 2.3rem !important; + box-shadow: 0 0 0 1px rgba(0, 229, 199, 0.06), 0 0 45px rgba(0, 229, 199, 0.1), 0 26px 60px rgba(0, 0, 0, 0.6); +} + +.page-anonymous .card-header { + color: #e2e8f0; + border: 0; + background: transparent; + font-weight: 600; +} + +.page-anonymous .form-label { + color: #7dd3c8; + font-size: 0.78rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.08em; +} + +.page-anonymous .form-control, +.page-anonymous .form-select { + background: rgba(2, 6, 12, 0.75); + border: 1px solid rgba(148, 163, 184, 0.22); + border-radius: 10px; + color: #e2e8f0; + padding: 0.65rem 0.85rem; +} +.page-anonymous .form-control::placeholder, +.page-anonymous .form-select::placeholder { + color: rgba(148, 163, 184, 0.45); +} +.page-anonymous .form-control:focus, +.page-anonymous .form-select:focus { + background: rgba(2, 6, 12, 0.9); + border-color: rgba(0, 229, 199, 0.65); + box-shadow: 0 0 0 0.25rem rgba(0, 229, 199, 0.15), 0 0 18px rgba(0, 229, 199, 0.2); + color: #ffffff; +} + +.page-anonymous .form-check-input { + background-color: rgba(2, 6, 12, 0.75); + border-color: rgba(148, 163, 184, 0.35); +} + +.page-anonymous .btn.btn-primary { + background: #00e5c7; + border: 0; + border-radius: 10px; + color: #031a17; + padding: 0.7rem; + font-weight: 700; + letter-spacing: 0.03em; + text-transform: uppercase; + font-size: 0.82rem; + box-shadow: 0 0 22px rgba(0, 229, 199, 0.35); + transition: box-shadow 0.15s ease, transform 0.15s ease; +} +.page-anonymous .btn.btn-primary:hover { + transform: translateY(-1px); + box-shadow: 0 0 34px rgba(0, 229, 199, 0.55); +} + +.page-anonymous .text-muted, +.page-anonymous .copyright { + color: #64748b !important; +} + +.page-anonymous a { + color: #00e5c7 !important; +} \ No newline at end of file diff --git a/themes/carbon-neon/login.preview.jpg b/themes/carbon-neon/login.preview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4b7f07033df3e02ba0540242b7ea7d916aa4234 GIT binary patch literal 6358 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 HfLs0rk`L%| literal 0 HcmV?d00001 diff --git a/themes/nordic-minimal/login.scss b/themes/nordic-minimal/login.scss new file mode 100644 index 0000000..77a866e --- /dev/null +++ b/themes/nordic-minimal/login.scss @@ -0,0 +1,78 @@ +/* Tema Nordic Minimal — claro, limpo, escandinavo */ + +$btn-background-color: #1e3a5f !default; +$btn-foreground-color: #ffffff !default; + +body.page-anonymous { + min-height: 100vh; + background-color: #f4f6f8; + background-image: + linear-gradient(rgba(30, 58, 95, 0.045) 1px, transparent 1px), + linear-gradient(90deg, rgba(30, 58, 95, 0.045) 1px, transparent 1px), + radial-gradient(60% 50% at 100% 0%, rgba(30, 58, 95, 0.07) 0%, transparent 70%); + background-size: 32px 32px, 32px 32px, 100% 100%; + background-attachment: fixed; +} + +.page-anonymous .main-content-card .card-body { + background: #ffffff; + border: 1px solid #e8ecf1; + border-radius: 16px; + padding: 2.4rem !important; + box-shadow: 0 20px 50px rgba(30, 58, 95, 0.10), 0 2px 8px rgba(30, 58, 95, 0.05); +} + +.page-anonymous .card-header { + color: #1e293b; + border: 0; + background: transparent; + font-weight: 600; +} + +.page-anonymous .form-label { + color: #475569; + font-weight: 500; + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.06em; +} + +.page-anonymous .form-control, +.page-anonymous .form-select { + background: #fafbfc; + border: 1px solid #dfe5ec; + border-radius: 10px; + color: #1e293b; + padding: 0.65rem 0.85rem; + transition: border-color 0.15s ease, box-shadow 0.15s ease; + + &:focus { + background: #ffffff; + border-color: $btn-background-color; + box-shadow: 0 0 0 0.25rem rgba(30, 58, 95, 0.12); + } +} + +.page-anonymous .btn.btn-primary { + background: $btn-background-color; + border: 0; + border-radius: 10px; + color: $btn-foreground-color; + padding: 0.7rem; + font-weight: 600; + transition: filter 0.15s ease, transform 0.15s ease; + + &:hover { + filter: brightness(1.15); + transform: translateY(-1px); + } +} + +.page-anonymous .text-muted, +.page-anonymous .copyright { + color: #94a3b8 !important; +} + +.page-anonymous a { + color: #1e3a5f !important; +} diff --git a/themes/nordic-minimal/theme.json b/themes/nordic-minimal/theme.json new file mode 100644 index 0000000..c8cef80 --- /dev/null +++ b/themes/nordic-minimal/theme.json @@ -0,0 +1,18 @@ +{ + "name": "Nordic Minimal", + "description": "Minimalista claro escandinavo com acento azul profundo", + "variables": { + "btn-background-color": { + "name": "Cor de fundo dos Botões", + "default": "#1e3a5f" + }, + "btn-foreground-color": { + "name": "Cor do texto dos Botões", + "default": "#ffffff" + }, + "card-background-color": { + "name": "Cor do cartão", + "default": "" + } + } +} diff --git a/themes/sunset-mesh/login.css b/themes/sunset-mesh/login.css new file mode 100644 index 0000000..66a8473 --- /dev/null +++ b/themes/sunset-mesh/login.css @@ -0,0 +1,70 @@ +@charset "UTF-8"; +/* Tema Sunset Mesh — mesh gradient quente */ +body.page-anonymous { + min-height: 100vh; + background-color: #fff1eb; + background-image: radial-gradient(45% 55% at 10% 15%, rgba(255, 122, 89, 0.55) 0%, transparent 70%), radial-gradient(50% 60% at 90% 10%, rgba(255, 190, 92, 0.5) 0%, transparent 70%), radial-gradient(55% 65% at 85% 85%, rgba(196, 113, 245, 0.4) 0%, transparent 70%), radial-gradient(45% 55% at 15% 90%, rgba(250, 113, 133, 0.45) 0%, transparent 70%); + background-attachment: fixed; +} + +.page-anonymous .main-content-card .card-body { + background: rgba(255, 255, 255, 0.72); + backdrop-filter: blur(14px); + -webkit-backdrop-filter: blur(14px); + border: 1px solid rgba(255, 255, 255, 0.85); + border-radius: 22px; + padding: 2.3rem !important; + box-shadow: 0 22px 55px rgba(148, 63, 106, 0.22); +} + +.page-anonymous .card-header { + color: #3b1d54; + border: 0; + background: transparent; + font-weight: 700; +} + +.page-anonymous .form-label { + color: #6b4a7e; + font-weight: 500; +} + +.page-anonymous .form-control, +.page-anonymous .form-select { + background: rgba(255, 255, 255, 0.85); + border: 1px solid rgba(196, 113, 245, 0.3); + border-radius: 12px; + color: #3b1d54; + padding: 0.65rem 0.85rem; +} +.page-anonymous .form-control:focus, +.page-anonymous .form-select:focus { + background: #ffffff; + border-color: #c471f5; + box-shadow: 0 0 0 0.25rem rgba(196, 113, 245, 0.2); +} + +.page-anonymous .btn.btn-primary { + background: #1f1235; + border: 0; + border-radius: 12px; + color: #ffffff; + padding: 0.7rem; + font-weight: 600; + letter-spacing: 0.02em; + box-shadow: 0 12px 26px rgba(31, 18, 53, 0.35); + transition: transform 0.15s ease, box-shadow 0.15s ease; +} +.page-anonymous .btn.btn-primary:hover { + transform: translateY(-1px); + box-shadow: 0 16px 32px rgba(31, 18, 53, 0.45); +} + +.page-anonymous .text-muted, +.page-anonymous .copyright { + color: #8a6aa0 !important; +} + +.page-anonymous a { + color: #7828c8 !important; +} \ No newline at end of file diff --git a/themes/sunset-mesh/login.preview.jpg b/themes/sunset-mesh/login.preview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ab96170acb76594f17c368571d3f409528527aa GIT binary patch literal 7159 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