diff --git a/changedetectionio/blueprint/ui/__init__.py b/changedetectionio/blueprint/ui/__init__.py index 98e3a319..524418c3 100644 --- a/changedetectionio/blueprint/ui/__init__.py +++ b/changedetectionio/blueprint/ui/__init__.py @@ -1,5 +1,6 @@ import time import threading +from blinker import signal from flask import Blueprint, request, redirect, url_for, flash, render_template, session, current_app from flask_babel import gettext from loguru import logger @@ -237,32 +238,32 @@ def construct_blueprint(datastore: ChangeDetectionStore, update_q, worker_pool, list_filters = wl_filters.list_filters_from_args(datastore, request.args) now = int(time.time()) - # Mark watches as viewed - use background thread only for large watch counts - def mark_viewed_impl(): - """Mark watches as viewed - can run synchronously or in background thread.""" - marked_count = 0 - try: - for watch_uuid, watch in datastore.data['watching'].items(): - if not wl_filters.watch_matches_filters(datastore, watch, list_filters): - continue + # Runs SYNCHRONOUSLY, and must stay that way. Re #4021: this used to hand the work to a + # background thread and redirect immediately, so the watch list re-rendered from a + # datastore that was still being marked and showed rows as unviewed until a manual + # refresh. The realtime events that would have corrected it were emitted while the + # browser was mid-navigation with no socket connected, so they went nowhere. + # It is cheap enough to do inline: the per-watch signal is suppressed below (that was + # the actual cost, not the disk write, which measures ~0.05ms per watch). + marked_count = 0 + try: + for watch_uuid, watch in datastore.data['watching'].items(): + if not wl_filters.watch_matches_filters(datastore, watch, list_filters): + continue - datastore.set_last_viewed(watch_uuid, now) - marked_count += 1 + datastore.set_last_viewed(watch_uuid, now, send_signal=False) + marked_count += 1 - logger.info(f"Marking complete: {marked_count} watches marked as viewed") - except Exception as e: - logger.error(f"Error marking as viewed: {e}") + logger.info(f"Marking complete: {marked_count} watches marked as viewed") + except Exception as e: + logger.error(f"Error marking as viewed: {e}") - # For small watch counts (< 10), run synchronously to avoid race conditions in tests - # For larger counts, use background thread to avoid blocking the UI - watch_count = len(datastore.data['watching']) - if watch_count < 10: - # Run synchronously for small watch counts - mark_viewed_impl() - else: - # Start background thread for large watch counts - thread = threading.Thread(target=mark_viewed_impl, daemon=True) - thread.start() + # One summary event instead of one per watch, so other open tabs refresh their counters. + # This page doesn't need it - the redirect below re-renders it from the marked datastore. + if marked_count: + general_stats_update = signal('general_stats_update') + if general_stats_update: + general_stats_update.send() return redirect(url_for('watchlist.index', **wl_filters.filter_query_args(request.args))) diff --git a/changedetectionio/blueprint/watchlist/__init__.py b/changedetectionio/blueprint/watchlist/__init__.py index f005fc16..aa72adb3 100644 --- a/changedetectionio/blueprint/watchlist/__init__.py +++ b/changedetectionio/blueprint/watchlist/__init__.py @@ -13,6 +13,7 @@ from changedetectionio.auth_decorator import login_optionally_required # Shared filtering — the single source of truth, also used by the ui blueprint's # bulk actions so a filtered view and the actions taken on it always agree. from changedetectionio.blueprint.watchlist import filters as wl_filters +from changedetectionio.blueprint.watchlist.row_context import watch_row_context def construct_blueprint(datastore: ChangeDetectionStore, update_q, queuedWatchMetaData): watchlist_blueprint = Blueprint('watchlist', __name__, template_folder="templates") @@ -96,8 +97,6 @@ def construct_blueprint(datastore: ChangeDetectionStore, update_q, queuedWatchMe sorted_tags = sorted(datastore.data['settings']['application'].get('tags').items(), key=lambda x: x[1]['title']) - proxy_list = datastore.proxy_list - from changedetectionio import content_fetchers available_fetchers = content_fetchers.available_fetchers() @@ -105,24 +104,32 @@ def construct_blueprint(datastore: ChangeDetectionStore, update_q, queuedWatchMe from changedetectionio.llm.ui_strings import LLM_INTENT_WATCH_PLACEHOLDER llm_configured = bool(_get_llm_config(datastore)) + # Everything the row markup itself needs comes from here, shared with the Socket.IO + # row push so a live-updated row can't drift from the server-rendered one. + row_ctx = watch_row_context(datastore, + active_tag_uuid=active_tag_uuid, + queued_uuids=update_q.get_queued_uuids()) + output = render_template( "watch-overview.html", + **row_ctx, active_tag=active_tag, - active_tag_uuid=active_tag_uuid, active_processor=active_processor, checking_now_size=len(worker_pool.get_running_uuids()), app_rss_token=datastore.data['settings']['application'].get('rss_access_token'), - datastore=datastore, errored_count=errored_count, deals_count=deals_count, unread_count=unread_count, processor_counts=processor_counts, - extra_classes=' '.join(filter(None, ['has-queue' if not update_q.empty() else '', 'llm-configured' if llm_configured else ''])), + # body classes for app-wide state; realtime.js keeps these in sync live + # (has-any-unviewed reveals the "Mark all viewed" button - see _watch_table.scss) + extra_classes=' '.join(filter(None, ['has-queue' if not update_q.empty() else '', + 'llm-configured' if llm_configured else '', + 'has-any-unviewed' if datastore.unread_changes_count else ''])), form=form, generate_tag_colors=processors.generate_processor_badge_colors, wcag_text_color=processors.wcag_text_color, guid=datastore.data['app_guid'], - has_proxies=proxy_list, available_fetchers=available_fetchers, #header=_("todo - tag name etc"), hosted_sticky=os.getenv("SALTED_PASS", False) == False, @@ -130,16 +137,13 @@ def construct_blueprint(datastore: ChangeDetectionStore, update_q, queuedWatchMe pagination=pagination, processor_badge_css=processors.get_processor_badge_css(), processor_badge_texts=processors.get_processor_badge_texts(), - processor_descriptions=processors.get_processor_descriptions(), queue_size=update_q.qsize(), - queued_uuids=update_q.get_queued_uuids(), # Active view filters (tag/processor/q/unread/...) so links (e.g. column sorting) # can re-apply them and not drop the operator's current filtered view. active_filters=wl_filters.filter_query_args(request.args), search_q=request.args.get('q', '').strip(), sort_attribute=request.args.get('sort') if request.args.get('sort') else request.cookies.get('sort'), sort_order=request.args.get('order') if request.args.get('order') else request.cookies.get('order'), - system_default_fetcher=datastore.data['settings']['application'].get('fetch_backend'), tags=sorted_tags, unread_changes_count=datastore.unread_changes_count, watches=sorted_watches, diff --git a/changedetectionio/blueprint/watchlist/row_context.py b/changedetectionio/blueprint/watchlist/row_context.py new file mode 100644 index 00000000..461c7f43 --- /dev/null +++ b/changedetectionio/blueprint/watchlist/row_context.py @@ -0,0 +1,43 @@ +"""Template context needed to render a single watch list row. + +watch-overview-single-row.html is rendered from two places: inline by the watch list page +(via {% include %} inside the row loop) and standalone when a row is pushed over Socket.IO. +Both MUST build their context here — if they build it separately the pushed row silently +drifts from the server-rendered one, which is the bug class this exists to prevent. + +Only names the row cannot get for itself belong here. Anything registered app-wide +(`is_checking_now` template global, `fetcher_status_icons` filter, `url_for`, `_()`) is +already available in any render and is deliberately NOT listed. +""" + +from changedetectionio import processors + + +def watch_row_context(datastore, active_tag_uuid=None, queued_uuids=None): + """Context for one (or many) watch list rows. + + active_tag_uuid matters: the row's Edit/Recheck links carry the tag so the operator lands + back on the filtered view they came from. A pushed row must therefore be rendered with the + tag of the page that will receive it, not a global one. + + queued_uuids is accepted so a caller rendering many rows can fetch the queue once instead + of per row; omit it and the live queue is read for you. + """ + if queued_uuids is None: + # Local import: flask_app imports blueprints, so a module-level import would cycle. + from changedetectionio.flask_app import update_q + queued_uuids = update_q.get_queued_uuids() + + return { + 'active_tag_uuid': active_tag_uuid, + # Kept 0 (rather than any_watches_have_processor_by_name) while the price column is + # disabled — it also decides cols_required on the page, so page and row must agree or + # a pushed row ends up with a different count than the table header. + 'any_has_restock_price_processor': 0, + 'datastore': datastore, + 'has_proxies': datastore.proxy_list, + 'processor_descriptions': processors.get_processor_descriptions(), + 'queued_uuids': queued_uuids, + 'system_default_fetcher': datastore.data['settings']['application'].get('fetch_backend'), + 'ui_settings': datastore.data['settings']['application']['ui'], + } diff --git a/changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html b/changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html new file mode 100644 index 00000000..9f79325d --- /dev/null +++ b/changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html @@ -0,0 +1,172 @@ +{# + A single watch list , extracted from watch-overview.html so the same markup can be + re-rendered on its own and pushed over Socket.IO (realtime row resync) - one renderer, + so the row can never drift from the server-rendered list. + + Rendered via {% include %} from the watch list loop, which inherits the full context: + watch, loop, is_checking_now(), queued_uuids, has_proxies, datastore, active_tag_uuid, + system_default_fetcher, ui_settings, favicons_enabled, fetcher_status_icons, + processor_descriptions, get_all_tags_for_watch(), any_has_restock_price_processor +#} + {%- set checking_now = is_checking_now(watch) -%} + {%- set history_n = watch.history_n -%} + {%- set favicon = watch.get_favicon_filename() -%} + {%- set error_texts = watch.compile_error_texts(has_proxies=has_proxies) -%} + {%- set system_use_url_watchlist = datastore.data['settings']['application']['ui'].get('use_page_title_in_list') -%} + {# Class settings mirrored in changedetectionio/static/js/realtime.js for the frontend #} +{# loop.cycle('pure-table-odd', 'pure-table-even'),#} + {%- set row_classes = [ + 'processor-' ~ watch['processor'], + 'has-error' if error_texts|length > 2 else '', + 'paused' if watch.paused is defined and watch.paused != False else '', + 'unviewed' if watch.has_unviewed else '', + 'has-restock-info' if watch.has_restock_info else 'no-restock-info', + 'has-favicon' if favicon else '', + 'in-stock' if watch.has_restock_info and watch['restock']['in_stock'] else '', + 'not-in-stock' if watch.has_restock_info and not watch['restock']['in_stock'] else '', + 'queued' if watch.uuid in queued_uuids else '', + 'checking-now' if checking_now else '', + 'notification_muted' if watch.notification_muted else '', + 'single-history' if history_n == 1 else '', + 'multiple-history' if history_n >= 2 else '', + 'use-html-title' if system_use_url_watchlist else 'no-html-title', + ] -%} + +
{# {{ loop.index+pagination.skip }}#}
+ +
+ + + + +
+ + + +
+ {% if 'favicons_enabled' not in ui_settings or ui_settings['favicons_enabled'] %} +
+ + {# Intersection Observer lazy loading: store real URL in data-src, load only when visible in viewport #} + Favicon thumbnail + +
+ {% endif %} +
+ {%- if watch['processor'] and watch['processor'] in processor_badge_texts -%} + {{ processor_badge_texts[watch['processor']] }} + {%- endif -%} + + {% if system_use_url_watchlist or watch.get('use_page_title_in_list') %} + {{ watch.label }} + {% else %} + {{ watch.get('title') or watch.link }} + {% endif %} +   + + + {%- for watch_tag_uuid, watch_tag in datastore.get_all_tags_for_watch(watch['uuid']).items() -%} + {{ watch_tag.title }} + {%- endfor -%} + + {%- if watch['processor'] == 'text_json_diff' -%} + {%- if watch['has_ldjson_price_data'] and not watch['track_ldjson_price_data'] -%} +
Switch to Restock & Price watch mode? Yes No
+ {%- endif -%} + {%- endif -%} + +
+
+ + {%- set effective_fetcher = watch.get_fetch_backend if watch.get_fetch_backend != "system" else system_default_fetcher -%} + {%- if effective_fetcher and ("html_webdriver" in effective_fetcher or "html_" in effective_fetcher or "extra_browser_" in effective_fetcher) -%} + {{ effective_fetcher|fetcher_status_icons }} + {%- endif -%} + {%- if watch.is_pdf -%}Converting PDF to text{%- endif -%} + {%- if watch.has_browser_steps -%}Browser Steps is enabled{%- endif -%} +
+{%- if watch['processor'] == 'restock_diff' -%} + {#- @todo - this could be injected somehow watch.extra_row_info or something -#} +
+ {%- if watch.has_restock_info -%} + + + {%- if watch['restock']['in_stock']-%} {{ _('In stock') }} {%- else-%} {{ _('Not in stock') }} {%- endif -%} + + {%- endif -%} + + {%- if watch.get('restock') and watch['restock'].get('price') -%} + {%- set restock = watch['restock'] -%} + {%- set price = restock.get('price') -%} + {%- set currency = restock.get('currency') if restock.get('currency','') else '' -%} + + {%- if price is not none and (price|string)|regex_search('\d') -%} + + {# @todo: make parse_currency/parse_decimal aware of the locale of the actual web page and use that instead changedetectionio/processors/restock_diff/__init__.py #} + {%- if price is number -%}{# It's a number so we can convert it to their locale' #} + {{ price|format_number_locale }} {{ currency }} + {%- else -%}{# It's totally fine if it arrives as something else, the website might be something weird in this field #} + {{ price }} {{ currency }} + {%- endif -%} + + {%- set price_change_pct = restock.get_price_change_percent() -%} + {%- if price_change_pct is not none -%} + {%- set prev_price = restock.get('last_price') -%} + {%- set prev_disp = (prev_price|format_number_locale ~ ' ' ~ currency) if prev_price is number else prev_price -%} + {%- if price_change_pct < 0 -%} + ▼ {{ '%g'|format(price_change_pct) }}% + {%- else -%} + ▲ +{{ '%g'|format(price_change_pct) }}% + {%- endif -%} + {%- endif -%} + {%- endif -%} + {%- elif not watch.has_restock_info -%} + {{ _('No information') }} + {%- endif -%} +
+{%- endif -%} +
+ + +{# +{%- if any_has_restock_price_processor -%} + + +{%- endif -%} +#} + {#last_checked becomes fetch-start-time#} + + + {{watch|format_last_checked_time|safe}} + + + {%- if watch.history_n >=2 and watch.last_changed >0 -%} + {{watch.last_changed|format_timestamp_timeago}} + {%- else -%} + {{ _('Not yet') }} + {%- endif -%} + + + +
+ {%- set target_attr = ' target="' ~ watch.uuid ~ '"' if datastore.data['settings']['application']['ui'].get('open_diff_in_new_tab') else '' -%} + + {{ _('Recheck') }} + {{ _('Edit') }} + + +
+ + diff --git a/changedetectionio/blueprint/watchlist/templates/watch-overview.html b/changedetectionio/blueprint/watchlist/templates/watch-overview.html index 3a4217e0..0c747694 100644 --- a/changedetectionio/blueprint/watchlist/templates/watch-overview.html +++ b/changedetectionio/blueprint/watchlist/templates/watch-overview.html @@ -215,12 +215,9 @@ window.watchOverviewI18n = { {%- set sort_attribute = sort_attribute or 'last_changed' -%} {%- set pagination_page = request.args.get('page', 0) -%} {%- set cols_required = 6 -%} - {%- set any_has_restock_price_processor = datastore.any_watches_have_processor_by_name("restock_diff") -%} - {%- set any_has_restock_price_processor = 0 -%} {%- if any_has_restock_price_processor -%} {%- set cols_required = cols_required + 1 -%} {%- endif -%} - {%- set ui_settings = datastore.data['settings']['application']['ui'] -%} {%- set wrapper_classes = [ 'has-unread-changes' if unread_changes_count else '', 'has-error' if errored_count else '', @@ -271,9 +268,11 @@ window.watchOverviewI18n = { {% endif %}
- {%- if unread_count -%} + {# Always rendered, hidden by CSS unless #watch-table-wrapper has .has-unread-changes. + It used to be {% if unread_count %}-gated, which meant it could not exist in the DOM + of another open tab — so marking viewed (or a new change arriving) in one tab could + never show/hide it in the other. Presence in the DOM is what lets realtime toggle it. #} {{ _('Mark all viewed') }} - {%- endif -%} {{ _('Recheck all') }} {% if active_tag_uuid %}{{ _("in '%(title)s'", title=active_tag.title) }}{% endif %}
RSS Feed @@ -350,168 +349,7 @@ window.watchOverviewI18n = { {%- endif -%} {%- for watch in (watches|sort(attribute=sort_attribute, reverse=sort_order == 'asc'))|pagination_slice(skip=pagination.skip) -%} - {%- set checking_now = is_checking_now(watch) -%} - {%- set history_n = watch.history_n -%} - {%- set favicon = watch.get_favicon_filename() -%} - {%- set error_texts = watch.compile_error_texts(has_proxies=has_proxies) -%} - {%- set system_use_url_watchlist = datastore.data['settings']['application']['ui'].get('use_page_title_in_list') -%} - {# Class settings mirrored in changedetectionio/static/js/realtime.js for the frontend #} -{# loop.cycle('pure-table-odd', 'pure-table-even'),#} - {%- set row_classes = [ - 'processor-' ~ watch['processor'], - 'has-error' if error_texts|length > 2 else '', - 'paused' if watch.paused is defined and watch.paused != False else '', - 'unviewed' if watch.has_unviewed else '', - 'has-restock-info' if watch.has_restock_info else 'no-restock-info', - 'has-favicon' if favicon else '', - 'in-stock' if watch.has_restock_info and watch['restock']['in_stock'] else '', - 'not-in-stock' if watch.has_restock_info and not watch['restock']['in_stock'] else '', - 'queued' if watch.uuid in queued_uuids else '', - 'checking-now' if checking_now else '', - 'notification_muted' if watch.notification_muted else '', - 'single-history' if history_n == 1 else '', - 'multiple-history' if history_n >= 2 else '', - 'use-html-title' if system_use_url_watchlist else 'no-html-title', - ] -%} - -
{# {{ loop.index+pagination.skip }}#}
- -
- - - - -
- - - -
- {% if 'favicons_enabled' not in ui_settings or ui_settings['favicons_enabled'] %} -
- - {# Intersection Observer lazy loading: store real URL in data-src, load only when visible in viewport #} - Favicon thumbnail - -
- {% endif %} -
- {%- if watch['processor'] and watch['processor'] in processor_badge_texts -%} - {{ processor_badge_texts[watch['processor']] }} - {%- endif -%} - - {% if system_use_url_watchlist or watch.get('use_page_title_in_list') %} - {{ watch.label }} - {% else %} - {{ watch.get('title') or watch.link }} - {% endif %} -   - - - {%- for watch_tag_uuid, watch_tag in datastore.get_all_tags_for_watch(watch['uuid']).items() -%} - {{ watch_tag.title }} - {%- endfor -%} - - {%- if watch['processor'] == 'text_json_diff' -%} - {%- if watch['has_ldjson_price_data'] and not watch['track_ldjson_price_data'] -%} -
Switch to Restock & Price watch mode? Yes No
- {%- endif -%} - {%- endif -%} - -
-
- - {%- set effective_fetcher = watch.get_fetch_backend if watch.get_fetch_backend != "system" else system_default_fetcher -%} - {%- if effective_fetcher and ("html_webdriver" in effective_fetcher or "html_" in effective_fetcher or "extra_browser_" in effective_fetcher) -%} - {{ effective_fetcher|fetcher_status_icons }} - {%- endif -%} - {%- if watch.is_pdf -%}Converting PDF to text{%- endif -%} - {%- if watch.has_browser_steps -%}Browser Steps is enabled{%- endif -%} -
-{%- if watch['processor'] == 'restock_diff' -%} - {#- @todo - this could be injected somehow watch.extra_row_info or something -#} -
- {%- if watch.has_restock_info -%} - - - {%- if watch['restock']['in_stock']-%} {{ _('In stock') }} {%- else-%} {{ _('Not in stock') }} {%- endif -%} - - {%- endif -%} - - {%- if watch.get('restock') and watch['restock'].get('price') -%} - {%- set restock = watch['restock'] -%} - {%- set price = restock.get('price') -%} - {%- set currency = restock.get('currency') if restock.get('currency','') else '' -%} - - {%- if price is not none and (price|string)|regex_search('\d') -%} - - {# @todo: make parse_currency/parse_decimal aware of the locale of the actual web page and use that instead changedetectionio/processors/restock_diff/__init__.py #} - {%- if price is number -%}{# It's a number so we can convert it to their locale' #} - {{ price|format_number_locale }} {{ currency }} - {%- else -%}{# It's totally fine if it arrives as something else, the website might be something weird in this field #} - {{ price }} {{ currency }} - {%- endif -%} - - {%- set price_change_pct = restock.get_price_change_percent() -%} - {%- if price_change_pct is not none -%} - {%- set prev_price = restock.get('last_price') -%} - {%- set prev_disp = (prev_price|format_number_locale ~ ' ' ~ currency) if prev_price is number else prev_price -%} - {%- if price_change_pct < 0 -%} - ▼ {{ '%g'|format(price_change_pct) }}% - {%- else -%} - ▲ +{{ '%g'|format(price_change_pct) }}% - {%- endif -%} - {%- endif -%} - {%- endif -%} - {%- elif not watch.has_restock_info -%} - {{ _('No information') }} - {%- endif -%} -
-{%- endif -%} -
- - -{# -{%- if any_has_restock_price_processor -%} - - -{%- endif -%} -#} - {#last_checked becomes fetch-start-time#} - - - {{watch|format_last_checked_time|safe}} - - - {%- if watch.history_n >=2 and watch.last_changed >0 -%} - {{watch.last_changed|format_timestamp_timeago}} - {%- else -%} - {{ _('Not yet') }} - {%- endif -%} - - - -
- {%- set target_attr = ' target="' ~ watch.uuid ~ '"' if datastore.data['settings']['application']['ui'].get('open_diff_in_new_tab') else '' -%} - - {{ _('Recheck') }} - {{ _('Edit') }} - - -
- - + {%- include "watch-overview-single-row.html" -%} {%- endfor -%} diff --git a/changedetectionio/realtime/socket_server.py b/changedetectionio/realtime/socket_server.py index 6d38c75c..8abceb08 100644 --- a/changedetectionio/realtime/socket_server.py +++ b/changedetectionio/realtime/socket_server.py @@ -40,6 +40,30 @@ class SignalHandler: notification_event_signal.connect(self.handle_notification_event, weak=False) logger.info("SignalHandler: Connected to notification_event signal") + # One-shot stats refresh for bulk operations that deliberately skip the per-watch + # signal (see set_last_viewed(send_signal=False)) — n signals would mean n full + # rescans of every watch plus 3n broadcasts. + general_stats_signal = signal('general_stats_update') + general_stats_signal.connect(self.handle_general_stats_update, weak=False) + + + def handle_general_stats_update(self, *args, **kwargs): + """Emit the global counters once, without touching any individual row. + + Sent after a bulk operation. The tab that triggered it is usually reloading anyway; + this is for OTHER open tabs so their unread/error counters don't sit stale. + Note their ROWS still keep a stale 'unviewed' class until the row resync lands — + tracked separately, this only fixes the counters. + """ + try: + errored_count = sum(1 for w in self.datastore.data['watching'].values() if w.get('last_error')) + self.socketio_instance.emit("general_stats_update", { + 'count_errors': errored_count, + 'unread_changes_count': self.datastore.unread_changes_count, + }) + logger.trace("Socket.IO: Emitted one-shot general_stats_update") + except Exception as e: + logger.error(f"Socket.IO error in handle_general_stats_update: {str(e)}") def handle_watch_small_status_update(self, *args, **kwargs): """Small simple status update, for example 'Connecting...'""" diff --git a/changedetectionio/static/js/realtime.js b/changedetectionio/static/js/realtime.js index e00cb327..192ee849 100644 --- a/changedetectionio/static/js/realtime.js +++ b/changedetectionio/static/js/realtime.js @@ -242,6 +242,11 @@ $(document).ready(function () { }) socket.on('general_stats_update', function (general_stats) { + // Drives the "Mark all viewed" button, which is always in the DOM and revealed by + // this class (see body.has-any-unviewed in _watch_table.scss). Emitted whenever a + // worker finishes a watch, and once after bulk ops like mark-all-viewed - so every + // open tab shows/hides the button without needing a reload. + document.body.classList.toggle('has-any-unviewed', general_stats.unread_changes_count !== 0); $('#watch-table-wrapper').toggleClass("has-unread-changes", general_stats.unread_changes_count !==0) $('#watch-table-wrapper').toggleClass("has-error", general_stats.count_errors !== 0) // NB: the watch-list status .seg counts (unread/errors/deals) are diff --git a/changedetectionio/static/styles/scss/parts/_watch_table.scss b/changedetectionio/static/styles/scss/parts/_watch_table.scss index ee628560..91d089c4 100644 --- a/changedetectionio/static/styles/scss/parts/_watch_table.scss +++ b/changedetectionio/static/styles/scss/parts/_watch_table.scss @@ -425,6 +425,20 @@ body.watch-selection-active { flex-wrap: wrap; gap: $common-gap; margin: 0; + + /* Always in the DOM so realtime can reveal/hide it in any open tab (it used to be + {% if unread_count %}'d away, so another tab could never show it). Revealed by + body.has-any-unviewed - a body class rather than a selector tied to this toolbar, + so it keeps working if the button moves, and it follows the same convention as + body.has-queue / body.is-checking-now. Set server-side via extra_classes and kept + live by the general_stats_update socket event. */ + #post-list-mark-views { + display: none; + } +} + +body.has-any-unviewed #post-list-mark-views { + display: inline-flex !important; } #watch-table-wrapper { @@ -452,9 +466,11 @@ body.watch-selection-active { } } + /* #post-list-mark-views is no longer keyed off this class — see body.has-any-unviewed. + Two classes tracking one fact is how they drift, so prefer the body class for anything new. */ &.has-unread-changes { #list-related-buttons { - #post-list-unread, #post-list-mark-views { + #post-list-unread { display: inline-flex !important; } } diff --git a/changedetectionio/static/styles/styles.css b/changedetectionio/static/styles/styles.css index a0ae1518..fa449c42 100644 --- a/changedetectionio/static/styles/styles.css +++ b/changedetectionio/static/styles/styles.css @@ -1 +1 @@ -.header{color:var(--color-text-menu-heading)}.header a{color:var(--color-text-menu-heading)}.header::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;pointer-events:none;background:linear-gradient(to right, rgba(200, 200, 200, 0.02), rgba(200, 200, 200, 0.6))}ul#top-right-menu{list-style:none;margin-left:auto;padding:0;margin-top:0;margin-right:0;margin-bottom:0;display:grid;gap:1.1rem;grid-auto-flow:column;grid-auto-columns:max-content;align-items:center}ul#top-right-menu .toggle-button{padding:0}.current-diff-url{flex:1 1 auto;min-width:0;overflow:hidden;white-space:nowrap;text-align:left;margin:0 .55rem;-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 2.5em), transparent);mask-image:linear-gradient(to right, #000 calc(100% - 2.5em), transparent)}.current-diff-url span{overflow:visible;white-space:nowrap}.pure-menu-horizontal{padding:.55rem;display:flex;justify-content:space-between;align-items:center}.pure-menu-horizontal svg{height:1.3rem}.fi{height:1.3rem;cursor:pointer}#pure-menu-horizontal-spinner{height:2px;background:linear-gradient(-75deg, #ff6000, #ff8f00, #ffdd00, #ed0000);background-size:400% 400%;animation:gradient 200s ease infinite;opacity:.8;position:fixed;bottom:0;left:0;width:100%;z-index:100;pointer-events:none}.status-pill{display:inline-flex;align-items:center;gap:8px;height:30px;padding:0 12px;border-radius:var(--common-round-border);border:1px solid hsla(0,0%,100%,.25);background:hsla(0,0%,100%,.1);color:var(--color-text-menu-heading);font-size:.78rem;font-weight:600;white-space:nowrap;text-decoration:none}.status-pill:hover{background:hsla(0,0%,100%,.18)}.status-pill .live-dot{width:8px;height:8px;border-radius:50%;background:#42dd53;box-shadow:0 0 0 3px rgba(66,221,83,.3);animation:status-pill-pulse 2s infinite}.status-pill.paused .live-dot{background:#e8a33d;box-shadow:0 0 0 3px rgba(232,163,61,.3);animation:none}.status-pill .action-icon{width:16px;height:16px}.status-pill.muted{opacity:.8}.status-pill.muted .action-icon{color:#e8a33d}@keyframes status-pill-pulse{0%,100%{opacity:1}50%{opacity:.4}}.menu-pop-wrap{position:relative}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:0;border-radius:var(--common-round-border);background:rgba(0,0,0,0);color:var(--color-text-menu-heading);cursor:pointer}.icon-btn svg{width:18px;height:18px;fill:none;stroke:currentColor}.icon-btn:hover{background:hsla(0,0%,100%,.14)}.menu-pop{display:none;position:absolute;top:calc(100% + 8px);right:0;min-width:220px;padding:6px;border:1px solid var(--color-border-table-cell);border-radius:12px;background:var(--color-background);box-shadow:0 18px 50px rgba(0,0,0,.18);z-index:80}.menu-pop.open{display:block}.menu-pop .mi{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;border:0;border-radius:8px;background:rgba(0,0,0,0);color:var(--color-text);font-size:.85rem;text-align:left;text-decoration:none;white-space:nowrap;cursor:pointer}.menu-pop .mi:hover{background:var(--color-background-menu-link-hover)}.menu-pop .mi .ico{display:inline-flex;color:var(--color-text-input-description)}.menu-pop .mi .ico svg{width:16px;height:16px;fill:none;stroke:currentColor}.menu-pop .mi .right{margin-left:auto;font-size:.75rem;color:var(--color-text-input-description)}.top-menu-list .action-label{color:var(--color-text-menu-heading)}@media only screen and (max-width: 768px){.top-menu-list .action-label{display:none}}#inline-menu-extras-group{list-style:none;margin:0;padding:0;display:grid;gap:.55rem;grid-auto-flow:column;grid-auto-columns:max-content;align-items:center}@media only screen and (max-width: 980px){#nav-menu #menu-settings span{display:none}}:root{--body-main-text-size: 0.9rem;--color-white: #fff;--color-grey-50: #111;--color-grey-100: #262626;--color-grey-200: #333;--color-grey-300: #444;--color-grey-325: #555;--color-grey-350: #565d64;--color-grey-400: #666;--color-grey-500: #777;--color-grey-600: #999;--color-grey-700: #cbcbcb;--color-grey-750: #ddd;--color-grey-800: #e0e0e0;--color-grey-850: #eee;--color-grey-900: #f2f2f2;--color-black: #000;--color-dark-red: #a00;--color-light-red: #dd0000;--color-background-page: var(--color-grey-100);--color-background-gradient-first: #5ad8f7;--color-background-gradient-second: #2f50af;--color-background-gradient-third: #9150bf;--color-background: var(--color-white);--color-text: var(--color-grey-200);--color-link: #1b98f8;--color-menu-accent: #ed5900;--color-background-code: var(--color-grey-850);--color-error: var(--color-dark-red);--color-error-input: #ffebeb;--color-error-list: var(--color-light-red);--color-table-background: var(--color-background);--color-table-stripe: var(--color-grey-900);--watchlist-row-selected: #e3f0ff;--watchlist-row-hover: #f2f2f2;--color-text-tab: var(--color-white);--color-background-tab: rgba(255, 255, 255, 0.2);--color-background-tab-hover: rgba(255, 255, 255, 0.5);--color-text-tab-active: #222;--color-api-key: #0078e7;--color-background-button-primary: #0078e7;--color-background-button-green: #42dd53;--color-background-button-red: #dd4242;--color-background-button-success: rgb(28, 184, 65);--color-background-button-error: rgb(202, 60, 60);--color-text-button-error: var(--color-white);--color-background-button-warning: rgb(202, 60, 60);--color-text-button-warning: var(--color-white);--color-background-button-secondary: rgb(66, 184, 221);--color-background-button-cancel: rgb(200, 200, 200);--color-text-button: var(--color-white);--color-background-button-tag: rgb(99, 99, 99);--color-background-snapshot-age: #dfdfdf;--color-error-text-snapshot-age: var(--color-white);--color-error-background-snapshot-age: #ff0000;--color-background-button-tag-active: #9c9c9c;--color-text-messages: var(--color-white);--color-background-messages-message: rgba(255, 255, 255, .2);--color-background-messages-error: rgba(255, 1, 1, .5);--color-background-messages-notice: rgba(255, 255, 255, .5);--color-border-notification: #ccc;--color-background-checkbox-operations: rgba(0, 0, 0, 0.05);--color-warning: #ff3300;--color-border-warning: var(--color-warning);--color-text-legend: var(--color-white);--color-link-new-version: #e07171;--color-last-checked: #bbb;--color-text-footer: #444;--color-border-watch-table-cell: #eee;--color-text-watch-tag-list: rgba(231, 0, 105, 0.4);--color-background-new-watch-form: rgba(0, 0, 0, 0.05);--color-background-new-watch-input: var(--color-white);--color-background-new-watch-input-transparent: rgba(255, 255, 255, 0.1);--color-text-new-watch-input: var(--color-text);--color-border-input: var(--color-grey-500);--color-shadow-input: var(--color-grey-400);--color-background-input: var(--color-white);--color-text-input: var(--color-text);--color-text-input-description: var(--color-grey-500);--color-text-input-placeholder: var(--color-grey-600);--color-background-table-thead: var(--color-grey-800);--color-border-table-cell: var(--color-grey-700);--color-text-menu-heading: var(--color-white);--color-text-menu-link: var(--color-grey-500);--color-background-menu-link-hover: var(--color-grey-850);--color-text-menu-link-hover: var(--color-grey-300);--color-shadow-jump: var(--color-grey-500);--color-icon-github: var(--color-black);--color-watch-table-error: var(--color-dark-red);--color-watch-table-row-text: var(--color-grey-100);--color-table-line: #e7e9ee;--highlight-trigger-text-bg-color: #1b98f8;--highlight-ignored-text-bg-color: var(--color-grey-700);--highlight-blocked-text-bg-color: rgb(202, 60, 60);--color-sidebar-bg: rgba(255, 255, 255, 0.97);--color-sidebar-text: var(--color-text);--color-sidebar-shadow: 6px 0 28px rgba(0, 0, 0, 0.18);--color-sidebar-item-hover-bg: rgba(0, 0, 0, 0.06);--color-sidebar-item-active-bg: rgba(0, 0, 0, 0.10);--common-round-border: 8px}html[data-darkmode=true]{--color-link: #59bdfb;--color-text: var(--color-white);--color-table-line: #262c37;--color-background-gradient-first: #3f90a5;--color-background-gradient-second: #1e316c;--color-background-gradient-third: #4d2c64;--color-background-new-watch-input: var(--color-grey-100);--color-background-new-watch-input-transparent: var(--color-grey-100);--color-text-new-watch-input: var(--color-text);--color-background-table-thead: var(--color-grey-200);--color-table-background: var(--color-grey-300);--color-table-stripe: var(--color-grey-325);--watchlist-row-selected: #1e3a5f;--watchlist-row-hover: #2a2a2a;--color-background: var(--color-grey-300);--color-text-menu-heading: var(--color-grey-850);--color-text-menu-link: var(--color-grey-800);--color-border-table-cell: var(--color-grey-400);--color-text-tab-active: var(--color-text);--color-border-input: var(--color-grey-400);--color-shadow-input: var(--color-grey-50);--color-background-input: var(--color-grey-350);--color-text-input-description: var(--color-grey-600);--color-text-input-placeholder: var(--color-grey-600);--color-text-watch-tag-list: rgba(250, 62, 146, 0.4);--color-background-code: var(--color-grey-200);--color-background-tab: rgba(0, 0, 0, 0.2);--color-background-tab-hover: rgba(0, 0, 0, 0.5);--color-background-snapshot-age: var(--color-grey-200);--color-shadow-jump: var(--color-grey-200);--color-icon-github: var(--color-white);--color-watch-table-error: var(--color-light-red);--color-watch-table-row-text: var(--color-grey-800);--color-sidebar-bg: rgba(8, 10, 14, 0.97);--color-sidebar-text: var(--color-white);--color-sidebar-shadow: 6px 0 28px rgba(0, 0, 0, 0.45);--color-sidebar-item-hover-bg: rgba(255, 255, 255, 0.06);--color-sidebar-item-active-bg: rgba(255, 255, 255, 0.10)}html[data-darkmode=true] .icon-spread{filter:hue-rotate(-10deg) brightness(1.5)}html[data-darkmode=true] .watch-table .title-col a[target=_blank]::after,html[data-darkmode=true] .watch-table .current-diff-url::after{filter:invert(0.5) hue-rotate(10deg) brightness(2)}html[data-darkmode=true] .watch-table .status-browsersteps{filter:invert(0.5) hue-rotate(10deg) brightness(1.5)}html[data-darkmode=true] .watch-table .watch-controls .state-off svg{opacity:.3}html[data-darkmode=true] .watch-table .watch-controls .state-on svg{opacity:1}html[data-darkmode=true] .watch-table .unviewed{color:#fff}html[data-darkmode=true] .watch-table .unviewed.error{color:var(--color-watch-table-error)}.arrow{border:solid var(--color-border-input);border-width:0 2px 2px 0;display:inline-block;padding:3px}.arrow.right{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}.arrow.left{transform:rotate(135deg);-webkit-transform:rotate(135deg)}.arrow.up,.arrow.asc{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}.arrow.down,.arrow.desc{transform:rotate(45deg);-webkit-transform:rotate(45deg)}#browser_steps th{display:none}#browser_steps li{list-style:decimal;padding:5px}#browser_steps li.browser-step-with-error{background-color:#ffd6d6;border-radius:4px}#browser_steps li:not(:first-child):hover{opacity:1}#browser_steps li .control{padding-left:5px;padding-right:5px}#browser_steps li .control a{font-size:70%}#browser_steps li.empty{padding:0px;opacity:.35}#browser_steps li.empty .control{display:none}#browser_steps li:hover{background:#eee}#browser_steps li>label{display:none}@media only screen and (min-width: 760px){#browser-steps .flex-wrapper{display:flex;flex-flow:row;height:70vh;font-size:80%}#browser-steps .flex-wrapper #browser-steps-ui{flex-grow:1;flex-shrink:1;flex-basis:0;background-color:#eee;border-radius:5px}#browser-steps-fieldlist{flex-grow:0;flex-shrink:0;flex-basis:auto;max-width:400px;padding-left:1rem;overflow-y:scroll}#browsersteps-selector-wrapper{height:100% !important}}#browsersteps-selector-wrapper{width:100%;overflow-y:scroll;position:relative;height:80vh}#browsersteps-selector-wrapper>img{position:absolute;max-width:100%}#browsersteps-selector-wrapper>canvas{position:relative;max-width:100%}#browsersteps-selector-wrapper>canvas:hover{cursor:pointer}#browsersteps-selector-wrapper .loader{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);z-index:100;max-width:350px;text-align:center}#browsersteps-selector-wrapper .spinner,#browsersteps-selector-wrapper .spinner:after{width:80px;height:80px;font-size:3px}#browsersteps-selector-wrapper #browsersteps-click-start{color:var(--color-grey-400)}#browsersteps-selector-wrapper #browsersteps-click-start:hover{cursor:pointer}ul#requests-extra_proxies{list-style:none}ul#requests-extra_proxies li>label{display:none}ul#requests-extra_proxies table tr{display:table-row}ul#requests-extra_proxies table tr input[type=text]{width:100%}@media only screen and (min-width: 1024px){ul#requests-extra_proxies table tr{display:inline}}#request label[for=proxy]{display:inline-block}body.proxy-check-active #request .proxy-check-details{font-size:80%;color:#555;display:block;padding-left:2em;max-width:500px}body.proxy-check-active #request .proxy-timing{font-size:80%;padding-left:1rem;color:var(--color-link)}#recommended-proxy{display:grid;gap:2rem;padding-bottom:1em}@media(min-width: 991px){#recommended-proxy{grid-template-columns:repeat(2, 1fr)}}#recommended-proxy>div{border:1px #aaa solid;border-radius:4px;padding:1em}#extra-proxies-setting{border:1px solid var(--color-grey-800);border-radius:4px;margin:1em;padding:1em}ul#requests-extra_browsers{list-style:none}ul#requests-extra_browsers li>label{display:none}ul#requests-extra_browsers table tr{display:table-row}ul#requests-extra_browsers table tr input[type=text]{width:100%}@media only screen and (min-width: 1280px){ul#requests-extra_browsers table tr{display:inline}ul#requests-extra_browsers table tr input[type=text]{width:100%}}#extra-browsers-setting{border:1px solid var(--color-grey-800);border-radius:4px;margin:1em;padding:1em}.pagination-page-info{text-transform:capitalize}.pagination.menu>*{display:inline-block}.pagination.menu li{display:inline-block}.pagination.menu a{padding:.65rem;margin:3px;border:none;background:#444;border-radius:2px;color:var(--color-text-button)}.pagination.menu a.disabled{display:none}.pagination.menu a.active{font-weight:bold;background:#888}.pagination.menu a:hover{background:#999}.spinner,.spinner:after{border-radius:50%;width:10px;height:10px}.spinner{margin:0px auto;font-size:3px;vertical-align:middle;display:inline-block;text-indent:-9999em;border-top:1.1em solid rgba(38,104,237,.2);border-right:1.1em solid rgba(38,104,237,.2);border-bottom:1.1em solid rgba(38,104,237,.2);border-left:1.1em solid #2668ed;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.1s infinite linear;animation:load8 1.1s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.toggle-light-mode .icon-dark{display:none}html[data-darkmode=true] .toggle-light-mode .icon-light{display:none}html[data-darkmode=true] .toggle-light-mode .icon-dark{display:block}.pure-menu-link{padding:.5rem 1em;line-height:1.2rem}#menu-mute img,#menu-pause img{height:1.2rem}.pure-menu-item{height:initial}.pure-menu-item svg{height:1.2rem}.pure-menu-item *{vertical-align:middle}.pure-menu-item .bi-heart:hover{cursor:pointer}.pure-menu-item.active .pure-menu-link{background-color:var(--color-background-menu-link-hover);color:var(--color-text-menu-heading)}.pure-menu-item .action-icon{stroke:var(--color-text-menu-heading)}#overlay{opacity:.95;position:fixed;width:350px;max-width:100%;height:100%;top:50px;right:-350px;background-color:var(--color-table-stripe);border:1px solid #aaa;z-index:2;transform:translateX(0);transition:transform .5s ease}#overlay.visible{transform:translateX(-100%)}#overlay .content{font-size:.875rem;padding:1.1rem;max-width:400px;color:var(--color-watch-table-row-text)}#heartpath{height:1.6rem;width:1.6rem;z-index:100;transition:all ease .3s !important}#heartpath:hover{fill:red !important;transition:all ease .3s !important}.minitabs-wrapper{width:100%}.minitabs-wrapper>div[id]{padding:20px;border:1px solid #ccc;border-top:none}.minitabs-wrapper .minitabs-content{width:100%;display:flex}.minitabs-wrapper .minitabs-content>div{flex:1 1 auto;min-width:0;overflow:scroll}.minitabs-wrapper .minitabs{display:flex;border-bottom:1px solid #ccc}.minitabs-wrapper .minitab{flex:1;text-align:center;padding:12px 0;text-decoration:none;color:#333;background-color:#f1f1f1;border:1px solid #ccc;border-bottom:none;cursor:pointer;transition:background-color .3s}.minitabs-wrapper .minitab:hover{background-color:#ddd}.minitabs-wrapper .minitab.active{background-color:#fff;font-weight:bold}@media(min-width: 800px){body.preview-text-enabled #filters-and-triggers>div{display:flex;gap:20px;position:relative}}body.preview-text-enabled #edit-text-filter,body.preview-text-enabled #text-preview{flex:1;align-self:flex-start}body.preview-text-enabled #edit-text-filter #pro-tips{display:none}body.preview-text-enabled #text-preview{position:sticky;top:20px;padding-top:1rem;padding-bottom:1rem;display:block !important}body.preview-text-enabled #activate-text-preview{background-color:var(--color-grey-500)}body.preview-text-enabled .monospace-preview{background:var(--color-background-input);border:1px solid var(--color-grey-600);padding:1rem;color:var(--color-text-input);font-family:"Courier New",Courier,monospace;font-size:70%;word-break:break-word;white-space:pre-wrap}#activate-text-preview{right:0;position:absolute;z-index:3;box-shadow:1px 1px 4px var(--color-shadow-jump)}.cdio-table{width:100%;font-size:var(--body-main-text-size)}.cdio-table thead{text-transform:uppercase}.cdio-table thead a{color:var(--color-text)}.cdio-table td,.cdio-table th{vertical-align:middle;border:none}.cdio-table tbody tr{color:var(--color-watch-table-row-text);border-bottom:1px solid var(--color-table-line);background-color:var(--color-table-background)}.cdio-table tbody tr td{background-color:var(--color-table-background)}.cdio-table tbody tr:hover>td{background-color:var(--watchlist-row-hover)}.cdio-table-clip{border-radius:var(--common-round-border);overflow:hidden;margin-bottom:1.1rem}.seg{display:inline-flex;align-items:center;gap:2px;padding:2px;border:1px solid var(--color-border-table-cell);border-radius:var(--common-round-border);background:var(--color-background-table-thead)}.seg a,.seg button{display:inline-flex;align-items:center;gap:6px;border:0;background:rgba(0,0,0,0);color:var(--color-text-input-description);font-size:.8rem;font-weight:600;line-height:1.4;padding:5px 11px;border-radius:calc(var(--common-round-border) - 1px);text-decoration:none;cursor:pointer;white-space:nowrap}.seg a:hover,.seg button:hover{color:var(--color-text)}.seg a.active,.seg a:hover,.seg button.active,.seg button:hover{background:var(--color-background);color:var(--color-text);box-shadow:0 1px 2px rgba(0,0,0,.15)}html[data-darkmode=true] .seg a.active,html[data-darkmode=true] .seg button.active{background:var(--color-grey-400);box-shadow:0 1px 2px rgba(0,0,0,.5)}.seg-count{font-size:.62rem;line-height:1;font-weight:700;padding:2px 6px;border-radius:999px;background:var(--color-background-button-tag);color:var(--color-white)}.seg-count--unread{background:#3e95bb}.seg-count--error{background:var(--color-background-button-error)}.seg-count--deal{background:var(--color-background-button-success)}.cdio-btn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:var(--common-round-border);border:1px solid var(--color-border-table-cell);background:var(--color-background);color:var(--color-text-input-description);font-size:.8rem;font-weight:600;line-height:1;white-space:nowrap;text-decoration:none;cursor:pointer;transition:border-color .12s ease,color .12s ease,background-color .12s ease}.cdio-btn:hover{border-color:var(--color-border-input);color:var(--color-text)}.cdio-btn:focus-visible{outline:2px solid var(--color-link);outline-offset:2px}.cdio-btn svg{width:15px;height:15px;stroke:currentColor}.cdio-btn img{height:15px;display:block}.cdio-btn--icon{width:32px;padding:0;justify-content:center}.cdio-btn--sm{height:26px;padding:0 9px;font-size:.72rem;gap:5px}.cdio-btn--sm svg{width:13px;height:13px}.cdio-btn--primary{background:var(--color-background-button-primary);border-color:var(--color-background-button-primary);color:var(--color-text-button)}.cdio-btn--primary:hover{background:var(--color-link);border-color:var(--color-link);color:var(--color-text-button)}.cdio-btn--danger{color:var(--color-background-button-error)}.cdio-btn--danger:hover{color:var(--color-background-button-error);border-color:var(--color-background-button-error)}.cdio-btn--warning{color:#d68a00}.cdio-btn--warning:hover{color:#d68a00;border-color:#d68a00}.watch-table tr:has(input[name=uuids]:checked)>td{background-color:var(--watchlist-row-selected)}.watch-table tbody tr:hover td.buttons *,.watch-table tbody tr:focus-within td.buttons *,.watch-table tbody tr:has(input[name=uuids]:checked) td.buttons *{opacity:1}.select-all-banner{margin:.4rem 0;padding:.5rem .75rem;border-radius:var(--common-round-border);background:var(--watchlist-row-selected);color:var(--color-watch-table-row-text);font-size:var(--body-main-text-size)}.select-all-banner button{margin-left:.5rem;vertical-align:baseline}.watch-controls svg{width:18px;height:18px;stroke:currentColor;fill:none;vertical-align:middle}#stats_row{display:flex;align-items:center;width:100%;color:#fff;font-size:.85rem}#stats_row>*{padding-bottom:.5rem}#stats_row .left{text-align:left}#stats_row .left .records-selected{margin-top:.25rem;opacity:.9}#stats_row .right{opacity:.5;transition:opacity .6s ease;margin-left:auto;text-align:right}body.has-queue #stats_row .right{opacity:1}#checkbox-operations{margin-bottom:.55rem;background:var(--color-background-new-watch-form);padding:1em;border-radius:10px;max-width:100%;position:sticky;top:20px;display:none}#checkbox-operations button{margin-bottom:3px;margin-top:3px;display:inline-flex;align-items:center}#checkbox-operations i,#checkbox-operations svg{width:14px;height:14px;stroke:#fff}body.watch-selection-active #checkbox-operations{display:block}.watch-table .checkbox-uuid{text-align:center}.watch-table .checkbox-uuid>*{vertical-align:middle}@media only screen and (max-width: 1200px){.watch-table .last-checked,.watch-table .last-changed{text-align:center}}.watch-table #th-webpage{text-align:center}.watch-table tbody tr.unviewed{font-weight:bold}.watch-table tbody tr td.inline.title-col{width:100%}.watch-table tbody tr td.inline.title-col .grid-wrapper{display:grid;grid-template-columns:auto minmax(0, 1fr) auto;grid-auto-columns:auto;align-items:center;gap:.55rem}.watch-table tbody tr td.inline.title-col .grid-wrapper>.favicon{grid-column:1}.watch-table tbody tr td.inline.title-col .grid-wrapper>.watch-text-info{grid-column:2}.watch-table tbody tr td.inline.title-col .grid-wrapper>.status-icons{grid-column:3}.watch-table tbody tr td.inline.title-col .grid-wrapper>.restock-info-wrap{grid-column:4}@media only screen and (max-width: 1200px){.watch-table tbody tr td.inline.title-col .grid-wrapper>.restock-info-wrap{grid-column:1/-1;justify-self:center}}.watch-table tbody tr .watch-text-info{line-height:1.5}.watch-table tbody tr.checking-now td:first-child{position:relative}.watch-table tbody tr.checking-now td:first-child::before{content:"";position:absolute;top:0;bottom:0;left:0;width:3px;background-color:#293eff}.watch-table tbody tr.checking-now td.last-checked .spinner-wrapper{display:inline-block !important;white-space:nowrap !important}.watch-table tbody tr.checking-now td.last-checked .spinner{margin-right:.275rem}.watch-table tbody tr.checking-now td.last-checked .innertext{display:none !important}.watch-table tbody tr.queued a.recheck{display:none !important}.watch-table tbody tr.queued a.already-in-queue-button{display:inline-flex !important;opacity:.8}.watch-table tbody tr.paused a.pause-toggle.state-on{display:inline !important}.watch-table tbody tr.paused a.pause-toggle.state-off{display:none !important}.watch-table tbody tr.notification_muted a.mute-toggle.state-on{display:inline !important}.watch-table tbody tr.notification_muted a.mute-toggle.state-off{display:none !important}.watch-table tbody tr.has-error .error-text{display:block !important;color:var(--color-watch-table-error)}.watch-table tbody tr.single-history a.preview-link{display:inherit !important}.watch-table tbody tr.multiple-history a.history-link{display:inherit !important}.watch-table tbody tr.has-favicon.unviewed img.favicon{opacity:1 !important;border-radius:4px}.watch-table td.buttons{font-size:12px;white-space:nowrap}.watch-table td.buttons>div{display:inline-flex;align-items:center;gap:6px}.watch-table td.buttons>div>*{opacity:0;transition:opacity .12s ease}.watch-table td.title-col{word-break:break-all;white-space:normal}.watch-table td a.external::after{content:"";display:inline-block;width:var(--body-main-text-size);height:var(--body-main-text-size);vertical-align:-0.1em;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23777' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'/%3E%3Cpolyline points='15 3 21 3 21 9'/%3E%3Cline x1='10' y1='14' x2='21' y2='3'/%3E%3C/svg%3E") no-repeat center/contain;margin:0 3px 0 5px}.watch-table td.watch-controls>div{display:flex;justify-content:space-between;align-items:center}@media(min-width: 1020px){.watch-table th{white-space:nowrap}}.watch-table th#h-lastchanged,.watch-table th#h-lastchecked{text-align:center}.watch-table th a{font-weight:normal}.watch-table th a.active{font-weight:bolder}.watch-table th a.inactive .arrow{display:none}.watch-table th#mute-pause{white-space:nowrap}.watch-table th#mute-pause>div{display:flex;justify-content:space-between;align-items:center}.watch-table.favicon-not-enabled tr .favicon{display:none}.watch-table .status-icons{white-space:nowrap;display:flex;align-items:center;gap:4px}.watch-table .status-icons>*{vertical-align:middle}.watch-table .title-wrapper{display:flex;align-items:center;gap:10px}.watch-table .title-col-inner{display:inline-block;vertical-align:middle}.watch-table img.favicon{vertical-align:middle;max-width:36px;max-height:36px;height:36px}.watch-table img.favicon:hover{outline:2px solid color-mix(in srgb, var(--color-watch-table-row-text) 50%, transparent);outline-offset:1px;border-radius:4px}body.watch-selection-active #buttons-for-all-watches{display:none !important}#buttons-for-all-watches{display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:.55rem;margin:0}#watch-table-wrapper{display:inline-block;width:100%}#watch-table-wrapper #list-related-buttons{display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:.55rem;margin:0;padding:1.1rem 0 .55rem 0}#watch-table-wrapper.has-error #list-related-buttons #post-list-with-errors{display:inline-flex !important}#watch-table-wrapper.has-unread-changes #list-related-buttons #post-list-unread,#watch-table-wrapper.has-unread-changes #list-related-buttons #post-list-mark-views{display:inline-flex !important}#watch-table-wrapper #tag-lister #tag-all{opacity:1}#watch-table-wrapper #tag-lister.active-tag .button-tag{opacity:.35}#watch-table-wrapper #tag-lister.active-tag .button-tag.active,#watch-table-wrapper #tag-lister.active-tag .button-tag:hover{opacity:1}.content .group-overview-table{width:100%}.content .group-overview-table .pure-button{margin-top:.3rem;margin-bottom:.3rem}.content .group-overview-table .watch-controls,.content .group-overview-table .watch-count{text-align:center}.content .group-overview-table td{padding:5px !important;color:var(--color-watch-table-row-text)}.pure-button{border-radius:var(--common-round-border)}body.blueprint-watchlist #add-watch-ui{margin-bottom:1.1rem;padding:0}body.blueprint-watchlist #add-watch-url-row{margin-bottom:0 !important}body.blueprint-watchlist #quick-watch-llm-intent{margin-top:.55rem}body.blueprint-watchlist #url{width:auto}@media only screen and (min-width: 980px){body.blueprint-watchlist #url{min-width:32rem;max-width:min(80%,80vw);box-sizing:border-box}}body.blueprint-watchlist #quick-watch-llm-intent,body.blueprint-watchlist #quick-watch-processor-type{display:none}body.blueprint-watchlist #new-watch-form:has(#url:not(:placeholder-shown)) #quick-watch-llm-intent,body.blueprint-watchlist #new-watch-form:has(#url:not(:placeholder-shown)) #quick-watch-processor-type{display:block}@media(max-width: 767px){.watch-table thead{display:block}.watch-table thead tr th{display:inline-block}.watch-table thead tr th .hide-on-mobile{display:none}.watch-table thead .empty-cell{display:none}.watch-table .last-checked::before{color:var(--color-text);content:attr(data-label) " "}.watch-table .last-changed::before{color:var(--color-text);content:attr(data-label) " "}.watch-table td.inline{display:inline-block}.watch-table .pure-table td,.watch-table .pure-table th{border:none}.watch-table td{border:none;border-bottom:1px solid var(--color-border-watch-table-cell);vertical-align:middle}.watch-table td:before{top:6px;left:6px;width:45%;padding-right:10px;white-space:nowrap}.watch-table.pure-table-striped tr{background-color:var(--color-table-background)}.watch-table.pure-table-striped tr:nth-child(2n-1){background-color:var(--color-table-stripe)}.watch-table.pure-table-striped tr:nth-child(2n-1) td{background-color:inherit}}@media(max-width: 767px){.watch-table tbody tr{padding-bottom:10px;padding-top:10px;display:grid;grid-template-columns:40px 1fr 100px;grid-template-rows:auto auto auto auto;gap:.5rem}.watch-table tbody tr .counter-i{display:none}.watch-table tbody tr>td{border-bottom:none}.watch-table tbody tr>td[colspan]{grid-column:1/-1}.watch-table tbody tr>td.title-col{grid-column:1/-1;grid-row:1}.watch-table tbody tr>td.title-col .watch-title{font-size:.92rem}.watch-table tbody tr>td.title-col .link-spread{display:none}.watch-table tbody tr>td.last-checked{grid-column:1/-1;grid-row:2}.watch-table tbody tr>td.last-changed{grid-column:1/-1;grid-row:3}.watch-table tbody tr>td.checkbox-uuid{grid-column:1;grid-row:4}.watch-table tbody tr>td.buttons{grid-column:2;grid-row:4;display:flex;align-items:center;justify-content:flex-start}.watch-table tbody tr>td.watch-controls{grid-column:3;grid-row:4;display:grid;place-items:center}.watch-table tbody tr>td.watch-controls a img{padding:10px}.pure-table td{padding:0 !important}}@media(min-width: 768px){.watch-table thead tr th .hide-on-desktop{display:none}.watch-table td.last-checked .innertext,.watch-table td.last-changed .innertext{white-space:nowrap}}#llm-intent-section textarea{white-space:normal;overflow-wrap:break-word;overflow-x:hidden;overflow-y:auto;resize:vertical;font-family:inherit}ul#conditions_match_logic{list-style:none}ul#conditions_match_logic input,ul#conditions_match_logic label,ul#conditions_match_logic li{display:inline-block}ul#conditions_match_logic li{padding-right:1em}.fieldlist_formfields{width:100%;background-color:var(--color-background, #fff);border-radius:4px;border:1px solid var(--color-border-table-cell, #cbcbcb)}.fieldlist_formfields .fieldlist-header{display:flex;background-color:var(--color-background-table-thead, #e0e0e0);font-weight:bold;border-bottom:1px solid var(--color-border-table-cell, #cbcbcb)}.fieldlist_formfields .fieldlist-header-cell{flex:1;padding:.5em 1em;text-align:left}.fieldlist_formfields .fieldlist-header-cell:last-child{flex:0 0 120px}.fieldlist_formfields .fieldlist-body{display:flex;flex-direction:column}.fieldlist_formfields .fieldlist-row{display:flex;border-bottom:1px solid var(--color-border-table-cell, #cbcbcb)}.fieldlist_formfields .fieldlist-row:last-child{border-bottom:none}.fieldlist_formfields .fieldlist-row:nth-child(2n-1){background-color:var(--color-table-stripe, #f2f2f2)}.fieldlist_formfields .fieldlist-row.error-row{background-color:var(--color-error-input, #ffdddd)}.fieldlist_formfields .fieldlist-cell{flex:1;padding:.5em 1em;display:flex;flex-direction:column;justify-content:center}.fieldlist_formfields .fieldlist-cell input,.fieldlist_formfields .fieldlist-cell select{width:100%}.fieldlist_formfields .fieldlist-cell.fieldlist-actions{flex:0 0 120px;display:flex;flex-direction:row;align-items:center;gap:4px}.fieldlist_formfields ul.errors{margin-top:.5em;margin-bottom:0;padding:.5em;background-color:var(--color-error-background-snapshot-age, #ffdddd);border-radius:4px;list-style-position:inside}@media only screen and (max-width: 760px){.fieldlist_formfields .fieldlist-header,.fieldlist_formfields .fieldlist-row{flex-direction:column}.fieldlist_formfields .fieldlist-header-cell{display:none}.fieldlist_formfields .fieldlist-row{padding:.5em 0;border-bottom:2px solid var(--color-border-table-cell, #cbcbcb)}.fieldlist_formfields .fieldlist-cell{padding:.25em .5em}.fieldlist_formfields .fieldlist-cell.fieldlist-actions{flex:1;justify-content:flex-start;padding-top:.5em}.fieldlist_formfields .fieldlist-cell:not(:last-child){margin-bottom:.5em}.fieldlist_formfields .fieldlist-cell::before{content:attr(data-label);font-weight:bold;margin-bottom:.25em}}.fieldlist_formfields .addRuleRow,.fieldlist_formfields .removeRuleRow,.fieldlist_formfields .verifyRuleRow{cursor:pointer;border:none;padding:4px 8px;border-radius:3px;font-weight:bold;background-color:#aaa;color:var(--color-foreground-text, #fff)}.fieldlist_formfields .addRuleRow:hover,.fieldlist_formfields .removeRuleRow:hover,.fieldlist_formfields .verifyRuleRow:hover{background-color:#999}body.checking-now #checking-now-fixed-tab{display:block !important}#checking-now-fixed-tab{background:#ccc;border-radius:5px;bottom:0;color:var(--color-text);display:none;font-size:.8rem;left:0;padding:5px;position:fixed}#selector-wrapper{height:100%;text-align:center;max-height:70vh;overflow-y:scroll;position:relative}#selector-wrapper>img{position:absolute;z-index:4;max-width:100%}#selector-wrapper>canvas{position:relative;z-index:5;max-width:100%}#selector-wrapper>canvas:hover{cursor:pointer}#selector-current-xpath{font-size:80%}@media(min-width: 901px){body.blueprint-add_watch_ui #add-watch-ui{width:80%}}#add-watch-ui{padding:0}#add-watch-ui #add-watch-url-row{display:flex;gap:.5rem;align-items:stretch;margin-bottom:1rem}#add-watch-ui #add-watch-url-row>span{flex:1 1 auto;min-width:0}#add-watch-ui #add-watch-url-row>span input{width:100%}#add-watch-ui #add-watch-url-row #add-watch-go{flex:0 0 auto;white-space:nowrap}#add-watch-ui #add-watch-panes{display:flex;gap:.55rem;align-items:stretch}@media(max-width: 900px){#add-watch-ui #add-watch-panes{flex-direction:column}}#add-watch-ui #add-watch-selector-pane{flex:1 1 62%;min-width:0;min-height:380px;position:relative;display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--color-background-tab);border-radius:6px;background:rgba(0,0,0,.15);padding:.75rem}#add-watch-ui #add-watch-selector-pane #add-watch-empty-state,#add-watch-ui #add-watch-selector-pane #add-watch-spinner,#add-watch-ui #add-watch-selector-pane #add-watch-error{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;text-align:center;padding:2rem 1rem}#add-watch-ui #add-watch-selector-pane #add-watch-empty-state{opacity:.8}#add-watch-ui #add-watch-selector-pane #add-watch-empty-state svg{opacity:.55}#add-watch-ui #add-watch-selector-pane #add-watch-empty-state strong{font-size:1.05rem}#add-watch-ui #add-watch-selector-pane #add-watch-empty-state span{font-size:.85rem;opacity:.8;max-width:32ch}#add-watch-ui #add-watch-selector-pane #add-watch-spinner{gap:1.2rem}#add-watch-ui #add-watch-selector-pane #add-watch-spinner .spinner{font-size:5px}#add-watch-ui #add-watch-selector-pane #add-watch-spinner .fetching-update-notice{font-size:.85rem;opacity:.85}#add-watch-ui #add-watch-selector-pane #add-watch-error{color:#ffb4b4;font-size:.9rem;word-break:break-word}#add-watch-ui #add-watch-selector-pane #selector-wrapper{position:relative;display:block;width:100%;flex:1 1 auto;min-height:0;max-height:none;overflow-y:auto;overflow-x:hidden;text-align:left}#add-watch-ui #add-watch-selector-pane #selector-wrapper>img{position:relative;display:block;max-width:100%;height:auto;z-index:4}#add-watch-ui #add-watch-selector-pane #selector-wrapper>canvas{position:absolute;top:0;left:0;max-width:none;z-index:5}#add-watch-ui #add-watch-options-pane{flex:0 0 34%;min-width:0;display:flex;flex-direction:column;gap:1.1rem}@media(max-width: 900px){#add-watch-ui #add-watch-options-pane{flex:1 1 auto}}#add-watch-ui #add-watch-options-pane .add-watch-option-group label{display:inline-block}#add-watch-ui #add-watch-options-pane #by-element-toggle-group .pure-form-message-inline{display:block;margin-top:.25rem;font-size:.8rem;opacity:.8}#add-watch-ui #add-watch-options-pane #by-element-toggle-group #clear-selector{margin-top:.5rem}#add-watch-ui #add-watch-options-pane #quick-watch-llm-intent label{display:block;margin-bottom:.35rem}#add-watch-ui #add-watch-options-pane #add-watch-submit-row{display:flex;flex-wrap:wrap;gap:.5rem}body.blueprint-add_watch_ui #add-watch-ui{height:90vh;display:flex;flex-direction:column}body.blueprint-add_watch_ui #add-watch-fieldset{flex:1 1 auto;min-height:0;min-width:0;display:flex;flex-direction:column;border:0;margin:0;padding:0}body.blueprint-add_watch_ui #add-watch-legend{margin:0 0 .75rem;font-size:1.1rem;font-weight:600}body.blueprint-add_watch_ui #new-watch-form{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}@media(min-width: 901px){body.blueprint-add_watch_ui #add-watch-panes{flex:1 1 auto;min-height:0}body.blueprint-add_watch_ui #add-watch-selector-pane{min-height:0}}@media(max-width: 900px){body.blueprint-add_watch_ui #add-watch-ui{height:auto}body.blueprint-add_watch_ui #add-watch-panes{flex:0 0 auto}}.ternary-radio-group{display:flex;gap:0;border:1px solid var(--color-grey-750);border-radius:4px;overflow:hidden;width:fit-content;background:var(--color-background)}.ternary-radio-group .ternary-radio-option{position:relative;cursor:pointer;margin:0;display:flex;align-items:center}.ternary-radio-group .ternary-radio-option input[type=radio]{position:absolute;opacity:0;width:0;height:0}.ternary-radio-group .ternary-radio-option .ternary-radio-label{padding:8px 16px;background:var(--color-grey-900);border:none;border-right:1px solid var(--color-grey-750);font-size:13px;font-weight:500;color:var(--color-text);transition:all .2s ease;cursor:pointer;display:block;text-align:center}.ternary-radio-group .ternary-radio-option:last-child .ternary-radio-label{border-right:none}.ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label{background:var(--color-link);color:var(--color-text-button);font-weight:600}.ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label.ternary-default{background:var(--color-grey-600);color:var(--color-text-button)}.ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label:hover{background:#1a7bc4}.ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label:hover.ternary-default{background:var(--color-grey-500)}.ternary-radio-group .ternary-radio-option:hover .ternary-radio-label{background:var(--color-grey-800)}@media(max-width: 480px){.ternary-radio-group{width:100%}.ternary-radio-group .ternary-radio-label{flex:1;min-width:auto}}input[type=radio].pure-radio:checked+label,input[type=radio].pure-radio:checked{background:var(--color-link);color:var(--color-text-button)}html[data-darkmode=true] .ternary-radio-group .ternary-radio-option .ternary-radio-label{background:var(--color-grey-350)}html[data-darkmode=true] .ternary-radio-group .ternary-radio-option:hover .ternary-radio-label{background:var(--color-grey-400)}html[data-darkmode=true] .ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label{background:var(--color-link);color:var(--color-text-button)}html[data-darkmode=true] .ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label.ternary-default{background:var(--color-grey-600)}html[data-darkmode=true] .ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label:hover{background:#1a7bc4}html[data-darkmode=true] .ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label:hover.ternary-default{background:var(--color-grey-500)}body.processor-image_ssim_diff #edit-text-filter .text-filtering{display:none}body.processor-image_ssim_diff #conditions-tab{display:none}.modal-dialog{border:none;border-radius:10px;padding:0;background:var(--color-background);color:var(--color-text);box-shadow:0 5px 20px rgba(0,0,0,.3);max-width:500px;width:90%}.modal-dialog::backdrop{background:rgba(0,0,0,.6);backdrop-filter:blur(3px);animation:fadeIn .2s ease-out}.modal-dialog[open]{animation:slideIn .25s ease-out}.modal-dialog .modal-header{padding:1.5rem;border-bottom:1px solid var(--color-border-table-cell);display:flex;align-items:center;gap:1rem}.modal-dialog .modal-header .modal-icon{font-size:2rem;line-height:1;flex-shrink:0}.modal-dialog .modal-header .modal-icon.warning{color:var(--color-warning)}.modal-dialog .modal-header .modal-icon.danger{color:var(--color-background-button-error)}.modal-dialog .modal-header .modal-icon.info{color:var(--color-background-button-primary)}.modal-dialog .modal-header .modal-title{font-size:1.3rem;font-weight:bold;margin:0;color:var(--color-text)}.modal-dialog .modal-body{padding:1.5rem;line-height:1.6}.modal-dialog .modal-body p{margin:0 0 1rem 0}.modal-dialog .modal-body p:last-child{margin-bottom:0}.modal-dialog .modal-body strong{color:var(--color-text);font-weight:600}.modal-dialog .modal-footer{padding:1rem 1.5rem;border-top:1px solid var(--color-border-table-cell);display:flex;gap:.75rem;justify-content:flex-end;background:var(--color-grey-900)}.modal-dialog .modal-footer button{padding:.6rem 1.5rem;border:none;border-radius:4px;cursor:pointer;font-weight:500;transition:all .2s ease;font-size:.95rem}.modal-dialog .modal-footer button:hover{transform:translateY(-1px);box-shadow:0 2px 8px rgba(0,0,0,.15)}.modal-dialog .modal-footer button:active{transform:translateY(0)}.modal-dialog .modal-footer button.modal-btn-cancel{background:var(--color-background-button-cancel);color:var(--color-grey-200)}.modal-dialog .modal-footer button.modal-btn-cancel:hover{background:var(--color-grey-700)}.modal-dialog .modal-footer button.modal-btn-confirm{background:var(--color-background-button-primary);color:var(--color-white)}.modal-dialog .modal-footer button.modal-btn-confirm:hover{opacity:.9}.modal-dialog .modal-footer button.modal-btn-danger{background:var(--color-background-button-error);color:var(--color-white)}.modal-dialog .modal-footer button.modal-btn-danger:hover{background:var(--color-dark-red)}.modal-dialog .modal-footer button.modal-btn-warning{background:var(--color-background-button-warning);color:var(--color-white)}.modal-dialog .modal-footer button.modal-btn-warning:hover{opacity:.9}html[data-darkmode=true] .modal-dialog{box-shadow:0 5px 30px rgba(0,0,0,.7)}html[data-darkmode=true] .modal-dialog .modal-footer{background:var(--color-grey-200)}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes slideIn{from{opacity:0;transform:translateY(-20px) scale(0.95)}to{opacity:1;transform:translateY(0) scale(1)}}@media only screen and (max-width: 760px){.modal-dialog{width:95%;max-width:none}.modal-dialog .modal-header{padding:1rem}.modal-dialog .modal-header .modal-title{font-size:1.1rem}.modal-dialog .modal-body{padding:1rem;font-size:.95rem}.modal-dialog .modal-footer{padding:.75rem 1rem;flex-wrap:wrap}.modal-dialog .modal-footer button{flex:1;min-width:120px}}.bulk-choice-list{display:flex;flex-direction:column;gap:2px;max-height:50vh;overflow-y:auto;text-align:left}.bulk-choice-list .bulk-choice-row{display:block;padding:6px 8px;cursor:pointer;border-radius:4px}.bulk-choice-list .bulk-choice-row input[type=radio]{margin-right:8px}.bulk-choice-list .bulk-choice-row:hover{background:rgba(127,127,127,.15)}.bulk-choice-list .bulk-choice-row em{opacity:.7;font-size:.9em}#language-selector-flag{display:inline-block;width:1.2em;height:1.2em;vertical-align:middle;border-radius:50%;overflow:hidden;opacity:.6}#language-selector-flag:hover{opacity:1}.language-list{display:flex;flex-direction:column;gap:.5rem;padding:.5rem 0}.language-option{display:flex;align-items:center;gap:1rem;padding:.25rem;border-radius:4px;transition:background-color .2s ease;text-decoration:none;color:var(--color-text);border:1px solid rgba(0,0,0,0)}.language-option:hover{background-color:var(--color-background-menu-link-hover);border-color:var(--color-border-table-cell)}.language-option.active{background-color:var(--color-link);color:var(--color-text-button);font-weight:600}.language-option .flag{font-size:1.5rem;flex-shrink:0}.language-option .language-name{flex-grow:1;font-size:1rem}#language-modal .language-list .lang-option{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;margin-right:.5em;border-radius:50%;overflow:hidden}.action-sidebar{display:flex;flex-direction:column;align-items:center;align-self:flex-start;position:sticky;top:0;height:100vh;background:hsla(0,0%,100%,.05);z-index:60;pointer-events:none}@media only screen and (max-width: 980px){.action-sidebar{display:none}}.action-sidebar-inner{pointer-events:auto;width:64px;overflow:hidden;flex:1 1 auto;display:flex;flex-direction:column;transition:width .08s ease-out;padding-left:.55rem;padding-right:.55rem}body.actionsidebar-minimal .action-sidebar-inner:hover,body.actionsidebar-minimal .action-sidebar-inner:focus-within{width:200px;transition:width .22s cubic-bezier(0.2, 0.7, 0.2, 1)}body.actionside-bar-on .action-sidebar-inner{width:200px;transition:none}ul.action-sidebar-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:0}.action-sidebar-list.action-sidebar-list--bottom{margin-top:auto}.action-sidebar-li{list-style:none;margin:0;position:relative;color:var(--color-white)}.action-sidebar-li:nth-child(2){padding-top:2rem}.action-sidebar-li button{padding:0;margin:0}.action-sidebar-li a{color:var(--color-white)}.action-sidebar-li--spark .queue-spark{display:block;width:100%;height:15px;box-sizing:border-box;padding:0;margin:0;border-radius:3px;background:hsla(0,0%,100%,.05);box-shadow:inset 0 0 0 1px hsla(0,0%,100%,.06)}.action-sidebar-divider{height:1px;background:hsla(0,0%,100%,.18);margin:6px 16px;list-style:none}.action-sidebar .action-sidebar-item{position:relative;display:flex;align-items:center;padding:.55rem;font-size:var(--body-main-text-size);border-radius:var(--common-round-border);color:var(--color-white);text-decoration:none;white-space:nowrap;background:rgba(0,0,0,0);border:0;text-align:left;cursor:pointer;transition:background-color .12s ease,color .12s ease}.action-sidebar .action-sidebar-item:hover{background-color:var(--color-sidebar-item-hover-bg)}.action-sidebar .action-sidebar-item:hover .action-icon{stroke-width:2.3}.action-sidebar .action-sidebar-item:focus-visible{outline:2px solid var(--color-link);outline-offset:2px}.action-sidebar .action-sidebar-item.active .action-icon{stroke-width:2.4;filter:drop-shadow(0 0 0.4px currentColor)}.action-sidebar .action-sidebar-item.active .action-label{font-weight:700}.action-sidebar .action-sidebar-item.is-disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.action-sidebar .action-sidebar-item.action-sidebar-item--accent .action-icon{stroke:#fff;stroke-width:2.6}.action-sidebar .action-sidebar-item .action-label{flex:0 0 auto;margin-left:14px;font-family:inherit;font-weight:400;letter-spacing:0;text-transform:none;color:inherit;opacity:0;transform:translateX(-4px);transition:opacity .05s ease-out,transform .05s ease-out}.action-sidebar .action-sidebar-item .action-badge{margin-left:10px;font-size:.7rem;line-height:1;padding:3px 7px;border-radius:999px;background:hsla(0,0%,100%,.14);color:hsla(0,0%,100%,.85);text-transform:uppercase;letter-spacing:.06em;font-weight:700;pointer-events:none;opacity:0;transition:opacity .05s ease-out}.action-sidebar .action-sidebar-item .action-badge.action-badge--count{margin-left:auto;text-transform:none;letter-spacing:0;background:#3e95bb;color:var(--color-white);font-variant-numeric:tabular-nums}body.actionsidebar-minimal .action-sidebar-inner:hover .action-sidebar-item .action-label,body.actionsidebar-minimal .action-sidebar-inner:focus-within .action-sidebar-item .action-label{opacity:1;transform:translateX(0);transition:opacity .18s ease .05s,transform .18s cubic-bezier(0.2, 0.7, 0.2, 1) .05s}body.actionsidebar-minimal .action-sidebar-inner:hover .action-sidebar-item .action-badge,body.actionsidebar-minimal .action-sidebar-inner:focus-within .action-sidebar-item .action-badge{opacity:1;transition:opacity .18s ease .05s}body.actionside-bar-on .action-sidebar .action-sidebar-item .action-label{opacity:1;transform:translateX(0);transition:none}body.actionside-bar-on .action-sidebar .action-sidebar-item .action-badge{opacity:1;transition:none}.action-icon{flex:0 0 auto;width:24px;height:24px;stroke:currentColor;stroke-width:1.9;fill:none;stroke-linecap:round;stroke-linejoin:round}.action-badge{flex:0 0 auto;font-size:.62rem;text-transform:uppercase;letter-spacing:.08em;padding:2px 6px;border-radius:999px;background:hsla(0,0%,100%,.15);color:hsla(0,0%,100%,.85);font-weight:700}.mobile-menu-section{padding:.5rem .75rem;border-bottom:1px solid var(--color-border-table-cell)}.mobile-menu-section ul.action-sidebar-list{gap:1px}.mobile-menu-section ul.action-sidebar-list .action-sidebar-li a,.mobile-menu-section ul.action-sidebar-list .action-sidebar-li button{padding:.55rem}.mobile-menu-section .action-sidebar-item{position:relative;display:flex;align-items:center;justify-content:flex-start;gap:.55rem;padding:.55rem .55rem;border-radius:var(--common-round-border);color:var(--color-text)}.mobile-menu-section .action-sidebar-item:hover{background-color:var(--color-background-menu-link-hover);color:var(--color-text)}.mobile-menu-section .action-sidebar-item.active{background-color:var(--color-background-menu-link-hover);color:var(--color-text)}.mobile-menu-section .action-sidebar-item .action-label{position:static;transform:none;background:rgba(0,0,0,0);box-shadow:none;color:inherit;opacity:1;pointer-events:auto;padding:0;font-weight:500}.mobile-menu-section .action-sidebar-item .action-label::before{display:none}.mobile-menu-section .action-sidebar-item .action-badge{position:static;margin-left:auto;font-size:.62rem;background:rgba(0,0,0,.08);color:var(--color-text)}.mobile-menu-section .action-sidebar-item.action-sidebar-item--accent{background:var(--color-background-menu-link-hover);box-shadow:inset 0 0 0 1px var(--color-border-table-cell);color:var(--color-text)}.mobile-menu-section .action-sidebar-item.action-sidebar-item--accent .action-label{color:inherit}.mobile-menu-section .action-sidebar-item--button{background:rgba(0,0,0,0);border:none;cursor:pointer;text-align:left;font:inherit}#add-watch-live-info{width:100%;margin-top:1rem}#add-watch-live-info .add-watch-live-placeholder{border:1px dashed hsla(0,0%,100%,.25);background:hsla(0,0%,100%,.04);border-radius:10px;padding:1.25rem;color:var(--color-white)}#add-watch-live-info .add-watch-live-placeholder h3{margin:0 0 .4rem 0;font-size:1rem;letter-spacing:.02em}#add-watch-live-info .add-watch-live-placeholder .muted{opacity:.7;margin:0 0 .75rem 0;font-size:.85rem}#add-watch-live-info .add-watch-live-placeholder .add-watch-live-stream{font-size:.85rem;opacity:.6;padding:.6rem 0}.mobile-menu-drawer .action-sidebar-list{padding:0}.mobile-menu-drawer .mobile-menu-section .action-sidebar-item{padding-left:0}#action-sidebar-logo{padding-top:1.1rem;padding-left:.55rem}.actionsidebar-minimal #checking-now-stats-sidebar{display:none}.actionsidebar-minimal #cdio-logo #logo-expanded{display:none}.actionsidebar-minimal.action-side-bar-expanded #checking-now-stats-sidebar{display:block}.actionsidebar-minimal.action-side-bar-expanded #cdio-logo #logo-expanded{display:inline-block}.action-side-bar-expanded #cdio-logo #logo-short{display:none}#queue-page{width:100%;color:var(--color-white)}#queue-page h2,#queue-page h3{color:var(--color-white)}#queue-page .queue-panel{background:var(--color-background-new-watch-form);padding:1em;border-radius:10px;margin-bottom:1em;width:100%;box-sizing:border-box;color:var(--color-white)}#queue-page .queue-stats{display:grid;grid-template-columns:repeat(auto-fit, minmax(160px, 1fr));gap:.75rem}#queue-page .queue-stat .label{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;opacity:.7}#queue-page .queue-stat .value{font-size:1.6rem;font-weight:700;color:var(--color-white)}#queue-page .queue-stat.queue-stat--action{display:flex;align-items:center;justify-content:flex-start}#queue-page .queue-stat.queue-stat--action .pure-button{white-space:nowrap}#queue-page table.pure-table{width:100%;background:rgba(0,0,0,0);color:var(--color-white);font-size:80%}#queue-page table.pure-table thead th{background:rgba(0,0,0,0);color:var(--color-white);border-bottom:1px solid hsla(0,0%,100%,.18);font-weight:700;white-space:nowrap}#queue-page table.pure-table td{color:var(--color-white);border-color:hsla(0,0%,100%,.08);white-space:nowrap}#queue-page table.pure-table td.title-col,#queue-page table.pure-table td.watch-cell{white-space:normal;word-break:break-all}#queue-page table.pure-table td.time-cell{font-variant-numeric:tabular-nums;color:hsla(0,0%,100%,.75);font-size:.95em}#queue-page table.pure-table code,#queue-page table.pure-table small,#queue-page table.pure-table em,#queue-page table.pure-table strong{color:var(--color-white)}#queue-page table.pure-table code{background:rgba(0,0,0,.18)}#queue-page table.pure-table small{opacity:.7}#queue-page table.pure-table-striped tr:nth-child(2n-1) td{background:hsla(0,0%,100%,.04)}#queue-page tr.is-completed td{opacity:.45;transition:opacity .4s ease}#queue-page tbody[data-section=workers]{border-bottom:1px solid hsla(0,0%,100%,.18)}#queue-page tr.worker-slot td{border-color:hsla(0,0%,100%,.05)}#queue-page tr.worker-idle td{background:hsla(0,0%,100%,.02)}#queue-page .inline-tag,#queue-page .processor-badge,#queue-page .watch-tag-list,#queue-page .tracking-ldjson-price-data,#queue-page .restock-label{background:hsla(0,0%,100%,.14);color:var(--color-white)}#queue-page .inline-tag--running{background:rgba(28,184,65,.45)}#queue-page .inline-tag--idle{background:hsla(0,0%,100%,.08);color:hsla(0,0%,100%,.6)}#queue-page .inline-tag--done{background:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.7)}#queue-page a.queue-cancel{display:inline-block;margin-left:8px;font-size:.75rem;color:hsla(0,0%,100%,.65);text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px}#queue-page a.queue-cancel:hover{color:var(--color-white);text-decoration-style:solid}#queue-page a.queue-cancel.is-busy{pointer-events:none;opacity:.5}#queue-page tr.is-new td{animation:queue-row-in .45s ease}@keyframes queue-row-in{from{background-color:rgba(28,184,65,.18)}to{background-color:rgba(0,0,0,0)}}#queue-page .queue-waiting{display:none;align-items:center;gap:.5rem;margin-top:1rem;padding:.5rem 0;color:hsla(0,0%,100%,.7);font-size:.85rem}#queue-page .queue-waiting[data-show=true]{display:flex}#queue-page .queue-waiting .spinner{margin:0;flex:0 0 auto;border-top-color:hsla(0,0%,100%,.18);border-right-color:hsla(0,0%,100%,.18);border-bottom-color:hsla(0,0%,100%,.18);border-left-color:var(--color-white)}.hamburger-menu{display:none;background:rgba(0,0,0,0);border:none;cursor:pointer;padding:.55rem;z-index:10001;position:relative}@media only screen and (max-width: 980px){.hamburger-menu{display:flex;flex-direction:column;justify-content:center;align-items:center}}.hamburger-icon{width:24px;height:20px;position:relative;display:flex;flex-direction:column;justify-content:space-between}.hamburger-icon span{display:block;height:3px;width:100%;background:var(--color-white);border-radius:2px;transition:all .3s cubic-bezier(0.68, -0.55, 0.265, 1.55);transform-origin:center}.hamburger-menu.active .hamburger-icon span{background-color:var(--color-text)}.hamburger-menu.active .hamburger-icon span:nth-child(1){transform:translateY(8.5px) rotate(45deg)}.hamburger-menu.active .hamburger-icon span:nth-child(2){opacity:0;transform:translateX(-10px)}.hamburger-menu.active .hamburger-icon span:nth-child(3){transform:translateY(-8.5px) rotate(-45deg)}.mobile-menu-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:9999;opacity:0;transition:opacity .3s ease}.mobile-menu-overlay.active{display:block;opacity:1}.mobile-menu-drawer{position:fixed;top:0;right:-280px;width:280px;height:100%;background:var(--color-background);opacity:1;box-shadow:-2px 0 8px rgba(0,0,0,.15);z-index:10000;transition:right .3s cubic-bezier(0.68, -0.55, 0.265, 1.55);overflow-y:auto;padding-top:60px}.mobile-menu-drawer #cdio-logo{color:var(--color-text)}.mobile-menu-drawer #cdio-logo #logo-short{display:none}.mobile-menu-drawer #cdio-logo #logo-expanded{display:inline-block}.mobile-menu-drawer .action-icon{stroke:var(--color-text)}.mobile-menu-drawer.active{right:0}.mobile-menu-drawer .mobile-menu-items{list-style:none;padding:1rem 0;margin:0}.mobile-menu-drawer .mobile-menu-items li{border-bottom:1px solid var(--color-border-table-cell)}.mobile-menu-drawer .mobile-menu-items li>*{display:block;padding:1rem 1.5rem;color:var(--color-text);text-decoration:none;font-weight:500;transition:background .2s ease}.mobile-menu-drawer .mobile-menu-items li>*:hover{background:var(--color-background-menu-link-hover)}.mobile-menu-drawer .mobile-menu-items li#menu-pause,.mobile-menu-drawer .mobile-menu-items li#menu-mute{display:none}.logo-cdio{font-weight:bold;font-size:1.1rem}.logo-cdio .logo-cd{color:var(--color-grey-500)}.logo-cdio .logo-io{color:var(--color-text)}.menu-always-visible{display:flex;align-items:center;gap:.5rem;margin-left:auto}@media only screen and (max-width: 980px){#top-right-menu .menu-collapsible{display:none !important}.pure-menu-horizontal{overflow-x:visible !important}#nav-menu{overflow-x:visible !important}}@media only screen and (min-width: 1025px){.hamburger-menu,.mobile-menu-drawer,.mobile-menu-overlay{display:none !important}}html[data-darkmode=true] .mobile-menu-drawer{box-shadow:-2px 0 8px rgba(0,0,0,.4)}#search-modal .modal-body{padding:2rem 1.5rem}#search-modal .modal-body .pure-control-group{padding-bottom:0}#search-modal .modal-body .pure-control-group label{display:block;margin-bottom:.5rem;font-size:.9rem;font-weight:600;color:var(--color-text)}#search-modal .modal-body .pure-control-group #search-modal-input{width:100%;max-width:100%;box-sizing:border-box;padding:.6rem .8rem;font-size:1rem;border:1px solid var(--color-border-input);border-radius:4px;background-color:var(--color-background-input);color:var(--color-text-input);box-shadow:inset 0 1px 3px var(--color-shadow-input);transition:border-color .2s ease,box-shadow .2s ease}#search-modal .modal-body .pure-control-group #search-modal-input:focus{outline:none;border-color:var(--color-link);box-shadow:0 0 0 3px rgba(27,152,248,.1)}#search-modal .modal-body .pure-control-group #search-modal-input::placeholder{color:var(--color-text-input-placeholder);opacity:.7}html[data-darkmode=true] #search-modal #search-modal-input:focus{box-shadow:0 0 0 3px rgba(89,189,251,.15)}#llm-diff-summary-area{margin:.6rem 0 .4rem;padding:.65rem .9rem;background:linear-gradient(135deg, rgba(120, 80, 200, 0.18), rgba(80, 160, 220, 0.14));border-left:3px solid rgba(140,90,220,.8);border-radius:0 4px 4px 0;min-width:0;max-width:100%;box-sizing:border-box;overflow:hidden}#llm-diff-summary-area .llm-diff-summary-label{display:block;font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.55;margin-bottom:.25rem}#llm-diff-summary-area .llm-diff-summary-text{margin:0;font-size:.9rem;line-height:1.5;white-space:pre-wrap;overflow-wrap:break-word;word-break:break-word}.llm-diff-summary-prompt{margin:.4em 0 0;font-size:.78rem;font-style:italic;overflow:hidden;max-height:3.8em;animation:llm-prompt-reveal .7s ease-out both}.llm-diff-summary-prompt .llm-diff-summary-prompt-text{display:block;opacity:.55;mask-image:linear-gradient(to bottom, rgba(0, 0, 0, 0.85) 30%, rgba(0, 0, 0, 0) 100%);-webkit-mask-image:linear-gradient(to bottom, rgba(0, 0, 0, 0.85) 30%, rgba(0, 0, 0, 0) 100%);white-space:pre-wrap;overflow-wrap:break-word;line-height:1.45}@keyframes llm-prompt-reveal{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}.llm-diff-summary-loading{opacity:.5;font-style:italic;animation:llm-pulse 1.4s ease-in-out infinite;font-weight:bold}@keyframes llm-pulse{0%,100%{opacity:.5}50%{opacity:.2}}.llm-budget-exceeded,.llm-error{color:#c0392b;font-weight:600;font-style:normal;opacity:1}.toggle-ai-mode{opacity:.4;transition:opacity .2s ease,filter .2s ease;display:inline-flex;align-items:center;color:var(--color-text-menu-link)}.toggle-ai-mode svg{height:1.2rem;width:1.2rem}.toggle-ai-mode .ai-mode-label{font-size:.75rem;font-weight:600;letter-spacing:.04em;line-height:1}html[data-ai-mode=true] .toggle-ai-mode{opacity:1;filter:drop-shadow(0 0 4px rgba(160, 100, 255, 0.7))}.btn-label-summary{display:none}html[data-ai-mode=true] body.llm-configured .btn-label-history{display:none}html[data-ai-mode=true] body.llm-configured .btn-label-summary{display:inline}.ai-inline-summary-row td{white-space:normal !important;word-break:break-word;padding:.5rem 1rem .6rem 1.4rem !important;background:linear-gradient(135deg, #f0ebff, #eaf0ff) !important;border-top:1px solid #c4b5fd !important;border-left:3px solid #8b5cf6 !important;color:#1a0640 !important;line-height:1.5}html[data-darkmode=true] .ai-inline-summary-row td{background:linear-gradient(135deg, #1c0d35, #0d1535) !important;border-top:1px solid #3b1f6e !important;border-left-color:#8b5cf6 !important;color:#e9d5ff !important}.ai-inline-summary-row .ai-inline-summary-content{display:flex;gap:.5rem;align-items:flex-start}.ai-inline-summary-row .ai-inline-summary-content .ai-inline-spinner{flex-shrink:0;animation:llm-pulse 1.4s ease-in-out infinite}.ai-inline-summary-row .ai-inline-summary-content .ai-inline-body{display:flex;flex-direction:column;min-width:0}.ai-inline-summary-row .ai-inline-summary-content .ai-inline-text{font-style:italic;opacity:.75;white-space:pre-wrap}.ai-inline-summary-row .ai-inline-summary-content.loaded .ai-inline-spinner{animation:none}.ai-inline-summary-row .ai-inline-summary-content.loaded .ai-inline-text{font-style:normal;opacity:1}.ai-inline-summary-row .ai-inline-history-link{display:inline-block;margin-top:.4rem;font-size:.78rem;font-weight:700;opacity:.7;white-space:nowrap}.ai-inline-summary-row .ai-inline-history-link:hover{opacity:1}.ai-inline-summary-row .ai-inline-error{color:#c0392b}.ai-inline-summary-row .ai-inline-prompt{display:block;margin-top:.3em;font-size:.75rem;font-style:italic;overflow:hidden;max-height:3.6em;animation:llm-prompt-reveal .6s ease-out both;mask-image:linear-gradient(to bottom, rgba(0, 0, 0, 0.7) 30%, rgba(0, 0, 0, 0) 100%);-webkit-mask-image:linear-gradient(to bottom, rgba(0, 0, 0, 0.7) 30%, rgba(0, 0, 0, 0) 100%);opacity:.55;line-height:1.4;white-space:pre-wrap;overflow-wrap:break-word}.action-sidebar-item{position:relative}.action-sidebar-item .notification-bubble{position:absolute;top:8px;left:8px;min-width:18px;height:18px;background:#f44;color:#fff;font-size:10px;font-weight:700;line-height:18px;text-align:center;border-radius:9px;padding:0 2px;box-shadow:0 2px 4px rgba(0,0,0,.3);pointer-events:none;transition:all .2s ease;display:none}.action-sidebar-item .notification-bubble.red-bubble{background:#f44}.action-sidebar-item .notification-bubble.blue-bubble{background:#4a9eff;color:#fff}.action-sidebar-item .notification-bubble.visible{display:block}.action-sidebar-item .notification-bubble.pulse{animation:bubblePulse .4s ease-out}.action-sidebar-item .notification-bubble.large-number{font-size:8px;min-width:20px;height:20px;line-height:20px;border-radius:10px}@keyframes bubblePulse{0%{transform:scale(1)}50%{transform:scale(1.3)}100%{transform:scale(1)}}html[data-darkmode=true] .notification-bubble{box-shadow:0 2px 6px rgba(0,0,0,.6)}.notification-add-buttons{margin-bottom:.5rem;display:flex;align-items:center;flex-wrap:wrap;gap:.4rem}.notification-add-buttons .add-destination-inline{display:inline-flex;align-items:center;gap:.3rem}.notification-add-buttons .add-destination-inline input[type=email]{margin:0;min-width:16rem}#notification-add-email-preset{padding-top:.55rem;padding-bottom:.55rem}#notification-recipients{padding-bottom:.55rem}.notification-recipients{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.5rem}.notification-recipients .notification-chip{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .5rem;line-height:1.4;border:1px solid var(--color-border-notification);border-radius:var(--common-round-border);max-width:100%}.notification-recipients .notification-chip .notification-chip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:22rem}.notification-recipients .notification-chip .notification-chip-remove{cursor:pointer;font-weight:bold;opacity:.55;text-decoration:none}.notification-recipients .notification-chip .notification-chip-remove:hover{opacity:1}.notifications-wrapper{padding-top:.5rem}.notifications-wrapper #notification-test-log{margin-top:1rem;padding:1rem;white-space:pre-wrap;word-break:break-word;overflow-wrap:break-word;max-width:100%;box-sizing:border-box;max-height:12rem;overflow-y:scroll;border:1px solid var(--color-border-notification);border-radius:5px}#notification-error-log{border:1px solid var(--color-border-notification);padding:1rem;border-radius:5px;overflow-wrap:break-word}#restock-diff{width:100%;box-sizing:border-box}#restock-diff-summary{margin-top:.6rem;display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.restock-latest-price{font-size:1.4rem;font-weight:700}.restock-badge{display:inline-block;padding:.15rem .55rem;border-radius:1rem;font-size:.8rem;font-weight:600;white-space:nowrap}.restock-badge.in-stock{background:rgba(31,164,99,.15);color:#1fa463}.restock-badge.out-of-stock{background:rgba(231,76,60,.15);color:#e74c3c}#restock-tabs{background:var(--color-background);color:var(--color-text);padding:1rem;border-radius:5px}#restock-tabs .tab-pane-inner#screenshot{text-align:center}#restock-tabs .tab-pane-inner#screenshot img{max-width:99%}#restock-graph{margin-top:1rem;box-sizing:border-box}@media(min-width: 1200px){#restock-graph{max-width:80%;margin-left:auto;margin-right:auto}}.js-restock-graph{position:relative;width:100%}.js-restock-graph svg{display:block;max-width:100%}.js-restock-graph .rg-axis{stroke:var(--color-border-notification, rgba(127, 127, 127, 0.4));stroke-width:1}.js-restock-graph .rg-label{fill:currentColor;opacity:.7;font-size:12px}.js-restock-graph .rg-line{stroke:currentColor;opacity:.55}.js-restock-graph .rg-dot{stroke:var(--color-background, #fff);stroke-width:1.5}.js-restock-graph .rg-legend{display:flex;justify-content:center;gap:1.1rem;margin-top:.4rem;font-size:.78rem;opacity:.85}.js-restock-graph .rg-legend .rg-legend-item{display:inline-flex;align-items:center;gap:.35rem}.js-restock-graph .rg-legend .rg-legend-dot{width:9px;height:9px;border-radius:50%;display:inline-block}.js-restock-graph .rg-legend .rg-legend-dot.in{background:#1fa463}.js-restock-graph .rg-legend .rg-legend-dot.out{background:#e74c3c}.js-restock-graph .rg-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;flex-wrap:wrap;margin-bottom:.5rem}.js-restock-graph .rg-stats{font-size:.8rem;opacity:.7;text-align:right;margin-left:auto}.js-restock-graph .rg-band{fill:rgba(120,130,150,.14)}.js-restock-graph .rg-avg-line{stroke:var(--color-text, #555);opacity:.45;stroke-width:1}.js-restock-graph .rg-avg-text{opacity:.5}.rg-status{display:inline-flex;align-items:baseline;gap:.4rem;padding:.2rem .6rem;border-radius:1rem;font-size:.85rem}.rg-status .rg-status-label{font-weight:700}.rg-status .rg-status-sub{font-size:.78rem;opacity:.8}.rg-status.rg-status-low{background:rgba(31,164,99,.16);color:#1fa463}.rg-status.rg-status-typical{background:rgba(120,130,150,.16);color:var(--color-text, #555)}.rg-status.rg-status-high{background:rgba(231,76,60,.16);color:#e74c3c}.rg-tooltip{position:absolute;display:none;pointer-events:none;z-index:5;transform:translateY(-50%);white-space:nowrap;background:var(--color-background, #fff);color:var(--color-text, #222);border:1px solid var(--color-border-notification, rgba(127, 127, 127, 0.4));border-radius:5px;padding:4px 8px;font-size:12px;line-height:1.4;box-shadow:0 2px 6px rgba(0,0,0,.15)}#restock-history-table{margin-left:auto;margin-right:auto}#restock-history-table td,#restock-history-table th{text-align:left}.restock-table-toolbar{display:flex;align-items:center;justify-content:center;gap:.75rem;margin-bottom:.5rem}html[data-ai-mode=true] body.llm-configured tr.processor-restock_diff .btn-label-history{display:inline}html[data-ai-mode=true] body.llm-configured tr.processor-restock_diff .btn-label-summary{display:none}.restock-inline-row td{white-space:normal !important;word-break:break-word;padding:.6rem 1rem .8rem 1.4rem !important;background:linear-gradient(135deg, #e6fbf0, #e8f6ff) !important;border-top:1px solid #9fe3c2 !important;border-left:3px solid #1fa463 !important;color:#06281a !important;line-height:1.5}html[data-darkmode=true] .restock-inline-row td{background:linear-gradient(135deg, #0c2a1c, #0d2230) !important;border-top:1px solid #1f5e40 !important;border-left-color:#1fa463 !important;color:#d6ffe9 !important}.restock-inline-row .restock-inline-graph{width:100%;min-height:40px}.restock-inline-row .restock-inline-history-link{display:inline-block;margin-top:.5rem;font-size:.78rem;font-weight:700;opacity:.75;white-space:nowrap}.restock-inline-row .restock-inline-history-link:hover{opacity:1}.restock-inline-row .restock-inline-error{color:#c0392b}.toast-container{position:fixed;display:flex;flex-direction:column;gap:.75rem;pointer-events:none;z-index:10000}.toast-container.toast-top-right{top:20px;right:20px}.toast-container.toast-top-center{top:100px;left:50%;transform:translateX(-50%)}.toast-container.toast-top-left{top:20px;left:20px}.toast-container.toast-bottom-right{bottom:20px;right:20px}.toast-container.toast-bottom-center{bottom:20px;left:50%;transform:translateX(-50%)}.toast-container.toast-bottom-left{bottom:20px;left:20px}.toast{position:relative;display:flex;align-items:center;gap:.75rem;min-width:300px;max-width:500px;padding:1rem 1.25rem;background:var(--color-background);border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.15),0 0 0 1px rgba(0,0,0,.05);pointer-events:auto;overflow:hidden;opacity:0;transform:translateY(-50px);transition:all .3s cubic-bezier(0.68, -0.55, 0.265, 1.55);font-family:inherit}.toast.toast-show{opacity:1;transform:translateY(0)}.toast.toast-hide{opacity:0;transform:translateY(-50px) scale(0.95)}.toast.toast-success{border-left:4px solid #10b981}.toast.toast-success .toast-icon{color:#10b981}.toast.toast-error{border-left:4px solid #ef4444}.toast.toast-error .toast-icon{color:#ef4444}.toast.toast-warning{border-left:4px solid #f59e0b}.toast.toast-warning .toast-icon{color:#f59e0b}.toast.toast-info{border-left:4px solid #3b82f6}.toast.toast-info .toast-icon{color:#3b82f6}.toast.toast-default{border-left:4px solid var(--color-grey-500)}.toast-icon{flex-shrink:0;width:24px;height:24px}.toast-icon svg{width:100%;height:100%}.toast-message{flex:1;font-size:.875rem;line-height:1.5;color:var(--color-text);word-break:break-word;font-family:inherit}.toast-close{flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0);border:none;border-radius:4px;color:var(--color-grey-500);font-size:1.5rem;line-height:1;cursor:pointer;transition:all .2s ease;padding:0;margin-left:.25rem}.toast-close:hover{background:var(--color-grey-800);color:var(--color-text)}.toast-close:active{transform:scale(0.95)}.toast-progress{position:absolute;bottom:0;left:0;right:0;height:3px;background:currentColor;opacity:.3;transform-origin:left;transition:transform linear}html[data-darkmode=true] .toast{background:var(--color-grey-300);box-shadow:0 4px 12px rgba(0,0,0,.4),0 0 0 1px hsla(0,0%,100%,.05)}html[data-darkmode=true] .toast-close:hover{background:var(--color-grey-400)}@media only screen and (max-width: 768px){.toast-container{left:50% !important;right:auto !important;top:80px !important;transform:translateX(-50%) !important;align-items:center}.toast-container.toast-bottom-right,.toast-container.toast-bottom-center,.toast-container.toast-bottom-left{top:auto !important;bottom:80px !important}.toast{min-width:auto;max-width:none;width:80vw;transform:translateY(-100px)}.toast.toast-show{transform:translateY(0)}.toast.toast-hide{transform:translateY(-100px) scale(0.95)}}@media(prefers-reduced-motion: reduce){.toast{transition:opacity .2s ease;transform:none !important}.toast.toast-show{opacity:1}.toast.toast-hide{opacity:0}}.login-form{min-height:52vh;display:flex;align-items:center;justify-content:center;padding:2rem 1rem}.login-form .inner{background:var(--color-background);border-radius:16px;box-shadow:0 10px 40px rgba(0,0,0,.08),0 2px 8px rgba(0,0,0,.04);padding:3rem 2.5rem;width:100%;max-width:420px;position:relative;overflow:hidden;transition:transform .3s ease,box-shadow .3s ease}.login-form .inner:hover{box-shadow:0 15px 50px rgba(0,0,0,.12),0 5px 15px rgba(0,0,0,.06)}.login-form form{margin:0}.login-form fieldset{border:none;padding:0;margin:0}.login-form .pure-control-group{margin-bottom:1.75rem}.login-form .pure-control-group:last-of-type{margin-bottom:0;margin-top:2rem}.login-form label{display:block;margin-bottom:.5rem;font-weight:600;font-size:.9rem;color:var(--color-text);letter-spacing:.01em}.login-form input[type=password]{width:100%;padding:.875rem 1rem;border:2px solid var(--color-grey-800);border-radius:8px;font-size:1rem;background:var(--color-background-input);color:var(--color-text-input);transition:all .2s ease;box-sizing:border-box}.login-form input[type=password]:focus{outline:none;border-color:var(--color-link);box-shadow:0 0 0 3px rgba(27,152,248,.1);transform:translateY(-1px)}.login-form input[type=password]::placeholder{color:var(--color-text-input-placeholder)}.login-form button[type=submit]{width:100%;padding:.875rem 1.5rem;font-size:1rem;font-weight:600;border-radius:8px;border:none;background:var(--color-background-button-primary);color:var(--color-text-button);cursor:pointer;transition:all .2s ease;box-shadow:0 2px 8px rgba(27,152,248,.2)}.login-form button[type=submit]:hover{box-shadow:0 4px 12px rgba(27,152,248,.3);background:#06c}.login-form button[type=submit]:active{transform:translateY(0);box-shadow:0 2px 4px rgba(27,152,248,.2)}.content-main>ul.messages{position:fixed;top:120px;left:50%;transform:translateX(-50%);list-style:none;padding:0;margin:0;z-index:1000;min-width:300px;max-width:500px}.content-main>ul.messages li{padding:1rem 1.25rem;border-radius:8px;font-size:.95rem;line-height:1.5;font-weight:500;box-shadow:0 4px 12px rgba(0,0,0,.15);animation:slideDown .3s ease-out;border:2px solid rgba(0,0,0,0)}.content-main>ul.messages li.error{background:#fee;border:2px solid #ef4444;color:#991b1b;font-weight:600}.content-main>ul.messages li.success{background:#f0fdf4;border:2px solid #10b981;color:#166534}.content-main>ul.messages li.info,.content-main>ul.messages li.message{background:#eff6ff;border:2px solid #3b82f6;color:#1e40af}@keyframes slideDown{from{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}html[data-darkmode=true] .login-form .inner{box-shadow:0 10px 40px rgba(0,0,0,.4),0 2px 8px rgba(0,0,0,.2)}html[data-darkmode=true] .login-form .inner:hover{box-shadow:0 15px 50px rgba(0,0,0,.5),0 5px 15px rgba(0,0,0,.3)}html[data-darkmode=true] .login-form input[type=password]{border-color:var(--color-grey-400)}html[data-darkmode=true] .login-form input[type=password]:focus{border-color:var(--color-link)}html[data-darkmode=true] .content-main>ul.messages li{box-shadow:0 4px 12px rgba(0,0,0,.4)}html[data-darkmode=true] .content-main>ul.messages li.error{background:#4a1d1d;border-color:#ef4444;color:#fca5a5}html[data-darkmode=true] .content-main>ul.messages li.success{background:#1a3a2a;border-color:#10b981;color:#86efac}html[data-darkmode=true] .content-main>ul.messages li.info,html[data-darkmode=true] .content-main>ul.messages li.message{background:#1e3a5f;border-color:#3b82f6;color:#93c5fd}@media only screen and (max-width: 768px){.login-form{min-height:auto;padding:1rem .5rem;padding-top:5rem}.login-form .inner{padding:2rem 1.5rem;border-radius:12px}.content-main>ul.messages{top:70px;left:10px;right:10px;transform:none;min-width:auto}}body.wrapped-tabs .tabs ul{grid-template-columns:repeat(auto-fill, minmax(var(--tab-width, 180px), 1fr));grid-auto-flow:row;grid-auto-columns:unset;gap:0;column-gap:5px}body.wrapped-tabs .tabs ul li{border-radius:0}.tabs ul{margin:0px;padding:0px;display:grid;grid-auto-flow:column;grid-auto-columns:max-content;gap:5px;list-style:none}.tabs ul li{white-space:nowrap;color:var(--color-text-tab);border-top-left-radius:5px;border-top-right-radius:5px;background-color:var(--color-background-tab)}.tabs ul li:not(.active):hover{background-color:var(--color-background-tab-hover)}.tabs ul li.active,.tabs ul li :target{background-color:var(--color-background)}.tabs ul li.active a,.tabs ul li :target a{color:var(--color-text-tab-active);font-weight:bold}.tabs ul li a{display:block;padding:.7em;color:var(--color-text-tab)}.stab-shell{display:flex;align-items:stretch;background:var(--color-background);border:1px solid rgba(0,0,0,.08);border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.05);margin-bottom:1.5rem}.stab-nav{display:flex;flex-direction:column;width:11rem;flex-shrink:0;padding:.75rem 0;gap:1px;background:linear-gradient(180deg, rgba(0, 0, 0, 0.03) 0%, rgba(0, 0, 0, 0.05) 100%);border-right:1px solid rgba(0,0,0,.07)}.stab-btn{position:relative;display:flex;align-items:center;gap:.5rem;padding:.65rem .9rem .65rem 1rem;width:100%;background:none;border:none;border-left:3px solid rgba(0,0,0,0);border-radius:0;cursor:pointer;font:inherit;color:var(--color-text);text-align:left;opacity:.65;transition:background .12s ease,opacity .12s ease,border-color .12s ease,color .12s ease}.stab-btn:hover{background:rgba(0,0,0,.04);opacity:.85}.stab-btn.active{border-left-color:var(--color-menu-accent);background:rgba(237,89,0,.07);color:var(--color-menu-accent);font-weight:700;opacity:1}.stab-btn .stab-icon{display:inline-flex;align-items:center;justify-content:center;width:1.1rem;flex-shrink:0;opacity:.8}.stab-btn .stab-icon svg{width:.95rem;height:.95rem;stroke:currentColor;fill:none}.stab-body{flex:1;min-width:0;padding:1.4rem 1.6rem;overflow-x:hidden}.stab-pane{visibility:hidden;height:0;overflow:hidden}.stab-pane.active{visibility:visible;height:auto;overflow:visible;animation:stab-enter .16s ease both}@keyframes stab-enter{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.stab-overview-hero{margin-bottom:1.5rem}.stab-overview-hero h3{margin:0 0 .3rem;font-size:1.05rem}.stab-overview-hero .stab-overview-glyph{color:var(--color-menu-accent);margin-right:.2rem}.stab-overview-hero .stab-overview-glyph svg{width:1.1rem;height:1.1rem;stroke:currentColor;fill:none;vertical-align:-0.15em}.stab-overview-hero p{margin:0;font-size:.88rem;color:var(--color-text-input-description);max-width:44rem;line-height:1.55}.stab-overview-features{display:flex;flex-direction:column;gap:.7rem;margin-bottom:1.6rem}.stab-overview-feature{display:flex;gap:.85rem;align-items:flex-start;padding:.75rem 1rem;border-radius:6px;background:rgba(0,0,0,.022);border:1px solid rgba(0,0,0,.05);transition:background .12s ease}.stab-overview-feature:hover{background:rgba(0,0,0,.035)}.stab-overview-feature .stab-overview-icon{width:1.6rem;flex-shrink:0;padding-top:.05rem;opacity:.7;display:flex;justify-content:center}.stab-overview-feature .stab-overview-icon svg{width:1.3rem;height:1.3rem;stroke:currentColor;fill:none}.stab-overview-feature .stab-overview-text>strong{display:block;margin-bottom:.2rem}.stab-overview-feature .stab-overview-text p{color:var(--color-text-input-description)}.stab-overview-disclaimer{display:flex;gap:.75rem;align-items:flex-start;margin:0 0 1.1rem;padding:.85rem 1rem;border-radius:6px;border:1px solid rgba(211,136,0,.35);background:rgba(255,180,0,.07)}.stab-overview-disclaimer .stab-disclaimer-icon{flex-shrink:0;padding-top:.05rem;color:#c07800}.stab-overview-disclaimer .stab-disclaimer-icon svg{width:1.2rem;height:1.2rem;stroke:currentColor;fill:none}.stab-overview-disclaimer .stab-disclaimer-body{font-size:.85rem;line-height:1.55}.stab-overview-disclaimer .stab-disclaimer-body>strong{display:block;margin-bottom:.35rem;color:#8a5500;font-size:.87rem}.stab-overview-disclaimer .stab-disclaimer-body p{margin:0 0 .45rem;color:var(--color-text-input-description)}.stab-overview-disclaimer .stab-disclaimer-body ul{margin:0 0 .6rem;padding-left:1.25rem;color:var(--color-text-input-description)}.stab-overview-disclaimer .stab-disclaimer-body ul li{margin-bottom:.2rem}.stab-overview-disclaimer .stab-disclaimer-check{display:flex;gap:.5rem;align-items:flex-start;cursor:pointer;font-size:.82rem;color:var(--color-text-input-description);font-weight:600}.stab-overview-disclaimer .stab-disclaimer-check input[type=checkbox]{flex-shrink:0;margin-top:.18rem;cursor:pointer}.stab-overview-cta{margin-top:.4rem;display:flex;align-items:center;gap:.8rem;flex-wrap:wrap}.stab-configured-badge{display:inline-flex;align-items:center;gap:.4rem;padding:.35rem .75rem;background:rgba(39,174,96,.09);border:1px solid rgba(39,174,96,.28);border-radius:4px;color:#2a7a4e;font-size:.82rem;font-weight:600}.stab-section-title{font-size:.72rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;opacity:.45;margin:1.4rem 0 .6rem}.stab-section-title:first-child{margin-top:0}@media(max-width: 600px){.stab-shell{flex-direction:column;min-height:unset}.stab-nav{width:100%;border-right:none;border-bottom:1px solid rgba(0,0,0,.07);padding:.4rem 0}.stab-body{padding-left:1rem}}.llm-usage-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(12rem, 1fr));gap:.9rem;margin-bottom:1.4rem}.llm-stat-card{padding:1rem 1.1rem .85rem;border-radius:7px;background:rgba(0,0,0,.025);border:1px solid rgba(0,0,0,.07)}.llm-stat-card .llm-stat-label{font-size:.7rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;opacity:.4;margin-bottom:.4rem}.llm-stat-card .llm-stat-value{font-size:1.65rem;font-weight:700;letter-spacing:-0.02em;line-height:1;margin-bottom:.25rem}.llm-stat-card .llm-stat-sub{font-size:.79rem;opacity:.5}.llm-stat-card .llm-stat-budget-text{font-size:.77rem;opacity:.55;margin-top:.3rem}.llm-stat-bar-wrap{height:4px;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden;margin-top:.65rem}.llm-stat-bar-fill{height:100%;border-radius:2px;transition:width .5s ease}.llm-stat-bar-fill.bar-ok{background:#27ae60}.llm-stat-bar-fill.bar-warn{background:#e67e22}.llm-stat-bar-fill.bar-over{background:#c0392b}.llm-usage-settings{border-top:1px solid rgba(0,0,0,.07);padding-top:.9rem;display:flex;flex-direction:column;gap:.65rem}.llm-usage-row{display:flex;align-items:baseline;gap:.9rem;flex-wrap:wrap}.llm-usage-row .llm-usage-row-label{font-size:.82rem;font-weight:600;opacity:.6;min-width:12rem;flex-shrink:0}.llm-usage-row .llm-usage-row-value{display:flex;align-items:baseline;gap:.5rem;flex-wrap:wrap;font-size:.88rem}.llm-field-hint{font-size:.8rem;opacity:.55}.llm-env-badge{font-size:.79rem;opacity:.6}.llm-budget-alert{color:#c0392b;font-weight:600;font-size:.88rem;margin:0 0 1rem}.llm-no-usage{opacity:.5;font-style:italic;font-size:.88rem;margin-bottom:1rem}html[data-darkmode=true] .stab-shell{border-color:hsla(0,0%,100%,.07);box-shadow:0 2px 8px rgba(0,0,0,.25)}html[data-darkmode=true] .stab-nav{background:linear-gradient(180deg, rgba(255, 255, 255, 0.025) 0%, rgba(255, 255, 255, 0.04) 100%);border-right-color:hsla(0,0%,100%,.07)}html[data-darkmode=true] .stab-btn:hover{background:hsla(0,0%,100%,.05)}html[data-darkmode=true] .stab-btn.active{background:rgba(237,89,0,.12)}html[data-darkmode=true] .stab-overview-feature{background:hsla(0,0%,100%,.025);border-color:hsla(0,0%,100%,.05)}html[data-darkmode=true] .stab-overview-feature:hover{background:hsla(0,0%,100%,.04)}html[data-darkmode=true] .stab-configured-badge{background:rgba(39,174,96,.1);border-color:rgba(39,174,96,.22);color:#5db880}html[data-darkmode=true] .stab-overview-disclaimer{border-color:rgba(255,190,50,.22);background:rgba(255,180,0,.05)}html[data-darkmode=true] .stab-overview-disclaimer .stab-disclaimer-icon{color:#c9963a}html[data-darkmode=true] .stab-overview-disclaimer .stab-disclaimer-body>strong{color:#c9a050}html[data-darkmode=true] .llm-stat-card{background:hsla(0,0%,100%,.03);border-color:hsla(0,0%,100%,.07)}html[data-darkmode=true] .llm-stat-bar-wrap{background:hsla(0,0%,100%,.1)}html[data-darkmode=true] .llm-usage-settings{border-top-color:hsla(0,0%,100%,.07)}body,.pure-table,.pure-table thead,.pure-table td,.pure-table th,.pure-form input,.pure-form textarea,.pure-form select,.edit-form .inner,.pure-menu-horizontal,footer,.sticky-tab,#diff-jump,.button-tag,#new-watch-form,#new-watch-form input:not(.pure-button),code,.messages li,#checkbox-operations,.inline-warning,a,.watch-controls img{transition:color .4s ease,background-color .4s ease,background .4s ease,border-color .4s ease,box-shadow .4s ease}body{color:var(--color-text);background:var(--color-background-page);font-family:Helvetica Neue,Helvetica,Lucida Grande,Arial,Ubuntu,Cantarell,Fira Sans,sans-serif}.app{display:flex;align-items:stretch;min-height:100vh}.app-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:.55rem}.content-wrapper{display:flex;width:100%;max-width:100%;position:relative;align-items:flex-start}@media only screen and (max-width: 980px){.content-wrapper{flex-direction:column}}.content-main{flex:1 1 auto;width:100%;min-width:0;display:flex;flex-direction:column;align-items:center}@media only screen and (min-width: 980px){.content-main{flex-direction:column}}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.status-icon{display:inline-block;height:1rem;vertical-align:middle}a{text-decoration:none;color:var(--color-link)}#search-result-info{color:#fff}button.toggle-button{vertical-align:middle;background:rgba(0,0,0,0);border:none;cursor:pointer;color:var(--color-text-menu-heading)}button.toggle-button svg{fill:currentColor}button.toggle-button svg.feather{fill:none;stroke:currentColor}button.toggle-button .icon-light{display:block}body.spinner-active #pure-menu-horizontal-spinner{animation:gradient 1s ease infinite}@keyframes gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}#cdio-logo{color:var(--color-white);text-transform:uppercase}.pure-menu-link{color:var(--color-text-menu-link)}.pure-menu-link:hover{background-color:var(--color-background-menu-link-hover);color:var(--color-text-menu-link-hover)}.tab-pane-inner{scroll-margin-top:200px}section.content{padding-bottom:1em;padding-left:.55rem;padding-right:.55rem;flex-direction:column;display:flex;align-items:center;justify-content:flex-start}details summary{cursor:pointer;font-weight:600;color:var(--color-link);width:fit-content}details summary:hover{text-decoration:underline}code{background:var(--color-background-code);color:var(--color-text)}.inline-tag,.restock-label,.tracking-ldjson-price-data,.watch-tag-list,.processor-badge{white-space:nowrap;border-radius:5px;padding:2px 5px;margin-right:4px}.processor-badge{font-weight:900;text-decoration:none}.processor-badge:hover{text-decoration:none;opacity:.8;cursor:pointer}.processor-badge.active{outline:2px solid var(--color-link);outline-offset:1px}.watch-tag-list{color:var(--color-white);background:var(--color-text-watch-tag-list);text-decoration:none}.watch-tag-list:hover{text-decoration:none;opacity:.8;cursor:pointer}.watch-tag-list:visited{color:var(--color-white)}body:after{content:"";background:linear-gradient(130deg, var(--color-background-gradient-first), var(--color-background-gradient-second) 41.07%, var(--color-background-gradient-third) 84.05%)}body:after,body:before{display:block;position:fixed;top:0;left:0;width:100%;height:100vh;z-index:-1}body::after{opacity:.91}body::before{content:""}.button-small{font-size:85%}.button-xsmall{font-size:70%}.fetch-error{padding-top:1em;font-size:80%;max-width:400px;display:block}.pure-button-primary,a.pure-button-primary,.pure-button-selected,a.pure-button-selected{background-color:var(--color-background-button-primary)}.button-secondary{color:var(--color-text-button);border-radius:4px;text-shadow:0 1px 1px rgba(0,0,0,.2)}.button-success{background:var(--color-background-button-success)}.button-tag{background:var(--color-background-button-tag);color:var(--color-text-button);font-size:75%;border-radius:6px;margin-right:4px;margin-bottom:1px}.button-tag.active{background:var(--color-background-button-tag-active);font-weight:bold}.button-error{background:var(--color-background-button-error);color:var(--color-text-button-error)}.button-warning{background:var(--color-background-button-warning);color:var(--color-text-button-warning)}.button-secondary{background:var(--color-background-button-secondary)}.button-cancel{background:var(--color-background-button-cancel)}.messages li{list-style:none;padding:1em;border-radius:10px;color:var(--color-text-messages);font-weight:bold}.messages li.message{background:var(--color-background-messages-message)}.messages li.error{background:var(--color-background-messages-error)}.messages li.notice{background:var(--color-background-messages-notice)}.messages.with-share-link>*:hover{cursor:pointer}label:hover{cursor:pointer}.grey-form-border{border:1px solid var(--color-border-notification);padding:.5rem;border-radius:5px}#token-table.pure-table td,#token-table.pure-table th{font-size:80%}.pure-form input[type=text].transparent-field{background-color:var(--color-background-new-watch-input-transparent) !important;color:var(--color-white) !important;border:1px solid hsla(0,0%,100%,.2) !important;box-shadow:none !important;-webkit-box-shadow:none !important}.pure-form input[type=text].transparent-field::placeholder{opacity:.5;color:hsla(0,0%,100%,.7);font-weight:lighter}#new-watch-form{background:var(--color-background-new-watch-form);padding:1em;border-radius:10px;max-width:100%}#new-watch-form #url::placeholder{font-weight:bold}#new-watch-form input{display:inline-block}#new-watch-form input:not(.pure-button){background-color:var(--color-background-new-watch-input);color:var(--color-text-new-watch-input)}#new-watch-form .label{display:none}#new-watch-form legend{color:var(--color-text-legend);font-weight:bold}@media only screen and (min-width: 760px){#new-watch-form #watch-add-wrapper-zone{display:flex;gap:.3rem;flex-direction:row;min-width:70vw}}#new-watch-form #watch-add-wrapper-zone>span{flex-grow:0}#new-watch-form #watch-add-wrapper-zone>span input{width:100%;padding-right:1em}#new-watch-form #watch-add-wrapper-zone>span:first-child{flex-grow:1}@media only screen and (max-width: 760px){#new-watch-form #watch-add-wrapper-zone #url{width:100%}}#new-watch-form #watch-group-tag{font-size:.9rem;padding:.3rem;display:flex;align-items:center;gap:.5rem;color:var(--color-white)}#new-watch-form #watch-group-tag label,#new-watch-form #watch-group-tag input{margin:0}#new-watch-form #watch-group-tag input{flex:1}#diff-col{padding-left:40px}#diff-jump{position:fixed;left:0px;top:120px;background:var(--color-background);padding:10px;border-top-right-radius:5px;border-bottom-right-radius:5px;box-shadow:1px 1px 4px var(--color-shadow-jump)}#diff-jump a{color:var(--color-link);cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;-o-user-select:none}footer{padding:10px;background:var(--color-background);color:var(--color-text-footer);text-align:center}#feed-icon{vertical-align:middle}#new-version-text a{color:var(--color-link-new-version)}.watch-controls{color:#f8321b}.watch-controls .state-on img{opacity:.8}.watch-controls img{opacity:.2}.watch-controls img:hover{transition:opacity .3s;opacity:.8}.monospaced-textarea textarea{width:100%;font-family:monospace;white-space:pre;overflow-wrap:normal;overflow-x:auto}.pure-form fieldset{padding-top:0px}.pure-form fieldset ul{padding-bottom:0px;margin-bottom:0px}.pure-form .pure-control-group,.pure-form .pure-group,.pure-form .pure-controls{padding-bottom:1em}.pure-form .pure-control-group div,.pure-form .pure-group div,.pure-form .pure-controls div{margin:0px}.pure-form .pure-control-group .checkbox>*,.pure-form .pure-group .checkbox>*,.pure-form .pure-controls .checkbox>*{display:inline;vertical-align:middle}.pure-form .pure-control-group .checkbox>label,.pure-form .pure-group .checkbox>label,.pure-form .pure-controls .checkbox>label{padding-left:5px}.pure-form .pure-control-group legend,.pure-form .pure-group legend,.pure-form .pure-controls legend{color:var(--color-text-legend)}.pure-form .error input{background-color:var(--color-error-input)}.pure-form ul.errors{padding:.5em .6em;border:1px solid var(--color-error-list);border-radius:4px;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form ul.errors li{margin-left:1em;color:var(--color-error-list)}.pure-form label{font-weight:bold}.pure-form textarea{width:100%}.pure-form .inline-radio ul{margin:0px;list-style:none}.pure-form .inline-radio ul li{display:flex;align-items:center;gap:1em}@media only screen and (max-width: 760px),(min-device-width: 768px)and (max-device-width: 980px){.edit-form{padding:.5em;margin:0}#nav-menu{overflow-x:scroll}}@media only screen and (max-width: 760px),(min-device-width: 768px)and (max-device-width: 980px){input[type=text]{width:100%}}.pure-table{border-color:var(--color-border-table-cell)}.pure-table thead{background-color:var(--color-background-table-thead);color:var(--color-text);border-bottom:1px solid var(--color-background-table-thead)}.pure-table td,.pure-table th{border-left-color:var(--color-border-table-cell)}.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form select,.pure-form textarea{border:var(--color-border-input);box-shadow:inset 0 1px 3px var(--color-shadow-input);background-color:var(--color-background-input);color:var(--color-text-input)}.pure-form input[type=color]:active,.pure-form input[type=date]:active,.pure-form input[type=datetime-local]:active,.pure-form input[type=datetime]:active,.pure-form input[type=email]:active,.pure-form input[type=month]:active,.pure-form input[type=number]:active,.pure-form input[type=password]:active,.pure-form input[type=search]:active,.pure-form input[type=tel]:active,.pure-form input[type=text]:active,.pure-form input[type=time]:active,.pure-form input[type=url]:active,.pure-form input[type=week]:active,.pure-form select:active,.pure-form textarea:active{background-color:var(--color-background-input)}input::placeholder,textarea::placeholder{color:var(--color-text-input-placeholder)}.m-d{min-width:100%}@media only screen and (min-width: 761px){.m-d{min-width:80%}}.pure-form-stacked>div:first-child{display:block}.tab-pane-inner{padding:0px}.tab-pane-inner:not(:target){display:none}.tab-pane-inner:target{display:block}.beta-logo{height:50px;right:-3px;top:-3px;position:absolute}#selector-header{padding-bottom:1em}.edit-form{max-width:95%}.edit-form .box-wrap{position:relative}.edit-form .inner{background:var(--color-background);padding:1.1rem}.edit-form #actions{display:block;background:var(--color-background)}.edit-form #actions .pure-control-group{display:flex;gap:.625em;flex-wrap:wrap}.edit-form .pure-form-message-inline{padding-left:0;color:var(--color-text-input-description)}.edit-form .pure-form-message-inline code{font-size:.875em}.border-fieldset{border:1px solid #ccc;padding:1rem;border-radius:5px;margin-bottom:1rem}.border-fieldset h3{margin-top:0}.border-fieldset fieldset:last-of-type{padding-bottom:0}.border-fieldset fieldset:last-of-type .pure-control-group{padding-bottom:0}ul{padding-left:1em;padding-top:0px;margin-top:4px}.time-check-widget tr{display:inline}.time-check-widget tr input[type=number]{width:5em}@media only screen and (max-width: 760px){.time-check-widget tbody{display:grid;grid-template-columns:auto 1fr auto 1fr;gap:.625em .3125em;align-items:center}.time-check-widget tr{display:contents}.time-check-widget tr th{text-align:right;padding-right:5px}.time-check-widget tr input[type=number]{width:100%;max-width:5em}}#webdriver_delay{width:5em}#api-key:hover{cursor:pointer}#api-key-copy{color:var(--color-api-key)}.button-green{background-color:var(--color-background-button-green)}.button-red{background-color:var(--color-background-button-red)}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[type=checkbox],[type=radio]{width:17px;height:17px;border-radius:5px;cursor:pointer}.inline-warning{border:1px solid var(--color-border-warning);padding:.5rem;border-radius:5px;color:var(--color-warning)}.inline-warning>span{display:inline-block;vertical-align:middle}.inline-warning img.inline-warning-icon{display:inline;height:26px;vertical-align:middle}.tracking-ldjson-price-data{background-color:var(--color-background-button-green);color:#000;opacity:.6}.ldjson-price-track-offer{font-weight:bold;font-style:italic}.ldjson-price-track-offer a.pure-button{border-radius:3px;padding:3px;background-color:var(--color-background-button-green)}.price-follow-tag-icon{display:inline-block;height:.8rem;vertical-align:middle}#quick-watch-processor-type ul#processor{color:#fff;padding-left:0px}#quick-watch-processor-type ul#processor li{list-style:none;font-size:.9rem;display:grid;grid-template-columns:auto 1fr;align-items:center;gap:.5rem;margin-bottom:.5rem}#quick-watch-processor-type label,#quick-watch-processor-type input{padding:0;margin:0}.restock-label.in-stock{background-color:#7a0cc5;color:#fff}.restock-label.not-in-stock{background-color:var(--color-background-button-cancel);color:#777}.restock-label.error{background-color:var(--color-background-button-error);color:#fff;opacity:.7}.restock-label.price{border:1px solid var(--color-background-button-cancel)}.restock-label svg{vertical-align:middle}.price-change{white-space:nowrap;font-weight:700;font-size:90%;margin-left:4px;vertical-align:middle}.price-change.down{color:var(--color-background-button-green)}.price-change.up{color:var(--color-background-button-error)}#chrome-extension-link{padding:9px;border:1px solid var(--color-grey-800);border-radius:10px;vertical-align:middle}#chrome-extension-link img{height:21px;padding:2px;vertical-align:middle}#realtime-conn-error{position:fixed;bottom:0;left:0;background:var(--color-warning);padding:10px;font-size:.8rem;color:#fff;opacity:.8;z-index:100}#bottom-horizontal-offscreen{position:fixed;bottom:0;left:0;right:0;width:100%;min-height:50px;max-height:50vh;background:hsla(0,0%,100%,.7215686275);border-top:1px solid var(--color-border-table-cell);padding:10px;box-shadow:0 -2px 10px rgba(0,0,0,.2);z-index:100;overflow-y:auto;transition:opacity .3s ease-in-out;scroll-margin-bottom:10px;display:flex;justify-content:center;align-items:center}ul#highlightSnippetActions{list-style:none}ul#highlightSnippetActions li{display:inline-block}@media only screen and (max-width: 768px){.box{padding:.25rem !important}}.box{color:var(--color-white);border-width:1px;border-style:dashed;border-color:hsla(0,0%,100%,.25);border-image:initial;background:hsla(0,0%,100%,.04);border-radius:var(--common-round-border);padding:1.1rem}header{color:var(--color-white)}#heart-us svg{display:inline-block;vertical-align:middle;cursor:pointer;width:1.4rem} +.header{color:var(--color-text-menu-heading)}.header a{color:var(--color-text-menu-heading)}.header::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;pointer-events:none;background:linear-gradient(to right, rgba(200, 200, 200, 0.02), rgba(200, 200, 200, 0.6))}ul#top-right-menu{list-style:none;margin-left:auto;padding:0;margin-top:0;margin-right:0;margin-bottom:0;display:grid;gap:1.1rem;grid-auto-flow:column;grid-auto-columns:max-content;align-items:center}ul#top-right-menu .toggle-button{padding:0}.current-diff-url{flex:1 1 auto;min-width:0;overflow:hidden;white-space:nowrap;text-align:left;margin:0 .55rem;-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 2.5em), transparent);mask-image:linear-gradient(to right, #000 calc(100% - 2.5em), transparent)}.current-diff-url span{overflow:visible;white-space:nowrap}.pure-menu-horizontal{padding:.55rem;display:flex;justify-content:space-between;align-items:center}.pure-menu-horizontal svg{height:1.3rem}.fi{height:1.3rem;cursor:pointer}#pure-menu-horizontal-spinner{height:2px;background:linear-gradient(-75deg, #ff6000, #ff8f00, #ffdd00, #ed0000);background-size:400% 400%;animation:gradient 200s ease infinite;opacity:.8;position:fixed;bottom:0;left:0;width:100%;z-index:100;pointer-events:none}.status-pill{display:inline-flex;align-items:center;gap:8px;height:30px;padding:0 12px;border-radius:var(--common-round-border);border:1px solid hsla(0,0%,100%,.25);background:hsla(0,0%,100%,.1);color:var(--color-text-menu-heading);font-size:.78rem;font-weight:600;white-space:nowrap;text-decoration:none}.status-pill:hover{background:hsla(0,0%,100%,.18)}.status-pill .live-dot{width:8px;height:8px;border-radius:50%;background:#42dd53;box-shadow:0 0 0 3px rgba(66,221,83,.3);animation:status-pill-pulse 2s infinite}.status-pill.paused .live-dot{background:#e8a33d;box-shadow:0 0 0 3px rgba(232,163,61,.3);animation:none}.status-pill .action-icon{width:16px;height:16px}.status-pill.muted{opacity:.8}.status-pill.muted .action-icon{color:#e8a33d}@keyframes status-pill-pulse{0%,100%{opacity:1}50%{opacity:.4}}.menu-pop-wrap{position:relative}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:0;border-radius:var(--common-round-border);background:rgba(0,0,0,0);color:var(--color-text-menu-heading);cursor:pointer}.icon-btn svg{width:18px;height:18px;fill:none;stroke:currentColor}.icon-btn:hover{background:hsla(0,0%,100%,.14)}.menu-pop{display:none;position:absolute;top:calc(100% + 8px);right:0;min-width:220px;padding:6px;border:1px solid var(--color-border-table-cell);border-radius:12px;background:var(--color-background);box-shadow:0 18px 50px rgba(0,0,0,.18);z-index:80}.menu-pop.open{display:block}.menu-pop .mi{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;border:0;border-radius:8px;background:rgba(0,0,0,0);color:var(--color-text);font-size:.85rem;text-align:left;text-decoration:none;white-space:nowrap;cursor:pointer}.menu-pop .mi:hover{background:var(--color-background-menu-link-hover)}.menu-pop .mi .ico{display:inline-flex;color:var(--color-text-input-description)}.menu-pop .mi .ico svg{width:16px;height:16px;fill:none;stroke:currentColor}.menu-pop .mi .right{margin-left:auto;font-size:.75rem;color:var(--color-text-input-description)}.top-menu-list .action-label{color:var(--color-text-menu-heading)}@media only screen and (max-width: 768px){.top-menu-list .action-label{display:none}}#inline-menu-extras-group{list-style:none;margin:0;padding:0;display:grid;gap:.55rem;grid-auto-flow:column;grid-auto-columns:max-content;align-items:center}@media only screen and (max-width: 980px){#nav-menu #menu-settings span{display:none}}:root{--body-main-text-size: 0.9rem;--color-white: #fff;--color-grey-50: #111;--color-grey-100: #262626;--color-grey-200: #333;--color-grey-300: #444;--color-grey-325: #555;--color-grey-350: #565d64;--color-grey-400: #666;--color-grey-500: #777;--color-grey-600: #999;--color-grey-700: #cbcbcb;--color-grey-750: #ddd;--color-grey-800: #e0e0e0;--color-grey-850: #eee;--color-grey-900: #f2f2f2;--color-black: #000;--color-dark-red: #a00;--color-light-red: #dd0000;--color-background-page: var(--color-grey-100);--color-background-gradient-first: #5ad8f7;--color-background-gradient-second: #2f50af;--color-background-gradient-third: #9150bf;--color-background: var(--color-white);--color-text: var(--color-grey-200);--color-link: #1b98f8;--color-menu-accent: #ed5900;--color-background-code: var(--color-grey-850);--color-error: var(--color-dark-red);--color-error-input: #ffebeb;--color-error-list: var(--color-light-red);--color-table-background: var(--color-background);--color-table-stripe: var(--color-grey-900);--watchlist-row-selected: #e3f0ff;--watchlist-row-hover: #f2f2f2;--color-text-tab: var(--color-white);--color-background-tab: rgba(255, 255, 255, 0.2);--color-background-tab-hover: rgba(255, 255, 255, 0.5);--color-text-tab-active: #222;--color-api-key: #0078e7;--color-background-button-primary: #0078e7;--color-background-button-green: #42dd53;--color-background-button-red: #dd4242;--color-background-button-success: rgb(28, 184, 65);--color-background-button-error: rgb(202, 60, 60);--color-text-button-error: var(--color-white);--color-background-button-warning: rgb(202, 60, 60);--color-text-button-warning: var(--color-white);--color-background-button-secondary: rgb(66, 184, 221);--color-background-button-cancel: rgb(200, 200, 200);--color-text-button: var(--color-white);--color-background-button-tag: rgb(99, 99, 99);--color-background-snapshot-age: #dfdfdf;--color-error-text-snapshot-age: var(--color-white);--color-error-background-snapshot-age: #ff0000;--color-background-button-tag-active: #9c9c9c;--color-text-messages: var(--color-white);--color-background-messages-message: rgba(255, 255, 255, .2);--color-background-messages-error: rgba(255, 1, 1, .5);--color-background-messages-notice: rgba(255, 255, 255, .5);--color-border-notification: #ccc;--color-background-checkbox-operations: rgba(0, 0, 0, 0.05);--color-warning: #ff3300;--color-border-warning: var(--color-warning);--color-text-legend: var(--color-white);--color-link-new-version: #e07171;--color-last-checked: #bbb;--color-text-footer: #444;--color-border-watch-table-cell: #eee;--color-text-watch-tag-list: rgba(231, 0, 105, 0.4);--color-background-new-watch-form: rgba(0, 0, 0, 0.05);--color-background-new-watch-input: var(--color-white);--color-background-new-watch-input-transparent: rgba(255, 255, 255, 0.1);--color-text-new-watch-input: var(--color-text);--color-border-input: var(--color-grey-500);--color-shadow-input: var(--color-grey-400);--color-background-input: var(--color-white);--color-text-input: var(--color-text);--color-text-input-description: var(--color-grey-500);--color-text-input-placeholder: var(--color-grey-600);--color-background-table-thead: var(--color-grey-800);--color-border-table-cell: var(--color-grey-700);--color-text-menu-heading: var(--color-white);--color-text-menu-link: var(--color-grey-500);--color-background-menu-link-hover: var(--color-grey-850);--color-text-menu-link-hover: var(--color-grey-300);--color-shadow-jump: var(--color-grey-500);--color-icon-github: var(--color-black);--color-watch-table-error: var(--color-dark-red);--color-watch-table-row-text: var(--color-grey-100);--color-table-line: #e7e9ee;--highlight-trigger-text-bg-color: #1b98f8;--highlight-ignored-text-bg-color: var(--color-grey-700);--highlight-blocked-text-bg-color: rgb(202, 60, 60);--color-sidebar-bg: rgba(255, 255, 255, 0.97);--color-sidebar-text: var(--color-text);--color-sidebar-shadow: 6px 0 28px rgba(0, 0, 0, 0.18);--color-sidebar-item-hover-bg: rgba(0, 0, 0, 0.06);--color-sidebar-item-active-bg: rgba(0, 0, 0, 0.10);--common-round-border: 8px}html[data-darkmode=true]{--color-link: #59bdfb;--color-text: var(--color-white);--color-table-line: #262c37;--color-background-gradient-first: #3f90a5;--color-background-gradient-second: #1e316c;--color-background-gradient-third: #4d2c64;--color-background-new-watch-input: var(--color-grey-100);--color-background-new-watch-input-transparent: var(--color-grey-100);--color-text-new-watch-input: var(--color-text);--color-background-table-thead: var(--color-grey-200);--color-table-background: var(--color-grey-300);--color-table-stripe: var(--color-grey-325);--watchlist-row-selected: #1e3a5f;--watchlist-row-hover: #2a2a2a;--color-background: var(--color-grey-300);--color-text-menu-heading: var(--color-grey-850);--color-text-menu-link: var(--color-grey-800);--color-border-table-cell: var(--color-grey-400);--color-text-tab-active: var(--color-text);--color-border-input: var(--color-grey-400);--color-shadow-input: var(--color-grey-50);--color-background-input: var(--color-grey-350);--color-text-input-description: var(--color-grey-600);--color-text-input-placeholder: var(--color-grey-600);--color-text-watch-tag-list: rgba(250, 62, 146, 0.4);--color-background-code: var(--color-grey-200);--color-background-tab: rgba(0, 0, 0, 0.2);--color-background-tab-hover: rgba(0, 0, 0, 0.5);--color-background-snapshot-age: var(--color-grey-200);--color-shadow-jump: var(--color-grey-200);--color-icon-github: var(--color-white);--color-watch-table-error: var(--color-light-red);--color-watch-table-row-text: var(--color-grey-800);--color-sidebar-bg: rgba(8, 10, 14, 0.97);--color-sidebar-text: var(--color-white);--color-sidebar-shadow: 6px 0 28px rgba(0, 0, 0, 0.45);--color-sidebar-item-hover-bg: rgba(255, 255, 255, 0.06);--color-sidebar-item-active-bg: rgba(255, 255, 255, 0.10)}html[data-darkmode=true] .icon-spread{filter:hue-rotate(-10deg) brightness(1.5)}html[data-darkmode=true] .watch-table .title-col a[target=_blank]::after,html[data-darkmode=true] .watch-table .current-diff-url::after{filter:invert(0.5) hue-rotate(10deg) brightness(2)}html[data-darkmode=true] .watch-table .status-browsersteps{filter:invert(0.5) hue-rotate(10deg) brightness(1.5)}html[data-darkmode=true] .watch-table .watch-controls .state-off svg{opacity:.3}html[data-darkmode=true] .watch-table .watch-controls .state-on svg{opacity:1}html[data-darkmode=true] .watch-table .unviewed{color:#fff}html[data-darkmode=true] .watch-table .unviewed.error{color:var(--color-watch-table-error)}.arrow{border:solid var(--color-border-input);border-width:0 2px 2px 0;display:inline-block;padding:3px}.arrow.right{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}.arrow.left{transform:rotate(135deg);-webkit-transform:rotate(135deg)}.arrow.up,.arrow.asc{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}.arrow.down,.arrow.desc{transform:rotate(45deg);-webkit-transform:rotate(45deg)}#browser_steps th{display:none}#browser_steps li{list-style:decimal;padding:5px}#browser_steps li.browser-step-with-error{background-color:#ffd6d6;border-radius:4px}#browser_steps li:not(:first-child):hover{opacity:1}#browser_steps li .control{padding-left:5px;padding-right:5px}#browser_steps li .control a{font-size:70%}#browser_steps li.empty{padding:0px;opacity:.35}#browser_steps li.empty .control{display:none}#browser_steps li:hover{background:#eee}#browser_steps li>label{display:none}@media only screen and (min-width: 760px){#browser-steps .flex-wrapper{display:flex;flex-flow:row;height:70vh;font-size:80%}#browser-steps .flex-wrapper #browser-steps-ui{flex-grow:1;flex-shrink:1;flex-basis:0;background-color:#eee;border-radius:5px}#browser-steps-fieldlist{flex-grow:0;flex-shrink:0;flex-basis:auto;max-width:400px;padding-left:1rem;overflow-y:scroll}#browsersteps-selector-wrapper{height:100% !important}}#browsersteps-selector-wrapper{width:100%;overflow-y:scroll;position:relative;height:80vh}#browsersteps-selector-wrapper>img{position:absolute;max-width:100%}#browsersteps-selector-wrapper>canvas{position:relative;max-width:100%}#browsersteps-selector-wrapper>canvas:hover{cursor:pointer}#browsersteps-selector-wrapper .loader{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);z-index:100;max-width:350px;text-align:center}#browsersteps-selector-wrapper .spinner,#browsersteps-selector-wrapper .spinner:after{width:80px;height:80px;font-size:3px}#browsersteps-selector-wrapper #browsersteps-click-start{color:var(--color-grey-400)}#browsersteps-selector-wrapper #browsersteps-click-start:hover{cursor:pointer}ul#requests-extra_proxies{list-style:none}ul#requests-extra_proxies li>label{display:none}ul#requests-extra_proxies table tr{display:table-row}ul#requests-extra_proxies table tr input[type=text]{width:100%}@media only screen and (min-width: 1024px){ul#requests-extra_proxies table tr{display:inline}}#request label[for=proxy]{display:inline-block}body.proxy-check-active #request .proxy-check-details{font-size:80%;color:#555;display:block;padding-left:2em;max-width:500px}body.proxy-check-active #request .proxy-timing{font-size:80%;padding-left:1rem;color:var(--color-link)}#recommended-proxy{display:grid;gap:2rem;padding-bottom:1em}@media(min-width: 991px){#recommended-proxy{grid-template-columns:repeat(2, 1fr)}}#recommended-proxy>div{border:1px #aaa solid;border-radius:4px;padding:1em}#extra-proxies-setting{border:1px solid var(--color-grey-800);border-radius:4px;margin:1em;padding:1em}ul#requests-extra_browsers{list-style:none}ul#requests-extra_browsers li>label{display:none}ul#requests-extra_browsers table tr{display:table-row}ul#requests-extra_browsers table tr input[type=text]{width:100%}@media only screen and (min-width: 1280px){ul#requests-extra_browsers table tr{display:inline}ul#requests-extra_browsers table tr input[type=text]{width:100%}}#extra-browsers-setting{border:1px solid var(--color-grey-800);border-radius:4px;margin:1em;padding:1em}.pagination-page-info{text-transform:capitalize}.pagination.menu>*{display:inline-block}.pagination.menu li{display:inline-block}.pagination.menu a{padding:.65rem;margin:3px;border:none;background:#444;border-radius:2px;color:var(--color-text-button)}.pagination.menu a.disabled{display:none}.pagination.menu a.active{font-weight:bold;background:#888}.pagination.menu a:hover{background:#999}.spinner,.spinner:after{border-radius:50%;width:10px;height:10px}.spinner{margin:0px auto;font-size:3px;vertical-align:middle;display:inline-block;text-indent:-9999em;border-top:1.1em solid rgba(38,104,237,.2);border-right:1.1em solid rgba(38,104,237,.2);border-bottom:1.1em solid rgba(38,104,237,.2);border-left:1.1em solid #2668ed;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.1s infinite linear;animation:load8 1.1s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.toggle-light-mode .icon-dark{display:none}html[data-darkmode=true] .toggle-light-mode .icon-light{display:none}html[data-darkmode=true] .toggle-light-mode .icon-dark{display:block}.pure-menu-link{padding:.5rem 1em;line-height:1.2rem}#menu-mute img,#menu-pause img{height:1.2rem}.pure-menu-item{height:initial}.pure-menu-item svg{height:1.2rem}.pure-menu-item *{vertical-align:middle}.pure-menu-item .bi-heart:hover{cursor:pointer}.pure-menu-item.active .pure-menu-link{background-color:var(--color-background-menu-link-hover);color:var(--color-text-menu-heading)}.pure-menu-item .action-icon{stroke:var(--color-text-menu-heading)}#overlay{opacity:.95;position:fixed;width:350px;max-width:100%;height:100%;top:50px;right:-350px;background-color:var(--color-table-stripe);border:1px solid #aaa;z-index:2;transform:translateX(0);transition:transform .5s ease}#overlay.visible{transform:translateX(-100%)}#overlay .content{font-size:.875rem;padding:1.1rem;max-width:400px;color:var(--color-watch-table-row-text)}#heartpath{height:1.6rem;width:1.6rem;z-index:100;transition:all ease .3s !important}#heartpath:hover{fill:red !important;transition:all ease .3s !important}.minitabs-wrapper{width:100%}.minitabs-wrapper>div[id]{padding:20px;border:1px solid #ccc;border-top:none}.minitabs-wrapper .minitabs-content{width:100%;display:flex}.minitabs-wrapper .minitabs-content>div{flex:1 1 auto;min-width:0;overflow:scroll}.minitabs-wrapper .minitabs{display:flex;border-bottom:1px solid #ccc}.minitabs-wrapper .minitab{flex:1;text-align:center;padding:12px 0;text-decoration:none;color:#333;background-color:#f1f1f1;border:1px solid #ccc;border-bottom:none;cursor:pointer;transition:background-color .3s}.minitabs-wrapper .minitab:hover{background-color:#ddd}.minitabs-wrapper .minitab.active{background-color:#fff;font-weight:bold}@media(min-width: 800px){body.preview-text-enabled #filters-and-triggers>div{display:flex;gap:20px;position:relative}}body.preview-text-enabled #edit-text-filter,body.preview-text-enabled #text-preview{flex:1;align-self:flex-start}body.preview-text-enabled #edit-text-filter #pro-tips{display:none}body.preview-text-enabled #text-preview{position:sticky;top:20px;padding-top:1rem;padding-bottom:1rem;display:block !important}body.preview-text-enabled #activate-text-preview{background-color:var(--color-grey-500)}body.preview-text-enabled .monospace-preview{background:var(--color-background-input);border:1px solid var(--color-grey-600);padding:1rem;color:var(--color-text-input);font-family:"Courier New",Courier,monospace;font-size:70%;word-break:break-word;white-space:pre-wrap}#activate-text-preview{right:0;position:absolute;z-index:3;box-shadow:1px 1px 4px var(--color-shadow-jump)}.cdio-table{width:100%;font-size:var(--body-main-text-size)}.cdio-table thead{text-transform:uppercase}.cdio-table thead a{color:var(--color-text)}.cdio-table td,.cdio-table th{vertical-align:middle;border:none}.cdio-table tbody tr{color:var(--color-watch-table-row-text);border-bottom:1px solid var(--color-table-line);background-color:var(--color-table-background)}.cdio-table tbody tr td{background-color:var(--color-table-background)}.cdio-table tbody tr:hover>td{background-color:var(--watchlist-row-hover)}.cdio-table-clip{border-radius:var(--common-round-border);overflow:hidden;margin-bottom:1.1rem}.seg{display:inline-flex;align-items:center;gap:2px;padding:2px;border:1px solid var(--color-border-table-cell);border-radius:var(--common-round-border);background:var(--color-background-table-thead)}.seg a,.seg button{display:inline-flex;align-items:center;gap:6px;border:0;background:rgba(0,0,0,0);color:var(--color-text-input-description);font-size:.8rem;font-weight:600;line-height:1.4;padding:5px 11px;border-radius:calc(var(--common-round-border) - 1px);text-decoration:none;cursor:pointer;white-space:nowrap}.seg a:hover,.seg button:hover{color:var(--color-text)}.seg a.active,.seg a:hover,.seg button.active,.seg button:hover{background:var(--color-background);color:var(--color-text);box-shadow:0 1px 2px rgba(0,0,0,.15)}html[data-darkmode=true] .seg a.active,html[data-darkmode=true] .seg button.active{background:var(--color-grey-400);box-shadow:0 1px 2px rgba(0,0,0,.5)}.seg-count{font-size:.62rem;line-height:1;font-weight:700;padding:2px 6px;border-radius:999px;background:var(--color-background-button-tag);color:var(--color-white)}.seg-count--unread{background:#3e95bb}.seg-count--error{background:var(--color-background-button-error)}.seg-count--deal{background:var(--color-background-button-success)}.cdio-btn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:var(--common-round-border);border:1px solid var(--color-border-table-cell);background:var(--color-background);color:var(--color-text-input-description);font-size:.8rem;font-weight:600;line-height:1;white-space:nowrap;text-decoration:none;cursor:pointer;transition:border-color .12s ease,color .12s ease,background-color .12s ease}.cdio-btn:hover{border-color:var(--color-border-input);color:var(--color-text)}.cdio-btn:focus-visible{outline:2px solid var(--color-link);outline-offset:2px}.cdio-btn svg{width:15px;height:15px;stroke:currentColor}.cdio-btn img{height:15px;display:block}.cdio-btn--icon{width:32px;padding:0;justify-content:center}.cdio-btn--sm{height:26px;padding:0 9px;font-size:.72rem;gap:5px}.cdio-btn--sm svg{width:13px;height:13px}.cdio-btn--primary{background:var(--color-background-button-primary);border-color:var(--color-background-button-primary);color:var(--color-text-button)}.cdio-btn--primary:hover{background:var(--color-link);border-color:var(--color-link);color:var(--color-text-button)}.cdio-btn--danger{color:var(--color-background-button-error)}.cdio-btn--danger:hover{color:var(--color-background-button-error);border-color:var(--color-background-button-error)}.cdio-btn--warning{color:#d68a00}.cdio-btn--warning:hover{color:#d68a00;border-color:#d68a00}.watch-table tr:has(input[name=uuids]:checked)>td{background-color:var(--watchlist-row-selected)}.watch-table tbody tr:hover td.buttons *,.watch-table tbody tr:focus-within td.buttons *,.watch-table tbody tr:has(input[name=uuids]:checked) td.buttons *{opacity:1}.select-all-banner{margin:.4rem 0;padding:.5rem .75rem;border-radius:var(--common-round-border);background:var(--watchlist-row-selected);color:var(--color-watch-table-row-text);font-size:var(--body-main-text-size)}.select-all-banner button{margin-left:.5rem;vertical-align:baseline}.watch-controls svg{width:18px;height:18px;stroke:currentColor;fill:none;vertical-align:middle}#stats_row{display:flex;align-items:center;width:100%;color:#fff;font-size:.85rem}#stats_row>*{padding-bottom:.5rem}#stats_row .left{text-align:left}#stats_row .left .records-selected{margin-top:.25rem;opacity:.9}#stats_row .right{opacity:.5;transition:opacity .6s ease;margin-left:auto;text-align:right}body.has-queue #stats_row .right{opacity:1}#checkbox-operations{margin-bottom:.55rem;background:var(--color-background-new-watch-form);padding:1em;border-radius:10px;max-width:100%;position:sticky;top:20px;display:none}#checkbox-operations button{margin-bottom:3px;margin-top:3px;display:inline-flex;align-items:center}#checkbox-operations i,#checkbox-operations svg{width:14px;height:14px;stroke:#fff}body.watch-selection-active #checkbox-operations{display:block}.watch-table .checkbox-uuid{text-align:center}.watch-table .checkbox-uuid>*{vertical-align:middle}@media only screen and (max-width: 1200px){.watch-table .last-checked,.watch-table .last-changed{text-align:center}}.watch-table #th-webpage{text-align:center}.watch-table tbody tr.unviewed{font-weight:bold}.watch-table tbody tr td.inline.title-col{width:100%}.watch-table tbody tr td.inline.title-col .grid-wrapper{display:grid;grid-template-columns:auto minmax(0, 1fr) auto;grid-auto-columns:auto;align-items:center;gap:.55rem}.watch-table tbody tr td.inline.title-col .grid-wrapper>.favicon{grid-column:1}.watch-table tbody tr td.inline.title-col .grid-wrapper>.watch-text-info{grid-column:2}.watch-table tbody tr td.inline.title-col .grid-wrapper>.status-icons{grid-column:3}.watch-table tbody tr td.inline.title-col .grid-wrapper>.restock-info-wrap{grid-column:4}@media only screen and (max-width: 1200px){.watch-table tbody tr td.inline.title-col .grid-wrapper>.restock-info-wrap{grid-column:1/-1;justify-self:center}}.watch-table tbody tr .watch-text-info{line-height:1.5}.watch-table tbody tr.checking-now td:first-child{position:relative}.watch-table tbody tr.checking-now td:first-child::before{content:"";position:absolute;top:0;bottom:0;left:0;width:3px;background-color:#293eff}.watch-table tbody tr.checking-now td.last-checked .spinner-wrapper{display:inline-block !important;white-space:nowrap !important}.watch-table tbody tr.checking-now td.last-checked .spinner{margin-right:.275rem}.watch-table tbody tr.checking-now td.last-checked .innertext{display:none !important}.watch-table tbody tr.queued a.recheck{display:none !important}.watch-table tbody tr.queued a.already-in-queue-button{display:inline-flex !important;opacity:.8}.watch-table tbody tr.paused a.pause-toggle.state-on{display:inline !important}.watch-table tbody tr.paused a.pause-toggle.state-off{display:none !important}.watch-table tbody tr.notification_muted a.mute-toggle.state-on{display:inline !important}.watch-table tbody tr.notification_muted a.mute-toggle.state-off{display:none !important}.watch-table tbody tr.has-error .error-text{display:block !important;color:var(--color-watch-table-error)}.watch-table tbody tr.single-history a.preview-link{display:inherit !important}.watch-table tbody tr.multiple-history a.history-link{display:inherit !important}.watch-table tbody tr.has-favicon.unviewed img.favicon{opacity:1 !important;border-radius:4px}.watch-table td.buttons{font-size:12px;white-space:nowrap}.watch-table td.buttons>div{display:inline-flex;align-items:center;gap:6px}.watch-table td.buttons>div>*{opacity:0;transition:opacity .12s ease}.watch-table td.title-col{word-break:break-all;white-space:normal}.watch-table td a.external::after{content:"";display:inline-block;width:var(--body-main-text-size);height:var(--body-main-text-size);vertical-align:-0.1em;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23777' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'/%3E%3Cpolyline points='15 3 21 3 21 9'/%3E%3Cline x1='10' y1='14' x2='21' y2='3'/%3E%3C/svg%3E") no-repeat center/contain;margin:0 3px 0 5px}.watch-table td.watch-controls>div{display:flex;justify-content:space-between;align-items:center}@media(min-width: 1020px){.watch-table th{white-space:nowrap}}.watch-table th#h-lastchanged,.watch-table th#h-lastchecked{text-align:center}.watch-table th a{font-weight:normal}.watch-table th a.active{font-weight:bolder}.watch-table th a.inactive .arrow{display:none}.watch-table th#mute-pause{white-space:nowrap}.watch-table th#mute-pause>div{display:flex;justify-content:space-between;align-items:center}.watch-table.favicon-not-enabled tr .favicon{display:none}.watch-table .status-icons{white-space:nowrap;display:flex;align-items:center;gap:4px}.watch-table .status-icons>*{vertical-align:middle}.watch-table .title-wrapper{display:flex;align-items:center;gap:10px}.watch-table .title-col-inner{display:inline-block;vertical-align:middle}.watch-table img.favicon{vertical-align:middle;max-width:36px;max-height:36px;height:36px}.watch-table img.favicon:hover{outline:2px solid color-mix(in srgb, var(--color-watch-table-row-text) 50%, transparent);outline-offset:1px;border-radius:4px}body.watch-selection-active #buttons-for-all-watches{display:none !important}#buttons-for-all-watches{display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:.55rem;margin:0}#buttons-for-all-watches #post-list-mark-views{display:none}body.has-any-unviewed #post-list-mark-views{display:inline-flex !important}#watch-table-wrapper{display:inline-block;width:100%}#watch-table-wrapper #list-related-buttons{display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:.55rem;margin:0;padding:1.1rem 0 .55rem 0}#watch-table-wrapper.has-error #list-related-buttons #post-list-with-errors{display:inline-flex !important}#watch-table-wrapper.has-unread-changes #list-related-buttons #post-list-unread{display:inline-flex !important}#watch-table-wrapper #tag-lister #tag-all{opacity:1}#watch-table-wrapper #tag-lister.active-tag .button-tag{opacity:.35}#watch-table-wrapper #tag-lister.active-tag .button-tag.active,#watch-table-wrapper #tag-lister.active-tag .button-tag:hover{opacity:1}.content .group-overview-table{width:100%}.content .group-overview-table .pure-button{margin-top:.3rem;margin-bottom:.3rem}.content .group-overview-table .watch-controls,.content .group-overview-table .watch-count{text-align:center}.content .group-overview-table td{padding:5px !important;color:var(--color-watch-table-row-text)}.pure-button{border-radius:var(--common-round-border)}body.blueprint-watchlist #add-watch-ui{margin-bottom:1.1rem;padding:0}body.blueprint-watchlist #add-watch-url-row{margin-bottom:0 !important}body.blueprint-watchlist #quick-watch-llm-intent{margin-top:.55rem}body.blueprint-watchlist #url{width:auto}@media only screen and (min-width: 980px){body.blueprint-watchlist #url{min-width:32rem;max-width:min(80%,80vw);box-sizing:border-box}}body.blueprint-watchlist #quick-watch-llm-intent,body.blueprint-watchlist #quick-watch-processor-type{display:none}body.blueprint-watchlist #new-watch-form:has(#url:not(:placeholder-shown)) #quick-watch-llm-intent,body.blueprint-watchlist #new-watch-form:has(#url:not(:placeholder-shown)) #quick-watch-processor-type{display:block}@media(max-width: 767px){.watch-table thead{display:block}.watch-table thead tr th{display:inline-block}.watch-table thead tr th .hide-on-mobile{display:none}.watch-table thead .empty-cell{display:none}.watch-table .last-checked::before{color:var(--color-text);content:attr(data-label) " "}.watch-table .last-changed::before{color:var(--color-text);content:attr(data-label) " "}.watch-table td.inline{display:inline-block}.watch-table .pure-table td,.watch-table .pure-table th{border:none}.watch-table td{border:none;border-bottom:1px solid var(--color-border-watch-table-cell);vertical-align:middle}.watch-table td:before{top:6px;left:6px;width:45%;padding-right:10px;white-space:nowrap}.watch-table.pure-table-striped tr{background-color:var(--color-table-background)}.watch-table.pure-table-striped tr:nth-child(2n-1){background-color:var(--color-table-stripe)}.watch-table.pure-table-striped tr:nth-child(2n-1) td{background-color:inherit}}@media(max-width: 767px){.watch-table tbody tr{padding-bottom:10px;padding-top:10px;display:grid;grid-template-columns:40px 1fr 100px;grid-template-rows:auto auto auto auto;gap:.5rem}.watch-table tbody tr .counter-i{display:none}.watch-table tbody tr>td{border-bottom:none}.watch-table tbody tr>td[colspan]{grid-column:1/-1}.watch-table tbody tr>td.title-col{grid-column:1/-1;grid-row:1}.watch-table tbody tr>td.title-col .watch-title{font-size:.92rem}.watch-table tbody tr>td.title-col .link-spread{display:none}.watch-table tbody tr>td.last-checked{grid-column:1/-1;grid-row:2}.watch-table tbody tr>td.last-changed{grid-column:1/-1;grid-row:3}.watch-table tbody tr>td.checkbox-uuid{grid-column:1;grid-row:4}.watch-table tbody tr>td.buttons{grid-column:2;grid-row:4;display:flex;align-items:center;justify-content:flex-start}.watch-table tbody tr>td.watch-controls{grid-column:3;grid-row:4;display:grid;place-items:center}.watch-table tbody tr>td.watch-controls a img{padding:10px}.pure-table td{padding:0 !important}}@media(min-width: 768px){.watch-table thead tr th .hide-on-desktop{display:none}.watch-table td.last-checked .innertext,.watch-table td.last-changed .innertext{white-space:nowrap}}#llm-intent-section textarea{white-space:normal;overflow-wrap:break-word;overflow-x:hidden;overflow-y:auto;resize:vertical;font-family:inherit}ul#conditions_match_logic{list-style:none}ul#conditions_match_logic input,ul#conditions_match_logic label,ul#conditions_match_logic li{display:inline-block}ul#conditions_match_logic li{padding-right:1em}.fieldlist_formfields{width:100%;background-color:var(--color-background, #fff);border-radius:4px;border:1px solid var(--color-border-table-cell, #cbcbcb)}.fieldlist_formfields .fieldlist-header{display:flex;background-color:var(--color-background-table-thead, #e0e0e0);font-weight:bold;border-bottom:1px solid var(--color-border-table-cell, #cbcbcb)}.fieldlist_formfields .fieldlist-header-cell{flex:1;padding:.5em 1em;text-align:left}.fieldlist_formfields .fieldlist-header-cell:last-child{flex:0 0 120px}.fieldlist_formfields .fieldlist-body{display:flex;flex-direction:column}.fieldlist_formfields .fieldlist-row{display:flex;border-bottom:1px solid var(--color-border-table-cell, #cbcbcb)}.fieldlist_formfields .fieldlist-row:last-child{border-bottom:none}.fieldlist_formfields .fieldlist-row:nth-child(2n-1){background-color:var(--color-table-stripe, #f2f2f2)}.fieldlist_formfields .fieldlist-row.error-row{background-color:var(--color-error-input, #ffdddd)}.fieldlist_formfields .fieldlist-cell{flex:1;padding:.5em 1em;display:flex;flex-direction:column;justify-content:center}.fieldlist_formfields .fieldlist-cell input,.fieldlist_formfields .fieldlist-cell select{width:100%}.fieldlist_formfields .fieldlist-cell.fieldlist-actions{flex:0 0 120px;display:flex;flex-direction:row;align-items:center;gap:4px}.fieldlist_formfields ul.errors{margin-top:.5em;margin-bottom:0;padding:.5em;background-color:var(--color-error-background-snapshot-age, #ffdddd);border-radius:4px;list-style-position:inside}@media only screen and (max-width: 760px){.fieldlist_formfields .fieldlist-header,.fieldlist_formfields .fieldlist-row{flex-direction:column}.fieldlist_formfields .fieldlist-header-cell{display:none}.fieldlist_formfields .fieldlist-row{padding:.5em 0;border-bottom:2px solid var(--color-border-table-cell, #cbcbcb)}.fieldlist_formfields .fieldlist-cell{padding:.25em .5em}.fieldlist_formfields .fieldlist-cell.fieldlist-actions{flex:1;justify-content:flex-start;padding-top:.5em}.fieldlist_formfields .fieldlist-cell:not(:last-child){margin-bottom:.5em}.fieldlist_formfields .fieldlist-cell::before{content:attr(data-label);font-weight:bold;margin-bottom:.25em}}.fieldlist_formfields .addRuleRow,.fieldlist_formfields .removeRuleRow,.fieldlist_formfields .verifyRuleRow{cursor:pointer;border:none;padding:4px 8px;border-radius:3px;font-weight:bold;background-color:#aaa;color:var(--color-foreground-text, #fff)}.fieldlist_formfields .addRuleRow:hover,.fieldlist_formfields .removeRuleRow:hover,.fieldlist_formfields .verifyRuleRow:hover{background-color:#999}body.checking-now #checking-now-fixed-tab{display:block !important}#checking-now-fixed-tab{background:#ccc;border-radius:5px;bottom:0;color:var(--color-text);display:none;font-size:.8rem;left:0;padding:5px;position:fixed}#selector-wrapper{height:100%;text-align:center;max-height:70vh;overflow-y:scroll;position:relative}#selector-wrapper>img{position:absolute;z-index:4;max-width:100%}#selector-wrapper>canvas{position:relative;z-index:5;max-width:100%}#selector-wrapper>canvas:hover{cursor:pointer}#selector-current-xpath{font-size:80%}@media(min-width: 901px){body.blueprint-add_watch_ui #add-watch-ui{width:80%}}#add-watch-ui{padding:0}#add-watch-ui #add-watch-url-row{display:flex;gap:.5rem;align-items:stretch;margin-bottom:1rem}#add-watch-ui #add-watch-url-row>span{flex:1 1 auto;min-width:0}#add-watch-ui #add-watch-url-row>span input{width:100%}#add-watch-ui #add-watch-url-row #add-watch-go{flex:0 0 auto;white-space:nowrap}#add-watch-ui #add-watch-panes{display:flex;gap:.55rem;align-items:stretch}@media(max-width: 900px){#add-watch-ui #add-watch-panes{flex-direction:column}}#add-watch-ui #add-watch-selector-pane{flex:1 1 62%;min-width:0;min-height:380px;position:relative;display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--color-background-tab);border-radius:6px;background:rgba(0,0,0,.15);padding:.75rem}#add-watch-ui #add-watch-selector-pane #add-watch-empty-state,#add-watch-ui #add-watch-selector-pane #add-watch-spinner,#add-watch-ui #add-watch-selector-pane #add-watch-error{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;text-align:center;padding:2rem 1rem}#add-watch-ui #add-watch-selector-pane #add-watch-empty-state{opacity:.8}#add-watch-ui #add-watch-selector-pane #add-watch-empty-state svg{opacity:.55}#add-watch-ui #add-watch-selector-pane #add-watch-empty-state strong{font-size:1.05rem}#add-watch-ui #add-watch-selector-pane #add-watch-empty-state span{font-size:.85rem;opacity:.8;max-width:32ch}#add-watch-ui #add-watch-selector-pane #add-watch-spinner{gap:1.2rem}#add-watch-ui #add-watch-selector-pane #add-watch-spinner .spinner{font-size:5px}#add-watch-ui #add-watch-selector-pane #add-watch-spinner .fetching-update-notice{font-size:.85rem;opacity:.85}#add-watch-ui #add-watch-selector-pane #add-watch-error{color:#ffb4b4;font-size:.9rem;word-break:break-word}#add-watch-ui #add-watch-selector-pane #selector-wrapper{position:relative;display:block;width:100%;flex:1 1 auto;min-height:0;max-height:none;overflow-y:auto;overflow-x:hidden;text-align:left}#add-watch-ui #add-watch-selector-pane #selector-wrapper>img{position:relative;display:block;max-width:100%;height:auto;z-index:4}#add-watch-ui #add-watch-selector-pane #selector-wrapper>canvas{position:absolute;top:0;left:0;max-width:none;z-index:5}#add-watch-ui #add-watch-options-pane{flex:0 0 34%;min-width:0;display:flex;flex-direction:column;gap:1.1rem}@media(max-width: 900px){#add-watch-ui #add-watch-options-pane{flex:1 1 auto}}#add-watch-ui #add-watch-options-pane .add-watch-option-group label{display:inline-block}#add-watch-ui #add-watch-options-pane #by-element-toggle-group .pure-form-message-inline{display:block;margin-top:.25rem;font-size:.8rem;opacity:.8}#add-watch-ui #add-watch-options-pane #by-element-toggle-group #clear-selector{margin-top:.5rem}#add-watch-ui #add-watch-options-pane #quick-watch-llm-intent label{display:block;margin-bottom:.35rem}#add-watch-ui #add-watch-options-pane #add-watch-submit-row{display:flex;flex-wrap:wrap;gap:.5rem}body.blueprint-add_watch_ui #add-watch-ui{height:90vh;display:flex;flex-direction:column}body.blueprint-add_watch_ui #add-watch-fieldset{flex:1 1 auto;min-height:0;min-width:0;display:flex;flex-direction:column;border:0;margin:0;padding:0}body.blueprint-add_watch_ui #add-watch-legend{margin:0 0 .75rem;font-size:1.1rem;font-weight:600}body.blueprint-add_watch_ui #new-watch-form{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}@media(min-width: 901px){body.blueprint-add_watch_ui #add-watch-panes{flex:1 1 auto;min-height:0}body.blueprint-add_watch_ui #add-watch-selector-pane{min-height:0}}@media(max-width: 900px){body.blueprint-add_watch_ui #add-watch-ui{height:auto}body.blueprint-add_watch_ui #add-watch-panes{flex:0 0 auto}}.ternary-radio-group{display:flex;gap:0;border:1px solid var(--color-grey-750);border-radius:4px;overflow:hidden;width:fit-content;background:var(--color-background)}.ternary-radio-group .ternary-radio-option{position:relative;cursor:pointer;margin:0;display:flex;align-items:center}.ternary-radio-group .ternary-radio-option input[type=radio]{position:absolute;opacity:0;width:0;height:0}.ternary-radio-group .ternary-radio-option .ternary-radio-label{padding:8px 16px;background:var(--color-grey-900);border:none;border-right:1px solid var(--color-grey-750);font-size:13px;font-weight:500;color:var(--color-text);transition:all .2s ease;cursor:pointer;display:block;text-align:center}.ternary-radio-group .ternary-radio-option:last-child .ternary-radio-label{border-right:none}.ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label{background:var(--color-link);color:var(--color-text-button);font-weight:600}.ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label.ternary-default{background:var(--color-grey-600);color:var(--color-text-button)}.ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label:hover{background:#1a7bc4}.ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label:hover.ternary-default{background:var(--color-grey-500)}.ternary-radio-group .ternary-radio-option:hover .ternary-radio-label{background:var(--color-grey-800)}@media(max-width: 480px){.ternary-radio-group{width:100%}.ternary-radio-group .ternary-radio-label{flex:1;min-width:auto}}input[type=radio].pure-radio:checked+label,input[type=radio].pure-radio:checked{background:var(--color-link);color:var(--color-text-button)}html[data-darkmode=true] .ternary-radio-group .ternary-radio-option .ternary-radio-label{background:var(--color-grey-350)}html[data-darkmode=true] .ternary-radio-group .ternary-radio-option:hover .ternary-radio-label{background:var(--color-grey-400)}html[data-darkmode=true] .ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label{background:var(--color-link);color:var(--color-text-button)}html[data-darkmode=true] .ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label.ternary-default{background:var(--color-grey-600)}html[data-darkmode=true] .ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label:hover{background:#1a7bc4}html[data-darkmode=true] .ternary-radio-group .ternary-radio-option input:checked+.ternary-radio-label:hover.ternary-default{background:var(--color-grey-500)}body.processor-image_ssim_diff #edit-text-filter .text-filtering{display:none}body.processor-image_ssim_diff #conditions-tab{display:none}.modal-dialog{border:none;border-radius:10px;padding:0;background:var(--color-background);color:var(--color-text);box-shadow:0 5px 20px rgba(0,0,0,.3);max-width:500px;width:90%}.modal-dialog::backdrop{background:rgba(0,0,0,.6);backdrop-filter:blur(3px);animation:fadeIn .2s ease-out}.modal-dialog[open]{animation:slideIn .25s ease-out}.modal-dialog .modal-header{padding:1.5rem;border-bottom:1px solid var(--color-border-table-cell);display:flex;align-items:center;gap:1rem}.modal-dialog .modal-header .modal-icon{font-size:2rem;line-height:1;flex-shrink:0}.modal-dialog .modal-header .modal-icon.warning{color:var(--color-warning)}.modal-dialog .modal-header .modal-icon.danger{color:var(--color-background-button-error)}.modal-dialog .modal-header .modal-icon.info{color:var(--color-background-button-primary)}.modal-dialog .modal-header .modal-title{font-size:1.3rem;font-weight:bold;margin:0;color:var(--color-text)}.modal-dialog .modal-body{padding:1.5rem;line-height:1.6}.modal-dialog .modal-body p{margin:0 0 1rem 0}.modal-dialog .modal-body p:last-child{margin-bottom:0}.modal-dialog .modal-body strong{color:var(--color-text);font-weight:600}.modal-dialog .modal-footer{padding:1rem 1.5rem;border-top:1px solid var(--color-border-table-cell);display:flex;gap:.75rem;justify-content:flex-end;background:var(--color-grey-900)}.modal-dialog .modal-footer button{padding:.6rem 1.5rem;border:none;border-radius:4px;cursor:pointer;font-weight:500;transition:all .2s ease;font-size:.95rem}.modal-dialog .modal-footer button:hover{transform:translateY(-1px);box-shadow:0 2px 8px rgba(0,0,0,.15)}.modal-dialog .modal-footer button:active{transform:translateY(0)}.modal-dialog .modal-footer button.modal-btn-cancel{background:var(--color-background-button-cancel);color:var(--color-grey-200)}.modal-dialog .modal-footer button.modal-btn-cancel:hover{background:var(--color-grey-700)}.modal-dialog .modal-footer button.modal-btn-confirm{background:var(--color-background-button-primary);color:var(--color-white)}.modal-dialog .modal-footer button.modal-btn-confirm:hover{opacity:.9}.modal-dialog .modal-footer button.modal-btn-danger{background:var(--color-background-button-error);color:var(--color-white)}.modal-dialog .modal-footer button.modal-btn-danger:hover{background:var(--color-dark-red)}.modal-dialog .modal-footer button.modal-btn-warning{background:var(--color-background-button-warning);color:var(--color-white)}.modal-dialog .modal-footer button.modal-btn-warning:hover{opacity:.9}html[data-darkmode=true] .modal-dialog{box-shadow:0 5px 30px rgba(0,0,0,.7)}html[data-darkmode=true] .modal-dialog .modal-footer{background:var(--color-grey-200)}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes slideIn{from{opacity:0;transform:translateY(-20px) scale(0.95)}to{opacity:1;transform:translateY(0) scale(1)}}@media only screen and (max-width: 760px){.modal-dialog{width:95%;max-width:none}.modal-dialog .modal-header{padding:1rem}.modal-dialog .modal-header .modal-title{font-size:1.1rem}.modal-dialog .modal-body{padding:1rem;font-size:.95rem}.modal-dialog .modal-footer{padding:.75rem 1rem;flex-wrap:wrap}.modal-dialog .modal-footer button{flex:1;min-width:120px}}.bulk-choice-list{display:flex;flex-direction:column;gap:2px;max-height:50vh;overflow-y:auto;text-align:left}.bulk-choice-list .bulk-choice-row{display:block;padding:6px 8px;cursor:pointer;border-radius:4px}.bulk-choice-list .bulk-choice-row input[type=radio]{margin-right:8px}.bulk-choice-list .bulk-choice-row:hover{background:rgba(127,127,127,.15)}.bulk-choice-list .bulk-choice-row em{opacity:.7;font-size:.9em}#language-selector-flag{display:inline-block;width:1.2em;height:1.2em;vertical-align:middle;border-radius:50%;overflow:hidden;opacity:.6}#language-selector-flag:hover{opacity:1}.language-list{display:flex;flex-direction:column;gap:.5rem;padding:.5rem 0}.language-option{display:flex;align-items:center;gap:1rem;padding:.25rem;border-radius:4px;transition:background-color .2s ease;text-decoration:none;color:var(--color-text);border:1px solid rgba(0,0,0,0)}.language-option:hover{background-color:var(--color-background-menu-link-hover);border-color:var(--color-border-table-cell)}.language-option.active{background-color:var(--color-link);color:var(--color-text-button);font-weight:600}.language-option .flag{font-size:1.5rem;flex-shrink:0}.language-option .language-name{flex-grow:1;font-size:1rem}#language-modal .language-list .lang-option{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;margin-right:.5em;border-radius:50%;overflow:hidden}.action-sidebar{display:flex;flex-direction:column;align-items:center;align-self:flex-start;position:sticky;top:0;height:100vh;background:hsla(0,0%,100%,.05);z-index:60;pointer-events:none}@media only screen and (max-width: 980px){.action-sidebar{display:none}}.action-sidebar-inner{pointer-events:auto;width:64px;overflow:hidden;flex:1 1 auto;display:flex;flex-direction:column;transition:width .08s ease-out;padding-left:.55rem;padding-right:.55rem}body.actionsidebar-minimal .action-sidebar-inner:hover,body.actionsidebar-minimal .action-sidebar-inner:focus-within{width:200px;transition:width .22s cubic-bezier(0.2, 0.7, 0.2, 1)}body.actionside-bar-on .action-sidebar-inner{width:200px;transition:none}ul.action-sidebar-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:0}.action-sidebar-list.action-sidebar-list--bottom{margin-top:auto}.action-sidebar-li{list-style:none;margin:0;position:relative;color:var(--color-white)}.action-sidebar-li:nth-child(2){padding-top:2rem}.action-sidebar-li button{padding:0;margin:0}.action-sidebar-li a{color:var(--color-white)}.action-sidebar-li--spark .queue-spark{display:block;width:100%;height:15px;box-sizing:border-box;padding:0;margin:0;border-radius:3px;background:hsla(0,0%,100%,.05);box-shadow:inset 0 0 0 1px hsla(0,0%,100%,.06)}.action-sidebar-divider{height:1px;background:hsla(0,0%,100%,.18);margin:6px 16px;list-style:none}.action-sidebar .action-sidebar-item{position:relative;display:flex;align-items:center;padding:.55rem;font-size:var(--body-main-text-size);border-radius:var(--common-round-border);color:var(--color-white);text-decoration:none;white-space:nowrap;background:rgba(0,0,0,0);border:0;text-align:left;cursor:pointer;transition:background-color .12s ease,color .12s ease}.action-sidebar .action-sidebar-item:hover{background-color:var(--color-sidebar-item-hover-bg)}.action-sidebar .action-sidebar-item:hover .action-icon{stroke-width:2.3}.action-sidebar .action-sidebar-item:focus-visible{outline:2px solid var(--color-link);outline-offset:2px}.action-sidebar .action-sidebar-item.active .action-icon{stroke-width:2.4;filter:drop-shadow(0 0 0.4px currentColor)}.action-sidebar .action-sidebar-item.active .action-label{font-weight:700}.action-sidebar .action-sidebar-item.is-disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.action-sidebar .action-sidebar-item.action-sidebar-item--accent .action-icon{stroke:#fff;stroke-width:2.6}.action-sidebar .action-sidebar-item .action-label{flex:0 0 auto;margin-left:14px;font-family:inherit;font-weight:400;letter-spacing:0;text-transform:none;color:inherit;opacity:0;transform:translateX(-4px);transition:opacity .05s ease-out,transform .05s ease-out}.action-sidebar .action-sidebar-item .action-badge{margin-left:10px;font-size:.7rem;line-height:1;padding:3px 7px;border-radius:999px;background:hsla(0,0%,100%,.14);color:hsla(0,0%,100%,.85);text-transform:uppercase;letter-spacing:.06em;font-weight:700;pointer-events:none;opacity:0;transition:opacity .05s ease-out}.action-sidebar .action-sidebar-item .action-badge.action-badge--count{margin-left:auto;text-transform:none;letter-spacing:0;background:#3e95bb;color:var(--color-white);font-variant-numeric:tabular-nums}body.actionsidebar-minimal .action-sidebar-inner:hover .action-sidebar-item .action-label,body.actionsidebar-minimal .action-sidebar-inner:focus-within .action-sidebar-item .action-label{opacity:1;transform:translateX(0);transition:opacity .18s ease .05s,transform .18s cubic-bezier(0.2, 0.7, 0.2, 1) .05s}body.actionsidebar-minimal .action-sidebar-inner:hover .action-sidebar-item .action-badge,body.actionsidebar-minimal .action-sidebar-inner:focus-within .action-sidebar-item .action-badge{opacity:1;transition:opacity .18s ease .05s}body.actionside-bar-on .action-sidebar .action-sidebar-item .action-label{opacity:1;transform:translateX(0);transition:none}body.actionside-bar-on .action-sidebar .action-sidebar-item .action-badge{opacity:1;transition:none}.action-icon{flex:0 0 auto;width:24px;height:24px;stroke:currentColor;stroke-width:1.9;fill:none;stroke-linecap:round;stroke-linejoin:round}.action-badge{flex:0 0 auto;font-size:.62rem;text-transform:uppercase;letter-spacing:.08em;padding:2px 6px;border-radius:999px;background:hsla(0,0%,100%,.15);color:hsla(0,0%,100%,.85);font-weight:700}.mobile-menu-section{padding:.5rem .75rem;border-bottom:1px solid var(--color-border-table-cell)}.mobile-menu-section ul.action-sidebar-list{gap:1px}.mobile-menu-section ul.action-sidebar-list .action-sidebar-li a,.mobile-menu-section ul.action-sidebar-list .action-sidebar-li button{padding:.55rem}.mobile-menu-section .action-sidebar-item{position:relative;display:flex;align-items:center;justify-content:flex-start;gap:.55rem;padding:.55rem .55rem;border-radius:var(--common-round-border);color:var(--color-text)}.mobile-menu-section .action-sidebar-item:hover{background-color:var(--color-background-menu-link-hover);color:var(--color-text)}.mobile-menu-section .action-sidebar-item.active{background-color:var(--color-background-menu-link-hover);color:var(--color-text)}.mobile-menu-section .action-sidebar-item .action-label{position:static;transform:none;background:rgba(0,0,0,0);box-shadow:none;color:inherit;opacity:1;pointer-events:auto;padding:0;font-weight:500}.mobile-menu-section .action-sidebar-item .action-label::before{display:none}.mobile-menu-section .action-sidebar-item .action-badge{position:static;margin-left:auto;font-size:.62rem;background:rgba(0,0,0,.08);color:var(--color-text)}.mobile-menu-section .action-sidebar-item.action-sidebar-item--accent{background:var(--color-background-menu-link-hover);box-shadow:inset 0 0 0 1px var(--color-border-table-cell);color:var(--color-text)}.mobile-menu-section .action-sidebar-item.action-sidebar-item--accent .action-label{color:inherit}.mobile-menu-section .action-sidebar-item--button{background:rgba(0,0,0,0);border:none;cursor:pointer;text-align:left;font:inherit}#add-watch-live-info{width:100%;margin-top:1rem}#add-watch-live-info .add-watch-live-placeholder{border:1px dashed hsla(0,0%,100%,.25);background:hsla(0,0%,100%,.04);border-radius:10px;padding:1.25rem;color:var(--color-white)}#add-watch-live-info .add-watch-live-placeholder h3{margin:0 0 .4rem 0;font-size:1rem;letter-spacing:.02em}#add-watch-live-info .add-watch-live-placeholder .muted{opacity:.7;margin:0 0 .75rem 0;font-size:.85rem}#add-watch-live-info .add-watch-live-placeholder .add-watch-live-stream{font-size:.85rem;opacity:.6;padding:.6rem 0}.mobile-menu-drawer .action-sidebar-list{padding:0}.mobile-menu-drawer .mobile-menu-section .action-sidebar-item{padding-left:0}#action-sidebar-logo{padding-top:1.1rem;padding-left:.55rem}.actionsidebar-minimal #checking-now-stats-sidebar{display:none}.actionsidebar-minimal #cdio-logo #logo-expanded{display:none}.actionsidebar-minimal.action-side-bar-expanded #checking-now-stats-sidebar{display:block}.actionsidebar-minimal.action-side-bar-expanded #cdio-logo #logo-expanded{display:inline-block}.action-side-bar-expanded #cdio-logo #logo-short{display:none}#queue-page{width:100%;color:var(--color-white)}#queue-page h2,#queue-page h3{color:var(--color-white)}#queue-page .queue-panel{background:var(--color-background-new-watch-form);padding:1em;border-radius:10px;margin-bottom:1em;width:100%;box-sizing:border-box;color:var(--color-white)}#queue-page .queue-stats{display:grid;grid-template-columns:repeat(auto-fit, minmax(160px, 1fr));gap:.75rem}#queue-page .queue-stat .label{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;opacity:.7}#queue-page .queue-stat .value{font-size:1.6rem;font-weight:700;color:var(--color-white)}#queue-page .queue-stat.queue-stat--action{display:flex;align-items:center;justify-content:flex-start}#queue-page .queue-stat.queue-stat--action .pure-button{white-space:nowrap}#queue-page table.pure-table{width:100%;background:rgba(0,0,0,0);color:var(--color-white);font-size:80%}#queue-page table.pure-table thead th{background:rgba(0,0,0,0);color:var(--color-white);border-bottom:1px solid hsla(0,0%,100%,.18);font-weight:700;white-space:nowrap}#queue-page table.pure-table td{color:var(--color-white);border-color:hsla(0,0%,100%,.08);white-space:nowrap}#queue-page table.pure-table td.title-col,#queue-page table.pure-table td.watch-cell{white-space:normal;word-break:break-all}#queue-page table.pure-table td.time-cell{font-variant-numeric:tabular-nums;color:hsla(0,0%,100%,.75);font-size:.95em}#queue-page table.pure-table code,#queue-page table.pure-table small,#queue-page table.pure-table em,#queue-page table.pure-table strong{color:var(--color-white)}#queue-page table.pure-table code{background:rgba(0,0,0,.18)}#queue-page table.pure-table small{opacity:.7}#queue-page table.pure-table-striped tr:nth-child(2n-1) td{background:hsla(0,0%,100%,.04)}#queue-page tr.is-completed td{opacity:.45;transition:opacity .4s ease}#queue-page tbody[data-section=workers]{border-bottom:1px solid hsla(0,0%,100%,.18)}#queue-page tr.worker-slot td{border-color:hsla(0,0%,100%,.05)}#queue-page tr.worker-idle td{background:hsla(0,0%,100%,.02)}#queue-page .inline-tag,#queue-page .processor-badge,#queue-page .watch-tag-list,#queue-page .tracking-ldjson-price-data,#queue-page .restock-label{background:hsla(0,0%,100%,.14);color:var(--color-white)}#queue-page .inline-tag--running{background:rgba(28,184,65,.45)}#queue-page .inline-tag--idle{background:hsla(0,0%,100%,.08);color:hsla(0,0%,100%,.6)}#queue-page .inline-tag--done{background:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.7)}#queue-page a.queue-cancel{display:inline-block;margin-left:8px;font-size:.75rem;color:hsla(0,0%,100%,.65);text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px}#queue-page a.queue-cancel:hover{color:var(--color-white);text-decoration-style:solid}#queue-page a.queue-cancel.is-busy{pointer-events:none;opacity:.5}#queue-page tr.is-new td{animation:queue-row-in .45s ease}@keyframes queue-row-in{from{background-color:rgba(28,184,65,.18)}to{background-color:rgba(0,0,0,0)}}#queue-page .queue-waiting{display:none;align-items:center;gap:.5rem;margin-top:1rem;padding:.5rem 0;color:hsla(0,0%,100%,.7);font-size:.85rem}#queue-page .queue-waiting[data-show=true]{display:flex}#queue-page .queue-waiting .spinner{margin:0;flex:0 0 auto;border-top-color:hsla(0,0%,100%,.18);border-right-color:hsla(0,0%,100%,.18);border-bottom-color:hsla(0,0%,100%,.18);border-left-color:var(--color-white)}.hamburger-menu{display:none;background:rgba(0,0,0,0);border:none;cursor:pointer;padding:.55rem;z-index:10001;position:relative}@media only screen and (max-width: 980px){.hamburger-menu{display:flex;flex-direction:column;justify-content:center;align-items:center}}.hamburger-icon{width:24px;height:20px;position:relative;display:flex;flex-direction:column;justify-content:space-between}.hamburger-icon span{display:block;height:3px;width:100%;background:var(--color-white);border-radius:2px;transition:all .3s cubic-bezier(0.68, -0.55, 0.265, 1.55);transform-origin:center}.hamburger-menu.active .hamburger-icon span{background-color:var(--color-text)}.hamburger-menu.active .hamburger-icon span:nth-child(1){transform:translateY(8.5px) rotate(45deg)}.hamburger-menu.active .hamburger-icon span:nth-child(2){opacity:0;transform:translateX(-10px)}.hamburger-menu.active .hamburger-icon span:nth-child(3){transform:translateY(-8.5px) rotate(-45deg)}.mobile-menu-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:9999;opacity:0;transition:opacity .3s ease}.mobile-menu-overlay.active{display:block;opacity:1}.mobile-menu-drawer{position:fixed;top:0;right:-280px;width:280px;height:100%;background:var(--color-background);opacity:1;box-shadow:-2px 0 8px rgba(0,0,0,.15);z-index:10000;transition:right .3s cubic-bezier(0.68, -0.55, 0.265, 1.55);overflow-y:auto;padding-top:60px}.mobile-menu-drawer #cdio-logo{color:var(--color-text)}.mobile-menu-drawer #cdio-logo #logo-short{display:none}.mobile-menu-drawer #cdio-logo #logo-expanded{display:inline-block}.mobile-menu-drawer .action-icon{stroke:var(--color-text)}.mobile-menu-drawer.active{right:0}.mobile-menu-drawer .mobile-menu-items{list-style:none;padding:1rem 0;margin:0}.mobile-menu-drawer .mobile-menu-items li{border-bottom:1px solid var(--color-border-table-cell)}.mobile-menu-drawer .mobile-menu-items li>*{display:block;padding:1rem 1.5rem;color:var(--color-text);text-decoration:none;font-weight:500;transition:background .2s ease}.mobile-menu-drawer .mobile-menu-items li>*:hover{background:var(--color-background-menu-link-hover)}.mobile-menu-drawer .mobile-menu-items li#menu-pause,.mobile-menu-drawer .mobile-menu-items li#menu-mute{display:none}.logo-cdio{font-weight:bold;font-size:1.1rem}.logo-cdio .logo-cd{color:var(--color-grey-500)}.logo-cdio .logo-io{color:var(--color-text)}.menu-always-visible{display:flex;align-items:center;gap:.5rem;margin-left:auto}@media only screen and (max-width: 980px){#top-right-menu .menu-collapsible{display:none !important}.pure-menu-horizontal{overflow-x:visible !important}#nav-menu{overflow-x:visible !important}}@media only screen and (min-width: 1025px){.hamburger-menu,.mobile-menu-drawer,.mobile-menu-overlay{display:none !important}}html[data-darkmode=true] .mobile-menu-drawer{box-shadow:-2px 0 8px rgba(0,0,0,.4)}#search-modal .modal-body{padding:2rem 1.5rem}#search-modal .modal-body .pure-control-group{padding-bottom:0}#search-modal .modal-body .pure-control-group label{display:block;margin-bottom:.5rem;font-size:.9rem;font-weight:600;color:var(--color-text)}#search-modal .modal-body .pure-control-group #search-modal-input{width:100%;max-width:100%;box-sizing:border-box;padding:.6rem .8rem;font-size:1rem;border:1px solid var(--color-border-input);border-radius:4px;background-color:var(--color-background-input);color:var(--color-text-input);box-shadow:inset 0 1px 3px var(--color-shadow-input);transition:border-color .2s ease,box-shadow .2s ease}#search-modal .modal-body .pure-control-group #search-modal-input:focus{outline:none;border-color:var(--color-link);box-shadow:0 0 0 3px rgba(27,152,248,.1)}#search-modal .modal-body .pure-control-group #search-modal-input::placeholder{color:var(--color-text-input-placeholder);opacity:.7}html[data-darkmode=true] #search-modal #search-modal-input:focus{box-shadow:0 0 0 3px rgba(89,189,251,.15)}#llm-diff-summary-area{margin:.6rem 0 .4rem;padding:.65rem .9rem;background:linear-gradient(135deg, rgba(120, 80, 200, 0.18), rgba(80, 160, 220, 0.14));border-left:3px solid rgba(140,90,220,.8);border-radius:0 4px 4px 0;min-width:0;max-width:100%;box-sizing:border-box;overflow:hidden}#llm-diff-summary-area .llm-diff-summary-label{display:block;font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.55;margin-bottom:.25rem}#llm-diff-summary-area .llm-diff-summary-text{margin:0;font-size:.9rem;line-height:1.5;white-space:pre-wrap;overflow-wrap:break-word;word-break:break-word}.llm-diff-summary-prompt{margin:.4em 0 0;font-size:.78rem;font-style:italic;overflow:hidden;max-height:3.8em;animation:llm-prompt-reveal .7s ease-out both}.llm-diff-summary-prompt .llm-diff-summary-prompt-text{display:block;opacity:.55;mask-image:linear-gradient(to bottom, rgba(0, 0, 0, 0.85) 30%, rgba(0, 0, 0, 0) 100%);-webkit-mask-image:linear-gradient(to bottom, rgba(0, 0, 0, 0.85) 30%, rgba(0, 0, 0, 0) 100%);white-space:pre-wrap;overflow-wrap:break-word;line-height:1.45}@keyframes llm-prompt-reveal{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}.llm-diff-summary-loading{opacity:.5;font-style:italic;animation:llm-pulse 1.4s ease-in-out infinite;font-weight:bold}@keyframes llm-pulse{0%,100%{opacity:.5}50%{opacity:.2}}.llm-budget-exceeded,.llm-error{color:#c0392b;font-weight:600;font-style:normal;opacity:1}.toggle-ai-mode{opacity:.4;transition:opacity .2s ease,filter .2s ease;display:inline-flex;align-items:center;color:var(--color-text-menu-link)}.toggle-ai-mode svg{height:1.2rem;width:1.2rem}.toggle-ai-mode .ai-mode-label{font-size:.75rem;font-weight:600;letter-spacing:.04em;line-height:1}html[data-ai-mode=true] .toggle-ai-mode{opacity:1;filter:drop-shadow(0 0 4px rgba(160, 100, 255, 0.7))}.btn-label-summary{display:none}html[data-ai-mode=true] body.llm-configured .btn-label-history{display:none}html[data-ai-mode=true] body.llm-configured .btn-label-summary{display:inline}.ai-inline-summary-row td{white-space:normal !important;word-break:break-word;padding:.5rem 1rem .6rem 1.4rem !important;background:linear-gradient(135deg, #f0ebff, #eaf0ff) !important;border-top:1px solid #c4b5fd !important;border-left:3px solid #8b5cf6 !important;color:#1a0640 !important;line-height:1.5}html[data-darkmode=true] .ai-inline-summary-row td{background:linear-gradient(135deg, #1c0d35, #0d1535) !important;border-top:1px solid #3b1f6e !important;border-left-color:#8b5cf6 !important;color:#e9d5ff !important}.ai-inline-summary-row .ai-inline-summary-content{display:flex;gap:.5rem;align-items:flex-start}.ai-inline-summary-row .ai-inline-summary-content .ai-inline-spinner{flex-shrink:0;animation:llm-pulse 1.4s ease-in-out infinite}.ai-inline-summary-row .ai-inline-summary-content .ai-inline-body{display:flex;flex-direction:column;min-width:0}.ai-inline-summary-row .ai-inline-summary-content .ai-inline-text{font-style:italic;opacity:.75;white-space:pre-wrap}.ai-inline-summary-row .ai-inline-summary-content.loaded .ai-inline-spinner{animation:none}.ai-inline-summary-row .ai-inline-summary-content.loaded .ai-inline-text{font-style:normal;opacity:1}.ai-inline-summary-row .ai-inline-history-link{display:inline-block;margin-top:.4rem;font-size:.78rem;font-weight:700;opacity:.7;white-space:nowrap}.ai-inline-summary-row .ai-inline-history-link:hover{opacity:1}.ai-inline-summary-row .ai-inline-error{color:#c0392b}.ai-inline-summary-row .ai-inline-prompt{display:block;margin-top:.3em;font-size:.75rem;font-style:italic;overflow:hidden;max-height:3.6em;animation:llm-prompt-reveal .6s ease-out both;mask-image:linear-gradient(to bottom, rgba(0, 0, 0, 0.7) 30%, rgba(0, 0, 0, 0) 100%);-webkit-mask-image:linear-gradient(to bottom, rgba(0, 0, 0, 0.7) 30%, rgba(0, 0, 0, 0) 100%);opacity:.55;line-height:1.4;white-space:pre-wrap;overflow-wrap:break-word}.action-sidebar-item{position:relative}.action-sidebar-item .notification-bubble{position:absolute;top:8px;left:8px;min-width:18px;height:18px;background:#f44;color:#fff;font-size:10px;font-weight:700;line-height:18px;text-align:center;border-radius:9px;padding:0 2px;box-shadow:0 2px 4px rgba(0,0,0,.3);pointer-events:none;transition:all .2s ease;display:none}.action-sidebar-item .notification-bubble.red-bubble{background:#f44}.action-sidebar-item .notification-bubble.blue-bubble{background:#4a9eff;color:#fff}.action-sidebar-item .notification-bubble.visible{display:block}.action-sidebar-item .notification-bubble.pulse{animation:bubblePulse .4s ease-out}.action-sidebar-item .notification-bubble.large-number{font-size:8px;min-width:20px;height:20px;line-height:20px;border-radius:10px}@keyframes bubblePulse{0%{transform:scale(1)}50%{transform:scale(1.3)}100%{transform:scale(1)}}html[data-darkmode=true] .notification-bubble{box-shadow:0 2px 6px rgba(0,0,0,.6)}.notification-add-buttons{margin-bottom:.5rem;display:flex;align-items:center;flex-wrap:wrap;gap:.4rem}.notification-add-buttons .add-destination-inline{display:inline-flex;align-items:center;gap:.3rem}.notification-add-buttons .add-destination-inline input[type=email]{margin:0;min-width:16rem}#notification-add-email-preset{padding-top:.55rem;padding-bottom:.55rem}#notification-recipients{padding-bottom:.55rem}.notification-recipients{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.5rem}.notification-recipients .notification-chip{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .5rem;line-height:1.4;border:1px solid var(--color-border-notification);border-radius:var(--common-round-border);max-width:100%}.notification-recipients .notification-chip .notification-chip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:22rem}.notification-recipients .notification-chip .notification-chip-remove{cursor:pointer;font-weight:bold;opacity:.55;text-decoration:none}.notification-recipients .notification-chip .notification-chip-remove:hover{opacity:1}.notifications-wrapper{padding-top:.5rem}.notifications-wrapper #notification-test-log{margin-top:1rem;padding:1rem;white-space:pre-wrap;word-break:break-word;overflow-wrap:break-word;max-width:100%;box-sizing:border-box;max-height:12rem;overflow-y:scroll;border:1px solid var(--color-border-notification);border-radius:5px}#notification-error-log{border:1px solid var(--color-border-notification);padding:1rem;border-radius:5px;overflow-wrap:break-word}#restock-diff{width:100%;box-sizing:border-box}#restock-diff-summary{margin-top:.6rem;display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.restock-latest-price{font-size:1.4rem;font-weight:700}.restock-badge{display:inline-block;padding:.15rem .55rem;border-radius:1rem;font-size:.8rem;font-weight:600;white-space:nowrap}.restock-badge.in-stock{background:rgba(31,164,99,.15);color:#1fa463}.restock-badge.out-of-stock{background:rgba(231,76,60,.15);color:#e74c3c}#restock-tabs{background:var(--color-background);color:var(--color-text);padding:1rem;border-radius:5px}#restock-tabs .tab-pane-inner#screenshot{text-align:center}#restock-tabs .tab-pane-inner#screenshot img{max-width:99%}#restock-graph{margin-top:1rem;box-sizing:border-box}@media(min-width: 1200px){#restock-graph{max-width:80%;margin-left:auto;margin-right:auto}}.js-restock-graph{position:relative;width:100%}.js-restock-graph svg{display:block;max-width:100%}.js-restock-graph .rg-axis{stroke:var(--color-border-notification, rgba(127, 127, 127, 0.4));stroke-width:1}.js-restock-graph .rg-label{fill:currentColor;opacity:.7;font-size:12px}.js-restock-graph .rg-line{stroke:currentColor;opacity:.55}.js-restock-graph .rg-dot{stroke:var(--color-background, #fff);stroke-width:1.5}.js-restock-graph .rg-legend{display:flex;justify-content:center;gap:1.1rem;margin-top:.4rem;font-size:.78rem;opacity:.85}.js-restock-graph .rg-legend .rg-legend-item{display:inline-flex;align-items:center;gap:.35rem}.js-restock-graph .rg-legend .rg-legend-dot{width:9px;height:9px;border-radius:50%;display:inline-block}.js-restock-graph .rg-legend .rg-legend-dot.in{background:#1fa463}.js-restock-graph .rg-legend .rg-legend-dot.out{background:#e74c3c}.js-restock-graph .rg-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;flex-wrap:wrap;margin-bottom:.5rem}.js-restock-graph .rg-stats{font-size:.8rem;opacity:.7;text-align:right;margin-left:auto}.js-restock-graph .rg-band{fill:rgba(120,130,150,.14)}.js-restock-graph .rg-avg-line{stroke:var(--color-text, #555);opacity:.45;stroke-width:1}.js-restock-graph .rg-avg-text{opacity:.5}.rg-status{display:inline-flex;align-items:baseline;gap:.4rem;padding:.2rem .6rem;border-radius:1rem;font-size:.85rem}.rg-status .rg-status-label{font-weight:700}.rg-status .rg-status-sub{font-size:.78rem;opacity:.8}.rg-status.rg-status-low{background:rgba(31,164,99,.16);color:#1fa463}.rg-status.rg-status-typical{background:rgba(120,130,150,.16);color:var(--color-text, #555)}.rg-status.rg-status-high{background:rgba(231,76,60,.16);color:#e74c3c}.rg-tooltip{position:absolute;display:none;pointer-events:none;z-index:5;transform:translateY(-50%);white-space:nowrap;background:var(--color-background, #fff);color:var(--color-text, #222);border:1px solid var(--color-border-notification, rgba(127, 127, 127, 0.4));border-radius:5px;padding:4px 8px;font-size:12px;line-height:1.4;box-shadow:0 2px 6px rgba(0,0,0,.15)}#restock-history-table{margin-left:auto;margin-right:auto}#restock-history-table td,#restock-history-table th{text-align:left}.restock-table-toolbar{display:flex;align-items:center;justify-content:center;gap:.75rem;margin-bottom:.5rem}html[data-ai-mode=true] body.llm-configured tr.processor-restock_diff .btn-label-history{display:inline}html[data-ai-mode=true] body.llm-configured tr.processor-restock_diff .btn-label-summary{display:none}.restock-inline-row td{white-space:normal !important;word-break:break-word;padding:.6rem 1rem .8rem 1.4rem !important;background:linear-gradient(135deg, #e6fbf0, #e8f6ff) !important;border-top:1px solid #9fe3c2 !important;border-left:3px solid #1fa463 !important;color:#06281a !important;line-height:1.5}html[data-darkmode=true] .restock-inline-row td{background:linear-gradient(135deg, #0c2a1c, #0d2230) !important;border-top:1px solid #1f5e40 !important;border-left-color:#1fa463 !important;color:#d6ffe9 !important}.restock-inline-row .restock-inline-graph{width:100%;min-height:40px}.restock-inline-row .restock-inline-history-link{display:inline-block;margin-top:.5rem;font-size:.78rem;font-weight:700;opacity:.75;white-space:nowrap}.restock-inline-row .restock-inline-history-link:hover{opacity:1}.restock-inline-row .restock-inline-error{color:#c0392b}.toast-container{position:fixed;display:flex;flex-direction:column;gap:.75rem;pointer-events:none;z-index:10000}.toast-container.toast-top-right{top:20px;right:20px}.toast-container.toast-top-center{top:100px;left:50%;transform:translateX(-50%)}.toast-container.toast-top-left{top:20px;left:20px}.toast-container.toast-bottom-right{bottom:20px;right:20px}.toast-container.toast-bottom-center{bottom:20px;left:50%;transform:translateX(-50%)}.toast-container.toast-bottom-left{bottom:20px;left:20px}.toast{position:relative;display:flex;align-items:center;gap:.75rem;min-width:300px;max-width:500px;padding:1rem 1.25rem;background:var(--color-background);border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.15),0 0 0 1px rgba(0,0,0,.05);pointer-events:auto;overflow:hidden;opacity:0;transform:translateY(-50px);transition:all .3s cubic-bezier(0.68, -0.55, 0.265, 1.55);font-family:inherit}.toast.toast-show{opacity:1;transform:translateY(0)}.toast.toast-hide{opacity:0;transform:translateY(-50px) scale(0.95)}.toast.toast-success{border-left:4px solid #10b981}.toast.toast-success .toast-icon{color:#10b981}.toast.toast-error{border-left:4px solid #ef4444}.toast.toast-error .toast-icon{color:#ef4444}.toast.toast-warning{border-left:4px solid #f59e0b}.toast.toast-warning .toast-icon{color:#f59e0b}.toast.toast-info{border-left:4px solid #3b82f6}.toast.toast-info .toast-icon{color:#3b82f6}.toast.toast-default{border-left:4px solid var(--color-grey-500)}.toast-icon{flex-shrink:0;width:24px;height:24px}.toast-icon svg{width:100%;height:100%}.toast-message{flex:1;font-size:.875rem;line-height:1.5;color:var(--color-text);word-break:break-word;font-family:inherit}.toast-close{flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0);border:none;border-radius:4px;color:var(--color-grey-500);font-size:1.5rem;line-height:1;cursor:pointer;transition:all .2s ease;padding:0;margin-left:.25rem}.toast-close:hover{background:var(--color-grey-800);color:var(--color-text)}.toast-close:active{transform:scale(0.95)}.toast-progress{position:absolute;bottom:0;left:0;right:0;height:3px;background:currentColor;opacity:.3;transform-origin:left;transition:transform linear}html[data-darkmode=true] .toast{background:var(--color-grey-300);box-shadow:0 4px 12px rgba(0,0,0,.4),0 0 0 1px hsla(0,0%,100%,.05)}html[data-darkmode=true] .toast-close:hover{background:var(--color-grey-400)}@media only screen and (max-width: 768px){.toast-container{left:50% !important;right:auto !important;top:80px !important;transform:translateX(-50%) !important;align-items:center}.toast-container.toast-bottom-right,.toast-container.toast-bottom-center,.toast-container.toast-bottom-left{top:auto !important;bottom:80px !important}.toast{min-width:auto;max-width:none;width:80vw;transform:translateY(-100px)}.toast.toast-show{transform:translateY(0)}.toast.toast-hide{transform:translateY(-100px) scale(0.95)}}@media(prefers-reduced-motion: reduce){.toast{transition:opacity .2s ease;transform:none !important}.toast.toast-show{opacity:1}.toast.toast-hide{opacity:0}}.login-form{min-height:52vh;display:flex;align-items:center;justify-content:center;padding:2rem 1rem}.login-form .inner{background:var(--color-background);border-radius:16px;box-shadow:0 10px 40px rgba(0,0,0,.08),0 2px 8px rgba(0,0,0,.04);padding:3rem 2.5rem;width:100%;max-width:420px;position:relative;overflow:hidden;transition:transform .3s ease,box-shadow .3s ease}.login-form .inner:hover{box-shadow:0 15px 50px rgba(0,0,0,.12),0 5px 15px rgba(0,0,0,.06)}.login-form form{margin:0}.login-form fieldset{border:none;padding:0;margin:0}.login-form .pure-control-group{margin-bottom:1.75rem}.login-form .pure-control-group:last-of-type{margin-bottom:0;margin-top:2rem}.login-form label{display:block;margin-bottom:.5rem;font-weight:600;font-size:.9rem;color:var(--color-text);letter-spacing:.01em}.login-form input[type=password]{width:100%;padding:.875rem 1rem;border:2px solid var(--color-grey-800);border-radius:8px;font-size:1rem;background:var(--color-background-input);color:var(--color-text-input);transition:all .2s ease;box-sizing:border-box}.login-form input[type=password]:focus{outline:none;border-color:var(--color-link);box-shadow:0 0 0 3px rgba(27,152,248,.1);transform:translateY(-1px)}.login-form input[type=password]::placeholder{color:var(--color-text-input-placeholder)}.login-form button[type=submit]{width:100%;padding:.875rem 1.5rem;font-size:1rem;font-weight:600;border-radius:8px;border:none;background:var(--color-background-button-primary);color:var(--color-text-button);cursor:pointer;transition:all .2s ease;box-shadow:0 2px 8px rgba(27,152,248,.2)}.login-form button[type=submit]:hover{box-shadow:0 4px 12px rgba(27,152,248,.3);background:#06c}.login-form button[type=submit]:active{transform:translateY(0);box-shadow:0 2px 4px rgba(27,152,248,.2)}.content-main>ul.messages{position:fixed;top:120px;left:50%;transform:translateX(-50%);list-style:none;padding:0;margin:0;z-index:1000;min-width:300px;max-width:500px}.content-main>ul.messages li{padding:1rem 1.25rem;border-radius:8px;font-size:.95rem;line-height:1.5;font-weight:500;box-shadow:0 4px 12px rgba(0,0,0,.15);animation:slideDown .3s ease-out;border:2px solid rgba(0,0,0,0)}.content-main>ul.messages li.error{background:#fee;border:2px solid #ef4444;color:#991b1b;font-weight:600}.content-main>ul.messages li.success{background:#f0fdf4;border:2px solid #10b981;color:#166534}.content-main>ul.messages li.info,.content-main>ul.messages li.message{background:#eff6ff;border:2px solid #3b82f6;color:#1e40af}@keyframes slideDown{from{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}html[data-darkmode=true] .login-form .inner{box-shadow:0 10px 40px rgba(0,0,0,.4),0 2px 8px rgba(0,0,0,.2)}html[data-darkmode=true] .login-form .inner:hover{box-shadow:0 15px 50px rgba(0,0,0,.5),0 5px 15px rgba(0,0,0,.3)}html[data-darkmode=true] .login-form input[type=password]{border-color:var(--color-grey-400)}html[data-darkmode=true] .login-form input[type=password]:focus{border-color:var(--color-link)}html[data-darkmode=true] .content-main>ul.messages li{box-shadow:0 4px 12px rgba(0,0,0,.4)}html[data-darkmode=true] .content-main>ul.messages li.error{background:#4a1d1d;border-color:#ef4444;color:#fca5a5}html[data-darkmode=true] .content-main>ul.messages li.success{background:#1a3a2a;border-color:#10b981;color:#86efac}html[data-darkmode=true] .content-main>ul.messages li.info,html[data-darkmode=true] .content-main>ul.messages li.message{background:#1e3a5f;border-color:#3b82f6;color:#93c5fd}@media only screen and (max-width: 768px){.login-form{min-height:auto;padding:1rem .5rem;padding-top:5rem}.login-form .inner{padding:2rem 1.5rem;border-radius:12px}.content-main>ul.messages{top:70px;left:10px;right:10px;transform:none;min-width:auto}}body.wrapped-tabs .tabs ul{grid-template-columns:repeat(auto-fill, minmax(var(--tab-width, 180px), 1fr));grid-auto-flow:row;grid-auto-columns:unset;gap:0;column-gap:5px}body.wrapped-tabs .tabs ul li{border-radius:0}.tabs ul{margin:0px;padding:0px;display:grid;grid-auto-flow:column;grid-auto-columns:max-content;gap:5px;list-style:none}.tabs ul li{white-space:nowrap;color:var(--color-text-tab);border-top-left-radius:5px;border-top-right-radius:5px;background-color:var(--color-background-tab)}.tabs ul li:not(.active):hover{background-color:var(--color-background-tab-hover)}.tabs ul li.active,.tabs ul li :target{background-color:var(--color-background)}.tabs ul li.active a,.tabs ul li :target a{color:var(--color-text-tab-active);font-weight:bold}.tabs ul li a{display:block;padding:.7em;color:var(--color-text-tab)}.stab-shell{display:flex;align-items:stretch;background:var(--color-background);border:1px solid rgba(0,0,0,.08);border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.05);margin-bottom:1.5rem}.stab-nav{display:flex;flex-direction:column;width:11rem;flex-shrink:0;padding:.75rem 0;gap:1px;background:linear-gradient(180deg, rgba(0, 0, 0, 0.03) 0%, rgba(0, 0, 0, 0.05) 100%);border-right:1px solid rgba(0,0,0,.07)}.stab-btn{position:relative;display:flex;align-items:center;gap:.5rem;padding:.65rem .9rem .65rem 1rem;width:100%;background:none;border:none;border-left:3px solid rgba(0,0,0,0);border-radius:0;cursor:pointer;font:inherit;color:var(--color-text);text-align:left;opacity:.65;transition:background .12s ease,opacity .12s ease,border-color .12s ease,color .12s ease}.stab-btn:hover{background:rgba(0,0,0,.04);opacity:.85}.stab-btn.active{border-left-color:var(--color-menu-accent);background:rgba(237,89,0,.07);color:var(--color-menu-accent);font-weight:700;opacity:1}.stab-btn .stab-icon{display:inline-flex;align-items:center;justify-content:center;width:1.1rem;flex-shrink:0;opacity:.8}.stab-btn .stab-icon svg{width:.95rem;height:.95rem;stroke:currentColor;fill:none}.stab-body{flex:1;min-width:0;padding:1.4rem 1.6rem;overflow-x:hidden}.stab-pane{visibility:hidden;height:0;overflow:hidden}.stab-pane.active{visibility:visible;height:auto;overflow:visible;animation:stab-enter .16s ease both}@keyframes stab-enter{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.stab-overview-hero{margin-bottom:1.5rem}.stab-overview-hero h3{margin:0 0 .3rem;font-size:1.05rem}.stab-overview-hero .stab-overview-glyph{color:var(--color-menu-accent);margin-right:.2rem}.stab-overview-hero .stab-overview-glyph svg{width:1.1rem;height:1.1rem;stroke:currentColor;fill:none;vertical-align:-0.15em}.stab-overview-hero p{margin:0;font-size:.88rem;color:var(--color-text-input-description);max-width:44rem;line-height:1.55}.stab-overview-features{display:flex;flex-direction:column;gap:.7rem;margin-bottom:1.6rem}.stab-overview-feature{display:flex;gap:.85rem;align-items:flex-start;padding:.75rem 1rem;border-radius:6px;background:rgba(0,0,0,.022);border:1px solid rgba(0,0,0,.05);transition:background .12s ease}.stab-overview-feature:hover{background:rgba(0,0,0,.035)}.stab-overview-feature .stab-overview-icon{width:1.6rem;flex-shrink:0;padding-top:.05rem;opacity:.7;display:flex;justify-content:center}.stab-overview-feature .stab-overview-icon svg{width:1.3rem;height:1.3rem;stroke:currentColor;fill:none}.stab-overview-feature .stab-overview-text>strong{display:block;margin-bottom:.2rem}.stab-overview-feature .stab-overview-text p{color:var(--color-text-input-description)}.stab-overview-disclaimer{display:flex;gap:.75rem;align-items:flex-start;margin:0 0 1.1rem;padding:.85rem 1rem;border-radius:6px;border:1px solid rgba(211,136,0,.35);background:rgba(255,180,0,.07)}.stab-overview-disclaimer .stab-disclaimer-icon{flex-shrink:0;padding-top:.05rem;color:#c07800}.stab-overview-disclaimer .stab-disclaimer-icon svg{width:1.2rem;height:1.2rem;stroke:currentColor;fill:none}.stab-overview-disclaimer .stab-disclaimer-body{font-size:.85rem;line-height:1.55}.stab-overview-disclaimer .stab-disclaimer-body>strong{display:block;margin-bottom:.35rem;color:#8a5500;font-size:.87rem}.stab-overview-disclaimer .stab-disclaimer-body p{margin:0 0 .45rem;color:var(--color-text-input-description)}.stab-overview-disclaimer .stab-disclaimer-body ul{margin:0 0 .6rem;padding-left:1.25rem;color:var(--color-text-input-description)}.stab-overview-disclaimer .stab-disclaimer-body ul li{margin-bottom:.2rem}.stab-overview-disclaimer .stab-disclaimer-check{display:flex;gap:.5rem;align-items:flex-start;cursor:pointer;font-size:.82rem;color:var(--color-text-input-description);font-weight:600}.stab-overview-disclaimer .stab-disclaimer-check input[type=checkbox]{flex-shrink:0;margin-top:.18rem;cursor:pointer}.stab-overview-cta{margin-top:.4rem;display:flex;align-items:center;gap:.8rem;flex-wrap:wrap}.stab-configured-badge{display:inline-flex;align-items:center;gap:.4rem;padding:.35rem .75rem;background:rgba(39,174,96,.09);border:1px solid rgba(39,174,96,.28);border-radius:4px;color:#2a7a4e;font-size:.82rem;font-weight:600}.stab-section-title{font-size:.72rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;opacity:.45;margin:1.4rem 0 .6rem}.stab-section-title:first-child{margin-top:0}@media(max-width: 600px){.stab-shell{flex-direction:column;min-height:unset}.stab-nav{width:100%;border-right:none;border-bottom:1px solid rgba(0,0,0,.07);padding:.4rem 0}.stab-body{padding-left:1rem}}.llm-usage-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(12rem, 1fr));gap:.9rem;margin-bottom:1.4rem}.llm-stat-card{padding:1rem 1.1rem .85rem;border-radius:7px;background:rgba(0,0,0,.025);border:1px solid rgba(0,0,0,.07)}.llm-stat-card .llm-stat-label{font-size:.7rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;opacity:.4;margin-bottom:.4rem}.llm-stat-card .llm-stat-value{font-size:1.65rem;font-weight:700;letter-spacing:-0.02em;line-height:1;margin-bottom:.25rem}.llm-stat-card .llm-stat-sub{font-size:.79rem;opacity:.5}.llm-stat-card .llm-stat-budget-text{font-size:.77rem;opacity:.55;margin-top:.3rem}.llm-stat-bar-wrap{height:4px;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden;margin-top:.65rem}.llm-stat-bar-fill{height:100%;border-radius:2px;transition:width .5s ease}.llm-stat-bar-fill.bar-ok{background:#27ae60}.llm-stat-bar-fill.bar-warn{background:#e67e22}.llm-stat-bar-fill.bar-over{background:#c0392b}.llm-usage-settings{border-top:1px solid rgba(0,0,0,.07);padding-top:.9rem;display:flex;flex-direction:column;gap:.65rem}.llm-usage-row{display:flex;align-items:baseline;gap:.9rem;flex-wrap:wrap}.llm-usage-row .llm-usage-row-label{font-size:.82rem;font-weight:600;opacity:.6;min-width:12rem;flex-shrink:0}.llm-usage-row .llm-usage-row-value{display:flex;align-items:baseline;gap:.5rem;flex-wrap:wrap;font-size:.88rem}.llm-field-hint{font-size:.8rem;opacity:.55}.llm-env-badge{font-size:.79rem;opacity:.6}.llm-budget-alert{color:#c0392b;font-weight:600;font-size:.88rem;margin:0 0 1rem}.llm-no-usage{opacity:.5;font-style:italic;font-size:.88rem;margin-bottom:1rem}html[data-darkmode=true] .stab-shell{border-color:hsla(0,0%,100%,.07);box-shadow:0 2px 8px rgba(0,0,0,.25)}html[data-darkmode=true] .stab-nav{background:linear-gradient(180deg, rgba(255, 255, 255, 0.025) 0%, rgba(255, 255, 255, 0.04) 100%);border-right-color:hsla(0,0%,100%,.07)}html[data-darkmode=true] .stab-btn:hover{background:hsla(0,0%,100%,.05)}html[data-darkmode=true] .stab-btn.active{background:rgba(237,89,0,.12)}html[data-darkmode=true] .stab-overview-feature{background:hsla(0,0%,100%,.025);border-color:hsla(0,0%,100%,.05)}html[data-darkmode=true] .stab-overview-feature:hover{background:hsla(0,0%,100%,.04)}html[data-darkmode=true] .stab-configured-badge{background:rgba(39,174,96,.1);border-color:rgba(39,174,96,.22);color:#5db880}html[data-darkmode=true] .stab-overview-disclaimer{border-color:rgba(255,190,50,.22);background:rgba(255,180,0,.05)}html[data-darkmode=true] .stab-overview-disclaimer .stab-disclaimer-icon{color:#c9963a}html[data-darkmode=true] .stab-overview-disclaimer .stab-disclaimer-body>strong{color:#c9a050}html[data-darkmode=true] .llm-stat-card{background:hsla(0,0%,100%,.03);border-color:hsla(0,0%,100%,.07)}html[data-darkmode=true] .llm-stat-bar-wrap{background:hsla(0,0%,100%,.1)}html[data-darkmode=true] .llm-usage-settings{border-top-color:hsla(0,0%,100%,.07)}body,.pure-table,.pure-table thead,.pure-table td,.pure-table th,.pure-form input,.pure-form textarea,.pure-form select,.edit-form .inner,.pure-menu-horizontal,footer,.sticky-tab,#diff-jump,.button-tag,#new-watch-form,#new-watch-form input:not(.pure-button),code,.messages li,#checkbox-operations,.inline-warning,a,.watch-controls img{transition:color .4s ease,background-color .4s ease,background .4s ease,border-color .4s ease,box-shadow .4s ease}body{color:var(--color-text);background:var(--color-background-page);font-family:Helvetica Neue,Helvetica,Lucida Grande,Arial,Ubuntu,Cantarell,Fira Sans,sans-serif}.app{display:flex;align-items:stretch;min-height:100vh}.app-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:.55rem}.content-wrapper{display:flex;width:100%;max-width:100%;position:relative;align-items:flex-start}@media only screen and (max-width: 980px){.content-wrapper{flex-direction:column}}.content-main{flex:1 1 auto;width:100%;min-width:0;display:flex;flex-direction:column;align-items:center}@media only screen and (min-width: 980px){.content-main{flex-direction:column}}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.status-icon{display:inline-block;height:1rem;vertical-align:middle}a{text-decoration:none;color:var(--color-link)}#search-result-info{color:#fff}button.toggle-button{vertical-align:middle;background:rgba(0,0,0,0);border:none;cursor:pointer;color:var(--color-text-menu-heading)}button.toggle-button svg{fill:currentColor}button.toggle-button svg.feather{fill:none;stroke:currentColor}button.toggle-button .icon-light{display:block}body.spinner-active #pure-menu-horizontal-spinner{animation:gradient 1s ease infinite}@keyframes gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}#cdio-logo{color:var(--color-white);text-transform:uppercase}.pure-menu-link{color:var(--color-text-menu-link)}.pure-menu-link:hover{background-color:var(--color-background-menu-link-hover);color:var(--color-text-menu-link-hover)}.tab-pane-inner{scroll-margin-top:200px}section.content{padding-bottom:1em;padding-left:.55rem;padding-right:.55rem;flex-direction:column;display:flex;align-items:center;justify-content:flex-start}details summary{cursor:pointer;font-weight:600;color:var(--color-link);width:fit-content}details summary:hover{text-decoration:underline}code{background:var(--color-background-code);color:var(--color-text)}.inline-tag,.restock-label,.tracking-ldjson-price-data,.watch-tag-list,.processor-badge{white-space:nowrap;border-radius:5px;padding:2px 5px;margin-right:4px}.processor-badge{font-weight:900;text-decoration:none}.processor-badge:hover{text-decoration:none;opacity:.8;cursor:pointer}.processor-badge.active{outline:2px solid var(--color-link);outline-offset:1px}.watch-tag-list{color:var(--color-white);background:var(--color-text-watch-tag-list);text-decoration:none}.watch-tag-list:hover{text-decoration:none;opacity:.8;cursor:pointer}.watch-tag-list:visited{color:var(--color-white)}body:after{content:"";background:linear-gradient(130deg, var(--color-background-gradient-first), var(--color-background-gradient-second) 41.07%, var(--color-background-gradient-third) 84.05%)}body:after,body:before{display:block;position:fixed;top:0;left:0;width:100%;height:100vh;z-index:-1}body::after{opacity:.91}body::before{content:""}.button-small{font-size:85%}.button-xsmall{font-size:70%}.fetch-error{padding-top:1em;font-size:80%;max-width:400px;display:block}.pure-button-primary,a.pure-button-primary,.pure-button-selected,a.pure-button-selected{background-color:var(--color-background-button-primary)}.button-secondary{color:var(--color-text-button);border-radius:4px;text-shadow:0 1px 1px rgba(0,0,0,.2)}.button-success{background:var(--color-background-button-success)}.button-tag{background:var(--color-background-button-tag);color:var(--color-text-button);font-size:75%;border-radius:6px;margin-right:4px;margin-bottom:1px}.button-tag.active{background:var(--color-background-button-tag-active);font-weight:bold}.button-error{background:var(--color-background-button-error);color:var(--color-text-button-error)}.button-warning{background:var(--color-background-button-warning);color:var(--color-text-button-warning)}.button-secondary{background:var(--color-background-button-secondary)}.button-cancel{background:var(--color-background-button-cancel)}.messages li{list-style:none;padding:1em;border-radius:10px;color:var(--color-text-messages);font-weight:bold}.messages li.message{background:var(--color-background-messages-message)}.messages li.error{background:var(--color-background-messages-error)}.messages li.notice{background:var(--color-background-messages-notice)}.messages.with-share-link>*:hover{cursor:pointer}label:hover{cursor:pointer}.grey-form-border{border:1px solid var(--color-border-notification);padding:.5rem;border-radius:5px}#token-table.pure-table td,#token-table.pure-table th{font-size:80%}.pure-form input[type=text].transparent-field{background-color:var(--color-background-new-watch-input-transparent) !important;color:var(--color-white) !important;border:1px solid hsla(0,0%,100%,.2) !important;box-shadow:none !important;-webkit-box-shadow:none !important}.pure-form input[type=text].transparent-field::placeholder{opacity:.5;color:hsla(0,0%,100%,.7);font-weight:lighter}#new-watch-form{background:var(--color-background-new-watch-form);padding:1em;border-radius:10px;max-width:100%}#new-watch-form #url::placeholder{font-weight:bold}#new-watch-form input{display:inline-block}#new-watch-form input:not(.pure-button){background-color:var(--color-background-new-watch-input);color:var(--color-text-new-watch-input)}#new-watch-form .label{display:none}#new-watch-form legend{color:var(--color-text-legend);font-weight:bold}@media only screen and (min-width: 760px){#new-watch-form #watch-add-wrapper-zone{display:flex;gap:.3rem;flex-direction:row;min-width:70vw}}#new-watch-form #watch-add-wrapper-zone>span{flex-grow:0}#new-watch-form #watch-add-wrapper-zone>span input{width:100%;padding-right:1em}#new-watch-form #watch-add-wrapper-zone>span:first-child{flex-grow:1}@media only screen and (max-width: 760px){#new-watch-form #watch-add-wrapper-zone #url{width:100%}}#new-watch-form #watch-group-tag{font-size:.9rem;padding:.3rem;display:flex;align-items:center;gap:.5rem;color:var(--color-white)}#new-watch-form #watch-group-tag label,#new-watch-form #watch-group-tag input{margin:0}#new-watch-form #watch-group-tag input{flex:1}#diff-col{padding-left:40px}#diff-jump{position:fixed;left:0px;top:120px;background:var(--color-background);padding:10px;border-top-right-radius:5px;border-bottom-right-radius:5px;box-shadow:1px 1px 4px var(--color-shadow-jump)}#diff-jump a{color:var(--color-link);cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;-o-user-select:none}footer{padding:10px;background:var(--color-background);color:var(--color-text-footer);text-align:center}#feed-icon{vertical-align:middle}#new-version-text a{color:var(--color-link-new-version)}.watch-controls{color:#f8321b}.watch-controls .state-on img{opacity:.8}.watch-controls img{opacity:.2}.watch-controls img:hover{transition:opacity .3s;opacity:.8}.monospaced-textarea textarea{width:100%;font-family:monospace;white-space:pre;overflow-wrap:normal;overflow-x:auto}.pure-form fieldset{padding-top:0px}.pure-form fieldset ul{padding-bottom:0px;margin-bottom:0px}.pure-form .pure-control-group,.pure-form .pure-group,.pure-form .pure-controls{padding-bottom:1em}.pure-form .pure-control-group div,.pure-form .pure-group div,.pure-form .pure-controls div{margin:0px}.pure-form .pure-control-group .checkbox>*,.pure-form .pure-group .checkbox>*,.pure-form .pure-controls .checkbox>*{display:inline;vertical-align:middle}.pure-form .pure-control-group .checkbox>label,.pure-form .pure-group .checkbox>label,.pure-form .pure-controls .checkbox>label{padding-left:5px}.pure-form .pure-control-group legend,.pure-form .pure-group legend,.pure-form .pure-controls legend{color:var(--color-text-legend)}.pure-form .error input{background-color:var(--color-error-input)}.pure-form ul.errors{padding:.5em .6em;border:1px solid var(--color-error-list);border-radius:4px;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form ul.errors li{margin-left:1em;color:var(--color-error-list)}.pure-form label{font-weight:bold}.pure-form textarea{width:100%}.pure-form .inline-radio ul{margin:0px;list-style:none}.pure-form .inline-radio ul li{display:flex;align-items:center;gap:1em}@media only screen and (max-width: 760px),(min-device-width: 768px)and (max-device-width: 980px){.edit-form{padding:.5em;margin:0}#nav-menu{overflow-x:scroll}}@media only screen and (max-width: 760px),(min-device-width: 768px)and (max-device-width: 980px){input[type=text]{width:100%}}.pure-table{border-color:var(--color-border-table-cell)}.pure-table thead{background-color:var(--color-background-table-thead);color:var(--color-text);border-bottom:1px solid var(--color-background-table-thead)}.pure-table td,.pure-table th{border-left-color:var(--color-border-table-cell)}.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form select,.pure-form textarea{border:var(--color-border-input);box-shadow:inset 0 1px 3px var(--color-shadow-input);background-color:var(--color-background-input);color:var(--color-text-input)}.pure-form input[type=color]:active,.pure-form input[type=date]:active,.pure-form input[type=datetime-local]:active,.pure-form input[type=datetime]:active,.pure-form input[type=email]:active,.pure-form input[type=month]:active,.pure-form input[type=number]:active,.pure-form input[type=password]:active,.pure-form input[type=search]:active,.pure-form input[type=tel]:active,.pure-form input[type=text]:active,.pure-form input[type=time]:active,.pure-form input[type=url]:active,.pure-form input[type=week]:active,.pure-form select:active,.pure-form textarea:active{background-color:var(--color-background-input)}input::placeholder,textarea::placeholder{color:var(--color-text-input-placeholder)}.m-d{min-width:100%}@media only screen and (min-width: 761px){.m-d{min-width:80%}}.pure-form-stacked>div:first-child{display:block}.tab-pane-inner{padding:0px}.tab-pane-inner:not(:target){display:none}.tab-pane-inner:target{display:block}.beta-logo{height:50px;right:-3px;top:-3px;position:absolute}#selector-header{padding-bottom:1em}.edit-form{max-width:95%}.edit-form .box-wrap{position:relative}.edit-form .inner{background:var(--color-background);padding:1.1rem}.edit-form #actions{display:block;background:var(--color-background)}.edit-form #actions .pure-control-group{display:flex;gap:.625em;flex-wrap:wrap}.edit-form .pure-form-message-inline{padding-left:0;color:var(--color-text-input-description)}.edit-form .pure-form-message-inline code{font-size:.875em}.border-fieldset{border:1px solid #ccc;padding:1rem;border-radius:5px;margin-bottom:1rem}.border-fieldset h3{margin-top:0}.border-fieldset fieldset:last-of-type{padding-bottom:0}.border-fieldset fieldset:last-of-type .pure-control-group{padding-bottom:0}ul{padding-left:1em;padding-top:0px;margin-top:4px}.time-check-widget tr{display:inline}.time-check-widget tr input[type=number]{width:5em}@media only screen and (max-width: 760px){.time-check-widget tbody{display:grid;grid-template-columns:auto 1fr auto 1fr;gap:.625em .3125em;align-items:center}.time-check-widget tr{display:contents}.time-check-widget tr th{text-align:right;padding-right:5px}.time-check-widget tr input[type=number]{width:100%;max-width:5em}}#webdriver_delay{width:5em}#api-key:hover{cursor:pointer}#api-key-copy{color:var(--color-api-key)}.button-green{background-color:var(--color-background-button-green)}.button-red{background-color:var(--color-background-button-red)}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[type=checkbox],[type=radio]{width:17px;height:17px;border-radius:5px;cursor:pointer}.inline-warning{border:1px solid var(--color-border-warning);padding:.5rem;border-radius:5px;color:var(--color-warning)}.inline-warning>span{display:inline-block;vertical-align:middle}.inline-warning img.inline-warning-icon{display:inline;height:26px;vertical-align:middle}.tracking-ldjson-price-data{background-color:var(--color-background-button-green);color:#000;opacity:.6}.ldjson-price-track-offer{font-weight:bold;font-style:italic}.ldjson-price-track-offer a.pure-button{border-radius:3px;padding:3px;background-color:var(--color-background-button-green)}.price-follow-tag-icon{display:inline-block;height:.8rem;vertical-align:middle}#quick-watch-processor-type ul#processor{color:#fff;padding-left:0px}#quick-watch-processor-type ul#processor li{list-style:none;font-size:.9rem;display:grid;grid-template-columns:auto 1fr;align-items:center;gap:.5rem;margin-bottom:.5rem}#quick-watch-processor-type label,#quick-watch-processor-type input{padding:0;margin:0}.restock-label.in-stock{background-color:#7a0cc5;color:#fff}.restock-label.not-in-stock{background-color:var(--color-background-button-cancel);color:#777}.restock-label.error{background-color:var(--color-background-button-error);color:#fff;opacity:.7}.restock-label.price{border:1px solid var(--color-background-button-cancel)}.restock-label svg{vertical-align:middle}.price-change{white-space:nowrap;font-weight:700;font-size:90%;margin-left:4px;vertical-align:middle}.price-change.down{color:var(--color-background-button-green)}.price-change.up{color:var(--color-background-button-error)}#chrome-extension-link{padding:9px;border:1px solid var(--color-grey-800);border-radius:10px;vertical-align:middle}#chrome-extension-link img{height:21px;padding:2px;vertical-align:middle}#realtime-conn-error{position:fixed;bottom:0;left:0;background:var(--color-warning);padding:10px;font-size:.8rem;color:#fff;opacity:.8;z-index:100}#bottom-horizontal-offscreen{position:fixed;bottom:0;left:0;right:0;width:100%;min-height:50px;max-height:50vh;background:hsla(0,0%,100%,.7215686275);border-top:1px solid var(--color-border-table-cell);padding:10px;box-shadow:0 -2px 10px rgba(0,0,0,.2);z-index:100;overflow-y:auto;transition:opacity .3s ease-in-out;scroll-margin-bottom:10px;display:flex;justify-content:center;align-items:center}ul#highlightSnippetActions{list-style:none}ul#highlightSnippetActions li{display:inline-block}@media only screen and (max-width: 768px){.box{padding:.25rem !important}}.box{color:var(--color-white);border-width:1px;border-style:dashed;border-color:hsla(0,0%,100%,.25);border-image:initial;background:hsla(0,0%,100%,.04);border-radius:var(--common-round-border);padding:1.1rem}header{color:var(--color-white)}#heart-us svg{display:inline-block;vertical-align:middle;cursor:pointer;width:1.4rem} diff --git a/changedetectionio/store/__init__.py b/changedetectionio/store/__init__.py index 8d8978d4..16031b09 100644 --- a/changedetectionio/store/__init__.py +++ b/changedetectionio/store/__init__.py @@ -455,14 +455,21 @@ class ChangeDetectionStore(DatastoreUpdatesMixin, FileSavingDataStore): # Watch Management Methods # ============================================================================ - def set_last_viewed(self, uuid, timestamp): + def set_last_viewed(self, uuid, timestamp, send_signal=True): logger.debug(f"Setting watch UUID: {uuid} last viewed to {int(timestamp)}") self.data['watching'][uuid].update({'last_viewed': int(timestamp)}) self.data['watching'][uuid].commit() - watch_check_update = signal('watch_check_update') - if watch_check_update: - watch_check_update.send(watch_uuid=uuid) + # Bulk callers (mark-all-viewed) pass send_signal=False and emit one summary event + # afterwards instead. Each signal fans out to handle_watch_update(), which rescans + # EVERY watch twice (errored_count + unread_changes_count), takes the queue and + # worker-pool locks, and broadcasts 3 socket events — so signalling per watch makes + # a bulk mark O(n^2) with 3n emits, and floods every connected browser with n + # row updates it will immediately re-render anyway. + if send_signal: + watch_check_update = signal('watch_check_update') + if watch_check_update: + watch_check_update.send(watch_uuid=uuid) def remove_password(self): self.__data['settings']['application']['password'] = False diff --git a/changedetectionio/tests/plugins/test_processor.py b/changedetectionio/tests/plugins/test_processor.py index d0dfa4fb..2f2c64a8 100644 --- a/changedetectionio/tests/plugins/test_processor.py +++ b/changedetectionio/tests/plugins/test_processor.py @@ -8,7 +8,11 @@ from changedetectionio.tests.util import wait_for_all_checks def test_check_plugin_processor(client, live_server, measure_memory_usage, datastore_path): # requires os-int intelligence plugin installed (first basic one we test with) - res = client.get(url_for("add_watch_ui.add_watch_ui_index")) + # Check the plugin processor shows up in the general "add watch" form on the watch-list overview + # (the unfiltered processor list). NOTE: not /add-watch-ui - that page is the visual/browser flow + # and only offers processors with supports_visual_selector; OSINT is a non-visual network-recon + # processor, so it correctly does NOT appear there. + res = client.get(url_for("watchlist.index")) assert b'OSINT Reconnaissance' in res.data, "Must have the OSINT plugin installed at test time" assert b'' in res.data, "But the first text_json_diff processor should always be selected by default in quick watch form" diff --git a/changedetectionio/tests/test_watchlist_unviewed_state.py b/changedetectionio/tests/test_watchlist_unviewed_state.py new file mode 100644 index 00000000..ca44b4ef --- /dev/null +++ b/changedetectionio/tests/test_watchlist_unviewed_state.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 + +"""Re #4021 - the "Mark all viewed" button must be driven by live state, not by render-time presence. + +The button used to be wrapped in {% if unread_count %}, so when nothing was unread it did not +exist in the DOM at all. A second tab could therefore never show it after a change arrived, and +never hide it after another tab marked everything viewed - no socket event can style an element +that isn't there. + +It is now always rendered and revealed by body.has-any-unviewed, which is set server-side via +extra_classes and kept live by the general_stats_update socket event. These assertions pin both +halves: the element is always present, and the body class tracks the unviewed state. +""" + +from flask import url_for + +from .util import set_original_response, set_modified_response, wait_for_all_checks, delete_all_watches + + +def _body_has_any_unviewed(res): + """The class list is what CSS keys off - realtime.js toggles the same class.""" + for line in res.data.decode('utf-8').split('\n'): + if ' found in response") + + +def test_mark_all_viewed_button_is_always_in_the_dom(client, live_server, measure_memory_usage, datastore_path): + set_original_response(datastore_path=datastore_path) + + client.post( + url_for("ui.ui_views.form_quick_watch_add"), + data={"url": url_for('test_endpoint', _external=True), "tags": ''}, + follow_redirects=True + ) + wait_for_all_checks(client) + + # First snapshot only - nothing is unread yet + res = client.get(url_for("watchlist.index")) + assert b'id="post-list-mark-views"' in res.data, \ + "Button must be in the DOM even with nothing unread, or another tab can never reveal it" + assert not _body_has_any_unviewed(res), "Nothing unread, so the body class must be absent" + + # A real change lands -> unviewed + set_modified_response(datastore_path=datastore_path) + client.get(url_for("ui.form_watch_checknow"), follow_redirects=True) + wait_for_all_checks(client) + + res = client.get(url_for("watchlist.index")) + assert b'id="post-list-mark-views"' in res.data + assert _body_has_any_unviewed(res), "Unviewed change present, so the body class must be set" + + # Mark all viewed runs synchronously (Re #4021), so the redirect must already reflect it + res = client.get(url_for("ui.mark_all_viewed"), follow_redirects=True) + assert not _body_has_any_unviewed(res), \ + "mark_all_viewed must be applied before the redirect renders - it used to run in a " \ + "background thread and the page rendered mid-marking" + assert b'id="post-list-mark-views"' in res.data, "Still in the DOM, just hidden by CSS" + assert b'class="has-unread-changes' not in res.data + + delete_all_watches(client) diff --git a/changedetectionio/translations/cs/LC_MESSAGES/messages.po b/changedetectionio/translations/cs/LC_MESSAGES/messages.po index 2b6e7ed4..a726270e 100644 --- a/changedetectionio/translations/cs/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/cs/LC_MESSAGES/messages.po @@ -1398,11 +1398,12 @@ msgid "Mute notifications" msgstr "Ztlumit oznámení" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "Upravit" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "Znovu zkontrolovat" @@ -2274,7 +2275,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "Ve frontě" @@ -2331,6 +2333,88 @@ msgstr "" msgid "records" msgstr "záznamy" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "Kontrola zásob a ceny" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "Není skladem" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "Skladem" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "Cena" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "Žádné informace" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "Zkontrolováno" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "Probíhá kontrola" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "Změněno" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "Historie" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "Náhled" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "" @@ -2352,12 +2436,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "Skladem" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2583,14 +2661,6 @@ msgstr "" msgid "Restock & Price" msgstr "Doplnění zásob a cena" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "Zkontrolováno" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "Změněno" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "Nejsou nakonfigurována žádná sledování webových stránek, do výše uvedeného pole přidejte adresu URL nebo" @@ -2599,71 +2669,6 @@ msgstr "Nejsou nakonfigurována žádná sledování webových stránek, do vý msgid "import a list" msgstr "importovat seznam" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "Kontrola zásob a ceny" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "Není skladem" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "Cena" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "Žádné informace" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "Probíhá kontrola" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "Historie" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "Náhled" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2826,7 +2831,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "Ještě ne" diff --git a/changedetectionio/translations/de/LC_MESSAGES/messages.po b/changedetectionio/translations/de/LC_MESSAGES/messages.po index 98152aa7..e6c4db90 100644 --- a/changedetectionio/translations/de/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/de/LC_MESSAGES/messages.po @@ -1417,11 +1417,12 @@ msgid "Mute notifications" msgstr "Benachrichtigungen stummschalten" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "Bearbeiten" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "Neu prüfen" @@ -2319,7 +2320,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "Wartend" @@ -2376,6 +2378,88 @@ msgstr "Überwachung hinzugefügt." msgid "records" msgstr "Einträge" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "Erkennen von Lagerbeständen und Preisen" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "Nicht auf Lager" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "Auf Lager" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "Preis" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "Keine Informationen" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "Geprüft" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "Jetzt prüfen" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "Geändert" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "Verlauf" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "Vorschau" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "" @@ -2397,12 +2481,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "Auf Lager" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2632,14 +2710,6 @@ msgstr "" msgid "Restock & Price" msgstr "Auffüllen und Preis" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "Geprüft" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "Geändert" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "Es sind keine Website-Überwachungen konfiguriert. Bitte fügen Sie im Feld oben eine URL hinzu, oder" @@ -2648,71 +2718,6 @@ msgstr "Es sind keine Website-Überwachungen konfiguriert. Bitte fügen Sie im F msgid "import a list" msgstr "eine Liste importieren" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "Erkennen von Lagerbeständen und Preisen" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "Nicht auf Lager" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "Preis" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "Keine Informationen" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "Jetzt prüfen" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "Verlauf" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "Vorschau" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2875,7 +2880,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "Noch nicht" diff --git a/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po b/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po index d95edc2f..3254683a 100644 --- a/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po @@ -1394,11 +1394,12 @@ msgid "Mute notifications" msgstr "" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "" @@ -2268,7 +2269,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "" @@ -2325,6 +2327,88 @@ msgstr "" msgid "records" msgstr "" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "" @@ -2346,12 +2430,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2577,14 +2655,6 @@ msgstr "" msgid "Restock & Price" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "" @@ -2593,71 +2663,6 @@ msgstr "" msgid "import a list" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2820,7 +2825,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "" diff --git a/changedetectionio/translations/en_US/LC_MESSAGES/messages.po b/changedetectionio/translations/en_US/LC_MESSAGES/messages.po index d6afe206..c89b1c05 100644 --- a/changedetectionio/translations/en_US/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/en_US/LC_MESSAGES/messages.po @@ -1394,11 +1394,12 @@ msgid "Mute notifications" msgstr "" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "" @@ -2268,7 +2269,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "" @@ -2325,6 +2327,88 @@ msgstr "" msgid "records" msgstr "" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "" @@ -2346,12 +2430,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2577,14 +2655,6 @@ msgstr "" msgid "Restock & Price" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "" @@ -2593,71 +2663,6 @@ msgstr "" msgid "import a list" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2820,7 +2825,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "" diff --git a/changedetectionio/translations/es/LC_MESSAGES/messages.po b/changedetectionio/translations/es/LC_MESSAGES/messages.po index 23394330..56d881d1 100644 --- a/changedetectionio/translations/es/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/es/LC_MESSAGES/messages.po @@ -1437,11 +1437,12 @@ msgid "Mute notifications" msgstr "Silenciar notificaciones" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "Editar" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "Vuelva a comprobar" @@ -2335,7 +2336,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "En cola" @@ -2392,6 +2394,88 @@ msgstr "Monitor añadido." msgid "records" msgstr "archivos" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "Detección de reabastecimiento y precio" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "No en stock" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "En stock" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "Precio" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "Sin información" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "Comprobado" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "Comprobando ahora" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "Cambiado" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "Historia" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "Avance" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "¡Changedetection.io puede monitorear más que solo páginas web! ¡Vea nuestros complementos!" @@ -2413,12 +2497,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "En stock" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2648,14 +2726,6 @@ msgstr "" msgid "Restock & Price" msgstr "Reabastecimiento y precio" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "Comprobado" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "Cambiado" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "No hay monitores de detección de cambios de página web configuradas; agregue una URL en el cuadro de arriba, o" @@ -2664,71 +2734,6 @@ msgstr "No hay monitores de detección de cambios de página web configuradas; a msgid "import a list" msgstr "importar una lista" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "Detección de reabastecimiento y precio" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "No en stock" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "Precio" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "Sin información" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "Comprobando ahora" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "Historia" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "Avance" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2891,7 +2896,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "Aún no" diff --git a/changedetectionio/translations/fr/LC_MESSAGES/messages.po b/changedetectionio/translations/fr/LC_MESSAGES/messages.po index 7e557b75..6b922cd9 100644 --- a/changedetectionio/translations/fr/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/fr/LC_MESSAGES/messages.po @@ -1403,11 +1403,12 @@ msgid "Mute notifications" msgstr "Désactiver les notifications" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "Modifier" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "Revérifier" @@ -2279,7 +2280,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "En file d'attente" @@ -2336,6 +2338,88 @@ msgstr "" msgid "records" msgstr "enregistrements" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "Détection du réapprovisionnement et du prix" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "Pas en stock" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "En stock" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "Prix" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "Aucune information" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "Vérification" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "Vérifier maintenant" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "Modifié" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "Historique" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "Aperçu" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "" @@ -2357,12 +2441,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "En stock" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2588,14 +2666,6 @@ msgstr "" msgid "Restock & Price" msgstr "Réapprovisionnement et prix" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "Vérification" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "Modifié" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "Aucune surveillance de site Web configurée, veuillez ajouter une URL dans la case ci-dessus, ou" @@ -2604,71 +2674,6 @@ msgstr "Aucune surveillance de site Web configurée, veuillez ajouter une URL da msgid "import a list" msgstr "importer une liste" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "Détection du réapprovisionnement et du prix" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "Pas en stock" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "Prix" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "Aucune information" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "Vérifier maintenant" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "Historique" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "Aperçu" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2831,7 +2836,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "Pas encore" diff --git a/changedetectionio/translations/it/LC_MESSAGES/messages.po b/changedetectionio/translations/it/LC_MESSAGES/messages.po index 477126d5..cf01e333 100644 --- a/changedetectionio/translations/it/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/it/LC_MESSAGES/messages.po @@ -1396,11 +1396,12 @@ msgid "Mute notifications" msgstr "Disattiva notifiche" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "Modifica" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "Controlla ora" @@ -2270,7 +2271,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "In coda" @@ -2327,6 +2329,88 @@ msgstr "" msgid "records" msgstr "record" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "Non disponibile" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "Disponibile" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "Prezzo" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "Nessuna informazione" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "Controllo" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "Controllo in corso" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "Modifica" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "Cronologia" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "Anteprima" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "" @@ -2348,12 +2432,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "Disponibile" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2579,14 +2657,6 @@ msgstr "" msgid "Restock & Price" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "Controllo" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "Modifica" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "Nessun monitoraggio configurato, aggiungi un URL nella casella sopra, oppure" @@ -2595,71 +2665,6 @@ msgstr "Nessun monitoraggio configurato, aggiungi un URL nella casella sopra, op msgid "import a list" msgstr "importa una lista" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "Non disponibile" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "Prezzo" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "Nessuna informazione" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "Controllo in corso" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "Cronologia" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "Anteprima" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2822,7 +2827,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "Non ancora" diff --git a/changedetectionio/translations/ja/LC_MESSAGES/messages.po b/changedetectionio/translations/ja/LC_MESSAGES/messages.po index 8709bbd1..73d27201 100644 --- a/changedetectionio/translations/ja/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/ja/LC_MESSAGES/messages.po @@ -1402,11 +1402,12 @@ msgid "Mute notifications" msgstr "通知をミュート" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "編集" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "再チェック" @@ -2287,7 +2288,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "キュー済み" @@ -2344,6 +2346,88 @@ msgstr "ウォッチを追加しました。" msgid "records" msgstr "件" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "チェックを一時停止" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "チェックを再開" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "通知をミュート" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "通知のミュートを解除" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "ウォッチ設定を他の人と共有するリンクを作成" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "在庫補充と価格を検知中" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "在庫なし" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "在庫あり" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "価格" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "情報なし" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "チェック済み" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "今すぐチェック" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "変更済み" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "履歴" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "プレビュー" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "Changedetection.io はウェブページ以外も監視できます!プラグインをご覧ください!" @@ -2365,12 +2449,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "在庫あり" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2596,14 +2674,6 @@ msgstr "" msgid "Restock & Price" msgstr "在庫補充&価格" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "チェック済み" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "変更済み" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "ウェブページ変更検知ウォッチが設定されていません。上のボックスにURLを追加するか、" @@ -2612,71 +2682,6 @@ msgstr "ウェブページ変更検知ウォッチが設定されていません msgid "import a list" msgstr "リストをインポート" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "チェックを一時停止" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "チェックを再開" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "通知をミュート" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "通知のミュートを解除" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "ウォッチ設定を他の人と共有するリンクを作成" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "在庫補充と価格を検知中" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "在庫なし" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "価格" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "情報なし" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "今すぐチェック" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "履歴" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "プレビュー" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "選択してください - 演算子" @@ -2839,7 +2844,7 @@ msgstr "単語数はコンテンツの長さを示す簡易指標で、テキス msgid "Basic fast Plaintext/HTTP Client" msgstr "基本 (高速なプレーンテキスト/HTTPクライアント)" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "未実施" diff --git a/changedetectionio/translations/ko/LC_MESSAGES/messages.po b/changedetectionio/translations/ko/LC_MESSAGES/messages.po index eae71733..19e90b50 100644 --- a/changedetectionio/translations/ko/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/ko/LC_MESSAGES/messages.po @@ -1404,11 +1404,12 @@ msgid "Mute notifications" msgstr "알림 음소거" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "편집" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "재확인" @@ -2278,7 +2279,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "대기 중" @@ -2335,6 +2337,88 @@ msgstr "모니터링이 추가되었습니다." msgid "records" msgstr "항목" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "확인 일시중지" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "확인 재개" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "알림 음소거" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "알림 음소거 해제" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "다른 사람과 모니터링 설정을 공유할 링크 만들기" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "재입고 및 가격 감지" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "재고 없음" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "재고 있음" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "가격" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "정보 없음" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "확인됨" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "지금 확인 중" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "변경됨" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "요약" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "기록" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "미리보기" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "changedetection.io는 웹페이지 외에도 다양한 대상을 모니터링할 수 있습니다. 플러그인을 확인해 보세요." @@ -2356,12 +2440,6 @@ msgstr "전체 기록으로 이동" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "재고 있음" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2587,14 +2665,6 @@ msgstr "" msgid "Restock & Price" msgstr "재입고 및 가격" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "확인됨" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "변경됨" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "설정된 웹페이지 변경 감지 모니터링이 없습니다. 위 입력란에 URL을 추가하거나" @@ -2603,71 +2673,6 @@ msgstr "설정된 웹페이지 변경 감지 모니터링이 없습니다. 위 msgid "import a list" msgstr "목록 가져오기" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "확인 일시중지" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "확인 재개" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "알림 음소거" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "알림 음소거 해제" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "다른 사람과 모니터링 설정을 공유할 링크 만들기" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "재입고 및 가격 감지" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "재고 없음" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "가격" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "정보 없음" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "지금 확인 중" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "요약" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "기록" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "미리보기" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "연산자 선택" @@ -2830,7 +2835,7 @@ msgstr "단어 수는 텍스트를 공백 기준으로 나누어 계산하는 msgid "Basic fast Plaintext/HTTP Client" msgstr "일반 텍스트/HTTP 클라이언트" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "아직 없음" diff --git a/changedetectionio/translations/messages.pot b/changedetectionio/translations/messages.pot index 82e04d93..5d2e792b 100644 --- a/changedetectionio/translations/messages.pot +++ b/changedetectionio/translations/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: changedetection.io 0.55.8\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-07-13 11:51+0200\n" +"POT-Creation-Date: 2026-08-16 15:15+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1393,11 +1393,12 @@ msgid "Mute notifications" msgstr "" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "" @@ -2267,7 +2268,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "" @@ -2324,6 +2326,88 @@ msgstr "" msgid "records" msgstr "" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "" @@ -2345,12 +2429,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2576,14 +2654,6 @@ msgstr "" msgid "Restock & Price" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "" @@ -2592,71 +2662,6 @@ msgstr "" msgid "import a list" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2819,7 +2824,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "" diff --git a/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po b/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po index 89ef3a4d..827d61e8 100644 --- a/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po @@ -1424,11 +1424,12 @@ msgid "Mute notifications" msgstr "Silenciar notificações" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "Editar" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "Rechecar" @@ -2316,7 +2317,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "Enfileirado" @@ -2373,6 +2375,88 @@ msgstr "Monitoramento adicionado." msgid "records" msgstr "registros" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "Detectando estoque e preço" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "Sem estoque" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "Em estoque" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "Preço" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "Sem informações" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "Verificado" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "Verificando agora" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "Alterado" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "Histórico" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "Pré-visualização" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "Changedetection.io pode monitorar mais do que apenas páginas web! Veja nossos plugins!" @@ -2394,12 +2478,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "Em estoque" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2627,14 +2705,6 @@ msgstr "" msgid "Restock & Price" msgstr "Estoque e Preço" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "Verificado" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "Alterado" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "Nenhum monitoramento configurado, adicione uma URL na caixa acima ou" @@ -2643,71 +2713,6 @@ msgstr "Nenhum monitoramento configurado, adicione uma URL na caixa acima ou" msgid "import a list" msgstr "importe uma lista" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "Detectando estoque e preço" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "Sem estoque" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "Preço" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "Sem informações" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "Verificando agora" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "Histórico" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "Pré-visualização" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2870,7 +2875,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "Ainda não" diff --git a/changedetectionio/translations/ru/LC_MESSAGES/messages.po b/changedetectionio/translations/ru/LC_MESSAGES/messages.po index 2fec9bb1..b626703c 100644 --- a/changedetectionio/translations/ru/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/ru/LC_MESSAGES/messages.po @@ -1488,11 +1488,12 @@ msgid "Mute notifications" msgstr "Отключить уведомления" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "Редактировать" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "Перепроверить" @@ -2382,7 +2383,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "В очереди" @@ -2439,6 +2441,88 @@ msgstr "Часы добавлены." msgid "records" msgstr "записи" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "Приостановить проверки" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "Возобновить проверку" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "Отключить уведомление" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "Включить уведомление" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "Создайте ссылку, чтобы поделиться конфигурацией часов с другими" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "Обнаружение пополнения запасов и цены" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "Нет в наличии" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "В наличии" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "Цена" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "Нет информации" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "Проверено" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "Проверяю сейчас" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "Измененный" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "Краткое содержание" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "История" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "Предварительный просмотр" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "Changedetection.io может отслеживать не только веб-страницы! Посмотрите наши плагины!" @@ -2460,12 +2544,6 @@ msgstr "Перейти к полной истории" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "В наличии" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2691,14 +2769,6 @@ msgstr "" msgid "Restock & Price" msgstr "Пополнение и цена" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "Проверено" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "Измененный" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "Не настроено наблюдение за обнаружением изменений веб-страниц. Добавьте URL-адрес в поле выше или" @@ -2707,71 +2777,6 @@ msgstr "Не настроено наблюдение за обнаружение msgid "import a list" msgstr "импортировать список" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "Приостановить проверки" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "Возобновить проверку" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "Отключить уведомление" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "Включить уведомление" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "Создайте ссылку, чтобы поделиться конфигурацией часов с другими" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "Обнаружение пополнения запасов и цены" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "Нет в наличии" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "Цена" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "Нет информации" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "Проверяю сейчас" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "Краткое содержание" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "История" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "Предварительный просмотр" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "Выберите один - Оператор" @@ -2936,7 +2941,7 @@ msgstr "Количество слов — простая мера длины с msgid "Basic fast Plaintext/HTTP Client" msgstr "Базовый быстрый текстовый/HTTP-клиент" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "Еще нет" diff --git a/changedetectionio/translations/tr/LC_MESSAGES/messages.po b/changedetectionio/translations/tr/LC_MESSAGES/messages.po index 67594509..da5e9338 100644 --- a/changedetectionio/translations/tr/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/tr/LC_MESSAGES/messages.po @@ -1431,11 +1431,12 @@ msgid "Mute notifications" msgstr "Bildirimleri sessize al" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "Düzenle" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "Yeniden Kontrol Et" @@ -2321,7 +2322,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "Sırada" @@ -2378,6 +2380,88 @@ msgstr "İzleyici eklendi." msgid "records" msgstr "kayıtlar" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "Yeniden stoklama ve fiyat tespiti" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "Stokta yok" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "Stokta" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "Fiyat" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "Bilgi yok" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "Kontrol Edildi" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "Şimdi kontrol ediliyor" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "Değiştirildi" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "Geçmiş" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "Önizleme" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "Changedetection.io web sayfalarından daha fazlasını izleyebilir! Eklentilerimize bakın!" @@ -2399,12 +2483,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "Stokta" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2630,14 +2708,6 @@ msgstr "" msgid "Restock & Price" msgstr "Yeniden Stoklama ve Fiyat" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "Kontrol Edildi" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "Değiştirildi" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "Yapılandırılmış web sayfası değişiklik tespiti izleyicisi yok, lütfen yukarıdaki kutuya bir URL ekleyin veya" @@ -2646,71 +2716,6 @@ msgstr "Yapılandırılmış web sayfası değişiklik tespiti izleyicisi yok, l msgid "import a list" msgstr "bir listeyi içe aktarın" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "Yeniden stoklama ve fiyat tespiti" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "Stokta yok" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "Fiyat" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "Bilgi yok" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "Şimdi kontrol ediliyor" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "Geçmiş" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "Önizleme" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2873,7 +2878,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "Henüz değil" diff --git a/changedetectionio/translations/uk/LC_MESSAGES/messages.po b/changedetectionio/translations/uk/LC_MESSAGES/messages.po index 83062f93..0223ef37 100644 --- a/changedetectionio/translations/uk/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/uk/LC_MESSAGES/messages.po @@ -1412,11 +1412,12 @@ msgid "Mute notifications" msgstr "Вимкнути сповіщення" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "Редагувати" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "Перевірити знову" @@ -2300,7 +2301,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "В черзі" @@ -2357,6 +2359,88 @@ msgstr "Завдання додано." msgid "records" msgstr "записів" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "Визначення наявності та ціни" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "Немає в наявності" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "В наявності" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "Ціна" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "Немає інформації" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "Перевірено" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "Перевірка..." + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "Змінено" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "Історія" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "Прев'ю" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "Changedetection.io може моніторити більше, ніж просто веб-сторінки! Дивіться наші плагіни!" @@ -2378,12 +2462,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "В наявності" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2609,14 +2687,6 @@ msgstr "" msgid "Restock & Price" msgstr "Наявність та Ціна" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "Перевірено" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "Змінено" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "Немає налаштованих завдань для відстеження змін, будь ласка, додайте URL у поле вище або" @@ -2625,71 +2695,6 @@ msgstr "Немає налаштованих завдань для відстеж msgid "import a list" msgstr "імпортуйте список" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "Визначення наявності та ціни" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "Немає в наявності" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "Ціна" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "Немає інформації" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "Перевірка..." - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "Історія" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "Прев'ю" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2852,7 +2857,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "Ще ні" diff --git a/changedetectionio/translations/zh/LC_MESSAGES/messages.po b/changedetectionio/translations/zh/LC_MESSAGES/messages.po index b4dbe9f6..5c130c29 100644 --- a/changedetectionio/translations/zh/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/zh/LC_MESSAGES/messages.po @@ -1399,11 +1399,12 @@ msgid "Mute notifications" msgstr "静音通知" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "编辑" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "重新检查" @@ -2274,7 +2275,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "队列中" @@ -2331,6 +2333,88 @@ msgstr "监控项已添加。" msgid "records" msgstr "记录" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "检测补货与价格" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "无库存" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "有库存" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "价格" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "暂无信息" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "检查" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "正在检查" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "变更" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "历史" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "预览" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "" @@ -2352,12 +2436,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "有库存" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2583,14 +2661,6 @@ msgstr "" msgid "Restock & Price" msgstr "补货与价格" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "检查" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "变更" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "尚未配置网站监控项,请在上方输入 URL 或" @@ -2599,71 +2669,6 @@ msgstr "尚未配置网站监控项,请在上方输入 URL 或" msgid "import a list" msgstr "导入列表" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "检测补货与价格" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "无库存" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "价格" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "暂无信息" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "正在检查" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "历史" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "预览" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2826,7 +2831,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "尚未" diff --git a/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.po b/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.po index 5d5cadd2..a24d759e 100644 --- a/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.po @@ -1398,11 +1398,12 @@ msgid "Mute notifications" msgstr "靜音通知" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/blueprint/ui/edit.py -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Edit" msgstr "編輯" #: changedetectionio/blueprint/tags/templates/groups-overview.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Recheck" msgstr "複查" @@ -2274,7 +2275,8 @@ msgstr "" msgid "Running now" msgstr "" -#: changedetectionio/blueprint/ui/templates/queue.html changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/blueprint/ui/templates/queue.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html msgid "Queued" msgstr "已排程" @@ -2331,6 +2333,88 @@ msgstr "監測任務已新增。" msgid "records" msgstr "記錄" +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Pause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnPause checks" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Mute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "UnMute notification" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Goto web page" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Create a link to share watch config with others" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Detecting restock and price" +msgstr "檢測補貨與價格" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Not in stock" +msgstr "無庫存" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "In stock" +msgstr "有庫存" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/restock_diff/difference.py +#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +msgid "Price" +msgstr "價格" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#, python-format +msgid "Price change since previous price (%(prev)s)" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "No information" +msgstr "無資訊" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Checked" +msgstr "檢查" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/templates/base.html +#: changedetectionio/templates/sidebar-nav.html +msgid "Checking now" +msgstr "正在檢查" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/blueprint/watchlist/templates/watch-overview.html +msgid "Changed" +msgstr "變更" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Summary" +msgstr "" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +#: changedetectionio/processors/text_json_diff/difference.py +msgid "History" +msgstr "歷史記錄" + +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html +msgid "Preview" +msgstr "預覽" + #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" msgstr "" @@ -2352,12 +2436,6 @@ msgstr "" msgid "Loading price history…" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "In stock" -msgstr "有庫存" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -2583,14 +2661,6 @@ msgstr "" msgid "Restock & Price" msgstr "補貨與價格" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Checked" -msgstr "檢查" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Changed" -msgstr "變更" - #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "No web page change detection watches configured, please add a URL in the box above, or" msgstr "未設定網站監測任務,請在上方欄位新增 URL,或" @@ -2599,71 +2669,6 @@ msgstr "未設定網站監測任務,請在上方欄位新增 URL,或" msgid "import a list" msgstr "匯入列表" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Pause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnPause checks" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Mute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "UnMute notification" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Goto web page" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Create a link to share watch config with others" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Detecting restock and price" -msgstr "檢測補貨與價格" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Not in stock" -msgstr "無庫存" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/restock_diff/difference.py -#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -msgid "Price" -msgstr "價格" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#, python-format -msgid "Price change since previous price (%(prev)s)" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "No information" -msgstr "無資訊" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html -#: changedetectionio/templates/sidebar-nav.html -msgid "Checking now" -msgstr "正在檢查" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Summary" -msgstr "" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -#: changedetectionio/processors/text_json_diff/difference.py -msgid "History" -msgstr "歷史記錄" - -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html -msgid "Preview" -msgstr "預覽" - #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" msgstr "" @@ -2826,7 +2831,7 @@ msgstr "" msgid "Basic fast Plaintext/HTTP Client" msgstr "" -#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/flask_app.py +#: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py msgid "Not yet" msgstr "還沒有"