WTR-Lab Reader & UI Enhancer

Enhance your WTR-Lab reading experience with customizable reader width, navigation panel controls, and font styling options. Create the perfect reading environment on wtr-lab.com with this powerful userscript.

Pasang skrip ini?
Sugesti pemilik skrip

Kamu mungkin juga suka WTR LAB Novel Image Generator.

Pasang skrip ini
// ==UserScript==
// @name WTR-Lab Reader & UI Enhancer
// @description Enhance your WTR-Lab reading experience with customizable reader width, navigation panel controls, and font styling options. Create the perfect reading environment on wtr-lab.com with this powerful userscript.
// @version 3.5.1
// @author MasuRii
// @supportURL https://github.com/MasuRii/wtr-lab-enhancer/issues
// @match https://wtr-lab.com/en/novel/*/*/chapter-*
// @connect gwfh.mranftl.com
// @connect fonts.googleapis.com
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_registerMenuCommand
// @grant GM_xmlhttpRequest
// @homepageURL https://github.com/MasuRii/wtr-lab-enhancer
// @icon https://www.google.com/s2/favicons?sz=64&domain=wtr-lab.com
// @license MIT
// @namespace http://tampermonkey.net/
// ==/UserScript==

/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ({

/***/ "./node_modules/css-loader/dist/cjs.js!./src/styles/panel.css":
/*!********************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js!./src/styles/panel.css ***!
  \********************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
// Imports


var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
// Module
___CSS_LOADER_EXPORT___.push([module.id, `/* Modern CSS Design System with Fallbacks */
:root {
    /* Container Queries Support Detection */
    --supports-container-queries: false;
    
    /* Design Tokens - Colors */
    --panel-bg-primary: var(--bs-component-bg, #ffffff);
    --panel-bg-secondary: var(--bs-tertiary-bg, #f8f9fa);
    --panel-bg-elevated: var(--bs-body-bg, #ffffff);
    --panel-text-primary: var(--bs-body-color, #212529);
    --panel-text-secondary: var(--bs-secondary-color, #6c757d);
    --panel-border: var(--bs-border-color, #dee2e6);
    --panel-accent: var(--bs-primary, #0d6efd);
    --panel-accent-hover: #0b5ed7;
    --panel-success: #198754;
    --panel-danger: #dc3545;
    --panel-warning: #fd7e14;
    
    /* Design Tokens - Spacing */
    --panel-spacing-xs: 0.25rem;
    --panel-spacing-sm: 0.5rem;
    --panel-spacing-md: 1rem;
    --panel-spacing-lg: 1.5rem;
    --panel-spacing-xl: 2rem;
    
    /* Design Tokens - Typography */
    --panel-font-family: var(--bs-font-sans-serif, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif);
    --panel-font-size-xs: 0.75rem;
    --panel-font-size-sm: 0.875rem;
    --panel-font-size-md: 1rem;
    --panel-font-size-lg: 1.125rem;
    --panel-font-size-xl: 1.25rem;
    --panel-font-weight-normal: 400;
    --panel-font-weight-medium: 500;
    --panel-font-weight-bold: 600;
    --panel-line-height-tight: 1.2;
    --panel-line-height-normal: 1.5;
    --panel-line-height-relaxed: 1.75;
    
    /* Design Tokens - Border Radius */
    --panel-radius-sm: var(--bs-border-radius-sm, 0.25rem);
    --panel-radius-md: var(--bs-border-radius, 0.375rem);
    --panel-radius-lg: var(--bs-border-radius-lg, 0.5rem);
    --panel-radius-xl: 0.75rem;
    --panel-radius-full: 9999px;
    
    /* Design Tokens - Shadows */
    --panel-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
    --panel-shadow-md: 0 2px 4px rgba(0, 0, 0, 0.1);
    --panel-shadow-lg: var(--bs-box-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.1));
    --panel-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
    
    /* Design Tokens - Transitions */
    --panel-transition-fast: 0.15s ease;
    --panel-transition-normal: 0.3s ease;
    --panel-transition-slow: 0.5s ease;
    --panel-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
    
    /* Design Tokens - Z-Index */
    --panel-z-overlay: 9999;
    --panel-z-panel: 10000;
    --panel-z-tooltip: 10001;
}

/* Container Queries Support Detection */
@supports (container-type: inline-size) {
    :root {
        --supports-container-queries: true;
    }
}

/* Panel Container for Container Queries */
#wtr-config-container {
    container-name: wtr-panel;
    container-type: inline-size;
    container-index: 0;
}

/* Enhanced panel styling with design tokens */
#wtr-config-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.7);
    z-index: var(--panel-z-overlay);
    display: flex;
    justify-content: center;
    align-items: center;
    backdrop-filter: blur(4px);
    contain: layout style paint;
}

#wtr-config-panel {
    background: var(--panel-bg-primary);
    color: var(--panel-text-primary);
    padding: var(--panel-spacing-xl);
    border-radius: var(--panel-radius-lg);
    width: 90%;
    max-width: 550px;
    box-shadow: var(--panel-shadow-xl);
    font-family: var(--panel-font-family);
    display: flex;
    flex-direction: column;
    gap: var(--panel-spacing-lg);
    max-height: 90vh;
    border: 1px solid var(--panel-border);
    
    /* Performance optimizations */
    contain: layout style paint;
    will-change: transform, opacity;
    transform: translateZ(0);
}

/* Enhanced Typography with Design Tokens */
#wtr-config-panel h2 {
    margin: 0;
    text-align: center;
    font-weight: var(--panel-font-weight-medium);
    font-size: var(--panel-font-size-xl);
    line-height: var(--panel-line-height-tight);
    color: var(--panel-text-primary);
    flex-shrink: 0;
}

/* Enhanced Sections with Containment */
#wtr-config-panel #wtr-config-sections {
    overflow-y: auto;
    flex-grow: 1;
    display: flex;
    flex-direction: column;
    gap: var(--panel-spacing-lg);
    padding-right: var(--panel-spacing-md);
    margin-right: calc(-1 * var(--panel-spacing-md));
    
    /* Performance optimization */
    contain: layout style;
}

#wtr-config-panel .wtr-config-section {
    display: flex;
    flex-direction: column;
    gap: var(--panel-spacing-lg);
    padding: var(--panel-spacing-lg);
    border: 1px solid var(--panel-border);
    border-radius: var(--panel-radius-lg);
    background: var(--panel-bg-secondary);
    
    /* Performance optimization */
    contain: layout style paint;
}

#wtr-config-panel .wtr-control-group {
    display: flex;
    flex-direction: column;
    gap: var(--panel-spacing-sm);
}

/* Modern Control Layout with Grid Fallback */
#wtr-config-panel .wtr-config-controls {
    display: flex;
    gap: var(--panel-spacing-sm);
    align-items: center;
    flex-wrap: wrap;
}

#wtr-config-panel .wtr-config-controls.font-controls {
    flex-wrap: nowrap;
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--panel-spacing-sm);
}

#wtr-config-panel .wtr-config-controls.checkbox-control {
    justify-content: flex-start;
    cursor: pointer;
    padding: var(--panel-spacing-sm) 0;
    display: grid;
    grid-template-columns: auto 1fr;
    gap: var(--panel-spacing-sm);
    cursor: pointer;
}

#wtr-config-panel .wtr-config-controls.checkbox-control label {
    user-select: none;
}

#wtr-config-panel .wtr-config-controls.checkbox-control input {
    margin-right: var(--panel-spacing-sm);
}

/* Enhanced Form Controls with Touch Optimization */
#wtr-config-panel input[type="number"],
#wtr-config-panel select {
    flex-grow: 1;
    min-width: 100px;
    min-height: 44px; /* Touch target size */
    text-align: center;
    background: var(--panel-bg-secondary);
    color: var(--panel-text-primary);
    border: 1px solid var(--panel-border);
    border-radius: var(--panel-radius-md);
    padding: var(--panel-spacing-sm) var(--panel-spacing-md);
    font-family: var(--panel-font-family);
    font-size: var(--panel-font-size-sm);
    
    /* Performance */
    contain: layout style;
}

#wtr-config-panel select:disabled {
    background: var(--panel-bg-secondary);
    color: var(--panel-text-secondary);
    cursor: not-allowed;
}

/* Modern Button Layout */
#wtr-config-panel .wtr-button-group {
    display: grid;
    grid-auto-flow: column;
    gap: var(--panel-spacing-sm);
    justify-content: end;
    flex-shrink: 0;
}

/* Enhanced Button Styling with Motion Controls */
#wtr-config-panel .wtr-config-button {
    min-height: 44px; /* iOS guideline */
    min-width: 44px;
    padding: var(--panel-spacing-sm) var(--panel-spacing-md);
    border: none;
    border-radius: var(--panel-radius-md);
    cursor: pointer;
    background-color: var(--panel-accent);
    color: white;
    font-weight: var(--panel-font-weight-bold);
    font-size: var(--panel-font-size-sm);
    flex-shrink: 0;
    transition: background-color var(--panel-transition-fast),
                transform var(--panel-transition-fast);
    
    /* Touch optimization */
    touch-action: manipulation;
    -webkit-tap-highlight-color: transparent;
    
    /* Performance */
    contain: layout style paint;
    will-change: transform;
    transform: translateZ(0);
}

#wtr-config-panel .wtr-config-button:hover,
#wtr-config-panel .wtr-config-button:focus-visible {
    background-color: var(--panel-accent-hover);
    transform: translateY(-1px);
}

#wtr-config-panel .wtr-config-button:active {
    transform: translateY(0);
}

#wtr-config-panel .wtr-config-button:disabled {
    background-color: var(--panel-text-secondary);
    cursor: not-allowed;
    transform: none;
}

#wtr-config-panel .wtr-config-button.control {
    width: 44px;
    aspect-ratio: 1;
}

#wtr-config-panel .wtr-config-button.reset {
    background-color: var(--panel-danger);
}

