/**
 * WLangage Syntax Highlighting Theme for Prism.js
 * Language: WLangage (WinDev, WebDev, WinDev Mobile)
 *
 * This theme provides comprehensive styling for all WLangage token types
 * Supports both light and dark themes via CSS custom properties
 */

/* ============================================================================
   CSS Custom Properties (Variables) - Light Theme (Default)
   ============================================================================ */
:root {
    /* Base colors */
    --wlangage-code-color: #008000;
    --wlangage-background: #FAF8F8;

    /* Token colors */
    --wlangage-keyword-color: #000000;
    --wlangage-variable-assignment-color: #555555;
    --wlangage-visibility-color: #0066CC;
    --wlangage-procedure-name-color: #008080;
    --wlangage-function-color: #0000FF;
    --wlangage-function-shadow: rgba(0, 0, 255, 0.15);
    --wlangage-user-function-color: #008080;
    --wlangage-user-function-shadow: rgba(0, 128, 128, 0.15);
    --wlangage-property-color: #000000;
    --wlangage-constant-color: #0000FF;
    --wlangage-type-color: #5D00BA;
    --wlangage-operator-color: #000000;
    --wlangage-number-color: #800080;
    --wlangage-string-color: #800080;
    --wlangage-comment-color: #808080;
    --wlangage-punctuation-color: #000000;
    --wlangage-important-color: #d32f2f;
    --wlangage-assignment-keyword-color: #555555;

    /* Font weights */
    --wlangage-font-weight-normal: 400;
    --wlangage-font-weight-bold: 700;
    --wlangage-font-weight-semibold: 600;
}

/* ============================================================================
   Dark Theme
   ============================================================================ */
.dark-theme,
[data-theme="dark"] {
    --wlangage-code-color: #4CAF50;
    --wlangage-background: #1e1e1e;

    --wlangage-keyword-color: #FF8000;
    --wlangage-variable-assignment-color: #A6A8AB;
    --wlangage-visibility-color: #4FC3F7;
    --wlangage-procedure-name-color: #009180;
    --wlangage-procedure-name-shadow: rgba(0, 145, 128, 0.3);
    --wlangage-function-color: #91B5FE;
    --wlangage-function-shadow: rgba(145, 181, 254, 0.3);
    --wlangage-user-function-color: #009180;
    --wlangage-user-function-shadow: rgba(0, 148, 128, 0.15);
    --wlangage-property-color: #CDD3DE;
    --wlangage-constant-color: #B1C33A;
    --wlangage-type-color: #9575CD;
    --wlangage-operator-color: #CDD3DE;
    --wlangage-number-color: #BA68C8;
    --wlangage-string-color: #BA68C8;
    --wlangage-comment-color: #808080;
    --wlangage-punctuation-color: #CDD3DE;
    --wlangage-important-color: #ff6b6b;
    --wlangage-assignment-keyword-color: #A6A8AB;
}

/* ============================================================================
   Base Code Styling
   ============================================================================ */
pre {
    padding: 20px;
    border-radius: 15px;
    overflow-x: auto;
    background-color: var(--wlangage-background);
}

code.language-wlangage,
pre {
    color: var(--wlangage-code-color);
    background-color: var(--wlangage-background);
    font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
    font-size: 14px;
    line-height: 1.5;
}

/* ============================================================================
   Token Styling - Light Theme
   ============================================================================ */

/* Keywords (SI, ALORS, SINON, FIN, etc.) */
.token.keyword,
.token.procedure .procedure-keyword {
    color: var(--wlangage-keyword-color);
    text-transform: uppercase;
}

/* Variable assignment (est un, est une, sont des) */
.token.variable-assignment {
    color: var(--wlangage-variable-assignment-color);
}

/* Visibility modifiers (public, privé, protégé, hérite de) */
.token.visibility {
    color: var(--wlangage-visibility-color);
    font-weight: var(--wlangage-font-weight-bold);
}

/* Procedure names */
.token.procedure-name,
.token.procedure .procedure-name {
    color: var(--wlangage-procedure-name-color);
    font-weight: var(--wlangage-font-weight-semibold);
}

/* Functions */
.token.function {
    color: var(--wlangage-function-color);
    text-shadow: 0px 0px 4px var(--wlangage-function-shadow);
}

/* User Functions (custom functions) */
.token.user-function {
    color: var(--wlangage-user-function-color);
    text-shadow: 0px 0px 4px var(--wlangage-user-function-shadow);
}

/* Properties */
.token.property {
    color: var(--wlangage-property-color);
}

/* Constants */
.token.constant {
    color: var(--wlangage-constant-color);
    font-style: italic;
}

/* Types */
.token.type {
    color: var(--wlangage-type-color);
}

/* Operators */
.token.operator {
    color: var(--wlangage-operator-color);
    background-color: transparent !important;
}

/* Numbers */
.token.number {
    color: var(--wlangage-number-color);
}

/* Strings */
.token.string {
    color: var(--wlangage-string-color);
}

/* Comments */
.token.comment {
    color: var(--wlangage-comment-color);
    font-style: italic;
}

