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.

Instalirajte ovu skriptu?
Autorov prijedlog skripta

Možda ti se također svidi WTR LAB Novel Image Generator.

Instalirajte ovu skriptu

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==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":"AAAA,4CAA4C;AAC5C;IACI,wCAAwC;IACxC,mCAAmC;;IAEnC,2BAA2B;IAC3B,mDAAmD;IACnD,oDAAoD;IACpD,+CAA+C;IAC/C,mDAAmD;IACnD,0DAA0D;IAC1D,+CAA+C;IAC/C,0CAA0C;IAC1C,6BAA6B;IAC7B,wBAAwB;IACxB,uBAAuB;IACvB,wBAAwB;;IAExB,4BAA4B;IAC5B,2BAA2B;IAC3B,0BAA0B;IAC1B,wBAAwB;IACxB,0BAA0B;IAC1B,wBAAwB;;IAExB,+BAA+B;IAC/B,yGAAyG;IACzG,6BAA6B;IAC7B,8BAA8B;IAC9B,0BAA0B;IAC1B,8BAA8B;IAC9B,6BAA6B;IAC7B,+BAA+B;IAC/B,+BAA+B;IAC/B,6BAA6B;IAC7B,8BAA8B;IAC9B,+BAA+B;IAC/B,iCAAiC;;IAEjC,kCAAkC;IAClC,sDAAsD;IACtD,oDAAoD;IACpD,qDAAqD;IACrD,0BAA0B;IAC1B,2BAA2B;;IAE3B,4BAA4B;IAC5B,gDAAgD;IAChD,+CAA+C;IAC/C,+EAA+E;IAC/E,sDAAsD;;IAEtD,gCAAgC;IAChC,mCAAmC;IACnC,oCAAoC;IACpC,kCAAkC;IAClC,qDAAqD;;IAErD,4BAA4B;IAC5B,uBAAuB;IACvB,sBAAsB;IACtB,wBAAwB;AAC5B;;AAEA,wCAAwC;AACxC;IACI;QACI,kCAAkC;IACtC;AACJ;;AAEA,0CAA0C;AAC1C;IACI,yBAAyB;IACzB,2BAA2B;IAC3B,kBAAkB;AACtB;;AAEA,8CAA8C;AAC9C;IACI,eAAe;IACf,MAAM;IACN,OAAO;IACP,WAAW;IACX,YAAY;IACZ,oCAAoC;IACpC,+BAA+B;IAC/B,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,0BAA0B;IAC1B,2BAA2B;AAC/B;;AAEA;IACI,mCAAmC;IACnC,gCAAgC;IAChC,gCAAgC;IAChC,qCAAqC;IACrC,UAAU;IACV,gBAAgB;IAChB,kCAAkC;IAClC,qCAAqC;IACrC,aAAa;IACb,sBAAsB;IACtB,4BAA4B;IAC5B,gBAAgB;IAChB,qCAAqC;;IAErC,8BAA8B;IAC9B,2BAA2B;IAC3B,+BAA+B;IAC/B,wBAAwB;AAC5B;;AAEA,2CAA2C;AAC3C;IACI,SAAS;IACT,kBAAkB;IAClB,4CAA4C;IAC5C,oCAAoC;IACpC,2CAA2C;IAC3C,gCAAgC;IAChC,cAAc;AAClB;;AAEA,uCAAuC;AACvC;IACI,gBAAgB;IAChB,YAAY;IACZ,aAAa;IACb,sBAAsB;IACtB,4BAA4B;IAC5B,sCAAsC;IACtC,gDAAgD;;IAEhD,6BAA6B;IAC7B,qBAAqB;AACzB;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,4BAA4B;IAC5B,gCAAgC;IAChC,qCAAqC;IACrC,qCAAqC;IACrC,qCAAqC;;IAErC,6BAA6B;IAC7B,2BAA2B;AAC/B;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,4BAA4B;AAChC;;AAEA,6CAA6C;AAC7C;IACI,aAAa;IACb,4BAA4B;IAC5B,mBAAmB;IACnB,eAAe;AACnB;;AAEA;IACI,iBAAiB;IACjB,aAAa;IACb,0BAA0B;IAC1B,4BAA4B;AAChC;;AAEA;IACI,2BAA2B;IAC3B,eAAe;IACf,kCAAkC;IAClC,aAAa;IACb,+BAA+B;IAC/B,4BAA4B;IAC5B,eAAe;AACnB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,qCAAqC;AACzC;;AAEA,mDAAmD;AACnD;;IAEI,YAAY;IACZ,gBAAgB;IAChB,gBAAgB,EAAE,sBAAsB;IACxC,kBAAkB;IAClB,qCAAqC;IACrC,gCAAgC;IAChC,qCAAqC;IACrC,qCAAqC;IACrC,wDAAwD;IACxD,qCAAqC;IACrC,oCAAoC;;IAEpC,gBAAgB;IAChB,qBAAqB;AACzB;;AAEA;IACI,qCAAqC;IACrC,kCAAkC;IAClC,mBAAmB;AACvB;;AAEA,yBAAyB;AACzB;IACI,aAAa;IACb,sBAAsB;IACtB,4BAA4B;IAC5B,oBAAoB;IACpB,cAAc;AAClB;;AAEA,iDAAiD;AACjD;IACI,gBAAgB,EAAE,kBAAkB;IACpC,eAAe;IACf,wDAAwD;IACxD,YAAY;IACZ,qCAAqC;IACrC,eAAe;IACf,qCAAqC;IACrC,YAAY;IACZ,0CAA0C;IAC1C,oCAAoC;IACpC,cAAc;IACd;sDACkD;;IAElD,uBAAuB;IACvB,0BAA0B;IAC1B,wCAAwC;;IAExC,gBAAgB;IAChB,2BAA2B;IAC3B,sBAAsB;IACtB,wBAAwB;AAC5B;;AAEA;;IAEI,2CAA2C;IAC3C,2BAA2B;AAC/B;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,6CAA6C;IAC7C,mBAAmB;IACnB,eAAe;AACnB;;AAEA;IACI,WAAW;IACX,eAAe;AACnB;;AAEA;IACI,qCAAqC;AACzC;;AAEA;IACI,6CAA6C;IAC7C,kBAAkB;IAClB,YAAY;IACZ,cAAc;AAClB;;AAEA,wBAAwB;AACxB;IACI,4CAA4C;IAC5C,kBAAkB;IAClB,sCAAsC;IACtC,cAAc;IACd,oCAAoC;IACpC,gCAAgC;AACpC;;AAEA;IACI,4CAA4C;IAC5C,gBAAgB;IAChB,mCAAmC;IACnC,cAAc;IACd,yCAAyC;IACzC,oCAAoC;IACpC,gCAAgC;AACpC;;AAEA,yCAAyC;AACzC;IACI,aAAa;IACb,2DAA2D;IAC3D,4BAA4B;IAC5B,2BAA2B;AAC/B;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,4BAA4B;AAChC;;AAEA;IACI,WAAW;IACX,YAAY;IACZ,oBAAoB;IACpB,UAAU;AACd;;AAEA;IACI,kBAAkB;IAClB,YAAY;AAChB;;AAEA,gDAAgD;AAChD;IACI,aAAa;IACb,sBAAsB;IACtB,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,4CAA4C;IAC5C,gCAAgC;IAChC,gBAAgB;IAChB,sCAAsC;AAC1C;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,4BAA4B;IAC5B,iBAAiB;IACjB,WAAW;AACf;;AAEA;IACI,OAAO;IACP,eAAe;IACf,kBAAkB;IAClB,iCAAiC;IACjC,eAAe;AACnB;;AAEA,yDAAyD;AACzD;IACI;;;QAGI,2BAA2B;QAC3B,0BAA0B;QAC1B,0BAA0B;IAC9B;AACJ;;AAEA,oDAAoD;AACpD;IACI;QACI;8DACsD;QACtD,sBAAsB;IAC1B;;IAEA;QACI,mBAAmB;IACvB;AACJ;;AAEA,sCAAsC;AACtC;IACI;QACI,UAAU;QACV,gCAAgC;IACpC;;IAEA;QACI,sBAAsB;QACtB,4BAA4B;IAChC;;IAEA;QACI,sBAAsB;QACtB,oBAAoB;IACxB;;IAEA;QACI,cAAc;QACd,uBAAuB;QACvB,mBAAmB;IACvB;;IAEA;QACI,0BAA0B;QAC1B,4BAA4B;IAChC;;IAEA,gEAAgE;IAChE;QACI,4BAA4B;IAChC;;IAEA;QACI,WAAW;IACf;;IAEA;QACI,WAAW;IACf;;IAEA;QACI,eAAe;QACf,OAAO;IACX;AACJ;;AAEA;IACI;QACI,UAAU;QACV,+BAA+B;QAC/B,gCAAgC;IACpC;;IAEA;QACI,gCAAgC;IACpC;;IAEA;QACI,eAAe;IACnB;;IAEA,sEAAsE;IACtE;QACI,4BAA4B;IAChC;;IAEA;QACI,WAAW;IACf;;IAEA;QACI,eAAe;QACf,4BAA4B;IAChC;;IAEA;QACI,eAAe;QACf,OAAO;IACX;AACJ;;AAEA,0BAA0B;AAC1B;IACI;QACI,aAAa;QACb,eAAe;IACnB;;IAEA;QACI,aAAa;QACb,eAAe;IACnB;;IAEA;QACI,aAAa;QACb,eAAe;IACnB;;IAEA,gEAAgE;IAChE;QACI,aAAa;QACb,sBAAsB;QACtB,4BAA4B;IAChC;;IAEA;QACI,aAAa;QACb,sBAAsB;QACtB,4BAA4B;QAC5B,WAAW;IACf;;IAEA;QACI,aAAa;QACb,eAAe;QACf,4BAA4B;QAC5B,WAAW;IACf;AACJ;;AAEA,+BAA+B;AAC/B;IACI;QACI,wEAAwE;IAC5E;;IAEA,qCAAqC;IACrC;QACI;YACI,UAAU;YACV,gCAAgC;QACpC;;QAEA;YACI,sBAAsB;YACtB,4BAA4B;QAChC;;QAEA,gDAAgD;QAChD;YACI,4BAA4B;QAChC;;QAEA;YACI,WAAW;QACf;;QAEA;YACI,WAAW;QACf;;QAEA;YACI,eAAe;YACf,OAAO;QACX;IACJ;;IAEA,iCAAiC;IACjC;QACI;YACI,4BAA4B;QAChC;;QAEA;YACI,eAAe;YACf,4BAA4B;QAChC;;QAEA;YACI,eAAe;YACf,OAAO;QACX;IACJ;AACJ;;AAEA,6BAA6B;AAC7B;IACI;QACI,oCAAoC;IACxC;AACJ;;AAEA,gCAAgC;AAChC;IACI;QACI,gBAAgB;QAChB,wDAAwD;QACxD,oCAAoC;IACxC;;IAEA;;QAEI,gBAAgB;QAChB,oCAAoC;IACxC;AACJ","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