#wtr-config-panel #wtr-config-close-btn {
    background-color: var(--panel-text-secondary);
    align-self: center;
    width: 100px;
    flex-shrink: 0;
}

/* Enhanced Typography */
#wtr-config-panel .wtr-section-title {
    font-weight: var(--panel-font-weight-medium);
    text-align: center;
    margin-bottom: var(--panel-spacing-sm);
    display: block;
    font-size: var(--panel-font-size-lg);
    color: var(--panel-text-primary);
}

#wtr-config-panel .wtr-subsection-title {
    font-weight: var(--panel-font-weight-medium);
    text-align: left;
    margin-top: var(--panel-spacing-lg);
    display: block;
    border-top: 1px solid var(--panel-border);
    padding-top: var(--panel-spacing-lg);
    color: var(--panel-text-primary);
}

/* Enhanced Button Hide Controls Layout */
#wtr-config-panel .wtr-button-hide-controls {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: var(--panel-spacing-md);
    justify-content: flex-start;
}

#wtr-config-panel .icon-checkbox label {
    display: flex;
    align-items: center;
    gap: var(--panel-spacing-sm);
}

#wtr-config-panel .icon-checkbox svg {
    width: 20px;
    height: 20px;
    stroke: currentColor;
    fill: none;
}

#wtr-config-panel .icon-checkbox svg:has(use[href*="text_fields"], use[href*="tts"], use[href*="list"]) {
    fill: currentColor;
    stroke: none;
}

/* Width Controls Grouping - Responsive Layout */
#wtr-config-panel .wtr-width-controls-group {
    display: flex;
    flex-direction: column;
    gap: var(--panel-spacing-lg);
    width: 100%;
}

#wtr-config-panel .wtr-width-control-item {
    display: flex;
    flex-direction: column;
    gap: var(--panel-spacing-sm);
    width: 100%;
}

#wtr-config-panel .wtr-width-label {
    font-weight: var(--panel-font-weight-medium);
    color: var(--panel-text-primary);
    text-align: left;
    margin-bottom: var(--panel-spacing-xs);
}

#wtr-config-panel .wtr-config-controls.width-controls {
    display: flex;
    align-items: center;
    gap: var(--panel-spacing-sm);
    flex-wrap: nowrap;
    width: 100%;
}

#wtr-config-panel .wtr-width-input {
    flex: 1;
    min-width: 80px;
    text-align: center;
    /* Grow to fill available space */
    max-width: none;
}

/* Motion Preference Handling - WCAG 2.2/2.3 Compliance */
@media (prefers-reduced-motion: reduce) {
    #wtr-config-overlay,
    #wtr-config-panel,
    .wtr-config-button {
        transition: none !important;
        animation: none !important;
        transform: none !important;
    }
}

/* Enable motion for users who haven't disabled it */
@supports not (prefers-reduced-motion: reduce) {
    #wtr-config-panel {
        transition: transform var(--panel-transition-normal) var(--panel-timing-function),
                   opacity var(--panel-transition-normal) ease;
        transform: scale(0.95);
    }
    
    #wtr-config-panel.visible {
        transform: scale(1);
    }
}

/* Container Query Responsive Design */
@container wtr-panel (max-width: 480px) {
    #wtr-config-panel {
        width: 95%;
        padding: var(--panel-spacing-lg);
    }
    
    .wtr-config-controls {
        flex-direction: column;
        gap: var(--panel-spacing-xs);
    }
    
    .wtr-config-controls.font-controls {
        flex-direction: column;
        align-items: stretch;
    }
    
    .wtr-button-group {
        margin-left: 0;
        justify-content: center;
        grid-auto-flow: row;
    }
    
    .wtr-button-hide-controls {
        grid-template-columns: 1fr;
        gap: var(--panel-spacing-sm);
    }
    
    /* Width controls maintain grouping but stack on small screens */
    .wtr-width-controls-group {
        gap: var(--panel-spacing-md);
    }
    
    .wtr-width-control-item {
        width: 100%;
    }
    
    .wtr-config-controls.width-controls {
        width: 100%;
    }
    
    .wtr-width-input {
        min-width: 70px;
        flex: 1;
    }
}

@container wtr-panel (max-width: 360px) {
    #wtr-config-panel {
        width: 98%;
        margin: var(--panel-spacing-md);
        padding: var(--panel-spacing-md);
    }
    
    .wtr-config-section {
        padding: var(--panel-spacing-md);
    }
    
    .wtr-config-button {
        min-width: 40px;
    }
    
    /* Extra small screens - ensure width controls stay in single column */
    .wtr-width-controls-group {
        gap: var(--panel-spacing-sm);
    }
    
    .wtr-width-control-item {
        width: 100%;
    }
    
    .wtr-config-controls.width-controls {
        flex-wrap: wrap;
        gap: var(--panel-spacing-xs);
    }
    
    .wtr-width-input {
        min-width: 60px;
        flex: 1;
    }
}

/* Grid Layout Fallbacks */
@supports not (display: grid) {
    .wtr-config-controls {
        display: flex;
        flex-wrap: wrap;
    }
    
    .wtr-button-group {
        display: flex;
        flex-wrap: wrap;
    }
    
    .wtr-button-hide-controls {
        display: flex;
        flex-wrap: wrap;
    }
    
    /* Width controls fallback - ensure they stay in single column */
    .wtr-width-controls-group {
        display: flex;
        flex-direction: column;
        gap: var(--panel-spacing-md);
    }
    
    .wtr-width-control-item {
        display: flex;
        flex-direction: column;
        gap: var(--panel-spacing-sm);
        width: 100%;
    }
    
    .wtr-config-controls.width-controls {
        display: flex;
        flex-wrap: wrap;
        gap: var(--panel-spacing-sm);
        width: 100%;
    }
}

/* Container Queries Fallback */
@supports not (container-type: inline-size) {
    #wtr-config-container {
        /* Fallback - styles remain as above for viewport-based responsiveness */
    }
    
    /* Legacy media queries as fallback */
    @media (max-width: 480px) {
        #wtr-config-panel {
            width: 95%;
            padding: var(--panel-spacing-lg);
        }
        
        .wtr-config-controls {
            flex-direction: column;
            gap: var(--panel-spacing-xs);
        }
        
        /* Width controls fallback for legacy browsers */
        .wtr-width-controls-group {
            gap: var(--panel-spacing-md);
        }
        
        .wtr-width-control-item {
            width: 100%;
        }
        
        .wtr-config-controls.width-controls {
            width: 100%;
        }
        
        .wtr-width-input {
            min-width: 70px;
            flex: 1;
        }
    }
    
    /* Extra small screens fallback */
    @media (max-width: 360px) {
        .wtr-width-controls-group {
            gap: var(--panel-spacing-sm);
        }
        
        .wtr-config-controls.width-controls {
            flex-wrap: wrap;
            gap: var(--panel-spacing-xs);
        }
        
        .wtr-width-input {
            min-width: 60px;
            flex: 1;
        }
    }
}

/* Backdrop Filter Fallback */
@supports not (backdrop-filter: blur(1px)) {
    #wtr-config-overlay {
        background-color: rgba(0, 0, 0, 0.8);
    }
}