/* Punctuation */
.token.punctuation {
    color: var(--wlangage-punctuation-color);
}

/* Important tokens (procedures, types, visibility in light version) */
.token.important {
    color: var(--wlangage-important-color);
    font-weight: var(--wlangage-font-weight-bold);
}

/* Assignment keywords inside variable-assignment */
.token.assignment-keyword {
    color: var(--wlangage-assignment-keyword-color);
    font-style: italic;
}

/* ============================================================================
   Dark Theme Overrides
   ============================================================================ */
.dark-theme code.language-wlangage,
.dark-theme pre.language-wlangage,
[data-theme="dark"] code.language-wlangage,
[data-theme="dark"] pre.language-wlangage {
    color: var(--wlangage-code-color);
}

.dark-theme .token.keyword,
.dark-theme .token.procedure .procedure-keyword,
[data-theme="dark"] .token.keyword,
[data-theme="dark"] .token.procedure .procedure-keyword {
    color: var(--wlangage-keyword-color);
    text-transform: uppercase;
}

.dark-theme .token.variable-assignment,
[data-theme="dark"] .token.variable-assignment {
    color: var(--wlangage-variable-assignment-color);
}

.dark-theme .token.visibility,
[data-theme="dark"] .token.visibility {
    color: var(--wlangage-visibility-color);
    font-weight: var(--wlangage-font-weight-bold);
}

.dark-theme .token.procedure-name,
.dark-theme .token.procedure .procedure-name,
[data-theme="dark"] .token.procedure-name,
[data-theme="dark"] .token.procedure .procedure-name {
    color: var(--wlangage-procedure-name-color);
    text-shadow: 0px 0px 4px var(--wlangage-procedure-name-shadow);
    font-weight: var(--wlangage-font-weight-semibold);
}

.dark-theme .token.function,
[data-theme="dark"] .token.function {
    color: var(--wlangage-function-color);
    text-shadow: 0px 0px 4px var(--wlangage-function-shadow);
}

.dark-theme .token.user-function,
[data-theme="dark"] .token.user-function {
    color: var(--wlangage-user-function-color);
    text-shadow: 0px 0px 4px var(--wlangage-user-function-shadow);
}

.dark-theme .token.property,
[data-theme="dark"] .token.property {
    color: var(--wlangage-property-color);
}

.dark-theme .token.constant,
[data-theme="dark"] .token.constant {
    color: var(--wlangage-constant-color);
    font-style: italic;
}

.dark-theme .token.type,
[data-theme="dark"] .token.type {
    color: var(--wlangage-type-color);
}

.dark-theme .token.operator,
[data-theme="dark"] .token.operator {
    color: var(--wlangage-operator-color);
    background-color: transparent !important;
}

.dark-theme .token.number,
.dark-theme .token.string,
[data-theme="dark"] .token.number,
[data-theme="dark"] .token.string {
    color: var(--wlangage-number-color);
}

.dark-theme .token.comment,
[data-theme="dark"] .token.comment {
    color: var(--wlangage-comment-color);
    font-style: italic;
}

.dark-theme .token.punctuation,
[data-theme="dark"] .token.punctuation {
    color: var(--wlangage-punctuation-color);
}

.dark-theme .token.important,
[data-theme="dark"] .token.important {
    color: var(--wlangage-important-color);
    font-weight: var(--wlangage-font-weight-bold);
}

.dark-theme .token.assignment-keyword,
[data-theme="dark"] .token.assignment-keyword {
    color: var(--wlangage-assignment-keyword-color);
}

/* ============================================================================
   Responsive Design
   ============================================================================ */
@media (max-width: 768px) {
    code.language-wlangage,
    pre.language-wlangage {
        font-size: 12px;
    }
}

/* ============================================================================
   Print Styles
   ============================================================================ */
@media print {
    code.language-wlangage,
    pre.language-wlangage {
        color: #000000 !important;
        background-color: #ffffff !important;
    }

    .token {
        color: #000000 !important;
        text-shadow: none !important;
    }

    .token.comment {
        color: #666666 !important;
    }
}

/* ============================================================================
   Accessibility Enhancements
   ============================================================================ */
/* High contrast mode support */
@media (prefers-contrast: more) {
    .token.keyword,
    .token.function,
    .token.type,
    .token.constant,
    .token.important {
        font-weight: var(--wlangage-font-weight-bold);
    }
}

/* Reduced motion support */
@media (prefers-reduced-motion: reduce) {
    .token.function,
    .token.procedure-name {
        text-shadow: none !important;
    }
}

/* ============================================================================
   Utility Classes
   ============================================================================ */
/* Compact mode for inline code */
code.language-wlangage.compact {
    font-size: 12px;
    padding: 2px 6px;
    border-radius: 3px;
    background-color: var(--wlangage-background);
}

/* Line numbers support */
.line-numbers .line-numbers-rows {
    border-right: 1px solid var(--wlangage-comment-color);
}

.line-numbers-rows > span:before {
    color: var(--wlangage-comment-color);
}
