mirror of
https://github.com/php-flasher/php-flasher.git
synced 2026-03-31 15:07:47 +01:00
262 lines
8.5 KiB
SCSS
262 lines
8.5 KiB
SCSS
/**
|
|
* @file PHPFlasher Slack Theme Styles
|
|
* @description CSS styling for Slack-inspired notifications
|
|
* @author Younes ENNAJI
|
|
*/
|
|
|
|
/**
|
|
* PHPFlasher - Slack Theme
|
|
*
|
|
* Familiar notifications inspired by Slack's popular messaging platform.
|
|
* Used by millions of professionals worldwide.
|
|
*/
|
|
.fl-slack {
|
|
/* Theme variables - Define the visual appearance of Slack notifications */
|
|
|
|
/* Base colors and appearance */
|
|
--slack-bg-light: #ffffff; /* White background in light mode */
|
|
--slack-bg-dark: #1a1d21; /* Dark background in dark mode (Slack dark) */
|
|
--slack-hover-light: #f8f8f8; /* Light hover state */
|
|
--slack-hover-dark: #222529; /* Dark hover state */
|
|
--slack-text-light: #1d1c1d; /* Dark text in light mode */
|
|
--slack-text-secondary-light: #616061; /* Gray secondary text in light mode */
|
|
--slack-text-dark: #e0e0e0; /* Light text in dark mode */
|
|
--slack-text-secondary-dark: #ababad; /* Gray secondary text in dark mode */
|
|
--slack-border-light: #e0e0e0; /* Light border color */
|
|
--slack-border-dark: #393a3e; /* Dark border color */
|
|
--slack-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); /* Subtle shadow in light mode */
|
|
--slack-shadow-dark: 0 1px 0 rgba(0, 0, 0, 0.2); /* Stronger shadow in dark mode */
|
|
--slack-avatar-size: 36px; /* Size of avatar/icon container */
|
|
|
|
/* Type-specific colors matching Slack's color scheme */
|
|
--slack-success: #2bac76; /* Green */
|
|
--slack-info: #1264a3; /* Blue */
|
|
--slack-warning: #e8912d; /* Orange */
|
|
--slack-error: #e01e5a; /* Red/Pink */
|
|
|
|
/* Animation timing */
|
|
--slack-animation-duration: 150ms; /* Quick animation for responsive feel */
|
|
}
|
|
|
|
/**
|
|
* Simple fade in animation
|
|
* Quick and subtle to match Slack's responsive feel
|
|
*/
|
|
@keyframes slackFadeIn {
|
|
from {
|
|
opacity: 0; /* Start invisible */
|
|
}
|
|
to {
|
|
opacity: 1; /* End fully visible */
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Base Slack theme styling
|
|
*/
|
|
.fl-slack {
|
|
position: relative;
|
|
margin: 4px 0; /* Minimal spacing between messages */
|
|
font-family: "Lato", "Slack-Lato", "Helvetica Neue", "Helvetica", sans-serif; /* Slack's font stack */
|
|
animation: slackFadeIn var(--slack-animation-duration) ease-out; /* Quick fade in */
|
|
|
|
/**
|
|
* Message bubble
|
|
* The main container that resembles a Slack message
|
|
*/
|
|
.fl-slack-message {
|
|
background-color: var(--slack-bg-light);
|
|
color: var(--slack-text-light);
|
|
padding: 8px 20px 8px 8px; /* More padding on right for close button */
|
|
border-radius: 4px; /* Slightly rounded corners */
|
|
display: flex;
|
|
align-items: flex-start; /* Align content to top */
|
|
transition: background-color 0.1s ease; /* Smooth hover transition */
|
|
border: 1px solid var(--slack-border-light); /* Subtle border */
|
|
box-shadow: var(--slack-shadow); /* Slight shadow for depth */
|
|
|
|
&:hover {
|
|
background-color: var(--slack-hover-light); /* Background change on hover */
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Avatar container
|
|
* Colored square that holds the type icon
|
|
*/
|
|
.fl-avatar {
|
|
width: var(--slack-avatar-size); /* Fixed size avatar */
|
|
height: var(--slack-avatar-size);
|
|
border-radius: 4px; /* Slightly rounded corners */
|
|
margin-right: 8px; /* Space between avatar and text */
|
|
flex-shrink: 0; /* Prevent avatar from shrinking */
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background-color: currentColor; /* Uses the type color */
|
|
}
|
|
|
|
/**
|
|
* Type icon
|
|
* Symbol within the colored avatar
|
|
*/
|
|
.fl-type-icon {
|
|
color: white; /* White icon on colored background */
|
|
font-weight: bold; /* Bold symbol */
|
|
font-size: 16px; /* Icon size */
|
|
}
|
|
|
|
/**
|
|
* Message content container
|
|
* Holds the message text
|
|
*/
|
|
.fl-message-content {
|
|
flex: 1; /* Take available space */
|
|
min-width: 0; /* Allows text to wrap */
|
|
}
|
|
|
|
/**
|
|
* Message text styling
|
|
* Follows Slack's text appearance
|
|
*/
|
|
.fl-message-text {
|
|
font-size: 15px; /* Slack's standard message size */
|
|
line-height: 1.46668; /* Slack's line height */
|
|
word-break: break-word; /* Allows breaking long words */
|
|
}
|
|
|
|
/**
|
|
* Actions container
|
|
* Holds the close button that appears on hover
|
|
*/
|
|
.fl-actions {
|
|
visibility: hidden; /* Hidden by default */
|
|
position: absolute;
|
|
right: 6px; /* Positioned in top-right */
|
|
top: 8px;
|
|
opacity: 0; /* Transparent by default */
|
|
transition: opacity 0.1s ease; /* Smooth fade in/out */
|
|
}
|
|
|
|
/**
|
|
* Show actions on hover
|
|
* Makes the close button appear when hovering the message
|
|
*/
|
|
.fl-slack-message:hover .fl-actions {
|
|
visibility: visible; /* Show on hover */
|
|
opacity: 1; /* Fade in */
|
|
}
|
|
|
|
/**
|
|
* Close button styling
|
|
* Simple button with hover effect
|
|
*/
|
|
.fl-close {
|
|
background: none;
|
|
border: none;
|
|
color: var(--slack-text-secondary-light); /* Gray icon by default */
|
|
cursor: pointer;
|
|
padding: 4px;
|
|
border-radius: 4px; /* Slightly rounded corners */
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
|
|
&:hover {
|
|
color: var(--slack-text-light); /* Darker on hover */
|
|
background-color: var(--slack-hover-light); /* Light background on hover */
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Type-specific styling
|
|
* Each notification type gets its own colored avatar
|
|
*/
|
|
&.fl-success {
|
|
.fl-avatar {
|
|
color: var(--slack-success); /* Green avatar */
|
|
}
|
|
}
|
|
|
|
&.fl-info {
|
|
.fl-avatar {
|
|
color: var(--slack-info); /* Blue avatar */
|
|
}
|
|
}
|
|
|
|
&.fl-warning {
|
|
.fl-avatar {
|
|
color: var(--slack-warning); /* Orange avatar */
|
|
}
|
|
}
|
|
|
|
&.fl-error {
|
|
.fl-avatar {
|
|
color: var(--slack-error); /* Red avatar */
|
|
}
|
|
}
|
|
|
|
/**
|
|
* RTL Support
|
|
* Right-to-left language direction support
|
|
*/
|
|
&.fl-rtl {
|
|
direction: rtl; /* Right-to-left text */
|
|
|
|
.fl-avatar {
|
|
margin-right: 0;
|
|
margin-left: 8px; /* Swap margins */
|
|
}
|
|
|
|
.fl-username {
|
|
margin-right: 0;
|
|
margin-left: 4px; /* Swap margins */
|
|
}
|
|
|
|
.fl-actions {
|
|
right: auto;
|
|
left: 6px; /* Move to top-left */
|
|
}
|
|
|
|
.fl-slack-message {
|
|
padding: 8px 8px 8px 20px; /* Swap padding */
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Accessibility
|
|
* Respects reduced motion preferences
|
|
*/
|
|
@media (prefers-reduced-motion: reduce) {
|
|
animation: none; /* Disable animation */
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Dark mode support
|
|
* Slack-like dark theme
|
|
*/
|
|
body.fl-dark .fl-slack,
|
|
html.fl-dark .fl-slack,
|
|
.fl-slack.fl-auto-dark {
|
|
.fl-slack-message {
|
|
background-color: var(--slack-bg-dark); /* Dark background */
|
|
color: var(--slack-text-dark); /* Light text */
|
|
border-color: var(--slack-border-dark); /* Darker border */
|
|
box-shadow: var(--slack-shadow-dark); /* Stronger shadow */
|
|
|
|
&:hover {
|
|
background-color: var(--slack-hover-dark); /* Dark hover state */
|
|
}
|
|
}
|
|
|
|
.fl-close {
|
|
color: var(--slack-text-secondary-dark); /* Lighter gray icon */
|
|
|
|
&:hover {
|
|
color: var(--slack-text-dark); /* White on hover */
|
|
background-color: var(--slack-hover-dark); /* Dark background on hover */
|
|
}
|
|
}
|
|
}
|