/* Touch-specific enhancements */
@media (hover: none) and (pointer: coarse) {
    .wtr-config-button {
        min-height: 48px;
        padding: var(--panel-spacing-md) var(--panel-spacing-lg);
        font-size: var(--panel-font-size-md);
    }
    
    .wtr-config-controls input[type="number"],
    .wtr-config-controls select {
        min-height: 48px;
        font-size: var(--panel-font-size-md);
    }
}`, "",{"version":3,"sources":["webpack://./src/styles/panel.css"],"names":[],"mappings":"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","sourcesContent":["/* Modern CSS Design System with Fallbacks */\r\n:root {\r\n    /* Container Queries Support Detection */\r\n    --supports-container-queries: false;\r\n    \r\n    /* Design Tokens - Colors */\r\n    --panel-bg-primary: var(--bs-component-bg, #ffffff);\r\n    --panel-bg-secondary: var(--bs-tertiary-bg, #f8f9fa);\r\n    --panel-bg-elevated: var(--bs-body-bg, #ffffff);\r\n    --panel-text-primary: var(--bs-body-color, #212529);\r\n    --panel-text-secondary: var(--bs-secondary-color, #6c757d);\r\n    --panel-border: var(--bs-border-color, #dee2e6);\r\n    --panel-accent: var(--bs-primary, #0d6efd);\r\n    --panel-accent-hover: #0b5ed7;\r\n    --panel-success: #198754;\r\n    --panel-danger: #dc3545;\r\n    --panel-warning: #fd7e14;\r\n    \r\n    /* Design Tokens - Spacing */\r\n    --panel-spacing-xs: 0.25rem;\r\n    --panel-spacing-sm: 0.5rem;\r\n    --panel-spacing-md: 1rem;\r\n    --panel-spacing-lg: 1.5rem;\r\n    --panel-spacing-xl: 2rem;\r\n    \r\n    /* Design Tokens - Typography */\r\n    --panel-font-family: var(--bs-font-sans-serif, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif);\r\n    --panel-font-size-xs: 0.75rem;\r\n    --panel-font-size-sm: 0.875rem;\r\n    --panel-font-size-md: 1rem;\r\n    --panel-font-size-lg: 1.125rem;\r\n    --panel-font-size-xl: 1.25rem;\r\n    --panel-font-weight-normal: 400;\r\n    --panel-font-weight-medium: 500;\r\n    --panel-font-weight-bold: 600;\r\n    --panel-line-height-tight: 1.2;\r\n    --panel-line-height-normal: 1.5;\r\n    --panel-line-height-relaxed: 1.75;\r\n    \r\n    /* Design Tokens - Border Radius */\r\n    --panel-radius-sm: var(--bs-border-radius-sm, 0.25rem);\r\n    --panel-radius-md: var(--bs-border-radius, 0.375rem);\r\n    --panel-radius-lg: var(--bs-border-radius-lg, 0.5rem);\r\n    --panel-radius-xl: 0.75rem;\r\n    --panel-radius-full: 9999px;\r\n    \r\n    /* Design Tokens - Shadows */\r\n    --panel-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\r\n    --panel-shadow-md: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n    --panel-shadow-lg: var(--bs-box-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.1));\r\n    --panel-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1);\r\n    \r\n    /* Design Tokens - Transitions */\r\n    --panel-transition-fast: 0.15s ease;\r\n    --panel-transition-normal: 0.3s ease;\r\n    --panel-transition-slow: 0.5s ease;\r\n    --panel-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n    \r\n    /* Design Tokens - Z-Index */\r\n    --panel-z-overlay: 9999;\r\n    --panel-z-panel: 10000;\r\n    --panel-z-tooltip: 10001;\r\n}\r\n\r\n/* Container Queries Support Detection */\r\n@supports (container-type: inline-size) {\r\n    :root {\r\n        --supports-container-queries: true;\r\n    }\r\n}\r\n\r\n/* Panel Container for Container Queries */\r\n#wtr-config-container {\r\n    container-name: wtr-panel;\r\n    container-type: inline-size;\r\n    container-index: 0;\r\n}\r\n\r\n/* Enhanced panel styling with design tokens */\r\n#wtr-config-overlay {\r\n    position: fixed;\r\n    top: 0;\r\n    left: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    background-color: rgba(0, 0, 0, 0.7);\r\n    z-index: var(--panel-z-overlay);\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n    backdrop-filter: blur(4px);\r\n    contain: layout style paint;\r\n}\r\n\r\n#wtr-config-panel {\r\n    background: var(--panel-bg-primary);\r\n    color: var(--panel-text-primary);\r\n    padding: var(--panel-spacing-xl);\r\n    border-radius: var(--panel-radius-lg);\r\n    width: 90%;\r\n    max-width: 550px;\r\n    box-shadow: var(--panel-shadow-xl);\r\n    font-family: var(--panel-font-family);\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: var(--panel-spacing-lg);\r\n    max-height: 90vh;\r\n    border: 1px solid var(--panel-border);\r\n    \r\n    /* Performance optimizations */\r\n    contain: layout style paint;\r\n    will-change: transform, opacity;\r\n    transform: translateZ(0);\r\n}\r\n\r\n/* Enhanced Typography with Design Tokens */\r\n#wtr-config-panel h2 {\r\n    margin: 0;\r\n    text-align: center;\r\n    font-weight: var(--panel-font-weight-medium);\r\n    font-size: var(--panel-font-size-xl);\r\n    line-height: var(--panel-line-height-tight);\r\n    color: var(--panel-text-primary);\r\n    flex-shrink: 0;\r\n}\r\n\r\n/* Enhanced Sections with Containment */\r\n#wtr-config-panel #wtr-config-sections {\r\n    overflow-y: auto;\r\n    flex-grow: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: var(--panel-spacing-lg);\r\n    padding-right: var(--panel-spacing-md);\r\n    margin-right: calc(-1 * var(--panel-spacing-md));\r\n    \r\n    /* Performance optimization */\r\n    contain: layout style;\r\n}\r\n\r\n#wtr-config-panel .wtr-config-section {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: var(--panel-spacing-lg);\r\n    padding: var(--panel-spacing-lg);\r\n    border: 1px solid var(--panel-border);\r\n    border-radius: var(--panel-radius-lg);\r\n    background: var(--panel-bg-secondary);\r\n    \r\n    /* Performance optimization */\r\n    contain: layout style paint;\r\n}\r\n\r\n#wtr-config-panel .wtr-control-group {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: var(--panel-spacing-sm);\r\n}\r\n\r\n/* Modern Control Layout with Grid Fallback */\r\n#wtr-config-panel .wtr-config-controls {\r\n    display: flex;\r\n    gap: var(--panel-spacing-sm);\r\n    align-items: center;\r\n    flex-wrap: wrap;\r\n}\r\n\r\n#wtr-config-panel .wtr-config-controls.font-controls {\r\n    flex-wrap: nowrap;\r\n    display: grid;\r\n    grid-template-columns: 1fr;\r\n    gap: var(--panel-spacing-sm);\r\n}\r\n\r\n#wtr-config-panel .wtr-config-controls.checkbox-control {\r\n    justify-content: flex-start;\r\n    cursor: pointer;\r\n    padding: var(--panel-spacing-sm) 0;\r\n    display: grid;\r\n    grid-template-columns: auto 1fr;\r\n    gap: var(--panel-spacing-sm);\r\n    cursor: pointer;\r\n}\r\n\r\n#wtr-config-panel .wtr-config-controls.checkbox-control label {\r\n    user-select: none;\r\n}\r\n\r\n#wtr-config-panel .wtr-config-controls.checkbox-control input {\r\n    margin-right: var(--panel-spacing-sm);\r\n}\r\n\r\n/* Enhanced Form Controls with Touch Optimization */\r\n#wtr-config-panel input[type=\"number\"],\r\n#wtr-config-panel select {\r\n    flex-grow: 1;\r\n    min-width: 100px;\r\n    min-height: 44px; /* Touch target size */\r\n    text-align: center;\r\n    background: var(--panel-bg-secondary);\r\n    color: var(--panel-text-primary);\r\n    border: 1px solid var(--panel-border);\r\n    border-radius: var(--panel-radius-md);\r\n    padding: var(--panel-spacing-sm) var(--panel-spacing-md);\r\n    font-family: var(--panel-font-family);\r\n    font-size: var(--panel-font-size-sm);\r\n    \r\n    /* Performance */\r\n    contain: layout style;\r\n}\r\n\r\n#wtr-config-panel select:disabled {\r\n    background: var(--panel-bg-secondary);\r\n    color: var(--panel-text-secondary);\r\n    cursor: not-allowed;\r\n}\r\n\r\n/* Modern Button Layout */\r\n#wtr-config-panel .wtr-button-group {\r\n    display: grid;\r\n    grid-auto-flow: column;\r\n    gap: var(--panel-spacing-sm);\r\n    justify-content: end;\r\n    flex-shrink: 0;\r\n}\r\n\r\n/* Enhanced Button Styling with Motion Controls */\r\n#wtr-config-panel .wtr-config-button {\r\n    min-height: 44px; /* iOS guideline */\r\n    min-width: 44px;\r\n    padding: var(--panel-spacing-sm) var(--panel-spacing-md);\r\n    border: none;\r\n    border-radius: var(--panel-radius-md);\r\n    cursor: pointer;\r\n    background-color: var(--panel-accent);\r\n    color: white;\r\n    font-weight: var(--panel-font-weight-bold);\r\n    font-size: var(--panel-font-size-sm);\r\n    flex-shrink: 0;\r\n    transition: background-color var(--panel-transition-fast),\r\n                transform var(--panel-transition-fast);\r\n    \r\n    /* Touch optimization */\r\n    touch-action: manipulation;\r\n    -webkit-tap-highlight-color: transparent;\r\n    \r\n    /* Performance */\r\n    contain: layout style paint;\r\n    will-change: transform;\r\n    transform: translateZ(0);\r\n}\r\n\r\n#wtr-config-panel .wtr-config-button:hover,\r\n#wtr-config-panel .wtr-config-button:focus-visible {\r\n    background-color: var(--panel-accent-hover);\r\n    transform: translateY(-1px);\r\n}\r\n\r\n#wtr-config-panel .wtr-config-button:active {\r\n    transform: translateY(0);\r\n}\r\n\r\n#wtr-config-panel .wtr-config-button:disabled {\r\n    background-color: var(--panel-text-secondary);\r\n    cursor: not-allowed;\r\n    transform: none;\r\n}\r\n\r\n#wtr-config-panel .wtr-config-button.control {\r\n    width: 44px;\r\n    aspect-ratio: 1;\r\n}\r\n\r\n#wtr-config-panel .wtr-config-button.reset {\r\n    background-color: var(--panel-danger);\r\n}\r\n\r\n#wtr-config-panel #wtr-config-close-btn {\r\n    background-color: var(--panel-text-secondary);\r\n    align-self: center;\r\n    width: 100px;\r\n    flex-shrink: 0;\r\n}\r\n\r\n/* Enhanced Typography */\r\n#wtr-config-panel .wtr-section-title {\r\n    font-weight: var(--panel-font-weight-medium);\r\n    text-align: center;\r\n    margin-bottom: var(--panel-spacing-sm);\r\n    display: block;\r\n    font-size: var(--panel-font-size-lg);\r\n    color: var(--panel-text-primary);\r\n}\r\n\r\n#wtr-config-panel .wtr-subsection-title {\r\n    font-weight: var(--panel-font-weight-medium);\r\n    text-align: left;\r\n    margin-top: var(--panel-spacing-lg);\r\n    display: block;\r\n    border-top: 1px solid var(--panel-border);\r\n    padding-top: var(--panel-spacing-lg);\r\n    color: var(--panel-text-primary);\r\n}\r\n\r\n/* Enhanced Button Hide Controls Layout */\r\n#wtr-config-panel .wtr-button-hide-controls {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: var(--panel-spacing-md);\r\n    justify-content: flex-start;\r\n}\r\n\r\n#wtr-config-panel .icon-checkbox label {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: var(--panel-spacing-sm);\r\n}\r\n\r\n#wtr-config-panel .icon-checkbox svg {\r\n    width: 20px;\r\n    height: 20px;\r\n    stroke: currentColor;\r\n    fill: none;\r\n}\r\n\r\n#wtr-config-panel .icon-checkbox svg:has(use[href*=\"text_fields\"], use[href*=\"tts\"], use[href*=\"list\"]) {\r\n    fill: currentColor;\r\n    stroke: none;\r\n}\r\n\r\n/* Width Controls Grouping - Responsive Layout */\r\n#wtr-config-panel .wtr-width-controls-group {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: var(--panel-spacing-lg);\r\n    width: 100%;\r\n}\r\n\r\n#wtr-config-panel .wtr-width-control-item {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: var(--panel-spacing-sm);\r\n    width: 100%;\r\n}\r\n\r\n#wtr-config-panel .wtr-width-label {\r\n    font-weight: var(--panel-font-weight-medium);\r\n    color: var(--panel-text-primary);\r\n    text-align: left;\r\n    margin-bottom: var(--panel-spacing-xs);\r\n}\r\n\r\n#wtr-config-panel .wtr-config-controls.width-controls {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: var(--panel-spacing-sm);\r\n    flex-wrap: nowrap;\r\n    width: 100%;\r\n}\r\n\r\n#wtr-config-panel .wtr-width-input {\r\n    flex: 1;\r\n    min-width: 80px;\r\n    text-align: center;\r\n    /* Grow to fill available space */\r\n    max-width: none;\r\n}\r\n\r\n/* Motion Preference Handling - WCAG 2.2/2.3 Compliance */\r\n@media (prefers-reduced-motion: reduce) {\r\n    #wtr-config-overlay,\r\n    #wtr-config-panel,\r\n    .wtr-config-button {\r\n        transition: none !important;\r\n        animation: none !important;\r\n        transform: none !important;\r\n    }\r\n}\r\n\r\n/* Enable motion for users who haven't disabled it */\r\n@supports not (prefers-reduced-motion: reduce) {\r\n    #wtr-config-panel {\r\n        transition: transform var(--panel-transition-normal) var(--panel-timing-function),\r\n                   opacity var(--panel-transition-normal) ease;\r\n        transform: scale(0.95);\r\n    }\r\n    \r\n    #wtr-config-panel.visible {\r\n        transform: scale(1);\r\n    }\r\n}\r\n\r\n/* Container Query Responsive Design */\r\n@container wtr-panel (max-width: 480px) {\r\n    #wtr-config-panel {\r\n        width: 95%;\r\n        padding: var(--panel-spacing-lg);\r\n    }\r\n    \r\n    .wtr-config-controls {\r\n        flex-direction: column;\r\n        gap: var(--panel-spacing-xs);\r\n    }\r\n    \r\n    .wtr-config-controls.font-controls {\r\n        flex-direction: column;\r\n        align-items: stretch;\r\n    }\r\n    \r\n    .wtr-button-group {\r\n        margin-left: 0;\r\n        justify-content: center;\r\n        grid-auto-flow: row;\r\n    }\r\n    \r\n    .wtr-button-hide-controls {\r\n        grid-template-columns: 1fr;\r\n        gap: var(--panel-spacing-sm);\r\n    }\r\n    \r\n    /* Width controls maintain grouping but stack on small screens */\r\n    .wtr-width-controls-group {\r\n        gap: var(--panel-spacing-md);\r\n    }\r\n    \r\n    .wtr-width-control-item {\r\n        width: 100%;\r\n    }\r\n    \r\n    .wtr-config-controls.width-controls {\r\n        width: 100%;\r\n    }\r\n    \r\n    .wtr-width-input {\r\n        min-width: 70px;\r\n        flex: 1;\r\n    }\r\n}\r\n\r\n@container wtr-panel (max-width: 360px) {\r\n    #wtr-config-panel {\r\n        width: 98%;\r\n        margin: var(--panel-spacing-md);\r\n        padding: var(--panel-spacing-md);\r\n    }\r\n    \r\n    .wtr-config-section {\r\n        padding: var(--panel-spacing-md);\r\n    }\r\n    \r\n    .wtr-config-button {\r\n        min-width: 40px;\r\n    }\r\n    \r\n    /* Extra small screens - ensure width controls stay in single column */\r\n    .wtr-width-controls-group {\r\n        gap: var(--panel-spacing-sm);\r\n    }\r\n    \r\n    .wtr-width-control-item {\r\n        width: 100%;\r\n    }\r\n    \r\n    .wtr-config-controls.width-controls {\r\n        flex-wrap: wrap;\r\n        gap: var(--panel-spacing-xs);\r\n    }\r\n    \r\n    .wtr-width-input {\r\n        min-width: 60px;\r\n        flex: 1;\r\n    }\r\n}\r\n\r\n/* Grid Layout Fallbacks */\r\n@supports not (display: grid) {\r\n    .wtr-config-controls {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n    }\r\n    \r\n    .wtr-button-group {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n    }\r\n    \r\n    .wtr-button-hide-controls {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n    }\r\n    \r\n    /* Width controls fallback - ensure they stay in single column */\r\n    .wtr-width-controls-group {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: var(--panel-spacing-md);\r\n    }\r\n    \r\n    .wtr-width-control-item {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: var(--panel-spacing-sm);\r\n        width: 100%;\r\n    }\r\n    \r\n    .wtr-config-controls.width-controls {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: var(--panel-spacing-sm);\r\n        width: 100%;\r\n    }\r\n}\r\n\r\n/* Container Queries Fallback */\r\n@supports not (container-type: inline-size) {\r\n    #wtr-config-container {\r\n        /* Fallback - styles remain as above for viewport-based responsiveness */\r\n    }\r\n    \r\n    /* Legacy media queries as fallback */\r\n    @media (max-width: 480px) {\r\n        #wtr-config-panel {\r\n            width: 95%;\r\n            padding: var(--panel-spacing-lg);\r\n        }\r\n        \r\n        .wtr-config-controls {\r\n            flex-direction: column;\r\n            gap: var(--panel-spacing-xs);\r\n        }\r\n        \r\n        /* Width controls fallback for legacy browsers */\r\n        .wtr-width-controls-group {\r\n            gap: var(--panel-spacing-md);\r\n        }\r\n        \r\n        .wtr-width-control-item {\r\n            width: 100%;\r\n        }\r\n        \r\n        .wtr-config-controls.width-controls {\r\n            width: 100%;\r\n        }\r\n        \r\n        .wtr-width-input {\r\n            min-width: 70px;\r\n            flex: 1;\r\n        }\r\n    }\r\n    \r\n    /* Extra small screens fallback */\r\n    @media (max-width: 360px) {\r\n        .wtr-width-controls-group {\r\n            gap: var(--panel-spacing-sm);\r\n        }\r\n        \r\n        .wtr-config-controls.width-controls {\r\n            flex-wrap: wrap;\r\n            gap: var(--panel-spacing-xs);\r\n        }\r\n        \r\n        .wtr-width-input {\r\n            min-width: 60px;\r\n            flex: 1;\r\n        }\r\n    }\r\n}\r\n\r\n/* Backdrop Filter Fallback */\r\n@supports not (backdrop-filter: blur(1px)) {\r\n    #wtr-config-overlay {\r\n        background-color: rgba(0, 0, 0, 0.8);\r\n    }\r\n}\r\n\r\n/* Touch-specific enhancements */\r\n@media (hover: none) and (pointer: coarse) {\r\n    .wtr-config-button {\r\n        min-height: 48px;\r\n        padding: var(--panel-spacing-md) var(--panel-spacing-lg);\r\n        font-size: var(--panel-font-size-md);\r\n    }\r\n    \r\n    .wtr-config-controls input[type=\"number\"],\r\n    .wtr-config-controls select {\r\n        min-height: 48px;\r\n        font-size: var(--panel-font-size-md);\r\n    }\r\n}"],"sourceRoot":""}]);
// Exports
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);


/***/ }),

/***/ "./node_modules/css-loader/dist/runtime/api.js":
/*!*****************************************************!*\
  !*** ./node_modules/css-loader/dist/runtime/api.js ***!
  \*****************************************************/
/***/ ((module) => {



/*
  MIT License http://www.opensource.org/licenses/mit-license.php
  Author Tobias Koppers @sokra
*/
module.exports = function (cssWithMappingToString) {
  var list = [];

  // return the list of modules as css string
  list.toString = function toString() {
    return this.map(function (item) {
      var content = "";
      var needLayer = typeof item[5] !== "undefined";
      if (item[4]) {
        content += "@supports (".concat(item[4], ") {");
      }
      if (item[2]) {
        content += "@media ".concat(item[2], " {");
      }
      if (needLayer) {
        content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
      }
      content += cssWithMappingToString(item);
      if (needLayer) {
        content += "}";
      }
      if (item[2]) {
        content += "}";
      }
      if (item[4]) {
        content += "}";
      }
      return content;
    }).join("");
  };

  // import a list of modules into the list
  list.i = function i(modules, media, dedupe, supports, layer) {
    if (typeof modules === "string") {
      modules = [[null, modules, undefined]];
    }
    var alreadyImportedModules = {};
    if (dedupe) {
      for (var k = 0; k < this.length; k++) {
        var id = this[k][0];
        if (id != null) {
          alreadyImportedModules[id] = true;
        }
      }
    }
    for (var _k = 0; _k < modules.length; _k++) {
      var item = [].concat(modules[_k]);
      if (dedupe && alreadyImportedModules[item[0]]) {
        continue;
      }
      if (typeof layer !== "undefined") {
        if (typeof item[5] === "undefined") {
          item[5] = layer;
        } else {
          item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
          item[5] = layer;
        }
      }
      if (media) {
        if (!item[2]) {
          item[2] = media;
        } else {
          item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
          item[2] = media;
        }
      }
      if (supports) {
        if (!item[4]) {
          item[4] = "".concat(supports);
        } else {
          item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
          item[4] = supports;
        }
      }
      list.push(item);
    }
  };
  return list;
};

/***/ }),

/***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js":
/*!************************************************************!*\
  !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***!
  \************************************************************/
/***/ ((module) => {



module.exports = function (item) {
  var content = item[1];
  var cssMapping = item[3];
  if (!cssMapping) {
    return content;
  }
  if (typeof btoa === "function") {
    var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
    var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
    var sourceMapping = "/*# ".concat(data, " */");
    return [content].concat([sourceMapping]).join("\n");
  }
  return [content].join("\n");
};

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
/*!****************************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
  \****************************************************************************/
/***/ ((module) => {



var stylesInDOM = [];
function getIndexByIdentifier(identifier) {
  var result = -1;
  for (var i = 0; i < stylesInDOM.length; i++) {
    if (stylesInDOM[i].identifier === identifier) {
      result = i;
      break;
    }
  }
  return result;
}
function modulesToDom(list, options) {
  var idCountMap = {};
  var identifiers = [];
  for (var i = 0; i < list.length; i++) {
    var item = list[i];
    var id = options.base ? item[0] + options.base : item[0];
    var count = idCountMap[id] || 0;
    var identifier = "".concat(id, " ").concat(count);
    idCountMap[id] = count + 1;
    var indexByIdentifier = getIndexByIdentifier(identifier);
    var obj = {
      css: item[1],
      media: item[2],
      sourceMap: item[3],
      supports: item[4],
      layer: item[5]
    };
    if (indexByIdentifier !== -1) {
      stylesInDOM[indexByIdentifier].references++;
      stylesInDOM[indexByIdentifier].updater(obj);
    } else {
      var updater = addElementStyle(obj, options);
      options.byIndex = i;
      stylesInDOM.splice(i, 0, {
        identifier: identifier,
        updater: updater,
        references: 1
      });
    }
    identifiers.push(identifier);
  }
  return identifiers;
}
function addElementStyle(obj, options) {
  var api = options.domAPI(options);
  api.update(obj);
  var updater = function updater(newObj) {
    if (newObj) {
      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
        return;
      }
      api.update(obj = newObj);
    } else {
      api.remove();
    }
  };
  return updater;
}
module.exports = function (list, options) {
  options = options || {};
  list = list || [];
  var lastIdentifiers = modulesToDom(list, options);
  return function update(newList) {
    newList = newList || [];
    for (var i = 0; i < lastIdentifiers.length; i++) {
      var identifier = lastIdentifiers[i];
      var index = getIndexByIdentifier(identifier);
      stylesInDOM[index].references--;
    }
    var newLastIdentifiers = modulesToDom(newList, options);
    for (var _i = 0; _i < lastIdentifiers.length; _i++) {
      var _identifier = lastIdentifiers[_i];
      var _index = getIndexByIdentifier(_identifier);
      if (stylesInDOM[_index].references === 0) {
        stylesInDOM[_index].updater();
        stylesInDOM.splice(_index, 1);
      }
    }
    lastIdentifiers = newLastIdentifiers;
  };
};

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js":
/*!********************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***!
  \********************************************************************/
/***/ ((module) => {



var memo = {};

/* istanbul ignore next  */
function getTarget(target) {
  if (typeof memo[target] === "undefined") {
    var styleTarget = document.querySelector(target);

    // Special case to return head of iframe instead of iframe itself
    if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
      try {
        // This will throw an exception if access to iframe is blocked
        // due to cross-origin restrictions
        styleTarget = styleTarget.contentDocument.head;
      } catch (e) {
        // istanbul ignore next
        styleTarget = null;
      }
    }
    memo[target] = styleTarget;
  }
  return memo[target];
}

/* istanbul ignore next  */
function insertBySelector(insert, style) {
  var target = getTarget(insert);
  if (!target) {
    throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
  }
  target.appendChild(style);
}
module.exports = insertBySelector;

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js":
/*!**********************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
  \**********************************************************************/
/***/ ((module) => {



/* istanbul ignore next  */
function insertStyleElement(options) {
  var element = document.createElement("style");
  options.setAttributes(element, options.attributes);
  options.insert(element, options.options);
  return element;
}
module.exports = insertStyleElement;

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
  \**********************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {



/* istanbul ignore next  */
function setAttributesWithoutAttributes(styleElement) {
  var nonce =  true ? __webpack_require__.nc : 0;
  if (nonce) {
    styleElement.setAttribute("nonce", nonce);
  }
}
module.exports = setAttributesWithoutAttributes;

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js":
/*!***************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
  \***************************************************************/
/***/ ((module) => {



/* istanbul ignore next  */
function apply(styleElement, options, obj) {
  var css = "";
  if (obj.supports) {
    css += "@supports (".concat(obj.supports, ") {");
  }
  if (obj.media) {
    css += "@media ".concat(obj.media, " {");
  }
  var needLayer = typeof obj.layer !== "undefined";
  if (needLayer) {
    css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
  }
  css += obj.css;
  if (needLayer) {
    css += "}";
  }
  if (obj.media) {
    css += "}";
  }
  if (obj.supports) {
    css += "}";
  }
  var sourceMap = obj.sourceMap;
  if (sourceMap && typeof btoa !== "undefined") {
    css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
  }

  // For old IE
  /* istanbul ignore if  */
  options.styleTagTransform(css, styleElement, options.options);
}
function removeStyleElement(styleElement) {
  // istanbul ignore if
  if (styleElement.parentNode === null) {
    return false;
  }
  styleElement.parentNode.removeChild(styleElement);
}

/* istanbul ignore next  */
function domAPI(options) {
  if (typeof document === "undefined") {
    return {
      update: function update() {},
      remove: function remove() {}
    };
  }
  var styleElement = options.insertStyleElement(options);
  return {
    update: function update(obj) {
      apply(styleElement, options, obj);
    },
    remove: function remove() {
      removeStyleElement(styleElement);
    }
  };
}
module.exports = domAPI;

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js":
/*!*********************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
  \*********************************************************************/
/***/ ((module) => {



/* istanbul ignore next  */
function styleTagTransform(css, styleElement) {
  if (styleElement.styleSheet) {
    styleElement.styleSheet.cssText = css;
  } else {
    while (styleElement.firstChild) {
      styleElement.removeChild(styleElement.firstChild);
    }
    styleElement.appendChild(document.createTextNode(css));
  }
}
module.exports = styleTagTransform;

/***/ }),

/***/ "./src/modules/config.js":
/*!*******************************!*\
  !*** ./src/modules/config.js ***!
  \*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   DEBUG_KEY: () => (/* binding */ DEBUG_KEY),
/* harmony export */   FONTS_API_URL: () => (/* binding */ FONTS_API_URL),
/* harmony export */   MIN_WIDTH: () => (/* binding */ MIN_WIDTH),
/* harmony export */   RECOMMENDED_FONTS: () => (/* binding */ RECOMMENDED_FONTS),
/* harmony export */   STEP_WIDTH: () => (/* binding */ STEP_WIDTH),
/* harmony export */   configs: () => (/* binding */ configs)
/* harmony export */ });
const DEBUG_KEY = "wtr_lab_enhancer_debug";
const STEP_WIDTH = 50;
const MIN_WIDTH = 300;
const FONTS_API_URL = "https://gwfh.mranftl.com/api/fonts";
const RECOMMENDED_FONTS = {
  serif: ["Merriweather", "Lora", "Crimson Text", "Libre Baskerville", "Spectral", "EB Garamond", "Noto Serif"],
  sansSerif: ["Roboto", "Open Sans", "Source Sans Pro"]
};
const configs = {
  reader: {
    key: "wtr_lab_reader_width",
    selector: ".fix-size.card",
    defaultWidth: 760,
    label: "Reader Content Width"
  },
  nav: {
    key: "wtr_lab_nav_width",
    selector: "nav.bottom-reader-nav .fix-size",
    defaultWidth: 760,
    label: "Bottom Navigator Width"
  },
  navConstraint: {
    key: "wtr_lab_nav_constraint",
    selector: "nav.bottom-reader-nav",
    defaultState: false,
    label: "Constrain Navigator Background"
  },
  fontToggle: {
    key: "wtr_lab_font_style_enabled",
    defaultState: false,
    label: "Enable Custom Font Style"
  },
  font: {
    key: "wtr_lab_font_family",
    selector: ".chapter-body",
    defaultFont: "Merriweather",
    label: "Font Style"
  },
  blockAddTerm: {
    key: "wtr_lab_block_add_term",
    selector: ".floating-add-term-btn",
    defaultState: false,
    label: 'Block "Add Term" Button'
  },
  hideBookBtn: {
    key: "wtr_lab_hide_book_btn",
    selector: 'div.btn-group button.wtr:has(svg use[href*="book"])',
    defaultState: false,
    label: "Book",
    iconHTML: '<svg><use href="/icons/sprite_cd1f90d7.svg#book"></use></svg>'
  },
  hideTextFieldsBtn: {
    key: "wtr_lab_hide_text_fields_btn",
    selector: 'div.btn-group button.wtr:has(svg use[href*="text_fields"])',
    defaultState: false,
    label: "Text",
    iconHTML: '<svg><use href="/icons/sprite_cd1f90d7.svg#text_fields"></use></svg>'
  },
  hideTtsBtn: {
    key: "wtr_lab_hide_tts_btn",
    selector: 'div.btn-group button.wtr:has(svg use[href*="tts"])',
    defaultState: false,
    label: "TTS",
    iconHTML: '<svg><use href="/icons/sprite_cd1f90d7.svg#tts"></use></svg>'
  },
  hideCogBtn: {
    key: "wtr_lab_hide_cog_btn",
    selector: 'div.btn-group button.wtr:has(svg use[href*="cog-outline"])',
    defaultState: false,
    label: "Settings",
    iconHTML: '<svg><use href="/icons/sprite_cd1f90d7.svg#cog-outline"></use></svg>'
  },
  hideListBtn: {
    key: "wtr_lab_hide_list_btn",
    selector: 'div.btn-group button.wtr:has(svg use[href*="list"])',
    defaultState: false,
    label: "List",
    iconHTML: '<svg><use href="/icons/sprite_cd1f90d7.svg#list"></use></svg>'
  },
  debug: {
    key: DEBUG_KEY,
    defaultState: false,
    label: "Enable Debug Logging"
  }
};

/***/ }),

/***/ "./src/modules/features.js":
/*!*********************************!*\
  !*** ./src/modules/features.js ***!
  \*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   detectCSSFeatures: () => (/* binding */ detectCSSFeatures),
/* harmony export */   initializeBackdropEffects: () => (/* binding */ initializeBackdropEffects),
/* harmony export */   initializeContainerQueryResponsive: () => (/* binding */ initializeContainerQueryResponsive),
/* harmony export */   initializeGridLayouts: () => (/* binding */ initializeGridLayouts),
/* harmony export */   initializeModernFeatures: () => (/* binding */ initializeModernFeatures),
/* harmony export */   initializeTouchOptimizations: () => (/* binding */ initializeTouchOptimizations)
/* harmony export */ });
/* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./logger.js */ "./src/modules/logger.js");

const detectCSSFeatures = () => {
  const features = {
    containerQueries: CSS.supports('container-type: inline-size'),
    grid: CSS.supports('display: grid'),
    backdropFilter: CSS.supports('backdrop-filter: blur(1px)'),
    customProperties: CSS.supports('--custom: 0'),
    motionPreferences: window.matchMedia('(prefers-reduced-motion: reduce)'),
    touchDevice: 'ontouchstart' in window || navigator.maxTouchPoints > 0,
    reducedMotion: window.matchMedia('(prefers-reduced-motion: reduce)').matches
  };
  (0,_logger_js__WEBPACK_IMPORTED_MODULE_0__.log)('CSS Feature Detection:', features);
  return features;
};
const initializeModernFeatures = () => {
  const features = detectCSSFeatures();

  // Add feature flags to the document for CSS fallbacks
  document.documentElement.setAttribute('data-container-queries', features.containerQueries);
  document.documentElement.setAttribute('data-grid', features.grid);
  document.documentElement.setAttribute('data-backdrop-filter', features.backdropFilter);
  document.documentElement.setAttribute('data-touch-device', features.touchDevice);

  // Initialize modern features if supported
  if (features.containerQueries) {
    (0,_logger_js__WEBPACK_IMPORTED_MODULE_0__.log)('Container queries supported - enabling responsive container design');
    initializeContainerQueryResponsive();
  }
  if (features.grid) {
    (0,_logger_js__WEBPACK_IMPORTED_MODULE_0__.log)('CSS Grid supported - enabling modern grid layouts');
    initializeGridLayouts();
  }
  if (features.backdropFilter) {
    (0,_logger_js__WEBPACK_IMPORTED_MODULE_0__.log)('Backdrop filter supported - enabling blur effects');
    initializeBackdropEffects();
  }
  if (features.touchDevice) {
    (0,_logger_js__WEBPACK_IMPORTED_MODULE_0__.log)('Touch device detected - optimizing for touch interactions');
    initializeTouchOptimizations();
  }

  // Set up motion preference listeners
  features.motionPreferences.addEventListener('change', e => {
    const isReducedMotion = e.matches;
    document.documentElement.setAttribute('data-reduced-motion', isReducedMotion);
    (0,_logger_js__WEBPACK_IMPORTED_MODULE_0__.log)(`Motion preference changed: ${isReducedMotion ? 'Reduce motion' : 'Allow motion'}`);
  });

  // Set initial motion preference
  document.documentElement.setAttribute('data-reduced-motion', features.reducedMotion);
};
const initializeContainerQueryResponsive = () => {
  const container = document.getElementById('wtr-config-container');
  if (container) {
    container.classList.add('wtr-container-responsive');
  }
};
const initializeGridLayouts = () => {
  const controls = document.querySelectorAll('.wtr-config-controls');
  controls.forEach(control => {
    control.classList.add('wtr-grid-enabled');
  });
};
const initializeBackdropEffects = () => {
  const overlay = document.getElementById('wtr-config-overlay');
  if (overlay) {
    overlay.classList.add('wtr-backdrop-filter');
  }
};
const initializeTouchOptimizations = () => {
  const buttons = document.querySelectorAll('.wtr-config-button');
  buttons.forEach(button => {
    button.classList.add('wtr-touch-optimized');
  });
  const inputs = document.querySelectorAll('input[type="number"], select');
  inputs.forEach(input => {
    input.classList.add('wtr-touch-optimized');
  });
};

/***/ }),

/***/ "./src/modules/fontManager.js":
/*!************************************!*\
  !*** ./src/modules/fontManager.js ***!
  \************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   applyFontStyle: () => (/* binding */ applyFontStyle),
/* harmony export */   fetchFonts: () => (/* binding */ fetchFonts),
/* harmony export */   getFallbackFonts: () => (/* binding */ getFallbackFonts),
/* harmony export */   populateFontDropdown: () => (/* binding */ populateFontDropdown)
/* harmony export */ });
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config.js */ "./src/modules/config.js");
/* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger.js */ "./src/modules/logger.js");
/* harmony import */ var _styles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./styles.js */ "./src/modules/styles.js");



const loadValue = (key, defaultValue) => GM_getValue(key, defaultValue);
const getFallbackFonts = () => ({
  recommendedSerif: _config_js__WEBPACK_IMPORTED_MODULE_0__.RECOMMENDED_FONTS.serif,
  recommendedSansSerif: _config_js__WEBPACK_IMPORTED_MODULE_0__.RECOMMENDED_FONTS.sansSerif,
  other: ["Georgia", "Times New Roman", "Arial", "Verdana"]
});
const fetchFonts = () => new Promise(resolve => GM_xmlhttpRequest({
  method: "GET",
  url: _config_js__WEBPACK_IMPORTED_MODULE_0__.FONTS_API_URL,
  onload: r => {
    try {
      const d = JSON.parse(r.responseText);
      const rec = [..._config_js__WEBPACK_IMPORTED_MODULE_0__.RECOMMENDED_FONTS.serif, ..._config_js__WEBPACK_IMPORTED_MODULE_0__.RECOMMENDED_FONTS.sansSerif];
      resolve({
        recommendedSerif: _config_js__WEBPACK_IMPORTED_MODULE_0__.RECOMMENDED_FONTS.serif,
        recommendedSansSerif: _config_js__WEBPACK_IMPORTED_MODULE_0__.RECOMMENDED_FONTS.sansSerif,
        other: d.map(f => f.family).filter(f => !rec.includes(f)).sort()
      });
    } catch (e) {
      resolve(getFallbackFonts());
    }
  },
  onerror: () => resolve(getFallbackFonts())
}));
const applyFontStyle = fontFamily => {
  const isEnabled = loadValue(_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.fontToggle.key, _config_js__WEBPACK_IMPORTED_MODULE_0__.configs.fontToggle.defaultState);
  if (!isEnabled) {
    (0,_styles_js__WEBPACK_IMPORTED_MODULE_2__.removeFontStyle)();
    return;
  }
  (0,_logger_js__WEBPACK_IMPORTED_MODULE_1__.log)(`Applying font: ${fontFamily}`);
  const primaryFont = fontFamily.split(",")[0].trim();
  const styleId = "custom-font-styler";
  let styleElement = document.getElementById(styleId);
  if (!styleElement) {
    styleElement = document.createElement("style");
    styleElement.id = styleId;
    document.head.appendChild(styleElement);
  }
  const fontUrl = `https://fonts.googleapis.com/css2?family=${encodeURIComponent(primaryFont)}&display=swap`;
  let linkElement = document.getElementById("userscript-font-link");
  if (!linkElement) {
    linkElement = document.createElement("link");
    linkElement.id = "userscript-font-link";
    linkElement.rel = "stylesheet";
    document.head.appendChild(linkElement);
  }
  linkElement.href = fontUrl;
  styleElement.textContent = `${_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.font.selector} { font-family: "${primaryFont}", serif, sans-serif !important; }`;
};
const populateFontDropdown = async (initialFontGroups = null) => {
  const fontSelect = document.getElementById("wtr-font-select");
  if (!fontSelect) return;
  const currentFont = loadValue(_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.font.key, _config_js__WEBPACK_IMPORTED_MODULE_0__.configs.font.defaultFont);
  fontSelect.innerHTML = "";
  const fontGroups = initialFontGroups || (await fetchFonts());
  const groupLabels = {
    recommendedSerif: "Recommended (Serif)",
    recommendedSansSerif: "Recommended (Sans-serif)",
    other: "All Other Fonts"
  };
  for (const groupKey in fontGroups) {
    if (fontGroups[groupKey].length === 0) continue;
    const optgroup = document.createElement("optgroup");
    optgroup.label = groupLabels[groupKey] || "Fonts";
    fontGroups[groupKey].forEach(font => {
      const option = document.createElement("option");
      option.value = font;
      option.textContent = font;
      optgroup.appendChild(option);
    });
    fontSelect.appendChild(optgroup);
  }
  fontSelect.value = Object.values(fontGroups).flat().includes(currentFont) ? currentFont : _config_js__WEBPACK_IMPORTED_MODULE_0__.configs.font.defaultFont;
};


/***/ }),

/***/ "./src/modules/logger.js":
/*!*******************************!*\
  !*** ./src/modules/logger.js ***!
  \*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   log: () => (/* binding */ log),
/* harmony export */   syncDebugState: () => (/* binding */ syncDebugState),
/* harmony export */   toggleDebugLogging: () => (/* binding */ toggleDebugLogging)
/* harmony export */ });
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config.js */ "./src/modules/config.js");

let isDebugEnabled = GM_getValue(_config_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_KEY, false);
const syncDebugState = () => {
  isDebugEnabled = GM_getValue(_config_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_KEY, false);
};
const log = (...args) => {
  if (isDebugEnabled) console.log("[WTR-Lab Enhancer]", ...args);
};
const toggleDebugLogging = () => {
  isDebugEnabled = !isDebugEnabled;
  GM_setValue(_config_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_KEY, isDebugEnabled);
  alert(`Debug logging is now ${isDebugEnabled ? "ENABLED" : "DISABLED"}.`);
};

/***/ }),

/***/ "./src/modules/styles.js":
/*!*******************************!*\
  !*** ./src/modules/styles.js ***!
  \*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   applyWidthStyle: () => (/* binding */ applyWidthStyle),
/* harmony export */   removeFontStyle: () => (/* binding */ removeFontStyle),
/* harmony export */   updateBlockAddTerm: () => (/* binding */ updateBlockAddTerm),
/* harmony export */   updateButtonVisibilityStyles: () => (/* binding */ updateButtonVisibilityStyles),
/* harmony export */   updateNavConstraint: () => (/* binding */ updateNavConstraint)
/* harmony export */ });
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config.js */ "./src/modules/config.js");

const loadValue = (key, defaultValue) => GM_getValue(key, defaultValue);
const applyWidthStyle = (configName, width) => {
  const styleId = `custom-width-styler-${configName}`;
  let styleElement = document.getElementById(styleId);
  if (!styleElement) {
    styleElement = document.createElement("style");
    styleElement.id = styleId;
    document.head.appendChild(styleElement);
  }
  styleElement.textContent = `${_config_js__WEBPACK_IMPORTED_MODULE_0__.configs[configName].selector} { max-width: ${width}px !important; }`;
};
const updateNavConstraint = () => {
  const isConstrained = loadValue(_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.navConstraint.key, _config_js__WEBPACK_IMPORTED_MODULE_0__.configs.navConstraint.defaultState);
  const styleId = 'custom-nav-constraint-styler';
  let styleElement = document.getElementById(styleId);
  if (isConstrained) {
    if (!styleElement) {
      styleElement = document.createElement('style');
      styleElement.id = styleId;
      document.head.appendChild(styleElement);
    }
    const navContentWidth = loadValue(_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.nav.key, _config_js__WEBPACK_IMPORTED_MODULE_0__.configs.nav.defaultWidth);
    const marginValue = Math.max(0, (window.innerWidth - navContentWidth) / 2);
    styleElement.textContent = `${_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.navConstraint.selector} { margin-left: ${marginValue}px !important; margin-right: ${marginValue}px !important; }`;
  } else if (styleElement) {
    styleElement.remove();
  }
};
const updateBlockAddTerm = () => {
  const isBlocked = loadValue(_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.blockAddTerm.key, _config_js__WEBPACK_IMPORTED_MODULE_0__.configs.blockAddTerm.defaultState);
  const styleId = 'custom-block-add-term-styler';
  let styleElement = document.getElementById(styleId);
  if (isBlocked) {
    if (!styleElement) {
      styleElement = document.createElement('style');
      styleElement.id = styleId;
      document.head.appendChild(styleElement);
    }
    styleElement.textContent = `${_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.blockAddTerm.selector} { display: none !important; }`;
  } else if (styleElement) {
    styleElement.remove();
  }
};
const updateButtonVisibilityStyles = () => {
  const styleId = 'custom-button-visibility-styler';
  let styleElement = document.getElementById(styleId);
  const buttonConfigs = [_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.hideBookBtn, _config_js__WEBPACK_IMPORTED_MODULE_0__.configs.hideTextFieldsBtn, _config_js__WEBPACK_IMPORTED_MODULE_0__.configs.hideTtsBtn, _config_js__WEBPACK_IMPORTED_MODULE_0__.configs.hideCogBtn, _config_js__WEBPACK_IMPORTED_MODULE_0__.configs.hideListBtn];
  const selectorsToHide = buttonConfigs.filter(config => loadValue(config.key, config.defaultState)).map(config => config.selector);
  if (!styleElement && selectorsToHide.length > 0) {
    styleElement = document.createElement('style');
    styleElement.id = styleId;
    document.head.appendChild(styleElement);
  }
  if (styleElement) {
    styleElement.textContent = selectorsToHide.length > 0 ? `${selectorsToHide.join(', ')} { display: none !important; }` : '';
  }
};
const removeFontStyle = () => {
  const styleElement = document.getElementById('custom-font-styler');
  if (styleElement) styleElement.remove();
  const linkElement = document.getElementById('userscript-font-link');
  if (linkElement) linkElement.remove();
};

/***/ }),

/***/ "./src/modules/ui.js":
/*!***************************!*\
  !*** ./src/modules/ui.js ***!
  \***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   createConfigPanel: () => (/* binding */ createConfigPanel),
/* harmony export */   hideConfigPanel: () => (/* binding */ hideConfigPanel),
/* harmony export */   showConfigPanel: () => (/* binding */ showConfigPanel)
/* harmony export */ });
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config.js */ "./src/modules/config.js");
/* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger.js */ "./src/modules/logger.js");
/* harmony import */ var _styles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./styles.js */ "./src/modules/styles.js");
/* harmony import */ var _fontManager_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fontManager.js */ "./src/modules/fontManager.js");




const saveValue = (key, value) => GM_setValue(key, value);
const loadValue = (key, defaultValue) => GM_getValue(key, defaultValue);
let isDebugEnabled = GM_getValue(_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.debug.key, false);

// --- UI CONFIGURATION PANEL ---
const createConfigPanel = () => {
  const panelHTML = `<div id="wtr-config-container" class="wtr-panel-container"><div id="wtr-config-overlay" style="display: none;"><div id="wtr-config-panel"><h2>WTR-Lab Enhancer Settings</h2><div id="wtr-config-sections"></div><button id="wtr-config-close-btn" class="wtr-config-button">Close</button></div></div></div>`;
  document.body.insertAdjacentHTML("beforeend", panelHTML);
  const sectionsContainer = document.getElementById("wtr-config-sections");

  // Section 1: Layout & Sizing
  const layoutSection = document.createElement("div");
  layoutSection.className = "wtr-config-section";
  layoutSection.innerHTML = `<label class="wtr-section-title">Layout & Sizing</label>
            <div class="wtr-width-controls-group">
                <div class="wtr-width-control-item">
                    <label for="wtr-reader-width-input" class="wtr-width-label">${_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.reader.label} (px)</label>
                    <div class="wtr-config-controls width-controls">
                        <button id="wtr-reader-decrease-btn" class="wtr-config-button control">-</button>
                        <input type="number" id="wtr-reader-width-input" min="${_config_js__WEBPACK_IMPORTED_MODULE_0__.MIN_WIDTH}" step="10" class="wtr-width-input">
                        <button id="wtr-reader-increase-btn" class="wtr-config-button control">+</button>
                        <button id="wtr-reader-reset-btn" class="wtr-config-button reset">Reset</button>
                    </div>
                </div>
                <div class="wtr-width-control-item">
                    <label for="wtr-nav-width-input" class="wtr-width-label">${_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.nav.label} (px)</label>
                    <div class="wtr-config-controls width-controls">
                        <button id="wtr-nav-decrease-btn" class="wtr-config-button control">-</button>
                        <input type="number" id="wtr-nav-width-input" min="${_config_js__WEBPACK_IMPORTED_MODULE_0__.MIN_WIDTH}" step="10" class="wtr-width-input">
                        <button id="wtr-nav-increase-btn" class="wtr-config-button control">+</button>
                        <button id="wtr-nav-reset-btn" class="wtr-config-button reset">Reset</button>
                    </div>
                </div>
            </div>`;
  sectionsContainer.appendChild(layoutSection);

  // Section 2: Font Customization
  const fontSection = document.createElement("div");
  fontSection.className = "wtr-config-section";
  fontSection.innerHTML = `<label class="wtr-section-title">Font Customization</label>
            <div class="wtr-config-controls checkbox-control"><input type="checkbox" id="wtr-fontToggle-toggle"><label for="wtr-fontToggle-toggle">${_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.fontToggle.label}</label></div>
            <div class="wtr-control-group">
                <label for="wtr-font-select">${_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.font.label}</label>
                <div class="wtr-config-controls font-controls"><select id="wtr-font-select"></select></div>
                <div class="wtr-config-controls font-controls"><div class="wtr-button-group"><button id="wtr-font-refresh-btn" class="wtr-config-button">Refresh</button><button id="wtr-font-reset-btn" class="wtr-config-button reset">Reset</button></div></div>
            </div>`;
  sectionsContainer.appendChild(fontSection);

  // Section 3: Element Visibility
  const visibilitySection = document.createElement("div");
  visibilitySection.className = "wtr-config-section";
  visibilitySection.innerHTML = `<label class="wtr-section-title">Element Visibility</label>
            <div class="wtr-config-controls checkbox-control"><input type="checkbox" id="wtr-navConstraint-toggle"><label for="wtr-navConstraint-toggle">${_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.navConstraint.label}</label></div>
            <div class="wtr-config-controls checkbox-control"><input type="checkbox" id="wtr-blockAddTerm-toggle"><label for="wtr-blockAddTerm-toggle">${_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.blockAddTerm.label}</label></div>
            <div class="wtr-control-group"><label class="wtr-subsection-title">Hide Toolbar Buttons</label><div class="wtr-button-hide-controls"></div></div>`;
  const buttonControlsContainer = visibilitySection.querySelector(".wtr-button-hide-controls");
  Object.entries(_config_js__WEBPACK_IMPORTED_MODULE_0__.configs).filter(([n]) => n.startsWith("hide")).forEach(([name, config]) => {
    buttonControlsContainer.insertAdjacentHTML("beforeend", `<div class="wtr-config-controls checkbox-control icon-checkbox"><input type="checkbox" id="wtr-${name}-toggle"><label for="wtr-${name}-toggle">${config.iconHTML}<span>${config.label}</span></label></div>`);
  });
  sectionsContainer.appendChild(visibilitySection);

  // Section 4: Debug & Advanced
  const debugSection = document.createElement("div");
  debugSection.className = "wtr-config-section";
  debugSection.innerHTML = `<label class="wtr-section-title">Debug & Advanced</label>
			         <div class="wtr-config-controls checkbox-control"><input type="checkbox" id="wtr-debug-toggle"><label for="wtr-debug-toggle">Enable Debug Logging</label></div>`;
  sectionsContainer.appendChild(debugSection);
  (0,_fontManager_js__WEBPACK_IMPORTED_MODULE_3__.populateFontDropdown)((0,_fontManager_js__WEBPACK_IMPORTED_MODULE_3__.getFallbackFonts)());
  attachPanelEventListeners();
};
const attachPanelEventListeners = () => {
  document.getElementById("wtr-config-overlay").addEventListener("click", e => {
    if (e.target.id === "wtr-config-overlay") hideConfigPanel();
  });
  document.getElementById("wtr-config-close-btn").addEventListener("click", hideConfigPanel);
  const updateSetting = (configName, value) => {
    const config = _config_js__WEBPACK_IMPORTED_MODULE_0__.configs[configName];
    saveValue(config.key, value);
    if (configName === "font") {
      (0,_fontManager_js__WEBPACK_IMPORTED_MODULE_3__.applyFontStyle)(value);
      document.getElementById("wtr-font-select").value = value;
    } else if (configName === "fontToggle") {
      updateFontControlsState(value);
      (0,_fontManager_js__WEBPACK_IMPORTED_MODULE_3__.applyFontStyle)(loadValue(_config_js__WEBPACK_IMPORTED_MODULE_0__.configs.font.key, _config_js__WEBPACK_IMPORTED_MODULE_0__.configs.font.defaultFont));
    } else if (configName === "debug") {
      isDebugEnabled = value;
      GM_setValue(_config_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_KEY, isDebugEnabled);
      (0,_logger_js__WEBPACK_IMPORTED_MODULE_1__.log)(`Debug logging ${isDebugEnabled ? "ENABLED" : "DISABLED"}`);
    } else if (configName === "navConstraint") {
      (0,_styles_js__WEBPACK_IMPORTED_MODULE_2__.updateNavConstraint)();
    } else if (configName === "blockAddTerm") {
      (0,_styles_js__WEBPACK_IMPORTED_MODULE_2__.updateBlockAddTerm)();
    } else if (configName.startsWith("hide")) {
      (0,_styles_js__WEBPACK_IMPORTED_MODULE_2__.updateButtonVisibilityStyles)();
    } else {
      const validatedWidth = Math.max(_config_js__WEBPACK_IMPORTED_MODULE_0__.MIN_WIDTH, parseInt(value, 10));
      if (isNaN(validatedWidth)) return;
      (0,_styles_js__WEBPACK_IMPORTED_MODULE_2__.applyWidthStyle)(configName, validatedWidth);
      document.getElementById(`wtr-${configName}-width-input`).value = validatedWidth;
      saveValue(config.key, validatedWidth);
      if (configName === "nav") (0,_styles_js__WEBPACK_IMPORTED_MODULE_2__.updateNavConstraint)();
    }
  };
  for (const [name, config] of Object.entries(_config_js__WEBPACK_IMPORTED_MODULE_0__.configs)) {
    if (name === "font") {
      const select = document.getElementById("wtr-font-select");
      select.addEventListener("change", () => updateSetting(name, select.value));
      document.getElementById("wtr-font-reset-btn").addEventListener("click", () => updateSetting(name, config.defaultFont));
      const refreshBtn = document.getElementById("wtr-font-refresh-btn");
      refreshBtn.addEventListener("click", async () => {
        refreshBtn.textContent = "Fetching...";
        refreshBtn.disabled = true;
        await (0,_fontManager_js__WEBPACK_IMPORTED_MODULE_3__.populateFontDropdown)();
        refreshBtn.textContent = "Refresh";
        refreshBtn.disabled = false;
      });
    } else if (["fontToggle", "navConstraint", "blockAddTerm", "debug"].includes(name) || name.startsWith("hide")) {
      const toggle = document.getElementById(`wtr-${name}-toggle`);
      if (toggle) toggle.addEventListener("change", () => updateSetting(name, toggle.checked));
    } else if (["reader", "nav"].includes(name)) {
      const input = document.getElementById(`wtr-${name}-width-input`);
      document.getElementById(`wtr-${name}-increase-btn`).addEventListener("click", () => updateSetting(name, parseInt(input.value, 10) + _config_js__WEBPACK_IMPORTED_MODULE_0__.STEP_WIDTH));
      document.getElementById(`wtr-${name}-decrease-btn`).addEventListener("click", () => updateSetting(name, parseInt(input.value, 10) - _config_js__WEBPACK_IMPORTED_MODULE_0__.STEP_WIDTH));
      document.getElementById(`wtr-${name}-reset-btn`).addEventListener("click", () => updateSetting(name, config.defaultWidth));
      input.addEventListener("change", () => updateSetting(name, input.value));
    }
  }
};
const updateFontControlsState = isEnabled => {
  ["wtr-font-select", "wtr-font-refresh-btn", "wtr-font-reset-btn"].forEach(id => {
    const element = document.getElementById(id);
    if (element) element.disabled = !isEnabled;
  });
};
const showConfigPanel = () => {
  for (const [name, config] of Object.entries(_config_js__WEBPACK_IMPORTED_MODULE_0__.configs)) {
    if (name === "font") {
      document.getElementById("wtr-font-select").value = loadValue(config.key, config.defaultFont);
    } else if (name === "fontToggle") {
      const isEnabled = loadValue(config.key, config.defaultState);
      document.getElementById("wtr-fontToggle-toggle").checked = isEnabled;
      updateFontControlsState(isEnabled);
    } else if (["navConstraint", "blockAddTerm", "debug"].includes(name) || name.startsWith("hide")) {
      const toggle = document.getElementById(`wtr-${name}-toggle`);
      if (toggle) toggle.checked = loadValue(config.key, config.defaultState);
    } else if (["reader", "nav"].includes(name)) {
      document.getElementById(`wtr-${name}-width-input`).value = loadValue(config.key, config.defaultWidth);
    }
  }
  document.getElementById("wtr-config-overlay").style.display = "flex";
};
const hideConfigPanel = () => document.getElementById("wtr-config-overlay").style.display = "none";

/***/ }),

/***/ "./src/styles/panel.css":
/*!******************************!*\
  !*** ./src/styles/panel.css ***!
  \******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../node_modules/css-loader/dist/cjs.js!./panel.css */ "./node_modules/css-loader/dist/cjs.js!./src/styles/panel.css");

      
      
      
      
      
      
      
      
      

var options = {};

options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());

var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);




       /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);


/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			id: moduleId,
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/nonce */
/******/ 	(() => {
/******/ 		__webpack_require__.nc = undefined;
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.
(() => {
/*!**********************!*\
  !*** ./src/index.js ***!
  \**********************/
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _styles_panel_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./styles/panel.css */ "./src/styles/panel.css");
/* harmony import */ var _modules_config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/config.js */ "./src/modules/config.js");
/* harmony import */ var _modules_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/logger.js */ "./src/modules/logger.js");
/* harmony import */ var _modules_styles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/styles.js */ "./src/modules/styles.js");
/* harmony import */ var _modules_fontManager_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/fontManager.js */ "./src/modules/fontManager.js");
/* harmony import */ var _modules_ui_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/ui.js */ "./src/modules/ui.js");
/* harmony import */ var _modules_features_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/features.js */ "./src/modules/features.js");
// Import the panel's CSS. Webpack will inject it into the page.


// Import modules






const saveValue = (key, value) => GM_setValue(key, value);
const loadValue = (key, defaultValue) => GM_getValue(key, defaultValue);

// --- INITIALIZATION ---
const init = async () => {
  (0,_modules_logger_js__WEBPACK_IMPORTED_MODULE_2__.log)("Initializing script...");
  (0,_modules_logger_js__WEBPACK_IMPORTED_MODULE_2__.syncDebugState)();
  (0,_modules_ui_js__WEBPACK_IMPORTED_MODULE_5__.createConfigPanel)();

  // Apply initial styles
  (0,_modules_styles_js__WEBPACK_IMPORTED_MODULE_3__.applyWidthStyle)("reader", loadValue(_modules_config_js__WEBPACK_IMPORTED_MODULE_1__.configs.reader.key, _modules_config_js__WEBPACK_IMPORTED_MODULE_1__.configs.reader.defaultWidth));
  (0,_modules_styles_js__WEBPACK_IMPORTED_MODULE_3__.applyWidthStyle)("nav", loadValue(_modules_config_js__WEBPACK_IMPORTED_MODULE_1__.configs.nav.key, _modules_config_js__WEBPACK_IMPORTED_MODULE_1__.configs.nav.defaultWidth));
  (0,_modules_styles_js__WEBPACK_IMPORTED_MODULE_3__.updateNavConstraint)();
  (0,_modules_styles_js__WEBPACK_IMPORTED_MODULE_3__.updateBlockAddTerm)();
  (0,_modules_styles_js__WEBPACK_IMPORTED_MODULE_3__.updateButtonVisibilityStyles)();

  // Set up font
  const fontGroups = await (0,_modules_fontManager_js__WEBPACK_IMPORTED_MODULE_4__.fetchFonts)();
  const allAvailableFonts = Object.values(fontGroups).flat();
  let initialFont = loadValue(_modules_config_js__WEBPACK_IMPORTED_MODULE_1__.configs.font.key, _modules_config_js__WEBPACK_IMPORTED_MODULE_1__.configs.font.defaultFont);
  if (!allAvailableFonts.includes(initialFont)) {
    initialFont = _modules_config_js__WEBPACK_IMPORTED_MODULE_1__.configs.font.defaultFont;
    saveValue(_modules_config_js__WEBPACK_IMPORTED_MODULE_1__.configs.font.key, initialFont);
  }
  (0,_modules_fontManager_js__WEBPACK_IMPORTED_MODULE_4__.applyFontStyle)(initialFont);
  (0,_modules_fontManager_js__WEBPACK_IMPORTED_MODULE_4__.populateFontDropdown)(fontGroups);

  // Event Listeners & Menu Commands
  window.addEventListener("resize", _modules_styles_js__WEBPACK_IMPORTED_MODULE_3__.updateNavConstraint);
  GM_registerMenuCommand("Configure Settings", _modules_ui_js__WEBPACK_IMPORTED_MODULE_5__.showConfigPanel);

  // Progressive Enhancement
  (0,_modules_features_js__WEBPACK_IMPORTED_MODULE_6__.initializeModernFeatures)();
  (0,_modules_logger_js__WEBPACK_IMPORTED_MODULE_2__.log)("Initialization complete.");
};

// Run the script
init();
})();

/******/ })()
;
//# sourceMappingURL=wtr-lab-enhancer-greasyfork.user.js.map