{"version":3,"file":"bundle.js","sources":["../../svelte-frontend/src/personalNotesNavigation.js","../../svelte-frontend/src/navigationGuard.js","../../svelte-frontend/src/inbox/navigation.js","../../svelte-frontend/src/apiBase.js","../../svelte-frontend/src/inbox/notificationNavigation.js","../../svelte-frontend/src/inbox/phoneEnrollmentErrors.js","../../svelte-frontend/node_modules/esm-env/dev-fallback.js","../../svelte-frontend/node_modules/svelte/src/internal/shared/utils.js","../../svelte-frontend/node_modules/svelte/src/internal/client/constants.js","../../svelte-frontend/node_modules/svelte/src/internal/client/reactivity/equality.js","../../svelte-frontend/node_modules/svelte/src/internal/shared/errors.js","../../svelte-frontend/node_modules/svelte/src/internal/client/errors.js","../../svelte-frontend/node_modules/svelte/src/internal/flags/index.js","../../svelte-frontend/node_modules/svelte/src/constants.js","../../svelte-frontend/node_modules/svelte/src/internal/shared/warnings.js","../../svelte-frontend/node_modules/svelte/src/internal/shared/clone.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dev/tracing.js","../../svelte-frontend/node_modules/svelte/src/internal/shared/dev.js","../../svelte-frontend/node_modules/svelte/src/internal/client/context.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/task.js","../../svelte-frontend/node_modules/svelte/src/internal/client/warnings.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/hydration.js","../../svelte-frontend/node_modules/svelte/src/internal/client/proxy.js","../../svelte-frontend/node_modules/svelte/src/internal/client/reactivity/sources.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/operations.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dev/equality.js","../../svelte-frontend/node_modules/svelte/src/internal/client/error-handling.js","../../svelte-frontend/node_modules/svelte/src/internal/client/reactivity/status.js","../../svelte-frontend/node_modules/svelte/src/internal/client/reactivity/utils.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/elements/misc.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js","../../svelte-frontend/node_modules/svelte/src/internal/client/reactivity/async.js","../../svelte-frontend/node_modules/svelte/src/internal/client/reactivity/deriveds.js","../../svelte-frontend/node_modules/svelte/src/internal/client/reactivity/effects.js","../../svelte-frontend/node_modules/svelte/src/internal/client/reactivity/batch.js","../../svelte-frontend/node_modules/svelte/src/internal/client/runtime.js","../../svelte-frontend/node_modules/svelte/src/internal/client/legacy.js","../../svelte-frontend/node_modules/svelte/src/store/utils.js","../../svelte-frontend/node_modules/svelte/src/store/shared/index.js","../../svelte-frontend/src/inbox/appUpdates.js","../../svelte-frontend/src/inbox/phoneEnrollment.js","../../svelte-frontend/node_modules/svelte/src/utils.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/elements/events.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/reconciler.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/template.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/blocks/boundary.js","../../svelte-frontend/node_modules/svelte/src/reactivity/create-subscriber.js","../../svelte-frontend/node_modules/svelte/src/internal/client/render.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/blocks/branches.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/blocks/if.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/blocks/key.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/blocks/each.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/blocks/html.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/blocks/svelte-component.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/elements/actions.js","../../svelte-frontend/node_modules/clsx/dist/clsx.mjs","../../svelte-frontend/node_modules/svelte/src/internal/shared/attributes.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/elements/class.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/elements/style.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/elements/bindings/select.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/elements/attributes.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/elements/bindings/input.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/elements/bindings/props.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/elements/bindings/this.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/legacy/event-modifiers.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/legacy/lifecycle.js","../../svelte-frontend/node_modules/svelte/src/internal/client/dom/legacy/misc.js","../../svelte-frontend/node_modules/svelte/src/internal/client/reactivity/store.js","../../svelte-frontend/node_modules/svelte/src/internal/client/reactivity/props.js","../../svelte-frontend/node_modules/svelte/src/index-client.js","../../svelte-frontend/node_modules/regexparam/dist/index.mjs","../../svelte-frontend/node_modules/svelte/src/internal/disclose-version.js","../../svelte-frontend/node_modules/svelte/src/version.js","../../svelte-frontend/node_modules/svelte-spa-router/dist/Router.svelte","../../svelte-frontend/src/AboutPage.svelte","../../svelte-frontend/src/ButtonComponent.svelte","../../svelte-frontend/src/agreementApi.js","../../svelte-frontend/src/SigningIdentityDialog.svelte","../../svelte-frontend/src/gatewaySigning.js","../../svelte-frontend/src/GatewaySigningModal.svelte","../../svelte-frontend/src/inbox/browserRecovery.js","../../svelte-frontend/src/LogInGreeting.svelte","../../svelte-frontend/src/OutstandingAgreementNotice.svelte","../../svelte-frontend/src/TextFieldComponent.svelte","../../svelte-frontend/src/DropDownComponent.svelte","../../svelte-frontend/src/DateTimePickerComponent.svelte","../../svelte-frontend/src/NavbarReusable.svelte","../../svelte-frontend/src/subjectCatalog.js","../../svelte-frontend/src/SingleSelectCheckboxArea.svelte","../../svelte-frontend/src/Checkbox.svelte","../../svelte-frontend/src/RegistrationForClass.svelte","../../svelte-frontend/src/RegistrationSucess.svelte","../../svelte-frontend/src/ClassNameComponent.svelte","../../svelte-frontend/src/TeacherNameComponent.svelte","../../svelte-frontend/src/TimeShowerComponent.svelte","../../svelte-frontend/src/ButtonToJoinClassComponent.svelte","../../svelte-frontend/src/FilterButtons.svelte","../../svelte-frontend/src/ButtonToRescheduleComponent.svelte","../../svelte-frontend/src/ButtonToLeaveCommentComponent.svelte","../../svelte-frontend/src/StudentNameComponent.svelte","../../svelte-frontend/src/FilterButtonsForReschRequestsComponent.svelte","../../svelte-frontend/src/RescheduleRequestsContent.svelte","../../svelte-frontend/src/TeacherRegistrationRequestsComponent.svelte","../../svelte-frontend/src/StudentsWithGradesComponent.svelte","../../svelte-frontend/src/PersonalNoteSections.svelte","../../svelte-frontend/src/personalNotes.js","../../svelte-frontend/src/TeacherPersonalNotesPanel.svelte","../../svelte-frontend/src/PersonalNoteHistory.svelte","../../svelte-frontend/src/Schedule.svelte","../../svelte-frontend/src/AvailableTimeSlotsPickerComponent.svelte","../../svelte-frontend/src/DateTimePickerForClassChangeComponent.svelte","../../svelte-frontend/src/ChangeClassTime.svelte","../../svelte-frontend/src/ButtonToGo.svelte","../../svelte-frontend/src/CancelClassPage.svelte","../../svelte-frontend/src/CancelReasonComponentsvelte.svelte","../../svelte-frontend/src/RescheduleSuccess.svelte","../../svelte-frontend/src/StarsInput.svelte","../../svelte-frontend/src/CommentTipComponent.svelte","../../svelte-frontend/src/CheckBoxForLeaveComment.svelte","../../svelte-frontend/src/LeaveCommentPage.svelte","../../svelte-frontend/src/LeaveNoteSuccess.svelte","../../svelte-frontend/src/RescheduleRequestsPage.svelte","../../svelte-frontend/src/FilterButtonsForSettingsPage.svelte","../../svelte-frontend/src/SettingsAndTimeslotsPage.svelte","../../svelte-frontend/src/TeachingStartDateComponent.svelte","../../svelte-frontend/src/TimeSlotInputComponent.svelte","../../svelte-frontend/src/TimeSlotComponent.svelte","../../svelte-frontend/src/money.js","../../svelte-frontend/src/CheckBoxAreForClassesComponent.svelte","../../svelte-frontend/src/CompletedPaymentsListComponent.svelte","../../svelte-frontend/src/TeacherInvoicesPage.svelte","../../svelte-frontend/src/invoicePageApi.js","../../svelte-frontend/src/invoiceClassWindow.js","../../svelte-frontend/src/StandaloneInvoicesPage.svelte","../../svelte-frontend/src/AgreementSection.svelte","../../svelte-frontend/src/AgreementCard.svelte","../../svelte-frontend/src/teacherWorkQrApi.js","../../svelte-frontend/src/AccountPage.svelte","../../svelte-frontend/src/accountAutosave.js","../../svelte-frontend/src/TeacherRequestsPage.svelte","../../svelte-frontend/src/TimeShowerComponentForTeacherReq.svelte","../../svelte-frontend/src/TeacherFinderDisplayComponent.svelte","../../svelte-frontend/src/VisualTimeRangePicker.svelte","../../svelte-frontend/src/TeacherFinderComponent.svelte","../../svelte-frontend/src/Autocomplete.svelte","../../svelte-frontend/src/teacherAvailabilityCapacity.js","../../svelte-frontend/src/TeacherAvailabilityCapacityComponent.svelte","../../svelte-frontend/src/calendarRefreshApi.js","../../svelte-frontend/src/RefreshDatabaseButtonComponent.svelte","../../svelte-frontend/src/RatingDisplayComponent.svelte","../../svelte-frontend/src/TextDisplayForAdminComments.svelte","../../svelte-frontend/src/CameOnTimeDisplay.svelte","../../svelte-frontend/src/StudentSearchComponent.svelte","../../svelte-frontend/src/FindStudentsComments.svelte","../../svelte-frontend/src/AdminAccountCreationStatusComponent.svelte","../../svelte-frontend/src/AdminCreateUserComponent.svelte","../../svelte-frontend/src/StudentPricingModifierComponent.svelte","../../svelte-frontend/src/teacherPricingSummary.js","../../svelte-frontend/src/TeacherPricingModifierComponent.svelte","../../svelte-frontend/src/AdminManualPaymentComponent.svelte","../../svelte-frontend/src/BalanceTransactionsCsvDownloader.svelte","../../svelte-frontend/src/TeacherRevenuePaymentCsvDownloader.svelte","../../svelte-frontend/src/AdminFamilyManagerComponent.svelte","../../svelte-frontend/src/AdminDashboardLauncher.svelte","../../svelte-frontend/src/adminAgreementApi.js","../../svelte-frontend/src/AdminAgreements.svelte","../../svelte-frontend/src/AdminPage.svelte","../../svelte-frontend/src/UpdateCredentialsPage.svelte","../../svelte-frontend/src/RedirectAfterPaymentRoute.svelte","../../svelte-frontend/node_modules/@tinymce/tinymce-svelte/dist/component/Utils.js","../../svelte-frontend/node_modules/@tinymce/tinymce-svelte/dist/component/Editor.svelte","../../svelte-frontend/src/CreateStudentEmailComponent.svelte","../../svelte-frontend/src/AdminRescheduleRequestsComponent.svelte","../../svelte-frontend/src/AdminClassRegistrationRequestsComponent.svelte","../../svelte-frontend/src/AdminRegistrationComponent.svelte","../../svelte-frontend/src/SendWeeklyScheduleSMS.svelte","../../svelte-frontend/src/ActiveStudentDateFilter.svelte","../../svelte-frontend/src/recipientSelection.js","../../svelte-frontend/src/SelectUsersEmailComponent.svelte","../../svelte-frontend/src/SelectUsersSMSComponent.svelte","../../svelte-frontend/src/CreateInformationSectionComponent.svelte","../../svelte-frontend/src/InformationSectionsDisplayComponent.svelte","../../svelte-frontend/src/AdminSearchPage.svelte","../../svelte-frontend/src/ClassDidNotHappenComponent.svelte","../../svelte-frontend/src/teacherPerformanceMonths.js","../../svelte-frontend/src/TeacherCommentCoveragePopover.svelte","../../svelte-frontend/src/ClassIncidentReport.svelte","../../svelte-frontend/src/TeacherPerformanceRating.svelte","../../svelte-frontend/src/TeacherInvoiceComponent.svelte","../../svelte-frontend/src/AdminTeacherPersonalNotes.svelte","../../svelte-frontend/src/TeacherInfoComponent.svelte","../../svelte-frontend/src/StudentInfoComponent.svelte","../../svelte-frontend/src/TeachersListComponent.svelte","../../svelte-frontend/src/StudentsListComponent.svelte","../../svelte-frontend/src/AdminFirstClassesNewTeachersComponent.svelte","../../svelte-frontend/src/AdminTeacherSurveilancePage.svelte","../../svelte-frontend/src/forgot-password.svelte","../../svelte-frontend/src/TeacherPerformancePage.svelte","../../svelte-frontend/src/TeacherRegistrationPage.svelte","../../svelte-frontend/src/AdminStudentInvoiceViewer.svelte","../../svelte-frontend/src/AdminStudentScheduleViewer.svelte","../../svelte-frontend/src/AdminUserInvoicePageViewer.svelte","../../svelte-frontend/src/AdminStudentsPage.svelte","../../svelte-frontend/src/AdminCreateTeacherComponent.svelte","../../svelte-frontend/src/teacherNormalize.js","../../svelte-frontend/src/TeacherSearchComponent.svelte","../../svelte-frontend/src/AdminTeachersPage.svelte","../../svelte-frontend/src/attendanceReportApi.js","../../svelte-frontend/src/AdminClassAttendanceComponent.svelte","../../svelte-frontend/src/AdminAllDashboardPage.svelte","../../svelte-frontend/src/adminActivityDashboard.js","../../svelte-frontend/src/DashboardTrend.svelte","../../svelte-frontend/src/AdminActivityDashboard.svelte","../../svelte-frontend/src/AdminActivityDashboardPage.svelte","../../svelte-frontend/src/adminCalendar.js","../../svelte-frontend/src/AdminCalendarPage.svelte","../../svelte-frontend/src/AdminMonthlyFeedbackReview.svelte","../../svelte-frontend/src/AdminMonthlyFeedbackPage.svelte","../../svelte-frontend/src/ExerciseBankSidebar.svelte","../../svelte-frontend/src/Excercise_bank_landing_page.svelte","../../svelte-frontend/node_modules/mathlive/mathlive.min.mjs","../../svelte-frontend/node_modules/katex/dist/katex.mjs","../../svelte-frontend/src/Upload_excercise.svelte","../../svelte-frontend/src/MCQExerciseDisplay.svelte","../../svelte-frontend/src/ExerciseBankPage.svelte","../../svelte-frontend/src/BendraInformacijaPage.svelte","../../svelte-frontend/src/InvoiceOpenRoute.svelte","../../svelte-frontend/src/inbox/api.js","../../svelte-frontend/src/inbox/TemplateVerificationPanel.svelte","../../svelte-frontend/src/inbox/ReceiptReviewPanel.svelte","../../svelte-frontend/src/inbox/phoneDiagnostics.js","../../svelte-frontend/src/inbox/InboxDeviceSetup.svelte","../../svelte-frontend/src/inbox/InboxUpdate.svelte","../../svelte-frontend/src/inbox/timeline.js","../../svelte-frontend/src/inbox/InboxPage.svelte","../../svelte-frontend/src/inbox/RecoveryPanel.svelte","../../svelte-frontend/src/inbox/DraftConflictPanel.svelte","../../svelte-frontend/src/main.js","../../svelte-frontend/src/App.svelte"],"sourcesContent":["// Install before Router subscribes to hash changes. A panel-mounted listener runs\r\n// too late: the router can unmount the panel during the same event dispatch.\r\nlet activeGuard = null;\r\nlet approvedURL = typeof window === 'undefined' ? '' : window.location.href;\r\nlet navigationSequence = 0;\r\n\r\nasync function guardNavigation(event) {\r\n  const destination = window.location.href;\r\n  if (!activeGuard?.isDirty()) { approvedURL = destination; return; }\r\n  event.stopImmediatePropagation();\r\n  const sequence = ++navigationSequence;\r\n  const guard = activeGuard;\r\n  window.history.replaceState(window.history.state, '', approvedURL);\r\n  if (await guard.flush() && sequence === navigationSequence && guard === activeGuard) {\r\n    window.location.href = destination;\r\n  }\r\n}\r\n\r\nif (typeof window !== 'undefined') window.addEventListener('hashchange', guardNavigation, true);\r\n\r\nexport function registerPersonalNotesNavigationGuard(guard) {\r\n  activeGuard = guard;\r\n  approvedURL = window.location.href;\r\n  return () => { if (activeGuard === guard) { activeGuard = null; navigationSequence++; } };\r\n}\r\n","// Imported by main BEFORE the router. Window hashchange listeners run in\r\n// registration order; a component's later capture listener cannot veto routing.\r\nlet guard = null;\r\n\r\nif (typeof window !== 'undefined') {\r\n  let acceptedHash = window.location.hash;\r\n  window.addEventListener('hashchange', event => {\r\n    if (guard && !guard()) {\r\n      event.stopImmediatePropagation();\r\n      history.replaceState(history.state, '', `${location.pathname}${location.search}${acceptedHash}`);\r\n      return;\r\n    }\r\n    acceptedHash = window.location.hash;\r\n  });\r\n}\r\n\r\nexport function registerNavigationGuard(check) {\r\n  guard = check;\r\n  return () => { if (guard === check) guard = null; };\r\n}\r\n","// Notification destinations are routing hints, never authorization or arbitrary redirects.\r\nconst uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\r\n\r\nexport function conversationPath(id) {\r\n  if (id == null || id === '') return '/inbox';\r\n  return typeof id === 'string' && uuid.test(id) ? `/inbox/${id.toLowerCase()}` : null;\r\n}\r\n\r\nexport function inboxLoginHref(id) {\r\n  return `#/about?inbox=${encodeURIComponent(conversationPath(id) || '/inbox')}&reauth=1`;\r\n}\r\n\r\nexport function readInboxLogin(hash) {\r\n  if (typeof hash !== 'string' || !hash.startsWith('#/about?')) return null;\r\n  const query = new URLSearchParams(hash.slice('#/about?'.length));\r\n  if (query.getAll('inbox').length !== 1) return null;\r\n  const requested = query.get('inbox');\r\n  const target = requested === '/inbox' ? '/inbox'\r\n    : requested?.startsWith('/inbox/') ? conversationPath(requested.slice('/inbox/'.length)) : null;\r\n  return target ? { target, forceLogin: query.get('reauth') === '1' } : null;\r\n}\r\n","export function getApiBase() {\r\n\t// Keep browser API calls on the document's origin, including apex/www and\r\n\t// Heroku hosts, so the Gateway connect-src 'self' policy permits them.\r\n\ttry {\r\n\t\tif (['http:', 'https:'].includes(window.location.protocol)) {\r\n\t\t\treturn window.location.origin;\r\n\t\t}\r\n\t} catch {\r\n\t\t// ignore\r\n\t}\r\n\t// Non-browser / non-HTTP callers retain the production fallback.\r\n\treturn 'https://www.tutory.app';\r\n}\r\n\r\n","import { conversationPath } from './navigation.js';\r\n\r\n// Route through the application's existing hash navigation guard. A notification\r\n// must not reload a page, discard an unsaved reply or bypass staff authentication.\r\nif (typeof window !== 'undefined' && 'serviceWorker' in navigator) {\r\n  navigator.serviceWorker.addEventListener('message', event => {\r\n    const data = event.data;\r\n    if (!navigator.serviceWorker.controller || event.source !== navigator.serviceWorker.controller ||\r\n        window.location.pathname !== '/studentplayground/inbox/' || window.location.search ||\r\n        data?.type !== 'tutory:inbox-notification' || data.version !== 1 || typeof data.path !== 'string') return;\r\n    const path = data.path === '/inbox' ? '/inbox'\r\n      : data.path.startsWith('/inbox/') && conversationPath(data.path.slice('/inbox/'.length));\r\n    if (path && path === data.path) window.location.hash = '#' + path;\r\n  });\r\n}\r\n","// Diagnostic identifiers only. Never retain/render raw errors, URLs, keys,\r\n// credentials, browser messages or response bodies.\r\nconst stages = new Set([\r\n  'preflight', 'key', 'storage', 'session', 'permission', 'lock', 'cleanup',\r\n  'config-read', 'config-check', 'worker-state', 'registration', 'subscription-read',\r\n  'key-check', 'pending-store', 'subscribe', 'subscription-json', 'server-register',\r\n  'binding-check', 'cleanup-store', 'worker-bind', 'cleanup-finish',\r\n]);\r\nconst reasons = new Set([\r\n  'push_not_ready', 'push_configuration_invalid', 'push_session_changed',\r\n  'push_permission_denied', 'push_lock_unavailable', 'push_cleanup_unavailable',\r\n  'push_cleanup_pending', 'push_configuration_changed', 'push_worker_unavailable',\r\n  'push_binding_conflict', 'push_key_conflict', 'push_binding_invalid',\r\n  'push_disabled', 'push_request_invalid', 'push_subscription_invalid',\r\n  'permission_denied', 'inbox_update_in_progress', 'binding_unavailable',\r\n  'binding_forbidden', 'binding_invalid', 'binding_conflict',\r\n  'AbortError', 'NotAllowedError', 'InvalidStateError', 'NotSupportedError',\r\n  'SecurityError', 'QuotaExceededError', 'NetworkError', 'TimeoutError',\r\n  'DataError', 'OperationError', 'TypeError',\r\n]);\r\nconst statuses = new Set([400, 401, 403, 404, 409, 429, 500, 502, 503, 504]);\r\nconst diagnostics = new WeakMap();\r\n\r\nexport function enrollmentFailure(problem, stage) {\r\n  const safeStage = stages.has(stage) ? stage : 'unknown';\r\n  let reason = 'unknown', status = '';\r\n  try {\r\n    const code = problem?.code, name = problem?.name, httpStatus = problem?.status;\r\n    if (reasons.has(code)) reason = code;\r\n    else if (reasons.has(name)) reason = name;\r\n    if (statuses.has(httpStatus)) status = `/HTTP-${httpStatus}`;\r\n  } catch { /* Even a throwing property must not defeat safe error reporting. */ }\r\n  const error = new Error('Phone registration failed');\r\n  diagnostics.set(error, `ENR1/${safeStage}/${reason}${status}`);\r\n  return error;\r\n}\r\n\r\nexport function enrollmentErrorCode(problem) {\r\n  return diagnostics.get(problem) || 'ENR1/unknown/unknown';\r\n}\r\n","const node_env = globalThis.process?.env?.NODE_ENV;\nexport default node_env && !node_env.toLowerCase().startsWith('prod');\n","// Store the references to globals in case someone tries to monkey patch these, causing the below\n// to de-opt (this occurs often when using popular extensions).\nexport var is_array = Array.isArray;\nexport var index_of = Array.prototype.indexOf;\nexport var includes = Array.prototype.includes;\nexport var array_from = Array.from;\nexport var object_keys = Object.keys;\nexport var define_property = Object.defineProperty;\nexport var get_descriptor = Object.getOwnPropertyDescriptor;\nexport var get_descriptors = Object.getOwnPropertyDescriptors;\nexport var object_prototype = Object.prototype;\nexport var array_prototype = Array.prototype;\nexport var get_prototype_of = Object.getPrototypeOf;\nexport var is_extensible = Object.isExtensible;\nexport var has_own_property = Object.prototype.hasOwnProperty;\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\nexport const noop = () => {};\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n\n/**\n * @template [T=any]\n * @param {any} value\n * @returns {value is PromiseLike<T>}\n */\nexport function is_promise(value) {\n\treturn typeof value?.then === 'function';\n}\n\n/** @param {Function} fn */\nexport function run(fn) {\n\treturn fn();\n}\n\n/** @param {Array<() => void>} arr */\nexport function run_all(arr) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tarr[i]();\n\t}\n}\n\n/**\n * TODO replace with Promise.withResolvers once supported widely enough\n * @template [T=void]\n */\nexport function deferred() {\n\t/** @type {(value: T) => void} */\n\tvar resolve;\n\n\t/** @type {(reason: any) => void} */\n\tvar reject;\n\n\t/** @type {Promise<T>} */\n\tvar promise = new Promise((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\n\t// @ts-expect-error\n\treturn { promise, resolve, reject };\n}\n\n/**\n * @template V\n * @param {V} value\n * @param {V | (() => V)} fallback\n * @param {boolean} [lazy]\n * @returns {V}\n */\nexport function fallback(value, fallback, lazy = false) {\n\treturn value === undefined\n\t\t? lazy\n\t\t\t? /** @type {() => V} */ (fallback)()\n\t\t\t: /** @type {V} */ (fallback)\n\t\t: value;\n}\n\n/**\n * When encountering a situation like `let [a, b, c] = $derived(blah())`,\n * we need to stash an intermediate value that `a`, `b`, and `c` derive\n * from, in case it's an iterable\n * @template T\n * @param {ArrayLike<T> | Iterable<T>} value\n * @param {number} [n]\n * @returns {Array<T>}\n */\nexport function to_array(value, n) {\n\t// return arrays unchanged\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\n\t// if value is not iterable, or `n` is unspecified (indicates a rest\n\t// element, which means we're not concerned about unbounded iterables)\n\t// convert to an array with `Array.from`\n\tif (n === undefined || !(Symbol.iterator in value)) {\n\t\treturn Array.from(value);\n\t}\n\n\t// otherwise, populate an array with `n` values\n\n\t/** @type {T[]} */\n\tconst array = [];\n\n\tfor (const element of value) {\n\t\tarray.push(element);\n\t\tif (array.length === n) break;\n\t}\n\n\treturn array;\n}\n\n/**\n * @param {Record<string | symbol, unknown>} obj\n * @param {Array<string | symbol>} keys\n * @returns {Record<string | symbol, unknown>}\n */\nexport function exclude_from_object(obj, keys) {\n\t/** @type {Record<string | symbol, unknown>} */\n\tvar result = {};\n\n\tfor (var key in obj) {\n\t\tif (!keys.includes(key)) {\n\t\t\tresult[key] = obj[key];\n\t\t}\n\t}\n\n\tfor (var symbol of Object.getOwnPropertySymbols(obj)) {\n\t\tif (Object.propertyIsEnumerable.call(obj, symbol) && !keys.includes(symbol)) {\n\t\t\tresult[symbol] = obj[symbol];\n\t\t}\n\t}\n\n\treturn result;\n}\n","// General flags\nexport const DERIVED = 1 << 1;\nexport const EFFECT = 1 << 2;\nexport const RENDER_EFFECT = 1 << 3;\n/**\n * An effect that does not destroy its child effects when it reruns.\n * Runs as part of render effects, i.e. not eagerly as part of tree traversal or effect flushing.\n */\nexport const MANAGED_EFFECT = 1 << 24;\n/**\n * An effect that does not destroy its child effects when it reruns (like MANAGED_EFFECT).\n * Runs eagerly as part of tree traversal or effect flushing.\n */\nexport const BLOCK_EFFECT = 1 << 4;\nexport const BRANCH_EFFECT = 1 << 5;\nexport const ROOT_EFFECT = 1 << 6;\nexport const BOUNDARY_EFFECT = 1 << 7;\n/**\n * Set on the effect that `pause_effect` was called on, i.e. the root of a paused subtree,\n * as opposed to its descendants which are merely `INERT`. This allows `resume_effect` on\n * an ancestor to skip subtrees that were paused for their own reasons (such as a block\n * whose condition is still false) rather than resurrecting them\n */\nexport const PAUSED = 1 << 8;\n/**\n * Indicates that a reaction is connected to an effect root — either it is an effect,\n * or it is a derived that is depended on by at least one effect. If a derived has\n * no dependents, we can disconnect it from the graph, allowing it to either be\n * GC'd or reconnected later if an effect comes to depend on it again\n */\nexport const CONNECTED = 1 << 9;\nexport const CLEAN = 1 << 10;\nexport const DIRTY = 1 << 11;\nexport const MAYBE_DIRTY = 1 << 12;\nexport const INERT = 1 << 13;\nexport const DESTROYED = 1 << 14;\n/** Set once a reaction has run for the first time */\nexport const REACTION_RAN = 1 << 15;\n/** Effect is in the process of getting destroyed. Can be observed in child teardown functions */\nexport const DESTROYING = 1 << 25;\n\n// Flags exclusive to effects\n/**\n * 'Transparent' effects do not create a transition boundary.\n * This is on a block effect 99% of the time but may also be on a branch effect if its parent block effect was pruned\n */\nexport const EFFECT_TRANSPARENT = 1 << 16;\nexport const EAGER_EFFECT = 1 << 17;\nexport const HEAD_EFFECT = 1 << 18;\nexport const EFFECT_PRESERVED = 1 << 19;\nexport const USER_EFFECT = 1 << 20;\nexport const EFFECT_OFFSCREEN = 1 << 25;\n\n// Flags used for async\nexport const REACTION_IS_UPDATING = 1 << 21;\nexport const ASYNC = 1 << 22;\n\nexport const ERROR_VALUE = 1 << 23;\n\nexport const STATE_SYMBOL = Symbol('$state');\n/** Marks component export objects, so that `proxy(...)` leaves them untouched */\nexport const COMPONENT_SYMBOL = Symbol('component');\nexport const LEGACY_PROPS = Symbol('legacy props');\nexport const LOADING_ATTR_SYMBOL = Symbol('');\nexport const PROXY_PATH_SYMBOL = Symbol('proxy path');\nexport const ATTRIBUTES_CACHE = Symbol('attributes');\nexport const CLASS_CACHE = Symbol('class');\nexport const STYLE_CACHE = Symbol('style');\nexport const TEXT_CACHE = Symbol('text');\nexport const FORM_RESET_HANDLER = Symbol('form reset');\n/** An anchor might change, via this symbol on the original anchor we can tell HMR about the updated anchor */\nexport const HMR_ANCHOR = Symbol('hmr anchor');\n\n/** allow users to ignore aborted signal errors if `reason.name === 'StaleReactionError` */\nexport const STALE_REACTION = new (class StaleReactionError extends Error {\n\tname = 'StaleReactionError';\n\tmessage = 'The reaction that called `getAbortSignal()` was re-run or destroyed';\n})();\n\nexport const IS_XHTML =\n\t// We gotta write it like this because after downleveling the pure comment may end up in the wrong location\n\t!!globalThis.document?.contentType &&\n\t/* @__PURE__ */ globalThis.document.contentType.includes('xml');\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const COMMENT_NODE = 8;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\n","/** @import { Equals } from '#client' */\n\n/** @type {Equals} */\nexport function equals(value) {\n\treturn value === this.v;\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function safe_not_equal(a, b) {\n\treturn a != a\n\t\t? b == b\n\t\t: a !== b || (a !== null && typeof a === 'object') || typeof a === 'function';\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function not_equal(a, b) {\n\treturn a !== b;\n}\n\n/** @type {Equals} */\nexport function safe_equals(value) {\n\treturn !safe_not_equal(value, this.v);\n}\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\n/**\n * Cannot use `%name%(...)` unless the `experimental.async` compiler option is `true`\n * @param {string} name\n * @returns {never}\n */\nexport function experimental_async_required(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`experimental_async_required\\nCannot use \\`${name}(...)\\` unless the \\`experimental.async\\` compiler option is \\`true\\`\\nhttps://svelte.dev/e/experimental_async_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/experimental_async_required`);\n\t}\n}\n\n/**\n * Cannot use `{@render children(...)}` if the parent component uses `let:` directives. Consider using a named snippet instead\n * @returns {never}\n */\nexport function invalid_default_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_default_snippet\\nCannot use \\`{@render children(...)}\\` if the parent component uses \\`let:\\` directives. Consider using a named snippet instead\\nhttps://svelte.dev/e/invalid_default_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_default_snippet`);\n\t}\n}\n\n/**\n * A snippet function was passed invalid arguments. Snippets should only be instantiated via `{@render ...}`\n * @returns {never}\n */\nexport function invalid_snippet_arguments() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet_arguments\\nA snippet function was passed invalid arguments. Snippets should only be instantiated via \\`{@render ...}\\`\\nhttps://svelte.dev/e/invalid_snippet_arguments`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet_arguments`);\n\t}\n}\n\n/**\n * An invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app — please open an issue at https://github.com/sveltejs/svelte, citing the following message: \"%message%\"\n * @param {string} message\n * @returns {never}\n */\nexport function invariant_violation(message) {\n\tif (DEV) {\n\t\tconst error = new Error(`invariant_violation\\nAn invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app — please open an issue at https://github.com/sveltejs/svelte, citing the following message: \"${message}\"\\nhttps://svelte.dev/e/invariant_violation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invariant_violation`);\n\t}\n}\n\n/**\n * `%name%(...)` can only be used during component initialisation\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_outside_component(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_outside_component\\n\\`${name}(...)\\` can only be used during component initialisation\\nhttps://svelte.dev/e/lifecycle_outside_component`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_outside_component`);\n\t}\n}\n\n/**\n * Context was not set in the current component or any of its ancestors\n * @returns {never}\n */\nexport function missing_context() {\n\tif (DEV) {\n\t\tconst error = new Error(`missing_context\\nContext was not set in the current component or any of its ancestors\\nhttps://svelte.dev/e/missing_context`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/missing_context`);\n\t}\n}\n\n/**\n * `setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\n * @returns {never}\n */\nexport function set_context_after_init() {\n\tif (DEV) {\n\t\tconst error = new Error(`set_context_after_init\\n\\`setContext\\` must be called when a component first initializes, not in a subsequent effect or after an \\`await\\` expression\\nhttps://svelte.dev/e/set_context_after_init`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/set_context_after_init`);\n\t}\n}\n\n/**\n * Attempted to render a snippet without a `{@render}` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change `{snippet}` to `{@render snippet()}`.\n * @returns {never}\n */\nexport function snippet_without_render_tag() {\n\tif (DEV) {\n\t\tconst error = new Error(`snippet_without_render_tag\\nAttempted to render a snippet without a \\`{@render}\\` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change \\`{snippet}\\` to \\`{@render snippet()}\\`.\\nhttps://svelte.dev/e/snippet_without_render_tag`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/snippet_without_render_tag`);\n\t}\n}\n\n/**\n * `%name%` is not a store with a `subscribe` method\n * @param {string} name\n * @returns {never}\n */\nexport function store_invalid_shape(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`store_invalid_shape\\n\\`${name}\\` is not a store with a \\`subscribe\\` method\\nhttps://svelte.dev/e/store_invalid_shape`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/store_invalid_shape`);\n\t}\n}\n\n/**\n * The `this` prop on `<svelte:element>` must be a string, if defined\n * @returns {never}\n */\nexport function svelte_element_invalid_this_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_element_invalid_this_value\\nThe \\`this\\` prop on \\`<svelte:element>\\` must be a string, if defined\\nhttps://svelte.dev/e/svelte_element_invalid_this_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_element_invalid_this_value`);\n\t}\n}","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nexport *  from '../shared/errors.js';\n\n/**\n * Cannot create a `$derived(...)` with an `await` expression outside of an effect tree\n * @returns {never}\n */\nexport function async_derived_orphan() {\n\tif (DEV) {\n\t\tconst error = new Error(`async_derived_orphan\\nCannot create a \\`$derived(...)\\` with an \\`await\\` expression outside of an effect tree\\nhttps://svelte.dev/e/async_derived_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/async_derived_orphan`);\n\t}\n}\n\n/**\n * Using `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\n * @returns {never}\n */\nexport function bind_invalid_checkbox_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_checkbox_value\\nUsing \\`bind:value\\` together with a checkbox input is not allowed. Use \\`bind:checked\\` instead\\nhttps://svelte.dev/e/bind_invalid_checkbox_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_checkbox_value`);\n\t}\n}\n\n/**\n * Component %component% has an export named `%key%` that a consumer component is trying to access using `bind:%key%`, which is disallowed. Instead, use `bind:this` (e.g. `<%name% bind:this={component} />`) and then access the property on the bound component instance (e.g. `component.%key%`)\n * @param {string} component\n * @param {string} key\n * @param {string} name\n * @returns {never}\n */\nexport function bind_invalid_export(component, key, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_export\\nComponent ${component} has an export named \\`${key}\\` that a consumer component is trying to access using \\`bind:${key}\\`, which is disallowed. Instead, use \\`bind:this\\` (e.g. \\`<${name} bind:this={component} />\\`) and then access the property on the bound component instance (e.g. \\`component.${key}\\`)\\nhttps://svelte.dev/e/bind_invalid_export`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_export`);\n\t}\n}\n\n/**\n * A component is attempting to bind to a non-bindable property `%key%` belonging to %component% (i.e. `<%name% bind:%key%={...}>`). To mark a property as bindable: `let { %key% = $bindable() } = $props()`\n * @param {string} key\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function bind_not_bindable(key, component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_not_bindable\\nA component is attempting to bind to a non-bindable property \\`${key}\\` belonging to ${component} (i.e. \\`<${name} bind:${key}={...}>\\`). To mark a property as bindable: \\`let { ${key} = $bindable() } = $props()\\`\\nhttps://svelte.dev/e/bind_not_bindable`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_not_bindable`);\n\t}\n}\n\n/**\n * Calling `%method%` on a component instance (of %component%) is no longer valid in Svelte 5\n * @param {string} method\n * @param {string} component\n * @returns {never}\n */\nexport function component_api_changed(method, component) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_changed\\nCalling \\`${method}\\` on a component instance (of ${component}) is no longer valid in Svelte 5\\nhttps://svelte.dev/e/component_api_changed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_changed`);\n\t}\n}\n\n/**\n * Attempted to instantiate %component% with `new %name%`, which is no longer valid in Svelte 5. If this component is not under your control, set the `compatibility.componentApi` compiler option to `4` to keep it working.\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function component_api_invalid_new(component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_invalid_new\\nAttempted to instantiate ${component} with \\`new ${name}\\`, which is no longer valid in Svelte 5. If this component is not under your control, set the \\`compatibility.componentApi\\` compiler option to \\`4\\` to keep it working.\\nhttps://svelte.dev/e/component_api_invalid_new`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_invalid_new`);\n\t}\n}\n\n/**\n * A derived value cannot reference itself recursively\n * @returns {never}\n */\nexport function derived_references_self() {\n\tif (DEV) {\n\t\tconst error = new Error(`derived_references_self\\nA derived value cannot reference itself recursively\\nhttps://svelte.dev/e/derived_references_self`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/derived_references_self`);\n\t}\n}\n\n/**\n * Keyed each block has duplicate key `%value%` at indexes %a% and %b%\n * @param {string} a\n * @param {string} b\n * @param {string | undefined | null} [value]\n * @returns {never}\n */\nexport function each_key_duplicate(a, b, value) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_duplicate\\n${value\n\t\t\t? `Keyed each block has duplicate key \\`${value}\\` at indexes ${a} and ${b}`\n\t\t\t: `Keyed each block has duplicate key at indexes ${a} and ${b}`}\\nhttps://svelte.dev/e/each_key_duplicate`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_duplicate`);\n\t}\n}\n\n/**\n * Keyed each block has key that is not idempotent — the key for item at index %index% was `%a%` but is now `%b%`. Keys must be the same each time for a given item\n * @param {string} index\n * @param {string} a\n * @param {string} b\n * @returns {never}\n */\nexport function each_key_volatile(index, a, b) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_volatile\\nKeyed each block has key that is not idempotent — the key for item at index ${index} was \\`${a}\\` but is now \\`${b}\\`. Keys must be the same each time for a given item\\nhttps://svelte.dev/e/each_key_volatile`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_volatile`);\n\t}\n}\n\n/**\n * `%rune%` cannot be used inside an effect cleanup function\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_in_teardown(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_teardown\\n\\`${rune}\\` cannot be used inside an effect cleanup function\\nhttps://svelte.dev/e/effect_in_teardown`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_teardown`);\n\t}\n}\n\n/**\n * Effect cannot be created inside a `$derived` value that was not itself created inside an effect\n * @returns {never}\n */\nexport function effect_in_unowned_derived() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_unowned_derived\\nEffect cannot be created inside a \\`$derived\\` value that was not itself created inside an effect\\nhttps://svelte.dev/e/effect_in_unowned_derived`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_unowned_derived`);\n\t}\n}\n\n/**\n * `%rune%` can only be used inside an effect (e.g. during component initialisation)\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_orphan(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_orphan\\n\\`${rune}\\` can only be used inside an effect (e.g. during component initialisation)\\nhttps://svelte.dev/e/effect_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_orphan`);\n\t}\n}\n\n/**\n * `$effect.pending()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function effect_pending_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_pending_outside_reaction\\n\\`$effect.pending()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/effect_pending_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_pending_outside_reaction`);\n\t}\n}\n\n/**\n * Maximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\n * @returns {never}\n */\nexport function effect_update_depth_exceeded() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_update_depth_exceeded\\nMaximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\\nhttps://svelte.dev/e/effect_update_depth_exceeded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);\n\t}\n}\n\n/**\n * Cannot use `flushSync` inside an effect\n * @returns {never}\n */\nexport function flush_sync_in_effect() {\n\tif (DEV) {\n\t\tconst error = new Error(`flush_sync_in_effect\\nCannot use \\`flushSync\\` inside an effect\\nhttps://svelte.dev/e/flush_sync_in_effect`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/flush_sync_in_effect`);\n\t}\n}\n\n/**\n * Cannot commit a fork that was already discarded\n * @returns {never}\n */\nexport function fork_discarded() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_discarded\\nCannot commit a fork that was already discarded\\nhttps://svelte.dev/e/fork_discarded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_discarded`);\n\t}\n}\n\n/**\n * Cannot create a fork inside an effect or when state changes are pending\n * @returns {never}\n */\nexport function fork_timing() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_timing\\nCannot create a fork inside an effect or when state changes are pending\\nhttps://svelte.dev/e/fork_timing`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_timing`);\n\t}\n}\n\n/**\n * `getAbortSignal()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function get_abort_signal_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`get_abort_signal_outside_reaction\\n\\`getAbortSignal()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/get_abort_signal_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/get_abort_signal_outside_reaction`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n * @returns {never}\n */\nexport function hydratable_missing_but_required(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`hydratable_missing_but_required\\nExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydratable_missing_but_required`);\n\t}\n}\n\n/**\n * Failed to hydrate the application\n * @returns {never}\n */\nexport function hydration_failed() {\n\tif (DEV) {\n\t\tconst error = new Error(`hydration_failed\\nFailed to hydrate the application\\nhttps://svelte.dev/e/hydration_failed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydration_failed`);\n\t}\n}\n\n/**\n * Could not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n * @returns {never}\n */\nexport function invalid_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet\\nCould not \\`{@render}\\` snippet due to the expression being \\`null\\` or \\`undefined\\`. Consider using optional chaining \\`{@render snippet?.()}\\`\\nhttps://svelte.dev/e/invalid_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet`);\n\t}\n}\n\n/**\n * `%name%(...)` cannot be used in runes mode\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_legacy_only(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_legacy_only\\n\\`${name}(...)\\` cannot be used in runes mode\\nhttps://svelte.dev/e/lifecycle_legacy_only`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_legacy_only`);\n\t}\n}\n\n/**\n * Cannot do `bind:%key%={undefined}` when `%key%` has a fallback value\n * @param {string} key\n * @returns {never}\n */\nexport function props_invalid_value(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_invalid_value\\nCannot do \\`bind:${key}={undefined}\\` when \\`${key}\\` has a fallback value\\nhttps://svelte.dev/e/props_invalid_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_invalid_value`);\n\t}\n}\n\n/**\n * Rest element properties of `$props()` such as `%property%` are readonly\n * @param {string} property\n * @returns {never}\n */\nexport function props_rest_readonly(property) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_rest_readonly\\nRest element properties of \\`$props()\\` such as \\`${property}\\` are readonly\\nhttps://svelte.dev/e/props_rest_readonly`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_rest_readonly`);\n\t}\n}\n\n/**\n * The `%rune%` rune is only available inside `.svelte` and `.svelte.js/ts` files\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_outside_svelte(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`rune_outside_svelte\\nThe \\`${rune}\\` rune is only available inside \\`.svelte\\` and \\`.svelte.js/ts\\` files\\nhttps://svelte.dev/e/rune_outside_svelte`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/rune_outside_svelte`);\n\t}\n}\n\n/**\n * Property descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\n * @returns {never}\n */\nexport function state_descriptors_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_descriptors_fixed\\nProperty descriptors defined on \\`$state\\` objects must contain \\`value\\` and always be \\`enumerable\\`, \\`configurable\\` and \\`writable\\`.\\nhttps://svelte.dev/e/state_descriptors_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_descriptors_fixed`);\n\t}\n}\n\n/**\n * Cannot set prototype of `$state` object\n * @returns {never}\n */\nexport function state_prototype_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_prototype_fixed\\nCannot set prototype of \\`$state\\` object\\nhttps://svelte.dev/e/state_prototype_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_prototype_fixed`);\n\t}\n}\n\n/**\n * Updating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\n * @returns {never}\n */\nexport function state_unsafe_mutation() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_unsafe_mutation\\nUpdating state inside \\`$derived(...)\\`, \\`$inspect(...)\\` or a template expression is forbidden. If the value should not be reactive, declare it without \\`$state\\`\\nhttps://svelte.dev/e/state_unsafe_mutation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_unsafe_mutation`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function cannot be called while an error is still being handled\n * @returns {never}\n */\nexport function svelte_boundary_reset_onerror() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_boundary_reset_onerror\\nA \\`<svelte:boundary>\\` \\`reset\\` function cannot be called while an error is still being handled\\nhttps://svelte.dev/e/svelte_boundary_reset_onerror`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);\n\t}\n}","/** True if experimental.async=true */\nexport let async_mode_flag = false;\n/** True if we're not certain that we only have Svelte 5 code in the compilation */\nexport let legacy_mode_flag = false;\n/** True if $inspect.trace is used */\nexport let tracing_mode_flag = false;\n\nexport function enable_async_mode_flag() {\n\tasync_mode_flag = true;\n}\n\n/** ONLY USE THIS DURING TESTING */\nexport function disable_async_mode_flag() {\n\tasync_mode_flag = false;\n}\n\nexport function enable_legacy_mode_flag() {\n\tlegacy_mode_flag = true;\n}\n\nexport function enable_tracing_mode_flag() {\n\ttracing_mode_flag = true;\n}\n","export const EACH_ITEM_REACTIVE = 1;\nexport const EACH_INDEX_REACTIVE = 1 << 1;\n/** See EachBlock interface metadata.is_controlled for an explanation what this is */\nexport const EACH_IS_CONTROLLED = 1 << 2;\nexport const EACH_IS_ANIMATED = 1 << 3;\nexport const EACH_ITEM_IMMUTABLE = 1 << 4;\n\nexport const PROPS_IS_IMMUTABLE = 1;\nexport const PROPS_IS_RUNES = 1 << 1;\nexport const PROPS_IS_UPDATED = 1 << 2;\nexport const PROPS_IS_BINDABLE = 1 << 3;\nexport const PROPS_IS_LAZY_INITIAL = 1 << 4;\n\nexport const TRANSITION_IN = 1;\nexport const TRANSITION_OUT = 1 << 1;\nexport const TRANSITION_GLOBAL = 1 << 2;\n\nexport const TEMPLATE_FRAGMENT = 1;\nexport const TEMPLATE_USE_IMPORT_NODE = 1 << 1;\nexport const TEMPLATE_USE_SVG = 1 << 2;\nexport const TEMPLATE_USE_MATHML = 1 << 3;\n\nexport const HYDRATION_START = '[';\n/** used to indicate that an `{:else}...` block was rendered */\nexport const HYDRATION_START_ELSE = '[!';\n/** used to indicate that a boundary's `failed` snippet was rendered on the server */\nexport const HYDRATION_START_FAILED = '[?';\nexport const HYDRATION_END = ']';\nexport const HYDRATION_ERROR = {};\n\nexport const ELEMENT_IS_NAMESPACED = 1;\nexport const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;\nexport const ELEMENT_IS_INPUT = 1 << 2;\n\nexport const UNINITIALIZED = Symbol('uninitialized');\n\n// Dev-time component properties\nexport const FILENAME = Symbol('filename');\nexport const HMR = Symbol('hmr');\n\nexport const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';\nexport const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';\nexport const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';\n\n// we use a list of ignorable runtime warnings because not every runtime warning\n// can be ignored and we want to keep the validation for svelte-ignore in place\nexport const IGNORABLE_RUNTIME_WARNINGS = /** @type {const} */ ([\n\t'await_waterfall',\n\t'await_reactivity_loss',\n\t'state_snapshot_uncloneable',\n\t'binding_property_non_reactive',\n\t'hydration_attribute_changed',\n\t'hydration_html_changed',\n\t'ownership_invalid_binding',\n\t'ownership_invalid_mutation'\n]);\n\n/**\n * Whitespace inside one of these elements will not result in\n * a whitespace node being created in any circumstances. (This\n * list is almost certainly very incomplete)\n * TODO this is currently unused\n */\nexport const ELEMENTS_WITHOUT_TEXT = ['audio', 'datalist', 'dl', 'optgroup', 'select', 'video'];\n\nexport const ATTACHMENT_KEY = '@attach';\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * `<svelte:element this=\"%tag%\">` is a void element — it cannot have content\n * @param {string} tag\n */\nexport function dynamic_void_element_content(tag) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] dynamic_void_element_content\\n%c\\`<svelte:element this=\"${tag}\">\\` is a void element — it cannot have content\\nhttps://svelte.dev/e/dynamic_void_element_content`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/dynamic_void_element_content`);\n\t}\n}\n\n/**\n * The following properties cannot be cloned with `$state.snapshot` — the return value contains the originals:\n * \n * %properties%\n * @param {string | undefined | null} [properties]\n */\nexport function state_snapshot_uncloneable(properties) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] state_snapshot_uncloneable\\n%c${properties\n\t\t\t\t? `The following properties cannot be cloned with \\`$state.snapshot\\` — the return value contains the originals:\n\n${properties}`\n\t\t\t\t: 'Value cannot be cloned with `$state.snapshot` — the original value was returned'}\\nhttps://svelte.dev/e/state_snapshot_uncloneable`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_snapshot_uncloneable`);\n\t}\n}","/** @import { Snapshot } from './types' */\nimport { DEV } from 'esm-env';\nimport * as w from './warnings.js';\nimport { get_prototype_of, is_array, object_prototype } from './utils.js';\n\n/**\n * In dev, we keep track of which properties could not be cloned. In prod\n * we don't bother, but we keep a dummy array around so that the\n * signature stays the same\n * @type {string[]}\n */\nconst empty = [];\n\n/**\n * @template T\n * @param {T} value\n * @param {boolean} [skip_warning]\n * @param {boolean} [no_tojson]\n * @returns {Snapshot<T>}\n */\nexport function snapshot(value, skip_warning = false, no_tojson = false) {\n\tif (DEV && !skip_warning) {\n\t\t/** @type {string[]} */\n\t\tconst paths = [];\n\n\t\tconst copy = clone(value, new Map(), '', paths, null, no_tojson);\n\t\tif (paths.length === 1 && paths[0] === '') {\n\t\t\t// value could not be cloned\n\t\t\tw.state_snapshot_uncloneable();\n\t\t} else if (paths.length > 0) {\n\t\t\t// some properties could not be cloned\n\t\t\tconst slice = paths.length > 10 ? paths.slice(0, 7) : paths.slice(0, 10);\n\t\t\tconst excess = paths.length - slice.length;\n\n\t\t\tlet uncloned = slice.map((path) => `- <value>${path}`).join('\\n');\n\t\t\tif (excess > 0) uncloned += `\\n- ...and ${excess} more`;\n\n\t\t\tw.state_snapshot_uncloneable(uncloned);\n\t\t}\n\n\t\treturn copy;\n\t}\n\n\treturn clone(value, new Map(), '', empty, null, no_tojson);\n}\n\n/**\n * @template T\n * @param {T} value\n * @param {Map<T, Snapshot<T>>} cloned\n * @param {string} path\n * @param {string[]} paths\n * @param {null | T} [original] The original value, if `value` was produced from a `toJSON` call\n * @param {boolean} [no_tojson]\n * @returns {Snapshot<T>}\n */\nfunction clone(value, cloned, path, paths, original = null, no_tojson = false) {\n\tif (typeof value === 'object' && value !== null) {\n\t\tvar unwrapped = cloned.get(value);\n\t\tif (unwrapped !== undefined) return unwrapped;\n\n\t\tif (value instanceof Map) return /** @type {Snapshot<T>} */ (new Map(value));\n\t\tif (value instanceof Set) return /** @type {Snapshot<T>} */ (new Set(value));\n\n\t\tif (is_array(value)) {\n\t\t\tvar copy = /** @type {Snapshot<any>} */ (Array(value.length));\n\t\t\tcloned.set(value, copy);\n\n\t\t\tif (original !== null) {\n\t\t\t\tcloned.set(original, copy);\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < value.length; i += 1) {\n\t\t\t\tvar element = value[i];\n\t\t\t\tif (i in value) {\n\t\t\t\t\tcopy[i] = clone(element, cloned, DEV ? `${path}[${i}]` : path, paths, null, no_tojson);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn copy;\n\t\t}\n\n\t\tif (get_prototype_of(value) === object_prototype) {\n\t\t\t/** @type {Snapshot<any>} */\n\t\t\tcopy = {};\n\t\t\tcloned.set(value, copy);\n\n\t\t\tif (original !== null) {\n\t\t\t\tcloned.set(original, copy);\n\t\t\t}\n\n\t\t\tfor (var key of Object.keys(value)) {\n\t\t\t\tcopy[key] = clone(\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tvalue[key],\n\t\t\t\t\tcloned,\n\t\t\t\t\tDEV ? `${path}.${key}` : path,\n\t\t\t\t\tpaths,\n\t\t\t\t\tnull,\n\t\t\t\t\tno_tojson\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn copy;\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\t// Ensure SvelteDate snapshots are tracked\n\t\t\tvalue.getTime();\n\t\t\treturn /** @type {Snapshot<T>} */ (structuredClone(value));\n\t\t}\n\n\t\tif (typeof (/** @type {T & { toJSON?: any } } */ (value).toJSON) === 'function' && !no_tojson) {\n\t\t\treturn clone(\n\t\t\t\t/** @type {T & { toJSON(): any } } */ (value).toJSON(),\n\t\t\t\tcloned,\n\t\t\t\tDEV ? `${path}.toJSON()` : path,\n\t\t\t\tpaths,\n\t\t\t\t// Associate the instance with the toJSON clone\n\t\t\t\tvalue\n\t\t\t);\n\t\t}\n\t}\n\n\tif (value instanceof EventTarget) {\n\t\t// can't be cloned\n\t\treturn /** @type {Snapshot<T>} */ (value);\n\t}\n\n\ttry {\n\t\treturn /** @type {Snapshot<T>} */ (structuredClone(value));\n\t} catch (e) {\n\t\tif (DEV) {\n\t\t\tpaths.push(path);\n\t\t}\n\n\t\treturn /** @type {Snapshot<T>} */ (value);\n\t}\n}\n","/** @import { Derived, Reaction, Value } from '#client' */\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { snapshot } from '../../shared/clone.js';\nimport { DERIVED, ASYNC, PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';\nimport { effect_tracking } from '../reactivity/effects.js';\nimport { active_reaction, untrack } from '../runtime.js';\n\n/**\n * @typedef {{\n *   traces: Error[];\n * }} TraceEntry\n */\n\n/** @type {{ reaction: Reaction | null, entries: Map<Value, TraceEntry> } | null} */\nexport let tracing_expressions = null;\n\n/**\n * @param {Value} signal\n * @param {TraceEntry} [entry]\n */\nfunction log_entry(signal, entry) {\n\tconst value = signal.v;\n\n\tif (value === UNINITIALIZED) {\n\t\treturn;\n\t}\n\n\tconst type = get_type(signal);\n\tconst current_reaction = /** @type {Reaction} */ (active_reaction);\n\tconst dirty = signal.wv > current_reaction.wv || current_reaction.wv === 0;\n\tconst style = dirty\n\t\t? 'color: CornflowerBlue; font-weight: bold'\n\t\t: 'color: grey; font-weight: normal';\n\n\t// eslint-disable-next-line no-console\n\tconsole.groupCollapsed(\n\t\tsignal.label ? `%c${type}%c ${signal.label}` : `%c${type}%c`,\n\t\tstyle,\n\t\tdirty ? 'font-weight: normal' : style,\n\t\ttypeof value === 'object' && value !== null && STATE_SYMBOL in value\n\t\t\t? snapshot(value, true)\n\t\t\t: value\n\t);\n\n\tif (type === '$derived') {\n\t\tconst deps = new Set(/** @type {Derived} */ (signal).deps);\n\t\tfor (const dep of deps) {\n\t\t\tlog_entry(dep);\n\t\t}\n\t}\n\n\tif (signal.created) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(signal.created);\n\t}\n\n\tif (dirty && signal.updated) {\n\t\tfor (const updated of signal.updated.values()) {\n\t\t\tif (updated.error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log(updated.error);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (entry) {\n\t\tfor (var trace of entry.traces) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(trace);\n\t\t}\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.groupEnd();\n}\n\n/**\n * @param {Value} signal\n * @returns {'$state' | '$derived' | 'store'}\n */\nfunction get_type(signal) {\n\tif ((signal.f & (DERIVED | ASYNC)) !== 0) return '$derived';\n\treturn signal.label?.startsWith('$') ? 'store' : '$state';\n}\n\n/**\n * @template T\n * @param {() => string} label\n * @param {() => T} fn\n */\nexport function trace(label, fn) {\n\tvar previously_tracing_expressions = tracing_expressions;\n\n\ttry {\n\t\ttracing_expressions = { entries: new Map(), reaction: active_reaction };\n\n\t\tvar start = performance.now();\n\t\tvar value = fn();\n\t\tvar time = (performance.now() - start).toFixed(2);\n\n\t\tvar prefix = untrack(label);\n\n\t\tif (!effect_tracking()) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(`${prefix} %cran outside of an effect (${time}ms)`, 'color: grey');\n\t\t} else if (tracing_expressions.entries.size === 0) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(`${prefix} %cno reactive dependencies (${time}ms)`, 'color: grey');\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.group(`${prefix} %c(${time}ms)`, 'color: grey');\n\n\t\t\tvar entries = tracing_expressions.entries;\n\n\t\t\tuntrack(() => {\n\t\t\t\tfor (const [signal, traces] of entries) {\n\t\t\t\t\tlog_entry(signal, traces);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttracing_expressions = null;\n\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupEnd();\n\t\t}\n\n\t\treturn value;\n\t} finally {\n\t\ttracing_expressions = previously_tracing_expressions;\n\t}\n}\n\n/**\n * @template {Value} T\n * @param {T} source\n * @param {string} label\n * @returns {T}\n */\nexport function tag(source, label) {\n\tsource.label = label;\n\ttag_proxy(source.v, label);\n\n\treturn source;\n}\n\n/**\n * @param {unknown} value\n * @param {string} label\n */\nexport function tag_proxy(value, label) {\n\t// @ts-expect-error\n\tvalue?.[PROXY_PATH_SYMBOL]?.(label);\n\treturn value;\n}\n\n/**\n * @param {unknown} value\n */\nexport function label(value) {\n\tif (typeof value === 'symbol') return `Symbol(${value.description})`;\n\tif (typeof value === 'function') return '<function>';\n\tif (typeof value === 'object' && value) return '<object>';\n\treturn String(value);\n}\n","import { DEV } from 'esm-env';\nimport { define_property } from './utils.js';\nimport * as e from './errors.js';\n\n/**\n * @param {string} label\n * @returns {Error & { stack: string } | null}\n */\nexport function get_error(label) {\n\tconst error = new Error();\n\tconst stack = get_stack();\n\n\tif (stack.length === 0) {\n\t\treturn null;\n\t}\n\n\tstack.unshift('\\n');\n\n\tdefine_property(error, 'stack', {\n\t\tvalue: stack.join('\\n')\n\t});\n\n\tdefine_property(error, 'name', {\n\t\tvalue: label\n\t});\n\n\treturn /** @type {Error & { stack: string }} */ (error);\n}\n\n/**\n * @returns {string[]}\n */\nexport function get_stack() {\n\t// @ts-ignore - doesn't exist everywhere\n\tconst limit = Error.stackTraceLimit;\n\t// @ts-ignore - doesn't exist everywhere\n\tError.stackTraceLimit = Infinity;\n\tconst stack = new Error().stack;\n\t// @ts-ignore - doesn't exist everywhere\n\tError.stackTraceLimit = limit;\n\n\tif (!stack) return [];\n\n\tconst lines = stack.split('\\n');\n\tconst new_lines = [];\n\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i];\n\t\tconst posixified = line.replaceAll('\\\\', '/');\n\n\t\tif (line.trim() === 'Error') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (line.includes('validate_each_keys')) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (posixified.includes('svelte/src/internal') || posixified.includes('node_modules/.vite')) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tnew_lines.push(line);\n\t}\n\n\treturn new_lines;\n}\n\n/**\n * @param {boolean} condition\n * @param {string} message\n */\nexport function invariant(condition, message) {\n\tif (!DEV) {\n\t\tthrow new Error('invariant(...) was not guarded by if (DEV)');\n\t}\n\n\tif (!condition) e.invariant_violation(message);\n}\n","/** @import { ComponentContext, DevStackEntry, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport * as e from './errors.js';\nimport { active_effect, active_reaction } from './runtime.js';\nimport { create_user_effect } from './reactivity/effects.js';\nimport { async_mode_flag, legacy_mode_flag } from '../flags/index.js';\nimport { FILENAME } from '../../constants.js';\nimport { BRANCH_EFFECT, COMPONENT_SYMBOL } from './constants.js';\nimport { define_property } from '../shared/utils.js';\nimport { create_context, get_or_init_context_map } from '../shared/context.js';\n\n/** @type {ComponentContext | null} */\nexport let component_context = null;\n\n/** @param {ComponentContext | null} context */\nexport function set_component_context(context) {\n\tcomponent_context = context;\n}\n\n/** @type {DevStackEntry | null} */\nexport let dev_stack = null;\n\n/** @param {DevStackEntry | null} stack */\nexport function set_dev_stack(stack) {\n\tdev_stack = stack;\n}\n\n/**\n * Execute a callback with a new dev stack entry\n * @param {() => any} callback - Function to execute\n * @param {DevStackEntry['type']} type - Type of block/component\n * @param {any} component - Component function\n * @param {number} line - Line number\n * @param {number} column - Column number\n * @param {Record<string, any>} [additional] - Any additional properties to add to the dev stack entry\n * @returns {any}\n */\nexport function add_svelte_meta(callback, type, component, line, column, additional) {\n\tconst parent = dev_stack;\n\n\tdev_stack = {\n\t\ttype,\n\t\tfile: component[FILENAME],\n\t\tline,\n\t\tcolumn,\n\t\tparent,\n\t\t...additional\n\t};\n\n\ttry {\n\t\treturn callback();\n\t} finally {\n\t\tdev_stack = parent;\n\t}\n}\n\n/**\n * The current component function. Different from current component context:\n * ```html\n * <!-- App.svelte -->\n * <Foo>\n *   <Bar /> <!-- context == Foo.svelte, function == App.svelte -->\n * </Foo>\n * ```\n * @type {ComponentContext['function']}\n */\nexport let dev_current_component_function = null;\n\n/** @param {ComponentContext['function']} fn */\nexport function set_dev_current_component_function(fn) {\n\tdev_current_component_function = fn;\n}\n\n/**\n * Returns a `[get, set, has]` triplet of functions for working with context in a type-safe way.\n *\n * `get` will throw an error if `set` has not yet been called in the current component or any of\n * its ancestors.\n *\n * @template T\n * @returns {[() => T, (context: T) => T, () => boolean]}\n * @since 5.40.0\n */\nexport function createContext() {\n\treturn /** @type {[() => T, (context: T) => T, () => boolean]} */ (\n\t\tcreate_context(getContext, setContext, hasContext)\n\t);\n}\n\n/**\n * Retrieves the context set with the specified `key` in the current component or any of its\n * ancestors. If multiple components set the same key, the value from the closest one is returned.\n * A `setContext` call in the current component is only visible to `getContext` calls that run after it.\n * Must be called during component initialisation.\n *\n * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n *\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\tconst context_map = get_or_init_context_map(component_context, 'getContext');\n\tconst result = /** @type {T} */ (context_map.get(key));\n\treturn result;\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to the component itself and all of its\n * descendants (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n *\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tconst context_map = get_or_init_context_map(component_context, 'setContext');\n\n\tif (async_mode_flag) {\n\t\tvar flags = /** @type {Effect} */ (active_effect).f;\n\t\tvar valid =\n\t\t\t!active_reaction &&\n\t\t\t(flags & BRANCH_EFFECT) !== 0 &&\n\t\t\t// pop() runs synchronously, so this indicates we're setting context after an await\n\t\t\t!(/** @type {ComponentContext} */ (component_context).i);\n\n\t\tif (!valid) {\n\t\t\te.set_context_after_init();\n\t\t}\n\t}\n\n\tcontext_map.set(key, context);\n\treturn context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of the current component or any of\n * its ancestors. Must be called during component initialisation.\n *\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\tconst context_map = get_or_init_context_map(component_context, 'hasContext');\n\treturn context_map.has(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the current component, including entries\n * inherited from its ancestors. Must be called during component initialisation. Useful, for\n * example, if you programmatically create a component and want to pass the existing context to it.\n *\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\tconst context_map = get_or_init_context_map(component_context, 'getAllContexts');\n\treturn /** @type {T} */ (context_map);\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {any} runes\n * @param {Function} [fn]\n * @returns {void}\n */\nexport function push(props, runes = false, fn) {\n\tcomponent_context = {\n\t\tp: component_context,\n\t\ti: false,\n\t\tc: null,\n\t\te: null,\n\t\ts: props,\n\t\tx: null,\n\t\tr: /** @type {Effect} */ (active_effect),\n\t\tl: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null\n\t};\n\n\tif (DEV) {\n\t\t// component function\n\t\tcomponent_context.function = fn;\n\t\tdev_current_component_function = fn;\n\t}\n}\n\n/**\n * @template {Record<string, any>} T\n * @param {T} [component]\n * @returns {T}\n */\nexport function pop(component) {\n\tvar context = /** @type {ComponentContext} */ (component_context);\n\tvar effects = context.e;\n\n\tif (effects !== null) {\n\t\tcontext.e = null;\n\n\t\tfor (var fn of effects) {\n\t\t\tcreate_user_effect(fn);\n\t\t}\n\t}\n\n\tif (component !== undefined) {\n\t\tcontext.x = component;\n\t}\n\n\tcontext.i = true;\n\n\tcomponent_context = context.p;\n\n\tif (DEV) {\n\t\tdev_current_component_function = component_context?.function ?? null;\n\t}\n\n\treturn mark_as_component(component);\n}\n\n/**\n * Add a symbol to the object (or create one if undefined) to mark it as a component so it isn't proxified.\n * @param {any} component\n */\nexport function mark_as_component(component = {}) {\n\tdefine_property(component, COMPONENT_SYMBOL, { value: true });\n\treturn component;\n}\n\n/** @returns {boolean} */\nexport function is_runes() {\n\treturn !legacy_mode_flag || (component_context !== null && component_context.l === null);\n}\n","import { run_all } from '../../shared/utils.js';\nimport { is_flushing_sync } from '../reactivity/batch.js';\n\n/** @type {Array<() => void>} */\nlet micro_tasks = [];\n\nfunction run_micro_tasks() {\n\tvar tasks = micro_tasks;\n\tmicro_tasks = [];\n\trun_all(tasks);\n}\n\n/**\n * @param {() => void} fn\n */\nexport function queue_micro_task(fn) {\n\tif (micro_tasks.length === 0 && !is_flushing_sync) {\n\t\tvar tasks = micro_tasks;\n\t\tqueueMicrotask(() => {\n\t\t\t// If this is false, a flushSync happened in the meantime. Do _not_ run new scheduled microtasks in that case\n\t\t\t// as the ordering of microtasks would be broken at that point - consider this case:\n\t\t\t// - queue_micro_task schedules microtask A to flush task X\n\t\t\t// - synchronously after, flushSync runs, processing task X\n\t\t\t// - synchronously after, some other microtask B is scheduled, but not through queue_micro_task but for example a Promise.resolve() in user code\n\t\t\t// - synchronously after, queue_micro_task schedules microtask C to flush task Y\n\t\t\t// - one tick later, microtask A now resolves, flushing task Y before microtask B, which is incorrect\n\t\t\t// This if check prevents that race condition (that realistically will only happen in tests)\n\t\t\tif (tasks === micro_tasks) run_micro_tasks();\n\t\t});\n\t}\n\n\tmicro_tasks.push(fn);\n}\n\n/**\n * Synchronously run any queued tasks.\n */\nexport function flush_tasks() {\n\twhile (micro_tasks.length > 0) {\n\t\trun_micro_tasks();\n\t}\n}\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * Assignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.\n * @param {string} property\n * @param {string} location\n */\nexport function assignment_value_stale(property, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] assignment_value_stale\\n%cAssignment to \\`${property}\\` property (${location}) will evaluate to the right-hand side, not the value of \\`${property}\\` following the assignment. This may result in unexpected behaviour.\\nhttps://svelte.dev/e/assignment_value_stale`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/assignment_value_stale`);\n\t}\n}\n\n/**\n * Detected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`\n * @param {string} name\n */\nexport function await_reactivity_loss(name) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_reactivity_loss\\n%cDetected reactivity loss when reading \\`${name}\\`. This happens when state is read in an async function after an earlier \\`await\\`\\nhttps://svelte.dev/e/await_reactivity_loss`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_reactivity_loss`);\n\t}\n}\n\n/**\n * An async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\n * @param {string} name\n * @param {string} location\n */\nexport function await_waterfall(name, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_waterfall\\n%cAn async derived, \\`${name}\\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\\nhttps://svelte.dev/e/await_waterfall`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_waterfall`);\n\t}\n}\n\n/**\n * `%binding%` (%location%) is binding to a non-reactive property\n * @param {string} binding\n * @param {string | undefined | null} [location]\n */\nexport function binding_property_non_reactive(binding, location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] binding_property_non_reactive\\n%c${location\n\t\t\t\t? `\\`${binding}\\` (${location}) is binding to a non-reactive property`\n\t\t\t\t: `\\`${binding}\\` is binding to a non-reactive property`}\\nhttps://svelte.dev/e/binding_property_non_reactive`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/binding_property_non_reactive`);\n\t}\n}\n\n/**\n * Your `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead\n * @param {string} method\n */\nexport function console_log_state(method) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] console_log_state\\n%cYour \\`console.${method}\\` contained \\`$state\\` proxies. Consider using \\`$inspect(...)\\` or \\`$state.snapshot(...)\\` instead\\nhttps://svelte.dev/e/console_log_state`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/console_log_state`);\n\t}\n}\n\n/**\n * Reading a derived belonging to a now-destroyed effect may result in stale values\n */\nexport function derived_inert() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] derived_inert\\n%cReading a derived belonging to a now-destroyed effect may result in stale values\\nhttps://svelte.dev/e/derived_inert`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/derived_inert`);\n\t}\n}\n\n/**\n * %handler% should be a function. Did you mean to %suggestion%?\n * @param {string} handler\n * @param {string} suggestion\n */\nexport function event_handler_invalid(handler, suggestion) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] event_handler_invalid\\n%c${handler} should be a function. Did you mean to ${suggestion}?\\nhttps://svelte.dev/e/event_handler_invalid`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/event_handler_invalid`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n */\nexport function hydratable_missing_but_expected(key) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydratable_missing_but_expected\\n%cExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_expected`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydratable_missing_but_expected`);\n\t}\n}\n\n/**\n * The `%attribute%` attribute on `%html%` changed its value between server and client renders. The client value, `%value%`, will be ignored in favour of the server value\n * @param {string} attribute\n * @param {string} html\n * @param {string} value\n */\nexport function hydration_attribute_changed(attribute, html, value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydration_attribute_changed\\n%cThe \\`${attribute}\\` attribute on \\`${html}\\` changed its value between server and client renders. The client value, \\`${value}\\`, will be ignored in favour of the server value\\nhttps://svelte.dev/e/hydration_attribute_changed`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_attribute_changed`);\n\t}\n}\n\n/**\n * The value of an `{@html ...}` block %location% changed between server and client renders. The client value will be ignored in favour of the server value\n * @param {string | undefined | null} [location]\n */\nexport function hydration_html_changed(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_html_changed\\n%c${location\n\t\t\t\t? `The value of an \\`{@html ...}\\` block ${location} changed between server and client renders. The client value will be ignored in favour of the server value`\n\t\t\t\t: 'The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value'}\\nhttps://svelte.dev/e/hydration_html_changed`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_html_changed`);\n\t}\n}\n\n/**\n * Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near %location%\n * @param {string | undefined | null} [location]\n */\nexport function hydration_mismatch(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_mismatch\\n%c${location\n\t\t\t\t? `Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`\n\t\t\t\t: 'Hydration failed because the initial UI does not match what was rendered on the server'}\\nhttps://svelte.dev/e/hydration_mismatch`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_mismatch`);\n\t}\n}\n\n/**\n * The `render` function passed to `createRawSnippet` should return HTML for a single element\n */\nexport function invalid_raw_snippet_render() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] invalid_raw_snippet_render\\n%cThe \\`render\\` function passed to \\`createRawSnippet\\` should return HTML for a single element\\nhttps://svelte.dev/e/invalid_raw_snippet_render`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/invalid_raw_snippet_render`);\n\t}\n}\n\n/**\n * Detected a migrated `$:` reactive block in `%filename%` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an `$effect`.\n * @param {string} filename\n */\nexport function legacy_recursive_reactive_block(filename) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] legacy_recursive_reactive_block\\n%cDetected a migrated \\`$:\\` reactive block in \\`${filename}\\` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an \\`$effect\\`.\\nhttps://svelte.dev/e/legacy_recursive_reactive_block`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/legacy_recursive_reactive_block`);\n\t}\n}\n\n/**\n * Tried to unmount a component that was not mounted\n */\nexport function lifecycle_double_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] lifecycle_double_unmount\\n%cTried to unmount a component that was not mounted\\nhttps://svelte.dev/e/lifecycle_double_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/lifecycle_double_unmount`);\n\t}\n}\n\n/**\n * %parent% passed property `%prop%` to %child% with `bind:`, but its parent component %owner% did not declare `%prop%` as a binding. Consider creating a binding between %owner% and %parent% (e.g. `bind:%prop%={...}` instead of `%prop%={...}`)\n * @param {string} parent\n * @param {string} prop\n * @param {string} child\n * @param {string} owner\n */\nexport function ownership_invalid_binding(parent, prop, child, owner) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_binding\\n%c${parent} passed property \\`${prop}\\` to ${child} with \\`bind:\\`, but its parent component ${owner} did not declare \\`${prop}\\` as a binding. Consider creating a binding between ${owner} and ${parent} (e.g. \\`bind:${prop}={...}\\` instead of \\`${prop}={...}\\`)\\nhttps://svelte.dev/e/ownership_invalid_binding`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_binding`);\n\t}\n}\n\n/**\n * Mutating unbound props (`%name%`, at %location%) is strongly discouraged. Consider using `bind:%prop%={...}` in %parent% (or using a callback) instead\n * @param {string} name\n * @param {string} location\n * @param {string} prop\n * @param {string} parent\n */\nexport function ownership_invalid_mutation(name, location, prop, parent) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_mutation\\n%cMutating unbound props (\\`${name}\\`, at ${location}) is strongly discouraged. Consider using \\`bind:${prop}={...}\\` in ${parent} (or using a callback) instead\\nhttps://svelte.dev/e/ownership_invalid_mutation`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_mutation`);\n\t}\n}\n\n/**\n * The `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.\n */\nexport function select_multiple_invalid_value() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] select_multiple_invalid_value\\n%cThe \\`value\\` property of a \\`<select multiple>\\` element should be an array, but it received a non-array value. The selection will be kept as is.\\nhttps://svelte.dev/e/select_multiple_invalid_value`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/select_multiple_invalid_value`);\n\t}\n}\n\n/**\n * Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `%operator%` will produce unexpected results\n * @param {string} operator\n */\nexport function state_proxy_equality_mismatch(operator) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_equality_mismatch\\n%cReactive \\`$state(...)\\` proxies and the values they proxy have different identities. Because of this, comparisons with \\`${operator}\\` will produce unexpected results\\nhttps://svelte.dev/e/state_proxy_equality_mismatch`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_equality_mismatch`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function only resets the boundary the first time it is called\n */\nexport function svelte_boundary_reset_noop() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] svelte_boundary_reset_noop\\n%cA \\`<svelte:boundary>\\` \\`reset\\` function only resets the boundary the first time it is called\\nhttps://svelte.dev/e/svelte_boundary_reset_noop`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);\n\t}\n}\n\n/**\n * The `slide` transition does not work correctly for elements with `display: %value%`\n * @param {string} value\n */\nexport function transition_slide_display(value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] transition_slide_display\\n%cThe \\`slide\\` transition does not work correctly for elements with \\`display: ${value}\\`\\nhttps://svelte.dev/e/transition_slide_display`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/transition_slide_display`);\n\t}\n}","/** @import { TemplateNode } from '#client' */\n\nimport { COMMENT_NODE } from '#client/constants';\nimport {\n\tHYDRATION_END,\n\tHYDRATION_ERROR,\n\tHYDRATION_START,\n\tHYDRATION_START_ELSE\n} from '../../../constants.js';\nimport * as w from '../warnings.js';\nimport { get_next_sibling } from './operations.js';\n\n/**\n * Use this variable to guard everything related to hydration code so it can be treeshaken out\n * if the user doesn't use the `hydrate` method and these code paths are therefore not needed.\n */\nexport let hydrating = false;\n\n/** @param {boolean} value */\nexport function set_hydrating(value) {\n\thydrating = value;\n}\n\n/**\n * The node that is currently being hydrated. This starts out as the first node inside the opening\n * <!--[--> comment, and updates each time a component calls `$.child(...)` or `$.sibling(...)`.\n * When entering a block (e.g. `{#if ...}`), `hydrate_node` is the block opening comment; by the\n * time we leave the block it is the closing comment, which serves as the block's anchor.\n * @type {TemplateNode}\n */\nexport let hydrate_node;\n\n/** @param {TemplateNode | null} node */\nexport function set_hydrate_node(node) {\n\tif (node === null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn (hydrate_node = node);\n}\n\nexport function hydrate_next() {\n\treturn set_hydrate_node(get_next_sibling(hydrate_node));\n}\n\n/** @param {TemplateNode} node */\nexport function reset(node) {\n\tif (!hydrating) return;\n\n\t// If the node has remaining siblings, something has gone wrong\n\tif (get_next_sibling(hydrate_node) !== null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\thydrate_node = node;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n */\nexport function hydrate_template(template) {\n\tif (hydrating) {\n\t\t// @ts-expect-error TemplateNode doesn't include DocumentFragment, but it's actually fine\n\t\thydrate_node = template.content;\n\t}\n}\n\nexport function next(count = 1) {\n\tif (hydrating) {\n\t\tvar i = count;\n\t\tvar node = hydrate_node;\n\n\t\twhile (i--) {\n\t\t\tnode = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\t}\n\n\t\thydrate_node = node;\n\t}\n}\n\n/**\n * Skips or removes (depending on {@link remove}) all nodes starting at `hydrate_node` up until the next hydration end comment\n * @param {boolean} remove\n */\nexport function skip_nodes(remove = true) {\n\tvar depth = 0;\n\tvar node = hydrate_node;\n\n\twhile (true) {\n\t\tif (node.nodeType === COMMENT_NODE) {\n\t\t\tvar data = /** @type {Comment} */ (node).data;\n\n\t\t\tif (data === HYDRATION_END) {\n\t\t\t\tif (depth === 0) return node;\n\t\t\t\tdepth -= 1;\n\t\t\t} else if (\n\t\t\t\tdata === HYDRATION_START ||\n\t\t\t\tdata === HYDRATION_START_ELSE ||\n\t\t\t\t// \"[1\", \"[2\", etc. for if blocks\n\t\t\t\t(data[0] === '[' && !isNaN(Number(data.slice(1))))\n\t\t\t) {\n\t\t\t\tdepth += 1;\n\t\t\t}\n\t\t}\n\n\t\tvar next = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tif (remove) node.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n *\n * @param {TemplateNode} node\n */\nexport function read_hydration_instruction(node) {\n\tif (!node || node.nodeType !== COMMENT_NODE) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn /** @type {Comment} */ (node).data;\n}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tget,\n\tactive_effect,\n\tupdate_version,\n\tactive_reaction,\n\tset_update_version,\n\tset_active_reaction\n} from './runtime.js';\nimport {\n\tarray_prototype,\n\tget_descriptor,\n\tget_prototype_of,\n\tis_array,\n\tobject_prototype\n} from '../shared/utils.js';\nimport {\n\tstate as source,\n\tset,\n\tincrement,\n\tflush_eager_effects,\n\tset_eager_effects_deferred\n} from './reactivity/sources.js';\nimport { COMPONENT_SYMBOL, PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';\nimport { UNINITIALIZED } from '../../constants.js';\nimport * as e from './errors.js';\nimport { tag } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.js';\nimport { tracing_mode_flag } from '../flags/index.js';\n\n// TODO move all regexes into shared module?\nconst regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * @template T\n * @param {T} value\n * @returns {T}\n */\nexport function proxy(value) {\n\t// if non-proxyable, a component instance, or already a proxy, return `value`\n\tif (\n\t\ttypeof value !== 'object' ||\n\t\tvalue === null ||\n\t\tSTATE_SYMBOL in value ||\n\t\tCOMPONENT_SYMBOL in value\n\t) {\n\t\treturn value;\n\t}\n\n\tconst prototype = get_prototype_of(value);\n\n\tif (prototype !== object_prototype && prototype !== array_prototype) {\n\t\treturn value;\n\t}\n\n\t/** @type {Map<any, Source<any>>} */\n\tvar sources = new Map();\n\tvar is_proxied_array = is_array(value);\n\tvar version = source(0);\n\n\tvar stack = DEV && tracing_mode_flag ? get_error('created at') : null;\n\tvar parent_version = update_version;\n\n\t/**\n\t * Executes the proxy in the context of the reaction it was originally created in, if any\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\tvar with_parent = (fn) => {\n\t\tif (update_version === parent_version) {\n\t\t\treturn fn();\n\t\t}\n\n\t\t// child source is being created after the initial proxy —\n\t\t// prevent it from being associated with the current reaction\n\t\tvar reaction = active_reaction;\n\t\tvar version = update_version;\n\n\t\tset_active_reaction(null);\n\t\tset_update_version(parent_version);\n\n\t\tvar result = fn();\n\n\t\tset_active_reaction(reaction);\n\t\tset_update_version(version);\n\n\t\treturn result;\n\t};\n\n\tif (is_proxied_array) {\n\t\t// We need to create the length source eagerly to ensure that\n\t\t// mutations to the array are properly synced with our proxy\n\t\tsources.set('length', source(/** @type {any[]} */ (value).length, stack));\n\t\tif (DEV) {\n\t\t\tvalue = /** @type {any} */ (inspectable_array(/** @type {any[]} */ (value)));\n\t\t}\n\t}\n\n\t/** Used in dev for $inspect.trace() */\n\tvar path = '';\n\tlet updating = false;\n\t/** @param {string} new_path */\n\tfunction update_path(new_path) {\n\t\tif (updating) return;\n\t\tupdating = true;\n\t\tpath = new_path;\n\n\t\ttag(version, `${path} version`);\n\n\t\t// rename all child sources and child proxies\n\t\tfor (const [prop, source] of sources) {\n\t\t\ttag(source, get_label(path, prop));\n\t\t}\n\t\tupdating = false;\n\t}\n\n\treturn new Proxy(/** @type {any} */ (value), {\n\t\tdefineProperty(_, prop, descriptor) {\n\t\t\tif (\n\t\t\t\t!('value' in descriptor) ||\n\t\t\t\tdescriptor.configurable === false ||\n\t\t\t\tdescriptor.enumerable === false ||\n\t\t\t\tdescriptor.writable === false\n\t\t\t) {\n\t\t\t\t// we disallow non-basic descriptors, because unless they are applied to the\n\t\t\t\t// target object — which we avoid, so that state can be forked — we will run\n\t\t\t\t// afoul of the various invariants\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor#invariants\n\t\t\t\te.state_descriptors_fixed();\n\t\t\t}\n\t\t\tvar s = sources.get(prop);\n\t\t\tif (s === undefined) {\n\t\t\t\twith_parent(() => {\n\t\t\t\t\tvar s = source(descriptor.value, stack);\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tif (DEV && typeof prop === 'string') {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tset(s, descriptor.value, true);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tdeleteProperty(target, prop) {\n\t\t\tvar s = sources.get(prop);\n\n\t\t\tif (s === undefined) {\n\t\t\t\tif (prop in target) {\n\t\t\t\t\tconst s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tincrement(version);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tset(s, UNINITIALIZED);\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (DEV && prop === PROXY_PATH_SYMBOL) {\n\t\t\t\treturn update_path;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar exists = prop in target;\n\n\t\t\t// create a source, but only if it's an own property and not a prototype property\n\t\t\tif (s === undefined && (!exists || get_descriptor(target, prop)?.writable)) {\n\t\t\t\ts = with_parent(() => {\n\t\t\t\t\tvar p = proxy(exists ? target[prop] : UNINITIALIZED);\n\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\n\t\t\t\tsources.set(prop, s);\n\t\t\t}\n\n\t\t\tif (s !== undefined) {\n\t\t\t\tvar v = get(s);\n\t\t\t\treturn v === UNINITIALIZED ? undefined : v;\n\t\t\t}\n\n\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t},\n\n\t\tgetOwnPropertyDescriptor(target, prop) {\n\t\t\tthis.has?.(target, prop);\n\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\t\t\tvar s = sources.get(prop);\n\n\t\t\tif (s !== undefined) {\n\t\t\t\tvar value = get(s);\n\n\t\t\t\tif (value === UNINITIALIZED) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tif (descriptor && 'value' in descriptor) {\n\t\t\t\t\tdescriptor.value = value;\n\t\t\t\t} else {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twritable: true\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn descriptor;\n\t\t},\n\n\t\thas(target, prop) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = (s !== undefined && s.v !== UNINITIALIZED) || Reflect.has(target, prop);\n\n\t\t\tif (\n\t\t\t\ts !== undefined ||\n\t\t\t\t(active_effect !== null && (!has || get_descriptor(target, prop)?.writable))\n\t\t\t) {\n\t\t\t\tif (s === undefined) {\n\t\t\t\t\ts = with_parent(() => {\n\t\t\t\t\t\tvar p = has ? proxy(target[prop]) : UNINITIALIZED;\n\t\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s;\n\t\t\t\t\t});\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\n\t\t\t\tvar value = get(s);\n\t\t\t\tif (value === UNINITIALIZED) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn has;\n\t\t},\n\n\t\tset(target, prop, value, receiver) {\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = prop in target;\n\n\t\t\t// variable.length = value -> clear all signals with index >= value\n\t\t\tif (is_proxied_array && prop === 'length') {\n\t\t\t\tfor (var i = value; i < /** @type {Source<number>} */ (s).v; i += 1) {\n\t\t\t\t\tvar other_s = sources.get(i + '');\n\t\t\t\t\tif (other_s !== undefined) {\n\t\t\t\t\t\tset(other_s, UNINITIALIZED);\n\t\t\t\t\t} else if (i in target) {\n\t\t\t\t\t\t// If the item exists in the original, we need to create an uninitialized source,\n\t\t\t\t\t\t// else a later read of the property would result in a source being created with\n\t\t\t\t\t\t// the value of the original item at that index.\n\t\t\t\t\t\tother_s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\t\tsources.set(i + '', other_s);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(other_s, get_label(path, i));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we haven't yet created a source for this property, we need to ensure\n\t\t\t// we do so otherwise if we read it later, then the write won't be tracked and\n\t\t\t// the heuristics of effects will be different vs if we had read the proxied\n\t\t\t// object property before writing to that property.\n\t\t\tif (s === undefined) {\n\t\t\t\tif (!has || get_descriptor(target, prop)?.writable) {\n\t\t\t\t\ts = with_parent(() => source(undefined, stack));\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\tset(s, proxy(value));\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thas = s.v !== UNINITIALIZED;\n\n\t\t\t\tvar p = with_parent(() => proxy(value));\n\t\t\t\tset(s, p);\n\t\t\t}\n\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\t// Set the new value before updating any signals so that any listeners get the new value\n\t\t\tif (descriptor?.set) {\n\t\t\t\tdescriptor.set.call(receiver, value);\n\t\t\t}\n\n\t\t\tif (!has) {\n\t\t\t\t// If we have mutated an array directly, we might need to\n\t\t\t\t// signal that length has also changed. Do it before updating metadata\n\t\t\t\t// to ensure that iterating over the array as a result of a metadata update\n\t\t\t\t// will not cause the length to be out of sync.\n\t\t\t\tif (is_proxied_array && typeof prop === 'string') {\n\t\t\t\t\tvar ls = /** @type {Source<number>} */ (sources.get('length'));\n\t\t\t\t\tvar n = Number(prop);\n\n\t\t\t\t\tif (Number.isInteger(n) && n >= ls.v) {\n\t\t\t\t\t\tset(ls, n + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\townKeys(target) {\n\t\t\tget(version);\n\n\t\t\tvar own_keys = Reflect.ownKeys(target).filter((key) => {\n\t\t\t\tvar source = sources.get(key);\n\t\t\t\treturn source === undefined || source.v !== UNINITIALIZED;\n\t\t\t});\n\n\t\t\tfor (var [key, source] of sources) {\n\t\t\t\tif (source.v !== UNINITIALIZED && !(key in target)) {\n\t\t\t\t\town_keys.push(key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn own_keys;\n\t\t},\n\n\t\tsetPrototypeOf() {\n\t\t\te.state_prototype_fixed();\n\t\t}\n\t});\n}\n\n/**\n * @param {string} path\n * @param {string | symbol} prop\n */\nfunction get_label(path, prop) {\n\tif (typeof prop === 'symbol') return `${path}[Symbol(${prop.description ?? ''})]`;\n\tif (regex_is_valid_identifier.test(prop)) return `${path}.${prop}`;\n\treturn /^\\d+$/.test(prop) ? `${path}[${prop}]` : `${path}['${prop}']`;\n}\n\n/**\n * @param {any} value\n */\nexport function get_proxied_value(value) {\n\ttry {\n\t\tif (value !== null && typeof value === 'object' && STATE_SYMBOL in value) {\n\t\t\treturn value[STATE_SYMBOL];\n\t\t}\n\t} catch {\n\t\t// the above if check can throw an error if the value in question\n\t\t// is the contentWindow of an iframe on another domain, in which\n\t\t// case we want to just return the value (because it's definitely\n\t\t// not a proxied value) so we don't break any JavaScript interacting\n\t\t// with that iframe (such as various payment companies client side\n\t\t// JavaScript libraries interacting with their iframes on the same\n\t\t// domain)\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {any} a\n * @param {any} b\n */\nexport function is(a, b) {\n\treturn Object.is(get_proxied_value(a), get_proxied_value(b));\n}\n\nconst ARRAY_MUTATING_METHODS = new Set([\n\t'copyWithin',\n\t'fill',\n\t'pop',\n\t'push',\n\t'reverse',\n\t'shift',\n\t'sort',\n\t'splice',\n\t'unshift'\n]);\n\n/**\n * Wrap array mutating methods so $inspect is triggered only once and\n * to prevent logging an array in intermediate state (e.g. with an empty slot)\n * @param {any[]} array\n */\nfunction inspectable_array(array) {\n\treturn new Proxy(array, {\n\t\tget(target, prop, receiver) {\n\t\t\tvar value = Reflect.get(target, prop, receiver);\n\t\t\tif (!ARRAY_MUTATING_METHODS.has(/** @type {string} */ (prop))) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @this {any[]}\n\t\t\t * @param {any[]} args\n\t\t\t */\n\t\t\treturn function (...args) {\n\t\t\t\tset_eager_effects_deferred();\n\t\t\t\tvar result = value.apply(this, args);\n\t\t\t\tflush_eager_effects();\n\t\t\t\treturn result;\n\t\t\t};\n\t\t}\n\t});\n}\n","/** @import { Derived, Effect, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tuntracked_writes,\n\tget,\n\tset_untracked_writes,\n\tuntrack,\n\tincrement_write_version,\n\tupdate_effect,\n\tcurrent_sources,\n\tis_dirty,\n\tuntracking,\n\tis_destroying_effect,\n\tpush_reaction_value\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport {\n\tCLEAN,\n\tDERIVED,\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tEAGER_EFFECT,\n\tMAYBE_DIRTY,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tASYNC\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { tag_proxy } from '../dev/tracing.js';\nimport { get_error } from '../../shared/dev.js';\nimport { component_context, is_runes } from '../context.js';\nimport {\n\tBatch,\n\tbatch_values,\n\teager_block_effects,\n\tschedule_effect,\n\tlegacy_updates\n} from './batch.js';\nimport { proxy } from '../proxy.js';\nimport { execute_derived } from './deriveds.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/** @type {Set<Effect>} */\nexport let eager_effects = new Set();\n\n/** @type {Map<Value, any>} */\nexport const old_values = new Map();\n\n/**\n * @param {Set<any>} v\n */\nexport function set_eager_effects(v) {\n\teager_effects = v;\n}\n\nlet eager_effects_deferred = false;\n\nexport function set_eager_effects_deferred() {\n\teager_effects_deferred = true;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n * @returns {Source<V>}\n */\n// TODO rename this to `state` throughout the codebase\nexport function source(v, stack) {\n\t/** @type {Value} */\n\tvar signal = {\n\t\tf: 0, // TODO ideally we could skip this altogether, but it causes type errors\n\t\tv,\n\t\treactions: null,\n\t\tequals,\n\t\trv: 0,\n\t\twv: 0\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = stack ?? get_error('created at');\n\t\tsignal.updated = null;\n\t\tsignal.set_during_effect = false;\n\t\tsignal.trace = null;\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function state(v, stack) {\n\tconst s = source(v, stack);\n\n\tpush_reaction_value(s);\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {V} initial_value\n * @param {boolean} [immutable]\n * @returns {Source<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function mutable_source(initial_value, immutable = false, trackable = true) {\n\tconst s = source(initial_value);\n\tif (!immutable) {\n\t\ts.equals = safe_equals;\n\t}\n\n\t// bind the signal to the component context, in case we need to\n\t// track updates to trigger beforeUpdate/afterUpdate callbacks\n\tif (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) {\n\t\t(component_context.l.s ??= []).push(s);\n\t}\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {Value<V>} source\n * @param {V} value\n */\nexport function mutate(source, value) {\n\tset(\n\t\tsource,\n\t\tuntrack(() => get(source))\n\t);\n\treturn value;\n}\n\n/**\n * @template V\n * @param {Value<V>} source\n * @param {V} value\n * @param {boolean} [should_proxy]\n * @returns {V}\n */\nexport function set(source, value, should_proxy = false) {\n\tif (\n\t\tactive_reaction !== null &&\n\t\t// since we are untracking the function inside `$inspect.with` we need to add this check\n\t\t// to ensure we error if state is set inside an inspect effect\n\t\t(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) &&\n\t\tis_runes() &&\n\t\t(active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 &&\n\t\t(current_sources === null || !current_sources.has(source))\n\t) {\n\t\te.state_unsafe_mutation();\n\t}\n\n\tlet new_value = should_proxy ? proxy(value) : value;\n\n\tif (DEV) {\n\t\ttag_proxy(new_value, /** @type {string} */ (source.label));\n\t}\n\n\treturn internal_set(source, new_value, legacy_updates);\n}\n\n/**\n * A set of signals we have already seen while traversing in mark_reactions.\n * Not always set to balance the common case of sources only having a couple\n * of (transitive) dependencies (where always creating a Set would be bad for perf)\n * with the edge case of extremely deep or wide dependency arrays with cycles.\n * @type {Set<any> | null}\n */\nvar seen = null;\n/** Number of transitive dependencies, see {@link seen} for more info */\nvar count_deps = 0;\n\n/**\n * @template V\n * @param {Value<V>} source\n * @param {V} value\n * @param {Effect[] | null} [updated_during_traversal]\n * @returns {V}\n */\nexport function internal_set(source, value, updated_during_traversal = null) {\n\tif (!source.equals(value)) {\n\t\tif (is_destroying_effect) {\n\t\t\told_values.set(source, value);\n\t\t} else if (!old_values.has(source)) {\n\t\t\t// only record the value from before the first write in this flush, otherwise a\n\t\t\t// teardown would see the value from before whichever write happened to be last\n\t\t\told_values.set(source, source.v);\n\t\t}\n\n\t\tvar batch = Batch.ensure();\n\t\tbatch.capture(source, value);\n\n\t\tif (DEV) {\n\t\t\tif (tracing_mode_flag || active_effect !== null) {\n\t\t\t\tsource.updated ??= new Map();\n\n\t\t\t\t// For performance reasons, when not using $inspect.trace, we only start collecting stack traces\n\t\t\t\t// after the same source has been updated more than 5 times in the same flush cycle.\n\t\t\t\tconst count = (source.updated.get('')?.count ?? 0) + 1;\n\t\t\t\tsource.updated.set('', { error: /** @type {any} */ (null), count });\n\n\t\t\t\tif (tracing_mode_flag || count > 5) {\n\t\t\t\t\tconst error = get_error('updated at');\n\n\t\t\t\t\tif (error !== null) {\n\t\t\t\t\t\tlet entry = source.updated.get(error.stack);\n\n\t\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\t\tentry = { error, count: 0 };\n\t\t\t\t\t\t\tsource.updated.set(error.stack, entry);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tentry.count++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (active_effect !== null) {\n\t\t\t\tsource.set_during_effect = true;\n\t\t\t}\n\t\t}\n\n\t\tif ((source.f & DERIVED) !== 0) {\n\t\t\tconst derived = /** @type {Derived} */ (source);\n\n\t\t\t// if we are assigning to a dirty derived we set it to clean/maybe dirty but we also eagerly execute it to track the dependencies\n\t\t\tif ((source.f & DIRTY) !== 0) {\n\t\t\t\texecute_derived(derived);\n\t\t\t}\n\n\t\t\t// During time traveling we don't want to reset the status so that\n\t\t\t// traversal of the graph in the other batches still happens\n\t\t\tif (batch_values === null) {\n\t\t\t\tupdate_derived_status(derived);\n\t\t\t}\n\t\t}\n\n\t\tsource.wv = increment_write_version();\n\n\t\t// For debugging, in case you want to know which reactions are being scheduled:\n\t\t// log_reactions(source);\n\t\tseen = null;\n\t\tcount_deps = 0;\n\t\tmark_reactions(source, DIRTY, updated_during_traversal);\n\t\tseen = null;\n\n\t\t// It's possible that the current reaction might not have up-to-date dependencies\n\t\t// whilst it's actively running. So in the case of ensuring it registers the reaction\n\t\t// properly for itself, we need to ensure the current effect actually gets\n\t\t// scheduled. i.e: `$effect(() => x++)`\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tactive_effect !== null &&\n\t\t\t(active_effect.f & CLEAN) !== 0 &&\n\t\t\t(active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0\n\t\t) {\n\t\t\tif (untracked_writes === null) {\n\t\t\t\tset_untracked_writes([source]);\n\t\t\t} else {\n\t\t\t\tuntracked_writes.push(source);\n\t\t\t}\n\t\t}\n\n\t\tif (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {\n\t\t\tflush_eager_effects();\n\t\t}\n\t}\n\n\treturn value;\n}\n\nexport function flush_eager_effects() {\n\teager_effects_deferred = false;\n\n\tfor (const effect of eager_effects) {\n\t\t// Mark clean inspect-effects as maybe dirty and then check their dirtiness\n\t\t// instead of just updating the effects - this way we avoid overfiring.\n\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\n\t\tlet dirty;\n\n\t\ttry {\n\t\t\tdirty = is_dirty(effect);\n\t\t} catch {\n\t\t\t// Dirty-checking can evaluate derived dependencies and throw in cases where\n\t\t\t// parent effects are about to destroy this eager effect. Run the effect so\n\t\t\t// its own error handling can deal with transient failures.\n\t\t\tdirty = true;\n\t\t}\n\n\t\tif (dirty) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\t}\n\n\teager_effects.clear();\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update(source, d = 1) {\n\tvar value = get(source);\n\tvar result = d === 1 ? value++ : value--;\n\n\tset(source, value);\n\n\t// @ts-expect-error\n\treturn result;\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update_pre(source, d = 1) {\n\tvar value = get(source);\n\n\t// @ts-expect-error\n\t// eslint-disable-next-line no-useless-assignment -- `++`/`--` used for return value, not side effect on `value`\n\treturn set(source, d === 1 ? ++value : --value);\n}\n\n/**\n * Silently (without using `get`) increment a source\n * @param {Source<number>} source\n */\nexport function increment(source) {\n\tset(source, source.v + 1);\n}\n\n/**\n * @param {Value} signal\n * @param {number} status should be DIRTY or MAYBE_DIRTY\n * @param {Effect[] | null} updated_during_traversal\n * @returns {void}\n */\nfunction mark_reactions(signal, status, updated_during_traversal) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tvar runes = is_runes();\n\tvar length = reactions.length;\n\n\tcount_deps += length;\n\t// Activate the `seen` Set if we think from the unusually high number of deps that\n\t// there might be cycles in the graph, to avoid repeated lookups for reactions\n\t// Example: https://github.com/sveltejs/svelte/issues/16658 has a graph with one source\n\t// reaching ~10000 distinct deriveds/effects each, resulting in 65 million walks through repeated visits.\n\tif (count_deps > 100000 && seen === null) seen = new Set();\n\n\tif (seen !== null) {\n\t\tif (seen.has(signal)) return;\n\t\tseen.add(signal);\n\t}\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar reaction = reactions[i];\n\t\tvar flags = reaction.f;\n\n\t\t// In legacy mode, skip the current effect to prevent infinite loops\n\t\tif (!runes && reaction === active_effect) continue;\n\n\t\tvar not_dirty = (flags & DIRTY) === 0;\n\n\t\t// don't set a DIRTY reaction to MAYBE_DIRTY\n\t\tif (not_dirty) {\n\t\t\tset_signal_status(reaction, status);\n\t\t}\n\n\t\tif ((flags & EAGER_EFFECT) !== 0) {\n\t\t\t// Eager effects need to run immediately:\n\t\t\t// - for $inspect so that the stack trace makes sense\n\t\t\t// - for $state.eager because they might be without an effect parent\n\t\t\teager_effects.add(/** @type {Effect} */ (reaction));\n\t\t} else if ((flags & DERIVED) !== 0) {\n\t\t\tvar derived = /** @type {Derived} */ (reaction);\n\n\t\t\tbatch_values?.delete(derived);\n\t\t\tmark_reactions(derived, MAYBE_DIRTY, updated_during_traversal);\n\t\t} else if (not_dirty) {\n\t\t\tvar effect = /** @type {Effect} */ (reaction);\n\n\t\t\tif ((flags & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {\n\t\t\t\teager_block_effects.add(effect);\n\t\t\t}\n\n\t\t\tif (updated_during_traversal !== null) {\n\t\t\t\tupdated_during_traversal.push(effect);\n\t\t\t} else {\n\t\t\t\tschedule_effect(effect);\n\t\t\t}\n\t\t}\n\t}\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, reset, set_hydrate_node } from './hydration.js';\nimport { DEV } from 'esm-env';\nimport { init_array_prototype_warnings } from '../dev/equality.js';\nimport { get_descriptor, is_extensible } from '../../shared/utils.js';\nimport { active_effect } from '../runtime.js';\nimport { async_mode_flag } from '../../flags/index.js';\nimport {\n\tATTRIBUTES_CACHE,\n\tCLASS_CACHE,\n\tREACTION_RAN,\n\tSTYLE_CACHE,\n\tTEXT_CACHE,\n\tTEXT_NODE\n} from '#client/constants';\nimport { eager_block_effects } from '../reactivity/batch.js';\nimport { NAMESPACE_HTML } from '../../../constants.js';\n\n// export these for reference in the compiled code, making global name deduplication unnecessary\n/** @type {Window} */\nexport var $window;\n\n/** @type {Document} */\nexport var $document;\n\n/** @type {boolean} */\nexport var is_firefox;\n\n/** @type {() => Node | null} */\nvar first_child_getter;\n/** @type {() => Node | null} */\nvar next_sibling_getter;\n\n/**\n * Initialize these lazily to avoid issues when using the runtime in a server context\n * where these globals are not available while avoiding a separate server entry point\n */\nexport function init_operations() {\n\tif ($window !== undefined) {\n\t\treturn;\n\t}\n\n\t$window = window;\n\t$document = document;\n\tis_firefox = /Firefox/.test(navigator.userAgent);\n\n\tvar element_prototype = Element.prototype;\n\tvar node_prototype = Node.prototype;\n\tvar text_prototype = Text.prototype;\n\n\t// @ts-ignore\n\tfirst_child_getter = get_descriptor(node_prototype, 'firstChild').get;\n\t// @ts-ignore\n\tnext_sibling_getter = get_descriptor(node_prototype, 'nextSibling').get;\n\n\tif (is_extensible(element_prototype)) {\n\t\t// the following assignments improve perf of lookups on DOM nodes\n\t\t/** @type {any} */ (element_prototype)[CLASS_CACHE] = undefined;\n\t\t/** @type {any} */ (element_prototype)[ATTRIBUTES_CACHE] = null;\n\t\t/** @type {any} */ (element_prototype)[STYLE_CACHE] = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__e = undefined;\n\t}\n\n\tif (is_extensible(text_prototype)) {\n\t\t/** @type {any} */ (text_prototype)[TEXT_CACHE] = undefined;\n\t}\n\n\tif (DEV) {\n\t\t// @ts-expect-error\n\t\telement_prototype.__svelte_meta = null;\n\n\t\tinit_array_prototype_warnings();\n\t}\n}\n\n/**\n * @param {string} value\n * @returns {Text}\n */\nexport function create_text(value = '') {\n\treturn document.createTextNode(value);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_first_child(node) {\n\treturn /** @type {TemplateNode | null} */ (first_child_getter.call(node));\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_next_sibling(node) {\n\treturn /** @type {TemplateNode | null} */ (next_sibling_getter.call(node));\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @template {Node} N\n * @param {N} node\n * @param {boolean} is_text\n * @returns {TemplateNode | null}\n */\nexport function child(node, is_text) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\n\tvar child = get_first_child(hydrate_node);\n\n\t// Child can be null if we have an element with a single child, like `<p>{text}</p>`, where `text` is empty\n\tif (child === null) {\n\t\tchild = hydrate_node.appendChild(create_text());\n\t} else if (is_text && child.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\t\tchild?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tif (is_text) {\n\t\tmerge_text_nodes(/** @type {Text} */ (child));\n\t}\n\n\tset_hydrate_node(child);\n\treturn child;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {boolean} [is_text]\n * @returns {TemplateNode | null}\n */\nexport function first_child(node, is_text = false) {\n\tif (!hydrating) {\n\t\tvar first = get_first_child(node);\n\n\t\t// TODO prevent user comments with the empty string when preserveComments is true\n\t\tif (first instanceof Comment && first.data === '') return get_next_sibling(first);\n\n\t\treturn first;\n\t}\n\n\tif (is_text) {\n\t\t// if an {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (hydrate_node?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\n\t\t\thydrate_node?.before(text);\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (hydrate_node));\n\t}\n\n\treturn hydrate_node;\n}\n\n/**\n * `child`, for the very common case of an element with exactly one child. Resetting the\n * hydration cursor is part of the same step, so the compiler doesn't have to emit a\n * separate `reset` call for every `<p>{text}</p>` in an app.\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {boolean} [is_text]\n * @returns {TemplateNode | null}\n */\nexport function only_child(node, is_text = false) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\n\tvar first = child(node, is_text);\n\treset(node);\n\n\treturn first;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {number} count\n * @param {boolean} is_text\n * @returns {TemplateNode | null}\n */\nexport function sibling(node, count = 1, is_text = false) {\n\tlet next_sibling = hydrating ? hydrate_node : node;\n\tvar last_sibling;\n\n\twhile (count--) {\n\t\tlast_sibling = next_sibling;\n\t\tnext_sibling = /** @type {TemplateNode} */ (get_next_sibling(next_sibling));\n\t}\n\n\tif (!hydrating) {\n\t\treturn next_sibling;\n\t}\n\n\tif (is_text) {\n\t\t// if a sibling {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (next_sibling?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\t\t\t// If the next sibling is `null` and we're handling text then it's because\n\t\t\t// the SSR content was empty for the text, so we need to generate a new text\n\t\t\t// node and insert it after the last sibling\n\t\t\tif (next_sibling === null) {\n\t\t\t\tlast_sibling?.after(text);\n\t\t\t} else {\n\t\t\t\tnext_sibling.before(text);\n\t\t\t}\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (next_sibling));\n\t}\n\n\tset_hydrate_node(next_sibling);\n\treturn next_sibling;\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {void}\n */\nexport function clear_text_content(node) {\n\tnode.textContent = '';\n}\n\n/**\n * Returns `true` if we're updating the current block, for example `condition` in\n * an `{#if condition}` block just changed. In this case, the branch should be\n * appended (or removed) at the same time as other updates within the\n * current `<svelte:boundary>`\n */\nexport function should_defer_append() {\n\tif (!async_mode_flag) return false;\n\tif (eager_block_effects !== null) return false;\n\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\treturn (flags & REACTION_RAN) !== 0;\n}\n\n/**\n * Branching here is intentional and load-bearing for perf. `createElement(tag)`\n * hits a fast path in Blink that `createElementNS(NAMESPACE_HTML, tag)` doesn't,\n * and passing an explicit `undefined` as the trailing options arg measurably\n * slows both APIs. Funnelling every case through a single `createElementNS(ns,\n * tag, options)` call would be smaller but slower on the HTML path.\n *\n * @template {keyof HTMLElementTagNameMap | string} T\n * @param {T} tag\n * @param {string} [namespace]\n * @param {string} [is]\n * @returns {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element}\n */\nexport function create_element(tag, namespace, is) {\n\tif (namespace == null || namespace === NAMESPACE_HTML) {\n\t\treturn /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ (\n\t\t\tis ? document.createElement(tag, { is }) : document.createElement(tag)\n\t\t);\n\t}\n\treturn /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ (\n\t\tis ? document.createElementNS(namespace, tag, { is }) : document.createElementNS(namespace, tag)\n\t);\n}\n\nexport function create_fragment() {\n\treturn document.createDocumentFragment();\n}\n\n/**\n * @param {string} data\n * @returns\n */\nexport function create_comment(data = '') {\n\treturn document.createComment(data);\n}\n\n/**\n * @param {Element} element\n * @param {string} key\n * @param {string} value\n * @returns\n */\nexport function set_attribute(element, key, value = '') {\n\tif (key.startsWith('xlink:')) {\n\t\telement.setAttributeNS('http://www.w3.org/1999/xlink', key, value);\n\t\treturn;\n\t}\n\treturn element.setAttribute(key, value);\n}\n\n/**\n * Browsers split text nodes larger than 65536 bytes when parsing.\n * For hydration to succeed, we need to stitch them back together\n * @param {Text} text\n */\nexport function merge_text_nodes(text) {\n\tif (/** @type {string} */ (text.nodeValue).length < 65536) {\n\t\treturn;\n\t}\n\n\tlet next = text.nextSibling;\n\n\twhile (next !== null && next.nodeType === TEXT_NODE) {\n\t\tnext.remove();\n\n\t\t/** @type {string} */ (text.nodeValue) += /** @type {string} */ (next.nodeValue);\n\n\t\tnext = text.nextSibling;\n\t}\n}\n","import * as w from '../warnings.js';\nimport { get_proxied_value } from '../proxy.js';\n\nexport function init_array_prototype_warnings() {\n\tconst array_prototype = Array.prototype;\n\t// The REPL ends up here over and over, and this prevents it from adding more and more patches\n\t// of the same kind to the prototype, which would slow down everything over time.\n\t// @ts-expect-error\n\tconst cleanup = Array.__svelte_cleanup;\n\tif (cleanup) {\n\t\tcleanup();\n\t}\n\n\tconst { indexOf, lastIndexOf, includes } = array_prototype;\n\n\tarray_prototype.indexOf = function (item, from_index) {\n\t\tconst index = indexOf.call(this, item, from_index);\n\n\t\tif (index === -1) {\n\t\t\tfor (let i = from_index ?? 0; i < this.length; i += 1) {\n\t\t\t\tif (get_proxied_value(this[i]) === item) {\n\t\t\t\t\tw.state_proxy_equality_mismatch('array.indexOf(...)');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn index;\n\t};\n\n\tarray_prototype.lastIndexOf = function (item, from_index) {\n\t\t// we need to specify this.length - 1 because it's probably using something like\n\t\t// `arguments` inside so passing undefined is different from not passing anything\n\t\tconst index = lastIndexOf.call(this, item, from_index ?? this.length - 1);\n\n\t\tif (index === -1) {\n\t\t\tfor (let i = 0; i <= (from_index ?? this.length - 1); i += 1) {\n\t\t\t\tif (get_proxied_value(this[i]) === item) {\n\t\t\t\t\tw.state_proxy_equality_mismatch('array.lastIndexOf(...)');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn index;\n\t};\n\n\tarray_prototype.includes = function (item, from_index) {\n\t\tconst has = includes.call(this, item, from_index);\n\n\t\tif (!has) {\n\t\t\tfor (let i = 0; i < this.length; i += 1) {\n\t\t\t\tif (get_proxied_value(this[i]) === item) {\n\t\t\t\t\tw.state_proxy_equality_mismatch('array.includes(...)');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn has;\n\t};\n\n\t// @ts-expect-error\n\tArray.__svelte_cleanup = () => {\n\t\tarray_prototype.indexOf = indexOf;\n\t\tarray_prototype.lastIndexOf = lastIndexOf;\n\t\tarray_prototype.includes = includes;\n\t};\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @param {boolean} equal\n * @returns {boolean}\n */\nexport function strict_equals(a, b, equal = true) {\n\t// try-catch needed because this tries to read properties of `a` and `b`,\n\t// which could be disallowed for example in a secure context\n\ttry {\n\t\tif ((a === b) !== (get_proxied_value(a) === get_proxied_value(b))) {\n\t\t\tw.state_proxy_equality_mismatch(equal ? '===' : '!==');\n\t\t}\n\t} catch {}\n\n\treturn (a === b) === equal;\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @param {boolean} equal\n * @returns {boolean}\n */\nexport function equals(a, b, equal = true) {\n\tif ((a == b) !== (get_proxied_value(a) == get_proxied_value(b))) {\n\t\tw.state_proxy_equality_mismatch(equal ? '==' : '!=');\n\t}\n\n\treturn (a == b) === equal;\n}\n","/** @import { Derived, Effect } from '#client' */\n/** @import { Boundary } from './dom/blocks/boundary.js' */\nimport { DEV } from 'esm-env';\nimport { FILENAME, HYDRATION_ERROR } from '../../constants.js';\nimport { is_firefox } from './dom/operations.js';\nimport {\n\tERROR_VALUE,\n\tBOUNDARY_EFFECT,\n\tREACTION_RAN,\n\tEFFECT,\n\tDESTROYED,\n\tDESTROYING\n} from './constants.js';\nimport { define_property, get_descriptor } from '../shared/utils.js';\nimport { active_effect, active_reaction } from './runtime.js';\n\nconst adjustments = new WeakMap();\n\n/**\n * @param {unknown} error\n */\nexport function handle_error(error) {\n\tvar effect = active_effect;\n\n\t// for unowned deriveds, don't throw until we read the value\n\tif (effect === null) {\n\t\t/** @type {Derived} */ (active_reaction).f |= ERROR_VALUE;\n\t\treturn error;\n\t}\n\n\tif (DEV && error instanceof Error && !adjustments.has(error)) {\n\t\tadjustments.set(error, get_adjustments(error, effect));\n\t}\n\n\t// if the error occurred while creating this subtree, we let it\n\t// bubble up until it hits a boundary that can handle it, unless\n\t// it's an $effect in which case it doesn't run immediately\n\tif ((effect.f & REACTION_RAN) === 0 && (effect.f & EFFECT) === 0) {\n\t\tif (DEV && !effect.parent && error instanceof Error) {\n\t\t\tapply_adjustments(error);\n\t\t}\n\n\t\tthrow error;\n\t}\n\n\t// otherwise we bubble up the effect tree ourselves\n\tinvoke_error_boundary(error, effect);\n}\n\n/**\n * @param {unknown} error\n * @param {Effect | null} effect\n */\nexport function invoke_error_boundary(error, effect) {\n\tif (error === HYDRATION_ERROR) {\n\t\tthrow error;\n\t}\n\n\tif (effect !== null && (effect.f & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\twhile (effect !== null) {\n\t\t// Skip boundaries that are destroyed/destroying and cannot meaningfully handle the error.\n\t\tif ((effect.f & BOUNDARY_EFFECT) !== 0 && (effect.f & (DESTROYED | DESTROYING)) === 0) {\n\t\t\tif ((effect.f & REACTION_RAN) === 0) {\n\t\t\t\t// we are still creating the boundary effect\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t/** @type {Boundary} */ (effect.b).error(error);\n\t\t\t\treturn;\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\n\t\teffect = effect.parent;\n\t}\n\n\tif (DEV && error instanceof Error) {\n\t\tapply_adjustments(error);\n\t}\n\n\tthrow error;\n}\n\n/**\n * Add useful information to the error message/stack in development\n * @param {Error} error\n * @param {Effect} effect\n */\nfunction get_adjustments(error, effect) {\n\tconst message_descriptor = get_descriptor(error, 'message');\n\n\t// if the message was already changed and it's not configurable we can't change it\n\t// or it will throw a different error swallowing the original error\n\tif (message_descriptor && !message_descriptor.configurable) return;\n\n\tvar indent = is_firefox ? '  ' : '\\t';\n\tvar component_stack = `\\n${indent}in ${effect.fn?.name || '<unknown>'}`;\n\tvar context = effect.ctx;\n\n\twhile (context !== null) {\n\t\tcomponent_stack += `\\n${indent}in ${context.function?.[FILENAME].split('/').pop()}`;\n\t\tcontext = context.p;\n\t}\n\n\treturn {\n\t\tmessage: error.message + `\\n${component_stack}\\n`,\n\t\tstack: error.stack\n\t\t\t?.split('\\n')\n\t\t\t.filter((line) => !line.includes('svelte/src/internal'))\n\t\t\t.join('\\n')\n\t};\n}\n\n/**\n * @param {Error} error\n */\nfunction apply_adjustments(error) {\n\tconst adjusted = adjustments.get(error);\n\n\tif (adjusted) {\n\t\tdefine_property(error, 'message', {\n\t\t\tvalue: adjusted.message\n\t\t});\n\n\t\tdefine_property(error, 'stack', {\n\t\t\tvalue: adjusted.stack\n\t\t});\n\t}\n}\n","/** @import { Derived, Signal } from '#client' */\nimport { CLEAN, CONNECTED, DIRTY, MAYBE_DIRTY } from '#client/constants';\n\nconst STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);\n\n/**\n * @param {Signal} signal\n * @param {number} status\n */\nexport function set_signal_status(signal, status) {\n\tsignal.f = (signal.f & STATUS_MASK) | status;\n}\n\n/**\n * Set a derived's status to CLEAN or MAYBE_DIRTY based on its connection state.\n * @param {Derived} derived\n */\nexport function update_derived_status(derived) {\n\t// Only mark as MAYBE_DIRTY if disconnected and has dependencies.\n\tif ((derived.f & CONNECTED) !== 0 || derived.deps === null) {\n\t\tset_signal_status(derived, CLEAN);\n\t} else {\n\t\tset_signal_status(derived, MAYBE_DIRTY);\n\t}\n}\n","/** @import { Effect } from '#client' */\nimport { CLEAN, DIRTY, MAYBE_DIRTY } from '#client/constants';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {Effect} effect\n * @param {Set<Effect>} dirty_effects\n * @param {Set<Effect>} maybe_dirty_effects\n */\nexport function defer_effect(effect, dirty_effects, maybe_dirty_effects) {\n\tif ((effect.f & DIRTY) !== 0) {\n\t\tdirty_effects.add(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\tmaybe_dirty_effects.add(effect);\n\t}\n\n\t// mark as clean so they get scheduled if they depend on pending async state\n\tset_signal_status(effect, CLEAN);\n}\n","import { hydrating } from '../hydration.js';\nimport { clear_text_content, get_first_child } from '../operations.js';\nimport { queue_micro_task } from '../task.js';\nimport { FORM_RESET_HANDLER } from '../../constants.js';\n\n/**\n * @param {HTMLElement} dom\n * @param {boolean} value\n * @returns {void}\n */\nexport function autofocus(dom, value) {\n\tif (value) {\n\t\tconst body = document.body;\n\t\tdom.autofocus = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (document.activeElement === body) {\n\t\t\t\tdom.focus();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * The child of a textarea actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLTextAreaElement} dom\n * @returns {void}\n */\nexport function remove_textarea_child(dom) {\n\tif (hydrating && get_first_child(dom) !== null) {\n\t\tclear_text_content(dom);\n\t}\n}\n\nlet listening_to_form_reset = false;\n\nexport function add_form_reset_listener() {\n\tif (!listening_to_form_reset) {\n\t\tlistening_to_form_reset = true;\n\t\tdocument.addEventListener(\n\t\t\t'reset',\n\t\t\t(evt) => {\n\t\t\t\t// Needs to happen one tick later or else the dom properties of the form\n\t\t\t\t// elements have not updated to their reset values yet\n\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\tif (!evt.defaultPrevented) {\n\t\t\t\t\t\tfor (const e of /**@type {HTMLFormElement} */ (evt.target).elements) {\n\t\t\t\t\t\t\t/** @type {any} */ (e)[FORM_RESET_HANDLER]?.();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t// In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation)\n\t\t\t{ capture: true }\n\t\t);\n\t}\n}\n","import { teardown } from '../../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../../runtime.js';\nimport { FORM_RESET_HANDLER } from '../../../constants.js';\nimport { add_form_reset_listener } from '../misc.js';\n\n/**\n * Fires the handler once immediately (unless corresponding arg is set to `false`),\n * then listens to the given events until the render effect context is destroyed\n * @param {EventTarget} target\n * @param {Array<string>} events\n * @param {(event?: Event) => void} handler\n * @param {any} call_handler_immediately\n */\nexport function listen(target, events, handler, call_handler_immediately = true) {\n\tif (call_handler_immediately) {\n\t\thandler();\n\t}\n\n\tfor (var name of events) {\n\t\ttarget.addEventListener(name, handler);\n\t}\n\n\tteardown(() => {\n\t\tfor (var name of events) {\n\t\t\ttarget.removeEventListener(name, handler);\n\t\t}\n\t});\n}\n\n/**\n * @template T\n * @param {() => T} fn\n */\nexport function without_reactive_context(fn) {\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * Listen to the given event, and then instantiate a global form reset listener if not already done,\n * to notify all bindings when the form is reset\n * @param {HTMLElement} element\n * @param {string} event\n * @param {(is_reset?: true) => void} handler\n * @param {(is_reset?: true) => void} [on_reset]\n */\nexport function listen_to_event_and_reset_event(element, event, handler, on_reset = handler) {\n\telement.addEventListener(event, () => without_reactive_context(handler));\n\tconst prev = /** @type {any} */ (element)[FORM_RESET_HANDLER];\n\tif (prev) {\n\t\t// special case for checkbox that can have multiple binds (group & checked)\n\t\t/** @type {any} */ (element)[FORM_RESET_HANDLER] = () => {\n\t\t\tprev();\n\t\t\ton_reset(true);\n\t\t};\n\t} else {\n\t\t/** @type {any} */ (element)[FORM_RESET_HANDLER] = () => on_reset(true);\n\t}\n\n\tadd_form_reset_listener();\n}\n","/** @import { Blocker, Effect, Source, Value } from '#client' */\nimport { DESTROYED, STALE_REACTION } from '#client/constants';\nimport { DEV } from 'esm-env';\nimport {\n\tcomponent_context,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_stack\n} from '../context.js';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../runtime.js';\nimport { Batch, current_batch } from './batch.js';\nimport {\n\tasync_derived,\n\treactivity_loss_tracker,\n\tderived,\n\tderived_safe_equal,\n\tset_reactivity_loss_tracker\n} from './deriveds.js';\nimport { aborted } from './effects.js';\n\n/**\n * @param {Blocker[]} blockers\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {(values: Value[]) => any} fn\n */\nexport function flatten(blockers, sync, async, fn) {\n\tconst d = is_runes() ? derived : derived_safe_equal;\n\n\t// Filter out already-settled blockers - no need to wait for them\n\tvar pending = blockers.filter((b) => !b.settled);\n\n\tvar deriveds = sync.map(d);\n\n\tif (DEV) {\n\t\tderiveds.forEach((d, i) => {\n\t\t\t// TODO this is kinda useful for debugging but a lousy implementation —\n\t\t\t// maybe the compiler could pass through the template string\n\t\t\td.label = sync[i]\n\t\t\t\t.toString()\n\t\t\t\t.replace('() => ', '')\n\t\t\t\t.replaceAll('$.eager(() => ', '$state.eager(')\n\t\t\t\t.replace(/\\$\\.get\\((.+?)\\)/g, (_, id) => id);\n\t\t});\n\t}\n\n\tif (async.length === 0 && pending.length === 0) {\n\t\tfn(deriveds);\n\t\treturn;\n\t}\n\n\tvar parent = /** @type {Effect} */ (active_effect);\n\n\tvar restore = capture();\n\tvar blocker_promise =\n\t\tpending.length === 1\n\t\t\t? pending[0].promise\n\t\t\t: pending.length > 1\n\t\t\t\t? Promise.all(pending.map((b) => b.promise))\n\t\t\t\t: null;\n\n\t/**\n\t * @param {Source[]} async\n\t */\n\tfunction finish(async) {\n\t\tif ((parent.f & DESTROYED) !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\trestore();\n\n\t\ttry {\n\t\t\tfn([...deriveds, ...async]);\n\t\t} catch (error) {\n\t\t\tinvoke_error_boundary(error, parent);\n\t\t}\n\n\t\tunset_context();\n\t}\n\n\tvar decrement_pending = increment_pending();\n\n\t// Fast path: blockers but no async expressions\n\tif (async.length === 0) {\n\t\t/** @type {Promise<any>} */ (blocker_promise).then(() => finish([])).finally(decrement_pending);\n\t\treturn;\n\t}\n\n\t// Full path: has async expressions\n\tfunction run() {\n\t\tPromise.all(async.map((expression) => async_derived(expression)))\n\t\t\t.then(finish)\n\t\t\t.catch((error) => invoke_error_boundary(error, parent))\n\t\t\t.finally(decrement_pending);\n\t}\n\n\tif (blocker_promise) {\n\t\tblocker_promise.then(() => {\n\t\t\tif ((parent.f & DESTROYED) !== 0) {\n\t\t\t\tdecrement_pending();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trestore();\n\t\t\trun();\n\t\t\tunset_context();\n\t\t});\n\t} else {\n\t\trun();\n\t}\n}\n\n/**\n * @param {Blocker[]} blockers\n * @param {(values: Value[]) => any} fn\n */\nexport function run_after_blockers(blockers, fn) {\n\tflatten(blockers, [], [], fn);\n}\n\n/**\n * Captures the current effect context so that we can restore it after\n * some asynchronous work has happened (so that e.g. `await a + b`\n * causes `b` to be registered as a dependency).\n */\nexport function capture() {\n\tvar previous_effect = /** @type {Effect} */ (active_effect);\n\tvar previous_reaction = active_reaction;\n\tvar previous_component_context = component_context;\n\tvar previous_batch = /** @type {Batch} */ (current_batch);\n\n\tif (DEV) {\n\t\tvar previous_dev_stack = dev_stack;\n\t}\n\n\treturn function restore(activate_batch = true) {\n\t\tset_active_effect(previous_effect);\n\t\tset_active_reaction(previous_reaction);\n\t\tset_component_context(previous_component_context);\n\n\t\tif (activate_batch && (previous_effect.f & DESTROYED) === 0) {\n\t\t\t// TODO we only need optional chaining here because `{#await ...}` blocks\n\t\t\t// are anomalous. Once we retire them we can get rid of it\n\t\t\tprevious_batch?.activate();\n\t\t\tprevious_batch?.apply();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\tset_reactivity_loss_tracker(null);\n\t\t\tset_dev_stack(previous_dev_stack);\n\t\t}\n\t};\n}\n\n/** `true` between a `save` thunk restoring a context and the end of that synchronous segment */\nvar restored = false;\n\n/**\n * Wraps an `await` expression in such a way that the effect context that was\n * active before the expression evaluated can be reapplied afterwards —\n * `await a + b` becomes `(await $.save(a))() + b`\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function save(promise) {\n\tvar restore = capture();\n\t// the context restored by an earlier `save` in this expression must not\n\t// outlive the synchronous segment that is about to end at this `await`\n\tunsave();\n\tvar value = await promise;\n\n\treturn () => {\n\t\trestore();\n\t\trestored = true;\n\t\treturn value;\n\t};\n}\n\n/**\n * Unset the context if a `save` thunk restored it in the current synchronous segment,\n * so that a foreign microtask can never run inside a restored reaction context.\n * Called at every suspension point, and at the end of async expression bodies —\n * `async () => (await $.save(a))().b` becomes `async () => { try { return (await $.save(a))().b; } finally { $.unsave(); } }`\n * @template T\n * @param {T} [value]\n * @returns {T}\n */\nexport function unsave(value) {\n\tif (restored) unset_context();\n\treturn /** @type {T} */ (value);\n}\n\n/**\n * Reset `current_async_effect` after the `promise` resolves, so\n * that we can emit `await_reactivity_loss` warnings\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function track_reactivity_loss(promise) {\n\tunsave();\n\tvar previous_reactivity_loss_tracker = reactivity_loss_tracker;\n\t// Ensure that unrelated reads after an async operation is kicked off don't cause false positives\n\tqueueMicrotask(() => {\n\t\tif (reactivity_loss_tracker === previous_reactivity_loss_tracker) {\n\t\t\tset_reactivity_loss_tracker(null);\n\t\t}\n\t});\n\n\tvar value = await promise;\n\n\treturn () => {\n\t\tset_reactivity_loss_tracker(previous_reactivity_loss_tracker);\n\t\t// While this can result in false negatives it also guards against the more important\n\t\t// false positives that would occur if this is the last in a chain of async operations,\n\t\t// and the reactivity_loss_tracker would then stay around until the next async operation happens.\n\t\tqueueMicrotask(() => {\n\t\t\tif (reactivity_loss_tracker === previous_reactivity_loss_tracker) {\n\t\t\t\tset_reactivity_loss_tracker(null);\n\t\t\t}\n\t\t});\n\n\t\treturn value;\n\t};\n}\n\n/**\n * Used in `for await` loops in DEV, so\n * that we can emit `await_reactivity_loss` warnings\n * after each `async_iterator` result resolves and\n * after the `async_iterator` return resolves (if it runs)\n * @template T\n * @template TReturn\n * @param {Iterable<T> | AsyncIterable<T>} iterable\n * @returns {AsyncGenerator<T, TReturn | undefined>}\n */\nexport async function* for_await_track_reactivity_loss(iterable) {\n\t// This is based on the algorithms described in ECMA-262:\n\t// ForIn/OfBodyEvaluation\n\t// https://tc39.es/ecma262/multipage/ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset\n\t// AsyncIteratorClose\n\t// https://tc39.es/ecma262/multipage/abstract-operations.html#sec-asynciteratorclose\n\n\t/** @type {AsyncIterator<T, TReturn>} */\n\t// @ts-ignore\n\tconst iterator = iterable[Symbol.asyncIterator]?.() ?? iterable[Symbol.iterator]?.();\n\n\tif (iterator === undefined) {\n\t\tthrow new TypeError('value is not async iterable');\n\t}\n\n\t// eslint-disable-next-line no-useless-assignment\n\tlet invoke_return = true;\n\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = (await track_reactivity_loss(iterator.next()))();\n\t\t\tif (done) {\n\t\t\t\tinvoke_return = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar prev = reactivity_loss_tracker;\n\t\t\ttry {\n\t\t\t\tyield value;\n\t\t\t} catch (e) {\n\t\t\t\tset_reactivity_loss_tracker(prev);\n\t\t\t\t// If the yield throws, we need to call `return` but not return its value, instead rethrow\n\t\t\t\tif (iterator.return !== undefined) {\n\t\t\t\t\t(await track_reactivity_loss(iterator.return()))();\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\tset_reactivity_loss_tracker(prev);\n\t\t}\n\t} catch (error) {\n\t\tinvoke_return = false;\n\t\tthrow error;\n\t} finally {\n\t\t// If the iterator had an abrupt completion (break) and `return` is defined on the iterator, call it and return the value\n\t\tif (invoke_return && iterator.return !== undefined) {\n\t\t\t// eslint-disable-next-line no-unsafe-finally\n\t\t\treturn /** @type {TReturn} */ ((await track_reactivity_loss(iterator.return()))().value);\n\t\t}\n\t}\n}\n\nexport function unset_context(deactivate_batch = true) {\n\trestored = false;\n\tset_active_effect(null);\n\tset_active_reaction(null);\n\tset_component_context(null);\n\tif (deactivate_batch) current_batch?.deactivate();\n\n\tif (DEV) {\n\t\tset_reactivity_loss_tracker(null);\n\t\tset_dev_stack(null);\n\t}\n}\n\n/**\n * @param {Array<() => void | Promise<void>>} thunks\n */\nexport function run(thunks) {\n\tconst restore = capture();\n\n\tconst decrement_pending = increment_pending();\n\n\tvar active = /** @type {Effect} */ (active_effect);\n\n\t/** @type {null | { error: any }} */\n\tvar errored = null;\n\n\t/** @param {any} error */\n\tconst handle_error = (error) => {\n\t\terrored = { error }; // wrap in object in case a promise rejects with a falsy value\n\n\t\tif (!aborted(active)) {\n\t\t\tinvoke_error_boundary(error, active);\n\t\t}\n\t};\n\n\tvar promise = Promise.resolve(thunks[0]()).catch(handle_error);\n\n\t/** @type {Blocker} */\n\tvar blocker = { promise, settled: false };\n\tvar blockers = [blocker];\n\n\tpromise.finally(() => {\n\t\tblocker.settled = true;\n\t\tunset_context();\n\t});\n\n\tfor (const fn of thunks.slice(1)) {\n\t\tpromise = promise\n\t\t\t.then(() => {\n\t\t\t\trestore();\n\n\t\t\t\ttry {\n\t\t\t\t\tif (errored) {\n\t\t\t\t\t\tthrow errored.error;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (aborted(active)) {\n\t\t\t\t\t\tthrow STALE_REACTION;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn();\n\t\t\t\t} finally {\n\t\t\t\t\t// We gotta unset context directly in case the function returns a promise, in which case\n\t\t\t\t\t// unset_context in .finally() would be too late ...\n\t\t\t\t\tunset_context();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(handle_error);\n\n\t\tconst blocker = { promise, settled: false };\n\t\tblockers.push(blocker);\n\n\t\tpromise.finally(() => {\n\t\t\tblocker.settled = true;\n\t\t\t// ... but we also need it after such a promise has resolved in case it restores our context\n\t\t\tunset_context();\n\t\t});\n\t}\n\n\tpromise\n\t\t// wait one more tick, so that template effects are\n\t\t// guaranteed to run before `$effect(...)`\n\t\t.then(() => Promise.resolve())\n\t\t.finally(decrement_pending);\n\n\treturn blockers;\n}\n\n/**\n * @param {Blocker[]} blockers\n */\nexport function wait(blockers) {\n\treturn Promise.all(blockers.map((b) => b.promise));\n}\n\n/**\n * @returns {(skip?: boolean) => void}\n */\nexport function increment_pending() {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tvar boundary = effect.b; // undefined if called outside the render tree, e.g. a standalone $effect.root\n\tvar batch = /** @type {Batch} */ (current_batch);\n\tvar blocking = !!boundary?.is_rendered();\n\n\tboundary?.update_pending_count(1, batch);\n\tbatch.increment(blocking, effect);\n\n\treturn () => {\n\t\tboundary?.update_pending_count(-1, batch);\n\t\tbatch.decrement(blocking, effect);\n\t};\n}\n","/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\n/** @import { Batch } from './batch.js'; */\n/** @import { Boundary } from '../dom/blocks/boundary.js'; */\nimport { DEV } from 'esm-env';\nimport {\n\tERROR_VALUE,\n\tDERIVED,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tASYNC,\n\tDESTROYED,\n\tCLEAN,\n\tREACTION_RAN,\n\tINERT\n} from '#client/constants';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tupdate_reaction,\n\tincrement_write_version,\n\tset_active_effect,\n\tpush_reaction_value,\n\tis_destroying_effect,\n\tupdate_effect,\n\tremove_reactions,\n\tskipped_deps,\n\tnew_deps\n} from '../runtime.js';\nimport { without_reactive_context } from '../dom/elements/bindings/shared.js';\nimport { equals, safe_equals } from './equality.js';\nimport * as e from '../errors.js';\nimport * as w from '../warnings.js';\nimport {\n\tasync_effect,\n\tdestroy_effect,\n\tdestroy_effect_children,\n\teffect_tracking,\n\tteardown\n} from './effects.js';\nimport { eager_effects, internal_set, set_eager_effects, source } from './sources.js';\nimport { get_error } from '../../shared/dev.js';\nimport { async_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { component_context } from '../context.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { batch_values, current_batch, previous_batch } from './batch.js';\nimport { increment_pending, unset_context } from './async.js';\nimport { deferred, includes, noop } from '../../shared/utils.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/**\n * This allows us to track 'reactivity loss' that occurs when signals\n * are read after a non-context-restoring `await`. Dev-only\n * @type {{ effect: Effect, effect_deps: Set<Value>, warned: boolean } | null}\n */\nexport let reactivity_loss_tracker = null;\n\n/** @param {{ effect: Effect, effect_deps: Set<Value>, warned: boolean } | null} v */\nexport function set_reactivity_loss_tracker(v) {\n\treactivity_loss_tracker = v;\n}\n\nexport const recent_async_deriveds = new Set();\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived(fn) {\n\tvar flags = DERIVED | DIRTY;\n\n\tif (active_effect !== null) {\n\t\t// Since deriveds are evaluated lazily, any effects created inside them are\n\t\t// created too late to ensure that the parent effect is added to the tree\n\t\tactive_effect.f |= EFFECT_PRESERVED;\n\t}\n\n\t/** @type {Derived<V>} */\n\tconst signal = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\teffects: null,\n\t\tequals,\n\t\tf: flags,\n\t\tfn,\n\t\treactions: null,\n\t\trv: 0,\n\t\tv: /** @type {V} */ (UNINITIALIZED),\n\t\twv: 0,\n\t\tparent: active_effect,\n\t\tac: null\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = get_error('created at');\n\t}\n\n\treturn signal;\n}\n\nexport const OBSOLETE = Symbol('obsolete');\n\n/**\n * @template V\n * @param {() => V | Promise<V>} fn\n * @param {string} [label]\n * @param {string} [location] If provided, print a warning if the value is not read immediately after update\n * @returns {Promise<Source<V>>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function async_derived(fn, label, location) {\n\tlet parent = /** @type {Effect | null} */ (active_effect);\n\n\tif (parent === null) {\n\t\te.async_derived_orphan();\n\t}\n\n\tvar promise = /** @type {Promise<V>} */ (/** @type {unknown} */ (undefined));\n\tvar signal = source(/** @type {V} */ (UNINITIALIZED));\n\n\tif (DEV) signal.label = label ?? fn.toString();\n\n\t// only suspend in async deriveds created on initialisation\n\tvar should_suspend = !active_reaction;\n\n\t/** @type {Set<ReturnType<typeof deferred<V>>>} */\n\tvar deferreds = new Set();\n\n\tasync_effect(() => {\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\tif (DEV) {\n\t\t\treactivity_loss_tracker = { effect, effect_deps: new Set(), warned: false };\n\t\t}\n\n\t\t/** @type {ReturnType<typeof deferred<V>>} */\n\t\tvar d = deferred();\n\t\tpromise = d.promise;\n\n\t\ttry {\n\t\t\t// If this code is changed at some point, make sure to still access the then property\n\t\t\t// of fn() to read any signals it might access, so that we track them as dependencies.\n\t\t\t// We call `unset_context` to undo any `save` calls that happen inside `fn()`\n\t\t\tPromise.resolve(fn())\n\t\t\t\t.then(d.resolve, (e) => {\n\t\t\t\t\t// if the promise was rejected by the user, via `getAbortSignal`, then\n\t\t\t\t\t// wait for a subsequent resolution instead of flushing the batch\n\t\t\t\t\tif (e !== STALE_REACTION) d.reject(e);\n\t\t\t\t})\n\t\t\t\t.finally(unset_context);\n\t\t} catch (error) {\n\t\t\td.reject(error);\n\t\t\tunset_context();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\tif (reactivity_loss_tracker) {\n\t\t\t\t// Reused deps from previous run (indices 0 to skipped_deps-1)\n\t\t\t\t// We deliberately only track direct dependencies of the async expression to encourage\n\t\t\t\t// dependencies being directly visible at the point of the expression\n\t\t\t\tif (effect.deps !== null) {\n\t\t\t\t\tfor (let i = 0; i < skipped_deps; i += 1) {\n\t\t\t\t\t\treactivity_loss_tracker.effect_deps.add(effect.deps[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// New deps discovered this run\n\t\t\t\tif (new_deps !== null) {\n\t\t\t\t\tfor (let i = 0; i < new_deps.length; i += 1) {\n\t\t\t\t\t\treactivity_loss_tracker.effect_deps.add(new_deps[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treactivity_loss_tracker = null;\n\t\t}\n\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\tif (should_suspend) {\n\t\t\t// we only increment the batch's pending state for updates, not creation, otherwise\n\t\t\t// we will decrement to zero before the work that depends on this promise (e.g. a\n\t\t\t// template effect) has initialized, causing the batch to resolve prematurely\n\t\t\tif ((effect.f & REACTION_RAN) !== 0) {\n\t\t\t\tvar decrement_pending = increment_pending();\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// boundary can be null if the async derived is inside an $effect.root not connected to the component render tree\n\t\t\t\tparent.b?.is_rendered()\n\t\t\t) {\n\t\t\t\tbatch.async_deriveds.get(effect)?.reject(OBSOLETE);\n\t\t\t} else {\n\t\t\t\t// While the boundary is still showing pending, a new run supersedes all older in-flight runs\n\t\t\t\t// for this async expression. Cancel eagerly so resolution cannot commit stale values.\n\t\t\t\tfor (const d of deferreds.values()) {\n\t\t\t\t\td.reject(OBSOLETE);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdeferreds.add(d);\n\t\t\tbatch.async_deriveds.set(effect, d);\n\t\t}\n\n\t\t/**\n\t\t * @param {any} value\n\t\t * @param {unknown} error\n\t\t */\n\t\tconst handler = (value, error = undefined) => {\n\t\t\tif (DEV) {\n\t\t\t\treactivity_loss_tracker = null;\n\t\t\t}\n\n\t\t\tdecrement_pending?.();\n\t\t\tdeferreds.delete(d);\n\n\t\t\tif (error === OBSOLETE) return;\n\n\t\t\tbatch.activate();\n\n\t\t\tif (error) {\n\t\t\t\tsignal.f |= ERROR_VALUE;\n\n\t\t\t\t// @ts-expect-error the error is the wrong type, but we don't care\n\t\t\t\tinternal_set(signal, error);\n\t\t\t} else {\n\t\t\t\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\t\t\t\tsignal.f ^= ERROR_VALUE;\n\t\t\t\t}\n\n\t\t\t\tif (DEV && location !== undefined && !signal.equals(value)) {\n\t\t\t\t\trecent_async_deriveds.add(signal);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (recent_async_deriveds.has(signal) && (effect.f & DESTROYED) === 0) {\n\t\t\t\t\t\t\tw.await_waterfall(/** @type {string} */ (signal.label), location);\n\t\t\t\t\t\t\trecent_async_deriveds.delete(signal);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tinternal_set(signal, value);\n\t\t\t}\n\n\t\t\tbatch.deactivate();\n\t\t};\n\n\t\td.promise.then(handler, (e) => handler(null, e || 'unknown'));\n\t});\n\n\tteardown(() => {\n\t\tfor (const d of deferreds) {\n\t\t\td.reject(OBSOLETE);\n\t\t}\n\t});\n\n\tif (DEV) {\n\t\t// add a flag that lets this be printed as a derived\n\t\t// when using `$inspect.trace()`\n\t\tsignal.f |= ASYNC;\n\t}\n\n\treturn new Promise((fulfil) => {\n\t\t/** @param {Promise<V>} p */\n\t\tfunction next(p) {\n\t\t\tfunction go() {\n\t\t\t\tif (p === promise) {\n\t\t\t\t\tfulfil(signal);\n\t\t\t\t} else {\n\t\t\t\t\t// if the effect re-runs before the initial promise\n\t\t\t\t\t// resolves, delay resolution until we have a value\n\t\t\t\t\tnext(promise);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp.then(go, go);\n\t\t}\n\n\t\tnext(promise);\n\t});\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function user_derived(fn) {\n\tconst d = derived(fn);\n\n\tif (!async_mode_flag) push_reaction_value(d);\n\n\treturn d;\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived_safe_equal(fn) {\n\tconst signal = derived(fn);\n\tsignal.equals = safe_equals;\n\treturn signal;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function destroy_derived_effects(derived) {\n\tvar effects = derived.effects;\n\n\tif (effects !== null) {\n\t\tderived.effects = null;\n\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdestroy_effect(/** @type {Effect} */ (effects[i]));\n\t\t}\n\t}\n}\n\n/**\n * The currently updating deriveds, used to detect infinite recursion\n * in dev mode and provide a nicer error than 'too much recursion'\n * @type {Derived[]}\n */\nlet stack = [];\n\n/**\n * @template T\n * @param {Derived} derived\n * @returns {T}\n */\nexport function execute_derived(derived) {\n\tvar value;\n\tvar prev_active_effect = active_effect;\n\tvar parent = derived.parent;\n\n\tif (\n\t\t!is_destroying_effect &&\n\t\tparent !== null &&\n\t\tderived.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead\n\t\t(parent.f & (DESTROYED | INERT)) !== 0\n\t) {\n\t\tw.derived_inert();\n\n\t\treturn derived.v;\n\t}\n\n\tset_active_effect(parent);\n\n\tif (DEV) {\n\t\tlet prev_eager_effects = eager_effects;\n\t\tset_eager_effects(new Set());\n\t\ttry {\n\t\t\tif (includes.call(stack, derived)) {\n\t\t\t\te.derived_references_self();\n\t\t\t}\n\n\t\t\tstack.push(derived);\n\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t\tset_eager_effects(prev_eager_effects);\n\t\t\tstack.pop();\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function update_derived(derived) {\n\tvar value = execute_derived(derived);\n\n\tif (!derived.equals(value)) {\n\t\tderived.wv = increment_write_version();\n\n\t\t// in a fork, we don't update the underlying value, just `batch_values`.\n\t\t// the underlying value will be updated when the fork is committed.\n\t\t// otherwise, the next time we get here after a 'real world' state\n\t\t// change, `derived.equals` may incorrectly return `true`\n\t\tif (!current_batch?.is_fork || derived.deps === null) {\n\t\t\tif (current_batch !== null) {\n\t\t\t\t// We also write to previous_batch because if it exists, it is a sign that we're\n\t\t\t\t// currently in the process of flushing effects. These updates to deriveds may belong\n\t\t\t\t// to the previous batch, not the new one (which can already exist if an earlier\n\t\t\t\t// effect wrote to a source). This can cause bugs when running batch.#commit() later,\n\t\t\t\t// but not adding it to current_batch can, too, so we add it to both.\n\t\t\t\t// See https://github.com/sveltejs/svelte/pull/18117 for more details.\n\t\t\t\tcurrent_batch.capture(derived, value, true);\n\t\t\t\tprevious_batch?.capture(derived, value, true);\n\t\t\t} else {\n\t\t\t\tderived.v = value;\n\t\t\t}\n\n\t\t\t// deriveds without dependencies should never be recomputed\n\t\t\tif (derived.deps === null) {\n\t\t\t\tset_signal_status(derived, CLEAN);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// don't mark derived clean if we're reading it inside a\n\t// cleanup function, or it will cache a stale value\n\tif (is_destroying_effect) {\n\t\treturn;\n\t}\n\n\t// During time traveling we don't want to reset the status so that\n\t// traversal of the graph in the other batches still happens\n\tif (batch_values !== null) {\n\t\t// only cache the value if we're in a tracking context, otherwise we won't\n\t\t// clear the cache in `mark_reactions` when dependencies are updated\n\t\tif (effect_tracking() || current_batch?.is_fork) {\n\t\t\tbatch_values.set(derived, value);\n\t\t}\n\t} else {\n\t\tupdate_derived_status(derived);\n\t}\n}\n\n/**\n * @param {Derived} derived\n */\nexport function freeze_derived_effects(derived) {\n\tif (derived.effects === null) return;\n\n\tfor (const e of derived.effects) {\n\t\t// if the effect has a teardown function or abort signal, call it\n\t\tif (e.teardown || e.ac) {\n\t\t\te.teardown?.();\n\t\t\tif (e.ac !== null) {\n\t\t\t\twithout_reactive_context(() => {\n\t\t\t\t\t/** @type {AbortController} */ (e.ac).abort(STALE_REACTION);\n\t\t\t\t\te.ac = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// make it a noop so it doesn't get called again if the derived\n\t\t\t// is unfrozen. we don't set it to `null`, because the existence\n\t\t\t// of a teardown function is what determines whether the\n\t\t\t// effect runs again during unfreezing (but not for teardown-only effects)\n\t\t\tif (e.fn !== null) e.teardown = noop;\n\n\t\t\tremove_reactions(e, 0);\n\t\t\tdestroy_effect_children(e);\n\t\t}\n\t}\n}\n\n/**\n * @param {Derived} derived\n */\nexport function unfreeze_derived_effects(derived) {\n\tif (derived.effects === null) return;\n\n\tfor (const e of derived.effects) {\n\t\t// if the effect was previously frozen — indicated by the presence\n\t\t// of a teardown function — unfreeze it\n\t\tif (e.teardown && e.fn !== null) {\n\t\t\tupdate_effect(e);\n\t\t}\n\t}\n}\n","/** @import { Blocker, ComponentContext, ComponentContextLegacy, Derived, Effect, TemplateNode, TransitionManager } from '#client' */\nimport {\n\tis_dirty,\n\tactive_effect,\n\tactive_reaction,\n\tupdate_effect,\n\tget,\n\tis_destroying_effect,\n\tremove_reactions,\n\tset_active_reaction,\n\tset_is_destroying_effect,\n\tuntrack,\n\tuntracking,\n\tset_active_effect\n} from '../runtime.js';\nimport {\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tRENDER_EFFECT,\n\tEFFECT,\n\tDESTROYED,\n\tINERT,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tEFFECT_TRANSPARENT,\n\tDERIVED,\n\tCLEAN,\n\tEAGER_EFFECT,\n\tHEAD_EFFECT,\n\tMAYBE_DIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tUSER_EFFECT,\n\tASYNC,\n\tCONNECTED,\n\tMANAGED_EFFECT,\n\tDESTROYING,\n\tPAUSED\n} from '#client/constants';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport * as e from '../errors.js';\nimport { DEV } from 'esm-env';\nimport { define_property } from '../../shared/utils.js';\nimport { get_next_sibling } from '../dom/operations.js';\nimport { component_context, dev_current_component_function, dev_stack } from '../context.js';\nimport { Batch, collected_effects, current_batch } from './batch.js';\nimport { flatten } from './async.js';\nimport { without_reactive_context } from '../dom/elements/bindings/shared.js';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {'$effect' | '$effect.pre' | '$inspect'} rune\n */\nexport function validate_effect(rune) {\n\tif (active_effect === null) {\n\t\tif (active_reaction === null) {\n\t\t\te.effect_orphan(rune);\n\t\t}\n\n\t\te.effect_in_unowned_derived();\n\t}\n\n\tif (is_destroying_effect) {\n\t\te.effect_in_teardown(rune);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect} parent_effect\n */\nfunction push_effect(effect, parent_effect) {\n\tvar parent_last = parent_effect.last;\n\tif (parent_last === null) {\n\t\tparent_effect.last = parent_effect.first = effect;\n\t} else {\n\t\tparent_last.next = effect;\n\t\teffect.prev = parent_last;\n\t\tparent_effect.last = effect;\n\t}\n}\n\n/**\n * @param {number} type\n * @param {null | (() => void | (() => void))} fn\n * @returns {Effect}\n */\nfunction create_effect(type, fn) {\n\tvar parent = active_effect;\n\n\tif (DEV) {\n\t\t// Ensure the parent is never an inspect effect\n\t\twhile (parent !== null && (parent.f & EAGER_EFFECT) !== 0) {\n\t\t\tparent = parent.parent;\n\t\t}\n\t}\n\n\tif (parent !== null && (parent.f & INERT) !== 0) {\n\t\ttype |= INERT;\n\t}\n\n\t/** @type {Effect} */\n\tvar effect = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\tnodes: null,\n\t\tf: type | DIRTY | CONNECTED,\n\t\tfirst: null,\n\t\tfn,\n\t\tlast: null,\n\t\tnext: null,\n\t\tparent,\n\t\tb: parent && parent.b,\n\t\tprev: null,\n\t\tteardown: null,\n\t\twv: 0,\n\t\tac: null\n\t};\n\n\tif (DEV) {\n\t\teffect.component_function = dev_current_component_function;\n\t}\n\n\tcurrent_batch?.register_created_effect(effect);\n\n\t/** @type {Effect | null} */\n\tvar e = effect;\n\n\tif ((type & EFFECT) !== 0) {\n\t\tif (collected_effects !== null) {\n\t\t\t// created during traversal — collect and run afterwards\n\t\t\tcollected_effects.push(effect);\n\t\t} else {\n\t\t\t// schedule for later\n\t\t\tBatch.ensure().schedule(effect);\n\t\t}\n\t} else if (fn !== null) {\n\t\ttry {\n\t\t\tupdate_effect(effect);\n\t\t} catch (e) {\n\t\t\tdestroy_effect(effect);\n\t\t\tthrow e;\n\t\t}\n\n\t\t// if an effect doesn't need to be kept in the tree (because it\n\t\t// won't re-run, has no DOM, and has no teardown etc)\n\t\t// then we skip it and go to its child (if any)\n\t\tif (\n\t\t\te.deps === null &&\n\t\t\te.teardown === null &&\n\t\t\te.nodes === null &&\n\t\t\te.first === e.last && // either `null`, or a singular child\n\t\t\t(e.f & EFFECT_PRESERVED) === 0\n\t\t) {\n\t\t\te = e.first;\n\t\t\tif ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {\n\t\t\t\te.f |= EFFECT_TRANSPARENT;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (e !== null) {\n\t\te.parent = parent;\n\n\t\tif (parent !== null) {\n\t\t\tpush_effect(e, parent);\n\t\t}\n\n\t\t// if we're in a derived, add the effect there too\n\t\tif (\n\t\t\tactive_reaction !== null &&\n\t\t\t(active_reaction.f & DERIVED) !== 0 &&\n\t\t\t(type & ROOT_EFFECT) === 0\n\t\t) {\n\t\t\tvar derived = /** @type {Derived} */ (active_reaction);\n\t\t\t(derived.effects ??= []).push(e);\n\t\t}\n\t}\n\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect.tracking()`\n * @returns {boolean}\n */\nexport function effect_tracking() {\n\treturn active_reaction !== null && !untracking;\n}\n\n/**\n * @param {() => void} fn\n */\nexport function teardown(fn) {\n\tconst effect = create_effect(RENDER_EFFECT, null);\n\tset_signal_status(effect, CLEAN);\n\teffect.teardown = fn;\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect(...)`\n * @param {() => void | (() => void)} fn\n */\nexport function user_effect(fn) {\n\tvalidate_effect('$effect');\n\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect'\n\t\t});\n\t}\n\n\t// Non-nested `$effect(...)` in a component should be deferred\n\t// until the component is mounted\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\tvar defer =\n\t\t!active_reaction &&\n\t\t(flags & BRANCH_EFFECT) !== 0 &&\n\t\tcomponent_context !== null &&\n\t\t!component_context.i;\n\n\tif (defer) {\n\t\t// Top-level `$effect(...)` in an unmounted component — defer until mount\n\t\tvar context = /** @type {ComponentContext} */ (component_context);\n\t\t(context.e ??= []).push(fn);\n\t} else {\n\t\t// Everything else — create immediately\n\t\treturn create_user_effect(fn);\n\t}\n}\n\n/**\n * @param {() => void | (() => void)} fn\n */\nexport function create_user_effect(fn) {\n\treturn create_effect(EFFECT | USER_EFFECT, fn);\n}\n\n/**\n * Internal representation of `$effect.pre(...)`\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function user_pre_effect(fn) {\n\tvalidate_effect('$effect.pre');\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect.pre'\n\t\t});\n\t}\n\treturn create_effect(RENDER_EFFECT | USER_EFFECT, fn);\n}\n\n/** @param {() => void | (() => void)} fn */\nexport function eager_effect(fn) {\n\treturn create_effect(EAGER_EFFECT, fn);\n}\n\n/**\n * Internal representation of `$effect.root(...)`\n * @param {() => void | (() => void)} fn\n * @returns {() => void}\n */\nexport function effect_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);\n\n\treturn () => {\n\t\tdestroy_effect(effect);\n\t};\n}\n\n/**\n * An effect root whose children can transition out\n * @param {() => void} fn\n * @returns {(options?: { outro?: boolean }) => Promise<void>}\n */\nexport function component_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);\n\n\treturn (options = {}) => {\n\t\treturn new Promise((fulfil) => {\n\t\t\tif (options.outro) {\n\t\t\t\tpause_effect(effect, () => {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t\tfulfil(undefined);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdestroy_effect(effect);\n\t\t\t\tfulfil(undefined);\n\t\t\t}\n\t\t});\n\t};\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function effect(fn) {\n\treturn create_effect(EFFECT, fn);\n}\n\n/**\n * Internal representation of `$: ..`\n * @param {() => any} deps\n * @param {() => void | (() => void)} fn\n */\nexport function legacy_pre_effect(deps, fn) {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\t/** @type {{ effect: null | Effect, ran: boolean, deps: () => any }} */\n\tvar token = { effect: null, ran: false, deps };\n\n\tcontext.l.$.push(token);\n\n\ttoken.effect = render_effect(() => {\n\t\tdeps();\n\n\t\t// If this legacy pre effect has already run before the end of the reset, then\n\t\t// bail out to emulate the same behavior.\n\t\tif (token.ran) return;\n\n\t\ttoken.ran = true;\n\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t// here, we lie: by setting `active_effect` to be the parent branch, any writes\n\t\t// that happen inside `fn` will _not_ cause an unnecessary reschedule, because\n\t\t// the affected effects will be children of `active_effect`. this is safe\n\t\t// because these effects are known to run in the correct order\n\t\ttry {\n\t\t\tset_active_effect(effect.parent);\n\t\t\tuntrack(fn);\n\t\t} finally {\n\t\t\tset_active_effect(effect);\n\t\t}\n\t});\n}\n\nexport function legacy_pre_effect_reset() {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\trender_effect(() => {\n\t\t// Run dirty `$:` statements\n\t\tfor (var token of context.l.$) {\n\t\t\ttoken.deps();\n\n\t\t\tvar effect = token.effect;\n\n\t\t\t// If the effect is CLEAN, then make it MAYBE_DIRTY. This ensures we traverse through\n\t\t\t// the effects dependencies and correctly ensure each dependency is up-to-date.\n\t\t\tif ((effect.f & CLEAN) !== 0 && effect.deps !== null) {\n\t\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t\t}\n\n\t\t\tif (is_dirty(effect)) {\n\t\t\t\tupdate_effect(effect);\n\t\t\t}\n\n\t\t\ttoken.ran = false;\n\t\t}\n\t});\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function async_effect(fn) {\n\treturn create_effect(ASYNC | EFFECT_PRESERVED, fn);\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function render_effect(fn, flags = 0) {\n\treturn create_effect(RENDER_EFFECT | flags, fn);\n}\n\n/**\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function template_effect(fn, sync = [], async = [], blockers = []) {\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(RENDER_EFFECT, () => {\n\t\t\tfn(...values.map(get));\n\t\t});\n\t});\n}\n\n/**\n * Like `template_effect`, but with an effect which is deferred until the batch commits\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function deferred_template_effect(fn, sync = [], async = [], blockers = []) {\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(EFFECT, () => fn(...values.map(get)));\n\t});\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function block(fn, flags = 0) {\n\tvar effect = create_effect(BLOCK_EFFECT | flags, fn);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function managed(fn, flags = 0) {\n\tvar effect = create_effect(MANAGED_EFFECT | flags, fn);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n */\nexport function branch(fn) {\n\treturn create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn);\n}\n\n/**\n * @param {Effect} effect\n */\nexport function execute_effect_teardown(effect) {\n\tvar teardown = effect.teardown;\n\tif (teardown !== null) {\n\t\tconst previously_destroying_effect = is_destroying_effect;\n\t\tconst previous_reaction = active_reaction;\n\t\tset_is_destroying_effect(true);\n\t\tset_active_reaction(null);\n\t\ttry {\n\t\t\tteardown.call(null);\n\t\t} catch (error) {\n\t\t\t// Route teardown errors through the boundary system so that a live\n\t\t\t// ancestor <svelte:boundary> can handle them. Boundaries that are\n\t\t\t// themselves mid-teardown are skipped by invoke_error_boundary.\n\t\t\tinvoke_error_boundary(error, effect.parent);\n\t\t} finally {\n\t\t\tset_is_destroying_effect(previously_destroying_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @param {boolean} remove_dom\n * @returns {void}\n */\nexport function destroy_effect_children(signal, remove_dom = false) {\n\tvar effect = signal.first;\n\tsignal.first = signal.last = null;\n\n\twhile (effect !== null) {\n\t\tconst controller = effect.ac;\n\n\t\tif (controller !== null) {\n\t\t\twithout_reactive_context(() => {\n\t\t\t\tcontroller.abort(STALE_REACTION);\n\t\t\t});\n\t\t}\n\n\t\tvar next = effect.next;\n\n\t\tif ((effect.f & ROOT_EFFECT) !== 0) {\n\t\t\t// this is now an independent root\n\t\t\teffect.parent = null;\n\t\t} else {\n\t\t\tdestroy_effect(effect, remove_dom);\n\t\t}\n\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function destroy_block_effect_children(signal) {\n\tvar effect = signal.first;\n\n\twhile (effect !== null) {\n\t\tvar next = effect.next;\n\t\tif ((effect.f & BRANCH_EFFECT) === 0) {\n\t\t\tdestroy_effect(effect);\n\t\t}\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} [remove_dom]\n * @returns {void}\n */\nexport function destroy_effect(effect, remove_dom = true) {\n\tvar removed = false;\n\n\tif (\n\t\t(remove_dom || (effect.f & HEAD_EFFECT) !== 0) &&\n\t\teffect.nodes !== null &&\n\t\teffect.nodes.end !== null\n\t) {\n\t\tremove_effect_dom(effect.nodes.start, /** @type {TemplateNode} */ (effect.nodes.end));\n\t\tremoved = true;\n\t}\n\n\teffect.f |= DESTROYING;\n\tdestroy_effect_children(effect, remove_dom && !removed);\n\tremove_reactions(effect, 0);\n\n\tvar transitions = effect.nodes && effect.nodes.t;\n\n\tif (transitions !== null) {\n\t\tfor (const transition of transitions) {\n\t\t\ttransition.stop();\n\t\t}\n\t}\n\n\texecute_effect_teardown(effect);\n\n\teffect.f ^= DESTROYING;\n\teffect.f |= DESTROYED;\n\n\tvar parent = effect.parent;\n\n\t// If the parent doesn't have any children, then skip this work altogether\n\tif (parent !== null && parent.first !== null) {\n\t\tunlink_effect(effect);\n\t}\n\n\tif (DEV) {\n\t\teffect.component_function = null;\n\t}\n\n\t// `first` and `child` are nulled out in destroy_effect_children\n\t// we don't null out `parent` so that error propagation can work correctly\n\teffect.next =\n\t\teffect.prev =\n\t\teffect.teardown =\n\t\teffect.ctx =\n\t\teffect.deps =\n\t\teffect.fn =\n\t\teffect.nodes =\n\t\teffect.ac =\n\t\teffect.b =\n\t\t\tnull;\n}\n\n/**\n *\n * @param {TemplateNode | null} node\n * @param {TemplateNode} end\n */\nexport function remove_effect_dom(node, end) {\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : get_next_sibling(node);\n\n\t\tnode.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n * Detach an effect from the effect tree, freeing up memory and\n * reducing the amount of work that happens on subsequent traversals\n * @param {Effect} effect\n */\nexport function unlink_effect(effect) {\n\tvar parent = effect.parent;\n\tvar prev = effect.prev;\n\tvar next = effect.next;\n\n\tif (prev !== null) prev.next = next;\n\tif (next !== null) next.prev = prev;\n\n\tif (parent !== null) {\n\t\tif (parent.first === effect) parent.first = next;\n\t\tif (parent.last === effect) parent.last = prev;\n\t}\n}\n\n/**\n * When a block effect is removed, we don't immediately destroy it or yank it\n * out of the DOM, because it might have transitions. Instead, we 'pause' it.\n * It stays around (in memory, and in the DOM) until outro transitions have\n * completed, and if the state change is reversed then we _resume_ it.\n * A paused effect does not update, and the DOM subtree becomes inert.\n * @param {Effect} effect\n * @param {() => void} [callback]\n * @param {boolean} [destroy]\n */\nexport function pause_effect(effect, callback, destroy = true) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\n\teffect.f |= PAUSED;\n\tpause_children(effect, transitions, true);\n\n\tvar fn = () => {\n\t\tif (destroy) destroy_effect(effect);\n\t\tif (callback) callback();\n\t};\n\n\tvar remaining = transitions.length;\n\tif (remaining > 0) {\n\t\tvar check = () => --remaining || fn();\n\t\tfor (var transition of transitions) {\n\t\t\ttransition.out(check);\n\t\t}\n\t} else {\n\t\tfn();\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {TransitionManager[]} transitions\n * @param {boolean} local\n */\nfunction pause_children(effect, transitions, local) {\n\tif ((effect.f & INERT) !== 0) return;\n\teffect.f ^= INERT;\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransitions.push(transition);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\n\t\t// If this child is a root effect, then it will become an independent root when its parent\n\t\t// is destroyed, it should therefore not become inert nor partake in transitions.\n\t\tif ((child.f & ROOT_EFFECT) === 0) {\n\t\t\tvar transparent =\n\t\t\t\t(child.f & EFFECT_TRANSPARENT) !== 0 ||\n\t\t\t\t// If this is a branch effect without a block effect parent,\n\t\t\t\t// it means the parent block effect was pruned. In that case,\n\t\t\t\t// transparency information was transferred to the branch effect.\n\t\t\t\t((child.f & BRANCH_EFFECT) !== 0 && (effect.f & BLOCK_EFFECT) !== 0);\n\t\t\t// TODO we don't need to call pause_children recursively with a linked list in place\n\t\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t\t// through the tree.\n\t\t\tpause_children(child, transitions, transparent ? local : false);\n\t\t}\n\n\t\tchild = sibling;\n\t}\n}\n\n/**\n * The opposite of `pause_effect`. We call this if (for example)\n * `x` becomes falsy then truthy: `{#if x}...{/if}`\n * @param {Effect} effect\n */\nexport function resume_effect(effect) {\n\teffect.f &= ~PAUSED;\n\tresume_children(effect, true);\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} local\n */\nfunction resume_children(effect, local) {\n\t// this subtree was paused for its own reasons (e.g. a block whose condition\n\t// is still false) — its controller will resume or destroy it\n\tif ((effect.f & PAUSED) !== 0) return;\n\n\tif ((effect.f & INERT) === 0) return;\n\teffect.f ^= INERT;\n\n\t// If a dependency of this effect changed while it was paused,\n\t// schedule the effect to update. we don't use `is_dirty`\n\t// here because we don't want to eagerly recompute a derived like\n\t// `{#if foo}{foo.bar()}{/if}` if `foo` is now `undefined\n\tif ((effect.f & CLEAN) === 0) {\n\t\tset_signal_status(effect, DIRTY);\n\t\tBatch.ensure().schedule(effect); // Assumption: This happens during the commit phase of the batch, causing another flush, but it's safe\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call resume_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tresume_children(child, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransition.in();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function aborted(effect = /** @type {Effect} */ (active_effect)) {\n\treturn (effect.f & DESTROYED) !== 0;\n}\n\n/**\n * @param {Effect} effect\n * @param {DocumentFragment} fragment\n */\nexport function move_effect(effect, fragment) {\n\tif (!effect.nodes) return;\n\n\t/** @type {TemplateNode | null} */\n\tvar node = effect.nodes.start;\n\tvar end = effect.nodes.end;\n\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : get_next_sibling(node);\n\n\t\tfragment.append(node);\n\t\tnode = next;\n\t}\n}\n","/** @import { Fork } from 'svelte' */\n/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport {\n\tBLOCK_EFFECT,\n\tBRANCH_EFFECT,\n\tCLEAN,\n\tDESTROYED,\n\tDIRTY,\n\tEFFECT,\n\tASYNC,\n\tINERT,\n\tRENDER_EFFECT,\n\tROOT_EFFECT,\n\tMAYBE_DIRTY,\n\tDERIVED,\n\tEAGER_EFFECT,\n\tERROR_VALUE,\n\tMANAGED_EFFECT,\n\tREACTION_RAN,\n\tDESTROYING\n} from '#client/constants';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { deferred, define_property, includes } from '../../shared/utils.js';\nimport {\n\tactive_reaction,\n\tget,\n\tincrement_write_version,\n\tis_dirty,\n\tupdate_effect\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { flush_tasks, queue_micro_task } from '../dom/task.js';\nimport { DEV } from 'esm-env';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport { flush_eager_effects, old_values, set_eager_effects, source, update } from './sources.js';\nimport { eager_effect, teardown, unlink_effect } from './effects.js';\nimport { defer_effect } from './utils.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { set_signal_status } from './status.js';\nimport { invariant } from '../../shared/dev.js';\nimport { log_effect_tree } from '../dev/debug.js';\nimport { OBSOLETE } from './deriveds.js';\n\n/** @type {Batch | null} */\nlet first_batch = null;\n\n/** @type {Batch | null} */\nlet last_batch = null;\n\n/** @type {Batch | null} */\nexport let current_batch = null;\n\n/**\n * This is needed to avoid overwriting inputs\n * @type {Batch | null}\n */\nexport let previous_batch = null;\n\n/**\n * When time travelling (i.e. working in one batch, while other batches\n * still have ongoing work), we ignore the real values of affected\n * signals in favour of their values within the batch\n * @type {Map<Value, any> | null}\n */\nexport let batch_values = null;\n\n/** @type {Effect | null} */\nlet last_scheduled_effect = null;\n\nexport let is_flushing_sync = false;\nlet is_processing = false;\n\n/**\n * During traversal, this is an array. Newly created effects are (if not immediately\n * executed) pushed to this array, rather than going through the scheduling\n * rigamarole that would cause another turn of the flush loop.\n * @type {Effect[] | null}\n */\nexport let collected_effects = null;\n\n/**\n * An array of effects that are marked during traversal as a result of a `set`\n * (not `internal_set`) call. These will be added to the next batch and\n * trigger another `batch.process()`\n * @type {Effect[] | null}\n * @deprecated when we get rid of legacy mode and stores, we can get rid of this\n */\nexport let legacy_updates = null;\n\nvar flush_count = 0;\n\n/** @type {Set<Value>} */\nvar source_stacks = new Set();\n\nlet uid = 1;\n\nexport class Batch {\n\tid = uid++;\n\n\t/** True as soon as `#process` was called */\n\t#started = false;\n\n\tlinked = true;\n\n\t/** @type {Batch | null} */\n\t#prev = null;\n\n\t/** @type {Batch | null} */\n\t#next = null;\n\n\t/** @type {Map<Effect, ReturnType<typeof deferred<any>>>} */\n\tasync_deriveds = new Map();\n\n\t/**\n\t * The current values of any signals that are updated in this batch.\n\t * Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)\n\t * They keys of this map are identical to `this.#previous`\n\t * @type {Map<Value, [any, boolean]>}\n\t */\n\tcurrent = new Map();\n\n\t/**\n\t * The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place.\n\t * They keys of this map are identical to `this.#current`\n\t * @type {Map<Value, any>}\n\t */\n\tprevious = new Map();\n\n\t/**\n\t * When the batch is committed (and the DOM is updated), we need to remove old branches\n\t * and append new ones by calling the functions added inside (if/each/key/etc) blocks\n\t * @type {Set<(batch: Batch) => void>}\n\t */\n\t#commit_callbacks = new Set();\n\n\t/**\n\t * If a fork is discarded, we need to destroy any effects that are no longer needed\n\t * @type {Set<(batch: Batch) => void>}\n\t */\n\t#discard_callbacks = new Set();\n\n\t/**\n\t * The number of async effects that are currently in flight\n\t */\n\t#pending = 0;\n\n\t/**\n\t * Async effects that are currently in flight, _not_ inside a pending boundary\n\t * @type {Map<Effect, number>}\n\t */\n\t#blocking_pending = new Map();\n\n\t/**\n\t * A deferred that resolves when the batch is committed, used with `settled()`\n\t * TODO replace with Promise.withResolvers once supported widely enough\n\t * @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}\n\t */\n\t#deferred = null;\n\n\t/**\n\t * Effects that were scheduled in this batch but not yet 'resolved' into the\n\t * root effects that need to be flushed. Resolving — the upwards traversal that\n\t * marks the path to each effect on the shared effect tree (see #resolve) — is\n\t * deferred until the batch is processed, so that the markers are created and\n\t * consumed within a single traversal. Scheduling into other batches (which can\n\t * happen concurrently, e.g. while a batch is committed) can therefore never\n\t * observe (and be confused by) this batch's markers.\n\t * May contain duplicates — deduplication happens during resolving\n\t * @type {Effect[]}\n\t */\n\t#scheduled = [];\n\n\t/**\n\t * Effects created while this batch was active.\n\t * @type {Effect[]}\n\t */\n\t#new_effects = [];\n\n\t/**\n\t * Deferred effects (which run after async work has completed) that are DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#dirty_effects = new Set();\n\n\t/**\n\t * Deferred effects that are MAYBE_DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A map of branches that still exist, but will be destroyed when this batch\n\t * is committed — we skip over these during `process`.\n\t * The value contains child effects that were dirty/maybe_dirty before being reset,\n\t * so they can be rescheduled if the branch survives.\n\t * @type {Map<Effect, { d: Effect[], m: Effect[] }>}\n\t */\n\t#skipped_branches = new Map();\n\n\t/**\n\t * Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing\n\t * @type {Set<Effect>}\n\t */\n\t#unskipped_branches = new Set();\n\n\tis_fork = false;\n\n\t#decrement_queued = false;\n\n\tconstructor() {\n\t\t// link batch\n\t\tif (last_batch === null) {\n\t\t\tfirst_batch = last_batch = this;\n\t\t} else {\n\t\t\tlast_batch.#next = this;\n\t\t\tthis.#prev = last_batch;\n\t\t}\n\n\t\tlast_batch = this;\n\t}\n\n\t#is_deferred() {\n\t\tif (this.is_fork) return true;\n\n\t\tfor (const effect of this.#blocking_pending.keys()) {\n\t\t\tvar e = effect;\n\t\t\tvar skipped = false;\n\n\t\t\twhile (e.parent !== null) {\n\t\t\t\tif (this.#skipped_branches.has(e)) {\n\t\t\t\t\tskipped = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\te = e.parent;\n\t\t\t}\n\n\t\t\tif (!skipped) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Add an effect to the #skipped_branches map and reset its children\n\t * @param {Effect} effect\n\t */\n\tskip_effect(effect) {\n\t\tif (!this.#skipped_branches.has(effect)) {\n\t\t\tthis.#skipped_branches.set(effect, { d: [], m: [] });\n\t\t}\n\t\tthis.#unskipped_branches.delete(effect);\n\t}\n\n\t/**\n\t * Remove an effect from the #skipped_branches map and reschedule\n\t * any tracked dirty/maybe_dirty child effects\n\t * @param {Effect} effect\n\t * @param {(e: Effect) => void} callback\n\t */\n\tunskip_effect(effect, callback = (e) => this.schedule(e)) {\n\t\tvar tracked = this.#skipped_branches.get(effect);\n\t\tif (tracked) {\n\t\t\tthis.#skipped_branches.delete(effect);\n\n\t\t\tfor (var e of tracked.d) {\n\t\t\t\tset_signal_status(e, DIRTY);\n\t\t\t\tcallback(e);\n\t\t\t}\n\n\t\t\tfor (e of tracked.m) {\n\t\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\t\tcallback(e);\n\t\t\t}\n\t\t}\n\t\tthis.#unskipped_branches.add(effect);\n\t}\n\n\t/**\n\t * Convert the effects that were scheduled in this batch into the root effects\n\t * that need to be traversed, marking the path to each effect (by clearing the\n\t * `CLEAN` flag on ancestor branches) so that the traversal can find them.\n\t * This happens right before traversal rather than at scheduling time, so that\n\t * the markers left on the (shared) effect tree are created and consumed within\n\t * a single traversal — scheduling into other batches can never observe them\n\t * @returns {Effect[]}\n\t */\n\t#resolve() {\n\t\t/** @type {Effect[]} */\n\t\tvar roots = [];\n\n\t\tfor (const effect of this.#scheduled) {\n\t\t\t// skip effects that are destroyed, or that already ran (e.g. because\n\t\t\t// they were reached by the traversal that preceded a drain iteration,\n\t\t\t// or because they were scheduled twice)\n\t\t\tif ((effect.f & DESTROYED) !== 0 || (effect.f & (DIRTY | MAYBE_DIRTY)) === 0) continue;\n\n\t\t\tvar e = effect;\n\t\t\tvar covered = false;\n\n\t\t\twhile (e.parent !== null) {\n\t\t\t\te = e.parent;\n\t\t\t\tvar flags = e.f;\n\n\t\t\t\tif ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\t\t\tif ((flags & CLEAN) === 0) {\n\t\t\t\t\t\t// the path to the root was already marked, meaning the\n\t\t\t\t\t\t// root was already collected — nothing left to do\n\t\t\t\t\t\tcovered = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\te.f ^= CLEAN;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!covered) {\n\t\t\t\troots.push(e);\n\t\t\t}\n\t\t}\n\n\t\tthis.#scheduled = [];\n\n\t\treturn roots;\n\t}\n\n\t#process() {\n\t\tthis.#started = true;\n\n\t\tif (DEV) {\n\t\t\t// track all the values that were updated during this flush,\n\t\t\t// so that they can be reset afterwards\n\t\t\tfor (const value of this.current.keys()) {\n\t\t\t\tsource_stacks.add(value);\n\t\t\t}\n\t\t}\n\n\t\t// We always reschedule previously-deferred effects, not just when\n\t\t// #is_deferred() is true, because traversing the tree could make\n\t\t// an if block that contains the last blocking pending effect falsy,\n\t\t// causing the block to no longer be deferred.\n\t\tfor (const e of this.#dirty_effects) {\n\t\t\tthis.#maybe_dirty_effects.delete(e);\n\t\t\tset_signal_status(e, DIRTY);\n\t\t\tthis.schedule(e);\n\t\t}\n\n\t\tfor (const e of this.#maybe_dirty_effects) {\n\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\tthis.schedule(e);\n\t\t}\n\n\t\tthis.apply();\n\n\t\t/** @type {Effect[]} */\n\t\tvar effects = (collected_effects = []);\n\n\t\t/** @type {Effect[]} */\n\t\tvar render_effects = [];\n\n\t\t/**\n\t\t * @type {Effect[]}\n\t\t * @deprecated when we get rid of legacy mode and stores, we can get rid of this\n\t\t */\n\t\tvar updates = (legacy_updates = []);\n\n\t\t// Effects can be scheduled during traversal (e.g. because a parent each/await/etc\n\t\t// block updated an internal source, or because an effect invalidated itself)\n\t\t// hence we loop until there are no more scheduled effects.\n\t\twhile (this.#scheduled.length > 0) {\n\t\t\tif (flush_count++ > 1000) {\n\t\t\t\tthis.#unlink();\n\t\t\t\tinfinite_loop_guard(); // TODO try to reset_all() here?\n\t\t\t}\n\n\t\t\tfor (const root of this.#resolve()) {\n\t\t\t\ttry {\n\t\t\t\t\tthis.#traverse(root, effects, render_effects);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treset_all(root);\n\t\t\t\t\t// If there's no async work left, this branch is now dead and needs\n\t\t\t\t\t// to be discarded to not become a zombie that is never cleaned up.\n\t\t\t\t\t// See https://github.com/sveltejs/svelte/issues/18221#issuecomment-4497918414\n\t\t\t\t\t// for a (non-minimal) reproduction that demonstrates a case where this is necessary\n\t\t\t\t\t// to not get follow-up false-positives via \"batch has scheduled roots\" invariant errors.\n\t\t\t\t\tif (!this.#is_deferred()) this.discard();\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// any writes should take effect in a subsequent batch\n\t\tcurrent_batch = null;\n\n\t\tif (updates.length > 0) {\n\t\t\tvar batch = Batch.ensure();\n\t\t\tfor (const e of updates) {\n\t\t\t\tbatch.schedule(e);\n\t\t\t}\n\t\t}\n\n\t\tcollected_effects = null;\n\t\tlegacy_updates = null;\n\n\t\t// if the batch has outstanding pending work, stash effects and bail\n\t\tif (this.#is_deferred()) {\n\t\t\tthis.#defer_effects(render_effects);\n\t\t\tthis.#defer_effects(effects);\n\n\t\t\tfor (const [e, t] of this.#skipped_branches) {\n\t\t\t\treset_branch(e, t);\n\t\t\t}\n\n\t\t\tif (updates.length > 0) {\n\t\t\t\t/** @type {Batch} */ (/** @type {unknown} */ (current_batch)).#process();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst earlier_batch = this.#find_earlier_batch();\n\n\t\tif (earlier_batch) {\n\t\t\t// If this batch collected deferred effects during traversal, they still need\n\t\t\t// to run after being merged into the earlier batch.\n\t\t\tthis.#defer_effects(render_effects);\n\t\t\tthis.#defer_effects(effects);\n\t\t\tearlier_batch.#merge(this);\n\t\t\treturn;\n\t\t}\n\n\t\t// clear effects. Those that are still needed will be rescheduled through unskipping the skipped branches.\n\t\tthis.#dirty_effects.clear();\n\t\tthis.#maybe_dirty_effects.clear();\n\n\t\t// append/remove branches\n\t\tfor (const fn of this.#commit_callbacks) fn(this);\n\t\tthis.#commit_callbacks.clear();\n\n\t\tprevious_batch = this;\n\t\tflush_queued_effects(render_effects);\n\t\tflush_queued_effects(effects);\n\t\tprevious_batch = null;\n\n\t\tthis.#deferred?.resolve();\n\n\t\tvar next_batch = /** @type {Batch | null} */ (/** @type {unknown} */ (current_batch));\n\n\t\tif (this.#pending === 0 && (this.#scheduled.length === 0 || next_batch !== null)) {\n\t\t\tthis.#unlink();\n\n\t\t\t// Order matters here - we need to commit and THEN continue flushing new batches, not the other way around,\n\t\t\t// else we could start flushing a new batch and then, if it has pending work, rebase it right afterwards, which is wrong.\n\t\t\t// In sync mode flushSync can cause #commit to wrongfully think that there needs to be a rebase, so we only do it in async mode\n\t\t\t// TODO fix the underlying cause, otherwise this will likely regress when non-async mode is removed\n\t\t\tif (async_mode_flag) {\n\t\t\t\tthis.#commit();\n\t\t\t\t// Rebases can activate other batches or null it out, therefore restore the new one here\n\t\t\t\tcurrent_batch = next_batch;\n\t\t\t}\n\t\t}\n\n\t\t// Edge case: During traversal new branches might create effects that run immediately and set state,\n\t\t// causing an effect to be scheduled again. We need to traverse the current batch\n\t\t// once more in that case - most of the time this will just clean up dirty branches.\n\t\tif (this.#scheduled.length > 0) {\n\t\t\tif (next_batch !== null) {\n\t\t\t\tfor (const e of this.#scheduled) {\n\t\t\t\t\tnext_batch.#scheduled.push(e);\n\t\t\t\t}\n\n\t\t\t\tthis.#scheduled = [];\n\t\t\t} else {\n\t\t\t\tnext_batch = this;\n\t\t\t}\n\t\t}\n\n\t\tif (next_batch !== null) {\n\t\t\told_values.clear();\n\t\t\tnext_batch.#process();\n\t\t}\n\t}\n\n\t/**\n\t * Traverse the effect tree, executing effects or stashing\n\t * them for later execution as appropriate\n\t * @param {Effect} root\n\t * @param {Effect[]} effects\n\t * @param {Effect[]} render_effects\n\t */\n\t#traverse(root, effects, render_effects) {\n\t\troot.f ^= CLEAN;\n\n\t\tvar effect = root.first;\n\n\t\twhile (effect !== null) {\n\t\t\tvar flags = effect.f;\n\t\t\tvar is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;\n\t\t\tvar is_skippable_branch = is_branch && (flags & CLEAN) !== 0;\n\n\t\t\tvar skip = is_skippable_branch || (flags & INERT) !== 0 || this.#skipped_branches.has(effect);\n\n\t\t\tif (!skip && effect.fn !== null) {\n\t\t\t\tif (is_branch) {\n\t\t\t\t\teffect.f ^= CLEAN;\n\t\t\t\t} else if ((flags & EFFECT) !== 0) {\n\t\t\t\t\teffects.push(effect);\n\t\t\t\t} else if (async_mode_flag && (flags & (RENDER_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\t\t\trender_effects.push(effect);\n\t\t\t\t} else if (is_dirty(effect)) {\n\t\t\t\t\tif ((flags & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect);\n\t\t\t\t\tupdate_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tvar child = effect.first;\n\n\t\t\t\tif (child !== null) {\n\t\t\t\t\teffect = child;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (effect !== null) {\n\t\t\t\tvar next = effect.next;\n\n\t\t\t\tif (next !== null) {\n\t\t\t\t\teffect = next;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\teffect = effect.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\t#find_earlier_batch() {\n\t\tvar batch = this.#prev;\n\n\t\twhile (batch !== null) {\n\t\t\tif (!batch.is_fork) {\n\t\t\t\t// if the batches are connected, break\n\t\t\t\tfor (const [value, [, is_derived]] of this.current) {\n\t\t\t\t\tif (batch.current.has(value) && !is_derived) {\n\t\t\t\t\t\treturn batch;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch = batch.#prev;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#merge(batch) {\n\t\tfor (const [source, value] of batch.current) {\n\t\t\tif (!this.previous.has(source) && batch.previous.has(source)) {\n\t\t\t\tthis.previous.set(source, batch.previous.get(source));\n\t\t\t}\n\n\t\t\tthis.current.set(source, value);\n\t\t}\n\n\t\tfor (const [effect, deferred] of batch.async_deriveds) {\n\t\t\tconst d = this.async_deriveds.get(effect);\n\t\t\tif (d) deferred.promise.then(d.resolve).catch(d.reject);\n\t\t}\n\n\t\t// Clear them or else those that are still pending might get rejected on discard (after merged-into batch is done).\n\t\t// This can happen when batch Y merged into X and Y has a pending boundary and therefore still-pending async deriveds inside.\n\t\tbatch.async_deriveds.clear();\n\n\t\t// Mark is not guaranteed not touch these, so we transfer them\n\t\tthis.transfer_effects(batch.#dirty_effects, batch.#maybe_dirty_effects);\n\n\t\t/**\n\t\t * mark all effects that depend on `batch.current`, except the\n\t\t * async effects that we just resolved (TODO unless they depend\n\t\t * on values in this batch that are NOT in the later batch?).\n\t\t * Through this we also will populate the correct #skipped_branches,\n\t\t * oncommit callbacks etc, so we don't need to merge them separately.\n\t\t * @param {Value} value\n\t\t */\n\t\tconst mark = (value) => {\n\t\t\tvar reactions = value.reactions;\n\t\t\tif (reactions === null) return;\n\t\t\t// skip if value is derived and is neither dirty nor maybe dirty. transitive\n\t\t\t// deriveds (a derived depending on another derived) are only MAYBE_DIRTY, so\n\t\t\t// we must continue traversing them to reach the effects that depend on them\n\t\t\tif ((value.f & DERIVED) !== 0 && (value.f & (DIRTY | MAYBE_DIRTY)) === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const reaction of reactions) {\n\t\t\t\tvar flags = reaction.f;\n\n\t\t\t\tif ((flags & DERIVED) !== 0) {\n\t\t\t\t\tmark(/** @type {Derived} */ (reaction));\n\t\t\t\t} else {\n\t\t\t\t\tvar effect = /** @type {Effect} */ (reaction);\n\n\t\t\t\t\tif (flags & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect)) {\n\t\t\t\t\t\tthis.#maybe_dirty_effects.delete(effect);\n\t\t\t\t\t\tset_signal_status(effect, DIRTY);\n\t\t\t\t\t\tthis.schedule(effect);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfor (const source of this.current.keys()) {\n\t\t\tmark(source);\n\t\t}\n\n\t\tthis.oncommit(() => batch.discard());\n\t\tbatch.#unlink();\n\n\t\tcurrent_batch = this;\n\t\tthis.#process();\n\t}\n\n\t/**\n\t * @param {Effect[]} effects\n\t */\n\t#defer_effects(effects) {\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdefer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);\n\t\t}\n\t}\n\n\t/**\n\t * Associate a change to a given source with the current\n\t * batch, noting its previous and current values\n\t * @param {Value} source\n\t * @param {any} value\n\t * @param {boolean} [is_derived]\n\t */\n\tcapture(source, value, is_derived = false) {\n\t\tif (source.v !== UNINITIALIZED && !this.previous.has(source)) {\n\t\t\tthis.previous.set(source, source.v);\n\t\t}\n\n\t\t// Don't save errors in `batch_values`, or they won't be thrown in `runtime.js#get`\n\t\tif ((source.f & ERROR_VALUE) === 0) {\n\t\t\tthis.current.set(source, [value, is_derived]);\n\t\t\tbatch_values?.set(source, value);\n\t\t}\n\n\t\tif (!this.is_fork) {\n\t\t\tsource.v = value;\n\t\t}\n\t}\n\n\tactivate() {\n\t\tcurrent_batch = this;\n\t}\n\n\tdeactivate() {\n\t\tcurrent_batch = null;\n\t\tbatch_values = null;\n\t}\n\n\tflush() {\n\t\ttry {\n\t\t\tif (DEV) {\n\t\t\t\tsource_stacks.clear();\n\t\t\t}\n\n\t\t\tis_processing = true;\n\t\t\tcurrent_batch = this;\n\n\t\t\tthis.#process();\n\t\t} finally {\n\t\t\tflush_count = 0;\n\t\t\tlast_scheduled_effect = null;\n\t\t\tcollected_effects = null;\n\t\t\tlegacy_updates = null;\n\t\t\tis_processing = false;\n\n\t\t\tcurrent_batch = null;\n\t\t\tbatch_values = null;\n\n\t\t\told_values.clear();\n\n\t\t\tif (DEV) {\n\t\t\t\tfor (const source of source_stacks) {\n\t\t\t\t\tsource.updated = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdiscard() {\n\t\tfor (const fn of this.#discard_callbacks) fn(this);\n\t\tthis.#discard_callbacks.clear();\n\n\t\tfor (const deferred of this.async_deriveds.values()) {\n\t\t\tdeferred.reject(OBSOLETE);\n\t\t}\n\n\t\tthis.#unlink();\n\t\tthis.#deferred?.resolve();\n\t}\n\n\t/**\n\t * @param {Effect} effect\n\t */\n\tregister_created_effect(effect) {\n\t\tthis.#new_effects.push(effect);\n\t}\n\n\t#commit() {\n\t\t// If there are other pending batches, they now need to be 'rebased' —\n\t\t// in other words, we re-run block/async effects with the newly\n\t\t// committed state, unless the batch in question has a more\n\t\t// recent value for a given source\n\t\tfor (let batch = first_batch; batch !== null; batch = batch.#next) {\n\t\t\tvar is_earlier = batch.id < this.id;\n\n\t\t\t/** @type {Source[]} */\n\t\t\tvar sources = [];\n\n\t\t\tfor (const [source, [value, is_derived]] of this.current) {\n\t\t\t\tif (batch.current.has(source)) {\n\t\t\t\t\tvar batch_value = /** @type {[any, boolean]} */ (batch.current.get(source))[0]; // faster than destructuring\n\n\t\t\t\t\tif (is_earlier && value !== batch_value) {\n\t\t\t\t\t\t// bring the value up to date\n\t\t\t\t\t\tbatch.current.set(source, [value, is_derived]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// same value or later batch has more recent value,\n\t\t\t\t\t\t// no need to re-run these effects\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsources.push(source);\n\t\t\t}\n\n\t\t\tif (is_earlier) {\n\t\t\t\t// TODO do we need to restart these in some cases, instead of\n\t\t\t\t// immediately resolving them? Likely not because of how this.apply() works.\n\t\t\t\tfor (const [effect, deferred] of this.async_deriveds) {\n\t\t\t\t\tconst d = batch.async_deriveds.get(effect);\n\t\t\t\t\tif (d) deferred.promise.then(d.resolve).catch(d.reject);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar current = [...batch.current.keys()].filter(\n\t\t\t\t(source) => !(/** @type {[any, boolean]} */ (batch.current.get(source))[1])\n\t\t\t);\n\n\t\t\t// If not started yet or no sources to update (which is e.g. possible for the very first batch) then bail\n\t\t\tif (!batch.#started || current.length === 0) continue;\n\n\t\t\t// Re-run async/block effects that depend on distinct values changed in both batches (ignoring deriveds)\n\t\t\tvar others = current.filter((source) => !this.current.has(source));\n\n\t\t\tif (others.length === 0) {\n\t\t\t\tif (is_earlier) {\n\t\t\t\t\t// this batch is now obsolete and can be discarded\n\t\t\t\t\tbatch.discard();\n\t\t\t\t}\n\t\t\t} else if (sources.length > 0) {\n\t\t\t\t// The microtask queue can contain the batch already scheduled to run right\n\t\t\t\t// after this one is finished, so throwing the invariant would be wrong here.\n\t\t\t\tif (DEV && !batch.#decrement_queued) {\n\t\t\t\t\tinvariant(batch.#scheduled.length === 0, 'Batch has scheduled effects');\n\t\t\t\t}\n\n\t\t\t\t// A batch was unskipped in a later batch -> tell prior batches to unskip it, too\n\t\t\t\tif (is_earlier) {\n\t\t\t\t\tfor (const unskipped of this.#unskipped_branches) {\n\t\t\t\t\t\tbatch.unskip_effect(unskipped, (e) => {\n\t\t\t\t\t\t\tif ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) {\n\t\t\t\t\t\t\t\tbatch.schedule(e);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbatch.#defer_effects([e]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbatch.activate();\n\n\t\t\t\t/** @type {Set<Value>} */\n\t\t\t\tvar marked = new Set();\n\n\t\t\t\t/** @type {Map<Reaction, boolean>} */\n\t\t\t\tvar checked = new Map();\n\n\t\t\t\tfor (var source of sources) {\n\t\t\t\t\tmark_effects(source, others, marked, checked);\n\t\t\t\t}\n\n\t\t\t\tchecked = new Map();\n\t\t\t\tvar current_unequal = [...batch.current]\n\t\t\t\t\t.filter(([c, v1]) => {\n\t\t\t\t\t\tconst v2 = this.current.get(c);\n\t\t\t\t\t\tif (!v2) return true;\n\t\t\t\t\t\t// Either their values are different or one is a derived but not the other\n\t\t\t\t\t\treturn v2[0] !== v1[0] || v2[1] !== v1[1];\n\t\t\t\t\t})\n\t\t\t\t\t.map(([c]) => c);\n\n\t\t\t\tif (current_unequal.length > 0) {\n\t\t\t\t\tfor (const effect of this.#new_effects) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(effect.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 &&\n\t\t\t\t\t\t\tdepends_on(effect, current_unequal, checked)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif ((effect.f & (ASYNC | BLOCK_EFFECT)) !== 0) {\n\t\t\t\t\t\t\t\tset_signal_status(effect, DIRTY);\n\t\t\t\t\t\t\t\tbatch.schedule(effect);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbatch.#dirty_effects.add(effect);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Only apply and traverse when we know we triggered async work with marking the effects\n\t\t\t\t// and know this won't run anyway right afterwards\n\t\t\t\tif (batch.#scheduled.length > 0 && !batch.#decrement_queued) {\n\t\t\t\t\tbatch.apply();\n\n\t\t\t\t\tfor (var root of batch.#resolve()) {\n\t\t\t\t\t\tbatch.#traverse(root, [], []);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbatch.deactivate();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {boolean} blocking\n\t * @param {Effect} effect\n\t */\n\tincrement(blocking, effect) {\n\t\tthis.#pending += 1;\n\n\t\tif (blocking) {\n\t\t\tlet blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;\n\t\t\tthis.#blocking_pending.set(effect, blocking_pending_count + 1);\n\t\t}\n\t}\n\n\t/**\n\t * @param {boolean} blocking\n\t * @param {Effect} effect\n\t */\n\tdecrement(blocking, effect) {\n\t\tthis.#pending -= 1;\n\n\t\tif (blocking) {\n\t\t\tlet blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;\n\n\t\t\tif (blocking_pending_count === 1) {\n\t\t\t\tthis.#blocking_pending.delete(effect);\n\t\t\t} else {\n\t\t\t\tthis.#blocking_pending.set(effect, blocking_pending_count - 1);\n\t\t\t}\n\t\t}\n\n\t\tif (this.#decrement_queued) return;\n\t\tthis.#decrement_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#decrement_queued = false;\n\n\t\t\tif (this.linked) {\n\t\t\t\tthis.flush();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @param {Set<Effect>} dirty_effects\n\t * @param {Set<Effect>} maybe_dirty_effects\n\t */\n\ttransfer_effects(dirty_effects, maybe_dirty_effects) {\n\t\tfor (const e of dirty_effects) {\n\t\t\tthis.#dirty_effects.add(e);\n\t\t}\n\n\t\tfor (const e of maybe_dirty_effects) {\n\t\t\tthis.#maybe_dirty_effects.add(e);\n\t\t}\n\n\t\tdirty_effects.clear();\n\t\tmaybe_dirty_effects.clear();\n\t}\n\n\t/** @param {(batch: Batch) => void} fn */\n\toncommit(fn) {\n\t\tthis.#commit_callbacks.add(fn);\n\t}\n\n\t/** @param {(batch: Batch) => void} fn */\n\tondiscard(fn) {\n\t\tthis.#discard_callbacks.add(fn);\n\t}\n\n\tsettled() {\n\t\treturn (this.#deferred ??= deferred()).promise;\n\t}\n\n\tstatic ensure() {\n\t\tif (current_batch === null) {\n\t\t\tconst batch = (current_batch = new Batch());\n\n\t\t\tif (!is_processing && !is_flushing_sync) {\n\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\tif (!batch.#started) {\n\t\t\t\t\t\tbatch.flush();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current_batch;\n\t}\n\n\tapply() {\n\t\tif (!async_mode_flag || (!this.is_fork && this.#prev === null && this.#next === null)) {\n\t\t\tbatch_values = null;\n\t\t\treturn;\n\t\t}\n\n\t\t// if there are multiple batches, we are 'time travelling' —\n\t\t// we need to override values with the ones in this batch...\n\t\tbatch_values = new Map();\n\t\tfor (const [source, [value]] of this.current) {\n\t\t\tbatch_values.set(source, value);\n\t\t}\n\n\t\t// ...and undo changes belonging to other batches unless they intersect\n\t\tfor (let batch = first_batch; batch !== null; batch = batch.#next) {\n\t\t\tif (batch === this || batch.is_fork) continue;\n\n\t\t\t// If two batches intersect, the latter batch will be merged into the earlier batch,\n\t\t\t// and we should treat them as a single set of changes\n\t\t\tvar intersects = false;\n\n\t\t\tif (batch.id < this.id) {\n\t\t\t\tfor (const [source, [, is_derived]] of batch.current) {\n\t\t\t\t\t// Derived values don't partake in the intersection mechanism, because a derived could\n\t\t\t\t\t// be triggered in one batch already but not the other one yet, causing a false-positive\n\t\t\t\t\tif (is_derived) continue;\n\n\t\t\t\t\tif (this.current.has(source)) {\n\t\t\t\t\t\tintersects = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Since the latter batch merges into the earlier (if it resolves before the earlier one),\n\t\t\t// we treat the earlier values as \"already applied\". This way we don't need to rerun async\n\t\t\t// effects of the earlier batch in case they are merged.\n\t\t\t// As a result you can think of batch_values as having the latest values of all intersecting\n\t\t\t// batches up until this batch.\n\t\t\tif (!intersects) {\n\t\t\t\tfor (const [source, previous] of batch.previous) {\n\t\t\t\t\tif (!batch_values.has(source)) {\n\t\t\t\t\t\tbatch_values.set(source, previous);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {Effect} effect\n\t */\n\tschedule(effect) {\n\t\tlast_scheduled_effect = effect;\n\n\t\t// defer render effects inside a pending boundary\n\t\t// TODO the `REACTION_RAN` check is only necessary because of legacy `$:` effects AFAICT — we can remove later\n\t\tif (\n\t\t\teffect.b?.is_pending &&\n\t\t\t(effect.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 &&\n\t\t\t(effect.f & REACTION_RAN) === 0\n\t\t) {\n\t\t\teffect.b.defer_effect(effect);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#scheduled.push(effect);\n\t}\n\n\t#unlink() {\n\t\t// #merge calls #unlink, discard later on does it again - prevent\n\t\t// running it multiple times to not corrupt the linked list\n\t\tif (!this.linked) return;\n\n\t\tvar prev = this.#prev;\n\t\tvar next = this.#next;\n\n\t\tif (prev === null) {\n\t\t\tfirst_batch = next;\n\t\t} else {\n\t\t\tprev.#next = next;\n\t\t}\n\n\t\tif (next === null) {\n\t\t\tlast_batch = prev;\n\t\t} else {\n\t\t\tnext.#prev = prev;\n\t\t}\n\n\t\tthis.linked = false;\n\t}\n}\n\n// TODO Svelte@6 think about removing the callback argument.\n/**\n * Synchronously flush any pending updates.\n * Returns void if no callback is provided, otherwise returns the result of calling the callback.\n * @template [T=void]\n * @param {(() => T) | undefined} [fn]\n * @returns {T}\n */\nexport function flushSync(fn) {\n\tvar was_flushing_sync = is_flushing_sync;\n\tvar prev_previous_batch = previous_batch;\n\tprevious_batch = null;\n\tis_flushing_sync = true;\n\n\ttry {\n\t\tvar result;\n\n\t\tif (fn) {\n\t\t\tflushSync(); // flush anything pending through the while loop below\n\n\t\t\tresult = fn();\n\t\t}\n\n\t\twhile (true) {\n\t\t\tflush_tasks();\n\n\t\t\tif (current_batch === null) {\n\t\t\t\treturn /** @type {T} */ (result);\n\t\t\t}\n\n\t\t\tcurrent_batch.flush();\n\t\t}\n\t} finally {\n\t\tis_flushing_sync = was_flushing_sync;\n\t\tprevious_batch = prev_previous_batch;\n\t}\n}\n\nfunction infinite_loop_guard() {\n\tif (DEV) {\n\t\tvar updates = new Map();\n\n\t\tfor (const source of /** @type {Batch} */ (current_batch).current.keys()) {\n\t\t\tfor (const [stack, update] of source.updated ?? []) {\n\t\t\t\tvar entry = updates.get(stack);\n\n\t\t\t\tif (!entry) {\n\t\t\t\t\tentry = { error: update.error, count: 0 };\n\t\t\t\t\tupdates.set(stack, entry);\n\t\t\t\t}\n\n\t\t\t\tentry.count += update.count;\n\t\t\t}\n\t\t}\n\n\t\tfor (const update of updates.values()) {\n\t\t\tif (update.error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(update.error);\n\t\t\t}\n\t\t}\n\t}\n\n\ttry {\n\t\te.effect_update_depth_exceeded();\n\t} catch (error) {\n\t\tif (DEV) {\n\t\t\t// stack contains no useful information, replace it\n\t\t\tdefine_property(error, 'stack', { value: '' });\n\t\t}\n\n\t\t// Best effort: invoke the boundary nearest the most recent\n\t\t// effect and hope that it's relevant to the infinite loop\n\t\tinvoke_error_boundary(error, last_scheduled_effect);\n\t}\n}\n\n/** @type {Set<Effect> | null} */\nexport let eager_block_effects = null;\n\n/**\n * @param {Array<Effect>} effects\n * @returns {void}\n */\nfunction flush_queued_effects(effects) {\n\tvar length = effects.length;\n\tif (length === 0) return;\n\n\tvar i = 0;\n\n\twhile (i < length) {\n\t\tvar effect = effects[i++];\n\n\t\tif ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) {\n\t\t\teager_block_effects = new Set();\n\n\t\t\tupdate_effect(effect);\n\n\t\t\t// Effects with no dependencies or teardown do not get added to the effect tree.\n\t\t\t// Deferred effects (e.g. `$effect(...)`) _are_ added to the tree because we\n\t\t\t// don't know if we need to keep them until they are executed. Doing the check\n\t\t\t// here (rather than in `update_effect`) allows us to skip the work for\n\t\t\t// immediate effects.\n\t\t\tif (\n\t\t\t\teffect.deps === null &&\n\t\t\t\teffect.first === null &&\n\t\t\t\teffect.nodes === null &&\n\t\t\t\teffect.teardown === null &&\n\t\t\t\teffect.ac === null\n\t\t\t) {\n\t\t\t\t// remove this effect from the graph\n\t\t\t\tunlink_effect(effect);\n\t\t\t}\n\n\t\t\t// If update_effect() has a flushSync() in it, we may have flushed another flush_queued_effects(),\n\t\t\t// which already handled this logic and did set eager_block_effects to null.\n\t\t\tif (eager_block_effects?.size > 0) {\n\t\t\t\told_values.clear();\n\n\t\t\t\tfor (const e of eager_block_effects) {\n\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\n\t\t\t\t\t// Run effects in order from ancestor to descendant, else we could run into nullpointers\n\t\t\t\t\t/** @type {Effect[]} */\n\t\t\t\t\tconst ordered_effects = [e];\n\t\t\t\t\tlet ancestor = e.parent;\n\t\t\t\t\twhile (ancestor !== null) {\n\t\t\t\t\t\tif (eager_block_effects.has(ancestor)) {\n\t\t\t\t\t\t\teager_block_effects.delete(ancestor);\n\t\t\t\t\t\t\tordered_effects.push(ancestor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tancestor = ancestor.parent;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let j = ordered_effects.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tconst e = ordered_effects[j];\n\t\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\t\t\t\t\t\tupdate_effect(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\teager_block_effects.clear();\n\t\t\t}\n\t\t}\n\t}\n\n\teager_block_effects = null;\n}\n\n/**\n * This is similar to `mark_reactions`, but it only marks async/block effects\n * depending on `value` and at least one of the other `sources`, so that\n * these effects can re-run after another batch has been committed\n * @param {Value} value\n * @param {Source[]} sources\n * @param {Set<Value>} marked\n * @param {Map<Reaction, boolean>} checked\n */\nfunction mark_effects(value, sources, marked, checked) {\n\tif (marked.has(value)) return;\n\tmarked.add(value);\n\n\tif (value.reactions !== null) {\n\t\tfor (const reaction of value.reactions) {\n\t\t\tconst flags = reaction.f;\n\n\t\t\tif ((flags & DERIVED) !== 0) {\n\t\t\t\tmark_effects(/** @type {Derived} */ (reaction), sources, marked, checked);\n\t\t\t} else if (\n\t\t\t\t(flags & (ASYNC | BLOCK_EFFECT)) !== 0 &&\n\t\t\t\t(flags & DIRTY) === 0 &&\n\t\t\t\tdepends_on(reaction, sources, checked)\n\t\t\t) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * When committing a fork, we need to trigger eager effects so that\n * any `$state.eager(...)` expressions update immediately. This\n * function allows us to discover them\n * @param {Value} value\n * @param {Set<Effect>} effects\n */\nfunction mark_eager_effects(value, effects) {\n\tif (value.reactions === null) return;\n\n\tfor (const reaction of value.reactions) {\n\t\tconst flags = reaction.f;\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tmark_eager_effects(/** @type {Derived} */ (reaction), effects);\n\t\t} else if ((flags & EAGER_EFFECT) !== 0) {\n\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\teffects.add(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/**\n * @param {Reaction} reaction\n * @param {Source[]} sources\n * @param {Map<Reaction, boolean>} checked\n */\nfunction depends_on(reaction, sources, checked) {\n\tconst depends = checked.get(reaction);\n\tif (depends !== undefined) return depends;\n\n\tif (reaction.deps !== null) {\n\t\tfor (const dep of reaction.deps) {\n\t\t\tif (includes.call(sources, dep)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ((dep.f & DERIVED) !== 0 && depends_on(/** @type {Derived} */ (dep), sources, checked)) {\n\t\t\t\tchecked.set(/** @type {Derived} */ (dep), true);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\tchecked.set(reaction, false);\n\n\treturn false;\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function schedule_effect(effect) {\n\t/** @type {Batch} */ (current_batch).schedule(effect);\n}\n\n/** @type {Source<number>[]} */\nlet eager_versions = [];\n\nfunction eager_flush() {\n\tflushSync(() => {\n\t\tconst eager = eager_versions;\n\t\teager_versions = [];\n\t\tfor (const version of eager) {\n\t\t\tupdate(version);\n\t\t}\n\t});\n}\n\n/** @type {Map<Reaction, Source<number>>} */\nvar version_map = new Map();\n\n/**\n * Implementation of `$state.eager(fn())`\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function eager(fn) {\n\tvar initial = true;\n\tvar value = /** @type {T} */ (undefined);\n\n\tif (active_reaction === null) {\n\t\treturn fn();\n\t}\n\n\tlet parent = active_reaction;\n\n\tlet version = version_map.get(parent) ?? source(0);\n\tversion_map.set(parent, version);\n\n\tif (DEV) {\n\t\tversion.label ??= '$state.eager version';\n\t}\n\n\tteardown(() => {\n\t\tif (parent.f & DESTROYING) version_map.delete(parent);\n\t});\n\n\tget(version);\n\n\teager_effect(() => {\n\t\tif (initial) {\n\t\t\t// the first time this runs, we create an eager effect\n\t\t\t// that will run eagerly whenever the expression changes\n\t\t\tvar previous_batch_values = batch_values;\n\n\t\t\ttry {\n\t\t\t\tbatch_values = null;\n\t\t\t\tvalue = fn();\n\t\t\t} finally {\n\t\t\t\tbatch_values = previous_batch_values;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// the second time this effect runs, it's to schedule a\n\t\t// `version` update. since this will recreate the effect,\n\t\t// we don't need to evaluate the expression here\n\t\tif (eager_versions.length === 0) {\n\t\t\tqueue_micro_task(eager_flush);\n\t\t}\n\n\t\teager_versions.push(version);\n\t});\n\n\tinitial = false;\n\n\treturn value;\n}\n\n/**\n * Mark all the effects inside a skipped branch CLEAN, so that\n * they can be correctly rescheduled later. Tracks dirty and maybe_dirty\n * effects so they can be rescheduled if the branch survives.\n * @param {Effect} effect\n * @param {{ d: Effect[], m: Effect[] }} tracked\n */\nfunction reset_branch(effect, tracked) {\n\t// clean branch = nothing dirty inside, no need to traverse further\n\tif ((effect.f & BRANCH_EFFECT) !== 0 && (effect.f & CLEAN) !== 0) {\n\t\treturn;\n\t}\n\n\tif ((effect.f & DIRTY) !== 0) {\n\t\ttracked.d.push(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\ttracked.m.push(effect);\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar e = effect.first;\n\twhile (e !== null) {\n\t\treset_branch(e, tracked);\n\t\te = e.next;\n\t}\n}\n\n/**\n * Mark an entire effect tree clean following an error\n * @param {Effect} effect\n */\nfunction reset_all(effect) {\n\tset_signal_status(effect, CLEAN);\n\n\tvar e = effect.first;\n\twhile (e !== null) {\n\t\treset_all(e);\n\t\te = e.next;\n\t}\n}\n\n/**\n * Creates a 'fork', in which state changes are evaluated but not applied to the DOM.\n * This is useful for speculatively loading data (for example) when you suspect that\n * the user is about to take some action.\n *\n * Frameworks like SvelteKit can use this to preload data when the user touches or\n * hovers over a link, making any subsequent navigation feel instantaneous.\n *\n * The `fn` parameter is a synchronous function that modifies some state. The\n * state changes will be reverted after the fork is initialised, then reapplied\n * if and when the fork is eventually committed.\n *\n * When it becomes clear that a fork will _not_ be committed (e.g. because the\n * user navigated elsewhere), it must be discarded to avoid leaking memory.\n *\n * @param {() => void} fn\n * @returns {Fork}\n * @since 5.42\n */\nexport function fork(fn) {\n\tif (!async_mode_flag) {\n\t\te.experimental_async_required('fork');\n\t}\n\n\tif (current_batch !== null) {\n\t\te.fork_timing();\n\t}\n\n\tflushSync();\n\n\tvar batch = Batch.ensure();\n\tbatch.is_fork = true;\n\tbatch_values = new Map();\n\n\tvar committed = false;\n\tvar settled = batch.settled();\n\n\tfn();\n\tflushSync();\n\n\treturn {\n\t\tcommit: async () => {\n\t\t\tif (committed) {\n\t\t\t\tawait settled;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!batch.linked) {\n\t\t\t\te.fork_discarded();\n\t\t\t}\n\n\t\t\tcommitted = true;\n\n\t\t\tbatch.is_fork = false;\n\n\t\t\t// apply changes and update write versions so deriveds see the change\n\t\t\tfor (var [source, [value]] of batch.current) {\n\t\t\t\tsource.v = value;\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\t// trigger any `$state.eager(...)` expressions with the new state.\n\t\t\t// eager effects don't get scheduled like other effects, so we\n\t\t\t// can't just encounter them during traversal, we need to\n\t\t\t// proactively flush them\n\t\t\t// TODO maybe there's a better implementation?\n\t\t\tflushSync(() => {\n\t\t\t\t/** @type {Set<Effect>} */\n\t\t\t\tvar eager_effects = new Set();\n\n\t\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\t\tmark_eager_effects(source, eager_effects);\n\t\t\t\t}\n\n\t\t\t\tset_eager_effects(eager_effects);\n\t\t\t\tflush_eager_effects();\n\t\t\t});\n\n\t\t\tbatch.flush();\n\t\t\tawait settled;\n\t\t},\n\t\tdiscard: () => {\n\t\t\t// cause any MAYBE_DIRTY deriveds to update\n\t\t\t// if they depend on things thath changed\n\t\t\t// inside the discarded fork\n\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\tif (!committed && batch.linked) {\n\t\t\t\tbatch.discard();\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * Forcibly remove all current batches, to prevent cross-talk between tests\n */\nexport function clear() {\n\tfirst_batch = last_batch = null;\n}\n","/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport { get_descriptors, get_prototype_of, includes, index_of } from '../shared/utils.js';\nimport {\n\tdestroy_block_effect_children,\n\tdestroy_effect_children,\n\teffect_tracking,\n\texecute_effect_teardown\n} from './reactivity/effects.js';\nimport {\n\tDIRTY,\n\tMAYBE_DIRTY,\n\tCLEAN,\n\tDERIVED,\n\tDESTROYED,\n\tBRANCH_EFFECT,\n\tSTATE_SYMBOL,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tCONNECTED,\n\tREACTION_IS_UPDATING,\n\tSTALE_REACTION,\n\tERROR_VALUE,\n\tMANAGED_EFFECT,\n\tREACTION_RAN\n} from './constants.js';\nimport { old_values } from './reactivity/sources.js';\nimport {\n\treactivity_loss_tracker,\n\texecute_derived,\n\tfreeze_derived_effects,\n\trecent_async_deriveds,\n\tunfreeze_derived_effects,\n\tupdate_derived\n} from './reactivity/deriveds.js';\nimport { async_mode_flag, tracing_mode_flag } from '../flags/index.js';\nimport { tracing_expressions } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.js';\nimport {\n\tcomponent_context,\n\tdev_current_component_function,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_current_component_function,\n\tset_dev_stack\n} from './context.js';\nimport {\n\tBatch,\n\tbatch_values,\n\tcurrent_batch,\n\tflushSync,\n\tprevious_batch,\n\tschedule_effect\n} from './reactivity/batch.js';\nimport { handle_error } from './error-handling.js';\nimport { UNINITIALIZED } from '../../constants.js';\nimport { captured_signals } from './legacy.js';\nimport { without_reactive_context } from './dom/elements/bindings/shared.js';\nimport { set_signal_status, update_derived_status } from './reactivity/status.js';\nimport * as w from './warnings.js';\n\nexport let is_destroying_effect = false;\n\n/** @param {boolean} value */\nexport function set_is_destroying_effect(value) {\n\tis_destroying_effect = value;\n}\n\n/** @type {null | Reaction} */\nexport let active_reaction = null;\n\nexport let untracking = false;\n\n/** @param {null | Reaction} reaction */\nexport function set_active_reaction(reaction) {\n\tactive_reaction = reaction;\n}\n\n/** @type {null | Effect} */\nexport let active_effect = null;\n\n/** @param {null | Effect} effect */\nexport function set_active_effect(effect) {\n\tactive_effect = effect;\n}\n\n/**\n * When sources are created within a reaction, reading and writing\n * them within that reaction should not cause a re-run\n * @type {null | Set<Value>}\n */\nexport let current_sources = null;\n\n/** @param {Value} value */\nexport function push_reaction_value(value) {\n\tif (\n\t\tactive_reaction !== null &&\n\t\t((!async_mode_flag && (active_reaction.f & REACTION_IS_UPDATING) !== 0) ||\n\t\t\t(active_reaction.f & DERIVED) !== 0)\n\t) {\n\t\t(current_sources ??= new Set()).add(value);\n\t}\n}\n\n/**\n * The dependencies of the reaction that is currently being executed. In many cases,\n * the dependencies are unchanged between runs, and so this will be `null` unless\n * and until a new dependency is accessed — we track this via `skipped_deps`\n * @type {null | Value[]}\n */\nexport let new_deps = null;\n\nexport let skipped_deps = 0;\n\n/**\n * Tracks writes that the effect it's executed in doesn't listen to yet,\n * so that the dependency can be added to the effect later on if it then reads it\n * @type {null | Value[]}\n */\nexport let untracked_writes = null;\n\n/** @param {null | Value[]} value */\nexport function set_untracked_writes(value) {\n\tuntracked_writes = value;\n}\n\n/**\n * @type {number} Used by sources and deriveds for handling updates.\n * Version starts from 1 so that unowned deriveds differentiate between a created effect and a run one for tracing\n **/\nexport let write_version = 1;\n\n/** @type {number} Used to version each read of a source of derived to avoid duplicating dependencies inside a reaction */\nlet read_version = 0;\n\nexport let update_version = read_version;\n\n/** @param {number} value */\nexport function set_update_version(value) {\n\tupdate_version = value;\n}\n\nexport function increment_write_version() {\n\treturn ++write_version;\n}\n\n/**\n * Determines whether a derived or effect is dirty.\n * If it is MAYBE_DIRTY, will set the status to CLEAN\n * @param {Reaction} reaction\n * @returns {boolean}\n */\nexport function is_dirty(reaction) {\n\tvar flags = reaction.f;\n\n\tif ((flags & DIRTY) !== 0) {\n\t\treturn true;\n\t}\n\n\tif ((flags & MAYBE_DIRTY) !== 0) {\n\t\tvar dependencies = /** @type {Value[]} */ (reaction.deps);\n\t\tvar length = dependencies.length;\n\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tvar dependency = dependencies[i];\n\n\t\t\tif (is_dirty(/** @type {Derived} */ (dependency))) {\n\t\t\t\tupdate_derived(/** @type {Derived} */ (dependency));\n\t\t\t}\n\n\t\t\tif (dependency.wv > reaction.wv) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t(flags & CONNECTED) !== 0 &&\n\t\t\t// During time traveling we don't want to reset the status so that\n\t\t\t// traversal of the graph in the other batches still happens\n\t\t\tbatch_values === null\n\t\t) {\n\t\t\tset_signal_status(reaction, CLEAN);\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {Value} signal\n * @param {Effect} effect\n * @param {boolean} [root]\n */\nfunction schedule_possible_effect_self_invalidation(signal, effect, root = true) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tif (!async_mode_flag && current_sources !== null && current_sources.has(signal)) {\n\t\treturn;\n\t}\n\n\tfor (var i = 0; i < reactions.length; i++) {\n\t\tvar reaction = reactions[i];\n\n\t\tif ((reaction.f & DERIVED) !== 0) {\n\t\t\tschedule_possible_effect_self_invalidation(/** @type {Derived} */ (reaction), effect, false);\n\t\t} else if (effect === reaction) {\n\t\t\tif (root) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t} else if ((reaction.f & CLEAN) !== 0) {\n\t\t\t\tset_signal_status(reaction, MAYBE_DIRTY);\n\t\t\t}\n\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/** @param {Reaction} reaction */\nexport function update_reaction(reaction) {\n\tvar previous_deps = new_deps;\n\tvar previous_skipped_deps = skipped_deps;\n\tvar previous_untracked_writes = untracked_writes;\n\tvar previous_reaction = active_reaction;\n\tvar previous_sources = current_sources;\n\tvar previous_component_context = component_context;\n\tvar previous_untracking = untracking;\n\tvar previous_update_version = update_version;\n\n\tvar flags = reaction.f;\n\n\tnew_deps = /** @type {null | Value[]} */ (null);\n\tskipped_deps = 0;\n\tuntracked_writes = null;\n\tactive_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;\n\n\tcurrent_sources = null;\n\tset_component_context(reaction.ctx);\n\tuntracking = false;\n\tupdate_version = ++read_version;\n\n\tif (reaction.ac !== null) {\n\t\twithout_reactive_context(() => {\n\t\t\t/** @type {AbortController} */ (reaction.ac).abort(STALE_REACTION);\n\t\t});\n\n\t\treaction.ac = null;\n\t}\n\n\ttry {\n\t\treaction.f |= REACTION_IS_UPDATING;\n\t\tvar fn = /** @type {Function} */ (reaction.fn);\n\t\tvar result = fn();\n\t\treaction.f |= REACTION_RAN;\n\t\tvar deps = update_dependencies(reaction);\n\n\t\t// If we're inside an effect and we have untracked writes, then we need to\n\t\t// ensure that if any of those untracked writes result in re-invalidation\n\t\t// of the current effect, then that happens accordingly\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tuntracked_writes !== null &&\n\t\t\t!untracking &&\n\t\t\tdeps !== null &&\n\t\t\t(reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0\n\t\t) {\n\t\t\tfor (var i = 0; i < /** @type {Source[]} */ (untracked_writes).length; i++) {\n\t\t\t\tschedule_possible_effect_self_invalidation(\n\t\t\t\t\tuntracked_writes[i],\n\t\t\t\t\t/** @type {Effect} */ (reaction)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// If we are returning to an previous reaction then\n\t\t// we need to increment the read version to ensure that\n\t\t// any dependencies in this reaction aren't marked with\n\t\t// the same version\n\t\tif (previous_reaction !== null && previous_reaction !== reaction) {\n\t\t\tread_version++;\n\n\t\t\t// update the `rv` of the previous reaction's deps — both existing and new —\n\t\t\t// so that they are not added again\n\t\t\tif (previous_reaction.deps !== null) {\n\t\t\t\tfor (let i = 0; i < previous_skipped_deps; i += 1) {\n\t\t\t\t\tprevious_reaction.deps[i].rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (previous_deps !== null) {\n\t\t\t\tfor (const dep of previous_deps) {\n\t\t\t\t\tdep.rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (untracked_writes !== null) {\n\t\t\t\tif (previous_untracked_writes === null) {\n\t\t\t\t\tprevious_untracked_writes = untracked_writes;\n\t\t\t\t} else {\n\t\t\t\t\tprevious_untracked_writes.push(.../** @type {Source[]} */ (untracked_writes));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ((reaction.f & ERROR_VALUE) !== 0) {\n\t\t\treaction.f ^= ERROR_VALUE;\n\t\t}\n\n\t\treturn result;\n\t} catch (error) {\n\t\t// still commit the deps read before the throw, otherwise deriveds connected by this run keep no reader and the reaction never re-runs when they change\n\t\tupdate_dependencies(reaction);\n\n\t\treturn handle_error(error);\n\t} finally {\n\t\treaction.f ^= REACTION_IS_UPDATING;\n\t\tnew_deps = previous_deps;\n\t\tskipped_deps = previous_skipped_deps;\n\t\tuntracked_writes = previous_untracked_writes;\n\t\tactive_reaction = previous_reaction;\n\t\tcurrent_sources = previous_sources;\n\t\tset_component_context(previous_component_context);\n\t\tuntracking = previous_untracking;\n\t\tupdate_version = previous_update_version;\n\t}\n}\n\n/**\n * @param {Reaction} reaction\n */\nfunction update_dependencies(reaction) {\n\tvar deps = reaction.deps;\n\n\t// Don't remove reactions during fork;\n\t// they must remain for when fork is discarded\n\tvar is_fork = current_batch?.is_fork;\n\n\tif (new_deps !== null) {\n\t\tvar i;\n\n\t\tif (!is_fork) {\n\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t}\n\n\t\tif (deps !== null && skipped_deps > 0) {\n\t\t\tdeps.length = skipped_deps + new_deps.length;\n\t\t\tfor (i = 0; i < new_deps.length; i++) {\n\t\t\t\tdeps[skipped_deps + i] = new_deps[i];\n\t\t\t}\n\t\t} else {\n\t\t\treaction.deps = deps = new_deps;\n\t\t}\n\n\t\tif (effect_tracking() && (reaction.f & CONNECTED) !== 0) {\n\t\t\tfor (i = skipped_deps; i < deps.length; i++) {\n\t\t\t\t(deps[i].reactions ??= []).push(reaction);\n\t\t\t}\n\t\t}\n\t} else if (!is_fork && deps !== null && skipped_deps < deps.length) {\n\t\tremove_reactions(reaction, skipped_deps);\n\t\tdeps.length = skipped_deps;\n\t}\n\n\treturn deps;\n}\n\n/**\n * @template V\n * @param {Reaction} signal\n * @param {Value<V>} dependency\n * @returns {void}\n */\nfunction remove_reaction(signal, dependency) {\n\tlet reactions = dependency.reactions;\n\tif (reactions !== null) {\n\t\tvar index = index_of.call(reactions, signal);\n\t\tif (index !== -1) {\n\t\t\tvar new_length = reactions.length - 1;\n\t\t\tif (new_length === 0) {\n\t\t\t\treactions = dependency.reactions = null;\n\t\t\t} else {\n\t\t\t\t// Swap with last element and then remove.\n\t\t\t\treactions[index] = reactions[new_length];\n\t\t\t\treactions.pop();\n\t\t\t}\n\t\t}\n\t}\n\n\t// If the derived has no reactions, then we can disconnect it from the graph,\n\t// allowing it to either reconnect in the future, or be GC'd by the VM.\n\tif (\n\t\treactions === null &&\n\t\t(dependency.f & DERIVED) !== 0 &&\n\t\t// Destroying a child effect while updating a parent effect can cause a dependency to appear\n\t\t// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`\n\t\t// allows us to skip the expensive work of disconnecting and immediately reconnecting it\n\t\t(new_deps === null || !includes.call(new_deps, dependency))\n\t) {\n\t\tvar derived = /** @type {Derived} */ (dependency);\n\n\t\tif ((derived.f & CONNECTED) !== 0) {\n\t\t\tderived.f ^= CONNECTED;\n\t\t}\n\n\t\t// In a fork it's possible that a derived is executed and gets reactions, then commits, but is\n\t\t// never re-executed. This is possible when the derived is only executed once in the context\n\t\t// of a new branch which happens before fork.commit() runs. In this case, the derived still has\n\t\t// UNINITIALIZED as its value, and then when it's losing its reactions we need to ensure it stays\n\t\t// DIRTY so it is reexecuted once someone wants its value again.\n\t\tif (derived.v !== UNINITIALIZED) {\n\t\t\tupdate_derived_status(derived);\n\t\t}\n\n\t\t// Call abort controller, noone's listening to this derived anymore\n\t\tif (derived.ac !== null) {\n\t\t\twithout_reactive_context(() => {\n\t\t\t\t/** @type {AbortController} */ (derived.ac).abort(STALE_REACTION);\n\t\t\t\tderived.ac = null;\n\t\t\t\t// ensure it reruns right away next time instead of potentially returning a rejected promise as its value\n\t\t\t\tset_signal_status(derived, DIRTY);\n\t\t\t});\n\t\t}\n\n\t\t// freeze any effects inside this derived\n\t\tfreeze_derived_effects(derived);\n\n\t\t// Disconnect any reactions owned by this reaction\n\t\tremove_reactions(derived, 0);\n\t}\n}\n\n/**\n * @param {Reaction} signal\n * @param {number} start_index\n * @returns {void}\n */\nexport function remove_reactions(signal, start_index) {\n\tvar dependencies = signal.deps;\n\tif (dependencies === null) return;\n\n\tfor (var i = start_index; i < dependencies.length; i++) {\n\t\tremove_reaction(signal, dependencies[i]);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function update_effect(effect) {\n\tvar flags = effect.f;\n\n\tif ((flags & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar previous_effect = active_effect;\n\n\tactive_effect = effect;\n\n\tif (DEV) {\n\t\tvar previous_component_fn = dev_current_component_function;\n\t\tset_dev_current_component_function(effect.component_function);\n\t\tvar previous_stack = /** @type {any} */ (dev_stack);\n\t\t// only block effects have a dev stack, keep the current one otherwise\n\t\tset_dev_stack(effect.dev_stack ?? dev_stack);\n\t}\n\n\ttry {\n\t\tif ((flags & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\tdestroy_block_effect_children(effect);\n\t\t} else {\n\t\t\tdestroy_effect_children(effect);\n\t\t}\n\n\t\texecute_effect_teardown(effect);\n\t\tvar teardown = update_reaction(effect);\n\t\teffect.teardown = typeof teardown === 'function' ? teardown : null;\n\t\teffect.wv = write_version;\n\n\t\t// In DEV, increment versions of any sources that were written to during the effect,\n\t\t// so that they are correctly marked as dirty when the effect re-runs\n\t\tif (DEV && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) {\n\t\t\tfor (var dep of effect.deps) {\n\t\t\t\tif (dep.set_during_effect) {\n\t\t\t\t\tdep.wv = increment_write_version();\n\t\t\t\t\tdep.set_during_effect = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tactive_effect = previous_effect;\n\n\t\tif (DEV) {\n\t\t\tset_dev_current_component_function(previous_component_fn);\n\t\t\tset_dev_stack(previous_stack);\n\t\t}\n\t}\n}\n\n/**\n * Returns a promise that resolves once any pending state changes have been applied.\n * @returns {Promise<void>}\n */\nexport async function tick() {\n\tif (async_mode_flag) {\n\t\treturn new Promise((f) => {\n\t\t\t// Race them against each other - in almost all cases requestAnimationFrame will fire first,\n\t\t\t// but e.g. in case the window is not focused or a view transition happens, requestAnimationFrame\n\t\t\t// will be delayed and setTimeout helps us resolve fast enough in that case\n\t\t\trequestAnimationFrame(() => f());\n\t\t\tsetTimeout(() => f());\n\t\t});\n\t}\n\n\tawait Promise.resolve();\n\n\t// By calling flushSync we guarantee that any pending state changes are applied after one tick.\n\t// TODO look into whether we can make flushing subsequent updates synchronously in the future.\n\tflushSync();\n}\n\n/**\n * Returns a promise that resolves once any state changes, and asynchronous work resulting from them,\n * have resolved and the DOM has been updated\n * @returns {Promise<void>}\n * @since 5.36\n */\nexport function settled() {\n\treturn Batch.ensure().settled();\n}\n\n/**\n * @template V\n * @param {Value<V>} signal\n * @returns {V}\n */\nexport function get(signal) {\n\tvar flags = signal.f;\n\tvar is_derived = (flags & DERIVED) !== 0;\n\n\tcaptured_signals?.add(signal);\n\n\t// Register the dependency on the current reaction signal.\n\tif (active_reaction !== null && !untracking) {\n\t\t// if we're in a derived that is being read inside an _async_ derived,\n\t\t// it's possible that the effect was already destroyed. In this case,\n\t\t// we don't add the dependency, because that would create a memory leak\n\t\tvar destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;\n\n\t\tif (!destroyed && (current_sources === null || !current_sources.has(signal))) {\n\t\t\tvar deps = active_reaction.deps;\n\n\t\t\tif ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {\n\t\t\t\t// we're in the effect init/update cycle\n\t\t\t\tif (signal.rv < read_version) {\n\t\t\t\t\tsignal.rv = read_version;\n\n\t\t\t\t\t// If the signal is accessing the same dependencies in the same\n\t\t\t\t\t// order as it did last time, increment `skipped_deps`\n\t\t\t\t\t// rather than updating `new_deps`, which creates GC cost\n\t\t\t\t\tif (new_deps === null && deps !== null && deps[skipped_deps] === signal) {\n\t\t\t\t\t\tskipped_deps++;\n\t\t\t\t\t} else if (new_deps === null) {\n\t\t\t\t\t\tnew_deps = [signal];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnew_deps.push(signal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We're adding a dependency outside the init/update cycle (i.e. after an `await`).\n\t\t\t\t// We have to deduplicate deps/reactions in this case or remove_reactions could\n\t\t\t\t// disconnect deps/reactions that are actually still in use (if skip_deps says\n\t\t\t\t// \"disconnect all after this index\" and some of the signals are also present in\n\t\t\t\t// list prior to the cutoff index, i.e. that should be kept).\n\t\t\t\tactive_reaction.deps ??= [];\n\t\t\t\tif (!includes.call(active_reaction.deps, signal)) {\n\t\t\t\t\tactive_reaction.deps.push(signal);\n\t\t\t\t}\n\n\t\t\t\tvar reactions = signal.reactions;\n\n\t\t\t\tif (reactions === null) {\n\t\t\t\t\tsignal.reactions = [active_reaction];\n\t\t\t\t} else if (!includes.call(reactions, active_reaction)) {\n\t\t\t\t\treactions.push(active_reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (DEV) {\n\t\tif (\n\t\t\t!untracking &&\n\t\t\treactivity_loss_tracker &&\n\t\t\t// By checking that current/previous batch are null we filter out false positives.\n\t\t\t// reactivity_loss_tracker is only reset after a microtask, so if a flush happens\n\t\t\t// before that, we get warnings for things we shouldn't warn on.\n\t\t\tcurrent_batch === null &&\n\t\t\tprevious_batch === null &&\n\t\t\t!reactivity_loss_tracker.warned &&\n\t\t\t(reactivity_loss_tracker.effect.f & REACTION_IS_UPDATING) === 0 &&\n\t\t\t!reactivity_loss_tracker.effect_deps.has(signal)\n\t\t) {\n\t\t\treactivity_loss_tracker.warned = true;\n\n\t\t\tw.await_reactivity_loss(/** @type {string} */ (signal.label));\n\n\t\t\tvar trace = get_error('traced at');\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tif (trace) console.warn(trace);\n\t\t}\n\n\t\trecent_async_deriveds.delete(signal);\n\n\t\tif (\n\t\t\ttracing_mode_flag &&\n\t\t\t!untracking &&\n\t\t\ttracing_expressions !== null &&\n\t\t\tactive_reaction !== null &&\n\t\t\ttracing_expressions.reaction === active_reaction\n\t\t) {\n\t\t\t// Used when mapping state between special blocks like `each`\n\t\t\tif (signal.trace) {\n\t\t\t\tsignal.trace();\n\t\t\t} else {\n\t\t\t\ttrace = get_error('traced at');\n\n\t\t\t\tif (trace) {\n\t\t\t\t\tvar entry = tracing_expressions.entries.get(signal);\n\n\t\t\t\t\tif (entry === undefined) {\n\t\t\t\t\t\tentry = { traces: [] };\n\t\t\t\t\t\ttracing_expressions.entries.set(signal, entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar last = entry.traces[entry.traces.length - 1];\n\n\t\t\t\t\t// traces can be duplicated, e.g. by `snapshot` invoking both\n\t\t\t\t\t// both `getOwnPropertyDescriptor` and `get` traps at once\n\t\t\t\t\tif (trace.stack !== last?.stack) {\n\t\t\t\t\t\tentry.traces.push(trace);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_destroying_effect && old_values.has(signal)) {\n\t\treturn old_values.get(signal);\n\t}\n\n\tif (is_derived) {\n\t\tvar derived = /** @type {Derived} */ (signal);\n\n\t\tif (is_destroying_effect) {\n\t\t\tvar value = derived.v;\n\n\t\t\t// if the derived is dirty and has reactions, or depends on the values that just changed, re-execute\n\t\t\t// (a derived can be maybe_dirty due to the effect destroy removing its last reaction)\n\t\t\tif (\n\t\t\t\t((derived.f & CLEAN) === 0 && derived.reactions !== null) ||\n\t\t\t\tdepends_on_old_values(derived)\n\t\t\t) {\n\t\t\t\tvalue = execute_derived(derived);\n\t\t\t}\n\n\t\t\told_values.set(derived, value);\n\n\t\t\treturn value;\n\t\t}\n\n\t\t// connect disconnected deriveds when reading them inside a connected reaction\n\t\tvar should_connect =\n\t\t\t(derived.f & CONNECTED) === 0 &&\n\t\t\t!untracking &&\n\t\t\tactive_reaction !== null &&\n\t\t\t(active_reaction.f & CONNECTED) !== 0;\n\n\t\tvar is_new = (derived.f & REACTION_RAN) === 0;\n\n\t\tif (is_dirty(derived)) {\n\t\t\tif (should_connect) {\n\t\t\t\t// set the flag before `update_derived`, so that the derived\n\t\t\t\t// is added as a reaction to its dependencies\n\t\t\t\tderived.f |= CONNECTED;\n\t\t\t}\n\n\t\t\tupdate_derived(derived);\n\t\t}\n\n\t\tif (should_connect && !is_new) {\n\t\t\tunfreeze_derived_effects(derived);\n\t\t\treconnect(derived);\n\t\t}\n\t}\n\n\tif (batch_values?.has(signal)) {\n\t\treturn batch_values.get(signal);\n\t}\n\n\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\tthrow signal.v;\n\t}\n\n\treturn signal.v;\n}\n\n/**\n * (Re)connect a disconnected derived, so that it is notified\n * of changes in `mark_reactions`\n * @param {Derived} derived\n */\nfunction reconnect(derived) {\n\tderived.f |= CONNECTED;\n\n\tif (derived.deps === null) return;\n\n\tfor (const dep of derived.deps) {\n\t\tvar reactions = dep.reactions;\n\n\t\tif (reactions === null) {\n\t\t\tdep.reactions = [derived];\n\t\t} else if (!includes.call(reactions, derived)) {\n\t\t\treactions.push(derived);\n\t\t}\n\n\t\tif ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {\n\t\t\tunfreeze_derived_effects(/** @type {Derived} */ (dep));\n\t\t\treconnect(/** @type {Derived} */ (dep));\n\t\t}\n\t}\n}\n\n/** @param {Derived} derived */\nfunction depends_on_old_values(derived) {\n\tif (derived.v === UNINITIALIZED) return true; // we don't know, so assume the worst\n\tif (derived.deps === null) return false;\n\n\tfor (const dep of derived.deps) {\n\t\tif (old_values.has(dep)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((dep.f & DERIVED) !== 0 && depends_on_old_values(/** @type {Derived} */ (dep))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Like `get`, but checks for `undefined`. Used for `var` declarations because they can be accessed before being declared\n * @template V\n * @param {Value<V> | undefined} signal\n * @returns {V | undefined}\n */\nexport function safe_get(signal) {\n\treturn signal && get(signal);\n}\n\n/**\n * When used inside a [`$derived`](https://svelte.dev/docs/svelte/$derived) or [`$effect`](https://svelte.dev/docs/svelte/$effect),\n * any state read inside `fn` will not be treated as a dependency.\n *\n * ```ts\n * $effect(() => {\n *   // this will run when `data` changes, but not when `time` changes\n *   save(data, {\n *     timestamp: untrack(() => time)\n *   });\n * });\n * ```\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function untrack(fn) {\n\tvar previous_untracking = untracking;\n\ttry {\n\t\tuntracking = true;\n\t\treturn fn();\n\t} finally {\n\t\tuntracking = previous_untracking;\n\t}\n}\n\n/**\n * Possibly traverse an object and read all its properties so that they're all reactive in case this is `$state`.\n * Does only check first level of an object for performance reasons (heuristic should be good for 99% of all cases).\n * @param {any} value\n * @returns {void}\n */\nexport function deep_read_state(value) {\n\tif (typeof value !== 'object' || !value || value instanceof EventTarget) {\n\t\treturn;\n\t}\n\n\tif (STATE_SYMBOL in value) {\n\t\tdeep_read(value);\n\t} else if (!Array.isArray(value)) {\n\t\tfor (let key in value) {\n\t\t\tconst prop = value[key];\n\t\t\tif (typeof prop === 'object' && prop && STATE_SYMBOL in prop) {\n\t\t\t\tdeep_read(prop);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Deeply traverse an object and read all its properties\n * so that they're all reactive in case this is `$state`\n * @param {any} value\n * @param {Set<any>} visited\n * @returns {void}\n */\nexport function deep_read(value, visited = new Set()) {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t// We don't want to traverse DOM elements\n\t\t!(value instanceof EventTarget) &&\n\t\t!visited.has(value)\n\t) {\n\t\tvisited.add(value);\n\t\t// When working with a possible SvelteDate, this\n\t\t// will ensure we capture changes to it.\n\t\tif (value instanceof Date) {\n\t\t\tvalue.getTime();\n\t\t}\n\t\tfor (let key in value) {\n\t\t\ttry {\n\t\t\t\tdeep_read(value[key], visited);\n\t\t\t} catch (e) {\n\t\t\t\t// continue\n\t\t\t}\n\t\t}\n\t\tconst proto = get_prototype_of(value);\n\t\tif (\n\t\t\tproto !== Object.prototype &&\n\t\t\tproto !== Array.prototype &&\n\t\t\tproto !== Map.prototype &&\n\t\t\tproto !== Set.prototype &&\n\t\t\tproto !== Date.prototype\n\t\t) {\n\t\t\tconst descriptors = get_descriptors(proto);\n\t\t\tfor (let key in descriptors) {\n\t\t\t\tconst get = descriptors[key].get;\n\t\t\t\tif (get) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tget.call(value);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// continue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","/** @import { Value } from '#client' */\nimport { internal_set } from './reactivity/sources.js';\nimport { untrack } from './runtime.js';\n\n/**\n * @type {Set<Value> | null}\n * @deprecated\n */\nexport let captured_signals = null;\n\n/**\n * Capture an array of all the signals that are read when `fn` is called\n * @template T\n * @param {() => T} fn\n */\nfunction capture_signals(fn) {\n\tvar previous_captured_signals = captured_signals;\n\n\ttry {\n\t\tcaptured_signals = new Set();\n\n\t\tuntrack(fn);\n\n\t\tif (previous_captured_signals !== null) {\n\t\t\tfor (var signal of captured_signals) {\n\t\t\t\tprevious_captured_signals.add(signal);\n\t\t\t}\n\t\t}\n\n\t\treturn captured_signals;\n\t} finally {\n\t\tcaptured_signals = previous_captured_signals;\n\t}\n}\n\n/**\n * Invokes a function and captures all signals that are read during the invocation,\n * then invalidates them.\n * @param {() => any} fn\n * @deprecated\n */\nexport function invalidate_inner_signals(fn) {\n\tfor (var signal of capture_signals(fn)) {\n\t\tinternal_set(signal, signal.v);\n\t}\n}\n","/** @import { Readable } from './public' */\nimport { untrack } from '../internal/client/runtime.js';\nimport { noop } from '../internal/shared/utils.js';\n\n/**\n * @template T\n * @param {Readable<T> | null | undefined} store\n * @param {(value: T) => void} run\n * @param {(value: T) => void} [invalidate]\n * @returns {() => void}\n */\nexport function subscribe_to_store(store, run, invalidate) {\n\tif (store == null) {\n\t\t// @ts-expect-error\n\t\trun(undefined);\n\n\t\t// @ts-expect-error\n\t\tif (invalidate) invalidate(undefined);\n\n\t\treturn noop;\n\t}\n\n\t// Svelte store takes a private second argument\n\t// StartStopNotifier could mutate state, and we want to silence the corresponding validation error\n\tconst unsub = untrack(() =>\n\t\tstore.subscribe(\n\t\t\trun,\n\t\t\t// @ts-expect-error\n\t\t\tinvalidate\n\t\t)\n\t);\n\n\t// Also support RxJS\n\t// @ts-expect-error TODO fix this in the types?\n\treturn unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\n","/** @import { Readable, StartStopNotifier, Subscriber, Unsubscriber, Updater, Writable } from '../public.js' */\n/** @import { Stores, StoresValues, SubscribeInvalidateTuple } from '../private.js' */\nimport { noop, run_all } from '../../internal/shared/utils.js';\nimport { safe_not_equal } from '../../internal/client/reactivity/equality.js';\nimport { subscribe_to_store } from '../utils.js';\n\n/**\n * @type {Array<SubscribeInvalidateTuple<any> | any>}\n */\nconst subscriber_queue = [];\n\n/**\n * Creates a `Readable` store that allows reading by subscription.\n *\n * @template T\n * @param {T} [value] initial value\n * @param {StartStopNotifier<T>} [start]\n * @returns {Readable<T>}\n */\nexport function readable(value, start) {\n\treturn {\n\t\tsubscribe: writable(value, start).subscribe\n\t};\n}\n\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n *\n * @template T\n * @param {T} [value] initial value\n * @param {StartStopNotifier<T>} [start]\n * @returns {Writable<T>}\n */\nexport function writable(value, start = noop) {\n\t/** @type {Unsubscriber | null} */\n\tlet stop = null;\n\n\t/** @type {Set<SubscribeInvalidateTuple<T>>} */\n\tconst subscribers = new Set();\n\n\t/**\n\t * @param {T} new_value\n\t * @returns {void}\n\t */\n\tfunction set(new_value) {\n\t\tif (safe_not_equal(value, new_value)) {\n\t\t\tvalue = new_value;\n\t\t\tif (stop) {\n\t\t\t\t// store is ready\n\t\t\t\tconst run_queue = !subscriber_queue.length;\n\t\t\t\tfor (const subscriber of subscribers) {\n\t\t\t\t\tsubscriber[1]();\n\t\t\t\t\tsubscriber_queue.push(subscriber, value);\n\t\t\t\t}\n\t\t\t\tif (run_queue) {\n\t\t\t\t\tfor (let i = 0; i < subscriber_queue.length; i += 2) {\n\t\t\t\t\t\tsubscriber_queue[i][0](subscriber_queue[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\tsubscriber_queue.length = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Updater<T>} fn\n\t * @returns {void}\n\t */\n\tfunction update(fn) {\n\t\tset(fn(/** @type {T} */ (value)));\n\t}\n\n\t/**\n\t * @param {Subscriber<T>} run\n\t * @param {() => void} [invalidate]\n\t * @returns {Unsubscriber}\n\t */\n\tfunction subscribe(run, invalidate = noop) {\n\t\t/** @type {SubscribeInvalidateTuple<T>} */\n\t\tconst subscriber = [run, invalidate];\n\t\tsubscribers.add(subscriber);\n\t\tif (subscribers.size === 1) {\n\t\t\tstop = start(set, update) || noop;\n\t\t}\n\t\trun(/** @type {T} */ (value));\n\t\treturn () => {\n\t\t\tsubscribers.delete(subscriber);\n\t\t\tif (subscribers.size === 0 && stop) {\n\t\t\t\tstop();\n\t\t\t\tstop = null;\n\t\t\t}\n\t\t};\n\t}\n\treturn { set, update, subscribe };\n}\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * @template {Stores} S\n * @template T\n * @overload\n * @param {S} stores\n * @param {(values: StoresValues<S>, set: (value: T) => void, update: (fn: Updater<T>) => void) => Unsubscriber | void} fn\n * @param {T} [initial_value]\n * @returns {Readable<T>}\n */\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * @template {Stores} S\n * @template T\n * @overload\n * @param {S} stores\n * @param {(values: StoresValues<S>) => T} fn\n * @param {T} [initial_value]\n * @returns {Readable<T>}\n */\n/**\n * @template {Stores} S\n * @template T\n * @param {S} stores\n * @param {Function} fn\n * @param {T} [initial_value]\n * @returns {Readable<T>}\n */\nexport function derived(stores, fn, initial_value) {\n\tconst single = !Array.isArray(stores);\n\t/** @type {Array<Readable<any>>} */\n\tconst stores_array = single ? [stores] : stores;\n\tif (!stores_array.every(Boolean)) {\n\t\tthrow new Error('derived() expects stores as input, got a falsy value');\n\t}\n\tconst auto = fn.length < 2;\n\treturn readable(initial_value, (set, update) => {\n\t\tlet started = false;\n\t\t/** @type {T[]} */\n\t\tconst values = [];\n\t\tlet pending = 0;\n\t\tlet cleanup = noop;\n\t\tconst sync = () => {\n\t\t\tif (pending) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup();\n\t\t\tconst result = fn(single ? values[0] : values, set, update);\n\t\t\tif (auto) {\n\t\t\t\tset(result);\n\t\t\t} else {\n\t\t\t\tcleanup = typeof result === 'function' ? result : noop;\n\t\t\t}\n\t\t};\n\t\tconst unsubscribers = stores_array.map((store, i) =>\n\t\t\tsubscribe_to_store(\n\t\t\t\tstore,\n\t\t\t\t(value) => {\n\t\t\t\t\tvalues[i] = value;\n\t\t\t\t\tpending &= ~(1 << i);\n\t\t\t\t\tif (started) {\n\t\t\t\t\t\tsync();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tpending |= 1 << i;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tstarted = true;\n\t\tsync();\n\t\treturn function stop() {\n\t\t\trun_all(unsubscribers);\n\t\t\tcleanup();\n\t\t\t// We need to set this to false because callbacks can still happen despite having unsubscribed:\n\t\t\t// Callbacks might already be placed in the queue which doesn't know it should no longer\n\t\t\t// invoke this derived store.\n\t\t\tstarted = false;\n\t\t};\n\t});\n}\n\n/**\n * Takes a store and returns a new one derived from the old one that is readable.\n *\n * @template T\n * @param {Readable<T>} store  - store to make readonly\n * @returns {Readable<T>}\n */\nexport function readonly(store) {\n\treturn {\n\t\t// @ts-expect-error TODO i suspect the bind is unnecessary\n\t\tsubscribe: store.subscribe.bind(store)\n\t};\n}\n\n/**\n * Get the current value from a store by subscribing and immediately unsubscribing.\n *\n * @template T\n * @param {Readable<T>} store\n * @returns {T}\n */\nexport function get(store) {\n\tlet value;\n\tsubscribe_to_store(store, (_) => (value = _))();\n\t// @ts-expect-error\n\treturn value;\n}\n","import { writable } from 'svelte/store';\r\n\r\n// A tab can consent only while all its feature guards and mutation boundaries\r\n// are idle. The coordinator exchanges no credentials, drafts or customer data.\r\nexport const updateState = writable({ available: false, busy: false, frozen: false, failed: false });\r\nconst guards = new Set();\r\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\r\nlet registration, prepared = null, mutations = 0, requesting = false;\r\nlet snapshot = { available: false, busy: false, frozen: false, failed: false };\r\nconst publish = changes => { snapshot = { ...snapshot, ...changes }; updateState.set(snapshot); };\r\nexport const updateFrozen = () => !!prepared;\r\n\r\nexport function registerUpdateGuard(check) {\r\n  guards.add(check);\r\n  return () => guards.delete(check);\r\n}\r\n\r\nexport function beginInboxMutation() {\r\n  if (prepared) throw Object.assign(new Error('Update in progress'), { code: 'inbox_update_in_progress' });\r\n  mutations += 1;\r\n  let finished = false;\r\n  return () => { if (!finished) { finished = true; mutations -= 1; } };\r\n}\r\n\r\nfunction ready() {\r\n  try {\r\n    return navigator.onLine && !location.search && /^#\\/inbox(?:\\/[0-9a-f-]{36})?$/.test(location.hash) &&\r\n      guards.size > 0 && mutations === 0 && [...guards].every(check => check() === true);\r\n  } catch { return false; }\r\n}\r\n\r\nfunction release(failed = false) {\r\n  clearTimeout(prepared?.timer);\r\n  prepared = null;\r\n  publish({ frozen: false, busy: requesting, failed });\r\n}\r\n\r\nfunction refresh() {\r\n  publish({ available: !!registration?.waiting && registration.waiting.state === 'installed' });\r\n}\r\n\r\nfunction sameCredential() {\r\n  try { return !!prepared?.token && prepared.token === localStorage.getItem('jwtToken'); }\r\n  catch { return false; }\r\n}\r\n\r\nexport function willReloadAfterWorkerChange() {\r\n  return !!(prepared?.committed && navigator.serviceWorker.controller === prepared.worker &&\r\n    prepared.deadline > Date.now() && sameCredential() && ready());\r\n}\r\n\r\nexport function installInboxUpdates() {\r\n  if (!navigator.serviceWorker) return;\r\n  navigator.serviceWorker.ready.then(value => {\r\n    if (value.scope !== location.origin + '/' || value.active?.scriptURL !== location.origin + '/service-worker.js') return;\r\n    registration = value;\r\n    const installing = () => {\r\n      const candidate = value.installing;\r\n      if (candidate) candidate.addEventListener('statechange', refresh);\r\n      refresh();\r\n    };\r\n    value.addEventListener('updatefound', installing);\r\n    installing();\r\n  }).catch(() => {});\r\n  navigator.serviceWorker.addEventListener('message', async event => {\r\n    const data = event.data, port = event.ports?.[0];\r\n    if (data?.type !== 'tutory:update-phase' || data.version !== 1 || !UUID.test(data.id) ||\r\n        !['prepare', 'commit', 'cancel'].includes(data.phase)) return;\r\n    try {\r\n      if (event.source?.scriptURL !== location.origin + '/service-worker.js') return;\r\n      const current = await navigator.serviceWorker.getRegistration('/');\r\n      if (event.source !== current?.waiting && event.source !== prepared?.worker) return;\r\n      if (data.phase === 'cancel') {\r\n        if (prepared?.id === data.id && prepared.worker === event.source) release(true);\r\n        return;\r\n      }\r\n      if (!port) return;\r\n      let allowed = false;\r\n      if (data.phase === 'prepare' && !prepared && ready()) {\r\n        prepared = { id: data.id, worker: event.source, committed: false,\r\n          deadline: Date.now() + 12000, token: localStorage.getItem('jwtToken'),\r\n          timer: setTimeout(() => release(true), 12000) };\r\n        publish({ frozen: true, busy: true, failed: false });\r\n        allowed = true;\r\n      } else if (data.phase === 'commit' && prepared?.id === data.id &&\r\n          prepared.worker === event.source && prepared.deadline > Date.now() &&\r\n          sameCredential() && ready()) {\r\n        prepared.committed = true;\r\n        allowed = true;\r\n      }\r\n      port.postMessage({ version: 1, id: data.id, phase: data.phase, ready: allowed });\r\n    } catch { /* No response is a veto, never implicit consent. */ }\r\n    finally { port?.close(); }\r\n  });\r\n  navigator.serviceWorker.addEventListener('controllerchange', () => {\r\n    if (willReloadAfterWorkerChange()) {\r\n      clearTimeout(prepared.timer);\r\n      // Only a currently frozen, consenting tab reloads. Activation alone\r\n      // never authorizes reloading a new, old, unknown or interrupted client.\r\n      location.reload();\r\n    } else if (prepared) release(true);\r\n    refresh();\r\n  });\r\n  window.addEventListener('pagehide', () => { if (prepared) release(true); });\r\n  window.addEventListener('pageshow', refresh);\r\n}\r\n\r\nexport async function requestInboxUpdate() {\r\n  if (requesting || prepared) return;\r\n  requesting = true;\r\n  publish({ busy: true, failed: false });\r\n  let port, timer, id;\r\n  try {\r\n    if (!ready() || !registration?.waiting) throw new Error('Update blocked');\r\n    id = crypto.randomUUID();\r\n    const worker = registration.waiting, channel = new MessageChannel();\r\n    port = channel.port1;\r\n    const result = await new Promise((resolve, reject) => {\r\n      timer = setTimeout(() => reject(new Error('Update not confirmed')), 9000);\r\n      port.onmessage = event => {\r\n        if (event.data?.version === 1 && event.data.id === id) resolve(event.data);\r\n      };\r\n      worker.postMessage({ type: 'tutory:update-request', version: 1, id }, [channel.port2]);\r\n    });\r\n    if (result.ok !== true) throw new Error('Update blocked');\r\n  } catch {\r\n    // A concurrent request in another tab may already own our freeze. A\r\n    // rejected local request is not authority to cancel that other handshake.\r\n    if (!prepared || prepared.id === id) release(true);\r\n  } finally {\r\n    clearTimeout(timer); port?.close(); requesting = false;\r\n    publish({ busy: !!prepared }); refresh();\r\n  }\r\n}\r\n","import { getApiBase } from '../apiBase.js';\r\nimport { enrollmentFailure } from './phoneEnrollmentErrors.js';\r\nimport { willReloadAfterWorkerChange } from './appUpdates.js';\r\n\r\nconst CLEANUP_KEY = 'tutory:inbox-push-cleanup:v1';\r\nconst SUSPENDED_KEY = 'tutory:inbox-push-suspended:v1';\r\nconst ORPHAN_KEY = 'tutory:inbox-push-orphan:v1';\r\nconst LOCK = 'tutory:inbox-push-device:v1';\r\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\r\nconst fail = code => Object.assign(new Error(code), { code });\r\nconst tokenNow = () => localStorage.getItem('jwtToken');\r\n\r\nfunction publicBinding(value) {\r\n  if (!value || !UUID.test(value.id) || !UUID.test(value.generation) ||\r\n      !Number.isSafeInteger(value.owner_id) || value.owner_id <= 0 || value.revoked !== false ||\r\n      (value.expires_at !== null && !(typeof value.expires_at === 'string' && Number.isFinite(Date.parse(value.expires_at)))))\r\n    throw fail('push_binding_invalid');\r\n  return { id: value.id, generation: value.generation, owner_id: value.owner_id,\r\n    expires_at: value.expires_at, revoked: false };\r\n}\r\n\r\nexport function phoneWorkerCommand(type, data = {}) {\r\n  return new Promise((resolve, reject) => {\r\n    const worker = navigator.serviceWorker?.controller;\r\n    if (!worker || worker.scriptURL !== location.origin + '/service-worker.js') {\r\n      reject(fail('push_worker_unavailable')); return;\r\n    }\r\n    const channel = new MessageChannel();\r\n    const finish = (error, value) => {\r\n      clearTimeout(timer); channel.port1.close();\r\n      if (error) reject(error); else resolve(value);\r\n    };\r\n    const timer = setTimeout(() => finish(fail('push_worker_unavailable')), 2000);\r\n    channel.port1.onmessage = event => {\r\n      const result = event.data;\r\n      if (!result?.ok || !UUID.test(result.revision)) finish(fail(result?.error || 'push_worker_unavailable'));\r\n      else finish(null, result);\r\n    };\r\n    try { worker.postMessage({ version: 1, type: `tutory:push-${type}`, ...data }, [channel.port2]); }\r\n    catch { channel.port2.close(); finish(fail('push_worker_unavailable')); }\r\n  });\r\n}\r\n\r\nfunction withDeviceLock(work) {\r\n  if (!navigator.locks?.request) return Promise.reject(fail('push_lock_unavailable'));\r\n  return navigator.locks.request(LOCK, { mode: 'exclusive' }, work);\r\n}\r\n\r\nfunction cleanupQueue() {\r\n  const raw = localStorage.getItem(CLEANUP_KEY);\r\n  if (!raw) return [];\r\n  let values;\r\n  try { values = JSON.parse(raw); } catch { throw fail('push_cleanup_unavailable'); }\r\n  if (!Array.isArray(values) || values.length > 20) throw fail('push_cleanup_unavailable');\r\n  return values.map(item => ({ ...publicBinding(item), unsubscribe: item.unsubscribe === true }));\r\n}\r\n\r\nfunction saveQueue(values) {\r\n  if (values.length > 20) throw fail('push_cleanup_unavailable');\r\n  // Explicit write even when empty: inability to retain cleanup blocks enrollment.\r\n  localStorage.setItem(CLEANUP_KEY, JSON.stringify(values));\r\n}\r\n\r\nfunction rememberCleanup(binding, unsubscribe = true) {\r\n  const clean = publicBinding(binding), queue = cleanupQueue();\r\n  const index = queue.findIndex(item => item.id === clean.id && item.generation === clean.generation);\r\n  if (index < 0) queue.push({ ...clean, unsubscribe });\r\n  else queue[index].unsubscribe ||= unsubscribe;\r\n  saveQueue(queue);\r\n}\r\n\r\nasync function registration() {\r\n  const result = await navigator.serviceWorker.getRegistration('/');\r\n  if (!result || result.scope !== location.origin + '/' ||\r\n      result.active?.scriptURL !== location.origin + '/service-worker.js' || !result.pushManager)\r\n    throw fail('push_worker_unavailable');\r\n  return result;\r\n}\r\n\r\nasync function revoke(binding, token) {\r\n  if (!token) return false;\r\n  const abort = new AbortController(), timer = setTimeout(() => abort.abort(), 8000);\r\n  try {\r\n    const response = await fetch(`${getApiBase()}/studentplayground/api/inbox/push/subscriptions/${binding.id}/revoke/`, {\r\n      method: 'POST', cache: 'no-store', credentials: 'same-origin', signal: abort.signal,\r\n      headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },\r\n      body: JSON.stringify({ expected_generation: binding.generation }),\r\n    });\r\n    if (!response.ok) return false;\r\n    const result = await response.json();\r\n    return result.id === binding.id && result.generation === binding.generation &&\r\n      result.owner_id === binding.owner_id && result.revoked === true;\r\n  } catch { return false; }\r\n  finally { clearTimeout(timer); }\r\n}\r\n\r\nasync function drainCleanup(ownerId, token) {\r\n  let queue = cleanupQueue();\r\n  const orphanRaw = localStorage.getItem(ORPHAN_KEY);\r\n  if (!queue.length && !orphanRaw) return true;\r\n  const state = await phoneWorkerCommand('state');\r\n  if (orphanRaw) {\r\n    let orphan;\r\n    try { orphan = JSON.parse(orphanRaw); } catch { throw fail('push_cleanup_unavailable'); }\r\n    if (!UUID.test(orphan?.revision)) throw fail('push_cleanup_unavailable');\r\n    // Unknown registration outcomes have no server id to revoke. Retain only\r\n    // the empty-worker revision, never the endpoint, keys or credential.\r\n    if (!state.binding && state.revision === orphan.revision) {\r\n      const existing = await (await registration()).pushManager.getSubscription();\r\n      if (existing && !(await existing.unsubscribe())) return false;\r\n    }\r\n    // A different revision belongs to a later operation: it is never ours to\r\n    // unsubscribe, even when that later operation has since cleared its binding.\r\n    localStorage.removeItem(ORPHAN_KEY);\r\n  }\r\n  // Never unsubscribe a subscription now owned by another/newer binding.\r\n  if (!state.binding && queue.some(item => item.unsubscribe)) {\r\n    const existing = await (await registration()).pushManager.getSubscription();\r\n    if (existing && !(await existing.unsubscribe())) return false;\r\n    queue = queue.map(item => ({ ...item, unsubscribe: false }));\r\n    saveQueue(queue);\r\n  }\r\n  for (const item of [...queue]) {\r\n    if (item.owner_id === ownerId && await revoke(item, token)) {\r\n      queue = queue.filter(value => value.id !== item.id || value.generation !== item.generation);\r\n      saveQueue(queue);\r\n    }\r\n  }\r\n  return !queue.some(item => item.owner_id === ownerId);\r\n}\r\n\r\nexport function retryPhoneCleanup(ownerId, token = tokenNow()) {\r\n  return withDeviceLock(() => drainCleanup(ownerId, token));\r\n}\r\n\r\nexport function disconnectPhone(ownerId, token = tokenNow()) {\r\n  return withDeviceLock(async () => {\r\n    const state = await phoneWorkerCommand('state');\r\n    if (tokenNow() !== null && tokenNow() !== token) throw fail('push_session_changed');\r\n    if (state.binding) {\r\n      if (state.binding.owner_id !== ownerId) throw fail('push_binding_conflict');\r\n      // Retain exact-generation work before clearing the worker or doing I/O.\r\n      let storageError;\r\n      try { rememberCleanup(state.binding); } catch (problem) { storageError = problem; }\r\n      await phoneWorkerCommand('clear', { expected_revision: state.revision });\r\n      if (storageError) throw storageError;\r\n    }\r\n    return drainCleanup(ownerId, token);\r\n  });\r\n}\r\n\r\nfunction decodePublicKey(value) {\r\n  if (typeof value !== 'string' || !/^[A-Za-z0-9_-]{87}$/.test(value)) throw fail('push_configuration_invalid');\r\n  const bytes = Uint8Array.from(atob(value.replace(/-/g, '+').replace(/_/g, '/') + '='), char => char.charCodeAt(0));\r\n  if (bytes.length !== 65 || bytes[0] !== 4) throw fail('push_configuration_invalid');\r\n  return bytes;\r\n}\r\n\r\nexport function phoneCanEnroll(config, ownerId) {\r\n  return config?.enabled === true && config.configuration === 'valid' && config.user_id === ownerId &&\r\n    config.origin_matches === true && config.inbox_url === location.origin + '/studentplayground/inbox/#/inbox' &&\r\n    typeof config.vapid_key_id === 'string' && !!config.vapid_key_id && typeof config.public_key === 'string';\r\n}\r\n\r\n// Called directly by the click handler. OS permission is requested before any\r\n// await/lock/network operation so iOS retains the deliberate user activation.\r\nexport function enrollPhone({ api, config, ownerId, current = () => true }) {\r\n  let stage = 'preflight';\r\n  try {\r\n    if (!phoneCanEnroll(config, ownerId) || location.pathname !== '/studentplayground/inbox/' || location.search ||\r\n      !(matchMedia('(display-mode: standalone)').matches || navigator.standalone === true) ||\r\n      !window.isSecureContext || !navigator.locks?.request) throw fail('push_not_ready');\r\n    stage = 'key';\r\n    const key = decodePublicKey(config.public_key);\r\n    stage = 'storage';\r\n    const token = tokenNow();\r\n    saveQueue(cleanupQueue());\r\n    const check = () => {\r\n      if (!token || tokenNow() !== token || !current()) {\r\n        stage = 'session';\r\n        throw fail('push_session_changed');\r\n      }\r\n    };\r\n    check();\r\n    stage = 'permission';\r\n    // Keep the OS prompt synchronous with the click; diagnostics must not add\r\n    // an await, lock, telemetry request or retry before user activation.\r\n    const permission = Notification.permission === 'default' ? Notification.requestPermission() : Notification.permission;\r\n    return Promise.resolve(permission).then(granted => {\r\n    if (granted !== 'granted') throw fail('push_permission_denied');\r\n    stage = 'lock';\r\n    return withDeviceLock(async () => {\r\n      check();\r\n      stage = 'cleanup';\r\n      if (!(await drainCleanup(ownerId, token))) throw fail('push_cleanup_pending');\r\n      check();\r\n      stage = 'config-read';\r\n      const verified = await api('push/', { timeoutMs: 10000 });\r\n      check();\r\n      stage = 'config-check';\r\n      if (!phoneCanEnroll(verified, ownerId) || verified.vapid_key_id !== config.vapid_key_id ||\r\n          verified.public_key !== config.public_key) throw fail('push_configuration_changed');\r\n      stage = 'worker-state';\r\n      const state = await phoneWorkerCommand('state');\r\n      check();\r\n      if (state.binding && state.binding.owner_id !== ownerId) throw fail('push_binding_conflict');\r\n      stage = 'registration';\r\n      const manager = (await registration()).pushManager;\r\n      check();\r\n      stage = 'subscription-read';\r\n      let subscription = await manager.getSubscription();\r\n      check();\r\n      stage = 'key-check';\r\n      if (subscription?.options?.applicationServerKey) {\r\n        const priorKey = new Uint8Array(subscription.options.applicationServerKey);\r\n        if (priorKey.length !== key.length || priorKey.some((value, index) => value !== key[index]))\r\n          throw fail('push_key_conflict');\r\n      }\r\n      let bound;\r\n      try {\r\n        stage = 'pending-store';\r\n        if (!state.binding) localStorage.setItem(ORPHAN_KEY, JSON.stringify({ revision: state.revision }));\r\n        stage = 'subscribe';\r\n        subscription ||= await manager.subscribe({ userVisibleOnly: true, applicationServerKey: key });\r\n        check();\r\n        stage = 'subscription-json';\r\n        const subscriptionData = subscription.toJSON();\r\n        stage = 'server-register';\r\n        const result = await api('push/subscriptions/', { method: 'POST', timeoutMs: 10000, body: {\r\n          subscription: subscriptionData, vapid_key_id: config.vapid_key_id,\r\n          ...(state.binding ? { expected_generation: state.binding.generation } : {}),\r\n        } });\r\n        stage = 'binding-check';\r\n        bound = publicBinding(result);\r\n        if (bound.owner_id !== ownerId || (bound.expires_at && Date.parse(bound.expires_at) <= Date.now())) throw fail('push_binding_invalid');\r\n        // A response arriving after logout is still queued for exact revocation.\r\n        stage = 'cleanup-store';\r\n        rememberCleanup(bound);\r\n        localStorage.removeItem(ORPHAN_KEY);\r\n        check();\r\n        stage = 'worker-bind';\r\n        await phoneWorkerCommand('bind', { expected_revision: state.revision, binding: bound });\r\n        check();\r\n        stage = 'cleanup-finish';\r\n        saveQueue(cleanupQueue().filter(item => item.id !== bound.id || item.generation !== bound.generation));\r\n        return bound;\r\n      } catch (problem) {\r\n        const latest = await phoneWorkerCommand('state').catch(() => null);\r\n        if (latest && (!latest.binding || (bound && latest.binding.id === bound.id &&\r\n            latest.binding.generation === bound.generation))) {\r\n          if (latest.binding) await phoneWorkerCommand('clear', { expected_revision: latest.revision }).catch(() => {});\r\n          // The shared device lock prevents another cooperating tab from\r\n          // subscribing while this attempt unsubscribes its captured endpoint.\r\n          const removed = !subscription || await subscription.unsubscribe().catch(() => false);\r\n          if (removed) localStorage.removeItem(ORPHAN_KEY);\r\n        }\r\n        if (bound?.owner_id === ownerId) await drainCleanup(ownerId, token).catch(() => {});\r\n        throw problem;\r\n      }\r\n    });\r\n    }).catch(problem => { throw enrollmentFailure(problem, stage); });\r\n  } catch (problem) {\r\n    return Promise.reject(enrollmentFailure(problem, stage));\r\n  }\r\n}\r\n\r\nasync function authenticatedPhoneRead(path, token) {\r\n  const abort = new AbortController(), timer = setTimeout(() => abort.abort(), 8000);\r\n  try {\r\n    const response = await fetch(`${getApiBase()}/studentplayground/api/inbox/${path}`, {\r\n      cache: 'no-store', credentials: 'same-origin', signal: abort.signal,\r\n      headers: { Authorization: `Bearer ${token}` },\r\n    });\r\n    if (!response.ok) throw fail('push_identity_unverified');\r\n    return await response.json();\r\n  } finally { clearTimeout(timer); }\r\n}\r\n\r\n// One app-lifetime observer, including pages outside the inbox. Token changes\r\n// suspend private previews first; JWT expiry/renewal alone does not revoke a\r\n// subscription. Only authenticated identity can authorize restoring ownership.\r\nexport function installPhoneLifecycle() {\r\n  if (!navigator.serviceWorker || !navigator.locks?.request) return () => {};\r\n  let observedToken, epoch = 0, alive = true;\r\n  try { observedToken = tokenNow(); } catch { observedToken = null; }\r\n  const storageUnavailable = () => {\r\n    try { tokenNow(); return false; } catch { return true; }\r\n  };\r\n  async function redactUnreadableSession() {\r\n    try {\r\n      await withDeviceLock(async () => {\r\n        if (!alive || !storageUnavailable()) return;\r\n        const state = await phoneWorkerCommand('state');\r\n        if (alive && storageUnavailable() && state.binding)\r\n          await phoneWorkerCommand('clear', { expected_revision: state.revision });\r\n      });\r\n    } catch { /* No storage or credential can authorize restoration or revocation. */ }\r\n  }\r\n  async function reconcile({ logout = false, force = false, recovery = false, oldToken = observedToken } = {}) {\r\n    let nextToken;\r\n    try { nextToken = tokenNow(); } catch { ++epoch; await redactUnreadableSession(); return; }\r\n    if (!force && !logout && nextToken === observedToken) return;\r\n    observedToken = nextToken;\r\n    const run = ++epoch;\r\n    const current = () => alive && run === epoch && tokenNow() === nextToken;\r\n    try {\r\n      const suspended = await withDeviceLock(async () => {\r\n        if (!current()) return null;\r\n        const state = await phoneWorkerCommand('state');\r\n        if (!current()) return null;\r\n        // A reconnect is a retry of recorded work, not authority to suspend or\r\n        // unsubscribe a binding another tab has installed in the meantime.\r\n        if (recovery && state.binding) return null;\r\n        if (state.binding) {\r\n          const binding = publicBinding(state.binding);\r\n          // Clear even if storage is unavailable; private previews fail closed.\r\n          let stored = true;\r\n          try { localStorage.setItem(SUSPENDED_KEY, JSON.stringify({ binding, revision: state.revision })); }\r\n          catch { stored = false; }\r\n          const cleared = await phoneWorkerCommand('clear', { expected_revision: state.revision });\r\n          const value = { binding, revision: cleared.revision };\r\n          if (stored) localStorage.setItem(SUSPENDED_KEY, JSON.stringify(value));\r\n          return value;\r\n        }\r\n        const raw = localStorage.getItem(SUSPENDED_KEY);\r\n        if (!raw) return null;\r\n        const saved = JSON.parse(raw);\r\n        return { binding: publicBinding(saved.binding), revision: saved.revision };\r\n      });\r\n      if (!current()) return;\r\n      if (!suspended) {\r\n        if (logout) {\r\n          // An interrupted first enrollment may have no server binding yet.\r\n          await retryPhoneCleanup(null, null);\r\n        } else if (nextToken && (cleanupQueue().length || localStorage.getItem(ORPHAN_KEY))) {\r\n          const identity = await authenticatedPhoneRead('push/', nextToken);\r\n          if (alive && run === epoch && tokenNow() === nextToken)\r\n            await retryPhoneCleanup(identity.user_id, nextToken);\r\n        }\r\n        return;\r\n      }\r\n      if (logout) {\r\n        await withDeviceLock(async () => {\r\n          if (!current()) return;\r\n          rememberCleanup(suspended.binding);\r\n          await drainCleanup(suspended.binding.owner_id, oldToken);\r\n          if (localStorage.getItem(SUSPENDED_KEY) === JSON.stringify(suspended)) localStorage.removeItem(SUSPENDED_KEY);\r\n        });\r\n        return;\r\n      }\r\n      if (!nextToken) return; // No credential is not proof of membership revocation.\r\n      const identity = await authenticatedPhoneRead('push/', nextToken);\r\n      if (!alive || run !== epoch || tokenNow() !== nextToken) return;\r\n      if (identity.user_id !== suspended.binding.owner_id) {\r\n        await withDeviceLock(async () => {\r\n          if (!current()) return;\r\n          rememberCleanup(suspended.binding);\r\n          await drainCleanup(suspended.binding.owner_id, oldToken);\r\n          if (localStorage.getItem(SUSPENDED_KEY) === JSON.stringify(suspended)) localStorage.removeItem(SUSPENDED_KEY);\r\n        });\r\n        return;\r\n      }\r\n      const verified = await authenticatedPhoneRead(`push/subscriptions/${suspended.binding.id}/`, nextToken);\r\n      if (!alive || run !== epoch || tokenNow() !== nextToken ||\r\n          verified.id !== suspended.binding.id || verified.generation !== suspended.binding.generation ||\r\n          verified.owner_id !== identity.user_id || verified.revoked !== false || verified.eligible !== true) return;\r\n      // The student entry cannot publish a binding. Resume in the dedicated\r\n      // inbox after fresh authorization, never by trusting browser JWT claims.\r\n      if (location.pathname !== '/studentplayground/inbox/' || location.search) return;\r\n      await withDeviceLock(async () => {\r\n        if (!alive || run !== epoch || tokenNow() !== nextToken) return;\r\n        const state = await phoneWorkerCommand('state');\r\n        if (state.binding || state.revision !== suspended.revision) return;\r\n        await phoneWorkerCommand('bind', { binding: publicBinding(verified), expected_revision: state.revision });\r\n        if (localStorage.getItem(SUSPENDED_KEY) === JSON.stringify(suspended)) localStorage.removeItem(SUSPENDED_KEY);\r\n      });\r\n    } catch {\r\n      // Storage/network/ownership uncertainty must never restore private data.\r\n      // Durable nonsecret records allow a later authenticated reconnect to retry.\r\n    }\r\n  }\r\n  const logout = () => { void reconcile({ logout: true, force: true }); };\r\n  const storage = event => {\r\n    // Storage events can be delivered after a newer write. Act on the current\r\n    // credential, not a queued event describing a previous login/logout.\r\n    try {\r\n      if (event.storageArea && event.storageArea !== localStorage) return;\r\n      if (event.key === 'jwtToken' && event.newValue !== tokenNow()) return;\r\n      if (event.key === null && tokenNow() !== null) return;\r\n    } catch { void redactUnreadableSession(); return; }\r\n    if (event.key === null || (event.key === 'jwtToken' && event.newValue === null))\r\n      void reconcile({ logout: true, force: true, oldToken: event.oldValue || observedToken });\r\n    else if (event.key === 'jwtToken') void reconcile({ oldToken: event.oldValue || observedToken });\r\n  };\r\n  const changed = () => { void reconcile({ force: true }); };\r\n  const focused = () => { void reconcile(); };\r\n  const reopened = () => { void reconcile({ force: true }); };\r\n  const controllerChanged = () => {\r\n    // A committed update is about to discard this context. Starting a clear\r\n    // here can commit in the worker after this page loses the reply needed to\r\n    // save its new revision. The replacement page revalidates on cold start.\r\n    // Unplanned activation still revalidates here; logout/session changes are\r\n    // never suppressed by the update coordinator.\r\n    if (!willReloadAfterWorkerChange()) reopened();\r\n  };\r\n  const pageShown = event => { if (event.persisted) reopened(); };\r\n  const reconnect = () => {\r\n    try { void reconcile({ force: true, recovery: tokenNow() === observedToken }); }\r\n    catch { void redactUnreadableSession(); }\r\n  };\r\n  window.addEventListener('tutory:logout', logout);\r\n  window.addEventListener('tutory:session-changed', changed);\r\n  window.addEventListener('storage', storage);\r\n  window.addEventListener('focus', focused);\r\n  window.addEventListener('online', reconnect);\r\n  window.addEventListener('pageshow', pageShown);\r\n  navigator.serviceWorker.addEventListener('controllerchange', controllerChanged);\r\n  // Every newly opened context revalidates existing ownership. No OS prompt,\r\n  // subscription or decoded JWT claim can establish that ownership.\r\n  reopened();\r\n  return () => {\r\n    alive = false; ++epoch;\r\n    window.removeEventListener('tutory:logout', logout);\r\n    window.removeEventListener('tutory:session-changed', changed);\r\n    window.removeEventListener('storage', storage);\r\n    window.removeEventListener('focus', focused);\r\n    window.removeEventListener('online', reconnect);\r\n    window.removeEventListener('pageshow', pageShown);\r\n    navigator.serviceWorker.removeEventListener('controllerchange', controllerChanged);\r\n  };\r\n}\r\n","const regex_return_characters = /\\r/g;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport function hash(str) {\n\tstr = str.replace(regex_return_characters, '');\n\tlet hash = 5381;\n\tlet i = str.length;\n\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn (hash >>> 0).toString(36);\n}\n\nconst VOID_ELEMENT_NAMES = [\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'keygen',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr'\n];\n\n/**\n * Returns `true` if `name` is of a void element\n * @param {string} name\n */\nexport function is_void(name) {\n\treturn VOID_ELEMENT_NAMES.includes(name) || name.toLowerCase() === '!doctype';\n}\n\nconst RESERVED_WORDS = [\n\t'arguments',\n\t'await',\n\t'break',\n\t'case',\n\t'catch',\n\t'class',\n\t'const',\n\t'continue',\n\t'debugger',\n\t'default',\n\t'delete',\n\t'do',\n\t'else',\n\t'enum',\n\t'eval',\n\t'export',\n\t'extends',\n\t'false',\n\t'finally',\n\t'for',\n\t'function',\n\t'if',\n\t'implements',\n\t'import',\n\t'in',\n\t'instanceof',\n\t'interface',\n\t'let',\n\t'new',\n\t'null',\n\t'package',\n\t'private',\n\t'protected',\n\t'public',\n\t'return',\n\t'static',\n\t'super',\n\t'switch',\n\t'this',\n\t'throw',\n\t'true',\n\t'try',\n\t'typeof',\n\t'var',\n\t'void',\n\t'while',\n\t'with',\n\t'yield'\n];\n\n/**\n * Returns `true` if `word` is a reserved JavaScript keyword\n * @param {string} word\n */\nexport function is_reserved(word) {\n\treturn RESERVED_WORDS.includes(word);\n}\n\n/**\n * @param {string} name\n */\nexport function is_capture_event(name) {\n\treturn name.endsWith('capture') && name !== 'gotpointercapture' && name !== 'lostpointercapture';\n}\n\n/** List of Element events that will be delegated */\nconst DELEGATED_EVENTS = [\n\t'beforeinput',\n\t'click',\n\t'change',\n\t'dblclick',\n\t'contextmenu',\n\t'focusin',\n\t'focusout',\n\t'input',\n\t'keydown',\n\t'keyup',\n\t'mousedown',\n\t'mousemove',\n\t'mouseout',\n\t'mouseover',\n\t'mouseup',\n\t'pointerdown',\n\t'pointermove',\n\t'pointerout',\n\t'pointerover',\n\t'pointerup',\n\t'touchend',\n\t'touchmove',\n\t'touchstart'\n];\n\n/**\n * Returns `true` if `event_name` is a delegated event\n * @param {string} event_name\n */\nexport function can_delegate_event(event_name) {\n\treturn DELEGATED_EVENTS.includes(event_name);\n}\n\n/**\n * Attributes that are boolean, i.e. they are present or not present.\n */\nconst DOM_BOOLEAN_ATTRIBUTES = [\n\t'allowfullscreen',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'disabled',\n\t'formnovalidate',\n\t'indeterminate',\n\t'inert',\n\t'ismap',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'seamless',\n\t'selected',\n\t'webkitdirectory',\n\t'defer',\n\t'disablepictureinpicture',\n\t'disableremoteplayback'\n];\n\n/**\n * Returns `true` if `name` is a boolean attribute\n * @param {string} name\n */\nexport function is_boolean_attribute(name) {\n\treturn DOM_BOOLEAN_ATTRIBUTES.includes(name);\n}\n\n/**\n * @type {Record<string, string>}\n * List of attribute names that should be aliased to their property names\n * because they behave differently between setting them as an attribute and\n * setting them as a property.\n */\nconst ATTRIBUTE_ALIASES = {\n\t// no `class: 'className'` because we handle that separately\n\tformnovalidate: 'formNoValidate',\n\tismap: 'isMap',\n\tnomodule: 'noModule',\n\tplaysinline: 'playsInline',\n\treadonly: 'readOnly',\n\tdefaultvalue: 'defaultValue',\n\tdefaultchecked: 'defaultChecked',\n\tsrcobject: 'srcObject',\n\tnovalidate: 'noValidate',\n\tallowfullscreen: 'allowFullscreen',\n\tdisablepictureinpicture: 'disablePictureInPicture',\n\tdisableremoteplayback: 'disableRemotePlayback'\n};\n\n/**\n * @param {string} name\n */\nexport function normalize_attribute(name) {\n\tname = name.toLowerCase();\n\treturn ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst DOM_PROPERTIES = [\n\t...DOM_BOOLEAN_ATTRIBUTES,\n\t'formNoValidate',\n\t'isMap',\n\t'noModule',\n\t'playsInline',\n\t'readOnly',\n\t'value',\n\t'volume',\n\t'defaultValue',\n\t'defaultChecked',\n\t'srcObject',\n\t'noValidate',\n\t'allowFullscreen',\n\t'disablePictureInPicture',\n\t'disableRemotePlayback'\n];\n\n/**\n * @param {string} name\n */\nexport function is_dom_property(name) {\n\treturn DOM_PROPERTIES.includes(name);\n}\n\nconst NON_STATIC_PROPERTIES = ['autofocus', 'muted', 'defaultValue', 'defaultChecked'];\n\n/**\n * Returns `true` if the given attribute cannot be set through the template\n * string, i.e. needs some kind of JavaScript handling to work.\n * @param {string} name\n */\nexport function cannot_be_set_statically(name) {\n\treturn NON_STATIC_PROPERTIES.includes(name);\n}\n\n/**\n * Subset of delegated events which should be passive by default.\n * These two are already passive via browser defaults on window, document and body.\n * But since\n * - we're delegating them\n * - they happen often\n * - they apply to mobile which is generally less performant\n * we're marking them as passive by default for other elements, too.\n */\nconst PASSIVE_EVENTS = ['touchstart', 'touchmove'];\n\n/**\n * Returns `true` if `name` is a passive event\n * @param {string} name\n */\nexport function is_passive_event(name) {\n\treturn PASSIVE_EVENTS.includes(name);\n}\n\nconst CONTENT_EDITABLE_BINDINGS = ['textContent', 'innerHTML', 'innerText'];\n\n/** @param {string} name */\nexport function is_content_editable_binding(name) {\n\treturn CONTENT_EDITABLE_BINDINGS.includes(name);\n}\n\nconst LOAD_ERROR_ELEMENTS = [\n\t'body',\n\t'embed',\n\t'iframe',\n\t'img',\n\t'link',\n\t'object',\n\t'script',\n\t'style',\n\t'track'\n];\n\n/**\n * Returns `true` if the element emits `load` and `error` events\n * @param {string} name\n */\nexport function is_load_error_element(name) {\n\treturn LOAD_ERROR_ELEMENTS.includes(name);\n}\n\nconst SVG_ELEMENTS = [\n\t'altGlyph',\n\t'altGlyphDef',\n\t'altGlyphItem',\n\t'animate',\n\t'animateColor',\n\t'animateMotion',\n\t'animateTransform',\n\t'circle',\n\t'clipPath',\n\t'color-profile',\n\t'cursor',\n\t'defs',\n\t'desc',\n\t'discard',\n\t'ellipse',\n\t'feBlend',\n\t'feColorMatrix',\n\t'feComponentTransfer',\n\t'feComposite',\n\t'feConvolveMatrix',\n\t'feDiffuseLighting',\n\t'feDisplacementMap',\n\t'feDistantLight',\n\t'feDropShadow',\n\t'feFlood',\n\t'feFuncA',\n\t'feFuncB',\n\t'feFuncG',\n\t'feFuncR',\n\t'feGaussianBlur',\n\t'feImage',\n\t'feMerge',\n\t'feMergeNode',\n\t'feMorphology',\n\t'feOffset',\n\t'fePointLight',\n\t'feSpecularLighting',\n\t'feSpotLight',\n\t'feTile',\n\t'feTurbulence',\n\t'filter',\n\t'font',\n\t'font-face',\n\t'font-face-format',\n\t'font-face-name',\n\t'font-face-src',\n\t'font-face-uri',\n\t'foreignObject',\n\t'g',\n\t'glyph',\n\t'glyphRef',\n\t'hatch',\n\t'hatchpath',\n\t'hkern',\n\t'image',\n\t'line',\n\t'linearGradient',\n\t'marker',\n\t'mask',\n\t'mesh',\n\t'meshgradient',\n\t'meshpatch',\n\t'meshrow',\n\t'metadata',\n\t'missing-glyph',\n\t'mpath',\n\t'path',\n\t'pattern',\n\t'polygon',\n\t'polyline',\n\t'radialGradient',\n\t'rect',\n\t'set',\n\t'solidcolor',\n\t'stop',\n\t'svg',\n\t'switch',\n\t'symbol',\n\t'text',\n\t'textPath',\n\t'tref',\n\t'tspan',\n\t'unknown',\n\t'use',\n\t'view',\n\t'vkern'\n];\n\n/** @param {string} name */\nexport function is_svg(name) {\n\treturn SVG_ELEMENTS.includes(name);\n}\n\nconst MATHML_ELEMENTS = [\n\t'annotation',\n\t'annotation-xml',\n\t'maction',\n\t'math',\n\t'merror',\n\t'mfrac',\n\t'mi',\n\t'mmultiscripts',\n\t'mn',\n\t'mo',\n\t'mover',\n\t'mpadded',\n\t'mphantom',\n\t'mprescripts',\n\t'mroot',\n\t'mrow',\n\t'ms',\n\t'mspace',\n\t'msqrt',\n\t'mstyle',\n\t'msub',\n\t'msubsup',\n\t'msup',\n\t'mtable',\n\t'mtd',\n\t'mtext',\n\t'mtr',\n\t'munder',\n\t'munderover',\n\t'semantics'\n];\n\n/** @param {string} name */\nexport function is_mathml(name) {\n\treturn MATHML_ELEMENTS.includes(name);\n}\n\nconst STATE_CREATION_RUNES = /** @type {const} */ ([\n\t'$state',\n\t'$state.raw',\n\t'$derived',\n\t'$derived.by'\n]);\n\nexport const RUNES = /** @type {const} */ ([\n\t...STATE_CREATION_RUNES,\n\t'$state.eager',\n\t'$state.snapshot',\n\t'$props',\n\t'$props.id',\n\t'$bindable',\n\t'$effect',\n\t'$effect.pre',\n\t'$effect.tracking',\n\t'$effect.root',\n\t'$effect.pending',\n\t'$inspect',\n\t'$inspect().with',\n\t'$inspect.trace',\n\t'$host'\n]);\n\n/** @typedef {typeof RUNES[number]} RuneName */\n\n/**\n * @param {string} name\n * @returns {name is RuneName}\n */\nexport function is_rune(name) {\n\treturn RUNES.includes(/** @type {RuneName} */ (name));\n}\n\n/** @typedef {typeof STATE_CREATION_RUNES[number]} StateCreationRuneName */\n\n/**\n * @param {string} name\n * @returns {name is StateCreationRuneName}\n */\nexport function is_state_creation_rune(name) {\n\treturn STATE_CREATION_RUNES.includes(/** @type {StateCreationRuneName} */ (name));\n}\n\n/** List of elements that require raw contents and should not have SSR comments put in them */\nconst RAW_TEXT_ELEMENTS = /** @type {const} */ (['textarea', 'script', 'style', 'title']);\n\n/** @param {string} name */\nexport function is_raw_text_element(name) {\n\treturn RAW_TEXT_ELEMENTS.includes(/** @type {typeof RAW_TEXT_ELEMENTS[number]} */ (name));\n}\n\n// Matches valid HTML/SVG/MathML element names and custom element names.\n// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n//\n// Standard elements: ASCII alpha start, followed by ASCII alphanumerics.\n// Custom elements: ASCII alpha start, followed by any mix of PCENChar (which\n// includes ASCII alphanumerics, `-`, `.`, `_`, and specified Unicode ranges),\n// with at least one hyphen required somewhere after the first character.\n//\n// Rejects strings containing whitespace, quotes, angle brackets, slashes, equals,\n// or other characters that could break out of a tag-name token and enable markup injection.\nexport const REGEX_VALID_TAG_NAME =\n\t/^[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9.\\-_\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u{10000}-\\u{EFFFF}]*)?$/u;\n\n/**\n * Prevent devtools trying to make `location` a clickable link by inserting a zero-width space\n * @template {string | undefined} T\n * @param {T} location\n * @returns {T};\n */\nexport function sanitize_location(location) {\n\treturn /** @type {T} */ (location?.replace(/\\//g, '/\\u200b'));\n}\n","import { teardown } from '../../reactivity/effects.js';\nimport { define_property } from '../../../shared/utils.js';\nimport { hydrating } from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { FILENAME } from '../../../../constants.js';\nimport * as w from '../../warnings.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { without_reactive_context } from './bindings/shared.js';\n\n/**\n * Used on elements, as a map of event type -> event handler,\n * and on events themselves to track which element handled an event\n */\nexport const event_symbol = Symbol('events');\n\n/** @type {Set<string>} */\nexport const all_registered_events = new Set();\n\n/** @type {Set<(events: Array<string>) => void>} */\nexport const root_event_handles = new Set();\n\n/**\n * SSR adds onload and onerror attributes to catch those events before the hydration.\n * This function detects those cases, removes the attributes and replays the events.\n * @param {HTMLElement} dom\n */\nexport function replay_events(dom) {\n\tif (!hydrating) return;\n\n\tdom.removeAttribute('onload');\n\tdom.removeAttribute('onerror');\n\t// @ts-expect-error\n\tconst event = dom.__e;\n\tif (event !== undefined) {\n\t\t// @ts-expect-error\n\t\tdom.__e = undefined;\n\t\tqueueMicrotask(() => {\n\t\t\tif (dom.isConnected) {\n\t\t\t\tdom.dispatchEvent(event);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {EventTarget} dom\n * @param {EventListener} [handler]\n * @param {AddEventListenerOptions} [options]\n */\nexport function create_event(event_name, dom, handler, options = {}) {\n\t/**\n\t * @this {EventTarget}\n\t */\n\tfunction target_handler(/** @type {Event} */ event) {\n\t\tif (!options.capture) {\n\t\t\t// Only call in the bubble phase, else delegated events would be called before the capturing events\n\t\t\thandle_event_propagation.call(dom, event);\n\t\t}\n\t\tif (!event.cancelBubble) {\n\t\t\treturn without_reactive_context(() => {\n\t\t\t\treturn handler?.call(this, event);\n\t\t\t});\n\t\t}\n\t}\n\n\t// Chrome has a bug where pointer events don't work when attached to a DOM element that has been cloned\n\t// with cloneNode() and the DOM element is disconnected from the document. To ensure the event works, we\n\t// defer the attachment till after it's been appended to the document. TODO: remove this once Chrome fixes\n\t// this bug. The same applies to wheel events and touch events.\n\tif (\n\t\tevent_name.startsWith('pointer') ||\n\t\tevent_name.startsWith('touch') ||\n\t\tevent_name === 'wheel'\n\t) {\n\t\ttarget_handler.__removed = false;\n\t\tqueue_micro_task(() => {\n\t\t\tif (!target_handler.__removed) {\n\t\t\t\tdom.addEventListener(event_name, target_handler, options);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tdom.addEventListener(event_name, target_handler, options);\n\t}\n\n\treturn target_handler;\n}\n\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n *\n * @param {EventTarget} element\n * @param {string} type\n * @param {EventListener} handler\n * @param {AddEventListenerOptions} [options]\n */\nexport function on(element, type, handler, options = {}) {\n\tvar target_handler = create_event(type, element, handler, options);\n\n\treturn () => {\n\t\ttarget_handler.__removed = true;\n\t\telement.removeEventListener(type, target_handler, options);\n\t};\n}\n\n/**\n * @param {string} event_name\n * @param {Element} dom\n * @param {EventListener} [handler]\n * @param {boolean} [capture]\n * @param {boolean} [passive]\n * @returns {void}\n */\nexport function event(event_name, dom, handler, capture, passive) {\n\tvar options = { capture, passive };\n\tvar target_handler = create_event(event_name, dom, handler, options);\n\n\tif (\n\t\tdom === document.body ||\n\t\t// @ts-ignore\n\t\tdom === window ||\n\t\t// @ts-ignore\n\t\tdom === document ||\n\t\t// Firefox has quirky behavior, it can happen that we still get \"canplay\" events when the element is already removed\n\t\tdom instanceof HTMLMediaElement\n\t) {\n\t\tteardown(() => {\n\t\t\ttarget_handler.__removed = true;\n\t\t\tdom.removeEventListener(event_name, target_handler, options);\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {Element} element\n * @param {EventListener} [handler]\n * @returns {void}\n */\nexport function delegated(event_name, element, handler) {\n\t// @ts-expect-error\n\t(element[event_symbol] ??= {})[event_name] = handler;\n}\n\n/**\n * @param {Array<string>} events\n * @returns {void}\n */\nexport function delegate(events) {\n\tfor (var i = 0; i < events.length; i++) {\n\t\tall_registered_events.add(events[i]);\n\t}\n\n\tfor (var fn of root_event_handles) {\n\t\tfn(events);\n\t}\n}\n\n// used to store the reference to the currently propagated event\n// to prevent garbage collection between microtasks in Firefox (<= 141)\n// If the event object is GCed too early, the expando __root property\n// set on the event object is lost, causing the event delegation\n// to process the event twice\nlet last_propagated_event = null;\n\n// whether a task is already queued to clear `last_propagated_event`\nlet last_propagated_event_clear_scheduled = false;\n\n/**\n * @this {EventTarget}\n * @param {Event} event\n * @returns {void}\n */\nexport function handle_event_propagation(event) {\n\tvar handler_element = this;\n\tvar owner_document = /** @type {Node} */ (handler_element).ownerDocument;\n\tvar event_name = event.type;\n\tvar path = event.composedPath?.() || [];\n\tvar current_target = /** @type {null | Element} */ (path[0] || event.target);\n\n\tlast_propagated_event = event;\n\n\t// The reference is only needed while the event can still reach another\n\t// delegated root, i.e. during the current (synchronous) dispatch and its\n\t// microtask checkpoints. Clearing it in a later task preserves the\n\t// Firefox workaround while making sure the slot doesn't retain the last\n\t// event forever — through `event.target` it would otherwise keep the\n\t// entire detached subtree of whatever the user last clicked in alive\n\t// until the next delegated event happens to arrive.\n\tif (!last_propagated_event_clear_scheduled) {\n\t\tlast_propagated_event_clear_scheduled = true;\n\t\tsetTimeout(() => {\n\t\t\tlast_propagated_event_clear_scheduled = false;\n\t\t\tlast_propagated_event = null;\n\t\t});\n\t}\n\n\t// composedPath contains list of nodes the event has propagated through.\n\t// We check `event_symbol` to skip all nodes below it in case this is a\n\t// parent of the `event_symbol` node, which indicates that there's nested\n\t// mounted apps. In this case we don't want to trigger events multiple times.\n\tvar path_idx = 0;\n\n\t// the `last_propagated_event === event` check is redundant, but\n\t// without it the variable will be DCE'd and things will\n\t// fail mysteriously in Firefox\n\t// @ts-expect-error is added below\n\tvar handled_at = last_propagated_event === event && event[event_symbol];\n\n\tif (handled_at) {\n\t\tvar at_idx = path.indexOf(handled_at);\n\t\tif (\n\t\t\tat_idx !== -1 &&\n\t\t\t(handler_element === document || handler_element === /** @type {any} */ (window))\n\t\t) {\n\t\t\t// This is the fallback document listener or a window listener, but the event was already handled\n\t\t\t// -> ignore, but set handle_at to document/window so that we're resetting the event\n\t\t\t// chain in case someone manually dispatches the same event object again.\n\t\t\t// @ts-expect-error\n\t\t\tevent[event_symbol] = handler_element;\n\t\t\treturn;\n\t\t}\n\n\t\t// We're deliberately not skipping if the index is higher, because\n\t\t// someone could create an event programmatically and emit it multiple times,\n\t\t// in which case we want to handle the whole propagation chain properly each time.\n\t\t// (this will only be a false negative if the event is dispatched multiple times and\n\t\t// the fallback document listener isn't reached in between, but that's super rare)\n\t\tvar handler_idx = path.indexOf(handler_element);\n\t\tif (handler_idx === -1) {\n\t\t\t// handle_idx can theoretically be -1 (happened in some JSDOM testing scenarios with an event listener on the window object)\n\t\t\t// so guard against that, too, and assume that everything was handled at this point.\n\t\t\treturn;\n\t\t}\n\n\t\tif (at_idx <= handler_idx) {\n\t\t\tpath_idx = at_idx;\n\t\t}\n\t}\n\n\tcurrent_target = /** @type {Element} */ (path[path_idx] || event.target);\n\t// there can only be one delegated event per element, and we either already handled the current target,\n\t// or this is the very first target in the chain which has a non-delegated listener, in which case it's safe\n\t// to handle a possible delegated event on it later (through the root delegation listener for example).\n\tif (current_target === handler_element) return;\n\n\t// Proxy currentTarget to correct target\n\tdefine_property(event, 'currentTarget', {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn current_target || owner_document;\n\t\t}\n\t});\n\n\t// This started because of Chromium issue https://chromestatus.com/feature/5128696823545856,\n\t// where removal or moving of the DOM can cause sync `blur` events to fire, which can cause logic\n\t// to run inside the current `active_reaction`, which isn't what we want at all. However, on reflection,\n\t// it's probably best that all events handled by Svelte have this behaviour, as we don't really want\n\t// an event handler to run in the context of another reaction or effect.\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\t/**\n\t\t * @type {unknown}\n\t\t */\n\t\tvar throw_error;\n\t\t/**\n\t\t * @type {unknown[]}\n\t\t */\n\t\tvar other_errors = [];\n\n\t\twhile (current_target !== null) {\n\t\t\tif (current_target === handler_element) break;\n\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tvar delegated = current_target[event_symbol]?.[event_name];\n\n\t\t\t\tif (\n\t\t\t\t\tdelegated != null &&\n\t\t\t\t\t(!(/** @type {any} */ (current_target).disabled) ||\n\t\t\t\t\t\t// DOM could've been updated already by the time this is reached, so we check this as well\n\t\t\t\t\t\t// -> the target could not have been disabled because it emits the event in the first place\n\t\t\t\t\t\tevent.target === current_target)\n\t\t\t\t) {\n\t\t\t\t\tdelegated.call(current_target, event);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (throw_error) {\n\t\t\t\t\tother_errors.push(error);\n\t\t\t\t} else {\n\t\t\t\t\tthrow_error = error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (event.cancelBubble) break;\n\n\t\t\tpath_idx++;\n\t\t\tcurrent_target = path_idx < path.length ? /** @type {Element} */ (path[path_idx]) : null;\n\t\t}\n\n\t\tif (throw_error) {\n\t\t\tfor (let error of other_errors) {\n\t\t\t\t// Throw the rest of the errors, one-by-one on a microtask\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow throw_error;\n\t\t}\n\t} finally {\n\t\t// @ts-expect-error is used above\n\t\tevent[event_symbol] = handler_element;\n\t\t// @ts-ignore remove proxy on currentTarget\n\t\tdelete event.currentTarget;\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * In dev, warn if an event handler is not a function, as it means the\n * user probably called the handler or forgot to add a `() =>`\n * @param {() => (event: Event, ...args: any) => void} thunk\n * @param {EventTarget} element\n * @param {[Event, ...any]} args\n * @param {any} component\n * @param {[number, number]} [loc]\n * @param {boolean} [remove_parens]\n */\nexport function apply(\n\tthunk,\n\telement,\n\targs,\n\tcomponent,\n\tloc,\n\thas_side_effects = false,\n\tremove_parens = false\n) {\n\tlet handler;\n\tlet error;\n\n\ttry {\n\t\thandler = thunk();\n\t} catch (e) {\n\t\terror = e;\n\t}\n\n\tif (typeof handler !== 'function' && (has_side_effects || handler != null || error)) {\n\t\tconst filename = component?.[FILENAME];\n\t\tconst location = loc ? ` at ${filename}:${loc[0]}:${loc[1]}` : ` in ${filename}`;\n\t\tconst phase = args[0]?.eventPhase < Event.BUBBLING_PHASE ? 'capture' : '';\n\t\tconst event_name = args[0]?.type + phase;\n\t\tconst description = `\\`${event_name}\\` handler${location}`;\n\t\tconst suggestion = remove_parens ? 'remove the trailing `()`' : 'add a leading `() =>`';\n\n\t\tw.event_handler_invalid(description, suggestion);\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\thandler?.apply(element, args);\n}\n","import { create_element } from './operations.js';\n\nconst policy =\n\t// We gotta write it like this because after downleveling the pure comment may end up in the wrong location\n\tglobalThis?.window?.trustedTypes &&\n\t/* @__PURE__ */ globalThis.window.trustedTypes.createPolicy('svelte-trusted-html', {\n\t\t/** @param {string} html */\n\t\tcreateHTML: (html) => {\n\t\t\treturn html;\n\t\t}\n\t});\n\n/** @param {string} html */\nexport function create_trusted_html(html) {\n\treturn /** @type {string} */ (policy?.createHTML(html) ?? html);\n}\n\n/**\n * @param {string} html\n */\nexport function create_fragment_from_html(html) {\n\tvar elem = create_element('template');\n\telem.innerHTML = create_trusted_html(html.replaceAll('<!>', '<!---->')); // XHTML compliance\n\treturn elem.content;\n}\n","/** @import { Effect, EffectNodes, TemplateNode } from '#client' */\n/** @import { TemplateStructure } from './types' */\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport {\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tis_firefox,\n\tcreate_element,\n\tcreate_fragment,\n\tcreate_comment,\n\tset_attribute,\n\tmerge_text_nodes\n} from './operations.js';\nimport { create_fragment_from_html } from './reconciler.js';\nimport { active_effect } from '../runtime.js';\nimport {\n\tNAMESPACE_MATHML,\n\tNAMESPACE_SVG,\n\tTEMPLATE_FRAGMENT,\n\tTEMPLATE_USE_IMPORT_NODE,\n\tTEMPLATE_USE_MATHML,\n\tTEMPLATE_USE_SVG\n} from '../../../constants.js';\nimport {\n\tCOMMENT_NODE,\n\tDOCUMENT_FRAGMENT_NODE,\n\tIS_XHTML,\n\tREACTION_RAN,\n\tTEXT_NODE\n} from '#client/constants';\n\nconst TEMPLATE_TAG = IS_XHTML ? 'template' : 'TEMPLATE';\nconst SCRIPT_TAG = IS_XHTML ? 'script' : 'SCRIPT';\n\n/**\n * @param {TemplateNode} start\n * @param {TemplateNode | null} end\n */\nexport function assign_nodes(start, end) {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tif (effect.nodes === null) {\n\t\teffect.nodes = { start, end, a: null, t: null };\n\t}\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_html(content, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tnode = create_fragment_from_html(has_start ? content : '<!>' + content);\n\t\t\tif (!is_fragment) node = /** @type {TemplateNode} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @param {'svg' | 'math'} ns\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nfunction from_namespace(content, flags, ns = 'svg') {\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar wrapped = `<${ns}>${has_start ? content : '<!>' + content}</${ns}>`;\n\n\t/** @type {Element | DocumentFragment} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (!node) {\n\t\t\tvar fragment = /** @type {DocumentFragment} */ (create_fragment_from_html(wrapped));\n\t\t\tvar root = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (is_fragment) {\n\t\t\t\tnode = document.createDocumentFragment();\n\t\t\t\twhile (get_first_child(root)) {\n\t\t\t\t\tnode.appendChild(/** @type {TemplateNode} */ (get_first_child(root)));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode = /** @type {Element} */ (get_first_child(root));\n\t\t\t}\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (node.cloneNode(true));\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_svg(content, flags) {\n\treturn from_namespace(content, flags, 'svg');\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_mathml(content, flags) {\n\treturn from_namespace(content, flags, 'math');\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {typeof NAMESPACE_SVG | typeof NAMESPACE_MATHML | undefined} [ns]\n */\nfunction fragment_from_tree(structure, ns) {\n\tvar fragment = create_fragment();\n\n\tfor (var item of structure) {\n\t\tif (typeof item === 'string') {\n\t\t\tfragment.append(create_text(item));\n\t\t\tcontinue;\n\t\t}\n\n\t\t// if `preserveComments === true`, comments are represented as `['// <data>']`\n\t\tif (item === undefined || item[0][0] === '/') {\n\t\t\tfragment.append(create_comment(item ? item[0].slice(3) : ''));\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [name, attributes, ...children] = item;\n\n\t\tconst namespace = name === 'svg' ? NAMESPACE_SVG : name === 'math' ? NAMESPACE_MATHML : ns;\n\n\t\tvar element = create_element(name, namespace, attributes?.is);\n\n\t\tfor (var key in attributes) {\n\t\t\tset_attribute(element, key, attributes[key]);\n\t\t}\n\n\t\tif (children.length > 0) {\n\t\t\tvar target =\n\t\t\t\telement.nodeName === TEMPLATE_TAG\n\t\t\t\t\t? /** @type {HTMLTemplateElement} */ (element).content\n\t\t\t\t\t: element;\n\n\t\t\ttarget.append(\n\t\t\t\tfragment_from_tree(children, element.nodeName === 'foreignObject' ? undefined : namespace)\n\t\t\t);\n\t\t}\n\n\t\tfragment.append(element);\n\t}\n\n\treturn fragment;\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_tree(structure, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tconst ns =\n\t\t\t\t(flags & TEMPLATE_USE_SVG) !== 0\n\t\t\t\t\t? NAMESPACE_SVG\n\t\t\t\t\t: (flags & TEMPLATE_USE_MATHML) !== 0\n\t\t\t\t\t\t? NAMESPACE_MATHML\n\t\t\t\t\t\t: undefined;\n\n\t\t\tnode = fragment_from_tree(structure, ns);\n\t\t\tif (!is_fragment) node = /** @type {TemplateNode} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {() => Element | DocumentFragment} fn\n */\nexport function with_script(fn) {\n\treturn () => run_scripts(fn());\n}\n\n/**\n * Creating a document fragment from HTML that contains script tags will not execute\n * the scripts. We need to replace the script tags with new ones so that they are executed.\n * @param {Element | DocumentFragment} node\n * @returns {Node | Node[]}\n */\nfunction run_scripts(node) {\n\t// scripts were SSR'd, in which case they will run\n\tif (hydrating) return node;\n\n\tconst is_fragment = node.nodeType === DOCUMENT_FRAGMENT_NODE;\n\tconst scripts =\n\t\t/** @type {HTMLElement} */ (node).nodeName === SCRIPT_TAG\n\t\t\t? [/** @type {HTMLScriptElement} */ (node)]\n\t\t\t: node.querySelectorAll('script');\n\n\tconst effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\tfor (const script of scripts) {\n\t\tconst clone = create_element('script');\n\t\tfor (var attribute of script.attributes) {\n\t\t\tclone.setAttribute(attribute.name, attribute.value);\n\t\t}\n\n\t\tclone.textContent = script.textContent;\n\n\t\t// The script has changed - if it's at the edges, the effect now points at dead nodes\n\t\tif (is_fragment ? node.firstChild === script : node === script) {\n\t\t\teffect.nodes.start = clone;\n\t\t}\n\t\tif (is_fragment ? node.lastChild === script : node === script) {\n\t\t\teffect.nodes.end = clone;\n\t\t}\n\n\t\tscript.replaceWith(clone);\n\t}\n\treturn node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {any} value\n */\nexport function text(value = '') {\n\tif (!hydrating) {\n\t\tvar t = create_text(value + '');\n\t\tassign_nodes(t, t);\n\t\treturn t;\n\t}\n\n\tvar node = hydrate_node;\n\n\tif (node.nodeType !== TEXT_NODE) {\n\t\t// if an {expression} is empty during SSR, we need to insert an empty text node\n\t\tnode.before((node = create_text()));\n\t\tset_hydrate_node(node);\n\t} else {\n\t\tmerge_text_nodes(/** @type {Text} */ (node));\n\t}\n\n\tassign_nodes(node, node);\n\treturn node;\n}\n\n/**\n * @returns {TemplateNode | DocumentFragment}\n */\nexport function comment() {\n\t// we're not delegating to `template` here for performance reasons\n\tif (hydrating) {\n\t\tassign_nodes(hydrate_node, null);\n\t\treturn hydrate_node;\n\t}\n\n\tvar frag = document.createDocumentFragment();\n\tvar start = document.createComment('');\n\tvar anchor = create_text();\n\tfrag.append(start, anchor);\n\n\tassign_nodes(start, anchor);\n\n\treturn frag;\n}\n\n/**\n * Assign the created (or in hydration mode, traversed) dom elements to the current block\n * and insert the elements into the dom (in client mode).\n * @param {Text | Comment | Element} anchor\n * @param {DocumentFragment | Element} dom\n */\nexport function append(anchor, dom) {\n\tif (hydrating) {\n\t\tvar effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\t\t// When hydrating and outer component and an inner component is async, i.e. blocked on a promise,\n\t\t// then by the time the inner resolves we have already advanced to the end of the hydrated nodes\n\t\t// of the parent component. Check for defined for that reason to avoid rewinding the parent's end marker.\n\t\tif ((effect.f & REACTION_RAN) === 0 || effect.nodes.end === null) {\n\t\t\teffect.nodes.end = hydrate_node;\n\t\t}\n\n\t\thydrate_next();\n\t\treturn;\n\t}\n\n\tif (anchor === null) {\n\t\t// edge case — void `<svelte:element>` with content\n\t\treturn;\n\t}\n\n\tanchor.before(/** @type {Node} */ (dom));\n}\n\n/**\n * Create (or hydrate) an unique UID for the component instance.\n */\nexport function props_id() {\n\tif (\n\t\thydrating &&\n\t\thydrate_node &&\n\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\thydrate_node.textContent?.startsWith(`$`)\n\t) {\n\t\tconst id = hydrate_node.textContent.substring(1);\n\t\thydrate_next();\n\t\treturn id;\n\t}\n\n\t// @ts-expect-error This way we ensure the id is unique even across Svelte runtimes\n\t(window.__svelte ??= {}).uid ??= 1;\n\n\t// @ts-expect-error\n\treturn `c${window.__svelte.uid++}`;\n}\n","/** @import { Effect, Source, TemplateNode, } from '#client' */\nimport {\n\tBOUNDARY_EFFECT,\n\tDESTROYED,\n\tDESTROYING,\n\tEFFECT_PRESERVED,\n\tEFFECT_TRANSPARENT\n} from '#client/constants';\nimport {\n\tHYDRATION_ERROR,\n\tHYDRATION_START_ELSE,\n\tHYDRATION_START_FAILED\n} from '../../../../constants.js';\nimport { component_context, set_component_context } from '../../context.js';\nimport { invoke_error_boundary } from '../../error-handling.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect\n} from '../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tnext,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node\n} from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport * as e from '../../errors.js';\nimport * as w from '../../warnings.js';\nimport { DEV } from 'esm-env';\nimport { Batch, current_batch } from '../../reactivity/batch.js';\nimport { internal_set, source } from '../../reactivity/sources.js';\nimport { tag } from '../../dev/tracing.js';\nimport { createSubscriber } from '../../../../reactivity/create-subscriber.js';\nimport { create_text } from '../operations.js';\nimport { defer_effect } from '../../reactivity/utils.js';\n\n/**\n * @typedef {{\n * \t onerror?: ((error: unknown, reset: () => void) => void) | null;\n *   failed?: ((anchor: Node, error: () => unknown, reset: () => () => void) => void) | null;\n *   pending?: ((anchor: Node) => void) | null;\n * }} BoundaryProps\n */\n\nvar flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;\n\n/**\n * @param {TemplateNode} node\n * @param {BoundaryProps} props\n * @param {((anchor: Node) => void)} children\n * @param {((error: unknown) => unknown) | undefined} [transform_error]\n * @returns {void}\n */\nexport function boundary(node, props, children, transform_error) {\n\tnew Boundary(node, props, children, transform_error);\n}\n\nexport class Boundary {\n\t/** @type {Boundary | null} */\n\tparent;\n\n\tis_pending = false;\n\n\t/**\n\t * API-level transformError transform function. Transforms errors before they reach the `failed` snippet.\n\t * Inherited from parent boundary, or defaults to identity.\n\t * @type {(error: unknown) => unknown}\n\t */\n\ttransform_error;\n\n\t/** @type {TemplateNode} */\n\t#anchor;\n\n\t/** @type {TemplateNode | null} */\n\t#hydrate_open = hydrating ? hydrate_node : null;\n\n\t/** @type {BoundaryProps} */\n\t#props;\n\n\t/** @type {((anchor: Node) => void)} */\n\t#children;\n\n\t/** @type {Effect} */\n\t#effect;\n\n\t/** @type {Effect | null} */\n\t#main_effect = null;\n\n\t/** @type {Effect | null} */\n\t#pending_effect = null;\n\n\t/** @type {Effect | null} */\n\t#failed_effect = null;\n\n\t/** @type {DocumentFragment | null} */\n\t#offscreen_fragment = null;\n\n\t#local_pending_count = 0;\n\t#pending_count = 0;\n\t#pending_count_update_queued = false;\n\n\t/** @type {Set<Effect>} */\n\t#dirty_effects = new Set();\n\n\t/** @type {Set<Effect>} */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A source containing the number of pending async deriveds/expressions.\n\t * Only created if `$effect.pending()` is used inside the boundary,\n\t * otherwise updating the source results in needless `Batch.ensure()`\n\t * calls followed by no-op flushes\n\t * @type {Source<number> | null}\n\t */\n\t#effect_pending = null;\n\n\t#effect_pending_subscriber = createSubscriber(() => {\n\t\tthis.#effect_pending = source(this.#local_pending_count);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#effect_pending, '$effect.pending()');\n\t\t}\n\n\t\treturn () => {\n\t\t\tthis.#effect_pending = null;\n\t\t};\n\t});\n\n\t/**\n\t * @param {TemplateNode} node\n\t * @param {BoundaryProps} props\n\t * @param {((anchor: Node) => void)} children\n\t * @param {((error: unknown) => unknown) | undefined} [transform_error]\n\t */\n\tconstructor(node, props, children, transform_error) {\n\t\tthis.#anchor = node;\n\t\tthis.#props = props;\n\n\t\tthis.#children = (anchor) => {\n\t\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t\teffect.b = this;\n\t\t\teffect.f |= BOUNDARY_EFFECT;\n\n\t\t\tchildren(anchor);\n\t\t};\n\n\t\tthis.parent = /** @type {Effect} */ (active_effect).b;\n\n\t\t// Inherit transform_error from parent boundary, or use the provided one, or default to identity\n\t\tthis.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e);\n\n\t\tthis.#effect = block(() => {\n\t\t\tif (hydrating) {\n\t\t\t\tconst comment_data = read_hydration_instruction(\n\t\t\t\t\t/** @type {TemplateNode} */ (this.#hydrate_open)\n\t\t\t\t);\n\t\t\t\thydrate_next();\n\n\t\t\t\tconst server_rendered_pending = comment_data === HYDRATION_START_ELSE;\n\t\t\t\tconst server_rendered_failed = comment_data.startsWith(HYDRATION_START_FAILED);\n\n\t\t\t\tif (server_rendered_failed) {\n\t\t\t\t\t// Server rendered the failed snippet - hydrate it.\n\t\t\t\t\t// The serialized error is embedded in the comment: <!--[?<json>-->\n\t\t\t\t\tconst serialized_error = JSON.parse(comment_data.slice(HYDRATION_START_FAILED.length));\n\t\t\t\t\tthis.#hydrate_failed_content(serialized_error);\n\t\t\t\t} else if (server_rendered_pending) {\n\t\t\t\t\tthis.#hydrate_pending_content();\n\t\t\t\t} else {\n\t\t\t\t\tthis.#hydrate_resolved_content();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.#render();\n\t\t\t}\n\t\t}, flags);\n\n\t\tif (hydrating) {\n\t\t\tthis.#anchor = hydrate_node;\n\t\t}\n\t}\n\n\t#hydrate_resolved_content() {\n\t\ttry {\n\t\t\tthis.#main_effect = branch(() => this.#children(this.#anchor));\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {unknown} error The deserialized error from the server's hydration comment\n\t */\n\t#hydrate_failed_content(error) {\n\t\tconst failed = this.#props.failed;\n\t\tconst { reset, invoke_onerror } = this.#create_reset(error);\n\n\t\t// `onerror` may mutate state, which is disallowed while hydrating\n\t\tqueue_micro_task(invoke_onerror);\n\n\t\tif (!failed) return;\n\n\t\tthis.#failed_effect = branch(() => {\n\t\t\tfailed(\n\t\t\t\tthis.#anchor,\n\t\t\t\t() => error,\n\t\t\t\t() => reset\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Creates the `reset` function for a failed boundary, along with a function\n\t * that invokes `onerror` with it (if provided)\n\t * @param {unknown} error\n\t * @returns {{ reset: () => void, invoke_onerror: () => void }}\n\t */\n\t#create_reset(error) {\n\t\tvar did_reset = false;\n\t\tvar calling_on_error = false;\n\n\t\tconst reset = () => {\n\t\t\tif (this.#is_destroyed()) return;\n\n\t\t\tif (did_reset) {\n\t\t\t\tw.svelte_boundary_reset_noop();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdid_reset = true;\n\n\t\t\tif (calling_on_error) {\n\t\t\t\te.svelte_boundary_reset_onerror();\n\t\t\t}\n\n\t\t\tif (this.#failed_effect !== null) {\n\t\t\t\tpause_effect(this.#failed_effect, () => {\n\t\t\t\t\tthis.#failed_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.#run(() => {\n\t\t\t\tthis.#render();\n\t\t\t});\n\t\t};\n\n\t\tconst invoke_onerror = () => {\n\t\t\tif (this.#is_destroyed()) return;\n\n\t\t\ttry {\n\t\t\t\tcalling_on_error = true;\n\t\t\t\tthis.#props.onerror?.(error, reset);\n\t\t\t\tcalling_on_error = false;\n\t\t\t} catch (err) {\n\t\t\t\tinvoke_error_boundary(err, this.#effect && this.#effect.parent);\n\t\t\t}\n\t\t};\n\n\t\treturn { reset, invoke_onerror };\n\t}\n\n\t#is_destroyed() {\n\t\treturn (this.#effect.f & (DESTROYED | DESTROYING)) !== 0;\n\t}\n\n\t#hydrate_pending_content() {\n\t\tconst pending = this.#props.pending;\n\t\tif (!pending) return;\n\n\t\tthis.is_pending = true;\n\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (this.#is_destroyed()) return;\n\n\t\t\tvar fragment = (this.#offscreen_fragment = document.createDocumentFragment());\n\t\t\tvar anchor = create_text();\n\t\t\tvar handled = false;\n\n\t\t\tfragment.append(anchor);\n\n\t\t\tthis.#main_effect = this.#run(() => {\n\t\t\t\ttry {\n\t\t\t\t\treturn branch(() => this.#children(anchor));\n\t\t\t\t} catch (error) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.error(error);\n\t\t\t\t\t\thandled = true;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tinvoke_error_boundary(error, this.#effect.parent);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (this.#main_effect === null) {\n\t\t\t\tthis.#offscreen_fragment = null;\n\t\t\t\tif (handled) this.#resolve(/** @type {Batch} */ (current_batch));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.#pending_count === 0) {\n\t\t\t\tthis.#anchor.before(fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\n\t\t\t\tpause_effect(/** @type {Effect} */ (this.#pending_effect), () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\n\t\t\t\tthis.#resolve(/** @type {Batch} */ (current_batch));\n\t\t\t}\n\t\t});\n\t}\n\n\t#render() {\n\t\ttry {\n\t\t\tthis.is_pending = this.has_pending_snippet();\n\t\t\tthis.#pending_count = 0;\n\t\t\tthis.#local_pending_count = 0;\n\n\t\t\tthis.#main_effect = branch(() => {\n\t\t\t\tthis.#children(this.#anchor);\n\t\t\t});\n\n\t\t\tif (this.#pending_count > 0) {\n\t\t\t\tvar fragment = (this.#offscreen_fragment = document.createDocumentFragment());\n\t\t\t\tmove_effect(this.#main_effect, fragment);\n\n\t\t\t\tconst pending = /** @type {(anchor: Node) => void} */ (this.#props.pending);\n\t\t\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\t\t\t} else {\n\t\t\t\tthis.#resolve(/** @type {Batch} */ (current_batch));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#resolve(batch) {\n\t\tthis.is_pending = false;\n\n\t\t// any effects that were previously deferred should be transferred\n\t\t// to the batch, which will flush in the next microtask\n\t\tbatch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects);\n\t}\n\n\t/**\n\t * Defer an effect inside a pending boundary until the boundary resolves\n\t * @param {Effect} effect\n\t */\n\tdefer_effect(effect) {\n\t\tdefer_effect(effect, this.#dirty_effects, this.#maybe_dirty_effects);\n\t}\n\n\t/**\n\t * Returns `false` if the effect exists inside a boundary whose pending snippet is shown\n\t * @returns {boolean}\n\t */\n\tis_rendered() {\n\t\treturn !this.is_pending && (!this.parent || this.parent.is_rendered());\n\t}\n\n\thas_pending_snippet() {\n\t\treturn !!this.#props.pending;\n\t}\n\n\t/**\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\t#run(fn) {\n\t\tvar previous_effect = active_effect;\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_ctx = component_context;\n\n\t\tset_active_effect(this.#effect);\n\t\tset_active_reaction(this.#effect);\n\t\tset_component_context(this.#effect.ctx);\n\n\t\ttry {\n\t\t\tBatch.ensure();\n\t\t\treturn fn();\n\t\t} finally {\n\t\t\tset_active_effect(previous_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t\tset_component_context(previous_ctx);\n\t\t}\n\t}\n\n\t/**\n\t * Updates the pending count associated with the currently visible pending snippet,\n\t * if any, such that we can replace the snippet with content once work is done\n\t * @param {1 | -1} d\n\t * @param {Batch} batch\n\t */\n\t#update_pending_count(d, batch) {\n\t\tif (!this.has_pending_snippet()) {\n\t\t\tif (this.parent) {\n\t\t\t\tthis.parent.#update_pending_count(d, batch);\n\t\t\t}\n\n\t\t\t// if there's no parent, we're in a scope with no pending snippet\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#pending_count += d;\n\n\t\tif (this.#pending_count === 0) {\n\t\t\tthis.#resolve(batch);\n\n\t\t\tif (this.#pending_effect) {\n\t\t\t\tpause_effect(this.#pending_effect, () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.#offscreen_fragment) {\n\t\t\t\tthis.#anchor.before(this.#offscreen_fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Update the source that powers `$effect.pending()` inside this boundary,\n\t * and controls when the current `pending` snippet (if any) is removed.\n\t * Do not call from inside the class\n\t * @param {1 | -1} d\n\t * @param {Batch} batch\n\t */\n\tupdate_pending_count(d, batch) {\n\t\tthis.#update_pending_count(d, batch);\n\n\t\tthis.#local_pending_count += d;\n\n\t\tif (!this.#effect_pending || this.#pending_count_update_queued) return;\n\t\tthis.#pending_count_update_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#pending_count_update_queued = false;\n\t\t\tif (this.#effect_pending) {\n\t\t\t\tinternal_set(this.#effect_pending, this.#local_pending_count);\n\t\t\t}\n\t\t});\n\t}\n\n\tget_effect_pending() {\n\t\tthis.#effect_pending_subscriber();\n\t\treturn get(/** @type {Source<number>} */ (this.#effect_pending));\n\t}\n\n\t/** @param {unknown} error */\n\terror(error) {\n\t\tif (error === HYDRATION_ERROR) {\n\t\t\tthrow error;\n\t\t}\n\n\t\t// If we have nothing to capture the error, or if we hit an error while\n\t\t// rendering the fallback, re-throw for another boundary to handle\n\t\tif (!this.#props.onerror && !this.#props.failed) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (current_batch?.is_fork) {\n\t\t\tif (this.#main_effect) current_batch.skip_effect(this.#main_effect);\n\t\t\tif (this.#pending_effect) current_batch.skip_effect(this.#pending_effect);\n\t\t\tif (this.#failed_effect) current_batch.skip_effect(this.#failed_effect);\n\n\t\t\tcurrent_batch.oncommit(() => {\n\t\t\t\tif (!this.#is_destroyed()) this.#handle_error(error);\n\t\t\t});\n\t\t} else {\n\t\t\tthis.#handle_error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {unknown} error\n\t */\n\t#handle_error(error) {\n\t\tif (this.#main_effect) {\n\t\t\tdestroy_effect(this.#main_effect);\n\t\t\tthis.#main_effect = null;\n\t\t}\n\n\t\tif (this.#pending_effect) {\n\t\t\tdestroy_effect(this.#pending_effect);\n\t\t\tthis.#pending_effect = null;\n\t\t}\n\n\t\tif (this.#failed_effect) {\n\t\t\tdestroy_effect(this.#failed_effect);\n\t\t\tthis.#failed_effect = null;\n\t\t}\n\n\t\tif (hydrating) {\n\t\t\tset_hydrate_node(/** @type {TemplateNode} */ (this.#hydrate_open));\n\t\t\tnext();\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tlet failed = this.#props.failed;\n\n\t\t/** @param {unknown} transformed_error */\n\t\tconst handle_error_result = (transformed_error) => {\n\t\t\tif (this.#is_destroyed()) return;\n\n\t\t\tconst { reset, invoke_onerror } = this.#create_reset(transformed_error);\n\n\t\t\tinvoke_onerror();\n\n\t\t\tif (failed && !this.#is_destroyed()) {\n\t\t\t\tthis.#failed_effect = this.#run(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn branch(() => {\n\t\t\t\t\t\t\t// errors in `failed` snippets cause the boundary to error again\n\t\t\t\t\t\t\t// TODO Svelte 6: revisit this decision, most likely better to go to parent boundary instead\n\t\t\t\t\t\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t\t\t\t\t\teffect.b = this;\n\t\t\t\t\t\t\teffect.f |= BOUNDARY_EFFECT;\n\n\t\t\t\t\t\t\tfailed(\n\t\t\t\t\t\t\t\tthis.#anchor,\n\t\t\t\t\t\t\t\t() => transformed_error,\n\t\t\t\t\t\t\t\t() => reset\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tinvoke_error_boundary(error, /** @type {Effect} */ (this.#effect.parent));\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (this.#is_destroyed()) return;\n\n\t\t\t// Run the error through the API-level transformError transform (e.g. SvelteKit's handleError)\n\t\t\t/** @type {unknown} */\n\t\t\tvar result;\n\t\t\ttry {\n\t\t\t\tresult = this.transform_error(error);\n\t\t\t} catch (e) {\n\t\t\t\tinvoke_error_boundary(e, this.#effect && this.#effect.parent);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tresult !== null &&\n\t\t\t\ttypeof result === 'object' &&\n\t\t\t\ttypeof (/** @type {any} */ (result).then) === 'function'\n\t\t\t) {\n\t\t\t\t// transformError returned a Promise — wait for it\n\t\t\t\t/** @type {any} */ (result).then(\n\t\t\t\t\thandle_error_result,\n\t\t\t\t\t/** @param {unknown} e */\n\t\t\t\t\t(e) => invoke_error_boundary(e, this.#effect && this.#effect.parent)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Synchronous result — handle immediately\n\t\t\t\thandle_error_result(result);\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport function pending() {\n\tif (active_effect === null) {\n\t\te.effect_pending_outside_reaction();\n\t}\n\n\tvar boundary = active_effect.b;\n\n\tif (boundary === null) {\n\t\treturn 0; // TODO eventually we will need this to be global\n\t}\n\n\treturn boundary.get_effect_pending();\n}\n","import { get, tick, untrack } from '../internal/client/runtime.js';\nimport { effect_tracking, render_effect } from '../internal/client/reactivity/effects.js';\nimport { source, increment } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { DEV } from 'esm-env';\nimport { queue_micro_task } from '../internal/client/dom/task.js';\n\n/**\n * Returns a `subscribe` function that integrates external event-based systems with Svelte's reactivity.\n * It's particularly useful for integrating with web APIs like `MediaQuery`, `IntersectionObserver`, or `WebSocket`.\n *\n * If `subscribe` is called inside an effect (including indirectly, for example inside a getter),\n * the `start` callback will be called with an `update` function. Whenever `update` is called, the effect re-runs.\n *\n * If `start` returns a cleanup function, it will be called when the effect is destroyed.\n *\n * If `subscribe` is called in multiple effects, `start` will only be called once as long as the effects\n * are active, and the returned teardown function will only be called when all effects are destroyed.\n *\n * It's best understood with an example. Here's an implementation of [`MediaQuery`](https://svelte.dev/docs/svelte/svelte-reactivity#MediaQuery):\n *\n * ```js\n * import { createSubscriber } from 'svelte/reactivity';\n * import { on } from 'svelte/events';\n *\n * export class MediaQuery {\n * \t#query;\n * \t#subscribe;\n *\n * \tconstructor(query) {\n * \t\tthis.#query = window.matchMedia(`(${query})`);\n *\n * \t\tthis.#subscribe = createSubscriber((update) => {\n * \t\t\t// when the `change` event occurs, re-run any effects that read `this.current`\n * \t\t\tconst off = on(this.#query, 'change', update);\n *\n * \t\t\t// stop listening when all the effects are destroyed\n * \t\t\treturn () => off();\n * \t\t});\n * \t}\n *\n * \tget current() {\n * \t\t// This makes the getter reactive, if read in an effect\n * \t\tthis.#subscribe();\n *\n * \t\t// Return the current state of the query, whether or not we're in an effect\n * \t\treturn this.#query.matches;\n * \t}\n * }\n * ```\n * @param {(update: () => void) => (() => void) | void} start\n * @since 5.7.0\n */\nexport function createSubscriber(start) {\n\tlet subscribers = 0;\n\tlet version = source(0);\n\t/** @type {(() => void) | void} */\n\tlet stop;\n\n\tif (DEV) {\n\t\ttag(version, 'createSubscriber version');\n\t}\n\n\treturn () => {\n\t\tif (effect_tracking()) {\n\t\t\tget(version);\n\n\t\t\trender_effect(() => {\n\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\tstop = untrack(() => start(() => increment(version)));\n\t\t\t\t}\n\n\t\t\t\tsubscribers += 1;\n\n\t\t\t\treturn () => {\n\t\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\t\t// Only count down after a microtask, else we would reach 0 before our own render effect reruns,\n\t\t\t\t\t\t// but reach 1 again when the tick callback of the prior teardown runs. That would mean we\n\t\t\t\t\t\t// re-subcribe unnecessarily and create a memory leak because the old subscription is never cleaned up.\n\t\t\t\t\t\tsubscribers -= 1;\n\n\t\t\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\t\t\tstop?.();\n\t\t\t\t\t\t\tstop = undefined;\n\t\t\t\t\t\t\t// Increment the version to ensure any dependent deriveds are marked dirty when the subscription is picked up again later.\n\t\t\t\t\t\t\t// If we didn't do this then the comparison of write versions would determine that the derived has a later version than\n\t\t\t\t\t\t\t// the subscriber, and it would not be re-run.\n\t\t\t\t\t\t\tincrement(version);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t};\n}\n","/** @import { ComponentContext, Effect, EffectNodes, TemplateNode } from '#client' */\n/** @import { Component, ComponentType, SvelteComponent, MountOptions } from '../../index.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tinit_operations\n} from './dom/operations.js';\nimport { HYDRATION_END, HYDRATION_ERROR, HYDRATION_START } from '../../constants.js';\nimport { active_effect } from './runtime.js';\nimport { push, pop, component_context, mark_as_component } from './context.js';\nimport { component_root } from './reactivity/effects.js';\nimport { hydrate_node, hydrating, set_hydrate_node, set_hydrating } from './dom/hydration.js';\nimport { array_from } from '../shared/utils.js';\nimport {\n\tall_registered_events,\n\thandle_event_propagation,\n\troot_event_handles\n} from './dom/elements/events.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\nimport { assign_nodes } from './dom/template.js';\nimport { is_passive_event } from '../../utils.js';\nimport { COMMENT_NODE, TEXT_CACHE } from './constants.js';\nimport { boundary } from './dom/blocks/boundary.js';\n\n/**\n * This is normally true — block effects should run their intro transitions —\n * but is false during hydration (unless `options.intro` is `true`) and\n * when creating the children of a `<svelte:element>` that just changed tag\n */\nexport let should_intro = true;\n\n/** @param {boolean} value */\nexport function set_should_intro(value) {\n\tshould_intro = value;\n}\n\n/**\n * @param {Element} text\n * @param {string} value\n * @returns {void}\n */\nexport function set_text(text, value) {\n\t// For objects, we apply string coercion (which might make things like $state array references in the template reactive) before diffing\n\tvar str = value == null ? '' : typeof value === 'object' ? `${value}` : value;\n\t// prettier-ignore\n\tif (str !== (/** @type {any} */ (text)[TEXT_CACHE] ??= text.nodeValue)) {\n\t\t/** @type {any} */ (text)[TEXT_CACHE] = str;\n\t\ttext.nodeValue = `${str}`;\n\t}\n}\n\n/**\n * Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.\n * Transitions will play during the initial render unless the `intro` option is set to `false`.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {MountOptions<Props>} options\n * @returns {Exports}\n */\nexport function mount(component, options) {\n\treturn _mount(component, options);\n}\n\n/**\n * Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {{} extends Props ? {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops?: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n *  \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n *\t\ttransformError?: (error: unknown) => unknown;\n * \t} : {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n *  \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n *\t\ttransformError?: (error: unknown) => unknown;\n * \t}} options\n * @returns {Exports}\n */\nexport function hydrate(component, options) {\n\tinit_operations();\n\toptions.intro = options.intro ?? false;\n\tconst target = options.target;\n\tconst was_hydrating = hydrating;\n\tconst previous_hydrate_node = hydrate_node;\n\n\ttry {\n\t\tvar anchor = get_first_child(target);\n\n\t\twhile (\n\t\t\tanchor &&\n\t\t\t(anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ (anchor).data !== HYDRATION_START)\n\t\t) {\n\t\t\tanchor = get_next_sibling(anchor);\n\t\t}\n\n\t\tif (!anchor) {\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(/** @type {Comment} */ (anchor));\n\n\t\tconst instance = _mount(component, { ...options, anchor });\n\n\t\tset_hydrating(false);\n\n\t\treturn /**  @type {Exports} */ (instance);\n\t} catch (error) {\n\t\t// re-throw Svelte errors - they are certainly not related to hydration\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\terror.message.split('\\n').some((line) => line.startsWith('https://svelte.dev/e/'))\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\tif (error !== HYDRATION_ERROR) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Failed to hydrate: ', error);\n\t\t}\n\n\t\tif (options.recover === false) {\n\t\t\te.hydration_failed();\n\t\t}\n\n\t\t// If an error occurred above, the operations might not yet have been initialised.\n\t\tinit_operations();\n\t\tclear_text_content(target);\n\n\t\tset_hydrating(false);\n\t\treturn mount(component, options);\n\t} finally {\n\t\tset_hydrating(was_hydrating);\n\t\tset_hydrate_node(previous_hydrate_node);\n\t}\n}\n\n/** @type {Map<EventTarget, Map<string, number>>} */\nconst listeners = new Map();\n\n/**\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<any>> | Component<any>} Component\n * @param {MountOptions} options\n * @returns {Exports}\n */\nfunction _mount(\n\tComponent,\n\t{ target, anchor, props = {}, events, context, intro = true, transformError }\n) {\n\tinit_operations();\n\n\t/** @type {Exports} */\n\t// @ts-expect-error will be defined because the render effect runs synchronously\n\tvar component = undefined;\n\n\tvar unmount = component_root(() => {\n\t\tvar anchor_node = anchor ?? target.appendChild(create_text());\n\n\t\tboundary(\n\t\t\t/** @type {TemplateNode} */ (anchor_node),\n\t\t\t{\n\t\t\t\tpending: () => {}\n\t\t\t},\n\t\t\t(anchor_node) => {\n\t\t\t\tpush({});\n\t\t\t\tvar ctx = /** @type {ComponentContext} */ (component_context);\n\t\t\t\tif (context) ctx.c = context;\n\n\t\t\t\tif (events) {\n\t\t\t\t\t// We can't spread the object or else we'd lose the state proxy stuff, if it is one\n\t\t\t\t\t/** @type {any} */ (props).$$events = events;\n\t\t\t\t}\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\tassign_nodes(/** @type {TemplateNode} */ (anchor_node), null);\n\t\t\t\t}\n\n\t\t\t\tshould_intro = intro;\n\t\t\t\t// @ts-expect-error the public typings are not what the actual function looks like\n\t\t\t\tcomponent = Component(anchor_node, props) || mark_as_component();\n\t\t\t\tshould_intro = true;\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\t/** @type {Effect & { nodes: EffectNodes }} */ (active_effect).nodes.end = hydrate_node;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\thydrate_node === null ||\n\t\t\t\t\t\thydrate_node.nodeType !== COMMENT_NODE ||\n\t\t\t\t\t\t/** @type {Comment} */ (hydrate_node).data !== HYDRATION_END\n\t\t\t\t\t) {\n\t\t\t\t\t\tw.hydration_mismatch();\n\t\t\t\t\t\tthrow HYDRATION_ERROR;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpop();\n\t\t\t},\n\t\t\ttransformError\n\t\t);\n\n\t\t// Setup event delegation _after_ component is mounted - if an error would happen during mount, it would otherwise not be cleaned up\n\t\t/** @type {Set<string>} */\n\t\tvar registered_events = new Set();\n\n\t\t/** @param {Array<string>} events */\n\t\tvar event_handle = (events) => {\n\t\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\t\tvar event_name = events[i];\n\n\t\t\t\tif (registered_events.has(event_name)) continue;\n\t\t\t\tregistered_events.add(event_name);\n\n\t\t\t\tvar passive = is_passive_event(event_name);\n\n\t\t\t\t// Add the event listener to both the container and the document.\n\t\t\t\t// The container listener ensures we catch events from within in case\n\t\t\t\t// the outer content stops propagation of the event.\n\t\t\t\t//\n\t\t\t\t// The document listener ensures we catch events that originate from elements that were\n\t\t\t\t// manually moved outside of the container (e.g. via manual portals).\n\t\t\t\tfor (const node of [target, document]) {\n\t\t\t\t\tvar counts = listeners.get(node);\n\n\t\t\t\t\tif (counts === undefined) {\n\t\t\t\t\t\tcounts = new Map();\n\t\t\t\t\t\tlisteners.set(node, counts);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar count = counts.get(event_name);\n\n\t\t\t\t\tif (count === undefined) {\n\t\t\t\t\t\tnode.addEventListener(event_name, handle_event_propagation, { passive });\n\t\t\t\t\t\tcounts.set(event_name, 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcounts.set(event_name, count + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tevent_handle(array_from(all_registered_events));\n\t\troot_event_handles.add(event_handle);\n\n\t\treturn () => {\n\t\t\tfor (var event_name of registered_events) {\n\t\t\t\tfor (const node of [target, document]) {\n\t\t\t\t\tvar counts = /** @type {Map<string, number>} */ (listeners.get(node));\n\t\t\t\t\tvar count = /** @type {number} */ (counts.get(event_name));\n\n\t\t\t\t\tif (--count == 0) {\n\t\t\t\t\t\tnode.removeEventListener(event_name, handle_event_propagation);\n\t\t\t\t\t\tcounts.delete(event_name);\n\n\t\t\t\t\t\tif (counts.size === 0) {\n\t\t\t\t\t\t\tlisteners.delete(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcounts.set(event_name, count);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\troot_event_handles.delete(event_handle);\n\n\t\t\tif (anchor_node !== anchor) {\n\t\t\t\tanchor_node.parentNode?.removeChild(anchor_node);\n\t\t\t}\n\t\t};\n\t});\n\n\tmounted_components.set(component, unmount);\n\treturn component;\n}\n\n/**\n * References of the components that were mounted or hydrated.\n * Uses a `WeakMap` to avoid memory leaks.\n */\nlet mounted_components = new WeakMap();\n\n/**\n * Unmounts a component that was previously mounted using `mount` or `hydrate`.\n *\n * Since 5.13.0, if `options.outro` is `true`, [transitions](https://svelte.dev/docs/svelte/transition) will play before the component is removed from the DOM.\n *\n * Returns a `Promise` that resolves after transitions have completed if `options.outro` is true, or immediately otherwise (prior to 5.13.0, returns `void`).\n *\n * ```js\n * import { mount, unmount } from 'svelte';\n * import App from './App.svelte';\n *\n * const app = mount(App, { target: document.body });\n *\n * // later...\n * unmount(app, { outro: true });\n * ```\n * @param {Record<string, any>} component\n * @param {{ outro?: boolean }} [options]\n * @returns {Promise<void>}\n */\nexport function unmount(component, options) {\n\tconst fn = mounted_components.get(component);\n\n\tif (fn) {\n\t\tmounted_components.delete(component);\n\t\treturn fn(options);\n\t}\n\n\tif (DEV) {\n\t\tw.lifecycle_double_unmount();\n\t}\n\n\treturn Promise.resolve();\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { Batch, current_batch } from '../../reactivity/batch.js';\nimport {\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { HMR_ANCHOR } from '../../constants.js';\nimport { hydrate_node, hydrating } from '../hydration.js';\nimport { create_text, should_defer_append } from '../operations.js';\nimport { DEV } from 'esm-env';\n\n/**\n * @typedef {{ effect: Effect, fragment: DocumentFragment }} Branch\n */\n\n/**\n * @template Key\n */\nexport class BranchManager {\n\t/** @type {TemplateNode} */\n\tanchor;\n\n\t/** @type {Map<Batch, Key>} */\n\t#batches = new Map();\n\n\t/**\n\t * Map of keys to effects that are currently rendered in the DOM.\n\t * These effects are visible and actively part of the document tree.\n\t * Example:\n\t * ```\n\t * {#if condition}\n\t * \tfoo\n\t * {:else}\n\t * \tbar\n\t * {/if}\n\t * ```\n\t * Can result in the entries `true->Effect` and `false->Effect`\n\t * @type {Map<Key, Effect>}\n\t */\n\t#onscreen = new Map();\n\n\t/**\n\t * Similar to #onscreen with respect to the keys, but contains branches that are not yet\n\t * in the DOM, because their insertion is deferred.\n\t * @type {Map<Key, Branch>}\n\t */\n\t#offscreen = new Map();\n\n\t/**\n\t * Keys of effects that are currently outroing\n\t * @type {Set<Key>}\n\t */\n\t#outroing = new Set();\n\n\t/**\n\t * Whether to pause (i.e. outro) on change, or destroy immediately.\n\t * This is necessary for `<svelte:element>`\n\t */\n\t#transition = true;\n\n\t/**\n\t * @param {TemplateNode} anchor\n\t * @param {boolean} transition\n\t */\n\tconstructor(anchor, transition = true) {\n\t\tthis.anchor = anchor;\n\t\tthis.#transition = transition;\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#commit = (batch) => {\n\t\t// if this batch was made obsolete, bail\n\t\tif (!this.#batches.has(batch)) return;\n\n\t\tvar key = /** @type {Key} */ (this.#batches.get(batch));\n\n\t\tvar onscreen = this.#onscreen.get(key);\n\n\t\tif (onscreen) {\n\t\t\t// effect is already in the DOM — abort any current outro\n\t\t\tresume_effect(onscreen);\n\t\t\tthis.#outroing.delete(key);\n\t\t} else {\n\t\t\t// effect is currently offscreen. put it in the DOM\n\t\t\tvar offscreen = this.#offscreen.get(key);\n\n\t\t\tif (offscreen) {\n\t\t\t\t// effect could have been outro'ed before through a prior batch — resume if necessary\n\t\t\t\tresume_effect(offscreen.effect);\n\t\t\t\tthis.#onscreen.set(key, offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(key);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\t// Tell hmr.js about the anchor it should use for updates,\n\t\t\t\t\t// since the initial one will be removed\n\t\t\t\t\t/** @type {any} */ (offscreen.fragment.lastChild)[HMR_ANCHOR] = this.anchor;\n\t\t\t\t}\n\n\t\t\t\t// remove the anchor...\n\t\t\t\t/** @type {TemplateNode} */ (offscreen.fragment.lastChild).remove();\n\n\t\t\t\t// ...and append the fragment\n\t\t\t\tthis.anchor.before(offscreen.fragment);\n\t\t\t\tonscreen = offscreen.effect;\n\t\t\t}\n\t\t}\n\n\t\tfor (const [b, k] of this.#batches) {\n\t\t\tthis.#batches.delete(b);\n\n\t\t\tif (b === batch) {\n\t\t\t\t// keep values for newer batches\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst offscreen = this.#offscreen.get(k);\n\n\t\t\tif (offscreen) {\n\t\t\t\t// for older batches, destroy offscreen effects\n\t\t\t\t// as they will never be committed\n\t\t\t\tdestroy_effect(offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\n\t\t// outro/destroy all onscreen effects...\n\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t// ...except the one that was just committed\n\t\t\t//    or those that are already outroing (else the transition is aborted and the effect destroyed right away)\n\t\t\tif (k === key || this.#outroing.has(k)) continue;\n\n\t\t\tconst on_destroy = () => {\n\t\t\t\tconst keys = Array.from(this.#batches.values());\n\n\t\t\t\tif (keys.includes(k)) {\n\t\t\t\t\t// keep the effect offscreen, as another batch will need it\n\t\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\t\tmove_effect(effect, fragment);\n\n\t\t\t\t\tfragment.append(create_text()); // TODO can we avoid this?\n\n\t\t\t\t\tthis.#offscreen.set(k, { effect, fragment });\n\t\t\t\t} else {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tthis.#outroing.delete(k);\n\t\t\t\tthis.#onscreen.delete(k);\n\t\t\t};\n\n\t\t\tif (this.#transition || !onscreen) {\n\t\t\t\tthis.#outroing.add(k);\n\t\t\t\tpause_effect(effect, on_destroy, false);\n\t\t\t} else {\n\t\t\t\ton_destroy();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#discard = (batch) => {\n\t\tthis.#batches.delete(batch);\n\n\t\tconst keys = Array.from(this.#batches.values());\n\n\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\tif (!keys.includes(k)) {\n\t\t\t\tdestroy_effect(branch.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t *\n\t * @param {any} key\n\t * @param {null | ((target: TemplateNode) => void)} fn\n\t */\n\tensure(key, fn) {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tif (fn && !this.#onscreen.has(key) && !this.#offscreen.has(key)) {\n\t\t\tif (defer) {\n\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\tvar target = create_text();\n\n\t\t\t\tfragment.append(target);\n\n\t\t\t\tthis.#offscreen.set(key, {\n\t\t\t\t\teffect: branch(() => fn(target)),\n\t\t\t\t\tfragment\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.#onscreen.set(\n\t\t\t\t\tkey,\n\t\t\t\t\tbranch(() => fn(this.anchor))\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.#batches.set(batch, key);\n\n\t\tif (defer) {\n\t\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.unskip_effect(effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skip_effect(effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.unskip_effect(branch.effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skip_effect(branch.effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch.oncommit(this.#commit);\n\t\t\tbatch.ondiscard(this.#discard);\n\t\t} else {\n\t\t\tif (hydrating) {\n\t\t\t\tthis.anchor = hydrate_node;\n\t\t\t}\n\n\t\t\tthis.#commit(batch);\n\t\t}\n\t}\n}\n","/** @import { TemplateNode } from '#client' */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport {\n\thydrate_next,\n\thydrating,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating,\n\thydrate_node\n} from '../hydration.js';\nimport { block } from '../../reactivity/effects.js';\nimport { BranchManager } from './branches.js';\n\n/**\n * @param {TemplateNode} node\n * @param {(branch: (fn: (anchor: Node) => void, key?: number | false) => void) => void} fn\n * @param {boolean} [elseif] True if this is an `{:else if ...}` block rather than an `{#if ...}`, as that affects which transitions are considered 'local'\n * @returns {void}\n */\nexport function if_block(node, fn, elseif = false) {\n\t/** @type {TemplateNode | undefined} */\n\tvar marker;\n\tif (hydrating) {\n\t\tmarker = hydrate_node;\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\tvar flags = elseif ? EFFECT_TRANSPARENT : 0;\n\n\t/**\n\t * @param {number | false} key\n\t * @param {null | ((anchor: Node) => void)} fn\n\t */\n\tfunction update_branch(key, fn) {\n\t\tif (hydrating) {\n\t\t\tvar data = read_hydration_instruction(/** @type {TemplateNode} */ (marker));\n\n\t\t\t// \"[n\" = branch n, \"[-1\" = else\n\t\t\tif (key !== parseInt(data.substring(1))) {\n\t\t\t\t// Hydration mismatch: remove everything inside the anchor and start fresh.\n\t\t\t\t// This could happen with `{#if browser}...{/if}`, for example\n\t\t\t\tvar anchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tbranches.anchor = anchor;\n\n\t\t\t\tset_hydrating(false);\n\t\t\t\tbranches.ensure(key, fn);\n\t\t\t\tset_hydrating(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tbranches.ensure(key, fn);\n\t}\n\n\tblock(() => {\n\t\tvar has_branch = false;\n\n\t\tfn((fn, key = 0) => {\n\t\t\thas_branch = true;\n\t\t\tupdate_branch(key, fn);\n\t\t});\n\n\t\tif (!has_branch) {\n\t\t\tupdate_branch(-1, null);\n\t\t}\n\t}, flags);\n}\n","/** @import { TemplateNode } from '#client' */\nimport { is_runes } from '../../context.js';\nimport { block } from '../../reactivity/effects.js';\nimport { hydrate_next, hydrating } from '../hydration.js';\nimport { BranchManager } from './branches.js';\n\nconst NAN = Symbol('NaN');\n\n/**\n * @template V\n * @param {TemplateNode} node\n * @param {() => V} get_key\n * @param {(anchor: Node) => TemplateNode | void} render_fn\n * @returns {void}\n */\nexport function key(node, get_key, render_fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\n\tvar legacy = !is_runes();\n\n\tblock(() => {\n\t\tvar key = get_key();\n\n\t\t// NaN !== NaN, hence we do this workaround to not trigger remounts unnecessarily\n\t\tif (key !== key) {\n\t\t\tkey = /** @type {any} */ (NAN);\n\t\t}\n\n\t\t// key blocks in Svelte <5 had stupid semantics\n\t\tif (legacy && key !== null && typeof key === 'object') {\n\t\t\tkey = /** @type {V} */ ({});\n\t\t}\n\n\t\tbranches.ensure(key, render_fn);\n\t});\n}\n","/** @import { EachItem, EachOutroGroup, EachState, Effect, EffectNodes, MaybeSource, TemplateNode, TransitionManager } from '#client' */\n/** @import { Batch } from '../../reactivity/batch.js'; */\nimport {\n\tEACH_INDEX_REACTIVE,\n\tEACH_IS_ANIMATED,\n\tEACH_IS_CONTROLLED,\n\tEACH_ITEM_IMMUTABLE,\n\tEACH_ITEM_REACTIVE,\n\tHYDRATION_END,\n\tHYDRATION_START_ELSE\n} from '../../../../constants.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tshould_defer_append\n} from '../operations.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { source, mutable_source, internal_set } from '../../reactivity/sources.js';\nimport { array_from, is_array } from '../../../shared/utils.js';\nimport { BRANCH_EFFECT, COMMENT_NODE, DESTROYED, EFFECT_OFFSCREEN, INERT } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { get } from '../../runtime.js';\nimport { DEV } from 'esm-env';\nimport { derived_safe_equal } from '../../reactivity/deriveds.js';\nimport { current_batch } from '../../reactivity/batch.js';\nimport * as e from '../../errors.js';\nimport { tag } from '../../dev/tracing.js';\n\n// When making substantive changes to this file, validate them with the each block stress test:\n// https://svelte.dev/playground/1972b2cf46564476ad8c8c6405b23b7b\n// This test also exists in this repo, as `packages/svelte/tests/manual/each-stress-test`\n\n/**\n * @param {any} _\n * @param {number} i\n */\nexport function index(_, i) {\n\treturn i;\n}\n\n/**\n * Pause multiple effects simultaneously, and coordinate their\n * subsequent destruction. Used in each blocks\n * @param {EachState} state\n * @param {Effect[]} to_destroy\n * @param {null | Node} controlled_anchor\n */\nfunction pause_effects(state, to_destroy, controlled_anchor) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\tvar length = to_destroy.length;\n\n\t/** @type {EachOutroGroup} */\n\tvar group;\n\tvar remaining = to_destroy.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tlet effect = to_destroy[i];\n\n\t\tpause_effect(\n\t\t\teffect,\n\t\t\t() => {\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup.pending.delete(effect);\n\t\t\t\t\tgroup.done.add(effect);\n\n\t\t\t\t\tif (group.pending.size === 0) {\n\t\t\t\t\t\tvar groups = /** @type {Set<EachOutroGroup>} */ (state.outrogroups);\n\n\t\t\t\t\t\tdestroy_effects(state, array_from(group.done));\n\t\t\t\t\t\tgroups.delete(group);\n\n\t\t\t\t\t\tif (groups.size === 0) {\n\t\t\t\t\t\t\tstate.outrogroups = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tremaining -= 1;\n\t\t\t\t}\n\t\t\t},\n\t\t\tfalse\n\t\t);\n\t}\n\n\tif (remaining === 0) {\n\t\t// If we're in a controlled each block (i.e. the block is the only child of an\n\t\t// element), and we are removing all items, _and_ there are no out transitions,\n\t\t// we can use the fast path — emptying the element and replacing the anchor.\n\t\t// Skip the fast path when another batch is still pending on this each block:\n\t\t// that batch's keys still reference EachItems in `state.items`, which\n\t\t// `destroy_effects` needs to preserve offscreen (see #18610).\n\t\tvar fast_path =\n\t\t\ttransitions.length === 0 && controlled_anchor !== null && state.pending.size === 0;\n\n\t\tif (fast_path) {\n\t\t\tvar anchor = /** @type {Element} */ (controlled_anchor);\n\t\t\tvar parent_node = /** @type {Element} */ (anchor.parentNode);\n\n\t\t\tclear_text_content(parent_node);\n\t\t\tparent_node.append(anchor);\n\n\t\t\tstate.items.clear();\n\t\t}\n\n\t\tdestroy_effects(state, to_destroy, !fast_path);\n\t} else {\n\t\tgroup = {\n\t\t\tpending: new Set(to_destroy),\n\t\t\tdone: new Set()\n\t\t};\n\n\t\t(state.outrogroups ??= new Set()).add(group);\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {Effect[]} to_destroy\n * @param {boolean} remove_dom\n */\nfunction destroy_effects(state, to_destroy, remove_dom = true) {\n\t/** @type {Set<Effect> | undefined} */\n\tvar preserved_effects;\n\n\t// The loop-in-a-loop isn't ideal, but we should only hit this in relatively rare cases\n\tif (state.pending.size > 0) {\n\t\tpreserved_effects = new Set();\n\n\t\tfor (const keys of state.pending.values()) {\n\t\t\tfor (const key of keys) {\n\t\t\t\tpreserved_effects.add(/** @type {EachItem} */ (state.items.get(key)).e);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var i = 0; i < to_destroy.length; i++) {\n\t\tvar e = to_destroy[i];\n\n\t\tif (preserved_effects?.has(e)) {\n\t\t\te.f |= EFFECT_OFFSCREEN;\n\n\t\t\tconst fragment = document.createDocumentFragment();\n\t\t\tmove_effect(e, fragment);\n\t\t} else {\n\t\t\tdestroy_effect(to_destroy[i], remove_dom);\n\t\t}\n\t}\n}\n\n/** @type {TemplateNode} */\nvar offscreen_anchor;\n\n/**\n * @template V\n * @param {Element | Comment} node The next sibling node, or the parent node if this is a 'controlled' block\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @param {(value: V, index: number) => any} get_key\n * @param {(anchor: Node, item: MaybeSource<V>, index: MaybeSource<number>) => void} render_fn\n * @param {null | ((anchor: Node) => void)} fallback_fn\n * @returns {void}\n */\nexport function each(node, flags, get_collection, get_key, render_fn, fallback_fn = null) {\n\tvar anchor = node;\n\n\t/** @type {Map<any, EachItem>} */\n\tvar items = new Map();\n\n\tvar is_controlled = (flags & EACH_IS_CONTROLLED) !== 0;\n\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (node);\n\n\t\tanchor = hydrating\n\t\t\t? set_hydrate_node(get_first_child(parent_node))\n\t\t\t: parent_node.appendChild(create_text());\n\t}\n\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\t/** @type {Effect | null} */\n\tvar fallback = null;\n\n\t// TODO: ideally we could use derived for runes mode but because of the ability\n\t// to use a store which can be mutated, we can't do that here as mutating a store\n\t// will still result in the collection array being the same from the store\n\tvar each_array = derived_safe_equal(() => {\n\t\tvar collection = get_collection();\n\n\t\treturn /** @type {V[]} */ (\n\t\t\tis_array(collection) ? collection : collection == null ? [] : array_from(collection)\n\t\t);\n\t});\n\n\tif (DEV) {\n\t\ttag(each_array, '{#each ...}');\n\t}\n\n\t/** @type {Map<Batch, Set<any>>} */\n\tvar pending = new Map();\n\n\tvar first_run = true;\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\tfunction commit(batch) {\n\t\tif ((state.effect.f & DESTROYED) !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tstate.pending.delete(batch);\n\n\t\t// The effect doesn't necessarily re-run in a batch right before that batch commits\n\t\t// (its view of the collection may not have changed), so we read the collection\n\t\t// as the committing batch sees it rather than using the most recent block run's result\n\t\tvar array = get(each_array);\n\n\t\tstate.fallback = fallback;\n\t\treconcile(state, array, anchor, flags, get_key);\n\n\t\tif (fallback !== null) {\n\t\t\tif (array.length === 0) {\n\t\t\t\tif ((fallback.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\t\t\tresume_effect(fallback);\n\t\t\t\t} else {\n\t\t\t\t\tfallback.f ^= EFFECT_OFFSCREEN;\n\t\t\t\t\tmove(fallback, null, anchor);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpause_effect(fallback, () => {\n\t\t\t\t\t// TODO only null out if no pending batch needs it,\n\t\t\t\t\t// otherwise re-add `fallback.fragment` and move the\n\t\t\t\t\t// effect into it\n\t\t\t\t\tfallback = null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\tfunction discard(batch) {\n\t\tstate.pending.delete(batch);\n\t}\n\n\tvar effect = block(() => {\n\t\tvar array = /** @type {V[]} */ (get(each_array));\n\t\tvar length = array.length;\n\n\t\t/** `true` if there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */\n\t\tlet mismatch = false;\n\n\t\tif (hydrating) {\n\t\t\tvar is_else = read_hydration_instruction(anchor) === HYDRATION_START_ELSE;\n\n\t\t\tif (is_else !== (length === 0)) {\n\t\t\t\t// hydration mismatch — remove the server-rendered DOM and start over\n\t\t\t\tanchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tset_hydrating(false);\n\t\t\t\tmismatch = true;\n\t\t\t}\n\t\t}\n\n\t\tvar keys = new Set();\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tfor (var index = 0; index < length; index += 1) {\n\t\t\tif (\n\t\t\t\thydrating &&\n\t\t\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\t\t\t/** @type {Comment} */ (hydrate_node).data === HYDRATION_END\n\t\t\t) {\n\t\t\t\t// The server rendered fewer items than expected,\n\t\t\t\t// so break out and continue appending non-hydrated items\n\t\t\t\tanchor = /** @type {Comment} */ (hydrate_node);\n\t\t\t\tmismatch = true;\n\t\t\t\tset_hydrating(false);\n\t\t\t}\n\n\t\t\tvar value = array[index];\n\t\t\tvar key = get_key(value, index);\n\n\t\t\tif (DEV) {\n\t\t\t\t// Check that the key function is idempotent (returns the same value when called twice)\n\t\t\t\tvar key_again = get_key(value, index);\n\t\t\t\tif (key !== key_again) {\n\t\t\t\t\te.each_key_volatile(String(index), String(key), String(key_again));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar item = first_run ? null : items.get(key);\n\n\t\t\tif (item) {\n\t\t\t\t// update before reconciliation, to trigger any async updates\n\t\t\t\tif (item.v) internal_set(item.v, value);\n\t\t\t\tif (item.i) internal_set(item.i, index);\n\n\t\t\t\tif (defer) {\n\t\t\t\t\tbatch.unskip_effect(item.e);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem = create_item(\n\t\t\t\t\titems,\n\t\t\t\t\tfirst_run ? anchor : (offscreen_anchor ??= create_text()),\n\t\t\t\t\tvalue,\n\t\t\t\t\tkey,\n\t\t\t\t\tindex,\n\t\t\t\t\trender_fn,\n\t\t\t\t\tflags,\n\t\t\t\t\tget_collection\n\t\t\t\t);\n\n\t\t\t\tif (!first_run) {\n\t\t\t\t\titem.e.f |= EFFECT_OFFSCREEN;\n\t\t\t\t}\n\n\t\t\t\titems.set(key, item);\n\t\t\t}\n\n\t\t\tkeys.add(key);\n\t\t}\n\n\t\tif (length === 0 && fallback_fn && !fallback) {\n\t\t\tif (first_run) {\n\t\t\t\tfallback = branch(() => fallback_fn(anchor));\n\t\t\t} else {\n\t\t\t\tfallback = branch(() => fallback_fn((offscreen_anchor ??= create_text())));\n\t\t\t\tfallback.f |= EFFECT_OFFSCREEN;\n\t\t\t}\n\t\t}\n\n\t\tif (length > keys.size) {\n\t\t\tif (DEV) {\n\t\t\t\tvalidate_each_keys(array, get_key);\n\t\t\t} else {\n\t\t\t\t// in prod, the additional information isn't printed, so don't bother computing it\n\t\t\t\te.each_key_duplicate('', '', '');\n\t\t\t}\n\t\t}\n\n\t\t// remove excess nodes\n\t\tif (hydrating && length > 0) {\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tif (!first_run) {\n\t\t\tpending.set(batch, keys);\n\n\t\t\tif (defer) {\n\t\t\t\tfor (const [key, item] of items) {\n\t\t\t\t\tif (!keys.has(key)) {\n\t\t\t\t\t\tbatch.skip_effect(item.e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbatch.oncommit(commit);\n\t\t\t\tbatch.ondiscard(discard);\n\t\t\t} else {\n\t\t\t\tcommit(batch);\n\t\t\t}\n\t\t}\n\n\t\tif (mismatch) {\n\t\t\t// continue in hydration mode\n\t\t\tset_hydrating(true);\n\t\t}\n\n\t\t// When we mount the each block for the first time, the collection won't be\n\t\t// connected to this effect as the effect hasn't finished running yet and its deps\n\t\t// won't be assigned. However, it's possible that when reconciling the each block\n\t\t// that a mutation occurred and it's made the collection MAYBE_DIRTY, so reading the\n\t\t// collection again can provide consistency to the reactive graph again as the deriveds\n\t\t// will now be `CLEAN`.\n\t\tget(each_array);\n\t});\n\n\t/** @type {EachState} */\n\tvar state = { effect, flags, items, pending, outrogroups: null, fallback };\n\n\tfirst_run = false;\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n\n/**\n * Skip past any non-branch effects (which could be created with `createSubscriber`, for example) to find the next branch effect\n * @param {Effect | null} effect\n * @returns {Effect | null}\n */\nfunction skip_to_branch(effect) {\n\twhile (effect !== null && (effect.f & BRANCH_EFFECT) === 0) {\n\t\teffect = effect.next;\n\t}\n\treturn effect;\n}\n\n/**\n * Add, remove, or reorder items output by an each block as its input changes\n * @template V\n * @param {EachState} state\n * @param {Array<V>} array\n * @param {Element | Comment | Text} anchor\n * @param {number} flags\n * @param {(value: V, index: number) => any} get_key\n * @returns {void}\n */\nfunction reconcile(state, array, anchor, flags, get_key) {\n\tvar is_animated = (flags & EACH_IS_ANIMATED) !== 0;\n\n\tvar length = array.length;\n\tvar items = state.items;\n\tvar current = skip_to_branch(state.effect.first);\n\n\t/** @type {undefined | Set<Effect>} */\n\tvar seen;\n\n\t/** @type {Effect | null} */\n\tvar prev = null;\n\n\t/** @type {undefined | Set<Effect>} */\n\tvar to_animate;\n\n\t/** @type {Effect[]} */\n\tvar matched = [];\n\n\t/** @type {Effect[]} */\n\tvar stashed = [];\n\n\t/** @type {V} */\n\tvar value;\n\n\t/** @type {any} */\n\tvar key;\n\n\t/** @type {Effect | undefined} */\n\tvar effect;\n\n\t/** @type {number} */\n\tvar i;\n\n\tif (is_animated) {\n\t\tfor (i = 0; i < length; i += 1) {\n\t\t\tvalue = array[i];\n\t\t\tkey = get_key(value, i);\n\t\t\teffect = /** @type {EachItem} */ (items.get(key)).e;\n\n\t\t\t// offscreen == coming in now, no animation in that case,\n\t\t\t// else this would happen https://github.com/sveltejs/svelte/issues/17181\n\t\t\tif ((effect.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\t\teffect.nodes?.a?.measure();\n\t\t\t\t(to_animate ??= new Set()).add(effect);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i = 0; i < length; i += 1) {\n\t\tvalue = array[i];\n\t\tkey = get_key(value, i);\n\n\t\teffect = /** @type {EachItem} */ (items.get(key)).e;\n\n\t\tif (state.outrogroups !== null) {\n\t\t\tfor (const group of state.outrogroups) {\n\t\t\t\tgroup.pending.delete(effect);\n\t\t\t\tgroup.done.delete(effect);\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & INERT) !== 0) {\n\t\t\tresume_effect(effect);\n\t\t\tif (is_animated) {\n\t\t\t\teffect.nodes?.a?.unfix();\n\t\t\t\t(to_animate ??= new Set()).delete(effect);\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & EFFECT_OFFSCREEN) !== 0) {\n\t\t\teffect.f ^= EFFECT_OFFSCREEN;\n\n\t\t\tif (effect === current) {\n\t\t\t\tmove(effect, null, anchor);\n\t\t\t} else {\n\t\t\t\tvar next = prev ? prev.next : current;\n\n\t\t\t\tif (effect === state.effect.last) {\n\t\t\t\t\tstate.effect.last = effect.prev;\n\t\t\t\t}\n\n\t\t\t\tif (effect.prev) effect.prev.next = effect.next;\n\t\t\t\tif (effect.next) effect.next.prev = effect.prev;\n\t\t\t\tlink(state, prev, effect);\n\t\t\t\tlink(state, effect, next);\n\n\t\t\t\tmove(effect, next, anchor);\n\t\t\t\tprev = effect;\n\n\t\t\t\tmatched = [];\n\t\t\t\tstashed = [];\n\n\t\t\t\tcurrent = skip_to_branch(prev.next);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif (effect !== current) {\n\t\t\tif (seen !== undefined && seen.has(effect)) {\n\t\t\t\tif (matched.length < stashed.length) {\n\t\t\t\t\t// more efficient to move later items to the front\n\t\t\t\t\tvar start = stashed[0];\n\t\t\t\t\tvar j;\n\n\t\t\t\t\tprev = start.prev;\n\n\t\t\t\t\tvar a = matched[0];\n\t\t\t\t\tvar b = matched[matched.length - 1];\n\n\t\t\t\t\tfor (j = 0; j < matched.length; j += 1) {\n\t\t\t\t\t\tmove(matched[j], start, anchor);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (j = 0; j < stashed.length; j += 1) {\n\t\t\t\t\t\tseen.delete(stashed[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\tlink(state, a.prev, b.next);\n\t\t\t\t\tlink(state, prev, a);\n\t\t\t\t\tlink(state, b, start);\n\n\t\t\t\t\tcurrent = start;\n\t\t\t\t\tprev = b;\n\t\t\t\t\ti -= 1;\n\n\t\t\t\t\tmatched = [];\n\t\t\t\t\tstashed = [];\n\t\t\t\t} else {\n\t\t\t\t\t// more efficient to move earlier items to the back\n\t\t\t\t\tseen.delete(effect);\n\t\t\t\t\tmove(effect, current, anchor);\n\n\t\t\t\t\tlink(state, effect.prev, effect.next);\n\t\t\t\t\tlink(state, effect, prev === null ? state.effect.first : prev.next);\n\t\t\t\t\tlink(state, prev, effect);\n\n\t\t\t\t\tprev = effect;\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmatched = [];\n\t\t\tstashed = [];\n\n\t\t\twhile (current !== null && current !== effect) {\n\t\t\t\t(seen ??= new Set()).add(current);\n\t\t\t\tstashed.push(current);\n\t\t\t\tcurrent = skip_to_branch(current.next);\n\t\t\t}\n\n\t\t\tif (current === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\tmatched.push(effect);\n\t\t}\n\n\t\tprev = effect;\n\t\tcurrent = skip_to_branch(effect.next);\n\t}\n\n\tif (state.outrogroups !== null) {\n\t\tfor (const group of state.outrogroups) {\n\t\t\tif (group.pending.size === 0) {\n\t\t\t\tdestroy_effects(state, array_from(group.done));\n\t\t\t\tstate.outrogroups?.delete(group);\n\t\t\t}\n\t\t}\n\n\t\tif (state.outrogroups.size === 0) {\n\t\t\tstate.outrogroups = null;\n\t\t}\n\t}\n\n\tif (current !== null || seen !== undefined) {\n\t\t/** @type {Effect[]} */\n\t\tvar to_destroy = [];\n\n\t\tif (seen !== undefined) {\n\t\t\tfor (effect of seen) {\n\t\t\t\tif ((effect.f & INERT) === 0) {\n\t\t\t\t\tto_destroy.push(effect);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twhile (current !== null) {\n\t\t\t// If the each block isn't inert, then inert effects are currently outroing and will be removed once the transition is finished\n\t\t\tif ((current.f & INERT) === 0 && current !== state.fallback) {\n\t\t\t\tto_destroy.push(current);\n\t\t\t}\n\n\t\t\tcurrent = skip_to_branch(current.next);\n\t\t}\n\n\t\tvar destroy_length = to_destroy.length;\n\n\t\tif (destroy_length > 0) {\n\t\t\tvar controlled_anchor = (flags & EACH_IS_CONTROLLED) !== 0 && length === 0 ? anchor : null;\n\n\t\t\tif (is_animated) {\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].nodes?.a?.measure();\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].nodes?.a?.fix();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpause_effects(state, to_destroy, controlled_anchor);\n\t\t}\n\t}\n\n\tif (is_animated) {\n\t\tqueue_micro_task(() => {\n\t\t\tif (to_animate === undefined) return;\n\t\t\tfor (effect of to_animate) {\n\t\t\t\teffect.nodes?.a?.apply();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @template V\n * @param {Map<any, EachItem>} items\n * @param {Node} anchor\n * @param {V} value\n * @param {unknown} key\n * @param {number} index\n * @param {(anchor: Node, item: MaybeSource<V>, index: MaybeSource<number>, collection: () => V[]) => void} render_fn\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @returns {EachItem}\n */\nfunction create_item(items, anchor, value, key, index, render_fn, flags, get_collection) {\n\tvar v =\n\t\t(flags & EACH_ITEM_REACTIVE) !== 0\n\t\t\t? (flags & EACH_ITEM_IMMUTABLE) === 0\n\t\t\t\t? mutable_source(value, false, false)\n\t\t\t\t: source(value)\n\t\t\t: null;\n\n\tvar i = (flags & EACH_INDEX_REACTIVE) !== 0 ? source(index) : null;\n\n\tif (DEV && v) {\n\t\t// For tracing purposes, we need to link the source signal we create with the\n\t\t// collection + index so that tracing works as intended\n\t\tv.trace = () => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\tget_collection()[i?.v ?? index];\n\t\t};\n\t}\n\n\treturn {\n\t\tv,\n\t\ti,\n\t\te: branch(() => {\n\t\t\trender_fn(anchor, v ?? value, i ?? index, get_collection);\n\n\t\t\treturn () => {\n\t\t\t\titems.delete(key);\n\t\t\t};\n\t\t})\n\t};\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect | null} next\n * @param {Text | Element | Comment} anchor\n */\nfunction move(effect, next, anchor) {\n\tif (!effect.nodes) return;\n\n\tvar node = effect.nodes.start;\n\tvar end = effect.nodes.end;\n\n\tvar dest =\n\t\tnext && (next.f & EFFECT_OFFSCREEN) === 0\n\t\t\t? /** @type {EffectNodes} */ (next.nodes).start\n\t\t\t: anchor;\n\n\twhile (node !== null) {\n\t\tvar next_node = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tdest.before(node);\n\n\t\tif (node === end) {\n\t\t\treturn;\n\t\t}\n\n\t\tnode = next_node;\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {Effect | null} prev\n * @param {Effect | null} next\n */\nfunction link(state, prev, next) {\n\tif (prev === null) {\n\t\tstate.effect.first = next;\n\t} else {\n\t\tprev.next = next;\n\t}\n\n\tif (next === null) {\n\t\tstate.effect.last = prev;\n\t} else {\n\t\tnext.prev = prev;\n\t}\n}\n\n/**\n * @param {Array<any>} array\n * @param {(item: any, index: number) => string} key_fn\n * @returns {void}\n */\nfunction validate_each_keys(array, key_fn) {\n\tconst keys = new Map();\n\tconst length = array.length;\n\n\tfor (let i = 0; i < length; i++) {\n\t\tconst key = key_fn(array[i], i);\n\n\t\tif (keys.has(key)) {\n\t\t\tconst a = String(keys.get(key));\n\t\t\tconst b = String(i);\n\n\t\t\t/** @type {string | null} */\n\t\t\tlet k = String(key);\n\t\t\tif (k.startsWith('[object ')) k = null;\n\n\t\t\te.each_key_duplicate(a, b, k);\n\t\t}\n\n\t\tkeys.set(key, i);\n\t}\n}\n","/** @import { Effect, TemplateNode } from '#client' */\n/** @import {} from 'trusted-types' */\nimport {\n\tFILENAME,\n\tHYDRATION_ERROR,\n\tNAMESPACE_SVG,\n\tNAMESPACE_MATHML\n} from '../../../../constants.js';\nimport { remove_effect_dom, template_effect } from '../../reactivity/effects.js';\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from '../hydration.js';\n\nimport { assign_nodes } from '../template.js';\nimport * as w from '../../warnings.js';\nimport { hash, sanitize_location } from '../../../../utils.js';\nimport { DEV } from 'esm-env';\nimport { dev_current_component_function } from '../../context.js';\nimport { create_element, get_first_child, get_next_sibling } from '../operations.js';\nimport { active_effect } from '../../runtime.js';\nimport { COMMENT_NODE } from '#client/constants';\n\n/**\n * @param {Element} element\n * @param {string | null} server_hash\n * @param {string | TrustedHTML} value\n */\nfunction check_hash(element, server_hash, value) {\n\tif (!server_hash || server_hash === hash(String(value ?? ''))) return;\n\n\tlet location;\n\n\t// @ts-expect-error\n\tconst loc = element.__svelte_meta?.loc;\n\tif (loc) {\n\t\tlocation = `near ${loc.file}:${loc.line}:${loc.column}`;\n\t} else if (dev_current_component_function?.[FILENAME]) {\n\t\tlocation = `in ${dev_current_component_function[FILENAME]}`;\n\t}\n\n\tw.hydration_html_changed(sanitize_location(location));\n}\n\n/**\n * @param {Element | Text | Comment} node\n * @param {() => string | TrustedHTML} get_value\n * @param {boolean} [is_controlled]\n * @param {boolean} [svg]\n * @param {boolean} [mathml]\n * @param {boolean} [skip_warning]\n * @returns {void}\n */\nexport function html(\n\tnode,\n\tget_value,\n\tis_controlled = false,\n\tsvg = false,\n\tmathml = false,\n\tskip_warning = false\n) {\n\tvar anchor = node;\n\n\t/** @type {string | TrustedHTML} */\n\tvar value = '';\n\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (node);\n\n\t\tif (hydrating) {\n\t\t\tanchor = set_hydrate_node(get_first_child(parent_node));\n\t\t}\n\t}\n\n\ttemplate_effect(() => {\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\tif (value === (value = get_value() ?? '')) {\n\t\t\tif (hydrating) hydrate_next();\n\t\t\treturn;\n\t\t}\n\n\t\tif (is_controlled && !hydrating) {\n\t\t\t// When @html is the only child, use innerHTML directly.\n\t\t\t// This also handles contenteditable, where the user may delete the anchor comment.\n\t\t\teffect.nodes = null;\n\t\t\tparent_node.innerHTML = /** @type {string} */ (value);\n\n\t\t\tif (value !== '') {\n\t\t\t\tassign_nodes(\n\t\t\t\t\t/** @type {TemplateNode} */ (get_first_child(parent_node)),\n\t\t\t\t\t/** @type {TemplateNode} */ (parent_node.lastChild)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (effect.nodes !== null) {\n\t\t\tremove_effect_dom(effect.nodes.start, /** @type {TemplateNode} */ (effect.nodes.end));\n\t\t\teffect.nodes = null;\n\t\t}\n\n\t\tif (value === '') return;\n\n\t\tif (hydrating) {\n\t\t\t// We're deliberately not trying to repair mismatches between server and client,\n\t\t\t// as it's costly and error-prone (and it's an edge case to have a mismatch anyway)\n\t\t\tvar hash = /** @type {Comment} */ (hydrate_node).data;\n\n\t\t\t/** @type {TemplateNode | null} */\n\t\t\tvar next = hydrate_next();\n\t\t\tvar last = next;\n\n\t\t\twhile (\n\t\t\t\tnext !== null &&\n\t\t\t\t(next.nodeType !== COMMENT_NODE || /** @type {Comment} */ (next).data !== '')\n\t\t\t) {\n\t\t\t\tlast = next;\n\t\t\t\tnext = get_next_sibling(next);\n\t\t\t}\n\n\t\t\tif (next === null) {\n\t\t\t\tw.hydration_mismatch();\n\t\t\t\tthrow HYDRATION_ERROR;\n\t\t\t}\n\n\t\t\tif (DEV && !skip_warning) {\n\t\t\t\tcheck_hash(/** @type {Element} */ (next.parentNode), hash, value);\n\t\t\t}\n\n\t\t\tassign_nodes(hydrate_node, last);\n\t\t\tanchor = set_hydrate_node(next);\n\t\t\treturn;\n\t\t}\n\n\t\t// Don't use create_fragment_with_script_from_html here because that would mean script tags are executed.\n\t\t// @html is basically `.innerHTML = ...` and that doesn't execute scripts either due to security reasons.\n\t\t// Use a <template>, <svg>, or <math> wrapper depending on context. If value is a TrustedHTML object,\n\t\t// it will be assigned directly to innerHTML without coercion — this allows {@html policy.createHTML(...)} to work.\n\t\tvar ns = svg ? NAMESPACE_SVG : mathml ? NAMESPACE_MATHML : undefined;\n\t\tvar wrapper = /** @type {HTMLTemplateElement | SVGElement | MathMLElement} */ (\n\t\t\tcreate_element(svg ? 'svg' : mathml ? 'math' : 'template', ns)\n\t\t);\n\t\twrapper.innerHTML = /** @type {any} */ (value);\n\n\t\t/** @type {DocumentFragment | Element} */\n\t\tvar node = svg || mathml ? wrapper : /** @type {HTMLTemplateElement} */ (wrapper).content;\n\n\t\tassign_nodes(\n\t\t\t/** @type {TemplateNode} */ (get_first_child(node)),\n\t\t\t/** @type {TemplateNode} */ (node.lastChild)\n\t\t);\n\n\t\tif (svg || mathml) {\n\t\t\twhile (get_first_child(node)) {\n\t\t\t\tanchor.before(/** @type {TemplateNode} */ (get_first_child(node)));\n\t\t\t}\n\t\t} else {\n\t\t\tanchor.before(node);\n\t\t}\n\t});\n}\n","/** @import { TemplateNode, Dom } from '#client' */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport { block } from '../../reactivity/effects.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tread_hydration_instruction,\n\tset_hydrate_node,\n\tset_hydrating,\n\tskip_nodes\n} from '../hydration.js';\nimport { BranchManager } from './branches.js';\nimport { HYDRATION_START, HYDRATION_START_ELSE } from '../../../../constants.js';\n\n/**\n * @template P\n * @template {(props: P) => void} C\n * @param {TemplateNode} node\n * @param {() => C} get_component\n * @param {(anchor: TemplateNode, component: C) => Dom | void} render_fn\n * @returns {void}\n */\nexport function component(node, get_component, render_fn) {\n\t/** @type {TemplateNode | undefined} */\n\tvar hydration_start_node;\n\n\tif (hydrating) {\n\t\thydration_start_node = hydrate_node;\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tvar component = get_component() ?? null;\n\n\t\tif (hydrating) {\n\t\t\tvar data = read_hydration_instruction(/** @type {TemplateNode} */ (hydration_start_node));\n\n\t\t\tvar server_had_component = data === HYDRATION_START;\n\t\t\tvar client_has_component = component !== null;\n\n\t\t\tif (server_had_component !== client_has_component) {\n\t\t\t\t// Hydration mismatch: skip the server-rendered nodes and render fresh\n\t\t\t\tvar anchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tbranches.anchor = anchor;\n\n\t\t\t\tset_hydrating(false);\n\t\t\t\tbranches.ensure(component, component && ((target) => render_fn(target, component)));\n\t\t\t\tset_hydrating(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tbranches.ensure(component, component && ((target) => render_fn(target, component)));\n\t}, EFFECT_TRANSPARENT);\n}\n","/** @import { ActionPayload } from '#client' */\nimport { effect, render_effect } from '../../reactivity/effects.js';\nimport { safe_not_equal } from '../../reactivity/equality.js';\nimport { deep_read_state, untrack } from '../../runtime.js';\n\n/**\n * @template P\n * @param {Element} dom\n * @param {(dom: Element, value?: P) => ActionPayload<P>} action\n * @param {() => P} [get_value]\n * @returns {void}\n */\nexport function action(dom, action, get_value) {\n\teffect(() => {\n\t\tvar payload = untrack(() => action(dom, get_value?.()) || {});\n\n\t\tif (get_value && payload?.update) {\n\t\t\tvar inited = false;\n\t\t\t/** @type {P} */\n\t\t\tvar prev = /** @type {any} */ ({}); // initialize with something so it's never equal on first run\n\n\t\t\trender_effect(() => {\n\t\t\t\tvar value = get_value();\n\n\t\t\t\t// Action's update method is coarse-grained, i.e. when anything in the passed value changes, update.\n\t\t\t\t// This works in legacy mode because of mutable_source being updated as a whole, but when using $state\n\t\t\t\t// together with actions and mutation, it wouldn't notice the change without a deep read.\n\t\t\t\tdeep_read_state(value);\n\n\t\t\t\tif (inited && safe_not_equal(prev, value)) {\n\t\t\t\t\tprev = value;\n\t\t\t\t\t/** @type {Function} */ (payload.update)(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinited = true;\n\t\t}\n\n\t\tif (payload?.destroy) {\n\t\t\treturn () => /** @type {Function} */ (payload.destroy)();\n\t\t}\n\t});\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { escape_html } from '../../escaping.js';\nimport { clsx as _clsx } from 'clsx';\nimport { has_own_property } from './utils.js';\n\n/**\n * `<div translate={false}>` should be rendered as `<div translate=\"no\">` and _not_\n * `<div translate=\"false\">`, which is equivalent to `<div translate=\"yes\">`. There\n * may be other odd cases that need to be added to this list in future\n * @type {Record<string, Map<any, string>>}\n */\nconst replacements = {\n\ttranslate: new Map([\n\t\t[true, 'yes'],\n\t\t[false, 'no']\n\t])\n};\n\n/**\n * @template V\n * @param {string} name\n * @param {V} value\n * @param {boolean} [is_boolean]\n * @returns {string}\n */\nexport function attr(name, value, is_boolean = false) {\n\t// attribute hidden for values other than \"until-found\" behaves like a boolean attribute\n\tif (name === 'hidden' && value !== 'until-found') {\n\t\tis_boolean = true;\n\t}\n\t// `''` is a present boolean attribute, as it is in markup and on the client\n\tif (value == null || (is_boolean && !value && value !== '')) return '';\n\tconst normalized =\n\t\t(has_own_property.call(replacements, name) && replacements[name].get(value)) || value;\n\tconst assignment = is_boolean ? `=\"\"` : `=\"${escape_html(normalized, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/**\n * Small wrapper around clsx to preserve Svelte's (weird) handling of falsy values.\n * TODO Svelte 6 revisit this, and likely turn all falsy values into the empty string (what clsx also does)\n * @param  {any} value\n */\nexport function clsx(value) {\n\tif (typeof value === 'object') {\n\t\treturn _clsx(value);\n\t} else {\n\t\treturn value ?? '';\n\t}\n}\n\nconst whitespace = [...' \\t\\n\\r\\f\\u00a0\\u000b\\ufeff'];\n\n/**\n * @param {any} value\n * @param {string | null} [hash]\n * @param {Record<string, boolean>} [directives]\n * @returns {string | null}\n */\nexport function to_class(value, hash, directives) {\n\tvar classname = value == null ? '' : '' + value;\n\n\tif (hash) {\n\t\tclassname = classname ? classname + ' ' + hash : hash;\n\t}\n\n\tif (directives) {\n\t\tfor (var key of Object.keys(directives)) {\n\t\t\tif (directives[key]) {\n\t\t\t\tclassname = classname ? classname + ' ' + key : key;\n\t\t\t} else if (classname.length) {\n\t\t\t\tvar len = key.length;\n\t\t\t\tvar a = 0;\n\n\t\t\t\twhile ((a = classname.indexOf(key, a)) >= 0) {\n\t\t\t\t\tvar b = a + len;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(a === 0 || whitespace.includes(classname[a - 1])) &&\n\t\t\t\t\t\t(b === classname.length || whitespace.includes(classname[b]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tclassname = (a === 0 ? '' : classname.substring(0, a)) + classname.substring(b + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = b;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn classname === '' ? null : classname;\n}\n\n/**\n *\n * @param {Record<string,any>} styles\n * @param {boolean} important\n */\nfunction append_styles(styles, important = false) {\n\tvar separator = important ? ' !important;' : ';';\n\tvar css = '';\n\n\tfor (var key of Object.keys(styles)) {\n\t\tvar value = styles[key];\n\t\tif (value != null && value !== '') {\n\t\t\tcss += ' ' + key + ': ' + value + separator;\n\t\t}\n\t}\n\n\treturn css;\n}\n\n/**\n * @param {string} name\n * @returns {string}\n */\nfunction to_css_name(name) {\n\tif (name[0] !== '-' || name[1] !== '-') {\n\t\treturn name.toLowerCase();\n\t}\n\treturn name;\n}\n\n/**\n * @param {any} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [styles]\n * @returns {string | null}\n */\nexport function to_style(value, styles) {\n\tif (styles) {\n\t\tvar new_style = '';\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar normal_styles;\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar important_styles;\n\n\t\tif (Array.isArray(styles)) {\n\t\t\tnormal_styles = styles[0];\n\t\t\timportant_styles = styles[1];\n\t\t} else {\n\t\t\tnormal_styles = styles;\n\t\t}\n\n\t\tif (value) {\n\t\t\t// strip comments; surrounding whitespace is handled by the trims below (which is much faster than doing it through regex)\n\t\t\tvalue = String(value)\n\t\t\t\t.replaceAll(/\\/\\*.*?\\*\\//g, '')\n\t\t\t\t.trim();\n\n\t\t\t/** @type {boolean | '\"' | \"'\"} */\n\t\t\tvar in_str = false;\n\t\t\tvar in_apo = 0;\n\t\t\tvar in_comment = false;\n\n\t\t\tvar reserved_names = [];\n\n\t\t\tif (normal_styles) {\n\t\t\t\treserved_names.push(...Object.keys(normal_styles).map(to_css_name));\n\t\t\t}\n\t\t\tif (important_styles) {\n\t\t\t\treserved_names.push(...Object.keys(important_styles).map(to_css_name));\n\t\t\t}\n\n\t\t\tvar start_index = 0;\n\t\t\tvar name_index = -1;\n\n\t\t\tconst len = value.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tvar c = value[i];\n\n\t\t\t\tif (in_comment) {\n\t\t\t\t\tif (c === '/' && value[i - 1] === '*') {\n\t\t\t\t\t\tin_comment = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (in_str) {\n\t\t\t\t\tif (in_str === c) {\n\t\t\t\t\t\tin_str = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (c === '/' && value[i + 1] === '*') {\n\t\t\t\t\tin_comment = true;\n\t\t\t\t} else if (c === '\"' || c === \"'\") {\n\t\t\t\t\tin_str = c;\n\t\t\t\t} else if (c === '(') {\n\t\t\t\t\tin_apo++;\n\t\t\t\t} else if (c === ')') {\n\t\t\t\t\tin_apo--;\n\t\t\t\t}\n\n\t\t\t\tif (!in_comment && in_str === false && in_apo === 0) {\n\t\t\t\t\tif (c === ':' && name_index === -1) {\n\t\t\t\t\t\tname_index = i;\n\t\t\t\t\t} else if (c === ';' || i === len - 1) {\n\t\t\t\t\t\tif (name_index !== -1) {\n\t\t\t\t\t\t\tvar name = to_css_name(value.substring(start_index, name_index).trim());\n\n\t\t\t\t\t\t\tif (!reserved_names.includes(name)) {\n\t\t\t\t\t\t\t\tif (c !== ';') {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar property = value.substring(start_index, i).trim();\n\t\t\t\t\t\t\t\tnew_style += ' ' + property + ';';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart_index = i + 1;\n\t\t\t\t\t\tname_index = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (normal_styles) {\n\t\t\tnew_style += append_styles(normal_styles);\n\t\t}\n\n\t\tif (important_styles) {\n\t\t\tnew_style += append_styles(important_styles, true);\n\t\t}\n\n\t\tnew_style = new_style.trim();\n\t\treturn new_style === '' ? null : new_style;\n\t}\n\n\treturn value == null ? null : String(value);\n}\n","import { to_class } from '../../../shared/attributes.js';\nimport { CLASS_CACHE } from '../../constants.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element} dom\n * @param {boolean | number} is_html\n * @param {string | null} value\n * @param {string} [hash]\n * @param {Record<string, any>} [prev_classes]\n * @param {Record<string, any>} [next_classes]\n * @returns {Record<string, boolean> | undefined}\n */\nexport function set_class(dom, is_html, value, hash, prev_classes, next_classes) {\n\tvar prev = /** @type {any} */ (dom)[CLASS_CACHE];\n\n\tif (\n\t\thydrating ||\n\t\tprev !== value ||\n\t\tprev === undefined // for edge case of `class={undefined}`\n\t) {\n\t\tvar next_class_name = to_class(value, hash, next_classes);\n\n\t\tif (!hydrating || next_class_name !== dom.getAttribute('class')) {\n\t\t\t// Removing the attribute when the value is only an empty string causes\n\t\t\t// performance issues vs simply making the className an empty string. So\n\t\t\t// we should only remove the class if the value is nullish\n\t\t\t// and there no hash/directives :\n\t\t\tif (next_class_name == null) {\n\t\t\t\tdom.removeAttribute('class');\n\t\t\t} else if (is_html) {\n\t\t\t\tdom.className = next_class_name;\n\t\t\t} else {\n\t\t\t\tdom.setAttribute('class', next_class_name);\n\t\t\t}\n\t\t}\n\n\t\t/** @type {any} */ (dom)[CLASS_CACHE] = value;\n\t} else if (next_classes && prev_classes !== next_classes) {\n\t\tfor (var key in next_classes) {\n\t\t\tvar is_present = !!next_classes[key];\n\n\t\t\tif (prev_classes == null || is_present !== !!prev_classes[key]) {\n\t\t\t\tdom.classList.toggle(key, is_present);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn next_classes;\n}\n","import { to_style } from '../../../shared/attributes.js';\nimport { STYLE_CACHE } from '../../constants.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {Record<string, any>} prev\n * @param {Record<string, any>} next\n * @param {string} [priority]\n */\nfunction update_styles(dom, prev = {}, next, priority) {\n\tfor (var key in next) {\n\t\tvar value = next[key];\n\n\t\tif (prev[key] !== value) {\n\t\t\tif (next[key] == null) {\n\t\t\t\tdom.style.removeProperty(key);\n\t\t\t} else {\n\t\t\t\tdom.style.setProperty(key, value, priority);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {string | null} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [prev_styles]\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [next_styles]\n */\nexport function set_style(dom, value, prev_styles, next_styles) {\n\tvar prev = /** @type {any} */ (dom)[STYLE_CACHE];\n\n\tif (hydrating || prev !== value) {\n\t\tvar next_style_attr = to_style(value, next_styles);\n\n\t\tif (!hydrating || next_style_attr !== dom.getAttribute('style')) {\n\t\t\tif (next_style_attr == null) {\n\t\t\t\tdom.removeAttribute('style');\n\t\t\t} else {\n\t\t\t\tdom.style.cssText = next_style_attr;\n\t\t\t}\n\t\t}\n\n\t\t/** @type {any} */ (dom)[STYLE_CACHE] = value;\n\t} else if (next_styles) {\n\t\tif (Array.isArray(next_styles)) {\n\t\t\tupdate_styles(dom, prev_styles?.[0], next_styles[0]);\n\t\t\tupdate_styles(dom, prev_styles?.[1], next_styles[1], 'important');\n\t\t} else {\n\t\t\tupdate_styles(dom, prev_styles, next_styles);\n\t\t}\n\t}\n\n\treturn next_styles;\n}\n","import { effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport { is } from '../../../proxy.js';\nimport { is_array } from '../../../../shared/utils.js';\nimport * as w from '../../../warnings.js';\nimport { Batch, current_batch, previous_batch } from '../../../reactivity/batch.js';\nimport { async_mode_flag } from '../../../../flags/index.js';\n\n/**\n * Sets the `selected` attribute on an option so form reset can restore it.\n * @param {HTMLOptionElement} option\n * @param {boolean} selected\n */\nexport function set_selected(option, selected) {\n\tif (selected) {\n\t\tif (!option.hasAttribute('selected')) option.setAttribute('selected', '');\n\t} else {\n\t\toption.removeAttribute('selected');\n\t}\n}\n\n/**\n * Sets the options a form reset should restore. The first call selects\n * them if nothing has set a value, later calls leave the current selection alone.\n * @param {HTMLSelectElement} select\n * @param {any} value\n */\nexport function set_default_select_value(select, value) {\n\tvar mounting = !('__defaultValue' in select);\n\t// @ts-expect-error\n\tif (!mounting && select.__defaultValue === value) return;\n\t// @ts-expect-error\n\tselect.__defaultValue = value;\n\tapply_default_select_value(select, !mounting || '__value' in select);\n}\n\n/**\n * Marks the options matching `__defaultValue` as selected. Without `preserve`\n * a newly matching option gets selected, as an inserted `<option selected>` would.\n * @param {HTMLSelectElement} select\n * @param {boolean} preserve\n */\nfunction apply_default_select_value(select, preserve) {\n\t// @ts-expect-error\n\tvar value = select.__defaultValue;\n\tvar multiple = select.multiple;\n\tvar values = multiple ? value ?? [] : null;\n\n\tif (multiple && !is_array(values)) return;\n\n\tvar index = select.selectedIndex;\n\tvar selected = preserve && multiple ? new Set(select.selectedOptions) : null;\n\n\tfor (var option of select.options) {\n\t\tvar option_value = get_option_value(option);\n\t\tset_selected(\n\t\t\toption,\n\t\t\tmultiple ? /** @type {any[]} */ (values).includes(option_value) : is(option_value, value)\n\t\t);\n\t}\n\n\tif (!preserve) return;\n\n\tif (selected !== null) {\n\t\tfor (option of select.options) {\n\t\t\tvar was_selected = selected.has(option);\n\t\t\tif (option.selected !== was_selected) option.selected = was_selected;\n\t\t}\n\t} else if (select.selectedIndex !== index) {\n\t\tselect.selectedIndex = index;\n\t}\n}\n\n/**\n * Selects the correct option(s) (depending on whether this is a multiple select)\n * @template V\n * @param {HTMLSelectElement} select\n * @param {V} value\n * @param {boolean} mounting\n */\nexport function select_option(select, value, mounting = false) {\n\tif (select.multiple) {\n\t\t// If value is null or undefined, keep the selection as is\n\t\tif (value == undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If not an array, warn and keep the selection as is\n\t\tif (!is_array(value)) {\n\t\t\treturn w.select_multiple_invalid_value();\n\t\t}\n\n\t\t// Otherwise, update the selection\n\t\tfor (var option of select.options) {\n\t\t\toption.selected = value.includes(get_option_value(option));\n\t\t}\n\n\t\treturn;\n\t}\n\n\tfor (option of select.options) {\n\t\tvar option_value = get_option_value(option);\n\t\tif (is(option_value, value)) {\n\t\t\toption.selected = true;\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (!mounting || value !== undefined) {\n\t\tselect.selectedIndex = -1; // no option should be selected\n\t}\n}\n\n/**\n * Sets up a mutation observer to sync the current selection\n * and default to the dom when the options change, for example\n * when they are inside an `#each` block. Called once per `<select>`,\n * by the compiled output or by `attribute_effect` for spreads.\n * @param {HTMLSelectElement} select\n */\nexport function init_select(select) {\n\tvar observer = new MutationObserver((entries) => {\n\t\t// Mutations related to `<selectedcontent>` can never affect the option list.\n\t\t// Reacting to them could revert a user-initiated selection change, because the\n\t\t// records are delivered as soon as any listener returns (e.g. a delegated `input`\n\t\t// handler), which can happen before the `change` handler has updated `__value`\n\t\tif (entries.every(is_selectedcontent_mutation)) return;\n\n\t\tif ('__defaultValue' in select) {\n\t\t\tapply_default_select_value(select, false);\n\t\t}\n\n\t\tif ('__value' in select) {\n\t\t\tselect_option(select, select.__value);\n\t\t}\n\t\t// Deliberately don't update the potential binding value,\n\t\t// the model should be preserved unless explicitly changed\n\t});\n\n\tobserver.observe(select, {\n\t\t// Listen to option element changes\n\t\tchildList: true,\n\t\tsubtree: true, // because of <optgroup>\n\t\t// Listen to option element value attribute changes\n\t\t// (doesn't get notified of select value changes,\n\t\t// because that property is not reflected as an attribute)\n\t\tattributes: true,\n\t\tattributeFilter: ['value']\n\t});\n\n\tteardown(() => {\n\t\tobserver.disconnect();\n\t});\n}\n\n/**\n * @param {HTMLSelectElement} select\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_select_value(select, get, set = get) {\n\tvar batches = new WeakSet();\n\tvar mounting = true;\n\n\tlisten_to_event_and_reset_event(select, 'change', (is_reset) => {\n\t\tvar query = is_reset ? '[selected]' : ':checked';\n\t\t/** @type {unknown} */\n\t\tvar value;\n\n\t\tif (select.multiple) {\n\t\t\tvalue = [].map.call(select.querySelectorAll(query), get_option_value);\n\t\t} else {\n\t\t\t/** @type {HTMLOptionElement | null} */\n\t\t\tvar selected_option =\n\t\t\t\tselect.querySelector(query) ??\n\t\t\t\t// will fall back to first non-disabled option if no option is selected\n\t\t\t\tselect.querySelector('option:not([disabled])');\n\t\t\tvalue = selected_option && get_option_value(selected_option);\n\t\t}\n\n\t\tset(value);\n\n\t\t// @ts-ignore\n\t\tselect.__value = value;\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\t});\n\n\t// Needs to be an effect, not a render_effect, so that in case of each loops the logic runs after the each block has updated\n\teffect(() => {\n\t\tvar value = get();\n\n\t\tif (select === document.activeElement) {\n\t\t\t// In sync mode render effects are executed during tree traversal -> needs current_batch\n\t\t\t// In async mode render effects are flushed once batch resolved, at which point current_batch is null -> needs previous_batch\n\t\t\tvar batch = /** @type {Batch} */ (async_mode_flag ? previous_batch : current_batch);\n\n\t\t\t// Don't update the <select> if it is focused. We can get here if, for example,\n\t\t\t// an update is deferred because of async work depending on the select:\n\t\t\t//\n\t\t\t// <select bind:value={selected}>...</select>\n\t\t\t// <p>{await find(selected)}</p>\n\t\t\tif (batches.has(batch)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tselect_option(select, value, mounting);\n\n\t\t// Mounting and value undefined -> take selection from dom\n\t\tif (mounting && value === undefined) {\n\t\t\t/** @type {HTMLOptionElement | null} */\n\t\t\tvar selected_option = select.querySelector(':checked');\n\t\t\tif (selected_option !== null) {\n\t\t\t\tvalue = get_option_value(selected_option);\n\t\t\t\tset(value);\n\t\t\t}\n\t\t}\n\n\t\t// @ts-ignore\n\t\tselect.__value = value;\n\t\tmounting = false;\n\t});\n}\n\n/** @param {HTMLOptionElement} option */\nfunction get_option_value(option) {\n\t// __value only exists if the <option> has a value attribute\n\tif ('__value' in option) {\n\t\treturn option.__value;\n\t} else {\n\t\treturn option.value;\n\t}\n}\n\n/**\n * Returns `true` if the mutation stems from the browser mirroring the selected\n * option's content into `<selectedcontent>`, or from us replacing the\n * `<selectedcontent>` element with a clone of itself\n * @param {MutationRecord} entry\n */\nfunction is_selectedcontent_mutation(entry) {\n\tif (/** @type {Element} */ (entry.target).closest('selectedcontent') !== null) {\n\t\treturn true;\n\t}\n\n\tif (entry.type === 'childList') {\n\t\tvar nodes = [...entry.addedNodes, ...entry.removedNodes];\n\t\treturn nodes.length > 0 && nodes.every((node) => node.nodeName === 'SELECTEDCONTENT');\n\t}\n\n\treturn false;\n}\n","/** @import { Blocker, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport { hydrating, set_hydrating } from '../hydration.js';\nimport { get_descriptors, get_prototype_of } from '../../../shared/utils.js';\nimport { create_event, delegate, delegated, event, event_symbol } from './events.js';\nimport { add_form_reset_listener, autofocus } from './misc.js';\nimport * as w from '../../warnings.js';\nimport {\n\tATTRIBUTES_CACHE,\n\tFORM_RESET_HANDLER,\n\tIS_XHTML,\n\tLOADING_ATTR_SYMBOL\n} from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { is_capture_event, can_delegate_event, normalize_attribute } from '../../../../utils.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { attach } from './attachments.js';\nimport { clsx } from '../../../shared/attributes.js';\nimport { set_class } from './class.js';\nimport { set_style } from './style.js';\nimport { ATTACHMENT_KEY, NAMESPACE_HTML, UNINITIALIZED } from '../../../../constants.js';\nimport { branch, destroy_effect, effect, managed } from '../../reactivity/effects.js';\nimport {\n\tinit_select,\n\tselect_option,\n\tset_default_select_value,\n\tset_selected\n} from './bindings/select.js';\nimport { flatten } from '../../reactivity/async.js';\n\nexport const CLASS = Symbol('class');\nexport const STYLE = Symbol('style');\n\nconst IS_CUSTOM_ELEMENT = Symbol('is custom element');\nconst IS_HTML = Symbol('is html');\n\nconst LINK_TAG = IS_XHTML ? 'link' : 'LINK';\nconst INPUT_TAG = IS_XHTML ? 'input' : 'INPUT';\nconst OPTION_TAG = IS_XHTML ? 'option' : 'OPTION';\nconst SELECT_TAG = IS_XHTML ? 'select' : 'SELECT';\nconst PROGRESS_TAG = IS_XHTML ? 'progress' : 'PROGRESS';\n\n/**\n * The value/checked attribute in the template actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLInputElement} input\n * @returns {void}\n */\nexport function remove_input_defaults(input) {\n\tif (!hydrating) return;\n\n\tvar already_removed = false;\n\n\t// We try and remove the default attributes later, rather than sync during hydration.\n\t// Doing it sync during hydration has a negative impact on performance, but deferring the\n\t// work in an idle task alleviates this greatly. If a form reset event comes in before\n\t// the idle callback, then we ensure the input defaults are cleared just before.\n\tvar remove_defaults = () => {\n\t\tif (already_removed) return;\n\t\talready_removed = true;\n\n\t\t// Remove the attributes but preserve the values\n\t\tif (input.hasAttribute('value')) {\n\t\t\tvar value = input.value;\n\t\t\tset_attribute(input, 'value', null);\n\t\t\tinput.value = value;\n\t\t}\n\n\t\tif (input.hasAttribute('checked')) {\n\t\t\tvar checked = input.checked;\n\t\t\tset_attribute(input, 'checked', null);\n\t\t\tinput.checked = checked;\n\t\t}\n\t};\n\n\t/** @type {any} */ (input)[FORM_RESET_HANDLER] = remove_defaults;\n\tqueue_micro_task(remove_defaults);\n\tadd_form_reset_listener();\n}\n\n/**\n * @param {Element} element\n * @param {any} value\n */\nexport function set_value(element, value) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.value ===\n\t\t\t(attributes.value =\n\t\t\t\t// treat null and undefined the same for the initial value\n\t\t\t\tvalue ?? undefined) ||\n\t\t// @ts-expect-error\n\t\t// `progress` elements always need their value set when it's `0`\n\t\t(element.value === value && (value !== 0 || element.nodeName !== PROGRESS_TAG))\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.value = value ?? '';\n}\n\n/**\n * @param {Element} element\n * @param {boolean} checked\n */\nexport function set_checked(element, checked) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.checked ===\n\t\t(attributes.checked =\n\t\t\t// treat null and undefined the same for the initial value\n\t\t\tchecked ?? undefined)\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.checked = checked;\n}\n\n/**\n * Applies the default checked property without influencing the current checked property.\n * @param {HTMLInputElement} element\n * @param {boolean} checked\n */\nexport function set_default_checked(element, checked) {\n\tconst existing_value = element.checked;\n\telement.defaultChecked = checked;\n\telement.checked = existing_value;\n}\n\n/**\n * Applies the default value property without influencing the current value property.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * @param {string} value\n */\nexport function set_default_value(element, value) {\n\tconst existing_value = element.value;\n\telement.defaultValue = value;\n\telement.value = existing_value;\n}\n\n/**\n * @param {Element} element\n * @param {string} attribute\n * @param {string | null} value\n * @param {boolean} [skip_warning]\n */\nexport function set_attribute(element, attribute, value, skip_warning) {\n\tvar attributes = get_attributes(element);\n\n\tif (hydrating) {\n\t\tattributes[attribute] = element.getAttribute(attribute);\n\n\t\tif (\n\t\t\tattribute === 'src' ||\n\t\t\tattribute === 'srcset' ||\n\t\t\t(attribute === 'href' && element.nodeName === LINK_TAG)\n\t\t) {\n\t\t\tif (!skip_warning) {\n\t\t\t\tcheck_src_in_dev_hydration(element, attribute, value ?? '');\n\t\t\t}\n\n\t\t\t// If we reset these attributes, they would result in another network request, which we want to avoid.\n\t\t\t// We assume they are the same between client and server as checking if they are equal is expensive\n\t\t\t// (we can't just compare the strings as they can be different between client and server but result in the\n\t\t\t// same url, so we would need to create hidden anchor elements to compare them)\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (attributes[attribute] === (attributes[attribute] = value)) return;\n\n\tif (attribute === 'loading') {\n\t\t// @ts-expect-error\n\t\telement[LOADING_ATTR_SYMBOL] = value;\n\t}\n\n\tif (value == null) {\n\t\telement.removeAttribute(attribute);\n\t} else if (typeof value !== 'string' && get_setters(element).has(attribute)) {\n\t\t// @ts-ignore\n\t\telement[attribute] = value;\n\t} else {\n\t\telement.setAttribute(attribute, value);\n\t}\n}\n\n/**\n * @param {Element} dom\n * @param {string} attribute\n * @param {string} value\n */\nexport function set_xlink_attribute(dom, attribute, value) {\n\tdom.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @param {string} prop\n * @param {any} value\n */\nexport function set_custom_element_data(node, prop, value) {\n\t// We need to ensure that setting custom element props, which can\n\t// invoke lifecycle methods on other custom elements, does not also\n\t// associate those lifecycle methods with the current active reaction\n\t// or effect\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet was_hydrating = hydrating;\n\tif (hydrating) {\n\t\tset_hydrating(false);\n\t}\n\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\tif (\n\t\t\t// `style` should use `set_attribute` rather than the setter\n\t\t\tprop !== 'style' &&\n\t\t\t// Don't compute setters for custom elements while they aren't registered yet,\n\t\t\t// because during their upgrade/instantiation they might add more setters.\n\t\t\t// Instead, fall back to a simple \"an object, then set as property\" heuristic.\n\t\t\t(setters_cache.has(node.getAttribute('is') || node.nodeName) ||\n\t\t\t// customElements may not be available in browser extension contexts\n\t\t\t!customElements ||\n\t\t\tcustomElements.get(node.getAttribute('is') || node.nodeName.toLowerCase())\n\t\t\t\t? get_setters(node).has(prop)\n\t\t\t\t: value && typeof value === 'object')\n\t\t) {\n\t\t\t// @ts-expect-error\n\t\t\tnode[prop] = value;\n\t\t} else {\n\t\t\t// We did getters etc checks already, stringify before passing to set_attribute\n\t\t\t// to ensure it doesn't invoke the same logic again, and potentially populating\n\t\t\t// the setters cache too early.\n\t\t\tset_attribute(node, prop, value == null ? value : String(value));\n\t\t}\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t}\n\t}\n}\n\n/**\n * Spreads attributes onto a DOM element, taking into account the currently set attributes\n * @param {Element & ElementCSSInlineStyle} element\n * @param {Record<string | symbol, any> | undefined} prev\n * @param {Record<string | symbol, any>} next New attributes - this function mutates this object\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n * @returns {Record<string, any>}\n */\nfunction set_attributes(\n\telement,\n\tprev,\n\tnext,\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tif (hydrating && should_remove_defaults && element.nodeName === INPUT_TAG) {\n\t\tif (!('defaultValue' in next || 'defaultChecked' in next)) {\n\t\t\tremove_input_defaults(/** @type {HTMLInputElement} */ (element));\n\t\t}\n\t}\n\n\tvar attributes = get_attributes(element);\n\n\tvar is_custom_element = attributes[IS_CUSTOM_ELEMENT];\n\tvar preserve_attribute_case = !attributes[IS_HTML];\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet is_hydrating_custom_element = hydrating && is_custom_element;\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(false);\n\t}\n\n\tvar current = prev || {};\n\tvar is_option_element = element.nodeName === OPTION_TAG;\n\tvar is_select_element = element.nodeName === SELECT_TAG;\n\n\ttry {\n\t\tfor (var key in prev) {\n\t\t\t// don't null our internal $$onX listeners\n\t\t\tif (!(key in next) && key[0] + key[1] !== '$$') {\n\t\t\t\tnext[key] = null;\n\t\t\t}\n\t\t}\n\n\t\tif (next.class) {\n\t\t\tnext.class = clsx(next.class);\n\t\t} else if (css_hash || next[CLASS]) {\n\t\t\tnext.class = null; /* force call to set_class() */\n\t\t}\n\n\t\tif (next[STYLE]) {\n\t\t\tnext.style ??= null; /* force call to set_style() */\n\t\t}\n\n\t\tvar setters = get_setters(element);\n\n\t\tif (\n\t\t\telement.nodeName === INPUT_TAG &&\n\t\t\t'type' in next &&\n\t\t\t('value' in next || '__value' in next)\n\t\t) {\n\t\t\tvar type = next.type;\n\n\t\t\tif (type !== current.type || (type === undefined && element.hasAttribute('type'))) {\n\t\t\t\tcurrent.type = type;\n\t\t\t\tset_attribute(element, 'type', type, skip_warning);\n\t\t\t}\n\t\t}\n\n\t\t// since key is captured we use const\n\t\tfor (const key in next) {\n\t\t\t// let instead of var because referenced in a closure\n\t\t\tlet value = next[key];\n\n\t\t\t// Up here because we want to do this for the initial value, too, even if it's undefined,\n\t\t\t// and this wouldn't be reached in case of undefined because of the equality check below\n\t\t\tif (is_option_element && key === 'value' && value == null) {\n\t\t\t\t// The <option> element is a special case because removing the value attribute means\n\t\t\t\t// the value is set to the text content of the option element, and setting the value\n\t\t\t\t// to null or undefined means the value is set to the string \"null\" or \"undefined\".\n\t\t\t\t// To align with how we handle this case in non-spread-scenarios, this logic is needed.\n\t\t\t\t// There's a super-edge-case bug here that is left in in favor of smaller code size:\n\t\t\t\t// Because of the \"set missing props to null\" logic above, we can't differentiate\n\t\t\t\t// between a missing value and an explicitly set value of null or undefined. That means\n\t\t\t\t// that once set, the value attribute of an <option> element can't be removed. This is\n\t\t\t\t// a very rare edge case, and removing the attribute altogether isn't possible either\n\t\t\t\t// for the <option value={undefined}> case, so we're not losing any functionality here.\n\t\t\t\t// @ts-ignore\n\t\t\t\telement.value = element.__value = '';\n\t\t\t\tcurrent[key] = value;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (key === 'class') {\n\t\t\t\tvar is_html = element.namespaceURI === 'http://www.w3.org/1999/xhtml';\n\t\t\t\tset_class(element, is_html, value, css_hash, prev?.[CLASS], next[CLASS]);\n\t\t\t\tcurrent[key] = value;\n\t\t\t\tcurrent[CLASS] = next[CLASS];\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (key === 'style') {\n\t\t\t\tset_style(element, value, prev?.[STYLE], next[STYLE]);\n\t\t\t\tcurrent[key] = value;\n\t\t\t\tcurrent[STYLE] = next[STYLE];\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar prev_value = current[key];\n\n\t\t\t// Skip if value is unchanged, unless it's `undefined` and the element still has the attribute\n\t\t\tif (value === prev_value && !(value === undefined && element.hasAttribute(key))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcurrent[key] = value;\n\n\t\t\tvar prefix = key[0] + key[1]; // this is faster than key.slice(0, 2)\n\t\t\tif (prefix === '$$') continue;\n\n\t\t\tif (prefix === 'on') {\n\t\t\t\t/** @type {{ capture?: true }} */\n\t\t\t\tconst opts = {};\n\t\t\t\tconst event_handle_key = '$$' + key;\n\t\t\t\tlet event_name = key.slice(2);\n\t\t\t\tvar is_delegated = can_delegate_event(event_name);\n\n\t\t\t\tif (is_capture_event(event_name)) {\n\t\t\t\t\tevent_name = event_name.slice(0, -7);\n\t\t\t\t\topts.capture = true;\n\t\t\t\t}\n\n\t\t\t\tif (!is_delegated && prev_value) {\n\t\t\t\t\t// Listening to same event but different handler -> our handle function below takes care of this\n\t\t\t\t\t// If we were to remove and add listeners in this case, it could happen that the event is \"swallowed\"\n\t\t\t\t\t// (the browser seems to not know yet that a new one exists now) and doesn't reach the handler\n\t\t\t\t\t// https://github.com/sveltejs/svelte/issues/11903\n\t\t\t\t\tif (value != null) continue;\n\n\t\t\t\t\telement.removeEventListener(event_name, current[event_handle_key], opts);\n\t\t\t\t\tcurrent[event_handle_key] = null;\n\t\t\t\t}\n\n\t\t\t\tif (is_delegated) {\n\t\t\t\t\tdelegated(event_name, element, value);\n\t\t\t\t\tdelegate([event_name]);\n\t\t\t\t} else if (value != null) {\n\t\t\t\t\t/**\n\t\t\t\t\t * @this {any}\n\t\t\t\t\t * @param {Event} evt\n\t\t\t\t\t */\n\t\t\t\t\tfunction handle(evt) {\n\t\t\t\t\t\tcurrent[key].call(this, evt);\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrent[event_handle_key] = create_event(event_name, element, handle, opts);\n\t\t\t\t}\n\t\t\t} else if (key === 'style') {\n\t\t\t\t// avoid using the setter\n\t\t\t\tset_attribute(element, key, value);\n\t\t\t} else if (key === 'autofocus') {\n\t\t\t\tautofocus(/** @type {HTMLElement} */ (element), Boolean(value));\n\t\t\t} else if (!is_custom_element && (key === '__value' || (key === 'value' && value != null))) {\n\t\t\t\t// @ts-ignore We're not running this for custom elements because __value is actually\n\t\t\t\t// how Lit stores the current value on the element, and messing with that would break things.\n\t\t\t\telement.__value = value;\n\t\t\t\t// we don't set the value if it hasn't changed. This supports invalid number inputs like `1e` because\n\t\t\t\t// 1. user types 1e\n\t\t\t\t// 2. the state is updated reading e.target.value which is ''\n\t\t\t\t// 3. the spreaded value is ''\n\t\t\t\t// 4. updating input.value would thus, clear the user value\n\t\t\t\tif (\n\t\t\t\t\tprev_value == null ||\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\telement.value !== value ||\n\t\t\t\t\t(value === 0 && element.nodeName === PROGRESS_TAG)\n\t\t\t\t) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\telement.value = value;\n\t\t\t\t}\n\t\t\t} else if (key === 'selected' && is_option_element) {\n\t\t\t\tset_selected(/** @type {HTMLOptionElement} */ (element), value);\n\t\t\t} else {\n\t\t\t\tvar name = key;\n\t\t\t\tif (!preserve_attribute_case) {\n\t\t\t\t\tname = normalize_attribute(name);\n\t\t\t\t}\n\n\t\t\t\tvar is_default = name === 'defaultValue' || name === 'defaultChecked';\n\n\t\t\t\t// A select's default value is represented by selected options, not a property.\n\t\t\t\tif (is_select_element && name === 'defaultValue') continue;\n\n\t\t\t\tif (value == null && !is_custom_element && !is_default) {\n\t\t\t\t\tattributes[key] = null;\n\n\t\t\t\t\tif (name === 'value' || name === 'checked') {\n\t\t\t\t\t\t// removing value/checked also removes defaultValue/defaultChecked — preserve\n\t\t\t\t\t\tlet input = /** @type {HTMLInputElement} */ (element);\n\t\t\t\t\t\tconst use_default = prev === undefined;\n\t\t\t\t\t\tif (name === 'value') {\n\t\t\t\t\t\t\tlet previous = input.defaultValue;\n\t\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\t\tinput.defaultValue = previous;\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tinput.value = input.__value = use_default ? previous : null;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet previous = input.defaultChecked;\n\t\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\t\tinput.defaultChecked = previous;\n\t\t\t\t\t\t\tinput.checked = use_default ? previous : false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.removeAttribute(key);\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tis_default ||\n\t\t\t\t\t((is_custom_element || typeof value !== 'string') && setters.has(name))\n\t\t\t\t) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\telement[name] = value;\n\t\t\t\t\t// remove it from attributes's cache\n\t\t\t\t\tif (name in attributes) attributes[name] = UNINITIALIZED;\n\t\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\t\tset_attribute(element, name, value, skip_warning);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tif (is_hydrating_custom_element) {\n\t\t\tset_hydrating(true);\n\t\t}\n\t}\n\n\treturn current;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} element\n * @param {(...expressions: any) => Record<string | symbol, any>} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n */\nexport function attribute_effect(\n\telement,\n\tfn,\n\tsync = [],\n\tasync = [],\n\tblockers = [],\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tflatten(blockers, sync, async, (values) => {\n\t\t/** @type {Record<string | symbol, any> | undefined} */\n\t\tvar prev = undefined;\n\n\t\t/** @type {Record<symbol, Effect>} */\n\t\tvar effects = {};\n\n\t\tvar is_select = element.nodeName === SELECT_TAG;\n\t\tvar inited = false;\n\n\t\tmanaged(() => {\n\t\t\tvar next = fn(...values.map(get));\n\t\t\t/** @type {Record<string | symbol, any>} */\n\t\t\tvar current = set_attributes(\n\t\t\t\telement,\n\t\t\t\tprev,\n\t\t\t\tnext,\n\t\t\t\tcss_hash,\n\t\t\t\tshould_remove_defaults,\n\t\t\t\tskip_warning\n\t\t\t);\n\n\t\t\tif (inited && is_select) {\n\t\t\t\tvar select = /** @type {HTMLSelectElement} */ (element);\n\n\t\t\t\tif ('defaultValue' in next) {\n\t\t\t\t\tset_default_select_value(select, next.defaultValue);\n\t\t\t\t}\n\n\t\t\t\tif ('value' in next) {\n\t\t\t\t\tselect_option(select, next.value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(effects)) {\n\t\t\t\tif (!next[symbol]) destroy_effect(effects[symbol]);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(next)) {\n\t\t\t\tvar n = next[symbol];\n\n\t\t\t\tif (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) {\n\t\t\t\t\tif (effects[symbol]) destroy_effect(effects[symbol]);\n\t\t\t\t\teffects[symbol] = branch(() => attach(element, () => n));\n\t\t\t\t}\n\n\t\t\t\tcurrent[symbol] = n;\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t});\n\n\t\tif (is_select) {\n\t\t\tvar select = /** @type {HTMLSelectElement} */ (element);\n\n\t\t\teffect(() => {\n\t\t\t\tvar attrs = /** @type {Record<string | symbol, any>} */ (prev);\n\n\t\t\t\tif ('defaultValue' in attrs) {\n\t\t\t\t\tset_default_select_value(select, attrs.defaultValue);\n\t\t\t\t}\n\n\t\t\t\tselect_option(select, attrs.value, true);\n\t\t\t\tinit_select(select);\n\t\t\t});\n\t\t}\n\n\t\tinited = true;\n\t});\n}\n\n/**\n *\n * @param {Element} element\n */\nfunction get_attributes(element) {\n\treturn /** @type {Record<string | symbol, unknown>} **/ (\n\t\t/** @type {any} */ (element)[ATTRIBUTES_CACHE] ??= {\n\t\t\t[IS_CUSTOM_ELEMENT]: element.nodeName.includes('-'),\n\t\t\t[IS_HTML]: element.namespaceURI === NAMESPACE_HTML\n\t\t}\n\t);\n}\n\n/** @type {Map<string, Set<string>>} */\nvar setters_cache = new Map();\n\n/** @param {Element} element */\nfunction get_setters(element) {\n\tvar cache_key = element.getAttribute('is') || element.nodeName;\n\tvar setters = setters_cache.get(cache_key);\n\tif (setters) return setters;\n\tsetters_cache.set(cache_key, (setters = new Set()));\n\n\tvar descriptors;\n\tvar proto = element; // In the case of custom elements there might be setters on the instance\n\tvar element_proto = Element.prototype;\n\n\t// Stop at Element, from there on there's only unnecessary (and dangerous, like innerHTML) setters we're not interested in\n\t// Do not use constructor.name here as that's unreliable in some browser environments\n\twhile (element_proto !== proto) {\n\t\tdescriptors = get_descriptors(proto);\n\n\t\tfor (var key in descriptors) {\n\t\t\tif (\n\t\t\t\tdescriptors[key].set &&\n\t\t\t\t// better safe than sorry, we don't want spread attributes to mess with HTML content\n\t\t\t\tkey !== 'innerHTML' &&\n\t\t\t\tkey !== 'textContent' &&\n\t\t\t\tkey !== 'innerText'\n\t\t\t) {\n\t\t\t\tsetters.add(key);\n\t\t\t}\n\t\t}\n\n\t\tproto = get_prototype_of(proto);\n\t}\n\n\treturn setters;\n}\n\n/**\n * @param {any} element\n * @param {string} attribute\n * @param {string} value\n */\nfunction check_src_in_dev_hydration(element, attribute, value) {\n\tif (!DEV) return;\n\tif (attribute === 'srcset' && srcset_url_equal(element, value)) return;\n\tif (src_url_equal(element.getAttribute(attribute) ?? '', value)) return;\n\n\tw.hydration_attribute_changed(\n\t\tattribute,\n\t\telement.outerHTML.replace(element.innerHTML, element.innerHTML && '...'),\n\t\tString(value)\n\t);\n}\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nfunction src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\treturn new URL(element_src, document.baseURI).href === new URL(url, document.baseURI).href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element\n * @param {string} srcset\n * @returns {boolean}\n */\nfunction srcset_url_equal(element, srcset) {\n\tvar element_urls = split_srcset(element.srcset);\n\tvar urls = split_srcset(srcset);\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n","/** @import { Batch } from '../../../reactivity/batch.js' */\nimport { DEV } from 'esm-env';\nimport { render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport * as e from '../../../errors.js';\nimport { is } from '../../../proxy.js';\nimport { queue_micro_task } from '../../task.js';\nimport { hydrating } from '../../hydration.js';\nimport { tick, untrack } from '../../../runtime.js';\nimport { current_batch, previous_batch } from '../../../reactivity/batch.js';\nimport { async_mode_flag } from '../../../../flags/index.js';\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_value(input, get, set = get) {\n\tvar batches = new WeakSet();\n\n\tlisten_to_event_and_reset_event(input, 'input', async (is_reset) => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\t/** @type {any} */\n\t\tvar value = is_reset ? input.defaultValue : input.value;\n\t\tvalue = is_numberlike_input(input) ? to_number(value) : value;\n\t\tset(value);\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\n\t\t// Because `{#each ...}` blocks work by updating sources inside the flush,\n\t\t// we need to wait a tick before checking to see if we should forcibly\n\t\t// update the input and reset the selection state\n\t\tawait tick();\n\n\t\t// Respect any validation in accessors\n\t\tif (value !== (value = get())) {\n\t\t\tvar start = input.selectionStart;\n\t\t\tvar end = input.selectionEnd;\n\t\t\tvar length = input.value.length;\n\n\t\t\t// the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\n\t\t\t// Restore selection\n\t\t\tif (end !== null) {\n\t\t\t\tvar new_length = input.value.length;\n\t\t\t\t// If cursor was at end and new input is longer, move cursor to new end\n\t\t\t\tif (start === end && end === length && new_length > length) {\n\t\t\t\t\tinput.selectionStart = new_length;\n\t\t\t\t\tinput.selectionEnd = new_length;\n\t\t\t\t} else {\n\t\t\t\t\tinput.selectionStart = start;\n\t\t\t\t\tinput.selectionEnd = Math.min(end, new_length);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\t(hydrating && input.defaultValue !== input.value) ||\n\t\t// If defaultValue is set, then value == defaultValue\n\t\t// TODO Svelte 6: remove input.value check and set to empty string?\n\t\t(untrack(get) == null && input.value)\n\t) {\n\t\tset(is_numberlike_input(input) ? to_number(input.value) : input.value);\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\t}\n\n\trender_effect(() => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\tvar value = get();\n\n\t\tif (input === document.activeElement) {\n\t\t\t// In sync mode render effects are executed during tree traversal -> needs current_batch\n\t\t\t// In async mode render effects are flushed once batch resolved, at which point current_batch is null -> needs previous_batch\n\t\t\tvar batch = /** @type {Batch} */ (async_mode_flag ? previous_batch : current_batch);\n\n\t\t\t// Never rewrite the contents of a focused input. We can get here if, for example,\n\t\t\t// an update is deferred because of async work depending on the input:\n\t\t\t//\n\t\t\t// <input bind:value={query}>\n\t\t\t// <p>{await find(query)}</p>\n\t\t\tif (batches.has(batch)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (is_numberlike_input(input) && value === to_number(input.value)) {\n\t\t\t// handles 0 vs 00 case (see https://github.com/sveltejs/svelte/issues/9959)\n\t\t\treturn;\n\t\t}\n\n\t\tif (input.type === 'date' && !value && !input.value) {\n\t\t\t// Handles the case where a temporarily invalid date is set (while typing, for example with a leading 0 for the day)\n\t\t\t// and prevents this state from clearing the other parts of the date input (see https://github.com/sveltejs/svelte/issues/7897)\n\t\t\treturn;\n\t\t}\n\n\t\t// don't set the value of the input if it's the same to allow\n\t\t// minlength to work properly\n\t\tif (value !== input.value) {\n\t\t\t// @ts-expect-error the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\t\t}\n\t});\n}\n\n/** @type {Set<HTMLInputElement[]>} */\nconst pending = new Set();\n\n/**\n * @param {HTMLInputElement[]} inputs\n * @param {null | [number]} group_index\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_group(inputs, group_index, input, get, set = get) {\n\tvar is_checkbox = input.getAttribute('type') === 'checkbox';\n\tvar binding_group = inputs;\n\n\t// needs to be let or related code isn't treeshaken out if it's always false\n\tlet hydration_mismatch = false;\n\n\tif (group_index !== null) {\n\t\tfor (var index of group_index) {\n\t\t\t// @ts-expect-error\n\t\t\tbinding_group = binding_group[index] ??= [];\n\t\t}\n\t}\n\n\tbinding_group.push(input);\n\n\tlisten_to_event_and_reset_event(\n\t\tinput,\n\t\t'change',\n\t\t() => {\n\t\t\t// @ts-ignore\n\t\t\tvar value = input.__value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t}\n\n\t\t\tset(value);\n\t\t},\n\t\t// TODO better default value handling\n\t\t() => set(is_checkbox ? [] : null)\n\t);\n\n\trender_effect(() => {\n\t\tvar value = get();\n\n\t\t// If we are hydrating and the value has since changed, then use the update value\n\t\t// from the input instead.\n\t\tif (hydrating && input.defaultChecked !== input.checked) {\n\t\t\thydration_mismatch = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (is_checkbox) {\n\t\t\tvalue = value || [];\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = value.includes(input.__value);\n\t\t} else {\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = is(input.__value, value);\n\t\t}\n\t});\n\n\tteardown(() => {\n\t\tvar index = binding_group.indexOf(input);\n\n\t\tif (index !== -1) {\n\t\t\tbinding_group.splice(index, 1);\n\t\t}\n\t});\n\n\tif (!pending.has(binding_group)) {\n\t\tpending.add(binding_group);\n\n\t\tqueue_micro_task(() => {\n\t\t\t// necessary to maintain binding group order in all insertion scenarios\n\t\t\tbinding_group.sort((a, b) => (a.compareDocumentPosition(b) === 4 ? -1 : 1));\n\t\t\tpending.delete(binding_group);\n\t\t});\n\t}\n\n\tqueue_micro_task(() => {\n\t\tif (hydration_mismatch) {\n\t\t\tvar value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t} else {\n\t\t\t\tvar hydration_input = binding_group.find((input) => input.checked);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvalue = hydration_input?.__value;\n\t\t\t}\n\n\t\t\tset(value);\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_checked(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', (is_reset) => {\n\t\tvar value = is_reset ? input.defaultChecked : input.checked;\n\t\tset(value);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the update value from the input instead.\n\t\t(hydrating && input.defaultChecked !== input.checked) ||\n\t\t// If defaultChecked is set, then checked == defaultChecked\n\t\tuntrack(get) == null\n\t) {\n\t\tset(input.checked);\n\t}\n\n\trender_effect(() => {\n\t\tvar value = get();\n\t\tinput.checked = Boolean(value);\n\t});\n}\n\n/**\n * @template V\n * @param {Array<HTMLInputElement>} group\n * @param {V} __value\n * @param {boolean} checked\n * @returns {V[]}\n */\nfunction get_binding_group_value(group, __value, checked) {\n\t/** @type {Set<V>} */\n\tvar value = new Set();\n\n\tfor (var i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) {\n\t\t\t// @ts-ignore\n\t\t\tvalue.add(group[i].__value);\n\t\t}\n\t}\n\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement} input\n */\nfunction is_numberlike_input(input) {\n\tvar type = input.type;\n\treturn type === 'number' || type === 'range';\n}\n\n/**\n * @param {string} value\n */\nfunction to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => FileList | null} get\n * @param {(value: FileList | null) => void} set\n */\nexport function bind_files(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', () => {\n\t\tset(input.files);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\thydrating &&\n\t\tinput.files\n\t) {\n\t\tset(input.files);\n\t}\n\n\trender_effect(() => {\n\t\tinput.files = get();\n\t});\n}\n","import { teardown } from '../../../reactivity/effects.js';\nimport { get_descriptor } from '../../../../shared/utils.js';\n\n/**\n * Makes an `export`ed (non-prop) variable available on the `$$props` object\n * so that consumers can do `bind:x` on the component.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} prop\n * @param {V} value\n * @returns {void}\n */\nexport function bind_prop(props, prop, value) {\n\tvar desc = get_descriptor(props, prop);\n\n\tif (desc && desc.set) {\n\t\tprops[prop] = value;\n\t\tteardown(() => {\n\t\t\tprops[prop] = null;\n\t\t});\n\t}\n}\n","/** @import { ComponentContext, Effect } from '#client' */\nimport { DESTROYING, STATE_SYMBOL } from '#client/constants';\nimport { component_context, mark_as_component } from '../../../context.js';\nimport { effect, render_effect } from '../../../reactivity/effects.js';\nimport { active_effect, untrack } from '../../../runtime.js';\n\n/**\n * @param {any} bound_value\n * @param {Element} element_or_component\n * @returns {boolean}\n */\nfunction is_bound_this(bound_value, element_or_component) {\n\treturn (\n\t\tbound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component\n\t);\n}\n\n/**\n * @param {any} element_or_component\n * @param {(value: unknown, ...parts: unknown[]) => void} update\n * @param {(...parts: unknown[]) => unknown} get_value\n * @param {() => unknown[]} [get_parts] Set if the this binding is used inside an each block,\n * \t\t\t\t\t\t\t\t\t\treturns all the parts of the each block context that are used in the expression\n * @returns {void}\n */\nexport function bind_this(\n\telement_or_component = mark_as_component(),\n\tupdate,\n\tget_value,\n\tget_parts\n) {\n\tvar component_effect = /** @type {ComponentContext} */ (component_context).r;\n\tvar parent = /** @type {Effect} */ (active_effect);\n\n\teffect(() => {\n\t\t/** @type {unknown[]} */\n\t\tvar old_parts;\n\n\t\t/** @type {unknown[]} */\n\t\tvar parts;\n\n\t\trender_effect(() => {\n\t\t\told_parts = parts;\n\t\t\t// We only track changes to the parts, not the value itself to avoid unnecessary reruns.\n\t\t\tparts = get_parts?.() || [];\n\n\t\t\tuntrack(() => {\n\t\t\t\tif (!is_bound_this(get_value(...parts), element_or_component)) {\n\t\t\t\t\tupdate(element_or_component, ...parts);\n\t\t\t\t\t// If this is an effect rerun (cause: each block context changes), then nullify the binding at\n\t\t\t\t\t// the previous position if it isn't already taken over by a different effect.\n\t\t\t\t\tif (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) {\n\t\t\t\t\t\tupdate(null, ...old_parts);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\t// When the bind:this effect is destroyed, we go up the effect parent chain until we find the last parent effect that is destroyed,\n\t\t\t// or the effect containing the component bind:this is in (whichever comes first). That way we can time the nulling of the binding\n\t\t\t// as close to user/developer expectation as possible.\n\t\t\t// TODO Svelte 6: Decide if we want to keep this logic or just always null the binding in the component effect's teardown\n\t\t\t// (which would be simpler, but less intuitive in some cases, and breaks the `ondestroy-before-cleanup` test)\n\t\t\tlet p = parent;\n\t\t\twhile (p !== component_effect && p.parent !== null && p.parent.f & DESTROYING) {\n\t\t\t\tp = p.parent;\n\t\t\t}\n\t\t\tconst teardown = () => {\n\t\t\t\tif (parts && is_bound_this(get_value(...parts), element_or_component)) {\n\t\t\t\t\tupdate(null, ...parts);\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst original_teardown = p.teardown;\n\t\t\tp.teardown = () => {\n\t\t\t\tteardown();\n\t\t\t\toriginal_teardown?.();\n\t\t\t};\n\t\t};\n\t});\n\n\treturn element_or_component;\n}\n","import { noop } from '../../../shared/utils.js';\nimport { user_pre_effect } from '../../reactivity/effects.js';\nimport { on } from '../elements/events.js';\n\n/**\n * Substitute for the `trusted` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function trusted(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tif (event.isTrusted) {\n\t\t\t// @ts-ignore\n\t\t\tfn?.apply(this, args);\n\t\t}\n\t};\n}\n\n/**\n * Substitute for the `self` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function self(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\t// @ts-ignore\n\t\tif (event.target === this) {\n\t\t\t// @ts-ignore\n\t\t\tfn?.apply(this, args);\n\t\t}\n\t};\n}\n\n/**\n * Substitute for the `stopPropagation` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function stopPropagation(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tevent.stopPropagation();\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `once` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function once(fn) {\n\tvar ran = false;\n\n\treturn function (...args) {\n\t\tif (ran) return;\n\t\tran = true;\n\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `stopImmediatePropagation` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function stopImmediatePropagation(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tevent.stopImmediatePropagation();\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `preventDefault` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function preventDefault(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tevent.preventDefault();\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `passive` event modifier, implemented as an action\n * @deprecated\n * @param {HTMLElement} node\n * @param {[event: string, handler: () => EventListener]} options\n */\nexport function passive(node, [event, handler]) {\n\tuser_pre_effect(() => {\n\t\treturn on(node, event, handler() ?? noop, {\n\t\t\tpassive: true\n\t\t});\n\t});\n}\n\n/**\n * Substitute for the `nonpassive` event modifier, implemented as an action\n * @deprecated\n * @param {HTMLElement} node\n * @param {[event: string, handler: () => EventListener]} options\n */\nexport function nonpassive(node, [event, handler]) {\n\tuser_pre_effect(() => {\n\t\treturn on(node, event, handler() ?? noop, {\n\t\t\tpassive: false\n\t\t});\n\t});\n}\n","/** @import { ComponentContextLegacy } from '#client' */\nimport { run, run_all } from '../../../shared/utils.js';\nimport { component_context } from '../../context.js';\nimport { derived } from '../../reactivity/deriveds.js';\nimport { user_pre_effect, user_effect } from '../../reactivity/effects.js';\nimport { deep_read_state, get, untrack } from '../../runtime.js';\n\n/**\n * Legacy-mode only: Call `onMount` callbacks and set up `beforeUpdate`/`afterUpdate` effects\n * @param {boolean} [immutable]\n */\nexport function init(immutable = false) {\n\tconst context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\tconst callbacks = context.l.u;\n\tif (!callbacks) return;\n\n\tlet props = () => deep_read_state(context.s);\n\n\tif (immutable) {\n\t\tlet version = 0;\n\t\tlet prev = /** @type {Record<string, any>} */ ({});\n\n\t\t// In legacy immutable mode, before/afterUpdate only fire if the object identity of a prop changes\n\t\tconst d = derived(() => {\n\t\t\tlet changed = false;\n\t\t\tconst props = context.s;\n\t\t\tfor (const key in props) {\n\t\t\t\tif (props[key] !== prev[key]) {\n\t\t\t\t\tprev[key] = props[key];\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (changed) version++;\n\t\t\treturn version;\n\t\t});\n\n\t\tprops = () => get(d);\n\t}\n\n\t// beforeUpdate\n\tif (callbacks.b.length) {\n\t\tuser_pre_effect(() => {\n\t\t\tobserve_all(context, props);\n\t\t\trun_all(callbacks.b);\n\t\t});\n\t}\n\n\t// onMount (must run before afterUpdate)\n\tuser_effect(() => {\n\t\tconst fns = untrack(() => callbacks.m.map(run));\n\t\treturn () => {\n\t\t\tfor (const fn of fns) {\n\t\t\t\tif (typeof fn === 'function') {\n\t\t\t\t\tfn();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// afterUpdate\n\tif (callbacks.a.length) {\n\t\tuser_effect(() => {\n\t\t\tobserve_all(context, props);\n\t\t\trun_all(callbacks.a);\n\t\t});\n\t}\n}\n\n/**\n * Invoke the getter of all signals associated with a component\n * so they can be registered to the effect this function is called in.\n * @param {ComponentContextLegacy} context\n * @param {(() => void)} props\n */\nfunction observe_all(context, props) {\n\tif (context.l.s) {\n\t\tfor (const signal of context.l.s) get(signal);\n\t}\n\n\tprops();\n}\n","import { set, source } from '../../reactivity/sources.js';\nimport { get } from '../../runtime.js';\nimport { is_array } from '../../../shared/utils.js';\n\n/**\n * Under some circumstances, imports may be reactive in legacy mode. In that case,\n * they should be using `reactive_import` as part of the transformation\n * @param {() => any} fn\n */\nexport function reactive_import(fn) {\n\tvar s = source(0);\n\n\treturn function () {\n\t\tif (arguments.length === 1) {\n\t\t\tset(s, get(s) + 1);\n\t\t\treturn arguments[0];\n\t\t} else {\n\t\t\tget(s);\n\t\t\treturn fn();\n\t\t}\n\t};\n}\n\n/**\n * @this {any}\n * @param {Record<string, unknown>} $$props\n * @param {Event} event\n * @returns {void}\n */\nexport function bubble_event($$props, event) {\n\tvar events = /** @type {Record<string, Function[] | Function>} */ ($$props.$$events)?.[\n\t\tevent.type\n\t];\n\n\tvar callbacks = is_array(events) ? events.slice() : events == null ? [] : [events];\n\n\tfor (var fn of callbacks) {\n\t\t// Preserve \"this\" context\n\t\tfn.call(this, event);\n\t}\n}\n\n/**\n * Used to simulate `$on` on a component instance when `compatibility.componentApi === 4`\n * @param {Record<string, any>} $$props\n * @param {string} event_name\n * @param {Function} event_callback\n */\nexport function add_legacy_event_listener($$props, event_name, event_callback) {\n\t$$props.$$events ||= {};\n\t$$props.$$events[event_name] ||= [];\n\t$$props.$$events[event_name].push(event_callback);\n}\n\n/**\n * Used to simulate `$set` on a component instance when `compatibility.componentApi === 4`.\n * Needs component accessors so that it can call the setter of the prop. Therefore doesn't\n * work for updating props in `$$props` or `$$restProps`.\n * @this {Record<string, any>}\n * @param {Record<string, any>} $$new_props\n */\nexport function update_legacy_props($$new_props) {\n\tfor (var key in $$new_props) {\n\t\tif (key in this) {\n\t\t\tthis[key] = $$new_props[key];\n\t\t}\n\t}\n}\n","/** @import { StoreReferencesContainer } from '#client' */\n/** @import { Store } from '#shared' */\nimport { subscribe_to_store } from '../../../store/utils.js';\nimport { get as get_store } from '../../../store/shared/index.js';\nimport { define_property, noop } from '../../shared/utils.js';\nimport { get } from '../runtime.js';\nimport { teardown } from './effects.js';\nimport { mutable_source, set } from './sources.js';\nimport { DEV } from 'esm-env';\n\n/**\n * We set this to `true` when updating a store so that we correctly\n * schedule effects if the update takes place inside a `$:` effect\n */\nexport let legacy_is_updating_store = false;\n\n/**\n * Whether or not the prop currently being read is a store binding, as in\n * `<Child bind:x={$y} />`. If it is, we treat the prop as mutable even in\n * runes mode, and skip `binding_property_non_reactive` validation\n */\nlet is_store_binding = false;\n\nlet IS_UNMOUNTED = Symbol('unmounted');\n\n/**\n * Gets the current value of a store. If the store isn't subscribed to yet, it will create a proxy\n * signal that will be updated when the store is. The store references container is needed to\n * track reassignments to stores and to track the correct component context.\n * @template V\n * @param {Store<V> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n * @returns {V}\n */\nexport function store_get(store, store_name, stores) {\n\tconst entry = (stores[store_name] ??= {\n\t\tstore: null,\n\t\tsource: mutable_source(undefined),\n\t\tunsubscribe: noop\n\t});\n\n\tif (DEV) {\n\t\tentry.source.label = store_name;\n\t}\n\n\t// if the component that setup this is already unmounted we don't want to register a subscription\n\tif (entry.store !== store && !(IS_UNMOUNTED in stores)) {\n\t\tentry.unsubscribe();\n\t\tentry.store = store ?? null;\n\n\t\tif (store == null) {\n\t\t\tentry.source.v = undefined; // see synchronous callback comment below\n\t\t\tentry.unsubscribe = noop;\n\t\t} else {\n\t\t\tvar is_synchronous_callback = true;\n\n\t\t\tentry.unsubscribe = subscribe_to_store(store, (v) => {\n\t\t\t\tif (is_synchronous_callback) {\n\t\t\t\t\t// If the first updates to the store value (possibly multiple of them) are synchronously\n\t\t\t\t\t// inside a derived, we will hit the `state_unsafe_mutation` error if we `set` the value\n\t\t\t\t\tentry.source.v = v;\n\t\t\t\t} else {\n\t\t\t\t\tset(entry.source, v);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tis_synchronous_callback = false;\n\t\t}\n\t}\n\n\t// if the component that setup this stores is already unmounted the source will be out of sync\n\t// so we just use the `get` for the stores, less performant but it avoids to create a memory leak\n\t// and it will keep the value consistent\n\tif (store && IS_UNMOUNTED in stores) {\n\t\treturn get_store(store);\n\t}\n\n\treturn get(entry.source);\n}\n\n/**\n * Unsubscribe from a store if it's not the same as the one in the store references container.\n * We need this in addition to `store_get` because someone could unsubscribe from a store but\n * then never subscribe to the new one (if any), causing the subscription to stay open wrongfully.\n * @param {Store<any> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n */\nexport function store_unsub(store, store_name, stores) {\n\t/** @type {StoreReferencesContainer[''] | undefined} */\n\tlet entry = stores[store_name];\n\n\tif (entry && entry.store !== store) {\n\t\t// Don't reset store yet, so that store_get above can resubscribe to new store if necessary\n\t\tentry.unsubscribe();\n\t\tentry.unsubscribe = noop;\n\t}\n\n\treturn store;\n}\n\n/**\n * Sets the new value of a store and returns that value.\n * @template V\n * @param {Store<V>} store\n * @param {V} value\n * @returns {V}\n */\nexport function store_set(store, value) {\n\tupdate_with_flag(store, value);\n\treturn value;\n}\n\n/**\n * @param {StoreReferencesContainer} stores\n * @param {string} store_name\n */\nexport function invalidate_store(stores, store_name) {\n\tvar entry = stores[store_name];\n\tif (entry.store !== null) {\n\t\tstore_set(entry.store, entry.source.v);\n\t}\n}\n\n/**\n * Unsubscribes from all auto-subscribed stores on destroy\n * @returns {[StoreReferencesContainer, ()=>void]}\n */\nexport function setup_stores() {\n\t/** @type {StoreReferencesContainer} */\n\tconst stores = {};\n\n\tfunction cleanup() {\n\t\tteardown(() => {\n\t\t\tfor (var store_name in stores) {\n\t\t\t\tconst ref = stores[store_name];\n\t\t\t\tref.unsubscribe();\n\t\t\t}\n\t\t\tdefine_property(stores, IS_UNMOUNTED, {\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t});\n\t}\n\n\treturn [stores, cleanup];\n}\n\n/**\n * @param {Store<V>} store\n * @param {V} value\n * @template V\n */\nfunction update_with_flag(store, value) {\n\tlegacy_is_updating_store = true;\n\n\ttry {\n\t\tstore.set(value);\n\t} finally {\n\t\tlegacy_is_updating_store = false;\n\t}\n}\n\n/**\n * Updates a store with a new value.\n * @param {Store<V>} store  the store to update\n * @param {any} expression  the expression that mutates the store\n * @param {V} new_value  the new store value\n * @template V\n */\nexport function store_mutate(store, expression, new_value) {\n\tupdate_with_flag(store, new_value);\n\treturn expression;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_store(store, store_value, d = 1) {\n\tupdate_with_flag(store, store_value + d);\n\treturn store_value;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_store(store, store_value, d = 1) {\n\tconst value = store_value + d;\n\tupdate_with_flag(store, value);\n\treturn value;\n}\n\n/**\n * Called inside prop getters to communicate that the prop is a store binding\n */\nexport function mark_store_binding() {\n\tis_store_binding = true;\n}\n\n/**\n * Returns a tuple that indicates whether `fn()` reads a prop that is a store binding.\n * Used to prevent `binding_property_non_reactive` validation false positives and\n * ensure that these props are treated as mutable even in runes mode\n * @template T\n * @param {() => T} fn\n * @returns {[T, boolean]}\n */\nexport function capture_store_binding(fn) {\n\tvar previous_is_store_binding = is_store_binding;\n\n\ttry {\n\t\tis_store_binding = false;\n\t\treturn [fn(), is_store_binding];\n\t} finally {\n\t\tis_store_binding = previous_is_store_binding;\n\t}\n}\n","/** @import { Derived, Effect, Source } from './types.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tPROPS_IS_BINDABLE,\n\tPROPS_IS_IMMUTABLE,\n\tPROPS_IS_LAZY_INITIAL,\n\tPROPS_IS_RUNES,\n\tPROPS_IS_UPDATED\n} from '../../../constants.js';\nimport { get_descriptor, is_function } from '../../shared/utils.js';\nimport { set, source, update } from './sources.js';\nimport { derived, derived_safe_equal } from './deriveds.js';\nimport {\n\tactive_effect,\n\tget,\n\tis_destroying_effect,\n\tset_active_effect,\n\tuntrack\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { DESTROYED, LEGACY_PROPS, STATE_SYMBOL } from '#client/constants';\nimport { proxy } from '../proxy.js';\nimport { capture_store_binding } from './store.js';\nimport { legacy_mode_flag } from '../../flags/index.js';\nimport { effect, render_effect } from './effects.js';\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_prop(fn, d = 1) {\n\tconst value = fn();\n\tfn(value + d);\n\treturn value;\n}\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_prop(fn, d = 1) {\n\tconst value = fn() + d;\n\tfn(value);\n\treturn value;\n}\n\n/**\n * The proxy handler for rest props (i.e. `const { x, ...rest } = $props()`).\n * Is passed the full `$$props` object and excludes the named props.\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Set<string | symbol>, name?: string }>}}\n */\nconst rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.has(key)) return;\n\t\treturn target.props[key];\n\t},\n\tset(target, key) {\n\t\tif (DEV) {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.props_rest_readonly(`${target.name}.${String(key)}`);\n\t\t}\n\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.has(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.has(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.has(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {Set<string>} exclude\n * @param {string} [name]\n * @returns {Record<string, unknown>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function rest_props(props, exclude, name) {\n\treturn new Proxy(DEV ? { props, exclude, name } : { props, exclude }, rest_props_handler);\n}\n\n/**\n * The proxy handler for legacy $$restProps and $$props\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, special: Record<string | symbol, (v?: unknown) => unknown>, version: Source<number>, parent_effect: Effect }>}}\n */\nconst legacy_rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tget(target.version);\n\t\treturn key in target.special ? target.special[key]() : target.props[key];\n\t},\n\tset(target, key, value) {\n\t\tif (!(key in target.special)) {\n\t\t\tvar previous_effect = active_effect;\n\n\t\t\ttry {\n\t\t\t\tset_active_effect(target.parent_effect);\n\n\t\t\t\t// Handle props that can temporarily get out of sync with the parent\n\t\t\t\t/** @type {Record<string, (v?: unknown) => unknown>} */\n\t\t\t\ttarget.special[key] = prop(\n\t\t\t\t\t{\n\t\t\t\t\t\tget [key]() {\n\t\t\t\t\t\t\treturn target.props[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t/** @type {string} */ (key),\n\t\t\t\t\tPROPS_IS_UPDATED\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tset_active_effect(previous_effect);\n\t\t\t}\n\t\t}\n\n\t\ttarget.special[key](value);\n\t\tupdate(target.version); // $$props is coarse-grained: when $$props.x is updated, usages of $$props.y etc are also rerun\n\t\treturn true;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\tdeleteProperty(target, key) {\n\t\t// Svelte 4 allowed for deletions on $$restProps\n\t\tif (target.exclude.includes(key)) return true;\n\t\ttarget.exclude.push(key);\n\t\tupdate(target.version);\n\t\treturn true;\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @returns {Record<string, unknown>}\n */\nexport function legacy_rest_props(props, exclude) {\n\treturn new Proxy(\n\t\t{\n\t\t\tprops,\n\t\t\texclude,\n\t\t\tspecial: {},\n\t\t\tversion: source(0),\n\t\t\t// TODO this is only necessary because we need to track component\n\t\t\t// destruction inside `prop`, because of `bind:this`, but it\n\t\t\t// seems likely that we can simplify `bind:this` instead\n\t\t\tparent_effect: /** @type {Effect} */ (active_effect)\n\t\t},\n\t\tlegacy_rest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for spread props. Handles the incoming array of props\n * that looks like `() => { dynamic: props }, { static: prop }, ..` and wraps\n * them so that the whole thing is passed to the component as the `$$props` argument.\n * @type {ProxyHandler<{ props: Array<Record<string | symbol, unknown> | (() => Record<string | symbol, unknown>)> }>}}\n */\nconst spread_props_handler = {\n\tget(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) return p[key];\n\t\t}\n\t},\n\tset(target, key, value) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tconst desc = get_descriptor(p, key);\n\t\t\tif (desc && desc.set) {\n\t\t\t\tdesc.set(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) {\n\t\t\t\tconst descriptor = get_descriptor(p, key);\n\t\t\t\tif (descriptor && !descriptor.configurable) {\n\t\t\t\t\t// Prevent a \"Non-configurability Report Error\": The target is an array, it does\n\t\t\t\t\t// not actually contain this property. If it is now described as non-configurable,\n\t\t\t\t\t// the proxy throws a validation error. Setting it to true avoids that.\n\t\t\t\t\tdescriptor.configurable = true;\n\t\t\t\t}\n\t\t\t\treturn descriptor;\n\t\t\t}\n\t\t}\n\t},\n\thas(target, key) {\n\t\t// To prevent a false positive `is_entry_props` in the `prop` function\n\t\tif (key === STATE_SYMBOL || key === LEGACY_PROPS) return false;\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (p != null && key in p) return true;\n\t\t}\n\n\t\treturn false;\n\t},\n\townKeys(target) {\n\t\t/** @type {Array<string | symbol>} */\n\t\tconst keys = [];\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (!p) continue;\n\n\t\t\tfor (const key in p) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\n\t\t\tfor (const key of Object.getOwnPropertySymbols(p)) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\t\t}\n\n\t\treturn keys;\n\t}\n};\n\n/**\n * @param {Array<Record<string, unknown> | (() => Record<string, unknown>)>} props\n * @returns {any}\n */\nexport function spread_props(...props) {\n\treturn new Proxy({ props }, spread_props_handler);\n}\n\n/**\n * This function is responsible for synchronizing a possibly bound prop with the inner component state.\n * It is used whenever the compiler sees that the component writes to the prop, or when it has a default prop_value.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} key\n * @param {number} flags\n * @param {V | (() => V)} [fallback]\n * @returns {(() => V | ((arg: V) => V) | ((arg: V, mutation: boolean) => V))}\n */\nexport function prop(props, key, flags, fallback) {\n\tvar runes = !legacy_mode_flag || (flags & PROPS_IS_RUNES) !== 0;\n\tvar bindable = (flags & PROPS_IS_BINDABLE) !== 0;\n\tvar lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;\n\n\tvar fallback_value = /** @type {V} */ (fallback);\n\tvar fallback_dirty = true;\n\tvar fallback_signal = /** @type {Derived<V> | undefined} */ (undefined);\n\n\tvar get_fallback = () => {\n\t\tif (lazy && runes) {\n\t\t\tfallback_signal ??= derived(/** @type {() => V} */ (fallback));\n\t\t\treturn get(fallback_signal);\n\t\t}\n\n\t\tif (fallback_dirty) {\n\t\t\tfallback_dirty = false;\n\n\t\t\tfallback_value = lazy\n\t\t\t\t? untrack(/** @type {() => V} */ (fallback))\n\t\t\t\t: /** @type {V} */ (fallback);\n\t\t}\n\n\t\treturn fallback_value;\n\t};\n\n\t/** @type {((v: V) => void) | undefined} */\n\tlet setter;\n\n\tif (bindable) {\n\t\t// Can be the case when someone does `mount(Component, props)` with `let props = $state({...})`\n\t\t// or `createClassComponent(Component, props)`\n\t\tvar is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;\n\n\t\tsetter =\n\t\t\tget_descriptor(props, key)?.set ??\n\t\t\t(is_entry_props && key in props ? (v) => (props[key] = v) : undefined);\n\t}\n\n\t/** @type {V} */\n\tvar initial_value;\n\tvar is_store_sub = false;\n\n\tif (bindable) {\n\t\t[initial_value, is_store_sub] = capture_store_binding(() => /** @type {V} */ (props[key]));\n\t} else {\n\t\tinitial_value = /** @type {V} */ (props[key]);\n\t}\n\n\tif (initial_value === undefined && fallback !== undefined) {\n\t\tinitial_value = get_fallback();\n\n\t\tif (setter) {\n\t\t\tif (runes) e.props_invalid_value(key);\n\t\t\tsetter(initial_value);\n\t\t}\n\t}\n\n\t/** @type {() => V} */\n\tvar getter;\n\n\tif (runes) {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\t\t\tif (value === undefined) return get_fallback();\n\t\t\tfallback_dirty = true;\n\t\t\treturn value;\n\t\t};\n\t} else {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\n\t\t\tif (value !== undefined) {\n\t\t\t\t// in legacy mode, we don't revert to the fallback value\n\t\t\t\t// if the prop goes from defined to undefined. The easiest\n\t\t\t\t// way to model this is to make the fallback undefined\n\t\t\t\t// as soon as the prop has a value\n\t\t\t\tfallback_value = /** @type {V} */ (undefined);\n\t\t\t}\n\n\t\t\treturn value === undefined ? fallback_value : value;\n\t\t};\n\t}\n\n\t// prop is never written to — we only need a getter\n\tif (runes && (flags & PROPS_IS_UPDATED) === 0) {\n\t\treturn getter;\n\t}\n\n\t// prop is written to, but the parent component had `bind:foo` which\n\t// means we can just call `$$props.foo = value` directly\n\tif (setter) {\n\t\tvar legacy_parent = props.$$legacy;\n\t\treturn /** @type {() => V} */ (\n\t\t\tfunction (/** @type {V} */ value, /** @type {boolean} */ mutation) {\n\t\t\t\tif (arguments.length > 0) {\n\t\t\t\t\t// We don't want to notify if the value was mutated and the parent is in runes mode.\n\t\t\t\t\t// In that case the state proxy (if it exists) should take care of the notification.\n\t\t\t\t\t// If the parent is not in runes mode, we need to notify on mutation, too, that the prop\n\t\t\t\t\t// has changed because the parent will not be able to detect the change otherwise.\n\t\t\t\t\tif (!runes || !mutation || legacy_parent || is_store_sub) {\n\t\t\t\t\t\t/** @type {Function} */ (setter)(mutation ? getter() : value);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\n\t\t\t\treturn getter();\n\t\t\t}\n\t\t);\n\t}\n\n\t// Either prop is written to, but there's no binding, which means we\n\t// create a derived that we can write to locally.\n\t// Or we are in legacy mode where we always create a derived to replicate that\n\t// Svelte 4 did not trigger updates when a primitive value was updated to the same value.\n\tvar overridden = false;\n\n\tvar d = ((flags & PROPS_IS_IMMUTABLE) !== 0 ? derived : derived_safe_equal)(() => {\n\t\toverridden = false;\n\t\treturn getter();\n\t});\n\n\tif (DEV) {\n\t\td.label = key;\n\t}\n\n\t// Capture the initial value if it's bindable\n\tif (bindable) get(d);\n\n\tvar parent_effect = /** @type {Effect} */ (active_effect);\n\n\treturn /** @type {() => V} */ (\n\t\tfunction (/** @type {any} */ value, /** @type {boolean} */ mutation) {\n\t\t\tif (arguments.length > 0) {\n\t\t\t\tconst new_value = mutation ? get(d) : runes && bindable ? proxy(value) : value;\n\n\t\t\t\tset(d, new_value);\n\t\t\t\toverridden = true;\n\n\t\t\t\tif (fallback_value !== undefined) {\n\t\t\t\t\tfallback_value = new_value;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t// special case — avoid recalculating the derived if we're in a\n\t\t\t// teardown function and the prop was overridden locally, or the\n\t\t\t// component was already destroyed (people could access props in a timeout)\n\t\t\tif ((is_destroying_effect && overridden) || (parent_effect.f & DESTROYED) !== 0) {\n\t\t\t\treturn d.v;\n\t\t\t}\n\n\t\t\treturn get(d);\n\t\t}\n\t);\n}\n","/** @import { ComponentContext, ComponentContextLegacy } from '#client' */\n/** @import { EventDispatcher } from './index.js' */\n/** @import { NotFunction } from './internal/types.js' */\nimport { active_reaction, untrack } from './internal/client/runtime.js';\nimport { is_array } from './internal/shared/utils.js';\nimport { user_effect } from './internal/client/index.js';\nimport * as e from './internal/client/errors.js';\nimport { legacy_mode_flag } from './internal/flags/index.js';\nimport { component_context } from './internal/client/context.js';\nimport { DEV } from 'esm-env';\n\nif (DEV) {\n\t/**\n\t * @param {string} rune\n\t */\n\tfunction throw_rune_error(rune) {\n\t\tif (!(rune in globalThis)) {\n\t\t\t// TODO if people start adjusting the \"this can contain runes\" config through v-p-s more, adjust this message\n\t\t\t/** @type {any} */\n\t\t\tlet value; // let's hope no one modifies this global, but belts and braces\n\t\t\tObject.defineProperty(globalThis, rune, {\n\t\t\t\tconfigurable: true,\n\t\t\t\t// eslint-disable-next-line getter-return\n\t\t\t\tget: () => {\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\te.rune_outside_svelte(rune);\n\t\t\t\t},\n\t\t\t\tset: (v) => {\n\t\t\t\t\tvalue = v;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tthrow_rune_error('$state');\n\tthrow_rune_error('$effect');\n\tthrow_rune_error('$derived');\n\tthrow_rune_error('$inspect');\n\tthrow_rune_error('$props');\n\tthrow_rune_error('$bindable');\n}\n\n/**\n * Returns an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that aborts when the current [derived](https://svelte.dev/docs/svelte/$derived) or [effect](https://svelte.dev/docs/svelte/$effect) re-runs or is destroyed.\n *\n * Must be called while a derived or effect is running.\n *\n * ```svelte\n * <script>\n * \timport { getAbortSignal } from 'svelte';\n *\n * \tlet { id } = $props();\n *\n * \tasync function getData(id) {\n * \t\tconst response = await fetch(`/items/${id}`, {\n * \t\t\tsignal: getAbortSignal()\n * \t\t});\n *\n * \t\treturn await response.json();\n * \t}\n *\n * \tconst data = $derived(await getData(id));\n * </script>\n * ```\n */\nexport function getAbortSignal() {\n\tif (active_reaction === null) {\n\t\te.get_abort_signal_outside_reaction();\n\t}\n\n\treturn (active_reaction.ac ??= new AbortController()).signal;\n}\n\n/**\n * `onMount`, like [`$effect`](https://svelte.dev/docs/svelte/$effect), schedules a function to run as soon as the component has been mounted to the DOM.\n * Unlike `$effect`, the provided function only runs once.\n *\n * It must be called during the component's initialisation (but doesn't need to live _inside_ the component;\n * it can be called from an external module). If a function is returned _synchronously_ from `onMount`,\n * it will be called when the component is unmounted.\n *\n * `onMount` functions do not run during [server-side rendering](https://svelte.dev/docs/svelte/svelte-server#render).\n *\n * @template T\n * @param {() => NotFunction<T> | Promise<NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onMount');\n\t}\n\n\tif (legacy_mode_flag && component_context.l !== null) {\n\t\tinit_update_callbacks(component_context).m.push(fn);\n\t} else {\n\t\tuser_effect(() => {\n\t\t\tconst cleanup = untrack(fn);\n\t\t\tif (typeof cleanup === 'function') return /** @type {() => void} */ (cleanup);\n\t\t});\n\t}\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onDestroy');\n\t}\n\n\tonMount(() => () => untrack(fn));\n}\n\n/**\n * @template [T=any]\n * @param {string} type\n * @param {T} [detail]\n * @param {any}params_0\n * @returns {CustomEvent<T>}\n */\nfunction create_custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs/svelte/legacy-on#Component-events).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n *  loaded: null; // does not take a detail argument\n *  change: string; // takes a detail argument of type string, which is required\n *  optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * @deprecated Use callback props and/or the `$host()` rune instead — see [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Event-changes-Component-events)\n * @template {Record<string, any>} [EventMap = any]\n * @returns {EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createEventDispatcher');\n\t}\n\n\t/**\n\t * @param [detail]\n\t * @param [options]\n\t */\n\treturn (type, detail, options) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {string} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = create_custom_event(/** @type {string} */ (type), detail, options);\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\n\t\treturn true;\n\t};\n}\n\n// TODO mark beforeUpdate and afterUpdate as deprecated in Svelte 6\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`.\n *\n * In runes mode use `$effect.pre` instead.\n *\n * @deprecated Use [`$effect.pre`](https://svelte.dev/docs/svelte/$effect#$effect.pre) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('beforeUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('beforeUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).b.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`.\n *\n * In runes mode use `$effect` instead.\n *\n * @deprecated Use [`$effect`](https://svelte.dev/docs/svelte/$effect) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('afterUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('afterUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).a.push(fn);\n}\n\n/**\n * Legacy-mode: Init callbacks object for onMount/beforeUpdate/afterUpdate\n * @param {ComponentContext} context\n */\nfunction init_update_callbacks(context) {\n\tvar l = /** @type {ComponentContextLegacy} */ (context).l;\n\treturn (l.u ??= { a: [], b: [], m: [] });\n}\n\nexport { flushSync, fork } from './internal/client/reactivity/batch.js';\nexport {\n\tcreateContext,\n\tgetContext,\n\tgetAllContexts,\n\thasContext,\n\tsetContext\n} from './internal/client/context.js';\nexport { hydratable } from './internal/client/hydratable.js';\nexport { hydrate, mount, unmount } from './internal/client/render.js';\nexport { tick, untrack, settled } from './internal/client/runtime.js';\nexport { createRawSnippet } from './internal/client/dom/blocks/snippet.js';\n","export function parse(str, loose) {\n\tif (str instanceof RegExp) return { keys:false, pattern:str };\n\tvar c, o, tmp, ext, keys=[], pattern='', arr = str.split('/');\n\tarr[0] || arr.shift();\n\n\twhile (tmp = arr.shift()) {\n\t\tc = tmp[0];\n\t\tif (c === '*') {\n\t\t\tkeys.push('wild');\n\t\t\tpattern += '/(.*)';\n\t\t} else if (c === ':') {\n\t\t\to = tmp.indexOf('?', 1);\n\t\t\text = tmp.indexOf('.', 1);\n\t\t\tkeys.push( tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length) );\n\t\t\tpattern += !!~o && !~ext ? '(?:/([^/]+?))?' : '/([^/]+?)';\n\t\t\tif (!!~ext) pattern += (!!~o ? '?' : '') + '\\\\' + tmp.substring(ext);\n\t\t} else {\n\t\t\tpattern += '/' + tmp;\n\t\t}\n\t}\n\n\treturn {\n\t\tkeys: keys,\n\t\tpattern: new RegExp('^' + pattern + (loose ? '(?=$|\\/)' : '\\/?$'), 'i')\n\t};\n}\n\nvar RGX = /(\\/|^)([:*][^/]*?)(\\?)?(?=[/.]|$)/g;\n\n// error if key missing?\nexport function inject(route, values) {\n\treturn route.replace(RGX, (x, lead, key, optional) => {\n\t\tx = values[key=='*' ? 'wild' : key.substring(1)];\n\t\treturn x ? '/'+x : (optional || key=='*') ? '' : '/' + key;\n\t});\n}\n","import { PUBLIC_VERSION } from '../version.js';\n\nif (typeof window !== 'undefined') {\n\t// @ts-expect-error\n\t((window.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION);\n}\n","// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n * @type {string}\n */\nexport const VERSION = '5.57.2';\nexport const PUBLIC_VERSION = '5';\n","<script module lang=\"ts\">import { tick, untrack } from \"svelte\";\nclass RouterStateImpl {\n\t/** The current full location (incl. querystring) */\n\t_loc = $state.raw(getLocation());\n\t/** The current location (excluding querystring) */\n\t_location = $derived(this._loc.location);\n\t/** The current querystring */\n\t_querystring = $derived(this._loc.querystring);\n\t_params = $state.raw(undefined);\n\t/** The current full location (incl. querystring) */\n\tget loc() {\n\t\treturn this._loc;\n\t}\n\t/** The current location (excluding querystring) */\n\tget location() {\n\t\treturn this._location;\n\t}\n\t/** The current querystring */\n\tget querystring() {\n\t\treturn this._querystring;\n\t}\n\tget params() {\n\t\treturn this._params;\n\t}\n\tconstructor() {\n\t\tif (typeof window !== \"undefined\") {\n\t\t\twindow.addEventListener(\"hashchange\", () => {\n\t\t\t\tthis._loc = getLocation();\n\t\t\t});\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(\"[svelte-spa-router] window 'window' is not defined, skipping initiation\");\n\t\t}\n\t}\n}\n/** Router state object, containing the current location, querystring and params. */\nexport const router = new RouterStateImpl();\n/** Returns the current location from the hash. */\nfunction getLocation() {\n\tconst currentHref = typeof window !== \"undefined\" ? window.location.href : \"\";\n\tconst hashPosition = currentHref.indexOf(\"#/\");\n\tlet location = hashPosition > -1 ? currentHref.substr(hashPosition + 1) : \"/\";\n\t// Check if there's a querystring\n\tconst qsPosition = location.indexOf(\"?\");\n\tlet querystring = \"\";\n\tif (qsPosition > -1) {\n\t\tquerystring = location.substr(qsPosition + 1);\n\t\tlocation = location.substr(0, qsPosition);\n\t}\n\treturn {\n\t\tlocation,\n\t\tquerystring\n\t};\n}\n/**\n* Navigates to a new page programmatically.\n*\n* @param location - Path to navigate to (must start with `/` or `#/`)\n* @returns Promise that resolves after the page navigation has completed\n*/\nexport async function push(location) {\n\tif (!location || location.length < 1 || location.charAt(0) != \"/\" && location.indexOf(\"#/\") !== 0) {\n\t\tthrow Error(\"Invalid parameter location\");\n\t}\n\t// Execute this code when the current call stack is complete\n\tawait tick();\n\t// Note: this will include scroll state in history even when restoreScrollState is false\n\thistory.replaceState({\n\t\t...history.state,\n\t\t__svelte_spa_router_scrollX: window.scrollX,\n\t\t__svelte_spa_router_scrollY: window.scrollY\n\t}, \"\");\n\twindow.location.hash = (location.charAt(0) == \"#\" ? \"\" : \"#\") + location;\n}\n/**\n* Navigates back in history (equivalent to pressing the browser's back button).\n*\n* @returns Promise that resolves after the page navigation has completed\n*/\nexport async function pop() {\n\t// Execute this code when the current call stack is complete\n\tawait tick();\n\twindow.history.back();\n}\n/**\n* Replaces the current page but without modifying the history stack.\n*\n* @param location - Path to navigate to (must start with `/` or `#/`)\n* @returns Promise that resolves after the page navigation has completed\n*/\nexport async function replace(location) {\n\tif (!location || location.length < 1 || location.charAt(0) != \"/\" && location.indexOf(\"#/\") !== 0) {\n\t\tthrow Error(\"Invalid parameter location\");\n\t}\n\t// Execute this code when the current call stack is complete\n\tawait tick();\n\tconst dest = (location.charAt(0) == \"#\" ? \"\" : \"#\") + location;\n\ttry {\n\t\tconst newState = { ...history.state };\n\t\tdelete newState[\"__svelte_spa_router_scrollX\"];\n\t\tdelete newState[\"__svelte_spa_router_scrollY\"];\n\t\twindow.history.replaceState(newState, \"\", dest);\n\t} catch {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(\"Caught exception while replacing the current page. If you're running this in the Svelte REPL, please note that the `replace` method might not work in this environment.\");\n\t}\n\t// The method above doesn't trigger the hashchange event, so let's do that manually\n\twindow.dispatchEvent(new Event(\"hashchange\"));\n}\n/**\n* Svelte Action that enables a link element (`<a>`) to use our history management.\n*\n* For example:\n*\n* ```html\n* <a href=\"/books\" use:link>View books</a>\n* ```\n*/\nexport function link(node, opts) {\n\tlet currentOpts = linkOpts(opts);\n\t// Only apply to <a> tags\n\tif (!node || !node.tagName || node.tagName.toLowerCase() != \"a\") {\n\t\tthrow Error(\"Action \\\"link\\\" can only be used with <a> tags\");\n\t}\n\t// Set initial href\n\tupdateLinkHref(node, currentOpts);\n\t// Add click handler once, using currentOpts reference\n\tconst clickHandler = (event) => {\n\t\tevent.preventDefault();\n\t\tif (!currentOpts.disabled) {\n\t\t\tconst target = event.currentTarget;\n\t\t\tconst href = target ? target.getAttribute(\"href\") : null;\n\t\t\tif (href) {\n\t\t\t\tscrollstateHistoryHandler(href);\n\t\t\t}\n\t\t}\n\t};\n\tnode.addEventListener(\"click\", clickHandler);\n\treturn {\n\t\tupdate(updated) {\n\t\t\tcurrentOpts = linkOpts(updated);\n\t\t\tupdateLinkHref(node, currentOpts);\n\t\t},\n\t\tdestroy() {\n\t\t\tnode.removeEventListener(\"click\", clickHandler);\n\t\t}\n\t};\n}\n/** Tries to restore the scroll state from the given history state. */\nexport function restoreScroll(state) {\n\t// If this exists, then this is a back navigation: restore the scroll position\n\tif (state) {\n\t\twindow.scrollTo(state.__svelte_spa_router_scrollX || 0, state.__svelte_spa_router_scrollY || 0);\n\t} else {\n\t\t// Otherwise this is a forward navigation: scroll to top\n\t\twindow.scrollTo(0, 0);\n\t}\n}\n// Internal function used by the link function to update href attribute\nfunction updateLinkHref(node, opts) {\n\tlet href = opts.href || node.getAttribute(\"href\");\n\t// Destination must start with '/' or '#/'\n\tif (href && href.charAt(0) == \"/\") {\n\t\t// Add # to the href attribute\n\t\thref = \"#\" + href;\n\t} else if (!href || href.length < 2 || href.slice(0, 2) != \"#/\") {\n\t\tthrow Error(\"Invalid value for \\\"href\\\" attribute: \" + href);\n\t}\n\tnode.setAttribute(\"href\", href);\n}\n// Internal function that ensures the argument of the link action is always an object\nfunction linkOpts(val) {\n\tif (typeof val == \"string\") {\n\t\treturn { href: val };\n\t}\n\treturn val || {};\n}\n/**\n* The handler attached to an anchor tag responsible for updating the\n* current history state with the current scroll state.\n*/\nfunction scrollstateHistoryHandler(href) {\n\t// Setting the url (3rd arg) to href will break clicking for reasons, so don't try to do that\n\thistory.replaceState({\n\t\t...history.state,\n\t\t__svelte_spa_router_scrollX: window.scrollX,\n\t\t__svelte_spa_router_scrollY: window.scrollY\n\t}, \"\");\n\t// This will force an update as desired, but this time our scroll state will be attached\n\twindow.location.hash = href;\n}\n</script>\n\n<script lang=\"ts\">import { parse } from \"regexparam\";\nconst { routes = {}, prefix = \"\", restoreScrollState = false, onConditionsFailed = () => {}, onRouteLoaded = () => {}, onRouteLoading = () => {}, onRouteEvent = () => {} } = $props();\n/** Container for a route: path, component */\nclass RouteItem {\n\tpath;\n\tcomponent;\n\tconditions;\n\tuserData;\n\tprops;\n\t_pattern;\n\t_keys;\n\tconstructor(path, component) {\n\t\t// The _sveltesparouter marker is set by `wrap()` via Object.defineProperty and is intentionally absent from the public WrappedComponent type\n\t\tconst isWrapped = (c) => typeof c == \"object\" && c !== null && c._sveltesparouter === true;\n\t\tif (!component || typeof component != \"function\" && !isWrapped(component)) {\n\t\t\tthrow Error(\"Invalid component object\");\n\t\t}\n\t\t// Path must be a regular expression, or a string starting with '/' or '*'\n\t\tif (!path || typeof path == \"string\" && (path.length < 1 || path.charAt(0) != \"/\" && path.charAt(0) != \"*\") || typeof path == \"object\" && !(path instanceof RegExp)) {\n\t\t\tthrow Error(\"Invalid value for \\\"path\\\" argument - strings must start with / or *\");\n\t\t}\n\t\tconst parsed = typeof path == \"string\" ? parse(path) : parse(path);\n\t\tthis.path = path;\n\t\t// Check if the component is wrapped and we have conditions\n\t\tif (isWrapped(component)) {\n\t\t\tconst wrapped = component;\n\t\t\tthis.component = wrapped.component;\n\t\t\tthis.conditions = wrapped.conditions || [];\n\t\t\tthis.userData = wrapped.userData;\n\t\t\tthis.props = wrapped.props || {};\n\t\t} else {\n\t\t\tconst sync = component;\n\t\t\tthis.component = (() => Promise.resolve(sync));\n\t\t\tthis.conditions = [];\n\t\t\tthis.props = {};\n\t\t}\n\t\tthis._pattern = parsed.pattern;\n\t\tthis._keys = parsed.keys;\n\t}\n\t/**\n\t* Checks if `path` matches the current route.\n\t* Returns the list of parameters from the URL, or `null` if no match.\n\t*/\n\tmatch(path) {\n\t\t// If there's a prefix, check if it matches the start of the path\n\t\t// If not, bail early, else remove it before we run the matching\n\t\tif (prefix) {\n\t\t\tif (typeof prefix == \"string\") {\n\t\t\t\tif (path.startsWith(prefix)) {\n\t\t\t\t\tpath = path.substr(prefix.length) || \"/\";\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else if (prefix instanceof RegExp) {\n\t\t\t\tconst m = path.match(prefix);\n\t\t\t\tif (m && m[0]) {\n\t\t\t\t\tpath = path.substr(m[0].length) || \"/\";\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Check if the pattern matches\n\t\tconst matches = this._pattern.exec(path);\n\t\tif (matches === null) {\n\t\t\treturn null;\n\t\t}\n\t\t// If the input was a regular expression, _keys is false; return matches as is\n\t\tif (this._keys === false) {\n\t\t\treturn matches;\n\t\t}\n\t\tconst out = {};\n\t\tlet i = 0;\n\t\twhile (i < this._keys.length) {\n\t\t\t// URL-decode all values\n\t\t\ttry {\n\t\t\t\tout[this._keys[i]] = decodeURIComponent(matches[i + 1] || \"\") || null;\n\t\t\t} catch {\n\t\t\t\tout[this._keys[i]] = null;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn out;\n\t}\n\t/** Executes all conditions in order; returns false at the first failure. */\n\tasync checkConditions(detail) {\n\t\tfor (let i = 0; i < this.conditions.length; i++) {\n\t\t\tif (!await this.conditions[i](detail)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n}\n// Set up all routes\nconst routesList = [];\n// svelte-ignore state_referenced_locally\n// routes are static, initial capture is intended\nif (routes instanceof Map) {\n\troutes.forEach((route, path) => {\n\t\troutesList.push(new RouteItem(path, route));\n\t});\n} else {\n\tObject.keys(routes).forEach((path) => {\n\t\tconst map = routes;\n\t\troutesList.push(new RouteItem(path, map[path]));\n\t});\n}\n// State declarations for the currently-rendered route\nlet component = $state.raw(null);\nlet componentParams = $state.raw(null);\nlet routeProps = $state.raw({});\nlet previousScrollState = null;\nlet componentObj = null;\n// Effects\n$effect(() => {\n\thistory.scrollRestoration = restoreScrollState ? \"manual\" : \"auto\";\n});\n$effect(() => {\n\tif (!restoreScrollState) {\n\t\treturn;\n\t}\n\tconst popStateChanged = (event) => {\n\t\tif (event.state && (event.state.__svelte_spa_router_scrollY || event.state.__svelte_spa_router_scrollX)) {\n\t\t\tpreviousScrollState = event.state;\n\t\t} else {\n\t\t\tpreviousScrollState = null;\n\t\t}\n\t};\n\twindow.addEventListener(\"popstate\", popStateChanged);\n\treturn () => window.removeEventListener(\"popstate\", popStateChanged);\n});\nasync function dispatchNextTick(event, detail) {\n\t// Execute this code when the current call stack is complete\n\tawait tick();\n\tevent(detail);\n}\n$effect(() => {\n\t// React to loc changing and untrack everything else to prevent accidental dependencies\n\t// Cancel operation after async work in case a new loc change happened in the meantime\n\tconst newLoc = router.loc;\n\tlet cancelled = false;\n\tuntrack(async () => {\n\t\tlet i = 0;\n\t\twhile (i < routesList.length) {\n\t\t\tconst match = routesList[i].match(newLoc.location);\n\t\t\tif (!match) {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst matchParams = matchToParams(match);\n\t\t\tconst detail = {\n\t\t\t\troute: routesList[i].path,\n\t\t\t\tlocation: newLoc.location,\n\t\t\t\tquerystring: newLoc.querystring || \"\",\n\t\t\t\tuserData: routesList[i].userData,\n\t\t\t\tparams: matchParams\n\t\t\t};\n\t\t\tif (!await routesList[i].checkConditions(detail)) {\n\t\t\t\tif (cancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcomponent = null;\n\t\t\t\tcomponentObj = null;\n\t\t\t\tdispatchNextTick(onConditionsFailed, detail);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdispatchNextTick(onRouteLoading, { ...detail });\n\t\t\tconst obj = routesList[i].component;\n\t\t\tif (componentObj != obj) {\n\t\t\t\tif (obj.loading) {\n\t\t\t\t\tcomponent = obj.loading;\n\t\t\t\t\tcomponentObj = obj;\n\t\t\t\t\tcomponentParams = obj.loadingParams || null;\n\t\t\t\t\trouteProps = {};\n\t\t\t\t\tconst comp = obj.loading;\n\t\t\t\t\tdispatchNextTick(onRouteLoaded, {\n\t\t\t\t\t\t...detail,\n\t\t\t\t\t\tcomponent: comp,\n\t\t\t\t\t\tname: comp.name,\n\t\t\t\t\t\tparams: obj.loadingParams || null\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tcomponent = null;\n\t\t\t\t\tcomponentObj = null;\n\t\t\t\t}\n\t\t\t\tconst loaded = await obj();\n\t\t\t\tif (cancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcomponent = loaded && typeof loaded == \"object\" && \"default\" in loaded ? loaded.default : loaded;\n\t\t\t\tcomponentObj = obj;\n\t\t\t}\n\t\t\tcomponentParams = matchParams;\n\t\t\trouteProps = routesList[i].props;\n\t\t\tconst comp = component;\n\t\t\tif (comp) {\n\t\t\t\tdispatchNextTick(onRouteLoaded, {\n\t\t\t\t\t...detail,\n\t\t\t\t\tcomponent: comp,\n\t\t\t\t\tname: comp.name,\n\t\t\t\t\tparams: matchParams\n\t\t\t\t});\n\t\t\t}\n\t\t\trouter._params = matchParams;\n\t\t\tif (restoreScrollState) {\n\t\t\t\trestoreScroll(previousScrollState);\n\t\t\t\tpreviousScrollState = null;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tcomponent = null;\n\t\tcomponentObj = null;\n\t\trouter._params = undefined;\n\t\tif (restoreScrollState) {\n\t\t\trestoreScroll(previousScrollState);\n\t\t\tpreviousScrollState = null;\n\t\t}\n\t});\n\treturn () => {\n\t\tcancelled = true;\n\t};\n});\nfunction matchToParams(match) {\n\t// Preserve all keys, including null values for unmatched optional params\n\treturn match && typeof match == \"object\" && Object.keys(match).length ? match : null;\n}\n</script>\n\n{#if component}\n    {@const Component = component}\n    {#if componentParams}\n        <Component\n            params={componentParams}\n            onRouteEvent={onRouteEvent}\n            {...routeProps}\n        />\n    {:else}\n        <Component\n            onRouteEvent={onRouteEvent}\n            {...routeProps}\n        />\n    {/if}\n{/if}\n","<script>\r\n  import { onMount } from 'svelte';\r\n  import { push } from 'svelte-spa-router';\r\n  import { getApiBase } from './apiBase.js';\r\n  import { readInboxLogin } from './inbox/navigation.js';\r\n\r\n  let formData = {\r\n    username: '',\r\n    password: ''\r\n  };\r\n\r\n  let errorMessage = ''; // Add a variable to store error messages\r\n  // let isGoogleLoading = false; // Loading state for Google login - COMMENTED OUT\r\n  \r\n  // Check if user is already logged in and handle redirect\r\n  onMount(() => {\r\n    const token = localStorage.getItem('jwtToken');\r\n    const expiry = localStorage.getItem('jwtExpiry');\r\n    \r\n    const urlParams = new URLSearchParams(window.location.search);\r\n    const redirectTo = urlParams.get('redirect');\r\n    const inboxLogin = readInboxLogin(window.location.hash);\r\n    // A server-rejected token may still have a future local expiry. Do not bounce\r\n    // back to the protected thread before the user has actually reauthenticated.\r\n    if (inboxLogin?.forceLogin) return;\r\n    \r\n    // Check if token exists and is not expired\r\n    if (token && expiry && Date.now() < parseInt(expiry)) {\r\n      if (inboxLogin) { push(inboxLogin.target); return; }\r\n      // User is already logged in, check for redirect parameter\r\n      \r\n      if (redirectTo === 'invoice') {\r\n        console.log('AboutPage onMount - redirecting to invoice (already logged in)');\r\n        // Set a flag to indicate user was redirected to invoice page\r\n        sessionStorage.setItem('redirectedToInvoice', 'true');\r\n        // Redirect to invoice page\r\n        push('/invoice');\r\n        return;\r\n      } else if (redirectTo === 'reschedule') {\r\n        console.log('AboutPage onMount - redirecting to schedule with reschedule tab (already logged in)');\r\n        // If they came from a reschedule notification, redirect to schedule page with reschedule tab\r\n        push('/schedule?tab=reschedule');\r\n        return;\r\n      } else {\r\n        console.log('AboutPage onMount - redirecting to login-greeting (already logged in)');\r\n        // Redirect to normal logged-in page\r\n        push('/login-greeting');\r\n        return;\r\n      }\r\n    }\r\n\r\n    // Initialize Google Sign-In - COMMENTED OUT\r\n    // initializeGoogleSignIn();\r\n  });\r\n\r\n  // GOOGLE SIGN-IN FUNCTIONS - READY FOR TESTING\r\n  /*\r\n  function initializeGoogleSignIn() {\r\n    // Load Google Sign-In script\r\n    if (!window.google) {\r\n      const script = document.createElement('script');\r\n      script.src = 'https://accounts.google.com/gsi/client';\r\n      script.onload = () => {\r\n        console.log('Google Sign-In script loaded');\r\n        setupGoogleSignIn();\r\n      };\r\n      document.head.appendChild(script);\r\n    } else {\r\n      setupGoogleSignIn();\r\n    }\r\n  }\r\n  */\r\n\r\n  /*\r\n  function setupGoogleSignIn() {\r\n    if (window.google) {\r\n      window.google.accounts.id.initialize({\r\n        client_id: '39353963038-t5v1f98vbdkdmptbd8mkkp1bhijd1u9i.apps.googleusercontent.com',\r\n        callback: handleGoogleSignIn,\r\n        auto_select: false,\r\n        cancel_on_tap_outside: false\r\n      });\r\n      \r\n      // Render the sign-in button\r\n      window.google.accounts.id.renderButton(\r\n        document.getElementById('google-signin-button'),\r\n        {\r\n          theme: 'outline',\r\n          size: 'medium',\r\n          text: 'signin_with',\r\n          locale: 'lt'\r\n        }\r\n      );\r\n    }\r\n  }\r\n  */\r\n\r\n  /*\r\n  async function handleGoogleSignIn(response) {\r\n    console.log('Google Sign-In response:', response);\r\n    isGoogleLoading = true;\r\n    errorMessage = '';\r\n\r\n    try {\r\n      const result = await fetch('/studentplayground/api/google-oauth/', {\r\n        method: 'POST',\r\n        headers: {\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n          token: response.credential\r\n        })\r\n      });\r\n\r\n      const data = await result.json();\r\n      console.log('Backend response:', data);\r\n\r\n      if (result.ok) {\r\n        // Store JWT token\r\n        localStorage.setItem('jwtToken', data.access);\r\n        const decodedToken = parseJwt(data.access);\r\n        localStorage.setItem(\"jwtExpiry\", decodedToken.exp * 1000);\r\n        window.dispatchEvent(new Event('tutory:session-changed'));\r\n        \r\n        // Check for redirect parameter\r\n        const urlParams = new URLSearchParams(window.location.search);\r\n        const redirectTo = urlParams.get('redirect');\r\n        \r\n        console.log('Google login success - redirect param:', redirectTo);\r\n        \r\n        if (redirectTo === 'invoice') {\r\n          console.log('Google login success - redirecting to invoice');\r\n          sessionStorage.setItem('redirectedToInvoice', 'true');\r\n          push('/invoice');\r\n        } else if (redirectTo === 'reschedule') {\r\n          console.log('Google login success - redirecting to schedule with reschedule tab');\r\n          push('/schedule?tab=reschedule');\r\n        } else {\r\n          console.log('Google login success - redirecting to login-greeting');\r\n          push('/login-greeting');\r\n        }\r\n      } else {\r\n        errorMessage = data.error || 'Google login failed';\r\n      }\r\n    } catch (error) {\r\n      console.error('Google login error:', error);\r\n      errorMessage = 'Connection failed. Please try again.';\r\n    } finally {\r\n      isGoogleLoading = false;\r\n    }\r\n  }\r\n  */\r\n  \r\n  export function parseJwt(token) {\r\n    const base64Url = token.split('.')[1];\r\n    const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\r\n    const jsonPayload = decodeURIComponent(\r\n        atob(base64)\r\n            .split('')\r\n            .map(function (c) {\r\n                return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n            })\r\n            .join('')\r\n    );\r\n\r\n    return JSON.parse(jsonPayload);\r\n}\r\n  async function handleSubmit(event) {\r\n    event.preventDefault();\r\n    errorMessage = ''; // Reset error message before new submission\r\n\r\n    // Log device and browser information for debugging\r\n    console.log('=== LOGIN DEBUG INFO ===');\r\n    console.log('User Agent:', navigator.userAgent);\r\n    console.log('Platform:', navigator.platform);\r\n    console.log('Online:', navigator.onLine);\r\n    console.log('Connection:', navigator.connection ? {\r\n      effectiveType: navigator.connection.effectiveType,\r\n      downlink: navigator.connection.downlink,\r\n      rtt: navigator.connection.rtt\r\n    } : 'Not available');\r\n\r\n    // Create a timeout wrapper for fetch\r\n    const fetchWithTimeout = (url, options, timeout = 10000) => {\r\n      return Promise.race([\r\n        fetch(url, options),\r\n        new Promise((_, reject) =>\r\n          setTimeout(() => reject(new Error('Request timeout')), timeout)\r\n        )\r\n      ]);\r\n    };\r\n\r\n    // Retry logic for mobile networks\r\n    const maxRetries = 3;\r\n    let retryCount = 0;\r\n\r\n    while (retryCount < maxRetries) {\r\n      try {\r\n        console.log(`Sending request to token endpoint... (attempt ${retryCount + 1})`);\r\n        \r\n        const apiBase = getApiBase();\r\n        const response = await fetchWithTimeout(`${apiBase}/studentplayground/api/token/`, {\r\n            method: 'POST',\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n            },\r\n            body: JSON.stringify(formData)\r\n        }, 15000); // 15 second timeout for mobile\r\n\r\n        console.log('Received response:', response); // Log the entire response object\r\n\r\n        if (response.ok) {\r\n            console.log('Response OK:', response.status);\r\n            \r\n            const data = await response.json();\r\n            \r\n            // The JWT token is typically in data.access\r\n            if (data.access) {\r\n                const token = data.access;\r\n                const decodedToken = parseJwt(token);\r\n\r\n                // Save the token to localStorage\r\n                localStorage.setItem('jwtToken', data.access);\r\n                localStorage.setItem(\"jwtExpiry\", decodedToken.exp * 1000);\r\n                window.dispatchEvent(new Event('tutory:session-changed'));\r\n                const inboxLogin = readInboxLogin(window.location.hash);\r\n                if (inboxLogin) { push(inboxLogin.target); return; }\r\n                \r\n                // Check if there's a redirect parameter in the URL\r\n                const urlParams = new URLSearchParams(window.location.search);\r\n                const redirectTo = urlParams.get('redirect');\r\n                \r\n                console.log('Login success - redirect param:', redirectTo);\r\n                \r\n                if (redirectTo === 'invoice') {\r\n                    console.log('Login success - redirecting to invoice');\r\n                    // Set a flag to indicate user was redirected to invoice page\r\n                    sessionStorage.setItem('redirectedToInvoice', 'true');\r\n                    // If they came from a balance notification, redirect to invoice page\r\n                    push('/invoice');\r\n                } else if (redirectTo === 'reschedule') {\r\n                    console.log('Login success - redirecting to schedule with reschedule tab');\r\n                    // If they came from a reschedule notification, redirect to schedule page with reschedule tab\r\n                    push('/schedule?tab=reschedule');\r\n                } else {\r\n                    console.log('Login success - redirecting to login-greeting');\r\n                    // If it's not the first login, redirect to the regular greeting page\r\n                    push('/login-greeting');\r\n                }\r\n                return; // Success, exit retry loop\r\n            }\r\n        } else {\r\n            console.warn('Response NOT OK:', response.status);\r\n            \r\n            const errorData = await response.json();\r\n            console.log('Error data:', errorData); // Log the error data from the response\r\n            \r\n            errorMessage = errorData.message || \"Neteisingi prisijungimo duomenys\" || 'Incorrect username or password'; // Set error message\r\n            return; // Don't retry on authentication errors\r\n        }\r\n      } catch (error) {\r\n        console.error(`Fetch error (attempt ${retryCount + 1}):`, error); // Log any fetch errors that occur\r\n        \r\n        retryCount++;\r\n        if (retryCount >= maxRetries) {\r\n          errorMessage = `Connection failed after ${maxRetries} attempts. Please check your internet connection and try again.`;\r\n        } else {\r\n          // Wait before retrying (exponential backoff)\r\n          await new Promise(resolve => setTimeout(resolve, 1000 * retryCount));\r\n          console.log(`Retrying in ${1000 * retryCount}ms...`);\r\n        }\r\n      }\r\n    }\r\n\r\n    console.log('Error message:', errorMessage); // Log the final error message\r\n}\r\n\r\n  function getCsrfToken() {\r\n    return document.cookie.split('; ')\r\n      .find(row => row.startsWith('csrftoken='))\r\n      ?.split('=')[1];\r\n  }\r\n\r\n  function handleForgotPassword() {\r\n    push('/forgot-password');\r\n  }\r\n\r\n  function handleForgotPasswordKeydown(event) {\r\n    if (event.key === 'Enter' || event.key === ' ') {\r\n      event.preventDefault();\r\n      handleForgotPassword();\r\n    }\r\n  }\r\n\r\n  \r\n</script>\r\n\r\n<style>\r\n  .background {\r\n    position: fixed;\r\n    top: 0;\r\n    left: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    z-index: -1;\r\n    background-color: #fffffa;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n  }\r\n\r\n  .content {\r\n    position: relative;\r\n    z-index: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    justify-content: center;\r\n    max-width: 400px; /* Adjust as needed */\r\n    margin: 40px auto\r\n  }\r\n\r\n  div {\r\n    padding: 30px;\r\n  }\r\n\r\n  form {\r\n    width: 90%;\r\n    padding: 20px;\r\n    background-color: #eeebdb;\r\n    border-radius: 10px;\r\n    box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n  }\r\n\r\n  label {\r\n    display: block;\r\n    margin-top: 10px;\r\n    font-weight: bold;\r\n    align-self: baseline;\r\n    color:#14695b;\r\n  }\r\n\r\n  input, button {\r\n    width: -webkit-fill-available;\r\n    display: block;\r\n    padding: 10px;\r\n    margin-top: 10px;\r\n    border-radius: 5px;\r\n    border: 1px solid #ddd;\r\n  }\r\n\r\n  button {\r\n    background-color: #fab45a;\r\n    color: #674a25;\r\n    font-weight: bold;\r\n    border: 1px solid;\r\n    border-color: #674a25;\r\n    height:50px;\r\n  }\r\n\r\n  button:hover {\r\n    background-color: #674a25;\r\n    color:#fab45a;\r\n    border-color:#fab45a;\r\n  }\r\n\r\n  \r\n  .error-message {\r\n    color: red;\r\n    font-weight: bold;\r\n    margin-top: 10px;\r\n    text-align: center;\r\n  }\r\n\r\n  .forgot-password {\r\n    margin-top: 15px;\r\n    text-align: center;\r\n    color: #14695b;\r\n    font-size: 14px;\r\n    cursor: pointer;\r\n    text-decoration: underline;\r\n  }\r\n\r\n  .forgot-password:hover,\r\n  .forgot-password:focus {\r\n    color: #fab45a;\r\n    outline: none;\r\n    text-decoration: none;\r\n    font-weight: bold;\r\n  }\r\n\r\n  .divider {\r\n    display: flex;\r\n    align-items: center;\r\n    margin: 15px 0 10px 0;\r\n    color: #14695b;\r\n    font-size: 14px;\r\n  }\r\n\r\n  .divider::before,\r\n  .divider::after {\r\n    content: '';\r\n    flex: 1;\r\n    height: 1px;\r\n    background: #14695b;\r\n  }\r\n\r\n  .divider::before {\r\n    margin-right: 10px;\r\n  }\r\n\r\n  .divider::after {\r\n    margin-left: 10px;\r\n  }\r\n\r\n  .google-signin-container {\r\n    width: 100%;\r\n    display: flex;\r\n    justify-content: center;\r\n    margin: 10px 0 5px 0;\r\n  }\r\n\r\n  #google-signin-button {\r\n    width: 100%;\r\n    max-width: 100%;\r\n  }\r\n\r\n  /* Override Google's default button styling to reduce margins */\r\n  :global(.google-signin-container iframe) {\r\n    margin: 0 !important;\r\n    padding: 0 !important;\r\n  }\r\n\r\n  :global(.google-signin-container div[data-type=\"standard\"]) {\r\n    margin: 0 !important;\r\n    padding: 0 !important;\r\n  }\r\n\r\n  .loading-text {\r\n    text-align: center;\r\n    color: #14695b;\r\n    font-style: italic;\r\n    margin-top: 10px;\r\n  }\r\n\r\n  @media (max-aspect-ratio: 4/3) {\r\n    .content {\r\n      width: calc(100%-40px);\r\n    }\r\n  }\r\n\r\n  @media (min-aspect-ratio: 4/3) {\r\n    .content {\r\n      width: 80%;\r\n      margin: 40px auto 0;\r\n    }\r\n  }\r\n</style>\r\n\r\n<div class=\"background\"></div>\r\n\r\n<div class=\"content\">\r\n  <form on:submit={handleSubmit}>\r\n    <img src=\"/static/images/Tutory Logo Black 1.png\" alt=\"TUTORY Logo\" class=\"logo\" style=\"max-width: 200px;\">\r\n    \r\n    <!-- Google Sign-In Section - COMMENTED OUT -->\r\n    <!--\r\n    <div class=\"google-signin-container\">\r\n      <div id=\"google-signin-button\"></div>\r\n    </div>\r\n    \r\n    {#if isGoogleLoading}\r\n      <div class=\"loading-text\">Prijungiama per Google...</div>\r\n    {/if}\r\n    \r\n    <div class=\"divider\">arba</div>\r\n    -->\r\n    \r\n    <!-- Traditional Login Form -->\r\n    <label for=\"username\">Vartotojo vardas</label>\r\n    <input id=\"username\" name=\"username\" autocomplete=\"username\" type=\"text\" bind:value={formData.username} placeholder=\"Username\">\r\n    <label for=\"password\">Slaptažodis</label>\r\n    <input id=\"password\" name=\"password\" autocomplete=\"current-password\" type=\"password\" bind:value={formData.password} placeholder=\"Password\">\r\n    <button type=\"submit\">Prisijungti</button>\r\n    {#if errorMessage}\r\n      <div class=\"error-message\">{errorMessage}</div>\r\n    {/if}\r\n  </form>\r\n  \r\n  <div \r\n    class=\"forgot-password\" \r\n    on:click={handleForgotPassword}\r\n    on:keydown={handleForgotPasswordKeydown}\r\n    tabindex=\"0\"\r\n    role=\"button\"\r\n  >\r\n    Pamiršau slaptažodį\r\n  </div>\r\n</div>\r\n","<script>\r\n  import { push } from 'svelte-spa-router'; // Import the push function\r\n\r\n  export let icon;\r\n  export let label;\r\n  export let link = '#'; // This will be the route for navigation\r\n  export let cl = '';\r\n\r\n  // Function to handle navigation using svelte-spa-router\r\n  function navigate(event) {\r\n      event.preventDefault(); // Prevent the default href behavior\r\n      push(link); // Use svelte-spa-router's push function to navigate\r\n  }\r\n</script>\r\n\r\n<a href={link} class={cl} on:click={navigate}> <!-- Keep href for a11y but use push for SPA routing -->\r\n  {#if icon && icon.startsWith('fa-')}\r\n    <i class={\"icon \" + icon}></i>\r\n  {:else if icon}\r\n    <img src={icon} alt=\"\" class=\"icon\" />\r\n  {/if}\r\n  <span>{label}</span>\r\n</a>\r\n\r\n  \r\n  <style>\r\n    a {\r\n      box-sizing: border-box;\r\n      display: flex;\r\n      flex-direction: row;\r\n      align-items: center;\r\n      padding: 15px 20px;\r\n      width: 100%;\r\n      min-height: 60px;\r\n      position: relative; /* For absolute positioning of text */\r\n      \r\n      /* Keep the same color scheme */\r\n      background: #fab45a;\r\n      \r\n      /* Remove black border for modern look */\r\n      border: none;\r\n      \r\n      /* Modern subtle shadow */\r\n      box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.1);\r\n      \r\n      border-radius: 8px;\r\n      cursor: pointer;\r\n      text-decoration: none;\r\n      \r\n      /* Smooth transitions */\r\n      transition: all 0.3s ease;\r\n      \r\n      /* Modern button styling */\r\n      outline: none;\r\n      flex: none;\r\n      order: 0;\r\n      align-self: stretch;\r\n      flex-grow: 0;\r\n    }\r\n    \r\n    a:hover {\r\n      background-color: #927043;\r\n      transform: translateY(-2px);\r\n      box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.15);\r\n    }\r\n    \r\n    a:focus {\r\n      outline: 2px solid #fab45a;\r\n      outline-offset: 2px;\r\n    }\r\n  \r\n    .icon {\r\n      width: 24px; /* Icon size */\r\n      height: 24px;\r\n      font-size: 1.5rem; /* Smaller, more modern icon size */\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      color: #333; /* Darker color for better contrast */\r\n      position: absolute; /* Position absolutely */\r\n      left: 20px; /* Left padding distance */\r\n      flex-shrink: 0;\r\n    }\r\n  \r\n    span {\r\n      font-size: 1rem;\r\n      font-weight: 600; /* Slightly less bold for modern look */\r\n      color: #333;\r\n      text-align: center;\r\n      width: 100%; /* Take full width */\r\n      position: absolute; /* Position absolutely for perfect centering */\r\n      left: 0;\r\n      right: 0;\r\n    }\r\n  </style>\r\n  ","import { getApiBase } from './apiBase.js';\r\n\r\nconst API_ROOT = `${getApiBase()}/studentplayground/api/agreements`;\r\n\r\nexport class AgreementApiError extends Error {\r\n  constructor(message, status = 0, code = '', retryAllowed = false) {\r\n    super(message);\r\n    this.name = 'AgreementApiError';\r\n    this.status = status;\r\n    this.code = code;\r\n    this.retryAllowed = retryAllowed === true;\r\n  }\r\n}\r\n\r\nfunction authHeaders(extra = {}) {\r\n  const token = localStorage.getItem('jwtToken');\r\n  if (!token) throw new AgreementApiError('Authentication required.', 401, 'unauthenticated');\r\n  return { Authorization: `Bearer ${token}`, ...extra };\r\n}\r\n\r\nasync function parseError(response) {\r\n  let data = {};\r\n  try { data = await response.json(); } catch (_) { /* intentionally empty */ }\r\n  const code = data.code || data.error_code || '';\r\n  const message = typeof data.detail === 'string' ? data.detail : 'Agreement request failed.';\r\n  return new AgreementApiError(message, response.status, code, data.retry_allowed);\r\n}\r\n\r\nasync function request(path, options = {}) {\r\n  const response = await fetch(`${API_ROOT}${path}`, {\r\n    ...options,\r\n    cache: 'no-store',\r\n    credentials: 'same-origin',\r\n    referrerPolicy: 'no-referrer',\r\n    headers: authHeaders(options.headers || {})\r\n  });\r\n  if (!response.ok) throw await parseError(response);\r\n  if (response.status === 204) return null;\r\n  return response.json();\r\n}\r\n\r\nexport function isHiddenAgreementResponse(error) {\r\n  return error instanceof AgreementApiError && [401, 403, 404].includes(error.status);\r\n}\r\n\r\nexport async function getCurrentRequirements() {\r\n  const data = await request('/requirements/current/');\r\n  if (data && data.enabled === false) return [];\r\n  const requirements = Array.isArray(data) ? data : (data?.requirements || data?.results || []);\r\n  return [\r\n    ...requirements.filter(item => item.status !== 'completed_stored'),\r\n    ...requirements.filter(item => item.status === 'completed_stored')\r\n  ];\r\n}\r\n\r\nexport function getSigningProfile(signal) {\r\n  return request('/signing-profile/', { signal });\r\n}\r\n\r\nexport function initiateSigning(publicId, identity, idempotencyKey) {\r\n  return request(`/requirements/${encodeURIComponent(publicId)}/signings/`, {\r\n    method: 'POST',\r\n    headers: { 'Content-Type': 'application/json', 'Idempotency-Key': idempotencyKey },\r\n    body: JSON.stringify({ ...identity, idempotency_key: idempotencyKey })\r\n  });\r\n}\r\n\r\nexport function resumeSigning(publicId, launchMode = 'iframe') {\r\n  return request(`/requirements/${encodeURIComponent(publicId)}/signings/resume/`, {\r\n    method: 'POST',\r\n    headers: { 'Content-Type': 'application/json' },\r\n    body: JSON.stringify({ launch_mode: launchMode })\r\n  });\r\n}\r\n\r\nexport function restartLostSigning(publicId) {\r\n  return request(`/requirements/${encodeURIComponent(publicId)}/signings/restart-local/`, {\r\n    method: 'POST', headers: { 'Content-Type': 'application/json' }, body: '{}'\r\n  });\r\n}\r\n\r\nexport function restartFailedSigning(publicId, transactionId) {\r\n  return request(`/requirements/${encodeURIComponent(publicId)}/signings/restart/`, {\r\n    method: 'POST', headers: { 'Content-Type': 'application/json' },\r\n    body: JSON.stringify({ confirm_restart: true, transaction_id: transactionId })\r\n  });\r\n}\r\n\r\nexport function restartPendingSigning(publicId, transactionId) {\r\n  return request(`/requirements/${encodeURIComponent(publicId)}/signings/restart-pending/`, {\r\n    method: 'POST', headers: { 'Content-Type': 'application/json' },\r\n    body: JSON.stringify({ confirm_restart: true, transaction_id: transactionId })\r\n  });\r\n}\r\nexport const pendingRestartConfirmation = 'Ankstesnis pasirašymo bandymas bus sustabdytas. Galėsite iš naujo įvesti pasirašančio tėvo ar globėjo duomenis. Bandymo istorija bus išsaugota. Pradėti iš naujo?';\r\nexport const pendingRestartUnconfirmed = 'Ankstesnio bandymo sustabdymas nepatvirtintas. Naujas pasirašymas nepradėtas. Atnaujinkite būseną arba kreipkitės į administratorių.';\r\n\r\nexport async function prepareGatewayLaunch(launchUrl) {\r\n  const response = await fetch(launchUrl, {\r\n    method: 'POST',\r\n    headers: authHeaders(),\r\n    cache: 'no-store',\r\n    credentials: 'same-origin',\r\n    referrerPolicy: 'no-referrer'\r\n  });\r\n  if (!response.ok) throw await parseError(response);\r\n  if (response.status !== 204) throw new AgreementApiError('Unexpected Gateway launch response.', response.status, 'invalid_launch_bootstrap');\r\n}\r\n\r\nexport function reconcileRequirement(publicId, retryFinalization = false) {\r\n  return request(`/requirements/${encodeURIComponent(publicId)}/reconcile/`, {\r\n    method: 'POST',\r\n    headers: { 'Content-Type': 'application/json' },\r\n    body: JSON.stringify({ retry_finalization: retryFinalization === true })\r\n  });\r\n}\r\n\r\nexport async function openAgreementFile(publicId, kind = 'source') {\r\n  const suffix = kind === 'artifact' ? 'artifact' : 'source';\r\n  const response = await fetch(`${API_ROOT}/requirements/${encodeURIComponent(publicId)}/${suffix}/`, {\r\n    headers: authHeaders(),\r\n    cache: 'no-store',\r\n    credentials: 'same-origin',\r\n    referrerPolicy: 'no-referrer'\r\n  });\r\n  if (!response.ok) throw await parseError(response);\r\n  const blob = await response.blob();\r\n  const objectUrl = URL.createObjectURL(blob);\r\n  // noopener returns null even when the tab opens; it cannot detect blocking.\r\n  window.open(objectUrl, '_blank', 'noopener,noreferrer');\r\n  window.setTimeout(() => URL.revokeObjectURL(objectUrl), 60000);\r\n}\r\n\r\nexport function newIdempotencyKey() {\r\n  if (globalThis.crypto?.randomUUID) return globalThis.crypto.randomUUID();\r\n  const bytes = new Uint8Array(16);\r\n  globalThis.crypto.getRandomValues(bytes);\r\n  bytes[6] = (bytes[6] & 0x0f) | 0x40;\r\n  bytes[8] = (bytes[8] & 0x3f) | 0x80;\r\n  const hex = Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('');\r\n  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\r\n}\r\n","<script>\r\n  import { createEventDispatcher, onDestroy, tick } from 'svelte';\r\n  import { initiateSigning, newIdempotencyKey, getSigningProfile } from './agreementApi.js';\r\n\r\n  export let requirement = null;\r\n  export let open = false;\r\n  export let returnFocus = null;\r\n  const dispatch = createEventDispatcher();\r\n  let dialog;\r\n  let summary;\r\n  let firstInput;\r\n  let submitting = false;\r\n  let fields = emptyFields();\r\n  let errors = {};\r\n  let submitError = '';\r\n  let idempotencyKey = '';\r\n  let wasOpen = false;\r\n  let profileRequest;\r\n  let editedFields = new Set();\r\n\r\n  function emptyFields() { return { legal_name: '', legal_surname: '', country: 'LT', email: '', personal_code: '' }; }\r\n  function clearSensitiveState() {\r\n    profileRequest?.abort(); profileRequest = null; editedFields = new Set();\r\n    fields = emptyFields(); errors = {}; submitError = ''; idempotencyKey = '';\r\n  }\r\n\r\n  $: if (open && !wasOpen) { wasOpen = true; openDialog(); }\r\n  $: if (!open && wasOpen) { wasOpen = false; closeNativeDialog(); }\r\n\r\n  async function openDialog() {\r\n    await tick();\r\n    if (dialog && !dialog.open) dialog.showModal();\r\n    await tick();\r\n    firstInput?.focus();\r\n    if (!open || !wasOpen) return;\r\n    const controller = new AbortController();\r\n    profileRequest = controller;\r\n    try {\r\n      const profile = await getSigningProfile(controller.signal);\r\n      if (controller.signal.aborted || !open || submitting) return;\r\n      const defaults = { legal_name: profile?.first_name, legal_surname: profile?.last_name, email: profile?.email };\r\n      for (const [key, value] of Object.entries(defaults)) {\r\n        if (!editedFields.has(key) && typeof value === 'string') fields[key] = value;\r\n      }\r\n      fields = fields;\r\n    } catch (_) { /* Profile suggestions are optional; manual entry still works. */ }\r\n  }\r\n\r\n  function closeNativeDialog() {\r\n    if (dialog?.open) dialog.close();\r\n    clearSensitiveState();\r\n    tick().then(() => returnFocus?.focus());\r\n  }\r\n\r\n  function cancel() {\r\n    if (submitting) return;\r\n    clearSensitiveState();\r\n    dispatch('close');\r\n    tick().then(() => returnFocus?.focus());\r\n  }\r\n\r\n  function validate() {\r\n    const next = {};\r\n    for (const [key, value] of Object.entries(fields)) if (!String(value).trim()) next[key] = 'Privalomas laukas.';\r\n    if (fields.email && !/^\\S+@\\S+\\.\\S+$/.test(fields.email.trim())) next.email = 'Patikrinkite el. pašto adresą.';\r\n    errors = next;\r\n    return Object.keys(next).length === 0;\r\n  }\r\n\r\n  async function submit() {\r\n    if (submitting) return;\r\n    submitError = '';\r\n    if (!validate()) { await tick(); summary?.focus(); return; }\r\n    submitting = true;\r\n    if (!idempotencyKey) idempotencyKey = newIdempotencyKey();\r\n    try {\r\n      const result = await initiateSigning(requirement.public_id || requirement.id, {\r\n        legal_name: fields.legal_name.trim(), legal_surname: fields.legal_surname.trim(),\r\n        country: fields.country.trim().toUpperCase(), email: fields.email.trim(), personal_code: fields.personal_code\r\n      }, idempotencyKey);\r\n      const mode = result?.mode;\r\n      if (['provider_failed', 'declined', 'expired'].includes(result?.status)) {\r\n        throw { status: 400, code: 'signing_start_failed', retryAllowed: false };\r\n      }\r\n      const redirectUrl = result?.redirect_url || result?.redirect_uri;\r\n      if (mode === 'gateway_iframe') {\r\n        if (typeof result?.launch_url !== 'string' || !result.launch_url) throw new Error('invalid_gateway_iframe');\r\n        clearSensitiveState();\r\n        dispatch('submitted', { mode, result });\r\n        dispatch('close');\r\n        return;\r\n      }\r\n      if (mode === 'redirect') {\r\n        let parsed;\r\n        if (typeof redirectUrl !== 'string' || !redirectUrl.trim()) throw new Error('invalid_redirect');\r\n        try { parsed = new URL(redirectUrl, window.location.origin); } catch (_) { throw new Error('invalid_redirect'); }\r\n        const isSecureProviderRedirect = parsed.protocol === 'https:';\r\n        const isSameOriginLocalRedirect = parsed.origin === window.location.origin\r\n          && (parsed.protocol === 'http:' || parsed.protocol === 'https:')\r\n          && parsed.pathname === '/studentplayground/api/agreements/mock/sign/';\r\n        if (!isSecureProviderRedirect && !isSameOriginLocalRedirect) throw new Error('invalid_redirect');\r\n        clearSensitiveState();\r\n        dispatch('submitted', { mode, result });\r\n        window.location.assign(parsed.href);\r\n        return;\r\n      }\r\n      if (mode === 'email_invitation' || mode === 'invitation_sent' || result?.status === 'invitation_sent') {\r\n        clearSensitiveState(); dispatch('submitted', { mode: 'invitation_sent', result }); dispatch('close'); return;\r\n      }\r\n      clearSensitiveState(); dispatch('submitted', { mode: 'reconcile', result }); dispatch('close');\r\n    } catch (error) {\r\n      if (error?.retryAllowed === true) idempotencyKey = '';\r\n      if (error?.code === 'signing_access_denied') submitError = 'Dokobit prieigos raktas atmestas. Tai serverio konfigūracijos problema, ne pasirašančio asmens duomenys.';\r\n      else if (error?.code === 'signing_outcome_unknown') submitError = 'Nepavyko patvirtinti, ar pasirašymas pradėtas. Patikrinkite būseną prieš pradėdami naują bandymą.';\r\n      else if (error?.code === 'signing_start_failed') submitError = 'Dokobit pasirašymo pradėti nepavyko. Bandykite vėliau arba kreipkitės į administratorių.';\r\n      else if (error?.message === 'invalid_redirect') submitError = 'Gautas nesaugus pasirašymo adresas. Bandykite atnaujinti būseną.';\r\n      else if (!error?.status || error.status >= 500 || error.status === 429) submitError = 'Nepavyko patvirtinti, ar pasirašymas pradėtas. Patikrinkite būseną ir bandykite dar kartą.';\r\n      else submitError = 'Pasirašymo pradėti nepavyko. Patikrinkite duomenis.';\r\n      fields.personal_code = '';\r\n      fields = fields;\r\n      await tick(); summary?.focus();\r\n    } finally { submitting = false; }\r\n  }\r\n\r\n  function trapFocus(event) {\r\n    if (event.key === 'Escape') { event.preventDefault(); cancel(); return; }\r\n    if (event.key !== 'Tab') return;\r\n    const focusable = dialog.querySelectorAll('button:not([disabled]),input:not([disabled]),a[href]');\r\n    if (!focusable.length) return;\r\n    const first = focusable[0], last = focusable[focusable.length - 1];\r\n    if (event.shiftKey && document.activeElement === first) { event.preventDefault(); last.focus(); }\r\n    else if (!event.shiftKey && document.activeElement === last) { event.preventDefault(); first.focus(); }\r\n  }\r\n\r\n  onDestroy(clearSensitiveState);\r\n</script>\r\n\r\n<dialog bind:this={dialog} class=\"signing-dialog\" on:cancel|preventDefault={cancel} on:keydown={trapFocus} on:close={() => open && cancel()}>\r\n  <form method=\"dialog\" on:submit|preventDefault={submit} autocomplete=\"off\">\r\n    {#if requirement?.family}<p>Šeimos sutartis: {requirement.family.name}. Pakanka vieno parašo visai šeimai.<br>{requirement.covered_students?.map(student => `${student.first_name} ${student.last_name}`).join(', ') || ''}</p>{/if}\r\n    <button type=\"button\" class=\"dialog-close\" aria-label=\"Uždaryti pasirašymo langą\" disabled={submitting} on:click={cancel}>×</button>\r\n    <h2>Pasirašyti sutartį</h2>\r\n    <p><strong>{requirement?.title || requirement?.version_title || 'Paslaugų teikimo sutartis'}</strong>{requirement?.version_number ? ` · versija ${requirement.version_number}` : ''}</p>\r\n    <p>Dokobit patvirtins pasirašančio asmens tapatybę. Įveskite savo – paskyrą valdančio tėvo, globėjo ar mokinio – teisinius duomenis.</p>\r\n    {#if submitError || Object.keys(errors).length}\r\n      <div class=\"error-summary\" role=\"alert\" tabindex=\"-1\" bind:this={summary}>{submitError || 'Patikrinkite pažymėtus laukus.'}</div>\r\n    {/if}\r\n    <label for=\"agreement-name\">Vardas</label><input bind:this={firstInput} id=\"agreement-name\" bind:value={fields.legal_name} on:input={() => editedFields.add('legal_name')} disabled={submitting} aria-invalid={!!errors.legal_name} aria-describedby={errors.legal_name ? 'agreement-name-error' : undefined} autocomplete=\"off\">{#if errors.legal_name}<small id=\"agreement-name-error\">{errors.legal_name}</small>{/if}\r\n    <label for=\"agreement-surname\">Pavardė</label><input id=\"agreement-surname\" bind:value={fields.legal_surname} on:input={() => editedFields.add('legal_surname')} disabled={submitting} aria-invalid={!!errors.legal_surname} autocomplete=\"off\">{#if errors.legal_surname}<small>{errors.legal_surname}</small>{/if}\r\n    <label for=\"agreement-country\">Šalis</label><input id=\"agreement-country\" bind:value={fields.country} maxlength=\"2\" disabled={submitting} aria-invalid={!!errors.country} autocomplete=\"off\">{#if errors.country}<small>{errors.country}</small>{/if}\r\n    <label for=\"agreement-email\">El. paštas</label><input id=\"agreement-email\" type=\"email\" bind:value={fields.email} on:input={() => editedFields.add('email')} disabled={submitting} aria-invalid={!!errors.email} autocomplete=\"off\">{#if errors.email}<small>{errors.email}</small>{/if}\r\n    <label for=\"agreement-code\">Asmens kodas</label><input id=\"agreement-code\" type=\"text\" bind:value={fields.personal_code} disabled={submitting} aria-invalid={!!errors.personal_code} autocomplete=\"off\" autocapitalize=\"none\" spellcheck=\"false\">{#if errors.personal_code}<small>{errors.personal_code}</small>{/if}\r\n    <p class=\"privacy\">Asmens kodas perduodamas Dokobit tapatybei patvirtinti. Tutory jo neišsaugo.</p>\r\n    <div class=\"dialog-actions\"><button type=\"button\" class=\"secondary\" disabled={submitting} on:click={cancel}>Atšaukti</button><button type=\"submit\" class=\"primary\" disabled={submitting}>{submitting ? 'Ruošiama…' : 'Tęsti į Dokobit'}</button></div>\r\n  </form>\r\n</dialog>\r\n\r\n<style>\r\n  dialog{border:0;border-radius:8px;padding:0;max-width:520px;width:calc(100% - 32px);color:#333;box-shadow:0 16px 40px rgba(0,0,0,.25)}dialog::backdrop{background:rgba(0,0,0,.48)}form{position:relative;padding:22px;display:flex;flex-direction:column;gap:7px}.dialog-close{position:absolute;top:10px;right:10px;width:36px;height:36px;padding:0;border:0;border-radius:50%;background:transparent;color:#777;font-size:26px;font-weight:400;line-height:1;cursor:pointer}.dialog-close:hover{background:#eee;color:#555}.dialog-close:disabled{cursor:not-allowed;opacity:.5}h2{margin:0 40px 4px 0}p{margin:4px 0 10px;line-height:1.45}label{font-weight:600;margin-top:6px}input{min-height:44px;box-sizing:border-box;border:1px solid #bbb;border-radius:8px;background:#eeebdb;padding:10px;font-size:16px}input:focus,button:focus{outline:2px solid #14695b;outline-offset:2px}input[aria-invalid=\"true\"]{border-color:#b91c1c}small,.error-summary{color:#b91c1c}.error-summary{background:#fee2e2;padding:10px;border-radius:8px}.privacy{font-size:14px;color:#666}.dialog-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:10px}.dialog-actions button{min-height:44px;padding:9px 16px;border-radius:8px;font-weight:600}.primary{background:#fab45a;border:1px solid #333}.secondary{background:white;border:1px solid #14695b;color:#14695b}@media(max-width:767px){dialog{max-height:calc(100vh - 24px);overflow:auto}.dialog-actions{flex-direction:column-reverse}.dialog-actions button{width:100%}.dialog-close{width:36px}}\r\n</style>\r\n","export const GATEWAY_LAUNCH_PATH = '/studentplayground/api/agreements/gateway/launch/';\r\n\r\n// The SPA receives only a same-origin opaque launch capability. Provider\r\n// signing and signer tokens remain entirely behind the backend launch page.\r\nexport function parseGatewayLaunchUrl(value, origin) {\r\n  if (typeof value !== 'string' || !value) return null;\r\n  let parsed;\r\n  try { parsed = new URL(value, origin); } catch (_) { return null; }\r\n  if (parsed.origin !== origin) return null;\r\n  if (parsed.username || parsed.password || parsed.hash) return null;\r\n  if (parsed.pathname !== GATEWAY_LAUNCH_PATH) return null;\r\n  const entries = Array.from(parsed.searchParams.entries());\r\n  if (entries.length !== 1 || entries[0][0] !== 'capability' || !/^[A-Za-z0-9._~:-]+$/.test(entries[0][1])) return null;\r\n  return parsed;\r\n}\r\n\r\nexport function isGatewayLaunchUrl(value, origin) { return !!parseGatewayLaunchUrl(value, origin); }\r\n","<script>\r\n  import { createEventDispatcher, onDestroy, tick } from 'svelte';\r\n  import { prepareGatewayLaunch, reconcileRequirement, resumeSigning } from './agreementApi.js';\r\n  import { parseGatewayLaunchUrl } from './gatewaySigning.js';\r\n\r\n  export let requirement = null;\r\n  export let launchUrl = '';\r\n  export let open = false;\r\n  export let returnFocus = null;\r\n  const dispatch = createEventDispatcher();\r\n  const POLL_INTERVAL_MS = 4000;\r\n  const MAX_POLLS = 30;\r\n  let dialog, closeButton, launchFrame, pollTimer;\r\n  let session = 0;\r\n  let safeUrl = '', error = '', checking = false, pollCount = 0, wasOpen = false, pollingStopped = false;\r\n  const finalizationFailureMessage = 'Para\\u0161as egzistuoja, ta\\u010diau jo kvalifikuotumo patikra nepavyko. Automatiniai bandymai sustabdyti. U\\u017edarykite lang\\u0105 ir per\\u017ei\\u016br\\u0117kite b\\u016bsen\\u0105 profilyje.';\r\n\r\n  $: if (open && !wasOpen) { wasOpen = true; begin(); }\r\n  $: if (!open && wasOpen) { wasOpen = false; teardown(); }\r\n  $: finalizationFailed = requirement?.status === 'finalization_failed';\r\n  function requirementId() { return requirement?.public_id || requirement?.id || ''; }\r\n\r\n  async function begin() {\r\n    const currentSession = ++session;\r\n    if (requirement?.status === 'finalization_failed') {\r\n      pollingStopped = true;\r\n      error = finalizationFailureMessage;\r\n      await tick();\r\n      if (dialog && !dialog.open) dialog.showModal();\r\n      await tick(); closeButton?.focus();\r\n      return;\r\n    }\r\n    const parsed = parseGatewayLaunchUrl(launchUrl, window.location.origin);\r\n    if (!parsed) error = 'Gautas nesaugus Dokobit pasirašymo adresas.';\r\n    await tick();\r\n    if (dialog && !dialog.open) dialog.showModal();\r\n    await tick(); closeButton?.focus();\r\n    if (!parsed) return;\r\n    try {\r\n      // The authenticated POST establishes a short-lived HttpOnly launch\r\n      // cookie. The provider capability never appears in a response body.\r\n      await prepareGatewayLaunch(parsed.href);\r\n      if (!open || !wasOpen || currentSession !== session) return;\r\n      safeUrl = parsed.href;\r\n      window.addEventListener('message', handleLaunchMessage);\r\n      schedulePoll();\r\n    } catch (_) {\r\n      if (currentSession !== session || !open) return;\r\n      safeUrl = '';\r\n      error = 'Dokobit pasirašymo lango paruošti nepavyko. Uždarykite langą ir bandykite dar kartą.';\r\n    }\r\n  }\r\n\r\n  function handleLaunchMessage(event) {\r\n    if (event.origin !== window.location.origin || event.source !== launchFrame?.contentWindow) return;\r\n    const data = event.data;\r\n    if (!data || data.type !== 'dokobit_gateway_result' || !['success', 'error'].includes(data.outcome)) return;\r\n    if (pollingStopped) return;\r\n    if (data.outcome === 'error') {\r\n      stopPolling('Dokobit pranešė apie klaidą. Automatinis tikrinimas sustabdytas. Galite atnaujinti būseną rankiniu būdu.');\r\n      refreshStatus(true);\r\n    } else refreshStatus();\r\n  }\r\n  function stopPolling(message = '') {\r\n    pollingStopped = true;\r\n    clearTimeout(pollTimer);\r\n    if (message) error = message;\r\n  }\r\n  function schedulePoll() {\r\n    clearTimeout(pollTimer);\r\n    if (!open || !safeUrl || pollingStopped) return;\r\n    if (pollCount >= MAX_POLLS) {\r\n      stopPolling('Automatinis tikrinimas baigtas. Galite atnaujinti būseną rankiniu būdu arba tęsti vėliau.');\r\n      return;\r\n    }\r\n    const currentSession = session;\r\n    pollTimer = setTimeout(async () => {\r\n      await refreshStatus();\r\n      if (currentSession === session) schedulePoll();\r\n    }, POLL_INTERVAL_MS);\r\n  }\r\n  async function refreshStatus(manual = false) {\r\n    const id = requirementId();\r\n    if (!id || checking || !open) return;\r\n    if (!manual && (pollingStopped || pollCount >= MAX_POLLS)) return;\r\n    const currentSession = session;\r\n    checking = true; pollCount += 1;\r\n    try {\r\n      const current = await reconcileRequirement(id);\r\n      if (currentSession !== session || !open) return;\r\n      requirement = current;\r\n      dispatch('refresh', { requirement: current });\r\n      if (['assigned', 'cancelled', 'declined', 'expired', 'provider_failed', 'storage_failed', 'withdrawn'].includes(current?.status)) {\r\n        stopPolling('Pasirašymo bandymas baigtas. Uždarykite langą ir peržiūrėkite būseną profilyje.');\r\n      }\r\n      if (current?.status === 'finalization_failed') {\r\n        pollingStopped = true;\r\n        clearTimeout(pollTimer);\r\n        error = finalizationFailureMessage;\r\n      }\r\n      if (current?.status === 'completed_stored') { dispatch('complete', { requirement: current }); close(); }\r\n    } catch (_) {\r\n      if (currentSession !== session || !open) return;\r\n      stopPolling('Būsenos patikrinti nepavyko. Automatinis tikrinimas sustabdytas. Galite atnaujinti būseną rankiniu būdu.');\r\n    } finally {\r\n      if (currentSession === session) {\r\n        checking = false;\r\n        if (!pollingStopped && pollCount >= MAX_POLLS) stopPolling('Automatinis tikrinimas baigtas. Galite atnaujinti būseną rankiniu būdu arba tęsti vėliau.');\r\n      }\r\n    }\r\n  }\r\n  async function continueTopLevel() {\r\n    const id = requirementId();\r\n    if (!id || requirement?.can_resume !== true) return;\r\n    const popup = window.open('about:blank', '_blank', 'popup');\r\n    if (!popup) { error = 'Naršyklė užblokavo naują langą.'; return; }\r\n    popup.opener = null;\r\n    try {\r\n      const result = await resumeSigning(id, 'top_level');\r\n      const parsed = parseGatewayLaunchUrl(result?.launch_url, window.location.origin);\r\n      if (result?.mode !== 'gateway_top_level' || !parsed) throw new Error('invalid_top_level_launch');\r\n      await prepareGatewayLaunch(parsed.href);\r\n      popup.location.replace(parsed.href);\r\n      close();\r\n    } catch (_) {\r\n      popup.close();\r\n      error = 'Tęsti naujame lange nepavyko.';\r\n    }\r\n  }\r\n  function close() { open = false; dispatch('close'); }\r\n  function teardown() {\r\n    session += 1;\r\n    clearTimeout(pollTimer); pollTimer = null; window.removeEventListener('message', handleLaunchMessage); safeUrl = ''; launchUrl = ''; error = ''; checking = false; pollCount = 0; pollingStopped = false;\r\n    if (dialog?.open) dialog.close();\r\n    tick().then(() => returnFocus?.focus());\r\n  }\r\n  function trapFocus(event) {\r\n    if (event.key === 'Escape') { event.preventDefault(); close(); return; }\r\n    if (event.key !== 'Tab') return;\r\n    const focusable = dialog.querySelectorAll('button:not([disabled]),iframe');\r\n    if (!focusable.length) return;\r\n    const first = focusable[0], last = focusable[focusable.length - 1];\r\n    if (event.shiftKey && document.activeElement === first) { event.preventDefault(); last.focus(); }\r\n    else if (!event.shiftKey && document.activeElement === last) { event.preventDefault(); first.focus(); }\r\n  }\r\n  onDestroy(() => {\r\n    teardown();\r\n  });\r\n</script>\r\n\r\n<dialog bind:this={dialog} class=\"gateway-dialog\" aria-labelledby=\"gateway-title\" on:cancel|preventDefault={close} on:keydown={trapFocus}>\r\n  <section class=\"gateway-shell\">\r\n    <header><div><h2 id=\"gateway-title\">Pasirašyti Dokobit</h2><p>{requirement?.title || requirement?.version_title || 'Paslaugų teikimo sutartis'}</p></div><button bind:this={closeButton} type=\"button\" class=\"close\" aria-label=\"Uždaryti pasirašymo langą\" on:click={close}>×</button></header>\r\n    <p class=\"guidance\">{finalizationFailed ? finalizationFailureMessage : 'Peržiūrėkite dokumentą ir atlikite Dokobit rodomus veiksmus. Šį langą galite uždaryti ir tęsti vėliau.'}</p>\r\n    {#if error}<div class=\"error\" role=\"alert\">{error}</div>{/if}\r\n    {#if safeUrl}<iframe bind:this={launchFrame} title=\"Dokobit dokumento pasirašymas\" src={safeUrl} referrerpolicy=\"no-referrer\" allow=\"clipboard-read; clipboard-write\"></iframe>{/if}\r\n    <footer>\r\n      <span aria-live=\"polite\">{checking ? 'Tikrinama pasirašymo būsena…' : ((finalizationFailed || pollingStopped) ? 'Automatinis tikrinimas sustabdytas.' : (safeUrl ? 'Būsena tikrinama automatiškai.' : 'Ruošiamas pasirašymo langas…'))}</span>\r\n      {#if !finalizationFailed && requirement?.can_resume === true}<button type=\"button\" on:click={continueTopLevel}>Tęsti naujame lange</button>{/if}\r\n      {#if !finalizationFailed && pollingStopped}<button type=\"button\" class=\"refresh\" disabled={checking || !safeUrl} on:click={() => refreshStatus(true)}>Atnaujinti būseną</button>{/if}\r\n      <button type=\"button\" on:click={close}>Uždaryti</button>\r\n    </footer>\r\n  </section>\r\n</dialog>\r\n\r\n<style>\r\n  dialog{border:0;border-radius:10px;padding:0;width:min(960px,calc(100% - 24px));height:min(860px,calc(100dvh - 24px));max-width:none;max-height:none;color:#333;box-shadow:0 18px 48px rgba(0,0,0,.3);overflow:hidden}dialog::backdrop{background:rgba(0,0,0,.55)}.gateway-shell{box-sizing:border-box;height:100%;min-height:0;display:flex;flex-direction:column;background:#fff}header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:16px 18px 10px;border-bottom:1px solid #e5e7eb}h2{margin:0;color:#14695b;font-size:22px}header p{margin:4px 0 0;line-height:1.4}.close{flex:0 0 44px;width:44px;height:44px;border:0;border-radius:8px;background:transparent;color:#333;font-size:28px;cursor:pointer}.guidance{margin:0;padding:10px 18px;background:#fef3c7;color:#854d0e;line-height:1.4}.error{margin:12px 18px 0;padding:10px;border-radius:8px;background:#fee2e2;color:#b91c1c}iframe{display:block;box-sizing:border-box;min-height:320px;width:100%;height:100%;flex:1 1 auto;border:0;background:#f8fafc}footer{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap;padding:10px 18px;border-top:1px solid #e5e7eb}footer span{margin-right:auto;color:#555}footer button{min-height:44px;padding:8px 14px;border:1px solid #14695b;border-radius:8px;background:white;color:#14695b;font-weight:600}.refresh{background:#fab45a;color:#111;border-color:#333}button:focus,iframe:focus{outline:2px solid #14695b;outline-offset:2px}button:disabled{opacity:.6}@media(max-width:600px){dialog{width:100%;height:100dvh;border-radius:0}.guidance{font-size:14px}footer{align-items:stretch}footer span{width:100%;margin:0}footer button{flex:1 1 140px}header{padding:12px}.guidance{padding:9px 12px}}\r\n</style>\r\n","// Only opaque IDs, a content digest and version metadata may persist here.\r\n// Message bodies/parameters stay in the authenticated server draft, never here.\r\nconst prefix = 'tutory.inbox.requests.v1:';\r\nconst problem = code => Object.assign(new Error('Inbox recovery unavailable'), { code });\r\n\r\nfunction ownerPrefix(userId) {\r\n  if (!Number.isSafeInteger(userId) || userId < 1) throw problem('recovery_storage_unavailable');\r\n  return `${prefix}${userId}:`;\r\n}\r\n\r\nfunction canonical(value) {\r\n  if (Array.isArray(value)) return value.map(canonical);\r\n  if (value && typeof value === 'object') return Object.fromEntries(Object.keys(value).sort().map(key => [key, canonical(value[key])]));\r\n  return value;\r\n}\r\n\r\nexport async function requestDigest(thread, endpoint, payload) {\r\n  const bytes = new TextEncoder().encode(JSON.stringify(canonical({ thread, endpoint, payload })));\r\n  return Array.from(new Uint8Array(await crypto.subtle.digest('SHA-256', bytes)), byte => byte.toString(16).padStart(2, '0')).join('');\r\n}\r\n\r\nexport function readRequests(userId, thread) {\r\n  try {\r\n    const start = ownerPrefix(userId), rows = [];\r\n    for (let index = 0; index < localStorage.length; index++) {\r\n      const key = localStorage.key(index);\r\n      if (!key?.startsWith(start)) continue;\r\n      const row = JSON.parse(localStorage.getItem(key));\r\n      if (!row || typeof row.thread !== 'string' || typeof row.key !== 'string' || key !== start + row.key\r\n          || !/^[a-f0-9]{64}$/.test(row.digest) || !['messages', 'notes', 'templates'].includes(row.endpoint)\r\n          || !Number.isSafeInteger(row.draftVersion) || row.draftVersion < 0\r\n          || !['pending', 'rejected'].includes(row.state) || !Number.isFinite(row.createdAt)) {\r\n        throw problem('recovery_storage_unavailable');\r\n      }\r\n      if (!thread || row.thread === thread) rows.push(row);\r\n    }\r\n    return rows.sort((left, right) => left.createdAt - right.createdAt);\r\n  } catch (error) { throw problem(typeof error.code === 'string' ? error.code : 'recovery_storage_unavailable'); }\r\n}\r\n\r\nexport function rememberRequest(userId, row) {\r\n  try {\r\n    const key = ownerPrefix(userId) + row.key;\r\n    if (localStorage.getItem(key) === null && readRequests(userId).length >= 100) throw problem('recovery_storage_full');\r\n    const safe = { key: row.key, thread: row.thread, digest: row.digest, endpoint: row.endpoint,\r\n      draftVersion: row.draftVersion, state: row.state, createdAt: row.createdAt };\r\n    const encoded = JSON.stringify(safe);\r\n    localStorage.setItem(key, encoded);\r\n    if (localStorage.getItem(key) !== encoded) throw problem('recovery_storage_unavailable');\r\n    return safe;\r\n  } catch (error) { throw problem(typeof error.code === 'string' ? error.code : 'recovery_storage_unavailable'); }\r\n}\r\n\r\nexport function forgetRequest(userId, key) {\r\n  try { localStorage.removeItem(ownerPrefix(userId) + key); }\r\n  catch { throw problem('recovery_storage_unavailable'); }\r\n}\r\n\r\n// The server owns prepared commands. Local storage is mandatory only when\r\n// creating a NEW intention; it must not prevent recovery of an existing one.\r\nexport function createRecoverySession(userId, onStorageProblem) {\r\n  const memory = new Map(), settled = new Set();\r\n  const warn = error => onStorageProblem(error.code || 'recovery_storage_unavailable');\r\n  return {\r\n    read(thread) {\r\n      let stored = [];\r\n      try { stored = readRequests(userId); } catch (error) { warn(error); }\r\n      const rows = new Map(stored.map(row => [row.key, row]));\r\n      for (const [key, row] of memory) rows.set(key, row);\r\n      return [...rows.values()].filter(row => !settled.has(row.key) && (!thread || row.thread === thread));\r\n    },\r\n    remember(row, { serverOwned = false } = {}) {\r\n      let saved = row;\r\n      try { saved = rememberRequest(userId, row); onStorageProblem(''); }\r\n      catch (error) { warn(error); if (!serverOwned) throw error; }\r\n      memory.set(saved.key, saved);\r\n      return saved;\r\n    },\r\n    track(row) { memory.set(row.key, row); },\r\n    forget(key) {\r\n      memory.delete(key);\r\n      try { forgetRequest(userId, key); settled.delete(key); }\r\n      catch (error) { settled.add(key); warn(error); }\r\n    },\r\n  };\r\n}\r\n\r\nexport function clearInboxRecovery() {\r\n  // Explicit logout must not retain another staff member's recovery metadata.\r\n  for (let index = localStorage.length - 1; index >= 0; index--) {\r\n    const key = localStorage.key(index);\r\n    if (key?.startsWith(prefix)) localStorage.removeItem(key);\r\n  }\r\n}\r\n","<!-- src/App.svelte -->\r\n<script>\r\n  import Logo from './LogoComponent.svelte';\r\n  import IconButton from './ButtonComponent.svelte';\r\n  import { onMount } from 'svelte';\r\n  import { push } from 'svelte-spa-router';\r\n  import { getApiBase } from './apiBase.js';\r\n  import OutstandingAgreementNotice from './OutstandingAgreementNotice.svelte';\r\n  import { clearInboxRecovery } from './inbox/browserRecovery.js';\r\n\r\n  let isUserTeacher = null;\r\n  let errorMessage = '';\r\n  let isUserSuper = null;\r\n  let isLoading = true; // Add loading state\r\n  let currentUsername = null;\r\n  let isHerkulezas = false;\r\n\r\n  function base64UrlDecode(input) {\r\n    // JWT uses base64url: replace URL-safe chars and pad.\r\n    const normalized = String(input).replace(/-/g, '+').replace(/_/g, '/');\r\n    const padded = normalized + '='.repeat((4 - (normalized.length % 4)) % 4);\r\n    return atob(padded);\r\n  }\r\n\r\n  function getUsernameFromJwt(token) {\r\n    try {\r\n      const parts = String(token || '').split('.');\r\n      if (parts.length < 2) return null;\r\n      const payloadJson = base64UrlDecode(parts[1]);\r\n      const payload = JSON.parse(payloadJson);\r\n      return (\r\n        payload?.username ||\r\n        payload?.user_name ||\r\n        payload?.preferred_username ||\r\n        payload?.user?.username ||\r\n        null\r\n      );\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  function logout() {\r\n    // Clear JWT token from localStorage or sessionStorage\r\n    localStorage.removeItem('jwtToken'); // assuming your JWT is stored in localStorage\r\n    // Failed best-effort metadata cleanup must never prevent authentication removal.\r\n    try { clearInboxRecovery(); } catch { /* Server-owned commands remain recoverable after login. */ }\r\n    window.dispatchEvent(new Event('tutory:logout'));\r\n    \r\n    // Optionally clear other user-related data from storage\r\n    // localStorage.removeItem('userInfo');\r\n\r\n    console.log('User logged out');\r\n\r\n    // Redirect the user to the login page\r\n    push('/about'); // Use the appropriate path to your login page\r\n  }\r\n  \r\n  // Create reactive button arrays based on user type\r\n  $: studentButtons = [\r\n    { icon: 'fa-solid fa-user-plus', label: 'REGISTRUOTIS Į PAMOKĄ', link:'/registration-for-class' },\r\n    { icon: 'fa-solid fa-calendar-days', label: 'TVARKARAŠTIS', link:'/schedule' },\r\n    { icon: 'fa-solid fa-file-invoice-dollar', label: 'SĄSKAITOS', link:'/invoice' },\r\n    { icon: 'fa-solid fa-circle-info', label: 'BENDRA INFORMACIJA', link:'/bendra-informacija' },\r\n    { icon: 'fa-solid fa-user-circle', label: 'MANO PROFILIS', link:'/settingsAndTimeslots' }\r\n  ];\r\n\r\n  $: teacherButtons = [\r\n    { icon: 'fa-solid fa-chart-line', label: 'STATISTIKA', link:'/teacher-performance' },\r\n    { icon: 'fa-solid fa-calendar-days', label: 'TVARKARAŠTIS', link:'/schedule' },\r\n    { icon: 'fa-solid fa-file-invoice-dollar', label: 'SĄSKAITOS', link:'/invoice' },\r\n    { icon: 'fa-solid fa-user-circle', label: 'MANO PROFILIS', link:'/settingsAndTimeslots' }\r\n  ];\r\n\r\n  // Super users: keep the \"main 4\" together, and show dashboard buttons\r\n  // as a separate section below them.\r\n  $: superUserMainButtons = [\r\n    { icon: 'fa-solid fa-envelope', label: 'COMMUNICATION & SCHEDULING', link:'/adminSearch' },\r\n    { icon: 'fa-solid fa-users', label: 'USER MANAGEMENT', link:'/admin' },\r\n    { icon: 'fa-solid fa-user-tie', label: 'TEACHER MONITORING', link:'/teacherSurveilance' },\r\n    { icon: 'fa-solid fa-user-circle', label: 'MANO PROFILIS', link:'/settingsAndTimeslots' }\r\n  ];\r\n\r\n  // Dashboard buttons should be visible to all super users.\r\n  $: superUserDashboardButtons = [\r\n    { icon: 'fa-solid fa-user-graduate', label: 'STUDENTS', link:'/admin/students' },\r\n    { icon: 'fa-solid fa-user-tie', label: 'TEACHERS', link:'/admin/teachers' },\r\n    { icon: 'fa-solid fa-toolbox', label: 'ADMIN', link:'/admin/all' },\r\n  ];\r\n\r\n  // Determine which buttons to show based on user type\r\n  $: mainButtons = isUserSuper ? superUserMainButtons : (isUserTeacher ? teacherButtons : studentButtons);\r\n  $: dashboardButtons = isUserSuper ? superUserDashboardButtons : [];\r\n\r\n  // This function fetches the teacher status from the backend API\r\n  async function checkIfUserIsTeacher() {\r\n    try {\r\n        // Retrieve JWT token from localStorage/sessionStorage/cookie (depending on how you store it)\r\n        const token = localStorage.getItem('jwtToken'); \r\n        if (!token) {\r\n            throw new Error('JWT token not found. Please log in.');\r\n        }\r\n\r\n        currentUsername = getUsernameFromJwt(token);\r\n        isHerkulezas = (String(currentUsername || '').toLowerCase() === 'herkulezas');\r\n\r\n        const apiBase = getApiBase();\r\n        const response = await fetch(`${apiBase}/studentplayground/isUserTeacher/`, {\r\n            method: 'GET',\r\n            headers: {\r\n                'Authorization': `Bearer ${token}`,\r\n                'Content-Type': 'application/json'\r\n            }\r\n        });\r\n\r\n        if (!response.ok) {\r\n            // Handle error response from the server\r\n            const errorData = await response.json();\r\n            throw new Error(errorData.error || 'Failed to check teacher status');\r\n        }\r\n\r\n        const data = await response.json();\r\n        isUserTeacher = data.isUserTeacher;\r\n        const response2 = await fetch(`${apiBase}/studentplayground/isSuperUser/`, {\r\n            method: 'GET',\r\n            headers: {\r\n                'Authorization': `Bearer ${token}`,\r\n                'Content-Type': 'application/json'\r\n            }\r\n        });\r\n\r\n        if (!response2.ok) {\r\n            // Handle error response from the server\r\n            const errorData = await response2.json();\r\n            throw new Error(errorData.error || 'Failed to check teacher status');\r\n        }\r\n        \r\n        const data2 = await response2.json();\r\n        isUserSuper = data2.isUserSuper;\r\n    } catch (error) {\r\n        errorMessage = error.message;\r\n    } finally {\r\n        isLoading = false; // Set loading to false when API calls complete\r\n    }\r\n    \r\n  }\r\n\r\n    // Check if user is authenticated\r\n  function checkAuthentication() {\r\n    const token = localStorage.getItem('jwtToken');\r\n    const expiry = localStorage.getItem('jwtExpiry');\r\n    \r\n    // Check if token exists and is not expired\r\n    if (!token || !expiry || Date.now() >= parseInt(expiry)) {\r\n      // Store current URL params to preserve redirect intent\r\n      const currentParams = window.location.search;\r\n      push('/about' + currentParams);\r\n      return false;\r\n    }\r\n    \r\n    return true;\r\n  }\r\n\r\n    // Fetch teacher status on component mount\r\n  onMount(async () => {\r\n    // First check if user is authenticated\r\n    if (!checkAuthentication()) {\r\n      return; // Exit early if not authenticated\r\n    }\r\n    \r\n    // Check for redirect parameter first\r\n    const urlParams = new URLSearchParams(window.location.search);\r\n    const redirectTo = urlParams.get('redirect');\r\n    \r\n    if (redirectTo === 'invoice') {\r\n      // Set a flag to indicate user was redirected to invoice page\r\n      sessionStorage.setItem('redirectedToInvoice', 'true');\r\n      push('/invoice');\r\n      return;\r\n    }\r\n    \r\n    await checkIfUserIsTeacher(); // Await this if it's asynchronous\r\n    \r\n    // Update last activity timestamp (non-blocking)\r\n    updateLastActivity();\r\n  \r\n  });\r\n\r\n  // Function to update user's last activity timestamp\r\n  async function updateLastActivity() {\r\n    try {\r\n      const token = localStorage.getItem('jwtToken');\r\n      if (!token) return; // Skip if no token\r\n      \r\n      // Make non-blocking call to update last activity\r\n      const apiBase = getApiBase();\r\n      fetch(`${apiBase}/studentplayground/api/update-last-activity/`, {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        }\r\n      }).then(response => {\r\n        if (response.ok) {\r\n          console.log('Last activity updated successfully');\r\n        }\r\n      }).catch(error => {\r\n        // Silently handle errors to avoid disrupting user experience\r\n        console.log('Last activity update failed (non-critical):', error);\r\n      });\r\n    } catch (error) {\r\n      // Silently handle errors\r\n      console.log('Last activity update error (non-critical):', error);\r\n    }\r\n  }\r\n\r\n</script>\r\n<div class=\"greeting-page\">\r\n  <div class=\"content\">\r\n    <img src=\"/static/images/Tutory Logo Black 1.png\" alt=\"TUTORY Logo\" class=\"logo\">\r\n    {#if !isLoading && isUserSuper === false}\r\n      <OutstandingAgreementNotice />\r\n    {/if}\r\n    <section class=\"button-group\">\r\n      {#if isLoading}\r\n        <!-- Show loading state or nothing while determining user type -->\r\n        <div class=\"loading-placeholder\"></div>\r\n      {:else}\r\n        {#each mainButtons as button}\r\n          <IconButton icon={button.icon} label={button.label} link={button.link}/>\r\n        {/each}\r\n      {/if}\r\n    </section>\r\n  </div>\r\n\r\n  {#if !isLoading && dashboardButtons.length}\r\n    <section class=\"dashboard-buttons\" aria-label=\"Dashboard buttons\">\r\n      {#each dashboardButtons as button}\r\n        <IconButton icon={button.icon} label={button.label} link={button.link}/>\r\n      {/each}\r\n    </section>\r\n  {/if}\r\n\r\n  <!-- Support Buttons -->\r\n  <div class=\"support-buttons\">\r\n    <a href=\"viber://chat?number=%2B37068713647\" class=\"viber-button\" aria-label=\"Chat with us on Viber\">\r\n      <i class=\"fab fa-viber\"></i>\r\n      <span>Susisiekite su mumis per Viber</span>\r\n    </a>\r\n\r\n    <a href=\"https://wa.me/message/LEPGDN5U5TE3B1\" class=\"whatsapp-button\" aria-label=\"Chat with us on WhatsApp\">\r\n      <i class=\"fab fa-whatsapp\"></i>\r\n      <span>Susisiekite su mumis per WhatsApp</span>\r\n    </a>\r\n  </div>\r\n\r\n  <div class=\"logout-container\">\r\n    <span class=\"logout-text\" on:click={logout} on:keydown={(e) => e.key === 'Enter' && logout()} tabindex=\"0\" role=\"button\" aria-label=\"Log out\">Atsijungti</span>\r\n  </div>\r\n</div>\r\n\r\n<style>\r\n  .greeting-page {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    gap: 20px;\r\n    width: 100%;\r\n    max-width: 450px;\r\n    margin: 0 auto;\r\n    padding: 12px 0 28px;\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .dashboard-buttons {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 10px;\r\n    width: 100%;\r\n    align-items: center;\r\n    margin: 0;\r\n  }\r\n\r\n  .support-buttons {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 15px;\r\n    margin: 0;\r\n    width: 100%;\r\n    align-items: center;\r\n  }\r\n\r\n  /* If dashboard buttons are present, avoid \"double gap\" before contact buttons. */\r\n  .dashboard-buttons + .support-buttons {\r\n    margin-top: 0;\r\n  }\r\n\r\n  .viber-button, .whatsapp-button {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: 10px;\r\n    padding: 12px 20px;\r\n    color: white;\r\n    text-decoration: none;\r\n    border-radius: 8px;\r\n    font-size: 16px;\r\n    font-weight: 500;\r\n    transition: background-color 0.3s ease, transform 0.2s ease;\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .viber-button {\r\n    background-color: #7360f2;\r\n  }\r\n\r\n  .viber-button:hover {\r\n    background-color: #5d4fd1;\r\n    transform: translateY(-2px);\r\n  }\r\n\r\n  .viber-button:focus {\r\n    outline: 2px solid #7360f2;\r\n    outline-offset: 2px;\r\n  }\r\n\r\n  .whatsapp-button {\r\n    background-color: #25d366;\r\n  }\r\n\r\n  .whatsapp-button:hover {\r\n    background-color: #22c55e;\r\n    transform: translateY(-2px);\r\n  }\r\n\r\n  .whatsapp-button:focus {\r\n    outline: 2px solid #25d366;\r\n    outline-offset: 2px;\r\n  }\r\n\r\n  .viber-button i, .whatsapp-button i {\r\n    font-size: 20px;\r\n  }\r\n\r\n  .logout-container {\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n    margin: 0;\r\n    width: 100%;\r\n  }\r\n\r\n  .logout-text {\r\n    font-size: 16px;\r\n    color: #666;\r\n    cursor: pointer;\r\n    transition: color 0.3s ease;\r\n    text-decoration: none;\r\n    border: none;\r\n    background: none;\r\n    padding: 12px 20px;\r\n    border-radius: 8px;\r\n    transition: background-color 0.3s ease, color 0.3s ease;\r\n    display: block;\r\n    text-align: center;\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .logout-text:hover {\r\n    color: #14695b;\r\n    background-color: rgba(20, 105, 91, 0.1);\r\n  }\r\n\r\n  .logout-text:focus {\r\n    outline: 2px solid #14695b;\r\n    outline-offset: 2px;\r\n  }\r\n\r\n  .content {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    width: 100%;\r\n    padding: 0;\r\n    gap: 28px;\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .logo {\r\n    display: block;\r\n    width: 250px;\r\n    max-width: 100%;\r\n    height: auto;\r\n  }\r\n\r\n  .button-group {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 10px;\r\n    width: 100%;\r\n  }\r\n\r\n  .loading-placeholder {\r\n    height: 200px; /* Adjust height to match approximate button height */\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    color: #666;\r\n    font-size: 14px;\r\n  }\r\n\r\n  @media (max-width: 480px) {\r\n    .greeting-page {\r\n      gap: 16px;\r\n      padding-top: 4px;\r\n    }\r\n\r\n    .content {\r\n      gap: 20px;\r\n    }\r\n  }\r\n</style>\r\n","<script>\r\n  import { onMount } from 'svelte';\r\n  import { push } from 'svelte-spa-router';\r\n  import SigningIdentityDialog from './SigningIdentityDialog.svelte';\r\n  import GatewaySigningModal from './GatewaySigningModal.svelte';\r\n  import { getCurrentRequirements, openAgreementFile, resumeSigning, restartLostSigning, restartPendingSigning, pendingRestartConfirmation, pendingRestartUnconfirmed } from './agreementApi.js';\r\n\r\n  let requirements = [];\r\n  let visible = false;\r\n  let fileError = '';\r\n  let selected = null;\r\n  let signingTrigger = null;\r\n  let gatewaySession = null;\r\n  let restarting = false;\r\n\r\n  const isOutstanding = item => item.status !== 'withdrawn' && item.status !== 'completed_stored';\r\n  // The server is authoritative: only an exact requirement explicitly marked\r\n  // initiable may expose the identity/signing action here.\r\n  const isInitiable = item => isOutstanding(item) && item.can_initiate === true;\r\n\r\n  async function load() {\r\n    try {\r\n      requirements = (await getCurrentRequirements()).filter(isOutstanding);\r\n      visible = requirements.length > 0;\r\n    } catch (_) {\r\n      // Fail closed if authentication, authorization, feature availability, or\r\n      // transport state changes after a previously successful load.\r\n      requirements = [];\r\n      selected = null;\r\n      fileError = '';\r\n      visible = false;\r\n    }\r\n  }\r\n\r\n  onMount(load);\r\n\r\n  $: initiableRequirement = requirements.find(isInitiable) || null;\r\n  $: resumableRequirement = requirements.find(item => item.can_resume === true) || null;\r\n  $: lostRequirement = requirements.find(item => item.can_restart_local === true) || null;\r\n\r\n  async function preview() {\r\n    fileError = '';\r\n    try { await openAgreementFile(requirements[0].public_id || requirements[0].id, 'source'); }\r\n    catch (_) { fileError = 'Sutarties nepavyko atidaryti.'; }\r\n  }\r\n\r\n  function startSigning(event) {\r\n    if (!initiableRequirement) return;\r\n    signingTrigger = event.currentTarget;\r\n    selected = initiableRequirement;\r\n  }\r\n\r\n  async function resume(event) {\r\n    if (!resumableRequirement) return;\r\n    signingTrigger = event.currentTarget;\r\n    try {\r\n      const result = await resumeSigning(resumableRequirement.public_id || resumableRequirement.id);\r\n      if (result?.mode !== 'gateway_iframe' || typeof result?.launch_url !== 'string') throw new Error('invalid_resume');\r\n      gatewaySession = { requirement: resumableRequirement, launchUrl: result.launch_url, returnFocus: signingTrigger };\r\n    } catch (_) { fileError = 'Pasirašymo tęsti nepavyko. Atnaujinkite būseną Mano profilyje.'; }\r\n  }\r\n\r\n  async function submitted(event) {\r\n    if (event.detail.mode === 'gateway_iframe') {\r\n      gatewaySession = { requirement: selected, launchUrl: event.detail.result.launch_url, returnFocus: signingTrigger };\r\n      selected = null;\r\n      await load();\r\n      return;\r\n    }\r\n    selected = null;\r\n    await load();\r\n  }\r\n\r\n  async function restartLocal() {\r\n    if (!lostRequirement) return;\r\n    try { await restartLostSigning(lostRequirement.public_id || lostRequirement.id); await load(); }\r\n    catch (_) { fileError = 'Vietinės bandomosios būsenos atkurti nepavyko.'; }\r\n  }\r\n\r\n  async function restartPending(event) {\r\n    const item = resumableRequirement;\r\n    if (!item?.can_restart_pending || restarting || !window.confirm(pendingRestartConfirmation)) return;\r\n    restarting = true;\r\n    signingTrigger = event.currentTarget;\r\n    try {\r\n      const current = await restartPendingSigning(item.public_id || item.id, item.pending_restart_transaction_id);\r\n      await load();\r\n      if (current?.status !== 'assigned' || current?.can_initiate !== true) throw new Error('restart_not_ready');\r\n      selected = current;\r\n    } catch (error) {\r\n      await load();\r\n      fileError = error?.code === 'signing_restart_unconfirmed' ? pendingRestartUnconfirmed : 'Naujo pasirašymo pradėti nepavyko. Atnaujinkite būseną Mano profilyje.';\r\n    } finally { restarting = false; }\r\n  }\r\n\r\n  function dismiss() {\r\n    if (restarting) return;\r\n    selected = null;\r\n    visible = false;\r\n  }\r\n</script>\r\n\r\n{#if visible}\r\n  <aside class=\"notice\" role=\"status\" aria-live=\"polite\">\r\n    <button type=\"button\" class=\"close\" aria-label=\"Uždaryti pranešimą šiam apsilankymui\" on:click={dismiss}>×</button>\r\n    <strong>{requirements.length === 1 ? 'Turite nepasirašytą sutartį.' : `Turite nepasirašytų sutarčių: ${requirements.length}.`}</strong>\r\n    <p>Peržiūrėti ir pasirašyti galite Mano profilyje.</p>\r\n    {#if fileError}<p class=\"error\">{fileError}</p>{/if}\r\n    {#if requirements[0]?.family}<p>Šeimos sutartis: {requirements[0].family.name}. Pakanka vieno parašo visai šeimai.</p>{/if}\r\n    <div class=\"actions\">\r\n      {#if lostRequirement}<button type=\"button\" class=\"primary\" on:click={restartLocal}>Leisti naują bandomąjį bandymą</button>{/if}\r\n      {#if resumableRequirement}<button type=\"button\" class=\"primary\" disabled={restarting} on:click={resume}>Tęsti pasirašymą</button>\r\n        {#if resumableRequirement.can_restart_pending === true}<button type=\"button\" disabled={restarting} aria-busy={restarting} on:click={restartPending}>Pradėti iš naujo</button>{/if}\r\n      {:else if initiableRequirement}<button type=\"button\" class=\"primary\" on:click={startSigning}>Pasirašyti Dokobit</button>{/if}\r\n      <button type=\"button\" on:click={preview}>Peržiūrėti</button>\r\n      <button type=\"button\" on:click={() => push('/account')}>Eiti į Mano profilį</button>\r\n    </div>\r\n  </aside>\r\n{/if}\r\n\r\n<SigningIdentityDialog requirement={selected} open={!!selected} returnFocus={signingTrigger} on:close={() => selected = null} on:submitted={submitted}/>\r\n<GatewaySigningModal requirement={gatewaySession?.requirement} launchUrl={gatewaySession?.launchUrl || ''} open={!!gatewaySession} returnFocus={gatewaySession?.returnFocus} on:close={() => gatewaySession = null} on:refresh={load} on:complete={async () => { gatewaySession = null; await load(); }}/>\r\n\r\n<style>\r\n  .notice{position:relative;box-sizing:border-box;width:100%;min-width:0;border:1px solid #f59e0b;background:#fef3c7;color:#854d0e;border-radius:8px;padding:16px 42px 16px 16px;box-shadow:0 .5px 2px rgba(96,97,112,.16)}.notice p{margin:7px 0}.close{position:absolute;right:6px;top:5px;width:36px;height:36px;border:0;background:transparent;color:#854d0e;font-size:24px;cursor:pointer}.actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.actions button{min-height:44px;max-width:100%;border:1px solid #14695b;border-radius:8px;background:white;color:#14695b;padding:8px 12px;font-weight:600;cursor:pointer}.actions .primary{background:#fab45a;border-color:#333;color:#111}.actions button:focus,.close:focus{outline:2px solid #14695b;outline-offset:2px}.error{color:#b91c1c}@media(max-width:480px){.actions{flex-direction:column}.actions button{width:100%}}\r\n</style>\r\n","<script>\r\n    export let value = '';  // This is the bound value\r\n    export let placeholder = ''; // Placeholder text\r\n    export let label = '';\r\n  </script>\r\n  \r\n  <div class=\"text-field\">\r\n    <label for='text-field'>{label}</label>\r\n    <textarea \r\n      bind:value={value}\r\n      placeholder={placeholder}\r\n      rows=\"4\" \r\n    ></textarea>\r\n  </div>\r\n\r\n<style>\r\n    label{\r\n        margin-bottom: 10px;\r\n        margin-top: 20px;\r\n        font-size: 1.17em;\r\n        font-weight: bold;\r\n\r\n    }\r\n    div{\r\n        width:100%;\r\n    }\r\n    textarea {\r\n        background-color:#eeebdb;\r\n        width: 100%;\r\n        height: 100px;\r\n        border: 1px solid #14695b;\r\n        \r\n        /* Box shadow */\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        \r\n        /* Rounded corners */\r\n        border-radius: 8px;\r\n\r\n        /* Adjust the padding for better text visibility */\r\n        padding: 10px;\r\n        \r\n        /* Optional: Set a font for better readability */\r\n        font-family: Arial, sans-serif;\r\n        font-size: 16px;\r\n        resize: vertical; /* Allows the user to resize the textarea vertically */\r\n    }\r\n\r\n</style>\r\n","<script>\r\n    export let label = '';\r\n    export let options = [];\r\n    export let selectedValue = '';\r\n    export let onChange = null;\r\n\r\n    const handleChange = (event) => {\r\n        selectedValue = event.target.value;\r\n        if (onChange && typeof onChange === 'function') {\r\n            onChange(selectedValue);\r\n        }\r\n    };\r\n</script>\r\n\r\n<div class=\"dropdown\">\r\n    <label for=\"dropdown\">{label}</label>\r\n    <select id=\"dropdown\" bind:value={selectedValue} on:change={handleChange}>\r\n        <option disabled value=\"\">Pasirinkite...</option>\r\n        {#each options as [value, text]}\r\n            <option value={value}>{text}</option>\r\n        {/each}\r\n    </select>\r\n</div>\r\n\r\n<style>\r\n    .dropdown {\r\n        display: flex;\r\n        flex-direction: column;\r\n        margin-bottom: 1rem;\r\n        width:100%;\r\n    }\r\n    option {\r\n        color: black; /* Ensure options text is black as well */\r\n    }\r\n    label {\r\n        margin-bottom: 0.5rem;\r\n        font-weight: bold;\r\n        font-size:1.17rem;\r\n    }\r\n\r\n    select {\r\n        padding: 1rem;\r\n        font-size: 1rem;\r\n        border: 1px solid #ccc;\r\n        border-radius: 4px;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        background-color: #eeebdb;\r\n    }\r\n\r\n    select:focus {\r\n        outline: none;\r\n        border-color: #927043;\r\n    }\r\n</style>\r\n","<script>\r\n    export let value = '';\r\n    export let id = '';\r\n    export let onRemove = null;\r\n\r\n    const handleChange = (event) => {\r\n        value = event.target.value;\r\n    };\r\n</script>\r\n\r\n<div class=\"datetime-picker\">\r\n    \r\n    <h3>Pamokos data ir laikas</h3>\r\n    <div class = 'topPart'>\r\n        <input \r\n            type=\"datetime-local\" \r\n            id={id} \r\n            bind:value={value} \r\n            on:input={handleChange} \r\n        />\r\n        <button type=\"button\" class =\"removeButton\" on:click={onRemove}>\r\n            <img src='/static/icons/trintiIcon.png' alt=\"\" class=\"icon\" />\r\n            Trinti\r\n        </button>\r\n    </div>\r\n</div>\r\n\r\n<style>\r\n\r\n    .topPart{\r\n        display:flex;\r\n        justify-content: space-between;\r\n    }\r\n    .datetime-picker {\r\n        width: 100%;\r\n        display: flex;\r\n        margin-bottom: 1rem;\r\n        flex-direction: column;\r\n    }\r\n\r\n    input[type=\"datetime-local\"] {\r\n        background-color: #eeebdb;\r\n        padding: 0.5rem;\r\n        font-size: 1rem;\r\n        border: 1px solid #ccc;\r\n        border-radius: 4px;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        margin-right: 10px;\r\n    }\r\n\r\n    button {\r\n        padding: 0.5rem 1rem;\r\n        font-size: 1rem;\r\n        cursor: pointer;\r\n        background-color: #f0a298;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 4px;\r\n    }\r\n\r\n    button:hover {\r\n        background-color: #927043;\r\n        \r\n    }\r\n    .removeButton{\r\n        /* Button */\r\n        /* Auto layout */\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        height:40px;\r\n        background-color: #fab45a;\r\n        transition: background-color 0.3s ease, color 0.3s ease;\r\n        color:black;\r\n        \r\n    }\r\n    .removeButton:hover{\r\n        background-color: #c98f43;\r\n    \r\n    }\r\n</style>\r\n","<script>\r\n    import { push } from 'svelte-spa-router';\r\n\r\n    // Props\r\n    export let label = \"Mano Profilis\";\r\n    export let backLink = \"/login-greeting\"; // Remove the # since svelte-spa-router doesn't need it\r\n    export let logoSrc = \"/static/images/Tutory Logo Black 1.png\";\r\n    export let backIconSrc = \"/static/icons/backButtonIcon.png\";\r\n\r\n    // Function to handle navigation using svelte-spa-router\r\n    function navigate(event) {\r\n        event.preventDefault(); // Prevent the default href behavior\r\n        event.stopPropagation(); // Stop event bubbling\r\n        console.log('NavbarReusable - Navigate clicked, going to:', backLink);\r\n        \r\n        // Force navigation to work by ensuring it happens after current event loop\r\n        requestAnimationFrame(() => {\r\n            try {\r\n                push(backLink);\r\n                console.log('NavbarReusable - Navigation attempted to:', backLink);\r\n            } catch (error) {\r\n                console.error('NavbarReusable - Navigation error:', error);\r\n                // Fallback navigation method\r\n                window.location.hash = backLink;\r\n            }\r\n        });\r\n    }\r\n</script>\r\n\r\n<div class=\"site-header\">\r\n    <img src=\"{logoSrc}\" alt=\"TUTORY Logo\" class=\"header-logo\" />\r\n\r\n    <div class=\"top-bar\">\r\n        <a href=\"{backLink}\" class=\"exit-button\" on:click={navigate}>\r\n            <img src=\"{backIconSrc}\" alt=\"Exit\" class=\"icon\" />\r\n        </a>\r\n\r\n        <div class=\"label\">{label}</div>\r\n    </div>\r\n</div>\r\n\r\n<style>\r\n    .site-header {\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        width: 100%;\r\n        padding: 16px 0;\r\n        background-color: #fff;\r\n    }\r\n\r\n    .header-logo {\r\n        max-width: 250px;\r\n        height: auto;\r\n        margin-bottom: 28px;\r\n    }\r\n\r\n    .top-bar {\r\n        position: relative;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 8px;\r\n        width: 100%;\r\n        max-width: 600px;\r\n        background-color: transparent;\r\n        border-bottom: 1px solid #000;\r\n        margin-bottom: 30px;\r\n    }\r\n\r\n    .exit-button {\r\n        position: absolute;\r\n        left: 8px;\r\n    }\r\n\r\n    .icon {\r\n        width: 40px;\r\n        height: 40px;\r\n    }\r\n\r\n    .label {\r\n        font-size: 28px;\r\n        font-weight: 300;\r\n        color: #14695b;\r\n        text-align: center;\r\n    }\r\n</style>\r\n\r\n","const ICONS = Object.freeze({\r\n    mathematics: '/static/icons/mathIcon.png',\r\n    english: '/static/icons/englishIcon.png',\r\n    history: '/static/icons/historyIcon.png',\r\n    lithuanian: '/static/icons/lithuanianIcon.png',\r\n    chemistry: '/static/icons/chemistryIcon.png',\r\n    physics: '/static/icons/physicsIcon.png',\r\n    biology: '/static/icons/biologyIcon.png',\r\n    it: '/static/icons/ITICon.png'\r\n});\r\n\r\nexport const SUBJECT_NAMES = Object.freeze([\r\n    'Matematika', 'Anglų kalba', 'Lietuvių kalba', 'Istorija', 'Chemija',\r\n    'Fizika', 'Biologija', 'IT', 'Ispanų kalba', 'Matematika Rus.',\r\n    'Lietuvių k. Rus.', 'Fizika Rus.', 'Matematika Angl.',\r\n    'Lietuvių k. Angl.', 'Fizika Angl.', 'Rusų k.', 'IB Biologija',\r\n    'IB Fizika', 'IB Matematika', 'Italų kalba', 'Matematika Lenk.',\r\n    'Anglų k. Lenk.', 'Lietuvių k. Lenk.', 'Istorija Lenk.',\r\n    'Chemija Lenk.', 'Fizika Lenk.', 'Biologija Lenk.', 'IT Lenk.',\r\n    'Ispanų k. Lenk.', 'Rusų k. Lenk.', 'IB Biologija Lenk.',\r\n    'IB Fizika Lenk.', 'IB Matematika Lenk.', 'Italų k. Lenk.'\r\n]);\r\n\r\nexport const subjectOptions = Object.freeze(\r\n    SUBJECT_NAMES.map(name => Object.freeze([name, name]))\r\n);\r\n\r\nexport function getSubjectIcon(name) {\r\n    if (name.includes('Matematika')) return ICONS.mathematics;\r\n    if (name.includes('Lietuvių')) return ICONS.lithuanian;\r\n    if (name.includes('Istorija')) return ICONS.history;\r\n    if (name.includes('Chemija')) return ICONS.chemistry;\r\n    if (name.includes('Fizika')) return ICONS.physics;\r\n    if (name.includes('Biologija')) return ICONS.biology;\r\n    if (name === 'IT' || name.startsWith('IT ')) return ICONS.it;\r\n    return ICONS.english;\r\n}\r\n\r\nexport function subjectCards() {\r\n    return SUBJECT_NAMES.map(name => ({ name, icon: getSubjectIcon(name) }));\r\n}\r\n\r\nexport function usesMathEditor(name) {\r\n    return name.includes('Matematika') || name.includes('Fizika') || name.includes('Chemija');\r\n}\r\n","<script>\r\n    import Checkbox from './Checkbox.svelte';\r\n    import { subjectCards } from './subjectCatalog.js';\r\n    export let selectedSubject = '';\r\n\r\n    let subjects = subjectCards();\r\n\r\n    const selectSubject = (subjectName) => {\r\n        // If the same subject is clicked, deselect it, otherwise select the new one\r\n        selectedSubject = selectedSubject === subjectName ? '' : subjectName;\r\n    };\r\n</script>\r\n\r\n<div class=\"checkbox-area\">\r\n    {#each subjects as subject}\r\n        <Checkbox \r\n            icon={subject.icon}\r\n            subject={subject.name} \r\n            isSelected={selectedSubject === subject.name} \r\n            onToggle={() => selectSubject(subject.name)} \r\n        />\r\n    {/each}\r\n</div>\r\n\r\n<style>\r\n    .checkbox-area {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 0.5rem;\r\n        width: 100%;\r\n    }\r\n</style>\r\n","<script>\r\n    export let subject = '';\r\n    export let isSelected = false;\r\n    export let onToggle;\r\n    export let icon;\r\n</script>\r\n\r\n<div class=\"checkbox-group\" class:selected={isSelected}>\r\n    <div class='leftSide'>\r\n        <img src={icon} alt=\"\" class=\"icon\" />\r\n        <label for={subject}>{subject}</label>\r\n    </div>\r\n    <input \r\n        type=\"checkbox\" \r\n        id={subject} \r\n        checked={isSelected} \r\n        on:change={onToggle} \r\n    />\r\n</div>\r\n\r\n<style>\r\n    .checkbox-group {\r\n        height: 45px;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        padding: 12px 20px;\r\n        gap: 10px;\r\n\r\n        background: #eeebdb;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        border-radius: 8px;\r\n        transition: background-color 0.3s ease, color 0.3s ease; /* Add color transition */\r\n    }\r\n\r\n    .checkbox-group.selected {\r\n        background-color: #14695B; /* Background color when selected */\r\n    }\r\n\r\n    .leftSide {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n    }\r\n\r\n    .leftSide img.icon {\r\n        width: 24px;\r\n        height: 24px;\r\n        transition: filter 0.3s ease; /* Smooth transition for icon color */\r\n    }\r\n\r\n    .checkbox-group.selected .leftSide img.icon {\r\n        filter: brightness(0) invert(1); /* Change icon color to white */\r\n    }\r\n\r\n    .leftSide label {\r\n        font-size: 1rem;\r\n        color: #333;\r\n        transition: color 0.3s ease; /* Smooth transition for text color */\r\n    }\r\n\r\n    .checkbox-group.selected .leftSide label {\r\n        color: #fff; /* Change text color to white */\r\n    }\r\n\r\n    input[type=\"checkbox\"] {\r\n        width: 24px;\r\n        height: 24px;\r\n        border-radius: 6px;\r\n        border: 2px solid #333;\r\n        background-color: white;\r\n        appearance: none;\r\n        outline: none;\r\n        cursor: pointer;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        transition: background-color 0.3s ease;\r\n    }\r\n\r\n    input[type=\"checkbox\"]:checked {\r\n        background-color: #14695B;\r\n        border: none;\r\n        background-image: url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"%3E%3Cpolyline points=\"20 6 9 17 4 12\"/%3E%3C/svg%3E');\r\n        background-repeat: no-repeat;\r\n        background-position: center;\r\n\r\n    }\r\n</style>\r\n","<script>\r\n\r\n    import TextField from './TextFieldComponent.svelte';\r\n    import Dropdown from './DropDownComponent.svelte';\r\n    import DateTimePicker from './DateTimePickerComponent.svelte';\r\n    import NavBarReusable from './NavbarReusable.svelte';\r\n    import SingleSelectCheckboxArea from './SingleSelectCheckboxArea.svelte';\r\n\r\n\r\n    let selectedSubject = '';\r\n    let topicsOfInterest = '';\r\n    let selectedClass = '';\r\n    let datetimeValues = [''];\r\n    let showSuccessNotification = false;\r\n    let showDuplicateNotification = false;\r\n    let isSubmitting = false;\r\n    let formSubmitted = false;\r\n\r\n    const classChoices = [\r\n        ['1', '1'],\r\n        ['2', '2'],\r\n        ['3', '3'],\r\n        ['4', '4'],\r\n        ['5', '5'],\r\n        ['6', '6'],\r\n        ['7', '7'],\r\n        ['8', '8'],\r\n        ['9', '9'],\r\n        ['10', '10'],\r\n        ['11', '11'],\r\n        ['12', '12'],\r\n        ['13', 'Universitetas'],\r\n    ];\r\n\r\n    const addDateTime = () => {\r\n        datetimeValues = [...datetimeValues, ''];\r\n    };\r\n\r\n    const removeDateTime = (index) => {\r\n        datetimeValues = datetimeValues.filter((_, i) => i !== index);\r\n    };\r\n\r\n    const checkForDuplicateRegistration = async (subjects, topics, selectedClass) => {\r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            // We'll check existing registrations by fetching user's registration history\r\n            // Since there's no specific duplicate check endpoint, we'll create one or use existing data\r\n            \r\n            // For now, we'll implement a simple check by calling a new endpoint\r\n            const response = await fetch('/studentplayground/api/check-duplicate-registration/', {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Content-Type': 'application/json',\r\n                    'Authorization': `Bearer ${token}`\r\n                },\r\n                body: JSON.stringify({\r\n                    subjects: subjects,\r\n                    topics: topics,\r\n                    selectedClass: selectedClass\r\n                })\r\n            });\r\n\r\n            if (response.ok) {\r\n                const result = await response.json();\r\n                return result.isDuplicate;\r\n            }\r\n            \r\n            // If endpoint doesn't exist yet, we'll fall back to manual check\r\n            // This is a temporary solution until backend is updated\r\n            return false;\r\n            \r\n        } catch (error) {\r\n            console.log('Duplicate check not available, proceeding with submission');\r\n            return false;\r\n        }\r\n    };\r\n\r\n    const handleSubmit = async () => {\r\n        // Prevent multiple submissions only while currently submitting\r\n        if (isSubmitting) {\r\n            return;\r\n        }\r\n\r\n        // Basic validation\r\n        if (!selectedSubject) {\r\n            alert('Prašome pasirinkti dalyką.');\r\n            return;\r\n        }\r\n        if (!selectedClass) {\r\n            alert('Prašome pasirinkti klasę.');\r\n            return;\r\n        }\r\n        if (datetimeValues.length === 0 || datetimeValues.every(dt => !dt)) {\r\n            alert('Prašome pasirinkti bent vieną laiką.');\r\n            return;\r\n        }\r\n\r\n        isSubmitting = true;\r\n\r\n        // Check for duplicate registration\r\n        const isDuplicate = await checkForDuplicateRegistration([selectedSubject], topicsOfInterest, selectedClass);\r\n        \r\n        if (isDuplicate) {\r\n            // Show styled duplicate notification instead of alert\r\n            showDuplicateNotification = true;\r\n            // Auto-hide notification after 10 seconds\r\n            setTimeout(() => {\r\n                showDuplicateNotification = false;\r\n            }, 10000);\r\n            isSubmitting = false;\r\n            return;\r\n        }\r\n\r\n        const data = {\r\n            subjects: [selectedSubject],\r\n            topics: topicsOfInterest,\r\n            selectedClass: selectedClass,\r\n            datetimeValues: datetimeValues.filter(dt => dt), // Remove empty datetime values\r\n        };\r\n        const token = localStorage.getItem('jwtToken'); \r\n        \r\n        try {\r\n            const response = await fetch('/studentplayground/registerForClass/', {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Content-Type': 'application/json',\r\n                    'X-CSRFToken': getCookie('csrftoken'),\r\n                    'Authorization': `Bearer ${token}`  // Include JWT token in Authorization header\r\n                    },\r\n                    credentials: 'include',\r\n                    body: JSON.stringify(data)  // Optionally include credentials if using cookies\r\n                    });\r\n                \r\n\r\n                    if (response.ok) {\r\n                        // Show success notification instead of redirecting\r\n                        showSuccessNotification = true;\r\n                        // Auto-hide notification after 10 seconds\r\n                        setTimeout(() => {\r\n                            showSuccessNotification = false;\r\n                        }, 10000);\r\n                        \r\n                        // Clear form data to allow new submissions for different classes\r\n                        selectedSubject = '';\r\n                        topicsOfInterest = '';\r\n                        selectedClass = '';\r\n                        datetimeValues = [''];\r\n                        \r\n                        // Reset formSubmitted to allow new submissions (removed the formSubmitted = true line)\r\n                        \r\n                    } else {\r\n                        if (response.status === 401) {\r\n                            // If response is 401 Unauthorized, redirect to login\r\n                            alert('Reikia prisijungti iš naujo.');\r\n                            localStorage.removeItem('jwtToken'); // Optional: Clear any stored tokens\r\n                            window.location.href = '#/about'; // Redirect to login page\r\n                        } else if (response.status === 400) {\r\n                            // Check if it's a duplicate registration error\r\n                            try {\r\n                                const errorData = await response.json();\r\n                                if (errorData.message && errorData.message.includes('Duplicate registration')) {\r\n                                    // Show styled duplicate notification instead of alert\r\n                                    showDuplicateNotification = true;\r\n                                    // Auto-hide notification after 10 seconds\r\n                                    setTimeout(() => {\r\n                                        showDuplicateNotification = false;\r\n                                    }, 10000);\r\n                                } else {\r\n                                    alert('Klaida pateikiant formą. Prašome bandyti vėl.');\r\n                                }\r\n                            } catch {\r\n                                alert('Klaida pateikiant formą. Prašome bandyti vėl.');\r\n                            }\r\n                        } else {\r\n                            // Handle other errors\r\n                            alert('Klaida pateikiant formą. Prašome bandyti vėl.');\r\n                        }\r\n                    }\r\n        } catch (error) {\r\n            console.error('Error:', error);\r\n            alert('Įvyko klaida. Prašome bandyti vėl.');\r\n        } finally {\r\n            isSubmitting = false;\r\n        }\r\n    };\r\n\r\n    function getCookie(name) {\r\n        let cookieValue = null;\r\n        if (document.cookie && document.cookie !== '') {\r\n            const cookies = document.cookie.split(';');\r\n            for (let i = 0; i < cookies.length; i++) {\r\n                const cookie = cookies[i].trim();\r\n                if (cookie.substring(0, name.length + 1) === (name + '=')) {\r\n                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        return cookieValue;\r\n    }\r\n</script>\r\n<NavBarReusable label=\"Registruotis\" />\r\n\r\n<!-- Success Notification -->\r\n{#if showSuccessNotification}\r\n    <div class=\"notification success-notification\">\r\n        <div class=\"notification-content\">\r\n            <span class=\"notification-icon\">✓</span>\r\n            <div class=\"notification-text\">\r\n                <strong>Registracija sėkminga!</strong>\r\n                <p>Jūsų registracija išsaugota. Tutory komanda su jumis susisieks artimiausiu metu.</p>\r\n            </div>\r\n            <button class=\"close-notification\" on:click={() => showSuccessNotification = false}>×</button>\r\n        </div>\r\n    </div>\r\n{/if}\r\n\r\n<!-- Duplicate Notification -->\r\n{#if showDuplicateNotification}\r\n    <div class=\"notification duplicate-notification\">\r\n        <div class=\"notification-content\">\r\n            <span class=\"notification-icon\">ℹ</span>\r\n            <div class=\"notification-text\">\r\n                <strong>Užklausa jau egzistuoja</strong>\r\n                <p>Tikslią šios pamokos užklausą jau matome. Su jumis artimu metu susisieks Tutory administratoriai dėl registracijos patvirtinimo.</p>\r\n            </div>\r\n            <button class=\"close-notification\" on:click={() => showDuplicateNotification = false}>×</button>\r\n        </div>\r\n    </div>\r\n{/if}\r\n\r\n<div class=\"student-form\">\r\n    <h2>Pasirinkite pamoką</h2>\r\n    <SingleSelectCheckboxArea bind:selectedSubject={selectedSubject} />\r\n\r\n    <TextField \r\n        label=\"Nuo kurios temos norėtumėte pradėti?\" \r\n        placeholder=\"Įrašykite specifines temas, kurios jus domina\" \r\n        bind:value={topicsOfInterest} \r\n    />\r\n\r\n    <Dropdown \r\n        label=\"Pasirinkite klasę\"\r\n        options={classChoices}\r\n        bind:selectedValue={selectedClass}\r\n    />\r\n    <!-- Dynamic DateTime Picker List -->\r\n    {#each datetimeValues as datetimeValue, index}\r\n        <DateTimePicker \r\n            id={`datetime-${index}`} \r\n            bind:value={datetimeValues[index]} \r\n            onRemove={() => removeDateTime(index)} \r\n        />\r\n    {/each}\r\n    \r\n    <button type=\"button\" class='addDatetime' on:click={addDateTime}>Pridėti laiką</button>\r\n\r\n    <button on:click={handleSubmit} type=\"button\" class=\"submitBut\" disabled={isSubmitting}>\r\n        {#if isSubmitting}\r\n            Siunčiama...\r\n        {:else}\r\n            Pateikti Užklausą\r\n        {/if}\r\n    </button>\r\n</div>\r\n<style>\r\n    .submitBut{\r\n        background-color: #fab45a;\r\n        color:black;\r\n        border: 1px solid #000000;\r\n\r\n    }\r\n    .submitBut:hover:not(:disabled){\r\n        background-color: #c98f43;\r\n        \r\n        color:black;\r\n    }\r\n    .submitBut:disabled{\r\n        background-color: #d1d5db;\r\n        color: #6b7280;\r\n        cursor: not-allowed;\r\n        opacity: 0.6;\r\n    }\r\n    \r\n    .student-form {\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: flex-start;\r\n    }\r\n    \r\n    .addDatetime{\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        height:40px;\r\n        background-color: #fab45a;\r\n        color:black;\r\n    }\r\n    .addDatetime:hover{\r\n        background-color: #c98f43;\r\n        color:black;\r\n    }\r\n\r\n    button{\r\n        margin-top: 20px;\r\n        height: 60px;\r\n        width: 100%;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 12px 20px;\r\n        gap: 10px;\r\n        border-radius: 6px;\r\n        border: 1px solid #333;\r\n        font-weight: bold;\r\n        font-size: large;\r\n        background: transparent;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        border-radius: 8px;\r\n        transition: background-color 0.3s ease, color 0.3s ease; /* Add color transition */\r\n    }\r\n    button:hover {\r\n        background-color: #14695b;\r\n        color:white;\r\n    }\r\n\r\n    /* Notification Styles */\r\n    .notification {\r\n        position: fixed;\r\n        top: 0;\r\n        left: 0;\r\n        right: 0;\r\n        z-index: 1000;\r\n        padding: 16px;\r\n        animation: slideDown 0.3s ease-out;\r\n    }\r\n\r\n    .success-notification {\r\n        background-color: #d4edda;\r\n        border-bottom: 3px solid #28a745;\r\n        color: #155724;\r\n    }\r\n\r\n    .duplicate-notification {\r\n        background-color: #fff3cd;\r\n        border-bottom: 3px solid #ffc107;\r\n        color: #856404;\r\n    }\r\n\r\n    .notification-content {\r\n        display: flex;\r\n        align-items: center;\r\n        max-width: 1200px;\r\n        margin: 0 auto;\r\n        gap: 12px;\r\n    }\r\n\r\n    .notification-icon {\r\n        font-size: 24px;\r\n        font-weight: bold;\r\n        color: #28a745;\r\n        background-color: white;\r\n        border-radius: 50%;\r\n        width: 32px;\r\n        height: 32px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .notification-text {\r\n        flex: 1;\r\n    }\r\n\r\n    .notification-text strong {\r\n        display: block;\r\n        font-size: 16px;\r\n        margin-bottom: 4px;\r\n    }\r\n\r\n    .notification-text p {\r\n        margin: 0;\r\n        font-size: 14px;\r\n        opacity: 0.9;\r\n    }\r\n\r\n    .close-notification {\r\n        background: none;\r\n        border: none;\r\n        font-size: 24px;\r\n        font-weight: bold;\r\n        cursor: pointer;\r\n        color: #155724;\r\n        width: 32px;\r\n        height: 32px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 4px;\r\n        transition: background-color 0.2s ease;\r\n        margin: 0;\r\n        padding: 0;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .close-notification:hover {\r\n        background-color: rgba(21, 87, 36, 0.1);\r\n        color: #155724;\r\n    }\r\n\r\n    @keyframes slideDown {\r\n        from {\r\n            transform: translateY(-100%);\r\n            opacity: 0;\r\n        }\r\n        to {\r\n            transform: translateY(0);\r\n            opacity: 1;\r\n        }\r\n    }\r\n   \r\n</style>\r\n","<script>\r\n   import IconButton from './ButtonComponent.svelte';\r\n\r\n  </script>\r\n  \r\n  <style>\r\n    .container {\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        width:100%;\r\n\r\n    }\r\n  \r\n    \r\n    .top-bar {\r\n        width: 100%;\r\n        text-align: center;\r\n        border-bottom: 2px solid #ccc;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        }\r\n            \r\n\r\n\r\n    .content {\r\n      margin-top: 50px; /* Ensures the content is not under the top bar */\r\n      color: #000;\r\n      display:flex;\r\n      justify-content: space-around;\r\n\r\n    }\r\n    \r\n    .illustration {\r\n      margin-top: 20px;\r\n    }\r\n    .filler{\r\n        width:60px;\r\n    }\r\n    .label{\r\n        font-size:23px;\r\n    }\r\n    .illustration img {\r\n      width: 100%;\r\n      height: auto;\r\n      max-height:500px;\r\n    }\r\n    .exit-button{\r\n        display:flex;\r\n        justify-content: flex-end;\r\n    }\r\n    .exit-button img{\r\n        width:80%;\r\n        max-width:60px;\r\n    }\r\n  </style>\r\n  \r\n  <div class=\"container\">\r\n    <div class=\"top-bar\">\r\n        <div class=\"filler\"></div>\r\n        <div class='label'>Registruotis pamokai</div>\r\n      <a href='#/login-greeting' class='exit-button'>\r\n        <img src='/static/icons/exitButtonIcon.png' alt=\"\" class=\"icon\" />\r\n    </a>\r\n    </div>\r\n    <div class=\"content\">\r\n        <div class=\"illustration\">\r\n          <img src=\"/static/icons/registrationSucess.png\" alt=\"Illustration\">\r\n        </div>\r\n        \r\n      </div>\r\n    \r\n  </div>\r\n  ","<script>\r\n    export let name;\r\n  </script>\r\n  \r\n  <style>\r\n    .class-name {\r\n      font-size: 1.5rem;\r\n      font-weight: bold;\r\n      margin-bottom: 0.5rem;\r\n    }\r\n  </style>\r\n  \r\n  <div class=\"class-name\">\r\n    {name}\r\n  </div>","<script>\r\n    export let teacher;\r\n    export let label ='Mokytoja/as';\r\n  </script>\r\n  \r\n  <style>\r\n    .teacher-name {\r\n      font-size: 1rem;\r\n      color: #000000;\r\n      margin-bottom: 1rem;\r\n    }\r\n  </style>\r\n  \r\n  <div class=\"teacher-name\">\r\n    {label}: {teacher}\r\n  </div>","<script>\r\n    // Accept a tuple (array) with [time, date]\r\n    export let time;\r\n\r\n    export let date;\r\n\r\n\r\n  </script>\r\n  \r\n  <style>\r\n    .date-time-container {\r\n      display: flex;\r\n      align-items: center;\r\n    }\r\n  \r\n    .time {\r\n        font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\r\n        font-size: 2.5rem;\r\n        font-weight: bold;\r\n    }\r\n  \r\n    .date {\r\n      font-size: 1rem;\r\n      color: var(--date-color);\r\n      font-weight: 700;\r\n      margin-left: 0.75rem;\r\n    }\r\n  </style>\r\n  \r\n  <div class=\"date-time-container\">\r\n    <span class=\"time\">{time}</span>\r\n    <span class=\"date\">{@html date}</span>\r\n  </div>","<script>\r\n    export let label = \"Click me\";\r\n    export let link = \"#\"; // The actual Google Meet link\r\n    export let classId = \"\"; // Add class ID as a prop\r\n\r\n    // State to control showing the manual link\r\n    let showManualLink = false;\r\n    let linkCopied = false;\r\n\r\n    // Function to handle navigation with attendance tracking\r\n    async function handleClassJoin(event) {\r\n        // Prevent default navigation\r\n        event.preventDefault();\r\n        \r\n        // CRITICAL: Open window immediately to avoid popup blockers\r\n        // We'll update the location after fetching the link\r\n        const newWindow = window.open('about:blank', '_blank');\r\n        \r\n        // If popup was blocked, newWindow will be null\r\n        if (!newWindow) {\r\n            console.error('Popup was blocked by browser. Using fallback link.');\r\n            // Fallback: navigate in same tab\r\n            window.location.href = link;\r\n            return;\r\n        }\r\n        \r\n        try {\r\n            // Get JWT token from localStorage\r\n            const token = localStorage.getItem('jwtToken');\r\n            \r\n            // Track attendance first\r\n            const response = await fetch(`/studentplayground/track-attendance/${classId}/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n\r\n            if (!response.ok) {\r\n                const errorData = await response.json();\r\n                console.error('Attendance tracking failed:', errorData);\r\n                throw new Error(`Failed to track attendance: ${response.status} ${response.statusText}`);\r\n            }\r\n\r\n            const data = await response.json();\r\n            if (data && data.redirect_url) {\r\n                // Log the redirect URL for debugging\r\n                console.log('Opening redirect URL:', data.redirect_url);\r\n                // Update the already-opened window's location\r\n                newWindow.location.href = data.redirect_url;\r\n            } else {\r\n                console.error('No redirect URL in response:', data);\r\n                console.log('Falling back to original link:', link);\r\n                // Fallback to the original link\r\n                newWindow.location.href = link;\r\n            }\r\n        } catch (error) {\r\n            console.error('Error tracking attendance:', error);\r\n            console.log('Fallback: Opening original link due to error:', link);\r\n            // If tracking fails, still allow them to join the class\r\n            newWindow.location.href = link;\r\n        }\r\n    }\r\n\r\n    // Function to toggle showing the manual link\r\n    function toggleManualLink() {\r\n        showManualLink = !showManualLink;\r\n    }\r\n\r\n    // Function to copy link to clipboard\r\n    async function copyToClipboard() {\r\n        try {\r\n            await navigator.clipboard.writeText(link);\r\n            linkCopied = true;\r\n            // Reset after 2 seconds\r\n            setTimeout(() => {\r\n                linkCopied = false;\r\n            }, 2000);\r\n        } catch (err) {\r\n            console.error('Failed to copy link:', err);\r\n        }\r\n    }\r\n</script>\r\n\r\n<div class=\"manual-link-container\">\r\n    <div class=\"help-text\" \r\n         on:click={toggleManualLink} \r\n         on:keypress={(e) => e.key === 'Enter' && toggleManualLink()}\r\n         role=\"button\"\r\n         tabindex=\"0\">\r\n        {showManualLink ? 'Nukopijuotą nuorodą įspausdinkite į naršyklės paieškos langelį' : 'Nepavyksta prisijungti prie pamokos?'}\r\n    </div>\r\n    \r\n    {#if showManualLink}\r\n        <div class=\"link-display\">\r\n            <a href={link} target=\"_blank\" rel=\"noopener noreferrer\" class=\"meeting-link\" on:click={handleClassJoin}>\r\n                {link}\r\n            </a>\r\n            <button class=\"copy-btn\" on:click={copyToClipboard}>\r\n                {linkCopied ? 'Nuoroda nukopijuota' : 'Kopijuoti nuorodą'}\r\n            </button>\r\n        </div>\r\n    {/if}\r\n</div>\r\n\r\n<button on:click={handleClassJoin}>\r\n    <span>{label}</span>\r\n</button>\r\n\r\n<style>\r\n    /* Button styling */\r\n    button span {\r\n        font-weight: bolder;\r\n        font-size:larger;\r\n    }\r\n\r\n    button {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 12px 20px;\r\n        gap: 10px;\r\n    \r\n        width: 100%;\r\n        height: 60px;\r\n    \r\n        /* Purple background */\r\n        background-color: #faad4a;\r\n    \r\n        /* Black border */\r\n        border: 2px solid #000000;\r\n    \r\n        /* Box shadow */\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    \r\n        /* Rounded corners */\r\n        border-radius: 8px;\r\n    \r\n        /* Inside auto layout */\r\n        flex: none;\r\n        order: 0;\r\n        align-self: stretch;\r\n        flex-grow: 0;\r\n    \r\n        /* Remove default button styling */\r\n        outline: none;\r\n        cursor: pointer;\r\n  \r\n        /* Remove the default button background on focus */\r\n        background-image: none;\r\n        transition: background-color 0.3s ease, color 0.3s ease;\r\n    }\r\n\r\n    /* Button hover effect */\r\n    button:hover {\r\n        background-color: #14695b;\r\n        color:white;\r\n    }\r\n\r\n    /* Text inside the button */\r\n    span {\r\n        font-size: 1rem;\r\n        font-weight: bold;\r\n        \r\n    }\r\n\r\n    /* Manual link container */\r\n    .manual-link-container {\r\n        margin-bottom: 4px;\r\n        width: 100%;\r\n    }\r\n\r\n    /* Help text styling */\r\n    .help-text {\r\n        text-align: center;\r\n        color: #666;\r\n        font-size: 0.75rem;\r\n        cursor: pointer;\r\n        margin: 0;\r\n        text-decoration: underline;\r\n        transition: color 0.2s ease;\r\n    }\r\n\r\n    .help-text:hover {\r\n        color: #14695b;\r\n    }\r\n\r\n    /* Link display container */\r\n    .link-display {\r\n        margin-top: 8px;\r\n        margin-bottom: 8px;\r\n        padding: 12px;\r\n        background-color: #f5f5f5;\r\n        border: 1px solid #ddd;\r\n        border-radius: 8px;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 10px;\r\n    }\r\n\r\n    /* Meeting link styling */\r\n    .meeting-link {\r\n        color: #14695b;\r\n        word-break: break-all;\r\n        font-size: 0.9rem;\r\n        text-decoration: none;\r\n        padding: 8px;\r\n        background-color: white;\r\n        border-radius: 4px;\r\n        border: 1px solid #ddd;\r\n    }\r\n\r\n    .meeting-link:hover {\r\n        text-decoration: underline;\r\n        background-color: #f9f9f9;\r\n    }\r\n\r\n    /* Copy button styling */\r\n    .copy-btn {\r\n        padding: 8px 16px;\r\n        background-color: #14695b;\r\n        color: white;\r\n        border: 1px solid #14695b;\r\n        border-radius: 6px;\r\n        cursor: pointer;\r\n        font-size: 0.9rem;\r\n        font-weight: bold;\r\n        transition: background-color 0.2s ease;\r\n        height: auto;\r\n    }\r\n\r\n    .copy-btn:hover {\r\n        background-color: #0f5347;\r\n    }\r\n</style>\r\n","<script>\r\n    import { createEventDispatcher } from 'svelte';\r\n\r\n    export let currentFilter = 'all'; // Filter state passed from parent\r\n    export let beforeChange = null;\r\n\r\n    const dispatch = createEventDispatcher(); // Create the event dispatcher\r\n\r\n    const setFilter = async (filter) => {\r\n        if (beforeChange && !await beforeChange(filter)) return;\r\n        currentFilter = filter; // Update the filter\r\n        dispatch('filterChange', { filter }); // Dispatch the 'filterChange' event\r\n    };\r\n</script>\r\n\r\n<div class=\"filter-buttons\">\r\n    <button \r\n        class:active={currentFilter === 'all'} \r\n        on:click={() => setFilter('all')}>\r\n        Visos\r\n    </button>\r\n    \r\n    <button \r\n        class:active={currentFilter === 'upcoming'} \r\n        on:click={() => setFilter('upcoming')}>\r\n        Būsimos\r\n    </button>\r\n    <button \r\n        class:active={currentFilter === 'past_classes'} \r\n        on:click={() => setFilter('past_classes')}>\r\n        Buvusios\r\n    </button>\r\n\r\n</div>\r\n\r\n<style>\r\n    .filter-buttons {\r\n        display: flex;\r\n        gap: 1rem;\r\n        height: 60px;\r\n        justify-content: space-between;\r\n    }\r\n\r\n    button { \r\n        border-radius: 8px;\r\n        background-color: white;\r\n        color: #000000;\r\n        font-size: 1rem;\r\n        font-weight: bold;\r\n        cursor: pointer;\r\n        transition: background-color 0.3s, color 0.3s;\r\n        width:100%;\r\n    }\r\n\r\n    button.active {\r\n        background-color: #14695b;\r\n        color: white;\r\n    }\r\n\r\n    button:hover {\r\n        background-color: #14695b;\r\n        color: white;\r\n    }\r\n</style>\r\n","<script>\r\n    export let classId;\r\n    export let label = \"More Info\"; // Optional label for the button\r\n</script>\r\n\r\n<button on:click={() => window.location.href = `#/class/${classId}`}>\r\n    <span>{label}</span>\r\n</button>\r\n<style>\r\n    /* Button styling */\r\n    button span {\r\n        font-weight: bolder;\r\n        font-size:larger;\r\n    }\r\n\r\n    button {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 12px 20px;\r\n        gap: 10px;\r\n    \r\n        width: 100%;\r\n        height: 60px;\r\n    \r\n        /* Purple background */\r\n        background-color: white;\r\n    \r\n        /* Black border */\r\n        border: 2px solid #000000;\r\n    \r\n        /* Box shadow */\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    \r\n        /* Rounded corners */\r\n        border-radius: 8px;\r\n    \r\n        /* Inside auto layout */\r\n        flex: none;\r\n        order: 0;\r\n        align-self: stretch;\r\n        flex-grow: 0;\r\n    \r\n        /* Remove default button styling */\r\n        outline: none;\r\n        cursor: pointer;\r\n  \r\n        /* Remove the default button background on focus */\r\n        background-image: none;\r\n        transition: background-color 0.3s ease, color 0.3s ease;\r\n    }\r\n\r\n    /* Button hover effect */\r\n    button:hover {\r\n        background-color: #14695b;\r\n        color:white;\r\n    }\r\n\r\n    /* Text inside the button */\r\n    span {\r\n        font-size: 1rem;\r\n        font-weight: bold;\r\n    \r\n    }\r\n</style>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    export let classId;\r\n    export let classStart = null;\r\n    export let label = \"More Info\"; // Optional label for the button\r\n    export let buttonClass = 'base'; // Default class is 'base'\r\n    const expiredMessage = 'Nuo pamokos pradžios praėjo 14 dienų. Atsiliepimo pateikti ar koreguoti nebegalima.';\r\n    // The rollout starts at midnight on 1 November in Europe/Vilnius (UTC+2).\r\n    const cutoffAppliesFrom = new Date('2026-11-01T00:00:00+02:00').getTime();\r\n    let now = new Date().getTime();\r\n    $: startTime = classStart ? new Date(classStart).getTime() : NaN;\r\n    $: deadline = startTime >= cutoffAppliesFrom ? startTime + 14 * 24 * 60 * 60 * 1000 : Infinity;\r\n    $: expired = now >= deadline;\r\n    onMount(() => {\r\n        const timer = setInterval(() => { now = new Date().getTime(); }, 1000);\r\n        return () => clearInterval(timer);\r\n    });\r\n    function openComment() {\r\n        now = new Date().getTime();\r\n        if (now >= deadline) return;\r\n        window.location.href = `#/leave-comment/${classId}`;\r\n    }\r\n</script>\r\n\r\n<!-- The disabled button cannot receive focus; its group lets keyboard users read the explanation. -->\r\n<!-- svelte-ignore a11y-no-noninteractive-tabindex -->\r\n<div class=\"comment-button\" tabindex={expired ? 0 : undefined} role=\"group\" aria-label={label} aria-describedby={expired ? `comment-deadline-${classId}` : undefined}>\r\n<button on:click={openComment} class={buttonClass} disabled={expired} aria-label={expired ? `${label}. ${expiredMessage}` : label}>\r\n    <span>{label}</span>\r\n</button>\r\n{#if expired}\r\n    <div class=\"deadline-explanation\" role=\"tooltip\" id={`comment-deadline-${classId}`}>\r\n        <strong>Atsiliepimo terminas baigėsi</strong>\r\n        <span>{expiredMessage}</span>\r\n    </div>\r\n{/if}\r\n</div>\r\n<style>\r\n    .comment-button { position: relative; width: 100%; }\r\n    .comment-button:focus-visible { outline: 2px solid #14695b; outline-offset: 4px; border-radius: 8px; }\r\n    .deadline-explanation {\r\n        position: absolute;\r\n        z-index: 20;\r\n        bottom: calc(100% + 10px);\r\n        left: 50%;\r\n        transform: translateX(-50%);\r\n        box-sizing: border-box;\r\n        width: min(340px, 100%);\r\n        padding: 14px 16px;\r\n        border: 1px solid #14695b;\r\n        border-radius: 8px;\r\n        background: #fffffa;\r\n        color: #333;\r\n        box-shadow: 0 4px 12px rgba(20, 105, 91, 0.12);\r\n        text-align: left;\r\n        line-height: 1.5;\r\n        cursor: default;\r\n        visibility: hidden;\r\n    }\r\n    .deadline-explanation strong { display: block; margin-bottom: 5px; color: #14695b; font-size: 14px; font-weight: 600; }\r\n    .deadline-explanation span { display: block; font-size: 13px; font-weight: 400; }\r\n    .deadline-explanation::before {\r\n        content: '';\r\n        position: absolute;\r\n        bottom: -6px;\r\n        left: calc(50% - 5px);\r\n        width: 10px;\r\n        height: 10px;\r\n        background: #fffffa;\r\n        border-right: 1px solid #14695b;\r\n        border-bottom: 1px solid #14695b;\r\n        transform: rotate(45deg);\r\n    }\r\n    .deadline-explanation::after { content: ''; position: absolute; bottom: -12px; left: 0; width: 100%; height: 12px; }\r\n    .comment-button:hover .deadline-explanation,\r\n    .comment-button:focus-within .deadline-explanation { visibility: visible; }\r\n    button:disabled, button:disabled:hover {\r\n        background-color: #e0e0e0;\r\n        color: #666;\r\n        border-color: #aaa;\r\n        cursor: not-allowed;\r\n        box-shadow: none;\r\n        pointer-events: none;\r\n    }\r\n    .comment-button:has(button:disabled) { cursor: not-allowed; }\r\n    /* Button styling */\r\n    button span {\r\n        font-weight: bolder;\r\n        font-size:larger;\r\n    }\r\n\r\n    button {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 12px 20px;\r\n        gap: 10px;\r\n    \r\n        width: 100%;\r\n        height: 60px;\r\n    \r\n        /* Purple background */\r\n        background-color: #faad4a;\r\n    \r\n        /* Black border */\r\n        border: 2px solid black;\r\n        color:black;\r\n    \r\n        /* Box shadow */\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    \r\n        /* Rounded corners */\r\n        border-radius: 8px;\r\n    \r\n        /* Inside auto layout */\r\n        flex: none;\r\n        order: 0;\r\n        align-self: stretch;\r\n        flex-grow: 0;\r\n    \r\n        /* Remove default button styling */\r\n        outline: none;\r\n        cursor: pointer;\r\n  \r\n        /* Remove the default button background on focus */\r\n        background-image: none;\r\n        transition: background-color 0.3s ease, color 0.3s ease;\r\n    }\r\n\r\n    /* Button hover effect */\r\n    button:hover {\r\n        background-color: #14695b;\r\n        color:white;\r\n        border: 2px solid #14695b;\r\n    }\r\n    .koregouti{\r\n        background-color: white;\r\n        color: black;\r\n        border: 2px solid #000000;\r\n    }\r\n    .koregouti:hover{\r\n        background-color:#14695b;\r\n        color:white;\r\n        border: 2px solid #14695b;\r\n        \r\n    }\r\n\r\n    /* Text inside the button */\r\n    span {\r\n        font-size: 1rem;\r\n        font-weight: bold;\r\n        \r\n    }\r\n</style>\r\n","<script>\r\n    export let student;\r\n  </script>\r\n  \r\n  <style>\r\n    .teacher-name {\r\n      font-size: 1rem;\r\n      color: #000000;\r\n      margin-bottom: 1rem;\r\n    }\r\n  </style>\r\n  \r\n  <div class=\"teacher-name\">\r\n    Mokiniai: {student}\r\n  </div>","<script>\r\n    import { createEventDispatcher } from 'svelte';\r\n\r\n    export let currentFilter = 'all'; // Filter state passed from parent\r\n\r\n    const dispatch = createEventDispatcher(); // Create the event dispatcher\r\n\r\n    const setFilter = (filter) => {\r\n        currentFilter = filter; // Update the filter\r\n        dispatch('filterChange', { filter }); // Dispatch the 'filterChange' event\r\n    };\r\n</script>\r\n\r\n<div class=\"filter-buttons\">\r\n    <button \r\n        class:active={currentFilter === 'all'} \r\n        on:click={() => setFilter('all')}>\r\n        Visi\r\n    </button>\r\n    \r\n    <button \r\n        class:active={currentFilter === 'waiting_answer'} \r\n        on:click={() => setFilter('waiting_answer')}>\r\n        Laukiama\r\n    </button>\r\n    <button \r\n        class:active={currentFilter === 'processed'} \r\n        on:click={() => setFilter('processed')}>\r\n        Atsakyti\r\n    </button>\r\n\r\n</div>\r\n\r\n<style>\r\n    .filter-buttons {\r\n        display: flex;\r\n        gap: 1rem;\r\n        height: 60px;\r\n        justify-content: space-between;\r\n    }\r\n\r\n    button { \r\n        border-radius: 8px;\r\n        background-color: white;\r\n        color: #000000;\r\n        font-size: 1rem;\r\n        font-weight: bold;\r\n        cursor: pointer;\r\n        transition: background-color 0.3s, color 0.3s;\r\n        width:100%;\r\n    }\r\n\r\n    button.active {\r\n        background-color: #14695b;\r\n        color: white;\r\n    }\r\n\r\n    button:hover {\r\n        background-color: #14695b;\r\n        color: white;\r\n    }\r\n</style>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import { link } from 'svelte-spa-router';\r\n    import StudentName from './StudentNameComponent.svelte'\r\n    import ClassName from './ClassNameComponent.svelte';\r\n    import TeacherName from './TeacherNameComponent.svelte';\r\n    import TimeShower from './TimeShowerComponent.svelte';\r\n    import ButtonToJoinClass from './ButtonToJoinClassComponent.svelte';\r\n    import FilterButtons from './FilterButtonsForReschRequestsComponent.svelte';\r\n    import ButtonToComment from './ButtonToLeaveCommentComponent.svelte';\r\n    import RescheduleButton from './ButtonToRescheduleComponent.svelte';\r\n    import StudentNameComponent from './StudentNameComponent.svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n    \r\n    const apiBase = getApiBase();\r\n    \r\n    let events = [];\r\n    let currentFilter = 'all';\r\n    let isUserTeacher = false;\r\n    \r\n\r\n    function getClassForEvent(event) {\r\n        // Check for responsibility incidents first - apply red border\r\n        if (event.has_responsibility_incident) {\r\n            return 'red-border responsibility-incident';\r\n        }\r\n        // Determine the border color based on the logic provided\r\n        if (event.status === 'Accepted') {\r\n            return 'green-border';\r\n        }\r\n        if (event.status === 'Denied'){\r\n            return 'red-border';\r\n        }\r\n        if ((event.directedTo === 'Teacher' && isUserTeacher) || (event.directedTo === 'Student' && !isUserTeacher)) {\r\n            return 'yellow-border';\r\n        }\r\n        if ((event.directedTo === 'Teacher' && !isUserTeacher) || (event.directedTo === 'Student' && isUserTeacher)) {\r\n            return 'grey-border';\r\n        }\r\n            return ''; // Default case, if needed\r\n    }\r\n\r\n    function getHeaderText(event) {\r\n        if (event.cancelled_payable) return isUserTeacher ? 'ATŠAUKTA – APMOKAMA' : 'ATŠAUKTA NESILAIKANT ATŠAUKIMO SĄLYGŲ – APMOKAMA';\r\n        // Check for responsibility incidents first\r\n        if (event.has_responsibility_incident && event.incident_type === 'Atsaukimas') {\r\n            return 'PAMOKA ATŠAUKTA TĄ PAČIA DIENĄ';\r\n        }\r\n        if (event.status === 'Accepted') {\r\n            return 'PATVIRTINTA';\r\n        }\r\n        if (event.status === 'Denied') {\r\n            return 'NEPATVIRTINTA';\r\n        }\r\n        if ((event.directedTo === 'Teacher' && isUserTeacher) || (event.directedTo === 'Student' && !isUserTeacher)) {\r\n            return 'REIKIA ATSAKYTI';\r\n        }\r\n        if ((event.directedTo === 'Teacher' && !isUserTeacher) || (event.directedTo === 'Student' && isUserTeacher)) {\r\n            return 'LAUKIAMA ATSAKYMO';\r\n        }\r\n        return ''; // Default case, if needed\r\n    }\r\n    // Function to change the link text when clicked\r\n    function changeLinkText(event) {\r\n      const link = event.target;\r\n      link.textContent = \"Reschedule request sent!\";\r\n    }\r\n    const formatDateTime = (datetime) => {\r\n        // Handle empty or null datetime\r\n        if (!datetime || datetime === \"\") {\r\n            return { timePart: \"N/A\", datePart: \"N/A\" };\r\n        }\r\n        \r\n        let parts = datetime.split(\" \");\r\n        let datePart = parts[0] || \"N/A\";\r\n        let timePart = parts[1] || \"N/A\";\r\n        console.log(parts)\r\n        console.log(datePart)\r\n        console.log(timePart)\r\n        \r\n        return { timePart, datePart };\r\n    };\r\n    function isPastEvent(eventTime) {\r\n      const eventDateTime = new Date(eventTime);\r\n      const currentDateTime = new Date();\r\n      return eventDateTime < currentDateTime;\r\n    }\r\n    \r\n    // Function to handle confirm/deny button click\r\n  const handleAction = async (event, action) => {\r\n    const token = localStorage.getItem('jwtToken');\r\n\r\n    try {\r\n      const response = await fetch(`${apiBase}/teacher_playground/rescheduleReq/`, {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        },\r\n        body: JSON.stringify({\r\n          request_id: event.idGcal,\r\n          action: action\r\n        })\r\n      });\r\n\r\n      if (response.ok) {\r\n        // Refresh the events after action is performed\r\n        fetchEvents();\r\n      } else {\r\n        console.error('Failed to perform action:', response.statusText);\r\n      }\r\n    } catch (error) {\r\n      console.error('Error in action:', error);\r\n    }\r\n  };\r\n\r\n    const fetchEvents = async () => {\r\n      const token = localStorage.getItem('jwtToken'); // Retrieve token from localStorage\r\n  \r\n      if (!token) {\r\n        console.error('No JWT token found. User might not be logged in.');\r\n        return;\r\n      }\r\n  \r\n      try {\r\n        // Determine the URL\r\n        const url = `${apiBase}/teacher_playground/rescheduleReq/?filter=${currentFilter}`;\r\n  \r\n        console.log(\"Fetching events from:\", url);\r\n  \r\n        // Make the request\r\n        const response = await fetch(url, {\r\n          method: 'GET',\r\n          headers: {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json'\r\n          }\r\n        });\r\n  \r\n        if (response.ok) {\r\n          const data = await response.json();\r\n          events = data.events;\r\n          isUserTeacher = data.isUserTeacher\r\n          console.log(\"These are the mf eventicus\")\r\n          console.log(events)\r\n          console.log(isUserTeacher)\r\n        } else {\r\n            if (response.status === 401) {\r\n                // If response is 401 Unauthorized, redirect to login\r\n                alert('Reikia prisijungti iš naujo.');\r\n                localStorage.removeItem('jwtToken'); // Optional: Clear any stored tokens\r\n                window.location.href = '#/about'; // Redirect to login page\r\n            } else {\r\n                // Handle other errors\r\n                alert('Error submitting form!');\r\n            }\r\n        }\r\n      } catch (error) {\r\n        console.error(\"Failed to fetch events:\", error);\r\n      }\r\n      \r\n    };\r\n  \r\n    // Handle filter change event from FilterButtons component\r\n    const handleFilterChange = (event) => {\r\n      currentFilter = event.detail.filter; // Update the filter\r\n      fetchEvents(); // Fetch new events based on the filter\r\n    };\r\n  \r\n    // Fetch events when the component is mounted\r\n    onMount(() => {\r\n      fetchEvents();\r\n    });\r\n    function getHeaderClass(event) {\r\n      // Check for responsibility incidents first - apply red header\r\n      if (event.has_responsibility_incident) {\r\n          return 'red-header';\r\n      }\r\n      if (event.status === 'Accepted') {\r\n          return 'green-header';\r\n      }\r\n      if (event.status === 'Denied') {\r\n          return 'red-header';\r\n      }\r\n      if ((event.directedTo === 'Teacher' && isUserTeacher) || (event.directedTo === 'Student' && !isUserTeacher)) {\r\n          return 'yellow-header';\r\n      }\r\n      if ((event.directedTo === 'Teacher' && !isUserTeacher) || (event.directedTo === 'Student' && isUserTeacher)) {\r\n          return 'grey-header';\r\n      }\r\n      return ''; // Default case, if needed\r\n  }\r\n  </script>\r\n  \r\n  <style>\r\n    .red-border {\r\n        border-left: 4px solid #dc2626;\r\n        background-color: #fef2f2;\r\n    }\r\n    \r\n    .responsibility-incident {\r\n        background-color: #ffcccc;\r\n    }\r\n\r\n    .yellow-border {\r\n        border-left: 4px solid #f59e0b;\r\n        background-color: #fffbeb;\r\n    }\r\n\r\n    .green-border {\r\n        border-left: 4px solid #059669;\r\n        background-color: #f0fdf4;\r\n    }\r\n    \r\n    .grey-border {\r\n        border-left: 4px solid #6b7280;\r\n        background-color: #f9fafb;\r\n    }\r\n\r\n    .header {\r\n        display: flex;\r\n        justify-content: flex-start;\r\n        align-items: center;\r\n        padding: 0 0 8px 0;\r\n        font-size: 1rem;\r\n        font-weight: 700;\r\n        text-transform: uppercase;\r\n        letter-spacing: 0.05em;\r\n        margin-bottom: 12px;\r\n        border-bottom: 1px solid #e5e7eb;\r\n    }\r\n\r\n    .red-header {\r\n        color: #dc2626;\r\n    }\r\n\r\n    .yellow-header {\r\n        color: #f59e0b;\r\n    }\r\n\r\n    .green-header {\r\n        color: #059669;\r\n    }\r\n    \r\n    .grey-header {\r\n        color: #6b7280;\r\n    }\r\n\r\n    /* Button styling */\r\n    button {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 10px 16px;\r\n        width: 100%;\r\n        height: 44px;\r\n        background-color: #ffffff;\r\n        border: 1px solid #d1d5db;\r\n        border-radius: 6px;\r\n        font-size: 0.875rem;\r\n        font-weight: 500;\r\n        color: #374151;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n        outline: none;\r\n    }\r\n\r\n    button:hover {\r\n        background-color: #f3f4f6;\r\n        border-color: #9ca3af;\r\n    }\r\n\r\n    button:focus {\r\n        box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.5);\r\n    }\r\n\r\n    .confirm-button {\r\n        background-color: #059669;\r\n        border-color: #059669;\r\n        color: white;\r\n        margin-bottom: 8px;\r\n    }\r\n\r\n    .confirm-button:hover {\r\n        background-color: #047857;\r\n        border-color: #047857;\r\n    }\r\n\r\n    .deny-button {\r\n        background-color: #dc2626;\r\n        border-color: #dc2626;\r\n        color: white;\r\n    }\r\n\r\n    .deny-button:hover {\r\n        background-color: #b91c1c;\r\n        border-color: #b91c1c;\r\n    }\r\n\r\n    .classcontainer {\r\n        padding: 20px;\r\n        background-color: #ffffff;\r\n        display: flex;\r\n        flex-direction: column;\r\n        margin-bottom: 16px;\r\n        gap: 16px;\r\n        box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);\r\n        border-radius: 8px;\r\n        border: 1px solid #e5e7eb;\r\n        color: #374151;\r\n    }\r\n\r\n    .time-section {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 8px;\r\n        margin: 12px 0;\r\n    }\r\n\r\n    .time-item {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 4px;\r\n    }\r\n\r\n    .time-label {\r\n        font-size: 0.875rem;\r\n        font-weight: 500;\r\n        color: #6b7280;\r\n    }\r\n    \r\n    .senasLaikas .time-label {\r\n        color: #dc2626;\r\n    }\r\n    \r\n    .naujasLaikas .time-label {\r\n        color: #059669;\r\n    }\r\n\r\n    .addi_text {\r\n        font-size: 0.875rem;\r\n        color: #6b7280;\r\n        font-style: italic;\r\n        padding: 12px;\r\n        background-color: #f9fafb;\r\n        border-radius: 6px;\r\n        border-left: 3px solid #d1d5db;\r\n    }\r\n\r\n    .no-events-message {\r\n        text-align: center;\r\n        color: #6b7280;\r\n        font-size: 1rem;\r\n        padding: 40px 20px;\r\n        background-color: #ffffff;\r\n        border-radius: 8px;\r\n        margin: 20px 0;\r\n        border: 1px solid #e5e7eb;\r\n    }\r\n\r\n    .no-events-message p {\r\n        color: #6b7280;\r\n        font-size: 1rem;\r\n        margin: 0;\r\n        font-weight: 500;\r\n    }\r\n\r\n    .button-group {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 8px;\r\n        margin-top: 8px;\r\n    }\r\n  </style>\r\n  \r\n  <FilterButtons \r\n    currentFilter={currentFilter} \r\n    on:filterChange={handleFilterChange} />\r\n  \r\n    <div class=\"classSection\">\r\n      {#if events.length > 0}\r\n        {#each events as event}\r\n          <div class=\"classcontainer {getClassForEvent(event)}\">\r\n            <!-- Dynamic header based on status -->\r\n            <div class=\"header {getHeaderClass(event)}\">\r\n              {getHeaderText(event)}\r\n            </div>\r\n      \r\n            <!-- Render the reschedule request details -->\r\n            <div>\r\n              <ClassName name={event.clName} />\r\n              <StudentName student={event.studName} />\r\n              <TeacherName teacher={event.teacher} />\r\n              \r\n              <div class=\"time-section\">\r\n                {#if event.has_responsibility_incident && event.type === 'Cancel'}\r\n                  <!-- For responsibility incidents with cancel: only show old time -->\r\n                  <div class='senasLaikas time-item'>\r\n                    <span class=\"time-label\">Senas laikas:</span>\r\n                    <TimeShower \r\n                      time={formatDateTime(event.oldDisplay).timePart} \r\n                      date={formatDateTime(event.oldDisplay).datePart} \r\n                    />\r\n                  </div>\r\n                {:else if event.additionalClass}\r\n                  <!-- For additional class: only show new time -->\r\n                  <div class='naujasLaikas time-item'>\r\n                    <span class=\"time-label\">Naujas laikas papildomai pamokai:</span>\r\n                    <TimeShower \r\n                      time={formatDateTime(event.newDisplay).timePart} \r\n                      date={formatDateTime(event.newDisplay).datePart} \r\n                    />\r\n                  </div>\r\n                {:else}\r\n                  <!-- For regular reschedule: show both old and new time -->\r\n                  <div class='senasLaikas time-item'>\r\n                    <span class=\"time-label\">Senas laikas:</span>\r\n                    <TimeShower \r\n                      time={formatDateTime(event.oldDisplay).timePart} \r\n                      date={formatDateTime(event.oldDisplay).datePart} \r\n                    />\r\n                  </div>\r\n                  {#if event.newDisplay}\r\n                  <div class='naujasLaikas time-item'>\r\n                    <span class=\"time-label\">Naujas laikas:</span>\r\n                    <TimeShower \r\n                      time={formatDateTime(event.newDisplay).timePart} \r\n                      date={formatDateTime(event.newDisplay).datePart} \r\n                    />\r\n                  </div>\r\n                  {/if}\r\n                {/if}\r\n              </div>\r\n            </div>\r\n    \r\n            <!-- Pending event logic -->\r\n            {#if event.has_responsibility_incident && event.type === 'Cancel'}\r\n              <!-- Responsibility incidents with cancel are already processed, no actions needed -->\r\n            {:else if event.status === 'Pending' && getHeaderClass(event) === 'grey-header'}\r\n              <div class=\"addi_text\">\r\n                Laukiama atsakymo iš pamokos dalyvių\r\n              </div>\r\n            {:else if event.status === 'Pending' && getHeaderClass(event) !== \"grey-header\"}\r\n              <div class=\"button-group\">\r\n                <button class=\"confirm-button\" on:click={() => handleAction(event, 'confirm')}>\r\n                  Patvirtinti\r\n                </button>\r\n                <button class=\"deny-button\" on:click={() => handleAction(event, 'deny')}>\r\n                  Atmesti\r\n                </button>\r\n              </div>\r\n            {:else if event.can_participate !== false}\r\n              <RescheduleButton classId={event.idGcal} label=\"Pasiūlyti kitą laiką\" />\r\n            {/if}\r\n          </div>\r\n        {/each}\r\n      {:else}\r\n        <div class=\"no-events-message\">\r\n          <p>Nėra prašymų keisti pamokas.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n\r\n    let groupedRequests = {};\r\n    let loading = true;\r\n\r\n    // map of requestId → boolean (expanded?)\r\n    let expandedMap = {};\r\n\r\n    async function handleFetchRequests() {\r\n      const token = localStorage.getItem('jwtToken');\r\n      try {\r\n        const res = await fetch(\r\n          '/studentplayground/api/teacher/class-registration-requests/',\r\n          {\r\n            method: 'GET',\r\n            headers: {\r\n              'Authorization': `Bearer ${token}`,\r\n              'Content-Type':  'application/json'\r\n            }\r\n          }\r\n        );\r\n        if (!res.ok) {\r\n            const errorData = await res.json();\r\n            throw new Error(errorData.error || res.statusText);\r\n        }\r\n        groupedRequests = await res.json();\r\n      } catch (err) {\r\n        console.error('Error fetching requests:', err);\r\n        alert(`Klaida įkeliant užklausas: ${err.message}`);\r\n      } finally {\r\n        loading = false;\r\n      }\r\n    }\r\n\r\n    onMount(handleFetchRequests);\r\n\r\n    // toggle expanded state for one card\r\n    function toggleExpand(id) {\r\n      expandedMap[id] = !expandedMap[id];\r\n      // reassign to trigger Svelte reactivity\r\n      expandedMap = { ...expandedMap };\r\n    }\r\n\r\n    function formatDateTime(iso) {\r\n      if (!iso) return '-';\r\n      const d = new Date(iso);\r\n      // Format in Lithuania timezone\r\n      return `${d.toLocaleDateString('lt-LT', { timeZone: 'Europe/Vilnius' })} at ${d.toLocaleTimeString('lt-LT', { \r\n        timeZone: 'Europe/Vilnius',\r\n        hour: '2-digit', \r\n        minute: '2-digit' \r\n      })}`;\r\n    }\r\n\r\n    function getStudentName(student) {\r\n      return student || 'Nežinomas studentas';\r\n    }\r\n\r\n    function getSubjectDisplayName(subject) {\r\n      const subjectNames = {\r\n        \"Math\": \"Matematika\",\r\n        \"English\": \"Anglų kalba\", \r\n        \"Lithuanian\": \"Lietuvių kalba\",\r\n        \"History\": \"Istorija\",\r\n        \"Chemistry\": \"Chemija\",\r\n        \"Physics\": \"Fizika\",\r\n        \"Biology\": \"Biologija\",\r\n        \"IT\": \"Informacinės technologijos\"\r\n      };\r\n      return subjectNames[subject] || subject;\r\n    }\r\n\r\n    function getGradeDisplayName(grade) {\r\n      if (grade === 'university') {\r\n        return 'Universitetas';\r\n      }\r\n      return `${grade} klasė`;\r\n    }\r\n\r\n    function formatRequestedTimes(requestedTimes) {\r\n      if (!requestedTimes || requestedTimes.length === 0) {\r\n        return 'Laikas nenurodytas';\r\n      }\r\n      return requestedTimes.map(time => {\r\n        if (!time) return 'Neteisingas laikas';\r\n        const d = new Date(time);\r\n        // Format in Lithuania timezone\r\n        return `${d.toLocaleDateString('lt-LT', { timeZone: 'Europe/Vilnius' })} ${d.toLocaleTimeString('lt-LT', { \r\n          timeZone: 'Europe/Vilnius',\r\n          hour: '2-digit', \r\n          minute: '2-digit' \r\n        })}`;\r\n      }).join(', ');\r\n    }\r\n\r\n    function formatRequestedTime(time) {\r\n      if (!time) return 'Neteisingas laikas';\r\n      const d = new Date(time);\r\n      // Format in Lithuania timezone\r\n      const date = d.toLocaleDateString('lt-LT', { \r\n        timeZone: 'Europe/Vilnius',\r\n        month: 'short', \r\n        day: 'numeric',\r\n        year: d.getFullYear() !== new Date().getFullYear() ? 'numeric' : undefined\r\n      });\r\n      const timeStr = d.toLocaleTimeString('lt-LT', { \r\n        timeZone: 'Europe/Vilnius',\r\n        hour: '2-digit', \r\n        minute: '2-digit' \r\n      });\r\n      return `${date} ${timeStr}`;\r\n    }\r\n\r\n    // Function to handle teacher accept action\r\n    async function handleAcceptRequest(requestId) {\r\n      const token = localStorage.getItem('jwtToken');\r\n      \r\n      try {\r\n        const response = await fetch(\r\n          '/studentplayground/api/teacher/accept-registration/',\r\n          {\r\n            method: 'POST',\r\n            headers: {\r\n              'Authorization': `Bearer ${token}`,\r\n              'Content-Type': 'application/json'\r\n            },\r\n            body: JSON.stringify({\r\n              request_id: requestId\r\n            })\r\n          }\r\n        );\r\n\r\n        if (response.ok) {\r\n          const result = await response.json();\r\n          alert(`Registracijos užklausa sėkmingai priimta!`);\r\n          // Refresh the requests list\r\n          await handleFetchRequests();\r\n        } else {\r\n          const error = await response.json();\r\n          console.error('Failed to accept request:', error);\r\n          alert(`Nepavyko priimti užklausos: ${error.error || response.statusText}`);\r\n        }\r\n      } catch (error) {\r\n        console.error('Error accepting request:', error);\r\n        alert(`Klaida priimant užklausą: ${error.message}`);\r\n      }\r\n    }\r\n  </script>\r\n  \r\n  <style>\r\n  /* Header styling */\r\n  .labelDiv {\r\n    display: flex;\r\n    justify-content: space-around;\r\n    margin-bottom: 2rem;\r\n    margin-top: 2rem;\r\n  }\r\n  .labelDiv span {\r\n    font-size: 1.2rem;\r\n    font-weight: bold;\r\n    color: #333;\r\n  }\r\n\r\n  /* Loading and empty states */\r\n  .loading-message, .empty-message {\r\n    text-align: center;\r\n    padding: 2rem;\r\n    color: #666;\r\n    font-style: italic;\r\n  }\r\n\r\n  /* Date group styling */\r\n  .date-group {\r\n    margin-bottom: 2rem;\r\n  }\r\n  .date-header {\r\n    font-size: 1.1rem;\r\n    font-weight: bold;\r\n    color: #0055aa;\r\n    border-bottom: 2px solid #0055aa;\r\n    padding-bottom: 0.5rem;\r\n    margin-bottom: 1rem;\r\n  }\r\n\r\n  /* Request card styling */\r\n  .request-card {\r\n    border: 2px solid #e0e0e0;\r\n    border-radius: 12px;\r\n    margin-bottom: 1rem;\r\n    background: #fff;\r\n    overflow: hidden;\r\n    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n    transition: all 0.3s ease;\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n  }\r\n  \r\n  .request-card:hover {\r\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n    transform: translateY(-2px);\r\n  }\r\n\r\n  .request-card.accepted {\r\n    border-color: #28a745;\r\n    background: #f8fff9;\r\n  }\r\n\r\n  .request-content {\r\n    padding: 1.5rem;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    gap: 1rem;\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .student-info {\r\n    flex: 1;\r\n  }\r\n\r\n  .student-name {\r\n    margin: 0 0 0.5rem 0;\r\n    font-size: 1.3rem;\r\n    font-weight: 600;\r\n    color: #333;\r\n  }\r\n\r\n  .class-info {\r\n    display: flex;\r\n    gap: 1rem;\r\n    margin-bottom: 0.8rem;\r\n  }\r\n\r\n  .subject {\r\n    background: transparent;\r\n    color: #007bff;\r\n    border: 2px solid #007bff;\r\n    padding: 0.3rem 0.8rem;\r\n    border-radius: 20px;\r\n    font-size: 0.9rem;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .grade {\r\n    background: transparent;\r\n    color: #6c757d;\r\n    border: 2px solid #6c757d;\r\n    padding: 0.3rem 0.8rem;\r\n    border-radius: 20px;\r\n    font-size: 0.9rem;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .topic {\r\n    color: #666;\r\n    font-size: 0.95rem;\r\n    line-height: 1.4;\r\n    margin-top: 1.2rem;\r\n  }\r\n\r\n  .topic strong {\r\n    color: #333;\r\n  }\r\n\r\n  .requested-times {\r\n    margin-top: 0.8rem;\r\n  }\r\n\r\n  .requested-times strong {\r\n    color: #333;\r\n    font-size: 0.95rem;\r\n    display: block;\r\n    margin-bottom: 0.5rem;\r\n  }\r\n\r\n  .times-list {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 0.5rem;\r\n  }\r\n\r\n  .time-badge {\r\n    background: #f8f9fa;\r\n    color: #495057;\r\n    border: 1px solid #dee2e6;\r\n    padding: 0.25rem 0.6rem;\r\n    border-radius: 6px;\r\n    font-size: 0.85rem;\r\n    font-weight: 500;\r\n    white-space: nowrap;\r\n  }\r\n\r\n  .no-times {\r\n    color: #6c757d;\r\n    font-style: italic;\r\n    font-size: 0.9rem;\r\n  }\r\n\r\n  /* Action section */\r\n  .action-section {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-width: 140px;\r\n  }\r\n\r\n  .accept-button {\r\n    background: #28a745;\r\n    color: white;\r\n    border: none;\r\n    padding: 12px 24px;\r\n    border-radius: 8px;\r\n    font-size: 1rem;\r\n    font-weight: 600;\r\n    cursor: pointer;\r\n    transition: all 0.2s ease;\r\n    white-space: nowrap;\r\n  }\r\n  \r\n  .accept-button:hover {\r\n    background: #218838;\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 4px 8px rgba(40, 167, 69, 0.3);\r\n  }\r\n\r\n  .accept-button:active {\r\n    transform: translateY(0);\r\n  }\r\n\r\n  .accepted-indicator {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 0.5rem;\r\n    padding: 12px 24px;\r\n    background: #d4edda;\r\n    color: #155724;\r\n    border: 2px solid #28a745;\r\n    border-radius: 8px;\r\n    font-weight: 600;\r\n    font-size: 1rem;\r\n  }\r\n\r\n  .check-icon {\r\n    font-size: 1.2rem;\r\n    font-weight: bold;\r\n  }\r\n\r\n  /* Responsive adjustments */\r\n  @media (max-width: 768px) {\r\n    .request-content {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 1rem;\r\n    }\r\n    \r\n    .class-info {\r\n      flex-wrap: wrap;\r\n      gap: 0.5rem;\r\n    }\r\n    \r\n    .action-section {\r\n      width: 100%;\r\n      justify-content: flex-start;\r\n    }\r\n    \r\n    .accept-button, .accepted-indicator {\r\n      width: 100%;\r\n      justify-content: center;\r\n    }\r\n  }\r\n</style>\r\n  \r\n  <div class=\"labelDiv\">\r\n    <span>KLASIŲ REGISTRACIJOS UŽKLAUSOS</span>\r\n  </div>\r\n\r\n{#if loading}\r\n  <div class=\"loading-message\">Įkeliama…</div>\r\n{:else if Object.keys(groupedRequests).length === 0}\r\n  <div class=\"empty-message\">Klasių registracijos užklausų nerasta.</div>\r\n{:else}\r\n  {#each Object.entries(groupedRequests) as [day, requests]}\r\n    <div class=\"date-group\">\r\n      <h2 class=\"date-header\">{day}</h2>\r\n\r\n      {#each requests as req (req.id)}\r\n        <div class=\"request-card\" class:accepted={req.accepted_by_teacher}>\r\n          <div class=\"request-content\">\r\n            <div class=\"student-info\">\r\n              <h4 class=\"student-name\">{getStudentName(req.student)}</h4>\r\n              <div class=\"class-info\">\r\n                <span class=\"subject\">{getSubjectDisplayName(req.subject)}</span>\r\n                <span class=\"grade\">{getGradeDisplayName(req.grade)}</span>\r\n              </div>\r\n              \r\n              <div class=\"requested-times\">\r\n                <strong>Pageidaujamas laikas:</strong>\r\n                <div class=\"times-list\">\r\n                  {#each req.requested_times as time}\r\n                    {#if time}\r\n                      <span class=\"time-badge\">{formatRequestedTime(time)}</span>\r\n                    {/if}\r\n                  {/each}\r\n                  {#if !req.requested_times || req.requested_times.length === 0}\r\n                    <span class=\"no-times\">Konkretus laikas nenurodytas</span>\r\n                  {/if}\r\n                </div>\r\n              </div>\r\n              \r\n              {#if req.topic_start}\r\n                <div class=\"topic\">\r\n                  <strong>Tema:</strong> {req.topic_start}\r\n                </div>\r\n              {/if}\r\n            </div>\r\n            \r\n            <div class=\"action-section\">\r\n              {#if req.accepted_by_teacher}\r\n                <div class=\"accepted-indicator\">\r\n                  <span class=\"check-icon\">✓</span>\r\n                  <span>Priimta</span>\r\n                </div>\r\n              {:else}\r\n                <button \r\n                  class=\"accept-button\"\r\n                  on:click={() => handleAcceptRequest(req.id)}\r\n                >\r\n                  Priimti užklausą\r\n                </button>\r\n              {/if}\r\n            </div>\r\n          </div>\r\n        </div>\r\n      {/each}\r\n    </div>\r\n  {/each}\r\n{/if}\r\n","<script>\r\n    export let students = [];\r\n</script>\r\n\r\n<style>\r\n    .students-container {\r\n        font-size: 0.9rem;\r\n        color: #333;\r\n        margin-bottom: 0.8rem;\r\n    }\r\n    \r\n    .students-label {\r\n        font-weight: 600;\r\n        margin-bottom: 0.3rem;\r\n        color: #555;\r\n    }\r\n    \r\n    .students-list {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: 0.5rem;\r\n    }\r\n    \r\n    .student-item {\r\n        background-color: #f8f9fa;\r\n        padding: 0.25rem 0.5rem;\r\n        border-radius: 4px;\r\n        border: 1px solid #e9ecef;\r\n        font-size: 0.85rem;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 0.3rem;\r\n    }\r\n    \r\n    .student-name {\r\n        color: #333;\r\n    }\r\n    \r\n    .student-grade {\r\n        background-color: #fab45a;\r\n        color: #000;\r\n        padding: 0.1rem 0.4rem;\r\n        border-radius: 3px;\r\n        font-weight: 600;\r\n        font-size: 0.75rem;\r\n        min-width: 1.5rem;\r\n        text-align: center;\r\n    }\r\n</style>\r\n\r\n{#if students && students.length > 0}\r\n    <div class=\"students-container\">\r\n        <div class=\"students-label\">Mokiniai:</div>\r\n        <div class=\"students-list\">\r\n            {#each students as student}\r\n                <div class=\"student-item\">\r\n                    <span class=\"student-name\">\r\n                        {student.full_name || student.username}\r\n                    </span>\r\n                    {#if student.grade}\r\n                        <span class=\"student-grade\">\r\n                            {student.grade === 'university' ? 'Univ' : student.grade}\r\n                        </span>\r\n                    {/if}\r\n                </div>\r\n            {/each}\r\n        </div>\r\n    </div>\r\n{/if}\r\n","<script>\r\n  import { createEventDispatcher } from 'svelte';\r\n  export let sections = [];\r\n  export let headings = [];\r\n  export let readonly = false;\r\n  export let matchingAvailable = true;\r\n  const dispatch = createEventDispatcher();\r\n  const titleIdeas = ['Namų darbai', 'Pamokos tema', 'Spragos', 'Pažanga', 'Kas pavyko', 'Kitos pamokos planas', 'Mokinio įsitraukimas'];\r\n  let focusedTitleId = null;\r\n  let titleFields = {}, commentFields = {};\r\n\r\n  function chooseTitle(index, title) {\r\n    update(index, 'title', title);\r\n    focusedTitleId = null;\r\n    commentFields[sections[index].id]?.focus();\r\n  }\r\n\r\n  function dismissIdeas(event, sectionId) {\r\n    if (event.key !== 'Escape' || focusedTitleId !== sectionId) return;\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    titleFields[sectionId]?.focus();\r\n    focusedTitleId = null;\r\n  }\r\n\r\n  function change(next, nextHeadings) {\r\n    dispatch('change', { sections: next, ...(nextHeadings === undefined ? {} : { headings: nextHeadings }) });\r\n  }\r\n  function update(index, field, value) {\r\n    const row = sections[index];\r\n    const next = sections.map((item, i) => i === index ? { ...item, [field]: value } : item);\r\n    const recurring = field === 'title' && headings.some(item => item.id === row.id);\r\n    change(next, recurring ? headings.map(item => item.id === row.id ? { ...item, title: value } : item) : undefined);\r\n  }\r\n  function toggle(row, checked) {\r\n    change(sections, checked ? [...headings, { id: row.id, title: row.title }] : headings.filter(item => item.id !== row.id));\r\n  }\r\n  function remove(row) {\r\n    change(sections.filter(item => item.id !== row.id), headings.some(item => item.id === row.id) ? headings.filter(item => item.id !== row.id) : undefined);\r\n  }\r\n  function move(index, offset) {\r\n    const next = [...sections];\r\n    [next[index], next[index + offset]] = [next[index + offset], next[index]];\r\n    const ids = new Set(next.map(row => row.id));\r\n    const ordered = next.filter(row => headings.some(heading => heading.id === row.id)).map(row => headings.find(heading => heading.id === row.id));\r\n    const newHeadings = [...ordered, ...headings.filter(row => !ids.has(row.id))];\r\n    change(next, JSON.stringify(newHeadings) === JSON.stringify(headings) ? undefined : newHeadings);\r\n  }\r\n</script>\r\n\r\n<div class=\"note-sections\">\r\n  {#each sections as section, index (section.id)}\r\n    <section class=\"note-section\" aria-label={`Skyrius ${index + 1}`}>\r\n      {#if readonly}\r\n        <h4>{section.title || 'Be pavadinimo'}</h4>\r\n        <p class=\"note-text\">{section.text || 'Komentaro nėra'}</p>\r\n      {:else}\r\n        <div class=\"title-editor\" on:focusin={() => focusedTitleId = section.id}\r\n          on:focusout={event => { if (!event.currentTarget.contains(event.relatedTarget)) focusedTitleId = null; }}>\r\n          <label>Skyriaus pavadinimas\r\n            <input maxlength=\"200\" value={section.title} bind:this={titleFields[section.id]}\r\n              on:keydown={event => dismissIdeas(event, section.id)}\r\n              on:input={event => update(index, 'title', event.target.value)} />\r\n          </label>\r\n          {#if focusedTitleId === section.id}\r\n            <div class=\"title-ideas\" role=\"group\" aria-label=\"Siūlomi skyrių pavadinimai\">\r\n              <p>Idėjos skyriaus pavadinimui</p>\r\n              <div class=\"idea-options\">\r\n                {#each titleIdeas as idea}\r\n                  <button type=\"button\" on:keydown={event => dismissIdeas(event, section.id)} on:click={() => chooseTitle(index, idea)}>{idea}</button>\r\n                {/each}\r\n              </div>\r\n            </div>\r\n          {/if}\r\n        </div>\r\n        <label>Komentaras\r\n          <textarea rows=\"4\" value={section.text} bind:this={commentFields[section.id]} on:input={event => update(index, 'text', event.target.value)}></textarea>\r\n        </label>\r\n        <label class=\"recurring\"><input type=\"checkbox\" checked={headings.some(row => row.id === section.id)} disabled={!matchingAvailable}\r\n          on:change={event => toggle(section, event.target.checked)} /> Kartoti naujuose užrašuose</label>\r\n        <div class=\"section-actions\">\r\n          <button type=\"button\" disabled={index === 0} aria-label={`Perkelti skyrių ${index + 1} aukštyn`} on:click={() => move(index, -1)}>↑</button>\r\n          <button type=\"button\" disabled={index === sections.length - 1} aria-label={`Perkelti skyrių ${index + 1} žemyn`} on:click={() => move(index, 1)}>↓</button>\r\n          <button type=\"button\" on:click={() => remove(section)}>Pašalinti skyrių</button>\r\n        </div>\r\n      {/if}\r\n    </section>\r\n  {/each}\r\n  {#if !readonly}\r\n    <button type=\"button\" disabled={sections.length >= 100} on:click={() => change([...sections, { id: crypto.randomUUID(), title: '', text: '' }])}>Pridėti skyrių</button>\r\n  {:else if sections.length === 0}\r\n    <p>Skyrių nėra.</p>\r\n  {/if}\r\n</div>\r\n\r\n<style>\r\n  .note-section { padding: 16px 0; border-bottom: 1px solid #dedbcf; }\r\n  .title-editor { position: relative; margin-bottom: 12px; }\r\n  .title-editor > label { margin-bottom: 0; }\r\n  .title-ideas { position: absolute; z-index: 5; top: calc(100% + 4px); left: 0; right: 0; padding: 12px; background: #faf9f3; border: 1px solid #a8a99d; border-radius: 6px; box-shadow: 0 4px 12px #0002; }\r\n  .title-ideas p { margin: 0 0 8px; font-size: 13px; color: #4b5a37; }\r\n  .idea-options { display: flex; flex-wrap: wrap; gap: 6px; }\r\n  .idea-options button { padding: 7px 10px; min-height: 36px; font-size: 13px; text-align: left; }\r\n  .idea-options button:hover, .idea-options button:focus-visible { background: #dfe8d2; border-color: #50633c; }\r\n  label { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; font-size: 14px; font-weight: 600; }\r\n  input:not([type=checkbox]), textarea { box-sizing: border-box; width: 100%; background: #fff; color: #24251f; border: 1px solid #a8a99d; border-radius: 5px; padding: 10px; font: inherit; }\r\n  textarea { resize: vertical; min-height: 100px; font-weight: 400; }\r\n  .recurring { flex-direction: row; align-items: center; font-weight: 400; }\r\n  .section-actions { display: flex; gap: 8px; flex-wrap: wrap; }\r\n  button { padding: 9px 12px; min-height: 40px; border: 1px solid #989b8a; background: #f4f3ea; color: #24251f; border-radius: 5px; cursor: pointer; }\r\n  button:disabled { opacity: .45; cursor: default; }\r\n  .note-sections > button { margin-top: 16px; }\r\n  .note-text { white-space: pre-wrap; overflow-wrap: anywhere; line-height: 1.6; }\r\n  h4 { margin: 0; overflow-wrap: anywhere; }\r\n</style>\r\n","const ROOT = '/studentplayground/api/teacher/personal-notes/classes';\r\nconst copy = value => JSON.parse(JSON.stringify(value));\r\n\r\nexport function createPersonalNotesApi({ apiBase, token, fetchImpl = fetch }) {\r\n  async function request(path, method = 'GET', payload) {\r\n    const response = await fetchImpl(`${apiBase}${path}`, {\r\n      method, cache: 'no-store', headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },\r\n      ...(payload === undefined ? {} : { body: JSON.stringify(payload) }),\r\n    });\r\n    if (response.status === 204) return null;\r\n    const data = await response.json().catch(() => ({}));\r\n    if (!response.ok) {\r\n      const error = new Error(typeof data.detail === 'string' ? data.detail : 'Nepavyko išsaugoti arba įkelti užrašų. Bandykite dar kartą.');\r\n      error.status = response.status;\r\n      throw error;\r\n    }\r\n    return data;\r\n  }\r\n  const classPath = event => `${ROOT}/${encodeURIComponent(event)}/`;\r\n  return {\r\n    read: event => request(classPath(event)),\r\n    save: (event, payload) => request(classPath(event), 'PUT', payload),\r\n    remove: (event, revision) => request(classPath(event), 'DELETE', { revision }),\r\n    history: (event, cursor) => request(`${classPath(event)}history/${cursor ? `?cursor=${encodeURIComponent(cursor)}` : ''}`),\r\n    template: (event, payload) => request(`${classPath(event)}recurring-sections/`, 'PATCH', payload),\r\n    adminList: (teacher, cursor) => request(`/studentplayground/api/admin/teachers/${teacher}/personal-notes/${cursor ? `?cursor=${encodeURIComponent(cursor)}` : ''}`),\r\n    adminRead: (teacher, note) => request(`/studentplayground/api/admin/teachers/${teacher}/personal-notes/${note}/`),\r\n  };\r\n}\r\n\r\n/** Serialized note/template saves. Edits made in flight remain dirty until acknowledged. */\r\nexport function createNoteAutosaver({ initial, writeNote, writeTemplate, onChange = () => {}, delay = 600 }) {\r\n  let noteGeneration = 0, savedNoteGeneration = 0, templateGeneration = 0, savedTemplateGeneration = 0;\r\n  let timer, running, disposed = false;\r\n  const state = {\r\n    sections: copy(initial.sections), headings: copy(initial.template.headings),\r\n    revision: initial.revision, templateRevision: initial.template.revision,\r\n    exists: initial.exists, dirty: false, saving: false, error: '', conflict: false,\r\n  };\r\n  function notify() {\r\n    state.dirty = noteGeneration !== savedNoteGeneration || templateGeneration !== savedTemplateGeneration;\r\n    if (!disposed) onChange({ ...state });\r\n  }\r\n  async function run() {\r\n    state.saving = true;\r\n    state.error = '';\r\n    notify();\r\n    try {\r\n      while (state.dirty && !disposed) {\r\n        if (noteGeneration !== savedNoteGeneration) {\r\n          const generation = noteGeneration;\r\n          const result = await writeNote({ revision: state.revision, sections: copy(state.sections) });\r\n          state.revision = result.revision;\r\n          state.exists = true;\r\n          savedNoteGeneration = generation;\r\n        }\r\n        if (templateGeneration !== savedTemplateGeneration) {\r\n          const generation = templateGeneration;\r\n          const result = await writeTemplate({ revision: state.templateRevision, headings: copy(state.headings) });\r\n          state.templateRevision = result.revision;\r\n          savedTemplateGeneration = generation;\r\n        }\r\n        notify();\r\n      }\r\n      return !state.dirty;\r\n    } catch (error) {\r\n      state.error = error.message;\r\n      state.conflict = error.status === 409;\r\n      return false;\r\n    } finally {\r\n      state.saving = false;\r\n      notify();\r\n    }\r\n  }\r\n  return {\r\n    state,\r\n    edit(sections, headings) {\r\n      state.sections = copy(sections);\r\n      noteGeneration++;\r\n      if (headings !== undefined) { state.headings = copy(headings); templateGeneration++; }\r\n      notify();\r\n      clearTimeout(timer);\r\n      if (!state.conflict) timer = setTimeout(() => this.flush(), delay);\r\n    },\r\n    async flush() {\r\n      clearTimeout(timer);\r\n      if (running) return running;\r\n      if (state.conflict) return false;\r\n      if (!state.dirty) return true;\r\n      running = run();\r\n      try { return await running; } finally { running = null; }\r\n    },\r\n    dispose() { disposed = true; clearTimeout(timer); },\r\n  };\r\n}\r\n\r\nexport function classDescription(info) {\r\n  if (!info) return '';\r\n  const date = info.starts_at ? new Intl.DateTimeFormat('lt-LT', {\r\n    timeZone: 'Europe/Vilnius', dateStyle: 'medium', timeStyle: 'short',\r\n  }).format(new Date(info.starts_at)) : 'Laikas nenurodytas';\r\n  return `${date} · ${info.students.map(row => row.name).join(', ')}`;\r\n}\r\n","<script>\r\n  import { createEventDispatcher, onMount, onDestroy } from 'svelte';\r\n  import PersonalNoteSections from './PersonalNoteSections.svelte';\r\n  import PersonalNoteHistory from './PersonalNoteHistory.svelte';\r\n  import { createPersonalNotesApi, createNoteAutosaver, classDescription } from './personalNotes.js';\r\n  import { getApiBase } from './apiBase.js';\r\n  import { registerPersonalNotesNavigationGuard } from './personalNotesNavigation.js';\r\n\r\n  export let anchorEventId;\r\n  const dispatch = createEventDispatcher();\r\n  const api = createPersonalNotesApi({ apiBase: getApiBase(), token: localStorage.getItem('jwtToken') });\r\n  let panel, closeButton, selectedEventId = anchorEventId;\r\n  let note = null, draft = null, saver, loading = true, loadError = '', actionError = '';\r\n  let historyRows = [], historyCursor = null, historyLoading = false, historyError = '';\r\n  let destroyed = false, loadSequence = 0, busy = false;\r\n\r\n  async function loadSelected(eventId) {\r\n    const sequence = ++loadSequence;\r\n    loading = true;\r\n    loadError = '';\r\n    actionError = '';\r\n    saver?.dispose();\r\n    saver = null;\r\n    draft = null;\r\n    selectedEventId = eventId;\r\n    try {\r\n      const result = await api.read(eventId);\r\n      if (destroyed || sequence !== loadSequence) return;\r\n      note = result;\r\n      let emittedRevision = result.revision;\r\n      saver = createNoteAutosaver({ initial: result,\r\n        writeNote: payload => api.save(eventId, payload),\r\n        writeTemplate: payload => api.template(eventId, payload),\r\n        onChange: state => {\r\n          draft = state;\r\n          if (state.revision !== emittedRevision) {\r\n            emittedRevision = state.revision;\r\n            historyRows = historyRows.map(row => row.event_id === eventId ? { ...row, has_note: state.exists } : row);\r\n            dispatch('notechange', { eventId, exists: state.exists });\r\n          }\r\n        },\r\n      });\r\n      draft = { ...saver.state };\r\n    } catch (error) {\r\n      if (!destroyed && sequence === loadSequence) loadError = error.message;\r\n    } finally {\r\n      if (!destroyed && sequence === loadSequence) loading = false;\r\n    }\r\n  }\r\n\r\n  async function loadHistory(reset = false) {\r\n    if (historyLoading) return;\r\n    historyLoading = true;\r\n    historyError = '';\r\n    try {\r\n      const result = await api.history(anchorEventId, reset ? null : historyCursor);\r\n      if (destroyed) return;\r\n      const combined = reset ? result.results : [...historyRows, ...result.results];\r\n      historyRows = [...new Map(combined.map(row => [row.event_id, row])).values()];\r\n      historyCursor = result.next_cursor;\r\n    } catch (error) { if (!destroyed) historyError = error.message; }\r\n    finally { if (!destroyed) historyLoading = false; }\r\n  }\r\n\r\n  export async function flush() { return saver ? saver.flush() : true; }\r\n\r\n  export async function requestClose() {\r\n    if (busy) return false;\r\n    busy = true;\r\n    try {\r\n      if (!await flush()) return false;\r\n      dispatch('close');\r\n      return true;\r\n    } finally { busy = false; }\r\n  }\r\n\r\n  async function select(eventId) {\r\n    if (busy || loading || selectedEventId === eventId) return;\r\n    busy = true;\r\n    try { if (await flush()) await loadSelected(eventId); }\r\n    finally { busy = false; }\r\n  }\r\n\r\n  async function discard() {\r\n    if (busy || draft?.saving || !window.confirm('Atmesti neišsaugotus pakeitimus ir įkelti išsaugotą versiją?')) return;\r\n    await loadSelected(selectedEventId);\r\n  }\r\n\r\n  async function removeNote() {\r\n    if (busy || !window.confirm('Ištrinti šios pamokos asmeninį užrašą su visais skyriais? Pasikartojantys skyriai liks.')) return;\r\n    busy = true;\r\n    actionError = '';\r\n    try {\r\n      if (!await flush()) return;\r\n      await api.remove(selectedEventId, saver.state.revision);\r\n      dispatch('notechange', { eventId: selectedEventId, exists: false });\r\n      await loadSelected(selectedEventId);\r\n      await loadHistory(true);\r\n    } catch (error) { actionError = error.message; }\r\n    finally { busy = false; }\r\n  }\r\n\r\n  function beforeUnload(event) {\r\n    if (!draft?.dirty && !draft?.saving) return;\r\n    event.preventDefault();\r\n    event.returnValue = '';\r\n  }\r\n\r\n  function keydown(event) {\r\n    if (event.key === 'Escape') { event.preventDefault(); requestClose(); }\r\n    if (event.key !== 'Tab' || !panel) return;\r\n    const controls = [...panel.querySelectorAll('button:not(:disabled), input:not(:disabled), textarea, a[href], summary')].filter(node => node.getClientRects().length);\r\n    if (!controls.length) return;\r\n    if (event.shiftKey && document.activeElement === controls[0]) { event.preventDefault(); controls[controls.length - 1].focus(); }\r\n    else if (!event.shiftKey && document.activeElement === controls[controls.length - 1]) { event.preventDefault(); controls[0].focus(); }\r\n  }\r\n\r\n  onMount(() => {\r\n    closeButton.focus();\r\n    loadSelected(anchorEventId);\r\n    loadHistory(true);\r\n    return registerPersonalNotesNavigationGuard({ isDirty: () => draft?.dirty || draft?.saving, flush });\r\n  });\r\n  onDestroy(() => { destroyed = true; loadSequence++; saver?.dispose(); });\r\n</script>\r\n\r\n<svelte:window on:beforeunload={beforeUnload} />\r\n\r\n<aside class=\"personal-notes-panel\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"personal-notes-heading\" bind:this={panel} on:keydown={keydown}>\r\n  <header>\r\n    <h2 id=\"personal-notes-heading\">Asmeniniai pamokos užrašai</h2>\r\n    <button type=\"button\" class=\"close\" aria-label=\"Uždaryti užrašus\" on:click={requestClose} disabled={busy} bind:this={closeButton}>×</button>\r\n  </header>\r\n  <p class=\"privacy\">Matomi tik jums ir administratoriams.</p>\r\n  <div class=\"panel-scroll\">\r\n    {#if loading}<p>Įkeliami užrašai...</p>{/if}\r\n    {#if loadError}\r\n      <p role=\"alert\">{loadError}</p>\r\n      <button type=\"button\" on:click={() => loadSelected(selectedEventId)}>Bandyti dar kartą</button>\r\n    {/if}\r\n    {#if note && draft && !loading}\r\n      <section class=\"selected-class\" aria-label=\"Pasirinkta pamoka\">\r\n        <h3>{note.class_info.title}</h3><p>{classDescription(note.class_info)}</p>\r\n        <p>{note.class_info.subject || 'Neatpažintas dalykas'}</p>\r\n      </section>\r\n      {#if !note.matching_available}\r\n        <p class=\"hint\">Užrašai skirti tik šiai pamokai. Istorijai ir pasikartojantiems skyriams reikia atpažinto dalyko ir mokinių.</p>\r\n      {/if}\r\n      <p class=\"save-status\" role=\"status\" aria-live=\"polite\">{draft.saving ? 'Saugoma...' : draft.error ? 'Nepavyko išsaugoti' : draft.dirty ? 'Neišsaugoti pakeitimai' : draft.exists ? 'Išsaugota' : 'Nauji užrašai'}</p>\r\n      {#if draft.error}\r\n        <div class=\"save-error\" role=\"alert\">\r\n          <p>{draft.conflict ? 'Užrašai pakeisti kitame lange. Nukopijuokite savo juodraštį ir įkelkite naujausią versiją.' : draft.error}</p>\r\n          {#if !draft.conflict}<button type=\"button\" disabled={draft.saving} on:click={flush}>Bandyti dar kartą</button>{/if}\r\n          <details><summary>Juodraščio kopija</summary>\r\n            <textarea readonly aria-label=\"Juodraščio kopija\" rows=\"8\" value={draft.sections.map(row => `${row.title}\\n${row.text}`).join('\\n\\n')}></textarea>\r\n          </details>\r\n        </div>\r\n      {/if}\r\n      <PersonalNoteSections sections={draft.sections} headings={draft.headings} matchingAvailable={note.matching_available}\r\n        on:change={event => saver.edit(event.detail.sections, event.detail.headings)} />\r\n      <div class=\"note-actions\">\r\n        {#if draft.exists}<button type=\"button\" class=\"delete-note-danger\" disabled={busy || draft.saving} on:click={removeNote}>Ištrinti užrašą</button>{/if}\r\n        {#if draft.dirty}<button type=\"button\" disabled={busy || draft.saving} on:click={discard}>{draft.conflict ? 'Įkelti naujausią versiją' : 'Atmesti juodraštį'}</button>{/if}\r\n      </div>\r\n    {/if}\r\n    {#if actionError}<p role=\"alert\">{actionError}</p>{/if}\r\n    <PersonalNoteHistory rows={historyRows} selected={selectedEventId} nextCursor={historyCursor} loading={historyLoading} error={historyError}\r\n      on:select={event => select(event.detail)} on:more={() => loadHistory()} />\r\n  </div>\r\n</aside>\r\n\r\n<style>\r\n  .personal-notes-panel { position: fixed; z-index: 1100; right: 0; top: 0; bottom: 0; width: min(560px, 100vw); box-sizing: border-box; display: flex; flex-direction: column; color: #24251f; background: #faf9f3; box-shadow: -5px 0 24px #0002; border-left: 1px solid #cdcebf; font-family: inherit; }\r\n  header { display: flex; gap: 12px; align-items: center; justify-content: space-between; padding: 20px 24px 0; }\r\n  h2 { font-size: 21px; margin: 0; }\r\n  h3 { overflow-wrap: anywhere; }\r\n  .privacy { margin: 8px 24px 16px; font-size: 13px; }\r\n  .panel-scroll { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 0 24px 28px; }\r\n  .selected-class { border-bottom: 1px solid #dedbcf; padding-bottom: 12px; }\r\n  .selected-class p { margin: 6px 0; font-size: 14px; }\r\n  .save-status { font-size: 13px; color: #4b5a37; }\r\n  .save-error { background: #f9e7df; border: 1px solid #b05b40; padding: 12px; border-radius: 5px; }\r\n  .save-error p { margin-top: 0; }\r\n  .save-error textarea { box-sizing: border-box; width: 100%; }\r\n  .hint { font-size: 13px; }\r\n  .note-actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 18px; }\r\n  button { padding: 9px 12px; min-height: 40px; border: 1px solid #989b8a; background: #f4f3ea; color: #24251f; border-radius: 5px; cursor: pointer; font: inherit; font-size: 14px; }\r\n  button:disabled { opacity: .5; cursor: default; }\r\n  .delete-note-danger { background: #fbecea; border-color: #d6a09b; color: #9b3530; }\r\n  .delete-note-danger:hover:not(:disabled), .delete-note-danger:focus-visible { background: #f5d9d5; border-color: #bd6c65; }\r\n  .close { font-size: 26px; min-width: 44px; }\r\n  @media (max-width: 600px) { header { padding: 16px 16px 0; } .privacy { margin-left: 16px; } .panel-scroll { padding: 0 16px 24px; } }\r\n</style>\r\n","<script>\r\n  import { createEventDispatcher } from 'svelte';\r\n  import { classDescription } from './personalNotes.js';\r\n  export let rows = [];\r\n  export let selected = '';\r\n  export let loading = false;\r\n  export let nextCursor = null;\r\n  export let error = '';\r\n  const dispatch = createEventDispatcher();\r\n</script>\r\n\r\n<section class=\"note-history\" aria-label=\"Pamokų istorija\">\r\n  <h3>Pamokų istorija</h3>\r\n  {#if error}<p role=\"alert\">{error}</p><button type=\"button\" on:click={() => dispatch('more')}>Bandyti dar kartą</button>{/if}\r\n  {#if rows.length === 0 && !loading && !error}<p>Ankstesnių pamokų ar užrašų nėra.</p>{/if}\r\n  <ul>\r\n    {#each rows as row (row.event_id)}\r\n      <li><button type=\"button\" class:selected={selected === row.event_id} aria-current={selected === row.event_id ? 'true' : undefined}\r\n        on:click={() => dispatch('select', row.event_id)}>\r\n        <strong>{row.class_info.title}</strong>\r\n        <span>{classDescription(row.class_info)}</span>\r\n        <small>{row.has_note ? 'Yra užrašai' : 'Užrašų dar nėra'}{new Date(row.class_info.starts_at) > new Date() ? ' · Būsima pamoka' : ''}</small>\r\n      </button></li>\r\n    {/each}\r\n  </ul>\r\n  {#if nextCursor}<button type=\"button\" disabled={loading} on:click={() => dispatch('more')}>Rodyti daugiau</button>{/if}\r\n  {#if loading}<p>Įkeliama istorija...</p>{/if}\r\n</section>\r\n\r\n<style>\r\n  .note-history { border-top: 2px solid #cdcebf; margin-top: 28px; padding-top: 8px; }\r\n  ul { padding: 0; list-style: none; }\r\n  li { margin: 8px 0; }\r\n  button { width: 100%; text-align: left; display: flex; flex-direction: column; gap: 5px; padding: 12px; border: 1px solid #dedbcf; background: #fff; color: #24251f; border-radius: 6px; cursor: pointer; overflow-wrap: anywhere; }\r\n  button.selected { border-color: #50633c; background: #edf0e5; }\r\n  span, small { font-size: 13px; }\r\n</style>\r\n","<script>\r\n    import ClassName from './ClassNameComponent.svelte';\r\n    import TeacherName from './TeacherNameComponent.svelte';\r\n    import TimeShower from './TimeShowerComponent.svelte';\r\n    import SendEmailLink from './RecieveEmailComponent.svelte';\r\n    import ButtonToJoinClass from './ButtonToJoinClassComponent.svelte'\r\n    import { push } from 'svelte-spa-router';\r\n    import { onMount } from 'svelte';\r\n    import ButtonToJoinClassComponent from './ButtonToJoinClassComponent.svelte';\r\n    import FilterButtons from './FilterButtons.svelte'; // Import your component\r\n    import RescheduleButton from './ButtonToRescheduleComponent.svelte'\r\n    import ButtonToComment from './ButtonToLeaveCommentComponent.svelte'\r\n    import NavBarReusable from './NavbarReusable.svelte';\r\n    import RescheduleRequestsContent from './RescheduleRequestsContent.svelte';\r\n    import TeacherRegistrationRequestsComponent from './TeacherRegistrationRequestsComponent.svelte';\r\n    import StudentsWithGradesComponent from './StudentsWithGradesComponent.svelte';\r\n    import TeacherPersonalNotesPanel from './TeacherPersonalNotesPanel.svelte';\r\n    import { tick } from 'svelte';\r\n    let notesEventId = null;\r\n    let notesPanel;\r\n    let notesTrigger;\r\n    async function openPersonalNotes(event, trigger) {\r\n      if (notesEventId && !await notesPanel.requestClose()) return;\r\n      await tick();\r\n      notesTrigger = trigger;\r\n      notesEventId = event.id;\r\n    }\r\n    async function closePersonalNotes() {\r\n      notesEventId = null;\r\n      await tick();\r\n      notesTrigger?.focus();\r\n    }\r\n    function personalNoteChanged(event) {\r\n      events = events.map(row => row.id === event.detail.eventId ? { ...row, has_personal_note: event.detail.exists } : row);\r\n    }\r\n    let events = [];\r\n    let currentFilter = 'past_classes';\r\n    let isUserTeacher = false;\r\n    let isLoadingEvents = true;\r\n    let scheduleError = '';\r\n    let activeTab = 'schedule'; // 'schedule', 'reschedule-requests', or 'registration-requests'\r\n    let unacceptedRequestsCount = 0;\r\n    let unacceptedRescheduleRequestsCount = 0;\r\n    \r\n    // Function to switch between tabs\r\n    async function switchTab(tab) {\r\n        if (notesEventId && !await notesPanel.requestClose()) return;\r\n        activeTab = tab;\r\n        // Refresh counts when switching away from specific tabs\r\n        if (tab !== 'registration-requests' && isUserTeacher) {\r\n            fetchUnacceptedRequestsCount();\r\n        }\r\n        if (tab !== 'reschedule-requests') {\r\n            fetchUnacceptedRescheduleRequestsCount();\r\n        }\r\n    }\r\n\r\n    // Function to fetch unaccepted registration requests count\r\n    const fetchUnacceptedRequestsCount = async () => {\r\n        if (!isUserTeacher) return;\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        try {\r\n            const response = await fetch('/studentplayground/api/teacher/class-registration-requests/', {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                let count = 0;\r\n                \r\n                // Count unaccepted requests across all days\r\n                Object.values(data).forEach(dayRequests => {\r\n                    dayRequests.forEach(req => {\r\n                        if (!req.accepted_by_teacher) {\r\n                            count++;\r\n                        }\r\n                    });\r\n                });\r\n                \r\n                unacceptedRequestsCount = count;\r\n            }\r\n        } catch (error) {\r\n            console.error('Error fetching registration requests count:', error);\r\n        }\r\n    };\r\n\r\n    // Function to fetch unaccepted reschedule requests count\r\n    const fetchUnacceptedRescheduleRequestsCount = async () => {\r\n        const token = localStorage.getItem('jwtToken');\r\n        try {\r\n            const response = await fetch('/studentplayground/api/reschedule-requests-count/', {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                unacceptedRescheduleRequestsCount = data.pending_count;\r\n            }\r\n        } catch (error) {\r\n            console.error('Error fetching reschedule requests count:', error);\r\n        }\r\n    };\r\n\r\n    \r\n    // Function to change the link text when clicked\r\n    function changeLinkText(event) {\r\n      const link = event.target;\r\n      link.textContent = \"Pamokos informacija išsiųsta!\";\r\n    }\r\n    function hasClassStarted(eventTime) {\r\n      const match = eventTime.match(/^(\\d{4}-\\d{2}-\\d{2})\\s+(\\d{2}:\\d{2})/);\r\n      if (!match) return false;\r\n\r\n      const startTime = new Date(`${match[1]}T${match[2]}:00`);\r\n      const nowInLithuania = new Date(new Date().toLocaleString(\"sv-SE\", { timeZone: \"Europe/Vilnius\" }));\r\n      return startTime <= nowInLithuania;\r\n    }\r\n\r\n    function isPastEvent(eventTime) {\r\n      console.log(\"THis is the event time RAW\");\r\n      console.log(eventTime);\r\n      \r\n      // Format the event time to get the CLASS END TIME (not start time)\r\n      const validEventTime = formatEventTime(eventTime)\r\n      \r\n      console.log(\"Event END time formatted:\", validEventTime);\r\n      \r\n      if (!validEventTime) {\r\n        console.error(\"Could not parse event time:\", eventTime);\r\n        return false; // Default to not past if we can't parse\r\n      }\r\n      \r\n      try {\r\n        // Parse the Lithuanian time string and create Date objects in Lithuanian timezone\r\n        const [datePart, timePart] = validEventTime.split('T');\r\n        \r\n        // Create event date by treating the input as Lithuanian timezone\r\n        // We need to parse it and then convert to UTC for accurate comparison\r\n        const eventDateTime = new Date(validEventTime);\r\n        \r\n        // The key insight: the backend provides time in Lithuanian timezone, \r\n        // but JavaScript Date constructor treats it as local timezone\r\n        // So we need to adjust for the difference\r\n        \r\n        // Get current time in Lithuanian timezone\r\n        const now = new Date();\r\n        const nowInLithuaniaStr = now.toLocaleString(\"sv-SE\", { timeZone: \"Europe/Vilnius\" });\r\n        const nowInLithuania = new Date(nowInLithuaniaStr);\r\n        \r\n        // Create event time in Lithuanian timezone using the same method\r\n        const eventInLithuaniaStr = validEventTime.replace('T', ' ');\r\n        const eventInLithuania = new Date(eventInLithuaniaStr);\r\n        \r\n        // Add 10-minute buffer for both teachers and students - they can leave comments 10 minutes before class ends\r\n        // This allows both to submit feedback if they finish early\r\n        const bufferMinutes = 10; // Apply 10-minute buffer for everyone\r\n        const eventWithBuffer = new Date(eventInLithuania.getTime() - (bufferMinutes * 60 * 1000));\r\n        \r\n        // Since both are now in the same reference frame, we can compare directly\r\n        console.log(\"Event END time (Lithuanian interpreted):\", eventInLithuania);\r\n        console.log(\"Event END time with buffer:\", eventWithBuffer);\r\n        console.log(\"Current time (Lithuanian interpreted):\", nowInLithuania);\r\n        console.log(\"Is past event (class ended + buffer):\", eventWithBuffer < nowInLithuania);\r\n    \r\n        // Check if the event is in the past (considering the 10-minute buffer for everyone)\r\n        return eventWithBuffer < nowInLithuania;\r\n        \r\n      } catch (error) {\r\n        console.error(\"Error parsing event time:\", error);\r\n        return false; // Default to not past if parsing fails\r\n      }\r\n  }\r\n    const formatDateTime = (datetime) => {\r\n        let parts = datetime.split(\" \");\r\n        let datePart = parts[0];\r\n        let timePart = parts[1];\r\n        let dayPart = parts[2];\r\n\r\n        let formattedDate = `${dayPart}<br>${datePart}`;\r\n            return { timePart, formattedDate };\r\n    };\r\n    function formatEventTime(eventTime) {\r\n      // Extract the date and time parts using a regular expression\r\n      const match = eventTime.match(/^(\\d{4}-\\d{2}-\\d{2})\\s+(\\d{2}:\\d{2})/);\r\n\r\n      if (!match) {\r\n          console.error(\"Invalid date format:\", eventTime);\r\n          return null; // Return null if the format doesn't match the expected pattern\r\n      }\r\n\r\n      const datePart = match[1]; // e.g., \"2024-09-06\"\r\n      const timePart = match[2]; // e.g., \"14:00\"\r\n\r\n      // FIXED: Since displayTime contains START time, but we need to check END time,\r\n      // add 1 hour to get the actual class end time\r\n      const [hours, minutes] = timePart.split(':').map(Number);\r\n      const startTime = new Date(`${datePart}T${timePart}:00`);\r\n      const endTime = new Date(startTime.getTime() + (60 * 60 * 1000)); // Add 1 hour\r\n      \r\n      // Format back to ISO string format for consistency\r\n      const endHours = endTime.getHours().toString().padStart(2, '0');\r\n      const endMinutes = endTime.getMinutes().toString().padStart(2, '0');\r\n      \r\n      return `${datePart}T${endHours}:${endMinutes}:00`;\r\n    }\r\n\r\n    const fetchUserRole = async () => {\r\n      const token = localStorage.getItem('jwtToken')\r\n      console.log(\"This is the token:)\")\r\n      console.log(token)\r\n      try {\r\n        const response = await fetch('/studentplayground/isUserTeacher/', {\r\n          method: 'GET',\r\n          headers: {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json'\r\n          }\r\n        });\r\n\r\n        if (response.ok) {\r\n          const data = await response.json();\r\n          isUserTeacher = data.isUserTeacher\r\n          console.log(\"THis is what returns for isUserTeacher:\")\r\n          console.log(isUserTeacher)// Assuming the role is returned in the JSON as { \"role\": \"Teacher\" }\r\n        } else {\r\n            if (response.status === 401) {\r\n                // If response is 401 Unauthorized, redirect to login\r\n                alert('Reikia prisijungti iš naujo.');\r\n                localStorage.removeItem('jwtToken'); // Optional: Clear any stored tokens\r\n                window.location.href = '#/about'; // Redirect to login page\r\n            } else {\r\n                // Handle other errors\r\n                alert('Error submitting form!');\r\n            }\r\n        }\r\n      } catch (error) {\r\n        console.error(\"Failed to fetch user role:\", error);\r\n        return null;\r\n      }\r\n    };\r\n\r\n    const fetchEvents = async () => {\r\n      const token = localStorage.getItem('jwtToken'); // Retrieve token from localStorage\r\n\r\n      isLoadingEvents = true;\r\n      scheduleError = '';\r\n\r\n      if (!token) {\r\n        console.error('No JWT token found. User might not be logged in.');\r\n        scheduleError = 'Nepavyko įkelti pamokų. Prisijunkite iš naujo.';\r\n        isLoadingEvents = false;\r\n        return;\r\n      }\r\n\r\n      try {\r\n        console.log(\"THis is within the picking, this is Teacher :))\")\r\n        console.log(isUserTeacher)\r\n        // Determine the URL based on the user's role\r\n        const url = isUserTeacher\r\n          ? `/teacher_playground/teacherSchedge/?filter=${currentFilter}`\r\n          : `/studentplayground/studentList/?filter=${currentFilter}`;\r\n\r\n        console.log(\"THis is the url we trynna get to:\")\r\n        console.log(url)\r\n\r\n        // Make the request\r\n        const response = await fetch(url, {\r\n          method: 'GET',\r\n          headers: {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json'\r\n          }\r\n        });\r\n        \r\n        if (response.ok) {\r\n          const data = await response.json();\r\n          events = data.events;\r\n        } else {\r\n            scheduleError = 'Nepavyko įkelti pamokų. Bandykite dar kartą.';\r\n            if (response.status === 401) {\r\n                // If response is 401 Unauthorized, redirect to login\r\n                alert('Reikia prisijungti iš naujo.');\r\n                localStorage.removeItem('jwtToken'); // Optional: Clear any stored tokens\r\n                window.location.href = '#/about'; // Redirect to login page\r\n            } else {\r\n                // Handle other errors\r\n                alert('Error submitting form!');\r\n            }\r\n        }\r\n      } catch (error) {\r\n        console.error(\"Failed to fetch events:\", error);\r\n        scheduleError = 'Nepavyko įkelti pamokų. Patikrinkite interneto ryšį ir bandykite dar kartą.';\r\n      } finally {\r\n        isLoadingEvents = false;\r\n      }\r\n    };\r\n\r\n\r\n  // Handle filter change event from FilterButtons component\r\n  const handleFilterChange = async (event) => {\r\n        if (notesEventId && !await notesPanel.requestClose()) return;\r\n        currentFilter = event.detail.filter; // Update the filter\r\n        fetchEvents(); // Fetch new events based on the filter\r\n    };\r\n\r\n// Fetch events when the component is mounted\r\nonMount(async () => {\r\n  await fetchUserRole();\r\n  console.log(\"THis is teacher value:D\")\r\n  console.log(isUserTeacher)\r\n  fetchEvents();\r\n  \r\n  // Fetch unaccepted requests count for teachers\r\n  if (isUserTeacher) {\r\n    fetchUnacceptedRequestsCount();\r\n  }\r\n  \r\n  // Fetch unaccepted reschedule requests count for all users\r\n  fetchUnacceptedRescheduleRequestsCount();\r\n  \r\n  // Check for URL parameters to auto-switch tabs\r\n  const urlParams = new URLSearchParams(window.location.search);\r\n  if (urlParams.get('tab') === 'reschedule' || window.location.hash.includes('reschedule')) {\r\n    activeTab = 'reschedule-requests';\r\n  } else if (urlParams.get('tab') === 'registration' || window.location.hash.includes('registration')) {\r\n    activeTab = 'registration-requests';\r\n  }\r\n})\r\n\r\nasync function handleClassJoin(event) {\r\n  try {\r\n    const token = localStorage.getItem('jwtToken');\r\n    // Track attendance first\r\n    const response = await fetch(`/studentplayground/track-attendance/${event.id}/`, {\r\n      method: 'POST',\r\n      headers: {\r\n        'Authorization': `Bearer ${token}`,\r\n        'Content-Type': 'application/json'\r\n      }\r\n    });\r\n\r\n    if (!response.ok) {\r\n      throw new Error('Failed to track attendance');\r\n    }\r\n\r\n    const data = await response.json();\r\n    // Redirect to the actual meeting link\r\n    window.open(data.redirect_url, '_blank');\r\n  } catch (error) {\r\n    console.error('Error tracking attendance:', error);\r\n    // If tracking fails, still allow them to join the class\r\n    window.open(event.nuoroda, '_blank');\r\n  }\r\n}\r\n</script>\r\n{#if notesEventId}\r\n  <TeacherPersonalNotesPanel anchorEventId={notesEventId} bind:this={notesPanel} on:close={closePersonalNotes} on:notechange={personalNoteChanged} />\r\n{/if}\r\n    \r\n    <style>\r\n      .cancelled-payable-label { color: #9b4039; font-weight: 700; }\r\n      \r\n      .classcontainer{\r\n        position: relative;\r\n        padding: 15px;\r\n        background-color: #eeebdb;\r\n        display: flex;\r\n        flex-direction: column;\r\n        margin-bottom:15px;\r\n        gap: 10px;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        border-radius: 8px;\r\n        flex: none;\r\n        color:black;\r\n        align-items: flex-start;\r\n\r\n      }\r\n\r\n      .personal-notes-trigger { align-self: flex-end; display: inline-flex; align-items: center; gap: 6px; min-height: 36px; padding: 7px 10px; border: 1px solid #9ca28f; border-radius: 6px; background: #faf9f3; color: #34402a; cursor: pointer; }\r\n      .personal-notes-trigger.has-note { background: #dfe8d2; border-color: #50633c; }\r\n      .notes-indicator { width: 7px; height: 7px; border-radius: 50%; background: #50633c; }\r\n      @media (min-width: 1100px) {\r\n        .teacher-schedule.notes-open { width: min(600px, calc(100vw - 608px)); margin-inline: auto; transform: translateX(-280px); }\r\n      }\r\n\r\n      .no-classes-message {\r\n        padding: 30px;\r\n        text-align: center;\r\n        background-color: #f8f9fa;\r\n        border-radius: 8px;\r\n        margin: 20px 0;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n      }\r\n\r\n      .no-classes-message p {\r\n        color: #6c757d;\r\n        font-size: 16px;\r\n        margin: 0;\r\n        font-weight: 500;\r\n      }\r\n\r\n      .reschedule-tab {\r\n        width: 100%;\r\n        margin-top: 10px;\r\n      }\r\n\r\n      .reschedule-tab-button {\r\n        width: 100%;\r\n        padding: 15px 20px;\r\n        border: 1px solid #ccc;\r\n        background: white;\r\n        cursor: pointer;\r\n        border-radius: 8px;\r\n        font-size: 16px;\r\n        font-weight: bold;\r\n        transition: background-color 0.3s, color 0.3s;\r\n        color: #000000;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        gap: 10px;\r\n        position: relative;\r\n      }\r\n\r\n      .reschedule-tab-button.active {\r\n        background-color: #fab45a;\r\n        color: black;\r\n        border-color: #fab45a;\r\n      }\r\n\r\n      .reschedule-tab-button:hover {\r\n        background-color: #fab45a;\r\n        color: black;\r\n      }\r\n\r\n      .teacher-registration-tab {\r\n        width: 100%;\r\n        margin-top: 10px;\r\n        margin-bottom: 10px;\r\n      }\r\n\r\n      .teacher-registration-button {\r\n        width: 100%;\r\n        padding: 15px 20px;\r\n        border: 1px solid #ccc;\r\n        background: white;\r\n        cursor: pointer;\r\n        border-radius: 8px;\r\n        font-size: 16px;\r\n        font-weight: bold;\r\n        transition: background-color 0.3s, color 0.3s;\r\n        color: #000000;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        gap: 10px;\r\n        position: relative;\r\n      }\r\n\r\n      .teacher-registration-button:hover {\r\n        background-color: #fab45a;\r\n        color: black;\r\n      }\r\n\r\n      .count-badge {\r\n        background-color: #dc3545;\r\n        color: white;\r\n        border-radius: 50%;\r\n        padding: 4px 8px;\r\n        font-size: 12px;\r\n        font-weight: bold;\r\n        min-width: 20px;\r\n        height: 20px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        line-height: 1;\r\n      }\r\n      \r\n    </style>\r\n    \r\n  \r\n    <div class=\"teacher-schedule\" class:notes-open={notesEventId !== null}>\r\n    <NavBarReusable label=\"Tvarkaraštis\" />\r\n\r\n    <!-- Teacher registration button - shown only for teachers -->\r\n    {#if isUserTeacher && activeTab === 'schedule'}\r\n        <div class=\"teacher-registration-tab\">\r\n            <button \r\n                class=\"teacher-registration-button\"\r\n                on:click={() => switchTab('registration-requests')}\r\n            >\r\n                <span>KLASIŲ REGISTRACIJOS</span>\r\n                {#if unacceptedRequestsCount > 0}\r\n                    <span class=\"count-badge\">{unacceptedRequestsCount}</span>\r\n                {/if}\r\n            </button>\r\n        </div>\r\n    {/if}\r\n\r\n    {#if activeTab === 'schedule'}\r\n        <FilterButtons \r\n            currentFilter={currentFilter} \r\n            beforeChange={async () => !notesEventId || await notesPanel.requestClose()}\r\n            on:filterChange={handleFilterChange} />\r\n    {/if}\r\n\r\n    {#if activeTab !== 'registration-requests'}\r\n        <div class=\"reschedule-tab\">\r\n            <button \r\n                class=\"reschedule-tab-button {activeTab === 'reschedule-requests' ? 'active' : ''}\"\r\n                on:click={() => switchTab(activeTab === 'reschedule-requests' ? 'schedule' : 'reschedule-requests')}\r\n            >\r\n                <span>{activeTab === 'reschedule-requests' ? 'ATGAL Į TVARKARAŠTĮ' : 'PAMOKŲ PAKEITIMAI'}</span>\r\n                {#if unacceptedRescheduleRequestsCount > 0 && activeTab !== 'reschedule-requests'}\r\n                    <span class=\"count-badge\">{unacceptedRescheduleRequestsCount}</span>\r\n                {/if}\r\n            </button>\r\n        </div>\r\n    {/if}\r\n\r\n    <!-- Back button for registration requests -->\r\n    {#if activeTab === 'registration-requests'}\r\n        <div class=\"reschedule-tab\">\r\n            <button \r\n                class=\"reschedule-tab-button active\"\r\n                on:click={() => switchTab('schedule')}\r\n            >\r\n                ATGAL Į TVARKARAŠTĮ\r\n            </button>\r\n        </div>\r\n    {/if}\r\n\r\n    {#if activeTab === 'schedule'}\r\n        <div class=\"classSection\">\r\n          {#if isLoadingEvents}\r\n            <div class=\"no-classes-message\">\r\n              <p>Kraunamos pamokos…</p>\r\n            </div>\r\n          {:else if scheduleError}\r\n            <div class=\"no-classes-message\" role=\"alert\">\r\n              <p>{scheduleError}</p>\r\n            </div>\r\n          {:else if events.length === 0}\r\n            <div class=\"no-classes-message\">\r\n              <p>Pamokų nerasta</p>\r\n            </div>\r\n          {:else}\r\n            {#each events as event}\r\n              <div class=\"classcontainer {isPastEvent(event.laikasDisp) ? 'past-event' : 'upcoming-event'}\">\r\n                {#if isUserTeacher}\r\n                  <button type=\"button\" class=\"personal-notes-trigger\" class:has-note={event.has_personal_note}\r\n                    aria-label={`Asmeniniai užrašai: ${event.pamoka}`} title={event.has_personal_note ? 'Peržiūrėti asmeninius užrašus' : 'Pridėti asmeninius užrašus'}\r\n                    on:click={click => openPersonalNotes(event, click.currentTarget)}>\r\n                    <i class=\"fa-solid fa-pencil\" aria-hidden=\"true\"></i>\r\n                    {#if event.has_personal_note}<span class=\"notes-indicator\" aria-hidden=\"true\"></span>{/if}\r\n                  </button>\r\n                {/if}\r\n                <!-- Render the class details -->\r\n                {#if event.cancelled_payable}\r\n                  <p class=\"cancellation-status cancelled-payable-label\" role=\"status\">{isUserTeacher ? 'Atšaukta – apmokama' : 'Atšaukta nesilaikant atšaukimo sąlygų'}</p>\r\n                  {#if !isUserTeacher}<p>Pamoka apmokama</p>{/if}\r\n                {/if}\r\n                {#each event.participants || [] as participant}\r\n                  {#if participant.participation_status === 'cancelled_payable' && !event.cancelled_payable}\r\n                    <p class=\"cancellation-status cancelled-payable-label\">{participant.name} – {isUserTeacher ? 'Atšaukė – apmokama' : 'Atšaukta nesilaikant atšaukimo sąlygų – apmokama'}</p>\r\n                  {/if}\r\n                {/each}\r\n                <ClassName name={event.pamoka} />\r\n                <TeacherName teacher={event.mokytojas}/>\r\n                <TimeShower \r\n                  time={formatDateTime(event.laikasDisp).timePart} \r\n                  date={formatDateTime(event.laikasDisp).formattedDate} \r\n                />\r\n                \r\n                <!-- Show students with grades for teachers -->\r\n                {#if isUserTeacher && event.students}\r\n                  <StudentsWithGradesComponent students={event.students} />\r\n                {/if}\r\n      \r\n                {#if event.can_participate !== false}\r\n                {#if !isPastEvent(event.laikasDisp)}\r\n                  <!-- Render components for upcoming events -->\r\n                  \r\n                  <ButtonToJoinClass \r\n                      link={event.nuoroda} \r\n                      classId={event.id}\r\n                      label=\"Jungtis į pamoką\" \r\n                  />\r\n                  <RescheduleButton classId={event.id} label=\"Keisti rezervaciją\" />\r\n                {/if}\r\n\r\n                {#if isPastEvent(event.laikasDisp) || (isUserTeacher && hasClassStarted(event.laikasDisp))}\r\n                  <!-- Teachers can leave feedback from class start alongside the existing actions. -->\r\n                  {#if event.note === 'nėra atsiliepimo' || !event.note}\r\n                      <ButtonToComment classId={event.id} classStart={isUserTeacher ? event.laikasRaw : null} label=\"Palikti Atsiliepimą\"></ButtonToComment>\r\n                  {:else}\r\n                      <ButtonToComment classId={event.id} classStart={isUserTeacher ? event.laikasRaw : null} label=\"Koreguoti Atsiliepimą\" buttonClass=\"koregouti\"></ButtonToComment>\r\n                  {/if}\r\n                {/if}\r\n                {/if}\r\n              </div>\r\n          {/each}\r\n          {/if}\r\n        </div>\r\n    {:else if activeTab === 'reschedule-requests'}\r\n        <RescheduleRequestsContent />\r\n    {:else if activeTab === 'registration-requests'}\r\n        <TeacherRegistrationRequestsComponent />\r\n    {/if}\r\n    </div>\r\n","<script>\r\n    import { createEventDispatcher } from 'svelte';\r\n  \r\n    // Initialize the dispatcher for sending events to the parent\r\n    const dispatch = createEventDispatcher();\r\n  \r\n    // Props\r\n    export let availableSlots = [];\r\n    \r\n    // State\r\n    let selectedSlot = null;\r\n    let groupedSlots = {};\r\n    \r\n    // Group slots by actual date for better display\r\n    $: {\r\n        groupedSlots = {};\r\n        availableSlots.forEach(slot => {\r\n            // Create a unique key combining date and day name\r\n            const dateKey = `${slot.date}|${slot.day_name}`;\r\n            if (!groupedSlots[dateKey]) {\r\n                groupedSlots[dateKey] = {\r\n                    date: slot.date,\r\n                    day_name: slot.day_name,\r\n                    slots: []\r\n                };\r\n            }\r\n            groupedSlots[dateKey].slots.push(slot);\r\n        });\r\n        \r\n        // Sort slots by time within each date group\r\n        Object.keys(groupedSlots).forEach(dateKey => {\r\n            groupedSlots[dateKey].slots.sort((a, b) => a.start_time.localeCompare(b.start_time));\r\n        });\r\n        \r\n        // Sort date groups chronologically (by actual date)\r\n        groupedSlots = Object.fromEntries(\r\n            Object.entries(groupedSlots).sort(([a], [b]) => {\r\n                const dateA = groupedSlots[a].date;\r\n                const dateB = groupedSlots[b].date;\r\n                return dateA.localeCompare(dateB);\r\n            })\r\n        );\r\n    }\r\n    \r\n    function selectSlot(slot) {\r\n        selectedSlot = slot;\r\n    }\r\n    \r\n    function handleSubmit() {\r\n        if (!selectedSlot) {\r\n            alert('Prašome pasirinkti laiką');\r\n            return;\r\n        }\r\n        \r\n        // Emit the selected datetime to the parent in the expected format\r\n        dispatch('submit', { datetime: selectedSlot.datetime_start });\r\n    }\r\n    \r\n    function translateDayName(englishDayName) {\r\n        const dayNames = {\r\n            'Monday': 'Pirmadienis',\r\n            'Tuesday': 'Antradienis', \r\n            'Wednesday': 'Trečiadienis',\r\n            'Thursday': 'Ketvirtadienis',\r\n            'Friday': 'Penktadienis',\r\n            'Saturday': 'Šeštadienis',\r\n            'Sunday': 'Sekmadienis'\r\n        };\r\n        \r\n        return dayNames[englishDayName] || englishDayName;\r\n    }\r\n    \r\n    function formatDate(dateStr) {\r\n        const date = new Date(dateStr);\r\n        const formattedDate = date.toLocaleDateString('lt-LT', { \r\n            month: 'short', \r\n            day: 'numeric'\r\n        });\r\n        \r\n        return formattedDate;\r\n    }\r\n    \r\n    function formatDateForSlot(dateStr) {\r\n        const date = new Date(dateStr);\r\n        return date.toLocaleDateString('lt-LT', { \r\n            month: 'numeric', \r\n            day: 'numeric'\r\n        });\r\n    }\r\n</script>\r\n\r\n<div class=\"timeslots-container\">\r\n    <h4>Pasirinkite naują pamokos laiką</h4>\r\n    <p class=\"info-text\">Rodomi tik laisvi mokytojo laikai per artimiausių 11 dienų. Jeigu nerandate patogaus laiko galite užpildyti naują pamokos registraciją arba susisiekti su mumis tiesiogiai.</p>\r\n    \r\n    {#if Object.keys(groupedSlots).length === 0}\r\n        <div class=\"no-slots\">\r\n            <p>Nėra prieinamų laikų artimiausių 11 dienų. Prašome susisiekti su mokytoju dėl kitų galimybių.</p>\r\n        </div>\r\n    {:else}\r\n        <div class=\"slots-grid\">\r\n            {#each Object.entries(groupedSlots) as [dateKey, dateGroup]}\r\n                <div class=\"day-section\">\r\n                    <h5 class=\"day-title\">{translateDayName(dateGroup.day_name)} - {formatDate(dateGroup.date)}</h5>\r\n                    <div class=\"day-slots\">\r\n                        {#each dateGroup.slots as slot}\r\n                            <button \r\n                                class=\"slot-button {selectedSlot === slot ? 'selected' : ''}\"\r\n                                on:click={() => selectSlot(slot)}\r\n                            >\r\n                                <div class=\"slot-time\">{slot.start_time} - {slot.end_time}</div>\r\n                            </button>\r\n                        {/each}\r\n                    </div>\r\n                </div>\r\n            {/each}\r\n        </div>\r\n        \r\n        <div class=\"submit-section\">\r\n            {#if selectedSlot}\r\n                <div class=\"selected-info\">\r\n                    <strong>Pasirinktas laikas:</strong> \r\n                    {translateDayName(selectedSlot.day_name)}, {formatDate(selectedSlot.date)} {selectedSlot.start_time} - {selectedSlot.end_time}\r\n                </div>\r\n            {/if}\r\n            \r\n            <button \r\n                class=\"submit-button\"\r\n                on:click={handleSubmit}\r\n                disabled={!selectedSlot}\r\n            >\r\n                Patvirtinti pakeitimą\r\n            </button>\r\n        </div>\r\n    {/if}\r\n</div>\r\n\r\n<style>\r\n    .timeslots-container {\r\n        padding: 15px;\r\n        background-color: #f9f9f9;\r\n        border-radius: 8px;\r\n        margin: 10px 0;\r\n    }\r\n    \r\n    .timeslots-container h4 {\r\n        margin: 0 0 10px 0;\r\n        color: #14695b;\r\n        font-size: 1.1em;\r\n    }\r\n    \r\n    .info-text {\r\n        margin: 0 0 20px 0;\r\n        color: #666;\r\n        font-size: 0.9em;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .no-slots {\r\n        text-align: center;\r\n        padding: 20px;\r\n        background-color: #fff3cd;\r\n        border: 1px solid #ffeaa7;\r\n        border-radius: 4px;\r\n        color: #856404;\r\n    }\r\n    \r\n    .slots-grid {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 15px;\r\n    }\r\n    \r\n    .day-section {\r\n        background-color: white;\r\n        border-radius: 6px;\r\n        padding: 12px;\r\n        box-shadow: 0px 1px 3px rgba(0,0,0,0.1);\r\n    }\r\n    \r\n    .day-title {\r\n        margin: 0 0 10px 0;\r\n        color: #333;\r\n        font-size: 1em;\r\n        font-weight: 600;\r\n        border-bottom: 1px solid #eee;\r\n        padding-bottom: 5px;\r\n    }\r\n    \r\n    .day-slots {\r\n        display: grid;\r\n        grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));\r\n        gap: 8px;\r\n    }\r\n    \r\n    .slot-button {\r\n        background: white;\r\n        border: 2px solid #ddd;\r\n        border-radius: 6px;\r\n        padding: 8px;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n        text-align: center;\r\n        min-height: 50px;\r\n        display: flex;\r\n        flex-direction: column;\r\n        justify-content: center;\r\n    }\r\n    \r\n    .slot-button:hover {\r\n        border-color: #fab45a;\r\n        background-color: #fef9f3;\r\n    }\r\n    \r\n    .slot-button.selected {\r\n        border-color: #14695b;\r\n        background-color: #e8f5f3;\r\n        color: #14695b;\r\n    }\r\n    \r\n    .slot-date {\r\n        font-size: 0.8em;\r\n        color: #666;\r\n        margin-bottom: 2px;\r\n    }\r\n    \r\n    .slot-time {\r\n        font-weight: 600;\r\n        font-size: 0.9em;\r\n    }\r\n    \r\n    .submit-section {\r\n        margin-top: 20px;\r\n        padding-top: 15px;\r\n        border-top: 1px solid #eee;\r\n    }\r\n    \r\n    .selected-info {\r\n        margin-bottom: 15px;\r\n        padding: 10px;\r\n        background-color: #e8f5f3;\r\n        border-radius: 4px;\r\n        color: #14695b;\r\n        font-size: 0.9em;\r\n    }\r\n    \r\n    .submit-button {\r\n        width: 100%;\r\n        font-weight: 700;\r\n        height: 50px;\r\n        background-color: #fab45a;\r\n        border: 1px solid #000000;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        border-radius: 8px;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .submit-button:hover:not(:disabled) {\r\n        background-color: #14695b;\r\n        color: white;\r\n    }\r\n    \r\n    .submit-button:disabled {\r\n        background-color: #ccc;\r\n        border-color: #999;\r\n        cursor: not-allowed;\r\n        opacity: 0.6;\r\n    }\r\n</style>\r\n","<script>\r\n    import { createEventDispatcher } from 'svelte';\r\n  \r\n    // Initialize the dispatcher for sending events to the parent\r\n    const dispatch = createEventDispatcher();\r\n  \r\n    // Set initial value to current date and time, formatted for 'datetime-local' input\r\n    let currentDateTime = new Date().toISOString().slice(0, 16); // YYYY-MM-DDTHH:MM\r\n    let datetime = currentDateTime; // Default to current date and time\r\n    \r\n    function isPlaceholder() {\r\n        return !datetime;  // Returns true if the datetime is empty\r\n    }\r\n\r\n    // Function to handle submit\r\n    function handleSubmit() {\r\n      // Emit the selected datetime to the parent\r\n      dispatch('submit', { datetime });\r\n    }\r\n  </script>\r\n  \r\n  <!-- Component markup -->\r\n  <div>\r\n    <!-- Input for selecting date and time -->\r\n    <input\r\n        type=\"datetime-local\"\r\n        bind:value={datetime}\r\n        class:is-placeholder={isPlaceholder()} />\r\n\r\n    <!-- Button to submit the selected datetime -->\r\n    <button on:click={handleSubmit}>\r\n      Patvirtinti\r\n    </button>\r\n  </div>\r\n  \r\n  <style>\r\n    /* Optional styles */\r\n    input.is-placeholder {\r\n        color: transparent;\r\n    }\r\n\r\n    input.is-placeholder::-webkit-datetime-edit {\r\n        color: transparent;\r\n    }\r\n\r\n    div {\r\n        display: flex;\r\n        gap: 10px;\r\n        flex-direction: row;\r\n        justify-content: space-evenly;\r\n        width: 100%;\r\n    }\r\n  \r\n    input {\r\n        \r\n        width:100%;\r\n        padding: 0.5rem;\r\n        font-size: 1rem;\r\n    }\r\n  \r\n    button {\r\n        width: 100%;\r\n        font-weight:700;\r\n        height: 60px;\r\n        background-color: #fab45a;\r\n        border: 1px solid #000000;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        border-radius: 8px;\r\n    \r\n    }\r\n  \r\n    button:hover {\r\n      background-color: #14695b;\r\n      color:white;\r\n    }\r\n  </style>\r\n  ","<script>\r\n    export let params;  // `params` will be passed as a prop by `svelte-spa-router`\r\n    import { onMount } from 'svelte';\r\n    import { push } from 'svelte-spa-router';\r\n    import ClassName from './ClassNameComponent.svelte';\r\n    import TeacherName from './TeacherNameComponent.svelte'\r\n    import TimeShowerComponent from './TimeShowerComponent.svelte';\r\n    import TimeShower from './TimeShowerComponent.svelte';\r\n    import SendEmailLink from './RecieveEmailComponent.svelte';\r\n    import ButtonToJoinClass from './ButtonToJoinClassComponent.svelte'\r\n    import RescheduleButton from './ButtonToRescheduleComponent.svelte'\r\n    import AvailableTimeSlotsPicker from './AvailableTimeSlotsPickerComponent.svelte'\r\n    import DateTimePicker from './DateTimePickerForClassChangeComponent.svelte'\r\n    import Button1 from './ButtonToGo.svelte'\r\n    \r\n    // Now you can use `params` directly\r\n    let classId = params.id;\r\n    let error = null;\r\n    let classinfo =\"nothing\";\r\n    let timePart = '';\r\n    let formattedDate ='';\r\n    let availableSlots = [];\r\n    let isUserTeacher = false;\r\n    let skipNotification = false;\r\n    let additionalClass = false;\r\n    let useComment = true;\r\n    let comment = '';\r\n\r\n    // Functions to handle mutual exclusion - at least one must be selected\r\n    function handleSkipNotificationChange() {\r\n        if (skipNotification) {\r\n            additionalClass = false;\r\n            useComment = false;\r\n        } else {\r\n            // Don't allow deselection - reselect it\r\n            skipNotification = true;\r\n        }\r\n    }\r\n    \r\n    function handleAdditionalClassChange() {\r\n        if (additionalClass) {\r\n            skipNotification = false;\r\n            useComment = false;\r\n        } else {\r\n            // Don't allow deselection - reselect it\r\n            additionalClass = true;\r\n        }\r\n    }\r\n\r\n    function handleUseCommentChange() {\r\n        if (useComment) {\r\n            skipNotification = false;\r\n            additionalClass = false;\r\n        } else {\r\n            // Don't allow deselection - reselect it\r\n            useComment = true;\r\n        }\r\n    }\r\n\r\n    async function handleDateSubmit(event) {\r\n        const token = localStorage.getItem('jwtToken');\r\n        const selectedDateTime = event.detail.datetime;\r\n\r\n        // Validate that if comment checkbox is selected, comment is not empty (only for teachers)\r\n        if (isUserTeacher && useComment && (!comment || comment.trim() === '')) {\r\n            alert('Prašome įvesti pakeitimo priežastį arba pasirinkti kitą variantą.');\r\n            return;\r\n        }\r\n\r\n        try {\r\n            const payload = { datetime: selectedDateTime };\r\n            // Only teachers should ever send these fields.\r\n            if (isUserTeacher) {\r\n                payload.skip_notification = skipNotification;\r\n                payload.additional_class = additionalClass;\r\n                payload.comment = useComment ? comment : '';\r\n            }\r\n\r\n            const response = await fetch(`/studentplayground/reschedule/${classId}/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                   \r\n                    'Authorization': `Bearer ${token}`,  // Send the token for authentication\r\n                    'Content-Type': 'application/json'\r\n                \r\n                },\r\n                body: JSON.stringify(payload)\r\n            });\r\n\r\n            if (response.ok) {\r\n                push('/schedule?tab=reschedule');\r\n            } else {\r\n                const errorData = await response.json();\r\n                const errorMessage = errorData.error || response.statusText;\r\n                alert(`Error: ${errorMessage}`);\r\n            }\r\n        } catch (error) {\r\n            alert(`Error: ${error.message}`);\r\n        }\r\n    }\r\n\r\n    \r\n\r\n    const fetchRescheduleRequest = async (classId) => {\r\n        const token = localStorage.getItem('jwtToken'); // Retrieve token from localStorage\r\n        console.log(\"THis is the JWT TOKEN\")\r\n        console.log(token)\r\n        if (!token) {\r\n            console.error('No JWT token found. User might not be logged in.');\r\n            return;\r\n        }\r\n\r\n        try {\r\n            // Making a request to reschedule endpoint with the classId parameter\r\n            const response = await fetch(`/studentplayground/reschedule/${classId}/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,  // Send the token for authentication\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n\r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                console.log('Reschedule Request Data:', data);\r\n                classinfo = data.classinfo;\r\n                availableSlots = data.available_slots || [];\r\n                console.log('Available slots:', availableSlots);\r\n                return data.classinfo;  // Return the classinfo data\r\n            } else {\r\n                if (response.status === 401) {\r\n                    // If response is 401 Unauthorized, redirect to login\r\n                    alert('Reikia prisijungti iš naujo.');\r\n                    localStorage.removeItem('jwtToken'); // Optional: Clear any stored tokens\r\n                    window.location.href = '#/about'; // Redirect to login page\r\n                } else {\r\n                    // Handle other errors\r\n                    alert('Error submitting form!');\r\n                }\r\n            }\r\n        } catch (error) {\r\n            console.error(\"Error during reschedule request fetch:\", error);\r\n        }\r\n    };\r\n    const formatDateTime = (datetime) => {\r\n        console.log(\"THis is dateimte\")\r\n        console.log(datetime)\r\n        let parts = datetime.split(\" \");\r\n        let datePart = parts[0];\r\n        let timePart = parts[1];\r\n        let dayPart = parts[2];\r\n\r\n        let formattedDate = `${dayPart}<br>${datePart}`;\r\n            return { timePart, formattedDate };\r\n    };\r\n    async function checkIfUserIsTeacher() {\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) return false;\r\n        \r\n        try {\r\n            const response = await fetch('/studentplayground/isUserTeacher/', {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                return data.isUserTeacher;\r\n            }\r\n        } catch (error) {\r\n            console.error(\"Error checking teacher status:\", error);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    onMount(async () => {\r\n        isUserTeacher = await checkIfUserIsTeacher();\r\n        fetchRescheduleRequest(classId);\r\n    });\r\n    $: if (classinfo && classinfo.time) {\r\n        let { timePart: tp, formattedDate: fd } = formatDateTime(classinfo.time);\r\n        timePart = tp;\r\n        formattedDate = fd;\r\n    }\r\n    \r\n</script>\r\n    <div class=\"top-bar\">\r\n        \r\n        <a href='#/reschedule-requests' class=\"exit-button\">\r\n        <img src='/static/icons/backButtonIcon.png' alt=\"Exit\" class=\"icon\" />\r\n        </a>\r\n        <div class=\"label\">Keisti Rezervaciją</div>\r\n        <div class=\"filler\"></div>\r\n    </div>\r\n\r\n    <div class='classcontainer'>\r\n        <ClassName name={classinfo.name} />\r\n        <TeacherName teacher={classinfo.teacher}/>\r\n        <TimeShower time={timePart} date={formattedDate} />\r\n        {#if isUserTeacher}\r\n            <!-- Teachers can pick any time and date -->\r\n            <DateTimePicker on:submit={handleDateSubmit} />\r\n            \r\n            <!-- Checkbox for teachers to skip student notification -->\r\n            <div class=\"notification-checkbox\">\r\n                <label class=\"checkbox-label\">\r\n                    <input \r\n                        type=\"checkbox\" \r\n                        bind:checked={skipNotification}\r\n                        on:change={handleSkipNotificationChange}\r\n                        class=\"checkbox-input\"\r\n                    />\r\n                    <span class=\"checkbox-text\">Naujas laikas suderintas su mokiniu</span>\r\n                </label>\r\n                <div class=\"checkbox-description\">\r\n                    Pažymėkite šį laukelį tik tuo atveju, jei mokinys jau informuotas ir sutiko su pakeitimu. Tokiu atveju mokiniui nebus siunčiama užklausa patvirtinti – jis iškart gaus pranešimą apie sėkmingą pamokos pakeitimą.\r\n                </div>\r\n            </div>\r\n\r\n            <!-- Checkbox for additional class -->\r\n            <div class=\"notification-checkbox\">\r\n                <label class=\"checkbox-label\">\r\n                    <input \r\n                        type=\"checkbox\" \r\n                        bind:checked={additionalClass}\r\n                        on:change={handleAdditionalClassChange}\r\n                        class=\"checkbox-input\"\r\n                    />\r\n                    <span class=\"checkbox-text\">Sutarta papildoma pamoka</span>\r\n                </label>\r\n                <div class=\"checkbox-description\">\r\n                    Pažymėkite šį laukelį tuo atveju, jei esate sutarę su mokinių organizuoti tokią pačią, papildomą pamoką nurodytu laiku.\r\n                </div>\r\n            </div>\r\n\r\n            <!-- Checkbox for comment -->\r\n            <div class=\"notification-checkbox\">\r\n                <label class=\"checkbox-label\">\r\n                    <input \r\n                        type=\"checkbox\" \r\n                        bind:checked={useComment}\r\n                        on:change={handleUseCommentChange}\r\n                        class=\"checkbox-input\"\r\n                    />\r\n                    <span class=\"checkbox-text\">Pakeitimo priežastis:</span>\r\n                </label>\r\n                <textarea \r\n                    bind:value={comment}\r\n                    disabled={!useComment}\r\n                    placeholder=\"Įveskite pakeitimo priežastį...\"\r\n                    class=\"comment-textarea\"\r\n                    rows=\"4\"\r\n                ></textarea>\r\n            </div>\r\n        {:else}\r\n            <!-- Students are restricted to available time slots -->\r\n            <AvailableTimeSlotsPicker {availableSlots} on:submit={handleDateSubmit} />\r\n        {/if}\r\n        <Button1 link=\"/class/cancel-class/{classId}\" label=\"Atšaukti Pamoką\" />\r\n\r\n    </div>\r\n{#if error}\r\n    <p>Error: {error}</p>\r\n{/if}\r\n<style>\r\n   .top-bar {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        padding: 10px;\r\n        background-color: transparent;\r\n        border-bottom: 1px solid #000000;\r\n        margin-bottom: 40px;\r\n      \r\n      }\r\n      .filler {\r\n        width:50px;\r\n      }\r\n    \r\n      .label {\r\n        font-size: x-large;\r\n        color:#14695b;\r\n        \r\n      }\r\n    \r\n      .exit-button {\r\n        max-width: 50px;\r\n      }\r\n    \r\n      .icon {\r\n        width: 50px;\r\n        height: 50px;\r\n      }\r\n    p {\r\n        font-size: 1.2em;\r\n    }\r\n    .classcontainer{\r\n        padding: 15px;\r\n        background-color: #eeebdb;\r\n        \r\n        \r\n        margin-bottom:15px;\r\n        \r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        border-radius: 8px;\r\n       \r\n        color:black;\r\n        align-items: flex-start;\r\n\r\n      }\r\n\r\n  /* Notification checkbox styling */\r\n  .notification-checkbox {\r\n    margin-top: 20px;\r\n    margin-bottom: 20px;\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 8px;\r\n    border: 1px solid #dee2e6;\r\n  }\r\n\r\n  .checkbox-label {\r\n    display: flex;\r\n    align-items: center;\r\n    cursor: pointer;\r\n    margin-bottom: 8px;\r\n  }\r\n\r\n  .checkbox-input {\r\n    margin-right: 10px;\r\n    margin-left:10px;\r\n    margin-top:10px;\r\n    width: 18px;\r\n    height: 18px;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .checkbox-text {\r\n    font-weight: 600;\r\n    color: #495057;\r\n    font-size: 16px;\r\n  }\r\n\r\n  .checkbox-description {\r\n    font-size: 14px;\r\n    color: #6c757d;\r\n    font-style: italic;\r\n    margin-left: 28px;\r\n    line-height: 1.4;\r\n  }\r\n\r\n  .comment-textarea {\r\n    width: 100%;\r\n    margin-top: 10px;\r\n    padding: 10px;\r\n    font-size: 14px;\r\n    border: 1px solid #dee2e6;\r\n    border-radius: 4px;\r\n    resize: vertical;\r\n    font-family: inherit;\r\n    transition: border-color 0.2s, background-color 0.2s;\r\n  }\r\n\r\n  .comment-textarea:enabled {\r\n    background-color: white;\r\n    border-color: #ced4da;\r\n  }\r\n\r\n  .comment-textarea:enabled:focus {\r\n    outline: none;\r\n    border-color: #14695b;\r\n    box-shadow: 0 0 0 0.2rem rgba(20, 105, 91, 0.25);\r\n  }\r\n\r\n  .comment-textarea:disabled {\r\n    background-color: #e9ecef;\r\n    color: #6c757d;\r\n    cursor: not-allowed;\r\n  }\r\n</style>\r\n","<script>\r\n    import { push } from 'svelte-spa-router';\r\n\r\n    export let link;\r\n    export let label = \"More Info\"; // Optional label for the button\r\n\r\n    function navigate() {\r\n        push(link);\r\n    }\r\n</script>\r\n\r\n<button on:click={navigate}>\r\n    <span>{label}</span>\r\n</button>\r\n<style>\r\n    /* Button styling */\r\n    button span {\r\n        font-weight: bolder;\r\n        font-size:larger;\r\n    }\r\n\r\n    button {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 12px 20px;\r\n        gap: 10px;\r\n    \r\n        width: 100%;\r\n        height: 60px;\r\n    \r\n        /* Purple background */\r\n        background-color: white;\r\n    \r\n        /* Black border */\r\n        border: 1px solid #000000;\r\n    \r\n        /* Box shadow */\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    \r\n        /* Rounded corners */\r\n        border-radius: 8px;\r\n    \r\n        /* Inside auto layout */\r\n        flex: none;\r\n        order: 0;\r\n        align-self: stretch;\r\n        flex-grow: 0;\r\n    \r\n        /* Remove default button styling */\r\n        outline: none;\r\n        cursor: pointer;\r\n  \r\n        /* Remove the default button background on focus */\r\n        background-image: none;\r\n    }\r\n\r\n    /* Button hover effect */\r\n    button:hover {\r\n        background-color: #14695b;\r\n        color:white;\r\n    }\r\n\r\n    /* Text inside the button */\r\n    span {\r\n        font-size: 1rem;\r\n        font-weight: bold;\r\n        color: #333;\r\n    }\r\n</style>\r\n","<script>\r\n    import { onMount, tick } from 'svelte';\r\n    import { push } from 'svelte-spa-router';\r\n    import { getApiBase } from './apiBase.js';\r\n    import ClassName from './ClassNameComponent.svelte';\r\n    import TeacherName from './TeacherNameComponent.svelte';\r\n    import TimeShower from './TimeShowerComponent.svelte';\r\n    import CancelReason from './CancelReasonComponentsvelte.svelte';\r\n\r\n    export let params;\r\n    const apiBase = getApiBase();\r\n    const warning = 'Atšaukus pamoką tą pačią dieną, už ją vis tiek reikės sumokėti. Ar tikrai norite atšaukti pamoką?';\r\n    let classinfo = {};\r\n    let students = [];\r\n    let selectedStudentId = '';\r\n    let isUserTeacher = false;\r\n    let requiresAcknowledgement = false;\r\n    let loading = true;\r\n    let isSubmitting = false;\r\n    let error = '';\r\n    let reason = '';\r\n    let showPaymentDialog = false;\r\n    let paymentDialog;\r\n    let backButton;\r\n    let returnFocus;\r\n    $: selectedStudent = students.find(student => student.id === Number(selectedStudentId));\r\n    $: alreadyCancelled = selectedStudent?.participation_status === 'cancelled_payable';\r\n    $: dateParts = (classinfo.time || '').split(' ');\r\n\r\n    function headers() {\r\n        return { Authorization: `Bearer ${localStorage.getItem('jwtToken')}`, 'Content-Type': 'application/json' };\r\n    }\r\n\r\n    async function loadDetails() {\r\n        loading = true;\r\n        error = '';\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/cancelEvent/${params.id}/`, { headers: headers() });\r\n            const data = await response.json();\r\n            if (!response.ok) throw new Error(data.error || 'Nepavyko įkelti pamokos.');\r\n            classinfo = data.classinfo;\r\n            students = data.students || [];\r\n            isUserTeacher = data.is_teacher;\r\n            requiresAcknowledgement = data.requires_payment_acknowledgement;\r\n            selectedStudentId = students.length === 1 ? students[0].id : '';\r\n        } catch (failure) {\r\n            error = failure.message || 'Nepavyko įkelti pamokos.';\r\n        } finally {\r\n            loading = false;\r\n        }\r\n    }\r\n    onMount(loadDetails);\r\n\r\n    async function openPaymentDialog() {\r\n        showPaymentDialog = true;\r\n        await tick();\r\n        paymentDialog.showModal();\r\n        backButton.focus();\r\n    }\r\n\r\n    function closePaymentDialog() {\r\n        if (isSubmitting) return;\r\n        paymentDialog.close();\r\n        showPaymentDialog = false;\r\n        error = '';\r\n        returnFocus?.focus();\r\n    }\r\n\r\n    async function handleCancelSubmit(event) {\r\n        if (isSubmitting) return;\r\n        error = '';\r\n        reason = event.detail.reason;\r\n        if (!isUserTeacher && !selectedStudent) {\r\n            error = 'Pasirinkite, kurio mokinio pamoką atšaukiate.';\r\n            return;\r\n        }\r\n        if (!isUserTeacher && !reason.trim()) {\r\n            error = 'Prašome įrašyti atšaukimo priežastį.';\r\n            return;\r\n        }\r\n        returnFocus = document.activeElement;\r\n        if (requiresAcknowledgement) await openPaymentDialog();\r\n        else await submitCancellation(false);\r\n    }\r\n\r\n    async function submitCancellation(acknowledgePayment) {\r\n        if (isSubmitting) return;\r\n        isSubmitting = true;\r\n        error = '';\r\n        let showUpdatedPolicy = false;\r\n        try {\r\n            const body = { reason };\r\n            if (!isUserTeacher) {\r\n                body.student_id = Number(selectedStudentId);\r\n                body.acknowledge_payment = acknowledgePayment;\r\n            }\r\n            const response = await fetch(`${apiBase}/studentplayground/cancelEvent/${params.id}/`, {\r\n                method: 'POST', headers: headers(), body: JSON.stringify(body),\r\n            });\r\n            const data = await response.json();\r\n            if (response.status === 409 && data.code === 'payment_acknowledgement_required') {\r\n                requiresAcknowledgement = true;\r\n                showUpdatedPolicy = !showPaymentDialog;\r\n            } else if (!response.ok) {\r\n                throw new Error(data.error || 'Nepavyko atšaukti pamokos. Bandykite dar kartą.');\r\n            } else {\r\n                if (paymentDialog?.open) paymentDialog.close();\r\n                push('/schedule?tab=reschedule');\r\n            }\r\n        } catch (failure) {\r\n            error = failure.message || 'Nepavyko atšaukti pamokos. Bandykite dar kartą.';\r\n        } finally {\r\n            isSubmitting = false;\r\n        }\r\n        if (showUpdatedPolicy) await openPaymentDialog();\r\n    }\r\n</script>\r\n\r\n<div class=\"top-bar\">\r\n    <a href=\"#/schedule\" class=\"exit-button\" aria-label=\"Grįžti į tvarkaraštį\"><img src=\"/static/icons/backButtonIcon.png\" alt=\"\" class=\"icon\" /></a>\r\n    <div class=\"label\">Atšaukti pamoką</div><div class=\"filler\"></div>\r\n</div>\r\n\r\n<div class=\"classcontainer\">\r\n    {#if loading}\r\n        <p role=\"status\">Įkeliama pamoka...</p>\r\n    {:else if classinfo.name}\r\n        <ClassName name={classinfo.name} />\r\n        <TeacherName teacher={classinfo.teacher} />\r\n        <TimeShower time={dateParts[1] || ''} date={`${dateParts[2] || ''}<br>${dateParts[0] || ''}`} />\r\n        {#if !isUserTeacher && students.length > 1}\r\n            <label for=\"cancellation-student\">Mokinys</label>\r\n            <select id=\"cancellation-student\" bind:value={selectedStudentId} disabled={isSubmitting}>\r\n                <option value=\"\">Pasirinkite mokinį</option>\r\n                {#each students as student}<option value={student.id}>{student.name}</option>{/each}\r\n            </select>\r\n        {/if}\r\n        {#if alreadyCancelled}\r\n            <p role=\"status\">Atšaukta nesilaikant atšaukimo sąlygų. Pamoka apmokama.</p>\r\n        {:else}\r\n            <CancelReason requireReason={!isUserTeacher} {isSubmitting} on:submit={handleCancelSubmit} />\r\n        {/if}\r\n    {:else}\r\n        <button type=\"button\" on:click={loadDetails}>Bandyti dar kartą</button>\r\n    {/if}\r\n    {#if error && !showPaymentDialog}<p role=\"alert\">{error}</p>{/if}\r\n</div>\r\n\r\n{#if showPaymentDialog}\r\n    <dialog bind:this={paymentDialog} role=\"alertdialog\" aria-labelledby=\"payment-warning-title\" aria-describedby=\"payment-warning-message\"\r\n        on:cancel={(event) => { event.preventDefault(); closePaymentDialog(); }}>\r\n        <h2 id=\"payment-warning-title\">Pamokos atšaukimas</h2>\r\n        {#if selectedStudent}<p>{selectedStudent.name}</p>{/if}\r\n        <p id=\"payment-warning-message\">{warning}</p>\r\n        {#if error}<p role=\"alert\">{error}</p>{/if}\r\n        <div class=\"dialog-actions\">\r\n            <button type=\"button\" bind:this={backButton} on:click={closePaymentDialog} disabled={isSubmitting}>Grįžti</button>\r\n            <button type=\"button\" on:click={() => submitCancellation(true)} disabled={isSubmitting} aria-busy={isSubmitting}>{isSubmitting ? 'Atšaukiama...' : 'Taip, atšaukti pamoką'}</button>\r\n        </div>\r\n    </dialog>\r\n{/if}\r\n<style>\r\n    dialog { border: 1px solid #14695b; border-radius: 8px; padding: 24px; max-width: 480px; width: calc(100% - 32px); box-sizing: border-box; color: #222; }\r\n    dialog::backdrop { background: rgb(0 0 0 / 45%); }\r\n    dialog h2 { font-size: 1.3rem; }\r\n    .dialog-actions { display: flex; gap: 12px; flex-wrap: wrap; }\r\n    .dialog-actions button, select { padding: 12px; font: inherit; }\r\n    .dialog-actions button:last-child { background: #fab45a; border: 1px solid #333; }\r\n    .dialog-actions button:last-child:disabled { background-color: var(--cancellation-pending-background, #6b7280) !important; color: var(--cancellation-pending-color, #fff) !important; cursor: wait; }\r\n    [role=\"alert\"] { color: #9b2424; }\r\n\r\n.top-bar {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 10px;\r\n    background-color: transparent;\r\n    border-bottom: 1px solid #000000;\r\n    margin-bottom: 40px;\r\n  \r\n  }\r\n  .filler {\r\n    width:50px;\r\n  }\r\n\r\n  .label {\r\n    font-size: x-large;\r\n    color:#14695b;\r\n    \r\n  }\r\n\r\n  .exit-button {\r\n    max-width: 50px;\r\n  }\r\n\r\n  .icon {\r\n    width: 50px;\r\n    height: 50px;\r\n  }\r\np {\r\n    font-size: 1.2em;\r\n}\r\n.classcontainer{\r\n    padding: 15px;\r\n    background-color: #eeebdb;\r\n    display: flex;\r\n    flex-direction: column;\r\n    margin-bottom:15px;\r\n    gap: 10px;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    border-radius: 8px;\r\n    flex: none;\r\n    color:black;\r\n    align-items: flex-start;\r\n\r\n  }\r\n</style>\r\n","<script>\r\n    import { createEventDispatcher } from 'svelte';\r\n  \r\n    // Initialize the dispatcher for sending events to the parent\r\n    const dispatch = createEventDispatcher();\r\n    let reason = '';\r\n    export let requireReason = false;\r\n    export let isSubmitting = false;\r\n\r\n    // Function to handle submit\r\n    function handleSubmit() {\r\n      if (isSubmitting) return;\r\n      if (requireReason && (!reason || reason.trim() === '')) {\r\n        alert('Prašome įrašyti atšaukimo priežastį.');\r\n        return;\r\n      }\r\n      // Emit the selected reason to the parent; parent will navigate on success\r\n      dispatch('submit', { reason });\r\n    }\r\n  </script>\r\n  \r\n  <!-- Component markup -->\r\n  <div>\r\n    <textarea aria-label=\"Atšaukimo priežastis\" maxlength=\"500\" bind:value={reason} placeholder=\"Įrašykite atšaukimo priežastį...\" rows=\"4\"></textarea>\r\n    <button on:click={handleSubmit} disabled={isSubmitting} aria-busy={isSubmitting} class=\"confirm-button\">\r\n      <span>{isSubmitting ? 'Atšaukiama...' : 'Patvirtinti'}</span>\r\n    </button>\r\n  </div>\r\n<style>\r\n  div{\r\n    width:100%;\r\n  }\r\n  textarea {\r\n    width: 100%;\r\n    height: 100px;\r\n    border: 1px solid #000000;\r\n    \r\n    /* Box shadow */\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    \r\n    /* Rounded corners */\r\n    border-radius: 8px;\r\n\r\n    /* Adjust the padding for better text visibility */\r\n    padding: 10px;\r\n    \r\n    /* Optional: Set a font for better readability */\r\n    font-family: Arial, sans-serif;\r\n    font-size: 16px;\r\n    resize: vertical; /* Allows the user to resize the textarea vertically */\r\n}\r\n\r\n  button span {\r\n        font-weight: 700;\r\n        font-size: 1rem;\r\n    }\r\n\r\n  .confirm-button {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 12px 20px;\r\n        gap: 10px;\r\n\r\n        width: 100%;\r\n        height: 60px;\r\n\r\n        /* Restore original orange styling */\r\n        background-color: #fab45a;\r\n        border: 1px solid #000000;\r\n        color: #333;\r\n\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        border-radius: 8px;\r\n\r\n        flex: none;\r\n        order: 0;\r\n        align-self: stretch;\r\n        flex-grow: 0;\r\n\r\n        outline: none;\r\n        cursor: pointer;\r\n        background-image: none;\r\n    }\r\n\r\n    .confirm-button:not(:disabled):hover {\r\n      background-color: #927043;\r\n      border-color: #000000;\r\n    }\r\n\r\n    button:disabled {\r\n      /* Keep the pending state visible across action-button themes. */\r\n      background-color: var(--cancellation-pending-background, #6b7280) !important;\r\n      color: var(--cancellation-pending-color, #fff) !important;\r\n      cursor: wait;\r\n    }\r\n</style>\r\n","<script>\r\n    import IconButton from './ButtonComponent.svelte';\r\n \r\n   </script>\r\n   \r\n   <style>\r\n     .container {\r\n         display: flex;\r\n         flex-direction: column;\r\n         align-items: center;\r\n         width:100%;\r\n \r\n     }\r\n   \r\n     \r\n     .top-bar {\r\n         width: 100%;\r\n         text-align: center;\r\n         border-bottom: 2px solid #ccc;\r\n         display: flex;\r\n         flex-direction: row;\r\n         justify-content: space-between;\r\n         align-items: center;\r\n         }\r\n             \r\n \r\n \r\n     .content {\r\n       margin-top: 50px; /* Ensures the content is not under the top bar */\r\n       color: #000;\r\n       display:flex;\r\n       justify-content: space-around;\r\n \r\n     }\r\n     \r\n     .illustration {\r\n       margin-top: 20px;\r\n     }\r\n     .filler{\r\n         width:60px;\r\n     }\r\n     .label{\r\n         font-size:23px;\r\n     }\r\n     .illustration img {\r\n       width: 100%;\r\n       height: auto;\r\n       max-height:500px;\r\n     }\r\n     .exit-button{\r\n         display:flex;\r\n         justify-content: flex-end;\r\n     }\r\n     .exit-button img{\r\n         width:80%;\r\n         max-width:60px;\r\n     }\r\n   </style>\r\n   \r\n   <div class=\"container\">\r\n     <div class=\"top-bar\">\r\n         <div class=\"filler\"></div>\r\n         <div class='label'>Keisti Laiką</div>\r\n       <a href='#/login-greeting' class='exit-button'>\r\n         <img src='/static/icons/exitButtonIcon.png' alt=\"\" class=\"icon\" />\r\n     </a>\r\n     </div>\r\n     <div class=\"content\">\r\n         <div class=\"illustration\">\r\n           <img src=\"/static/icons/rescheduleSuccessIcon.png\" alt=\"Illustration\">\r\n         </div>\r\n         \r\n       </div>\r\n     \r\n   </div>\r\n   ","<script>\r\n  export let rating;\r\n  export let maxRating = 5;\r\n  export let onRate;\r\n  \r\n  function handleKeydown(event, value) {\r\n    if (event.key === \"Enter\" || event.key === \" \") {\r\n      event.preventDefault();\r\n      onRate(value);\r\n    }\r\n  }\r\n  \r\n  function handleClick(value) {\r\n    onRate(value);\r\n  }\r\n</script>\r\n\r\n<div class=\"star-rating\">\r\n  {#each Array(maxRating) as _, index}\r\n    <span \r\n      class=\"fa fa-star {index < rating ? 'checked' : ''}\" \r\n      role=\"button\"                  \r\n      tabindex=\"0\"                   \r\n      on:click={() => handleClick(index + 1)}\r\n      on:keydown={(event) => handleKeydown(event, index + 1)} \r\n      aria-label=\"Rate {index + 1} stars\" \r\n    ></span>\r\n  {/each}\r\n</div>\r\n\r\n<style>\r\n  .fa-star {\r\n    font-size: 24px;\r\n    cursor: pointer;\r\n    color: #ddd;\r\n  }\r\n  .fa-star.checked {\r\n    color: #14695b;\r\n  }\r\n</style>\r\n","<script>\r\n  export let infoText = '';  // Customizable text for the tooltip\r\n  let showTooltip = false;   // State variable to control visibility\r\n  export let className = '';  // Accept a className prop\r\n\r\n  function toggleTooltip() {\r\n    showTooltip = !showTooltip;\r\n  }\r\n\r\n  // Handle keypress for accessibility (trigger tooltip on Enter or Space)\r\n  function handleKeydown(event) {\r\n    if (event.key === 'Enter' || event.key === ' ') {\r\n      toggleTooltip();\r\n    }\r\n  }\r\n</script>\r\n\r\n<style>\r\n  .tooltip-container {\r\n    display: inline-flex; /* Keep icon inline with text */\r\n    position: relative;\r\n    cursor: pointer;\r\n    background-color: transparent;\r\n    border: none;\r\n    margin-left: 5px; /* Adds spacing between the text and the icon */\r\n    font-size: 0.9em; /* Adjust the icon size to be smaller */\r\n}\r\n\r\n  .tooltip-icon {\r\n    font-size: x-small;\r\n    color: #007BFF;\r\n    border: 1px solid #007BFF;\r\n    border-radius: 100%;\r\n    padding: 1px 5px;\r\n    font-weight: bold;\r\n    margin-left: 5px;\r\n  }\r\n\r\n  .tooltip-box {\r\n    visibility: hidden;\r\n    background-color: #555;\r\n    color: #fff;\r\n    text-align: center;\r\n    border-radius: 5px;\r\n    padding: 5px;\r\n    position: absolute;\r\n    z-index: 1;\r\n    top: -160%;\r\n    left: 55%;\r\n    transform: translate(-50%, -50%);\r\n    opacity: 0;\r\n    transition: opacity 0.3s;\r\n    white-space: normal; /* Allows wrapping of content */\r\n    word-wrap: break-word; /* Ensures long words break */\r\n    width:500px;\r\n  }\r\n\r\n  .tooltip-box.visible {\r\n    visibility: visible;\r\n    opacity: 1;\r\n  }\r\n\r\n  .tooltip-box::after {\r\n    content: '';\r\n    position: absolute;\r\n    top: 100%;  /* Arrow pointing down */\r\n    left: 50%;\r\n    margin-left: -5px;\r\n    border-width: 5px;\r\n    border-style: solid;\r\n    border-color: #555 transparent transparent transparent;\r\n  }\r\n  .close-icon {\r\n    position: absolute;\r\n    top: 5px;\r\n    right: 5px;\r\n    font-size: 12px;\r\n    color: #fff;\r\n    cursor: default; /* No pointer interaction */\r\n  }\r\n  /* Mobile screen adjustments */\r\n  @media (max-width: 600px) {\r\n    .tooltip-box {\r\n      position: fixed;\r\n      top:160px;\r\n      width:200px;\r\n    }\r\n\r\n    .tooltip-container {\r\n      display: block;\r\n      text-align: center;\r\n    }\r\n    button{\r\n      padding:0px;\r\n    }\r\n  }\r\n</style>\r\n\r\n<button class=\"tooltip-container {className}\" on:click={() => showTooltip = !showTooltip}>\r\n  <span class=\"tooltip-icon\">i</span>\r\n  <div class=\"tooltip-box {showTooltip ? 'visible' : ''}\">\r\n    {@html infoText}\r\n    <span class=\"close-icon\">✕</span>\r\n\r\n  </div>\r\n</button>\r\n","<script>\r\n    export let subject = '';\r\n    export let isSelected = false;\r\n    export let onToggle;\r\n\r\n    function handleToggle(event) {\r\n        if (onToggle) {\r\n            onToggle(event.target.checked); // Pass the checkbox's checked state to the parent\r\n        }\r\n    }\r\n\r\n</script>\r\n\r\n<!-- Apply the 'selected' class dynamically based on isSelected -->\r\n<div class=\"checkbox-group {isSelected ? 'selected' : ''}\">\r\n    <input \r\n        type=\"checkbox\" \r\n        id={subject} \r\n        checked={isSelected} \r\n        on:change={handleToggle} \r\n    />\r\n    <div class='leftSide'>\r\n        <label for={subject}>{subject}</label>\r\n    </div>\r\n</div>\r\n\r\n<style>\r\n    .checkbox-group {\r\n      \r\n        padding-right: 10px;\r\n        padding-bottom: 12px;\r\n        padding-top: 12px;\r\n        left: -10px;\r\n        position: relative;\r\n        display: flex;\r\n       \r\n        gap: 20px;\r\n        background: #FFFFFF;\r\n        \r\n        border-radius: 8px;\r\n        transition: background-color 0.3s ease, color 0.3s ease;\r\n        align-items: flex-start;\r\n        flex-direction: row-reverse;\r\n        margin-top:10px;\r\n    }\r\n\r\n    /* Apply dark green background when selected class is active */\r\n    .checkbox-group.selected {\r\n        margin-top:10px;\r\n    }\r\n\r\n    .leftSide {\r\n        position: relative;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n        margin-left: 10px;\r\n        left: -10px;\r\n    }\r\n\r\n    .leftSide label {\r\n        font-size: 1rem;\r\n        color: #333; /* Default label color */\r\n        transition: color 0.3s ease;\r\n        margin-left:10px;\r\n    }\r\n\r\n\r\n    input[type=\"checkbox\"] {\r\n        width: 24px;\r\n        height: 24px;\r\n        border-radius: 6px;\r\n        border: 2px solid #333;\r\n        background-color: white;\r\n        appearance: none;\r\n        outline: none;\r\n        cursor: pointer;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        transition: background-color 0.3s ease;\r\n    }\r\n\r\n    /* Change checkbox color and style when checked */\r\n    input[type=\"checkbox\"]:checked {\r\n        background-color: #14695B; /* Dark green */\r\n        border: none;\r\n        background-image: url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"%3E%3Cpolyline points=\"20 6 9 17 4 12\"/%3E%3C/svg%3E');\r\n        background-repeat: no-repeat;\r\n        background-position: center;\r\n    }\r\n</style>\r\n","<script>\r\n  import ClassName from './ClassNameComponent.svelte';\r\n  import TeacherName from './TeacherNameComponent.svelte';\r\n  import TimeShower from './TimeShowerComponent.svelte';\r\n  import { onMount } from 'svelte';\r\n  export let params;\r\n  import { push } from 'svelte-spa-router';\r\n  import TextField from './TextFieldComponent.svelte';\r\n  import StarRating from './StarsInput.svelte'\r\n  import CommentTipComponent from './CommentTipComponent.svelte';\r\n  import CheckBoxForLeaveComment from './CheckBoxForLeaveComment.svelte';\r\n  import { getApiBase } from './apiBase.js';\r\n  \r\n  let classinfo = {};\r\n  let isUserTeacher = null;\r\n  let classId = params.id;\r\n  const apiBase = getApiBase();\r\n  let errorMessage = '';\r\n\r\n  let technicalIssuesRating = 1;  // Track the selected rating for technical issues (1-5)\r\n  let learned = 1;\r\n  let effortRating = 1;\r\n  let generalRating = 1;\r\n  let extraDetails = '';\r\n  let isCheckboxSelected = false; // State managed in the parent\r\n  let isHomeworkSelected = false;\r\n  let isCompleteSelected = false;\r\n\r\n  function handleRatingUpdate(field, value) {\r\n    if (field === 'technicalIssuesRating') {\r\n      technicalIssuesRating = value;\r\n    } else if (field === 'effortRating') {\r\n      effortRating = value;\r\n    } else if (field === 'learned') {\r\n      learned = value;\r\n    } else if (field === 'generalRating') {\r\n      generalRating = value;\r\n    }\r\n  }\r\n\r\n\r\n\r\nfunction handleCheckboxToggle(checked) {\r\n  isCheckboxSelected = checked; // Update the state with the boolean value\r\n  console.log(\"This is isSelected:\", isCheckboxSelected); // Log the checked value\r\n}\r\nfunction handleHomeworkToggle(checked){\r\n  isHomeworkSelected = checked;\r\n  console.log(\"This is isSelected:\", isCheckboxSelected);\r\n}\r\nfunction handleCompleteToggle(checked) {\r\n  isCompleteSelected = checked;\r\n  console.log(\"This is isCompleteSelected:\", isCompleteSelected);\r\n}\r\n  // Handle form submission\r\nasync function handleSubmit() {\r\n  if (isUserTeacher === null) {\r\n    errorMessage = 'Palaukite, kol bus įkelti pamokos duomenys.';\r\n    return;\r\n  }\r\n  const payload = {\r\n    technical_issues: isUserTeacher ? technicalIssuesRating : 1,  // Default to 1 for students\r\n    learned: isUserTeacher ? learned : 1,  // Default to 1 for students\r\n    effort: isUserTeacher ? effortRating : 1,  // Default to 1 for students\r\n    general: generalRating,  // This is the only rating students actually set\r\n    extra: extraDetails,\r\n    on_time: isUserTeacher ? isCheckboxSelected : true,  // Default to true for students\r\n    homework: isUserTeacher ? isHomeworkSelected : true, // Default to true for students\r\n    complete: isUserTeacher ? isCompleteSelected : true, // Default to true for students\r\n\r\n  };\r\n  try {\r\n    console.log(\"we have made it to 2\")\r\n    const response = await fetch(`${apiBase}/studentplayground/classNote/${classId}/`, {\r\n      method: 'POST',\r\n      headers: {\r\n        'Content-Type': 'application/json',\r\n        'Authorization': `Bearer ${localStorage.getItem('jwtToken')}`\r\n      },\r\n      body: JSON.stringify(payload)\r\n    });\r\n\r\n    if (!response.ok) {\r\n      const errorData = await response.json();\r\n      errorMessage = errorData.error || 'Nepavyko išsaugoti atsiliepimo.';\r\n    } else {\r\n      push('/note-success');\r\n    }\r\n  } catch (error) {\r\n    errorMessage = 'Nepavyko išsaugoti atsiliepimo.';\r\n  }\r\n}\r\n\r\n  // Helper function to format date and time\r\n  const formatDateTime = (datetime) => {\r\n      if (!datetime) return { timePart: '', formattedDate: '' }; // Handle missing datetime\r\n\r\n      let parts = datetime.split(\" \");\r\n      let datePart = parts[0];\r\n      let timePart = parts[1];\r\n      let dayPart = parts[2];\r\n\r\n      let formattedDate = `${dayPart}<br>${datePart}`;\r\n      return { timePart, formattedDate };\r\n  };\r\n  const fetchClassData = async () => {\r\n    try {\r\n      const response = await fetch(`${apiBase}/studentplayground/api/get_class_data/${classId}/`, {\r\n        headers: {\r\n          'Authorization': `Bearer ${localStorage.getItem('jwtToken')}`\r\n        }\r\n      });\r\n  \r\n      const data = await response.json();\r\n      if (!response.ok) {\r\n        if (response.status === 401) {\r\n          localStorage.removeItem('jwtToken');\r\n          window.location.href = '#/about';\r\n          return;\r\n        }\r\n        errorMessage = data.error || 'Nepavyko įkelti pamokos duomenų.';\r\n        return;\r\n      }\r\n      console.log(\"Fetched classinfo:\", data.classinfo);  // Log to check the structure\r\n      classinfo = data.classinfo;\r\n      isUserTeacher = data.isTeacher;\r\n      // console.log(\"This is the technical issues value:\");\r\n      // console.log(data.classinfo.existing_note.technical_issues);\r\n      // console.log(data.classinfo.existing_note.learned);\r\n      // console.log(data.classinfo.existing_note.effort);\r\n      // console.log(data.classinfo.existing_note.general);\r\n      // console.log(data.classinfo.existing_note.note);\r\n      // console.log(data.classinfo.existing_note.on_time);\r\n      const existing = data.classinfo.existing_note;\r\n      if (existing) {\r\n        technicalIssuesRating = existing.technical_issues;\r\n        learned = existing.learned;\r\n        effortRating = existing.effort;\r\n        generalRating = existing.general;\r\n        extraDetails = existing.note;\r\n        isCheckboxSelected = existing.on_time;\r\n        isHomeworkSelected = existing.homework;\r\n        isCompleteSelected = existing.complete;\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error fetching class data:\", error);\r\n      errorMessage = 'Nepavyko įkelti pamokos duomenų.';\r\n    }\r\n  };\r\n  // Fetch class data on component mount\r\n  onMount(async () => {\r\n    await fetchClassData();\r\n  });\r\n</script>\r\n\r\n<div class=\"top-bar\">\r\n<a href='#/schedule' class=\"exit-button\">\r\n  <img src='/static/icons/backButtonIcon.png' alt=\"Exit\" class=\"icon\" />\r\n</a>\r\n<div class=\"label\">Palikti Atsiliepimą</div>\r\n<div class=\"filler\"></div>\r\n</div>\r\n<div class='form-container'>\r\n<!-- Render the class details -->\r\n<ClassName name={classinfo.name} />\r\n{#if !isUserTeacher}\r\n\r\n  <TeacherName teacher={classinfo.teacher} />\r\n{/if}\r\n<TimeShower \r\n  time={formatDateTime(classinfo.time).timePart} \r\n  date={formatDateTime(classinfo.time).formattedDate} />\r\n\r\n  \r\n{#if isUserTeacher}\r\n  <!-- Teacher view - all rating fields -->\r\n  <label for=\"technicalIssuesRating\">\r\n    Techninis pamokos sklandumas\r\n    <CommentTipComponent infoText=\"<strong>Techninis pamokos sklandumas</strong><br>\r\n                                  <strong>1 Žvaigždutė =</strong> Pamoka neįvyko dėl techninių nesklandumų.<br>\r\n                                  <strong>3 Žvaigždutės =</strong> Buvo techninių nesklandumų, bet pamoka įvyko.<br>\r\n                                  <strong>5 Žvaigždutės =</strong> Techninių nesklandumų nebuvo.<br>\r\n                                  Jeigu buvo techninių nesklandumų, aprašykite juos komentarų skiltyje.\" />\r\n  </label>\r\n\r\n  <StarRating \r\n    rating={technicalIssuesRating}         \r\n    onRate={(value) => handleRatingUpdate('technicalIssuesRating', value)}\r\n  />\r\n  <label for=\"learned\">\r\n    Mokinio pastangos ir susikaupimas pamokoje\r\n    <CommentTipComponent infoText=\"<strong>Pastangos ir dalyvavimas</strong><br>\r\n                                    <strong>1 žvaigždutė=</strong> Mokinys buvo išsiblaškęs ir nedalyvavo pamokoje.<br>\r\n                                    <strong>3 žvaigždutės=</strong> Mokinys nedalyvavo pilnu pajėgumu, bet nebuvo išsiblaškęs.<br>\r\n                                    <strong>5 žvaigždutės=</strong> Mokinys aktyviai dalyvavo ir rodė maksimalias pastangas.\" />\r\n  </label>\r\n  <StarRating \r\n    rating={learned}         \r\n    onRate={(value) => handleRatingUpdate('learned', value)}\r\n  />\r\n  <label for=\"effortRating\">\r\n    Mokinė/ys suprato ir išmoko mokomą temą\r\n    <CommentTipComponent infoText=\"<strong>Įsigilinimas į mokoma temą</strong><br>\r\n    <strong>1 žvaigždutė=</strong> Mokinė/ys sunkiai suprato temą ir beveik nieko neišmoko.<br>\r\n    <strong>3 žvaigždutės=</strong> Mokinė/ys suprato dalį temos, tačiau reikės paskirti daugiau laiko.<br>\r\n    <strong>5 žvaigždutės=</strong> Mokinė/ys puikiai suprato ir įsisavino mokomą temą.\" />\r\n  </label>\r\n  <StarRating \r\n    rating={effortRating}         \r\n    onRate={(value) => handleRatingUpdate('effortRating', value)}\r\n  />\r\n  <label for=\"generalRating\">\r\n    Bendras Pamokos įvertinimas\r\n  </label>\r\n  <StarRating \r\n    rating={generalRating}         \r\n    onRate={(value) => handleRatingUpdate('generalRating', value)}\r\n  />\r\n{:else}\r\n  <!-- Student view - only general rating -->\r\n  <label for=\"generalRating\">\r\n    Pamokos Įvertinimas\r\n  </label>\r\n  <StarRating \r\n    rating={generalRating}         \r\n    onRate={(value) => handleRatingUpdate('generalRating', value)}\r\n  />\r\n{/if}\r\n\r\n{#if isUserTeacher}\r\n<CheckBoxForLeaveComment\r\n  subject=\"Mokinė/ys atėjo laiku į pamoką\"\r\n  isSelected={isCheckboxSelected}\r\n  onToggle={handleCheckboxToggle}\r\n/>\r\n\r\n<CheckBoxForLeaveComment\r\n  subject=\"Mokinė/ys atliko namų darbus\"\r\n  isSelected={isHomeworkSelected}\r\n  onToggle={handleHomeworkToggle}\r\n/>\r\n\r\n<CheckBoxForLeaveComment\r\n  subject=\"Pamoka įvyko\"\r\n  isSelected={isCompleteSelected}\r\n  onToggle={handleCompleteToggle}\r\n/>\r\n{/if}\r\n\r\n<label for=\"extraDetails\" class=\"custom-label\">\r\n    <CommentTipComponent \r\n      infoText=\"<strong>Papildomi komentarai</strong><br>\r\n      Prašome pateikti išsamią informaciją ar pastabas apie pamoką, ypač jei kuris nors iš aukščiau pateiktų įvertinimų mažesnis nei 5\"\r\n      className=\"last-tooltip\"/>\r\n    Papildomi komentarai <br>\r\n    \r\n</label>\r\n<TextField \r\n      id=\"extraDetails\"\r\n      placeholder=\"\" \r\n      bind:value={extraDetails} \r\n  />\r\n\r\n\r\n<!-- Submit button -->\r\n{#if errorMessage}<p class=\"error-message\">{errorMessage}</p>{/if}\r\n<button type=\"button\" disabled={isUserTeacher === null} on:click={handleSubmit}>Pateikti Atsiliepimą</button>\r\n</div>\r\n\r\n<style>\r\n.custom-label {\r\n    display: flex;\r\n    flex-direction: row;  /* Horizontal alignment of text and icon */\r\n    align-items: center;  /* Keep icon aligned with text vertically */\r\n    margin-bottom: 5px;\r\n    margin-top: 20px;\r\n    font-size: 1.17em;\r\n    font-weight: bold;\r\n    gap: 5px; /* Space between text and the CommentTipComponent icon */\r\n    flex-direction: row-reverse;\r\n}\r\n  \r\n.top-bar {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 10px;\r\n    background-color: transparent;\r\n    border-bottom: 1px solid #000000;\r\n    margin-bottom: 40px;\r\n  }\r\n  .filler {\r\n    width: 50px;\r\n  }\r\n  label{\r\n    display:flex;\r\n    flex-direction: row;\r\n    align-items: center;\r\n  }\r\n  .label {\r\n    font-size: x-large;\r\n  }\r\n  \r\n  .icon {\r\n    width: 50px;\r\n    height: 50px;\r\n  }\r\n  .form-container{\r\n      padding: 15px;\r\n      background-color: white;\r\n      display: flex;\r\n      flex-direction: column;\r\n      margin-bottom: 15px;\r\n      gap: 10px;\r\n      box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n      border-radius: 8px;\r\n      flex: none;\r\n      color: black;\r\n      align-items: flex-start;\r\n  }\r\n  button{\r\n      height: 60px;\r\n      width: 100%;\r\n      display: flex;\r\n      flex-direction: row;\r\n      justify-content: center;\r\n      align-items: center;\r\n      padding: 12px 20px;\r\n      gap: 10px;\r\n      border-radius: 6px;\r\n      border: 2px solid #333;\r\n      font-weight: bold;\r\n      font-size: large;\r\n      background: white;\r\n      box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n      border-radius: 8px;\r\n      transition: background-color 0.3s ease, color 0.3s ease; /* Add color transition */\r\n      }\r\n      button:hover{\r\n        background-color: #14695b;\r\n        color:white;\r\n      }\r\n</style>\r\n","<script>\r\n \r\n   </script>\r\n   \r\n   <style>\r\n     .container {\r\n         display: flex;\r\n         flex-direction: column;\r\n         align-items: center;\r\n         width:100%;\r\n \r\n     }\r\n   \r\n     \r\n     .top-bar {\r\n         width: 100%;\r\n         text-align: center;\r\n         border-bottom: 2px solid #ccc;\r\n         display: flex;\r\n         flex-direction: row;\r\n         justify-content: space-between;\r\n         align-items: center;\r\n         }\r\n             \r\n \r\n \r\n     .content {\r\n       margin-top: 50px; /* Ensures the content is not under the top bar */\r\n       color: #000;\r\n       display:flex;\r\n       justify-content: space-around;\r\n \r\n     }\r\n     \r\n     .illustration {\r\n       margin-top: 20px;\r\n     }\r\n     .filler{\r\n         width:60px;\r\n     }\r\n     .label{\r\n         font-size:23px;\r\n     }\r\n     .illustration img {\r\n       width: 100%;\r\n       height: auto;\r\n       max-height:500px;\r\n     }\r\n     .exit-button{\r\n         display:flex;\r\n         justify-content: flex-end;\r\n     }\r\n     .exit-button img{\r\n         width:80%;\r\n         max-width:60px;\r\n     }\r\n   </style>\r\n   \r\n   <div class=\"container\">\r\n     <div class=\"top-bar\">\r\n         <div class=\"filler\"></div>\r\n         <div class='label'>Palikti Atsiliepimą</div>\r\n       <a href='#/schedule' class='exit-button'>\r\n         <img src='/static/icons/exitButtonIcon.png' alt=\"\" class=\"icon\" />\r\n     </a>\r\n     </div>\r\n     <div class=\"content\">\r\n         <div class=\"illustration\">\r\n           <img src=\"/static/icons/noteSuccessIcon.png\" alt=\"Illustration\">\r\n         </div>\r\n         \r\n       </div>\r\n     \r\n   </div>\r\n   ","<script>\r\n    import { onMount } from 'svelte';\r\n    import { link } from 'svelte-spa-router';\r\n    import StudentName from './StudentNameComponent.svelte'\r\n    import ClassName from './ClassNameComponent.svelte';\r\n    import TeacherName from './TeacherNameComponent.svelte';\r\n    import TimeShower from './TimeShowerComponent.svelte';\r\n    import ButtonToJoinClass from './ButtonToJoinClassComponent.svelte';\r\n    import FilterButtons from './FilterButtonsForReschRequestsComponent.svelte';\r\n    import ButtonToComment from './ButtonToLeaveCommentComponent.svelte';\r\n    import RescheduleButton from './ButtonToRescheduleComponent.svelte';\r\n    import StudentNameComponent from './StudentNameComponent.svelte';\r\n    import NavBarReusable from './NavbarReusable.svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n    \r\n    const apiBase = getApiBase();\r\n    let events = [];\r\n    let currentFilter = 'all';\r\n    let isUserTeacher = false;\r\n    \r\n\r\n    function getClassForEvent(event) {\r\n        // Check for responsibility incidents first - apply red border\r\n        if (event.has_responsibility_incident) {\r\n            return 'red-border responsibility-incident';\r\n        }\r\n        // Determine the border color based on the logic provided\r\n        if (event.status === 'Accepted') {\r\n            return 'green-border';\r\n        }\r\n        if (event.status === 'Denied'){\r\n            return 'red-border';\r\n        }\r\n        if ((event.directedTo === 'Teacher' && isUserTeacher) || (event.directedTo === 'Student' && !isUserTeacher)) {\r\n            return 'yellow-border';\r\n        }\r\n        if ((event.directedTo === 'Teacher' && !isUserTeacher) || (event.directedTo === 'Student' && isUserTeacher)) {\r\n            return 'grey-border';\r\n        }\r\n            return ''; // Default case, if needed\r\n    }\r\n\r\n    function getHeaderText(event) {\r\n        // Check for responsibility incidents first\r\n        if (event.has_responsibility_incident && event.incident_type === 'Atsaukimas') {\r\n            return 'PAMOKA ATŠAUKTA TĄ PAČIA DIENĄ';\r\n        }\r\n        if (event.status === 'Accepted') {\r\n            return 'PATVIRTINTA';\r\n        }\r\n        if (event.status === 'Denied') {\r\n            return 'NEPATVIRTINTA';\r\n        }\r\n        if ((event.directedTo === 'Teacher' && isUserTeacher) || (event.directedTo === 'Student' && !isUserTeacher)) {\r\n            return 'REIKIA ATSAKYTI';\r\n        }\r\n        if ((event.directedTo === 'Teacher' && !isUserTeacher) || (event.directedTo === 'Student' && isUserTeacher)) {\r\n            return 'LAUKIAMA ATSAKYMO';\r\n        }\r\n        return ''; // Default case, if needed\r\n    }\r\n    // Function to change the link text when clicked\r\n    function changeLinkText(event) {\r\n      const link = event.target;\r\n      link.textContent = \"Reschedule request sent!\";\r\n    }\r\n    const formatDateTime = (datetime) => {\r\n        let parts = datetime.split(\" \");\r\n        let datePart = parts[0];\r\n        let timePart = parts[1];\r\n        console.log(parts)\r\n        console.log(datePart)\r\n        console.log(timePart)\r\n        \r\n        \r\n\r\n       \r\n        return { timePart, datePart };\r\n    };\r\n    function isPastEvent(eventTime) {\r\n      const eventDateTime = new Date(eventTime);\r\n      const currentDateTime = new Date();\r\n      return eventDateTime < currentDateTime;\r\n    }\r\n    \r\n    // Function to handle confirm/deny button click\r\n  const handleAction = async (event, action) => {\r\n    const token = localStorage.getItem('jwtToken');\r\n\r\n    try {\r\n      const response = await fetch(`${apiBase}/teacher_playground/rescheduleReq/`, {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        },\r\n        body: JSON.stringify({\r\n          request_id: event.idGcal,\r\n          action: action\r\n        })\r\n      });\r\n\r\n      if (response.ok) {\r\n        // Refresh the events after action is performed\r\n        fetchEvents();\r\n      } else {\r\n        console.error('Failed to perform action:', response.statusText);\r\n      }\r\n    } catch (error) {\r\n      console.error('Error in action:', error);\r\n    }\r\n  };\r\n\r\n    const fetchEvents = async () => {\r\n      const token = localStorage.getItem('jwtToken'); // Retrieve token from localStorage\r\n  \r\n      if (!token) {\r\n        console.error('No JWT token found. User might not be logged in.');\r\n        return;\r\n      }\r\n  \r\n      try {\r\n        // Determine the URL\r\n        const url = `${apiBase}/teacher_playground/rescheduleReq/?filter=${currentFilter}`;\r\n  \r\n        console.log(\"Fetching events from:\", url);\r\n  \r\n        // Make the request\r\n        const response = await fetch(url, {\r\n          method: 'GET',\r\n          headers: {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json'\r\n          }\r\n        });\r\n  \r\n        if (response.ok) {\r\n          const data = await response.json();\r\n          events = data.events;\r\n          isUserTeacher = data.isUserTeacher\r\n          console.log(\"These are the mf eventicus\")\r\n          console.log(events)\r\n          console.log(isUserTeacher)\r\n        } else {\r\n            if (response.status === 401) {\r\n                // If response is 401 Unauthorized, redirect to login\r\n                alert('Reikia prisijungti iš naujo.');\r\n                localStorage.removeItem('jwtToken'); // Optional: Clear any stored tokens\r\n                window.location.href = '#/about'; // Redirect to login page\r\n            } else {\r\n                // Handle other errors\r\n                alert('Error submitting form!');\r\n            }\r\n        }\r\n      } catch (error) {\r\n        console.error(\"Failed to fetch events:\", error);\r\n      }\r\n      \r\n    };\r\n  \r\n    // Handle filter change event from FilterButtons component\r\n    const handleFilterChange = (event) => {\r\n      currentFilter = event.detail.filter; // Update the filter\r\n      fetchEvents(); // Fetch new events based on the filter\r\n    };\r\n  \r\n    // Fetch events when the component is mounted\r\n    onMount(() => {\r\n      fetchEvents();\r\n    });\r\n    function getHeaderClass(event) {\r\n      // Check for responsibility incidents first - apply red header\r\n      if (event.has_responsibility_incident) {\r\n          return 'red-header';\r\n      }\r\n      if (event.status === 'Accepted') {\r\n          return 'green-header';\r\n      }\r\n      if (event.status === 'Denied') {\r\n          return 'red-header';\r\n      }\r\n      if ((event.directedTo === 'Teacher' && isUserTeacher) || (event.directedTo === 'Student' && !isUserTeacher)) {\r\n          return 'yellow-header';\r\n      }\r\n      if ((event.directedTo === 'Teacher' && !isUserTeacher) || (event.directedTo === 'Student' && isUserTeacher)) {\r\n          return 'grey-header';\r\n      }\r\n      return ''; // Default case, if needed\r\n  }\r\n  </script>\r\n  \r\n  <style>\r\n    .red-border {\r\n        border-left: 4px solid #dc2626;\r\n        background-color: #fef2f2;\r\n    }\r\n    \r\n    .responsibility-incident {\r\n        background-color: #ffcccc;\r\n    }\r\n\r\n    .yellow-border {\r\n        border-left: 4px solid #f59e0b;\r\n        background-color: #fffbeb;\r\n    }\r\n\r\n    .green-border {\r\n        border-left: 4px solid #059669;\r\n        background-color: #f0fdf4;\r\n    }\r\n    \r\n    .grey-border {\r\n        border-left: 4px solid #6b7280;\r\n        background-color: #f9fafb;\r\n    }\r\n\r\n    .header {\r\n        display: flex;\r\n        justify-content: flex-start;\r\n        align-items: center;\r\n        padding: 0 0 8px 0;\r\n        font-size: 1rem;\r\n        font-weight: 700;\r\n        text-transform: uppercase;\r\n        letter-spacing: 0.05em;\r\n        margin-bottom: 12px;\r\n        border-bottom: 1px solid #e5e7eb;\r\n    }\r\n\r\n    .red-header {\r\n        color: #dc2626;\r\n    }\r\n\r\n    .yellow-header {\r\n        color: #f59e0b;\r\n    }\r\n\r\n    .green-header {\r\n        color: #059669;\r\n    }\r\n    \r\n    .grey-header {\r\n        color: #6b7280;\r\n    }\r\n\r\n    /* Button styling */\r\n    button {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 10px 16px;\r\n        width: 100%;\r\n        height: 44px;\r\n        background-color: #ffffff;\r\n        border: 1px solid #d1d5db;\r\n        border-radius: 6px;\r\n        font-size: 0.875rem;\r\n        font-weight: 500;\r\n        color: #374151;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n        outline: none;\r\n    }\r\n\r\n    button:hover {\r\n        background-color: #f3f4f6;\r\n        border-color: #9ca3af;\r\n    }\r\n\r\n    button:focus {\r\n        box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.5);\r\n    }\r\n\r\n    .confirm-button {\r\n        background-color: #059669;\r\n        border-color: #059669;\r\n        color: white;\r\n        margin-bottom: 8px;\r\n    }\r\n\r\n    .confirm-button:hover {\r\n        background-color: #047857;\r\n        border-color: #047857;\r\n    }\r\n\r\n    .deny-button {\r\n        background-color: #dc2626;\r\n        border-color: #dc2626;\r\n        color: white;\r\n    }\r\n\r\n    .deny-button:hover {\r\n        background-color: #b91c1c;\r\n        border-color: #b91c1c;\r\n    }\r\n\r\n    .classcontainer {\r\n        padding: 20px;\r\n        background-color: #ffffff;\r\n        display: flex;\r\n        flex-direction: column;\r\n        margin-bottom: 16px;\r\n        gap: 16px;\r\n        box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);\r\n        border-radius: 8px;\r\n        border: 1px solid #e5e7eb;\r\n        color: #374151;\r\n    }\r\n\r\n    .time-section {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 8px;\r\n        margin: 12px 0;\r\n    }\r\n\r\n    .time-item {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 4px;\r\n    }\r\n\r\n    .time-label {\r\n        font-size: 0.875rem;\r\n        font-weight: 500;\r\n        color: #6b7280;\r\n    }\r\n    \r\n    .senasLaikas .time-label {\r\n        color: #dc2626;\r\n    }\r\n    \r\n    .naujasLaikas .time-label {\r\n        color: #059669;\r\n    }\r\n\r\n    .addi_text {\r\n        font-size: 0.875rem;\r\n        color: #6b7280;\r\n        font-style: italic;\r\n        padding: 12px;\r\n        background-color: #f9fafb;\r\n        border-radius: 6px;\r\n        border-left: 3px solid #d1d5db;\r\n    }\r\n\r\n    .no-events-message {\r\n        text-align: center;\r\n        color: #6b7280;\r\n        font-size: 1rem;\r\n        padding: 40px 20px;\r\n    }\r\n\r\n    .button-group {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 8px;\r\n        margin-top: 8px;\r\n    }\r\n  </style>\r\n  \r\n  <NavBarReusable label=\"Pakeitimai\" />\r\n  \r\n  <FilterButtons \r\n    currentFilter={currentFilter} \r\n    on:filterChange={handleFilterChange} />\r\n  \r\n    <div class=\"classSection\">\r\n      {#if events.length > 0}\r\n        {#each events as event}\r\n          <div class=\"classcontainer {getClassForEvent(event)}\">\r\n            <!-- Dynamic header based on status -->\r\n            <div class=\"header {getHeaderClass(event)}\">\r\n              {getHeaderText(event)}\r\n            </div>\r\n      \r\n            <!-- Render the reschedule request details -->\r\n            <div>\r\n              <ClassName name={event.clName} />\r\n              <StudentName student={event.studName} />\r\n              <TeacherName teacher={event.teacher} />\r\n              \r\n              <div class=\"time-section\">\r\n                {#if event.has_responsibility_incident && event.type === 'Cancel'}\r\n                  <!-- For responsibility incidents with cancel: only show old time -->\r\n                  <div class='senasLaikas time-item'>\r\n                    <span class=\"time-label\">Senas laikas:</span>\r\n                    <TimeShower \r\n                      time={formatDateTime(event.oldDisplay).timePart} \r\n                      date={formatDateTime(event.oldDisplay).datePart} \r\n                    />\r\n                  </div>\r\n                {:else}\r\n                  <!-- For regular reschedule: show both old and new time -->\r\n                  <div class='senasLaikas time-item'>\r\n                    <span class=\"time-label\">Senas laikas:</span>\r\n                    <TimeShower \r\n                      time={formatDateTime(event.oldDisplay).timePart} \r\n                      date={formatDateTime(event.oldDisplay).datePart} \r\n                    />\r\n                  </div>\r\n                  {#if event.newDisplay}\r\n                  <div class='naujasLaikas time-item'>\r\n                    <span class=\"time-label\">Naujas laikas:</span>\r\n                    <TimeShower \r\n                      time={formatDateTime(event.newDisplay).timePart} \r\n                      date={formatDateTime(event.newDisplay).datePart} \r\n                    />\r\n                  </div>\r\n                  {/if}\r\n                {/if}\r\n              </div>\r\n            </div>\r\n    \r\n            <!-- Pending event logic -->\r\n            {#if event.has_responsibility_incident && event.type === 'Cancel'}\r\n              <!-- Responsibility incidents with cancel are already processed, no actions needed -->\r\n            {:else if event.status === 'Pending' && getHeaderClass(event) === 'grey-header'}\r\n              <div class=\"addi_text\">\r\n                Laukiama atsakymo iš pamokos dalyvių\r\n              </div>\r\n            {:else if event.status === 'Pending' && getHeaderClass(event) !== \"grey-header\"}\r\n              <div class=\"button-group\">\r\n                <button class=\"confirm-button\" on:click={() => handleAction(event, 'confirm')}>\r\n                  Patvirtinti\r\n                </button>\r\n                <button class=\"deny-button\" on:click={() => handleAction(event, 'deny')}>\r\n                  Atmesti\r\n                </button>\r\n              </div>\r\n            {:else}\r\n              <RescheduleButton classId={event.idGcal} label=\"Pasiūlyti kitą laiką\" />\r\n            {/if}\r\n          </div>\r\n        {/each}\r\n      {:else}\r\n        <div class=\"no-events-message\">\r\n          Nėra prašymų keisti pamokas.\r\n        </div>\r\n      {/if}\r\n    </div>\r\n    ","<script>\r\n\r\n    import { push } from 'svelte-spa-router';\r\n\r\n\r\n    export let currentFilter = 'Laisvi laikai'; // Filter state passed from parent\r\n</script>\r\n\r\n\r\n<div class=\"filter-buttons\">\r\n    <!-- Button for 'Laisvi laikai' with conditional class 'selected' -->\r\n    <button \r\n        class:selected={currentFilter === 'Laisvi laikai'} \r\n        on:click={() => push('/settingsAndTimeslots')}>\r\n        Laikai\r\n    </button>\r\n    \r\n    <!-- Button for 'Paskyra' with conditional class 'selected' -->\r\n    <button \r\n        class:selected={currentFilter === 'Paskyra'} \r\n        on:click={() => push('/account')}>\r\n        Paskyra\r\n    </button>\r\n</div>\r\n\r\n<style>\r\n    .filter-buttons {\r\n        display: flex;\r\n        gap: 0.9rem;\r\n        height: 60px;\r\n        justify-content: space-between;\r\n    }\r\n\r\n    button { \r\n        border-radius: 8px;\r\n        background-color: #eeebdb;\r\n        color: #14695b;\r\n        font-size: 1rem;\r\n        font-weight: bold;\r\n        cursor: pointer;\r\n        transition: background-color 0.3s, color 0.3s;\r\n        width:100%;\r\n    }\r\n\r\n    .selected {\r\n        background-color: #14695b; /* Change to the color you want */\r\n        color: white;\r\n    }\r\n\r\n    button:hover {\r\n        background-color: #14695b;\r\n        color: white;\r\n    }\r\n</style>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import TimeSlotComponent from './TimeSlotComponent.svelte'\r\n    import TimeSlotInputComponent from './TimeSlotInputComponent.svelte';\r\n    import FilterButtonsForSettingsPage from './FilterButtonsForSettingsPage.svelte';\r\n    import NavBarReusable from './NavbarReusable.svelte';\r\n    import TeachingStartDateComponent from './TeachingStartDateComponent.svelte';\r\n    \r\n    window.csrfToken = \"{{ csrf_token }}\";\r\n    const getCsrfToken = () => {\r\n        const csrfToken = document.cookie.split('; ').find(row => row.startsWith('csrftoken='));\r\n        return csrfToken ? csrfToken.split('=')[1] : '';\r\n    };\r\n\r\n    const deleteTimeSlot = async(timeslot) => {\r\n        const token = localStorage.getItem('jwtToken');\r\n        const load = {\r\n            timeslot_id: timeslot[4] // Use the timeslot ID for deletion\r\n        };\r\n\r\n        try {\r\n            \r\n        const response = await fetch('/studentplayground/delete-timeslot/', {\r\n            method: 'DELETE',\r\n            headers: {\r\n                'Authorization': `Bearer ${token}`,\r\n                'Content-Type': 'application/json',\r\n            },\r\n            credentials: 'include',\r\n            body: JSON.stringify(load)\r\n        });\r\n\r\n        if (response.ok) {\r\n            // Small delay to ensure backend has processed the deletion\r\n            setTimeout(() => {\r\n                fetchUserTimeslots();\r\n            }, 100);\r\n        } else {\r\n            alert('Failed to delete timeslot');\r\n        }\r\n        } catch (error) {\r\n        alert('Error deleting timeslot');\r\n        }\r\n    };\r\n\r\n\r\n\r\n    let userTimeSlots = [];\r\n    let teachingStartDate = '';\r\n    let refreshTrigger = 0; // Add a trigger to force reactivity\r\n    let isUserTeacher = false; // Track if the logged-in user is a teacher\r\n    \r\n    // Reactive statement to force re-render when data changes\r\n    $: displayTimeSlots = refreshTrigger >= 0 ? userTimeSlots.map((slot, index) => [...slot, index]) : [];\r\n    \r\n\r\n\r\n    // Function to check if user is a teacher\r\n    const checkIfUserIsTeacher = async () => {\r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            const response = await fetch('/studentplayground/isUserTeacher/', {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n\r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                isUserTeacher = data.isUserTeacher;\r\n            } else {\r\n                console.error('Failed to check teacher status');\r\n                isUserTeacher = false;\r\n            }\r\n        } catch (error) {\r\n            console.error(\"Failed to fetch user role:\", error);\r\n            isUserTeacher = false;\r\n        }\r\n    };\r\n\r\n    const fetchUserTimeslots = async () => {\r\n        const token = localStorage.getItem('jwtToken')\r\n    \r\n        try {\r\n        const response = await fetch('/studentplayground/settings/', {\r\n            method: 'GET',\r\n            headers: {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json',\r\n            }\r\n        });\r\n\r\n        if (response.ok) {\r\n            const data = await response.json();\r\n            \r\n            // Force reactivity by clearing and reassigning\r\n            userTimeSlots = [];\r\n            userTimeSlots = data.user_timeslots;\r\n            teachingStartDate = data.teaching_start_date || '';\r\n            refreshTrigger++; // Trigger reactive update\r\n        } else {\r\n            if (response.status === 401) {\r\n                // If response is 401 Unauthorized, redirect to login\r\n                alert('Reikia prisijungti iš naujo.');\r\n                localStorage.removeItem('jwtToken'); // Optional: Clear any stored tokens\r\n                window.location.href = '#/about'; // Redirect to login page\r\n            } else {\r\n                // Handle other errors\r\n                alert('Error loading settings page');\r\n            }\r\n            } \r\n        } catch (error) {\r\n        console.error(\"Failed to fetch user role:\", error);\r\n        return null;\r\n        }\r\n    };\r\n    onMount(async () => {\r\n        await checkIfUserIsTeacher();\r\n        await fetchUserTimeslots();\r\n    })\r\n\r\n</script>\r\n\r\n<NavBarReusable label=\"Mano Profilis\" />\r\n<FilterButtonsForSettingsPage\r\n currentFilter='Laisvi laikai' >\r\n </FilterButtonsForSettingsPage>\r\n{#if isUserTeacher}\r\n<div class=\"classcontainer\">\r\n    <TeachingStartDateComponent teachingStartDate={teachingStartDate} />\r\n</div>\r\n{/if}\r\n\r\n<div class=\"classcontainer\">\r\n    <TimeSlotInputComponent></TimeSlotInputComponent>\r\n    <h2>Užregistruoti laisvi laikai</h2>\r\n    {#each displayTimeSlots as timeslot, index (timeslot[4])}\r\n        <TimeSlotComponent \r\n            timeslot={timeslot} \r\n            onRemove={() => deleteTimeSlot(timeslot)} \r\n        />\r\n  {/each}\r\n</div>\r\n\r\n<style>\r\n    \r\n    .classcontainer {\r\n      padding: 15px;\r\n      background-color: #eeebdb;\r\n      display: flex;\r\n      flex-direction: column;\r\n      margin-bottom: 15px;\r\n      gap: 10px;\r\n      box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n      border-radius: 8px;\r\n      color: black;\r\n      align-items: flex-start;\r\n    }\r\n    \r\n</style>","<script>\r\n    export let teachingStartDate = '';\r\n    \r\n    // Separate variables for display (saved) and input (editing)\r\n    let savedStartDate = teachingStartDate || '2025-09-01';\r\n    let inputStartDate = teachingStartDate || '2025-09-01';\r\n    \r\n    // Update both variables when teachingStartDate prop changes\r\n    $: {\r\n        savedStartDate = teachingStartDate || '2025-09-01';\r\n        inputStartDate = teachingStartDate || '2025-09-01';\r\n    }\r\n    \r\n    const submitStartDate = async () => {\r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        const formData = {\r\n            start_date: inputStartDate || null,\r\n        };\r\n    \r\n        try {\r\n            const response = await fetch('/studentplayground/update-teaching-start-date/', {\r\n            method: 'POST',\r\n            headers: {\r\n                'Authorization': `Bearer ${token}`,\r\n                'Content-Type': 'application/json',\r\n            },\r\n            body: JSON.stringify(formData),\r\n            });\r\n    \r\n            if (!response.ok) {\r\n                throw new Error('Nepavyko išsaugoti datos');\r\n            }\r\n    \r\n            const result = await response.json();\r\n            if (result.success) {\r\n                // Update the saved date only after successful submission\r\n                savedStartDate = inputStartDate;\r\n                alert('Mokymo pradžios data sėkmingai išsaugota!');\r\n            } else {\r\n                alert('Klaida: ' + result.message);\r\n            }\r\n        } catch (error) {\r\n            console.error('Error submitting start date:', error);\r\n            alert('Klaida išsaugant datą');\r\n        }\r\n    };\r\n</script>\r\n\r\n<style>\r\n    .form-container {\r\n        width: 100%;\r\n    }\r\n\r\n    .form-group {\r\n        margin-bottom: 16px;\r\n        display: flex;\r\n        flex-direction: column;\r\n        width: 60%;\r\n    }\r\n\r\n    .form-row {\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: flex-start;\r\n        gap: 15px;\r\n    }\r\n\r\n    button {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 12px 20px;\r\n        gap: 10px;\r\n        \r\n        height: 45px;\r\n        \r\n        /* White background */\r\n        background-color: white;\r\n        \r\n        /* Black border */\r\n        border: 2px solid #000000;\r\n        \r\n        /* Box shadow */\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        \r\n        /* Rounded corners */\r\n        border-radius: 8px;\r\n        \r\n        /* Inside auto layout */\r\n        flex: none;\r\n        order: 0;\r\n        flex-shrink: 0;\r\n        flex-grow: 0;\r\n        \r\n        /* Remove default button styling */\r\n        outline: none;\r\n        cursor: pointer;\r\n        \r\n        /* Remove the default button background on focus */\r\n        background-image: none;\r\n        transition: background-color 0.3s ease, color 0.3s ease;\r\n    }\r\n\r\n    /* Button hover effect */\r\n    button:hover {\r\n        background-color: #14695b;\r\n        color: white;\r\n    }\r\n\r\n    input {\r\n        padding: 8px;\r\n        border-radius: 6px;\r\n        border: 1px solid #14695b;\r\n    }\r\n\r\n    span {\r\n        margin-bottom: 5px;\r\n        font-weight: bold;\r\n    }\r\n\r\n    button span {\r\n        font-weight: bolder;\r\n        font-size: larger;\r\n    }\r\n\r\n    .current-date-indicator {\r\n        margin-bottom: 16px;\r\n        padding: 12px;\r\n        background-color: #f0f8f5;\r\n        border: 1px solid #14695b;\r\n        border-radius: 6px;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n    }\r\n\r\n    .current-label {\r\n        font-weight: bold;\r\n        color: #14695b;\r\n    }\r\n\r\n    .current-date {\r\n        font-weight: normal;\r\n        color: #333;\r\n        background-color: white;\r\n        padding: 4px 8px;\r\n        border-radius: 4px;\r\n        border: 1px solid #ddd;\r\n    }\r\n</style>\r\n\r\n<div class=\"form-container\">\r\n    <h2>Mokymo pradžios data</h2>\r\n    \r\n    <!-- Current date indicator -->\r\n    <div class=\"current-date-indicator\">\r\n        <span class=\"current-label\">Dabartinė pradžios data:</span>\r\n        <span class=\"current-date\">{savedStartDate}</span>\r\n    </div>\r\n    \r\n    <div class=\"form-row\">\r\n        <div class=\"form-group\">\r\n            <span>Pageidaujama pradžios data</span>\r\n            <input type=\"date\" bind:value={inputStartDate} />\r\n        </div>\r\n        \r\n        <button on:click={submitStartDate}>\r\n            <span>Išsaugoti datą</span>\r\n        </button>\r\n    </div>\r\n</div>\r\n","<script>\r\n    let daysOfWeek = [\r\n      { value: 'monday', label: 'Pirmadienis' },\r\n      { value: 'tuesday', label: 'Antradienis' },\r\n      { value: 'wednesday', label: 'Trečiadienis' },\r\n      { value: 'thursday', label: 'Ketvirtadienis' },\r\n      { value: 'friday', label: 'Penktadienis' },\r\n      { value: 'saturday', label: 'Šeštadienis' },\r\n      { value: 'sunday', label: 'Sekmadienis' },\r\n    ];\r\n    \r\n    let startTime = '';\r\n    let endTime = '';\r\n    let selectedDay = '';\r\n\r\n    // Retrieve user from localStorage when the component is created\r\n    const submitForm = async () => {\r\n        const token = localStorage.getItem('jwtToken')\r\n        console.log(\"This is the token:)\")\r\n        console.log(token)\r\n        \r\n        const formData = {\r\n            day_of_week: selectedDay,\r\n            start_time: startTime,\r\n            end_time: endTime,\r\n        };\r\n    \r\n        try {\r\n            const response = await fetch('/studentplayground/add-timeslot/', {\r\n            method: 'POST',\r\n            headers: {\r\n                'Authorization': `Bearer ${token}`,\r\n                'Content-Type': 'application/json',\r\n            },\r\n            body: JSON.stringify(formData),\r\n            });\r\n    \r\n            if (!response.ok) {\r\n                throw new Error('Something went wrong with the request');\r\n            }\r\n    \r\n            console.log('Form data submitted successfully:', await response.json());\r\n            window.location.reload();\r\n        } catch (error) {\r\n            console.error('Error submitting form:', error);\r\n        }\r\n        };\r\n  </script>\r\n  \r\n  <style>\r\n    .form-container {\r\n     \r\n        width:100%;\r\n    }\r\n  \r\n    .form-group {\r\n      margin-bottom: 16px;\r\n      display:flex;\r\n      flex-direction: column;\r\n      width:40%;\r\n      min-width: 120px;\r\n      flex: 1;\r\n    }\r\n    .form-group2{\r\n      margin-bottom: 16px;\r\n      display:flex;\r\n      flex-direction: column;\r\n      \r\n    }\r\n  \r\n    button {\r\n      background-color: #fab45a;\r\n      color: #000;\r\n      padding: 12px;\r\n      border: none;\r\n      border-radius: 4px;\r\n      cursor: pointer;\r\n    }\r\n  \r\n    button:hover {\r\n      background-color: #927043;\r\n    }\r\n    input{\r\n        \r\n        border-radius: 6px;\r\n        border: 1px solid #14695b;\r\n    }\r\n    select {\r\n      width: 100%;\r\n      padding: 8px;\r\n      border-radius: 6px;\r\n      border: 1px solid #14695b;\r\n    }\r\n    .time-container{\r\n        display:flex;\r\n        flex-direction:row;\r\n        justify-content:space-between;\r\n        gap: 10px;\r\n        flex-wrap: wrap;\r\n    }\r\n    span{\r\n        margin-bottom:5px;\r\n        font-weight: bold;\r\n    }\r\n    button span {\r\n        font-weight: bolder;\r\n        font-size:larger;\r\n    }\r\n\r\n    button {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 12px 20px;\r\n        gap: 10px;\r\n    \r\n        width: 100%;\r\n        height: 45px;\r\n    \r\n        /* Purple background */\r\n        background-color: white;\r\n    \r\n        /* Black border */\r\n        border: 2px solid #000000;\r\n    \r\n        /* Box shadow */\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    \r\n        /* Rounded corners */\r\n        border-radius: 8px;\r\n    \r\n        /* Inside auto layout */\r\n        flex: none;\r\n        order: 0;\r\n        align-self: stretch;\r\n        flex-grow: 0;\r\n    \r\n        /* Remove default button styling */\r\n        outline: none;\r\n        cursor: pointer;\r\n  \r\n        /* Remove the default button background on focus */\r\n        background-image: none;\r\n        transition: background-color 0.3s ease, color 0.3s ease;\r\n    }\r\n\r\n    /* Button hover effect */\r\n    button:hover {\r\n        background-color: #14695b;\r\n        color:white;\r\n    }\r\n\r\n    /* Mobile responsiveness */\r\n    @media (max-width: 768px) {\r\n        .time-container {\r\n            flex-direction: column;\r\n            gap: 15px;\r\n        }\r\n        \r\n        .form-group {\r\n            width: 100%;\r\n            min-width: unset;\r\n        }\r\n    }\r\n\r\n    @media (max-width: 480px) {\r\n        .form-container {\r\n            padding: 10px;\r\n        }\r\n        \r\n        .time-container {\r\n            gap: 12px;\r\n        }\r\n        \r\n        input[type=\"time\"] {\r\n            padding: 12px 8px;\r\n            font-size: 16px; /* Prevents zoom on iOS */\r\n        }\r\n    }\r\n  </style>\r\n  \r\n  <div class=\"form-container\">\r\n    <h2>Pridėti laisvą laiką</h2>\r\n    <div class='time-container'>\r\n        <div class=\"form-group\">\r\n        <span>Nuo</span>\r\n        <input type=\"time\" bind:value={startTime} />\r\n        </div>\r\n        \r\n        <div class=\"form-group\">\r\n        <span>Iki</span>\r\n        <input type=\"time\" bind:value={endTime} />\r\n        </div>\r\n    </div>\r\n    \r\n    <div class=\"form-group2\">\r\n      <span>Savaitės diena</span>\r\n      <select bind:value={selectedDay}>\r\n        <option value=\"\" disabled selected>Rinktis...</option>\r\n        {#each daysOfWeek as day}\r\n          <option value={day.value}>{day.label}</option>\r\n        {/each}\r\n      </select>\r\n    </div>\r\n    \r\n    <button on:click={submitForm}><span>Pridėti laiką</span></button>\r\n  </div>\r\n  ","<script>\r\n    export let timeslot;\r\n    export let onRemove;\r\n  \r\n    const daysInLithuanian = {\r\n      Monday: 'Pirmadienis',\r\n      Tuesday: 'Antradienis',\r\n      Wednesday: 'Trečiadienis',\r\n      Thursday: 'Ketvirtadienis',\r\n      Friday: 'Penktadienis',\r\n      Saturday: 'Šeštadienis',\r\n      Sunday: 'Sekmadienis'\r\n    };\r\n  \r\n    let startTime = timeslot[0];\r\n    let endTime = timeslot[1];\r\n    let dayInEnglish = timeslot[2];\r\n    let dayInLithuanian = daysInLithuanian[dayInEnglish];\r\n\r\n\r\n  </script>\r\n  \r\n  <style>\r\n    .timeslot {\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: space-between;\r\n      width:100%;\r\n    }\r\n  \r\n    .timeslot button {\r\n      border: 1px solid #c0c0c0;\r\n      background-color: #d3e3d3;\r\n      padding: 8px;\r\n      border-radius: 4px;\r\n      cursor: pointer;\r\n      transition: background-color 0.3s ease;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n  \r\n    .timeslot button:hover {\r\n      background-color: #a8c1a8;\r\n    }\r\n  \r\n    .minus-icon {\r\n      width: 16px;\r\n      height: 16px;\r\n      fill: #555;\r\n    }\r\n  </style>\r\n  \r\n  <div class=\"timeslot\">\r\n    <span>{startTime} – {endTime} {dayInLithuanian}</span>\r\n    <button on:click={onRemove}>\r\n      <svg class=\"minus-icon\" viewBox=\"0 0 24 24\">\r\n        <rect x=\"5\" y=\"11\" width=\"14\" height=\"2\"/>\r\n      </svg>\r\n    </button>\r\n  </div>\r\n  ","export function formatEuroAmount(value) {\r\n  if (value === null || value === undefined) return '';\r\n  const num = typeof value === 'number' ? value : parseFloat(String(value));\r\n  if (!Number.isFinite(num)) return String(value);\r\n\r\n  // Match existing UI style (dot decimals), but avoid trailing \".0\" and other trailing zeros.\r\n  // Also avoid thousands separators (e.g. 1,000) since the UI historically prints raw numbers.\r\n  return new Intl.NumberFormat('en-US', {\r\n    useGrouping: false,\r\n    minimumFractionDigits: 0,\r\n    maximumFractionDigits: 2\r\n  }).format(num);\r\n}\r\n\r\n\r\n","<script>\r\n    export let classes = [];\r\n    export let selectedClasses = [];\r\n    import { formatEuroAmount } from './money.js';\r\n  \r\n    function toggleSequential(id) {\r\n      // Only allow selection for partially_paid or unpaid classes\r\n      const selectableClasses = classes.filter(c => c.status === 'partially_paid' || c.status === 'unpaid');\r\n      const selectableIds = selectableClasses.map(c => c.id);\r\n      const index = selectableIds.indexOf(id);\r\n      const isSelected = selectedClasses.includes(id);\r\n  \r\n      if (!selectableIds.includes(id)) return; // Prevent toggling fully paid classes\r\n  \r\n      if (isSelected) {\r\n        selectedClasses = selectableClasses\r\n          .slice(0, index)\r\n          .filter(c => selectedClasses.includes(c.id))\r\n          .map(c => c.id);\r\n      } else {\r\n        selectedClasses = selectableClasses\r\n          .slice(0, index + 1)\r\n          .map(c => c.id);\r\n      }\r\n    }\r\n  \r\n    function formatDate(dateStr) {\r\n      const date = new Date(dateStr);\r\n      return date.toLocaleString('lt-LT', {\r\n        weekday: 'short',\r\n        year: 'numeric',\r\n        month: '2-digit',\r\n        day: '2-digit',\r\n        hour: '2-digit',\r\n        minute: '2-digit'\r\n      });\r\n    }\r\n  \r\n    function formatTeacherName(fullName) {\r\n      // Remove 'Tutory' if present at the end\r\n      let name = fullName.replace(/\\s*Tutory$/, '').trim();\r\n      const parts = name.split(' ');\r\n      if (parts.length >= 2) {\r\n        // First name and last name\r\n        return `${parts[0]} ${parts[1][0]}.`;\r\n      } else if (parts.length === 1) {\r\n        return parts[0];\r\n      } else {\r\n        return fullName;\r\n      }\r\n    }\r\n  </script>\r\n  \r\n    <!-- \r\n      Class selection UI:\r\n      - c.status: UI simulation showing payment status for ALL classes (including future ones)\r\n      - c.has_class_charge: Real indicator showing which past classes have actual charges\r\n      - Selection is disabled only for 'paid' classes (regardless of past/future)\r\n    -->\r\n    <div class=\"checkbox-area\">\r\n    {#each classes as c}\r\n      <label \r\n        class:selected={selectedClasses.includes(c.id)} \r\n        class:disabled={c.status === 'paid'}\r\n        class:has-debt={c.has_class_charge}\r\n      >\r\n        <div class=\"checkbox-container\">\r\n          <input\r\n            type=\"checkbox\"\r\n            checked={selectedClasses.includes(c.id)}\r\n            disabled={c.status === 'paid'}\r\n            on:change={() => toggleSequential(c.id)}\r\n          />\r\n        </div>\r\n\r\n        <div class=\"content\">\r\n          <div class=\"left\">\r\n            <div class=\"date\">{formatDate(c.start_time)}</div>\r\n            <div class=\"info\">{c.name}</div>\r\n            {#if c.cancelled_payable}\r\n              <span class=\"cancelled-payable-label\">Ne laiku atšaukta</span>\r\n            {/if}\r\n            <div class=\"teacher\">{formatTeacherName(c.teacher)}</div>\r\n          </div>\r\n          <div class=\"right\">\r\n            <div class=\"price-block\">\r\n              <div class=\"original-price\">Kaina: €{formatEuroAmount(c.price)}</div>\r\n              {#if c.status === 'paid'}\r\n                <div class=\"paid-status\">Apmokėta</div>\r\n              {:else if c.status === 'partially_paid'}\r\n                <div class=\"to-pay\">Mokėti: €{Math.round(parseFloat(c.amount_due) || 0)}</div>\r\n                <div class=\"partial-status\">(dalinai apmokėta)</div>\r\n              {:else}\r\n                <div class=\"to-pay\">Mokėti: €{Math.round(parseFloat(c.amount_due) || 0)}</div>\r\n              {/if}\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </label>\r\n    {/each}\r\n  </div>\r\n  \r\n  <style>\r\n    .cancelled-payable-label {\r\n      color: #9b4039;\r\n      font-size: 0.8rem;\r\n      font-weight: 600;\r\n      line-height: 1.4;\r\n    }\r\n    .checkbox-area {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 0.75rem;\r\n      width: 100%;\r\n    }\r\n  \r\n    label {\r\n      padding: 0.75rem 1rem;\r\n      border: 1px solid #ddd;\r\n      border-radius: 8px;\r\n      transition: background-color 0.2s ease, border-color 0.2s ease;\r\n      display: flex;\r\n      gap: 0.75rem;\r\n      align-items: center;\r\n      cursor: pointer;\r\n    }\r\n  \r\n    label.selected {\r\n      background-color: #eef6ff;\r\n      border-color: #3b82f6;\r\n    }\r\n  \r\n    label.disabled {\r\n      opacity: 0.5;\r\n      pointer-events: none;\r\n    }\r\n\r\n    label.has-debt {\r\n      background-color: #fef2f2;\r\n      border-color: #fca5a5;\r\n    }\r\n\r\n    label.has-debt.selected {\r\n      background-color: #feebc8;\r\n      border-color: #f6ad55;\r\n    }\r\n  \r\n    .checkbox-container {\r\n      display: flex;\r\n      align-items: center;\r\n    }\r\n  \r\n    input[type=\"checkbox\"] {\r\n      transform: scale(1.5);\r\n      accent-color: #3b82f6;\r\n    }\r\n  \r\n    .content {\r\n      display: flex;\r\n      justify-content: space-between;\r\n      align-items: center;\r\n      flex: 1;\r\n      gap: 1rem;\r\n    }\r\n  \r\n    .left {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 0.1rem;\r\n    }\r\n  \r\n    .date {\r\n      font-weight: 600;\r\n      font-size: 0.95rem;\r\n    }\r\n  \r\n    .info {\r\n      font-size: 0.9rem;\r\n    }\r\n  \r\n    .teacher {\r\n      font-size: 0.85rem;\r\n      color: #666;\r\n    }\r\n  \r\n    .right {\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: flex-end;\r\n      font-size: 1rem;\r\n      font-weight: normal;\r\n      white-space: nowrap;\r\n      min-width: 60px;\r\n    }\r\n  \r\n    .price-block {\r\n      display: flex;\r\n      flex-direction: column;\r\n      align-items: flex-end;\r\n      font-size: 0.98rem;\r\n      gap: 0.1em;\r\n    }\r\n  \r\n    .original-price {\r\n      font-size: 0.95rem;\r\n      color: #888;\r\n    }\r\n  \r\n    .to-pay {\r\n      font-size: 1.05rem;\r\n      font-weight: bold;\r\n      color: #14695b;\r\n    }\r\n  \r\n    .paid-status {\r\n      font-size: 1.05rem;\r\n      font-weight: bold;\r\n      color: #3b82f6;\r\n    }\r\n  \r\n    .partial-status {\r\n      font-size: 0.95rem;\r\n      color: #e67e22;\r\n    }\r\n  </style>\r\n","<script>\r\n    export let payments = [];\r\n  \r\n    let revealedRefs = new Set();\r\n\r\n    function derivePaymentId(p) {\r\n      const direct = p?.id;\r\n      if (typeof direct === 'number' && Number.isFinite(direct)) return { paymentId: direct, source: 'p.id' };\r\n      if (typeof direct === 'string' && /^\\d+$/.test(direct)) return { paymentId: Number(direct), source: 'p.id:string' };\r\n\r\n      const rawUrl = p?.invoice_url;\r\n      if (typeof rawUrl !== 'string' || !rawUrl) return { paymentId: null, source: 'none' };\r\n\r\n      try {\r\n        const u = new URL(rawUrl, window.location.origin);\r\n        const m = (u.pathname || '').match(/\\/api\\/payments\\/(\\d+)\\/invoice\\/?$/);\r\n        if (m && m[1]) return { paymentId: Number(m[1]), source: 'parsed:invoice_url' };\r\n      } catch {\r\n        // ignore\r\n      }\r\n\r\n      const m2 = rawUrl.match(/\\/api\\/payments\\/(\\d+)\\/invoice\\/?$/);\r\n      if (m2 && m2[1]) return { paymentId: Number(m2[1]), source: 'parsed:invoice_url:raw' };\r\n\r\n      return { paymentId: null, source: 'unparsed' };\r\n    }\r\n\r\n    function buildInvoiceOpenHref(p) {\r\n      const derived = derivePaymentId(p);\r\n      const paymentId = derived.paymentId ?? null;\r\n      if (!paymentId) return p?.invoice_url ?? '#';\r\n      // Same-origin SPA route: new tab can read localStorage JWT and fetch signed URL.\r\n      return `${window.location.origin}${window.location.pathname}#/invoice-open/${paymentId}`;\r\n    }\r\n  \r\n    function toggleRef(index) {\r\n      revealedRefs = new Set(revealedRefs);\r\n      if (revealedRefs.has(index)) {\r\n        revealedRefs.delete(index);\r\n      } else {\r\n        revealedRefs.add(index);\r\n      }\r\n    }\r\n  \r\n    function formatDate(dateStr) {\r\n      const date = new Date(dateStr);\r\n      return date.toLocaleString('lt-LT', {\r\n        weekday: 'short',\r\n        year: 'numeric',\r\n        month: '2-digit',\r\n        day: '2-digit',\r\n        hour: '2-digit',\r\n        minute: '2-digit'\r\n      });\r\n    }\r\n\r\n    function getPaymentDescription(p) {\r\n      return p?.balance_transaction_description || p?.description || null;\r\n    }\r\n\r\n    function getPaymentDisplayText(p) {\r\n      return getPaymentDescription(p) || p?.reference || '';\r\n    }\r\n  </script>\r\n  \r\n  <div class=\"payment-area\">\r\n    {#each payments as p, index}\r\n      <div class=\"payment-row\">\r\n        <div class=\"content\">\r\n          <div class=\"left\">\r\n            {#if p.paid_from && p.paid_until}\r\n              <!-- Online payment with date range -->\r\n              <div class=\"date\">\r\n                <strong>Laikotarpis:</strong> {formatDate(p.paid_from)} - {formatDate(p.paid_until)}\r\n              </div>\r\n            {:else}\r\n              <!-- Manual payment without date range -->\r\n              <div class=\"date\">\r\n                <strong>Mokėjimo tipas:</strong> <span style=\"color: #667eea;\">Banko pavedimas</span>\r\n              </div>\r\n            {/if}\r\n            <div class=\"info\">\r\n              Mokėjimo data: {new Date(p.created_at).toLocaleDateString()}\r\n            </div>\r\n            <div class=\"teacher\">\r\n              {#if revealedRefs.has(index)}\r\n                {getPaymentDescription(p) ? 'Aprašymas:' : (p.paid_from && p.paid_until ? 'Nuorodos kodas:' : 'Aprašymas:')} {getPaymentDisplayText(p)}\r\n                <button class=\"toggle-button\" on:click={() => toggleRef(index)}>Nerodyti</button>\r\n              {:else}\r\n                <span style=\"font-style: italic; color: gray;\">\r\n                  {getPaymentDescription(p) ? 'Rodyti aprašymą' : (p.paid_from && p.paid_until ? 'Rodyti nuorodos kodą' : 'Rodyti aprašymą')}\r\n                </span>\r\n                <button class=\"toggle-button\" on:click={() => toggleRef(index)}>Rodyti {getPaymentDescription(p) ? 'aprašymą' : (p.paid_from && p.paid_until ? 'kodą' : 'aprašymą')}</button>\r\n              {/if}\r\n            </div>\r\n          </div>\r\n  \r\n          <div class=\"right\">\r\n            €{p.amount}\r\n          </div>\r\n        </div>\r\n  \r\n        {#if p.invoice_url}\r\n          <div class=\"invoice-link\">\r\n            <a\r\n              href={buildInvoiceOpenHref(p)}\r\n              target=\"_blank\"\r\n              rel=\"noopener noreferrer\"\r\n            >\r\n              Žiūrėti sąskaitą\r\n            </a>\r\n          </div>\r\n        {/if}\r\n      </div>\r\n    {/each}\r\n  </div>\r\n  \r\n  <style>\r\n    .payment-area {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 0.75rem;\r\n      width: 100%;\r\n      margin-top: 2rem;\r\n    }\r\n  \r\n    .payment-row {\r\n      padding: 0.75rem 1rem;\r\n      border: 1px solid #ddd;\r\n      border-radius: 8px;\r\n      background-color: #fdfdfd;\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 0.5rem;\r\n    }\r\n  \r\n    .content {\r\n      display: flex;\r\n      justify-content: space-between;\r\n      align-items: center;\r\n      gap: 1rem;\r\n    }\r\n  \r\n    .left {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 0.25rem;\r\n    }\r\n  \r\n    .date {\r\n      font-weight: 600;\r\n      font-size: 0.95rem;\r\n    }\r\n  \r\n    .info {\r\n      font-size: 0.9rem;\r\n    }\r\n  \r\n    .teacher {\r\n      font-size: 0.85rem;\r\n      color: #555;\r\n    }\r\n  \r\n    .right {\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: flex-end;\r\n      font-size: 1.2rem;\r\n      font-weight: bold;\r\n      white-space: nowrap;\r\n      min-width: 60px;\r\n    }\r\n  \r\n    .toggle-button {\r\n      margin-top: 4px;\r\n      background: none;\r\n      border: none;\r\n      color: #14695b;\r\n      font-size: 0.85rem;\r\n      cursor: pointer;\r\n      text-decoration: underline;\r\n      padding: 0;\r\n      font-weight: bold;\r\n    }\r\n    .toggle-button:hover {\r\n      color: #0d4c3c;\r\n    }\r\n  \r\n    .invoice-link {\r\n      margin-top: 0.5rem;\r\n      text-align: right;\r\n    }\r\n    .invoice-link a {\r\n      font-size: 0.9rem;\r\n      color: #14695b;\r\n      text-decoration: underline;\r\n    }\r\n    .invoice-link a:hover {\r\n      color: #0d4c3c;\r\n    }\r\n  </style>\r\n  ","<script>\r\n  import { onMount } from 'svelte';\r\n\r\n  let invoices = [];\r\n  let loading = true;\r\n  let error = null;\r\n  let teacherName = '';\r\n\r\n  // Fetch teacher invoices on component mount\r\n  onMount(() => {\r\n    fetchTeacherInvoices();\r\n  });\r\n\r\n  async function fetchTeacherInvoices() {\r\n    loading = true;\r\n    error = null;\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n          if (!token) {\r\n        error = 'JWT žetonas nerastas. Prašome prisijungti.';\r\n        loading = false;\r\n        return;\r\n      }\r\n\r\n    try {\r\n      const response = await fetch('/studentplayground/api/teacher-invoices/', {\r\n        method: 'GET',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        }\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        invoices = data.invoices;\r\n        teacherName = data.teacher_name;\r\n      } else {\r\n        const errorData = await response.json();\r\n        error = errorData.message || 'Nepavyko gauti sąskaitų faktūrų.';\r\n      }\r\n    } catch (err) {\r\n      error = `Tinklo klaida: ${err.message}`;\r\n    } finally {\r\n      loading = false;\r\n    }\r\n  }\r\n\r\n  // Download invoice PDF\r\n  function downloadInvoice(invoice) {\r\n    if (invoice.pdf_url) {\r\n      // Create a link to download the file\r\n      const link = document.createElement('a');\r\n      link.href = invoice.pdf_url;\r\n      link.download = invoice.file_name;\r\n      link.target = '_blank'; // Open in new tab as backup\r\n      link.click();\r\n    }\r\n  }\r\n\r\n  // Format date for display\r\n  function formatDate(dateString) {\r\n    const date = new Date(dateString);\r\n    return date.toLocaleDateString('lt-LT', {\r\n      year: 'numeric',\r\n      month: 'long',\r\n      day: 'numeric'\r\n    });\r\n  }\r\n\r\n  // Translate month display to Lithuanian\r\n  function translateMonthDisplay(monthDisplay) {\r\n    if (!monthDisplay) return monthDisplay;\r\n    \r\n    const monthTranslations = {\r\n      'January': 'Sausis',\r\n      'February': 'Vasaris', \r\n      'March': 'Kovas',\r\n      'April': 'Balandis',\r\n      'May': 'Gegužė',\r\n      'June': 'Birželis',\r\n      'July': 'Liepa',\r\n      'August': 'Rugpjūtis',\r\n      'September': 'Rugsėjis',\r\n      'October': 'Spalis',\r\n      'November': 'Lapkritis',\r\n      'December': 'Gruodis'\r\n    };\r\n    \r\n    // Replace English month names with Lithuanian ones\r\n    let translatedMonth = monthDisplay;\r\n    for (const [english, lithuanian] of Object.entries(monthTranslations)) {\r\n      translatedMonth = translatedMonth.replace(english, lithuanian);\r\n    }\r\n    \r\n    return translatedMonth;\r\n  }\r\n</script>\r\n\r\n<div class=\"teacher-invoices-container\">\r\n  <div class=\"header-section\">\r\n    <h2>Mano sąskaitos faktūros</h2>\r\n    {#if teacherName}\r\n      <p class=\"teacher-welcome\">Sveiki, {teacherName}</p>\r\n    {/if}\r\n  </div>\r\n\r\n  <!-- Error message -->\r\n  {#if error}\r\n    <div class=\"alert alert-error\">\r\n      <strong>Klaida:</strong> {error}\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Loading state -->\r\n  {#if loading}\r\n    <div class=\"loading-container\">\r\n      <div class=\"loading-spinner\"></div>\r\n      <p>Kraunamos jūsų sąskaitos faktūros...</p>\r\n    </div>\r\n  {:else if invoices.length === 0}\r\n    <!-- No invoices found -->\r\n    <div class=\"no-invoices\">\r\n      <div class=\"no-invoices-icon\">📄</div>\r\n      <h3>Sąskaitų faktūrų nerasta</h3>\r\n      <p>Jūs dar neturite išsaugotų sąskaitų faktūrų. Jos atsiras čia, kai jas sukurs administratorius.</p>\r\n    </div>\r\n  {:else}\r\n    <!-- Invoices list -->\r\n    <div class=\"invoices-section\">\r\n      <h3>Jūsų išsaugotos sąskaitos faktūros ({invoices.length})</h3>\r\n      \r\n      <div class=\"invoices-grid\">\r\n        {#each invoices as invoice}\r\n          <div class=\"invoice-card\">\r\n                         <div class=\"invoice-header\">\r\n               <div class=\"invoice-number\">\r\n                 <span class=\"number-display\">{invoice.invoice_number || 'N/A'}</span>\r\n               </div>\r\n               <div class=\"invoice-month\">\r\n                 <span class=\"month-display\">{translateMonthDisplay(invoice.month_display)}</span>\r\n                 <span class=\"month-code\">({invoice.month})</span>\r\n               </div>\r\n               <div class=\"invoice-date\">\r\n                 <small>Sukurta: {formatDate(invoice.created_at)}</small>\r\n               </div>\r\n             </div>\r\n            \r\n            <div class=\"invoice-actions\">\r\n              <button \r\n                class=\"btn btn-primary\" \r\n                on:click={() => downloadInvoice(invoice)}\r\n                title=\"Atsisiųsti PDF\"\r\n              >\r\n                📄 Atsisiųsti PDF\r\n              </button>\r\n            </div>\r\n          </div>\r\n        {/each}\r\n      </div>\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Refresh button -->\r\n  <div class=\"refresh-section\">\r\n    <button \r\n      class=\"btn btn-secondary\" \r\n      on:click={fetchTeacherInvoices}\r\n      disabled={loading}\r\n    >\r\n      {loading ? 'Atnaujinama...' : '🔄 Atnaujinti sąskaitas faktūras'}\r\n    </button>\r\n  </div>\r\n</div>\r\n\r\n<style>\r\n  .teacher-invoices-container {\r\n    max-width: 1000px;\r\n    margin: 0 auto;\r\n    padding: 20px;\r\n    background-color: #f8f9fa;\r\n    min-height: 100vh;\r\n  }\r\n\r\n  .header-section {\r\n    text-align: center;\r\n    margin-bottom: 30px;\r\n    padding: 20px;\r\n    background-color: white;\r\n    border-radius: 8px;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .header-section h2 {\r\n    margin: 0 0 10px 0;\r\n    color: #333;\r\n    font-size: 2em;\r\n  }\r\n\r\n  .teacher-welcome {\r\n    margin: 0;\r\n    color: #666;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .alert {\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .alert-error {\r\n    background-color: #f8d7da;\r\n    border: 1px solid #f5c6cb;\r\n    color: #721c24;\r\n  }\r\n\r\n  .loading-container {\r\n    text-align: center;\r\n    padding: 60px 20px;\r\n    background-color: white;\r\n    border-radius: 8px;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .loading-spinner {\r\n    width: 40px;\r\n    height: 40px;\r\n    border: 4px solid #f3f3f3;\r\n    border-top: 4px solid #fab45a;\r\n    border-radius: 50%;\r\n    animation: spin 1s linear infinite;\r\n    margin: 0 auto 20px auto;\r\n  }\r\n\r\n  @keyframes spin {\r\n    0% { transform: rotate(0deg); }\r\n    100% { transform: rotate(360deg); }\r\n  }\r\n\r\n  .no-invoices {\r\n    text-align: center;\r\n    padding: 60px 20px;\r\n    background-color: white;\r\n    border-radius: 8px;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .no-invoices-icon {\r\n    font-size: 4em;\r\n    margin-bottom: 20px;\r\n    opacity: 0.5;\r\n  }\r\n\r\n  .no-invoices h3 {\r\n    color: #666;\r\n    margin-bottom: 15px;\r\n  }\r\n\r\n  .no-invoices p {\r\n    color: #888;\r\n    max-width: 400px;\r\n    margin: 0 auto;\r\n    line-height: 1.5;\r\n  }\r\n\r\n  .invoices-section {\r\n    background-color: white;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .invoices-section h3 {\r\n    margin: 0 0 20px 0;\r\n    color: #333;\r\n    border-bottom: 2px solid #fab45a;\r\n    padding-bottom: 10px;\r\n  }\r\n\r\n  .invoices-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\r\n    gap: 20px;\r\n  }\r\n\r\n  .invoice-card {\r\n    border: 1px solid #dee2e6;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    background-color: #fafafa;\r\n    transition: box-shadow 0.2s ease;\r\n  }\r\n\r\n  .invoice-card:hover {\r\n    box-shadow: 0 4px 8px rgba(0,0,0,0.15);\r\n  }\r\n\r\n  .invoice-header {\r\n    margin-bottom: 15px;\r\n  }\r\n\r\n  .invoice-number {\r\n    margin-bottom: 10px;\r\n    text-align: center;\r\n  }\r\n\r\n  .number-display {\r\n    font-size: 1.3em;\r\n    font-weight: bold;\r\n    color: #fab45a;\r\n    background-color: #f8f9fa;\r\n    padding: 5px 12px;\r\n    border-radius: 20px;\r\n    border: 2px solid #fab45a;\r\n  }\r\n\r\n  .invoice-month {\r\n    margin-bottom: 8px;\r\n  }\r\n\r\n  .month-display {\r\n    font-size: 1.2em;\r\n    font-weight: bold;\r\n    color: #333;\r\n  }\r\n\r\n  .month-code {\r\n    color: #666;\r\n    font-size: 0.9em;\r\n    margin-left: 5px;\r\n  }\r\n\r\n  .invoice-date small {\r\n    color: #888;\r\n    font-size: 0.85em;\r\n  }\r\n\r\n  .invoice-actions {\r\n    display: flex;\r\n    justify-content: center;\r\n  }\r\n\r\n  .btn {\r\n    padding: 10px 20px;\r\n    border: none;\r\n    border-radius: 6px;\r\n    font-size: 14px;\r\n    font-weight: 500;\r\n    cursor: pointer;\r\n    transition: all 0.2s ease;\r\n    text-decoration: none;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: 5px;\r\n  }\r\n\r\n  .btn:disabled {\r\n    opacity: 0.6;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  .btn-primary {\r\n    background-color: #fab45a;\r\n    color: white;\r\n  }\r\n\r\n  .btn-primary:hover:not(:disabled) {\r\n    background-color: #e09346;\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .btn-secondary {\r\n    background-color: #6c757d;\r\n    color: white;\r\n  }\r\n\r\n  .btn-secondary:hover:not(:disabled) {\r\n    background-color: #5a6268;\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .refresh-section {\r\n    text-align: center;\r\n    padding: 20px;\r\n  }\r\n\r\n  /* Mobile responsiveness */\r\n  @media (max-width: 600px) {\r\n    .teacher-invoices-container {\r\n      padding: 12px;\r\n    }\r\n\r\n    .header-section {\r\n      padding: 15px;\r\n    }\r\n\r\n    .header-section h2 {\r\n      font-size: 1.5em;\r\n    }\r\n\r\n    .invoices-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .invoice-card {\r\n      padding: 15px;\r\n    }\r\n\r\n    .btn {\r\n      width: 100%;\r\n      padding: 12px;\r\n    }\r\n  }\r\n</style> ","export class InvoiceApiError extends Error {\r\n    constructor(message, {\r\n        status = null,\r\n        authenticationRequired = false,\r\n        code = null,\r\n        ignoredClassIds = [],\r\n    } = {}) {\r\n        super(message);\r\n        this.name = 'InvoiceApiError';\r\n        this.status = status;\r\n        this.authenticationRequired = authenticationRequired;\r\n        this.code = code;\r\n        this.ignoredClassIds = ignoredClassIds;\r\n    }\r\n}\r\n\r\nexport function ensureActiveInvoiceSession(token, expiry, now = Date.now()) {\r\n    const parsedExpiry = Number(expiry);\r\n    if (!token || (expiry && Number.isFinite(parsedExpiry) && parsedExpiry <= now)) {\r\n        throw new InvoiceApiError('Reikia prisijungti iš naujo.', {\r\n            status: 401,\r\n            authenticationRequired: true,\r\n        });\r\n    }\r\n    return token;\r\n}\r\n\r\nasync function responsePayload(response) {\r\n    try {\r\n        return await response.json();\r\n    } catch (_error) {\r\n        return {};\r\n    }\r\n}\r\n\r\nexport async function requestInvoiceJson(url, token, { fetchImpl = fetch, ...options } = {}) {\r\n    const response = await fetchImpl(url, {\r\n        method: 'GET',\r\n        ...options,\r\n        headers: {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json',\r\n            ...(options.headers || {}),\r\n        },\r\n    });\r\n    const payload = await responsePayload(response);\r\n    if (!response.ok) {\r\n        throw new InvoiceApiError(\r\n            payload.message || payload.detail || payload.error || 'Nepavyko gauti sąskaitos duomenų.',\r\n            {\r\n                status: response.status,\r\n                authenticationRequired: response.status === 401,\r\n                code: payload.code || null,\r\n                ignoredClassIds: Array.isArray(payload.ignored_class_ids)\r\n                    ? payload.ignored_class_ids\r\n                    : [],\r\n            },\r\n        );\r\n    }\r\n    return payload;\r\n}\r\n\r\nexport function clearInvoiceAuthentication(storage) {\r\n    storage.removeItem('jwtToken');\r\n    storage.removeItem('jwtExpiry');\r\n}\r\n\r\nexport function buildSelectedClassQuotes(classes, selectedClassIds) {\r\n    const selected = new Set(selectedClassIds.map((value) => Number(value)));\r\n    return Object.fromEntries(\r\n        classes\r\n            .filter((item) => selected.has(Number(item.id)))\r\n            .map((item) => [\r\n                String(item.id),\r\n                {\r\n                    amount_due: Number(item.amount_due || 0).toFixed(2),\r\n                    quote_fingerprint: item.quote_fingerprint,\r\n                },\r\n            ]),\r\n    );\r\n}\r\n\r\n","const VILNIUS_MONTH = new Intl.DateTimeFormat('en-US', {\r\n  timeZone: 'Europe/Vilnius',\r\n  year: 'numeric',\r\n  month: '2-digit',\r\n});\r\n\r\nfunction monthKey(value) {\r\n  const date = value instanceof Date ? value : new Date(value);\r\n  if (!Number.isFinite(date.getTime())) return null;\r\n\r\n  const parts = Object.fromEntries(\r\n    VILNIUS_MONTH.formatToParts(date).map(({ type, value: partValue }) => [type, partValue]),\r\n  );\r\n  return `${parts.year}-${parts.month}`;\r\n}\r\n\r\nexport function buildInvoiceClassWindow(\r\n  classes = [],\r\n  {\r\n    now = new Date(),\r\n    visibleOlderMonthCount = 0,\r\n    visibleFutureMonthCount = 0,\r\n  } = {},\r\n) {\r\n  const currentMonth = monthKey(now);\r\n  const sortedClasses = classes\r\n    .filter(({ start_time }) => monthKey(start_time) !== null)\r\n    .slice()\r\n    .sort((left, right) => new Date(left.start_time) - new Date(right.start_time));\r\n\r\n  const firstOlderOutstanding = sortedClasses.find((classItem) => (\r\n    monthKey(classItem.start_time) < currentMonth\r\n    && Number(classItem.amount_due) > 0\r\n  ));\r\n  const firstOutstandingMonth = firstOlderOutstanding\r\n    ? monthKey(firstOlderOutstanding.start_time)\r\n    : null;\r\n  const hasOlderOutstanding = firstOutstandingMonth !== null;\r\n  // All returned history is browsable; outstanding debt only sets the initial window.\r\n  const availableOlderMonths = [...new Set(\r\n    sortedClasses\r\n      .map(({ start_time }) => monthKey(start_time))\r\n      .filter((classMonth) => classMonth < currentMonth),\r\n  )];\r\n  const initialOlderMonthCount = hasOlderOutstanding\r\n    ? availableOlderMonths.filter((classMonth) => classMonth >= firstOutstandingMonth).length\r\n    : 0;\r\n  const availableFutureMonths = [...new Set(\r\n    sortedClasses\r\n      .map(({ start_time }) => monthKey(start_time))\r\n      .filter((classMonth) => classMonth > currentMonth),\r\n  )];\r\n  const requestedOlderMonthCount = Math.max(\r\n    0,\r\n    Math.trunc(Number(visibleOlderMonthCount) || 0),\r\n  );\r\n  const requestedFutureMonthCount = Math.max(\r\n    0,\r\n    Math.trunc(Number(visibleFutureMonthCount) || 0),\r\n  );\r\n  const appliedOlderMonthCount = Math.min(\r\n    requestedOlderMonthCount,\r\n    availableOlderMonths.length,\r\n  );\r\n  const appliedFutureMonthCount = Math.min(\r\n    requestedFutureMonthCount,\r\n    availableFutureMonths.length,\r\n  );\r\n  const visibleMonths = new Set([\r\n    currentMonth,\r\n    ...(appliedOlderMonthCount > 0\r\n      ? availableOlderMonths.slice(-appliedOlderMonthCount)\r\n      : []),\r\n    ...availableFutureMonths.slice(0, appliedFutureMonthCount),\r\n  ]);\r\n\r\n  const visibleClasses = sortedClasses.filter(\r\n    ({ start_time }) => visibleMonths.has(monthKey(start_time)),\r\n  );\r\n\r\n  return {\r\n    visibleClasses,\r\n    hasOlderOutstanding,\r\n    firstOutstandingMonth,\r\n    initialOlderMonthCount,\r\n    visibleOlderMonthCount: appliedOlderMonthCount,\r\n    availableOlderMonthCount: availableOlderMonths.length,\r\n    visibleFutureMonthCount: appliedFutureMonthCount,\r\n    availableFutureMonthCount: availableFutureMonths.length,\r\n    canShowMorePast: appliedOlderMonthCount < availableOlderMonths.length,\r\n    canShowLessPast: appliedOlderMonthCount > 0,\r\n    canShowMoreFuture: appliedFutureMonthCount < availableFutureMonths.length,\r\n    canShowLessFuture: appliedFutureMonthCount > 0,\r\n  };\r\n}\r\n\r\nexport function retainVisibleSelections(selectedClassIds = [], visibleClasses = []) {\r\n  const visibleIds = new Set(visibleClasses.map(({ id }) => id));\r\n  return selectedClassIds.filter((id) => visibleIds.has(id));\r\n}\r\n","<script>\r\n    import CheckBoxAreaForInvoicesComponent from \"./CheckBoxAreaForInvoicesComponent.svelte\";\r\n    import { onMount } from 'svelte';\r\n    import CheckBoxAreForClassesComponent from \"./CheckBoxAreForClassesComponent.svelte\";\r\n    import CompletedPaymentsList from './CompletedPaymentsListComponent.svelte';\r\n    import NavBarReusable from \"./NavbarReusable.svelte\";\r\n    import TeacherInvoicesPage from \"./TeacherInvoicesPage.svelte\";\r\n    import { push } from 'svelte-spa-router';\r\n    import { getApiBase } from './apiBase.js';\r\n    import { buildInvoiceClassWindow, retainVisibleSelections } from './invoiceClassWindow.js';\r\n    import {\r\n        InvoiceApiError,\r\n        clearInvoiceAuthentication,\r\n        ensureActiveInvoiceSession,\r\n        requestInvoiceJson,\r\n    } from './invoicePageApi.js';\r\n    const apiBase = getApiBase();\r\n    let selectedMonths = [];\r\n\r\n    let invoiceSum = 0; // Only set after invoice is generated\r\n    let paymentLink = '';\r\n    let isFetchingPaymentLink = false;\r\n\r\n    let selectedClasses = [];\r\n\r\n    let invoiceData = null;\r\n    let visibleOlderMonthCount = 0;\r\n    let visibleFutureMonthCount = 0;\r\n    $: classWindow = buildInvoiceClassWindow(invoiceData?.classes || [], {\r\n        visibleOlderMonthCount,\r\n        visibleFutureMonthCount,\r\n    });\r\n    let errorForInvoiceData = null;\r\n    let isLoadingInvoiceData = true; // Add loading state\r\n    let isUserTeacher = null;\r\n    let isCheckingUserType = true;\r\n    let backLinkUrl = \"/login-greeting\"; // Always back to login greeting\r\n    let isRecalculatingMyBalance = false;\r\n\r\n    function showOneMorePastMonth() {\r\n        visibleOlderMonthCount += 1;\r\n    }\r\n\r\n    function showOneLessPastMonth() {\r\n        const nextMonthCount = Math.max(0, visibleOlderMonthCount - 1);\r\n        const smallerWindow = buildInvoiceClassWindow(invoiceData?.classes || [], {\r\n            visibleOlderMonthCount: nextMonthCount,\r\n            visibleFutureMonthCount,\r\n        });\r\n        selectedClasses = retainVisibleSelections(\r\n            selectedClasses,\r\n            smallerWindow.visibleClasses,\r\n        );\r\n        visibleOlderMonthCount = nextMonthCount;\r\n    }\r\n\r\n    function showOneMoreFutureMonth() {\r\n        visibleFutureMonthCount += 1;\r\n    }\r\n\r\n    function showOneLessFutureMonth() {\r\n        const nextMonthCount = Math.max(0, visibleFutureMonthCount - 1);\r\n        const smallerWindow = buildInvoiceClassWindow(invoiceData?.classes || [], {\r\n            visibleOlderMonthCount,\r\n            visibleFutureMonthCount: nextMonthCount,\r\n        });\r\n        selectedClasses = retainVisibleSelections(\r\n            selectedClasses,\r\n            smallerWindow.visibleClasses,\r\n        );\r\n        visibleFutureMonthCount = nextMonthCount;\r\n    }\r\n\r\n    function redirectToInvoiceLogin() {\r\n        clearInvoiceAuthentication(localStorage);\r\n        window.location.href = '/studentplayground/svelte-try/?redirect=invoice#/about';\r\n    }\r\n\r\n    function activeToken() {\r\n        return ensureActiveInvoiceSession(\r\n            localStorage.getItem('jwtToken'),\r\n            localStorage.getItem('jwtExpiry'),\r\n        );\r\n    }\r\n\r\n    // Helper: calculate invoice sum as sum of amount_due for selected classes\r\n    function calculateInvoiceSum() {\r\n        if (!invoiceData || !invoiceData.classes) {\r\n            console.log('🔄 STANDALONE - calculateInvoiceSum: No invoice data or classes');\r\n            return 0;\r\n        }\r\n        const sum = selectedClasses.reduce((sum, classId) => {\r\n            const cls = invoiceData.classes.find(c => c.id === classId);\r\n            // Ensure amount_due is always treated as a float number\r\n            const amount = cls ? parseFloat(cls.amount_due) || 0.0 : 0.0;\r\n            console.log(`🔄 STANDALONE - Class ${classId}: amount_due=${cls?.amount_due}, converted=${amount}`);\r\n            return sum + amount;\r\n        }, 0.0);\r\n        console.log(`🔄 STANDALONE - Total invoice sum calculated: ${sum} for classes:`, selectedClasses);\r\n        return Math.round(sum * 100) / 100; // Round to 2 decimal places to avoid floating point errors\r\n    }\r\n\r\n    // Update invoiceSum whenever selectedClasses changes\r\n    $: {\r\n        console.log('🔄 STANDALONE - Reactive update triggered. Selected classes:', selectedClasses);\r\n        invoiceSum = calculateInvoiceSum();\r\n        console.log('🔄 STANDALONE - Updated invoiceSum to:', invoiceSum);\r\n    }\r\n\r\n    function getPaidFromUntil() {\r\n        if (!invoiceData?.classes || selectedClasses.length === 0) return { paid_from: null, paid_until: null };\r\n\r\n        const selectedClassObjects = invoiceData.classes.filter(c => selectedClasses.includes(c.id));\r\n        const sortedByTime = selectedClassObjects.slice().sort((a, b) => new Date(a.start_time) - new Date(b.start_time));\r\n        const paid_from = sortedByTime[0]?.start_time;\r\n        const paid_until = sortedByTime[sortedByTime.length - 1]?.start_time;\r\n        return { paid_from, paid_until };\r\n    }\r\n\r\n\r\n\r\n    // Fetch payment link and redirect immediately (one-click payment)\r\n    async function fetchPaymentLinkAndRedirect() {\r\n        let token;\r\n        try {\r\n            token = activeToken();\r\n        } catch (error) {\r\n            if (error instanceof InvoiceApiError && error.authenticationRequired) {\r\n                redirectToInvoiceLogin();\r\n                return;\r\n            }\r\n            throw error;\r\n        }\r\n        console.log('🚀 STANDALONE - fetchPaymentLinkAndRedirect check:', { \r\n            hasToken: !!token, \r\n            invoiceSum, \r\n            selectedClassesLength: selectedClasses.length \r\n        });\r\n        \r\n        if (!token || selectedClasses.length === 0) {\r\n            console.error('🚀 STANDALONE - Payment link validation failed:', {\r\n                hasToken: !!token,\r\n                selectedClassesLength: selectedClasses.length\r\n            });\r\n            alert(\"Prašome pasirinkti nors vieną pamoką, kurią norėtumėte apmokėti.\");\r\n            return;\r\n        }\r\n\r\n        if (!invoiceSum || invoiceSum <= 0) {\r\n            alert(\"Šių pamokų apmokėti nereikia (suma lygi 0).\");\r\n            return;\r\n        }\r\n\r\n        const { paid_from, paid_until } = getPaidFromUntil();\r\n        if (!paid_from || !paid_until) {\r\n            alert(\"Nepavyko nustatyti pamokų laikotarpio.\");\r\n            return;\r\n        }\r\n\r\n        isFetchingPaymentLink = true;\r\n\r\n        try {\r\n            const data = await requestInvoiceJson(\r\n                `${apiBase}/studentplayground/api/invoice/payment-link/`,\r\n                token,\r\n                {\r\n                method: 'POST',\r\n                body: JSON.stringify({\r\n                    selected_class_ids: selectedClasses,\r\n                    sum: invoiceSum,\r\n                    paid_from: paid_from,\r\n                    paid_until: paid_until\r\n                })\r\n                },\r\n            );\r\n            console.log('🚀 STANDALONE - Full API response:', data);\r\n            console.log('🚀 STANDALONE - Response status:', data.status);\r\n            console.log('🚀 STANDALONE - Payment link:', data.payment_link);\r\n            \r\n            if (data.status === 'success') {\r\n                paymentLink = data.payment_link; // Store for \"view again\" button\r\n                console.log('🚀 STANDALONE - About to redirect to:', data.payment_link);\r\n                \r\n                // Check if we're in standalone mode (iOS home screen app)\r\n                const isStandalone = window.navigator.standalone || window.matchMedia('(display-mode: standalone)').matches;\r\n                console.log('🚀 STANDALONE - Is standalone mode:', isStandalone);\r\n                \r\n                if (isStandalone) {\r\n                    // In standalone mode, use current window redirect\r\n                    console.log('🚀 STANDALONE - Using current window redirect for standalone mode');\r\n                    window.location.href = data.payment_link;\r\n                } else {\r\n                    // Regular browser, try to open new tab\r\n                    const opened = window.open(data.payment_link, '_blank');\r\n                    if (opened) {\r\n                        console.log('🚀 STANDALONE - Window opened successfully');\r\n                    } else {\r\n                        console.error('🚀 STANDALONE - Failed to open window (popup blocker?), using current window');\r\n                        window.location.href = data.payment_link;\r\n                    }\r\n                }\r\n            } else {\r\n                console.error('🚀 STANDALONE - API returned non-success status:', data);\r\n                alert(\"Nepavyko sugeneruoti mokėjimo nuorodos.\");\r\n            }\r\n        } catch (error) {\r\n            if (error instanceof InvoiceApiError && error.authenticationRequired) {\r\n                redirectToInvoiceLogin();\r\n                return;\r\n            }\r\n            if (error instanceof InvoiceApiError && error.code === 'invoice_changed') {\r\n                selectedClasses = [];\r\n                alert(\"Sąskaitos duomenys pasikeitė. Informacija buvo atnaujinta.\");\r\n                await fetchInvoiceData();\r\n                return;\r\n            }\r\n            console.error('🚀 STANDALONE - Error fetching payment link:', error);\r\n            alert(\"Įvyko klaida generuojant mokėjimo nuorodą.\");\r\n        } finally {\r\n            isFetchingPaymentLink = false;\r\n        }\r\n    }\r\n\r\n\r\n\r\n\r\n    async function fetchInvoiceData() {\r\n        try {\r\n            invoiceData = await requestInvoiceJson(\r\n                `${apiBase}/studentplayground/api/invoice/`,\r\n                activeToken(),\r\n            );\r\n            const outstandingWindow = buildInvoiceClassWindow(invoiceData.classes || [], {\r\n                visibleOlderMonthCount: Number.MAX_SAFE_INTEGER,\r\n            });\r\n            visibleOlderMonthCount = outstandingWindow.initialOlderMonthCount;\r\n            visibleFutureMonthCount = 0;\r\n            selectedClasses = [];\r\n            errorForInvoiceData = null;\r\n        } catch (error) {\r\n            if (error instanceof InvoiceApiError && error.authenticationRequired) {\r\n                redirectToInvoiceLogin();\r\n                return;\r\n            }\r\n            errorForInvoiceData = error instanceof InvoiceApiError\r\n                ? error.message\r\n                : 'Tinklo klaida. Patikrinkite interneto ryšį.';\r\n        } finally {\r\n            isLoadingInvoiceData = false;\r\n        }\r\n    }\r\n\r\n    async function recalculateMyBalance() {\r\n        isRecalculatingMyBalance = true;\r\n        try {\r\n            const result = await requestInvoiceJson(\r\n                `${apiBase}/studentplayground/api/recalculate-my-balance/`,\r\n                activeToken(),\r\n                { method: 'POST' },\r\n            );\r\n            if (result.status === 'success') {\r\n                console.log('✅ USER - Stored balance recalculated:', result.current_balance);\r\n            } else {\r\n                console.warn('⚠️ USER - Balance recalculation failed:', result);\r\n            }\r\n        } catch (e) {\r\n            if (e instanceof InvoiceApiError && e.authenticationRequired) {\r\n                redirectToInvoiceLogin();\r\n                throw e;\r\n            }\r\n            console.warn('⚠️ USER - Balance recalculation request failed:', e);\r\n        } finally {\r\n            isRecalculatingMyBalance = false;\r\n        }\r\n    }\r\n\r\n    async function checkIfUserIsTeacher() {\r\n        try {\r\n            const data = await requestInvoiceJson(\r\n                `${apiBase}/studentplayground/isUserTeacher/`,\r\n                activeToken(),\r\n            );\r\n            isUserTeacher = data.isUserTeacher;\r\n        } catch (error) {\r\n            if (error instanceof InvoiceApiError && error.authenticationRequired) {\r\n                redirectToInvoiceLogin();\r\n                throw error;\r\n            }\r\n            console.error('Error checking user type:', error);\r\n            errorForInvoiceData = error instanceof InvoiceApiError\r\n                ? error.message\r\n                : 'Tinklo klaida. Patikrinkite interneto ryšį.';\r\n        } finally {\r\n            isCheckingUserType = false;\r\n        }\r\n    }\r\n\r\n    onMount(async () => {\r\n        try {\r\n            await checkIfUserIsTeacher();\r\n        } catch (_error) {\r\n            isLoadingInvoiceData = false;\r\n            return;\r\n        }\r\n        // Only fetch invoice data if user is not a teacher\r\n        if (isUserTeacher === false) {\r\n            // Keep stored StudentBalance.current_balance fresh on every invoice-page load\r\n            try {\r\n                await recalculateMyBalance();\r\n                await fetchInvoiceData();\r\n            } catch (_error) {\r\n                isLoadingInvoiceData = false;\r\n            }\r\n        } else {\r\n            isLoadingInvoiceData = false;\r\n        }\r\n    });\r\n</script>\r\n\r\n<style>\r\n    button span {\r\n         font-weight: bolder;\r\n         font-size:larger;\r\n     }\r\n  \r\n     button {\r\n        margin-top:10px;\r\n         box-sizing: border-box;\r\n         display: flex;\r\n         flex-direction: row;\r\n         justify-content: center;\r\n         align-items: center;\r\n         padding: 12px 20px;\r\n         gap: 10px;\r\n     \r\n         width: 100%;\r\n         height: 60px;\r\n     \r\n         /* Purple background */\r\n         background-color: #fab45a;\r\n     \r\n         /* Black border */\r\n         border: 2px solid #000000;\r\n     \r\n         /* Box shadow */\r\n         box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n     \r\n         /* Rounded corners */\r\n         border-radius: 8px;\r\n     \r\n         /* Inside auto layout */\r\n         flex: none;\r\n         order: 0;\r\n         align-self: stretch;\r\n         flex-grow: 0;\r\n     \r\n         /* Remove default button styling */\r\n         outline: none;\r\n         cursor: pointer;\r\n   \r\n         /* Remove the default button background on focus */\r\n         background-image: none;\r\n         transition: background-color 0.3s ease, color 0.3s ease;\r\n     }\r\n  \r\n     /* Button hover effect */\r\n     button:hover {\r\n         background-color: #14695b;\r\n         color:white;\r\n     }\r\n  \r\n     /* Text inside the button */\r\n     span {\r\n        margin-top:20px;\r\n        margin-bottom: 20px;\r\n        font-size: 1rem;\r\n        font-weight: bold;\r\n     \r\n     }\r\n   form {\r\n       padding-bottom: 10px;\r\n       padding-top:15px;\r\n   }\r\n   span {\r\n       font-weight: bold;\r\n   }\r\n   \r\n   label {\r\n          font-size: 18px;\r\n          font-weight: bold;\r\n          margin-bottom: 5px;\r\n          display: block;\r\n          color:#14695b;\r\n          text-align: center;\r\n      }\r\n\r\n      .balance-info {\r\n          margin: 1rem 0 1.5rem 0;\r\n          padding: 1rem;\r\n          background-color: #f8f9fa;\r\n          border-radius: 8px;\r\n          border-left: 4px solid #14695b;\r\n          text-align: center;\r\n      }\r\n\r\n      .balance-info > div {\r\n          margin-bottom: 8px;\r\n      }\r\n\r\n      .balance-label {\r\n          font-weight: 600;\r\n          color: #14695b;\r\n          display: inline;\r\n      }\r\n\r\n      .balance-amount {\r\n          font-weight: 700;\r\n          font-size: 1.1em;\r\n          color: #333;\r\n          margin-left: 8px;\r\n      }\r\n\r\n      .balance-date {\r\n          color: #666;\r\n          font-size: 0.9em;\r\n          margin-left: 8px;\r\n      }\r\n\r\n      .loading-container {\r\n          display: flex;\r\n          flex-direction: column;\r\n          align-items: center;\r\n          justify-content: center;\r\n          padding: 2rem;\r\n          margin: 2rem 0;\r\n      }\r\n\r\n      .loading-spinner {\r\n          width: 40px;\r\n          height: 40px;\r\n          border: 4px solid #f3f3f3;\r\n          border-top: 4px solid #14695b;\r\n          border-radius: 50%;\r\n          animation: spin 1s linear infinite;\r\n          margin-bottom: 1rem;\r\n      }\r\n\r\n      @keyframes spin {\r\n          0% { transform: rotate(0deg); }\r\n          100% { transform: rotate(360deg); }\r\n      }\r\n\r\n      .loading-text {\r\n          color: #666;\r\n          font-size: 1rem;\r\n          margin: 0;\r\n      }\r\n\r\n      .error-container {\r\n          display: flex;\r\n          flex-direction: column;\r\n          align-items: center;\r\n          justify-content: center;\r\n          padding: 2rem;\r\n          margin: 2rem 0;\r\n          background-color: #fff3f3;\r\n          border-radius: 8px;\r\n          border-left: 4px solid #dc3545;\r\n      }\r\n\r\n      .error-text {\r\n          color: #dc3545;\r\n          font-size: 1rem;\r\n          margin-bottom: 1rem;\r\n          text-align: center;\r\n      }\r\n\r\n      .error-container button {\r\n          background-color: #dc3545;\r\n          color: white;\r\n          border: none;\r\n          padding: 0.5rem 1rem;\r\n          border-radius: 4px;\r\n          cursor: pointer;\r\n          font-size: 0.9rem;\r\n      }\r\n\r\n      .error-container button:hover {\r\n          background-color: #c82333;\r\n      }\r\n\r\n      .payments-section {\r\n          margin-top: 2rem;\r\n          padding-top: 2rem;\r\n          border-top: 2px solid #e9ecef;\r\n      }\r\n\r\n      .payments-header {\r\n          color: #14695b;\r\n          font-size: 1.5rem;\r\n          font-weight: 600;\r\n          margin-bottom: 0.5rem;\r\n      }\r\n\r\n      .payments-description {\r\n          color: #666;\r\n          font-size: 1rem;\r\n          margin-bottom: 1.5rem;\r\n          line-height: 1.4;\r\n      }\r\n\r\n      .no-payments-section {\r\n          margin-top: 2rem;\r\n          padding: 2rem;\r\n          background-color: #f8f9fa;\r\n          border-radius: 8px;\r\n          text-align: center;\r\n      }\r\n\r\n      .no-payments-text {\r\n          font-size: 1rem;\r\n          color: #333;\r\n      }\r\n\r\n      .class-window-toggle {\r\n          width: auto;\r\n          height: auto;\r\n          min-height: 36px;\r\n          margin: 0;\r\n          padding: 0.45rem 0.9rem;\r\n          align-self: center;\r\n          border: 1px solid #14695b;\r\n          background-color: #fff7ec;\r\n          color: #14695b;\r\n          font-size: 0.9rem;\r\n          font-weight: 600;\r\n      }\r\n\r\n      .class-window-controls {\r\n          display: flex;\r\n          flex-wrap: wrap;\r\n          justify-content: center;\r\n          gap: 0.5rem;\r\n          margin: 0.65rem 0;\r\n      }\r\n  </style>\r\n  \r\n  <NavBarReusable label=\"Sąskaitos\" backLink={backLinkUrl} />\r\n  \r\n  {#if isCheckingUserType}\r\n      <div class=\"loading-container\">\r\n          <div class=\"loading-spinner\"></div>\r\n          <p class=\"loading-text\">Kraunamos sąskaitos...</p>\r\n      </div>\r\n  {:else if isUserTeacher}\r\n      <!-- Teacher view - show teacher invoices page -->\r\n      <TeacherInvoicesPage />\r\n  {:else}\r\n      <!-- Student view - show original invoice functionality -->\r\n      {#if isLoadingInvoiceData}\r\n      <div class=\"loading-container\">\r\n          <div class=\"loading-spinner\"></div>\r\n          <p class=\"loading-text\">Kraunami sąskaitos duomenys...</p>\r\n      </div>\r\n  {:else if errorForInvoiceData}\r\n      <div class=\"error-container\">\r\n          <p class=\"error-text\">Klaida: {errorForInvoiceData}</p>\r\n          <button on:click={() => { isLoadingInvoiceData = true; errorForInvoiceData = null; fetchInvoiceData(); }}>\r\n              Bandyti dar kartą\r\n          </button>\r\n      </div>\r\n  {:else if invoiceData}\r\n      <div class=\"balance-info\">\r\n      <div>\r\n          <span class=\"balance-label\">Dabartinis balansas:</span>\r\n          <span class=\"balance-amount\">{invoiceData.balance} EUR</span>\r\n      </div>\r\n      <div>\r\n          <span class=\"balance-label\">Paskutinį kartą atnaujinta:</span>\r\n          <span class=\"balance-date\">{new Date(invoiceData.last_updated_date).toLocaleDateString('lt-LT')}</span>\r\n      </div>\r\n      </div>\r\n\r\n  <form on:submit|preventDefault={fetchPaymentLinkAndRedirect}>\r\n      <label for=\"class-select\">Pasirinkite Pamokas:</label>\r\n      {#if classWindow.canShowMorePast || classWindow.canShowLessPast}\r\n          <div class=\"class-window-controls\" role=\"group\" aria-label=\"Ankstesni mėnesiai\">\r\n              {#if classWindow.canShowMorePast}\r\n                  <button\r\n                      type=\"button\"\r\n                      class=\"class-window-toggle\"\r\n                      on:click={showOneMorePastMonth}\r\n                      aria-expanded={visibleOlderMonthCount > 0}\r\n                      aria-controls=\"invoice-class-list\"\r\n                  >\r\n                      Rodyti daugiau\r\n                  </button>\r\n              {/if}\r\n              {#if classWindow.canShowLessPast}\r\n                  <button\r\n                      type=\"button\"\r\n                      class=\"class-window-toggle\"\r\n                      on:click={showOneLessPastMonth}\r\n                      aria-expanded=\"true\"\r\n                      aria-controls=\"invoice-class-list\"\r\n                  >\r\n                      Rodyti mažiau\r\n                  </button>\r\n              {/if}\r\n          </div>\r\n      {/if}\r\n\r\n      <div id=\"invoice-class-list\">\r\n          <CheckBoxAreForClassesComponent\r\n              classes={classWindow.visibleClasses}\r\n              bind:selectedClasses\r\n          />\r\n      </div>\r\n\r\n      {#if classWindow.canShowMoreFuture || classWindow.canShowLessFuture}\r\n          <div class=\"class-window-controls\" role=\"group\" aria-label=\"Vėlesni mėnesiai\">\r\n              {#if classWindow.canShowMoreFuture}\r\n                  <button\r\n                      type=\"button\"\r\n                      class=\"class-window-toggle\"\r\n                      on:click={showOneMoreFutureMonth}\r\n                      aria-expanded={visibleFutureMonthCount > 0}\r\n                      aria-controls=\"invoice-class-list\"\r\n                  >\r\n                      Rodyti daugiau\r\n                  </button>\r\n              {/if}\r\n              {#if classWindow.canShowLessFuture}\r\n                  <button\r\n                      type=\"button\"\r\n                      class=\"class-window-toggle\"\r\n                      on:click={showOneLessFutureMonth}\r\n                      aria-expanded=\"true\"\r\n                      aria-controls=\"invoice-class-list\"\r\n                  >\r\n                      Rodyti mažiau\r\n                  </button>\r\n              {/if}\r\n          </div>\r\n      {/if}\r\n\r\n      <p>Viso: {Math.round(invoiceSum)} EUR</p>\r\n\r\n      <button type=\"submit\" disabled={isFetchingPaymentLink}>\r\n          <span>{isFetchingPaymentLink ? 'Kuriama nuoroda...' : 'Apmokėti'}</span>\r\n        </button>\r\n  </form>\r\n\r\n  {#if invoiceData.previous_payments.length > 0}\r\n      <div class=\"payments-section\">\r\n          <h2 class=\"payments-header\">Atlikti mokėjimai</h2>\r\n          <p class=\"payments-description\">Čia galite peržiūrėti savo mokėjimo istoriją ir atsisiųsti sąskaitas.</p>\r\n          <CompletedPaymentsList payments={invoiceData.previous_payments} />\r\n      </div>\r\n  {:else}\r\n      <div class=\"no-payments-section\">\r\n          <h2 class=\"payments-header\">Atlikti mokėjimai</h2>\r\n          <p class=\"no-payments-text\">Kol kas neturite atliktų mokėjimų.</p>\r\n      </div>\r\n  {/if}\r\n\r\n  {/if} <!-- End of student view -->\r\n{/if} <!-- End of user type check -->\r\n","<script>\r\n  import { onMount } from 'svelte';\r\n  import AgreementCard from './AgreementCard.svelte';\r\n  import SigningIdentityDialog from './SigningIdentityDialog.svelte';\r\n  import GatewaySigningModal from './GatewaySigningModal.svelte';\r\n  import { getCurrentRequirements, isHiddenAgreementResponse, reconcileRequirement, resumeSigning, restartLostSigning, restartFailedSigning, restartPendingSigning, pendingRestartConfirmation, pendingRestartUnconfirmed } from './agreementApi.js';\r\n\r\n  let loading = true;\r\n  let hidden = false;\r\n  let error = '';\r\n  let requirements = [];\r\n  let selected = null;\r\n  let returnFocus = null;\r\n  let feedback = '';\r\n  let reconciling = new Set();\r\n  let gatewaySession = null;\r\n  let checkingRequirementId = '';\r\n  const checkingFeedback = 'Tikrinama ir saugoma\\u2026';\r\n  const finalizationFailedFeedback = 'Para\\u0161as egzistuoja, ta\\u010diau jo patikra arba saugojimas nepavyko. Automatiniai bandymai sustabdyti. Pakartotin\\u0119 patikr\\u0105 prad\\u0117kite tik ai\\u0161kiu veiksmu.';\r\n\r\n  async function load() {\r\n    loading = true; error = '';\r\n    try {\r\n      requirements = (await getCurrentRequirements()).filter(item => item.status !== 'withdrawn');\r\n      // Clear stale progress copy as soon as the authoritative API reports a\r\n      // deterministic finalization failure. Automatic verification is stopped.\r\n      if (feedback === checkingFeedback && checkingRequirementId && requirements.some(item =>\r\n        (item.public_id || item.id) === checkingRequirementId && item.status === 'finalization_failed'\r\n      )) {\r\n        feedback = finalizationFailedFeedback;\r\n      }\r\n      return requirements;\r\n    }\r\n    catch (caught) {\r\n      if (isHiddenAgreementResponse(caught)) hidden = true;\r\n      else error = 'Sutarčių būsenos nepavyko įkelti.';\r\n    } finally { loading = false; }\r\n  }\r\n\r\n  function startSigning(event) {\r\n    selected = event.detail.requirement;\r\n    returnFocus = event.detail.trigger;\r\n  }\r\n\r\n  async function resume(event) {\r\n    const requirement = event.detail.requirement;\r\n    try {\r\n      const result = await resumeSigning(requirement.public_id || requirement.id);\r\n      if (result?.mode !== 'gateway_iframe' || typeof result?.launch_url !== 'string') throw new Error('invalid_resume');\r\n      gatewaySession = { requirement, launchUrl: result.launch_url, returnFocus: event.detail.trigger };\r\n    } catch (_) { feedback = 'Pasirašymo tęsti nepavyko. Atnaujinkite būseną ir bandykite dar kartą.'; }\r\n  }\r\n\r\n  async function reconcile(event) {\r\n    const item = event.detail.requirement;\r\n    const id = item.public_id || item.id;\r\n    if (reconciling.has(id)) return;\r\n    reconciling = new Set(reconciling).add(id);\r\n    checkingRequirementId = id;\r\n    feedback = checkingFeedback;\r\n    try {\r\n      await reconcileRequirement(id, event.detail.retryFinalization === true);\r\n      const current = (await load())?.find(requirement => (requirement.public_id || requirement.id) === id);\r\n      if (current?.status === 'finalization_failed') feedback = finalizationFailedFeedback;\r\n      else if (current?.status === 'completed_stored') feedback = 'Pasirašytas dokumentas patikrintas ir išsaugotas.';\r\n      else if (!['signed_storage_pending', 'create_unknown'].includes(current?.status)) feedback = '';\r\n    }\r\n    catch (_) { feedback = 'Būsenos atnaujinti nepavyko. Bandykite vėliau.'; }\r\n    finally {\r\n      const next = new Set(reconciling); next.delete(id); reconciling = next;\r\n      if (checkingRequirementId === id) checkingRequirementId = '';\r\n    }\r\n  }\r\n\r\n  async function submitted(event) {\r\n    if (event.detail.mode === 'gateway_iframe') {\r\n      gatewaySession = { requirement: selected, launchUrl: event.detail.result.launch_url, returnFocus };\r\n      selected = null;\r\n      await load();\r\n      return;\r\n    }\r\n    feedback = event.detail.mode === 'invitation_sent' ? 'Kvietimas pasirašyti išsiųstas el. paštu.' : checkingFeedback;\r\n    selected = null;\r\n    await load();\r\n  }\r\n\r\n  async function restartLocal(event) {\r\n    const item = event.detail.requirement;\r\n    feedback = 'Atkuriama vietinė bandomoji būsena…';\r\n    try { await restartLostSigning(item.public_id || item.id); await load(); feedback = 'Galite pradėti naują bandomąjį pasirašymą.'; }\r\n    catch (_) { feedback = 'Vietinės bandomosios būsenos atkurti nepavyko.'; }\r\n  }\r\n\r\n  async function restartSigning(event) {\r\n    const item = event.detail.requirement;\r\n    const id = item.public_id || item.id;\r\n    const pending = item.status === 'signing_in_progress' && item.can_restart_pending === true;\r\n    if ((!pending && !item.can_restart_signing) || reconciling.has(id)) return;\r\n    if (!window.confirm(pending ? pendingRestartConfirmation : 'Ankstesnis parašas jau egzistuoja. Naujas bandymas jo neatšauks ir gali sunaudoti papildomą pasirašymą. Ankstesnio bandymo istorija bus išsaugota. Pradėti naują pasirašymą?')) return;\r\n    reconciling = new Set(reconciling).add(id);\r\n    try {\r\n      const current = pending\r\n        ? await restartPendingSigning(id, item.pending_restart_transaction_id)\r\n        : await restartFailedSigning(id, item.restart_transaction_id);\r\n      await load();\r\n      if (current?.status !== 'assigned' || current?.can_initiate !== true) throw new Error('restart_not_ready');\r\n      feedback = 'Ankstesnio bandymo istorija išsaugota. Pradedamas naujas pasirašymas.';\r\n      returnFocus = event.detail.trigger;\r\n      selected = current;\r\n    } catch (error) {\r\n      feedback = error?.code === 'signing_restart_unconfirmed' ? pendingRestartUnconfirmed : 'Naujo pasirašymo pradėti nepavyko. Atnaujinkite būseną ir bandykite dar kartą.';\r\n      await load();\r\n    } finally {\r\n      const next = new Set(reconciling); next.delete(id); reconciling = next;\r\n    }\r\n  }\r\n\r\n  onMount(async () => {\r\n    await load();\r\n    const params = new URLSearchParams(window.location.search);\r\n    const returnedId = params.get('agreement');\r\n    const isReturn = params.get('dokobit_return') === '1';\r\n    if (isReturn) {\r\n      // Provider redirects may append transient tokens and status fields. Use\r\n      // only our return marker and requirement id, then remove every query\r\n      // parameter before reconciliation, focus changes, or further navigation.\r\n      window.history.replaceState(window.history.state, '', `${window.location.pathname}#/account`);\r\n    }\r\n    if (isReturn && returnedId && requirements.some(item => (item.public_id || item.id) === returnedId)) {\r\n      feedback = checkingFeedback;\r\n      await reconcile({ detail: { requirement: requirements.find(item => (item.public_id || item.id) === returnedId) } });\r\n      document.getElementById(`agreement-${returnedId}`)?.focus();\r\n    }\r\n  });\r\n</script>\r\n\r\n{#if !hidden && (error || requirements.length)}\r\n  <section class=\"agreements\" aria-labelledby=\"agreements-heading\" aria-busy={loading}>\r\n    <h2 id=\"agreements-heading\">Sutartys</h2>\r\n    {#if error}<div class=\"load-error\" role=\"alert\"><span>{error}</span><button type=\"button\" on:click={load}>Bandyti dar kartą</button></div>{/if}\r\n    {#if feedback}<p class=\"feedback\" aria-live=\"polite\">{feedback}</p>{/if}\r\n    <div class=\"cards\">\r\n      {#each requirements as requirement (requirement.public_id || requirement.id)}\r\n        <AgreementCard {requirement} busy={reconciling.has(requirement.public_id || requirement.id)} on:sign={startSigning} on:resume={resume} on:reconcile={reconcile} on:restartlocal={restartLocal} on:restartsigning={restartSigning}/>\r\n      {/each}\r\n    </div>\r\n  </section>\r\n{/if}\r\n\r\n<SigningIdentityDialog requirement={selected} open={!!selected} {returnFocus} on:close={() => selected = null} on:submitted={submitted}/>\r\n<GatewaySigningModal requirement={gatewaySession?.requirement} launchUrl={gatewaySession?.launchUrl || ''} open={!!gatewaySession} returnFocus={gatewaySession?.returnFocus} on:close={() => gatewaySession = null} on:refresh={load} on:complete={async () => { gatewaySession = null; await load(); }}/>\r\n\r\n<style>\r\n  .agreements{width:100%;border-top:1px solid #e0e0e0;padding-top:20px}.agreements h2{font-size:20px;color:#14695b;margin:0 0 14px}.cards{display:flex;flex-direction:column;gap:14px}.load-error{border:1px solid #fecaca;background:#fee2e2;color:#b91c1c;padding:12px;border-radius:8px;display:flex;justify-content:space-between;align-items:center;gap:10px}.load-error button{min-height:44px;border:1px solid #14695b;border-radius:8px;background:white;color:#14695b;padding:8px 12px}.feedback{color:#1e40af;background:#dbeafe;border-radius:8px;padding:10px}\r\n</style>\r\n","<script>\r\n  import { createEventDispatcher } from 'svelte';\r\n  import { openAgreementFile } from './agreementApi.js';\r\n\r\n  export let requirement;\r\n  export let busy = false;\r\n  const dispatch = createEventDispatcher();\r\n  let fileError = '';\r\n  let openingFile = false;\r\n  let showDocumentId = false;\r\n\r\n  const statuses = {\r\n    assigned: ['Laukia parašo', 'warning'],\r\n    signing_in_progress: ['Pasirašymas pradėtas', 'info'],\r\n    signed_storage_pending: ['Tikrinama ir saugoma', 'info'],\r\n    finalization_failed: ['Patikra arba saugojimas nepavyko', 'error'],\r\n    storage_failed: ['Nepavyko užbaigti', 'error'],\r\n    provider_failed: ['Nepavyko užbaigti', 'error'],\r\n    create_unknown: ['Tikrinama pasirašymo būsena', 'info'],\r\n    declined: ['Pasirašyti atsisakyta', 'warning'],\r\n    cancelled: ['Pasirašymas atšauktas', 'warning'],\r\n    expired: ['Pasirašymo laikas baigėsi', 'warning'],\r\n    completed_stored: ['Pasirašyta', 'success']\r\n  };\r\n\r\n  $: publicId = requirement.public_id || requirement.id;\r\n  $: status = requirement.status || 'assigned';\r\n  $: statusInfo = statuses[status] || ['Laukiama', 'warning'];\r\n  $: complete = status === 'completed_stored';\r\n  $: canSign = requirement.can_initiate === true && ['assigned', 'declined', 'cancelled', 'expired'].includes(status);\r\n  $: canReconcile = requirement.can_reconcile === true && ['signing_in_progress', 'signed_storage_pending', 'create_unknown'].includes(status);\r\n  $: canRetryFinalization = requirement.can_retry_finalization === true && status === 'finalization_failed';\r\n  $: canRestartSigning = requirement.can_restart_signing === true && status === 'finalization_failed';\r\n  $: canRestartPending = requirement.can_restart_pending === true && status === 'signing_in_progress';\r\n  $: canResume = requirement.can_resume === true;\r\n  $: canRestartLocal = requirement.can_restart_local === true;\r\n  $: attemptOutcomeUnknown = requirement.attempt_outcome_unknown === true;\r\n  $: title = requirement.title || requirement.version_title || 'Paslaugų teikimo sutartis';\r\n  $: version = requirement.version_number || requirement.version;\r\n  $: effectiveDate = requirement.effective_at || requirement.effective_date;\r\n  $: completedDate = requirement.completed_at || requirement.signed_at;\r\n  $: documentId = complete ? requirement.artifact_public_id : null;\r\n\r\n  function formatDate(value) {\r\n    if (!value) return '';\r\n    const date = new Date(value);\r\n    return Number.isNaN(date.getTime()) ? String(value) : new Intl.DateTimeFormat('lt-LT').format(date);\r\n  }\r\n\r\n  async function openFile(kind) {\r\n    if (openingFile) return;\r\n    openingFile = true;\r\n    fileError = '';\r\n    try { await openAgreementFile(publicId, kind); }\r\n    catch (_) { fileError = 'Dokumento nepavyko atidaryti. Bandykite dar kartą.'; }\r\n    finally { openingFile = false; }\r\n  }\r\n</script>\r\n\r\n<article class=\"agreement-card\" id={`agreement-${publicId}`} tabindex=\"-1\">\r\n  <div class=\"heading-row\">\r\n    {#if requirement?.family}<p>Šeimos sutartis: {requirement.family.name}. Pakanka vieno parašo visai šeimai.<br>{requirement.covered_students?.map(student => `${student.first_name} ${student.last_name}`).join(', ') || ''}</p>{/if}\r\n    <h3>{title}</h3>\r\n    <span class:success={statusInfo[1] === 'success'} class:info={statusInfo[1] === 'info'} class:error={statusInfo[1] === 'error'} class:warning={statusInfo[1] === 'warning'}>{statusInfo[0]}</span>\r\n  </div>\r\n  {#if complete && completedDate}\r\n    <p class=\"meta\">Pasirašyta {formatDate(completedDate)}</p>\r\n  {:else if version || effectiveDate}\r\n    <p class=\"meta\">{version ? `Versija ${version}` : ''}{version && effectiveDate ? ' · ' : ''}{effectiveDate ? `galioja nuo ${formatDate(effectiveDate)}` : ''}</p>\r\n  {/if}\r\n  {#if ['signed_storage_pending', 'create_unknown'].includes(status)}\r\n    <p class=\"progress\" aria-live=\"polite\">Tikrinama ir saugoma…</p>\r\n  {/if}\r\n  {#if canRestartLocal}<p class=\"inline-error\" role=\"alert\">Vietinio bandomojo pasirašymo duomenys prarasti, todėl šio bandymo tęsti negalima. Naujas bandymas neatšauks ankstesnio Dokobit bandymo.</p>{/if}\r\n  {#if attemptOutcomeUnknown}<p class=\"inline-error\" role=\"alert\">Ankstesnio bandomojo bandymo rezultatas neaiškus. Naujo pasirašymo pradėti negalima, kol administratorius saugiai nepatikrino būsenos.</p>{/if}\r\n  {#if status === 'finalization_failed'}<p class=\"inline-error\" role=\"alert\">Para&#353;as egzistuoja, ta&#269;iau jo kvalifikuotumo patikra nepavyko. Automatiniai bandymai sustabdyti. Pakartotin&#281; patikr&#261; galite prad&#279;ti tik ai&#353;kiu veiksmu.</p>{/if}\r\n  {#if fileError}<p class=\"inline-error\" role=\"alert\">{fileError}</p>{/if}\r\n  {#if openingFile}<p class=\"progress\" role=\"status\">Atidaromas dokumentas…</p>{/if}\r\n  {#if complete && documentId}\r\n    <p class=\"document-id\">\r\n      <button type=\"button\" class=\"document-id-toggle\" aria-expanded={showDocumentId} on:click={() => showDocumentId = !showDocumentId}>Rodyti dokumento ID</button>\r\n      {#if showDocumentId}<span>{documentId}</span>{/if}\r\n    </p>\r\n  {/if}\r\n  <div class=\"actions\">\r\n    <button type=\"button\" class=\"secondary\" disabled={openingFile} aria-busy={openingFile} on:click={() => openFile('source')} aria-label={`Peržiūrėti sutartį ${title}`}>{complete ? 'Peržiūrėti originalą' : 'Peržiūrėti sutartį'}</button>\r\n    {#if complete}\r\n      <button type=\"button\" class=\"secondary\" disabled={openingFile} aria-busy={openingFile} on:click={() => openFile('artifact')}>Atsisiųsti pasirašytą</button>\r\n    {:else if canRetryFinalization || canRestartSigning}\r\n      {#if canRetryFinalization}<button type=\"button\" class=\"secondary\" disabled={busy} aria-busy={busy} on:click={() => dispatch('reconcile', { requirement, retryFinalization: true })}>{busy ? 'Tikrinama…' : 'Pakartoti patikrą'}</button>{/if}\r\n      {#if canRestartSigning}<button type=\"button\" class=\"primary\" disabled={busy} aria-busy={busy} on:click={(event) => dispatch('restartsigning', { requirement, trigger: event.currentTarget })}>Pasirašyti iš naujo</button>{/if}\r\n    {:else if canResume}\r\n      <button type=\"button\" class=\"primary\" disabled={busy} on:click={(event) => dispatch('resume', { requirement, trigger: event.currentTarget })}>Tęsti pasirašymą</button>\r\n      {#if canRestartPending}<button type=\"button\" class=\"secondary\" disabled={busy} aria-busy={busy} on:click={(event) => dispatch('restartsigning', { requirement, trigger: event.currentTarget })}>Pradėti iš naujo</button>{/if}\r\n    {:else if canRestartLocal}\r\n      <button type=\"button\" class=\"primary\" on:click={() => dispatch('restartlocal', { requirement })}>Leisti naują bandomąjį bandymą</button>\r\n    {:else if canSign}\r\n      <button type=\"button\" class=\"primary\" on:click={(event) => dispatch('sign', { requirement, trigger: event.currentTarget })}>Pasirašyti Dokobit</button>\r\n    {:else if canReconcile}\r\n      <button type=\"button\" class=\"secondary\" disabled={busy} aria-busy={busy} on:click={() => dispatch('reconcile', { requirement })}>{busy ? 'Tikrinama…' : 'Atnaujinti būseną'}</button>\r\n    {/if}\r\n  </div>\r\n</article>\r\n\r\n<style>\r\n  .agreement-card{border:1px solid #d1d5db;border-radius:8px;padding:16px;box-shadow:0 .5px 2px rgba(96,97,112,.16);background:#fff}.heading-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.heading-row h3{font-size:17px;margin:2px 0;color:#333}.heading-row span{padding:5px 9px;border-radius:999px;font-size:13px;font-weight:600;white-space:nowrap}.success{color:#166534;background:#dcfce7}.warning{color:#854d0e;background:#fef3c7}.error{color:#b91c1c;background:#fee2e2}.info{color:#1e40af;background:#dbeafe}.meta,.progress{color:#666;margin:10px 0}.inline-error{color:#b91c1c;margin:10px 0}.document-id{color:#555;margin:10px 0;display:flex;gap:8px;align-items:center;flex-wrap:wrap;word-break:break-all}.document-id-toggle{border:0;background:transparent;color:#14695b;padding:0;text-decoration:underline;cursor:pointer;font:inherit}.document-id-toggle:focus{outline:2px solid #14695b;outline-offset:2px}.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}.actions button{min-height:44px;border-radius:8px;padding:9px 14px;font-weight:600;cursor:pointer}.primary{background:#fab45a;border:1px solid #333;color:#111}.primary:hover{background:#c98f43}.secondary{background:white;border:1px solid #14695b;color:#14695b}.actions button:focus{outline:2px solid #14695b;outline-offset:2px}@media(max-width:767px){.heading-row{flex-direction:column}.actions{flex-direction:column}.actions button{width:100%}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}\r\n</style>\r\n","const OWNER_QR_PATH = '/studentplayground/api/teacher/work-with-children-qr/';\r\nconst PDF_CONTENT_TYPE = 'application/pdf';\r\nexport const TEACHER_WORK_QR_ACCEPT = 'image/jpeg,image/png,image/webp,application/pdf,.pdf';\r\n\r\nasync function responseError(response, fallbackError) {\r\n    const payload = await response.json().catch(() => ({}));\r\n    return new Error(payload.error || fallbackError);\r\n}\r\n\r\nexport async function uploadTeacherWorkQrCode({\r\n    apiBase,\r\n    token,\r\n    file,\r\n    fetchImpl = fetch,\r\n    fallbackError = 'Nepavyko įkelti QR kodo.'\r\n}) {\r\n    const formData = new FormData();\r\n    formData.append('qrCode', file);\r\n\r\n    const response = await fetchImpl(`${apiBase}${OWNER_QR_PATH}`, {\r\n        method: 'POST',\r\n        headers: { Authorization: `Bearer ${token}` },\r\n        body: formData\r\n    });\r\n    const result = await response.json().catch(() => ({}));\r\n    if (!response.ok) throw new Error(result.error || fallbackError);\r\n    return result;\r\n}\r\n\r\nexport async function fetchTeacherWorkQrCode({\r\n    apiBase,\r\n    token,\r\n    teacherId,\r\n    fetchImpl = fetch,\r\n    fallbackError = 'Nepavyko parodyti QR kodo.'\r\n}) {\r\n    const path = teacherId === undefined || teacherId === null\r\n        ? OWNER_QR_PATH\r\n        : `/studentplayground/api/admin/teachers/${encodeURIComponent(teacherId)}/work-with-children-qr/`;\r\n    const response = await fetchImpl(`${apiBase}${path}`, {\r\n        headers: { Authorization: `Bearer ${token}` }\r\n    });\r\n    if (!response.ok) throw await responseError(response, fallbackError);\r\n    return response.blob();\r\n}\r\n\r\nexport function reserveTeacherWorkQrPdfWindow(\r\n    contentType,\r\n    openWindow = () => window.open('', '_blank')\r\n) {\r\n    if (contentType !== PDF_CONTENT_TYPE) return null;\r\n\r\n    const previewWindow = openWindow();\r\n    if (!previewWindow) {\r\n        throw new Error('Naršyklė užblokavo PDF peržiūros langą. Leiskite iššokančius langus ir bandykite dar kartą.');\r\n    }\r\n    previewWindow.opener = null;\r\n    return previewWindow;\r\n}\r\n\r\nexport function presentTeacherWorkQrFile(\r\n    blob,\r\n    {\r\n        pdfWindow = null,\r\n        createObjectURL = value => URL.createObjectURL(value),\r\n        revokeObjectURL = value => URL.revokeObjectURL(value)\r\n    } = {}\r\n) {\r\n    const objectUrl = createObjectURL(blob);\r\n    if (blob.type === PDF_CONTENT_TYPE) {\r\n        if (!pdfWindow) {\r\n            revokeObjectURL(objectUrl);\r\n            throw new Error('Nepavyko atidaryti PDF peržiūros lango.');\r\n        }\r\n        pdfWindow.location.href = objectUrl;\r\n        return { kind: 'pdf', objectUrl };\r\n    }\r\n\r\n    if (pdfWindow && typeof pdfWindow.close === 'function') pdfWindow.close();\r\n    return { kind: 'image', objectUrl };\r\n}\r\n\r\nexport async function loadTeacherWorkQrPreview({\r\n    apiBase,\r\n    token,\r\n    contentType,\r\n    teacherId,\r\n    fetchImpl = fetch,\r\n    openWindow = () => window.open('', '_blank'),\r\n    createObjectURL = value => URL.createObjectURL(value),\r\n    revokeObjectURL = value => URL.revokeObjectURL(value),\r\n    fallbackError\r\n}) {\r\n    const pdfWindow = reserveTeacherWorkQrPdfWindow(contentType, openWindow);\r\n    try {\r\n        const blob = await fetchTeacherWorkQrCode({\r\n            apiBase,\r\n            token,\r\n            teacherId,\r\n            fetchImpl,\r\n            fallbackError\r\n        });\r\n        return presentTeacherWorkQrFile(blob, {\r\n            pdfWindow,\r\n            createObjectURL,\r\n            revokeObjectURL\r\n        });\r\n    } catch (error) {\r\n        if (pdfWindow && typeof pdfWindow.close === 'function') pdfWindow.close();\r\n        throw error;\r\n    }\r\n}\r\n","<script>\r\n    import { onDestroy, onMount } from 'svelte';\r\n    import { push } from 'svelte-spa-router';\r\n    import FilterButtonsForSettingsPage from \"./FilterButtonsForSettingsPage.svelte\";\r\n    import NavbarReusable from \"./NavbarReusable.svelte\";\r\n    import AgreementSection from \"./AgreementSection.svelte\";\r\n    import { getApiBase } from './apiBase.js';\r\n    import {\r\n        loadTeacherWorkQrPreview,\r\n        TEACHER_WORK_QR_ACCEPT,\r\n        uploadTeacherWorkQrCode\r\n    } from './teacherWorkQrApi.js';\r\n\r\n    import { createAccountAutosave } from './accountAutosave.js';\r\n    import { registerPersonalNotesNavigationGuard } from './personalNotesNavigation.js';\r\n\r\n    const apiBase = getApiBase();\r\n    let email = 'john@email.com';  // Initial email value\r\n    let phoneNumber = '';          // Phone number value\r\n    let receiveMessages = true;    // Checkbox for SMS notifications\r\n    let receiveDailyReminders = true;\r\n    \r\n    // Teacher-specific variables\r\n    let isTeacher = false;\r\n    let accountLoaded = false;\r\n    let accountLoadError = '';\r\n    let accountNeedsLogin = false;\r\n    let bankNr = '';\r\n    let indivLic = '';\r\n    let meetingLink = '';\r\n    let desiredStudentCount = '';\r\n    let workWithChildrenQrCode = { exists: false, uploadedAt: null, contentType: null };\r\n    let qrCodeFile = null;\r\n    let qrCodeInput;\r\n    let qrCodeUploading = false;\r\n    let qrCodeViewing = false;\r\n    let qrCodeMessage = '';\r\n    let qrCodeError = '';\r\n    let qrCodePreviewUrl = '';\r\n    let qrCodePdfUrl = '';\r\n    let selectedSubjects = [];\r\n    let availableSubjects = [];\r\n    let subjectSearch = '';\r\n    $: normalizedSubjectSearch = normalizeSearchText(subjectSearch);\r\n    $: filteredSubjects = availableSubjects.filter(subject =>\r\n        normalizeSearchText(subject).includes(normalizedSubjectSearch)\r\n    );\r\n    // Map of subject name -> grade range string (each subject has its own range)\r\n    let subjectGrades = {};\r\n    // Map of subject name -> validation error message\r\n    let gradeErrors = {};\r\n    \r\n    // Student-specific variables\r\n    let studentGrade = '';         // Grade for non-teacher users\r\n    \r\n    let autosave;\r\n    let unregisterNavigation;\r\n    let saveStatus = { saving: false, dirty: false, edited: false, error: '' };\r\n    function accountValues() {\r\n        return { email, phoneNumber, receiveMessages, receiveDailyReminders,\r\n            ...(isTeacher ? { bankNr, indivLic, meetingLink, desiredStudentCount: desiredStudentCount == null || Number.isNaN(desiredStudentCount) ? '' : desiredStudentCount,\r\n                teacherInfo: selectedSubjects.map(subject => ({ subject, grade: (subjectGrades[subject] || '').trim() }))\r\n            } : { grade: studentGrade }) };\r\n    }\r\n    $: currentValues = { email, phoneNumber, receiveMessages, receiveDailyReminders,\r\n        ...(isTeacher ? { bankNr, indivLic, meetingLink, desiredStudentCount: desiredStudentCount == null || Number.isNaN(desiredStudentCount) ? '' : desiredStudentCount,\r\n            teacherInfo: selectedSubjects.map(subject => ({ subject, grade: (subjectGrades[subject] || '').trim() }))\r\n        } : { grade: studentGrade }) };\r\n    $: if (accountLoaded && autosave) autosave.update(currentValues);\r\n\r\n    function validateField(key, value) {\r\n        if (key === 'email' && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) return 'Įveskite galiojantį el. pašto adresą.';\r\n        if (key === 'meetingLink' && value) {\r\n            try { if (!['https:', 'http:'].includes(new URL(value).protocol)) throw new Error(); }\r\n            catch { return 'Įveskite galiojančią pamokos nuorodą.'; }\r\n        }\r\n        if (key === 'desiredStudentCount' && value !== '' && (!Number.isInteger(Number(value)) || Number(value) < 0)) return 'Mokinių skaičius turi būti sveikasis neneigiamas skaičius.';\r\n        if (key === 'grade' && !/^(?:[1-9]|1[0-3]|university|universitetas)$/i.test(String(value).trim())) return 'Įveskite klasę nuo 1 iki 13 arba university.';\r\n        if (key === 'teacherInfo') {\r\n            gradeErrors = Object.fromEntries(value.filter(entry => !entry.grade).map(entry => [entry.subject, 'Prašome įvesti klasių intervalą']));\r\n            if (Object.keys(gradeErrors).length) return 'Įveskite visų pasirinktų dalykų klasių intervalus.';\r\n        }\r\n        return '';\r\n    }\r\n    async function saveField(body) {\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) { requireAccountLogin(); throw new Error('Prisijunkite iš naujo.'); }\r\n        let response;\r\n        try {\r\n            response = await fetch(`${apiBase}/studentplayground/settings/account/`, {\r\n                method: 'POST', headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },\r\n                body: JSON.stringify(body)\r\n            });\r\n        } catch { throw new Error('Nepavyko išsaugoti pakeitimų. Bandykite dar kartą.'); }\r\n        if (response.status === 401) requireAccountLogin();\r\n        if (!response.ok) {\r\n            const error = await response.json().catch(() => ({}));\r\n            throw new Error(error.indivLic || error.error || 'Nepavyko išsaugoti pakeitimų. Bandykite dar kartą.');\r\n        }\r\n    }\r\n    function beforeLeaving(event) {\r\n        if (autosave?.isDirty()) { void autosave.flush(); event.preventDefault(); event.returnValue = ''; }\r\n    }\r\n    function requireAccountLogin() {\r\n        unregisterNavigation?.();\r\n        localStorage.removeItem('jwtToken');\r\n        localStorage.removeItem('jwtExpiry');\r\n        accountNeedsLogin = true;\r\n        accountLoadError = 'Prisijunkite iš naujo, kad galėtumėte keisti paskyros nustatymus.';\r\n        window.dispatchEvent(new Event('tutory:session-changed'));\r\n    }\r\n\r\n    async function fetchInitialData() {\r\n        accountLoaded = false;\r\n        accountLoadError = '';\r\n        accountNeedsLogin = false;\r\n        console.log('🚀 fetchInitialData() called!'); // Debug: verify function runs\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            requireAccountLogin();\r\n            return;\r\n        }\r\n        console.log('✅ JWT token found, making API call...'); // Debug: verify token exists\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/settings/account/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json',\r\n                },\r\n    \r\n            });\r\n\r\n            if (response.status === 401) {\r\n                requireAccountLogin();\r\n                return;\r\n            }\r\n            if (response.ok) {\r\n                const result = await response.json();\r\n                console.log(\"🔍 Full API response:\", result);  // Debug: see full response\r\n                \r\n                email = result.email;\r\n                phoneNumber = result.phoneNumber || '';\r\n                receiveMessages = result.receiveMessages;\r\n                receiveDailyReminders = result.receiveDailyReminders !== false;\r\n                isTeacher = result.isTeacher || false;\r\n\r\n                \r\n                // Set teacher-specific data if user is a teacher\r\n                if (isTeacher) {\r\n                    bankNr = result.bankNr || '';\r\n                    indivLic = result.indivLic || '';\r\n                    meetingLink = result.meetingLink || '';\r\n                    desiredStudentCount = (result.desiredStudentCount ?? '') === null ? '' : (result.desiredStudentCount ?? '');\r\n                    workWithChildrenQrCode = result.workWithChildrenQrCode || {\r\n                        exists: false,\r\n                        uploadedAt: null,\r\n                        contentType: null\r\n                    };\r\n                    availableSubjects = result.availableSubjects || [];\r\n\r\n                    // Build per-subject grade ranges from the teacherInfo list\r\n                    const teacherInfo = result.teacherInfo || [];\r\n                    const newSelected = [];\r\n                    const newGrades = {};\r\n\r\n                    if (teacherInfo.length > 0) {\r\n                        for (const entry of teacherInfo) {\r\n                            // Support both the new single `subject` and legacy `subjects` list\r\n                            const subjectName = entry.subject ||\r\n                                (Array.isArray(entry.subjects) ? entry.subjects[0] : null);\r\n                            if (!subjectName) continue;\r\n                            if (!newSelected.includes(subjectName)) {\r\n                                newSelected.push(subjectName);\r\n                            }\r\n                            newGrades[subjectName] = entry.grade || '';\r\n                        }\r\n                    } else if (result.subjects && result.subjects.length > 0) {\r\n                        // Legacy fallback: single grade shared across all subjects\r\n                        for (const subjectName of result.subjects) {\r\n                            newSelected.push(subjectName);\r\n                            newGrades[subjectName] = result.grade || '';\r\n                        }\r\n                    }\r\n\r\n                    selectedSubjects = newSelected;\r\n                    subjectGrades = newGrades;\r\n\r\n                    console.log(\"🔍 Teacher data loaded:\");\r\n                    console.log(\"  - selectedSubjects:\", selectedSubjects);\r\n                    console.log(\"  - availableSubjects:\", availableSubjects);\r\n                    console.log(\"  - subjectGrades:\", subjectGrades);\r\n                } else {\r\n                    // Set student-specific data if user is not a teacher\r\n                    studentGrade = result.grade || '';\r\n                    \r\n                    console.log(\"🔍 Student data loaded:\");\r\n                    console.log(\"  - studentGrade:\", studentGrade);\r\n                }\r\n                \r\n                autosave?.dispose();\r\n                autosave = createAccountAutosave(accountValues(), { save: saveField, validate: validateField,\r\n                    changed: status => { saveStatus = status; } });\r\n                unregisterNavigation?.();\r\n                unregisterNavigation = registerPersonalNotesNavigationGuard(autosave);\r\n                accountLoaded = true;\r\n                console.log(\"these are the data\");\r\n                console.log(result.email, result.receiveMessages, result.isTeacher);  // Success message\r\n            } else {\r\n                const error = await response.json();\r\n                accountLoadError = 'Nepavyko įkelti paskyros nustatymų. Bandykite dar kartą.';\r\n                console.log('Error:', error);\r\n            }\r\n        } catch (error) {\r\n            accountLoadError = 'Nepavyko įkelti paskyros nustatymų. Bandykite dar kartą.';\r\n            console.log('Fetch error:', error);\r\n        }\r\n    }\r\n    \r\n\r\n\r\n\r\n\r\n    // Teacher-specific functions\r\n    function normalizeSearchText(value) {\r\n        return value\r\n            .toLocaleLowerCase('lt-LT')\r\n            .normalize('NFD')\r\n            .replace(/[\\u0300-\\u036f]/g, '')\r\n            .trim();\r\n    }\r\n\r\n    function toggleSubject(subject) {\r\n        if (selectedSubjects.includes(subject)) {\r\n            removeSubject(subject);\r\n        } else {\r\n            selectedSubjects = [...selectedSubjects, subject];\r\n            if (!(subject in subjectGrades)) {\r\n                subjectGrades[subject] = '';\r\n                subjectGrades = subjectGrades;\r\n            }\r\n        }\r\n    }\r\n\r\n    function removeSubject(subject) {\r\n        selectedSubjects = selectedSubjects.filter(s => s !== subject);\r\n        delete subjectGrades[subject];\r\n        subjectGrades = subjectGrades;\r\n        if (gradeErrors[subject]) {\r\n            delete gradeErrors[subject];\r\n            gradeErrors = gradeErrors;\r\n        }\r\n    }\r\n\r\n    function clearGradeError(subject) {\r\n        if (gradeErrors[subject]) {\r\n            delete gradeErrors[subject];\r\n            gradeErrors = gradeErrors;\r\n        }\r\n    }\r\n\r\n    function selectQrCode(event) {\r\n        qrCodeFile = event.currentTarget.files?.[0] || null;\r\n        qrCodeMessage = '';\r\n        qrCodeError = '';\r\n    }\r\n\r\n    async function uploadQrCode() {\r\n        if (!qrCodeFile) {\r\n            qrCodeError = 'Pasirinkite QR kodo nuotrauką.';\r\n            return;\r\n        }\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            qrCodeError = 'Norėdami įkelti QR kodą, prisijunkite iš naujo.';\r\n            return;\r\n        }\r\n\r\n        qrCodeUploading = true;\r\n        qrCodeMessage = '';\r\n        qrCodeError = '';\r\n        try {\r\n            const result = await uploadTeacherWorkQrCode({\r\n                apiBase,\r\n                token,\r\n                file: qrCodeFile\r\n            });\r\n\r\n            workWithChildrenQrCode = result.workWithChildrenQrCode;\r\n            qrCodeMessage = result.replaced\r\n                ? 'QR kodas sėkmingai pakeistas.'\r\n                : 'QR kodas sėkmingai įkeltas.';\r\n            qrCodeFile = null;\r\n            if (qrCodeInput) qrCodeInput.value = '';\r\n            closeQrCodePreview();\r\n        } catch (error) {\r\n            qrCodeError = error.message || 'Nepavyko įkelti QR kodo.';\r\n        } finally {\r\n            qrCodeUploading = false;\r\n        }\r\n    }\r\n\r\n    async function viewQrCode() {\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            qrCodeError = 'Norėdami peržiūrėti QR kodą, prisijunkite iš naujo.';\r\n            return;\r\n        }\r\n\r\n        qrCodeViewing = true;\r\n        qrCodeError = '';\r\n        closeQrCodePreview();\r\n        try {\r\n            const preview = await loadTeacherWorkQrPreview({\r\n                apiBase,\r\n                token,\r\n                contentType: workWithChildrenQrCode.contentType\r\n            });\r\n            if (preview.kind === 'pdf') {\r\n                qrCodePdfUrl = preview.objectUrl;\r\n            } else {\r\n                qrCodePreviewUrl = preview.objectUrl;\r\n            }\r\n        } catch (error) {\r\n            qrCodeError = error.message || 'Nepavyko parodyti QR kodo.';\r\n        } finally {\r\n            qrCodeViewing = false;\r\n        }\r\n    }\r\n\r\n    function closeQrCodePreview() {\r\n        if (qrCodePreviewUrl) URL.revokeObjectURL(qrCodePreviewUrl);\r\n        if (qrCodePdfUrl) URL.revokeObjectURL(qrCodePdfUrl);\r\n        qrCodePreviewUrl = '';\r\n        qrCodePdfUrl = '';\r\n    }\r\n\r\n    function formatQrUploadDate(value) {\r\n        return value ? new Date(value).toLocaleString('lt-LT') : '';\r\n    }\r\n\r\n\r\n\r\n\r\n    onMount(async () => {\r\n        await fetchInitialData();\r\n       \r\n        })\r\n\r\n    onDestroy(() => { closeQrCodePreview(); unregisterNavigation?.(); autosave?.dispose(); });\r\n\r\n</script>\r\n\r\n<style>\r\n    .container {\r\n        display: flex;\r\n        flex-direction: column;\r\n        margin-bottom: 20px;\r\n        padding: 0 16px;\r\n        gap: 20px;\r\n        flex: none;\r\n        color: #333;\r\n        align-items: flex-start;\r\n        max-width: 600px;\r\n        margin: 0 auto;\r\n    }\r\n    .input-group {\r\n        margin-top: 0;\r\n        width: 100%;\r\n    }\r\n    label {\r\n        font-size: 16px;\r\n        font-weight: 500;\r\n        margin-bottom: 8px;\r\n        display: block;\r\n        color: #333;\r\n    }\r\n    input[type=\"email\"], input[type=\"text\"], input[type=\"url\"], input[type=\"number\"] {\r\n        width: 100%;\r\n        padding: 12px;\r\n        border: 1px solid #ccc;\r\n        border-radius: 8px;\r\n        background-color: #eeebdb;\r\n        font-size: 16px;\r\n        box-sizing: border-box;\r\n    }\r\n    \r\n    input[type=\"email\"]:focus, input[type=\"text\"]:focus, input[type=\"url\"]:focus, input[type=\"number\"]:focus {\r\n        outline: none;\r\n        border-color: #14695b;\r\n        box-shadow: 0 0 0 2px rgba(20, 105, 91, 0.1);\r\n    }\r\n    button {\r\n        margin-top: 20px;\r\n        height: 50px;\r\n        width: 100%;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 12px 20px;\r\n        border-radius: 8px;\r\n        border: 1px solid #000;\r\n        font-weight: 600;\r\n        font-size: 16px;\r\n        background-color: #fab45a;\r\n        color: black;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        transition: background-color 0.3s ease, color 0.3s ease;\r\n        cursor: pointer;\r\n    }\r\n\r\n    button:hover {\r\n        background-color: #c98f43;\r\n        color: black;\r\n    }\r\n\r\n    button:disabled {\r\n        opacity: 0.6;\r\n        cursor: not-allowed;\r\n        background-color: #d4d4d4;\r\n    }\r\n\r\n    button:disabled:hover {\r\n        background-color: #d4d4d4;\r\n    }\r\n\r\n    .autosave-status {\r\n        margin-top: 24px;\r\n        color: #52645a;\r\n        font-size: 14px;\r\n        min-height: 22px;\r\n    }\r\n    .checkbox-group {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 8px;\r\n    }\r\n    .daily-reminders {\r\n        border: 1px solid #c4d7ce;\r\n        border-radius: 8px;\r\n        background: #f4faf6;\r\n        padding: 18px;\r\n        margin: 18px 0;\r\n    }\r\n    .daily-reminders h2 { font-size: 18px; margin: 0 0 14px; color: #14695b; }\r\n    .daily-reminders label { display: flex; align-items: flex-start; gap: 12px; font-weight: 600; cursor: pointer; }\r\n    .daily-reminders input { flex-shrink: 0; margin-top: 2px; }\r\n    .daily-reminders input:focus-visible { outline: 3px solid #14695b; outline-offset: 3px; }\r\n    .daily-reminders p { margin: 12px 0 0; font-size: 14px; line-height: 1.5; color: #44534b; }\r\n    .smaller-part {\r\n        display: flex;\r\n        flex-direction: row;\r\n        align-items: center;\r\n        gap: 12px;\r\n    }\r\n    \r\n    .smaller-part span {\r\n        font-size: 15px;\r\n        color: #555;\r\n    }\r\n    \r\n    \r\n    input[type=\"checkbox\"] {\r\n        width: 24px;\r\n        height: 24px;\r\n        border-radius: 6px;\r\n        border: 2px solid #333;\r\n        background-color: white;\r\n        appearance: none;\r\n        outline: none;\r\n        cursor: pointer;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        transition: background-color 0.3s ease;\r\n    }\r\n\r\n    input[type=\"checkbox\"]:checked {\r\n        background-color: #14695B;\r\n        border: none;\r\n        background-image: url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"%3E%3Cpolyline points=\"20 6 9 17 4 12\"/%3E%3C/svg%3E');\r\n        background-repeat: no-repeat;\r\n        background-position: center;\r\n    }\r\n\r\n    /* Teacher-specific styles */\r\n    .teacher-section {\r\n        border-top: 1px solid #e0e0e0;\r\n        padding-top: 24px;\r\n        margin-top: 24px;\r\n        width: 100%;\r\n    }\r\n\r\n    .section-title {\r\n        font-size: 18px;\r\n        font-weight: 600;\r\n        margin-bottom: 20px;\r\n        color: #14695B;\r\n    }\r\n\r\n    .subjects-container {\r\n        max-height: 180px;\r\n        overflow-y: auto;\r\n        overflow-x: hidden;\r\n        border: 1px solid #ddd;\r\n        border-radius: 8px;\r\n        padding: 12px;\r\n        background-color: #f8f9fa;\r\n        margin-top: 8px;\r\n        margin-bottom: 15px;\r\n        overscroll-behavior: contain;\r\n        touch-action: pan-y;\r\n        -webkit-overflow-scrolling: touch;\r\n        scrollbar-width: thin;\r\n        user-select: none;\r\n    }\r\n\r\n    .subject-search {\r\n        width: 100%;\r\n        padding: 10px 12px;\r\n        border: 1px solid #ccc;\r\n        border-radius: 8px;\r\n        background-color: white;\r\n        font-size: 15px;\r\n        box-sizing: border-box;\r\n        margin: 4px 0 10px;\r\n    }\r\n\r\n    .subject-search:focus {\r\n        outline: none;\r\n        border-color: #14695b;\r\n        box-shadow: 0 0 0 2px rgba(20, 105, 91, 0.1);\r\n    }\r\n\r\n    .no-subject-results {\r\n        padding: 12px 4px;\r\n        color: #666;\r\n        font-size: 14px;\r\n        text-align: center;\r\n    }\r\n\r\n    .subject-item {\r\n        margin-bottom: 6px;\r\n        background-color: white;\r\n        border-radius: 6px;\r\n        border: 1px solid #f0f0f0;\r\n        transition: background-color 0.2s;\r\n        user-select: none;\r\n        -webkit-user-select: none;\r\n        -moz-user-select: none;\r\n        -ms-user-select: none;\r\n    }\r\n\r\n    .subject-item:hover {\r\n        background-color: #f5f5f5;\r\n        border-color: #e0e0e0;\r\n    }\r\n\r\n    .subject-label {\r\n        display: flex;\r\n        align-items: center;\r\n        padding: 8px;\r\n        cursor: pointer;\r\n        width: 100%;\r\n        position: relative;\r\n    }\r\n\r\n    .subject-label input[type=\"checkbox\"] {\r\n        position: absolute;\r\n        opacity: 0;\r\n        cursor: pointer;\r\n        height: 0;\r\n        width: 0;\r\n    }\r\n\r\n    .checkmark {\r\n        height: 24px;\r\n        width: 24px;\r\n        background-color: white;\r\n        border: 2px solid #333;\r\n        border-radius: 6px;\r\n        margin-right: 12px;\r\n        position: relative;\r\n        transition: all 0.3s ease;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .subject-label input:checked ~ .checkmark {\r\n        background-color: #14695B;\r\n        border-color: #14695B;\r\n    }\r\n\r\n    .subject-label input:checked ~ .checkmark:after {\r\n        content: \"\";\r\n        position: absolute;\r\n        display: block;\r\n        left: 6px;\r\n        top: 2px;\r\n        width: 6px;\r\n        height: 12px;\r\n        border: solid white;\r\n        border-width: 0 3px 3px 0;\r\n        transform: rotate(45deg);\r\n    }\r\n\r\n    .subject-text {\r\n        font-size: 15px;\r\n        color: #444;\r\n        user-select: none;\r\n    }\r\n\r\n    .subject-grades {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 12px;\r\n        margin-top: 8px;\r\n    }\r\n\r\n    .subject-grade-row {\r\n        background-color: #f8f9fa;\r\n        border: 1px solid #ddd;\r\n        border-radius: 8px;\r\n        padding: 12px;\r\n    }\r\n\r\n    .subject-grade-header {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        margin-bottom: 8px;\r\n    }\r\n\r\n    .subject-grade-name {\r\n        display: inline-block;\r\n        background-color: #14695B;\r\n        color: white;\r\n        padding: 6px 12px;\r\n        border-radius: 20px;\r\n        font-size: 14px;\r\n        font-weight: 500;\r\n    }\r\n\r\n    .remove-subject-grade {\r\n        cursor: pointer;\r\n        font-weight: bold;\r\n        font-size: 18px;\r\n        line-height: 1;\r\n        color: #999;\r\n        padding: 2px 8px;\r\n        border-radius: 6px;\r\n        transition: background-color 0.2s, color 0.2s;\r\n    }\r\n\r\n    .remove-subject-grade:hover {\r\n        background-color: #f0f0f0;\r\n        color: #e74c3c;\r\n    }\r\n\r\n    .no-subjects-hint {\r\n        font-size: 14px;\r\n        color: #888;\r\n        font-style: italic;\r\n        margin-top: 8px;\r\n    }\r\n\r\n    .error-message {\r\n        color: #e74c3c;\r\n        font-size: 14px;\r\n        margin-top: 4px;\r\n        margin-bottom: 8px;\r\n        font-weight: 500;\r\n    }\r\n    \r\n    .input-error {\r\n        border-color: #e74c3c !important;\r\n        box-shadow: 0 0 0 2px rgba(231, 76, 60, 0.1);\r\n    }\r\n    \r\n    .meeting-link-help {\r\n        font-size: 13px;\r\n        color: #666;\r\n        margin-top: 4px;\r\n        margin-bottom: 8px;\r\n        line-height: 1.4;\r\n    }\r\n    \r\n    .meeting-link-help a {\r\n        color: #14695B;\r\n        text-decoration: none;\r\n        font-weight: 500;\r\n        transition: color 0.2s ease;\r\n    }\r\n    \r\n    .meeting-link-help a:hover {\r\n        color: #0f5248;\r\n        text-decoration: underline;\r\n    }\r\n\r\n    .qr-code-card {\r\n        width: 100%;\r\n        box-sizing: border-box;\r\n        margin-block: 20px;\r\n        padding: 16px;\r\n        border: 1px solid #d7ddd9;\r\n        border-radius: 8px;\r\n        background: #f8f9fa;\r\n    }\r\n\r\n    .qr-code-card h3 {\r\n        margin: 0 0 8px;\r\n        color: #14695B;\r\n        font-size: 17px;\r\n    }\r\n\r\n    .qr-code-help, .qr-code-status {\r\n        margin: 0 0 12px;\r\n        color: #666;\r\n        font-size: 14px;\r\n        line-height: 1.4;\r\n    }\r\n\r\n    .qr-code-card input[type=\"file\"] {\r\n        width: 100%;\r\n    }\r\n\r\n    .qr-code-actions {\r\n        display: flex;\r\n        gap: 10px;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .qr-code-actions button {\r\n        width: auto;\r\n        min-width: 150px;\r\n        margin-top: 12px;\r\n    }\r\n\r\n    .qr-code-actions .secondary-button {\r\n        background: white;\r\n        color: #14695B;\r\n        border-color: #14695B;\r\n    }\r\n\r\n    .qr-code-success {\r\n        color: #14695B;\r\n        margin-top: 10px;\r\n        font-size: 14px;\r\n        font-weight: 600;\r\n    }\r\n\r\n    .qr-code-preview {\r\n        margin-top: 14px;\r\n    }\r\n\r\n    .qr-code-preview img {\r\n        display: block;\r\n        max-width: 100%;\r\n        max-height: 500px;\r\n        object-fit: contain;\r\n        border: 1px solid #ddd;\r\n        border-radius: 8px;\r\n        background: white;\r\n    }\r\n    \r\n    /* Mobile responsiveness */\r\n    @media (max-width: 768px) {\r\n        .qr-code-card {\r\n            margin-block: 16px;\r\n        }\r\n\r\n        .container {\r\n            padding: 0 12px;\r\n            gap: 16px;\r\n        }\r\n        \r\n        .teacher-section {\r\n            padding-top: 20px;\r\n            margin-top: 20px;\r\n        }\r\n        \r\n        .subjects-container {\r\n            max-height: 150px;\r\n        }\r\n        \r\n        .subject-label {\r\n            padding: 12px;\r\n        }\r\n        \r\n        .checkmark {\r\n            height: 28px;\r\n            width: 28px;\r\n            margin-right: 15px;\r\n        }\r\n        \r\n        .subject-label input:checked ~ .checkmark:after {\r\n            left: 8px;\r\n            top: 3px;\r\n            width: 7px;\r\n            height: 14px;\r\n        }\r\n        \r\n        .subject-text {\r\n            font-size: 16px;\r\n        }\r\n        \r\n        button {\r\n            height: 48px;\r\n            font-size: 15px;\r\n        }\r\n    }\r\n</style>\r\n\r\n<svelte:window on:beforeunload={beforeLeaving} />\r\n\r\n<NavbarReusable label=\"Mano Profilis\" />\r\n<FilterButtonsForSettingsPage currentFilter='Paskyra'></FilterButtonsForSettingsPage>\r\n<div class=\"container\">\r\n    <div class=\"input-group\">\r\n        <label for=\"email\">Keisti el.pašto adresą</label>\r\n        <input id=\"email\" type=\"email\" bind:value={email} disabled={!accountLoaded || accountNeedsLogin} placeholder=\"john@email.com\">\r\n    </div>\r\n\r\n    <div class=\"input-group\">\r\n        <label for=\"phone\">Telefono numeris</label>\r\n        <input id=\"phone\" type=\"text\" bind:value={phoneNumber} disabled={!accountLoaded || accountNeedsLogin} placeholder=\"+370 600 12345\">\r\n    </div>\r\n\r\n    <div class=\"checkbox-group\">\r\n        <label for=\"sms-notification\">Priminimai apie rezervuotą pamoką</label>\r\n        <div class=\"smaller-part\">\r\n            <input id=\"sms-notification\" type=\"checkbox\" bind:checked={receiveMessages} disabled={!accountLoaded || accountNeedsLogin}>\r\n            <span for=\"sms-notification\">Gauti SMS žinutes</span>\r\n        </div>\r\n    </div>\r\n\r\n    <section class=\"daily-reminders\" aria-labelledby=\"daily-reminders-heading\">\r\n        <h2 id=\"daily-reminders-heading\">Kasdieniai priminimai el. paštu</h2>\r\n        {#if accountLoadError}\r\n            <p role=\"alert\">{accountLoadError}</p>\r\n            {#if accountNeedsLogin}\r\n                <a href=\"#/about\">Prisijungti</a>\r\n            {:else}\r\n                <button type=\"button\" on:click={fetchInitialData}>Bandyti dar kartą</button>\r\n            {/if}\r\n        {:else if !accountLoaded}\r\n            <p role=\"status\">Įkeliami paskyros nustatymai…</p>\r\n        {/if}\r\n        <label for=\"daily-reminders-enabled\">\r\n            <input id=\"daily-reminders-enabled\" type=\"checkbox\" bind:checked={receiveDailyReminders}\r\n                disabled={!accountLoaded || accountNeedsLogin} aria-describedby=\"daily-reminders-help\">\r\n            <span>Gauti kasdienius pamokų priminimus el. paštu</span>\r\n        </label>\r\n        <p id=\"daily-reminders-help\">Kasdien 20:00 Lietuvos laiku siunčiamas laiškas su rytojaus pamokų priminimu.</p>\r\n    </section>\r\n\r\n    <!-- Student grade section for non-teacher users -->\r\n    {#if !isTeacher}\r\n        <div class=\"input-group\">\r\n            <label for=\"student-grade\">Klasė</label>\r\n            <input \r\n                id=\"student-grade\" \r\n                type=\"text\" \r\n                bind:value={studentGrade} disabled={!accountLoaded || accountNeedsLogin}\r\n                placeholder=\"Įveskite klasę (pvz.:, 9, 10, 11, 12, university)\"\r\n            >\r\n        </div>\r\n    {/if}\r\n\r\n    {#if accountLoaded}\r\n        <AgreementSection />\r\n    {/if}\r\n\r\n    <!-- Teacher-specific section -->\r\n    {#if isTeacher}\r\n        <div class=\"teacher-section\">\r\n            <div class=\"section-title\">Mokytojo informacija</div>\r\n            \r\n            <div class=\"input-group\">\r\n                <label for=\"indiv-lic\">Individualios veiklos pažyma</label>\r\n                <input id=\"indiv-lic\" name=\"individual-activity-certificate\" type=\"text\" inputmode=\"numeric\" autocomplete=\"off\" autocapitalize=\"none\" autocorrect=\"off\" spellcheck=\"false\" data-lpignore=\"true\" data-1p-ignore=\"true\" bind:value={indivLic} disabled={!accountLoaded || accountNeedsLogin} placeholder={indivLic || 'Įveskite licencijos numerį'}>\r\n            </div>\r\n\r\n            <div class=\"input-group\">\r\n                <label for=\"bank-nr\">Banko sąskaitos numeris</label>\r\n                <input id=\"bank-nr\" type=\"text\" bind:value={bankNr} disabled={!accountLoaded || accountNeedsLogin} placeholder={bankNr || 'Įveskite banko sąskaitos numerį'}>\r\n            </div>\r\n\r\n            <div class=\"input-group\">\r\n                <label for=\"meeting-link\">Susitikimo kambarys (nuoroda)</label>\r\n                <div class=\"meeting-link-help\">\r\n                    Kaip rasti nuorodą: <a href=\"https://meet.google.com/landing\" target=\"_blank\" rel=\"noopener noreferrer\">Google Meet</a> → New Meeting → Meeting for later → Invite link\r\n                </div>\r\n                <input id=\"meeting-link\" type=\"url\" bind:value={meetingLink} disabled={!accountLoaded || accountNeedsLogin} placeholder={meetingLink || 'https://meet.google.com/pwk-nxkw-rjo'}>\r\n            </div>\r\n\r\n            <div class=\"input-group\">\r\n                <label for=\"desired-student-count\">Kiek norite pamokų per <strong>savaitę</strong>?</label>\r\n                <input\r\n                    id=\"desired-student-count\"\r\n                    type=\"number\"\r\n                    min=\"0\"\r\n                    step=\"1\"\r\n                    bind:value={desiredStudentCount} disabled={!accountLoaded || accountNeedsLogin}\r\n                    placeholder=\"Įveskite norimą mokinių skaičių\"\r\n                >\r\n            </div>\r\n\r\n            <div class=\"qr-code-card\">\r\n                <h3>Teisėto darbo su vaikais QR kodas</h3>\r\n                <p class=\"qr-code-help\">Įkelkite JPEG, PNG, WebP arba PDF formato QR kodo failą (iki 10 MiB).</p>\r\n                {#if workWithChildrenQrCode.exists}\r\n                    <p class=\"qr-code-status\">QR kodas įkeltas {formatQrUploadDate(workWithChildrenQrCode.uploadedAt)}. Naujas failas pakeis esamą.</p>\r\n                {:else}\r\n                    <p class=\"qr-code-status\">QR kodas dar neįkeltas.</p>\r\n                {/if}\r\n                <input bind:this={qrCodeInput} type=\"file\" accept={TEACHER_WORK_QR_ACCEPT} on:change={selectQrCode} disabled={qrCodeUploading}>\r\n                <div class=\"qr-code-actions\">\r\n                    <button type=\"button\" on:click={uploadQrCode} disabled={!qrCodeFile || qrCodeUploading}>\r\n                        {qrCodeUploading ? 'Įkeliama...' : (workWithChildrenQrCode.exists ? 'Pakeisti QR kodą' : 'Įkelti QR kodą')}\r\n                    </button>\r\n                    {#if workWithChildrenQrCode.exists}\r\n                        <button type=\"button\" class=\"secondary-button\" on:click={viewQrCode} disabled={qrCodeViewing}>\r\n                            {qrCodeViewing ? 'Kraunama...' : 'Peržiūrėti QR kodą'}\r\n                        </button>\r\n                    {/if}\r\n                </div>\r\n                {#if qrCodeMessage}<div class=\"qr-code-success\" role=\"status\">{qrCodeMessage}</div>{/if}\r\n                {#if qrCodeError}<div class=\"error-message\" role=\"alert\">{qrCodeError}</div>{/if}\r\n                {#if qrCodePreviewUrl}\r\n                    <div class=\"qr-code-preview\">\r\n                        <img src={qrCodePreviewUrl} alt=\"Teisėto darbo su vaikais QR kodas\">\r\n                        <div class=\"qr-code-actions\">\r\n                            <button type=\"button\" class=\"secondary-button\" on:click={closeQrCodePreview}>Uždaryti</button>\r\n                        </div>\r\n                    </div>\r\n                {/if}\r\n            </div>\r\n\r\n            <div class=\"input-group\">\r\n                <label for=\"subject-search\">Dėstomi dalykai</label>\r\n\r\n                <input\r\n                    id=\"subject-search\"\r\n                    class=\"subject-search\"\r\n                    type=\"search\"\r\n                    bind:value={subjectSearch}\r\n                    placeholder=\"Ieškoti dalyko...\"\r\n                    aria-controls=\"subjects-section\"\r\n                    autocomplete=\"off\"\r\n                >\r\n\r\n                <div class=\"subjects-container\" id=\"subjects-section\">\r\n                    <div style=\"margin-bottom: 8px; font-size: 13px; color: #888; font-style: italic;\">Formatas: pamoka + kalba (pvz.: \"Lietuvių k. Angl.\" = lietuvių kalba, dėstoma angliškai)</div>\r\n                    <div style=\"margin-bottom: 12px; font-size: 14px; color: #666;\">Pasirinkite dalykus:</div>\r\n                    {#if filteredSubjects.length > 0}\r\n                        {#each filteredSubjects as subject}\r\n                            <div class=\"subject-item\">\r\n                                <label class=\"subject-label\">\r\n                                    <input\r\n                                        type=\"checkbox\"\r\n                                        checked={selectedSubjects.includes(subject)}\r\n                                        on:change={() => toggleSubject(subject)}\r\n                                    >\r\n                                    <span class=\"checkmark\"></span>\r\n                                    <span class=\"subject-text\">{subject}</span>\r\n                                </label>\r\n                            </div>\r\n                        {/each}\r\n                    {:else}\r\n                        <div class=\"no-subject-results\" role=\"status\">Dalykų nerasta.</div>\r\n                    {/if}\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"input-group\">\r\n                <label for=\"subject-grades-section\">Klasių intervalai pagal dalyką (pvz.: \"6-9\" arba \"10-12\")</label>\r\n                {#if selectedSubjects.length > 0}\r\n                    <div class=\"subject-grades\" id=\"subject-grades-section\">\r\n                        {#each selectedSubjects as subject}\r\n                            <div class=\"subject-grade-row\">\r\n                                <div class=\"subject-grade-header\">\r\n                                    <span class=\"subject-grade-name\">{subject}</span>\r\n                                    <span\r\n                                        class=\"remove-subject-grade\"\r\n                                        on:click={() => removeSubject(subject)}\r\n                                        on:keydown={(e) => e.key === 'Enter' && removeSubject(subject)}\r\n                                        tabindex=\"0\"\r\n                                        role=\"button\"\r\n                                        aria-label=\"Remove {subject}\"\r\n                                    >×</span>\r\n                                </div>\r\n                                <input\r\n                                    type=\"text\"\r\n                                    bind:value={subjectGrades[subject]} disabled={!accountLoaded || accountNeedsLogin}\r\n                                    placeholder=\"Įveskite klasių intervalą (pvz.: 6-9)\"\r\n                                    class:input-error={gradeErrors[subject]}\r\n                                    on:input={() => clearGradeError(subject)}\r\n                                >\r\n                                {#if gradeErrors[subject]}\r\n                                    <div class=\"error-message\">{gradeErrors[subject]}</div>\r\n                                {/if}\r\n                            </div>\r\n                        {/each}\r\n                    </div>\r\n                {:else}\r\n                    <div class=\"no-subjects-hint\">Pasirinkite dalykus, kad galėtumėte įvesti klasių intervalus.</div>\r\n                {/if}\r\n            </div>\r\n        </div>\r\n    {/if}\r\n\r\n    <div class=\"autosave-status\" role=\"status\" aria-live=\"polite\">\r\n        {#if saveStatus.saving}Išsaugoma…\r\n        {:else if saveStatus.dirty}Yra neišsaugotų pakeitimų.\r\n        {:else if saveStatus.edited}Pakeitimai išsaugoti.\r\n        {:else if accountLoaded}Pakeitimai išsaugomi automatiškai.{/if}\r\n    </div>\r\n    {#if saveStatus.error && !accountNeedsLogin}\r\n        <div class=\"error-message\" role=\"alert\">{saveStatus.error}</div>\r\n        <button type=\"button\" on:click={() => autosave.flush()}>Bandyti išsaugoti dar kartą</button>\r\n    {/if}\r\n\r\n    \r\n</div>\r\n","// Keep one request in flight and debounce each field independently.\r\nexport function createAccountAutosave(initial, { save, validate, changed, delay = 700 }) {\r\n    const values = structuredClone(initial);\r\n    const saved = structuredClone(initial);\r\n    const timers = new Map();\r\n    const ready = new Set();\r\n    const errors = new Map();\r\n    let running = null;\r\n    let disposed = false;\r\n    let edited = false;\r\n    const equal = (a, b) => JSON.stringify(a) === JSON.stringify(b);\r\n    const dirty = () => Object.keys(values).some(key => !equal(values[key], saved[key]));\r\n    function notify() {\r\n        if (!disposed) changed({ saving: !!running, dirty: dirty(), edited, error: [...errors.values()].join(' ') });\r\n    }\r\n    async function drain() {\r\n        if (running) return running;\r\n        running = (async () => {\r\n            // Yield so running is assigned even when there are no ready fields.\r\n            await Promise.resolve();\r\n            while (ready.size && !disposed) {\r\n                const key = ready.values().next().value;\r\n                ready.delete(key);\r\n                if (equal(values[key], saved[key])) { errors.delete(key); continue; }\r\n                const value = structuredClone(values[key]);\r\n                const invalid = validate(key, value);\r\n                if (invalid) { errors.set(key, invalid); continue; }\r\n                try {\r\n                    await save({ [key]: value });\r\n                    saved[key] = value;\r\n                    errors.delete(key);\r\n                } catch (error) {\r\n                    errors.set(key, error.message);\r\n                }\r\n            }\r\n        })();\r\n        notify();\r\n        await running;\r\n        running = null;\r\n        notify();\r\n    }\r\n    return {\r\n        update(next) {\r\n            for (const [key, value] of Object.entries(next)) {\r\n                if (equal(values[key], value)) continue;\r\n                values[key] = structuredClone(value);\r\n                edited = true;\r\n                errors.delete(key);\r\n                clearTimeout(timers.get(key));\r\n                ready.delete(key);\r\n                if (typeof value === 'boolean') { ready.add(key); }\r\n                else timers.set(key, setTimeout(() => { timers.delete(key); ready.add(key); void drain(); }, delay));\r\n            }\r\n            notify();\r\n            if (ready.size) void drain();\r\n        },\r\n        async flush() {\r\n            for (const timer of timers.values()) clearTimeout(timer);\r\n            timers.clear();\r\n            // Compare against the result of the in-flight save, not its old baseline.\r\n            if (running) await drain();\r\n            for (const key of Object.keys(values)) if (!equal(values[key], saved[key])) ready.add(key);\r\n            await drain();\r\n            // A flush can join an older request; drain any values queued during it.\r\n            if (ready.size) await drain();\r\n            return !dirty();\r\n        },\r\n        isDirty: dirty,\r\n        dispose() { disposed = true; for (const timer of timers.values()) clearTimeout(timer); },\r\n    };\r\n}\r\n","\r\n<script>\r\n    import ClassNameComponent from './ClassNameComponent.svelte';\r\n    import TimeShowerComponentForTeacherReq from './TimeShowerComponentForTeacherReq.svelte';\r\n    export let events = []\r\n    let errorMessage = ''\r\n    import { onMount } from 'svelte';\r\n    async function retrieveEventData() {\r\n        console.log(\"ive at least made it this far222\")\r\n        try {\r\n            // Retrieve JWT token from localStorage/sessionStorage/cookie (depending on how you store it)\r\n            const token = localStorage.getItem('jwtToken'); \r\n            console.log(\"THIS IS THE TOKEN222\")\r\n            console.log(token)\r\n            if (!token) {\r\n                throw new Error('JWT token not found. Please log in.');\r\n            }\r\n\r\n            const response = await fetch('/studentplayground/teacher_requests_list/', {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n\r\n            if (!response.ok) {\r\n                // Handle error response from the server\r\n                const errorData = await response.json();\r\n                throw new Error(errorData.error || 'Failed to check teacher status');\r\n            }\r\n\r\n            const data = await response.json();\r\n            events = data.requests;\r\n            console.log(\"This is the value of request222\")\r\n            console.log(events)\r\n            \r\n        } catch (error) {\r\n            errorMessage = error.message;\r\n        }\r\n    }\r\n    async function accept_request(event_id) {\r\n        console.log(\"ive at least made it this far333\")\r\n        try {\r\n            // Retrieve JWT token from localStorage/sessionStorage/cookie (depending on how you store it)\r\n            const token = localStorage.getItem('jwtToken'); \r\n            console.log(\"THIS IS THE TOKEN3333\")\r\n            console.log(token)\r\n            if (!token) {\r\n                throw new Error('JWT token not found. Please log in.');\r\n            }\r\n            const payload = {event_id:event_id}\r\n            console.log(\"This is payload\")\r\n            console.log(payload)\r\n            const response = await fetch('/studentplayground/accept_request_api/', {\r\n                method: 'POST',\r\n                    headers: {\r\n                        'Content-Type': 'application/json',\r\n                        'Authorization': `Bearer ${localStorage.getItem('jwtToken')}`\r\n                    },\r\n                    body: JSON.stringify(payload)\r\n                });\r\n            console.log(\"we are past sending api call\")\r\n            if (!response.ok) {\r\n                // Handle error response from the server\r\n                const errorData = await response.json();\r\n                throw new Error(errorData.error || 'Failed to accept teacher request');\r\n            }\r\n\r\n            const data = await response.json();\r\n            console.log(\"awaited for the response hell yeah\")\r\n            retrieveEventData()\r\n        } catch (error) {\r\n            errorMessage = error.message;\r\n        }\r\n    }\r\n    onMount(() => {\r\n        console.log(\"THIS IS THE VERY FIRST STEP2222\")\r\n        retrieveEventData();\r\n    });\r\n    \r\n    function getHeaderClass(event) {\r\n      if (event.accepted_by === 'null') {\r\n          return 'blue-header';\r\n      }\r\n      else {\r\n          return 'red-header';\r\n      }\r\n    }\r\n    function getHeaderText(event) {\r\n        if (event.accepted_by === 'null') {\r\n            return 'LAUKIAMA MOKYTOJO';\r\n        }\r\n        else{\r\n            return 'MOKOMA';\r\n        }\r\n    }\r\n    function getClassForEvent(event) {\r\n        // Determine the border color based on the logic provided\r\n        if (event.accepted_by === 'null') {\r\n            return 'blue-border';\r\n        }\r\n        else{\r\n            return 'red-border';\r\n        }\r\n        \r\n    }\r\n\r\n</script>\r\n<div class=\"top-bar\">\r\n    <a href='#/login-greeting' class=\"exit-button\">\r\n      <img src='/static/icons/backButtonIcon.png' alt=\"Exit\" class=\"icon\" />\r\n    </a>\r\n    <div class=\"label\">Pamokų Pasiūlymai</div>\r\n    <div class=\"filler\"></div>\r\n  </div>\r\n{#each events as event}\r\n    <div class=\"classcontainer {getClassForEvent(event)}\">\r\n        <div class=\"header {getHeaderClass(event)}\">\r\n            {getHeaderText(event)}\r\n          </div>\r\n        <ClassNameComponent name={event.class_name}></ClassNameComponent>\r\n        <span><span class='make_bold'>Mokiniai: </span>{event.student_name}</span>\r\n        <span><span class='make_bold'>Klasė: </span>{event.grade}</span>\r\n        {#each event.timeslots as ts}\r\n            <TimeShowerComponentForTeacherReq time={ts[1]} date={ts[0]} ></TimeShowerComponentForTeacherReq>\r\n            \r\n        {/each}\r\n        <span class='make_bold'>Aprašymas:</span>\r\n        <div class=\"noteDiv\">\r\n            {event.note}\r\n        </div>\r\n        {#if event.accepted_by === 'null'}\r\n        <button on:click={() => accept_request(event.id)}>\r\n            <span>Priimti</span>\r\n        </button>\r\n        {/if}\r\n    </div>\r\n\r\n\r\n\r\n\r\n{/each}\r\n\r\n<style>\r\n    .top-bar {\r\n      display: flex;\r\n      justify-content: space-between;\r\n      align-items: center;\r\n      padding: 10px;\r\n      background-color: transparent;\r\n      border-bottom: 1px solid #000000;\r\n      margin-bottom: 40px;\r\n    }\r\n  \r\n    .filler {\r\n      width: 50px;\r\n    }\r\n  \r\n    .label {\r\n      font-size: x-large;\r\n    }\r\n  \r\n    .icon {\r\n      width: 50px;\r\n      height: 50px;\r\n    }\r\n    .make_bold{\r\n        font-weight: bold;\r\n    }\r\n    .noteDiv {\r\n        background-color: transparent;\r\n        width: 100%;\r\n        border-radius: 6px;\r\n        display: flex;\r\n        justify-content: space-around;\r\n        padding: 10px; /* Add padding to move the content */\r\n        box-sizing: border-box;\r\n        border: 2px solid #baccff;\r\n    }\r\n    .classcontainer{\r\n        padding: 15px;\r\n        background-color: white;\r\n        display: flex;\r\n        flex-direction: column;\r\n        margin-bottom:15px;\r\n        gap: 10px;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        border-radius: 8px;\r\n        flex: none;\r\n        color:black;\r\n        align-items: flex-start;\r\n      }\r\n    .red-border {\r\n        border: 2px solid #7e8f8c;\r\n    }\r\n    .blue-border {\r\n        border: 2px solid #e8b931;\r\n    }\r\n    .header {\r\n        display: flex; /* Enables flexbox */\r\n        justify-content: center; /* Centers content horizontally */\r\n        align-items: center; /* Centers content vertically */\r\n        padding: 10px 0; /* Only top and bottom padding, no left or right */\r\n        font-size: larger;\r\n        font-weight: bold;\r\n        width: calc(100% + 30px); /* Compensate for negative margins */\r\n        border-top-left-radius: 6px;\r\n        border-top-right-radius: 6px;\r\n        box-sizing: border-box;\r\n        margin: -15px -15px 0 -15px;\r\n    }\r\n    .red-header {\r\n        background-color: #7e8f8c;\r\n        color: white;\r\n    }\r\n    .blue-header {\r\n        background-color: #e8b931;\r\n        color: black;\r\n    }\r\n     /* Button styling */\r\n     button span {\r\n        font-weight: bolder;\r\n        font-size:larger;\r\n    }\r\n\r\n    button {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 12px 20px;\r\n        gap: 10px;\r\n    \r\n        width: 100%;\r\n        height: 60px;\r\n    \r\n        /* Purple background */\r\n        background-color: white;\r\n    \r\n        /* Black border */\r\n        border: 2px solid #000000;\r\n    \r\n        /* Box shadow */\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    \r\n        /* Rounded corners */\r\n        border-radius: 8px;\r\n    \r\n        /* Inside auto layout */\r\n        flex: none;\r\n        order: 0;\r\n        align-self: stretch;\r\n        flex-grow: 0;\r\n    \r\n        /* Remove default button styling */\r\n        outline: none;\r\n        cursor: pointer;\r\n  \r\n        /* Remove the default button background on focus */\r\n        background-image: none;\r\n        transition: background-color 0.3s ease, color 0.3s ease;\r\n    }\r\n\r\n    /* Button hover effect */\r\n    button:hover {\r\n        background-color: #e8b931;\r\n        color:black;\r\n    }\r\n\r\n    /* Text inside the button */\r\n</style>","<script>\r\n  // Accept a tuple (array) with [time, date]\r\n  export let time;\r\n  export let date;\r\n</script>\r\n\r\n<style>\r\n  .date-time-container {\r\n    display: flex;\r\n    align-items: center;\r\n  }\r\n\r\n  .time, .divider, .date {\r\n    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\r\n    font-size: 1.5rem; /* Ensure same size for all */\r\n    font-weight: bold;  /* Set same weight for uniform look */\r\n  }\r\n\r\n  .divider {\r\n    margin: 0 0.5rem; /* Adjust margin to space out elements */\r\n  }\r\n\r\n  .date {\r\n    color: var(--date-color);\r\n  }\r\n</style>\r\n\r\n<div class=\"date-time-container\">\r\n  <span class=\"time\">{time}</span>\r\n  <span class=\"divider\">|</span>\r\n  <span class=\"date\">{@html date}</span>\r\n</div>\r\n","<script>\r\n    export let data = [];\r\n    export let searchedTimeSlots = [];\r\n    export let availabilityWindow = null;\r\n\r\n    const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\r\n    const toMinutes = value => value.split(':').map(Number).reduce((hours, minutes) => hours * 60 + minutes);\r\n    const toTime = minutes => `${String(Math.floor(minutes / 60)).padStart(2, '0')}:${String(minutes % 60).padStart(2, '0')}`;\r\n\r\n    function merge(ranges) {\r\n        return ranges.map(range => [...range]).sort((a, b) => a[0] - b[0]).reduce((result, range) => {\r\n            const last = result[result.length - 1];\r\n            if (last && range[0] <= last[1]) last[1] = Math.max(last[1], range[1]);\r\n            else result.push(range);\r\n            return result;\r\n        }, []);\r\n    }\r\n\r\n    function subtract(available, conflicts) {\r\n        let result = merge(available);\r\n        for (const [conflictStart, conflictEnd] of merge(conflicts)) {\r\n            result = result.flatMap(([start, end]) => {\r\n                if (conflictEnd <= start || conflictStart >= end) return [[start, end]];\r\n                const pieces = [];\r\n                if (conflictStart > start) pieces.push([start, conflictStart]);\r\n                if (conflictEnd < end) pieces.push([conflictEnd, end]);\r\n                return pieces;\r\n            });\r\n        }\r\n        return result;\r\n    }\r\n\r\n    function dayDetails(teacher, day) {\r\n        const availability = (teacher.matched_timeslots || []).filter(slot => Number(slot.day_of_week) === day).map(slot => [toMinutes(slot.start_time), toMinutes(slot.end_time)]);\r\n        const bookings = (teacher.conflicting_classes || []).filter(item => Number(item.day_of_week) === day).map(item => [toMinutes(item.class_start_time), toMinutes(item.class_end_time)]);\r\n        const preferences = searchedTimeSlots.filter(slot => Number(slot.day_of_week) === day).map(slot => [toMinutes(slot.start_time), toMinutes(slot.end_time)]);\r\n        return {\r\n            free: subtract(availability, bookings),\r\n            booked: merge(bookings.flatMap(([start, end]) => availability\r\n                .map(([availableStart, availableEnd]) => [Math.max(start, availableStart), Math.min(end, availableEnd)])\r\n                .filter(([overlapStart, overlapEnd]) => overlapStart < overlapEnd))),\r\n            preferred: merge(preferences)\r\n        };\r\n    }\r\n\r\n    function formatDuration(minutes) {\r\n        if (!minutes) return '0 min';\r\n        const hours = Math.floor(minutes / 60);\r\n        const remainder = minutes % 60;\r\n        return [hours ? `${hours}h` : '', remainder ? `${remainder}m` : ''].filter(Boolean).join(' ');\r\n    }\r\n</script>\r\n\r\n<section class=\"results\" aria-live=\"polite\">\r\n    <div class=\"results-heading\">\r\n        <div>\r\n            <h3>{data.length} matching {data.length === 1 ? 'teacher' : 'teachers'}</h3>\r\n            {#if availabilityWindow}<p>Bookings checked {availabilityWindow.start_date} to {availabilityWindow.end_date} ({availabilityWindow.timezone}).</p>{/if}\r\n        </div>\r\n        <div class=\"legend\" aria-label=\"Availability color legend\">\r\n            <span><i class=\"free-dot\"></i> Free</span>\r\n            <span><i class=\"booked-dot\"></i> Booked</span>\r\n            {#if searchedTimeSlots.length}<span><i class=\"preferred-dot\"></i> Preferred</span>{/if}\r\n        </div>\r\n    </div>\r\n\r\n    {#if data.length === 0}\r\n        <div class=\"empty\">No active teachers teach this subject at the selected grade.</div>\r\n    {:else}\r\n        {#each data as teacher, index (teacher.teacher_id)}\r\n            <article class=\"teacher-card\">\r\n                <header>\r\n                    <div class=\"identity\">\r\n                        <span class=\"rank\" aria-label=\"Result rank {index + 1}\">{index + 1}</span>\r\n                        <div><h4>{teacher.teacher_name}</h4><p>{teacher.subject} · Grades {teacher.grade}</p></div>\r\n                    </div>\r\n                    <div class=\"summary\">\r\n                        {#if searchedTimeSlots.length}\r\n                            <strong>{formatDuration(teacher.preferred_overlap_minutes)}</strong><span>free in preferred times</span>\r\n                        {:else}\r\n                            <strong>{formatDuration(teacher.total_free_minutes)}</strong><span>total free time</span>\r\n                        {/if}\r\n                    </div>\r\n                </header>\r\n\r\n                {#if !teacher.has_submitted_timeslots}\r\n                    <div class=\"warning\" role=\"status\">No availability has been submitted by this teacher.</div>\r\n                {:else}\r\n                    <div class=\"week\">\r\n                        {#each days as dayName, dayIndex}\r\n                            {@const details = dayDetails(teacher, dayIndex + 1)}\r\n                            {#if details.free.length || details.booked.length || details.preferred.length}\r\n                                <div class=\"day-row\">\r\n                                    <div class=\"day-name\">{dayName}</div>\r\n                                    <div class=\"day-times\">\r\n                                        {#each details.preferred as range}<span class=\"time preferred\"><b>Preferred</b> {toTime(range[0])}–{toTime(range[1])}</span>{/each}\r\n                                        {#each details.free as range}<span class=\"time free\"><b>Free</b> {toTime(range[0])}–{toTime(range[1])}</span>{/each}\r\n                                        {#each details.booked as range}<span class=\"time booked\"><b>Booked</b> {toTime(range[0])}–{toTime(range[1])}</span>{/each}\r\n                                        {#if !details.free.length && !details.booked.length}<span class=\"no-time\">No submitted availability</span>{/if}\r\n                                    </div>\r\n                                </div>\r\n                            {/if}\r\n                        {/each}\r\n                    </div>\r\n                    {#if searchedTimeSlots.length && teacher.preferred_overlap_minutes === 0}\r\n                        <p class=\"no-overlap\">No free time overlaps the preferred ranges.</p>\r\n                    {/if}\r\n                {/if}\r\n            </article>\r\n        {/each}\r\n    {/if}\r\n</section>\r\n\r\n<style>\r\n    .results { margin-top: 1.75rem; color: #1f2937; }\r\n    .results-heading { display: flex; justify-content: space-between; align-items: end; gap: 1rem; margin-bottom: 1rem; }\r\n    .results-heading h3 { margin: 0; font-size: 1.3rem; }\r\n    .results-heading p { margin: .3rem 0 0; color: #64748b; font-size: .88rem; }\r\n    .legend { display: flex; flex-wrap: wrap; gap: .8rem; font-size: .84rem; color: #475569; }\r\n    .legend span { display: inline-flex; align-items: center; gap: .35rem; }\r\n    .legend i { width: .75rem; height: .75rem; border-radius: 3px; }\r\n    .free-dot { background: #22c55e; } .booked-dot { background: #ef4444; } .preferred-dot { background: #3b82f6; }\r\n    .empty, .warning { padding: 1rem; border-radius: 9px; background: #fff7ed; border: 1px solid #fed7aa; color: #9a3412; }\r\n    .teacher-card { margin-bottom: 1rem; overflow: hidden; border: 1px solid #dbe3ec; border-radius: 12px; background: white; box-shadow: 0 2px 8px rgba(15, 23, 42, .06); }\r\n    .teacher-card header { display: flex; justify-content: space-between; align-items: center; gap: 1rem; padding: 1rem 1.25rem; background: #fff8ed; border-bottom: 1px solid #fde4bd; }\r\n    .identity { display: flex; align-items: center; gap: .8rem; }\r\n    .rank { display: grid; place-items: center; min-width: 2rem; height: 2rem; border-radius: 50%; background: #fab45a; font-weight: 750; }\r\n    .identity h4 { margin: 0; font-size: 1.15rem; } .identity p { margin: .2rem 0 0; color: #64748b; }\r\n    .summary { display: flex; flex-direction: column; align-items: end; text-align: right; }\r\n    .summary strong { color: #166534; font-size: 1.15rem; } .summary span { color: #64748b; font-size: .78rem; }\r\n    .week { padding: .5rem 1.25rem 1rem; }\r\n    .day-row { display: grid; grid-template-columns: 110px 1fr; gap: .75rem; padding: .75rem 0; border-bottom: 1px solid #edf1f5; }\r\n    .day-row:last-child { border-bottom: 0; } .day-name { padding-top: .35rem; font-weight: 700; }\r\n    .day-times { display: flex; flex-wrap: wrap; gap: .45rem; }\r\n    .time { padding: .38rem .6rem; border: 1px solid; border-radius: 7px; font-size: .85rem; white-space: nowrap; }\r\n    .time b { margin-right: .25rem; font-size: .7rem; text-transform: uppercase; }\r\n    .free { color: #166534; background: #dcfce7; border-color: #86efac; }\r\n    .booked { color: #991b1b; background: #fee2e2; border-color: #fca5a5; }\r\n    .preferred { color: #1e40af; background: #dbeafe; border-color: #93c5fd; }\r\n    .warning { margin: 1rem 1.25rem; }\r\n    .no-overlap { margin: 0 1.25rem 1rem; padding: .65rem .8rem; border-radius: 7px; color: #475569; background: #f1f5f9; }\r\n    .no-time { padding: .35rem .55rem; color: #64748b; font-style: italic; }\r\n    @media (max-width: 700px) {\r\n        .results-heading, .teacher-card header { align-items: stretch; flex-direction: column; }\r\n        .summary { align-items: start; text-align: left; }\r\n        .day-row { grid-template-columns: 1fr; gap: .35rem; }\r\n    }\r\n</style>\r\n","<script>\r\n    import { createEventDispatcher } from 'svelte';\r\n    \r\n    const dispatch = createEventDispatcher();\r\n    \r\n    export let startTime = \"\";\r\n    export let endTime = \"\";\r\n    export let dayOfWeek = \"1\";\r\n    \r\n    const dayNames = {\r\n        \"1\": \"Monday\",\r\n        \"2\": \"Tuesday\",\r\n        \"3\": \"Wednesday\",\r\n        \"4\": \"Thursday\",\r\n        \"5\": \"Friday\",\r\n        \"6\": \"Saturday\",\r\n        \"7\": \"Sunday\"\r\n    };\r\n\r\n    let isDragging = false;\r\n    let dragType = null; // 'start' or 'end'\r\n    let timelineElement;\r\n    let timelineRect = { left: 0, width: 0 };\r\n\r\n    // Convert time string (HH:MM) to minutes since midnight\r\n    function timeToMinutes(timeStr) {\r\n        if (!timeStr) return 0;\r\n        const [hours, minutes] = timeStr.split(':').map(Number);\r\n        return hours * 60 + minutes;\r\n    }\r\n\r\n    // Convert minutes to time string\r\n    function minutesToTime(minutes) {\r\n        const hours = Math.floor(minutes / 60);\r\n        const mins = minutes % 60;\r\n        return `${hours.toString().padStart(2, '0')}:${mins.toString().padStart(2, '0')}`;\r\n    }\r\n\r\n    // Convert time to percentage position on timeline (0-100%)\r\n    function timeToPosition(timeStr) {\r\n        const minutes = timeToMinutes(timeStr);\r\n        // Assuming 24-hour timeline (0-1440 minutes)\r\n        return (minutes / 1440) * 100;\r\n    }\r\n\r\n    // Convert position percentage to time\r\n    function positionToTime(position) {\r\n        const minutes = Math.round((position / 100) * 1440);\r\n        // Round to nearest 15 minutes\r\n        const rounded = Math.round(minutes / 15) * 15;\r\n        return minutesToTime(Math.max(0, Math.min(1440, rounded)));\r\n    }\r\n\r\n    function updateTimelineRect() {\r\n        if (timelineElement) {\r\n            const rect = timelineElement.getBoundingClientRect();\r\n            timelineRect = {\r\n                left: rect.left,\r\n                width: rect.width\r\n            };\r\n        }\r\n    }\r\n\r\n    function handleMouseDown(e, type) {\r\n        e.preventDefault();\r\n        isDragging = true;\r\n        dragType = type;\r\n        updateTimelineRect();\r\n        document.addEventListener('mousemove', handleMouseMove);\r\n        document.addEventListener('mouseup', handleMouseUp);\r\n    }\r\n\r\n    function handleMouseMove(e) {\r\n        if (!isDragging || !timelineElement) return;\r\n        \r\n        const x = e.clientX - timelineRect.left;\r\n        const position = Math.max(0, Math.min(100, (x / timelineRect.width) * 100));\r\n        const newTime = positionToTime(position);\r\n\r\n        if (dragType === 'start') {\r\n            const endMinutes = timeToMinutes(endTime || \"23:59\");\r\n            const newMinutes = timeToMinutes(newTime);\r\n            if (newMinutes < endMinutes) {\r\n                startTime = newTime;\r\n                dispatch('startTimeChange', newTime);\r\n            }\r\n        } else if (dragType === 'end') {\r\n            const startMinutes = timeToMinutes(startTime || \"00:00\");\r\n            const newMinutes = timeToMinutes(newTime);\r\n            if (newMinutes > startMinutes) {\r\n                endTime = newTime;\r\n                dispatch('endTimeChange', newTime);\r\n            }\r\n        }\r\n    }\r\n\r\n    function handleMouseUp() {\r\n        isDragging = false;\r\n        dragType = null;\r\n        document.removeEventListener('mousemove', handleMouseMove);\r\n        document.removeEventListener('mouseup', handleMouseUp);\r\n    }\r\n\r\n    function handleTimelineClick(e) {\r\n        if (isDragging) return;\r\n        updateTimelineRect();\r\n        const x = e.clientX - timelineRect.left;\r\n        const position = Math.max(0, Math.min(100, (x / timelineRect.width) * 100));\r\n        const clickedTime = positionToTime(position);\r\n        \r\n        const startMinutes = timeToMinutes(startTime || \"00:00\");\r\n        const endMinutes = timeToMinutes(endTime || \"23:59\");\r\n        const clickedMinutes = timeToMinutes(clickedTime);\r\n\r\n        // Determine which handle is closer\r\n        const distToStart = Math.abs(clickedMinutes - startMinutes);\r\n        const distToEnd = Math.abs(clickedMinutes - endMinutes);\r\n\r\n        if (distToStart < distToEnd) {\r\n            if (clickedMinutes < endMinutes) {\r\n                startTime = clickedTime;\r\n                dispatch('startTimeChange', clickedTime);\r\n            }\r\n        } else {\r\n            if (clickedMinutes > startMinutes) {\r\n                endTime = clickedTime;\r\n                dispatch('endTimeChange', clickedTime);\r\n            }\r\n        }\r\n    }\r\n\r\n    function snapToNearest15(timeStr) {\r\n        const minutes = timeToMinutes(timeStr);\r\n        const rounded = Math.round(minutes / 15) * 15;\r\n        return minutesToTime(Math.max(0, Math.min(1440, rounded)));\r\n    }\r\n\r\n    $: startPos = timeToPosition(startTime || \"00:00\");\r\n    $: endPos = timeToPosition(endTime || \"23:59\");\r\n    $: rangeWidth = Math.max(2, endPos - startPos);\r\n</script>\r\n\r\n<div class=\"time-range-picker\">\r\n    <div class=\"picker-header\">\r\n        <select \r\n            bind:value={dayOfWeek} \r\n            class=\"day-select\"\r\n            on:change={(e) => dispatch('dayOfWeekChange', e.target.value)}\r\n        >\r\n            {#each Object.entries(dayNames) as [value, name]}\r\n                <option value={value}>{name}</option>\r\n            {/each}\r\n        </select>\r\n        <div class=\"time-display\">\r\n            <span>{startTime || \"00:00\"}</span>\r\n            <span class=\"separator\">→</span>\r\n            <span>{endTime || \"23:59\"}</span>\r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"timeline-container\">\r\n        <div \r\n            class=\"timeline\"\r\n            bind:this={timelineElement}\r\n            on:click={handleTimelineClick}\r\n            role=\"slider\"\r\n            aria-label=\"Time range selector\"\r\n        >\r\n            <div class=\"timeline-background\"></div>\r\n            <div \r\n                class=\"time-range\"\r\n                style=\"left: {startPos}%; width: {rangeWidth}%\"\r\n            ></div>\r\n            <div \r\n                class=\"handle handle-start\"\r\n                style=\"left: {startPos}%\"\r\n                on:mousedown={(e) => handleMouseDown(e, 'start')}\r\n                role=\"button\"\r\n                aria-label=\"Start time\"\r\n            ></div>\r\n            <div \r\n                class=\"handle handle-end\"\r\n                style=\"left: {endPos}%\"\r\n                on:mousedown={(e) => handleMouseDown(e, 'end')}\r\n                role=\"button\"\r\n                aria-label=\"End time\"\r\n            ></div>\r\n        </div>\r\n        \r\n        <div class=\"time-labels\">\r\n            <span>00:00</span>\r\n            <span>06:00</span>\r\n            <span>12:00</span>\r\n            <span>18:00</span>\r\n            <span>23:59</span>\r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"time-inputs\">\r\n        <div class=\"time-input-group\">\r\n            <label>Start Time</label>\r\n            <input \r\n                type=\"time\" \r\n                value={startTime}\r\n                on:change={(e) => {\r\n                    const newTime = snapToNearest15(e.target.value);\r\n                    if (timeToMinutes(newTime) < timeToMinutes(endTime || \"23:59\")) {\r\n                        startTime = newTime;\r\n                        dispatch('startTimeChange', newTime);\r\n                    } else {\r\n                        e.target.value = startTime; // Reset if invalid\r\n                    }\r\n                }}\r\n            />\r\n        </div>\r\n        <div class=\"time-input-group\">\r\n            <label>End Time</label>\r\n            <input \r\n                type=\"time\" \r\n                value={endTime}\r\n                on:change={(e) => {\r\n                    const newTime = snapToNearest15(e.target.value);\r\n                    if (timeToMinutes(newTime) > timeToMinutes(startTime || \"00:00\")) {\r\n                        endTime = newTime;\r\n                        dispatch('endTimeChange', newTime);\r\n                    } else {\r\n                        e.target.value = endTime; // Reset if invalid\r\n                    }\r\n                }}\r\n            />\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n<style>\r\n    .time-range-picker {\r\n        background: white;\r\n        border: 2px solid #e5e7eb;\r\n        border-radius: 10px;\r\n        padding: 1.5em;\r\n        margin-bottom: 1em;\r\n    }\r\n\r\n    .picker-header {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        margin-bottom: 1.5em;\r\n        flex-wrap: wrap;\r\n        gap: 1em;\r\n    }\r\n\r\n    .day-select {\r\n        padding: 0.5em 1em;\r\n        border: 2px solid #e5e7eb;\r\n        border-radius: 6px;\r\n        font-size: 1em;\r\n        background: white;\r\n        cursor: pointer;\r\n    }\r\n\r\n    .time-display {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 0.5em;\r\n        font-size: 1.1em;\r\n        font-weight: 600;\r\n        color: #111827;\r\n    }\r\n\r\n    .separator {\r\n        color: #6b7280;\r\n    }\r\n\r\n    .timeline-container {\r\n        margin-bottom: 1em;\r\n    }\r\n\r\n    .timeline {\r\n        position: relative;\r\n        height: 60px;\r\n        cursor: pointer;\r\n        margin-bottom: 0.5em;\r\n    }\r\n\r\n    .timeline-background {\r\n        position: absolute;\r\n        top: 50%;\r\n        left: 0;\r\n        right: 0;\r\n        height: 8px;\r\n        background: #e5e7eb;\r\n        border-radius: 4px;\r\n        transform: translateY(-50%);\r\n    }\r\n\r\n    .time-range {\r\n        position: absolute;\r\n        top: 50%;\r\n        height: 8px;\r\n        background: #fab45a;\r\n        border-radius: 4px;\r\n        transform: translateY(-50%);\r\n        pointer-events: none;\r\n    }\r\n\r\n    .handle {\r\n        position: absolute;\r\n        top: 50%;\r\n        width: 20px;\r\n        height: 20px;\r\n        background: #fab45a;\r\n        border: 3px solid white;\r\n        border-radius: 50%;\r\n        transform: translate(-50%, -50%);\r\n        cursor: grab;\r\n        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n        transition: transform 0.1s ease;\r\n    }\r\n\r\n    .handle:active {\r\n        cursor: grabbing;\r\n        transform: translate(-50%, -50%) scale(1.2);\r\n    }\r\n\r\n    .handle:hover {\r\n        background: #f9a742;\r\n    }\r\n\r\n    .time-labels {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        font-size: 0.75em;\r\n        color: #6b7280;\r\n        padding: 0 10px;\r\n    }\r\n\r\n    .time-inputs {\r\n        display: grid;\r\n        grid-template-columns: 1fr 1fr;\r\n        gap: 1em;\r\n    }\r\n\r\n    .time-input-group {\r\n        display: flex;\r\n        flex-direction: column;\r\n    }\r\n\r\n    .time-input-group label {\r\n        font-size: 0.875em;\r\n        font-weight: 600;\r\n        color: #374151;\r\n        margin-bottom: 0.5em;\r\n    }\r\n\r\n    .time-input-group input[type=\"time\"] {\r\n        padding: 0.75em;\r\n        border: 2px solid #e5e7eb;\r\n        border-radius: 6px;\r\n        font-size: 1em;\r\n        transition: all 0.2s ease;\r\n    }\r\n\r\n    .time-input-group input[type=\"time\"]:focus {\r\n        outline: none;\r\n        border-color: #fab45a;\r\n        box-shadow: 0 0 0 3px rgba(250, 180, 90, 0.1);\r\n    }\r\n\r\n    @media (max-width: 768px) {\r\n        .time-inputs {\r\n            grid-template-columns: 1fr;\r\n        }\r\n    }\r\n</style>\r\n\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n    import TeacherFinderDisplayComponent from './TeacherFinderDisplayComponent.svelte';\r\n    import Autocomplete from './Autocomplete.svelte';\r\n    import VisualTimeRangePicker from './VisualTimeRangePicker.svelte';\r\n    import { SUBJECT_NAMES } from './subjectCatalog.js';\r\n\r\n    const apiBase = getApiBase();\r\n    const fallbackSubjects = SUBJECT_NAMES;\r\n    const grades = Array.from({ length: 13 }, (_, index) => index + 1);\r\n\r\n    let subjects = fallbackSubjects;\r\n    let selectedSubject = '';\r\n    let selectedGrade = 6;\r\n    let timeSlots = [];\r\n    let responseData = null;\r\n    let submittedTimeSlots = [];\r\n    let loading = false;\r\n    let errorMessage = '';\r\n\r\n    onMount(loadSubjects);\r\n\r\n    async function loadSubjects() {\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/teacher-finder/`, {\r\n                headers: { 'Authorization': `Bearer ${localStorage.getItem('jwtToken')}` }\r\n            });\r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                if (data.subjects?.length) subjects = data.subjects;\r\n            }\r\n        } catch (error) {\r\n            console.warn('Could not load teacher-finder subjects; using fallback list.', error);\r\n        }\r\n    }\r\n\r\n    function addTimeSlot() {\r\n        timeSlots = [...timeSlots, { start_time: '', end_time: '', day_of_week: '1' }];\r\n    }\r\n\r\n    function removeTimeSlot(index) {\r\n        timeSlots = timeSlots.filter((_, slotIndex) => slotIndex !== index);\r\n    }\r\n\r\n    function updateTimeSlot(index, key, value) {\r\n        timeSlots = timeSlots.map((slot, slotIndex) => (\r\n            slotIndex === index ? { ...slot, [key]: value } : slot\r\n        ));\r\n    }\r\n\r\n    function validateForm() {\r\n        if (!selectedSubject.trim()) return 'Choose a subject.';\r\n        for (const [index, slot] of timeSlots.entries()) {\r\n            if (!slot.start_time || !slot.end_time) return `Complete or remove preferred time ${index + 1}.`;\r\n            if (slot.start_time >= slot.end_time) return `Preferred time ${index + 1} must end after it starts.`;\r\n        }\r\n        return '';\r\n    }\r\n\r\n    async function submitForm() {\r\n        errorMessage = validateForm();\r\n        if (errorMessage) return;\r\n        loading = true;\r\n        responseData = null;\r\n        submittedTimeSlots = timeSlots.map(slot => ({ ...slot }));\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/teacher-finder/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${localStorage.getItem('jwtToken')}`,\r\n                    'Content-Type': 'application/json'\r\n                },\r\n                body: JSON.stringify({ subject: selectedSubject, grade: selectedGrade, time_slots: submittedTimeSlots })\r\n            });\r\n            const data = await response.json();\r\n            if (response.status === 401) {\r\n                localStorage.removeItem('jwtToken');\r\n                throw new Error('Your local session has expired. Sign in again, then return to the teacher finder.');\r\n            }\r\n            if (!response.ok) throw new Error(data.error || 'Teacher search failed.');\r\n            responseData = data;\r\n        } catch (error) {\r\n            errorMessage = error.message || 'Teacher search failed. Please try again.';\r\n        } finally {\r\n            loading = false;\r\n        }\r\n    }\r\n</script>\r\n\r\n<section class=\"finder\" aria-labelledby=\"teacher-finder-title\">\r\n    <div class=\"heading\">\r\n        <h3 id=\"teacher-finder-title\">Teacher finder</h3>\r\n        <p>Choose a subject and grade to see every matching teacher and their upcoming weekly availability.</p>\r\n    </div>\r\n\r\n    <div class=\"criteria\">\r\n        <div class=\"form-group\">\r\n            <Autocomplete label=\"Subject\" options={subjects} bind:value={selectedSubject} placeholder=\"Type to search subjects...\" />\r\n        </div>\r\n        <div class=\"form-group\">\r\n            <label for=\"teacher-finder-grade\">Grade</label>\r\n            <select id=\"teacher-finder-grade\" bind:value={selectedGrade}>\r\n                {#each grades as grade}<option value={grade}>{grade}</option>{/each}\r\n            </select>\r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"preferences\">\r\n        <div class=\"preferences-heading\">\r\n            <div>\r\n                <h4>Preferred times <span>Optional</span></h4>\r\n                <p>Add times to rank teachers by free-time overlap. No matching teacher will be hidden.</p>\r\n            </div>\r\n            <button class=\"secondary\" type=\"button\" on:click={addTimeSlot}>+ Add preferred time</button>\r\n        </div>\r\n        {#each timeSlots as slot, index}\r\n            <div class=\"time-slot-wrapper\">\r\n                <VisualTimeRangePicker\r\n                    startTime={slot.start_time}\r\n                    endTime={slot.end_time}\r\n                    dayOfWeek={slot.day_of_week}\r\n                    on:startTimeChange={(event) => updateTimeSlot(index, 'start_time', event.detail)}\r\n                    on:endTimeChange={(event) => updateTimeSlot(index, 'end_time', event.detail)}\r\n                    on:dayOfWeekChange={(event) => updateTimeSlot(index, 'day_of_week', event.detail)}\r\n                />\r\n                <button class=\"remove\" type=\"button\" on:click={() => removeTimeSlot(index)}>Remove</button>\r\n            </div>\r\n        {/each}\r\n    </div>\r\n\r\n    {#if errorMessage}<p class=\"error\" role=\"alert\">{errorMessage}</p>{/if}\r\n    <button class=\"search\" type=\"button\" disabled={loading} on:click={submitForm}>\r\n        {loading ? 'Finding teachers…' : 'Find teachers'}\r\n    </button>\r\n\r\n    {#if responseData}\r\n        <TeacherFinderDisplayComponent data={responseData.matched_teachers} searchedTimeSlots={submittedTimeSlots} availabilityWindow={responseData.availability_window} />\r\n    {/if}\r\n</section>\r\n\r\n<style>\r\n    .finder { width: 100%; color: #1f2937; }\r\n    .heading h3 { margin: 0 0 .35rem; font-size: 1.5rem; }\r\n    .heading p, .preferences p { margin: 0; color: #5f6b7a; line-height: 1.5; }\r\n    .criteria { display: grid; grid-template-columns: minmax(240px, 2fr) minmax(140px, 1fr); gap: 1.25rem; margin: 1.5rem 0; }\r\n    .form-group { min-width: 0; }\r\n    .form-group > label { display: block; margin-bottom: .45rem; font-weight: 650; }\r\n    select { width: 100%; min-height: 43px; padding: .6rem .75rem; border: 1px solid #cbd5e1; border-radius: 8px; background: white; font-size: 1rem; }\r\n    .preferences { padding: 1rem; border: 1px solid #dbe3ec; border-radius: 12px; background: #f8fafc; }\r\n    .preferences-heading { display: flex; justify-content: space-between; align-items: start; gap: 1rem; }\r\n    .preferences h4 { margin: 0 0 .25rem; }\r\n    .preferences h4 span { margin-left: .35rem; padding: .2rem .5rem; border-radius: 999px; background: #e2e8f0; color: #475569; font-size: .72rem; text-transform: uppercase; }\r\n    .time-slot-wrapper { margin-top: 1rem; }\r\n    button { border: 0; border-radius: 8px; cursor: pointer; font-weight: 650; }\r\n    button:focus-visible, select:focus-visible { outline: 3px solid rgba(37, 99, 235, .35); outline-offset: 2px; }\r\n    .secondary { padding: .7rem 1rem; color: #1d4ed8; background: #dbeafe; white-space: nowrap; }\r\n    .remove { display: block; margin: .4rem 0 0 auto; padding: .55rem .9rem; color: #991b1b; background: #fee2e2; }\r\n    .search { margin-top: 1rem; padding: .8rem 1.4rem; color: #111827; background: #fab45a; font-size: 1rem; }\r\n    .search:hover { background: #f9a742; }\r\n    .search:disabled { cursor: wait; opacity: .65; }\r\n    .error { margin: 1rem 0 0; padding: .75rem 1rem; color: #991b1b; background: #fef2f2; border: 1px solid #fecaca; border-radius: 8px; }\r\n    @media (max-width: 700px) {\r\n        .criteria { grid-template-columns: 1fr; }\r\n        .preferences-heading { flex-direction: column; }\r\n        .secondary, .search { width: 100%; }\r\n    }\r\n</style>\r\n","<script>\r\n    export let options = [];\r\n    export let value = \"\";\r\n    export let placeholder = \"Type to search...\";\r\n    export let label = \"\";\r\n    \r\n    let searchTerm = value;\r\n    let lastSyncedValue = value;\r\n    let isOpen = false;\r\n    let highlightedIndex = -1;\r\n    let inputElement;\r\n\r\n    $: filteredOptions = options.filter(opt => \r\n        opt.toLowerCase().includes(searchTerm.toLowerCase())\r\n    );\r\n\r\n    function selectOption(option) {\r\n        value = option;\r\n        searchTerm = option;\r\n        lastSyncedValue = option;\r\n        isOpen = false;\r\n        highlightedIndex = -1;\r\n    }\r\n\r\n    function handleInput(e) {\r\n        searchTerm = e.target.value;\r\n        // Editing a committed option clears the bound selection without\r\n        // replacing what the user is currently typing.\r\n        value = options.includes(searchTerm) ? searchTerm : '';\r\n        lastSyncedValue = value;\r\n        isOpen = true;\r\n        highlightedIndex = -1;\r\n    }\r\n\r\n    function clearSelection() {\r\n        value = '';\r\n        searchTerm = '';\r\n        lastSyncedValue = '';\r\n        highlightedIndex = -1;\r\n        isOpen = true;\r\n        inputElement?.focus();\r\n    }\r\n\r\n    function handleKeydown(e) {\r\n        if (!isOpen && e.key !== 'Enter') {\r\n            isOpen = true;\r\n            return;\r\n        }\r\n\r\n        if (e.key === 'ArrowDown') {\r\n            e.preventDefault();\r\n            highlightedIndex = Math.min(highlightedIndex + 1, filteredOptions.length - 1);\r\n        } else if (e.key === 'ArrowUp') {\r\n            e.preventDefault();\r\n            highlightedIndex = Math.max(highlightedIndex - 1, -1);\r\n        } else if (e.key === 'Enter' && highlightedIndex >= 0) {\r\n            e.preventDefault();\r\n            selectOption(filteredOptions[highlightedIndex]);\r\n        } else if (e.key === 'Escape') {\r\n            isOpen = false;\r\n            highlightedIndex = -1;\r\n        }\r\n    }\r\n\r\n    function handleFocus() {\r\n        isOpen = true;\r\n    }\r\n\r\n    function handleBlur() {\r\n        // Delay to allow click events to fire\r\n        setTimeout(() => {\r\n            isOpen = false;\r\n            if (options.includes(searchTerm)) {\r\n                value = searchTerm;\r\n                lastSyncedValue = searchTerm;\r\n            }\r\n        }, 200);\r\n    }\r\n\r\n    // Synchronize only genuine parent-driven value changes. User edits update\r\n    // lastSyncedValue themselves and therefore are not overwritten here.\r\n    $: if (value !== lastSyncedValue) {\r\n        searchTerm = value;\r\n        lastSyncedValue = value;\r\n    }\r\n</script>\r\n\r\n<div class=\"autocomplete-wrapper\">\r\n    {#if label}\r\n        <label class=\"autocomplete-label\">{label}</label>\r\n    {/if}\r\n    <div class=\"autocomplete-container\">\r\n        <input\r\n            bind:this={inputElement}\r\n            type=\"text\"\r\n            bind:value={searchTerm}\r\n            on:input={handleInput}\r\n            on:keydown={handleKeydown}\r\n            on:focus={handleFocus}\r\n            on:blur={handleBlur}\r\n            placeholder={placeholder}\r\n            class=\"autocomplete-input\"\r\n            role=\"combobox\"\r\n            aria-expanded={isOpen}\r\n            aria-autocomplete=\"list\"\r\n        />\r\n        {#if searchTerm}\r\n            <button\r\n                type=\"button\"\r\n                class=\"autocomplete-clear\"\r\n                aria-label=\"Clear {label || 'selection'}\"\r\n                title=\"Clear selection\"\r\n                on:mousedown={(e) => e.preventDefault()}\r\n                on:click={clearSelection}\r\n            >×</button>\r\n        {/if}\r\n        {#if isOpen && filteredOptions.length > 0}\r\n            <ul class=\"autocomplete-dropdown\" role=\"listbox\">\r\n                {#each filteredOptions as option, index}\r\n                    <li\r\n                        class=\"autocomplete-option\"\r\n                        class:highlighted={index === highlightedIndex}\r\n                        on:click={() => selectOption(option)}\r\n                        on:mousedown={(e) => e.preventDefault()}\r\n                        role=\"option\"\r\n                        aria-selected={index === highlightedIndex}\r\n                    >\r\n                        {@html option.replace(\r\n                            new RegExp(`(${searchTerm})`, 'gi'),\r\n                            '<mark>$1</mark>'\r\n                        )}\r\n                    </li>\r\n                {/each}\r\n            </ul>\r\n        {:else if isOpen && searchTerm && filteredOptions.length === 0}\r\n            <ul class=\"autocomplete-dropdown\">\r\n                <li class=\"autocomplete-option no-results\">No results found</li>\r\n            </ul>\r\n        {/if}\r\n    </div>\r\n    <input type=\"hidden\" bind:value={value} />\r\n</div>\r\n\r\n<style>\r\n    .autocomplete-wrapper {\r\n        position: relative;\r\n        width: 100%;\r\n    }\r\n\r\n    .autocomplete-label {\r\n        display: block;\r\n        margin-bottom: 0.5em;\r\n        font-weight: 600;\r\n        color: #374151;\r\n    }\r\n\r\n    .autocomplete-container {\r\n        position: relative;\r\n    }\r\n\r\n    .autocomplete-input {\r\n        width: 100%;\r\n        padding: 0.75em 2.75em 0.75em 1em;\r\n        border: 2px solid #e5e7eb;\r\n        border-radius: 8px;\r\n        font-size: 1em;\r\n        background-color: white;\r\n        color: #111827;\r\n        transition: all 0.2s ease;\r\n        box-sizing: border-box;\r\n    }\r\n\r\n    .autocomplete-clear {\r\n        position: absolute;\r\n        top: 50%;\r\n        right: 0.65em;\r\n        width: 1.8em;\r\n        height: 1.8em;\r\n        padding: 0;\r\n        transform: translateY(-50%);\r\n        border: 0;\r\n        border-radius: 50%;\r\n        background: #eef2f7;\r\n        color: #475569;\r\n        cursor: pointer;\r\n        font-size: 1.1em;\r\n        line-height: 1;\r\n    }\r\n\r\n    .autocomplete-clear:hover,\r\n    .autocomplete-clear:focus-visible {\r\n        background: #e2e8f0;\r\n        color: #111827;\r\n        outline: 2px solid #fab45a;\r\n        outline-offset: 1px;\r\n    }\r\n\r\n    .autocomplete-input:focus {\r\n        outline: none;\r\n        border-color: #fab45a;\r\n        box-shadow: 0 0 0 3px rgba(250, 180, 90, 0.1);\r\n    }\r\n\r\n    .autocomplete-dropdown {\r\n        position: absolute;\r\n        top: 100%;\r\n        left: 0;\r\n        right: 0;\r\n        margin-top: 4px;\r\n        padding: 0;\r\n        list-style: none;\r\n        background: white;\r\n        border: 2px solid #e5e7eb;\r\n        border-radius: 8px;\r\n        box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n        max-height: 200px;\r\n        overflow-y: auto;\r\n        z-index: 1000;\r\n    }\r\n\r\n    .autocomplete-option {\r\n        padding: 0.75em 1em;\r\n        cursor: pointer;\r\n        transition: background-color 0.15s ease;\r\n    }\r\n\r\n    .autocomplete-option:hover,\r\n    .autocomplete-option.highlighted {\r\n        background-color: #f3f4f6;\r\n    }\r\n\r\n    .autocomplete-option mark {\r\n        background-color: #fab45a;\r\n        color: inherit;\r\n        font-weight: 600;\r\n        padding: 0;\r\n    }\r\n\r\n    .autocomplete-option.no-results {\r\n        color: #6b7280;\r\n        font-style: italic;\r\n        cursor: default;\r\n    }\r\n\r\n    .autocomplete-option.no-results:hover {\r\n        background-color: transparent;\r\n    }\r\n</style>\r\n\r\n","export function formatDuration(minutes) {\r\n  const safeMinutes = Math.max(0, Number(minutes) || 0);\r\n  const hours = Math.floor(safeMinutes / 60);\r\n  const remainder = safeMinutes % 60;\r\n  if (!hours) return `${remainder} min`;\r\n  return remainder ? `${hours} h ${remainder} min` : `${hours} h`;\r\n}\r\n\r\nexport function formatActiveTeacherCount(count) {\r\n  const safeCount = Math.max(0, Number(count) || 0);\r\n  return `${safeCount} active ${safeCount === 1 ? 'teacher' : 'teachers'}`;\r\n}\r\n\r\nexport function sortTeachersByAvailability(teachers = []) {\r\n  return [...teachers].sort((left, right) => (\r\n    (Number(right.available_minutes) || 0) - (Number(left.available_minutes) || 0)\r\n    || String(left.teacher_name || '').localeCompare(String(right.teacher_name || ''))\r\n  ));\r\n}\r\n\r\nexport function buildCapacityQuery({ teacherId, subjectId, grade } = {}) {\r\n  const params = new URLSearchParams();\r\n  if (teacherId) params.set('teacher_id', teacherId);\r\n  if (subjectId) params.set('subject_id', subjectId);\r\n  if (grade) params.set('grade', grade);\r\n  const query = params.toString();\r\n  return query ? `?${query}` : '';\r\n}\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n    import { buildCapacityQuery, formatActiveTeacherCount, formatDuration, sortTeachersByAvailability } from './teacherAvailabilityCapacity.js';\r\n\r\n    const apiBase = getApiBase();\r\n    let report = null;\r\n    let filterOptions = { teachers: [], subjects: [], grades: [] };\r\n    let teacherId = '';\r\n    let subjectId = '';\r\n    let grade = '';\r\n    let loading = true;\r\n    let errorMessage = '';\r\n    let expandedTeacherId = null;\r\n\r\n    $: teachers = sortTeachersByAvailability(report?.teachers || []);\r\n    $: maxWeekdayMinutes = Math.max(1, ...(report?.weekdays || []).map(day => day.submitted_minutes || 0));\r\n\r\n    onMount(loadCapacity);\r\n\r\n    async function loadCapacity() {\r\n        loading = true;\r\n        errorMessage = '';\r\n        const query = buildCapacityQuery({ teacherId, subjectId, grade });\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/admin/teacher-availability-capacity/${query}`, {\r\n                headers: { 'Authorization': `Bearer ${localStorage.getItem('jwtToken')}` },\r\n            });\r\n            const data = await response.json().catch(() => ({}));\r\n            if (response.status === 401) localStorage.removeItem('jwtToken');\r\n            if (!response.ok) throw new Error(data.error || 'Could not load teacher availability.');\r\n            report = data;\r\n            filterOptions = data.filters || filterOptions;\r\n            if (!data.teachers?.some(teacher => teacher.teacher_id === expandedTeacherId)) expandedTeacherId = null;\r\n        } catch (error) {\r\n            errorMessage = error.message || 'Could not load teacher availability.';\r\n        } finally {\r\n            loading = false;\r\n        }\r\n    }\r\n\r\n    function resetFilters() {\r\n        teacherId = '';\r\n        subjectId = '';\r\n        grade = '';\r\n        loadCapacity();\r\n    }\r\n\r\n    function monthLabel(period) {\r\n        if (!period?.start_date) return '';\r\n        return new Intl.DateTimeFormat('en', { month: 'long', year: 'numeric', timeZone: 'UTC' })\r\n            .format(new Date(`${period.start_date}T00:00:00Z`));\r\n    }\r\n\r\n    function dateLabel(row) {\r\n        return new Intl.DateTimeFormat('en', { weekday: 'long', month: 'short', day: 'numeric', timeZone: 'UTC' })\r\n            .format(new Date(`${row.date}T00:00:00Z`));\r\n    }\r\n\r\n    function percentage(value, total) {\r\n        if (!total) return 0;\r\n        return Math.max(0, Math.min(100, (value / total) * 100));\r\n    }\r\n</script>\r\n\r\n<section class=\"capacity\" aria-labelledby=\"teacher-capacity-title\">\r\n    <header class=\"heading\">\r\n        <div>\r\n            <p class=\"eyebrow\">Monthly capacity overview</p>\r\n            <h3 id=\"teacher-capacity-title\">Teacher availability capacity</h3>\r\n            <p>See submitted teaching time, scheduled classes, and every remaining open interval in one place.</p>\r\n        </div>\r\n        {#if report}<span class=\"month-badge\">{monthLabel(report.period)}</span>{/if}\r\n    </header>\r\n\r\n    <div class=\"filters\" aria-label=\"Capacity filters\">\r\n        <label>Teacher\r\n            <select bind:value={teacherId} on:change={loadCapacity}>\r\n                <option value=\"\">All teachers</option>\r\n                {#each filterOptions.teachers as teacher}<option value={teacher.id}>{teacher.name}</option>{/each}\r\n            </select>\r\n        </label>\r\n        <label>Subject\r\n            <select bind:value={subjectId} on:change={loadCapacity}>\r\n                <option value=\"\">All subjects</option>\r\n                {#each filterOptions.subjects as subject}<option value={subject.id}>{subject.name}</option>{/each}\r\n            </select>\r\n        </label>\r\n        <label>Grade\r\n            <select bind:value={grade} on:change={loadCapacity}>\r\n                <option value=\"\">Any grade</option>\r\n                {#each filterOptions.grades as item}<option value={item}>Grade {item}</option>{/each}\r\n            </select>\r\n        </label>\r\n        <button class=\"reset\" type=\"button\" on:click={resetFilters} disabled={!teacherId && !subjectId && !grade}>Reset filters</button>\r\n    </div>\r\n\r\n    {#if loading && !report}\r\n        <div class=\"loading\" role=\"status\"><span></span><span></span><span></span><p>Calculating monthly availability…</p></div>\r\n    {:else if errorMessage}\r\n        <div class=\"error\" role=\"alert\">\r\n            <strong>Availability could not be loaded.</strong><span>{errorMessage}</span>\r\n            <button type=\"button\" on:click={loadCapacity}>Try again</button>\r\n        </div>\r\n    {:else if report}\r\n        <div class:refreshing={loading} aria-busy={loading}>\r\n            <div class=\"summary-grid\">\r\n                <article class=\"summary-card available-card\">\r\n                    <span class=\"card-label\">Remaining availability</span>\r\n                    <strong>{report.summary.available_interval_count} open intervals</strong>\r\n                    <span class=\"large-duration\">{formatDuration(report.summary.available_minutes)}</span>\r\n                </article>\r\n                <article class=\"summary-card\">\r\n                    <span class=\"card-label\">Teachers with open time</span>\r\n                    <strong>{report.summary.teachers_with_availability} of {report.summary.teacher_count}</strong>\r\n                    <span>{report.summary.teacher_count - report.summary.teachers_with_availability} without open time</span>\r\n                    {#if report.comparison?.previous_academic_year}\r\n                        <div class=\"historical-comparison\">\r\n                            <span>Previous academic year</span>\r\n                            <strong>{formatActiveTeacherCount(report.comparison.previous_academic_year.active_teacher_count)} in {monthLabel(report.comparison.previous_academic_year)}</strong>\r\n                            <small>Taught at least one class</small>\r\n                        </div>\r\n                    {/if}\r\n                </article>\r\n                <article class=\"summary-card\">\r\n                    <span class=\"card-label\">Submitted time</span>\r\n                    <strong>{formatDuration(report.summary.submitted_minutes)}</strong>\r\n                    <span>Across the selected teachers</span>\r\n                </article>\r\n                <article class=\"summary-card occupied-card\">\r\n                    <span class=\"card-label\">Occupied time</span>\r\n                    <strong>{formatDuration(report.summary.occupied_minutes)}</strong>\r\n                    <span>Classes inside submitted windows</span>\r\n                </article>\r\n            </div>\r\n\r\n            <section class=\"weekday-section\" aria-labelledby=\"weekday-capacity-title\">\r\n                <div class=\"section-heading\">\r\n                    <div><h4 id=\"weekday-capacity-title\">Capacity by weekday</h4><p>Totals across every occurrence in {monthLabel(report.period)}.</p></div>\r\n                    <div class=\"legend\" aria-label=\"Chart legend\">\r\n                        <span><i class=\"submitted-dot\"></i>Submitted</span>\r\n                        <span><i class=\"occupied-dot\"></i>Occupied</span>\r\n                        <span><i class=\"available-dot\"></i>Available</span>\r\n                    </div>\r\n                </div>\r\n                <div class=\"weekday-list\">\r\n                    {#each report.weekdays as day}\r\n                        <div class=\"weekday-row\">\r\n                            <div class=\"weekday-name\"><strong>{day.day_name}</strong><span>{day.available_interval_count} intervals · {formatDuration(day.available_minutes)} free</span></div>\r\n                            <div class=\"bar-track\" title={`${day.day_name}: ${formatDuration(day.available_minutes)} available`}>\r\n                                <div class=\"bar-total\" style={`width: ${percentage(day.submitted_minutes, maxWeekdayMinutes)}%`}>\r\n                                    <span class=\"bar-occupied\" style={`width: ${percentage(day.occupied_minutes, day.submitted_minutes)}%`}></span>\r\n                                    <span class=\"bar-available\" style={`width: ${percentage(day.available_minutes, day.submitted_minutes)}%`}></span>\r\n                                </div>\r\n                            </div>\r\n                            <span class=\"weekday-total\">{formatDuration(day.submitted_minutes)}</span>\r\n                        </div>\r\n                    {/each}\r\n                </div>\r\n            </section>\r\n\r\n            <section class=\"teachers-section\" aria-labelledby=\"teacher-breakdown-title\">\r\n                <div class=\"section-heading\">\r\n                    <div><h4 id=\"teacher-breakdown-title\">Teacher breakdown</h4><p>Ordered by the most remaining time.</p></div>\r\n                </div>\r\n                {#if teachers.length === 0}\r\n                    <div class=\"empty\"><strong>No matching teachers</strong><span>Change or reset the filters to see monthly availability.</span></div>\r\n                {:else}\r\n                    <div class=\"teacher-list\">\r\n                        {#each teachers as teacher}\r\n                            <article class:zero-capacity={!teacher.available_minutes} class=\"teacher-card\">\r\n                                <button\r\n                                    class=\"teacher-toggle\"\r\n                                    type=\"button\"\r\n                                    aria-expanded={expandedTeacherId === teacher.teacher_id}\r\n                                    aria-controls={`capacity-teacher-${teacher.teacher_id}`}\r\n                                    on:click={() => expandedTeacherId = expandedTeacherId === teacher.teacher_id ? null : teacher.teacher_id}\r\n                                >\r\n                                    <span class=\"teacher-identity\"><strong>{teacher.teacher_name}</strong><small>{teacher.subjects.map(subject => `${subject.name} (${subject.grade})`).join(' · ') || 'No subject information'}</small></span>\r\n                                    <span class=\"teacher-stat\"><strong>{formatDuration(teacher.available_minutes)}</strong><small>{teacher.available_interval_count} open intervals</small></span>\r\n                                    <span class=\"chevron\" aria-hidden=\"true\">{expandedTeacherId === teacher.teacher_id ? '▾' : '▸'}</span>\r\n                                </button>\r\n                                {#if expandedTeacherId === teacher.teacher_id}\r\n                                    <div class=\"teacher-detail\" id={`capacity-teacher-${teacher.teacher_id}`}>\r\n                                        <div class=\"teacher-totals\">\r\n                                            <span><i class=\"submitted-dot\"></i>Submitted <strong>{formatDuration(teacher.submitted_minutes)}</strong></span>\r\n                                            <span><i class=\"occupied-dot\"></i>Occupied <strong>{formatDuration(teacher.occupied_minutes)}</strong></span>\r\n                                            <span><i class=\"available-dot\"></i>Available <strong>{formatDuration(teacher.available_minutes)}</strong></span>\r\n                                        </div>\r\n                                        {#if teacher.dates.length === 0}\r\n                                            <p class=\"no-slots\">This teacher has no submitted availability for the month.</p>\r\n                                        {:else}\r\n                                            <div class=\"date-list\">\r\n                                                {#each teacher.dates as day}\r\n                                                    <div class=\"date-row\">\r\n                                                        <div class=\"date-label\"><strong>{dateLabel(day)}</strong><span>{formatDuration(day.available_minutes)} free</span></div>\r\n                                                        <div class=\"time-chips\">\r\n                                                            {#each day.available_intervals as interval}\r\n                                                                <span class=\"time-chip\">{interval.start_time}–{interval.end_time}<small>{formatDuration(interval.duration_minutes)}</small></span>\r\n                                                            {:else}\r\n                                                                <span class=\"fully-booked\">Fully occupied</span>\r\n                                                            {/each}\r\n                                                        </div>\r\n                                                    </div>\r\n                                                {/each}\r\n                                            </div>\r\n                                        {/if}\r\n                                    </div>\r\n                                {/if}\r\n                            </article>\r\n                        {/each}\r\n                    </div>\r\n                {/if}\r\n            </section>\r\n\r\n            <p class=\"footnote\">Whole calendar month · Europe/Vilnius · Based on currently submitted recurring schedules. Updated {new Date(report.period.generated_at).toLocaleString()}.</p>\r\n        </div>\r\n    {/if}\r\n</section>\r\n\r\n<style>\r\n    .capacity { --blue: #2563eb; --blue-soft: #dbeafe; --green: #15803d; --green-soft: #dcfce7; --red: #b91c1c; --red-soft: #fee2e2; color: #172033; width: 100%; }\r\n    .heading, .section-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; }\r\n    .eyebrow { margin: 0 0 .25rem; color: #2563eb; font-size: .75rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }\r\n    .heading h3 { margin: 0; font-size: clamp(1.45rem, 2.2vw, 2rem); }\r\n    .heading p:not(.eyebrow), .section-heading p { margin: .4rem 0 0; color: #64748b; line-height: 1.5; }\r\n    .month-badge { padding: .55rem .8rem; border: 1px solid #bfdbfe; border-radius: 999px; background: #eff6ff; color: #1d4ed8; font-weight: 750; white-space: nowrap; }\r\n    .filters { display: grid; grid-template-columns: repeat(3, minmax(150px, 1fr)) auto; align-items: end; gap: .85rem; margin: 1.4rem 0; padding: 1rem; border: 1px solid #dbe3ec; border-radius: 14px; background: #f8fafc; }\r\n    label { color: #334155; font-size: .82rem; font-weight: 750; }\r\n    select { display: block; width: 100%; min-height: 42px; margin-top: .35rem; padding: .55rem .7rem; border: 1px solid #cbd5e1; border-radius: 8px; background: white; color: #172033; font-size: .95rem; }\r\n    button { font: inherit; }\r\n    button:focus-visible, select:focus-visible { outline: 3px solid rgba(37, 99, 235, .3); outline-offset: 2px; }\r\n    .reset { min-height: 42px; padding: .6rem .9rem; border: 0; border-radius: 8px; background: #e2e8f0; color: #334155; cursor: pointer; font-weight: 750; }\r\n    .reset:disabled { cursor: default; opacity: .5; }\r\n    .summary-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .9rem; }\r\n    .summary-card { display: flex; flex-direction: column; min-height: 125px; padding: 1rem; border: 1px solid #dbe3ec; border-radius: 14px; background: white; box-shadow: 0 6px 20px rgba(15, 23, 42, .05); }\r\n    .summary-card strong { margin: .55rem 0 .25rem; font-size: 1.45rem; }\r\n    .summary-card > span:last-child { color: #64748b; font-size: .83rem; }\r\n    .available-card { border-color: #86efac; background: linear-gradient(145deg, #f0fdf4, white); }\r\n    .available-card strong, .large-duration { color: #166534; }\r\n    .available-card .large-duration { font-size: 1.2rem; font-weight: 800; }\r\n    .occupied-card { border-color: #fecaca; }\r\n    .card-label { color: #475569; font-size: .78rem; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; }\r\n    .historical-comparison { display: flex; flex-direction: column; gap: .12rem; margin-top: .8rem; padding-top: .65rem; border-top: 1px solid #e2e8f0; }\r\n    .historical-comparison span { color: #475569; font-size: .7rem; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; }\r\n    .historical-comparison strong { margin: 0; color: #334155; font-size: .86rem; line-height: 1.35; }\r\n    .historical-comparison small { color: #64748b; font-size: .72rem; }\r\n    .weekday-section, .teachers-section { margin-top: 1rem; padding: 1.1rem; border: 1px solid #dbe3ec; border-radius: 14px; background: white; }\r\n    .section-heading h4 { margin: 0; font-size: 1.1rem; }\r\n    .legend, .teacher-totals { display: flex; flex-wrap: wrap; gap: .8rem; color: #475569; font-size: .8rem; }\r\n    .legend span, .teacher-totals span { display: inline-flex; align-items: center; gap: .35rem; }\r\n    i { display: inline-block; width: 10px; height: 10px; border-radius: 3px; }\r\n    .submitted-dot { background: var(--blue); } .occupied-dot { background: var(--red); } .available-dot { background: var(--green); }\r\n    .weekday-list { display: grid; gap: .75rem; margin-top: 1rem; }\r\n    .weekday-row { display: grid; grid-template-columns: 175px minmax(140px, 1fr) 65px; align-items: center; gap: .75rem; }\r\n    .weekday-name { display: flex; flex-direction: column; }\r\n    .weekday-name span { color: #64748b; font-size: .76rem; }\r\n    .bar-track { height: 16px; overflow: hidden; border-radius: 999px; background: #eef2f7; }\r\n    .bar-total { display: flex; height: 100%; min-width: 2px; overflow: hidden; border-radius: inherit; background: var(--blue-soft); }\r\n    .bar-occupied { background: var(--red); } .bar-available { background: var(--green); }\r\n    .weekday-total { color: #475569; font-size: .8rem; text-align: right; }\r\n    .teacher-list { display: grid; gap: .65rem; margin-top: 1rem; }\r\n    .teacher-card { overflow: hidden; border: 1px solid #dbe3ec; border-radius: 11px; }\r\n    .teacher-card.zero-capacity { background: #f8fafc; }\r\n    .teacher-toggle { display: grid; grid-template-columns: minmax(0, 1fr) auto 20px; align-items: center; gap: 1rem; width: 100%; padding: .9rem 1rem; border: 0; background: transparent; color: inherit; cursor: pointer; text-align: left; }\r\n    .teacher-toggle:hover { background: #f8fafc; }\r\n    .teacher-identity, .teacher-stat { display: flex; flex-direction: column; min-width: 0; }\r\n    .teacher-identity small, .teacher-stat small { overflow: hidden; color: #64748b; font-size: .76rem; text-overflow: ellipsis; white-space: nowrap; }\r\n    .teacher-stat { color: #166534; text-align: right; }\r\n    .chevron { color: #64748b; font-size: 1.15rem; }\r\n    .teacher-detail { padding: .85rem 1rem 1rem; border-top: 1px solid #e2e8f0; background: #f8fafc; }\r\n    .teacher-totals strong { color: #172033; }\r\n    .date-list { display: grid; gap: .55rem; margin-top: .85rem; }\r\n    .date-row { display: grid; grid-template-columns: 150px 1fr; gap: .75rem; padding-top: .55rem; border-top: 1px solid #e2e8f0; }\r\n    .date-label { display: flex; flex-direction: column; font-size: .85rem; }\r\n    .date-label span { color: #64748b; font-size: .75rem; }\r\n    .time-chips { display: flex; flex-wrap: wrap; gap: .4rem; }\r\n    .time-chip { display: inline-flex; align-items: center; gap: .45rem; padding: .4rem .6rem; border: 1px solid #86efac; border-radius: 8px; background: var(--green-soft); color: #14532d; font-weight: 750; }\r\n    .time-chip small { padding-left: .45rem; border-left: 1px solid #86efac; font-size: .7rem; font-weight: 600; }\r\n    .fully-booked { padding: .35rem .55rem; border-radius: 7px; background: var(--red-soft); color: #991b1b; font-size: .8rem; font-weight: 700; }\r\n    .empty, .error, .loading { display: flex; flex-direction: column; align-items: center; gap: .4rem; padding: 2rem; border-radius: 12px; background: #f8fafc; color: #64748b; text-align: center; }\r\n    .empty strong { color: #334155; }\r\n    .error { align-items: flex-start; border: 1px solid #fecaca; background: #fef2f2; color: #991b1b; text-align: left; }\r\n    .error button { margin-top: .4rem; padding: .55rem .8rem; border: 0; border-radius: 7px; background: #991b1b; color: white; cursor: pointer; }\r\n    .loading { flex-direction: row; justify-content: center; }\r\n    .loading span { width: 9px; height: 9px; border-radius: 50%; background: #60a5fa; animation: pulse 1s infinite alternate; }\r\n    .loading span:nth-child(2) { animation-delay: .2s; } .loading span:nth-child(3) { animation-delay: .4s; }\r\n    .refreshing { opacity: .62; transition: opacity .15s; }\r\n    .no-slots, .footnote { color: #64748b; font-size: .78rem; }\r\n    .footnote { margin: .8rem .2rem 0; text-align: right; }\r\n    @keyframes pulse { to { opacity: .25; transform: translateY(-3px); } }\r\n    @media (max-width: 900px) { .summary-grid { grid-template-columns: repeat(2, 1fr); } .filters { grid-template-columns: repeat(2, 1fr); } }\r\n    @media (max-width: 620px) {\r\n        .heading, .section-heading { flex-direction: column; }\r\n        .filters, .summary-grid { grid-template-columns: 1fr; }\r\n        .reset { width: 100%; }\r\n        .weekday-row { grid-template-columns: 115px 1fr; }\r\n        .weekday-total { display: none; }\r\n        .teacher-toggle { grid-template-columns: minmax(0, 1fr) 90px 16px; gap: .5rem; padding: .8rem; }\r\n        .date-row { grid-template-columns: 1fr; }\r\n        .footnote { text-align: left; }\r\n    }\r\n</style>\r\n","const terminalStatuses = new Set(['completed', 'completed_with_errors', 'failed']);\r\n\r\nasync function responseJson(response) {\r\n  let data = {};\r\n  try {\r\n    data = await response.json();\r\n  } catch (_error) {\r\n    // The fallback below is intentionally safe for proxy and HTML errors.\r\n  }\r\n  if (!response.ok) {\r\n    throw new Error(data.error || data.detail || data.message || `Request failed (${response.status})`);\r\n  }\r\n  return data;\r\n}\r\n\r\nexport async function enqueueCalendarRefresh({ apiBase, token, payload, fetchImpl = fetch }) {\r\n  const response = await fetchImpl(`${apiBase}/studentplayground/refresh/`, {\r\n    method: 'POST',\r\n    headers: {\r\n      Authorization: `Bearer ${token}`,\r\n      'Content-Type': 'application/json',\r\n    },\r\n    body: JSON.stringify(payload),\r\n  });\r\n  return responseJson(response);\r\n}\r\n\r\nexport async function pollCalendarRefresh({\r\n  statusUrl,\r\n  token,\r\n  fetchImpl = fetch,\r\n  wait = () => new Promise((resolve) => setTimeout(resolve, 2500)),\r\n  onUpdate = () => {},\r\n  signal,\r\n}) {\r\n  while (!signal?.aborted) {\r\n    const response = await fetchImpl(statusUrl, {\r\n      method: 'GET',\r\n      headers: { Authorization: `Bearer ${token}` },\r\n      signal,\r\n    });\r\n    const job = await responseJson(response);\r\n    onUpdate(job);\r\n    if (terminalStatuses.has(job.status)) return job;\r\n    await wait();\r\n  }\r\n  throw new DOMException('Calendar refresh polling was cancelled', 'AbortError');\r\n}\r\n\r\n","<script>\r\n  import { onDestroy, onMount } from 'svelte';\r\n  import { getApiBase } from './apiBase.js';\r\n  import { enqueueCalendarRefresh, pollCalendarRefresh } from './calendarRefreshApi.js';\r\n\r\n  let message = '';\r\n  let loading = false;\r\n  let errorMessage = '';\r\n  let selectedTeacher = null; // Stores selected teacher object\r\n  let teacherQuery = ''; // Stores search query\r\n  let filteredTeachers = []; // Stores filtered teachers\r\n  let showTeacherDropdown = false; // Controls dropdown visibility\r\n  let onlyRefreshSelected = false; // Stores checkbox state\r\n  let refreshType = 'current_month'; // New variable for refresh type\r\n  let teachers = []; // Stores teachers with their names and Google Calendar IDs\r\n  let warnings = null; // Stores skipped events warnings\r\n  let classesUploaded = 0; // Count of classes uploaded\r\n  let classesSkipped = 0; // Count of classes skipped\r\n  let calendarFailures = [];\r\n  let refreshProgress = null;\r\n  let pollingController = null;\r\n  const activeRefreshKey = 'activeCalendarRefreshStatusUrl';\r\n  \r\n  // Month selection variables - default to current month\r\n  const currentDate = new Date();\r\n  let selectedMonth = currentDate.getMonth() + 1; // Current month (1-12)\r\n  let selectedYear = currentDate.getFullYear(); // Current year\r\n  \r\n  // Day selection variable\r\n  let selectedDate = ''; // Format: YYYY-MM-DD\r\n  \r\n  // Week selection variables\r\n  let selectedWeekMonth = currentDate.getMonth() + 1; // Current month for week selection\r\n  let selectedWeekYear = currentDate.getFullYear(); // Current year for week selection\r\n  let selectedWeekOption = ''; // Selected week option (week1, week2, etc.)\r\n  let weekOptions = []; // Stores week options for the selected month\r\n  \r\n  // Generate month options starting from September 2025\r\n  function generateMonthOptions() {\r\n    const months = [\r\n      { value: 1, name: 'January' },\r\n      { value: 2, name: 'February' },\r\n      { value: 3, name: 'March' },\r\n      { value: 4, name: 'April' },\r\n      { value: 5, name: 'May' },\r\n      { value: 6, name: 'June' },\r\n      { value: 7, name: 'July' },\r\n      { value: 8, name: 'August' },\r\n      { value: 9, name: 'September' },\r\n      { value: 10, name: 'October' },\r\n      { value: 11, name: 'November' },\r\n      { value: 12, name: 'December' }\r\n    ];\r\n    \r\n    const options = [];\r\n    const startYear = 2025;\r\n    const startMonth = 9; // September\r\n    const currentYear = new Date().getFullYear();\r\n    const currentMonth = new Date().getMonth() + 1;\r\n    \r\n    // Add months from September 2025 onwards\r\n    for (let year = startYear; year <= currentYear + 2; year++) {\r\n      for (let month = 1; month <= 12; month++) {\r\n        // Skip months before September 2025\r\n        if (year === startYear && month < startMonth) continue;\r\n        // Don't go too far into the future\r\n        if (year > currentYear + 2) break;\r\n        \r\n        const monthName = months.find(m => m.value === month).name;\r\n        options.push({\r\n          value: `${year}-${month}`,\r\n          label: `${monthName} ${year}`,\r\n          year: year,\r\n          month: month\r\n        });\r\n      }\r\n    }\r\n    \r\n    return options;\r\n  }\r\n  \r\n  let monthOptions = generateMonthOptions();\r\n  let selectedMonthYear = `${selectedYear}-${selectedMonth}`;\r\n\r\n  const apiBase = getApiBase();\r\n\r\n  // Helper function to get today's date in YYYY-MM-DD format\r\n  function getTodayDate() {\r\n    const today = new Date();\r\n    return today.getFullYear() + '-' + \r\n           (today.getMonth() + 1).toString().padStart(2, '0') + '-' + \r\n           today.getDate().toString().padStart(2, '0');\r\n  }\r\n\r\n  // Generate week options for a specific month\r\n  function generateWeekOptions(year, month) {\r\n    const weeks = [];\r\n    const firstDayOfMonth = new Date(year, month - 1, 1); // month is 0-indexed in JS Date\r\n    const lastDayOfMonth = new Date(year, month, 0); // Day 0 of next month = last day of current month\r\n    \r\n    // Start from the first Monday within or overlapping the month\r\n    let currentMonday = new Date(firstDayOfMonth);\r\n    const firstDayWeekday = firstDayOfMonth.getDay(); // 0 = Sunday, 1 = Monday, etc.\r\n    \r\n    // Adjust to find the first Monday that creates a week overlapping this month\r\n    if (firstDayWeekday === 0) { // If month starts on Sunday\r\n      currentMonday.setDate(firstDayOfMonth.getDate() + 1); // Monday is the next day\r\n    } else if (firstDayWeekday === 1) { // If month starts on Monday\r\n      // currentMonday is already correct (first day of month)\r\n    } else { // Month starts Tue-Sat, find the previous Monday\r\n      const daysBack = firstDayWeekday - 1;\r\n      currentMonday.setDate(firstDayOfMonth.getDate() - daysBack);\r\n    }\r\n    \r\n    let weekNumber = 1;\r\n    \r\n    // Generate weeks while the Monday is within reasonable range\r\n    while (currentMonday <= lastDayOfMonth) {\r\n      const sunday = new Date(currentMonday);\r\n      sunday.setDate(currentMonday.getDate() + 6);\r\n      \r\n      // Only include weeks that have days within the target month\r\n      if (sunday >= firstDayOfMonth) {\r\n        // Calculate the portion of the week that falls within the month\r\n        const weekStart = currentMonday < firstDayOfMonth ? firstDayOfMonth : currentMonday;\r\n        const weekEnd = sunday > lastDayOfMonth ? lastDayOfMonth : sunday;\r\n        \r\n        // Convert to YYYY-MM-DD format without timezone issues\r\n        const startStr = weekStart.getFullYear() + '-' + \r\n                         (weekStart.getMonth() + 1).toString().padStart(2, '0') + '-' + \r\n                         weekStart.getDate().toString().padStart(2, '0');\r\n        const endStr = weekEnd.getFullYear() + '-' + \r\n                      (weekEnd.getMonth() + 1).toString().padStart(2, '0') + '-' + \r\n                      weekEnd.getDate().toString().padStart(2, '0');\r\n        \r\n        weeks.push({\r\n          value: `week${weekNumber}`,\r\n          label: `Week ${weekNumber}: ${startStr} to ${endStr}`,\r\n          startDate: startStr,\r\n          endDate: endStr,\r\n          mondayDate: currentMonday.getFullYear() + '-' + \r\n                     (currentMonday.getMonth() + 1).toString().padStart(2, '0') + '-' + \r\n                     currentMonday.getDate().toString().padStart(2, '0')\r\n        });\r\n        \r\n        weekNumber++;\r\n      }\r\n      \r\n      // Move to next Monday\r\n      currentMonday.setDate(currentMonday.getDate() + 7);\r\n    }\r\n    \r\n    return weeks;\r\n  }\r\n\r\n  // Update week options when month/year changes\r\n  function updateWeekOptions() {\r\n    weekOptions = generateWeekOptions(selectedWeekYear, selectedWeekMonth);\r\n    if (weekOptions.length > 0) {\r\n      selectedWeekOption = weekOptions[0].value; // Default to first week\r\n    }\r\n  }\r\n\r\n  // Initialize default dates\r\n  selectedDate = getTodayDate();\r\n\r\n  async function fetchTeachers() {\r\n      const url = `${apiBase}/studentplayground/api/get_google_calendar_ids/`;\r\n      const token = localStorage.getItem('jwtToken');\r\n      if (!token) {\r\n          errorMessage = 'JWT token not found. Please log in.';\r\n          return;\r\n      }\r\n\r\n      try {\r\n          const response = await fetch(url, {\r\n              method: 'GET',\r\n              headers: {\r\n                  'Authorization': `Bearer ${token}`,\r\n                  'Content-Type': 'application/json',\r\n              },\r\n          });\r\n\r\n          if (!response.ok) {\r\n              throw new Error(`Error: ${response.status}`);\r\n          }\r\n\r\n          const data = await response.json();\r\n          teachers = data.teachers; // Assuming backend returns { \"teachers\": [...] }\r\n          filteredTeachers = teachers;\r\n      } catch (error) {\r\n          errorMessage = `Failed to fetch teachers: ${error.message}`;\r\n      }\r\n  }\r\n\r\n  // Filter teachers based on search query\r\n  function filterTeachers() {\r\n    if (!teacherQuery.trim()) {\r\n      filteredTeachers = teachers;\r\n      showTeacherDropdown = false;\r\n    } else {\r\n      const query = teacherQuery.toLowerCase();\r\n      filteredTeachers = teachers.filter(teacher => \r\n        teacher.name.toLowerCase().includes(query) ||\r\n        (teacher.email && teacher.email.toLowerCase().includes(query))\r\n      );\r\n      // Only show dropdown if no teacher is selected and there are filtered results\r\n      showTeacherDropdown = !selectedTeacher && filteredTeachers.length > 0;\r\n    }\r\n  }\r\n\r\n  // Handle teacher selection\r\n  function selectTeacher(teacher) {\r\n    selectedTeacher = teacher;\r\n    teacherQuery = teacher.name;\r\n    showTeacherDropdown = false;\r\n  }\r\n\r\n  // Clear teacher selection\r\n  function clearTeacherSelection() {\r\n    selectedTeacher = null;\r\n    teacherQuery = '';\r\n    showTeacherDropdown = false;\r\n  }\r\n\r\n  function applyRefreshJob(job) {\r\n    message = job.message || 'Calendar refresh in progress';\r\n    refreshProgress = job.progress || null;\r\n    classesUploaded = job.classes_uploaded || 0;\r\n    classesSkipped = job.classes_skipped || 0;\r\n    warnings = job.warnings || null;\r\n    calendarFailures = job.failures || [];\r\n    if (job.status === 'failed') {\r\n      errorMessage = job.message || 'Database refresh failed.';\r\n    }\r\n  }\r\n\r\n  async function followRefresh(statusUrl, token) {\r\n    pollingController?.abort();\r\n    pollingController = new AbortController();\r\n    sessionStorage.setItem(activeRefreshKey, statusUrl);\r\n    loading = true;\r\n    try {\r\n      const finalJob = await pollCalendarRefresh({\r\n        statusUrl,\r\n        token,\r\n        signal: pollingController.signal,\r\n        onUpdate: applyRefreshJob,\r\n      });\r\n      applyRefreshJob(finalJob);\r\n      sessionStorage.removeItem(activeRefreshKey);\r\n    } catch (error) {\r\n      if (error.name !== 'AbortError') {\r\n        errorMessage = `Failed to check refresh progress: ${error.message}`;\r\n      }\r\n    } finally {\r\n      loading = false;\r\n    }\r\n  }\r\n\r\n  async function refreshDatabase() {\r\n      const token = localStorage.getItem('jwtToken');\r\n      if (!token) {\r\n          errorMessage = 'JWT token not found. Please log in.';\r\n          return;\r\n      }\r\n\r\n      loading = true;\r\n      message = '';\r\n      errorMessage = '';\r\n      warnings = null; // Clear previous warnings\r\n      classesUploaded = 0;\r\n      classesSkipped = 0;\r\n      calendarFailures = [];\r\n      refreshProgress = null;\r\n\r\n      // Parse selected month and year from the dropdown\r\n      const selectedOption = monthOptions.find(option => option.value === selectedMonthYear);\r\n      const monthToRefresh = selectedOption ? selectedOption.month : selectedMonth;\r\n      const yearToRefresh = selectedOption ? selectedOption.year : selectedYear;\r\n      \r\n      // Get selected week data for week refresh\r\n      const selectedWeek = weekOptions.find(option => option.value === selectedWeekOption);\r\n      const weekStartDate = selectedWeek ? selectedWeek.startDate : null;\r\n      const weekEndDate = selectedWeek ? selectedWeek.endDate : null;\r\n\r\n      try {\r\n          const job = await enqueueCalendarRefresh({\r\n              apiBase,\r\n              token,\r\n              payload: {\r\n                  only_refresh_selected: onlyRefreshSelected,\r\n                  google_calendar_id: onlyRefreshSelected && selectedTeacher ? selectedTeacher.googleCalendarId : null,\r\n                  refresh_type: refreshType,\r\n                  selected_month: monthToRefresh,\r\n                  selected_year: yearToRefresh,\r\n                  selected_date: refreshType === 'day' ? selectedDate : null,\r\n                  selected_week_start: refreshType === 'week' ? weekStartDate : null,\r\n                  selected_week_end: refreshType === 'week' ? weekEndDate : null\r\n              },\r\n          });\r\n          applyRefreshJob(job);\r\n          await followRefresh(job.status_url, token);\r\n      } catch (error) {\r\n          errorMessage = `Failed to update: ${error.message}`;\r\n          loading = false;\r\n      }\r\n  }\r\n\r\n  // Reactive statement to filter teachers when search query changes\r\n  $: if (teacherQuery !== undefined) {\r\n    filterTeachers();\r\n  }\r\n\r\n  // Reactive statement to update week options when month/year changes\r\n  $: if (selectedWeekMonth && selectedWeekYear) {\r\n    updateWeekOptions();\r\n  }\r\n\r\n  onMount(() => {\r\n    updateWeekOptions();\r\n    fetchTeachers();\r\n    const token = localStorage.getItem('jwtToken');\r\n    const statusUrl = sessionStorage.getItem(activeRefreshKey);\r\n    if (token && statusUrl) followRefresh(statusUrl, token);\r\n  });\r\n\r\n  onDestroy(() => pollingController?.abort());\r\n</script>\r\n\r\n<!-- HTML/Markup -->\r\n<div class=\"refresh-database-container\">\r\n  <h3>Refresh Database</h3>\r\n  \r\n  <!-- Add radio buttons for refresh type -->\r\n  <div class=\"refresh-options\">\r\n    <label>\r\n      <input type=\"radio\" bind:group={refreshType} value=\"current_month\" />\r\n      Refresh Month\r\n    </label>\r\n    <label>\r\n      <input type=\"radio\" bind:group={refreshType} value=\"week\" />\r\n      Refresh Week\r\n    </label>\r\n    <label>\r\n      <input type=\"radio\" bind:group={refreshType} value=\"day\" />\r\n      Refresh Day\r\n    </label>\r\n    <!-- Temporarily commented out academic year option\r\n    <label>\r\n      <input type=\"radio\" bind:group={refreshType} value=\"academic_year\" />\r\n      Refresh Academic Year\r\n    </label>\r\n    -->\r\n  </div>\r\n\r\n  <!-- Month selection for current month refresh -->\r\n  {#if refreshType === 'current_month'}\r\n    <div class=\"month-selection-section\">\r\n      <label for=\"month-select\">\r\n        <strong>Select Month to Refresh:</strong>\r\n      </label>\r\n      <select \r\n        id=\"month-select\" \r\n        bind:value={selectedMonthYear}\r\n        class=\"month-select\"\r\n      >\r\n        {#each monthOptions as option}\r\n          <option value={option.value}>{option.label}</option>\r\n        {/each}\r\n      </select>\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Day selection for day refresh -->\r\n  {#if refreshType === 'day'}\r\n    <div class=\"date-selection-section\">\r\n      <label for=\"day-select\">\r\n        <strong>Select Day to Refresh:</strong>\r\n      </label>\r\n      <input \r\n        id=\"day-select\" \r\n        type=\"date\" \r\n        bind:value={selectedDate}\r\n        class=\"date-input\"\r\n      />\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Week selection for week refresh -->\r\n  {#if refreshType === 'week'}\r\n    <div class=\"week-selection-section\">\r\n      <label for=\"week-month-select\">\r\n        <strong>Select Month:</strong>\r\n      </label>\r\n      <div class=\"month-year-selectors\">\r\n        <select \r\n          id=\"week-month-select\" \r\n          bind:value={selectedWeekMonth}\r\n          class=\"month-year-select\"\r\n        >\r\n          <option value={1}>January</option>\r\n          <option value={2}>February</option>\r\n          <option value={3}>March</option>\r\n          <option value={4}>April</option>\r\n          <option value={5}>May</option>\r\n          <option value={6}>June</option>\r\n          <option value={7}>July</option>\r\n          <option value={8}>August</option>\r\n          <option value={9}>September</option>\r\n          <option value={10}>October</option>\r\n          <option value={11}>November</option>\r\n          <option value={12}>December</option>\r\n        </select>\r\n        \r\n        <select \r\n          bind:value={selectedWeekYear}\r\n          class=\"month-year-select\"\r\n        >\r\n          <option value={2024}>2024</option>\r\n          <option value={2025}>2025</option>\r\n          <option value={2026}>2026</option>\r\n          <option value={2027}>2027</option>\r\n        </select>\r\n      </div>\r\n      \r\n      <label for=\"week-option-select\">\r\n        <strong>Select Week:</strong>\r\n      </label>\r\n      <select \r\n        id=\"week-option-select\" \r\n        bind:value={selectedWeekOption}\r\n        class=\"week-select\"\r\n      >\r\n        {#each weekOptions as option}\r\n          <option value={option.value}>{option.label}</option>\r\n        {/each}\r\n      </select>\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Show teacher selection for all refresh types -->\r\n  {#if refreshType === 'current_month' || refreshType === 'day' || refreshType === 'week'}\r\n    <div class=\"teacher-selection-section\">\r\n      <label>\r\n        <input type=\"checkbox\" bind:checked={onlyRefreshSelected} />\r\n        Refresh only for a specific teacher\r\n      </label>\r\n\r\n      {#if onlyRefreshSelected}\r\n        <div class=\"input-container\">\r\n          <input \r\n            type=\"text\" \r\n            placeholder=\"Search teacher by name...\"\r\n            bind:value={teacherQuery}\r\n            on:input={() => {\r\n              if (selectedTeacher && teacherQuery !== selectedTeacher.name) {\r\n                selectedTeacher = null;\r\n                showTeacherDropdown = true;\r\n              } else if (!selectedTeacher) {\r\n                showTeacherDropdown = teacherQuery.trim().length > 0;\r\n              }\r\n            }}\r\n            autocomplete=\"off\"\r\n            class=\"search-input\"\r\n          />\r\n          \r\n          {#if showTeacherDropdown}\r\n            <ul class=\"autocomplete-list\">\r\n              {#each filteredTeachers.slice(0, 8) as teacher}\r\n                <li>\r\n                  <button\r\n                    type=\"button\"\r\n                    on:click={() => selectTeacher(teacher)}\r\n                    on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectTeacher(teacher)}\r\n                  >\r\n                    <div class=\"teacher-option\">\r\n                      <span class=\"teacher-name\">{teacher.name}</span>\r\n                      {#if teacher.email}\r\n                        <span class=\"teacher-email\">{teacher.email}</span>\r\n                      {/if}\r\n                    </div>\r\n                  </button>\r\n                </li>\r\n              {/each}\r\n            </ul>\r\n          {/if}\r\n        </div>\r\n        \r\n        {#if selectedTeacher}\r\n          <div class=\"selected-teacher\">\r\n            <div class=\"selected-teacher-info\">\r\n              <strong>Selected Teacher:</strong> {selectedTeacher.name}\r\n              {#if selectedTeacher.email}\r\n                <br><small>Email: {selectedTeacher.email}</small>\r\n              {/if}\r\n            </div>\r\n            \r\n            <button \r\n              type=\"button\" \r\n              class=\"btn-clear\" \r\n              on:click={clearTeacherSelection}\r\n            >\r\n              Clear Selection\r\n            </button>\r\n          </div>\r\n        {/if}\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  <button \r\n    class=\"refresh-button\" \r\n    on:click={refreshDatabase} \r\n    disabled={loading || \r\n              (onlyRefreshSelected && !selectedTeacher) ||\r\n              (refreshType === 'day' && !selectedDate) ||\r\n              (refreshType === 'week' && !selectedWeekOption)}\r\n  >\r\n    {loading ? 'Updating...' : 'Refresh Database'}\r\n  </button>\r\n\r\n  {#if loading && refreshProgress}\r\n    <div class=\"progress-message\" role=\"status\">\r\n      Refreshed {refreshProgress.processed} of {refreshProgress.total} calendars\r\n      {#if refreshProgress.failed > 0}\r\n        ({refreshProgress.failed} failed)\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Display success message -->\r\n  {#if message}\r\n    <div class=\"success-message\" class:has-warnings={(warnings && classesSkipped > 0) || calendarFailures.length > 0}>\r\n      {message}\r\n      {#if classesUploaded > 0}\r\n        <div class=\"stats-info\">\r\n          <span>✓ {classesUploaded} classes uploaded successfully</span>\r\n        </div>\r\n      {/if}\r\n      {#if calendarFailures.length > 0}\r\n        <div class=\"stats-info\">\r\n          {calendarFailures.length} calendar(s) could not be refreshed. You can retry the same refresh safely.\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Display warning message for skipped events -->\r\n  {#if warnings}\r\n    <div class=\"warning-message\">\r\n      <div class=\"warning-header\">\r\n        <span class=\"warning-icon\">⚠</span>\r\n        <strong>WARNING: {warnings.total_skipped} events were skipped during refresh</strong>\r\n      </div>\r\n      \r\n      <div class=\"warning-stats\">\r\n        {#if warnings.missing_location > 0}\r\n          <div class=\"stat-item\">📍 Missing location: {warnings.missing_location}</div>\r\n        {/if}\r\n        {#if warnings.missing_description > 0}\r\n          <div class=\"stat-item\">📝 Missing description: {warnings.missing_description}</div>\r\n        {/if}\r\n        {#if warnings.missing_summary > 0}\r\n          <div class=\"stat-item\">📋 Missing summary: {warnings.missing_summary}</div>\r\n        {/if}\r\n        {#if warnings.missing_organizer > 0}\r\n          <div class=\"stat-item\">👤 Missing organizer: {warnings.missing_organizer}</div>\r\n        {/if}\r\n      </div>\r\n\r\n      <div class=\"skipped-events-list\">\r\n        <div class=\"skipped-header\">Skipped Classes:</div>\r\n        {#each warnings.skipped_events as event}\r\n          <div class=\"skipped-event-item\">\r\n            <div class=\"event-summary\">{event.summary}</div>\r\n            <div class=\"event-details\">\r\n              <span class=\"event-date\">📅 {event.date}</span>\r\n              <span class=\"event-time\">🕒 {event.time}</span>\r\n              <span class=\"event-missing\">Missing: {event.missing_fields.join(', ')}</span>\r\n            </div>\r\n          </div>\r\n        {/each}\r\n        {#if warnings.total_skipped > warnings.skipped_events.length}\r\n          <div class=\"more-events-note\">\r\n            ... and {warnings.total_skipped - warnings.skipped_events.length} more events\r\n          </div>\r\n        {/if}\r\n      </div>\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Display error message -->\r\n  {#if errorMessage}\r\n    <div class=\"error-message\">{errorMessage}</div>\r\n  {/if}\r\n</div>\r\n\r\n<style>\r\n  .refresh-database-container {\r\n    max-width: 600px;\r\n    margin: 0 auto;\r\n    padding: 20px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 8px;\r\n  }\r\n\r\n  .refresh-database-container h3 {\r\n    margin: 0 0 20px 0;\r\n    color: #333;\r\n    text-align: center;\r\n  }\r\n\r\n  .refresh-options {\r\n    margin-bottom: 20px;\r\n    text-align: center;\r\n  }\r\n\r\n  .refresh-options label {\r\n    margin-right: 20px;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .month-selection-section {\r\n    background-color: white;\r\n    padding: 20px;\r\n    border-radius: 8px;\r\n    margin-bottom: 20px;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .month-selection-section label {\r\n    display: block;\r\n    margin-bottom: 10px;\r\n    font-weight: 500;\r\n    color: #333;\r\n  }\r\n\r\n  .month-select {\r\n    width: 100%;\r\n    padding: 12px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    background-color: white;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .month-select:focus {\r\n    outline: none;\r\n    border-color: #4CAF50;\r\n    box-shadow: 0 0 0 2px rgba(76, 175, 80, 0.2);\r\n  }\r\n\r\n  .date-selection-section {\r\n    background-color: white;\r\n    padding: 20px;\r\n    border-radius: 8px;\r\n    margin-bottom: 20px;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .date-selection-section label {\r\n    display: block;\r\n    margin-bottom: 10px;\r\n    font-weight: 500;\r\n    color: #333;\r\n  }\r\n\r\n  .date-input {\r\n    width: 100%;\r\n    padding: 12px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    background-color: white;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .date-input:focus {\r\n    outline: none;\r\n    border-color: #4CAF50;\r\n    box-shadow: 0 0 0 2px rgba(76, 175, 80, 0.2);\r\n  }\r\n\r\n  .week-selection-section {\r\n    background-color: white;\r\n    padding: 20px;\r\n    border-radius: 8px;\r\n    margin-bottom: 20px;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .week-selection-section label {\r\n    display: block;\r\n    margin-bottom: 10px;\r\n    font-weight: 500;\r\n    color: #333;\r\n  }\r\n\r\n  .month-year-selectors {\r\n    display: flex;\r\n    gap: 10px;\r\n    margin-bottom: 15px;\r\n  }\r\n\r\n  .month-year-select {\r\n    flex: 1;\r\n    padding: 12px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    background-color: white;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .month-year-select:focus {\r\n    outline: none;\r\n    border-color: #4CAF50;\r\n    box-shadow: 0 0 0 2px rgba(76, 175, 80, 0.2);\r\n  }\r\n\r\n  .week-select {\r\n    width: 100%;\r\n    padding: 12px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    background-color: white;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .week-select:focus {\r\n    outline: none;\r\n    border-color: #4CAF50;\r\n    box-shadow: 0 0 0 2px rgba(76, 175, 80, 0.2);\r\n  }\r\n\r\n  .teacher-selection-section {\r\n    background-color: white;\r\n    padding: 20px;\r\n    border-radius: 8px;\r\n    margin-bottom: 20px;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .teacher-selection-section label {\r\n    display: block;\r\n    margin-bottom: 15px;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .input-container {\r\n    position: relative;\r\n    margin-top: 15px;\r\n  }\r\n\r\n  .search-input {\r\n    width: 100%;\r\n    padding: 12px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    background-color: white;\r\n  }\r\n\r\n  .search-input:focus {\r\n    outline: none;\r\n    border-color: #4CAF50;\r\n    box-shadow: 0 0 0 2px rgba(76, 175, 80, 0.2);\r\n  }\r\n\r\n  .autocomplete-list {\r\n    position: absolute;\r\n    top: 100%;\r\n    left: 0;\r\n    right: 0;\r\n    background: white;\r\n    border: 1px solid #ddd;\r\n    border-top: none;\r\n    border-radius: 0 0 6px 6px;\r\n    max-height: 200px;\r\n    overflow-y: auto;\r\n    z-index: 1000;\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n    box-shadow: 0 2px 8px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .autocomplete-list li {\r\n    border-bottom: 1px solid #f0f0f0;\r\n  }\r\n\r\n  .autocomplete-list li:last-child {\r\n    border-bottom: none;\r\n  }\r\n\r\n  .autocomplete-list button {\r\n    width: 100%;\r\n    padding: 12px;\r\n    border: none;\r\n    background: none;\r\n    text-align: left;\r\n    cursor: pointer;\r\n    transition: background-color 0.2s ease;\r\n  }\r\n\r\n  .autocomplete-list button:hover {\r\n    background-color: #f5f5f5;\r\n  }\r\n\r\n  .teacher-option {\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n\r\n  .teacher-name {\r\n    font-weight: 500;\r\n    color: #333;\r\n  }\r\n\r\n  .teacher-email {\r\n    font-size: 0.8em;\r\n    color: #666;\r\n    margin-top: 2px;\r\n  }\r\n\r\n  .selected-teacher {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    background-color: #e8f5e8;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n    margin-top: 15px;\r\n    border: 1px solid #c8e6c9;\r\n  }\r\n\r\n  .selected-teacher-info {\r\n    color: #2e7d32;\r\n  }\r\n\r\n  .btn-clear {\r\n    background-color: #f44336;\r\n    color: white;\r\n    border: none;\r\n    padding: 8px 16px;\r\n    border-radius: 4px;\r\n    cursor: pointer;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .btn-clear:hover {\r\n    background-color: #d32f2f;\r\n  }\r\n\r\n  .refresh-button {\r\n    width: 100%;\r\n    padding: 12px 20px;\r\n    background-color: #4CAF50;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 6px;\r\n    cursor: pointer;\r\n    font-size: 16px;\r\n    font-weight: 500;\r\n    transition: background-color 0.2s ease;\r\n  }\r\n\r\n  .refresh-button:hover:not(:disabled) {\r\n    background-color: #45a049;\r\n  }\r\n\r\n  .refresh-button:disabled {\r\n    background-color: #cccccc;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  .progress-message {\r\n    margin-top: 12px;\r\n    color: #1f4b75;\r\n    text-align: center;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .success-message {\r\n    color: #2e7d32;\r\n    background: #e8f5e8;\r\n    padding: 12px;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #2e7d32;\r\n    margin-top: 20px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .success-message.has-warnings {\r\n    color: #ed6c02;\r\n    background: #fff4e5;\r\n    border-left-color: #ed6c02;\r\n  }\r\n\r\n  .stats-info {\r\n    margin-top: 8px;\r\n    font-size: 0.85em;\r\n    opacity: 0.9;\r\n  }\r\n\r\n  .warning-message {\r\n    color: #ed6c02;\r\n    background: #fff4e5;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #ed6c02;\r\n    margin-top: 15px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .warning-header {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    margin-bottom: 12px;\r\n  }\r\n\r\n  .warning-icon {\r\n    font-size: 1.2em;\r\n  }\r\n\r\n  .warning-stats {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: 8px;\r\n    margin-bottom: 15px;\r\n    padding: 10px;\r\n    background: rgba(255, 255, 255, 0.5);\r\n    border-radius: 4px;\r\n  }\r\n\r\n  .stat-item {\r\n    font-size: 0.85em;\r\n    padding: 5px;\r\n  }\r\n\r\n  .skipped-events-list {\r\n    margin-top: 12px;\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n    border-top: 1px solid rgba(237, 108, 2, 0.3);\r\n    padding-top: 12px;\r\n  }\r\n\r\n  .skipped-header {\r\n    font-weight: 600;\r\n    margin-bottom: 10px;\r\n    font-size: 0.95em;\r\n  }\r\n\r\n  .skipped-event-item {\r\n    background: white;\r\n    padding: 10px;\r\n    border-radius: 4px;\r\n    margin-bottom: 8px;\r\n    border: 1px solid rgba(237, 108, 2, 0.2);\r\n  }\r\n\r\n  .event-summary {\r\n    font-weight: 600;\r\n    color: #333;\r\n    margin-bottom: 6px;\r\n    font-size: 0.95em;\r\n  }\r\n\r\n  .event-details {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 12px;\r\n    font-size: 0.8em;\r\n    color: #666;\r\n  }\r\n\r\n  .event-date,\r\n  .event-time {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 4px;\r\n  }\r\n\r\n  .event-missing {\r\n    color: #d32f2f;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .more-events-note {\r\n    margin-top: 10px;\r\n    font-style: italic;\r\n    text-align: center;\r\n    color: #666;\r\n    font-size: 0.85em;\r\n  }\r\n\r\n  .error-message {\r\n    color: #d32f2f;\r\n    background: #ffebee;\r\n    padding: 12px;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #d32f2f;\r\n    margin-top: 20px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  /* Mobile responsiveness */\r\n  @media (max-width: 600px) {\r\n    .refresh-database-container {\r\n      padding: 15px;\r\n    }\r\n\r\n    .refresh-options {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 10px;\r\n    }\r\n\r\n    .refresh-options label {\r\n      margin-bottom: 0;\r\n      margin-right: 0;\r\n    }\r\n\r\n    .selected-teacher {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 10px;\r\n    }\r\n\r\n    .warning-stats {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .event-details {\r\n      flex-direction: column;\r\n      gap: 6px;\r\n    }\r\n\r\n    .skipped-events-list {\r\n      max-height: 300px;\r\n    }\r\n  }\r\n</style>\r\n","<script>\r\n    export let label;  // Label for the rating (e.g., \"Learned\", \"Effort\", etc.)\r\n    export let rating; // The actual rating value (number between 1 and 5)\r\n\r\n    // Function to determine the class for the rating number based on its value\r\n    function getRatingClass(rating) {\r\n        if (rating === 1) return 'rating-red';\r\n        if (rating === 2) return 'rating-orange';\r\n        if (rating === 3) return 'rating-yellow';\r\n        if (rating === 4) return 'rating-yellow-green';\r\n        if (rating === 5) return 'rating-green';\r\n        return ''; // Default case\r\n    }\r\n</script>\r\n\r\n<style>\r\n    .rating-box {\r\n        display: flex;\r\n        align-items: center;\r\n        margin-bottom: 0.5rem;\r\n        flex-direction: column;\r\n    }\r\n\r\n\r\n    .rating-box span {\r\n        flex: 1;\r\n        font-weight: bold;\r\n    }\r\n\r\n    .rating-box .rating-value {\r\n        flex: 2;\r\n        font-size: 1.5rem;\r\n        font-weight: bold;\r\n    }\r\n\r\n    /* Rating colors */\r\n    .rating-red {\r\n        color: red;\r\n    }\r\n\r\n    .rating-orange {\r\n        color: orange;\r\n    }\r\n\r\n    .rating-yellow {\r\n        color: #e8e531\r\n    }\r\n\r\n    .rating-yellow-green {\r\n        color: #9acd32; /* Between yellow and green */\r\n    }\r\n\r\n    .rating-green {\r\n        color: green;\r\n    }\r\n</style>\r\n\r\n<div class=\"rating-box\">\r\n    <span>{label}</span>\r\n    <div class=\"rating-value {getRatingClass(rating)}\">{rating}</div>\r\n</div>\r\n","<script>\r\n    export let label;\r\n</script>\r\n<div class=\"noteDiv\">\r\n    {label}\r\n</div>\r\n<style>\r\n    .noteDiv {\r\n        background-color: transparent;\r\n        width: 100%;\r\n        border-radius: 6px;\r\n        display: flex;\r\n        justify-content: space-around;\r\n        padding: 10px; /* Add padding to move the content */\r\n        box-sizing: border-box;\r\n        border: 2px solid #baccff;\r\n    }\r\n</style>","<script>\r\n    export let onTime;\r\n  </script>\r\n  \r\n  <style>\r\n    .status {\r\n        display: flex;\r\n        align-items: center;\r\n        font-size: 1.1rem;\r\n        margin: 10px 0;\r\n        justify-content: center;\r\n        height: 80px;\r\n        }\r\n  \r\n    .text {\r\n      margin-left: 8px;\r\n    }\r\n  \r\n    .green-check {\r\n      color: #58ff04\r\n    }\r\n  \r\n    .red-cross {\r\n      color: red;\r\n    }\r\n  </style>\r\n  \r\n  <div class=\"status\">\r\n    {#if onTime}\r\n      <span class=\"green-check\">✅</span>\r\n      <span class=\"text\">Atejo laiku i pamoka</span>\r\n    {:else}\r\n      <span class=\"red-cross\">❌</span>\r\n      <span class=\"text\">Velavo i pamoka</span>\r\n    {/if}\r\n  </div>\r\n  ","<script>\r\n\timport { createEventDispatcher } from 'svelte';\r\n\timport { getApiBase } from './apiBase.js';\r\n\r\n\texport let selectedStudent = null;\r\n\texport let placeholder = 'Search students by name, username, or email...';\r\n\r\n\tconst dispatch = createEventDispatcher();\r\n\r\n\tlet searchTerm = '';\r\n\tlet searchResults = [];\r\n\tlet isSearching = false;\r\n\tlet debounceTimer = null;\r\n\tlet abortController = null;\r\n\tlet lastRequestId = 0;\r\n\r\n\t$: if (!selectedStudent && searchTerm && searchTerm.trim().length >= 2) {\r\n\t\tdebouncedSearch(searchTerm.trim());\r\n\t} else if (!selectedStudent && (!searchTerm || searchTerm.trim().length < 2)) {\r\n\t\tif (debounceTimer) clearTimeout(debounceTimer);\r\n\t\tdebounceTimer = null;\r\n\t\tif (abortController) abortController.abort();\r\n\t\tabortController = null;\r\n\t\tsearchResults = [];\r\n\t}\r\n\r\n\tfunction debouncedSearch(term) {\r\n\t\tif (debounceTimer) clearTimeout(debounceTimer);\r\n\t\tdebounceTimer = setTimeout(() => {\r\n\t\t\tsearchStudents(term);\r\n\t\t}, 250);\r\n\t}\r\n\r\n\tasync function searchStudents(term) {\r\n\t\tconst requestId = ++lastRequestId;\r\n\t\tisSearching = true;\r\n\t\tif (abortController) abortController.abort();\r\n\t\tabortController = new AbortController();\r\n\t\ttry {\r\n\t\t\tconst apiBase = getApiBase();\r\n\t\t\tconst response = await fetch(`${apiBase}/studentplayground/api/admin/search-students/`, {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\tsignal: abortController.signal,\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t\tAuthorization: `Bearer ${localStorage.getItem('jwtToken')}`,\r\n\t\t\t\t},\r\n\t\t\t\tbody: JSON.stringify({ search_term: term }),\r\n\t\t\t});\r\n\r\n\t\t\tif (!response.ok) {\r\n\t\t\t\tif (requestId === lastRequestId) searchResults = [];\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst data = await response.json();\r\n\t\t\tif (requestId === lastRequestId) {\r\n\t\t\t\tsearchResults = data?.students || [];\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\tif (e?.name !== 'AbortError' && requestId === lastRequestId) {\r\n\t\t\t\tsearchResults = [];\r\n\t\t\t}\r\n\t\t} finally {\r\n\t\t\tif (requestId === lastRequestId) isSearching = false;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction selectStudent(student) {\r\n\t\tdispatch('studentSelected', student);\r\n\t\tsearchResults = [];\r\n\t}\r\n\r\n\tfunction clearSelection() {\r\n\t\tdispatch('studentCleared');\r\n\t}\r\n</script>\r\n\r\n<div class=\"student-search\">\r\n\t<div class=\"search-row\">\r\n\t\t<input\r\n\t\t\tclass=\"search-input\"\r\n\t\t\ttype=\"text\"\r\n\t\t\tbind:value={searchTerm}\r\n\t\t\tplaceholder={placeholder}\r\n\t\t\tdisabled={!!selectedStudent}\r\n\t\t/>\r\n\t\t{#if isSearching}\r\n\t\t\t<div class=\"spinner\" aria-label=\"Searching\">⌛</div>\r\n\t\t{/if}\r\n\t\t{#if selectedStudent}\r\n\t\t\t<button type=\"button\" class=\"change-btn\" on:click={clearSelection}>Change</button>\r\n\t\t{/if}\r\n\t</div>\r\n\r\n\t{#if selectedStudent}\r\n\t\t<div class=\"selected-card\">\r\n\t\t\t<div class=\"name\">{selectedStudent.first_name} {selectedStudent.last_name}</div>\r\n\t\t\t<div class=\"meta\">@{selectedStudent.username} • {selectedStudent.email}</div>\r\n\t\t\t{#if selectedStudent.phone_number}\r\n\t\t\t\t<div class=\"meta\">📱 {selectedStudent.phone_number}</div>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\t{/if}\r\n\r\n\t{#if searchResults.length > 0 && !selectedStudent}\r\n\t\t<div class=\"results\" role=\"listbox\" aria-label=\"Student search results\">\r\n\t\t\t{#each searchResults as student}\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"result\"\r\n\t\t\t\t\trole=\"option\"\r\n\t\t\t\t\ttabindex=\"0\"\r\n\t\t\t\t\ton:click={() => selectStudent(student)}\r\n\t\t\t\t\ton:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectStudent(student)}\r\n\t\t\t\t>\r\n\t\t\t\t\t<div class=\"name\">{student.first_name} {student.last_name}</div>\r\n\t\t\t\t\t<div class=\"meta\">@{student.username} • {student.email}</div>\r\n\t\t\t\t\t{#if student.phone_number}\r\n\t\t\t\t\t\t<div class=\"meta\">📱 {student.phone_number}</div>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t</div>\r\n\t\t\t{/each}\r\n\t\t</div>\r\n\t{:else if !selectedStudent && !isSearching && searchTerm && searchTerm.trim().length >= 2}\r\n\t\t<div class=\"no-results\">No students found.</div>\r\n\t{/if}\r\n</div>\r\n\r\n<style>\r\n\t.student-search {\r\n\t\tposition: relative;\r\n\t\twidth: 100%;\r\n\t}\r\n\r\n\t.search-row {\r\n\t\tdisplay: flex;\r\n\t\tgap: 10px;\r\n\t\talign-items: center;\r\n\t}\r\n\r\n\t.search-input {\r\n\t\tflex: 1;\r\n\t\twidth: 100%;\r\n\t\tpadding: 12px 14px;\r\n\t\tborder: 1px solid #ccc;\r\n\t\tborder-radius: 8px;\r\n\t\tfont-size: 14px;\r\n\t}\r\n\r\n\t.search-input:disabled {\r\n\t\tbackground: #f7f7f7;\r\n\t\tcursor: not-allowed;\r\n\t}\r\n\r\n\t.spinner {\r\n\t\tfont-size: 12px;\r\n\t\tcolor: #666;\r\n\t}\r\n\r\n\t.change-btn {\r\n\t\tpadding: 10px 14px;\r\n\t\tborder: 1px solid #ccc;\r\n\t\tbackground: white;\r\n\t\tborder-radius: 8px;\r\n\t\tcursor: pointer;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\r\n\t.selected-card {\r\n\t\tmargin-top: 12px;\r\n\t\tpadding: 12px 14px;\r\n\t\tborder-radius: 8px;\r\n\t\tborder: 1px solid #bcdcff;\r\n\t\tbackground: #e7f3ff;\r\n\t}\r\n\r\n\t.results {\r\n\t\tmargin-top: 8px;\r\n\t\tborder: 1px solid #e0e0e0;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground: white;\r\n\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\r\n\t\tmax-height: 320px;\r\n\t\toverflow: auto;\r\n\t}\r\n\r\n\t.result {\r\n\t\tpadding: 10px 12px;\r\n\t\tborder-bottom: 1px solid #f0f0f0;\r\n\t\tcursor: pointer;\r\n\t\toutline: none;\r\n\t}\r\n\r\n\t.result:hover,\r\n\t.result:focus {\r\n\t\tbackground: #f8f9fa;\r\n\t}\r\n\r\n\t.result:last-child {\r\n\t\tborder-bottom: none;\r\n\t}\r\n\r\n\t.name {\r\n\t\tfont-weight: 600;\r\n\t\tcolor: #222;\r\n\t}\r\n\r\n\t.meta {\r\n\t\tcolor: #666;\r\n\t\tfont-size: 12px;\r\n\t\tmargin-top: 2px;\r\n\t}\r\n\r\n\t.no-results {\r\n\t\tmargin-top: 8px;\r\n\t\tpadding: 12px 14px;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground: #f8f9fa;\r\n\t\tborder: 1px solid #e0e0e0;\r\n\t\tcolor: #666;\r\n\t}\r\n</style>\r\n\r\n","<script>\r\n    import { writable } from 'svelte/store';\r\n    import RatingDisplayComponent from './RatingDisplayComponent.svelte';\r\n    import TextDisplayForAdminComments from './TextDisplayForAdminComments.svelte';\r\n    import ClassNameComponent from './ClassNameComponent.svelte';\r\n    import TimeShower from './TimeShowerComponent.svelte';\r\n    import CameOnTimeDisplay from './CameOnTimeDisplay.svelte';\r\n    import TeacherNameComponent from './TeacherNameComponent.svelte';\r\n    import StudentSearchComponent from './StudentSearchComponent.svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n\r\n    export let studentId = null;\r\n    export let embedded = false;\r\n\r\n    // Stores for form data\r\n    let selectedStudent = writable(\"\");\r\n    let comments = writable(null);\r\n    let lastAutoLoadedStudentId = null;\r\n    let selectedStudentObj = null;\r\n    const apiBase = getApiBase();\r\n\r\n    const formatDateTime = (datetime) => {\r\n        let parts = datetime.split(\" \");\r\n        let datePart = parts[0];\r\n        let timePart = parts[1];\r\n        let dayPart = parts[2];\r\n\r\n        let formattedDate = `${dayPart}<br>${datePart}`;\r\n            return { timePart, formattedDate };\r\n    };\r\n\r\n    // Auto-load when embedded + studentId changes\r\n    $: if (embedded && studentId && studentId !== lastAutoLoadedStudentId) {\r\n        lastAutoLoadedStudentId = studentId;\r\n        selectedStudent.set(String(studentId));\r\n        comments.set(null);\r\n        getComments();\r\n    }\r\n\r\n    // Function to fetch comments for the selected student\r\n    async function getComments() {\r\n        if (!$selectedStudent) return;\r\n\r\n        const payload = { student: $selectedStudent };  // Use selected student's ID\r\n\r\n        try {\r\n            const token = localStorage.getItem('jwtToken');\r\n            const response = await fetch(`${apiBase}/studentplayground/get_comments_admin`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                },\r\n                body: JSON.stringify(payload)\r\n            });\r\n\r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                comments.set(data.comments); // Set comments data\r\n            } else {\r\n                console.error(\"Error fetching comments\");\r\n                comments.set([{ error: \"No comments found for this student\" }]);\r\n            }\r\n        } catch (error) {\r\n            console.error(\"Request failed:\", error);\r\n            comments.set([{ error: \"Request failed\" }]);\r\n        }\r\n    }\r\n\r\n    function handleStudentSelected(event) {\r\n        const student = event?.detail;\r\n        if (!student?.id) return;\r\n        selectedStudentObj = student;\r\n        selectedStudent.set(String(student.id));\r\n        comments.set(null);\r\n        getComments();\r\n    }\r\n\r\n    function handleStudentCleared() {\r\n        selectedStudentObj = null;\r\n        selectedStudent.set(\"\");\r\n        comments.set(null);\r\n    }\r\n</script>\r\n\r\n<!-- UI for selecting the student and fetching comments -->\r\n<div class=\"container\">\r\n    <h2>Student Comments Viewer</h2>\r\n\r\n    {#if !embedded}\r\n        <StudentSearchComponent\r\n            selectedStudent={selectedStudentObj}\r\n            on:studentSelected={handleStudentSelected}\r\n            on:studentCleared={handleStudentCleared}\r\n        />\r\n\r\n        {#if $selectedStudent}\r\n            <button on:click={getComments}>Reload Comments</button>\r\n        {/if}\r\n    {/if}\r\n\r\n\r\n\r\n    <!-- Display Comments -->\r\n    <div class=\"display-box\">\r\n        {#if $comments}\r\n            {#if $comments[0]?.error}\r\n                <p class=\"error\">Error: {$comments[0].error}</p>\r\n            {:else}\r\n                <!-- Iterate over grouped comments, display paired student and teacher comments -->\r\n                {#each $comments as commentGroup}\r\n                    <div class=\"comment-group\">\r\n                        <div class=\"displayComps\">\r\n                        <ClassNameComponent name={commentGroup.class_name}/>\r\n                        <TimeShower \r\n                            time={formatDateTime(commentGroup.displayTime).timePart} \r\n                            date={formatDateTime(commentGroup.displayTime).formattedDate} \r\n                        />\r\n                        <TeacherNameComponent teacher={commentGroup.teacher_name}/>\r\n                    </div>\r\n                        <div class=\"side-by-side\">\r\n                            <!-- Student comment -->\r\n                            <div class=\"student-comment\">\r\n                                <h3>Student Comment:</h3>\r\n                                {#if commentGroup.student_comment}\r\n                                    <RatingDisplayComponent label=\"Learned\" rating={commentGroup.student_comment.learned} />\r\n                                    <RatingDisplayComponent label=\"Technical Issues\" rating={commentGroup.student_comment.technical_issues} />\r\n                                    <RatingDisplayComponent label=\"Effort\" rating={commentGroup.student_comment.effort} />\r\n                                    <RatingDisplayComponent label=\"General\" rating={commentGroup.student_comment.general} />\r\n                                    <CameOnTimeDisplay onTime={commentGroup.student_comment.on_time}/>\r\n                                    <TextDisplayForAdminComments label={commentGroup.student_comment.note} />\r\n                                    \r\n                                {:else}\r\n                                    <p>No comment from student</p>\r\n                                {/if}\r\n                            </div>\r\n\r\n                            <!-- Teacher comment -->\r\n                            <div class=\"teacher-comment\">\r\n                                <div class=\"teacherComment\">\r\n                                <h3>Teacher Comment:</h3>\r\n                                </div>\r\n                                {#if commentGroup.teacher_comment}\r\n                                    <RatingDisplayComponent label=\"Learned\" rating={commentGroup.teacher_comment.learned} />\r\n                                    <RatingDisplayComponent label=\"Technical Issues\" rating={commentGroup.teacher_comment.technical_issues} />\r\n                                    <RatingDisplayComponent label=\"Effort\" rating={commentGroup.teacher_comment.effort} />\r\n                                    <RatingDisplayComponent label=\"General\" rating={commentGroup.teacher_comment.general} />\r\n                                    <CameOnTimeDisplay onTime={commentGroup.teacher_comment.on_time}/>\r\n                                    <TextDisplayForAdminComments label={commentGroup.teacher_comment.note} />\r\n                                    \r\n                                {:else}\r\n                                    <p>No comment from teacher</p>\r\n                                {/if}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                {/each}\r\n            {/if}\r\n        {:else}\r\n            <p>No data yet. Click the button to load comments.</p>\r\n        {/if}\r\n    </div>\r\n</div>\r\n\r\n<style>\r\n    h2{\r\n        color:black;\r\n    }\r\n    .displayComps{\r\n        display: flex;\r\n    \r\n        flex-direction: column;\r\n        align-items: center;\r\n        text-align:center;\r\n    }\r\n    .teacher-comment{\r\n        text-align:center;\r\n    }\r\n    .student-comment{\r\n        text-align:center;\r\n    }\r\n    .comment-group {\r\n        margin-bottom: 2rem;\r\n        padding: 1rem;\r\n        border: 1px solid #ccc;\r\n        background-color: #f9f9f9;\r\n        border-radius: 5px;\r\n\r\n    }\r\n\r\n    .side-by-side {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        gap: 20px;\r\n    }\r\n\r\n    .student-comment, .teacher-comment {\r\n        width: 48%;\r\n        \r\n        border: 1px solid #ddd;\r\n        border-radius: 5px;\r\n        background-color: #fff;\r\n    }\r\n\r\n    .student-comment {\r\n        background-color: #f0f8ff; /* Light blue for distinction */\r\n    }\r\n\r\n    .teacher-comment {\r\n        background-color: #f5f5dc; /* Light beige for distinction */\r\n    }\r\n</style>\r\n","<script>\r\n  import { onMount } from 'svelte';\r\n  import { getApiBase } from './apiBase.js';\r\n\r\n  const endpoint = `${getApiBase()}/studentplayground/api/admin/account-creation/students/`;\r\n  const databaseLabels = {\r\n    username: 'Username', first_name: 'First name', last_name: 'Last name',\r\n    student_email: 'Student email', google_cal_searchable: 'Calendar name',\r\n    grade: 'Grade', student_phone: 'Student phone', parent_name: 'Parent name',\r\n    parent_email: 'Parent email', parent_phone: 'Parent phone',\r\n    special_conditions: 'Special conditions',\r\n  };\r\n  const spreadsheetLabels = {\r\n    student_name: 'Student name', grade: 'Grade', student_phone: 'Student phone',\r\n    parent_phone: 'Parent phone', student_email: 'Student email',\r\n    parent_name: 'Parent name', parent_email: 'Parent email',\r\n    special_conditions: 'Special conditions',\r\n  };\r\n\r\n  let query = '';\r\n  let rows = [];\r\n  let page = 1;\r\n  let hasMore = false;\r\n  let loading = false;\r\n  let error = '';\r\n  let selectedId = null;\r\n  let detail = null;\r\n  let detailLoading = false;\r\n  let resendOpen = false;\r\n  let selectedRecipients = [];\r\n  let resending = false;\r\n  let feedback = '';\r\n  let feedbackIsError = false;\r\n  let searchTimer;\r\n  let requestSequence = 0;\r\n  let editing = false;\r\n  let editForm = {};\r\n  let saving = false;\r\n  let deleteOpen = false;\r\n  let deleteUsername = '';\r\n  let deleting = false;\r\n  let notice = '';\r\n  const conditionOptions = ['Special Needs', 'IB', 'Lithuanian Second Language'];\r\n  $: busy = saving || deleting || resending;\r\n\r\n  function statusLabel(value) {\r\n    return ({ complete: 'Complete', incomplete: 'Incomplete', success: 'Successful',\r\n      failed: 'Failed', partial: 'Partial', sending: 'Sending', pending: 'Pending',\r\n      unknown: 'Unknown', unavailable: 'Unavailable' })[value] || 'Unknown';\r\n  }\r\n\r\n  function authHeaders() {\r\n    const token = localStorage.getItem('jwtToken');\r\n    return token ? { Authorization: `Bearer ${token}` } : {};\r\n  }\r\n\r\n  async function responseBody(response) {\r\n    const body = await response.json().catch(() => ({}));\r\n    if (!response.ok) {\r\n      const fields = body.fields ? Object.entries(body.fields).map(([key, messages]) => `${databaseLabels[key] || key}: ${messages.join(', ')}`).join(' ') : '';\r\n      throw new Error(fields || body.error || body.detail || `Request failed (${response.status}).`);\r\n    }\r\n    return body;\r\n  }\r\n\r\n  async function loadList(nextPage = 1) {\r\n    const sequence = ++requestSequence;\r\n    loading = true;\r\n    error = '';\r\n    try {\r\n      const params = new URLSearchParams({ page: String(nextPage) });\r\n      if (query.trim()) params.set('q', query.trim());\r\n      const data = await responseBody(await fetch(`${endpoint}?${params}`, { headers: authHeaders() }));\r\n      if (sequence !== requestSequence) return;\r\n      rows = data.results || [];\r\n      page = data.page || nextPage;\r\n      hasMore = !!data.has_more;\r\n    } catch (cause) {\r\n      if (sequence === requestSequence) error = cause.message;\r\n    } finally {\r\n      if (sequence === requestSequence) loading = false;\r\n    }\r\n  }\r\n\r\n  function queueSearch() {\r\n    clearTimeout(searchTimer);\r\n    searchTimer = setTimeout(() => loadList(1), 250);\r\n  }\r\n\r\n  async function selectStudent(id) {\r\n    if (selectedId === id) {\r\n      selectedId = null;\r\n      detail = null;\r\n      return;\r\n    }\r\n    selectedId = id;\r\n    detail = null;\r\n    detailLoading = true;\r\n    feedback = '';\r\n    resendOpen = false;\r\n    editing = false;\r\n    deleteOpen = false;\r\n    notice = '';\r\n    try {\r\n      const data = await responseBody(await fetch(`${endpoint}${id}/`, { headers: authHeaders() }));\r\n      if (selectedId === id) detail = data;\r\n    } catch (cause) {\r\n      if (selectedId === id) error = cause.message;\r\n    } finally {\r\n      if (selectedId === id) detailLoading = false;\r\n    }\r\n  }\r\n\r\n  export async function refreshAndSelect(id) {\r\n    query = '';\r\n    await loadList(1);\r\n    selectedId = null;\r\n    await selectStudent(id);\r\n  }\r\n\r\n  function toggleRecipient(email) {\r\n    selectedRecipients = selectedRecipients.includes(email)\r\n      ? selectedRecipients.filter(item => item !== email)\r\n      : [...selectedRecipients, email];\r\n  }\r\n\r\n  function applyDetail(updated) {\r\n    detail = updated;\r\n    rows = rows.map(row => row.id === updated.id ? {\r\n      ...row, username: updated.username, display_name: updated.display_name,\r\n      email_status: updated.email.status, spreadsheet_status: updated.spreadsheet.status,\r\n      database_status: updated.database.status,\r\n    } : row);\r\n  }\r\n\r\n  function beginEdit() {\r\n    editForm = Object.fromEntries(Object.keys(databaseLabels).map(key => [key,\r\n      key === 'special_conditions' ? [...(detail.database[key] || [])] : String(detail.database[key] || '')]));\r\n    editing = true;\r\n    resendOpen = false;\r\n    deleteOpen = false;\r\n    feedback = '';\r\n  }\r\n\r\n  async function saveAppData() {\r\n    if (!detail || busy) return;\r\n    saving = true;\r\n    feedback = '';\r\n    feedbackIsError = false;\r\n    try {\r\n      const updated = await responseBody(await fetch(`${endpoint}${detail.id}/`, {\r\n        method: 'PATCH', headers: { ...authHeaders(), 'Content-Type': 'application/json' },\r\n        body: JSON.stringify(editForm),\r\n      }));\r\n      applyDetail(updated);\r\n      editing = false;\r\n      feedback = 'App data saved.';\r\n    } catch (cause) {\r\n      feedback = cause.message;\r\n      feedbackIsError = true;\r\n    } finally {\r\n      saving = false;\r\n    }\r\n  }\r\n\r\n  async function deleteUser() {\r\n    if (!detail || busy || deleteUsername !== detail.username) return;\r\n    deleting = true;\r\n    feedback = '';\r\n    feedbackIsError = false;\r\n    try {\r\n      await responseBody(await fetch(`${endpoint}${detail.id}/`, {\r\n        method: 'DELETE', headers: { ...authHeaders(), 'Content-Type': 'application/json' },\r\n        body: JSON.stringify({ confirmation_username: deleteUsername }),\r\n      }));\r\n      rows = rows.filter(row => row.id !== detail.id);\r\n      detail = null;\r\n      selectedId = null;\r\n      deleteOpen = false;\r\n      await loadList(page);\r\n      if (page > 1 && !rows.length) await loadList(page - 1);\r\n      notice = 'User deleted.';\r\n    } catch (cause) {\r\n      feedback = cause.message;\r\n      feedbackIsError = true;\r\n    } finally {\r\n      deleting = false;\r\n    }\r\n  }\r\n\r\n  async function confirmResend() {\r\n    if (!detail || !selectedRecipients.length || resending) return;\r\n    resending = true;\r\n    feedback = '';\r\n    feedbackIsError = false;\r\n    try {\r\n      const updated = await responseBody(await fetch(`${endpoint}${detail.id}/resend/`, {\r\n        method: 'POST',\r\n        headers: { ...authHeaders(), 'Content-Type': 'application/json' },\r\n        body: JSON.stringify({ recipients: selectedRecipients }),\r\n      }));\r\n      applyDetail(updated);\r\n      const accepted = (updated.resend_results || []).filter(item => item.success).map(item => item.email);\r\n      const failed = (updated.resend_results || []).filter(item => !item.success).map(item => item.email);\r\n      feedbackIsError = failed.length > 0;\r\n      feedback = [\r\n        ...accepted.map(email => `Email accepted for ${email}`),\r\n        ...failed.map(email => `Email failed for ${email}`),\r\n      ].join('. ');\r\n      resendOpen = false;\r\n      selectedRecipients = [];\r\n    } catch (cause) {\r\n      feedback = cause.message;\r\n      feedbackIsError = true;\r\n    } finally {\r\n      resending = false;\r\n    }\r\n  }\r\n\r\n  onMount(() => {\r\n    loadList();\r\n    return () => clearTimeout(searchTimer);\r\n  });\r\n</script>\r\n\r\n<section class=\"creation-status\" aria-label=\"Student creation status\">\r\n  <h3>Student creation status</h3>\r\n  <label for=\"creation-status-search\">Search student creation status</label>\r\n  <input id=\"creation-status-search\" type=\"search\" bind:value={query} on:input={queueSearch}\r\n    placeholder=\"Name, username, or email\" disabled={busy} />\r\n  {#if loading}<p role=\"status\">Loading students…</p>{/if}\r\n  {#if error}<p class=\"error\" role=\"alert\">{error}</p>{/if}\r\n  {#if notice}<p role=\"status\">{notice}</p>{/if}\r\n\r\n  {#if !loading && !rows.length && !error}\r\n    <p>No students found.</p>\r\n  {/if}\r\n  <ul class=\"students\">\r\n    {#each rows as row (row.id)}\r\n      <li>\r\n        <button type=\"button\" class=\"student-row\" aria-expanded={selectedId === row.id}\r\n          disabled={busy} on:click={() => selectStudent(row.id)}>\r\n          <strong>{row.display_name}</strong><span>@{row.username}</span>\r\n          <small class:good={row.database_status === 'complete'} class:warn={row.database_status === 'incomplete'}>Database: {statusLabel(row.database_status)}</small>\r\n          <small class:good={row.spreadsheet_status === 'success'} class:warn={row.spreadsheet_status === 'failed'}>Spreadsheet: {statusLabel(row.spreadsheet_status)}</small>\r\n          <small class:good={row.email_status === 'success'} class:warn={row.email_status === 'failed' || row.email_status === 'partial'}>Email: {statusLabel(row.email_status)}</small>\r\n        </button>\r\n        {#if selectedId === row.id}\r\n          {#if detailLoading}<p role=\"status\">Loading account…</p>{/if}\r\n          {#if detail}\r\n            <div class=\"student-detail\">\r\n              <h4>Tutory App database <span>{statusLabel(detail.database.status)}</span></h4>\r\n              {#if editing}\r\n                <form class=\"edit-form\" aria-label=\"Edit app data\" on:submit|preventDefault={saveAppData}>\r\n                  {#each Object.entries(databaseLabels).filter(([key]) => key !== 'special_conditions') as [key, label]}\r\n                    <label>{label}\r\n                      {#if key === 'grade'}\r\n                        <input type=\"number\" min=\"1\" max=\"13\" step=\"1\" required bind:value={editForm[key]} disabled={saving} />\r\n                      {:else if key === 'student_email' || key === 'parent_email'}\r\n                        <input type=\"email\" maxlength=\"254\" required bind:value={editForm[key]} disabled={saving} />\r\n                      {:else}\r\n                        <input type=\"text\" maxlength={key.includes('phone') ? 15 : key === 'google_cal_searchable' ? 50 : key === 'parent_name' ? 301 : 150}\r\n                          required={key !== 'parent_phone'} bind:value={editForm[key]} disabled={saving} />\r\n                      {/if}\r\n                    </label>\r\n                  {/each}\r\n                  <fieldset disabled={saving}>\r\n                    <legend>Special conditions</legend>\r\n                    {#each conditionOptions as condition}\r\n                      <label class=\"recipient\"><input type=\"checkbox\" value={condition} bind:group={editForm.special_conditions} /> {condition}</label>\r\n                    {/each}\r\n                  </fieldset>\r\n                  <p>Changes update app data. The spreadsheet section keeps the creation snapshot.</p>\r\n                  <div class=\"actions\">\r\n                    <button type=\"submit\" disabled={saving}>{saving ? 'Saving…' : 'Save app data'}</button>\r\n                    <button type=\"button\" disabled={saving} on:click={() => { editing = false; feedback = ''; }}>Cancel editing</button>\r\n                  </div>\r\n                  {#if feedback}<p class:error={feedbackIsError} class:success={!feedbackIsError} role={feedbackIsError ? 'alert' : 'status'}>{feedback}</p>{/if}\r\n                </form>\r\n              {:else}\r\n              <dl>\r\n                {#each Object.entries(databaseLabels) as [key, label]}\r\n                  <dt>{label}</dt><dd>{Array.isArray(detail.database[key]) ? (detail.database[key].join(', ') || 'None') : (detail.database[key] || 'Missing')}</dd>\r\n                {/each}\r\n              </dl>\r\n              <button type=\"button\" disabled={busy} on:click={beginEdit}>Edit app data</button>\r\n              {/if}\r\n              {#if !editing && feedback}<p class:error={feedbackIsError} class:success={!feedbackIsError} role={feedbackIsError ? 'alert' : 'status'}>{feedback}</p>{/if}\r\n              <h4>Student spreadsheet <span>{statusLabel(detail.spreadsheet.status)}</span></h4>\r\n              <dl>\r\n                {#each Object.entries(spreadsheetLabels) as [key, label]}\r\n                  <dt>{label}</dt><dd>{Array.isArray(detail.spreadsheet.fields[key]) ? (detail.spreadsheet.fields[key].join(', ') || 'None') : (detail.spreadsheet.fields[key] || 'Blank')}</dd>\r\n                {/each}\r\n              </dl>\r\n              <h4>Creation email <span>{statusLabel(detail.email.status)}</span></h4>\r\n              {#each detail.email.recipients as recipient}\r\n                <p>{recipient.kind}: {recipient.email} — {statusLabel(recipient.status)}{recipient.source === 'legacy_assumed' ? ' (legacy default)' : ''}</p>\r\n              {/each}\r\n              {#if detail.can_resend}\r\n                <button type=\"button\" disabled={busy || editing} on:click={() => { resendOpen = true; deleteOpen = false; selectedRecipients = []; feedback = ''; }}>\r\n                  Resend creation email\r\n                </button>\r\n              {:else}\r\n                <p>Resend unavailable. Use password reset if the initial password has changed.</p>\r\n              {/if}\r\n              {#if resendOpen}\r\n                <div class=\"resend-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Choose creation email recipients\">\r\n                  <h5>Choose recipients</h5>\r\n                  {#each detail.email.recipients as recipient}\r\n                    <label class=\"recipient\"><input type=\"checkbox\" checked={selectedRecipients.includes(recipient.email)}\r\n                      on:change={() => toggleRecipient(recipient.email)} /> {recipient.email}</label>\r\n                  {/each}\r\n                  <p>This sends the account creation email with the initial credentials.</p>\r\n                  <button type=\"button\" disabled={!selectedRecipients.length || resending} on:click={confirmResend}>\r\n                    {resending ? 'Sending…' : 'Confirm resend'}\r\n                  </button>\r\n                  <button type=\"button\" disabled={resending} on:click={() => { resendOpen = false; selectedRecipients = []; }}>Cancel</button>\r\n                </div>\r\n              {/if}\r\n              <div class=\"delete-section\">\r\n                <button type=\"button\" class=\"danger\" disabled={busy || editing}\r\n                  on:click={() => { deleteOpen = true; resendOpen = false; deleteUsername = ''; feedback = ''; }}>Delete user</button>\r\n                {#if deleteOpen}\r\n                  <div class=\"delete-confirmation\" role=\"group\" aria-label=\"Confirm user deletion\">\r\n                    <p>Permanently delete @{detail.username} and related app records, including lesson, payment and email history? The spreadsheet entry stays in the spreadsheet.</p>\r\n                    <label>Type username to confirm deletion\r\n                      <input type=\"text\" autocomplete=\"off\" bind:value={deleteUsername} disabled={deleting} />\r\n                    </label>\r\n                    <div class=\"actions\">\r\n                      <button type=\"button\" class=\"danger\" disabled={deleteUsername !== detail.username || busy} on:click={deleteUser}>\r\n                        {deleting ? 'Deleting…' : 'Confirm delete'}\r\n                      </button>\r\n                      <button type=\"button\" disabled={deleting} on:click={() => { deleteOpen = false; deleteUsername = ''; }}>Cancel deletion</button>\r\n                    </div>\r\n                  </div>\r\n                {/if}\r\n              </div>\r\n            </div>\r\n          {/if}\r\n        {/if}\r\n      </li>\r\n    {/each}\r\n  </ul>\r\n  <div class=\"pages\">\r\n    <button type=\"button\" disabled={page <= 1 || loading || busy} on:click={() => loadList(page - 1)}>Previous</button>\r\n    <span>Page {page}</span>\r\n    <button type=\"button\" disabled={!hasMore || loading || busy} on:click={() => loadList(page + 1)}>Next</button>\r\n  </div>\r\n</section>\r\n\r\n<style>\r\n  .creation-status { margin-top: 2rem; padding-top: 1.25rem; border-top: 1px solid #cbd5e1; }\r\n  .creation-status h3 { margin: 0 0 .75rem; }\r\n  .creation-status > label { display: block; font-weight: 600; margin-bottom: .4rem; }\r\n  .creation-status > input { box-sizing: border-box; width: 100%; padding: .6rem; border: 1px solid #94a3b8; border-radius: 4px; }\r\n  .students { padding: 0; list-style: none; }\r\n  .students li { border-bottom: 1px solid #e2e8f0; }\r\n  .student-row { display: flex; flex-wrap: wrap; gap: .35rem .7rem; width: 100%; text-align: left; padding: .7rem .3rem; background: transparent; border: 0; cursor: pointer; }\r\n  .student-row strong { width: 100%; }\r\n  .student-row span { color: #475569; }\r\n  .student-row small { padding: .15rem .3rem; background: #f1f5f9; border-radius: 3px; }\r\n  .student-row small.good { background: #dcfce7; color: #166534; }\r\n  .student-row small.warn { background: #fee2e2; color: #991b1b; }\r\n  .student-detail { padding: .8rem; background: #f8fafc; border-radius: 4px; }\r\n  .student-detail h4 { margin: 1rem 0 .45rem; }\r\n  .student-detail h4 span { font-weight: normal; }\r\n  dl { display: grid; grid-template-columns: minmax(8rem, 1fr) 2fr; gap: .35rem .6rem; margin: .4rem 0 1rem; overflow-wrap: anywhere; }\r\n  dt { font-weight: 600; } dd { margin: 0; }\r\n  .resend-dialog { margin-top: .7rem; padding: .8rem; border: 1px solid #94a3b8; background: white; }\r\n  .recipient { display: block; margin: .45rem 0; }\r\n  .pages { display: flex; align-items: center; gap: .7rem; }\r\n  .error { color: #b91c1c; }\r\n  .success { color: #166534; }\r\n  .edit-form > label, .delete-confirmation > label { display: block; margin: .65rem 0; font-weight: 600; }\r\n  .edit-form > label input, .delete-confirmation input { display: block; width: 100%; box-sizing: border-box; padding: .5rem; margin-top: .3rem; }\r\n  .actions { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: .7rem; }\r\n  .delete-section { border-top: 1px solid #cbd5e1; margin-top: 1.5rem; padding-top: 1rem; }\r\n  .danger { color: #991b1b; border: 1px solid #991b1b; border-radius: 4px; padding: .5rem .7rem; background: white; }\r\n  button { cursor: pointer; }\r\n  button:disabled { cursor: default; opacity: .55; }\r\n</style>\r\n","<script>\r\n    import AdminAccountCreationStatusComponent from './AdminAccountCreationStatusComponent.svelte';\r\n    let statusComponent;\r\n    // form state\r\n    let firstName = '';\r\n    let lastName = '';\r\n    let email = '';\r\n    let studentPhoneNumber = '';\r\n    let parentPhoneNumber = '';\r\n    let grade = '';\r\n    let parentFullName = '';\r\n    let parentEmail = '';\r\n    let specialConditions = {\r\n      'Special Needs': false,\r\n      'IB': false,\r\n      'Lithuanian Second Language': false\r\n    };\r\n  \r\n    // UI state\r\n    let loading = false;\r\n    let error = '';\r\n    let success = '';\r\n  \r\n    async function handleSubmit(event) {\r\n      event.preventDefault();\r\n      error = '';\r\n      success = '';\r\n      loading = true;\r\n  \r\n      // 1️⃣ Get the JWT token\r\n      const token = localStorage.getItem('jwtToken');\r\n      if (!token) {\r\n        error = 'You must be logged in to create a user.';\r\n        loading = false;\r\n        return;\r\n      }\r\n  \r\n      // 2️⃣ Client‐side validation\r\n      if (\r\n        !firstName ||\r\n        !lastName ||\r\n        !email ||\r\n        !studentPhoneNumber ||\r\n        !grade ||\r\n        !parentFullName ||\r\n        !parentEmail\r\n      ) {\r\n        error = 'All required fields must be filled.';\r\n        loading = false;\r\n        return;\r\n      }\r\n\r\n      // Validate grade is a number\r\n      if (isNaN(parseInt(grade)) || parseInt(grade) < 1 || parseInt(grade) > 13) {\r\n        error = 'Grade must be a number between 1 and 13.';\r\n        loading = false;\r\n        return;\r\n      }\r\n\r\n      // Get selected special conditions\r\n      const selectedConditions = Object.keys(specialConditions).filter(key => specialConditions[key]);\r\n      \r\n      // Validate max 3 conditions\r\n      if (selectedConditions.length > 3) {\r\n        error = 'Please select maximum 3 special conditions.';\r\n        loading = false;\r\n        return;\r\n      }\r\n  \r\n      try {\r\n        // 3️⃣ Send the POST with Authorization header\r\n        const res = await fetch(\r\n          '/studentplayground/api/admin/create_user/',\r\n          {\r\n            method: 'POST',\r\n            headers: {\r\n              'Content-Type': 'application/json',\r\n              'Authorization': `Bearer ${token}`\r\n            },\r\n            body: JSON.stringify({\r\n              username: email, // Use student email as username\r\n              first_name: firstName,\r\n              last_name: lastName,\r\n              email,\r\n              student_phone_number: studentPhoneNumber,\r\n              parent_phone_number: parentPhoneNumber,\r\n              grade: parseInt(grade),\r\n              parent_full_name: parentFullName,\r\n              parent_email: parentEmail,\r\n              special_conditions: selectedConditions\r\n            })\r\n          }\r\n        );\r\n  \r\n        if (!res.ok) {\r\n          const data = await res.json().catch(() => ({}));\r\n          error = data.error || data.detail || 'Failed to create user.';\r\n        } else {\r\n          const data = await res.json().catch(() => ({}));\r\n          success = 'User created successfully! ✔️';\r\n          if (data.user_id) statusComponent?.refreshAndSelect(data.user_id);\r\n          // reset form\r\n          firstName = lastName = email = '';\r\n          studentPhoneNumber = parentPhoneNumber = grade = parentFullName = parentEmail = '';\r\n          specialConditions = {\r\n            'Special Needs': false,\r\n            'IB': false,\r\n            'Lithuanian Second Language': false\r\n          };\r\n        }\r\n      } catch (e) {\r\n        console.error(e);\r\n        error = 'Network error – please try again.';\r\n      } finally {\r\n        loading = false;\r\n      }\r\n    }\r\n  </script>\r\n  \r\n  <div class=\"labelDiv\">\r\n    <span>SUKURTI USERĮ</span>\r\n  </div>\r\n  \r\n  <form on:submit|preventDefault={handleSubmit} class=\"admin-form\">\r\n    <div class=\"field\">\r\n      <label for=\"firstName\">First Name</label>\r\n      <input id=\"firstName\" type=\"text\" bind:value={firstName} required />\r\n    </div>\r\n  \r\n    <div class=\"field\">\r\n      <label for=\"lastName\">Last Name</label>\r\n      <input id=\"lastName\" type=\"text\" bind:value={lastName} required />\r\n    </div>\r\n  \r\n    <div class=\"field\">\r\n      <label for=\"email\">Email</label>\r\n      <div class=\"input-with-info\">\r\n        <input id=\"email\" type=\"email\" bind:value={email} required />\r\n        <div class=\"info-box\">\r\n          <span class=\"info-text\">Bus naudojamas kaip vartotojo vardas</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"field\">\r\n      <label for=\"studentPhoneNumber\">Student Phone Number *</label>\r\n      <div class=\"input-with-info\">\r\n        <input id=\"studentPhoneNumber\" type=\"tel\" bind:value={studentPhoneNumber} required />\r\n        <div class=\"info-box\">\r\n          <span class=\"info-text\">Rašyti be +. (Pavyzdys: 37061234567)</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"field\">\r\n      <label for=\"parentPhoneNumber\">Parent Phone Number</label>\r\n      <div class=\"input-with-info\">\r\n        <input id=\"parentPhoneNumber\" type=\"tel\" bind:value={parentPhoneNumber} />\r\n        <div class=\"info-box\">\r\n          <span class=\"info-text\">Šitam telefono numeriui bus sunčiamos visos žinutės</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"field\">\r\n      <label for=\"parentFullName\">Parent Full Name *</label>\r\n      <input id=\"parentFullName\" type=\"text\" bind:value={parentFullName} required />\r\n    </div>\r\n\r\n    <div class=\"field\">\r\n      <label for=\"parentEmail\">Parent Email *</label>\r\n      <div class=\"input-with-info\">\r\n        <input id=\"parentEmail\" type=\"email\" bind:value={parentEmail} required />\r\n        <div class=\"info-box\">\r\n          <span class=\"info-text\">Tėvų el. paštas pranešimams ir informacijai</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"field\">\r\n      <label for=\"grade\">Grade *</label>\r\n      <div class=\"input-with-info\">\r\n        <input id=\"grade\" type=\"number\" min=\"1\" max=\"13\" bind:value={grade} required />\r\n        <div class=\"info-box\">\r\n          <span class=\"info-text\">Universiteto lygis = 13</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"field\">\r\n      <fieldset class=\"checkbox-fieldset\">\r\n        <legend>Special Conditions (select up to 3)</legend>\r\n        <div class=\"checkbox-group\">\r\n          <div class=\"checkbox-item\">\r\n            <input \r\n              id=\"specialNeeds\" \r\n              type=\"checkbox\" \r\n              bind:checked={specialConditions['Special Needs']}\r\n            />\r\n            <label for=\"specialNeeds\">Special Needs</label>\r\n            <span class=\"price-indicator\">+€3</span>\r\n          </div>\r\n          <div class=\"checkbox-item\">\r\n            <input \r\n              id=\"ib\" \r\n              type=\"checkbox\" \r\n              bind:checked={specialConditions['IB']}\r\n            />\r\n            <label for=\"ib\">IB</label>\r\n            <span class=\"price-indicator\">+€5</span>\r\n          </div>\r\n          <div class=\"checkbox-item\">\r\n            <input \r\n              id=\"lithuanianSecondLang\" \r\n              type=\"checkbox\" \r\n              bind:checked={specialConditions['Lithuanian Second Language']}\r\n            />\r\n            <label for=\"lithuanianSecondLang\">Lithuanian Second Language</label>\r\n            <span class=\"price-indicator\">+€3</span>\r\n          </div>\r\n        </div>\r\n      </fieldset>\r\n    </div>\r\n  \r\n    <button type=\"submit\" class=\"btn\" disabled={loading}>\r\n      {#if loading}\r\n        Creating…\r\n      {:else}\r\n        Create User\r\n      {/if}\r\n    </button>\r\n  \r\n    {#if error}\r\n      <p class=\"error\">{error}</p>\r\n    {/if}\r\n  \r\n    {#if success}\r\n      <p class=\"success\">{success}</p>\r\n    {/if}\r\n  </form>\r\n  <AdminAccountCreationStatusComponent bind:this={statusComponent} />\r\n  \r\n  <style>\r\n    .labelDiv {\r\n      display: flex;\r\n      justify-content: space-around;\r\n    }\r\n    .field {\r\n      display: flex;\r\n      flex-direction: column;\r\n      margin-bottom: 1rem;\r\n      width: 100%;\r\n    }\r\n    .field label {\r\n      font-weight: bold;\r\n      margin-bottom: 0.4rem;\r\n    }\r\n    .field input {\r\n      padding: 0.5rem;\r\n      border: 1px solid #ccc;\r\n      border-radius: 4px;\r\n      font-size: 1rem;\r\n      width: 100%;\r\n    }\r\n    \r\n    /* Smaller width for specific fields */\r\n    #studentPhoneNumber,\r\n    #parentPhoneNumber {\r\n      max-width: 167px;\r\n    }\r\n    \r\n    \r\n    #grade {\r\n      max-width: 80px;\r\n    }\r\n    .checkbox-fieldset {\r\n      border: 1px solid #ccc;\r\n      border-radius: 4px;\r\n      padding: 0.8rem;\r\n      margin: 0;\r\n    }\r\n    .checkbox-fieldset legend {\r\n      font-weight: bold;\r\n      padding: 0 0.5rem;\r\n      margin-bottom: 0.5rem;\r\n    }\r\n    .checkbox-group {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 0.5rem;\r\n    }\r\n    .checkbox-item {\r\n      display: flex;\r\n      align-items: center;\r\n      gap: 0.5rem;\r\n    }\r\n    .checkbox-item input[type=\"checkbox\"] {\r\n      width: auto;\r\n      margin: 0;\r\n    }\r\n    .checkbox-item label {\r\n      margin: 0;\r\n      font-weight: normal;\r\n      cursor: pointer;\r\n      flex: 1;\r\n    }\r\n    .price-indicator {\r\n      color: #007acc;\r\n      font-weight: bold;\r\n      font-size: 0.9rem;\r\n      background-color: #e8f4fd;\r\n      padding: 0.2rem 0.5rem;\r\n      border-radius: 12px;\r\n      border: 1px solid #b3d9f2;\r\n      margin-left: 0.5rem;\r\n      white-space: nowrap;\r\n    }\r\n    .input-with-info {\r\n      position: relative;\r\n    }\r\n    .info-box {\r\n      margin-top: 0.3rem;\r\n      padding: 0.4rem;\r\n      background-color: #f0f8ff;\r\n      border: 1px solid #b0d4f1;\r\n      border-radius: 4px;\r\n      font-size: 0.85rem;\r\n    }\r\n    .info-text {\r\n      color: #2c5aa0;\r\n      font-style: italic;\r\n    }\r\n    .btn {\r\n      display: inline-block;\r\n      padding: 0.6rem 1rem;\r\n      background-color: #0055aa;\r\n      color: #fff;\r\n      border: none;\r\n      border-radius: 4px;\r\n      cursor: pointer;\r\n      font-size: 1rem;\r\n      margin-top: 0.5rem;\r\n    }\r\n    .btn:hover {\r\n      background-color: #004488;\r\n    }\r\n    .btn:disabled {\r\n      opacity: 0.6;\r\n      cursor: not-allowed;\r\n    }\r\n    .error {\r\n      color: #cc0000;\r\n      margin-top: 0.8rem;\r\n    }\r\n    .success {\r\n      color: #006600;\r\n      margin-top: 0.8rem;\r\n    }\r\n  </style>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import { formatEuroAmount } from './money.js';\r\n    import { getApiBase } from './apiBase.js';\r\n\r\n    export let studentId = null;\r\n    export let embedded = false;\r\n    const apiBase = getApiBase();\r\n\r\n    // State variables\r\n    let users = [];\r\n    let filteredUsers = [];\r\n    let selectedUserId = null;\r\n    let isLoading = false;\r\n    let isSaving = false;\r\n    let errorMessage = '';\r\n    let successMessage = '';\r\n    let searchQuery = '';\r\n    \r\n    // Filter state\r\n    let activeFilter = 'students'; // 'all', 'students', 'teachers', 'with_modifiers', 'without_modifiers'\r\n    \r\n    // Pricing modifier data\r\n    let pricingModifiers = new Map(); // user_id -> modifier object\r\n    let editingUserId = null;\r\n    let editingModifier = null;\r\n    \r\n    // Manual class discount data\r\n    let selectedMonth = new Date();\r\n    let studentClasses = [];\r\n    let isLoadingClasses = false;\r\n    let currentClassesRequestKey = null; // track latest request to avoid race conditions\r\n\r\n    // Per-type base price rules (Subject + Teacher)\r\n    let typeBasePriceRules = [];\r\n    let isLoadingTypeRules = false;\r\n    let selectedTypeKey = '';\r\n    let typeBasePriceInput = '';\r\n    let typeValidFrom = '';\r\n    let typeValidUntil = '';\r\n    let editingTypeRuleId = null;\r\n\r\n    function makeTypeKey(subjectName, teacherName) {\r\n        return `${subjectName || ''}|||${teacherName || ''}`;\r\n    }\r\n\r\n    // Unique Subject+Teacher combinations for this student across a wider window\r\n    // (recent + upcoming months), loaded independently of the month selector so\r\n    // future class types are selectable. Populated by loadStudentClassTypes().\r\n    let availableTypeOptions = [];\r\n    let isLoadingTypeOptions = false;\r\n    \r\n    \r\n    // Load users on component mount\r\n    onMount(async () => {\r\n        await loadUsers();\r\n        await loadPricingModifiers();\r\n        if (embedded && studentId) {\r\n            const idNum = typeof studentId === 'string' ? parseInt(studentId, 10) : studentId;\r\n            if (!Number.isNaN(idNum)) {\r\n                await startEditingModifier(idNum);\r\n            }\r\n        }\r\n    });\r\n    \r\n    async function loadUsers() {\r\n        isLoading = true;\r\n        errorMessage = '';\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/users-for-email-selection/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                const errorData = await response.json();\r\n                throw new Error(errorData.message || 'Failed to load users');\r\n            }\r\n            \r\n            const data = await response.json();\r\n            users = data.users || [];\r\n            applyFilters();\r\n            \r\n        } catch (error) {\r\n            errorMessage = `Error loading users: ${error.message}`;\r\n            console.error('Error loading users:', error);\r\n        } finally {\r\n            isLoading = false;\r\n        }\r\n    }\r\n    \r\n    async function loadPricingModifiers() {\r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/student-pricing-modifiers/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                pricingModifiers = new Map();\r\n                data.modifiers.forEach(modifier => {\r\n                    pricingModifiers.set(modifier.student_id, modifier);\r\n                });\r\n                pricingModifiers = pricingModifiers; // Trigger reactivity\r\n            }\r\n            \r\n        } catch (error) {\r\n            console.error('Error loading pricing modifiers:', error);\r\n        }\r\n    }\r\n    \r\n    \r\n    function applyFilters() {\r\n        let filtered = [...users];\r\n        \r\n        // Apply user type filter\r\n        if (activeFilter === 'students') {\r\n            filtered = filtered.filter(user => user.user_type === 'student');\r\n        } else if (activeFilter === 'teachers') {\r\n            filtered = filtered.filter(user => user.user_type === 'teacher');\r\n        } else if (activeFilter === 'with_modifiers') {\r\n            filtered = filtered.filter(user => pricingModifiers.has(user.id));\r\n        } else if (activeFilter === 'without_modifiers') {\r\n            filtered = filtered.filter(user => !pricingModifiers.has(user.id));\r\n        }\r\n        \r\n        // Apply search filter\r\n        if (searchQuery.trim()) {\r\n            const query = searchQuery.toLowerCase();\r\n            filtered = filtered.filter(user => \r\n                user.first_name.toLowerCase().includes(query) ||\r\n                user.last_name.toLowerCase().includes(query) ||\r\n                user.email.toLowerCase().includes(query) ||\r\n                user.username.toLowerCase().includes(query)\r\n            );\r\n        }\r\n        \r\n        filteredUsers = filtered;\r\n    }\r\n    \r\n    function setFilter(filter) {\r\n        activeFilter = filter;\r\n        applyFilters();\r\n    }\r\n    \r\n    async function startEditingModifier(userId) {\r\n        editingUserId = userId;\r\n        const existingModifier = pricingModifiers.get(userId);\r\n        selectedTypeKey = '';\r\n        typeBasePriceInput = '';\r\n        typeValidFrom = '';\r\n        typeValidUntil = '';\r\n        editingTypeRuleId = null;\r\n        typeBasePriceRules = [];\r\n        availableTypeOptions = [];\r\n        \r\n        // Default modifier structure (all exemptions false means all modifiers apply by default)\r\n        editingModifier = {\r\n            student_id: userId,\r\n            exempt_from_prime_time_surcharge: false,\r\n            exempt_from_high_activity_discount: false,\r\n            exempt_from_family_discount: false,\r\n            exempt_from_ib_surcharge: false,\r\n            exempt_from_special_needs_surcharge: false,\r\n            exempt_from_lithuanian_surcharge: false,\r\n            custom_base_price: null,\r\n            custom_minimum_price: null,\r\n            custom_group_price_2_students: null,\r\n            custom_group_price_3plus_students: null,\r\n            notes: '',\r\n            is_active: true,\r\n            ...existingModifier\r\n        };\r\n        \r\n        // Load classes for the current month\r\n        await loadStudentClassesForMonth(userId, selectedMonth);\r\n\r\n        // Load selectable class types across a wider window (recent + upcoming),\r\n        // independent of the month selector above.\r\n        await loadStudentClassTypes(userId);\r\n\r\n        // Load type base price rules for this student\r\n        await loadStudentTypeBasePrices(userId);\r\n\r\n        // Default selection for type dropdown\r\n        if (!selectedTypeKey && availableTypeOptions.length > 0) {\r\n            selectedTypeKey = availableTypeOptions[0].key;\r\n        }\r\n    }\r\n\r\n    // Keep dropdown selection valid when month/classes change\r\n    $: if (availableTypeOptions.length > 0) {\r\n        const hasSelection = !!selectedTypeKey && availableTypeOptions.some(o => o.key === selectedTypeKey);\r\n        if (!hasSelection) selectedTypeKey = availableTypeOptions[0].key;\r\n    }\r\n    \r\n    // Load classes for selected month\r\n    async function loadStudentClassesForMonth(studentId, month) {\r\n        isLoadingClasses = true;\r\n        const token = localStorage.getItem('jwtToken');\r\n        const monthStr = `${month.getFullYear()}-${String(month.getMonth() + 1).padStart(2, '0')}`; // YYYY-MM in local time\r\n        const requestKey = `${studentId}:${monthStr}`;\r\n        currentClassesRequestKey = requestKey;\r\n        \r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/student-classes-for-discount/?student_id=${studentId}&month=${monthStr}`, {\r\n                headers: { \r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            // Ignore out-of-order responses\r\n            if (currentClassesRequestKey !== requestKey) {\r\n                return;\r\n            }\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                studentClasses = data.classes || [];\r\n                console.log(`Loaded ${studentClasses.length} classes for month ${monthStr}`);\r\n            } else {\r\n                const errorData = await response.json();\r\n                console.error('Error loading student classes:', errorData.message);\r\n                studentClasses = [];\r\n            }\r\n        } catch (error) {\r\n            // Ignore errors from stale requests\r\n            if (currentClassesRequestKey === requestKey) {\r\n                console.error('Error loading student classes:', error);\r\n                studentClasses = [];\r\n            }\r\n        } finally {\r\n            if (currentClassesRequestKey === requestKey) {\r\n                isLoadingClasses = false;\r\n            }\r\n        }\r\n    }\r\n\r\n    async function loadStudentClassTypes(studentId) {\r\n        isLoadingTypeOptions = true;\r\n        const token = localStorage.getItem('jwtToken');\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/student-class-types/?student_id=${studentId}`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n\r\n            const data = await response.json();\r\n            if (!response.ok) {\r\n                throw new Error(data.message || 'Failed to load class types');\r\n            }\r\n\r\n            availableTypeOptions = (data.types || []).map(t => ({\r\n                key: makeTypeKey(t.subject_name, t.teacher_name),\r\n                subject_name: t.subject_name,\r\n                teacher_name: t.teacher_name,\r\n                label: t.label || `${t.subject_name} — ${t.teacher_name}`\r\n            }));\r\n        } catch (error) {\r\n            console.error('Error loading class types:', error);\r\n            availableTypeOptions = [];\r\n        } finally {\r\n            isLoadingTypeOptions = false;\r\n        }\r\n    }\r\n\r\n    async function loadStudentTypeBasePrices(studentId) {\r\n        isLoadingTypeRules = true;\r\n        const token = localStorage.getItem('jwtToken');\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/student-type-base-prices/?student_id=${studentId}`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n\r\n            const data = await response.json();\r\n            if (!response.ok) {\r\n                throw new Error(data.message || 'Failed to load type base price rules');\r\n            }\r\n\r\n            typeBasePriceRules = data.rules || [];\r\n        } catch (error) {\r\n            console.error('Error loading type base price rules:', error);\r\n            typeBasePriceRules = [];\r\n        } finally {\r\n            isLoadingTypeRules = false;\r\n        }\r\n    }\r\n\r\n    function editTypeBasePriceRule(rule) {\r\n        editingTypeRuleId = rule.id;\r\n        selectedTypeKey = makeTypeKey(rule.subject_name, rule.teacher_name);\r\n        typeBasePriceInput = String(rule.base_price);\r\n        typeValidFrom = rule.valid_from || '';\r\n        typeValidUntil = rule.valid_until || '';\r\n    }\r\n\r\n    function resetTypeBasePriceForm() {\r\n        editingTypeRuleId = null;\r\n        typeBasePriceInput = '';\r\n        typeValidFrom = '';\r\n        typeValidUntil = '';\r\n    }\r\n\r\n    async function upsertTypeBasePriceRule() {\r\n        if (!editingUserId) return;\r\n        if (!selectedTypeKey) {\r\n            errorMessage = 'Please select a class type (Subject — Teacher) first.';\r\n            return;\r\n        }\r\n\r\n        const parsed = parseFloat(typeBasePriceInput);\r\n        if (Number.isNaN(parsed) || parsed < 0) {\r\n            errorMessage = 'Base price must be a non-negative number.';\r\n            return;\r\n        }\r\n\r\n        const option = availableTypeOptions.find(o => o.key === selectedTypeKey);\r\n        if (!option) {\r\n            errorMessage = 'Selected class type is no longer available. Reload classes and try again.';\r\n            return;\r\n        }\r\n\r\n        if (typeValidFrom && typeValidUntil && typeValidFrom > typeValidUntil) {\r\n            errorMessage = 'Valid from date must be on or before the valid until date.';\r\n            return;\r\n        }\r\n\r\n        isSaving = true;\r\n        errorMessage = '';\r\n        successMessage = '';\r\n        const token = localStorage.getItem('jwtToken');\r\n\r\n        try {\r\n            const endpoint = editingTypeRuleId\r\n                ? `${apiBase}/studentplayground/api/student-type-base-prices/${editingTypeRuleId}/`\r\n                : `${apiBase}/studentplayground/api/student-type-base-prices/`;\r\n            const response = await fetch(endpoint, {\r\n                method: editingTypeRuleId ? 'PATCH' : 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                },\r\n                body: JSON.stringify({\r\n                    ...(editingTypeRuleId ? {} : { student_id: editingUserId }),\r\n                    subject_name: option.subject_name,\r\n                    teacher_name: option.teacher_name,\r\n                    base_price: parsed,\r\n                    is_active: true,\r\n                    valid_from: typeValidFrom || null,\r\n                    valid_until: typeValidUntil || null\r\n                })\r\n            });\r\n\r\n            const data = await response.json();\r\n            if (!response.ok) {\r\n                throw new Error(data.message || 'Failed to save type base price rule');\r\n            }\r\n\r\n            // Update local list (replace if exists)\r\n            const saved = data.rule;\r\n            const idx = typeBasePriceRules.findIndex(r => r.id === saved.id);\r\n            if (idx >= 0) {\r\n                typeBasePriceRules[idx] = saved;\r\n                typeBasePriceRules = [...typeBasePriceRules];\r\n            } else {\r\n                typeBasePriceRules = [saved, ...typeBasePriceRules];\r\n            }\r\n\r\n            successMessage = editingTypeRuleId ? 'Type price timeframe updated.' : 'Type price timeframe added.';\r\n            resetTypeBasePriceForm();\r\n        } catch (error) {\r\n            errorMessage = `Error saving type base price rule: ${error.message}`;\r\n            console.error('Error saving type base price rule:', error);\r\n        } finally {\r\n            isSaving = false;\r\n        }\r\n    }\r\n\r\n    async function toggleTypeBasePriceRuleActive(rule, nextActive) {\r\n        if (!editingUserId || !rule) return;\r\n        isSaving = true;\r\n        errorMessage = '';\r\n        successMessage = '';\r\n        const token = localStorage.getItem('jwtToken');\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/student-type-base-prices/${rule.id}/`, {\r\n                method: 'PATCH',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                },\r\n                body: JSON.stringify({\r\n                    is_active: nextActive\r\n                })\r\n            });\r\n\r\n            const data = await response.json();\r\n            if (!response.ok) {\r\n                throw new Error(data.message || 'Failed to update rule');\r\n            }\r\n\r\n            const saved = data.rule;\r\n            const idx = typeBasePriceRules.findIndex(r => r.id === saved.id);\r\n            if (idx >= 0) {\r\n                typeBasePriceRules[idx] = saved;\r\n                typeBasePriceRules = [...typeBasePriceRules];\r\n            }\r\n        } catch (error) {\r\n            errorMessage = `Error updating rule: ${error.message}`;\r\n        } finally {\r\n            isSaving = false;\r\n        }\r\n    }\r\n\r\n    async function deleteTypeBasePriceRule(ruleId) {\r\n        if (!confirm('Delete this type base price rule?')) return;\r\n        isSaving = true;\r\n        errorMessage = '';\r\n        successMessage = '';\r\n        const token = localStorage.getItem('jwtToken');\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/student-type-base-prices/${ruleId}/`, {\r\n                method: 'DELETE',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            const data = await response.json();\r\n            if (!response.ok) {\r\n                throw new Error(data.message || 'Failed to delete rule');\r\n            }\r\n            typeBasePriceRules = typeBasePriceRules.filter(r => r.id !== ruleId);\r\n            if (editingTypeRuleId === ruleId) resetTypeBasePriceForm();\r\n            successMessage = 'Type base price rule deleted.';\r\n        } catch (error) {\r\n            errorMessage = `Error deleting rule: ${error.message}`;\r\n        } finally {\r\n            isSaving = false;\r\n        }\r\n    }\r\n    \r\n    // Manual class price override modal state\r\n    let showOverrideModal = false;\r\n    let selectedClassItem = null;\r\n    let overridePrice = '';\r\n    let overrideNotes = '';\r\n\r\n    function isClassOverridden(classItem) {\r\n        return !!(classItem?.is_overridden ?? classItem?.is_discounted);\r\n    }\r\n\r\n    function openOverrideModal(classItem) {\r\n        selectedClassItem = classItem;\r\n        // default to current override if present, otherwise show the computed original price\r\n        const overridden = isClassOverridden(classItem);\r\n        const current = overridden ? (classItem.override_amount ?? classItem.price) : (classItem.original_price ?? classItem.price);\r\n        overridePrice = current !== null && current !== undefined ? String(current) : '';\r\n        overrideNotes = classItem.discount_notes || '';\r\n        showOverrideModal = true;\r\n    }\r\n\r\n    function closeOverrideModal() {\r\n        showOverrideModal = false;\r\n        selectedClassItem = null;\r\n        overridePrice = '';\r\n        overrideNotes = '';\r\n    }\r\n\r\n    async function saveClassOverride() {\r\n        if (!selectedClassItem) return;\r\n        const token = localStorage.getItem('jwtToken');\r\n        const parsed = parseFloat(overridePrice);\r\n        if (Number.isNaN(parsed) || parsed < 0) {\r\n            errorMessage = 'Override price must be a non-negative number.';\r\n            return;\r\n        }\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/manual-class-discount/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                },\r\n                body: JSON.stringify({\r\n                    student_id: editingUserId,\r\n                    class_id: selectedClassItem.id,\r\n                    override_amount: parsed,\r\n                    notes: overrideNotes || `Manual override set via admin interface`\r\n                })\r\n            });\r\n\r\n            const data = await response.json();\r\n\r\n            if (response.ok) {\r\n                await loadStudentClassesForMonth(editingUserId, selectedMonth);\r\n                successMessage = data.message;\r\n                setTimeout(() => { successMessage = ''; }, 3000);\r\n                closeOverrideModal();\r\n            } else {\r\n                errorMessage = `Error saving override: ${data.message}`;\r\n            }\r\n        } catch (error) {\r\n            errorMessage = `Error saving override: ${error.message}`;\r\n        }\r\n    }\r\n\r\n    async function clearClassOverride() {\r\n        if (!selectedClassItem) return;\r\n        const token = localStorage.getItem('jwtToken');\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/manual-class-discount/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                },\r\n                body: JSON.stringify({\r\n                    student_id: editingUserId,\r\n                    class_id: selectedClassItem.id,\r\n                    clear_override: true,\r\n                    notes: overrideNotes || `Manual override cleared via admin interface`\r\n                })\r\n            });\r\n\r\n            const data = await response.json();\r\n\r\n            if (response.ok) {\r\n                await loadStudentClassesForMonth(editingUserId, selectedMonth);\r\n                successMessage = data.message;\r\n                setTimeout(() => { successMessage = ''; }, 3000);\r\n                closeOverrideModal();\r\n            } else {\r\n                errorMessage = `Error clearing override: ${data.message}`;\r\n            }\r\n        } catch (error) {\r\n            errorMessage = `Error clearing override: ${error.message}`;\r\n        }\r\n    }\r\n\r\n    function setOverrideToZero() {\r\n        overridePrice = '0';\r\n    }\r\n    \r\n    // Month navigation functions\r\n    function previousMonth() {\r\n        selectedMonth = new Date(selectedMonth.getFullYear(), selectedMonth.getMonth() - 1, 1);\r\n        if (editingUserId) {\r\n            loadStudentClassesForMonth(editingUserId, selectedMonth);\r\n        }\r\n    }\r\n    \r\n    function nextMonth() {\r\n        selectedMonth = new Date(selectedMonth.getFullYear(), selectedMonth.getMonth() + 1, 1);\r\n        if (editingUserId) {\r\n            loadStudentClassesForMonth(editingUserId, selectedMonth);\r\n        }\r\n    }\r\n    \r\n    function formatMonth(date) {\r\n        return date.toLocaleDateString('lt-LT', { year: 'numeric', month: 'long' });\r\n    }\r\n    \r\n    function formatDate(dateString) {\r\n        if (!dateString) return 'No date';\r\n        const date = new Date(dateString);\r\n        return date.toLocaleDateString('lt-LT', { \r\n            weekday: 'short',\r\n            month: 'short', \r\n            day: 'numeric',\r\n            hour: '2-digit',\r\n            minute: '2-digit'\r\n        });\r\n    }\r\n    \r\n    function cancelEditingModifier() {\r\n        editingUserId = null;\r\n        editingModifier = null;\r\n        studentClasses = [];  // Clear classes when closing modal\r\n        typeBasePriceRules = [];\r\n        availableTypeOptions = [];\r\n        selectedTypeKey = '';\r\n        typeBasePriceInput = '';\r\n        typeValidFrom = '';\r\n        typeValidUntil = '';\r\n        editingTypeRuleId = null;\r\n    }\r\n    \r\n    async function saveModifier() {\r\n        if (!editingModifier) return;\r\n        \r\n        isSaving = true;\r\n        errorMessage = '';\r\n        successMessage = '';\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/student-pricing-modifiers/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                },\r\n                body: JSON.stringify(editingModifier)\r\n            });\r\n            \r\n            const data = await response.json();\r\n            \r\n            if (!response.ok) {\r\n                throw new Error(data.message || 'Failed to save pricing modifier');\r\n            }\r\n            \r\n            // Update local state\r\n            pricingModifiers.set(editingModifier.student_id, data.modifier);\r\n            pricingModifiers = pricingModifiers; // Trigger reactivity\r\n            \r\n            successMessage = `Pricing modifier saved successfully for ${getUserName(editingModifier.student_id)}`;\r\n            cancelEditingModifier();\r\n            applyFilters();\r\n            \r\n        } catch (error) {\r\n            errorMessage = `Error saving modifier: ${error.message}`;\r\n            console.error('Error saving modifier:', error);\r\n        } finally {\r\n            isSaving = false;\r\n        }\r\n    }\r\n    \r\n    async function deleteModifier(userId) {\r\n        if (!confirm(`Are you sure you want to delete the pricing modifier for ${getUserName(userId)}? This will restore default pricing behavior.`)) {\r\n            return;\r\n        }\r\n        \r\n        isSaving = true;\r\n        errorMessage = '';\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/student-pricing-modifiers/${userId}/`, {\r\n                method: 'DELETE',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                const data = await response.json();\r\n                throw new Error(data.message || 'Failed to delete pricing modifier');\r\n            }\r\n            \r\n            // Remove from local state\r\n            pricingModifiers.delete(userId);\r\n            pricingModifiers = pricingModifiers; // Trigger reactivity\r\n            \r\n            successMessage = `Pricing modifier deleted for ${getUserName(userId)}. Default pricing will now apply.`;\r\n            applyFilters();\r\n            \r\n        } catch (error) {\r\n            errorMessage = `Error deleting modifier: ${error.message}`;\r\n            console.error('Error deleting modifier:', error);\r\n        } finally {\r\n            isSaving = false;\r\n        }\r\n    }\r\n    \r\n    function getUserName(userId) {\r\n        const user = users.find(u => u.id === userId);\r\n        return user ? `${user.first_name} ${user.last_name}` : 'Unknown User';\r\n    }\r\n    \r\n    function getModifierSummary(modifier) {\r\n        if (!modifier) return 'Default pricing applies (all discounts/surcharges enabled)';\r\n        \r\n        const exemptions = [];\r\n        if (modifier.exempt_from_prime_time_surcharge) exemptions.push('No Prime Time');\r\n        if (modifier.exempt_from_high_activity_discount) exemptions.push('No Activity Discount');\r\n        if (modifier.exempt_from_family_discount) exemptions.push('No Family Discount');\r\n        if (modifier.exempt_from_ib_surcharge) exemptions.push('No IB Surcharge');\r\n        if (modifier.exempt_from_special_needs_surcharge) exemptions.push('No Special Needs');\r\n        if (modifier.exempt_from_lithuanian_surcharge) exemptions.push('No Lithuanian');\r\n        if (modifier.custom_base_price) exemptions.push(`Custom Base: €${modifier.custom_base_price}`);\r\n        if (modifier.custom_minimum_price) exemptions.push(`Min: €${modifier.custom_minimum_price}`);\r\n        if (modifier.custom_group_price_2_students) exemptions.push(`Custom Group (2): €${modifier.custom_group_price_2_students}`);\r\n        if (modifier.custom_group_price_3plus_students) exemptions.push(`Custom Group (3+): €${modifier.custom_group_price_3plus_students}`);\r\n        \r\n        return exemptions.length > 0 ? exemptions.join(', ') : 'Default pricing applies';\r\n    }\r\n    \r\n    \r\n    // Reactive statements\r\n    $: searchQuery, activeFilter, users, pricingModifiers, applyFilters();\r\n</script>\r\n\r\n<div class=\"pricing-modifier-container {embedded ? 'embedded' : ''}\">\r\n    <h3>Student Pricing Modifier Management</h3>\r\n    <p class=\"description\">Manage custom pricing rules for individual students. By default, all pricing modifiers (discounts and surcharges) apply to all students.</p>\r\n    \r\n    <!-- Filter buttons -->\r\n    {#if !embedded}\r\n    <div class=\"filter-buttons\">\r\n        <button \r\n            class=\"filter-btn {activeFilter === 'all' ? 'active' : ''}\"\r\n            on:click={() => setFilter('all')}\r\n        >\r\n            All Users ({users.length})\r\n        </button>\r\n        <button \r\n            class=\"filter-btn {activeFilter === 'students' ? 'active' : ''}\"\r\n            on:click={() => setFilter('students')}\r\n        >\r\n            Students ({users.filter(u => u.user_type === 'student').length})\r\n        </button>\r\n        <button \r\n            class=\"filter-btn {activeFilter === 'with_modifiers' ? 'active' : ''}\"\r\n            on:click={() => setFilter('with_modifiers')}\r\n        >\r\n            With Custom Rules ({pricingModifiers.size})\r\n        </button>\r\n        <button \r\n            class=\"filter-btn {activeFilter === 'without_modifiers' ? 'active' : ''}\"\r\n            on:click={() => setFilter('without_modifiers')}\r\n        >\r\n            Default Pricing ({users.filter(u => u.user_type === 'student' && !pricingModifiers.has(u.id)).length})\r\n        </button>\r\n    </div>\r\n    \r\n    <!-- Search bar -->\r\n    <div class=\"search-container\">\r\n        <input \r\n            type=\"text\" \r\n            placeholder=\"Search by name, email, or username...\" \r\n            bind:value={searchQuery}\r\n            class=\"search-input\"\r\n        />\r\n    </div>\r\n    \r\n    <!-- Users list -->\r\n    {#if isLoading}\r\n        <div class=\"loading\">Loading users...</div>\r\n    {:else if filteredUsers.length === 0}\r\n        <div class=\"no-users\">No users found</div>\r\n    {:else}\r\n        <div class=\"users-list\">\r\n            {#each filteredUsers as user (user.id)}\r\n                {@const userModifier = pricingModifiers.get(user.id)}\r\n                <div class=\"user-item {userModifier ? 'has-modifier' : 'default-pricing'}\">\r\n                    <div class=\"user-info\">\r\n                        <div class=\"user-name\">\r\n                            {user.first_name} {user.last_name}\r\n                            <span class=\"user-type {user.user_type}\">{user.user_type}</span>\r\n                            {#if userModifier}\r\n                                <span class=\"modifier-status custom\">Custom Rules</span>\r\n                            {:else}\r\n                                <span class=\"modifier-status default\">Default Pricing</span>\r\n                            {/if}\r\n                        </div>\r\n                        <div class=\"user-email\">{user.email}</div>\r\n                        <div class=\"modifier-summary\">\r\n                            {getModifierSummary(userModifier)}\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"user-actions\">\r\n                        <button \r\n                            class=\"action-btn edit\"\r\n                            on:click={() => startEditingModifier(user.id)}\r\n                            disabled={editingUserId !== null}\r\n                        >\r\n                            {userModifier ? 'Edit Rules' : 'Add Custom Rules'}\r\n                        </button>\r\n                        {#if userModifier}\r\n                            <button \r\n                                class=\"action-btn delete\"\r\n                                on:click={() => deleteModifier(user.id)}\r\n                                disabled={isSaving}\r\n                            >\r\n                                Reset to Default\r\n                            </button>\r\n                        {/if}\r\n                    </div>\r\n                </div>\r\n            {/each}\r\n        </div>\r\n    {/if}\r\n    {/if}\r\n    \r\n    <!-- Editing modal -->\r\n    {#if editingUserId && editingModifier}\r\n        <div\r\n            class=\"modal-overlay {embedded ? 'embedded' : ''}\"\r\n            on:click={() => !embedded && cancelEditingModifier()}\r\n            on:keydown={(e) => !embedded && e.key === 'Escape' && cancelEditingModifier()}\r\n        >\r\n            <div class=\"modal-content {embedded ? 'embedded' : ''}\" on:click|stopPropagation on:keydown|stopPropagation>\r\n                <div class=\"modal-header\">\r\n                    <h4>Pricing Rules for {getUserName(editingUserId)}</h4>\r\n                    {#if !embedded}\r\n                        <button class=\"close-btn\" on:click={cancelEditingModifier}>×</button>\r\n                    {/if}\r\n                </div>\r\n                \r\n                <div class=\"modal-body\">\r\n                    <div class=\"section\">\r\n                        <h5>Legacy-only surcharge exemptions</h5>\r\n                        <p class=\"section-description\">These retained fields affect only classes through 2026-08-31. They do not change the simplified pricing that starts on 2026-09-01.</p>\r\n                        \r\n                        <label class=\"checkbox-label\">\r\n                            <input \r\n                                type=\"checkbox\" \r\n                                bind:checked={editingModifier.exempt_from_prime_time_surcharge}\r\n                            />\r\n                            <span>Legacy only: exempt from Prime Time Surcharge (+€3 Mon-Thu 5pm-8pm)</span>\r\n                        </label>\r\n                        \r\n                        <label class=\"checkbox-label\">\r\n                            <input \r\n                                type=\"checkbox\" \r\n                                bind:checked={editingModifier.exempt_from_ib_surcharge}\r\n                            />\r\n                            <span>Legacy only: exempt from IB Surcharge (+€5)</span>\r\n                        </label>\r\n                        \r\n                        <label class=\"checkbox-label\">\r\n                            <input \r\n                                type=\"checkbox\" \r\n                                bind:checked={editingModifier.exempt_from_special_needs_surcharge}\r\n                            />\r\n                            <span>Legacy only: exempt from Special Needs Surcharge (+€3)</span>\r\n                        </label>\r\n                        \r\n                        <label class=\"checkbox-label\">\r\n                            <input \r\n                                type=\"checkbox\" \r\n                                bind:checked={editingModifier.exempt_from_lithuanian_surcharge}\r\n                            />\r\n                            <span>Legacy only: exempt from Lithuanian Second Language Surcharge (+€3)</span>\r\n                        </label>\r\n                    </div>\r\n                    \r\n                    <div class=\"section\">\r\n                        <h5>Discount exemptions</h5>\r\n                        <p class=\"section-description\">For classes from 2026-09-01, check this box to prevent the €2 weekly frequency discount. Active, non-cancelled lessons across every teacher, subject, and class type are counted in the class’s Lithuanian Monday–Sunday week.</p>\r\n                        \r\n                        <label class=\"checkbox-label\">\r\n                            <input \r\n                                type=\"checkbox\" \r\n                                bind:checked={editingModifier.exempt_from_high_activity_discount}\r\n                            />\r\n                            <span>Exempt from Weekly Frequency Discount (-€2)</span>\r\n                        </label>\r\n                        \r\n                        <label class=\"checkbox-label\">\r\n                            <input \r\n                                type=\"checkbox\" \r\n                                bind:checked={editingModifier.exempt_from_family_discount}\r\n                            />\r\n                            <span>Exempt this student from Family Discount (-€2 when 2+ family members have non-cancelled lessons in the same month)</span>\r\n                        </label>\r\n                    </div>\r\n                    \r\n                    <div class=\"section\">\r\n                        <h5>Custom Pricing</h5>\r\n                        <p class=\"section-description\">From 2026-09-01, standard prices are €27 (grades 1–9), €29 (grades 10–12, university, missing or invalid grade), and €16 per student in every class of two or more students. A custom base can still receive the €2 weekly frequency discount; custom group and final manual/timeframe prices are final.</p>\r\n                        \r\n                        <div class=\"form-group\">\r\n                            <label for=\"custom-base-price\">Custom Base Price (€):</label>\r\n                            <input \r\n                                id=\"custom-base-price\"\r\n                                type=\"number\" \r\n                                step=\"0.01\"\r\n                                min=\"0\"\r\n                                bind:value={editingModifier.custom_base_price}\r\n                                placeholder=\"Leave empty for standard €27 / €29 pricing\"\r\n                                class=\"form-input\"\r\n                            />\r\n                        </div>\r\n                        \r\n                        <div class=\"form-group\">\r\n                            <label for=\"custom-minimum-price\">Custom Minimum Price (€):</label>\r\n                            <input \r\n                                id=\"custom-minimum-price\"\r\n                                type=\"number\" \r\n                                step=\"0.01\"\r\n                                min=\"0\"\r\n                                bind:value={editingModifier.custom_minimum_price}\r\n                                placeholder=\"Default minimum: €5\"\r\n                                class=\"form-input\"\r\n                            />\r\n                        </div>\r\n                        \r\n                        <div class=\"form-group\">\r\n                            <label for=\"custom-group-price-2\">Custom Group Price (2 students) (€):</label>\r\n                            <input \r\n                                id=\"custom-group-price-2\"\r\n                                type=\"number\" \r\n                                step=\"0.01\"\r\n                                min=\"0\"\r\n                                bind:value={editingModifier.custom_group_price_2_students}\r\n                                placeholder=\"Leave empty for standard €16\"\r\n                                class=\"form-input\"\r\n                            />\r\n                        </div>\r\n                        \r\n                        <div class=\"form-group\">\r\n                            <label for=\"custom-group-price-3plus\">Custom Group Price (3+ students) (€):</label>\r\n                            <input \r\n                                id=\"custom-group-price-3plus\"\r\n                                type=\"number\" \r\n                                step=\"0.01\"\r\n                                min=\"0\"\r\n                                bind:value={editingModifier.custom_group_price_3plus_students}\r\n                                placeholder=\"Leave empty for standard €16\"\r\n                                class=\"form-input\"\r\n                            />\r\n                        </div>\r\n\r\n                        <div class=\"type-pricing-subsection\">\r\n                            <h6>Per-Type Base Price (Subject + Teacher)</h6>\r\n                            <p class=\"section-description\">Set final prices for date ranges of a subject and teacher. Date ranges are inclusive, apply to individual and family classes, and may not overlap even when inactive. A matching timeframe price is final and does not receive the weekly discount.</p>\r\n\r\n                            {#if isLoadingTypeOptions}\r\n                                <p class=\"loading-classes\">Loading class types...</p>\r\n                            {:else if availableTypeOptions.length === 0}\r\n                                <p class=\"no-types\">No recent or upcoming class types found for this student.</p>\r\n                            {:else}\r\n                                <div class=\"type-pricing-form\">\r\n                                    <div class=\"form-group\">\r\n                                        <label for=\"type-key\">Class Type:</label>\r\n                                        <select id=\"type-key\" class=\"form-input\" bind:value={selectedTypeKey} disabled={editingTypeRuleId !== null}>\r\n                                            {#each availableTypeOptions as opt (opt.key)}\r\n                                                <option value={opt.key}>{opt.label}</option>\r\n                                            {/each}\r\n                                        </select>\r\n                                    </div>\r\n\r\n                                    <div class=\"form-group\">\r\n                                        <label for=\"type-base-price\">Type Base Price (€):</label>\r\n                                        <input\r\n                                            id=\"type-base-price\"\r\n                                            type=\"number\"\r\n                                            step=\"0.01\"\r\n                                            min=\"0\"\r\n                                            bind:value={typeBasePriceInput}\r\n                                            placeholder=\"e.g. 22\"\r\n                                            class=\"form-input\"\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div class=\"form-group\">\r\n                                        <label for=\"type-valid-from\">Valid From (optional):</label>\r\n                                        <input\r\n                                            id=\"type-valid-from\"\r\n                                            type=\"date\"\r\n                                            bind:value={typeValidFrom}\r\n                                            class=\"form-input\"\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div class=\"form-group\">\r\n                                        <label for=\"type-valid-until\">Valid Until (optional):</label>\r\n                                        <input\r\n                                            id=\"type-valid-until\"\r\n                                            type=\"date\"\r\n                                            bind:value={typeValidUntil}\r\n                                            class=\"form-input\"\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div class=\"form-actions\">\r\n                                        <button type=\"button\" class=\"save-btn\" on:click={upsertTypeBasePriceRule} disabled={isSaving}>\r\n                                            {editingTypeRuleId ? 'Update Timeframe' : 'Add Timeframe'}\r\n                                        </button>\r\n                                        {#if editingTypeRuleId}\r\n                                            <button type=\"button\" class=\"cancel-btn\" on:click={resetTypeBasePriceForm} disabled={isSaving}>Cancel Edit</button>\r\n                                        {/if}\r\n                                    </div>\r\n                                </div>\r\n                            {/if}\r\n\r\n                            {#if isLoadingTypeRules}\r\n                                <p class=\"loading-classes\">Loading type pricing rules...</p>\r\n                            {:else if typeBasePriceRules.length === 0}\r\n                                <p class=\"no-types\">No type pricing rules yet.</p>\r\n                            {:else}\r\n                                <div class=\"type-rules-table\">\r\n                                    <div class=\"type-rules-header\">\r\n                                        <span>Subject</span>\r\n                                        <span>Teacher</span>\r\n                                        <span>Price</span>\r\n                                        <span>From</span>\r\n                                        <span>Until</span>\r\n                                        <span>Active</span>\r\n                                        <span></span>\r\n                                    </div>\r\n                                    {#each typeBasePriceRules as rule (rule.id)}\r\n                                        <div class=\"type-rules-row\">\r\n                                            <span class=\"cell\">{rule.subject_name}</span>\r\n                                            <span class=\"cell\">{rule.teacher_name}</span>\r\n                                            <span class=\"cell\">€{formatEuroAmount(rule.base_price)}</span>\r\n                                            <span class=\"cell\">{rule.valid_from || '—'}</span>\r\n                                            <span class=\"cell\">{rule.valid_until || '—'}</span>\r\n                                            <span class=\"cell\">\r\n                                                <input\r\n                                                    type=\"checkbox\"\r\n                                                    checked={!!rule.is_active}\r\n                                                    on:change={(e) => toggleTypeBasePriceRuleActive(rule, e.currentTarget.checked)}\r\n                                                />\r\n                                            </span>\r\n                                            <span class=\"cell actions\">\r\n                                                <button type=\"button\" class=\"edit-btn\" on:click={() => editTypeBasePriceRule(rule)} disabled={isSaving}>\r\n                                                    Edit\r\n                                                </button>\r\n                                                <button type=\"button\" class=\"delete-btn\" on:click={() => deleteTypeBasePriceRule(rule.id)} disabled={isSaving}>\r\n                                                    Delete\r\n                                                </button>\r\n                                            </span>\r\n                                        </div>\r\n                                    {/each}\r\n                                </div>\r\n                            {/if}\r\n                        </div>\r\n                    </div>\r\n                    \r\n                    <div class=\"section\">\r\n                        <h5>Manual Class Price Overrides</h5>\r\n                        <p class=\"section-description\">Set a final per-student price for individual classes (ignores the pricing engine). Use month navigation to browse different months:</p>\r\n                        \r\n                        <!-- Month selector -->\r\n                        <div class=\"month-selector\">\r\n                            <button type=\"button\" class=\"month-nav-btn\" on:click={previousMonth}>&lt;</button>\r\n                            <span class=\"month-display\">{formatMonth(selectedMonth)}</span>\r\n                            <button type=\"button\" class=\"month-nav-btn\" on:click={nextMonth}>&gt;</button>\r\n                        </div>\r\n                        \r\n                        <!-- Class list -->\r\n                        {#if isLoadingClasses}\r\n                            <p class=\"loading-classes\">Loading classes...</p>\r\n                        {:else if studentClasses.length === 0}\r\n                            <p class=\"no-classes\">No classes found for this month.</p>\r\n                        {:else}\r\n                            <div class=\"classes-grid\">\r\n                                {#each studentClasses as classItem (classItem.id)}\r\n                                    {@const isFutureClass = new Date(classItem.date_local) > new Date()}\r\n                                    {@const overridden = isClassOverridden(classItem)}\r\n                                    <label\r\n                                        class=\"class-discount-label\"\r\n                                        class:discounted={overridden}\r\n                                        class:no-transaction={!classItem.transaction_found && !isFutureClass}\r\n                                        class:future-class={isFutureClass}\r\n                                        role=\"button\"\r\n                                        tabindex=\"0\"\r\n                                        on:click={() => openOverrideModal(classItem)}\r\n                                        on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && openOverrideModal(classItem)}\r\n                                    >\r\n                                        <div class=\"class-info\">\r\n                                            <span class=\"class-name\">{classItem.name}</span>\r\n                                            <span class=\"class-date\">{formatDate(classItem.date_local)}</span>\r\n                                            {#if overridden}\r\n                                                <span class=\"class-price\" class:discounted-price={overridden}>\r\n                                                    {#if classItem.original_price > 0}\r\n                                                        €{formatEuroAmount(classItem.override_amount ?? classItem.price)}\r\n                                                        <span class=\"original-price\">(was €{formatEuroAmount(classItem.original_price)})</span>\r\n                                                    {:else}\r\n                                                        €{formatEuroAmount(classItem.override_amount ?? classItem.price)}\r\n                                                    {/if}\r\n                                                </span>\r\n                                            {/if}\r\n                                            {#if !classItem.transaction_found && !isFutureClass}\r\n                                                <span class=\"warning\">⚠️ No transaction found</span>\r\n                                            {:else if classItem.pricing_error}\r\n                                                <span class=\"warning\">⚠️ Price calculation failed; no fallback price was applied</span>\r\n                                            {:else if isFutureClass && !overridden}\r\n                                                <span class=\"info-badge\">📅 Pre-emptive override available</span>\r\n                                            {:else if isFutureClass && overridden}\r\n                                                <span class=\"info-badge\">✅ Pre-emptive override applied</span>\r\n                                            {/if}\r\n                                        </div>\r\n                                    </label>\r\n                                {/each}\r\n                            </div>\r\n                            \r\n                            <div class=\"discount-summary\">\r\n                                {#if studentClasses.length > 0}\r\n                                    {@const totalClasses = studentClasses.length}\r\n                                    {@const overriddenClasses = studentClasses.filter(c => isClassOverridden(c)).length}\r\n                                    {@const originalTotal = studentClasses.reduce((sum, c) => sum + (c.original_price || 0), 0)}\r\n                                    {@const currentTotal = studentClasses.reduce((sum, c) => sum + (c.price || 0), 0)}\r\n                                    \r\n                                    <p><strong>Summary:</strong> {overriddenClasses} of {totalClasses} classes overridden</p>\r\n                                    <p><strong>Total:</strong> €{currentTotal.toFixed(2)} \r\n                                        {#if originalTotal > currentTotal}\r\n                                            <span class=\"original-price\">(was €{originalTotal.toFixed(2)})</span>\r\n                                        {/if}\r\n                                    </p>\r\n                                {/if}\r\n                            </div>\r\n                        {/if}\r\n                    </div>\r\n\r\n                    {#if showOverrideModal && selectedClassItem}\r\n                        <div class=\"modal-overlay\" on:click={closeOverrideModal} on:keydown={(e) => e.key === 'Escape' && closeOverrideModal()}>\r\n                            <div class=\"modal-content\" on:click|stopPropagation on:keydown|stopPropagation>\r\n                                <div class=\"modal-header\">\r\n                                    <h4>Manual Price Override</h4>\r\n                                    <button class=\"close-btn\" on:click={closeOverrideModal}>×</button>\r\n                                </div>\r\n                                <div class=\"modal-body\">\r\n                                    <p><strong>Class:</strong> {selectedClassItem.name}</p>\r\n                                    <p><strong>Date:</strong> {formatDate(selectedClassItem.date_local)}</p>\r\n\r\n                                    <div class=\"form-group\">\r\n                                        <label for=\"override-price\">New final price (€):</label>\r\n                                        <input\r\n                                            id=\"override-price\"\r\n                                            type=\"number\"\r\n                                            step=\"0.01\"\r\n                                            min=\"0\"\r\n                                            bind:value={overridePrice}\r\n                                            class=\"form-input\"\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div class=\"form-group\">\r\n                                        <label for=\"override-notes\">Notes (optional):</label>\r\n                                        <textarea\r\n                                            id=\"override-notes\"\r\n                                            rows=\"3\"\r\n                                            bind:value={overrideNotes}\r\n                                            class=\"form-input\"\r\n                                            placeholder=\"Why was this override applied?\"\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"modal-footer\">\r\n                                    <button type=\"button\" class=\"action-btn delete\" on:click={clearClassOverride}>\r\n                                        Clear override\r\n                                    </button>\r\n                                    <button type=\"button\" class=\"action-btn\" on:click={setOverrideToZero}>\r\n                                        Set to €0\r\n                                    </button>\r\n                                    <button type=\"button\" class=\"action-btn edit\" on:click={saveClassOverride}>\r\n                                        Save\r\n                                    </button>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    {/if}\r\n                    \r\n                    <div class=\"section\">\r\n                        <h5>Notes</h5>\r\n                        <textarea \r\n                            bind:value={editingModifier.notes}\r\n                            placeholder=\"Internal notes about why this pricing modifier was applied...\"\r\n                            rows=\"3\"\r\n                            class=\"form-textarea\"\r\n                        ></textarea>\r\n                    </div>\r\n                    \r\n                    <div class=\"section\">\r\n                        <label class=\"checkbox-label\">\r\n                            <input \r\n                                type=\"checkbox\" \r\n                                bind:checked={editingModifier.is_active}\r\n                            />\r\n                            <span><strong>Active</strong> (uncheck to temporarily disable this modifier)</span>\r\n                        </label>\r\n                    </div>\r\n                </div>\r\n                \r\n                <div class=\"modal-footer\">\r\n                    {#if !embedded}\r\n                        <button \r\n                            class=\"btn secondary\"\r\n                            on:click={cancelEditingModifier}\r\n                            disabled={isSaving}\r\n                        >\r\n                            Cancel\r\n                        </button>\r\n                    {/if}\r\n                    <button \r\n                        class=\"btn primary\"\r\n                        on:click={saveModifier}\r\n                        disabled={isSaving}\r\n                    >\r\n                        {#if isSaving}\r\n                            Saving...\r\n                        {:else}\r\n                            Save Pricing Rules\r\n                        {/if}\r\n                    </button>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    {/if}\r\n    \r\n    <!-- Messages -->\r\n    {#if errorMessage}\r\n        <div class=\"error-message\">{errorMessage}</div>\r\n    {/if}\r\n    \r\n    {#if successMessage}\r\n        <div class=\"success-message\">{successMessage}</div>\r\n    {/if}\r\n</div>\r\n\r\n<style>\r\n    .pricing-modifier-container {\r\n        max-width: 900px;\r\n        margin: 0 auto;\r\n        padding: 20px;\r\n    }\r\n\r\n    .pricing-modifier-container.embedded {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n    \r\n    .description {\r\n        color: #666;\r\n        margin-bottom: 20px;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .filter-buttons {\r\n        display: flex;\r\n        gap: 10px;\r\n        margin-bottom: 20px;\r\n        flex-wrap: wrap;\r\n    }\r\n    \r\n    .filter-btn {\r\n        padding: 8px 16px;\r\n        border: 1px solid #ddd;\r\n        background: white;\r\n        cursor: pointer;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .filter-btn.active {\r\n        background: #fab45a;\r\n        color: black;\r\n        border-color: #fab45a;\r\n    }\r\n    \r\n    .filter-btn:hover:not(.active) {\r\n        background: #f5f5f5;\r\n    }\r\n    \r\n    .search-container {\r\n        margin-bottom: 20px;\r\n    }\r\n    \r\n    .search-input {\r\n        width: 100%;\r\n        padding: 10px;\r\n        border: 1px solid #ddd;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n    }\r\n    \r\n    .loading, .no-users {\r\n        text-align: center;\r\n        padding: 40px;\r\n        color: #666;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .users-list {\r\n        background: white;\r\n        border: 1px solid #ddd;\r\n        border-radius: 8px;\r\n        overflow: hidden;\r\n    }\r\n    \r\n    .user-item {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        padding: 15px 20px;\r\n        border-bottom: 1px solid #eee;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n    \r\n    .user-item:last-child {\r\n        border-bottom: none;\r\n    }\r\n    \r\n    .user-item:hover {\r\n        background-color: #f9f9f9;\r\n    }\r\n    \r\n    .user-item.has-modifier {\r\n        background-color: #fff8e1;\r\n    }\r\n    \r\n    .user-item.has-modifier:hover {\r\n        background-color: #fff3c4;\r\n    }\r\n    \r\n    .user-info {\r\n        flex: 1;\r\n    }\r\n    \r\n    .user-name {\r\n        font-weight: 500;\r\n        margin-bottom: 4px;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        flex-wrap: wrap;\r\n    }\r\n    \r\n    .user-type {\r\n        padding: 2px 8px;\r\n        border-radius: 12px;\r\n        font-size: 11px;\r\n        font-weight: bold;\r\n        text-transform: uppercase;\r\n    }\r\n    \r\n    .user-type.student {\r\n        background-color: #e3f2fd;\r\n        color: #1976d2;\r\n    }\r\n    \r\n    .user-type.teacher {\r\n        background-color: #f3e5f5;\r\n        color: #7b1fa2;\r\n    }\r\n    \r\n    .modifier-status {\r\n        padding: 2px 8px;\r\n        border-radius: 12px;\r\n        font-size: 11px;\r\n        font-weight: bold;\r\n        text-transform: uppercase;\r\n    }\r\n    \r\n    .modifier-status.custom {\r\n        background-color: #fff3cd;\r\n        color: #856404;\r\n    }\r\n    \r\n    .modifier-status.default {\r\n        background-color: #d4edda;\r\n        color: #155724;\r\n    }\r\n    \r\n    .user-email {\r\n        color: #666;\r\n        font-size: 13px;\r\n        margin-bottom: 4px;\r\n    }\r\n    \r\n    .modifier-summary {\r\n        color: #666;\r\n        font-size: 12px;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .user-actions {\r\n        display: flex;\r\n        gap: 8px;\r\n        flex-shrink: 0;\r\n    }\r\n    \r\n    .action-btn {\r\n        padding: 6px 12px;\r\n        border: 1px solid;\r\n        background: white;\r\n        cursor: pointer;\r\n        border-radius: 4px;\r\n        font-size: 12px;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .action-btn.edit {\r\n        border-color: #007bff;\r\n        color: #007bff;\r\n    }\r\n    \r\n    .action-btn.edit:hover:not(:disabled) {\r\n        background: #007bff;\r\n        color: white;\r\n    }\r\n    \r\n    .action-btn.delete {\r\n        border-color: #dc3545;\r\n        color: #dc3545;\r\n    }\r\n    \r\n    .action-btn.delete:hover:not(:disabled) {\r\n        background: #dc3545;\r\n        color: white;\r\n    }\r\n    \r\n    .action-btn:disabled {\r\n        opacity: 0.5;\r\n        cursor: not-allowed;\r\n    }\r\n    \r\n    /* Modal styles */\r\n    .modal-overlay {\r\n        position: fixed;\r\n        top: 0;\r\n        left: 0;\r\n        right: 0;\r\n        bottom: 0;\r\n        background: rgba(0, 0, 0, 0.5);\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        z-index: 1000;\r\n        padding: 20px;\r\n    }\r\n\r\n    .modal-overlay.embedded {\r\n        position: static;\r\n        top: auto;\r\n        left: auto;\r\n        right: auto;\r\n        bottom: auto;\r\n        background: transparent;\r\n        z-index: auto;\r\n        padding: 0;\r\n        display: block;\r\n    }\r\n    \r\n    .modal-content {\r\n        background: white;\r\n        border-radius: 8px;\r\n        max-width: 600px;\r\n        width: 100%;\r\n        max-height: 90vh;\r\n        overflow-y: auto;\r\n        box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n    }\r\n\r\n    .modal-content.embedded {\r\n        max-width: none;\r\n        max-height: none;\r\n        height: auto;\r\n        overflow: visible;\r\n        box-shadow: none;\r\n        border: 1px solid rgba(0, 0, 0, 0.08);\r\n    }\r\n    \r\n    .modal-header {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        padding: 20px;\r\n        border-bottom: 1px solid #eee;\r\n        background: #f8f9fa;\r\n        border-radius: 8px 8px 0 0;\r\n    }\r\n    \r\n    .modal-header h4 {\r\n        margin: 0;\r\n        color: #333;\r\n    }\r\n    \r\n    .close-btn {\r\n        background: none;\r\n        border: none;\r\n        font-size: 24px;\r\n        cursor: pointer;\r\n        color: #666;\r\n        padding: 0;\r\n        width: 30px;\r\n        height: 30px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 4px;\r\n    }\r\n    \r\n    .close-btn:hover {\r\n        background: #e9ecef;\r\n        color: #333;\r\n    }\r\n    \r\n    .modal-body {\r\n        padding: 20px;\r\n    }\r\n    \r\n    .section {\r\n        margin-bottom: 25px;\r\n        padding-bottom: 20px;\r\n        border-bottom: 1px solid #f0f0f0;\r\n    }\r\n    \r\n    .section:last-child {\r\n        border-bottom: none;\r\n        margin-bottom: 0;\r\n    }\r\n    \r\n    .section h5 {\r\n        margin: 0 0 8px 0;\r\n        color: #333;\r\n        font-size: 16px;\r\n    }\r\n    \r\n    .section-description {\r\n        margin: 0 0 15px 0;\r\n        color: #666;\r\n        font-size: 13px;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .checkbox-label {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        gap: 8px;\r\n        margin-bottom: 12px;\r\n        cursor: pointer;\r\n        padding: 8px;\r\n        border-radius: 4px;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n    \r\n    .checkbox-label:hover {\r\n        background-color: #f8f9fa;\r\n    }\r\n    \r\n    .checkbox-label input[type=\"checkbox\"] {\r\n        margin: 2px 0 0 0;\r\n        cursor: pointer;\r\n    }\r\n    \r\n    .checkbox-label span {\r\n        font-size: 14px;\r\n        line-height: 1.4;\r\n    }\r\n    \r\n    .form-group {\r\n        margin-bottom: 15px;\r\n    }\r\n    \r\n    .form-group label {\r\n        display: block;\r\n        margin-bottom: 5px;\r\n        font-weight: 500;\r\n        color: #333;\r\n        font-size: 14px;\r\n    }\r\n    \r\n    .form-input, .form-textarea {\r\n        width: 100%;\r\n        padding: 8px 12px;\r\n        border: 1px solid #ddd;\r\n        border-radius: 4px;\r\n        font-size: 14px;\r\n        font-family: inherit;\r\n    }\r\n\r\n    .type-pricing-subsection {\r\n        margin-top: 18px;\r\n        padding-top: 12px;\r\n        border-top: 1px solid #eee;\r\n    }\r\n\r\n    .type-pricing-subsection h6 {\r\n        margin: 0 0 6px 0;\r\n        font-size: 14px;\r\n        font-weight: 700;\r\n        color: #333;\r\n    }\r\n\r\n    .type-pricing-form {\r\n        display: grid;\r\n        grid-template-columns: 1fr 220px;\r\n        gap: 12px;\r\n        align-items: end;\r\n        margin-bottom: 12px;\r\n    }\r\n\r\n    .type-pricing-form .form-actions {\r\n        grid-column: 1 / -1;\r\n        display: flex;\r\n        justify-content: flex-end;\r\n        gap: 10px;\r\n    }\r\n\r\n    .type-rules-table {\r\n        border: 1px solid #e0e0e0;\r\n        border-radius: 6px;\r\n        overflow: hidden;\r\n        background: #fff;\r\n    }\r\n\r\n    .type-rules-header,\r\n    .type-rules-row {\r\n        display: grid;\r\n        grid-template-columns: 1.2fr 1.4fr 90px 110px 110px 70px 140px;\r\n        gap: 10px;\r\n        align-items: center;\r\n        padding: 8px 10px;\r\n    }\r\n\r\n    .type-rules-header {\r\n        background: #f8f9fa;\r\n        font-weight: 700;\r\n        font-size: 12px;\r\n        border-bottom: 1px solid #e0e0e0;\r\n        color: #333;\r\n    }\r\n\r\n    .type-rules-row {\r\n        font-size: 13px;\r\n        border-bottom: 1px solid #f0f0f0;\r\n    }\r\n\r\n    .type-rules-row:last-child {\r\n        border-bottom: none;\r\n    }\r\n\r\n    .type-rules-row .actions {\r\n        display: flex;\r\n        justify-content: flex-end;\r\n        gap: 6px;\r\n    }\r\n\r\n    .edit-btn {\r\n        border: 1px solid #14695b;\r\n        border-radius: 4px;\r\n        padding: 5px 8px;\r\n        background: #fff;\r\n        color: #14695b;\r\n        cursor: pointer;\r\n    }\r\n\r\n    .no-types {\r\n        color: #666;\r\n        font-style: italic;\r\n        margin: 8px 0;\r\n    }\r\n    \r\n    .form-textarea {\r\n        resize: vertical;\r\n        min-height: 80px;\r\n    }\r\n    \r\n    /* Manual Class Discount Styles */\r\n    .month-selector {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 15px;\r\n        margin-bottom: 20px;\r\n        padding: 10px;\r\n        background: #f8f9fa;\r\n        border-radius: 6px;\r\n    }\r\n    \r\n    .month-nav-btn {\r\n        background: #007bff;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 4px;\r\n        padding: 8px 12px;\r\n        cursor: pointer;\r\n        font-weight: bold;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n    \r\n    .month-nav-btn:hover {\r\n        background: #0056b3;\r\n    }\r\n    \r\n    .month-display {\r\n        font-size: 16px;\r\n        font-weight: 600;\r\n        color: #333;\r\n        min-width: 150px;\r\n        text-align: center;\r\n    }\r\n    \r\n    .loading-classes, .no-classes {\r\n        text-align: center;\r\n        padding: 20px;\r\n        color: #666;\r\n        font-style: italic;\r\n        background: #f8f9fa;\r\n        border-radius: 6px;\r\n        border: 1px solid #e0e0e0;\r\n    }\r\n    \r\n    .classes-grid {\r\n        display: grid;\r\n        grid-template-columns: 1fr;\r\n        gap: 8px;\r\n        margin-bottom: 20px;\r\n        max-height: 300px;\r\n        overflow-y: auto;\r\n        padding: 10px;\r\n        border: 1px solid #e0e0e0;\r\n        border-radius: 6px;\r\n        background: #fafafa;\r\n    }\r\n    \r\n    .class-discount-label {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        gap: 10px;\r\n        padding: 12px;\r\n        border: 1px solid #ddd;\r\n        border-radius: 6px;\r\n        background: white;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .class-discount-label:hover {\r\n        background: #f0f8ff;\r\n        border-color: #007bff;\r\n    }\r\n    \r\n    .class-discount-label.discounted {\r\n        background: #d4edda;\r\n        border-color: #28a745;\r\n    }\r\n    \r\n    .class-discount-label.discounted:hover {\r\n        background: #c3e6cb;\r\n    }\r\n    \r\n    .class-discount-label.no-transaction {\r\n        background: #f8d7da;\r\n        border-color: #dc3545;\r\n        cursor: not-allowed;\r\n    }\r\n    \r\n    .class-discount-label.no-transaction:hover {\r\n        background: #f5c6cb;\r\n    }\r\n    \r\n    .class-discount-label.future-class {\r\n        background: #e7f3ff;\r\n        border-color: #2196f3;\r\n    }\r\n    \r\n    .class-discount-label.future-class:hover {\r\n        background: #d0e7ff;\r\n    }\r\n    \r\n    .class-discount-label.future-class.discounted {\r\n        background: #e8f5e9;\r\n        border-color: #4caf50;\r\n    }\r\n    \r\n    .class-discount-label.future-class.discounted:hover {\r\n        background: #c8e6c9;\r\n    }\r\n    \r\n    .class-discount-label input[type=\"checkbox\"] {\r\n        margin-top: 2px;\r\n        cursor: pointer;\r\n    }\r\n    \r\n    .class-discount-label input[type=\"checkbox\"]:disabled {\r\n        cursor: not-allowed;\r\n    }\r\n    \r\n    .class-info {\r\n        flex: 1;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 4px;\r\n    }\r\n    \r\n    .class-name {\r\n        font-weight: 600;\r\n        color: #333;\r\n        font-size: 14px;\r\n        line-height: 1.3;\r\n    }\r\n    \r\n    .class-date {\r\n        font-size: 12px;\r\n        color: #666;\r\n    }\r\n    \r\n    .class-price {\r\n        font-size: 13px;\r\n        font-weight: 600;\r\n        color: #28a745;\r\n    }\r\n    \r\n    .class-price.discounted-price {\r\n        color: #007bff;\r\n    }\r\n    \r\n    .original-price {\r\n        font-size: 11px;\r\n        color: #999;\r\n        text-decoration: line-through;\r\n        font-weight: normal;\r\n    }\r\n    \r\n    .warning {\r\n        font-size: 11px;\r\n        color: #dc3545;\r\n        font-weight: 600;\r\n    }\r\n    \r\n    .info-badge {\r\n        font-size: 11px;\r\n        color: #2196f3;\r\n        font-weight: 600;\r\n    }\r\n    \r\n    .future-badge {\r\n        font-size: 11px;\r\n        color: #2196f3;\r\n        font-weight: 600;\r\n        background: #e3f2fd;\r\n        padding: 2px 6px;\r\n        border-radius: 3px;\r\n        margin-left: 5px;\r\n    }\r\n    \r\n    .detection-method {\r\n        font-size: 10px;\r\n        color: #6c757d;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .discount-summary {\r\n        background: #f8f9fa;\r\n        padding: 15px;\r\n        border-radius: 6px;\r\n        border: 1px solid #e9ecef;\r\n        margin-top: 15px;\r\n    }\r\n    \r\n    .discount-summary p {\r\n        margin: 5px 0;\r\n        font-size: 14px;\r\n        line-height: 1.4;\r\n        color: #495057;\r\n    }\r\n    \r\n    \r\n    .modal-footer {\r\n        display: flex;\r\n        justify-content: flex-end;\r\n        gap: 12px;\r\n        padding: 20px;\r\n        border-top: 1px solid #eee;\r\n        background: #f8f9fa;\r\n        border-radius: 0 0 8px 8px;\r\n    }\r\n    \r\n    .btn {\r\n        padding: 10px 20px;\r\n        border: none;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n        font-weight: 500;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .btn.primary {\r\n        background: #28a745;\r\n        color: white;\r\n    }\r\n    \r\n    .btn.primary:hover:not(:disabled) {\r\n        background: #218838;\r\n    }\r\n    \r\n    .btn.secondary {\r\n        background: #6c757d;\r\n        color: white;\r\n    }\r\n    \r\n    .btn.secondary:hover:not(:disabled) {\r\n        background: #545b62;\r\n    }\r\n    \r\n    .btn:disabled {\r\n        opacity: 0.6;\r\n        cursor: not-allowed;\r\n    }\r\n    \r\n    .error-message {\r\n        background: #f8d7da;\r\n        color: #721c24;\r\n        padding: 12px;\r\n        border-radius: 6px;\r\n        margin-top: 20px;\r\n        border: 1px solid #f5c6cb;\r\n    }\r\n    \r\n    .success-message {\r\n        background: #d4edda;\r\n        color: #155724;\r\n        padding: 12px;\r\n        border-radius: 6px;\r\n        margin-top: 20px;\r\n        border: 1px solid #c3e6cb;\r\n    }\r\n    \r\n    /* Responsive design */\r\n    @media (max-width: 768px) {\r\n        .pricing-modifier-container {\r\n            padding: 15px;\r\n        }\r\n        \r\n        .filter-buttons {\r\n            flex-direction: column;\r\n        }\r\n        \r\n        .user-item {\r\n            flex-direction: column;\r\n            align-items: flex-start;\r\n            gap: 15px;\r\n        }\r\n        \r\n        .user-actions {\r\n            align-self: stretch;\r\n            justify-content: space-between;\r\n        }\r\n        \r\n        .modal-overlay {\r\n            padding: 10px;\r\n        }\r\n        \r\n        .modal-content {\r\n            max-height: 95vh;\r\n        }\r\n        \r\n        .modal-footer {\r\n            flex-direction: column;\r\n        }\r\n    }\r\n</style>\r\n","export function getTeacherPricingSummary(modifier) {\r\n    if (!modifier) {\r\n        return 'Default pricing applies (€15/€18/€22 + standard surcharges + €2 performance bonus)';\r\n    }\r\n\r\n    const customPrices = [];\r\n    if (modifier.individual_base_price !== 15) customPrices.push(`Individual: €${modifier.individual_base_price}`);\r\n    if (modifier.pair_base_price !== 18) customPrices.push(`Pair: €${modifier.pair_base_price}`);\r\n    if (modifier.group_base_price !== 22) customPrices.push(`Group: €${modifier.group_base_price}`);\r\n    if (modifier.ib_surcharge !== 5) customPrices.push(`IB: €${modifier.ib_surcharge}`);\r\n    if (modifier.special_needs_surcharge !== 3) customPrices.push(`Special Needs: €${modifier.special_needs_surcharge}`);\r\n    if (modifier.lithuanian_surcharge !== 3) customPrices.push(`Lithuanian: €${modifier.lithuanian_surcharge}`);\r\n    if (modifier.performance_bonus !== 2) customPrices.push(`Bonus: €${modifier.performance_bonus}`);\r\n\r\n    return customPrices.length > 0 ? customPrices.join(', ') : 'Default pricing applies';\r\n}\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import { formatEuroAmount } from './money.js';\r\n    import { getApiBase } from './apiBase.js';\r\n    import { getTeacherPricingSummary } from './teacherPricingSummary.js';\r\n\r\n    export let embedded = false;\r\n    export let teacherId = null;\r\n    export let teacher = null; // optional: passed from dashboard for display name/email\r\n    const apiBase = getApiBase();\r\n    const PRICE_INPUT_STEP = 1;\r\n\r\n    // State variables\r\n    let teachers = [];\r\n    let filteredTeachers = [];\r\n    let selectedTeacherId = null;\r\n    let isLoading = false;\r\n    let isSaving = false;\r\n    let errorMessage = '';\r\n    let successMessage = '';\r\n    let searchQuery = '';\r\n    \r\n    // Filter state\r\n    let activeFilter = 'all'; // 'all', 'with_modifiers', 'without_modifiers'\r\n    \r\n    // Pricing modifier data\r\n    let pricingModifiers = new Map(); // teacher_id -> modifier object\r\n    let editingTeacherId = null;\r\n    let editingModifier = null;\r\n\r\n    // Manual class payment override data\r\n    let selectedMonth = new Date();\r\n    let teacherClasses = [];\r\n    let isLoadingClasses = false;\r\n    let currentClassesRequestKey = null;\r\n\r\n    // Manual class override modal state\r\n    let showOverrideModal = false;\r\n    let selectedClassItem = null;\r\n    let overridePrice = '';\r\n    let overrideNotes = '';\r\n\r\n    // Load teachers on component mount\r\n    onMount(async () => {\r\n        await loadTeachers();\r\n        await loadPricingModifiers();\r\n    });\r\n    \r\n    async function loadTeachers() {\r\n        isLoading = true;\r\n        errorMessage = '';\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/teachers-for-pricing/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                const errorData = await response.json();\r\n                throw new Error(errorData.message || 'Failed to load teachers');\r\n            }\r\n            \r\n            const data = await response.json();\r\n            teachers = data.teachers || [];\r\n            applyFilters();\r\n            \r\n        } catch (error) {\r\n            errorMessage = `Error loading teachers: ${error.message}`;\r\n            console.error('Error loading teachers:', error);\r\n        } finally {\r\n            isLoading = false;\r\n        }\r\n    }\r\n    \r\n    async function loadPricingModifiers() {\r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/teacher-pricing-modifiers/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                pricingModifiers = new Map();\r\n                data.modifiers.forEach(modifier => {\r\n                    pricingModifiers.set(modifier.teacher_id, modifier);\r\n                });\r\n                pricingModifiers = pricingModifiers; // Trigger reactivity\r\n            }\r\n            \r\n        } catch (error) {\r\n            console.error('Error loading teacher pricing modifiers:', error);\r\n        }\r\n    }\r\n    \r\n    function applyFilters() {\r\n        let filtered = [...teachers];\r\n        \r\n        // Apply modifier filter\r\n        if (activeFilter === 'with_modifiers') {\r\n            filtered = filtered.filter(teacher => pricingModifiers.has(teacher.id));\r\n        } else if (activeFilter === 'without_modifiers') {\r\n            filtered = filtered.filter(teacher => !pricingModifiers.has(teacher.id));\r\n        }\r\n        \r\n        // Apply search filter\r\n        if (searchQuery.trim()) {\r\n            const query = searchQuery.toLowerCase();\r\n            filtered = filtered.filter(teacher => \r\n                teacher.first_name.toLowerCase().includes(query) ||\r\n                teacher.last_name.toLowerCase().includes(query) ||\r\n                teacher.email.toLowerCase().includes(query) ||\r\n                teacher.username.toLowerCase().includes(query)\r\n            );\r\n        }\r\n        \r\n        filteredTeachers = filtered;\r\n    }\r\n    \r\n    function setFilter(filter) {\r\n        activeFilter = filter;\r\n        applyFilters();\r\n    }\r\n    \r\n    async function startEditingModifier(teacherId) {\r\n        if (embedded && teacherId != null) {\r\n            const exists = teachers.some(t => t.id === teacherId);\r\n            if (!exists) {\r\n                // Still allow editing by ID (modifier APIs are keyed by teacher_id),\r\n                // but show a helpful warning for the UI/confirm messages.\r\n                errorMessage = `Teacher metadata not found for ID ${teacherId}. You can still edit/reset pricing by ID.`;\r\n            }\r\n        }\r\n        editingTeacherId = teacherId;\r\n        const existingModifier = pricingModifiers.get(teacherId);\r\n        \r\n        // Default modifier structure with teacher pricing defaults\r\n        editingModifier = {\r\n            teacher_id: teacherId,\r\n            individual_base_price: 15.00,\r\n            pair_base_price: 18.00,\r\n            group_base_price: 22.00,\r\n            ib_surcharge: 5.00,\r\n            special_needs_surcharge: 3.00,\r\n            lithuanian_surcharge: 3.00,\r\n            performance_bonus: 2.00,\r\n            notes: '',\r\n            is_active: true,\r\n            ...existingModifier\r\n        };\r\n\r\n        await loadTeacherClassesForMonth(teacherId, selectedMonth);\r\n    }\r\n\r\n    async function loadTeacherClassesForMonth(teacherId, month) {\r\n        isLoadingClasses = true;\r\n        const token = localStorage.getItem('jwtToken');\r\n        const monthStr = `${month.getFullYear()}-${String(month.getMonth() + 1).padStart(2, '0')}`;\r\n        const requestKey = `${teacherId}:${monthStr}`;\r\n        currentClassesRequestKey = requestKey;\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/teacher-classes-for-override/?teacher_id=${teacherId}&month=${monthStr}`, {\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n\r\n            if (currentClassesRequestKey !== requestKey) {\r\n                return;\r\n            }\r\n\r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                teacherClasses = data.classes || [];\r\n            } else {\r\n                const errorData = await response.json();\r\n                console.error('Error loading teacher classes:', errorData.message);\r\n                teacherClasses = [];\r\n            }\r\n        } catch (error) {\r\n            if (currentClassesRequestKey === requestKey) {\r\n                console.error('Error loading teacher classes:', error);\r\n                teacherClasses = [];\r\n            }\r\n        } finally {\r\n            if (currentClassesRequestKey === requestKey) {\r\n                isLoadingClasses = false;\r\n            }\r\n        }\r\n    }\r\n\r\n    function isClassOverridden(classItem) {\r\n        return !!classItem?.is_overridden;\r\n    }\r\n\r\n    function openOverrideModal(classItem) {\r\n        selectedClassItem = classItem;\r\n        const current = isClassOverridden(classItem)\r\n            ? (classItem.override_amount ?? classItem.price)\r\n            : (classItem.original_price ?? classItem.price);\r\n        overridePrice = current !== null && current !== undefined ? String(current) : '';\r\n        overrideNotes = classItem.override_notes || '';\r\n        showOverrideModal = true;\r\n    }\r\n\r\n    function closeOverrideModal() {\r\n        showOverrideModal = false;\r\n        selectedClassItem = null;\r\n        overridePrice = '';\r\n        overrideNotes = '';\r\n    }\r\n\r\n    async function saveClassOverride() {\r\n        if (!selectedClassItem || !editingTeacherId) return;\r\n        const token = localStorage.getItem('jwtToken');\r\n        const parsed = parseFloat(overridePrice);\r\n        if (Number.isNaN(parsed) || parsed < 0) {\r\n            errorMessage = 'Override payment must be a non-negative number.';\r\n            return;\r\n        }\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/manual-teacher-class-payment/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                },\r\n                body: JSON.stringify({\r\n                    teacher_id: editingTeacherId,\r\n                    class_id: selectedClassItem.id,\r\n                    override_amount: parsed,\r\n                    notes: overrideNotes || 'Manual teacher payment override set via admin interface'\r\n                })\r\n            });\r\n\r\n            const data = await response.json();\r\n            if (response.ok) {\r\n                await loadTeacherClassesForMonth(editingTeacherId, selectedMonth);\r\n                successMessage = data.message;\r\n                setTimeout(() => { successMessage = ''; }, 3000);\r\n                closeOverrideModal();\r\n            } else {\r\n                errorMessage = `Error saving override: ${data.message}`;\r\n            }\r\n        } catch (error) {\r\n            errorMessage = `Error saving override: ${error.message}`;\r\n        }\r\n    }\r\n\r\n    async function clearClassOverride() {\r\n        if (!selectedClassItem || !editingTeacherId) return;\r\n        const token = localStorage.getItem('jwtToken');\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/manual-teacher-class-payment/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                },\r\n                body: JSON.stringify({\r\n                    teacher_id: editingTeacherId,\r\n                    class_id: selectedClassItem.id,\r\n                    clear_override: true,\r\n                    notes: overrideNotes || 'Manual teacher payment override cleared via admin interface'\r\n                })\r\n            });\r\n\r\n            const data = await response.json();\r\n            if (response.ok) {\r\n                await loadTeacherClassesForMonth(editingTeacherId, selectedMonth);\r\n                successMessage = data.message;\r\n                setTimeout(() => { successMessage = ''; }, 3000);\r\n                closeOverrideModal();\r\n            } else {\r\n                errorMessage = `Error clearing override: ${data.message}`;\r\n            }\r\n        } catch (error) {\r\n            errorMessage = `Error clearing override: ${error.message}`;\r\n        }\r\n    }\r\n\r\n    function setOverrideToZero() {\r\n        overridePrice = '0';\r\n    }\r\n\r\n    function previousMonth() {\r\n        selectedMonth = new Date(selectedMonth.getFullYear(), selectedMonth.getMonth() - 1, 1);\r\n        if (editingTeacherId) {\r\n            loadTeacherClassesForMonth(editingTeacherId, selectedMonth);\r\n        }\r\n    }\r\n\r\n    function nextMonth() {\r\n        selectedMonth = new Date(selectedMonth.getFullYear(), selectedMonth.getMonth() + 1, 1);\r\n        if (editingTeacherId) {\r\n            loadTeacherClassesForMonth(editingTeacherId, selectedMonth);\r\n        }\r\n    }\r\n\r\n    function formatMonth(date) {\r\n        return date.toLocaleDateString('lt-LT', { year: 'numeric', month: 'long' });\r\n    }\r\n\r\n    function formatDate(dateString) {\r\n        if (!dateString) return 'No date';\r\n        const date = new Date(dateString);\r\n        return date.toLocaleDateString('lt-LT', {\r\n            weekday: 'short',\r\n            month: 'short',\r\n            day: 'numeric',\r\n            hour: '2-digit',\r\n            minute: '2-digit'\r\n        });\r\n    }\r\n    \r\n    function cancelEditingModifier() {\r\n        editingTeacherId = null;\r\n        editingModifier = null;\r\n        teacherClasses = [];\r\n        closeOverrideModal();\r\n    }\r\n    \r\n    async function saveModifier() {\r\n        if (!editingModifier) return;\r\n        \r\n        isSaving = true;\r\n        errorMessage = '';\r\n        successMessage = '';\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/teacher-pricing-modifiers/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                },\r\n                body: JSON.stringify(editingModifier)\r\n            });\r\n            \r\n            const data = await response.json();\r\n            \r\n            if (!response.ok) {\r\n                throw new Error(data.message || 'Failed to save teacher pricing modifier');\r\n            }\r\n            \r\n            // Update local state\r\n            pricingModifiers.set(editingModifier.teacher_id, data.modifier);\r\n            pricingModifiers = pricingModifiers; // Trigger reactivity\r\n            \r\n            const name = getTeacherName(editingModifier.teacher_id);\r\n            successMessage = `Teacher pricing modifier saved successfully${name ? ` for ${name}` : ''}.`;\r\n            cancelEditingModifier();\r\n            applyFilters();\r\n            \r\n        } catch (error) {\r\n            errorMessage = `Error saving modifier: ${error.message}`;\r\n            console.error('Error saving modifier:', error);\r\n        } finally {\r\n            isSaving = false;\r\n        }\r\n    }\r\n    \r\n    async function deleteModifier(teacherId) {\r\n        const name = getTeacherName(teacherId);\r\n        const label = name ? name : `Teacher ID ${teacherId}`;\r\n        if (!confirm(`Are you sure you want to delete the pricing modifier for ${label}? This will restore default pricing behavior.`)) {\r\n            return;\r\n        }\r\n        \r\n        isSaving = true;\r\n        errorMessage = '';\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/teacher-pricing-modifiers/${teacherId}/`, {\r\n                method: 'DELETE',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                const data = await response.json();\r\n                throw new Error(data.message || 'Failed to delete teacher pricing modifier');\r\n            }\r\n            \r\n            // Remove from local state\r\n            pricingModifiers.delete(teacherId);\r\n            pricingModifiers = pricingModifiers; // Trigger reactivity\r\n            \r\n            const deletedName = getTeacherName(teacherId);\r\n            successMessage = `Teacher pricing modifier deleted${deletedName ? ` for ${deletedName}` : ''}. Default pricing will now apply.`;\r\n            applyFilters();\r\n            \r\n        } catch (error) {\r\n            errorMessage = `Error deleting modifier: ${error.message}`;\r\n            console.error('Error deleting modifier:', error);\r\n        } finally {\r\n            isSaving = false;\r\n        }\r\n    }\r\n    \r\n    function getTeacherName(teacherId) {\r\n        const teacher = teachers.find(t => t.id === teacherId);\r\n        if (teacher) return `${teacher.first_name} ${teacher.last_name}`;\r\n        // In embedded mode, fall back to a stable label instead of “Unknown Teacher”\r\n        if (embedded && teacherId != null) return `Teacher ID ${teacherId}`;\r\n        return '';\r\n    }\r\n    \r\n    // Reactive statements\r\n    $: searchQuery, activeFilter, teachers, pricingModifiers, applyFilters();\r\n</script>\r\n\r\n<div class=\"pricing-modifier-container\" class:embedded={embedded}>\r\n    {#if embedded && teacherId}\r\n        <h3>Teacher Pricing</h3>\r\n        <p class=\"description\">Custom pricing rules for the selected teacher.</p>\r\n\r\n        {#if isLoading}\r\n            <div class=\"loading\">Loading teacher pricing...</div>\r\n        {:else}\r\n            {@const embeddedId = Number(teacherId)}\r\n            {@const pricingTeacher = teachers.find(t => t.id === embeddedId)}\r\n            {@const teacherModifier = pricingModifiers.get(embeddedId)}\r\n\r\n            <div class=\"teachers-list single\">\r\n                <div class=\"teacher-item {teacherModifier ? 'has-modifier' : 'default-pricing'}\">\r\n                    <div class=\"teacher-info\">\r\n                        <div class=\"teacher-name\">\r\n                            {#if pricingTeacher}\r\n                                {pricingTeacher.first_name} {pricingTeacher.last_name}\r\n                                <span class=\"user-type teacher\">teacher</span>\r\n                            {:else if teacher?.name}\r\n                                {teacher.name}\r\n                                <span class=\"user-type teacher\">teacher</span>\r\n                            {:else}\r\n                                Teacher ID {embeddedId}\r\n                                <span class=\"modifier-status default\">Metadata missing</span>\r\n                            {/if}\r\n                            {#if teacherModifier}\r\n                                <span class=\"modifier-status custom\">Custom Rates</span>\r\n                            {:else}\r\n                                <span class=\"modifier-status default\">Default Rates</span>\r\n                            {/if}\r\n                        </div>\r\n                        {#if pricingTeacher?.email}\r\n                            <div class=\"teacher-email\">{pricingTeacher.email}</div>\r\n                        {:else if teacher?.email}\r\n                            <div class=\"teacher-email\">{teacher.email}</div>\r\n                        {/if}\r\n                        <div class=\"modifier-summary\">\r\n                            {getTeacherPricingSummary(teacherModifier)}\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"teacher-actions\">\r\n                        <button \r\n                            class=\"action-btn edit\"\r\n                            on:click={() => startEditingModifier(embeddedId)}\r\n                            disabled={editingTeacherId !== null && editingTeacherId !== embeddedId}\r\n                        >\r\n                            {teacherModifier ? 'Edit Rates' : 'Set Custom Rates'}\r\n                        </button>\r\n                        {#if teacherModifier}\r\n                            <button \r\n                                class=\"action-btn delete\"\r\n                                on:click={() => deleteModifier(embeddedId)}\r\n                                disabled={isSaving}\r\n                            >\r\n                                Reset to Default\r\n                            </button>\r\n                        {/if}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        {/if}\r\n    {:else}\r\n        <h3>Teacher Pricing Modifier Management</h3>\r\n        <p class=\"description\">Manage custom pricing rules for individual teachers. Default rates: Individual €15, Pair €18, Group €22, plus standard surcharges (IB €5, Special Needs €3, Lithuanian €3) and €2 performance bonus.</p>\r\n        \r\n        <!-- Filter buttons -->\r\n        <div class=\"filter-buttons\">\r\n            <button \r\n                class=\"filter-btn {activeFilter === 'all' ? 'active' : ''}\"\r\n                on:click={() => setFilter('all')}\r\n            >\r\n                All Teachers ({teachers.length})\r\n            </button>\r\n            <button \r\n                class=\"filter-btn {activeFilter === 'with_modifiers' ? 'active' : ''}\"\r\n                on:click={() => setFilter('with_modifiers')}\r\n            >\r\n                With Custom Rates ({pricingModifiers.size})\r\n            </button>\r\n            <button \r\n                class=\"filter-btn {activeFilter === 'without_modifiers' ? 'active' : ''}\"\r\n                on:click={() => setFilter('without_modifiers')}\r\n            >\r\n                Default Rates ({teachers.filter(t => !pricingModifiers.has(t.id)).length})\r\n            </button>\r\n        </div>\r\n        \r\n        <!-- Search bar -->\r\n        <div class=\"search-container\">\r\n            <input \r\n                type=\"text\" \r\n                placeholder=\"Search by name, email, or username...\" \r\n                bind:value={searchQuery}\r\n                class=\"search-input\"\r\n            />\r\n        </div>\r\n        \r\n        <!-- Teachers list -->\r\n        {#if isLoading}\r\n            <div class=\"loading\">Loading teachers...</div>\r\n        {:else if filteredTeachers.length === 0}\r\n            <div class=\"no-teachers\">No teachers found</div>\r\n        {:else}\r\n            <div class=\"teachers-list\">\r\n                {#each filteredTeachers as teacher (teacher.id)}\r\n                    {@const teacherModifier = pricingModifiers.get(teacher.id)}\r\n                    <div class=\"teacher-item {teacherModifier ? 'has-modifier' : 'default-pricing'}\">\r\n                        <div class=\"teacher-info\">\r\n                            <div class=\"teacher-name\">\r\n                                {teacher.first_name} {teacher.last_name}\r\n                                <span class=\"user-type teacher\">teacher</span>\r\n                                {#if teacherModifier}\r\n                                    <span class=\"modifier-status custom\">Custom Rates</span>\r\n                                {:else}\r\n                                    <span class=\"modifier-status default\">Default Rates</span>\r\n                                {/if}\r\n                            </div>\r\n                            <div class=\"teacher-email\">{teacher.email}</div>\r\n                            <div class=\"modifier-summary\">\r\n                                {getTeacherPricingSummary(teacherModifier)}\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"teacher-actions\">\r\n                            <button \r\n                                class=\"action-btn edit\"\r\n                                on:click={() => startEditingModifier(teacher.id)}\r\n                                disabled={editingTeacherId !== null}\r\n                            >\r\n                                {teacherModifier ? 'Edit Rates' : 'Set Custom Rates'}\r\n                            </button>\r\n                            {#if teacherModifier}\r\n                                <button \r\n                                    class=\"action-btn delete\"\r\n                                    on:click={() => deleteModifier(teacher.id)}\r\n                                    disabled={isSaving}\r\n                                >\r\n                                    Reset to Default\r\n                                </button>\r\n                            {/if}\r\n                        </div>\r\n                    </div>\r\n                {/each}\r\n            </div>\r\n        {/if}\r\n    {/if}\r\n    \r\n    <!-- Editing modal -->\r\n    {#if editingTeacherId && editingModifier}\r\n        <div class=\"modal-overlay\" on:click={cancelEditingModifier} on:keydown={(e) => e.key === 'Escape' && cancelEditingModifier()}>\r\n            <div class=\"modal-content\" on:click|stopPropagation on:keydown|stopPropagation>\r\n                <div class=\"modal-header\">\r\n                    {#if embedded && !teachers.find(t => t.id === editingTeacherId)}\r\n                        <h4>Pricing Rates (Teacher ID {editingTeacherId})</h4>\r\n                    {:else}\r\n                        <h4>Pricing Rates for {getTeacherName(editingTeacherId)}</h4>\r\n                    {/if}\r\n                    <button class=\"close-btn\" on:click={cancelEditingModifier}>×</button>\r\n                </div>\r\n                \r\n                <div class=\"modal-body\">\r\n                    <div class=\"section\">\r\n                        <h5>Base Prices by Student Count</h5>\r\n                        <p class=\"section-description\">Set custom base prices for classes based on number of students:</p>\r\n                        \r\n                        <div class=\"pricing-grid\">\r\n                            <div class=\"form-group\">\r\n                                <label for=\"individual-price\">Individual Classes (1 student):</label>\r\n                                <div class=\"price-input\">\r\n                                    <span class=\"currency\">€</span>\r\n                                    <input \r\n                                        id=\"individual-price\"\r\n                                        type=\"number\" \r\n                                        step={PRICE_INPUT_STEP}\r\n                                        min=\"0\"\r\n                                        bind:value={editingModifier.individual_base_price}\r\n                                        class=\"form-input\"\r\n                                    />\r\n                                    <span class=\"default-note\">Default: €15</span>\r\n                                </div>\r\n                            </div>\r\n                            \r\n                            <div class=\"form-group\">\r\n                                <label for=\"pair-price\">Pair Classes (2 students):</label>\r\n                                <div class=\"price-input\">\r\n                                    <span class=\"currency\">€</span>\r\n                                    <input \r\n                                        id=\"pair-price\"\r\n                                        type=\"number\" \r\n                                        step={PRICE_INPUT_STEP}\r\n                                        min=\"0\"\r\n                                        bind:value={editingModifier.pair_base_price}\r\n                                        class=\"form-input\"\r\n                                    />\r\n                                    <span class=\"default-note\">Default: €18</span>\r\n                                </div>\r\n                            </div>\r\n                            \r\n                            <div class=\"form-group\">\r\n                                <label for=\"group-price\">Group Classes (3+ students):</label>\r\n                                <div class=\"price-input\">\r\n                                    <span class=\"currency\">€</span>\r\n                                    <input \r\n                                        id=\"group-price\"\r\n                                        type=\"number\" \r\n                                        step={PRICE_INPUT_STEP}\r\n                                        min=\"0\"\r\n                                        bind:value={editingModifier.group_base_price}\r\n                                        class=\"form-input\"\r\n                                    />\r\n                                    <span class=\"default-note\">Default: €22</span>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    \r\n                    <div class=\"section\">\r\n                        <h5>Special Conditions Surcharges</h5>\r\n                        <p class=\"section-description\">Set custom surcharges for special teaching conditions:</p>\r\n                        \r\n                        <div class=\"pricing-grid\">\r\n                            <div class=\"form-group\">\r\n                                <label for=\"ib-surcharge\">IB Surcharge:</label>\r\n                                <div class=\"price-input\">\r\n                                    <span class=\"currency\">€</span>\r\n                                    <input \r\n                                        id=\"ib-surcharge\"\r\n                                        type=\"number\" \r\n                                        step={PRICE_INPUT_STEP}\r\n                                        min=\"0\"\r\n                                        bind:value={editingModifier.ib_surcharge}\r\n                                        class=\"form-input\"\r\n                                    />\r\n                                    <span class=\"default-note\">Default: €5</span>\r\n                                </div>\r\n                            </div>\r\n                            \r\n                            <div class=\"form-group\">\r\n                                <label for=\"special-needs-surcharge\">Special Needs Surcharge:</label>\r\n                                <div class=\"price-input\">\r\n                                    <span class=\"currency\">€</span>\r\n                                    <input \r\n                                        id=\"special-needs-surcharge\"\r\n                                        type=\"number\" \r\n                                        step={PRICE_INPUT_STEP}\r\n                                        min=\"0\"\r\n                                        bind:value={editingModifier.special_needs_surcharge}\r\n                                        class=\"form-input\"\r\n                                    />\r\n                                    <span class=\"default-note\">Default: €3</span>\r\n                                </div>\r\n                            </div>\r\n                            \r\n                            <div class=\"form-group\">\r\n                                <label for=\"lithuanian-surcharge\">Lithuanian Second Language Surcharge:</label>\r\n                                <div class=\"price-input\">\r\n                                    <span class=\"currency\">€</span>\r\n                                    <input \r\n                                        id=\"lithuanian-surcharge\"\r\n                                        type=\"number\" \r\n                                        step={PRICE_INPUT_STEP}\r\n                                        min=\"0\"\r\n                                        bind:value={editingModifier.lithuanian_surcharge}\r\n                                        class=\"form-input\"\r\n                                    />\r\n                                    <span class=\"default-note\">Default: €3</span>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    \r\n                    <div class=\"section\">\r\n                        <h5>Performance Bonus</h5>\r\n                        <p class=\"section-description\">Set custom bonus amount for teachers who meet all performance criteria:</p>\r\n                        \r\n                        <div class=\"form-group\">\r\n                            <label for=\"performance-bonus\">Performance Bonus:</label>\r\n                            <div class=\"price-input\">\r\n                                <span class=\"currency\">€</span>\r\n                                <input \r\n                                    id=\"performance-bonus\"\r\n                                    type=\"number\" \r\n                                    step={PRICE_INPUT_STEP}\r\n                                    min=\"0\"\r\n                                    bind:value={editingModifier.performance_bonus}\r\n                                    class=\"form-input\"\r\n                                />\r\n                                <span class=\"default-note\">Default: €2</span>\r\n                            </div>\r\n                            <p class=\"bonus-criteria\">\r\n                                <strong>Bonus criteria:</strong> ≥90% punctuality and teacher comments submitted for at least 93% of classes\r\n                            </p>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div class=\"section\">\r\n                        <h5>Manual Teacher Class Payment Overrides</h5>\r\n                        <p class=\"section-description\">Set a final teacher payment for individual classes (replaces the pricing engine result). Use month navigation to browse different months:</p>\r\n\r\n                        <div class=\"month-selector\">\r\n                            <button type=\"button\" class=\"month-nav-btn\" on:click={previousMonth}>&lt;</button>\r\n                            <span class=\"month-display\">{formatMonth(selectedMonth)}</span>\r\n                            <button type=\"button\" class=\"month-nav-btn\" on:click={nextMonth}>&gt;</button>\r\n                        </div>\r\n\r\n                        {#if isLoadingClasses}\r\n                            <p class=\"loading-classes\">Loading classes...</p>\r\n                        {:else if teacherClasses.length === 0}\r\n                            <p class=\"no-classes\">No classes found for this month.</p>\r\n                        {:else}\r\n                            <div class=\"classes-grid\">\r\n                                {#each teacherClasses as classItem (classItem.id)}\r\n                                    {@const overridden = isClassOverridden(classItem)}\r\n                                    {@const isUpcomingClass = new Date(classItem.date_local) > new Date()}\r\n                                    <div\r\n                                        class=\"class-discount-label\"\r\n                                        class:overridden={overridden}\r\n                                        role=\"button\"\r\n                                        tabindex=\"0\"\r\n                                        on:click={() => openOverrideModal(classItem)}\r\n                                        on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && openOverrideModal(classItem)}\r\n                                    >\r\n                                        <div class=\"class-info\">\r\n                                            <span class=\"class-name\">{classItem.name}</span>\r\n                                            <span class=\"class-date\">{formatDate(classItem.date_local)}</span>\r\n                                            <span class=\"class-date\">Students: {(classItem.students || []).join(', ') || 'N/A'}</span>\r\n                                            <span class=\"class-price\" class:discounted-price={overridden}>\r\n                                                €{formatEuroAmount(classItem.price)}\r\n                                                {#if overridden}\r\n                                                    <span class=\"original-price\">(was €{formatEuroAmount(classItem.original_price)})</span>\r\n                                                {/if}\r\n                                            </span>\r\n                                            {#if overridden}\r\n                                                <span class=\"info-badge\">Manual override applied</span>\r\n                                            {:else if isUpcomingClass}\r\n                                                <span class=\"info-badge\">Upcoming class</span>\r\n                                            {/if}\r\n                                        </div>\r\n                                    </div>\r\n                                {/each}\r\n                            </div>\r\n\r\n                            <div class=\"discount-summary\">\r\n                                <p><strong>Summary:</strong> {teacherClasses.filter(c => isClassOverridden(c)).length} of {teacherClasses.length} classes overridden</p>\r\n                                <p><strong>Total:</strong> €{teacherClasses.reduce((sum, c) => sum + (c.price || 0), 0).toFixed(2)}\r\n                                    {#if teacherClasses.reduce((sum, c) => sum + (c.original_price || 0), 0) !== teacherClasses.reduce((sum, c) => sum + (c.price || 0), 0)}\r\n                                        <span class=\"original-price\">(was €{teacherClasses.reduce((sum, c) => sum + (c.original_price || 0), 0).toFixed(2)})</span>\r\n                                    {/if}\r\n                                </p>\r\n                            </div>\r\n                        {/if}\r\n                    </div>\r\n\r\n                    {#if showOverrideModal && selectedClassItem}\r\n                        <div class=\"modal-overlay\" on:click={closeOverrideModal} on:keydown={(e) => e.key === 'Escape' && closeOverrideModal()}>\r\n                            <div class=\"modal-content\" on:click|stopPropagation on:keydown|stopPropagation>\r\n                                <div class=\"modal-header\">\r\n                                    <h4>Manual Teacher Payment Override</h4>\r\n                                    <button class=\"close-btn\" on:click={closeOverrideModal}>×</button>\r\n                                </div>\r\n                                <div class=\"modal-body\">\r\n                                    <p><strong>Class:</strong> {selectedClassItem.name}</p>\r\n                                    <p><strong>Date:</strong> {formatDate(selectedClassItem.date_local)}</p>\r\n                                    <p><strong>Students:</strong> {(selectedClassItem.students || []).join(', ') || 'N/A'}</p>\r\n\r\n                                    <div class=\"form-group\">\r\n                                        <label for=\"override-price\">New final teacher payment (€):</label>\r\n                                        <input\r\n                                            id=\"override-price\"\r\n                                            type=\"number\"\r\n                                            step={PRICE_INPUT_STEP}\r\n                                            min=\"0\"\r\n                                            bind:value={overridePrice}\r\n                                            class=\"form-input\"\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div class=\"form-group\">\r\n                                        <label for=\"override-notes\">Notes (optional):</label>\r\n                                        <textarea\r\n                                            id=\"override-notes\"\r\n                                            rows=\"3\"\r\n                                            bind:value={overrideNotes}\r\n                                            class=\"form-input\"\r\n                                            placeholder=\"Why was this override applied?\"\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"modal-footer\">\r\n                                    <button type=\"button\" class=\"action-btn delete\" on:click={clearClassOverride}>\r\n                                        Clear override\r\n                                    </button>\r\n                                    <button type=\"button\" class=\"action-btn\" on:click={setOverrideToZero}>\r\n                                        Set to €0\r\n                                    </button>\r\n                                    <button type=\"button\" class=\"action-btn edit\" on:click={saveClassOverride}>\r\n                                        Save\r\n                                    </button>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    {/if}\r\n                    \r\n                    <div class=\"section\">\r\n                        <h5>Notes</h5>\r\n                        <textarea \r\n                            bind:value={editingModifier.notes}\r\n                            placeholder=\"Internal notes about why these custom rates were applied...\"\r\n                            rows=\"3\"\r\n                            class=\"form-textarea\"\r\n                        ></textarea>\r\n                    </div>\r\n                    \r\n                    <div class=\"section\">\r\n                        <label class=\"checkbox-label\">\r\n                            <input \r\n                                type=\"checkbox\" \r\n                                bind:checked={editingModifier.is_active}\r\n                            />\r\n                            <span><strong>Active</strong> (uncheck to temporarily disable this modifier)</span>\r\n                        </label>\r\n                    </div>\r\n                </div>\r\n                \r\n                <div class=\"modal-footer\">\r\n                    <button \r\n                        class=\"btn secondary\"\r\n                        on:click={cancelEditingModifier}\r\n                        disabled={isSaving}\r\n                    >\r\n                        Cancel\r\n                    </button>\r\n                    <button \r\n                        class=\"btn primary\"\r\n                        on:click={saveModifier}\r\n                        disabled={isSaving}\r\n                    >\r\n                        {#if isSaving}\r\n                            Saving...\r\n                        {:else}\r\n                            Save Pricing Rates\r\n                        {/if}\r\n                    </button>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    {/if}\r\n    \r\n    <!-- Messages -->\r\n    {#if errorMessage}\r\n        <div class=\"error-message\">{errorMessage}</div>\r\n    {/if}\r\n    \r\n    {#if successMessage}\r\n        <div class=\"success-message\">{successMessage}</div>\r\n    {/if}\r\n</div>\r\n\r\n<style>\r\n    .pricing-modifier-container {\r\n        max-width: 900px;\r\n        margin: 0 auto;\r\n        padding: 20px;\r\n    }\r\n\r\n    .pricing-modifier-container.embedded {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n    \r\n    .description {\r\n        color: #666;\r\n        margin-bottom: 20px;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .filter-buttons {\r\n        display: flex;\r\n        gap: 10px;\r\n        margin-bottom: 20px;\r\n        flex-wrap: wrap;\r\n    }\r\n    \r\n    .filter-btn {\r\n        padding: 8px 16px;\r\n        border: 1px solid #ddd;\r\n        background: white;\r\n        cursor: pointer;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .filter-btn.active {\r\n        background: #fab45a;\r\n        color: black;\r\n        border-color: #fab45a;\r\n    }\r\n    \r\n    .filter-btn:hover:not(.active) {\r\n        background: #f5f5f5;\r\n    }\r\n    \r\n    .search-container {\r\n        margin-bottom: 20px;\r\n    }\r\n    \r\n    .search-input {\r\n        width: 100%;\r\n        padding: 10px;\r\n        border: 1px solid #ddd;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n    }\r\n    \r\n    .loading, .no-teachers {\r\n        text-align: center;\r\n        padding: 40px;\r\n        color: #666;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .teachers-list {\r\n        background: white;\r\n        border: 1px solid #ddd;\r\n        border-radius: 8px;\r\n        overflow: hidden;\r\n    }\r\n    \r\n    .teacher-item {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        padding: 15px 20px;\r\n        border-bottom: 1px solid #eee;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n    \r\n    .teacher-item:last-child {\r\n        border-bottom: none;\r\n    }\r\n    \r\n    .teacher-item:hover {\r\n        background-color: #f9f9f9;\r\n    }\r\n    \r\n    .teacher-item.has-modifier {\r\n        background-color: #fff8e1;\r\n    }\r\n    \r\n    .teacher-item.has-modifier:hover {\r\n        background-color: #fff3c4;\r\n    }\r\n    \r\n    .teacher-info {\r\n        flex: 1;\r\n    }\r\n    \r\n    .teacher-name {\r\n        font-weight: 500;\r\n        margin-bottom: 4px;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        flex-wrap: wrap;\r\n    }\r\n    \r\n    .user-type {\r\n        padding: 2px 8px;\r\n        border-radius: 12px;\r\n        font-size: 11px;\r\n        font-weight: bold;\r\n        text-transform: uppercase;\r\n    }\r\n    \r\n    .user-type.teacher {\r\n        background-color: #f3e5f5;\r\n        color: #7b1fa2;\r\n    }\r\n    \r\n    .modifier-status {\r\n        padding: 2px 8px;\r\n        border-radius: 12px;\r\n        font-size: 11px;\r\n        font-weight: bold;\r\n        text-transform: uppercase;\r\n    }\r\n    \r\n    .modifier-status.custom {\r\n        background-color: #fff3cd;\r\n        color: #856404;\r\n    }\r\n    \r\n    .modifier-status.default {\r\n        background-color: #d4edda;\r\n        color: #155724;\r\n    }\r\n    \r\n    .teacher-email {\r\n        color: #666;\r\n        font-size: 13px;\r\n        margin-bottom: 4px;\r\n    }\r\n    \r\n    .modifier-summary {\r\n        color: #666;\r\n        font-size: 12px;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .teacher-actions {\r\n        display: flex;\r\n        gap: 8px;\r\n        flex-shrink: 0;\r\n    }\r\n    \r\n    .action-btn {\r\n        padding: 6px 12px;\r\n        border: 1px solid;\r\n        background: white;\r\n        cursor: pointer;\r\n        border-radius: 4px;\r\n        font-size: 12px;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .action-btn.edit {\r\n        border-color: #007bff;\r\n        color: #007bff;\r\n    }\r\n    \r\n    .action-btn.edit:hover:not(:disabled) {\r\n        background: #007bff;\r\n        color: white;\r\n    }\r\n    \r\n    .action-btn.delete {\r\n        border-color: #dc3545;\r\n        color: #dc3545;\r\n    }\r\n    \r\n    .action-btn.delete:hover:not(:disabled) {\r\n        background: #dc3545;\r\n        color: white;\r\n    }\r\n    \r\n    .action-btn:disabled {\r\n        opacity: 0.5;\r\n        cursor: not-allowed;\r\n    }\r\n    \r\n    /* Modal styles */\r\n    .modal-overlay {\r\n        position: fixed;\r\n        top: 0;\r\n        left: 0;\r\n        right: 0;\r\n        bottom: 0;\r\n        background: rgba(0, 0, 0, 0.5);\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        z-index: 1000;\r\n        padding: 20px;\r\n    }\r\n    \r\n    .modal-content {\r\n        background: white;\r\n        border-radius: 8px;\r\n        max-width: 700px;\r\n        width: 100%;\r\n        max-height: 90vh;\r\n        overflow-y: auto;\r\n        box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n    }\r\n    \r\n    .modal-header {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        padding: 20px;\r\n        border-bottom: 1px solid #eee;\r\n        background: #f8f9fa;\r\n        border-radius: 8px 8px 0 0;\r\n    }\r\n    \r\n    .modal-header h4 {\r\n        margin: 0;\r\n        color: #333;\r\n    }\r\n    \r\n    .close-btn {\r\n        background: none;\r\n        border: none;\r\n        font-size: 24px;\r\n        cursor: pointer;\r\n        color: #666;\r\n        padding: 0;\r\n        width: 30px;\r\n        height: 30px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 4px;\r\n    }\r\n    \r\n    .close-btn:hover {\r\n        background: #e9ecef;\r\n        color: #333;\r\n    }\r\n    \r\n    .modal-body {\r\n        padding: 20px;\r\n    }\r\n    \r\n    .section {\r\n        margin-bottom: 25px;\r\n        padding-bottom: 20px;\r\n        border-bottom: 1px solid #f0f0f0;\r\n    }\r\n    \r\n    .section:last-child {\r\n        border-bottom: none;\r\n        margin-bottom: 0;\r\n    }\r\n    \r\n    .section h5 {\r\n        margin: 0 0 8px 0;\r\n        color: #333;\r\n        font-size: 16px;\r\n    }\r\n    \r\n    .section-description {\r\n        margin: 0 0 15px 0;\r\n        color: #666;\r\n        font-size: 13px;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .pricing-grid {\r\n        display: grid;\r\n        grid-template-columns: 1fr;\r\n        gap: 15px;\r\n    }\r\n    \r\n    @media (min-width: 600px) {\r\n        .pricing-grid {\r\n            grid-template-columns: 1fr 1fr;\r\n        }\r\n    }\r\n    \r\n    .form-group {\r\n        margin-bottom: 15px;\r\n    }\r\n    \r\n    .form-group label {\r\n        display: block;\r\n        margin-bottom: 5px;\r\n        font-weight: 500;\r\n        color: #333;\r\n        font-size: 14px;\r\n    }\r\n    \r\n    .price-input {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        margin-bottom: 5px;\r\n    }\r\n    \r\n    .currency {\r\n        font-weight: bold;\r\n        color: #333;\r\n        font-size: 16px;\r\n    }\r\n    \r\n    .form-input, .form-textarea {\r\n        width: 100%;\r\n        padding: 8px 12px;\r\n        border: 1px solid #ddd;\r\n        border-radius: 4px;\r\n        font-size: 14px;\r\n        font-family: inherit;\r\n    }\r\n    \r\n    .price-input .form-input {\r\n        max-width: 120px;\r\n    }\r\n    \r\n    .default-note {\r\n        font-size: 12px;\r\n        color: #666;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .form-textarea {\r\n        resize: vertical;\r\n        min-height: 80px;\r\n    }\r\n    \r\n    .bonus-criteria {\r\n        margin-top: 10px;\r\n        font-size: 12px;\r\n        color: #666;\r\n        font-style: italic;\r\n        line-height: 1.4;\r\n    }\r\n    \r\n    .checkbox-label {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        gap: 8px;\r\n        cursor: pointer;\r\n        padding: 8px;\r\n        border-radius: 4px;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n    \r\n    .checkbox-label:hover {\r\n        background-color: #f8f9fa;\r\n    }\r\n    \r\n    .checkbox-label input[type=\"checkbox\"] {\r\n        margin: 2px 0 0 0;\r\n        cursor: pointer;\r\n    }\r\n    \r\n    .checkbox-label span {\r\n        font-size: 14px;\r\n        line-height: 1.4;\r\n    }\r\n\r\n    .month-selector {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 15px;\r\n        margin-bottom: 20px;\r\n        padding: 10px;\r\n        background: #f8f9fa;\r\n        border-radius: 6px;\r\n    }\r\n\r\n    .month-nav-btn {\r\n        background: #007bff;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 4px;\r\n        padding: 8px 12px;\r\n        cursor: pointer;\r\n        font-weight: bold;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n\r\n    .month-nav-btn:hover {\r\n        background: #0056b3;\r\n    }\r\n\r\n    .month-display {\r\n        font-size: 16px;\r\n        font-weight: 600;\r\n        color: #333;\r\n        min-width: 150px;\r\n        text-align: center;\r\n    }\r\n\r\n    .loading-classes, .no-classes {\r\n        text-align: center;\r\n        padding: 20px;\r\n        color: #666;\r\n        font-style: italic;\r\n        background: #f8f9fa;\r\n        border-radius: 6px;\r\n        border: 1px solid #e0e0e0;\r\n    }\r\n\r\n    .classes-grid {\r\n        display: grid;\r\n        grid-template-columns: 1fr;\r\n        gap: 8px;\r\n        margin-bottom: 20px;\r\n        max-height: 300px;\r\n        overflow-y: auto;\r\n        padding: 10px;\r\n        border: 1px solid #e0e0e0;\r\n        border-radius: 6px;\r\n        background: #fafafa;\r\n    }\r\n\r\n    .class-discount-label {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        gap: 10px;\r\n        padding: 12px;\r\n        border: 1px solid #ddd;\r\n        border-radius: 6px;\r\n        background: white;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n    }\r\n\r\n    .class-discount-label:hover {\r\n        background: #f0f8ff;\r\n        border-color: #007bff;\r\n    }\r\n\r\n    .class-discount-label.overridden {\r\n        background: #fff3cd;\r\n        border-color: #fab45a;\r\n    }\r\n\r\n    .class-discount-label.overridden:hover {\r\n        background: #ffe8b6;\r\n    }\r\n\r\n    .class-info {\r\n        flex: 1;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 4px;\r\n    }\r\n\r\n    .class-name {\r\n        font-weight: 600;\r\n        color: #333;\r\n        font-size: 14px;\r\n        line-height: 1.3;\r\n    }\r\n\r\n    .class-date {\r\n        font-size: 12px;\r\n        color: #666;\r\n    }\r\n\r\n    .class-price {\r\n        font-size: 13px;\r\n        font-weight: 600;\r\n        color: #28a745;\r\n    }\r\n\r\n    .class-price.discounted-price {\r\n        color: #007bff;\r\n    }\r\n\r\n    .original-price {\r\n        font-size: 11px;\r\n        color: #999;\r\n        text-decoration: line-through;\r\n        font-weight: normal;\r\n    }\r\n\r\n    .info-badge {\r\n        font-size: 11px;\r\n        color: #856404;\r\n        font-weight: 600;\r\n    }\r\n\r\n    .discount-summary {\r\n        background: #f8f9fa;\r\n        padding: 15px;\r\n        border-radius: 6px;\r\n        border: 1px solid #e9ecef;\r\n        margin-top: 15px;\r\n    }\r\n\r\n    .discount-summary p {\r\n        margin: 5px 0;\r\n        font-size: 14px;\r\n        line-height: 1.4;\r\n        color: #495057;\r\n    }\r\n    \r\n    .modal-footer {\r\n        display: flex;\r\n        justify-content: flex-end;\r\n        gap: 12px;\r\n        padding: 20px;\r\n        border-top: 1px solid #eee;\r\n        background: #f8f9fa;\r\n        border-radius: 0 0 8px 8px;\r\n    }\r\n    \r\n    .btn {\r\n        padding: 10px 20px;\r\n        border: none;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n        font-weight: 500;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .btn.primary {\r\n        background: #28a745;\r\n        color: white;\r\n    }\r\n    \r\n    .btn.primary:hover:not(:disabled) {\r\n        background: #218838;\r\n    }\r\n    \r\n    .btn.secondary {\r\n        background: #6c757d;\r\n        color: white;\r\n    }\r\n    \r\n    .btn.secondary:hover:not(:disabled) {\r\n        background: #545b62;\r\n    }\r\n    \r\n    .btn:disabled {\r\n        opacity: 0.6;\r\n        cursor: not-allowed;\r\n    }\r\n    \r\n    .error-message {\r\n        background: #f8d7da;\r\n        color: #721c24;\r\n        padding: 12px;\r\n        border-radius: 6px;\r\n        margin-top: 20px;\r\n        border: 1px solid #f5c6cb;\r\n    }\r\n    \r\n    .success-message {\r\n        background: #d4edda;\r\n        color: #155724;\r\n        padding: 12px;\r\n        border-radius: 6px;\r\n        margin-top: 20px;\r\n        border: 1px solid #c3e6cb;\r\n    }\r\n    \r\n    /* Responsive design */\r\n    @media (max-width: 768px) {\r\n        .pricing-modifier-container {\r\n            padding: 15px;\r\n        }\r\n        \r\n        .filter-buttons {\r\n            flex-direction: column;\r\n        }\r\n        \r\n        .teacher-item {\r\n            flex-direction: column;\r\n            align-items: flex-start;\r\n            gap: 15px;\r\n        }\r\n        \r\n        .teacher-actions {\r\n            align-self: stretch;\r\n            justify-content: space-between;\r\n        }\r\n        \r\n        .modal-overlay {\r\n            padding: 10px;\r\n        }\r\n        \r\n        .modal-content {\r\n            max-height: 95vh;\r\n        }\r\n        \r\n        .modal-footer {\r\n            flex-direction: column;\r\n        }\r\n        \r\n        .pricing-grid {\r\n            grid-template-columns: 1fr;\r\n        }\r\n        \r\n        .price-input {\r\n            flex-direction: column;\r\n            align-items: flex-start;\r\n            gap: 5px;\r\n        }\r\n        \r\n        .price-input .form-input {\r\n            max-width: none;\r\n        }\r\n    }\r\n</style>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n    \r\n    // Form state\r\n    let userQuery = '';\r\n    let amount = '';\r\n    let transactionType = 'payment';\r\n    let description = 'Banko Pavedimas';\r\n    let customDate = '';\r\n    let useCustomDate = false;\r\n    let isSubmitting = false;\r\n    let successMessage = '';\r\n    let errorMessage = '';\r\n\r\n    // Past manual payments\r\n    let manualPayments = [];\r\n    let isLoadingManualPayments = false;\r\n    let manualPaymentsError = '';\r\n    let isDownloadingCsv = false;\r\n    \r\n    // User search and validation\r\n    let students = [];\r\n    let filteredStudents = [];\r\n    let selectedUser = null;\r\n    let showUserDropdown = false;\r\n    let searchTimeout = null;\r\n    \r\n    // Load students on mount (similar to StudentInfoComponent)\r\n    onMount(async () => {\r\n        await loadStudents();\r\n        await loadManualPayments();\r\n    });\r\n\r\n    const apiBase = getApiBase();\r\n    \r\n    // Load students list (adapted from StudentInfoComponent)\r\n    async function loadStudents() {\r\n        try {\r\n            const token = localStorage.getItem('jwtToken');\r\n            const response = await fetch(`${apiBase}/studentplayground/api/students-list/`, {\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n\r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                if (data.status === 'success') {\r\n                    students = data.students || [];\r\n                    filteredStudents = students;\r\n                } else {\r\n                    throw new Error(data.message || 'Failed to load students');\r\n                }\r\n            } else {\r\n                if (response.status === 401) {\r\n                    alert('Reikia prisijungti iš naujo.');\r\n                    localStorage.removeItem('jwtToken');\r\n                    window.location.href = '#/about';\r\n                } else {\r\n                    throw new Error(`HTTP error! status: ${response.status}`);\r\n                }\r\n            }\r\n        } catch (err) {\r\n            console.error('Error loading students:', err);\r\n            errorMessage = `Error loading students: ${err.message}`;\r\n        }\r\n    }\r\n    \r\n    // Filter students (adapted from StudentInfoComponent)\r\n    function filterStudents() {\r\n        if (!userQuery.trim()) {\r\n            filteredStudents = students;\r\n            showUserDropdown = false;\r\n        } else {\r\n            const query = userQuery.toLowerCase();\r\n            filteredStudents = students.filter(student => \r\n                student.name.toLowerCase().includes(query) ||\r\n                student.email.toLowerCase().includes(query)\r\n            );\r\n            showUserDropdown = !selectedUser && filteredStudents.length > 0;\r\n        }\r\n    }\r\n    \r\n    // Select a user from search results (adapted from StudentInfoComponent)\r\n    function selectUser(student) {\r\n        selectedUser = student;\r\n        userQuery = student.name;\r\n        showUserDropdown = false;\r\n    }\r\n    \r\n    // Reactive statement to filter students when search query changes\r\n    $: if (userQuery !== undefined) {\r\n        filterStudents();\r\n    }\r\n    \r\n    // Validate form\r\n    function validateForm() {\r\n        if (!selectedUser) {\r\n            return 'Please select a user';\r\n        }\r\n        \r\n        if (!amount || isNaN(amount) || Number(amount) <= 0) {\r\n            return 'Amount must be positive';\r\n        }\r\n        \r\n        if (!description.trim()) {\r\n            return 'Description is required';\r\n        }\r\n        \r\n        if (useCustomDate && !customDate) {\r\n            return 'Please select a custom date or uncheck the custom date option';\r\n        }\r\n        \r\n        if (useCustomDate && customDate) {\r\n            const selectedDate = new Date(customDate);\r\n            const today = new Date();\r\n            today.setHours(23, 59, 59, 999); // End of today\r\n            \r\n            if (selectedDate > today) {\r\n                return 'Custom date cannot be in the future';\r\n            }\r\n        }\r\n        \r\n        return null;\r\n    }\r\n    \r\n    // Submit manual payment\r\n    async function submitManualPayment() {\r\n        const validationError = validateForm();\r\n        if (validationError) {\r\n            errorMessage = validationError;\r\n            return;\r\n        }\r\n        \r\n        isSubmitting = true;\r\n        errorMessage = '';\r\n        successMessage = '';\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            const requestData = {\r\n                user_email: selectedUser.email,\r\n                amount: Number(amount),\r\n                transaction_type: transactionType,\r\n                description: description.trim()\r\n            };\r\n            \r\n            // Add custom creation date if specified\r\n            if (useCustomDate && customDate) {\r\n                requestData.custom_creation_date = customDate;\r\n            }\r\n            \r\n            const response = await fetch(`${apiBase}/studentplayground/api/admin/create-manual-payment/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json',\r\n                },\r\n                body: JSON.stringify(requestData)\r\n            });\r\n            \r\n            const data = await response.json();\r\n            \r\n            if (response.ok && data.success) {\r\n                // Enhanced success message with balance recalculation info\r\n                const transactionLabel = transactionType === 'refund' ? 'Refund' : 'Payment';\r\n                let message = `✅ ${transactionLabel} of €${amount} successfully added for ${selectedUser.name} (${selectedUser.email})`;\r\n                \r\n                // Add custom date info if used\r\n                if (data.custom_date_used && data.creation_date) {\r\n                    const creationDate = new Date(data.creation_date).toLocaleDateString();\r\n                    message += ` with creation date: ${creationDate}`;\r\n                }\r\n                message += `.`;\r\n                \r\n                if (data.new_balance !== null) {\r\n                    message += ` New balance: €${data.new_balance}`;\r\n                    if (data.had_discrepancy) {\r\n                        message += ` (Balance corrected)`;\r\n                    }\r\n                } else if (data.recalculation_error) {\r\n                    message += ` ⚠️ Balance recalculation failed: ${data.recalculation_error}`;\r\n                }\r\n                \r\n                successMessage = message;\r\n\r\n                // Refresh list\r\n                await loadManualPayments();\r\n                \r\n                // Reset form\r\n                userQuery = '';\r\n                amount = '';\r\n                transactionType = 'payment';\r\n                description = 'Banko Pavedimas';\r\n                customDate = '';\r\n                useCustomDate = false;\r\n                selectedUser = null;\r\n                showUserDropdown = false;\r\n                filteredStudents = students;\r\n                \r\n                // Clear success message after 7 seconds (longer for more detailed messages)\r\n                setTimeout(() => {\r\n                    successMessage = '';\r\n                }, 7000);\r\n            } else {\r\n                errorMessage = data.error || 'Failed to create manual payment';\r\n            }\r\n        } catch (error) {\r\n            console.error('Error creating manual payment:', error);\r\n            errorMessage = 'Network error. Please try again.';\r\n        } finally {\r\n            isSubmitting = false;\r\n        }\r\n    }\r\n\r\n    async function loadManualPayments() {\r\n        manualPaymentsError = '';\r\n        manualPayments = [];\r\n\r\n        isLoadingManualPayments = true;\r\n        const token = localStorage.getItem('jwtToken');\r\n        try {\r\n            const url = `${apiBase}/studentplayground/api/admin/list-manual-payments/?limit=500`;\r\n            const response = await fetch(url, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n\r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                if (data.success) {\r\n                    manualPayments = data.manual_payments || [];\r\n                } else {\r\n                    manualPaymentsError = data.error || 'Failed to load manual payments';\r\n                }\r\n            } else {\r\n                if (response.status === 401) {\r\n                    alert('Reikia prisijungti iš naujo.');\r\n                    localStorage.removeItem('jwtToken');\r\n                    window.location.href = '#/about';\r\n                    return;\r\n                }\r\n                manualPaymentsError = `Failed to load manual payments (HTTP ${response.status})`;\r\n            }\r\n        } catch (e) {\r\n            console.error('Error loading manual payments:', e);\r\n            manualPaymentsError = 'Network error while loading manual payments';\r\n        } finally {\r\n            isLoadingManualPayments = false;\r\n        }\r\n    }\r\n\r\n    async function downloadAllPaymentTransactionsCsv() {\r\n        isDownloadingCsv = true;\r\n        const token = localStorage.getItem('jwtToken');\r\n        try {\r\n            const url = `${apiBase}/studentplayground/api/admin/payment-transactions-csv/`;\r\n            const response = await fetch(url, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                }\r\n            });\r\n\r\n            if (!response.ok) {\r\n                if (response.status === 401) {\r\n                    alert('Reikia prisijungti iš naujo.');\r\n                    localStorage.removeItem('jwtToken');\r\n                    window.location.href = '#/about';\r\n                    return;\r\n                }\r\n                const text = await response.text();\r\n                throw new Error(text || `Download failed (HTTP ${response.status})`);\r\n            }\r\n\r\n            const blob = await response.blob();\r\n            const href = URL.createObjectURL(blob);\r\n            const a = document.createElement('a');\r\n            a.href = href;\r\n            a.download = 'payment_transactions.csv';\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            a.remove();\r\n            URL.revokeObjectURL(href);\r\n        } catch (e) {\r\n            console.error('CSV download failed:', e);\r\n            alert('Nepavyko atsisiųsti CSV failo.');\r\n        } finally {\r\n            isDownloadingCsv = false;\r\n        }\r\n    }\r\n\r\n    function formatDateTime(iso) {\r\n        if (!iso) return '-';\r\n        const d = new Date(iso);\r\n        return d.toLocaleString('lt-LT', {\r\n            year: 'numeric',\r\n            month: '2-digit',\r\n            day: '2-digit',\r\n            hour: '2-digit',\r\n            minute: '2-digit'\r\n        });\r\n    }\r\n    \r\n    // Clear messages when user starts typing\r\n    function clearMessages() {\r\n        if (errorMessage || successMessage) {\r\n            errorMessage = '';\r\n            successMessage = '';\r\n        }\r\n    }\r\n</script>\r\n\r\n<style>\r\n    .manual-payment-container {\r\n        max-width: 600px;\r\n        margin: 0 auto;\r\n        padding: 2rem;\r\n        background: white;\r\n        border-radius: 12px;\r\n        box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n    }\r\n    \r\n    .header {\r\n        text-align: center;\r\n        margin-bottom: 2rem;\r\n    }\r\n    \r\n    .header h2 {\r\n        color: #14695b;\r\n        font-size: 1.8rem;\r\n        margin-bottom: 0.5rem;\r\n    }\r\n    \r\n    .header p {\r\n        color: #666;\r\n        font-size: 1rem;\r\n    }\r\n    \r\n    .form-group {\r\n        margin-bottom: 1.5rem;\r\n        position: relative;\r\n    }\r\n    \r\n    .form-group label {\r\n        display: block;\r\n        font-weight: 600;\r\n        color: #14695b;\r\n        margin-bottom: 0.5rem;\r\n        font-size: 1rem;\r\n    }\r\n    \r\n    .required {\r\n        color: #dc3545;\r\n    }\r\n    \r\n    input {\r\n        width: 100%;\r\n        padding: 0.75rem;\r\n        border: 2px solid #e9ecef;\r\n        border-radius: 8px;\r\n        font-size: 1rem;\r\n        transition: border-color 0.3s ease;\r\n        box-sizing: border-box;\r\n    }\r\n    \r\n    input:focus {\r\n        outline: none;\r\n        border-color: #14695b;\r\n    }\r\n    \r\n    .user-search-container {\r\n        position: relative;\r\n    }\r\n    \r\n    .search-input {\r\n        width: 100%;\r\n        padding: 12px;\r\n        border: 1px solid #ddd;\r\n        border-radius: 6px;\r\n        font-size: 0.9em;\r\n        background-color: white;\r\n    }\r\n\r\n    .search-input:focus {\r\n        outline: none;\r\n        border-color: #14695b;\r\n        box-shadow: 0 0 0 2px rgba(20, 105, 91, 0.2);\r\n    }\r\n    \r\n    .search-results {\r\n        position: absolute;\r\n        top: 100%;\r\n        left: 0;\r\n        right: 0;\r\n        background: white;\r\n        border: 1px solid #ddd;\r\n        border-top: none;\r\n        border-radius: 0 0 6px 6px;\r\n        max-height: 200px;\r\n        overflow-y: auto;\r\n        z-index: 1000;\r\n        box-shadow: 0 2px 8px rgba(0,0,0,0.1);\r\n    }\r\n    \r\n    .search-result-item {\r\n        padding: 0.75rem;\r\n        cursor: pointer;\r\n        border-bottom: 1px solid #f0f0f0;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n    \r\n    .search-result-item:hover {\r\n        background-color: #f8f9fa;\r\n    }\r\n    \r\n    .search-result-item:last-child {\r\n        border-bottom: none;\r\n    }\r\n    \r\n    .user-info {\r\n        font-weight: 500;\r\n        color: #333;\r\n        font-size: 0.9em;\r\n    }\r\n    \r\n    .user-email {\r\n        font-size: 0.8em;\r\n        color: #666;\r\n    }\r\n    \r\n    .amount-input {\r\n        position: relative;\r\n    }\r\n    \r\n    .euro-symbol {\r\n        position: absolute;\r\n        left: 0.75rem;\r\n        top: 50%;\r\n        transform: translateY(-50%);\r\n        color: #666;\r\n        font-weight: 600;\r\n    }\r\n    \r\n    .amount-input input {\r\n        padding-left: 2rem;\r\n    }\r\n    \r\n    .submit-button {\r\n        width: 100%;\r\n        padding: 1rem 2rem;\r\n        background-color: #14695b;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 8px;\r\n        font-size: 1.1rem;\r\n        font-weight: 600;\r\n        cursor: pointer;\r\n        transition: background-color 0.3s ease;\r\n        margin-top: 1rem;\r\n    }\r\n    \r\n    .submit-button:hover:not(:disabled) {\r\n        background-color: #0f5a4f;\r\n    }\r\n    \r\n    .submit-button:disabled {\r\n        background-color: #6c757d;\r\n        cursor: not-allowed;\r\n    }\r\n    \r\n    .success-message {\r\n        background-color: #d4edda;\r\n        color: #155724;\r\n        padding: 1rem;\r\n        border-radius: 8px;\r\n        margin-bottom: 1.5rem;\r\n        border: 1px solid #c3e6cb;\r\n    }\r\n    \r\n    .error-message {\r\n        background-color: #f8d7da;\r\n        color: #721c24;\r\n        padding: 1rem;\r\n        border-radius: 8px;\r\n        margin-bottom: 1.5rem;\r\n        border: 1px solid #f5c6cb;\r\n    }\r\n    \r\n    .form-help {\r\n        font-size: 0.9rem;\r\n        color: #666;\r\n        margin-top: 0.25rem;\r\n    }\r\n    \r\n    .requirements-info {\r\n        background-color: #e7f3ff;\r\n        border: 1px solid #b8daff;\r\n        border-radius: 8px;\r\n        padding: 1rem;\r\n        margin-bottom: 2rem;\r\n    }\r\n    \r\n    .requirements-info h4 {\r\n        color: #004085;\r\n        margin-bottom: 0.5rem;\r\n        font-size: 1rem;\r\n    }\r\n    \r\n    .requirements-info ul {\r\n        margin: 0;\r\n        padding-left: 1.5rem;\r\n        color: #004085;\r\n    }\r\n    \r\n    .requirements-info li {\r\n        margin-bottom: 0.25rem;\r\n    }\r\n    \r\n    .selected-user-badge {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        background-color: #d1ecf1;\r\n        color: #0c5460;\r\n        padding: 0.5rem 0.75rem;\r\n        border-radius: 6px;\r\n        font-size: 0.9rem;\r\n        margin-top: 0.5rem;\r\n    }\r\n    \r\n    .selected-user-badge .remove-selection {\r\n        background: none;\r\n        border: none;\r\n        color: #0c5460;\r\n        margin-left: 0.5rem;\r\n        cursor: pointer;\r\n        font-weight: bold;\r\n    }\r\n    \r\n    .checkbox-container {\r\n        margin-bottom: 1rem;\r\n    }\r\n    \r\n    .checkbox-label {\r\n        display: flex;\r\n        align-items: center;\r\n        cursor: pointer;\r\n        font-weight: 600;\r\n        color: #14695b;\r\n        font-size: 1rem;\r\n    }\r\n    \r\n    .checkbox-label input[type=\"checkbox\"] {\r\n        width: auto;\r\n        margin-right: 0.5rem;\r\n        transform: scale(1.2);\r\n    }\r\n    \r\n    .date-input-container {\r\n        margin-top: 1rem;\r\n        padding: 1rem;\r\n        background-color: #f8f9fa;\r\n        border-radius: 8px;\r\n        border: 1px solid #e9ecef;\r\n    }\r\n    \r\n    .date-input-container label {\r\n        display: block;\r\n        font-weight: 600;\r\n        color: #14695b;\r\n        margin-bottom: 0.5rem;\r\n        font-size: 1rem;\r\n    }\r\n    \r\n    .date-input-container input[type=\"date\"] {\r\n        width: 100%;\r\n        padding: 0.75rem;\r\n        border: 2px solid #e9ecef;\r\n        border-radius: 8px;\r\n        font-size: 1rem;\r\n        transition: border-color 0.3s ease;\r\n        box-sizing: border-box;\r\n    }\r\n    \r\n    .date-input-container input[type=\"date\"]:focus {\r\n        outline: none;\r\n        border-color: #14695b;\r\n    }\r\n\r\n    .history {\r\n        margin-top: 2rem;\r\n        border-top: 1px solid #e9ecef;\r\n        padding-top: 1.5rem;\r\n    }\r\n\r\n    .history h3 {\r\n        margin: 0 0 0.75rem 0;\r\n        color: #14695b;\r\n        font-size: 1.1rem;\r\n    }\r\n\r\n    .history-list {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 0.75rem;\r\n        max-height: 420px;\r\n        overflow-y: auto;\r\n        padding-right: 6px;\r\n    }\r\n\r\n    .history-row {\r\n        border: 1px solid #eee;\r\n        border-radius: 8px;\r\n        padding: 0.75rem;\r\n        background: #fafafa;\r\n        display: flex;\r\n        justify-content: space-between;\r\n        gap: 1rem;\r\n        align-items: flex-start;\r\n    }\r\n\r\n    .history-left {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 0.25rem;\r\n        min-width: 0;\r\n    }\r\n\r\n    .history-meta {\r\n        color: #333;\r\n        font-weight: 600;\r\n        font-size: 0.95rem;\r\n    }\r\n\r\n    .history-sub {\r\n        color: #555;\r\n        font-size: 0.9rem;\r\n        word-break: break-word;\r\n    }\r\n\r\n    .history-email {\r\n        color: #777;\r\n        font-size: 0.85rem;\r\n        word-break: break-word;\r\n    }\r\n\r\n    .history-parent {\r\n        color: #555;\r\n        font-size: 0.9rem;\r\n        word-break: break-word;\r\n    }\r\n\r\n    .history-right {\r\n        font-weight: 700;\r\n        white-space: nowrap;\r\n        color: #14695b;\r\n    }\r\n\r\n    .muted {\r\n        color: #777;\r\n        font-size: 0.9rem;\r\n    }\r\n\r\n    .csv-button {\r\n        width: 100%;\r\n        padding: 0.75rem 1rem;\r\n        background-color: #0b6bcb;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 8px;\r\n        font-size: 0.95rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n        transition: background-color 0.2s ease;\r\n        margin-top: 1rem;\r\n    }\r\n\r\n    .csv-button:hover:not(:disabled) {\r\n        background-color: #095aa9;\r\n    }\r\n\r\n    .csv-button:disabled {\r\n        background-color: #6c757d;\r\n        cursor: not-allowed;\r\n    }\r\n</style>\r\n\r\n<div class=\"manual-payment-container\">\r\n    <div class=\"header\">\r\n        <h2>💰 Create Manual Payment</h2>\r\n        <p>Add payment transactions for users who paid outside the system</p>\r\n    </div>\r\n    \r\n    <div class=\"requirements-info\">\r\n        <h4>ℹ️ Transaction Requirements</h4>\r\n        <ul>\r\n            <li><strong>User:</strong> Select from searchable user list (required)</li>\r\n            <li><strong>Amount:</strong> Positive EUR amount with up to two decimal places (required)</li>\r\n            <li><strong>Transaction Type:</strong> Payment adds to the balance; refund deducts from it</li>\r\n            <li><strong>Description:</strong> Default \"Banko Pavedimas\" (editable)</li>\r\n            <li><strong>Creation Date:</strong> Uses current date/time by default, or set custom date</li>\r\n            <li><strong>Related Objects:</strong> Not required for manual transactions</li>\r\n        </ul>\r\n    </div>\r\n    \r\n    {#if successMessage}\r\n        <div class=\"success-message\">\r\n            {successMessage}\r\n        </div>\r\n    {/if}\r\n    \r\n    {#if errorMessage}\r\n        <div class=\"error-message\">\r\n            {errorMessage}\r\n        </div>\r\n    {/if}\r\n    \r\n    <form on:submit|preventDefault={submitManualPayment}>\r\n        <!-- User Search -->\r\n        <div class=\"form-group\">\r\n            <label for=\"userQuery\">\r\n                Select User <span class=\"required\">*</span>\r\n            </label>\r\n            <div class=\"user-search-container\">\r\n                <input\r\n                    type=\"text\"\r\n                    id=\"userQuery\"\r\n                    bind:value={userQuery}\r\n                    on:input={() => {\r\n                        if (selectedUser && userQuery !== selectedUser.name) {\r\n                            selectedUser = null;\r\n                            showUserDropdown = true;\r\n                        } else if (!selectedUser) {\r\n                            showUserDropdown = userQuery.trim().length > 0;\r\n                        }\r\n                        clearMessages();\r\n                    }}\r\n                    placeholder=\"Search user by name or email...\"\r\n                    autocomplete=\"off\"\r\n                    class=\"search-input\"\r\n                    required\r\n                />\r\n                \r\n                {#if selectedUser}\r\n                    <div class=\"selected-user-badge\">\r\n                        ✓ {selectedUser.name} ({selectedUser.email})\r\n                        <button \r\n                            type=\"button\" \r\n                            class=\"remove-selection\"\r\n                            on:click={() => {\r\n                                selectedUser = null;\r\n                                userQuery = '';\r\n                                showUserDropdown = false;\r\n                                filteredStudents = students;\r\n                            }}\r\n                        >\r\n                            ×\r\n                        </button>\r\n                    </div>\r\n                {/if}\r\n                \r\n                {#if showUserDropdown}\r\n                    <div class=\"search-results\">\r\n                        {#each filteredStudents.slice(0, 8) as student}\r\n                            <div \r\n                                class=\"search-result-item\"\r\n                                on:click={() => selectUser(student)}\r\n                                role=\"button\"\r\n                                tabindex=\"0\"\r\n                                on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectUser(student)}\r\n                            >\r\n                                <div class=\"user-info\">{student.name}</div>\r\n                                <div class=\"user-email\">{student.email}</div>\r\n                            </div>\r\n                        {/each}\r\n                    </div>\r\n                {/if}\r\n            </div>\r\n            <div class=\"form-help\">Start typing to search for users by name or email</div>\r\n        </div>\r\n\r\n        {#if transactionType === 'payment'}\r\n            <div class=\"form-help\">Payments cover the oldest unpaid classes first. Any remainder stays as account credit.</div>\r\n        {/if}\r\n        \r\n        <!-- Amount -->\r\n        <div class=\"form-group\">\r\n            <label for=\"amount\">\r\n                Amount <span class=\"required\">*</span>\r\n            </label>\r\n            <div class=\"amount-input\">\r\n                <span class=\"euro-symbol\">€</span>\r\n                <input\r\n                    type=\"number\"\r\n                    id=\"amount\"\r\n                    bind:value={amount}\r\n                    on:input={clearMessages}\r\n                    step=\"0.01\"\r\n                    min=\"0.01\"\r\n                    placeholder=\"0\"\r\n                    required\r\n                />\r\n            </div>\r\n            <div class=\"form-help\">Enter a positive amount; refunds are stored as a deduction automatically</div>\r\n        </div>\r\n\r\n        <div class=\"form-group\">\r\n            <label for=\"transactionType\">Transaction Type <span class=\"required\">*</span></label>\r\n            <select id=\"transactionType\" bind:value={transactionType} on:change={() => {\r\n                description = transactionType === 'refund' ? 'Pinigų grąžinimas' : 'Banko Pavedimas';\r\n                clearMessages();\r\n            }}>\r\n                <option value=\"payment\">Payment</option>\r\n                <option value=\"refund\">Refund</option>\r\n            </select>\r\n        </div>\r\n        \r\n        <!-- Description -->\r\n        <div class=\"form-group\">\r\n            <label for=\"description\">\r\n                Description <span class=\"required\">*</span>\r\n            </label>\r\n            <input\r\n                type=\"text\"\r\n                id=\"description\"\r\n                bind:value={description}\r\n                on:input={clearMessages}\r\n                placeholder=\"Banko Pavedimas\"\r\n                required\r\n            />\r\n            <div class=\"form-help\">Description for the payment transaction</div>\r\n        </div>\r\n        \r\n        <!-- Custom Creation Date -->\r\n        <div class=\"form-group\">\r\n            <div class=\"checkbox-container\">\r\n                <label class=\"checkbox-label\">\r\n                    <input\r\n                        type=\"checkbox\"\r\n                        bind:checked={useCustomDate}\r\n                        on:change={clearMessages}\r\n                    />\r\n                    <span class=\"checkmark\"></span>\r\n                    Use Custom Creation Date\r\n                </label>\r\n            </div>\r\n            \r\n            {#if useCustomDate}\r\n                <div class=\"date-input-container\">\r\n                    <label for=\"customDate\">\r\n                        Creation Date <span class=\"required\">*</span>\r\n                    </label>\r\n                    <input\r\n                        type=\"date\"\r\n                        id=\"customDate\"\r\n                        bind:value={customDate}\r\n                        on:input={clearMessages}\r\n                        max={new Date().toISOString().split('T')[0]}\r\n                        required={useCustomDate}\r\n                    />\r\n                    <div class=\"form-help\">The date when the payment was actually received (cannot be in the future)</div>\r\n                </div>\r\n            {/if}\r\n            \r\n            {#if !useCustomDate}\r\n                <div class=\"form-help\">Payment will be recorded with current date and time</div>\r\n            {/if}\r\n        </div>\r\n        \r\n        <button \r\n            type=\"submit\" \r\n            class=\"submit-button\" \r\n            disabled={isSubmitting}\r\n        >\r\n            {#if isSubmitting}\r\n                Creating Payment Transaction...\r\n            {:else}\r\n                💰 Create Payment Transaction\r\n            {/if}\r\n        </button>\r\n    </form>\r\n\r\n    <div class=\"history\">\r\n        <h3>Past Manual Balance Transactions</h3>\r\n        <button class=\"csv-button\" on:click={downloadAllPaymentTransactionsCsv} disabled={isDownloadingCsv}>\r\n            {#if isDownloadingCsv}\r\n                Downloading CSV…\r\n            {:else}\r\n                Download ALL payment transactions CSV\r\n            {/if}\r\n        </button>\r\n\r\n        {#if isLoadingManualPayments}\r\n            <div class=\"muted\">Loading…</div>\r\n        {:else if manualPaymentsError}\r\n            <div class=\"error-message\">{manualPaymentsError}</div>\r\n        {:else if manualPayments.length === 0}\r\n            <div class=\"muted\">No manual payments found.</div>\r\n        {:else}\r\n            <div class=\"history-list\">\r\n                {#each manualPayments as mp (mp.id)}\r\n                    <div class=\"history-row\">\r\n                        <div class=\"history-left\">\r\n                            <div class=\"history-meta\">\r\n                                {mp.user_first_name} {mp.user_last_name}\r\n                            </div>\r\n                            <div class=\"history-email\">{mp.user_email}</div>\r\n                            {#if mp.parent_name}\r\n                                <div class=\"history-parent\"><strong>Parent:</strong> {mp.parent_name}</div>\r\n                            {:else}\r\n                                <div class=\"history-parent\"><strong>Parent:</strong> -</div>\r\n                            {/if}\r\n                            <div class=\"history-sub\">\r\n                                <strong>Created:</strong> {formatDateTime(mp.created_at)}\r\n                            </div>\r\n                            <div class=\"history-sub\">\r\n                                <strong>Description:</strong> {mp.description}\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"history-right\">\r\n                            <div>{mp.transaction_type === 'refund' ? 'Refund' : 'Payment'}</div>\r\n                            <div>€{mp.amount}</div>\r\n                        </div>\r\n                    </div>\r\n                {/each}\r\n            </div>\r\n        {/if}\r\n    </div>\r\n</div>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    \r\n    // Component state\r\n    let loading = false;\r\n    let loadingKind = '';\r\n    let error = '';\r\n    let transactionCount = 0;\r\n    let lastFetched = null;\r\n    let paymentCount = 0;\r\n    let lastPaymentsFetched = null;\r\n    \r\n    // Month selection state\r\n    let selectedMonth = '';\r\n    let availableMonths = [];\r\n    \r\n    // Generate available months from September 2024 to December 2026\r\n    function generateAvailableMonths() {\r\n        const months = [];\r\n        const startDate = new Date(2024, 8); // September 2024\r\n        const endDate = new Date(2026, 11); // December 2026\r\n        \r\n        const currentDate = new Date(startDate);\r\n        while (currentDate <= endDate) {\r\n            const year = currentDate.getFullYear();\r\n            const month = currentDate.getMonth();\r\n            const monthName = currentDate.toLocaleDateString('lt-LT', { month: 'long', year: 'numeric' });\r\n            const monthValue = `${year}-${String(month + 1).padStart(2, '0')}`;\r\n            \r\n            months.push({\r\n                value: monthValue,\r\n                label: monthName\r\n            });\r\n            \r\n            currentDate.setMonth(currentDate.getMonth() + 1);\r\n        }\r\n        \r\n        return months;\r\n    }\r\n    \r\n    onMount(() => {\r\n        availableMonths = generateAvailableMonths();\r\n    });\r\n    \r\n    // Fetch balance transaction data and download as CSV\r\n    async function downloadBalanceTransactionsCSV() {\r\n        loading = true;\r\n        loadingKind = 'balance';\r\n        error = '';\r\n        \r\n        try {\r\n            const token = localStorage.getItem('jwtToken');\r\n            if (!token) {\r\n                error = 'Reikalinga autentifikacija. Prisijunkite prie sistemos.';\r\n                loading = false;\r\n                return;\r\n            }\r\n            \r\n            // Build URL with optional month parameter\r\n            let url = '/studentplayground/api/admin/balance-transactions-csv/';\r\n            if (selectedMonth) {\r\n                url += `?selected_month=${selectedMonth}`;\r\n            }\r\n            \r\n            const response = await fetch(url, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                const errorData = await response.json().catch(() => ({}));\r\n                error = errorData.message || 'Nepavyko gauti duomenų';\r\n                loading = false;\r\n                loadingKind = '';\r\n                return;\r\n            }\r\n\r\n            // Backend streams CSV directly. Keep UI counters via response headers.\r\n            const totalCountHeader = response.headers.get('X-Total-Count');\r\n            transactionCount = totalCountHeader ? Number(totalCountHeader) : 0;\r\n            lastFetched = new Date();\r\n\r\n            const blob = await response.blob();\r\n            const now = new Date();\r\n            const timestamp = now.toISOString().split('T')[0]; // YYYY-MM-DD format\r\n            const monthSuffix = selectedMonth ? `_${selectedMonth}` : '';\r\n            const filename = `balance_transactions_class_charges${monthSuffix}_${timestamp}.csv`;\r\n            downloadCsvBlob(blob, filename);\r\n            \r\n        } catch (err) {\r\n            console.error('Error fetching balance transactions:', err);\r\n            error = 'Tinklo klaida. Bandykite dar kartą.';\r\n        } finally {\r\n            loading = false;\r\n            loadingKind = '';\r\n        }\r\n    }\r\n\r\n    // Fetch settled Payment model data and download as CSV\r\n    async function downloadSettledPaymentsCSV() {\r\n        loading = true;\r\n        loadingKind = 'payments';\r\n        error = '';\r\n        \r\n        try {\r\n            const token = localStorage.getItem('jwtToken');\r\n            if (!token) {\r\n                error = 'Reikalinga autentifikacija. Prisijunkite prie sistemos.';\r\n                loading = false;\r\n                loadingKind = '';\r\n                return;\r\n            }\r\n            \r\n            // Build URL with optional month parameter\r\n            let url = '/studentplayground/api/admin/settled-payments-csv/';\r\n            if (selectedMonth) {\r\n                url += `?selected_month=${selectedMonth}`;\r\n            }\r\n            \r\n            const response = await fetch(url, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                const errorData = await response.json().catch(() => ({}));\r\n                error = errorData.message || 'Nepavyko gauti duomenų';\r\n                loading = false;\r\n                loadingKind = '';\r\n                return;\r\n            }\r\n\r\n            const totalCountHeader = response.headers.get('X-Total-Count');\r\n            paymentCount = totalCountHeader ? Number(totalCountHeader) : 0;\r\n            lastPaymentsFetched = new Date();\r\n\r\n            const blob = await response.blob();\r\n            const now = new Date();\r\n            const timestamp = now.toISOString().split('T')[0]; // YYYY-MM-DD format\r\n            const monthSuffix = selectedMonth ? `_${selectedMonth}` : '';\r\n            const filename = `settled_payments${monthSuffix}_${timestamp}.csv`;\r\n            downloadCsvBlob(blob, filename);\r\n            \r\n        } catch (err) {\r\n            console.error('Error fetching settled payments:', err);\r\n            error = 'Tinklo klaida. Bandykite dar kartą.';\r\n        } finally {\r\n            loading = false;\r\n            loadingKind = '';\r\n        }\r\n    }\r\n    \r\n    // Trigger CSV blob download (backend generates CSV)\r\n    function downloadCsvBlob(blob, filename) {\r\n        const link = document.createElement('a');\r\n        const url = URL.createObjectURL(blob);\r\n        \r\n        link.setAttribute('href', url);\r\n        link.setAttribute('download', filename);\r\n        link.style.visibility = 'hidden';\r\n        document.body.appendChild(link);\r\n        link.click();\r\n        document.body.removeChild(link);\r\n        URL.revokeObjectURL(url);\r\n    }\r\n</script>\r\n\r\n<style>\r\n    .container {\r\n        padding: 20px;\r\n        max-width: 800px;\r\n        margin: 0 auto;\r\n    }\r\n    \r\n    .header {\r\n        margin-bottom: 30px;\r\n    }\r\n    \r\n    h2 {\r\n        color: #333;\r\n        margin-bottom: 10px;\r\n    }\r\n    \r\n    .description {\r\n        color: #666;\r\n        font-size: 14px;\r\n        margin-bottom: 20px;\r\n        line-height: 1.6;\r\n    }\r\n    \r\n    .month-selector-section {\r\n        background: white;\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 8px;\r\n        padding: 20px;\r\n        margin-bottom: 20px;\r\n    }\r\n    \r\n    .month-selector-section h3 {\r\n        color: #333;\r\n        font-size: 18px;\r\n        margin-bottom: 15px;\r\n    }\r\n    \r\n    .month-selector-wrapper {\r\n        display: flex;\r\n        gap: 10px;\r\n        align-items: center;\r\n        flex-wrap: wrap;\r\n    }\r\n    \r\n    .month-selector-label {\r\n        font-weight: 600;\r\n        color: #495057;\r\n    }\r\n    \r\n    .month-selector {\r\n        padding: 8px 12px;\r\n        border: 1px solid #ced4da;\r\n        border-radius: 5px;\r\n        font-size: 14px;\r\n        min-width: 200px;\r\n        cursor: pointer;\r\n    }\r\n    \r\n    .month-selector:focus {\r\n        outline: none;\r\n        border-color: #007bff;\r\n        box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);\r\n    }\r\n    \r\n    .clear-month-button {\r\n        padding: 8px 16px;\r\n        background: #6c757d;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 5px;\r\n        cursor: pointer;\r\n        font-size: 14px;\r\n        transition: background-color 0.2s;\r\n    }\r\n    \r\n    .clear-month-button:hover {\r\n        background: #5a6268;\r\n    }\r\n    \r\n    .download-section {\r\n        background: #f8f9fa;\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 8px;\r\n        padding: 30px;\r\n        margin-bottom: 20px;\r\n    }\r\n\r\n    .download-buttons {\r\n        display: flex;\r\n        gap: 12px;\r\n        flex-wrap: wrap;\r\n        align-items: center;\r\n    }\r\n    \r\n    .download-button {\r\n        background: #007bff;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 5px;\r\n        padding: 12px 24px;\r\n        font-size: 16px;\r\n        cursor: pointer;\r\n        transition: background-color 0.2s;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n    }\r\n    \r\n    .download-button:hover:not(:disabled) {\r\n        background: #0056b3;\r\n    }\r\n\r\n    .download-button.payments {\r\n        background: #198754; /* green */\r\n    }\r\n\r\n    .download-button.payments:hover:not(:disabled) {\r\n        background: #146c43;\r\n    }\r\n    \r\n    .download-button:disabled {\r\n        background: #6c757d;\r\n        cursor: not-allowed;\r\n        opacity: 0.6;\r\n    }\r\n    \r\n    .download-icon {\r\n        font-size: 18px;\r\n    }\r\n    \r\n    .info-box {\r\n        background: white;\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 8px;\r\n        padding: 20px;\r\n        margin-bottom: 20px;\r\n    }\r\n    \r\n    .info-item {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        padding: 8px 0;\r\n        border-bottom: 1px solid #f0f0f0;\r\n    }\r\n    \r\n    .info-item:last-child {\r\n        border-bottom: none;\r\n    }\r\n    \r\n    .info-label {\r\n        font-weight: 600;\r\n        color: #495057;\r\n    }\r\n    \r\n    .info-value {\r\n        color: #6c757d;\r\n    }\r\n    \r\n    .error-message {\r\n        background: #f8d7da;\r\n        border: 1px solid #f5c6cb;\r\n        color: #721c24;\r\n        padding: 12px;\r\n        border-radius: 5px;\r\n        margin-bottom: 20px;\r\n    }\r\n    \r\n    .loading-spinner {\r\n        display: inline-block;\r\n        width: 16px;\r\n        height: 16px;\r\n        border: 2px solid #ffffff;\r\n        border-radius: 50%;\r\n        border-top-color: transparent;\r\n        animation: spin 0.8s linear infinite;\r\n    }\r\n    \r\n    @keyframes spin {\r\n        to { transform: rotate(360deg); }\r\n    }\r\n    \r\n    .success-message {\r\n        background: #d4edda;\r\n        border: 1px solid #c3e6cb;\r\n        color: #155724;\r\n        padding: 12px;\r\n        border-radius: 5px;\r\n        margin-top: 20px;\r\n    }\r\n    \r\n    .csv-format-info {\r\n        background: white;\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 8px;\r\n        padding: 20px;\r\n    }\r\n    \r\n    .csv-format-info h3 {\r\n        color: #333;\r\n        font-size: 18px;\r\n        margin-bottom: 15px;\r\n    }\r\n    \r\n    .csv-format-info ul {\r\n        list-style-type: none;\r\n        padding-left: 0;\r\n    }\r\n    \r\n    .csv-format-info li {\r\n        padding: 8px 0;\r\n        color: #495057;\r\n        border-bottom: 1px solid #f0f0f0;\r\n    }\r\n    \r\n    .csv-format-info li:last-child {\r\n        border-bottom: none;\r\n    }\r\n    \r\n    .csv-format-info code {\r\n        background: #f8f9fa;\r\n        padding: 2px 6px;\r\n        border-radius: 3px;\r\n        font-family: 'Courier New', monospace;\r\n        color: #e83e8c;\r\n    }\r\n</style>\r\n\r\n<div class=\"container\">\r\n    <div class=\"header\">\r\n        <h2>📊 Balance Transactions CSV Export</h2>\r\n        <p class=\"description\">\r\n            Download a CSV file of all class charge balance transactions with parent names. \r\n            The export includes cleaned descriptions (without Event IDs) and parent full names.\r\n        </p>\r\n    </div>\r\n    \r\n    {#if error}\r\n        <div class=\"error-message\">\r\n            ⚠️ {error}\r\n        </div>\r\n    {/if}\r\n    \r\n    <div class=\"month-selector-section\">\r\n        <h3>📅 Filter by Month (Optional)</h3>\r\n        <div class=\"month-selector-wrapper\">\r\n            <label class=\"month-selector-label\" for=\"month-select\">Select Month:</label>\r\n            <select \r\n                id=\"month-select\"\r\n                class=\"month-selector\" \r\n                bind:value={selectedMonth}\r\n            >\r\n                <option value=\"\">All Months</option>\r\n                {#each availableMonths as month}\r\n                    <option value={month.value}>{month.label}</option>\r\n                {/each}\r\n            </select>\r\n            {#if selectedMonth}\r\n                <button \r\n                    class=\"clear-month-button\"\r\n                    on:click={() => selectedMonth = ''}\r\n                >\r\n                    Clear Filter\r\n                </button>\r\n            {/if}\r\n        </div>\r\n    </div>\r\n    \r\n    <div class=\"download-section\">\r\n        <div class=\"download-buttons\">\r\n            <button \r\n                class=\"download-button\" \r\n                on:click={downloadBalanceTransactionsCSV}\r\n                disabled={loading}\r\n            >\r\n                {#if loading && loadingKind === 'balance'}\r\n                    <span class=\"loading-spinner\"></span>\r\n                    <span>Downloading...</span>\r\n                {:else}\r\n                    <span class=\"download-icon\">⬇️</span>\r\n                    <span>Download Balance CSV</span>\r\n                {/if}\r\n            </button>\r\n\r\n            <button \r\n                class=\"download-button payments\" \r\n                on:click={downloadSettledPaymentsCSV}\r\n                disabled={loading}\r\n            >\r\n                {#if loading && loadingKind === 'payments'}\r\n                    <span class=\"loading-spinner\"></span>\r\n                    <span>Downloading...</span>\r\n                {:else}\r\n                    <span class=\"download-icon\">⬇️</span>\r\n                    <span>Download Settled Payments CSV</span>\r\n                {/if}\r\n            </button>\r\n        </div>\r\n    </div>\r\n    \r\n    {#if lastFetched}\r\n        <div class=\"info-box\">\r\n            <div class=\"info-item\">\r\n                <span class=\"info-label\">Last Downloaded:</span>\r\n                <span class=\"info-value\">{lastFetched.toLocaleString('lt-LT')}</span>\r\n            </div>\r\n            <div class=\"info-item\">\r\n                <span class=\"info-label\">Month Filter:</span>\r\n                <span class=\"info-value\">{selectedMonth || 'All Months'}</span>\r\n            </div>\r\n            <div class=\"info-item\">\r\n                <span class=\"info-label\">Total Transactions:</span>\r\n                <span class=\"info-value\">{transactionCount}</span>\r\n            </div>\r\n        </div>\r\n        \r\n        <div class=\"success-message\">\r\n            ✅ CSV file downloaded successfully with {transactionCount} transactions!\r\n        </div>\r\n    {/if}\r\n\r\n    {#if lastPaymentsFetched}\r\n        <div class=\"info-box\">\r\n            <div class=\"info-item\">\r\n                <span class=\"info-label\">Last Payments Downloaded:</span>\r\n                <span class=\"info-value\">{lastPaymentsFetched.toLocaleString('lt-LT')}</span>\r\n            </div>\r\n            <div class=\"info-item\">\r\n                <span class=\"info-label\">Month Filter:</span>\r\n                <span class=\"info-value\">{selectedMonth || 'All Months'}</span>\r\n            </div>\r\n            <div class=\"info-item\">\r\n                <span class=\"info-label\">Total Settled Payments:</span>\r\n                <span class=\"info-value\">{paymentCount}</span>\r\n            </div>\r\n        </div>\r\n        \r\n        <div class=\"success-message\">\r\n            ✅ Settled payments CSV downloaded successfully with {paymentCount} payments!\r\n        </div>\r\n    {/if}\r\n    \r\n    <div class=\"csv-format-info\">\r\n        <h3>📋 CSV Format Details</h3>\r\n        <ul>\r\n            <li><strong>Description:</strong> Cleaned class charge description (e.g., \"Class charge for Pauliaus Vain. Matematikos Pamoka | Tutory on 2025-10-14 20:00\")</li>\r\n            <li><strong>Amount:</strong> Transaction amount in euros (always positive)</li>\r\n            <li><strong>Date:</strong> Actual class date extracted from description (YYYY-MM-DD format)</li>\r\n            <li><strong>Parent Name:</strong> Full parent name (e.g., <code>Ramunė Brasienė</code>)</li>\r\n            <li><strong>Invoice_Data:</strong> JSON array string containing all invoice information for the user (invoice_number, storage_path, invoice_url, bucket_name, invoice_month, created_at)</li>\r\n        </ul>\r\n    </div>\r\n</div>\r\n\r\n","<script>\r\n    import { onMount, onDestroy } from 'svelte';\r\n    \r\n    // Component state\r\n    let loading = false;\r\n    let error = '';\r\n    let classCount = 0;\r\n    let lastFetched = null;\r\n    let totalRevenue = 0;\r\n    let totalTeacherPayments = 0;\r\n    let classesWithoutTeacher = [];\r\n    \r\n    // Async job state\r\n    let jobId = null;\r\n    let jobStatus = null;\r\n    let progressMessage = '';\r\n    let totalClasses = 0;\r\n    let processedClasses = 0;\r\n    let statusCheckInterval = null;\r\n    \r\n    // Month selection state\r\n    let selectedMonth = '';\r\n    let availableMonths = [];\r\n    \r\n    // Generate available months from September 2024 to December 2026\r\n    function generateAvailableMonths() {\r\n        const months = [];\r\n        const startDate = new Date(2024, 8); // September 2024\r\n        const endDate = new Date(2026, 11); // December 2026\r\n        \r\n        const currentDate = new Date(startDate);\r\n        while (currentDate <= endDate) {\r\n            const year = currentDate.getFullYear();\r\n            const month = currentDate.getMonth();\r\n            const monthName = currentDate.toLocaleDateString('lt-LT', { month: 'long', year: 'numeric' });\r\n            const monthValue = `${year}-${String(month + 1).padStart(2, '0')}`;\r\n            \r\n            months.push({\r\n                value: monthValue,\r\n                label: monthName\r\n            });\r\n            \r\n            currentDate.setMonth(currentDate.getMonth() + 1);\r\n        }\r\n        \r\n        return months;\r\n    }\r\n    \r\n    onMount(() => {\r\n        availableMonths = generateAvailableMonths();\r\n    });\r\n    \r\n    onDestroy(() => {\r\n        // Clean up interval when component is destroyed\r\n        if (statusCheckInterval) {\r\n            clearInterval(statusCheckInterval);\r\n        }\r\n    });\r\n    \r\n    // Start CSV export job\r\n    async function startTeacherRevenuePaymentCSV() {\r\n        loading = true;\r\n        error = '';\r\n        jobId = null;\r\n        jobStatus = null;\r\n        progressMessage = '';\r\n        totalRevenue = 0;\r\n        totalTeacherPayments = 0;\r\n        classesWithoutTeacher = [];\r\n        \r\n        // Clear any existing interval\r\n        if (statusCheckInterval) {\r\n            clearInterval(statusCheckInterval);\r\n            statusCheckInterval = null;\r\n        }\r\n        \r\n        try {\r\n            const token = localStorage.getItem('jwtToken');\r\n            if (!token) {\r\n                error = 'Reikalinga autentifikacija. Prisijunkite prie sistemos.';\r\n                loading = false;\r\n                return;\r\n            }\r\n            \r\n            // Build URL with optional month parameter\r\n            let url = '/studentplayground/api/admin/teacher-revenue-payment-csv/';\r\n            if (selectedMonth) {\r\n                url += `?selected_month=${selectedMonth}`;\r\n            }\r\n            \r\n            const response = await fetch(url, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                const errorData = await response.json().catch(() => ({}));\r\n                error = errorData.message || 'Nepavyko pradėti eksporto';\r\n                loading = false;\r\n                return;\r\n            }\r\n            \r\n            const result = await response.json();\r\n            if (result.status === 'success') {\r\n                jobId = result.job_id;\r\n                jobStatus = 'pending';\r\n                progressMessage = 'Starting export...';\r\n                \r\n                // Start polling for status\r\n                checkJobStatus();\r\n                statusCheckInterval = setInterval(checkJobStatus, 2000); // Check every 2 seconds\r\n            } else {\r\n                error = result.message || 'Netikėta klaida';\r\n                loading = false;\r\n            }\r\n            \r\n        } catch (err) {\r\n            console.error('Error starting CSV export:', err);\r\n            error = 'Tinklo klaida. Bandykite dar kartą.';\r\n            loading = false;\r\n        }\r\n    }\r\n    \r\n    // Check job status\r\n    async function checkJobStatus() {\r\n        if (!jobId) return;\r\n        \r\n        try {\r\n            const token = localStorage.getItem('jwtToken');\r\n            const url = `/studentplayground/api/admin/teacher-revenue-payment-csv-status/${jobId}/`;\r\n            \r\n            const response = await fetch(url, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                console.error('Failed to check job status');\r\n                return;\r\n            }\r\n            \r\n            const result = await response.json();\r\n            jobStatus = result.status;\r\n            progressMessage = result.progress_message || '';\r\n            totalClasses = result.total_classes || 0;\r\n            processedClasses = result.processed_classes || 0;\r\n            \r\n            if (result.status === 'completed') {\r\n                // Stop polling\r\n                if (statusCheckInterval) {\r\n                    clearInterval(statusCheckInterval);\r\n                    statusCheckInterval = null;\r\n                }\r\n                \r\n                loading = false;\r\n                classCount = result.total_count || 0;\r\n                classesWithoutTeacher = result.classes_without_teacher || [];\r\n                lastFetched = new Date();\r\n                \r\n                // Calculate totals\r\n                if (result.data) {\r\n                    result.data.forEach(item => {\r\n                        totalRevenue += item.total_student_price || 0;\r\n                        totalTeacherPayments += item.teacher_payment || 0;\r\n                    });\r\n                }\r\n                \r\n                // Generate and download CSV\r\n                generateAndDownloadCSV(result.data || []);\r\n            } else if (result.status === 'failed') {\r\n                // Stop polling\r\n                if (statusCheckInterval) {\r\n                    clearInterval(statusCheckInterval);\r\n                    statusCheckInterval = null;\r\n                }\r\n                \r\n                loading = false;\r\n                error = result.error_message || 'Export failed';\r\n            }\r\n            // If status is 'pending' or 'processing', continue polling\r\n            \r\n        } catch (err) {\r\n            console.error('Error checking job status:', err);\r\n        }\r\n    }\r\n    \r\n    // Generate CSV content and trigger download\r\n    function generateAndDownloadCSV(data) {\r\n        // Define CSV headers\r\n        const headers = [\r\n            'Class ID',\r\n            'Class Name',\r\n            'Class Date',\r\n            'Teacher Name',\r\n            'Teacher ID',\r\n            'Total Student Price (€)',\r\n            'Teacher Payment (€)',\r\n            'Student Count',\r\n            'Matched Charges Count',\r\n            'Google Calendar Event ID'\r\n        ];\r\n        \r\n        // Create CSV content\r\n        let csvContent = headers.join(',') + '\\n';\r\n        \r\n        data.forEach(item => {\r\n            const row = [\r\n                item.class_id || '',\r\n                `\"${(item.class_name || '').replace(/\"/g, '\"\"')}\"`,  // Escape quotes\r\n                item.class_date || '',\r\n                `\"${(item.teacher_name || '').replace(/\"/g, '\"\"')}\"`,  // Escape quotes\r\n                item.teacher_id || '',\r\n                item.total_student_price || 0,\r\n                item.teacher_payment || 0,\r\n                item.student_count || 0,\r\n                item.matched_charges_count || 0,\r\n                item.gcal_event_id || ''\r\n            ];\r\n            csvContent += row.join(',') + '\\n';\r\n        });\r\n        \r\n        // Create blob and download\r\n        const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\r\n        const link = document.createElement('a');\r\n        const url = URL.createObjectURL(blob);\r\n        \r\n        const now = new Date();\r\n        const timestamp = now.toISOString().split('T')[0]; // YYYY-MM-DD format\r\n        const monthSuffix = selectedMonth ? `_${selectedMonth}` : '';\r\n        const filename = `teacher_revenue_payment${monthSuffix}_${timestamp}.csv`;\r\n        \r\n        link.setAttribute('href', url);\r\n        link.setAttribute('download', filename);\r\n        link.style.visibility = 'hidden';\r\n        document.body.appendChild(link);\r\n        link.click();\r\n        document.body.removeChild(link);\r\n        URL.revokeObjectURL(url);\r\n    }\r\n</script>\r\n\r\n<style>\r\n    .container {\r\n        padding: 20px;\r\n        max-width: 1000px;\r\n        margin: 0 auto;\r\n    }\r\n    \r\n    .header {\r\n        margin-bottom: 30px;\r\n    }\r\n    \r\n    h2 {\r\n        color: #333;\r\n        margin-bottom: 10px;\r\n    }\r\n    \r\n    .description {\r\n        color: #666;\r\n        font-size: 14px;\r\n        margin-bottom: 20px;\r\n        line-height: 1.6;\r\n    }\r\n    \r\n    .month-selector-section {\r\n        background: white;\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 8px;\r\n        padding: 20px;\r\n        margin-bottom: 20px;\r\n    }\r\n    \r\n    .month-selector-section h3 {\r\n        color: #333;\r\n        font-size: 18px;\r\n        margin-bottom: 15px;\r\n    }\r\n    \r\n    .month-selector-wrapper {\r\n        display: flex;\r\n        gap: 10px;\r\n        align-items: center;\r\n        flex-wrap: wrap;\r\n    }\r\n    \r\n    .month-selector-label {\r\n        font-weight: 600;\r\n        color: #495057;\r\n    }\r\n    \r\n    .month-selector {\r\n        padding: 8px 12px;\r\n        border: 1px solid #ced4da;\r\n        border-radius: 5px;\r\n        font-size: 14px;\r\n        min-width: 200px;\r\n        cursor: pointer;\r\n    }\r\n    \r\n    .month-selector:focus {\r\n        outline: none;\r\n        border-color: #007bff;\r\n        box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);\r\n    }\r\n    \r\n    .clear-month-button {\r\n        padding: 8px 16px;\r\n        background: #6c757d;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 5px;\r\n        cursor: pointer;\r\n        font-size: 14px;\r\n        transition: background-color 0.2s;\r\n    }\r\n    \r\n    .clear-month-button:hover {\r\n        background: #5a6268;\r\n    }\r\n    \r\n    .download-section {\r\n        background: #f8f9fa;\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 8px;\r\n        padding: 30px;\r\n        margin-bottom: 20px;\r\n    }\r\n    \r\n    .download-button {\r\n        background: #007bff;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 5px;\r\n        padding: 12px 24px;\r\n        font-size: 16px;\r\n        cursor: pointer;\r\n        transition: background-color 0.2s;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n    }\r\n    \r\n    .download-button:hover:not(:disabled) {\r\n        background: #0056b3;\r\n    }\r\n    \r\n    .download-button:disabled {\r\n        background: #6c757d;\r\n        cursor: not-allowed;\r\n        opacity: 0.6;\r\n    }\r\n    \r\n    .download-icon {\r\n        font-size: 18px;\r\n    }\r\n    \r\n    .info-box {\r\n        background: white;\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 8px;\r\n        padding: 20px;\r\n        margin-bottom: 20px;\r\n    }\r\n    \r\n    .info-item {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        padding: 8px 0;\r\n        border-bottom: 1px solid #f0f0f0;\r\n    }\r\n    \r\n    .info-item:last-child {\r\n        border-bottom: none;\r\n    }\r\n    \r\n    .info-label {\r\n        font-weight: 600;\r\n        color: #495057;\r\n    }\r\n    \r\n    .info-value {\r\n        color: #6c757d;\r\n    }\r\n    \r\n    .error-message {\r\n        background: #f8d7da;\r\n        border: 1px solid #f5c6cb;\r\n        color: #721c24;\r\n        padding: 12px;\r\n        border-radius: 5px;\r\n        margin-bottom: 20px;\r\n    }\r\n    \r\n    .warning-message {\r\n        background: #fff3cd;\r\n        border: 1px solid #ffeaa7;\r\n        color: #856404;\r\n        padding: 12px;\r\n        border-radius: 5px;\r\n        margin-bottom: 20px;\r\n    }\r\n    \r\n    .loading-spinner {\r\n        display: inline-block;\r\n        width: 16px;\r\n        height: 16px;\r\n        border: 2px solid #ffffff;\r\n        border-radius: 50%;\r\n        border-top-color: transparent;\r\n        animation: spin 0.8s linear infinite;\r\n    }\r\n    \r\n    @keyframes spin {\r\n        to { transform: rotate(360deg); }\r\n    }\r\n    \r\n    .success-message {\r\n        background: #d4edda;\r\n        border: 1px solid #c3e6cb;\r\n        color: #155724;\r\n        padding: 12px;\r\n        border-radius: 5px;\r\n        margin-top: 20px;\r\n    }\r\n    \r\n    .csv-format-info {\r\n        background: white;\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 8px;\r\n        padding: 20px;\r\n    }\r\n    \r\n    .csv-format-info h3 {\r\n        color: #333;\r\n        font-size: 18px;\r\n        margin-bottom: 15px;\r\n    }\r\n    \r\n    .csv-format-info ul {\r\n        list-style-type: none;\r\n        padding-left: 0;\r\n    }\r\n    \r\n    .csv-format-info li {\r\n        padding: 8px 0;\r\n        color: #495057;\r\n        border-bottom: 1px solid #f0f0f0;\r\n    }\r\n    \r\n    .csv-format-info li:last-child {\r\n        border-bottom: none;\r\n    }\r\n    \r\n    .csv-format-info code {\r\n        background: #f8f9fa;\r\n        padding: 2px 6px;\r\n        border-radius: 3px;\r\n        font-family: 'Courier New', monospace;\r\n        color: #e83e8c;\r\n    }\r\n</style>\r\n\r\n<div class=\"container\">\r\n    <div class=\"header\">\r\n        <h2>💰 Teacher Revenue vs Payment CSV Export</h2>\r\n        <p class=\"description\">\r\n            Download a CSV file of all past classes with student pricing and teacher payment data. \r\n            Each row represents one class with calculated student revenue and teacher payment amounts.\r\n        </p>\r\n    </div>\r\n    \r\n    {#if error}\r\n        <div class=\"error-message\">\r\n            ⚠️ {error}\r\n        </div>\r\n    {/if}\r\n    \r\n    {#if classesWithoutTeacher.length > 0}\r\n        <div class=\"warning-message\">\r\n            ⚠️ Warning: {classesWithoutTeacher.length} class(es) could not be matched to a teacher. These classes are included in the export but have \"Unknown Teacher\" as the teacher name.\r\n        </div>\r\n    {/if}\r\n    \r\n    <div class=\"month-selector-section\">\r\n        <h3>📅 Filter by Month (Optional)</h3>\r\n        <div class=\"month-selector-wrapper\">\r\n            <label class=\"month-selector-label\" for=\"month-select\">Select Month:</label>\r\n            <select \r\n                id=\"month-select\"\r\n                class=\"month-selector\" \r\n                bind:value={selectedMonth}\r\n            >\r\n                <option value=\"\">All Months</option>\r\n                {#each availableMonths as month}\r\n                    <option value={month.value}>{month.label}</option>\r\n                {/each}\r\n            </select>\r\n            {#if selectedMonth}\r\n                <button \r\n                    class=\"clear-month-button\"\r\n                    on:click={() => selectedMonth = ''}\r\n                >\r\n                    Clear Filter\r\n                </button>\r\n            {/if}\r\n        </div>\r\n    </div>\r\n    \r\n    <div class=\"download-section\">\r\n        <button \r\n            class=\"download-button\" \r\n            on:click={startTeacherRevenuePaymentCSV}\r\n            disabled={loading}\r\n        >\r\n            {#if loading}\r\n                <span class=\"loading-spinner\"></span>\r\n                <span>Processing...</span>\r\n            {:else}\r\n                <span class=\"download-icon\">⬇️</span>\r\n                <span>Start Export</span>\r\n            {/if}\r\n        </button>\r\n        \r\n        {#if jobStatus === 'processing' || jobStatus === 'pending'}\r\n            <div class=\"progress-info\" style=\"margin-top: 20px; padding: 15px; background: #e7f3ff; border-radius: 8px;\">\r\n                <div style=\"font-weight: 600; margin-bottom: 10px;\">📊 Export in Progress</div>\r\n                <div style=\"margin-bottom: 8px;\">{progressMessage}</div>\r\n                {#if totalClasses > 0}\r\n                    <div style=\"margin-bottom: 8px;\">\r\n                        Progress: {processedClasses} / {totalClasses} classes ({Math.round((processedClasses / totalClasses) * 100)}%)\r\n                    </div>\r\n                    <div style=\"background: #fff; border-radius: 4px; height: 20px; overflow: hidden; margin-top: 10px;\">\r\n                        <div style=\"background: #007bff; height: 100%; width: {(processedClasses / totalClasses) * 100}%; transition: width 0.3s;\"></div>\r\n                    </div>\r\n                {/if}\r\n                <div style=\"margin-top: 10px; font-size: 12px; color: #666;\">\r\n                    This may take a few minutes. Please keep this page open...\r\n                </div>\r\n            </div>\r\n        {/if}\r\n    </div>\r\n    \r\n    {#if lastFetched}\r\n        <div class=\"info-box\">\r\n            <div class=\"info-item\">\r\n                <span class=\"info-label\">Last Downloaded:</span>\r\n                <span class=\"info-value\">{lastFetched.toLocaleString('lt-LT')}</span>\r\n            </div>\r\n            <div class=\"info-item\">\r\n                <span class=\"info-label\">Month Filter:</span>\r\n                <span class=\"info-value\">{selectedMonth || 'All Months'}</span>\r\n            </div>\r\n            <div class=\"info-item\">\r\n                <span class=\"info-label\">Total Classes:</span>\r\n                <span class=\"info-value\">{classCount}</span>\r\n            </div>\r\n            <div class=\"info-item\">\r\n                <span class=\"info-label\">Total Revenue:</span>\r\n                <span class=\"info-value\">€{totalRevenue.toFixed(2)}</span>\r\n            </div>\r\n            <div class=\"info-item\">\r\n                <span class=\"info-label\">Total Teacher Payments:</span>\r\n                <span class=\"info-value\">€{totalTeacherPayments.toFixed(2)}</span>\r\n            </div>\r\n            <div class=\"info-item\">\r\n                <span class=\"info-label\">Net Profit:</span>\r\n                <span class=\"info-value\">€{(totalRevenue - totalTeacherPayments).toFixed(2)}</span>\r\n            </div>\r\n        </div>\r\n        \r\n        <div class=\"success-message\">\r\n            ✅ CSV file downloaded successfully with {classCount} classes!\r\n        </div>\r\n    {/if}\r\n    \r\n    <div class=\"csv-format-info\">\r\n        <h3>📋 CSV Format Details</h3>\r\n        <ul>\r\n            <li><strong>Class ID:</strong> Internal database ID for the class</li>\r\n            <li><strong>Class Name:</strong> Name of the class (e.g., \"Matematikos Pamoka | Tutory\")</li>\r\n            <li><strong>Class Date:</strong> Date and time of the class (YYYY-MM-DD HH:MM format)</li>\r\n            <li><strong>Teacher Name:</strong> Full name of the teacher</li>\r\n            <li><strong>Teacher ID:</strong> Internal database ID for the teacher</li>\r\n            <li><strong>Total Student Price:</strong> Sum of actual charged amounts from matched BalanceTransaction records (using 3-level linking: related_class, Event ID, or name+date)</li>\r\n            <li><strong>Teacher Payment:</strong> Amount paid to teacher for this class (calculated using <code>calculate_teacher_price_for_categorized_class</code>)</li>\r\n            <li><strong>Student Count:</strong> Number of students enrolled in the class</li>\r\n            <li><strong>Matched Charges Count:</strong> Number of BalanceTransaction charges successfully matched to this class</li>\r\n            <li><strong>Google Calendar Event ID:</strong> Google Calendar event identifier</li>\r\n        </ul>\r\n    </div>\r\n</div>\r\n\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n\r\n    const apiBase = getApiBase();\r\n\r\n    // Data\r\n    let families = [];\r\n    let students = [];\r\n\r\n    // UI state\r\n    let isLoading = false;\r\n    let loadError = '';\r\n    let successMessage = '';\r\n    let errorMessage = '';\r\n\r\n    // Create-family form state\r\n    let newFamilyName = '';\r\n    let newFamilyMembers = []; // array of student objects {id, name, email}\r\n    let createQuery = '';\r\n    let showCreateDropdown = false;\r\n    let isCreating = false;\r\n\r\n    // Edit state (only one family edited at a time)\r\n    let editingFamilyId = null;\r\n    let editName = '';\r\n    let editMembers = [];\r\n    let editQuery = '';\r\n    let showEditDropdown = false;\r\n    let isSavingEdit = false;\r\n\r\n    onMount(async () => {\r\n        await Promise.all([loadFamilies(), loadStudents()]);\r\n    });\r\n\r\n    function authHeaders() {\r\n        const token = localStorage.getItem('jwtToken');\r\n        return {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json',\r\n        };\r\n    }\r\n\r\n    function handleAuthFailure() {\r\n        alert('Reikia prisijungti iš naujo.');\r\n        localStorage.removeItem('jwtToken');\r\n        window.location.href = '#/about';\r\n    }\r\n\r\n    async function loadFamilies() {\r\n        isLoading = true;\r\n        loadError = '';\r\n        try {\r\n            const res = await fetch(`${apiBase}/studentplayground/api/admin/families/`, {\r\n                headers: authHeaders(),\r\n            });\r\n            if (res.status === 401) return handleAuthFailure();\r\n            const data = await res.json();\r\n            if (res.ok && data.success) {\r\n                families = data.families || [];\r\n            } else {\r\n                loadError = data.error || `Failed to load families (HTTP ${res.status})`;\r\n            }\r\n        } catch (e) {\r\n            console.error('Error loading families:', e);\r\n            loadError = 'Network error while loading families.';\r\n        } finally {\r\n            isLoading = false;\r\n        }\r\n    }\r\n\r\n    async function loadStudents() {\r\n        try {\r\n            const res = await fetch(`${apiBase}/studentplayground/api/students-list/`, {\r\n                headers: authHeaders(),\r\n            });\r\n            if (res.status === 401) return handleAuthFailure();\r\n            const data = await res.json();\r\n            if (res.ok && data.status === 'success') {\r\n                students = data.students || [];\r\n            }\r\n        } catch (e) {\r\n            console.error('Error loading students:', e);\r\n        }\r\n    }\r\n\r\n    function clearMessages() {\r\n        errorMessage = '';\r\n        successMessage = '';\r\n    }\r\n\r\n    // Map of userId -> list of family names they already belong to.\r\n    // Used to warn admins when a user is already in another family.\r\n    $: membershipMap = (() => {\r\n        const map = {};\r\n        for (const fam of families) {\r\n            for (const child of fam.children) {\r\n                if (!map[child.id]) map[child.id] = [];\r\n                map[child.id].push(fam.name);\r\n            }\r\n        }\r\n        return map;\r\n    })();\r\n\r\n    function otherFamiliesFor(userId, excludeFamilyId = null) {\r\n        // Returns family names (other than excludeFamilyId's current saved state) the user belongs to.\r\n        const names = [];\r\n        for (const fam of families) {\r\n            if (excludeFamilyId !== null && fam.id === excludeFamilyId) continue;\r\n            if (fam.children.some((c) => c.id === userId)) names.push(fam.name);\r\n        }\r\n        return names;\r\n    }\r\n\r\n    function filterStudents(query, excludeMembers) {\r\n        const q = query.trim().toLowerCase();\r\n        if (!q) return [];\r\n        const excludeIds = new Set(excludeMembers.map((m) => m.id));\r\n        return students\r\n            .filter((s) => !excludeIds.has(s.id))\r\n            .filter(\r\n                (s) =>\r\n                    (s.name && s.name.toLowerCase().includes(q)) ||\r\n                    (s.email && s.email.toLowerCase().includes(q)) ||\r\n                    (s.username && s.username.toLowerCase().includes(q))\r\n            )\r\n            .slice(0, 8);\r\n    }\r\n\r\n    $: createResults = filterStudents(createQuery, newFamilyMembers);\r\n    $: editResults = filterStudents(editQuery, editMembers);\r\n\r\n    // ---- Create family ----\r\n    function addCreateMember(student) {\r\n        if (!newFamilyMembers.some((m) => m.id === student.id)) {\r\n            newFamilyMembers = [...newFamilyMembers, student];\r\n        }\r\n        createQuery = '';\r\n        showCreateDropdown = false;\r\n    }\r\n\r\n    function removeCreateMember(id) {\r\n        newFamilyMembers = newFamilyMembers.filter((m) => m.id !== id);\r\n    }\r\n\r\n    async function createFamily() {\r\n        clearMessages();\r\n        const name = newFamilyName.trim();\r\n        if (!name) {\r\n            errorMessage = 'Please enter a family name.';\r\n            return;\r\n        }\r\n        isCreating = true;\r\n        try {\r\n            const res = await fetch(`${apiBase}/studentplayground/api/admin/families/create/`, {\r\n                method: 'POST',\r\n                headers: authHeaders(),\r\n                body: JSON.stringify({\r\n                    name,\r\n                    children: newFamilyMembers.map((m) => m.id),\r\n                }),\r\n            });\r\n            if (res.status === 401) return handleAuthFailure();\r\n            const data = await res.json();\r\n            if (res.ok && data.success) {\r\n                successMessage = `✅ Family \"${data.family.name}\" created.`;\r\n                newFamilyName = '';\r\n                newFamilyMembers = [];\r\n                createQuery = '';\r\n                await loadFamilies();\r\n                setTimeout(() => (successMessage = ''), 5000);\r\n            } else {\r\n                errorMessage = data.error || 'Failed to create family.';\r\n            }\r\n        } catch (e) {\r\n            console.error('Error creating family:', e);\r\n            errorMessage = 'Network error. Please try again.';\r\n        } finally {\r\n            isCreating = false;\r\n        }\r\n    }\r\n\r\n    // ---- Edit family ----\r\n    function startEdit(family) {\r\n        clearMessages();\r\n        editingFamilyId = family.id;\r\n        editName = family.name;\r\n        editMembers = family.children.map((c) => ({ ...c }));\r\n        editQuery = '';\r\n        showEditDropdown = false;\r\n    }\r\n\r\n    function cancelEdit() {\r\n        editingFamilyId = null;\r\n        editName = '';\r\n        editMembers = [];\r\n        editQuery = '';\r\n        showEditDropdown = false;\r\n    }\r\n\r\n    function addEditMember(student) {\r\n        if (!editMembers.some((m) => m.id === student.id)) {\r\n            editMembers = [...editMembers, student];\r\n        }\r\n        editQuery = '';\r\n        showEditDropdown = false;\r\n    }\r\n\r\n    function removeEditMember(id) {\r\n        editMembers = editMembers.filter((m) => m.id !== id);\r\n    }\r\n\r\n    async function saveEdit() {\r\n        clearMessages();\r\n        const name = editName.trim();\r\n        if (!name) {\r\n            errorMessage = 'Family name cannot be empty.';\r\n            return;\r\n        }\r\n        isSavingEdit = true;\r\n        try {\r\n            const res = await fetch(\r\n                `${apiBase}/studentplayground/api/admin/families/${editingFamilyId}/update/`,\r\n                {\r\n                    method: 'POST',\r\n                    headers: authHeaders(),\r\n                    body: JSON.stringify({\r\n                        name,\r\n                        children: editMembers.map((m) => m.id),\r\n                    }),\r\n                }\r\n            );\r\n            if (res.status === 401) return handleAuthFailure();\r\n            const data = await res.json();\r\n            if (res.ok && data.success) {\r\n                successMessage = `✅ Family \"${data.family.name}\" updated.`;\r\n                cancelEdit();\r\n                await loadFamilies();\r\n                setTimeout(() => (successMessage = ''), 5000);\r\n            } else {\r\n                errorMessage = data.error || 'Failed to update family.';\r\n            }\r\n        } catch (e) {\r\n            console.error('Error updating family:', e);\r\n            errorMessage = 'Network error. Please try again.';\r\n        } finally {\r\n            isSavingEdit = false;\r\n        }\r\n    }\r\n\r\n    // ---- Delete family ----\r\n    async function deleteFamily(family) {\r\n        clearMessages();\r\n        const confirmed = window.confirm(\r\n            `Delete family \"${family.name}\"?\\n\\nThis removes the family grouping only — the ${family.children.length} member account(s) will NOT be deleted.`\r\n        );\r\n        if (!confirmed) return;\r\n        try {\r\n            const res = await fetch(\r\n                `${apiBase}/studentplayground/api/admin/families/${family.id}/delete/`,\r\n                {\r\n                    method: 'DELETE',\r\n                    headers: authHeaders(),\r\n                }\r\n            );\r\n            if (res.status === 401) return handleAuthFailure();\r\n            const data = await res.json();\r\n            if (res.ok && data.success) {\r\n                successMessage = `🗑️ Family \"${family.name}\" deleted.`;\r\n                if (editingFamilyId === family.id) cancelEdit();\r\n                await loadFamilies();\r\n                setTimeout(() => (successMessage = ''), 5000);\r\n            } else {\r\n                errorMessage = data.error || 'Failed to delete family.';\r\n            }\r\n        } catch (e) {\r\n            console.error('Error deleting family:', e);\r\n            errorMessage = 'Network error. Please try again.';\r\n        }\r\n    }\r\n</script>\r\n\r\n<div class=\"family-manager\">\r\n    <div class=\"header\">\r\n        <h2>👪 Family Connections</h2>\r\n        <p>Create, edit, and delete family groupings of student accounts.</p>\r\n    </div>\r\n\r\n    {#if successMessage}\r\n        <div class=\"success-message\">{successMessage}</div>\r\n    {/if}\r\n    {#if errorMessage}\r\n        <div class=\"error-message\">{errorMessage}</div>\r\n    {/if}\r\n\r\n    <!-- Create family -->\r\n    <section class=\"panel\">\r\n        <h3>Create New Family</h3>\r\n        <div class=\"form-group\">\r\n            <label for=\"newFamilyName\">Family Name <span class=\"required\">*</span></label>\r\n            <input\r\n                id=\"newFamilyName\"\r\n                type=\"text\"\r\n                bind:value={newFamilyName}\r\n                on:input={clearMessages}\r\n                placeholder=\"E.g. 'The Smith Household'\"\r\n                autocomplete=\"off\"\r\n            />\r\n        </div>\r\n\r\n        <div class=\"form-group\">\r\n            <label for=\"createQuery\">Add Members</label>\r\n            <div class=\"user-search-container\">\r\n                <input\r\n                    id=\"createQuery\"\r\n                    type=\"text\"\r\n                    class=\"search-input\"\r\n                    bind:value={createQuery}\r\n                    on:input={() => {\r\n                        showCreateDropdown = createQuery.trim().length > 0;\r\n                        clearMessages();\r\n                    }}\r\n                    placeholder=\"Search students by name or email...\"\r\n                    autocomplete=\"off\"\r\n                />\r\n                {#if showCreateDropdown && createResults.length > 0}\r\n                    <div class=\"search-results\">\r\n                        {#each createResults as student (student.id)}\r\n                            <div\r\n                                class=\"search-result-item\"\r\n                                role=\"button\"\r\n                                tabindex=\"0\"\r\n                                on:click={() => addCreateMember(student)}\r\n                                on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && addCreateMember(student)}\r\n                            >\r\n                                <div class=\"user-info\">{student.name}</div>\r\n                                <div class=\"user-email\">{student.email}</div>\r\n                                {#if otherFamiliesFor(student.id).length > 0}\r\n                                    <div class=\"member-warning\">\r\n                                        ⚠️ Already in: {otherFamiliesFor(student.id).join(', ')}\r\n                                    </div>\r\n                                {/if}\r\n                            </div>\r\n                        {/each}\r\n                    </div>\r\n                {/if}\r\n            </div>\r\n            <div class=\"form-help\">Start typing to search. Only student accounts are shown.</div>\r\n        </div>\r\n\r\n        {#if newFamilyMembers.length > 0}\r\n            <div class=\"chips\">\r\n                {#each newFamilyMembers as member (member.id)}\r\n                    <span class=\"chip\">\r\n                        {member.name}\r\n                        {#if otherFamiliesFor(member.id).length > 0}\r\n                            <span class=\"chip-warning\" title={`Already in: ${otherFamiliesFor(member.id).join(', ')}`}>⚠️</span>\r\n                        {/if}\r\n                        <button type=\"button\" class=\"chip-remove\" on:click={() => removeCreateMember(member.id)}>×</button>\r\n                    </span>\r\n                {/each}\r\n            </div>\r\n        {/if}\r\n\r\n        <button class=\"btn btn-primary\" on:click={createFamily} disabled={isCreating}>\r\n            {#if isCreating}Creating…{:else}Create Family{/if}\r\n        </button>\r\n    </section>\r\n\r\n    <!-- Existing families -->\r\n    <section class=\"panel\">\r\n        <h3>Existing Families {#if families.length}<span class=\"count\">({families.length})</span>{/if}</h3>\r\n\r\n        {#if isLoading}\r\n            <div class=\"muted\">Loading…</div>\r\n        {:else if loadError}\r\n            <div class=\"error-message\">{loadError}</div>\r\n        {:else if families.length === 0}\r\n            <div class=\"muted\">No families yet.</div>\r\n        {:else}\r\n            <div class=\"family-list\">\r\n                {#each families as family (family.id)}\r\n                    <div class=\"family-card\">\r\n                        {#if editingFamilyId === family.id}\r\n                            <!-- Edit mode -->\r\n                            <div class=\"form-group\">\r\n                                <label for={`editName-${family.id}`}>Family Name <span class=\"required\">*</span></label>\r\n                                <input\r\n                                    id={`editName-${family.id}`}\r\n                                    type=\"text\"\r\n                                    bind:value={editName}\r\n                                    on:input={clearMessages}\r\n                                    autocomplete=\"off\"\r\n                                />\r\n                            </div>\r\n\r\n                            <div class=\"form-group\">\r\n                                <label for={`editQuery-${family.id}`}>Add Members</label>\r\n                                <div class=\"user-search-container\">\r\n                                    <input\r\n                                        id={`editQuery-${family.id}`}\r\n                                        type=\"text\"\r\n                                        class=\"search-input\"\r\n                                        bind:value={editQuery}\r\n                                        on:input={() => {\r\n                                            showEditDropdown = editQuery.trim().length > 0;\r\n                                            clearMessages();\r\n                                        }}\r\n                                        placeholder=\"Search students by name or email...\"\r\n                                        autocomplete=\"off\"\r\n                                    />\r\n                                    {#if showEditDropdown && editResults.length > 0}\r\n                                        <div class=\"search-results\">\r\n                                            {#each editResults as student (student.id)}\r\n                                                <div\r\n                                                    class=\"search-result-item\"\r\n                                                    role=\"button\"\r\n                                                    tabindex=\"0\"\r\n                                                    on:click={() => addEditMember(student)}\r\n                                                    on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && addEditMember(student)}\r\n                                                >\r\n                                                    <div class=\"user-info\">{student.name}</div>\r\n                                                    <div class=\"user-email\">{student.email}</div>\r\n                                                    {#if otherFamiliesFor(student.id, family.id).length > 0}\r\n                                                        <div class=\"member-warning\">\r\n                                                            ⚠️ Already in: {otherFamiliesFor(student.id, family.id).join(', ')}\r\n                                                        </div>\r\n                                                    {/if}\r\n                                                </div>\r\n                                            {/each}\r\n                                        </div>\r\n                                    {/if}\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div class=\"chips\">\r\n                                {#each editMembers as member (member.id)}\r\n                                    <span class=\"chip\">\r\n                                        {member.name}\r\n                                        {#if otherFamiliesFor(member.id, family.id).length > 0}\r\n                                            <span class=\"chip-warning\" title={`Already in: ${otherFamiliesFor(member.id, family.id).join(', ')}`}>⚠️</span>\r\n                                        {/if}\r\n                                        <button type=\"button\" class=\"chip-remove\" on:click={() => removeEditMember(member.id)}>×</button>\r\n                                    </span>\r\n                                {/each}\r\n                                {#if editMembers.length === 0}\r\n                                    <span class=\"muted\">No members.</span>\r\n                                {/if}\r\n                            </div>\r\n\r\n                            <div class=\"card-actions\">\r\n                                <button class=\"btn btn-primary\" on:click={saveEdit} disabled={isSavingEdit}>\r\n                                    {#if isSavingEdit}Saving…{:else}Save{/if}\r\n                                </button>\r\n                                <button class=\"btn btn-secondary\" on:click={cancelEdit} disabled={isSavingEdit}>Cancel</button>\r\n                            </div>\r\n                        {:else}\r\n                            <!-- View mode -->\r\n                            <div class=\"family-head\">\r\n                                <div class=\"family-name\">{family.name}</div>\r\n                                <div class=\"card-actions\">\r\n                                    <button class=\"btn btn-secondary\" on:click={() => startEdit(family)}>Edit</button>\r\n                                    <button class=\"btn btn-danger\" on:click={() => deleteFamily(family)}>Delete</button>\r\n                                </div>\r\n                            </div>\r\n                            {#if family.children.length > 0}\r\n                                <div class=\"chips\">\r\n                                    {#each family.children as member (member.id)}\r\n                                        <span class=\"chip chip-static\" title={member.email}>{member.name}</span>\r\n                                    {/each}\r\n                                </div>\r\n                            {:else}\r\n                                <div class=\"muted\">No members.</div>\r\n                            {/if}\r\n                        {/if}\r\n                    </div>\r\n                {/each}\r\n            </div>\r\n        {/if}\r\n    </section>\r\n</div>\r\n\r\n<style>\r\n    .family-manager {\r\n        max-width: 720px;\r\n        margin: 0 auto;\r\n        padding: 2rem;\r\n        background: white;\r\n        border-radius: 12px;\r\n        box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n        color: #333;\r\n    }\r\n\r\n    .header {\r\n        text-align: center;\r\n        margin-bottom: 1.5rem;\r\n    }\r\n\r\n    .header h2 {\r\n        color: #14695b;\r\n        font-size: 1.8rem;\r\n        margin-bottom: 0.25rem;\r\n    }\r\n\r\n    .header p {\r\n        color: #666;\r\n        font-size: 1rem;\r\n        margin: 0;\r\n    }\r\n\r\n    .panel {\r\n        border: 1px solid #e9ecef;\r\n        border-radius: 10px;\r\n        padding: 1.25rem;\r\n        margin-bottom: 1.5rem;\r\n    }\r\n\r\n    .panel h3 {\r\n        margin: 0 0 1rem 0;\r\n        color: #14695b;\r\n        font-size: 1.15rem;\r\n    }\r\n\r\n    .count {\r\n        color: #888;\r\n        font-weight: normal;\r\n        font-size: 0.95rem;\r\n    }\r\n\r\n    .form-group {\r\n        margin-bottom: 1rem;\r\n        position: relative;\r\n    }\r\n\r\n    .form-group label {\r\n        display: block;\r\n        font-weight: 600;\r\n        color: #14695b;\r\n        margin-bottom: 0.4rem;\r\n        font-size: 0.95rem;\r\n    }\r\n\r\n    .required {\r\n        color: #dc3545;\r\n    }\r\n\r\n    input {\r\n        width: 100%;\r\n        padding: 0.7rem;\r\n        border: 1px solid #ddd;\r\n        border-radius: 8px;\r\n        font-size: 1rem;\r\n        box-sizing: border-box;\r\n    }\r\n\r\n    input:focus {\r\n        outline: none;\r\n        border-color: #14695b;\r\n        box-shadow: 0 0 0 2px rgba(20, 105, 91, 0.15);\r\n    }\r\n\r\n    .user-search-container {\r\n        position: relative;\r\n    }\r\n\r\n    .search-results {\r\n        position: absolute;\r\n        top: 100%;\r\n        left: 0;\r\n        right: 0;\r\n        background: white;\r\n        border: 1px solid #ddd;\r\n        border-top: none;\r\n        border-radius: 0 0 6px 6px;\r\n        max-height: 240px;\r\n        overflow-y: auto;\r\n        z-index: 1000;\r\n        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n    }\r\n\r\n    .search-result-item {\r\n        padding: 0.6rem 0.75rem;\r\n        cursor: pointer;\r\n        border-bottom: 1px solid #f0f0f0;\r\n    }\r\n\r\n    .search-result-item:hover {\r\n        background-color: #f8f9fa;\r\n    }\r\n\r\n    .search-result-item:last-child {\r\n        border-bottom: none;\r\n    }\r\n\r\n    .user-info {\r\n        font-weight: 500;\r\n        color: #333;\r\n        font-size: 0.9rem;\r\n    }\r\n\r\n    .user-email {\r\n        font-size: 0.8rem;\r\n        color: #666;\r\n    }\r\n\r\n    .member-warning {\r\n        font-size: 0.78rem;\r\n        color: #a15c00;\r\n        margin-top: 0.15rem;\r\n    }\r\n\r\n    .form-help {\r\n        font-size: 0.85rem;\r\n        color: #666;\r\n        margin-top: 0.25rem;\r\n    }\r\n\r\n    .chips {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: 0.5rem;\r\n        margin: 0.5rem 0 1rem 0;\r\n    }\r\n\r\n    .chip {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 0.35rem;\r\n        background-color: #d1ecf1;\r\n        color: #0c5460;\r\n        padding: 0.35rem 0.6rem;\r\n        border-radius: 16px;\r\n        font-size: 0.88rem;\r\n    }\r\n\r\n    .chip-static {\r\n        background-color: #e8f5e9;\r\n        color: #1b5e20;\r\n    }\r\n\r\n    .chip-warning {\r\n        cursor: help;\r\n    }\r\n\r\n    .chip-remove {\r\n        background: none;\r\n        border: none;\r\n        color: inherit;\r\n        cursor: pointer;\r\n        font-weight: bold;\r\n        font-size: 1rem;\r\n        line-height: 1;\r\n        padding: 0;\r\n    }\r\n\r\n    .family-list {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 1rem;\r\n    }\r\n\r\n    .family-card {\r\n        border: 1px solid #eee;\r\n        border-radius: 8px;\r\n        padding: 1rem;\r\n        background: #fafafa;\r\n    }\r\n\r\n    .family-head {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        gap: 1rem;\r\n        margin-bottom: 0.5rem;\r\n    }\r\n\r\n    .family-name {\r\n        font-weight: 700;\r\n        color: #14695b;\r\n        font-size: 1.05rem;\r\n    }\r\n\r\n    .card-actions {\r\n        display: flex;\r\n        gap: 0.5rem;\r\n        margin-top: 0.5rem;\r\n    }\r\n\r\n    .btn {\r\n        padding: 0.55rem 1rem;\r\n        border: none;\r\n        border-radius: 8px;\r\n        font-size: 0.95rem;\r\n        font-weight: 600;\r\n        cursor: pointer;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n\r\n    .btn:disabled {\r\n        opacity: 0.6;\r\n        cursor: not-allowed;\r\n    }\r\n\r\n    .btn-primary {\r\n        background-color: #14695b;\r\n        color: white;\r\n    }\r\n\r\n    .btn-primary:hover:not(:disabled) {\r\n        background-color: #0f5a4f;\r\n    }\r\n\r\n    .btn-secondary {\r\n        background-color: #e9ecef;\r\n        color: #333;\r\n    }\r\n\r\n    .btn-secondary:hover:not(:disabled) {\r\n        background-color: #dcdfe2;\r\n    }\r\n\r\n    .btn-danger {\r\n        background-color: #dc3545;\r\n        color: white;\r\n    }\r\n\r\n    .btn-danger:hover:not(:disabled) {\r\n        background-color: #bd2130;\r\n    }\r\n\r\n    .success-message {\r\n        background-color: #d4edda;\r\n        color: #155724;\r\n        padding: 0.9rem;\r\n        border-radius: 8px;\r\n        margin-bottom: 1rem;\r\n        border: 1px solid #c3e6cb;\r\n    }\r\n\r\n    .error-message {\r\n        background-color: #f8d7da;\r\n        color: #721c24;\r\n        padding: 0.9rem;\r\n        border-radius: 8px;\r\n        margin-bottom: 1rem;\r\n        border: 1px solid #f5c6cb;\r\n    }\r\n\r\n    .muted {\r\n        color: #777;\r\n        font-size: 0.9rem;\r\n    }\r\n</style>\r\n","<script>\r\n  import { createEventDispatcher } from 'svelte';\r\n\r\n  export let title;\r\n  export let href;\r\n  export let description;\r\n  export let launchLabel;\r\n  export let icon = '✉';\r\n\r\n  const dispatch = createEventDispatcher();\r\n  // A route owns its color: reopening, reordering or reusing the card cannot change it.\r\n  $: hue = Array.from(href).reduce((hash, character) => (hash * 31 + character.charCodeAt(0)) >>> 0, 0) % 360;\r\n</script>\r\n\r\n<section class=\"card widget\" aria-label={title} style={`--accent: hsl(${hue}, 65%, 42%); --tint: hsl(${hue}, 80%, 96%);`}>\r\n  <div class=\"widget-header\">\r\n    <h3 class=\"widget-title\"><span class=\"icon\" aria-hidden=\"true\">{icon}</span>{title}</h3>\r\n    <div class=\"widget-actions\">\r\n      <a class=\"button small dashboard-launch\" {href} target=\"_blank\" rel=\"noopener noreferrer\">Open full page ↗</a>\r\n      <button type=\"button\" class=\"button small\" on:click={() => dispatch('close')}>Close</button>\r\n    </div>\r\n  </div>\r\n  <div class=\"launcher-body\">\r\n    <p>{description}</p>\r\n    <a class=\"dashboard-launch large\" {href} target=\"_blank\" rel=\"noopener noreferrer\">{launchLabel} ↗</a>\r\n  </div>\r\n</section>\r\n\r\n<style>\r\n  .card { box-sizing: border-box; margin: 0; padding: 15px; display: flex; flex-direction: column; gap: 10px; border-radius: 8px; color: #000; background: var(--tint); border-left: 6px solid var(--accent); box-shadow: 0 0 1px #28293d14, 0 .5px 2px #60617029; }\r\n  .widget-header, .widget-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }\r\n  .widget-header { justify-content: space-between; }\r\n  .widget-title { display: inline-flex; align-items: center; gap: 10px; margin: 0; padding: 6px 8px; font-size: 14px; font-weight: 800; color: #1f2937; }\r\n  .icon { width: 18px; display: inline-flex; justify-content: center; font-size: 14px; }\r\n  .button, .dashboard-launch { display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box; margin: 0; font: inherit; border-radius: 6px; white-space: nowrap; cursor: pointer; text-decoration: none; }\r\n  .button { background: #fff; border: 1px solid #ccc; color: #000; }\r\n  .small { min-height: 36px; padding: 6px 10px; font-size: 12px; }\r\n  .dashboard-launch { background: #0c131d; border: 1px solid #1b8d68; color: #dce7f3; font-weight: 700; }\r\n  .large { min-height: 44px; padding: 10px 14px; }\r\n  .launcher-body { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 12px 8px 4px; }\r\n  p { margin: 0; line-height: 1.5; color: #475569; }\r\n  a:focus-visible, button:focus-visible { outline: 2px solid #14695b; outline-offset: 3px; }\r\n  @media (max-width: 600px) { .launcher-body { align-items: stretch; flex-direction: column; } .large { white-space: normal; text-align: center; } }\r\n</style>\r\n","import { getApiBase } from './apiBase.js';\r\n\r\nconst root = `${getApiBase()}/studentplayground/api/admin/agreements/versions/`;\r\n\r\nasync function request(path = '', options = {}, pdf = false) {\r\n  const token = localStorage.getItem('jwtToken');\r\n  if (!token) throw Object.assign(new Error('Ši funkcija nepasiekiama. Prisijunkite administratoriaus paskyra.'), { status: 401 });\r\n  const response = await fetch(root + path, { ...options, cache: 'no-store', credentials: 'same-origin',\r\n    referrerPolicy: 'no-referrer', headers: { Authorization: `Bearer ${token}`, ...options.headers } });\r\n  if (!response.ok) {\r\n    let data = {};\r\n    try { data = await response.json(); } catch (_) { /* no provider/server text */ }\r\n    const detail = typeof data.detail === 'string' ? data.detail\r\n      : Object.values(data).filter(Array.isArray).flat().filter(value => typeof value === 'string').join(' ');\r\n    throw Object.assign(new Error([401, 403].includes(response.status)\r\n      ? 'Ši funkcija nepasiekiama. Reikalinga administratoriaus prieiga.'\r\n      : detail || 'Užklausos įvykdyti nepavyko. Atnaujinkite sąrašą ir bandykite dar kartą.'), { status: response.status });\r\n  }\r\n  return pdf ? response.blob() : response.json();\r\n}\r\n\r\nexport const listAdminAgreements = (q = '', page = 1) => request(`?${new URLSearchParams({ q, page })}`);\r\nexport const uploadAdminAgreement = form => request('', { method: 'POST', body: form });\r\nexport const searchAgreementStudents = (id, q, page = 1, signal, filter = 'students', dates = null) => request(`${id}/students/?${new URLSearchParams({ q, page, filter, ...(dates || {}) })}`, { signal });\r\nexport const getAgreementAssignments = (id, page = 1, signal) => request(`${id}/assignments/?${new URLSearchParams({ page })}`, { signal });\r\n\r\nasync function allPages(fetchPage, signal) {\r\n  const rows = [];\r\n  let count;\r\n  for (let page = 1; page <= 1000; page++) {\r\n    if (signal?.aborted) throw new DOMException('Aborted', 'AbortError');\r\n    const result = await fetchPage(page);\r\n    if (count === undefined) count = result.count;\r\n    if (result.page !== page || result.count !== count || !Array.isArray(result.results)\r\n        || (result.has_next && !result.results.length)) {\r\n      throw new Error('Sąrašas pasikeitė. Atnaujinkite pasirinkimą ir bandykite dar kartą.');\r\n    }\r\n    rows.push(...result.results);\r\n    if (!result.has_next) return rows;\r\n  }\r\n  throw new Error('Sąrašas per didelis. Susiaurinkite paiešką.');\r\n}\r\n\r\nexport const getAllAgreementAssignments = (id, signal) => allPages(page => getAgreementAssignments(id, page, signal), signal);\r\nexport const getAllAgreementStudents = (id, q, filter, signal, dates = null) => allPages(page => searchAgreementStudents(id, q, page, signal, filter, dates), signal);\r\nexport const withdrawAgreementAssignment = (id, requirementId) => request(`${id}/assignments/${requirementId}/withdraw/`, {\r\n  method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ confirm: true })\r\n});\r\nexport const assignAgreementStudents = (id, ids) => request(`${id}/assign/`, {\r\n  method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ student_ids: ids, confirm: true })\r\n});\r\n\r\nexport async function previewAdminAgreement(id) {\r\n  const blob = await request(`${id}/source/`, {}, true);\r\n  const url = URL.createObjectURL(blob);\r\n  try { window.open(url, '_blank', 'noopener,noreferrer'); }\r\n  finally { setTimeout(() => URL.revokeObjectURL(url), 60000); }\r\n}\r\n\r\nexport function agreementStatusLabel(status) {\r\n  return ({ DRAFT: 'Juodraštis', ACTIVE: 'Paruoštas pasirašyti', RETIRED: 'Nebenaudojamas',\r\n    assigned: 'Laukia pasirašymo', signing_in_progress: 'Pasirašoma',\r\n    signed_storage_pending: 'Pasirašyta, tikrinama ir saugoma', finalization_failed: 'Reikalinga peržiūra',\r\n    completed_stored: 'Pasirašyta', withdrawn: 'Priskyrimas atšauktas' })[status] || status;\r\n}\r\n","<script>\r\n  import { onMount, onDestroy, tick } from 'svelte';\r\n  import { listAdminAgreements, uploadAdminAgreement, searchAgreementStudents,\r\n    assignAgreementStudents, previewAdminAgreement, agreementStatusLabel, withdrawAgreementAssignment,\r\n    getAllAgreementAssignments, getAllAgreementStudents } from './adminAgreementApi.js';\r\n\r\n  let rows = [], page = 1, hasNext = false, filter = '';\r\n  let loading = true, busy = false, allowed = false, error = '', message = '';\r\n  let stage = 'library', active = null, title = '', file = null, uploadId = null, uploadAttempted = false;\r\n  let selected = [], query = '', candidates = [], searchPage = 1, searchNext = false, searching = false, confirmed = false;\r\n  let detailsId = null, details = [], detailsLoading = false, detailsFailed = false, detailsAbort;\r\n  const assignmentStatuses = ['assigned', 'signing_in_progress', 'signed_storage_pending', 'finalization_failed', 'completed_stored', 'withdrawn'];\r\n  $: detailGroups = groupAssignments(details);\r\n\r\n  function groupAssignments(entries) {\r\n    const groups = new Map(assignmentStatuses.map(status => [status, []]));\r\n    for (const entry of entries) {\r\n      if (!groups.has(entry.status)) groups.set(entry.status, []);\r\n      groups.get(entry.status).push(entry);\r\n    }\r\n    return [...groups].filter(([, entries]) => entries.length).map(([status, entries]) => ({ status, entries }));\r\n  }\r\n  let previewId = null, heading, searchTimer, searchAbort, searchGeneration = 0, loadGeneration = 0, detailGeneration = 0;\r\n  let alive = true;\r\n  let recipientFilter = 'students', removingId = null;\r\n  let startDate = '', endDate = '', appliedDates = null;\r\n  $: dateRangeReady = recipientFilter !== 'active_students_by_date' || appliedDates !== null;\r\n  let existingIds = new Set(), preloading = false, selectionReady = false, selectingAll = false;\r\n  let selectionGeneration = 0, selectionAbort;\r\n  $: newSelected = selected.filter(student => !existingIds.has(student.id));\r\n  const recipientFilters = [['all', 'Visi naudotojai'], ['students', 'Mokiniai'], ['teachers', 'Mokytojai'], ['active_students', 'Aktyvūs mokiniai']];\r\n\r\n  function report(exc) {\r\n    error = exc?.message || 'Ryšys nutrūko. Atnaujinkite sąrašą arba bandykite dar kartą.';\r\n    if ([401, 403].includes(exc?.status)) { allowed = false; rows = []; selected = []; details = []; }\r\n  }\r\n\r\n  async function load(nextPage = page) {\r\n    const generation = ++loadGeneration;\r\n    loading = true;\r\n    try {\r\n      const result = await listAdminAgreements(filter, nextPage);\r\n      if (!alive || generation !== loadGeneration) return;\r\n      rows = result.results; page = result.page; hasNext = result.has_next; allowed = true;\r\n    } catch (exc) { if (alive && generation === loadGeneration) report(exc); }\r\n    finally { if (alive && generation === loadGeneration) loading = false; }\r\n  }\r\n\r\n  function stopSearch() {\r\n    clearTimeout(searchTimer); searchAbort?.abort(); searchGeneration++; searching = false;\r\n  }\r\n\r\n  async function focusHeading() { await tick(); heading?.focus(); }\r\n\r\n  function beginUpload() {\r\n    stopSearch(); stopSelection(); stage = 'upload';\r\n    title = ''; file = null; uploadId = crypto.randomUUID(); uploadAttempted = false;\r\n    error = ''; message = ''; active = null; focusHeading();\r\n  }\r\n\r\n  function stopSelection() {\r\n    selectionGeneration++; selectionAbort?.abort(); preloading = false; selectingAll = false;\r\n  }\r\n\r\n  async function chooseStudents(row) {\r\n    stopSearch(); stopSelection(); active = row; stage = 'students'; selected = []; existingIds = new Set(); query = ''; candidates = [];\r\n    searchNext = false; confirmed = false; error = ''; message = ''; focusHeading();\r\n    recipientFilter = 'students'; startDate = ''; endDate = ''; appliedDates = null; search(1);\r\n    preloading = true; selectionReady = false; selectionAbort = new AbortController();\r\n    const generation = selectionGeneration;\r\n    try {\r\n      const entries = await getAllAgreementAssignments(row.public_id, selectionAbort.signal);\r\n      if (!alive || generation !== selectionGeneration) return;\r\n      selected = [...new Map(entries.filter(entry => entry.status !== 'withdrawn')\r\n        .flatMap(entry => (entry.members?.length ? entry.members : [entry.student]).map(student => [student.id, { ...student, assignmentStatus: entry.status }]))).values()];\r\n      existingIds = new Set(selected.map(student => student.id)); selectionReady = true;\r\n    } catch (exc) { if (alive && generation === selectionGeneration && exc.name !== 'AbortError') report(exc); }\r\n    finally { if (alive && generation === selectionGeneration) preloading = false; }\r\n  }\r\n\r\n  async function back() {\r\n    if (busy) return;\r\n    stopSearch(); stopSelection(); stage = 'library'; active = null; error = ''; confirmed = false;\r\n    await load(1); focusHeading();\r\n  }\r\n\r\n  async function upload() {\r\n    if (busy || !file || !title.trim()) return;\r\n    if (file.type !== 'application/pdf' || file.size > 20 * 1024 * 1024) {\r\n      error = 'Pasirinkite PDF dokumentą iki 20 MiB.'; return;\r\n    }\r\n    busy = true; error = ''; uploadAttempted = true;\r\n    const form = new FormData();\r\n    form.append('upload_id', uploadId); form.append('title', title.trim()); form.append('source_pdf', file);\r\n    try { const row = await uploadAdminAgreement(form); if (alive) chooseStudents(row); }\r\n    catch (exc) {\r\n      if (alive) {\r\n        report(exc);\r\n        if (!exc.status || exc.status >= 500) error = 'Įkėlimo rezultatas nepatvirtintas. Kartokite tą patį įkėlimą arba grįžkite į sąrašą — juodraštis galėjo būti išsaugotas.';\r\n        else if (exc.status === 400) { uploadAttempted = false; }\r\n      }\r\n    } finally { busy = false; }\r\n  }\r\n\r\n  function scheduleSearch() {\r\n    stopSearch(); candidates = []; searchNext = false;\r\n    if (hasDateRange() && (!query.trim() || query.trim().length >= 2)) searchTimer = setTimeout(() => search(1), 300);\r\n  }\r\n\r\n  function setRecipientFilter(value) {\r\n    if (value === recipientFilter) return;\r\n    if (value === 'active_students_by_date' || recipientFilter === 'active_students_by_date') invalidateDateRange();\r\n    recipientFilter = value; scheduleSearch();\r\n  }\r\n\r\n  function hasDateRange() {\r\n    return recipientFilter !== 'active_students_by_date' || appliedDates !== null;\r\n  }\r\n\r\n  function invalidateDateRange() {\r\n    stopSearch(); stopSelection(); appliedDates = null;\r\n    candidates = []; searchNext = false; confirmed = false; error = '';\r\n    selected = selected.filter(student => existingIds.has(student.id));\r\n  }\r\n\r\n  function applyDateRange() {\r\n    invalidateDateRange();\r\n    if (!startDate || !endDate || startDate > endDate) {\r\n      error = 'Pasirinkite pradžios ir pabaigos datą. Pradžios data turi būti ne vėlesnė už pabaigos datą.';\r\n      return;\r\n    }\r\n    appliedDates = { start_date: startDate, end_date: endDate };\r\n    search(1);\r\n  }\r\n\r\n  async function search(nextPage) {\r\n    if (!hasDateRange()) return;\r\n    searchAbort?.abort(); searchAbort = new AbortController();\r\n    const generation = ++searchGeneration, id = active.public_id;\r\n    searching = true;\r\n    try {\r\n      const result = await searchAgreementStudents(id, query, nextPage, searchAbort.signal, recipientFilter,\r\n        recipientFilter === 'active_students_by_date' ? { ...appliedDates } : null);\r\n      if (!alive || generation !== searchGeneration) return;\r\n      candidates = result.results; searchPage = result.page; searchNext = result.has_next;\r\n    } catch (exc) { if (alive && generation === searchGeneration && exc.name !== 'AbortError') report(exc); }\r\n    finally { if (alive && generation === searchGeneration) searching = false; }\r\n  }\r\n\r\n  function toggleStudent(student) {\r\n    if (student.can_assign === false || !selectionReady || selectingAll) return;\r\n    if (selected.some(row => row.id === student.id)) selected = selected.filter(row => row.id !== student.id);\r\n    else if (existingIds.has(student.id) || newSelected.length < 1000) selected = [...selected, student];\r\n    confirmed = false;\r\n  }\r\n\r\n  function clearSelection() {\r\n    selected = []; confirmed = false;\r\n  }\r\n\r\n  async function selectAllFiltered() {\r\n    if (!selectionReady || selectingAll || !hasDateRange() || (query.trim() && query.trim().length < 2)) return;\r\n    selectingAll = true; confirmed = false; error = ''; selectionAbort = new AbortController();\r\n    const generation = ++selectionGeneration;\r\n    try {\r\n      const users = await getAllAgreementStudents(active.public_id, query, recipientFilter, selectionAbort.signal,\r\n        recipientFilter === 'active_students_by_date' ? { ...appliedDates } : null);\r\n      if (!alive || generation !== selectionGeneration) return;\r\n      const merged = [...new Map([...selected, ...users.filter(user => user.can_assign === true)]\r\n        .map(student => [student.id, student])).values()];\r\n      if (merged.filter(student => !existingIds.has(student.id)).length > 1000) {\r\n        throw new Error('Vienu kartu galima priskirti iki 1000 naujų naudotojų. Susiaurinkite filtrą arba paiešką. Pasirinkimas nepakeistas.');\r\n      }\r\n      selected = merged;\r\n    } catch (exc) { if (alive && generation === selectionGeneration && exc.name !== 'AbortError') report(exc); }\r\n    finally { if (alive && generation === selectionGeneration) selectingAll = false; }\r\n  }\r\n\r\n  function closeDetails() {\r\n    detailGeneration++; detailsAbort?.abort(); detailsId = null; details = []; detailsLoading = false; detailsFailed = false;\r\n  }\r\n\r\n  async function showDetails(id) {\r\n    detailsAbort?.abort(); detailsAbort = new AbortController();\r\n    const generation = ++detailGeneration;\r\n    detailsId = id; detailsLoading = true; details = []; detailsFailed = false; error = '';\r\n    try {\r\n      const entries = await getAllAgreementAssignments(id, detailsAbort.signal);\r\n      if (!alive || generation !== detailGeneration) return;\r\n      details = entries;\r\n    } catch (exc) { if (alive && generation === detailGeneration && exc.name !== 'AbortError') { detailsFailed = true; report(exc); } }\r\n    finally { if (alive && generation === detailGeneration) detailsLoading = false; }\r\n  }\r\n\r\n  async function assign() {\r\n    if (busy || !selectionReady || selectingAll || !hasDateRange() || !confirmed || !newSelected.length) return;\r\n    busy = true; error = ''; stopSearch();\r\n    const id = active.public_id;\r\n    try {\r\n      const result = await assignAgreementStudents(id, newSelected.map(row => row.id));\r\n      if (!alive) return;\r\n      stage = 'library'; message = `Sukurta priskyrimų: ${result.created_count}. Kiti priskyrimai nepakeisti.`;\r\n      await load(1); await showDetails(id); focusHeading();\r\n    } catch (exc) {\r\n      if (alive) { report(exc); confirmed = false; await load(); }\r\n    } finally { busy = false; }\r\n  }\r\n\r\n  async function removeAssignment(versionId, entry) {\r\n    if (removingId || !entry.can_withdraw) return;\r\n    const target = entry.family ? `visai šeimai „${entry.family.name}“` : `naudotojui „${entry.student.username}“`;\r\n    if (!window.confirm(`Pašalinti dokumento priskyrimą ${target}? Dokumentas nebebus rodomas šiose paskyrose. Priskyrimo istorija bus išsaugota.`)) return;\r\n    removingId = entry.public_id; error = '';\r\n    try {\r\n      await withdrawAgreementAssignment(versionId, entry.public_id);\r\n      if (!alive) return;\r\n      message = 'Priskyrimas pašalintas. Istorija išsaugota.';\r\n      await load();\r\n      if (detailsId === versionId) await showDetails(versionId);\r\n    } catch (exc) {\r\n      if (alive) { report(exc); if (exc.status === 409 && detailsId === versionId) await showDetails(versionId); }\r\n    } finally { removingId = null; }\r\n  }\r\n\r\n  async function preview(id) {\r\n    if (previewId) return;\r\n    previewId = id; error = '';\r\n    try { await previewAdminAgreement(id); } catch (exc) { report(exc); }\r\n    finally { previewId = null; }\r\n  }\r\n\r\n  onMount(() => load(1));\r\n  onDestroy(() => { alive = false; stopSearch(); stopSelection(); loadGeneration++; closeDetails(); });\r\n</script>\r\n\r\n<section class=\"agreements\" aria-label=\"Dokumentų administravimas\" aria-busy={busy}>\r\n  <h2 bind:this={heading} tabindex=\"-1\">Dokumentai pasirašymui</h2>\r\n  {#if error}<p role=\"alert\" class=\"error\">{error}</p>{/if}\r\n  {#if message}<p role=\"status\" class=\"success\">{message}</p>{/if}\r\n  {#if loading}<p role=\"status\">Įkeliamas dokumentų sąrašas…</p>{/if}\r\n  {#if !allowed && !loading}<button on:click={() => { error = ''; load(1); }}>Bandyti dar kartą</button>{/if}\r\n  {#if allowed}\r\n    {#if stage === 'library'}\r\n      <div class=\"toolbar\">\r\n        <button class=\"primary\" on:click={() => beginUpload()}>Įkelti dokumentą</button>\r\n        <button disabled={loading} on:click={() => { error = ''; load(); }}>Atnaujinti sąrašą</button>\r\n      </div>\r\n      <form class=\"toolbar\" on:submit|preventDefault={() => load(1)}>\r\n        <label>Ieškoti dokumentų<input bind:value={filter} maxlength=\"240\" /></label>\r\n        <button disabled={loading}>Ieškoti</button>\r\n      </form>\r\n      {#if !loading && !rows.length}<p>Dokumentų nėra. Įkelkite pirmą dokumentą.</p>{/if}\r\n      <div class=\"library\">\r\n        {#each rows as row (row.public_id)}\r\n          <article>\r\n            <h3>{row.title}</h3>\r\n            <p>{row.document_title} · Versija {row.version_number} · {agreementStatusLabel(row.status)}{!row.is_enabled ? ' · Išjungtas' : ''}</p>\r\n            <p>Priskirta: {row.assigned_count} · Pasirašyta: {row.signed_count}</p>\r\n            <div class=\"toolbar\">\r\n              <button disabled={!!previewId} on:click={() => preview(row.public_id)}>{previewId === row.public_id ? 'Atidaromas dokumentas…' : 'Peržiūrėti PDF'}</button>\r\n              {#if row.can_assign}<button class=\"primary\" on:click={() => chooseStudents(row)}>Priskirti mokiniams</button>{/if}\r\n              <button aria-expanded={detailsId === row.public_id} on:click={() => detailsId === row.public_id ? closeDetails() : showDetails(row.public_id)}>Priskyrimai ir būsena</button>\r\n            </div>\r\n            {#if detailsId === row.public_id}\r\n              <section class=\"details selection-panel\" aria-label=\"Priskyrimai ir būsena\">\r\n                <div class=\"panel-heading\"><div><span class=\"section-eyebrow\">Dokumento priskyrimai</span><h4>Priskyrimai ir būsena</h4><p>Peržiūrėkite pasirašymo eigą ir tvarkykite nepasirašytus priskyrimus.</p></div></div>\r\n                <div class=\"assignment-toolbar\"><button disabled={detailsLoading} on:click={() => showDetails(row.public_id)}>Atnaujinti būsenas</button>{#if !detailsLoading && !detailsFailed}<span class=\"selected-count\">Iš viso: {details.length}</span>{/if}</div>\r\n                {#if detailsLoading}<p role=\"status\">Įkeliami priskyrimai…</p>\r\n                {:else if detailsFailed}<p class=\"hint\">Priskyrimų įkelti nepavyko. Atnaujinkite būsenas ir bandykite dar kartą.</p>\r\n                {:else}\r\n                  {#if !details.length}<p>Mokinių dar nepriskirta.</p>{/if}\r\n                  <div class=\"assignment-groups\">\r\n                    {#each detailGroups as group (group.status)}\r\n                      <section class=\"assignment-group\" class:complete={group.status === 'completed_stored'} class:review={group.status === 'finalization_failed'} class:waiting={group.status === 'assigned'} aria-labelledby={`assignment-${row.public_id}-${group.status}`}>\r\n                        <h5 id={`assignment-${row.public_id}-${group.status}`}><span>{agreementStatusLabel(group.status)}</span><span class=\"status-count\">{group.entries.length}</span></h5>\r\n                        <ul class=\"assignment-list\" aria-label={agreementStatusLabel(group.status)}>{#each group.entries as entry (entry.public_id)}<li>\r\n                          <div class=\"student-info\"><strong>{entry.family ? entry.family.name : `${entry.student.first_name} ${entry.student.last_name}`}</strong>{#if entry.family}<span class=\"student-meta\">{entry.members.map(member => `${member.first_name} ${member.last_name}`).join(\", \")}</span>{/if}<span class=\"student-meta\">{entry.student.username}</span></div>\r\n                          {#if entry.can_withdraw}<button class=\"remove-student\" disabled={!!removingId} aria-label={`Pašalinti priskyrimą ${entry.student.username}`} on:click={() => removeAssignment(row.public_id, entry)}>{removingId === entry.public_id ? 'Šalinama…' : 'Pašalinti priskyrimą'}</button>{/if}\r\n                        </li>{/each}</ul>\r\n                      </section>\r\n                    {/each}\r\n                  </div>\r\n                  <p class=\"hint\">Pasirašyti dokumentai nešalinami. Vykstant pasirašymui ar tikrinant jo rezultatą, priskyrimo pašalinimas negalimas. Atšaukti priskyrimai lieka istorijoje.</p>\r\n                {/if}\r\n              </section>\r\n            {/if}\r\n          </article>\r\n        {/each}\r\n      </div>\r\n      <div class=\"toolbar\"><button disabled={page <= 1 || loading} on:click={() => load(page - 1)}>Ankstesni dokumentai</button><span>Puslapis {page}</span><button disabled={!hasNext || loading} on:click={() => load(page + 1)}>Kiti dokumentai</button></div>\r\n    {:else if stage === 'upload'}\r\n      <h3>1. Dokumentas</h3>\r\n      <p>Įkelkite PDF kaip atskirą dokumentą ir pasirinkite, kam jį priskirti. Ankstesni dokumentai, priskyrimai ir parašai nebus pakeisti.</p>\r\n      <form on:submit|preventDefault={upload}>\r\n        <fieldset disabled={busy}>\r\n          <label>Dokumento pavadinimas<input bind:value={title} maxlength=\"240\" required disabled={uploadAttempted} /></label>\r\n          <label>PDF dokumentas<input type=\"file\" accept=\"application/pdf,.pdf\" required disabled={uploadAttempted} on:change={event => file = event.currentTarget.files[0] || null} /></label>\r\n          <p>PDF iki 20 MiB. Dokumentas išsaugomas kaip juodraštis; mokiniai jo nematys iki priskyrimo.</p>\r\n          <button class=\"primary\" disabled={!title.trim() || !file}>{busy ? 'Išsaugoma…' : 'Išsaugoti ir tęsti'}</button>\r\n        </fieldset>\r\n      </form>\r\n      <button disabled={busy} on:click={back}>Grįžti į sąrašą</button>\r\n    {:else if stage === 'students'}\r\n      <h3>2. Mokiniai</h3>\r\n      <div class=\"document-summary\">\r\n        <div><span class=\"section-eyebrow\">Pasirinktas dokumentas</span><strong>{active.title}</strong><span class=\"version-badge\">Versija {active.version_number}</span></div>\r\n        <button disabled={!!previewId} on:click={() => preview(active.public_id)}>{previewId ? 'Atidaromas dokumentas…' : 'Peržiūrėti PDF'}</button>\r\n      </div>\r\n      {#if preloading}<p role=\"status\">Įkeliami jau priskirti naudotojai…</p>{/if}\r\n      {#if !preloading && !selectionReady}<button on:click={() => chooseStudents(active)}>Bandyti įkelti priskyrimus dar kartą</button>{/if}\r\n      <fieldset disabled={busy || !selectionReady || selectingAll}>\r\n        <section class=\"selection-panel\" aria-label=\"Mokinių pasirinkimas\">\r\n          <div class=\"panel-heading\"><span class=\"section-number\" aria-hidden=\"true\">1</span><div><h4>Pasirinkite mokinius</h4><p>Ieškokite ir pažymėkite reikiamas paskyras.</p></div></div>\r\n          <div class=\"recipient-filters\" role=\"group\" aria-label=\"Naudotojų filtrai\">\r\n            {#each recipientFilters as [value, label]}<button type=\"button\" class:active={recipientFilter === value} aria-pressed={recipientFilter === value} on:click={() => setRecipientFilter(value)}>{label}</button>{/each}\r\n            <button type=\"button\" class:active={recipientFilter === 'active_students_by_date'} aria-pressed={recipientFilter === 'active_students_by_date'} on:click={() => setRecipientFilter('active_students_by_date')}>Aktyvūs mokiniai pagal datą</button>\r\n          </div>\r\n          {#if recipientFilter === 'active_students_by_date'}\r\n            <div class=\"toolbar\">\r\n              <label>Nuo<input type=\"date\" bind:value={startDate} on:input={invalidateDateRange} /></label>\r\n              <label>Iki<input type=\"date\" bind:value={endDate} on:input={invalidateDateRange} /></label>\r\n              <button type=\"button\" on:click={applyDateRange}>Taikyti laikotarpį</button>\r\n            </div>\r\n            <p class=\"hint\">Mokiniai, turintys bent vieną neatšauktą pamoką pasirinktu laikotarpiu, įskaitant abi datas (Vilniaus laiku). Atšaukti mokinių dalyvavimai neįtraukiami. Pakeitus datas, nauji pasirinkimai išvalomi; esami priskyrimai nesikeičia.</p>\r\n            {#if appliedDates}<p role=\"status\">Taikomas laikotarpis: {appliedDates.start_date} – {appliedDates.end_date}.</p>{/if}\r\n          {/if}\r\n          <label>Ieškoti mokinių<input bind:value={query} on:input={scheduleSearch} placeholder=\"Vardas, pavardė, naudotojo vardas arba el. paštas\" maxlength=\"240\" /></label>\r\n          <p class=\"hint\">Pasirinkite filtrą arba ieškokite įvedę bent 2 simbolius. Jau priskirtos paskyros nerodomos.{#if recipientFilter === 'active_students'} Aktyvūs mokiniai turi bent vieną neatšauktą pamoką nuo 2026-09-01.{/if}</p>\r\n          <div class=\"toolbar\"><button type=\"button\" disabled={!dateRangeReady || (!!query.trim() && query.trim().length < 2)} on:click={selectAllFiltered}>{selectingAll ? 'Pasirenkami naudotojai…' : 'Pasirinkti visus pagal filtrą'}</button></div>\r\n          <p class=\"hint\">Pasirenkami tinkami naudotojai iš visų šio filtro ir paieškos puslapių. Iki 1000 naujų priskyrimų vienu kartu.</p>\r\n          <div class=\"candidate-list\" aria-busy={searching}>\r\n            {#if searching}<p role=\"status\" class=\"empty-selection\">Ieškoma…</p>{/if}\r\n            {#each candidates as student (student.id)}\r\n              <label class=\"candidate-row\" class:checked={selected.some(row => row.id === student.id)}>\r\n                <span class=\"checkbox-cell\"><input type=\"checkbox\" aria-label={`Pasirinkti ${student.username}`}\r\n                  checked={selected.some(row => row.id === student.id)}\r\n                  disabled={student.can_assign === false || (!selected.some(row => row.id === student.id) && newSelected.length >= 1000)}\r\n                  on:change={() => toggleStudent(student)} /></span>\r\n                <span class=\"student-info\"><strong>{student.first_name} {student.last_name}</strong><span class=\"student-meta\">{student.username}</span>{#if student.email}<span class=\"student-meta\">{student.email}</span>{/if}{#if student.can_assign === false}<span class=\"student-meta\">Šiai paskyrai klientų dokumentų priskirti negalima.</span>{/if}</span>\r\n              </label>\r\n            {/each}\r\n            {#if !searching && !candidates.length}<p class=\"empty-selection\">{query.trim().length >= 2 ? 'Mokinių nerasta.' : 'Paieškos rezultatai bus rodomi čia.'}</p>{/if}\r\n          </div>\r\n          {#if candidates.length}<div class=\"toolbar picker-pagination\"><button disabled={searchPage <= 1 || searching} on:click={() => search(searchPage - 1)}>Ankstesni mokiniai</button><span>Puslapis {searchPage}</span><button disabled={!searchNext || searching} on:click={() => search(searchPage + 1)}>Kiti mokiniai</button></div>{/if}\r\n        </section>\r\n        <section class=\"selection-panel selected-panel\" aria-label=\"Pasirinkti mokiniai\">\r\n          <div class=\"panel-heading\"><span class=\"section-number\" aria-hidden=\"true\">2</span><div><h4>Pasirinkti mokiniai</h4><p>Patikrinkite sąrašą prieš priskirdami dokumentą.</p></div><span class=\"selected-count\">Pasirinkta: {selected.length}</span></div>\r\n          <div class=\"toolbar\"><button type=\"button\" disabled={!selected.length} on:click={clearSelection}>Atžymėti visus</button><span class=\"hint\">Naujų priskyrimų: {newSelected.length}</span></div>\r\n          <p class=\"hint\">Jau priskirti naudotojai pažymėti žemiau. Atžymėjimas nekeičia esamų priskyrimų — juos šalinkite skiltyje „Priskyrimai ir būsena“.</p>\r\n          {#if selected.length}\r\n            <ul class=\"selected-list\">{#each selected as student (student.id)}<li>\r\n              <span class=\"student-info\"><strong>{student.first_name} {student.last_name}</strong><span class=\"student-meta\">{student.username}</span>{#if existingIds.has(student.id)}<span class=\"assignment-status\">Jau priskirta · {agreementStatusLabel(student.assignmentStatus)}</span>{/if}</span>\r\n              <button class=\"remove-student\" aria-label={`Pašalinti ${student.username}`} on:click={() => toggleStudent(student)}>Pašalinti</button>\r\n            </li>{/each}</ul>\r\n          {:else}<p class=\"empty-selection\">Dar nepasirinkote mokinių.</p>{/if}\r\n        </section>\r\n        <section class=\"selection-panel confirmation-panel\" aria-label=\"Priskyrimo patvirtinimas\">\r\n          <div class=\"panel-heading\"><span class=\"section-number\" aria-hidden=\"true\">3</span><div><h4>Patvirtinkite priskyrimą</h4><p>Dokumentą gaus tik aukščiau pasirinkti mokiniai.</p></div></div>\r\n          <label class=\"confirm\"><input type=\"checkbox\" bind:checked={confirmed} /><span>Patvirtinu, kad pasirinkti mokiniai turi pasirašyti „{active.title}“, versiją {active.version_number}.</span></label>\r\n          <p class=\"hint\">Priskyrimas parodys dokumentą mokinio paskyroje. Pasirašymas jo vardu nebus pradėtas.</p>\r\n          <button class=\"primary\" disabled={!confirmed || !newSelected.length} on:click={assign}>{busy ? 'Priskiriama…' : 'Priskirti pasirašyti'}</button>\r\n        </section>\r\n      </fieldset>\r\n      <button disabled={busy} on:click={back}>Grįžti į sąrašą</button>\r\n    {/if}\r\n  {/if}\r\n</section>\r\n\r\n<style>\r\n  .agreements { width: 100%; min-width: 0; color: #243833; text-align: left; }\r\n  h2 { color: #14695b; margin-top: 0; }\r\n  h2:focus { outline: none; }\r\n  h3, h4 { margin: .7rem 0; }\r\n  .toolbar { display: flex; flex-wrap: wrap; gap: .6rem; align-items: center; margin: .8rem 0; }\r\n  article { padding: 1rem; border: 1px solid #d8e2de; border-radius: 12px; margin: 1rem 0; background: #fff; overflow-wrap: anywhere; }\r\n  fieldset { border: 0; padding: 0; margin: 1rem 0; min-width: 0; }\r\n  label { display: flex; flex-direction: column; gap: .4rem; margin: .8rem 0; flex: 1; }\r\n  input { box-sizing: border-box; width: 100%; min-width: 0; padding: .7rem; border: 1px solid #8baca3; border-radius: 6px; font: inherit; }\r\n  .confirm { flex-direction: row; align-items: flex-start; }\r\n  .confirm input { width: auto; flex-shrink: 0; margin-top: .3rem; }\r\n  button { padding: .65rem .85rem; border: 1px solid #8baca3; border-radius: 7px; background: #fff; color: #14695b; cursor: pointer; font: inherit; }\r\n  button.primary { background: #14695b; color: white; border-color: #14695b; }\r\n  button:disabled { opacity: .5; cursor: not-allowed; }\r\n  button:focus-visible, input:focus-visible { outline: 3px solid #e4af3a; outline-offset: 2px; }\r\n  li { margin: .6rem 0; overflow-wrap: anywhere; }\r\n  ul { padding-left: 1.2rem; }\r\n  .error { color: #912626; background: #fff0ef; padding: .8rem; border-radius: 6px; }\r\n  .success { background: #e6f5ed; padding: .8rem; border-radius: 6px; }\r\n  .details.selection-panel { border: 1px solid #cbdcd4; border-left: 4px solid #14695b; margin: 1.3rem 0 0; padding: 1.1rem; background: #f3f8f5; }\r\n  .assignment-toolbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .75rem; margin-bottom: 1rem; }\r\n  .assignment-groups { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; margin: 1rem 0; align-items: start; }\r\n  .assignment-group { min-width: 0; border: 1px solid #d8e2de; border-radius: 10px; overflow: hidden; background: #fff; }\r\n  .assignment-group h5 { display: flex; align-items: center; justify-content: space-between; gap: .75rem; margin: 0; padding: .85rem .9rem; background: #edf2ef; color: #3e574e; font-size: .9rem; line-height: 1.5; }\r\n  .assignment-group.waiting h5 { background: #fff4d9; color: #765923; }\r\n  .assignment-group.complete h5 { background: #e1f2e7; color: #14695b; }\r\n  .assignment-group.review h5 { background: #fff0ed; color: #912626; }\r\n  .status-count { display: inline-flex; justify-content: center; align-items: center; min-width: 1.6rem; padding: .15rem .4rem; border-radius: 6px; background: #ffffffb3; font-size: .8rem; font-variant-numeric: tabular-nums; }\r\n  .assignment-list { list-style: none; padding: 0; margin: 0; max-height: 380px; overflow-y: auto; background: white; }\r\n  .assignment-list li { display: flex; flex-wrap: wrap; align-items: center; gap: .8rem; padding: .9rem; margin: 0; border-bottom: 1px solid #e2eae5; }\r\n  .assignment-list li:last-child { border-bottom: 0; }\r\n  @media (max-width: 800px) { .assignment-groups { grid-template-columns: minmax(0, 1fr); } }\r\n  .assignment-status { align-self: flex-start; margin-top: .4rem; padding: .25rem .55rem; border-radius: 12px; background: #f2f0e8; font-size: .8rem; }\r\n  .recipient-filters { display: flex; flex-wrap: wrap; gap: .5rem; padding: .8rem; border: 1px solid #d8e2de; border-radius: 8px; background: #f3f8f5; }\r\n  .recipient-filters button { font-size: .85rem; }\r\n  .recipient-filters button.active { color: white; background: #14695b; border-color: #14695b; }\r\n  .document-summary { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 1rem; background: #f1f6f4; border: 1px solid #d8e2de; border-radius: 10px; padding: 1rem; margin: 1rem 0 1.5rem; }\r\n  .document-summary > div { min-width: 0; flex: 1; overflow-wrap: anywhere; }\r\n  .section-eyebrow { display: block; font-size: .75rem; color: #58746b; letter-spacing: .04em; margin-bottom: .4rem; }\r\n  .version-badge { display: inline-block; margin-left: .6rem; font-size: .8rem; padding: .2rem .5rem; border-radius: 20px; background: white; color: #47685c; }\r\n  .selection-panel { border: 1px solid #d8e2de; border-radius: 12px; padding: 1.1rem; margin-bottom: 1.25rem; background: white; min-width: 0; }\r\n  .panel-heading { display: flex; flex-wrap: wrap; gap: .7rem; align-items: flex-start; margin-bottom: 1rem; }\r\n  .panel-heading > div { flex: 1; min-width: 150px; }\r\n  .panel-heading h4 { margin: 0 0 .3rem; }\r\n  .panel-heading p, .hint { font-size: .85rem; color: #526b62; line-height: 1.55; margin: 0; }\r\n  .section-number { flex-shrink: 0; display: grid; place-items: center; width: 1.8rem; height: 1.8rem; border-radius: 50%; background: #e6f0eb; color: #14695b; font-weight: 600; font-size: .85rem; }\r\n  .candidate-list { max-height: 360px; overflow-y: auto; border: 1px solid #cbdcd4; border-radius: 8px; margin-top: 1rem; background: #fff; }\r\n  .candidate-row { display: flex; flex-direction: row; gap: 0; align-items: stretch; margin: 0; border-bottom: 1px solid #e2eae5; cursor: pointer; }\r\n  .candidate-row:last-child { border-bottom: 0; }\r\n  .candidate-row:hover { background: #f3f8f5; }\r\n  .candidate-row.checked { background: #eaf5ef; }\r\n  .checkbox-cell { display: flex; align-items: center; justify-content: center; flex: 0 0 48px; border-right: 1px solid #e0e9e3; background: #f7faf8; }\r\n  .checkbox-cell input, .confirm input { width: 18px; height: 18px; padding: 0; accent-color: #14695b; }\r\n  .student-info { display: flex; flex-direction: column; gap: .15rem; flex: 1; min-width: 0; overflow-wrap: anywhere; }\r\n  .candidate-row .student-info { padding: .8rem; }\r\n  .student-meta { color: #587168; font-size: .85rem; }\r\n  .empty-selection { padding: 1.2rem .7rem; color: #687b72; text-align: center; font-size: .85rem; margin: 0; }\r\n  .picker-pagination { justify-content: space-between; font-size: .8rem; margin-bottom: 0; }\r\n  .selected-panel { background: #f6faf8; }\r\n  .selected-count { background: #e1eee7; color: #14695b; padding: .35rem .6rem; border-radius: 20px; font-size: .8rem; white-space: nowrap; }\r\n  .selected-list { list-style: none; padding: 0; margin: 0; max-height: 360px; overflow-y: auto; }\r\n  .selected-list li { display: flex; align-items: center; gap: .75rem; margin: .5rem 0 0; padding: .7rem .8rem; background: #fff; border: 1px solid #dce8e1; border-radius: 8px; }\r\n  .remove-student { font-size: .8rem; padding: .4rem .6rem; }\r\n  .confirmation-panel { background: #fffaf0; border-color: #e9d9b5; }\r\n  .confirmation-panel .section-number { background: #f8e9ca; color: #7a5b23; }\r\n  .confirmation-panel .confirm { background: white; border: 1px solid #e7ddc9; border-radius: 8px; padding: .8rem; gap: .75rem; line-height: 1.55; }\r\n  .confirmation-panel .primary { margin-top: 1rem; }\r\n  @media (max-width: 600px) { .toolbar > button { flex: 1 1 auto; } article { padding: .75rem; } }\r\n</style>\r\n","<script>    \r\n    import TeacherFinderComponent from \"./TeacherFinderComponent.svelte\";\r\n    import TeacherAvailabilityCapacityComponent from \"./TeacherAvailabilityCapacityComponent.svelte\";\r\n    import RefreshDatabaseButtonComponent from \"./RefreshDatabaseButtonComponent.svelte\";\r\n    import FindStudentsComments from \"./FindStudentsComments.svelte\";\r\n    import AdminCreateUserComponent from \"./AdminCreateUserComponent.svelte\";\r\n    import StudentPricingModifierComponent from \"./StudentPricingModifierComponent.svelte\";\r\n    import TeacherPricingModifierComponent from \"./TeacherPricingModifierComponent.svelte\";\r\n    import AdminManualPaymentComponent from \"./AdminManualPaymentComponent.svelte\";\r\n    import BalanceTransactionsCsvDownloader from \"./BalanceTransactionsCsvDownloader.svelte\";\r\n    import TeacherRevenuePaymentCsvDownloader from \"./TeacherRevenuePaymentCsvDownloader.svelte\";\r\n    import AdminFamilyManagerComponent from \"./AdminFamilyManagerComponent.svelte\";\r\n    import NavBarReusable from \"./NavbarReusable.svelte\";\r\n    import AdminDashboardLauncher from './AdminDashboardLauncher.svelte';\r\n    import AdminAgreements from './AdminAgreements.svelte';\r\n    import { onMount } from 'svelte';\r\n\r\n    // State for tab management\r\n    let activeTab = 'create-users'; // 'create-users', 'find-teachers', 'student-comments', 'student-pricing', 'teacher-pricing', 'manual-payments', 'balance-csv', 'teacher-revenue-csv', 'system-maintenance', 'invoice-debug', 'schedule-debug', 'user-invoice-view', 'families'\r\n    let deepLinkTeacherId = null;\r\n\r\n    function switchTab(tab) {\r\n        activeTab = tab;\r\n    }\r\n\r\n    function getHashParts() {\r\n        const hash = window.location.hash || '#/admin';\r\n        const qIndex = hash.indexOf('?');\r\n        if (qIndex === -1) return { path: hash, params: new URLSearchParams() };\r\n        return { path: hash.slice(0, qIndex), params: new URLSearchParams(hash.slice(qIndex + 1)) };\r\n    }\r\n\r\n    function readTabFromHash() {\r\n        const { path, params } = getHashParts();\r\n        if (!path.startsWith('#/admin')) return;\r\n        const tab = params.get('tab');\r\n        const teacherId = params.get('teacherId');\r\n        if (tab && tab !== 'activity-dashboard') activeTab = tab;\r\n        deepLinkTeacherId = teacherId ? parseInt(teacherId, 10) : null;\r\n    }\r\n\r\n    onMount(() => {\r\n        readTabFromHash();\r\n        const onHashChange = () => readTabFromHash();\r\n        window.addEventListener('hashchange', onHashChange);\r\n        return () => window.removeEventListener('hashchange', onHashChange);\r\n    });\r\n</script>\r\n\r\n<NavBarReusable label=\"Admin - User Management\" />\r\n\r\n<div class=\"tab-navigation\">\r\n    <button class=\"tab-button {activeTab === 'agreements' ? 'active' : ''}\" on:click={() => switchTab('agreements')}>Dokumentai pasirašymui</button>\r\n    <button class=\"tab-button {activeTab === 'monthly-feedback' ? 'active' : ''}\" on:click={() => switchTab('monthly-feedback')}>Monthly email review</button>\r\n    <a\r\n        class=\"tab-button dashboard-link\"\r\n        href=\"#/admin/activity-dashboard\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n    >\r\n        📊 Activity Dashboard\r\n        <span aria-hidden=\"true\">↗</span>\r\n    </a>\r\n    <button \r\n        class=\"tab-button {activeTab === 'create-users' ? 'active' : ''}\"\r\n        on:click={() => switchTab('create-users')}\r\n    >\r\n        Create Users\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'find-teachers' ? 'active' : ''}\"\r\n        on:click={() => switchTab('find-teachers')}\r\n    >\r\n        Find Teachers\r\n    </button>\r\n    <button\r\n        class=\"tab-button {activeTab === 'teacher-capacity' ? 'active' : ''}\"\r\n        on:click={() => switchTab('teacher-capacity')}\r\n    >\r\n        Availability Capacity\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'student-comments' ? 'active' : ''}\"\r\n        on:click={() => switchTab('student-comments')}\r\n    >\r\n        Student Comments\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'student-pricing' ? 'active' : ''}\"\r\n        on:click={() => switchTab('student-pricing')}\r\n    >\r\n        Student Pricing\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'teacher-pricing' ? 'active' : ''}\"\r\n        on:click={() => switchTab('teacher-pricing')}\r\n    >\r\n        Teacher Pricing\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'manual-payments' ? 'active' : ''}\"\r\n        on:click={() => switchTab('manual-payments')}\r\n    >\r\n        Manual Payments\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'families' ? 'active' : ''}\"\r\n        on:click={() => switchTab('families')}\r\n    >\r\n        👪 Families\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'balance-csv' ? 'active' : ''}\"\r\n        on:click={() => switchTab('balance-csv')}\r\n    >\r\n        📥 Balance CSV\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'teacher-revenue-csv' ? 'active' : ''}\"\r\n        on:click={() => switchTab('teacher-revenue-csv')}\r\n    >\r\n        💰 Teacher Revenue CSV\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'system-maintenance' ? 'active' : ''}\"\r\n        on:click={() => switchTab('system-maintenance')}\r\n    >\r\n        Database refresh\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'invoice-debug' ? 'active' : ''}\"\r\n        on:click={() => switchTab('invoice-debug')}\r\n    >\r\n        Invoice Debug\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'schedule-debug' ? 'active' : ''}\"\r\n        on:click={() => switchTab('schedule-debug')}\r\n    >\r\n        Schedule Debug\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'user-invoice-view' ? 'active' : ''}\"\r\n        on:click={() => switchTab('user-invoice-view')}\r\n    >\r\n        👁️ User Invoice View\r\n    </button>\r\n</div>\r\n\r\n{#if activeTab === 'agreements'}\r\n    <div class=\"classcontainer\"><AdminAgreements /></div>\r\n{:else if activeTab === 'monthly-feedback'}\r\n    <AdminDashboardLauncher\r\n        title=\"Monthly email review\"\r\n        href=\"#/admin/monthly-feedback\"\r\n        description=\"Review each family's frozen teacher feedback email, hold anything that needs attention, then send eligible emails from the full review page.\"\r\n        launchLabel=\"Launch Monthly email review\"\r\n        on:close={() => switchTab('create-users')}\r\n    />\r\n{:else if activeTab === 'create-users'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Create New Student Account</h3>\r\n        <AdminCreateUserComponent />\r\n    </div>\r\n{:else if activeTab === 'find-teachers'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Find Teachers</h3>\r\n        <TeacherFinderComponent />\r\n    </div>\r\n{:else if activeTab === 'teacher-capacity'}\r\n    <div class=\"classcontainer\">\r\n        <TeacherAvailabilityCapacityComponent />\r\n    </div>\r\n{:else if activeTab === 'student-comments'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Find Student Comments</h3>\r\n        <FindStudentsComments />\r\n    </div>\r\n{:else if activeTab === 'student-pricing'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Student Pricing Modifiers</h3>\r\n        <StudentPricingModifierComponent />\r\n    </div>\r\n{:else if activeTab === 'teacher-pricing'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Teacher Pricing Modifiers</h3>\r\n        <TeacherPricingModifierComponent embedded={!!deepLinkTeacherId} teacherId={deepLinkTeacherId} />\r\n    </div>\r\n{:else if activeTab === 'manual-payments'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Manual Payment Transactions</h3>\r\n        <AdminManualPaymentComponent />\r\n    </div>\r\n{:else if activeTab === 'families'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Family Connections</h3>\r\n        <AdminFamilyManagerComponent />\r\n    </div>\r\n{:else if activeTab === 'balance-csv'}\r\n    <BalanceTransactionsCsvDownloader />\r\n{:else if activeTab === 'teacher-revenue-csv'}\r\n    <TeacherRevenuePaymentCsvDownloader />\r\n{:else if activeTab === 'system-maintenance'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Database refresh</h3>\r\n        <RefreshDatabaseButtonComponent />\r\n    </div>\r\n{:else if activeTab === 'invoice-debug'}\r\n    <div class=\"classcontainer\">\r\n        <h3>🔧 Student Invoice Debug Tool</h3>\r\n        <p style=\"margin-bottom: 1rem; color: #666;\">\r\n            This tool allows you to view any student's invoice page exactly as they see it, \r\n            including balance calculations and validation details.\r\n        </p>\r\n        <div style=\"text-align: center; margin: 2rem 0;\">\r\n            <a href=\"#/admin/student-invoice-debug\" style=\"\r\n                display: inline-block;\r\n                padding: 12px 24px;\r\n                background-color: #dc3545;\r\n                color: white;\r\n                text-decoration: none;\r\n                border-radius: 8px;\r\n                font-weight: bold;\r\n                font-size: 1.1rem;\r\n                transition: background-color 0.3s ease;\r\n            \">\r\n                🔧 Launch Invoice Debug Tool\r\n            </a>\r\n        </div>\r\n        <div style=\"font-size: 0.9rem; color: #666; margin-top: 1rem;\">\r\n            <strong>Features:</strong>\r\n            <ul style=\"margin: 0.5rem 0; padding-left: 2rem;\">\r\n                <li>Select any student from a dropdown</li>\r\n                <li>View their exact invoice page (identical to student view)</li>\r\n                <li>See validation details for balance calculations</li>\r\n                <li>Generate test invoices (payment disabled)</li>\r\n                <li>Debug balance transaction validation</li>\r\n            </ul>\r\n        </div>\r\n    </div>\r\n{:else if activeTab === 'schedule-debug'}\r\n    <div class=\"classcontainer\">\r\n        <h3>📅 Student Schedule Debug Tool</h3>\r\n        <p style=\"margin-bottom: 1rem; color: #666;\">\r\n            This tool allows you to view any student's schedule page exactly as they see it, \r\n            including past/upcoming classes, filters, and interactive elements.\r\n        </p>\r\n        <div style=\"text-align: center; margin: 2rem 0;\">\r\n            <a href=\"#/admin/student-schedule-debug\" style=\"\r\n                display: inline-block;\r\n                padding: 12px 24px;\r\n                background-color: #dc3545;\r\n                color: white;\r\n                text-decoration: none;\r\n                border-radius: 8px;\r\n                font-weight: bold;\r\n                font-size: 1.1rem;\r\n                transition: background-color 0.3s ease;\r\n            \">\r\n                📅 Launch Schedule Debug Tool\r\n            </a>\r\n        </div>\r\n        <div style=\"font-size: 0.9rem; color: #666; margin-top: 1rem;\">\r\n            <strong>Features:</strong>\r\n            <ul style=\"margin: 0.5rem 0; padding-left: 2rem;\">\r\n                <li>Select any student from a dropdown</li>\r\n                <li>View their exact schedule page (identical to student view)</li>\r\n                <li>See all class filters (past, upcoming, cancelled)</li>\r\n                <li>Debug class status and timing logic</li>\r\n                <li>View reschedule requests and registration requests</li>\r\n                <li>Interactive elements disabled for safety</li>\r\n            </ul>\r\n        </div>\r\n    </div>\r\n{:else if activeTab === 'user-invoice-view'}\r\n    <div class=\"classcontainer\">\r\n        <h3>👁️ User Invoice Page View</h3>\r\n        <p style=\"margin-bottom: 1rem; color: #666;\">\r\n            View the <strong>exact</strong> invoice page that users see - perfect for debugging user-reported issues. \r\n            This is a pure replica without any debug features, showing exactly what appears in the user's view.\r\n        </p>\r\n        <div style=\"text-align: center; margin: 2rem 0;\">\r\n            <a href=\"#/admin/user-invoice-view\" style=\"\r\n                display: inline-block;\r\n                padding: 12px 24px;\r\n                background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\r\n                color: white;\r\n                text-decoration: none;\r\n                border-radius: 8px;\r\n                font-weight: bold;\r\n                font-size: 1.1rem;\r\n                transition: all 0.3s ease;\r\n                box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);\r\n            \">\r\n                👁️ Launch User Invoice View\r\n            </a>\r\n        </div>\r\n        <div style=\"font-size: 0.9rem; color: #666; margin-top: 1rem;\">\r\n            <strong>Features:</strong>\r\n            <ul style=\"margin: 0.5rem 0; padding-left: 2rem;\">\r\n                <li>Select any user from a dropdown</li>\r\n                <li>See their <strong>exact</strong> invoice page (pure user view, no debug features)</li>\r\n                <li>Test invoice generation exactly as users experience it</li>\r\n                <li>View their balance, classes, and payment history</li>\r\n                <li>Payment functionality disabled for safety</li>\r\n                <li>Perfect for reproducing user-reported issues</li>\r\n            </ul>\r\n        </div>\r\n        <div style=\"margin-top: 1.5rem; padding: 1rem; background-color: #e7f3ff; border-left: 4px solid #667eea; border-radius: 4px;\">\r\n            <strong style=\"color: #004085;\">💡 Use Case:</strong>\r\n            <p style=\"color: #004085; margin: 0.5rem 0 0 0; font-size: 0.9rem;\">\r\n                When users report issues with their invoice page (e.g., \"classes not showing\", \"balance is wrong\", \"can't generate invoice\"), \r\n                use this tool to see exactly what they're experiencing. Unlike the Invoice Debug tool, this has no extra features - \r\n                it's the pure user experience for accurate debugging.\r\n            </p>\r\n        </div>\r\n    </div>\r\n{/if}\r\n\r\n<style>\r\n    .tab-navigation {\r\n        display: flex;\r\n        gap: 10px;\r\n        margin-bottom: 20px;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .tab-button {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 6px;\r\n        padding: 10px 20px;\r\n        border: 1px solid #ccc;\r\n        background: white;\r\n        cursor: pointer;\r\n        border-radius: 8px;\r\n        font-size: 14px;\r\n        color: #222;\r\n        text-decoration: none;\r\n    }\r\n\r\n    .dashboard-link {\r\n        background: #0c131d;\r\n        border-color: #1b8d68;\r\n        color: #dce7f3;\r\n    }\r\n\r\n    .tab-button.active {\r\n        background: #fab45a;\r\n        color: black;\r\n        border-color: #fab45a;\r\n    }\r\n\r\n    .classcontainer {\r\n        padding: 15px;\r\n        background-color: white;\r\n        display: flex;\r\n        flex-direction: column;\r\n        margin-bottom: 15px;\r\n        gap: 10px;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        border-radius: 8px;\r\n        flex: none;\r\n        color: black;\r\n        align-items: flex-start;\r\n    }\r\n\r\n    .classcontainer h3 {\r\n        margin: 0 0 15px 0;\r\n        color: #333;\r\n    }\r\n\r\n    /* Override nested component styles for cleaner integration */\r\n    :global(.classcontainer .admin-create-user) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    :global(.classcontainer .teacher-finder) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    :global(.classcontainer .find-students-comments) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    :global(.classcontainer .refresh-database) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    :global(.classcontainer .manual-payment-container) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n        box-shadow: none;\r\n    }\r\n\r\n    :global(.classcontainer .pricing-modifier-container) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n        box-shadow: none;\r\n    }\r\n\r\n    :global(.classcontainer .family-manager) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n        box-shadow: none;\r\n    }\r\n</style>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import { push } from 'svelte-spa-router';\r\n\r\n    let newUsername = '';\r\n    let newPassword = '';\r\n    let newRepPassword = '';\r\n    let errorMessage = '';\r\n    let agreedToTerm = false;\r\n\r\n    async function handleUpdateCredentials(event) {\r\n        event.preventDefault();\r\n        errorMessage = ''; // Reset error message before new submission\r\n\r\n        try {\r\n            if (newPassword === newRepPassword){\r\n                const token = localStorage.getItem('jwtToken');\r\n                \r\n                // Update user details endpoint\r\n                const response = await fetch('/studentplayground/api/update_credentials/', {\r\n                    method: 'POST',\r\n                    headers: {\r\n                        'Content-Type': 'application/json',\r\n                        'Authorization': `Bearer ${token}`\r\n                    },\r\n                    body: JSON.stringify({\r\n                        username: newUsername,\r\n                        password: newPassword\r\n                    })\r\n                });\r\n\r\n                if (response.ok) {\r\n                    const data = await response.json();\r\n                    localStorage.setItem('jwtToken', data.access);\r\n                    localStorage.setItem('jwtExpiry', data.access_expires_at);\r\n                    // Redirect to login greeting after successful update\r\n                    push('/login-greeting');\r\n                } else {\r\n                    const errorData = await response.json();\r\n                    errorMessage = errorData.message || 'Nepavyko atnaujinti duomenų';\r\n                }\r\n                }else{\r\n                    errorMessage =\"Nesutampa slaptažodžiai\";\r\n                }\r\n        } catch (error) {\r\n            console.error('Error updating credentials:', error);\r\n            errorMessage = error.toString();\r\n        }\r\n    }\r\n</script>\r\n\r\n<main>\r\n    <h1>Atnaujinkite savo duomenis</h1>\r\n    <div class='classcontainer'>\r\n    <form on:submit={handleUpdateCredentials}>\r\n        <label>\r\n            Naujas prisijungimo vardas<br>\r\n            <input type=\"text\" bind:value={newUsername} required>\r\n        </label>\r\n        <label>\r\n            Naujas slaptažodis<br>\r\n            <input type=\"password\" bind:value={newPassword} required>\r\n        </label>\r\n        <label>\r\n            Pakartoti slaptažodį<br>\r\n            <input type=\"password\" bind:value={newRepPassword} required>\r\n        </label>\r\n        <label class=\"terms-label\">\r\n            <input type=\"checkbox\" bind:checked={agreedToTerm} required class=\"terms-checkbox\">\r\n            Sutinku su <a href=\"/static/terms_and_conditions/2025 TĖVŲ PASLAUGŲ SUTARTIS.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Taisyklėmis ir sąlygomis</a>\r\n        </label>\r\n        <button type=\"submit\" disabled={!agreedToTerm}><span>Atnaujinti</span></button>\r\n    </form>\r\n \r\n    {#if errorMessage}\r\n        <p class=\"error\">{errorMessage}</p>\r\n    {/if}\r\n</div> \r\n</main>\r\n\r\n<style>\r\n    label{\r\n        padding: 3px;\r\n        font-weight: bold;\r\n        margin-bottom: 20px;\r\n        font-size: larger;\r\n        display: block;\r\n    }\r\n    h1{\r\n        text-align: center;\r\n    }\r\n     button span {\r\n        font-weight: bolder;\r\n        font-size:larger;\r\n    }\r\n\r\n    button {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 12px 20px;\r\n        gap: 10px;\r\n    \r\n        width: 100%;\r\n        height: 60px;\r\n    \r\n        /* Purple background */\r\n        background-color: white;\r\n    \r\n        /* Black border */\r\n        border: 1px solid #000000;\r\n    \r\n        /* Box shadow */\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    \r\n        /* Rounded corners */\r\n        border-radius: 8px;\r\n    \r\n        /* Inside auto layout */\r\n        flex: none;\r\n        order: 0;\r\n        align-self: stretch;\r\n        flex-grow: 0;\r\n    \r\n        /* Remove default button styling */\r\n        outline: none;\r\n        cursor: pointer;\r\n  \r\n        /* Remove the default button background on focus */\r\n        background-image: none;\r\n        transition: background-color 0.3s ease, color 0.3s ease;\r\n    }\r\n\r\n    /* Button hover effect */\r\n    button:hover {\r\n        background-color: #14695b;\r\n        color:white;\r\n    }\r\n    \r\n\r\n    /* Text inside the button */\r\n    span {\r\n        font-size: 1rem;\r\n        font-weight: bold;\r\n        color: #000000;\r\n    }\r\n    .error {\r\n        color: red;\r\n    }\r\n    main{\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n    }\r\n    .classcontainer {\r\n      padding: 15px;\r\n      background-color: white;\r\n      display: flex;\r\n      max-width:400px;\r\n      flex-direction: column;\r\n      margin-bottom: 15px;\r\n      gap: 10px;\r\n      box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n      border-radius: 8px;\r\n      color: black;\r\n      align-items: flex-start;\r\n    }\r\n    .terms-label {\r\n        display: flex;\r\n        align-items: center;\r\n        font-size: 1rem;\r\n        margin-bottom: 10px;\r\n        gap: 8px;\r\n        font-weight: bold;\r\n        /* Ensure children are vertically centered */\r\n        line-height: 1.2;\r\n    }\r\n    .terms-label a {\r\n        color: #14695b;\r\n        text-decoration: underline;\r\n        cursor: pointer;\r\n    }\r\n    .terms-checkbox {\r\n        margin-right: 6px;\r\n        /* Remove default vertical-align, use flex alignment */\r\n    }\r\n</style>\r\n","<!-- src/PaymentCallback.svelte -->\r\n<script>\r\n    import { onMount } from 'svelte';\r\n  \r\n    onMount(() => {\r\n      if (window.opener && !window.opener.closed) {\r\n        // Reload the original tab\r\n        try {\r\n          window.opener.location.reload();\r\n        } catch (e) {\r\n          console.warn('Could not reload opener:', e);\r\n        }\r\n        // Close this payment tab\r\n        window.close();\r\n      } else {\r\n        // Fallback: send this tab back to your invoice page\r\n        window.location.href = '/#/invoice';\r\n      }\r\n    });\r\n  </script>\r\n  \r\n  <main class=\"p-8 text-center\">\r\n    <h1 class=\"text-xl font-semibold\">Finishing up…</h1>\r\n    <p>Thank you! You’ll be redirected back to your app momentarily.</p>\r\n  </main>\r\n  ","export const validEvents = [\n    'Activate',\n    'AddUndo',\n    'BeforeAddUndo',\n    'BeforeExecCommand',\n    'BeforeGetContent',\n    'BeforeRenderUI',\n    'BeforeSetContent',\n    'BeforePaste',\n    'Blur',\n    'Change',\n    'ClearUndos',\n    'Click',\n    'CommentChange',\n    'CompositionEnd',\n    'CompositionStart',\n    'CompositionUpdate',\n    'ContextMenu',\n    'Copy',\n    'Cut',\n    'Dblclick',\n    'Deactivate',\n    'Dirty',\n    'Drag',\n    'DragDrop',\n    'DragEnd',\n    'DragGesture',\n    'DragOver',\n    'Drop',\n    'ExecCommand',\n    'Focus',\n    'FocusIn',\n    'FocusOut',\n    'GetContent',\n    'Hide',\n    'Init',\n    'Input',\n    'KeyDown',\n    'KeyPress',\n    'KeyUp',\n    'LoadContent',\n    'MouseDown',\n    'MouseEnter',\n    'MouseLeave',\n    'MouseMove',\n    'MouseOut',\n    'MouseOver',\n    'MouseUp',\n    'NodeChange',\n    'ObjectResizeStart',\n    'ObjectResized',\n    'ObjectSelected',\n    'Paste',\n    'PostProcess',\n    'PostRender',\n    'PreProcess',\n    'ProgressState',\n    'Redo',\n    'Remove',\n    'Reset',\n    'ResizeEditor',\n    'SaveContent',\n    'SelectionChange',\n    'SetAttrib',\n    'SetContent',\n    'Show',\n    'Submit',\n    'Undo',\n    'VisualAid'\n];\nexport const bindHandlers = (editor, eventHandlers) => {\n    validEvents.forEach((eventName) => {\n        editor.on(eventName, (e) => {\n            eventHandlers[eventName.toLowerCase()]?.(e, editor);\n        });\n    });\n};\nexport const injectTiny = (doc, url, cb) => {\n    const script = doc.createElement('script');\n    script.referrerPolicy = 'origin';\n    script.type = 'application/javascript';\n    script.src = url;\n    script.onload = cb;\n    if (doc.head) {\n        doc.head.appendChild(script);\n    }\n};\n//# sourceMappingURL=Utils.js.map","<!--\n  @component\n\n  @see {@link https://www.tiny.cloud/docs/tinymce/7/svelte-ref/} for the TinyMCE Svelte Technical Reference.\n-->\n\n<script module>\"use strict\";\nconst uuid = (prefix) => {\n    return prefix + '_' + Math.floor(Math.random() * 1000000000) + String(Date.now());\n};\nconst isDisabledOptionSupported = (editor) => {\n    return typeof editor.options.set === 'function' && editor.options.isRegistered('disabled');\n};\nconst createScriptLoader = () => {\n    let state = {\n        listeners: [],\n        scriptId: uuid('tiny-script'),\n        scriptLoaded: false,\n        injected: false\n    };\n    const injectScript = (scriptId, doc, url, cb) => {\n        state.injected = true;\n        const script = doc.createElement('script');\n        script.referrerPolicy = 'origin';\n        script.type = 'application/javascript';\n        script.src = url;\n        script.onload = () => { cb(); };\n        if (doc.head)\n            doc.head.appendChild(script);\n    };\n    const load = (doc, url, callback) => {\n        if (state.scriptLoaded) {\n            callback();\n        }\n        else {\n            state.listeners.push(callback);\n            // check we can access doc\n            if (!state.injected) {\n                injectScript(state.scriptId, doc, url, () => {\n                    state.listeners.forEach((fn) => fn());\n                    state.scriptLoaded = true;\n                });\n            }\n        }\n    };\n    return {\n        load\n    };\n};\nlet scriptLoader = createScriptLoader();\n</script>\n\n<script>import { onDestroy, onMount } from 'svelte';\nimport { bindHandlers } from './Utils';\nlet { id = uuid('tinymce-svelte'), inline = undefined, disabled = false, readonly = false, apiKey = 'no-api-key', licenseKey = undefined, channel = '8', scriptSrc = undefined, conf = {}, modelEvents = 'change input undo redo', value = $bindable(''), text = $bindable(''), cssClass = 'tinymce-wrapper', ...eventHandlers } = $props();\nlet container;\n// svelte-ignore non_reactive_update\nlet element;\nlet editorRef = $state();\n// The following three variables are not meant to be reactive, but we need to track them to avoid unnecessary editor updates.\nlet lastVal = $state.snapshot(value);\n// svelte-ignore state_referenced_locally\nlet disablindCache = $state.snapshot(disabled);\n// svelte-ignore state_referenced_locally\nlet readonlyCache = $state.snapshot(readonly);\nconst setReadonly = (editor, readonlyValue) => {\n    if (typeof editor.mode?.set === 'function') {\n        editor.mode.set(readonlyValue ? 'readonly' : 'design');\n    }\n};\nconst setDisabled = (editor, disabledValue) => {\n    if (isDisabledOptionSupported(editor)) {\n        editor.options.set('disabled', disabledValue);\n    }\n    else {\n        editor.mode.set(disabledValue ? 'readonly' : 'design');\n    }\n};\n$effect(() => {\n    if (editorRef && lastVal !== value) {\n        editorRef.setContent(value);\n        text = editorRef.getContent({ format: 'text' });\n    }\n    if (editorRef && readonly !== readonlyCache) {\n        readonlyCache = readonly;\n        setReadonly(editorRef, readonly);\n    }\n    if (editorRef && disabled !== disablindCache) {\n        disablindCache = disabled;\n        setDisabled(editorRef, disabled);\n    }\n});\nconst getTinymce = () => {\n    const getSink = () => {\n        return typeof window !== 'undefined' ? window : global;\n    };\n    const sink = getSink();\n    return sink && sink.tinymce ? sink.tinymce : null;\n};\nconst init = () => {\n    const finalInit = {\n        ...conf,\n        target: element,\n        inline: inline !== undefined ? inline : conf.inline !== undefined ? conf.inline : false,\n        license_key: licenseKey,\n        setup: (editor) => {\n            editor.on('PreInit', () => {\n                setDisabled(editor, disabled);\n                setReadonly(editor, readonly);\n            });\n            editorRef = editor;\n            editor.on('init', () => {\n                editor.setContent(value);\n                // bind model events\n                editor.on(modelEvents, () => {\n                    lastVal = editor.getContent();\n                    if (lastVal !== value) {\n                        value = lastVal;\n                        text = editor.getContent({ format: 'text' });\n                    }\n                });\n            });\n            bindHandlers(editor, eventHandlers);\n            if (typeof conf.setup === 'function') {\n                conf.setup(editor);\n            }\n        },\n    };\n    element.style.visibility = '';\n    void getTinymce()?.init(finalInit);\n};\nonMount(() => {\n    if (getTinymce() !== null) {\n        init();\n    }\n    else {\n        const script = scriptSrc ? scriptSrc : `https://cdn.tiny.cloud/1/${apiKey}/tinymce/${channel}/tinymce.min.js`;\n        scriptLoader.load(container.ownerDocument, script, () => {\n            init();\n        });\n    }\n});\nonDestroy(() => {\n    if (editorRef) {\n        getTinymce()?.remove(editorRef);\n    }\n});\n</script>\n\n<div bind:this={container} class={cssClass}>\n{#if inline}\n  <div id={id} bind:this={element}></div>\n{:else}\n  <textarea id={id} bind:this={element} style=\"visibility:hidden\"></textarea>\n{/if}\n</div>","<script>\r\n\r\n  import { onMount } from 'svelte';\r\n  import Editor from '@tinymce/tinymce-svelte';\r\n\r\n  let studentName = '';\r\n  let startDate = '';\r\n  let endDate = '';\r\n  let findAllClasses = false;\r\n  let classes = [];\r\n  let errorMessage = '';\r\n  let successMessage = 'Send';\r\n  let selectedClasses = new Set();\r\n  let selectedClassesDetails = [];\r\n  let emailScript = '';\r\n  let emailSubject = '';\r\n  let stud_Email = '';\r\n  let isSendingEmail = false;\r\n  let isSubmitting = false;\r\n\r\n  // Variable for TinyMCE editor content\r\n  let emailContent = '';\r\n\r\n  const tinyMceApiKey = 'usvl1m5wsho8d78ixib2ladkg9cca2oonqln4so3wls7ujj5';\r\n    function adjustDates() {\r\n      const now = new Date();\r\n      const oneWeekAgo = new Date(now);\r\n      oneWeekAgo.setDate(now.getDate() - 7);\r\n      const oneMonthAhead = new Date(now);\r\n      oneMonthAhead.setMonth(now.getMonth() + 1);\r\n  \r\n      // Format dates to match 'datetime-local' input requirements\r\n      const pad = (n) => n.toString().padStart(2, '0');\r\n      const formatDate = (date) => {\r\n        return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`;\r\n      };\r\n  \r\n      startDate = formatDate(oneWeekAgo);\r\n      endDate = formatDate(oneMonthAhead);\r\n    }\r\n  \r\n    // Watch for changes to findAllClasses checkbox\r\n    $: if (findAllClasses) {\r\n      adjustDates();\r\n    } else {\r\n      // Clear dates when checkbox is unchecked\r\n      startDate = '';\r\n      endDate = '';\r\n    }\r\n\r\n\r\n  // Function to submit the form\r\n  async function submitForm() {\r\n    isSubmitting = true;\r\n    errorMessage = '';\r\n    classes = [];\r\n    selectedClasses.clear();\r\n    selectedClassesDetails = [];\r\n    emailScript = '';\r\n    stud_Email = '';\r\n\r\n    // Retrieve JWT token from localStorage\r\n    const token = localStorage.getItem('jwtToken');\r\n    console.log(\"JWT Token:\", token);\r\n\r\n    const data = {\r\n        studentName,\r\n        startDate,\r\n        endDate,\r\n        findAllClasses, // Include this if your backend expects it\r\n    };\r\n\r\n    try {\r\n        const response = await fetch('/studentplayground/get-classes-for-email/', {\r\n            method: 'POST',\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': `Bearer ${token}`,\r\n            },\r\n            body: JSON.stringify(data),\r\n        });\r\n\r\n        if (!response.ok) {\r\n            const errorData = await response.json();\r\n            throw new Error(errorData.error || 'Unknown error');\r\n        }\r\n\r\n        const result = await response.json();\r\n        classes = result.classes;\r\n\r\n\r\n        if (classes.length === 0) {\r\n            errorMessage = 'No classes found for the given criteria.';\r\n        }\r\n    } catch (error) {\r\n        errorMessage = `An error occurred: ${error.message}`;\r\n    } finally {\r\n        isSubmitting = false;\r\n    }\r\n  }\r\n\r\n  function toggleClassSelection(classId) {\r\n    if (selectedClasses.has(classId)) {\r\n      selectedClasses.delete(classId);\r\n    } else {\r\n      selectedClasses.add(classId);\r\n    }\r\n  }\r\n  \r\n    async function generateSelectedClassesInfo() {\r\n        const selectedClassIds = Array.from(selectedClasses);\r\n        console.log('Selected Class IDs:', selectedClassIds);\r\n\r\n        if (selectedClassIds.length === 0) {\r\n        errorMessage = 'Please select at least one class.';\r\n        return;\r\n        }\r\n\r\n        // Retrieve JWT token from localStorage\r\n        const token = localStorage.getItem('jwtToken');\r\n\r\n        try {\r\n        const response = await fetch('/studentplayground/generate_email_script/', {\r\n            method: 'POST',\r\n            headers: {\r\n            'Content-Type': 'application/json',\r\n            'Authorization': `Bearer ${token}`,\r\n            },\r\n            body: JSON.stringify({ classIds: selectedClassIds }),\r\n        });\r\n\r\n        if (!response.ok) {\r\n            const errorData = await response.json();\r\n            throw new Error(errorData.error || 'Unknown error');\r\n        }\r\n\r\n        const result = await response.json();\r\n        emailScript = result.emailScript;\r\n        emailSubject = result.emailSubject;\r\n        stud_Email = result.student_email;\r\n\r\n        // Initialize the email content with the generated script\r\n        emailContent = emailScript;\r\n\r\n        console.log(stud_Email)\r\n        } catch (error) {\r\n        errorMessage = `An error occurred: ${error.message}`;\r\n        }\r\n    }\r\n    async function sendEmail() {\r\n        errorMessage = '';\r\n        successMessage = '';\r\n        isSendingEmail = true; // Start sending email, change button color\r\n\r\n        // Retrieve JWT token from localStorage\r\n        const token = localStorage.getItem('jwtToken');\r\n\r\n        const data = {\r\n            studentName,\r\n            emailScript: emailContent,\r\n            emailSubject,\r\n            stud_Email,\r\n        };\r\n\r\n        try {\r\n            const response = await fetch('/studentplayground/sendClassInfoAdmin/', {\r\n                method: 'POST',\r\n                headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': `Bearer ${token}`,\r\n                },\r\n                body: JSON.stringify(data),\r\n            });\r\n\r\n            if (!response.ok) {\r\n                const errorData = await response.json();\r\n                throw new Error(errorData.message || 'Unknown error');\r\n            }\r\n\r\n            const result = await response.json();\r\n            // Handle success (e.g., show a confirmation message)\r\n            console.log(result);\r\n            successMessage = 'Email successfully sent.';\r\n            } catch (error) {\r\n            // Handle error (e.g., show an error message)\r\n            errorMessage = 'Problem with sending the email.';\r\n            } finally {\r\n            isSendingEmail = false; // Reset button color\r\n            }\r\n        \r\n    }\r\n</script>\r\n  <span>EMAILU SIUNTINETOJAS</span>\r\n  <form on:submit|preventDefault={submitForm}>\r\n    <label>\r\n      Student Name:\r\n      <input type=\"text\" bind:value={studentName} required />\r\n    </label>\r\n    <br />\r\n  \r\n    <label>\r\n      Start Date:\r\n      <input\r\n        type=\"datetime-local\"\r\n        bind:value={startDate}\r\n        required\r\n        disabled={findAllClasses}\r\n      />\r\n    </label>\r\n    <br />\r\n  \r\n    <label>\r\n      End Date:\r\n      <input\r\n        type=\"datetime-local\"\r\n        bind:value={endDate}\r\n        required\r\n        disabled={findAllClasses}\r\n      />\r\n    </label>\r\n    <br />\r\n  \r\n    <label>\r\n      <input type=\"checkbox\" bind:checked={findAllClasses} />\r\n      Find all classes\r\n    </label>\r\n    <br />\r\n  \r\n    <button\r\n        type=\"submit\"\r\n        disabled={isSubmitting}\r\n        class:loading={isSubmitting}\r\n    >\r\n        {#if isSubmitting}\r\n            Searching...\r\n        {:else}\r\n            Search Classes\r\n        {/if}\r\n    </button>\r\n  </form>\r\n  <!-- Display Error Message -->\r\n  {#if errorMessage}\r\n  <p class=\"error\">{errorMessage}</p>\r\n  {/if}\r\n\r\n\r\n  {#if classes.length > 0}\r\n    <h2>Classes Found:</h2>\r\n    <ul>\r\n      {#each classes as clas}\r\n        <li>\r\n          <label>\r\n            <input type=\"checkbox\" on:change={() => toggleClassSelection(clas.id)} />\r\n            <strong>{clas.name}</strong> with {clas.teacher} on {clas.displayTime}\r\n          </label>\r\n        </li>\r\n      {/each}\r\n    </ul>\r\n    <button on:click={generateSelectedClassesInfo}>Generate</button>\r\n  {/if}\r\n  \r\n  {#if selectedClassesDetails.length > 0}\r\n    <h2>Selected Classes:</h2>\r\n    <ul>\r\n      {#each selectedClassesDetails as clas}\r\n        <li>\r\n          <strong>{clas.name}</strong> with {clas.teacher} on {clas.displayTime}\r\n        </li>\r\n      {/each}\r\n    </ul>\r\n  {/if}\r\n <!-- Display email preview and send email button -->\r\n {#if emailScript}\r\n  <h2>Edit Email Content:</h2>\r\n  <Editor\r\n    channel=\"7\"\r\n    bind:value={emailContent}\r\n    apiKey={tinyMceApiKey}\r\n    conf={{\r\n      height: 500,\r\n      menubar: true,\r\n      plugins: [\r\n        'advlist autolink lists link image charmap preview anchor',\r\n        'searchreplace visualblocks code fullscreen',\r\n        'insertdatetime media table code help wordcount',\r\n        // Include any additional plugins you need\r\n      ],\r\n      toolbar:\r\n        'undo redo | blocks | bold italic underline | \\\r\n        alignleft aligncenter alignright alignjustify | \\\r\n        bullist numlist outdent indent | removeformat | code | help',\r\n      content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px }',\r\n    }}\r\n  />\r\n  <!-- Editable Email Field -->\r\n  <div >\r\n    <label>\r\n      Email will be sent to:\r\n      <input class='text_input' type=\"email\" bind:value={stud_Email} required />\r\n    </label>\r\n  </div>\r\n\r\n  <!-- Editable Subject Field -->\r\n  <div >\r\n    <label>\r\n      Subject:\r\n      <input class='text_input' type=\"text\" bind:value={emailSubject} required />\r\n    </label>\r\n  </div>\r\n  <button\r\n    class:email-sending={isSendingEmail}\r\n    on:click={sendEmail}\r\n    disabled={isSendingEmail}\r\n  >\r\n    {#if isSendingEmail}\r\n      Sending...\r\n    {:else}\r\n      Send Email\r\n    {/if}\r\n  </button>\r\n  <!-- Display success message -->\r\n  {#if successMessage}\r\n    <p class=\"success\">{successMessage}</p>\r\n  {/if}\r\n{/if}\r\n\r\n<style>\r\n /* Base button styles */\r\n button {\r\n   padding: 0.5rem 1rem;\r\n   font-size: 1rem;\r\n   background-color: #fab45a;\r\n   color: black;\r\n   border: none;\r\n   border-radius: 4px;\r\n   cursor: pointer;\r\n   transition: background-color 0.3s ease;\r\n   margin-top: 0.5rem;\r\n }\r\n\r\n /* Disabled button styles */\r\n button:disabled {\r\n   background-color: #6c757d;\r\n   cursor: not-allowed;\r\n }\r\n\r\n /* Error message styling */\r\n .error {\r\n   color: red;\r\n   margin-top: 0.5rem;\r\n }\r\n\r\n /* Success message styling */\r\n .success {\r\n   color: green;\r\n   margin-top: 0.5rem;\r\n }\r\n\r\n /* Input disabled styles */\r\n input:disabled {\r\n   background-color: #e9ecef;\r\n }\r\n .text_input{\r\n    width:100%;\r\n  }\r\n\r\n\r\n</style>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n\r\n    const apiBase = getApiBase();\r\n    let groupedRequests = {};\r\n    let loading = true;\r\n    let showAll = false;\r\n\r\n    // map of requestId → boolean (expanded?)\r\n    let expandedMap = {};\r\n\r\n    // Computed values for separated requests\r\n    // All requests are ClassRequest instances (ClassResponsibility instances are linked via has_responsibility_incident flag)\r\n    $: pendingRequests = filterRequestsByStatus(groupedRequests, 'Pending');\r\n    $: otherRequests = filterRequestsByStatus(groupedRequests, ['Accepted', 'Denied']);\r\n\r\n    async function handleFetchRequests() {\r\n      const token = localStorage.getItem('jwtToken');\r\n      try {\r\n        const res = await fetch(\r\n          `${apiBase}/studentplayground/api/requests/admin-reschedule/`,\r\n          {\r\n            method: 'GET',\r\n            headers: {\r\n              'Authorization': `Bearer ${token}`,\r\n              'Content-Type':  'application/json'\r\n            }\r\n          }\r\n        );\r\n        if (!res.ok) throw new Error(res.statusText);\r\n        groupedRequests = await res.json();\r\n      } catch (err) {\r\n        console.error('Error fetching requests:', err);\r\n        alert(`Error loading requests: ${err.message}`);\r\n      } finally {\r\n        loading = false;\r\n      }\r\n    }\r\n\r\n    onMount(handleFetchRequests);\r\n\r\n    // Function to filter requests by status\r\n    function filterRequestsByStatus(grouped, statusFilter) {\r\n      const filtered = {};\r\n      const statuses = Array.isArray(statusFilter) ? statusFilter : [statusFilter];\r\n      \r\n      for (const [day, requests] of Object.entries(grouped)) {\r\n        const filteredRequests = requests.filter(req => statuses.includes(req.status));\r\n        if (filteredRequests.length > 0) {\r\n          filtered[day] = filteredRequests;\r\n        }\r\n      }\r\n      \r\n      return filtered;\r\n    }\r\n\r\n    // toggle expanded state for one card\r\n    function toggleExpand(id) {\r\n      expandedMap[id] = !expandedMap[id];\r\n      // reassign to trigger Svelte reactivity\r\n      expandedMap = { ...expandedMap };\r\n    }\r\n\r\n    function formatDateTime(iso) {\r\n      if (!iso) return '-';\r\n      const d = new Date(iso);\r\n      return `${d.toLocaleDateString()} at ${d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`;\r\n    }\r\n\r\n    function getStudentName(student) {\r\n      return student || 'Unknown Student';\r\n    }\r\n\r\n    function getTeacherName(teacher) {\r\n      return teacher || 'Unknown Teacher';\r\n    }\r\n\r\n    function requestSubject(request) {\r\n      if (!request.class_id) {\r\n        return 'Ištrinta pamoka';\r\n      }\r\n      return request.subject || 'Nežinomas dalykas';\r\n    }\r\n\r\n    // Function to handle admin confirm/deny actions\r\n    async function handleAdminAction(requestId, action) {\r\n      const token = localStorage.getItem('jwtToken');\r\n      \r\n      try {\r\n        const response = await fetch(\r\n          `${apiBase}/studentplayground/api/requests/admin-reschedule-action/`,\r\n          {\r\n            method: 'POST',\r\n            headers: {\r\n              'Authorization': `Bearer ${token}`,\r\n              'Content-Type': 'application/json'\r\n            },\r\n            body: JSON.stringify({\r\n              request_id: requestId,\r\n              action: action\r\n            })\r\n          }\r\n        );\r\n\r\n        if (response.ok) {\r\n          const result = await response.json();\r\n          const actionText = action === 'confirm' ? 'confirmed' : action === 'deny' ? 'denied' : 'marked as handled';\r\n          alert(`Request ${actionText} successfully!`);\r\n          // Refresh the requests list\r\n          await handleFetchRequests();\r\n        } else {\r\n          const error = await response.json();\r\n          console.error('Failed to perform action:', error);\r\n          alert(`Failed to ${action} request: ${error.error || response.statusText}`);\r\n        }\r\n      } catch (error) {\r\n        console.error('Error in admin action:', error);\r\n        alert(`Error ${action}ing request: ${error.message}`);\r\n      }\r\n    }\r\n  </script>\r\n  \r\n  <style>\r\n  /* Header styling matching AdminCreateUserComponent */\r\n  .labelDiv {\r\n    display: flex;\r\n    justify-content: space-around;\r\n    margin-bottom: 2rem;\r\n  }\r\n  .labelDiv span {\r\n    font-size: 1.2rem;\r\n    font-weight: bold;\r\n    color: #333;\r\n  }\r\n\r\n  /* Loading and empty states */\r\n  .loading-message, .empty-message {\r\n    text-align: center;\r\n    padding: 2rem;\r\n    color: #666;\r\n    font-style: italic;\r\n  }\r\n\r\n  /* Date group styling */\r\n  .date-group {\r\n    margin-bottom: 2rem;\r\n  }\r\n  .date-header {\r\n    font-size: 1.1rem;\r\n    font-weight: bold;\r\n    color: #0055aa;\r\n    border-bottom: 2px solid #0055aa;\r\n    padding-bottom: 0.5rem;\r\n    margin-bottom: 1rem;\r\n  }\r\n\r\n  /* Request card styling */\r\n  .request-card {\r\n    border: 1px solid #ccc;\r\n    border-radius: 8px;\r\n    margin-bottom: 1rem;\r\n    background: #fff;\r\n    overflow: hidden;\r\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n    transition: box-shadow 0.2s ease;\r\n  }\r\n  .request-card:hover {\r\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\r\n  }\r\n  /* Responsibility incident styling - red background */\r\n  .request-card.responsibility-incident {\r\n    background: #ffe6e6;\r\n    border-color: #ffcccc;\r\n  }\r\n  .request-card.responsibility-incident:hover {\r\n    box-shadow: 0 4px 8px rgba(220, 53, 69, 0.2);\r\n  }\r\n\r\n  /* Summary button styling */\r\n  .request-summary {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    width: 100%;\r\n    padding: 1rem;\r\n    border: none;\r\n    background: #fff;\r\n    cursor: pointer;\r\n    text-align: left;\r\n    transition: background-color 0.2s ease;\r\n    font-size: 1rem;\r\n  }\r\n  .request-summary:hover {\r\n    background-color: #f8f9fa;\r\n  }\r\n\r\n  /* Status-based coloring */\r\n  .request-summary.pending {\r\n    border-left: 4px solid #ffc107;\r\n  }\r\n  .request-summary.accepted {\r\n    border-left: 4px solid #28a745;\r\n  }\r\n  .request-summary.denied {\r\n    border-left: 4px solid #dc3545;\r\n  }\r\n\r\n  /* Summary content layout */\r\n  .summary-content {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    flex: 1;\r\n    margin-right: 1rem;\r\n  }\r\n  .summary-main {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.3rem;\r\n  }\r\n  .student-name {\r\n    font-weight: bold;\r\n    color: #333;\r\n    font-size: 1rem;\r\n  }\r\n  .teacher-name {\r\n    color: #666;\r\n    font-size: 0.9rem;\r\n  }\r\n  .agreed-upon-badge {\r\n    color: #28a745;\r\n    font-size: 0.8rem;\r\n    font-weight: bold;\r\n    text-transform: uppercase;\r\n    letter-spacing: 0.5px;\r\n  }\r\n  .request-type-badge {\r\n    font-size: 0.8rem;\r\n    font-weight: bold;\r\n    text-transform: uppercase;\r\n    letter-spacing: 0.5px;\r\n  }\r\n  .cancel-badge {\r\n    color: #dc3545;\r\n  }\r\n  .same-day-cancel-badge {\r\n    color: #8b0000;\r\n    font-weight: bold;\r\n  }\r\n\r\n  /* Status badge */\r\n  .status-badge {\r\n    padding: 0.3rem 0.8rem;\r\n    border-radius: 12px;\r\n    font-size: 0.85rem;\r\n    font-weight: bold;\r\n    text-transform: uppercase;\r\n  }\r\n  .status-pending {\r\n    background-color: #fff3cd;\r\n    color: #856404;\r\n    border: 1px solid #ffeaa7;\r\n  }\r\n  .status-accepted {\r\n    background-color: #d4edda;\r\n    color: #155724;\r\n    border: 1px solid #c3e6cb;\r\n  }\r\n  .status-denied {\r\n    background-color: #f8d7da;\r\n    color: #721c24;\r\n    border: 1px solid #f5c6cb;\r\n  }\r\n\r\n  /* Expand icon */\r\n  .expand-icon {\r\n    color: #0055aa;\r\n    font-size: 0.8rem;\r\n    transition: transform 0.2s ease;\r\n  }\r\n\r\n  /* Details section */\r\n  .request-details {\r\n    padding: 1.5rem;\r\n    background-color: #f8f9fa;\r\n    border-top: 1px solid #e9ecef;\r\n  }\r\n  .details-grid {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 1rem;\r\n  }\r\n  .detail-item {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.3rem;\r\n  }\r\n  .detail-item.full-width {\r\n    grid-column: 1 / -1;\r\n  }\r\n  .detail-label {\r\n    font-weight: bold;\r\n    color: #0055aa;\r\n    font-size: 0.9rem;\r\n  }\r\n  .detail-value {\r\n    color: #333;\r\n    font-size: 1rem;\r\n    padding: 0.4rem;\r\n    background-color: #fff;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n  }\r\n  .reason-text {\r\n    min-height: 3rem;\r\n    resize: none;\r\n    font-family: inherit;\r\n  }\r\n\r\n  /* Admin action buttons */\r\n  .admin-actions {\r\n    display: flex;\r\n    gap: 1rem;\r\n    margin-top: 0.5rem;\r\n  }\r\n  \r\n  .action-button {\r\n    padding: 0.8rem 1.5rem;\r\n    border: none;\r\n    border-radius: 6px;\r\n    font-weight: bold;\r\n    cursor: pointer;\r\n    transition: all 0.2s ease;\r\n    font-size: 0.9rem;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 0.5rem;\r\n  }\r\n  \r\n  .confirm-button {\r\n    background-color: #28a745;\r\n    color: white;\r\n  }\r\n  \r\n  .confirm-button:hover {\r\n    background-color: #218838;\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 2px 4px rgba(40, 167, 69, 0.3);\r\n  }\r\n  \r\n  .deny-button {\r\n    background-color: #dc3545;\r\n    color: white;\r\n  }\r\n  \r\n  .deny-button:hover {\r\n    background-color: #c82333;\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 2px 4px rgba(220, 53, 69, 0.3);\r\n  }\r\n  \r\n  .action-button:active {\r\n    transform: translateY(0);\r\n  }\r\n\r\n  /* Show All button styling */\r\n  .show-all-container {\r\n    text-align: center;\r\n    margin: 2rem 0;\r\n    padding: 1rem;\r\n  }\r\n  \r\n  .show-all-button {\r\n    padding: 0.8rem 2rem;\r\n    background-color: #0055aa;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 8px;\r\n    font-weight: bold;\r\n    cursor: pointer;\r\n    transition: all 0.2s ease;\r\n    font-size: 1rem;\r\n    box-shadow: 0 2px 4px rgba(0, 85, 170, 0.2);\r\n  }\r\n  \r\n  .show-all-button:hover {\r\n    background-color: #004494;\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 4px 8px rgba(0, 85, 170, 0.3);\r\n  }\r\n  \r\n  .show-all-button:active {\r\n    transform: translateY(0);\r\n  }\r\n\r\n  /* Section headers */\r\n  .section-header {\r\n    font-size: 1.3rem;\r\n    font-weight: bold;\r\n    color: #0055aa;\r\n    margin: 2rem 0 1rem 0;\r\n    padding: 0.5rem 0;\r\n    border-bottom: 3px solid #0055aa;\r\n    text-transform: uppercase;\r\n    letter-spacing: 1px;\r\n  }\r\n\r\n  /* Responsive adjustments */\r\n  @media (max-width: 768px) {\r\n    .details-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n    .summary-content {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 0.5rem;\r\n    }\r\n    .status-badge {\r\n      align-self: flex-end;\r\n    }\r\n    .admin-actions {\r\n      flex-direction: column;\r\n      gap: 0.5rem;\r\n    }\r\n    .action-button {\r\n      justify-content: center;\r\n    }\r\n  }\r\n</style>\r\n  \r\n  <div class=\"labelDiv\">\r\n  <span>RESCHEDULE REQUESTS</span>\r\n</div>\r\n\r\n{#if loading}\r\n  <div class=\"loading-message\">Loading requests…</div>\r\n{:else if Object.keys(groupedRequests).length === 0}\r\n  <div class=\"empty-message\">No reschedule requests found.</div>\r\n{:else}\r\n  <!-- Pending Requests Section -->\r\n  {#if Object.keys(pendingRequests).length > 0}\r\n    <h1 class=\"section-header\">Pending Requests</h1>\r\n    {#each Object.entries(pendingRequests) as [day, requests]}\r\n      <div class=\"date-group\">\r\n        <h2 class=\"date-header\">{day}</h2>\r\n\r\n        {#each requests as req (req.id)}\r\n          <div class=\"request-card\" class:responsibility-incident={req.has_responsibility_incident}>\r\n            <!-- Summary Header -->\r\n            <button\r\n              type=\"button\"\r\n              class=\"request-summary\"\r\n              on:click={() => toggleExpand(req.id)}\r\n              class:pending={req.status === 'Pending'}\r\n              class:accepted={req.status === 'Accepted'}\r\n              class:denied={req.status === 'Denied'}\r\n            >\r\n              <div class=\"summary-content\">\r\n                <div class=\"summary-main\">\r\n                  <span class=\"student-name\">{getStudentName(req.student)}</span>\r\n                  <span class=\"teacher-name\">with {getTeacherName(req.teacher)}</span>\r\n                  {#if req.has_responsibility_incident && req.request_type === 'Cancel'}\r\n                    <span class=\"request-type-badge cancel-badge same-day-cancel-badge\">ATSAUKIMAS TA PACIA DIENA</span>\r\n                  {:else if req.request_type === 'Cancel'}\r\n                    <span class=\"request-type-badge cancel-badge\">ATŠAUKIMAS</span>\r\n                  {/if}\r\n                  {#if !req.has_responsibility_incident}\r\n                    {#if req.agreed_upon}\r\n                      <span class=\"agreed-upon-badge\">ABU SUTARĖ</span>\r\n                    {:else if req.additional_class}\r\n                      <span class=\"agreed-upon-badge\">PAPILDOMA PAMOKA</span>\r\n                    {/if}\r\n                  {/if}\r\n                </div>\r\n                <div class=\"status-badge\" class:status-pending={req.status === 'Pending'} \r\n                     class:status-accepted={req.status === 'Accepted'} \r\n                     class:status-denied={req.status === 'Denied'}>\r\n                  {req.status}\r\n                </div>\r\n              </div>\r\n              <div class=\"expand-icon\">\r\n                {expandedMap[req.id] ? '▼' : '▶'}\r\n              </div>\r\n            </button>\r\n\r\n            <!-- Expanded Details -->\r\n            {#if expandedMap[req.id]}\r\n              <div class=\"request-details\">\r\n                <div class=\"details-grid\">\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Request ID:</span>\r\n                    <span class=\"detail-value\">#{req.id}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Request Type:</span>\r\n                    <span class=\"detail-value\">\r\n                      {req.request_type || 'Reschedule'}\r\n                      {#if req.has_responsibility_incident && req.incident_type}\r\n                        {' (' + req.incident_type + ' - Same Day)'}\r\n                      {/if}\r\n                    </span>\r\n                  </div>\r\n                  {#if req.has_responsibility_incident}\r\n                    <div class=\"detail-item\">\r\n                      <span class=\"detail-label\">Incident Type:</span>\r\n                      <span class=\"detail-value\">{req.incident_type || 'N/A'}</span>\r\n                    </div>\r\n                  {/if}\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Student:</span>\r\n                    <span class=\"detail-value\">{getStudentName(req.student)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Subject:</span>\r\n                    <span class=\"detail-value\">{requestSubject(req)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Teacher:</span>\r\n                    <span class=\"detail-value\">{getTeacherName(req.teacher)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Current Time:</span>\r\n                    <span class=\"detail-value\">{formatDateTime(req.old_time)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Requested Time:</span>\r\n                    <span class=\"detail-value\">{req.request_type === 'Cancel' ? 'N/A (Cancellation)' : formatDateTime(req.new_requested_time)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Directed to:</span>\r\n                    <span class=\"detail-value\">{req.directed_to || 'N/A'}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Agreed Upon:</span>\r\n                    <span class=\"detail-value\">{req.agreed_upon ? 'Yes' : 'No'}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Additional Class:</span>\r\n                    <span class=\"detail-value\">{req.additional_class ? 'Yes' : 'No'}</span>\r\n                  </div>\r\n                  <div class=\"detail-item full-width\">\r\n                    <span class=\"detail-label\">Reason:</span>\r\n                    <span class=\"detail-value reason-text\">{req.reason || 'No reason provided'}</span>\r\n                  </div>\r\n                  {#if req.comment}\r\n                    <div class=\"detail-item full-width\">\r\n                      <span class=\"detail-label\">Comment:</span>\r\n                      <span class=\"detail-value reason-text\">{req.comment}</span>\r\n                    </div>\r\n                  {/if}\r\n                  \r\n                  <!-- Admin action buttons for pending requests -->\r\n                  {#if req.status === 'Pending' && !req.has_responsibility_incident}\r\n                    <div class=\"detail-item full-width\">\r\n                      <span class=\"detail-label\">Admin Actions:</span>\r\n                      <div class=\"admin-actions\">\r\n                        <button \r\n                          class=\"action-button confirm-button\"\r\n                          on:click={() => handleAdminAction(req.id, 'confirm')}\r\n                        >\r\n                          ✓ Confirm Request\r\n                        </button>\r\n                        <button \r\n                          class=\"action-button deny-button\"\r\n                          on:click={() => handleAdminAction(req.id, 'deny')}\r\n                        >\r\n                          ✗ Deny Request\r\n                        </button>\r\n                      </div>\r\n                    </div>\r\n                  {/if}\r\n                  \r\n                  <!-- Mark as Handled button for requests with responsibility incidents -->\r\n                  {#if req.has_responsibility_incident && req.status === 'Pending'}\r\n                    <div class=\"detail-item full-width\">\r\n                      <span class=\"detail-label\">Admin Actions:</span>\r\n                      <div class=\"admin-actions\">\r\n                        <button \r\n                          class=\"action-button confirm-button\"\r\n                          on:click={() => handleAdminAction(req.id, 'mark_handled')}\r\n                        >\r\n                          ✓ Mark as Handled\r\n                        </button>\r\n                      </div>\r\n                    </div>\r\n                  {/if}\r\n                </div>\r\n              </div>\r\n            {/if}\r\n          </div>\r\n        {/each}\r\n      </div>\r\n    {/each}\r\n  {:else}\r\n    <div class=\"empty-message\">No pending reschedule requests found.</div>\r\n  {/if}\r\n\r\n  <!-- Show All Button -->\r\n  {#if Object.keys(otherRequests).length > 0}\r\n    <div class=\"show-all-container\">\r\n      <button \r\n        class=\"show-all-button\"\r\n        on:click={() => showAll = !showAll}\r\n      >\r\n        {showAll ? 'Hide Processed Requests' : 'Show All Requests'}\r\n      </button>\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Processed Requests Section (shown when showAll is true) -->\r\n  {#if showAll && Object.keys(otherRequests).length > 0}\r\n    <h1 class=\"section-header\">Processed Requests</h1>\r\n    {#each Object.entries(otherRequests) as [day, requests]}\r\n      <div class=\"date-group\">\r\n        <h2 class=\"date-header\">{day}</h2>\r\n\r\n        {#each requests as req (req.id)}\r\n          <div class=\"request-card\" class:responsibility-incident={req.has_responsibility_incident}>\r\n            <!-- Summary Header -->\r\n            <button\r\n              type=\"button\"\r\n              class=\"request-summary\"\r\n              on:click={() => toggleExpand(req.id)}\r\n              class:pending={req.status === 'Pending'}\r\n              class:accepted={req.status === 'Accepted'}\r\n              class:denied={req.status === 'Denied'}\r\n            >\r\n              <div class=\"summary-content\">\r\n                <div class=\"summary-main\">\r\n                  <span class=\"student-name\">{getStudentName(req.student)}</span>\r\n                  <span class=\"teacher-name\">with {getTeacherName(req.teacher)}</span>\r\n                  {#if req.has_responsibility_incident && req.request_type === 'Cancel'}\r\n                    <span class=\"request-type-badge cancel-badge same-day-cancel-badge\">ATSAUKIMAS TA PACIA DIENA</span>\r\n                  {:else if req.request_type === 'Cancel'}\r\n                    <span class=\"request-type-badge cancel-badge\">ATŠAUKIMAS</span>\r\n                  {/if}\r\n                  {#if !req.has_responsibility_incident}\r\n                    {#if req.agreed_upon}\r\n                      <span class=\"agreed-upon-badge\">ABU SUTARĖ</span>\r\n                    {:else if req.additional_class}\r\n                      <span class=\"agreed-upon-badge\">PAPILDOMA PAMOKA</span>\r\n                    {/if}\r\n                  {/if}\r\n                </div>\r\n                <div class=\"status-badge\" class:status-pending={req.status === 'Pending'} \r\n                     class:status-accepted={req.status === 'Accepted'} \r\n                     class:status-denied={req.status === 'Denied'}>\r\n                  {req.status}\r\n                </div>\r\n              </div>\r\n              <div class=\"expand-icon\">\r\n                {expandedMap[req.id] ? '▼' : '▶'}\r\n              </div>\r\n            </button>\r\n\r\n            <!-- Expanded Details -->\r\n            {#if expandedMap[req.id]}\r\n              <div class=\"request-details\">\r\n                <div class=\"details-grid\">\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Request ID:</span>\r\n                    <span class=\"detail-value\">#{req.id}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Request Type:</span>\r\n                    <span class=\"detail-value\">\r\n                      {req.request_type || 'Reschedule'}\r\n                      {#if req.has_responsibility_incident && req.incident_type}\r\n                        {' (' + req.incident_type + ' - Same Day)'}\r\n                      {/if}\r\n                    </span>\r\n                  </div>\r\n                  {#if req.has_responsibility_incident}\r\n                    <div class=\"detail-item\">\r\n                      <span class=\"detail-label\">Incident Type:</span>\r\n                      <span class=\"detail-value\">{req.incident_type || 'N/A'}</span>\r\n                    </div>\r\n                  {/if}\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Student:</span>\r\n                    <span class=\"detail-value\">{getStudentName(req.student)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Subject:</span>\r\n                    <span class=\"detail-value\">{requestSubject(req)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Teacher:</span>\r\n                    <span class=\"detail-value\">{getTeacherName(req.teacher)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Current Time:</span>\r\n                    <span class=\"detail-value\">{formatDateTime(req.old_time)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Requested Time:</span>\r\n                    <span class=\"detail-value\">{req.request_type === 'Cancel' ? 'N/A (Cancellation)' : formatDateTime(req.new_requested_time)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Directed to:</span>\r\n                    <span class=\"detail-value\">{req.directed_to || 'N/A'}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Agreed Upon:</span>\r\n                    <span class=\"detail-value\">{req.agreed_upon ? 'Yes' : 'No'}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Additional Class:</span>\r\n                    <span class=\"detail-value\">{req.additional_class ? 'Yes' : 'No'}</span>\r\n                  </div>\r\n                  <div class=\"detail-item full-width\">\r\n                    <span class=\"detail-label\">Reason:</span>\r\n                    <span class=\"detail-value reason-text\">{req.reason || 'No reason provided'}</span>\r\n                  </div>\r\n                  {#if req.comment}\r\n                    <div class=\"detail-item full-width\">\r\n                      <span class=\"detail-label\">Comment:</span>\r\n                      <span class=\"detail-value reason-text\">{req.comment}</span>\r\n                    </div>\r\n                  {/if}\r\n                  \r\n                  <!-- Mark as Handled button for requests with responsibility incidents -->\r\n                  {#if req.has_responsibility_incident && req.status === 'Pending'}\r\n                    <div class=\"detail-item full-width\">\r\n                      <span class=\"detail-label\">Admin Actions:</span>\r\n                      <div class=\"admin-actions\">\r\n                        <button \r\n                          class=\"action-button confirm-button\"\r\n                          on:click={() => handleAdminAction(req.id, 'mark_handled')}\r\n                        >\r\n                          ✓ Mark as Handled\r\n                        </button>\r\n                      </div>\r\n                    </div>\r\n                  {/if}\r\n                </div>\r\n              </div>\r\n            {/if}\r\n          </div>\r\n        {/each}\r\n      </div>\r\n    {/each}\r\n  {/if}\r\n{/if}\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n\r\n    const apiBase = getApiBase();\r\n    let groupedRequests = {};\r\n    let loading = true;\r\n    let showHandledRequests = false;\r\n\r\n    // map of requestId → boolean (expanded?)\r\n    let expandedMap = {};\r\n\r\n    // Reactive statements to separate unhandled and handled requests\r\n    $: unhandledRequestsByDay = {};\r\n    $: handledRequestsByDay = {};\r\n    $: {\r\n        // Reset the objects\r\n        unhandledRequestsByDay = {};\r\n        handledRequestsByDay = {};\r\n        \r\n        // Populate them based on current groupedRequests\r\n        Object.entries(groupedRequests).forEach(([day, requests]) => {\r\n            const unhandledRequests = requests.filter(req => !req.handled);\r\n            const handledRequests = requests.filter(req => req.handled);\r\n            \r\n            if (unhandledRequests.length > 0) {\r\n                unhandledRequestsByDay[day] = unhandledRequests;\r\n            }\r\n            if (handledRequests.length > 0) {\r\n                handledRequestsByDay[day] = handledRequests;\r\n            }\r\n        });\r\n    }\r\n\r\n    async function handleFetchRequests() {\r\n      const token = localStorage.getItem('jwtToken');\r\n      try {\r\n        const res = await fetch(\r\n          `${apiBase}/studentplayground/api/requests/admin-class-registration/`,\r\n          {\r\n            method: 'GET',\r\n            headers: {\r\n              'Authorization': `Bearer ${token}`,\r\n              'Content-Type':  'application/json'\r\n            }\r\n          }\r\n        );\r\n        if (!res.ok) throw new Error(res.statusText);\r\n        groupedRequests = await res.json();\r\n      } catch (err) {\r\n        console.error('Error fetching requests:', err);\r\n        alert(`Error loading requests: ${err.message}`);\r\n      } finally {\r\n        loading = false;\r\n      }\r\n    }\r\n\r\n    onMount(handleFetchRequests);\r\n\r\n    // toggle expanded state for one card\r\n    function toggleExpand(id) {\r\n      expandedMap[id] = !expandedMap[id];\r\n      // reassign to trigger Svelte reactivity\r\n      expandedMap = { ...expandedMap };\r\n    }\r\n\r\n    function formatDateTime(iso) {\r\n      if (!iso) return '-';\r\n      const d = new Date(iso);\r\n      // Format in Lithuania timezone\r\n      return `${d.toLocaleDateString('lt-LT', { timeZone: 'Europe/Vilnius' })} at ${d.toLocaleTimeString('lt-LT', { \r\n        timeZone: 'Europe/Vilnius',\r\n        hour: '2-digit', \r\n        minute: '2-digit' \r\n      })}`;\r\n    }\r\n\r\n    function getStudentName(student) {\r\n      return student || 'Unknown Student';\r\n    }\r\n\r\n    function getSubjectDisplayName(subject) {\r\n      const subjectNames = {\r\n        \"Math\": \"Mathematics\",\r\n        \"English\": \"English Language\", \r\n        \"Lithuanian\": \"Lithuanian Language\",\r\n        \"History\": \"History\",\r\n        \"Chemistry\": \"Chemistry\",\r\n        \"Physics\": \"Physics\",\r\n        \"Biology\": \"Biology\",\r\n        \"IT\": \"Information Technology\"\r\n      };\r\n      return subjectNames[subject] || subject;\r\n    }\r\n\r\n    function getGradeDisplayName(grade) {\r\n      if (grade === 'university') {\r\n        return 'University Level';\r\n      }\r\n      return `Grade ${grade}`;\r\n    }\r\n\r\n    function formatRequestedTimes(requestedTimes) {\r\n      if (!requestedTimes || requestedTimes.length === 0) {\r\n        return 'No times specified';\r\n      }\r\n      return requestedTimes.map(time => {\r\n        if (!time) return 'Invalid time';\r\n        const d = new Date(time);\r\n        // Format in Lithuania timezone\r\n        return `${d.toLocaleDateString('lt-LT', { timeZone: 'Europe/Vilnius' })} at ${d.toLocaleTimeString('lt-LT', { \r\n          timeZone: 'Europe/Vilnius',\r\n          hour: '2-digit', \r\n          minute: '2-digit' \r\n        })}`;\r\n      }).join(', ');\r\n    }\r\n\r\n    // Function to handle admin handled/unhandled actions\r\n    async function handleAdminAction(requestId, action) {\r\n      const token = localStorage.getItem('jwtToken');\r\n      \r\n      try {\r\n        const response = await fetch(\r\n          `${apiBase}/studentplayground/api/requests/admin-registration-action/`,\r\n          {\r\n            method: 'POST',\r\n            headers: {\r\n              'Authorization': `Bearer ${token}`,\r\n              'Content-Type': 'application/json'\r\n            },\r\n            body: JSON.stringify({\r\n              request_id: requestId,\r\n              action: action\r\n            })\r\n          }\r\n        );\r\n\r\n        if (response.ok) {\r\n          const result = await response.json();\r\n          let successMessage;\r\n          if (action === 'mark_handled') {\r\n            successMessage = 'Request marked as handled successfully!';\r\n          } else if (action === 'mark_unhandled') {\r\n            successMessage = 'Request marked as unhandled successfully!';\r\n          } else if (action === 'mark_display' || action === 'mark_dont_display') {\r\n            successMessage = 'Successfully changed the teacher registration request display';\r\n          } else {\r\n            successMessage = `Request ${action} successfully!`;\r\n          }\r\n          alert(successMessage);\r\n          // Refresh the requests list\r\n          await handleFetchRequests();\r\n        } else {\r\n          const error = await response.json();\r\n          console.error('Failed to perform action:', error);\r\n          alert(`Failed to ${action} request: ${error.error || response.statusText}`);\r\n        }\r\n      } catch (error) {\r\n        console.error('Error in admin action:', error);\r\n        alert(`Error ${action}ing request: ${error.message}`);\r\n      }\r\n    }\r\n  </script>\r\n  \r\n  <style>\r\n  /* Header styling matching AdminCreateUserComponent */\r\n  .labelDiv {\r\n    display: flex;\r\n    justify-content: space-around;\r\n    margin-bottom: 2rem;\r\n  }\r\n  .labelDiv span {\r\n    font-size: 1.2rem;\r\n    font-weight: bold;\r\n    color: #333;\r\n  }\r\n\r\n  /* Loading and empty states */\r\n  .loading-message, .empty-message {\r\n    text-align: center;\r\n    padding: 2rem;\r\n    color: #666;\r\n    font-style: italic;\r\n  }\r\n\r\n  /* Date group styling */\r\n  .date-group {\r\n    margin-bottom: 2rem;\r\n  }\r\n  .date-header {\r\n    font-size: 1.1rem;\r\n    font-weight: bold;\r\n    color: #0055aa;\r\n    border-bottom: 2px solid #0055aa;\r\n    padding-bottom: 0.5rem;\r\n    margin-bottom: 1rem;\r\n  }\r\n\r\n  /* Section headers */\r\n  .section-header {\r\n    margin: 2rem 0 1rem 0;\r\n    padding: 1.5rem;\r\n    border-radius: 8px;\r\n    text-align: center;\r\n  }\r\n  .section-header h2 {\r\n    margin: 0 0 0.5rem 0;\r\n    font-size: 1.3rem;\r\n    font-weight: bold;\r\n  }\r\n  .section-header p {\r\n    margin: 0;\r\n    font-size: 0.95rem;\r\n    opacity: 0.8;\r\n  }\r\n  .unhandled-section {\r\n    background: linear-gradient(135deg, #fff3cd 0%, #fff8dc 100%);\r\n    border: 1px solid #ffeaa7;\r\n    color: #856404;\r\n  }\r\n\r\n  /* Handled requests section */\r\n  .handled-section-container {\r\n    margin-top: 3rem;\r\n    border-top: 2px solid #e9ecef;\r\n    padding-top: 2rem;\r\n  }\r\n  .handled-section-toggle {\r\n    width: 100%;\r\n    padding: 1rem 1.5rem;\r\n    background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\r\n    border: 1px solid #dee2e6;\r\n    border-radius: 8px;\r\n    cursor: pointer;\r\n    text-align: left;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.3rem;\r\n    transition: all 0.2s ease;\r\n  }\r\n  .handled-section-toggle:hover {\r\n    background: linear-gradient(135deg, #e9ecef 0%, #dee2e6 100%);\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n  }\r\n  .toggle-text {\r\n    font-size: 1.1rem;\r\n    font-weight: bold;\r\n    color: #495057;\r\n  }\r\n  .toggle-subtitle {\r\n    font-size: 0.9rem;\r\n    color: #6c757d;\r\n    font-style: italic;\r\n  }\r\n  .handled-requests-content {\r\n    margin-top: 1rem;\r\n  }\r\n\r\n  /* Handled request styling differences */\r\n  .handled-date-group {\r\n    opacity: 0.85;\r\n  }\r\n  .handled-date-header {\r\n    color: #6c757d !important;\r\n    border-bottom-color: #6c757d !important;\r\n  }\r\n  .handled-card {\r\n    opacity: 0.9;\r\n  }\r\n\r\n  /* Request card styling */\r\n  .request-card {\r\n    border: 1px solid #ccc;\r\n    border-radius: 8px;\r\n    margin-bottom: 1rem;\r\n    background: #fff;\r\n    overflow: hidden;\r\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n    transition: box-shadow 0.2s ease;\r\n  }\r\n  .request-card:hover {\r\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\r\n  }\r\n\r\n  /* Summary button styling */\r\n  .request-summary {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    width: 100%;\r\n    padding: 1rem;\r\n    border: none;\r\n    background: #fff;\r\n    cursor: pointer;\r\n    text-align: left;\r\n    transition: background-color 0.2s ease;\r\n    font-size: 1rem;\r\n  }\r\n  .request-summary:hover {\r\n    background-color: #f8f9fa;\r\n  }\r\n\r\n  /* Status-based coloring */\r\n  .request-summary.unhandled {\r\n    border-left: 4px solid #ffc107;\r\n  }\r\n  .request-summary.handled {\r\n    border-left: 4px solid #28a745;\r\n  }\r\n\r\n  /* Summary content layout */\r\n  .summary-content {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    flex: 1;\r\n    margin-right: 1rem;\r\n  }\r\n  .summary-main {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.3rem;\r\n  }\r\n  .student-name {\r\n    font-weight: bold;\r\n    color: #333;\r\n    font-size: 1rem;\r\n  }\r\n  .subject-info {\r\n    color: #666;\r\n    font-size: 0.9rem;\r\n  }\r\n\r\n  /* Status badges container */\r\n  .status-badges {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.5rem;\r\n    align-items: flex-end;\r\n  }\r\n\r\n  /* Status badge */\r\n  .status-badge {\r\n    padding: 0.3rem 0.8rem;\r\n    border-radius: 12px;\r\n    font-size: 0.85rem;\r\n    font-weight: bold;\r\n    text-transform: uppercase;\r\n  }\r\n  .status-unhandled {\r\n    background-color: #fff3cd;\r\n    color: #856404;\r\n    border: 1px solid #ffeaa7;\r\n  }\r\n  .status-handled {\r\n    background-color: #d4edda;\r\n    color: #155724;\r\n    border: 1px solid #c3e6cb;\r\n  }\r\n\r\n  /* Acceptance badge */\r\n  .acceptance-badge {\r\n    padding: 0.3rem 0.8rem;\r\n    border-radius: 12px;\r\n    font-size: 0.75rem;\r\n    font-weight: bold;\r\n    text-transform: uppercase;\r\n  }\r\n  .acceptance-accepted {\r\n    background-color: #e8f5e8;\r\n    color: #2e7d32;\r\n    border: 1px solid #c8e6c9;\r\n  }\r\n  .acceptance-not-accepted {\r\n    background-color: #fff3e0;\r\n    color: #ef6c00;\r\n    border: 1px solid #ffcc02;\r\n  }\r\n\r\n  /* Display badge */\r\n  .display-badge {\r\n    padding: 0.3rem 0.8rem;\r\n    border-radius: 12px;\r\n    font-size: 0.75rem;\r\n    font-weight: bold;\r\n    text-transform: uppercase;\r\n  }\r\n  .display-visible {\r\n    background-color: #e1f5fe;\r\n    color: #01579b;\r\n    border: 1px solid #b3e5fc;\r\n  }\r\n  .display-hidden {\r\n    background-color: #ffebee;\r\n    color: #c62828;\r\n    border: 1px solid #ffcdd2;\r\n  }\r\n\r\n  /* Expand icon */\r\n  .expand-icon {\r\n    color: #0055aa;\r\n    font-size: 0.8rem;\r\n    transition: transform 0.2s ease;\r\n  }\r\n\r\n  /* Details section */\r\n  .request-details {\r\n    padding: 1.5rem;\r\n    background-color: #f8f9fa;\r\n    border-top: 1px solid #e9ecef;\r\n  }\r\n  .details-grid {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 1rem;\r\n  }\r\n  .detail-item {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.3rem;\r\n  }\r\n  .detail-item.full-width {\r\n    grid-column: 1 / -1;\r\n  }\r\n  .detail-label {\r\n    font-weight: bold;\r\n    color: #0055aa;\r\n    font-size: 0.9rem;\r\n  }\r\n  .detail-value {\r\n    color: #333;\r\n    font-size: 1rem;\r\n    padding: 0.4rem;\r\n    background-color: #fff;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n  }\r\n  .topic-text {\r\n    min-height: 3rem;\r\n    resize: none;\r\n    font-family: inherit;\r\n  }\r\n\r\n  /* Admin action buttons */\r\n  .admin-actions {\r\n    display: flex;\r\n    gap: 1rem;\r\n    margin-top: 0.5rem;\r\n    flex-wrap: wrap;\r\n  }\r\n  \r\n  .action-button {\r\n    padding: 0.8rem 1.5rem;\r\n    border: none;\r\n    border-radius: 6px;\r\n    font-weight: bold;\r\n    cursor: pointer;\r\n    transition: all 0.2s ease;\r\n    font-size: 0.9rem;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 0.5rem;\r\n  }\r\n  \r\n  .handled-button {\r\n    background-color: #28a745;\r\n    color: white;\r\n  }\r\n  \r\n  .handled-button:hover {\r\n    background-color: #218838;\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 2px 4px rgba(40, 167, 69, 0.3);\r\n  }\r\n  \r\n  .unhandled-button {\r\n    background-color: #dc3545;\r\n    color: white;\r\n  }\r\n  \r\n  .unhandled-button:hover {\r\n    background-color: #c82333;\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 2px 4px rgba(220, 53, 69, 0.3);\r\n  }\r\n\r\n  .show-button {\r\n    background-color: #17a2b8;\r\n    color: white;\r\n  }\r\n  \r\n  .show-button:hover {\r\n    background-color: #138496;\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 2px 4px rgba(23, 162, 184, 0.3);\r\n  }\r\n\r\n  .hide-button {\r\n    background-color: #6c757d;\r\n    color: white;\r\n  }\r\n  \r\n  .hide-button:hover {\r\n    background-color: #5a6268;\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 2px 4px rgba(108, 117, 125, 0.3);\r\n  }\r\n  \r\n  .action-button:active {\r\n    transform: translateY(0);\r\n  }\r\n\r\n  /* Teacher accepted info styling */\r\n  .teacher-accepted-info {\r\n    background: #d4edda;\r\n    color: #155724;\r\n    padding: 0.8rem;\r\n    border-radius: 6px;\r\n    border: 1px solid #c3e6cb;\r\n    font-size: 0.9rem;\r\n    line-height: 1.4;\r\n  }\r\n\r\n  .teacher-accepted-info strong {\r\n    font-weight: 600;\r\n  }\r\n\r\n  /* Responsive adjustments */\r\n  @media (max-width: 768px) {\r\n    .details-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n    .summary-content {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 0.5rem;\r\n    }\r\n    .status-badges {\r\n      align-self: flex-end;\r\n    }\r\n    .admin-actions {\r\n      flex-direction: column;\r\n      gap: 0.5rem;\r\n    }\r\n    .action-button {\r\n      justify-content: center;\r\n    }\r\n  }\r\n</style>\r\n  \r\n  <div class=\"labelDiv\">\r\n  <span>CLASS REGISTRATION REQUESTS</span>\r\n</div>\r\n\r\n{#if loading}\r\n  <div class=\"loading-message\">Loading requests…</div>\r\n{:else if Object.keys(groupedRequests).length === 0}\r\n  <div class=\"empty-message\">No class registration requests found.</div>\r\n{:else}\r\n  <!-- Now using reactive statements to separate requests -->\r\n\r\n  <!-- UNHANDLED REQUESTS SECTION -->\r\n  {#if Object.keys(unhandledRequestsByDay).length > 0}\r\n    <div class=\"section-header unhandled-section\">\r\n      <h2>🔴 Unhandled Requests</h2>\r\n      <p>These requests require your attention</p>\r\n    </div>\r\n    \r\n    {#each Object.entries(unhandledRequestsByDay) as [day, requests]}\r\n      <div class=\"date-group\">\r\n        <h3 class=\"date-header\">{day}</h3>\r\n        {#each requests as req (req.id)}\r\n          <div class=\"request-card\">\r\n            <!-- Summary Header -->\r\n            <button\r\n              type=\"button\"\r\n              class=\"request-summary unhandled\"\r\n              on:click={() => toggleExpand(req.id)}\r\n            >\r\n              <div class=\"summary-content\">\r\n                <div class=\"summary-main\">\r\n                  <span class=\"student-name\">{getStudentName(req.student)}</span>\r\n                  <span class=\"subject-info\">{getSubjectDisplayName(req.subject)} - {getGradeDisplayName(req.grade)}</span>\r\n                </div>\r\n                <div class=\"status-badges\">\r\n                  <div class=\"status-badge status-unhandled\">Unhandled</div>\r\n                  <div class=\"acceptance-badge\" class:acceptance-accepted={req.accepted_by_teacher} \r\n                       class:acceptance-not-accepted={!req.accepted_by_teacher}>\r\n                    {req.accepted_by_teacher ? 'Accepted' : 'Not Accepted'}\r\n                  </div>\r\n                  <div class=\"display-badge\" class:display-visible={req.display} \r\n                       class:display-hidden={!req.display}>\r\n                    {req.display ? 'Visible' : 'Hidden'}\r\n                  </div>\r\n                </div>\r\n              </div>\r\n              <div class=\"expand-icon\">\r\n                {expandedMap[req.id] ? '▼' : '▶'}\r\n              </div>\r\n            </button>\r\n\r\n            <!-- Expanded Details -->\r\n            {#if expandedMap[req.id]}\r\n              <div class=\"request-details\">\r\n                <div class=\"details-grid\">\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Request ID:</span>\r\n                    <span class=\"detail-value\">#{req.id}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Student:</span>\r\n                    <span class=\"detail-value\">{getStudentName(req.student)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Student Email:</span>\r\n                    <span class=\"detail-value\">{req.student_email || 'N/A'}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Subject:</span>\r\n                    <span class=\"detail-value\">{getSubjectDisplayName(req.subject)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Grade Level:</span>\r\n                    <span class=\"detail-value\">{getGradeDisplayName(req.grade)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item\">\r\n                    <span class=\"detail-label\">Submitted:</span>\r\n                    <span class=\"detail-value\">{formatDateTime(req.time_submitted)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item full-width\">\r\n                    <span class=\"detail-label\">Requested Times:</span>\r\n                    <span class=\"detail-value\">{formatRequestedTimes(req.requested_times)}</span>\r\n                  </div>\r\n                  <div class=\"detail-item full-width\">\r\n                    <span class=\"detail-label\">Topic to Start With:</span>\r\n                    <span class=\"detail-value topic-text\">{req.topic_start || 'No topic specified'}</span>\r\n                  </div>\r\n                  \r\n                  <!-- Teacher acceptance info -->\r\n                  {#if req.accepted_by_teacher}\r\n                    <div class=\"detail-item full-width\">\r\n                      <span class=\"detail-label\">Teacher Acceptance:</span>\r\n                      <div class=\"teacher-accepted-info\">\r\n                        <strong>✓ Accepted by:</strong> {req.accepted_by_teacher}<br>\r\n                        <strong>Accepted at:</strong> {formatDateTime(req.teacher_accepted_at)}\r\n                      </div>\r\n                    </div>\r\n                  {/if}\r\n                  \r\n                  <!-- Admin action buttons -->\r\n                  <div class=\"detail-item full-width\">\r\n                    <span class=\"detail-label\">Admin Actions:</span>\r\n                    <div class=\"admin-actions\">\r\n                      <button \r\n                        class=\"action-button handled-button\"\r\n                        on:click={() => handleAdminAction(req.id, 'mark_handled')}\r\n                      >\r\n                        ✓ Mark as Handled\r\n                      </button>\r\n                      \r\n                      {#if req.display}\r\n                        <button \r\n                          class=\"action-button hide-button\"\r\n                          on:click={() => handleAdminAction(req.id, 'mark_dont_display')}\r\n                        >\r\n                          👁️‍🗨️ Hide from Teachers\r\n                        </button>\r\n                      {:else}\r\n                        <button \r\n                          class=\"action-button show-button\"\r\n                          on:click={() => handleAdminAction(req.id, 'mark_display')}\r\n                        >\r\n                          👁️ Show to Teachers\r\n                        </button>\r\n                      {/if}\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            {/if}\r\n          </div>\r\n        {/each}\r\n      </div>\r\n    {/each}\r\n  {:else}\r\n    <div class=\"section-header unhandled-section\">\r\n      <h2>🟢 No Unhandled Requests</h2>\r\n      <p>All requests have been handled!</p>\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- HANDLED REQUESTS SECTION -->\r\n  {#if Object.keys(handledRequestsByDay).length > 0}\r\n    <div class=\"handled-section-container\">\r\n      <button \r\n        class=\"handled-section-toggle\"\r\n        on:click={() => showHandledRequests = !showHandledRequests}\r\n      >\r\n        <span class=\"toggle-text\">\r\n          {showHandledRequests ? '▼' : '▶'} Handled Requests ({Object.values(handledRequestsByDay).flat().length})\r\n        </span>\r\n        <span class=\"toggle-subtitle\">Click to {showHandledRequests ? 'hide' : 'show'} completed requests</span>\r\n      </button>\r\n\r\n      {#if showHandledRequests}\r\n        <div class=\"handled-requests-content\">\r\n          {#each Object.entries(handledRequestsByDay) as [day, requests]}\r\n            <div class=\"date-group handled-date-group\">\r\n              <h3 class=\"date-header handled-date-header\">{day}</h3>\r\n              {#each requests as req (req.id)}\r\n                <div class=\"request-card handled-card\">\r\n                  <!-- Summary Header -->\r\n                  <button\r\n                    type=\"button\"\r\n                    class=\"request-summary handled\"\r\n                    on:click={() => toggleExpand(req.id)}\r\n                  >\r\n                    <div class=\"summary-content\">\r\n                      <div class=\"summary-main\">\r\n                        <span class=\"student-name\">{getStudentName(req.student)}</span>\r\n                        <span class=\"subject-info\">{getSubjectDisplayName(req.subject)} - {getGradeDisplayName(req.grade)}</span>\r\n                      </div>\r\n                      <div class=\"status-badges\">\r\n                        <div class=\"status-badge status-handled\">Handled</div>\r\n                        <div class=\"acceptance-badge\" class:acceptance-accepted={req.accepted_by_teacher} \r\n                             class:acceptance-not-accepted={!req.accepted_by_teacher}>\r\n                          {req.accepted_by_teacher ? 'Accepted' : 'Not Accepted'}\r\n                        </div>\r\n                        <div class=\"display-badge\" class:display-visible={req.display} \r\n                             class:display-hidden={!req.display}>\r\n                          {req.display ? 'Visible' : 'Hidden'}\r\n                        </div>\r\n                      </div>\r\n                    </div>\r\n                    <div class=\"expand-icon\">\r\n                      {expandedMap[req.id] ? '▼' : '▶'}\r\n                    </div>\r\n                  </button>\r\n\r\n                  <!-- Expanded Details -->\r\n                  {#if expandedMap[req.id]}\r\n                    <div class=\"request-details\">\r\n                      <div class=\"details-grid\">\r\n                        <div class=\"detail-item\">\r\n                          <span class=\"detail-label\">Request ID:</span>\r\n                          <span class=\"detail-value\">#{req.id}</span>\r\n                        </div>\r\n                        <div class=\"detail-item\">\r\n                          <span class=\"detail-label\">Student:</span>\r\n                          <span class=\"detail-value\">{getStudentName(req.student)}</span>\r\n                        </div>\r\n                        <div class=\"detail-item\">\r\n                          <span class=\"detail-label\">Student Email:</span>\r\n                          <span class=\"detail-value\">{req.student_email || 'N/A'}</span>\r\n                        </div>\r\n                        <div class=\"detail-item\">\r\n                          <span class=\"detail-label\">Subject:</span>\r\n                          <span class=\"detail-value\">{getSubjectDisplayName(req.subject)}</span>\r\n                        </div>\r\n                        <div class=\"detail-item\">\r\n                          <span class=\"detail-label\">Grade Level:</span>\r\n                          <span class=\"detail-value\">{getGradeDisplayName(req.grade)}</span>\r\n                        </div>\r\n                        <div class=\"detail-item\">\r\n                          <span class=\"detail-label\">Submitted:</span>\r\n                          <span class=\"detail-value\">{formatDateTime(req.time_submitted)}</span>\r\n                        </div>\r\n                        <div class=\"detail-item full-width\">\r\n                          <span class=\"detail-label\">Requested Times:</span>\r\n                          <span class=\"detail-value\">{formatRequestedTimes(req.requested_times)}</span>\r\n                        </div>\r\n                        <div class=\"detail-item full-width\">\r\n                          <span class=\"detail-label\">Topic to Start With:</span>\r\n                          <span class=\"detail-value topic-text\">{req.topic_start || 'No topic specified'}</span>\r\n                        </div>\r\n                        \r\n                        <!-- Teacher acceptance info -->\r\n                        {#if req.accepted_by_teacher}\r\n                          <div class=\"detail-item full-width\">\r\n                            <span class=\"detail-label\">Teacher Acceptance:</span>\r\n                            <div class=\"teacher-accepted-info\">\r\n                              <strong>✓ Accepted by:</strong> {req.accepted_by_teacher}<br>\r\n                              <strong>Accepted at:</strong> {formatDateTime(req.teacher_accepted_at)}\r\n                            </div>\r\n                          </div>\r\n                        {/if}\r\n                        \r\n                        <!-- Admin action buttons -->\r\n                        <div class=\"detail-item full-width\">\r\n                          <span class=\"detail-label\">Admin Actions:</span>\r\n                          <div class=\"admin-actions\">\r\n                            <button \r\n                              class=\"action-button unhandled-button\"\r\n                              on:click={() => handleAdminAction(req.id, 'mark_unhandled')}\r\n                            >\r\n                              ✗ Mark as Unhandled\r\n                            </button>\r\n                            \r\n                            {#if req.display}\r\n                              <button \r\n                                class=\"action-button hide-button\"\r\n                                on:click={() => handleAdminAction(req.id, 'mark_dont_display')}\r\n                              >\r\n                                👁️‍🗨️ Hide from Teachers\r\n                              </button>\r\n                            {:else}\r\n                              <button \r\n                                class=\"action-button show-button\"\r\n                                on:click={() => handleAdminAction(req.id, 'mark_display')}\r\n                              >\r\n                                👁️ Show to Teachers\r\n                              </button>\r\n                            {/if}\r\n                          </div>\r\n                        </div>\r\n                      </div>\r\n                    </div>\r\n                  {/if}\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          {/each}\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n{/if}\r\n  \r\n","<script>\r\n    import TextField from './TextFieldComponent.svelte';\r\n    import Dropdown from './DropDownComponent.svelte';\r\n    import DateTimePicker from './DateTimePickerComponent.svelte';\r\n    import SingleSelectCheckboxArea from './SingleSelectCheckboxArea.svelte';\r\n\r\n    let selectedSubject = '';\r\n    let topicsOfInterest = '';\r\n    let selectedClass = '';\r\n    let datetimeValues = [''];\r\n    let studentName = '';\r\n    let studentEmail = '';\r\n    let showSuccessNotification = false;\r\n    let errorMessage = '';\r\n    \r\n    // User search functionality\r\n    let searchTerm = '';\r\n    let searchResults = [];\r\n    let selectedUser = null;\r\n    let isSearching = false;\r\n    let registrationMode = 'custom'; // 'custom' or 'existing'\r\n\r\n    const classChoices = [\r\n        ['1', '1'],\r\n        ['2', '2'],\r\n        ['3', '3'],\r\n        ['4', '4'],\r\n        ['5', '5'],\r\n        ['6', '6'],\r\n        ['7', '7'],\r\n        ['8', '8'],\r\n        ['9', '9'],\r\n        ['10', '10'],\r\n        ['11', '11'],\r\n        ['12', '12'],\r\n        ['13', 'Universitetas'],\r\n    ];\r\n\r\n    const addDateTime = () => {\r\n        datetimeValues = [...datetimeValues, ''];\r\n    };\r\n\r\n    const removeDateTime = (index) => {\r\n        datetimeValues = datetimeValues.filter((_, i) => i !== index);\r\n    };\r\n\r\n    // Search for students\r\n    async function searchStudents() {\r\n        if (searchTerm.trim().length < 2) {\r\n            searchResults = [];\r\n            return;\r\n        }\r\n        \r\n        isSearching = true;\r\n        try {\r\n            const response = await fetch('/studentplayground/api/admin/search-students/', {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Content-Type': 'application/json',\r\n                    'Authorization': `Bearer ${localStorage.getItem('jwtToken')}`,\r\n                },\r\n                body: JSON.stringify({\r\n                    search_term: searchTerm\r\n                })\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                searchResults = data.students;\r\n            } else {\r\n                console.error('Failed to search students');\r\n                searchResults = [];\r\n            }\r\n        } catch (error) {\r\n            console.error('Error searching students:', error);\r\n            searchResults = [];\r\n        } finally {\r\n            isSearching = false;\r\n        }\r\n    }\r\n    \r\n    // Select a user from search results\r\n    function selectUser(user) {\r\n        selectedUser = user;\r\n        searchResults = [];\r\n        searchTerm = `${user.first_name} ${user.last_name} (${user.username})`;\r\n        registrationMode = 'existing';\r\n        \r\n        // Clear custom fields when selecting a user\r\n        studentName = '';\r\n        studentEmail = '';\r\n    }\r\n    \r\n    // Switch to custom mode\r\n    function switchToCustomMode() {\r\n        registrationMode = 'custom';\r\n        selectedUser = null;\r\n        searchTerm = '';\r\n        searchResults = [];\r\n    }\r\n    \r\n    // Switch to existing user mode\r\n    function switchToExistingMode() {\r\n        registrationMode = 'existing';\r\n        studentName = '';\r\n        studentEmail = '';\r\n    }\r\n\r\n    const handleSubmit = async () => {\r\n        // Reset error message\r\n        errorMessage = '';\r\n        \r\n        // Validation\r\n        if (registrationMode === 'custom') {\r\n            if (!studentName.trim()) {\r\n                errorMessage = 'Studento vardas yra privalomas.';\r\n                return;\r\n            }\r\n        } else if (registrationMode === 'existing') {\r\n            if (!selectedUser) {\r\n                errorMessage = 'Prašome pasirinkti studentą iš paieškos rezultatų.';\r\n                return;\r\n            }\r\n        }\r\n        \r\n        if (!selectedSubject) {\r\n            errorMessage = 'Prašome pasirinkti bent vieną dalyką.';\r\n            return;\r\n        }\r\n        \r\n        if (!selectedClass) {\r\n            errorMessage = 'Prašome pasirinkti klasę.';\r\n            return;\r\n        }\r\n\r\n        const data = {\r\n            subjects: [selectedSubject],\r\n            topics: topicsOfInterest,\r\n            selectedClass: selectedClass,\r\n            datetimeValues: datetimeValues,\r\n            // Include either user ID or custom student info\r\n            ...(registrationMode === 'existing' ? {\r\n                userId: selectedUser.id\r\n            } : {\r\n                studentName: studentName.trim(),\r\n                studentEmail: studentEmail.trim() || undefined,\r\n            })\r\n        };\r\n        \r\n        const token = localStorage.getItem('jwtToken'); \r\n        try {\r\n            const response = await fetch('/studentplayground/api/admin/create-class-registration/', {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Content-Type': 'application/json',\r\n                    'X-CSRFToken': getCookie('csrftoken'),\r\n                    'Authorization': `Bearer ${token}`\r\n                },\r\n                credentials: 'include',\r\n                body: JSON.stringify(data)\r\n            });\r\n\r\n            if (response.ok) {\r\n                // Show success notification\r\n                showSuccessNotification = true;\r\n                // Reset form\r\n                resetForm();\r\n                // Auto-hide notification after 5 seconds\r\n                setTimeout(() => {\r\n                    showSuccessNotification = false;\r\n                }, 5000);\r\n            } else {\r\n                if (response.status === 401) {\r\n                    alert('Reikia prisijungti iš naujo.');\r\n                    localStorage.removeItem('jwtToken');\r\n                    window.location.href = '#/about';\r\n                } else {\r\n                    const errorData = await response.json();\r\n                    errorMessage = errorData.error || 'Klaida pateikiant formą!';\r\n                }\r\n            }\r\n        } catch (error) {\r\n            console.error('Error:', error);\r\n            errorMessage = 'Klaida siunčiant duomenis. Bandykite dar kartą.';\r\n        }\r\n    };\r\n\r\n    const resetForm = () => {\r\n        selectedSubject = '';\r\n        topicsOfInterest = '';\r\n        selectedClass = '';\r\n        datetimeValues = [''];\r\n        studentName = '';\r\n        studentEmail = '';\r\n        selectedUser = null;\r\n        searchTerm = '';\r\n        searchResults = [];\r\n        registrationMode = 'custom';\r\n    };\r\n\r\n    function getCookie(name) {\r\n        let cookieValue = null;\r\n        if (document.cookie && document.cookie !== '') {\r\n            const cookies = document.cookie.split(';');\r\n            for (let i = 0; i < cookies.length; i++) {\r\n                const cookie = cookies[i].trim();\r\n                if (cookie.substring(0, name.length + 1) === (name + '=')) {\r\n                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        return cookieValue;\r\n    }\r\n\r\n    // Reactive search\r\n    $: if (searchTerm && registrationMode === 'existing') {\r\n        searchStudents();\r\n    }\r\n</script>\r\n\r\n<!-- Success Notification -->\r\n{#if showSuccessNotification}\r\n    <div class=\"notification success-notification\">\r\n        <div class=\"notification-content\">\r\n            <span class=\"notification-icon\">✓</span>\r\n            <div class=\"notification-text\">\r\n                <strong>Registracija sėkminga!</strong>\r\n                <p>Klasės registracija sukurta sėkmingai.</p>\r\n            </div>\r\n            <button class=\"close-notification\" on:click={() => showSuccessNotification = false}>×</button>\r\n        </div>\r\n    </div>\r\n{/if}\r\n\r\n<!-- Error Message -->\r\n{#if errorMessage}\r\n    <div class=\"error-message\">\r\n        <span class=\"error-icon\">⚠</span>\r\n        <span>{errorMessage}</span>\r\n        <button class=\"close-error\" on:click={() => errorMessage = ''}>×</button>\r\n    </div>\r\n{/if}\r\n\r\n<div class=\"admin-registration-form\">\r\n    <div class=\"form-header\">\r\n        <h2>Sukurti Klasės Registraciją</h2>\r\n        <p class=\"form-description\">Sukurkite naują klasės registracijos užklausą studentui</p>\r\n    </div>\r\n\r\n    <!-- Student Information Section -->\r\n    <div class=\"form-section\">\r\n        <h3>Studento Informacija</h3>\r\n        \r\n        <!-- Registration Mode Selection -->\r\n        <div class=\"mode-selection\">\r\n            <div class=\"mode-options\">\r\n                <label class=\"mode-option\">\r\n                    <input \r\n                        type=\"radio\" \r\n                        bind:group={registrationMode} \r\n                        value=\"existing\"\r\n                        on:change={switchToExistingMode}\r\n                    />\r\n                    <span>Pasirinkti esamą studentą</span>\r\n                </label>\r\n                <label class=\"mode-option\">\r\n                    <input \r\n                        type=\"radio\" \r\n                        bind:group={registrationMode} \r\n                        value=\"custom\"\r\n                        on:change={switchToCustomMode}\r\n                    />\r\n                    <span>Įvesti naują studento informaciją</span>\r\n                </label>\r\n            </div>\r\n        </div>\r\n\r\n        {#if registrationMode === 'existing'}\r\n            <!-- User Search Section -->\r\n            <div class=\"user-search-section\">\r\n                <div class=\"search-input-container\">\r\n                    <input\r\n                        type=\"text\"\r\n                        bind:value={searchTerm}\r\n                        placeholder=\"Ieškoti studentų pagal vardą, vartotojo vardą ar el. paštą...\"\r\n                        class=\"search-input\"\r\n                        disabled={selectedUser}\r\n                    />\r\n                    {#if isSearching}\r\n                        <div class=\"search-spinner\">🔍</div>\r\n                    {/if}\r\n                </div>\r\n                \r\n                <!-- Search Results -->\r\n                {#if searchResults.length > 0 && !selectedUser}\r\n                    <div class=\"search-results\">\r\n                        {#each searchResults as user}\r\n                            <div \r\n                                class=\"search-result-item\" \r\n                                tabindex=\"0\"\r\n                                role=\"button\"\r\n                                on:click={() => selectUser(user)}\r\n                                on:keydown={(e) => e.key === 'Enter' || e.key === ' ' ? selectUser(user) : null}\r\n                            >\r\n                                <div class=\"student-info\">\r\n                                    <div class=\"student-name\">{user.first_name} {user.last_name}</div>\r\n                                    <div class=\"student-details\">@{user.username} • {user.email}</div>\r\n                                </div>\r\n                            </div>\r\n                        {/each}\r\n                    </div>\r\n                {/if}\r\n                \r\n                {#if searchResults.length === 0 && searchTerm.trim().length >= 2 && !isSearching && !selectedUser}\r\n                    <div class=\"no-results\">Nerasta studentų pagal \"{searchTerm}\"</div>\r\n                {/if}\r\n\r\n                <!-- Selected User Display -->\r\n                {#if selectedUser}\r\n                    <div class=\"selected-user-display\">\r\n                        <div class=\"selected-user-info\">\r\n                            <div class=\"student-name\">{selectedUser.first_name} {selectedUser.last_name}</div>\r\n                            <div class=\"student-details\">@{selectedUser.username} • {selectedUser.email}</div>\r\n                        </div>\r\n                        <button type=\"button\" class=\"change-user-button\" on:click={switchToExistingMode}>\r\n                            Keisti studentą\r\n                        </button>\r\n                    </div>\r\n                {/if}\r\n            </div>\r\n        {:else}\r\n            <!-- Custom Student Information -->\r\n            <div class=\"custom-student-section\">\r\n                <TextField \r\n                    label=\"Studento vardas ir pavardė *\" \r\n                    placeholder=\"Įveskite studento vardą ir pavardę\" \r\n                    bind:value={studentName} \r\n                    required={true}\r\n                />\r\n\r\n                <TextField \r\n                    label=\"Studento el. paštas\" \r\n                    placeholder=\"Įveskite studento el. pašto adresą (neprivaloma)\" \r\n                    bind:value={studentEmail} \r\n                    type=\"email\"\r\n                />\r\n            </div>\r\n        {/if}\r\n    </div>\r\n\r\n    <!-- Class Information Section -->\r\n    <div class=\"form-section\">\r\n        <h3>Klasės Informacija</h3>\r\n        \r\n        <SingleSelectCheckboxArea bind:selectedSubject={selectedSubject} />\r\n\r\n        <TextField \r\n            label=\"Nuo kurios temos norėtumėte pradėti?\" \r\n            placeholder=\"Įrašykite specifines temas, kurios domina studentą\" \r\n            bind:value={topicsOfInterest} \r\n        />\r\n\r\n        <Dropdown \r\n            label=\"Pasirinkite klasę *\"\r\n            options={classChoices}\r\n            bind:selectedValue={selectedClass}\r\n        />\r\n    </div>\r\n\r\n    <!-- Time Preferences Section -->\r\n    <div class=\"form-section\">\r\n        <h3>Laiko Pasirinkiniai</h3>\r\n        \r\n        <!-- Dynamic DateTime Picker List -->\r\n        {#each datetimeValues as datetimeValue, index}\r\n            <DateTimePicker \r\n                id={`datetime-${index}`} \r\n                bind:value={datetimeValues[index]} \r\n                onRemove={() => removeDateTime(index)} \r\n            />\r\n        {/each}\r\n        \r\n        <button type=\"button\" class='addDatetime' on:click={addDateTime}>Pridėti laiką</button>\r\n    </div>\r\n\r\n    <div class=\"form-actions\">\r\n        <button on:click={resetForm} type=\"button\" class=\"resetButton\">Išvalyti formą</button>\r\n        <button on:click={handleSubmit} type=\"button\" class=\"submitButton\">Sukurti Registraciją</button>\r\n    </div>\r\n</div>\r\n\r\n<style>\r\n    .admin-registration-form {\r\n        max-width: 800px;\r\n        margin: 0 auto;\r\n        padding: 2rem;\r\n        background: #fff;\r\n        border-radius: 8px;\r\n        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n    }\r\n\r\n    .form-header {\r\n        text-align: center;\r\n        margin-bottom: 2rem;\r\n        padding-bottom: 1rem;\r\n        border-bottom: 2px solid #e9ecef;\r\n    }\r\n\r\n    .form-header h2 {\r\n        color: #2c3e50;\r\n        margin: 0 0 0.5rem 0;\r\n        font-size: 1.8rem;\r\n        font-weight: 600;\r\n    }\r\n\r\n    .form-description {\r\n        color: #6c757d;\r\n        font-size: 1rem;\r\n        margin: 0;\r\n    }\r\n\r\n    .form-section {\r\n        margin-bottom: 2rem;\r\n        padding: 1.5rem;\r\n        background: #f8f9fa;\r\n        border-radius: 6px;\r\n        border-left: 4px solid #007bff;\r\n    }\r\n\r\n    .form-section h3 {\r\n        color: #495057;\r\n        margin: 0 0 1.5rem 0;\r\n        font-size: 1.2rem;\r\n        font-weight: 600;\r\n    }\r\n\r\n    /* Mode Selection Styles */\r\n    .mode-selection {\r\n        margin-bottom: 1.5rem;\r\n        padding: 1rem;\r\n        background: #fff;\r\n        border-radius: 6px;\r\n        border: 1px solid #dee2e6;\r\n    }\r\n\r\n    .mode-options {\r\n        display: flex;\r\n        gap: 2rem;\r\n    }\r\n\r\n    .mode-option {\r\n        display: flex;\r\n        align-items: center;\r\n        cursor: pointer;\r\n        font-size: 1rem;\r\n        color: #495057;\r\n    }\r\n\r\n    .mode-option input[type=\"radio\"] {\r\n        margin-right: 0.5rem;\r\n        transform: scale(1.2);\r\n        cursor: pointer;\r\n    }\r\n\r\n    .mode-option span {\r\n        user-select: none;\r\n    }\r\n\r\n    /* User Search Styles */\r\n    .user-search-section {\r\n        margin-top: 1rem;\r\n    }\r\n\r\n    .search-input-container {\r\n        position: relative;\r\n        margin-bottom: 1rem;\r\n    }\r\n\r\n    .search-input {\r\n        width: 100%;\r\n        padding: 12px 16px;\r\n        border: 2px solid #dee2e6;\r\n        border-radius: 6px;\r\n        font-size: 1rem;\r\n        box-sizing: border-box;\r\n        transition: border-color 0.2s ease;\r\n    }\r\n\r\n    .search-input:focus {\r\n        outline: none;\r\n        border-color: #007bff;\r\n    }\r\n\r\n    .search-input:disabled {\r\n        background-color: #f8f9fa;\r\n        cursor: not-allowed;\r\n    }\r\n\r\n    .search-spinner {\r\n        position: absolute;\r\n        right: 12px;\r\n        top: 50%;\r\n        transform: translateY(-50%);\r\n        font-size: 16px;\r\n        animation: spin 1s linear infinite;\r\n    }\r\n\r\n    @keyframes spin {\r\n        from { transform: translateY(-50%) rotate(0deg); }\r\n        to { transform: translateY(-50%) rotate(360deg); }\r\n    }\r\n\r\n    .search-results {\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 6px;\r\n        max-height: 250px;\r\n        overflow-y: auto;\r\n        background: white;\r\n        box-shadow: 0 2px 8px rgba(0,0,0,0.1);\r\n        margin-bottom: 1rem;\r\n    }\r\n\r\n    .search-result-item {\r\n        padding: 12px 16px;\r\n        border-bottom: 1px solid #eee;\r\n        cursor: pointer;\r\n        transition: background-color 0.2s ease;\r\n        outline: none;\r\n    }\r\n\r\n    .search-result-item:hover,\r\n    .search-result-item:focus {\r\n        background-color: #f8f9fa;\r\n    }\r\n\r\n    .search-result-item:focus {\r\n        box-shadow: inset 0 0 0 2px #007bff;\r\n    }\r\n\r\n    .search-result-item:last-child {\r\n        border-bottom: none;\r\n    }\r\n\r\n    .student-info {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 4px;\r\n    }\r\n\r\n    .student-name {\r\n        font-weight: 600;\r\n        color: #212529;\r\n        font-size: 1rem;\r\n    }\r\n\r\n    .student-details {\r\n        color: #6c757d;\r\n        font-size: 0.9rem;\r\n    }\r\n\r\n    .no-results {\r\n        padding: 16px;\r\n        text-align: center;\r\n        color: #6c757d;\r\n        font-style: italic;\r\n        background: #f8f9fa;\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 6px;\r\n        margin-bottom: 1rem;\r\n    }\r\n\r\n    .selected-user-display {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        padding: 16px;\r\n        background: #e3f2fd;\r\n        border: 1px solid #2196f3;\r\n        border-radius: 6px;\r\n        margin-bottom: 1rem;\r\n    }\r\n\r\n    .selected-user-info {\r\n        flex: 1;\r\n    }\r\n\r\n    .change-user-button {\r\n        background: #007bff;\r\n        color: white;\r\n        border: none;\r\n        padding: 8px 16px;\r\n        border-radius: 4px;\r\n        cursor: pointer;\r\n        font-size: 0.9rem;\r\n        font-weight: 500;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n\r\n    .change-user-button:hover {\r\n        background: #0056b3;\r\n    }\r\n\r\n    .custom-student-section {\r\n        margin-top: 1rem;\r\n    }\r\n\r\n    .form-actions {\r\n        display: flex;\r\n        gap: 1rem;\r\n        justify-content: flex-end;\r\n        margin-top: 2rem;\r\n        padding-top: 1.5rem;\r\n        border-top: 1px solid #e9ecef;\r\n    }\r\n\r\n    .submitButton, .resetButton {\r\n        padding: 12px 24px;\r\n        border-radius: 6px;\r\n        border: none;\r\n        font-weight: 600;\r\n        font-size: 1rem;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n        min-width: 150px;\r\n    }\r\n\r\n    .submitButton {\r\n        background-color: #28a745;\r\n        color: white;\r\n    }\r\n\r\n    .submitButton:hover {\r\n        background-color: #218838;\r\n        transform: translateY(-1px);\r\n        box-shadow: 0 4px 8px rgba(40, 167, 69, 0.3);\r\n    }\r\n\r\n    .resetButton {\r\n        background-color: #6c757d;\r\n        color: white;\r\n    }\r\n\r\n    .resetButton:hover {\r\n        background-color: #5a6268;\r\n        transform: translateY(-1px);\r\n        box-shadow: 0 4px 8px rgba(108, 117, 125, 0.3);\r\n    }\r\n    \r\n    .addDatetime {\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        height: 40px;\r\n        background-color: #007bff;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 6px;\r\n        font-weight: 500;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n        margin-top: 1rem;\r\n        width: 100%;\r\n    }\r\n\r\n    .addDatetime:hover {\r\n        background-color: #0056b3;\r\n        transform: translateY(-1px);\r\n    }\r\n\r\n    /* Notification Styles */\r\n    .notification {\r\n        position: fixed;\r\n        top: 0;\r\n        left: 0;\r\n        right: 0;\r\n        z-index: 1000;\r\n        padding: 16px;\r\n        animation: slideDown 0.3s ease-out;\r\n    }\r\n\r\n    .success-notification {\r\n        background-color: #d4edda;\r\n        border-bottom: 3px solid #28a745;\r\n        color: #155724;\r\n    }\r\n\r\n    .notification-content {\r\n        display: flex;\r\n        align-items: center;\r\n        max-width: 1200px;\r\n        margin: 0 auto;\r\n        gap: 12px;\r\n    }\r\n\r\n    .notification-icon {\r\n        font-size: 24px;\r\n        font-weight: bold;\r\n        color: #28a745;\r\n        background-color: white;\r\n        border-radius: 50%;\r\n        width: 32px;\r\n        height: 32px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .notification-text {\r\n        flex: 1;\r\n    }\r\n\r\n    .notification-text strong {\r\n        display: block;\r\n        font-size: 16px;\r\n        margin-bottom: 4px;\r\n    }\r\n\r\n    .notification-text p {\r\n        margin: 0;\r\n        font-size: 14px;\r\n        opacity: 0.9;\r\n    }\r\n\r\n    .close-notification {\r\n        background: none;\r\n        border: none;\r\n        font-size: 24px;\r\n        font-weight: bold;\r\n        cursor: pointer;\r\n        color: #155724;\r\n        width: 32px;\r\n        height: 32px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 4px;\r\n        transition: background-color 0.2s ease;\r\n        margin: 0;\r\n        padding: 0;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .close-notification:hover {\r\n        background-color: rgba(21, 87, 36, 0.1);\r\n    }\r\n\r\n    /* Error Message Styles */\r\n    .error-message {\r\n        background-color: #f8d7da;\r\n        color: #721c24;\r\n        border: 1px solid #f5c6cb;\r\n        border-radius: 6px;\r\n        padding: 12px 16px;\r\n        margin-bottom: 1rem;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n    }\r\n\r\n    .error-icon {\r\n        font-size: 18px;\r\n        color: #dc3545;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .close-error {\r\n        background: none;\r\n        border: none;\r\n        font-size: 18px;\r\n        font-weight: bold;\r\n        cursor: pointer;\r\n        color: #721c24;\r\n        margin-left: auto;\r\n        padding: 0;\r\n        width: 20px;\r\n        height: 20px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 2px;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n\r\n    .close-error:hover {\r\n        background-color: rgba(114, 28, 36, 0.1);\r\n    }\r\n\r\n    @keyframes slideDown {\r\n        from {\r\n            transform: translateY(-100%);\r\n            opacity: 0;\r\n        }\r\n        to {\r\n            transform: translateY(0);\r\n            opacity: 1;\r\n        }\r\n    }\r\n\r\n    /* Responsive Design */\r\n    @media (max-width: 768px) {\r\n        .admin-registration-form {\r\n            margin: 1rem;\r\n            padding: 1rem;\r\n        }\r\n\r\n        .form-actions {\r\n            flex-direction: column;\r\n        }\r\n\r\n        .submitButton, .resetButton {\r\n            width: 100%;\r\n        }\r\n    }\r\n</style>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    \r\n    let searchTerm = '';\r\n    let searchResults = [];\r\n    let selectedStudent = null;\r\n    let weeklySchedule = [];\r\n    let messagePreview = '';\r\n    let isLoading = false;\r\n    let isSearching = false;\r\n    let isSending = false;\r\n    let successMessage = '';\r\n    let errorMessage = '';\r\n    let searchNextWeek = true; // Default to next week\r\n    \r\n    // Search for students\r\n    async function searchStudents() {\r\n        if (searchTerm.trim().length < 2) {\r\n            searchResults = [];\r\n            return;\r\n        }\r\n        \r\n        isSearching = true;\r\n        try {\r\n            const response = await fetch('/studentplayground/api/admin/search-students/', {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Content-Type': 'application/json',\r\n                    'Authorization': `Bearer ${localStorage.getItem('jwtToken')}`,\r\n                },\r\n                body: JSON.stringify({\r\n                    search_term: searchTerm\r\n                })\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                searchResults = data.students;\r\n            } else {\r\n                console.error('Failed to search students');\r\n                searchResults = [];\r\n            }\r\n        } catch (error) {\r\n            console.error('Error searching students:', error);\r\n            searchResults = [];\r\n        } finally {\r\n            isSearching = false;\r\n        }\r\n    }\r\n    \r\n    // Select a student and get their weekly schedule\r\n    async function selectStudent(student) {\r\n        selectedStudent = student;\r\n        searchResults = [];\r\n        searchTerm = `${student.first_name} ${student.last_name} (${student.username})`;\r\n        \r\n        await getWeeklySchedule(student.id);\r\n    }\r\n    \r\n    // Get weekly schedule for selected student\r\n    async function getWeeklySchedule(studentId) {\r\n        isLoading = true;\r\n        successMessage = '';\r\n        errorMessage = '';\r\n        \r\n        try {\r\n            const response = await fetch('/studentplayground/api/admin/get-student-weekly-schedule/', {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Content-Type': 'application/json',\r\n                    'Authorization': `Bearer ${localStorage.getItem('jwtToken')}`,\r\n                },\r\n                body: JSON.stringify({\r\n                    student_id: studentId,\r\n                    search_next_week: searchNextWeek\r\n                })\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                weeklySchedule = data.classes;\r\n                messagePreview = data.message_preview;\r\n            } else {\r\n                const errorData = await response.json();\r\n                errorMessage = errorData.error || 'Failed to get weekly schedule';\r\n                weeklySchedule = [];\r\n                messagePreview = '';\r\n            }\r\n        } catch (error) {\r\n            console.error('Error getting weekly schedule:', error);\r\n            errorMessage = 'Error loading weekly schedule';\r\n            weeklySchedule = [];\r\n            messagePreview = '';\r\n        } finally {\r\n            isLoading = false;\r\n        }\r\n    }\r\n    \r\n    // Send weekly schedule SMS\r\n    async function sendWeeklySchedule() {\r\n        if (!selectedStudent) return;\r\n        \r\n        isSending = true;\r\n        successMessage = '';\r\n        errorMessage = '';\r\n        \r\n        try {\r\n            const response = await fetch('/studentplayground/api/admin/send-student-weekly-schedule/', {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Content-Type': 'application/json',\r\n                    'Authorization': `Bearer ${localStorage.getItem('jwtToken')}`,\r\n                },\r\n                body: JSON.stringify({\r\n                    student_id: selectedStudent.id,\r\n                    search_next_week: searchNextWeek\r\n                })\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                successMessage = `SMS sent successfully to ${selectedStudent.first_name} ${selectedStudent.last_name}!`;\r\n                if (data.message_sid) {\r\n                    successMessage += ` (Message ID: ${data.message_sid})`;\r\n                }\r\n            } else {\r\n                const errorData = await response.json();\r\n                errorMessage = errorData.error || 'Failed to send SMS';\r\n            }\r\n        } catch (error) {\r\n            console.error('Error sending SMS:', error);\r\n            errorMessage = 'Error sending SMS message';\r\n        } finally {\r\n            isSending = false;\r\n        }\r\n    }\r\n    \r\n    // Clear selection\r\n    function clearSelection() {\r\n        selectedStudent = null;\r\n        weeklySchedule = [];\r\n        messagePreview = '';\r\n        searchTerm = '';\r\n        searchResults = [];\r\n        successMessage = '';\r\n        errorMessage = '';\r\n    }\r\n    \r\n    // Reactive search\r\n    $: if (searchTerm) {\r\n        searchStudents();\r\n    }\r\n</script>\r\n\r\n<div class=\"send-weekly-sms-container\">\r\n    <div class=\"header\">\r\n        <h2>Send Weekly Schedule SMS</h2>\r\n        <p>Search for a student and send them their weekly class schedule via SMS</p>\r\n    </div>\r\n    \r\n    <!-- Week Selection -->\r\n    <div class=\"week-selection\">\r\n        <label class=\"checkbox-container\">\r\n            <input \r\n                type=\"checkbox\" \r\n                bind:checked={searchNextWeek}\r\n                on:change={() => {\r\n                    if (selectedStudent) {\r\n                        getWeeklySchedule(selectedStudent.id);\r\n                    }\r\n                }}\r\n            />\r\n            <span class=\"checkmark\"></span>\r\n            Search Next Week (unchecked = search remaining classes this week)\r\n        </label>\r\n    </div>\r\n    \r\n    <!-- Student Search -->\r\n    <div class=\"search-section\">\r\n        <div class=\"search-input-container\">\r\n            <input\r\n                type=\"text\"\r\n                bind:value={searchTerm}\r\n                placeholder=\"Search students by name, username, or email...\"\r\n                class=\"search-input\"\r\n                disabled={selectedStudent}\r\n            />\r\n            {#if isSearching}\r\n                <div class=\"search-spinner\">🔍</div>\r\n            {/if}\r\n        </div>\r\n        \r\n        <!-- Search Results -->\r\n        {#if searchResults.length > 0 && !selectedStudent}\r\n            <div class=\"search-results\">\r\n                {#each searchResults as student}\r\n                    <div \r\n                        class=\"search-result-item\" \r\n                        tabindex=\"0\"\r\n                        role=\"button\"\r\n                        on:click={() => selectStudent(student)}\r\n                        on:keydown={(e) => e.key === 'Enter' || e.key === ' ' ? selectStudent(student) : null}\r\n                    >\r\n                        <div class=\"student-info\">\r\n                            <div class=\"student-name\">{student.first_name} {student.last_name}</div>\r\n                            <div class=\"student-details\">@{student.username} • {student.email}</div>\r\n                            {#if student.phone_number}\r\n                                <div class=\"student-phone\">📱 {student.phone_number}</div>\r\n                            {:else}\r\n                                <div class=\"student-phone no-phone\">❌ No phone number</div>\r\n                            {/if}\r\n                        </div>\r\n                    </div>\r\n                {/each}\r\n            </div>\r\n        {/if}\r\n        \r\n        {#if searchResults.length === 0 && searchTerm.trim().length >= 2 && !isSearching && !selectedStudent}\r\n            <div class=\"no-results\">No students found matching \"{searchTerm}\"</div>\r\n        {/if}\r\n    </div>\r\n    \r\n    <!-- Selected Student & Schedule Preview -->\r\n    {#if selectedStudent}\r\n        <div class=\"selected-student-section\">\r\n            <div class=\"selected-student-header\">\r\n                <div class=\"student-card\">\r\n                    <div class=\"student-name\">{selectedStudent.first_name} {selectedStudent.last_name}</div>\r\n                    <div class=\"student-details\">@{selectedStudent.username} • {selectedStudent.email}</div>\r\n                    {#if selectedStudent.phone_number}\r\n                        <div class=\"student-phone\">📱 {selectedStudent.phone_number}</div>\r\n                    {:else}\r\n                        <div class=\"student-phone no-phone\">❌ No phone number - Cannot send SMS</div>\r\n                    {/if}\r\n                </div>\r\n                <button class=\"clear-button\" on:click={clearSelection}>Change Student</button>\r\n            </div>\r\n            \r\n            {#if isLoading}\r\n                <div class=\"loading\">Loading weekly schedule...</div>\r\n            {:else if weeklySchedule.length > 0}\r\n                <div class=\"schedule-preview\">\r\n                    <h3>Classes for {searchNextWeek ? 'Next Week' : 'This Week (Remaining)'}</h3>\r\n                    <div class=\"classes-list\">\r\n                        {#each weeklySchedule as classItem}\r\n                            <div class=\"class-item\">\r\n                                <div class=\"class-day-time\">{classItem.day} {classItem.time}</div>\r\n                                <div class=\"class-subject\">{classItem.subject}</div>\r\n                                <div class=\"class-teacher\">Teacher: {classItem.teacher}</div>\r\n                            </div>\r\n                        {/each}\r\n                    </div>\r\n                    \r\n                    <div class=\"message-preview-section\">\r\n                        <h4>SMS Message Preview:</h4>\r\n                        <div class=\"message-preview\">{messagePreview}</div>\r\n                    </div>\r\n                    \r\n                    <!-- Send Button -->\r\n                    <div class=\"send-section\">\r\n                        {#if selectedStudent.phone_number}\r\n                            <button \r\n                                class=\"send-button\" \r\n                                on:click={sendWeeklySchedule}\r\n                                disabled={isSending}\r\n                            >\r\n                                {#if isSending}\r\n                                    Sending SMS...\r\n                                {:else}\r\n                                    📱 Send Weekly Schedule SMS\r\n                                {/if}\r\n                            </button>\r\n                        {:else}\r\n                            <div class=\"no-phone-warning\">\r\n                                ❌ Cannot send SMS - Student has no phone number on file\r\n                            </div>\r\n                        {/if}\r\n                    </div>\r\n                </div>\r\n            {:else if !isLoading}\r\n                <div class=\"no-classes\">\r\n                    <h3>No Upcoming Classes</h3>\r\n                    <p>This student has no classes scheduled for the upcoming week.</p>\r\n                </div>\r\n            {/if}\r\n        </div>\r\n    {/if}\r\n    \r\n    <!-- Success/Error Messages -->\r\n    {#if successMessage}\r\n        <div class=\"success-message\">✅ {successMessage}</div>\r\n    {/if}\r\n    \r\n    {#if errorMessage}\r\n        <div class=\"error-message\">❌ {errorMessage}</div>\r\n    {/if}\r\n</div>\r\n\r\n<style>\r\n    .send-weekly-sms-container {\r\n        max-width: 800px;\r\n        margin: 0 auto;\r\n        padding: 20px;\r\n        font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\r\n    }\r\n    \r\n    .header {\r\n        text-align: center;\r\n        margin-bottom: 30px;\r\n    }\r\n    \r\n    .header h2 {\r\n        color: #333;\r\n        margin-bottom: 10px;\r\n    }\r\n    \r\n    .header p {\r\n        color: #666;\r\n        font-size: 14px;\r\n    }\r\n    \r\n    .week-selection {\r\n        margin-bottom: 25px;\r\n        padding: 15px;\r\n        background: #f8f9fa;\r\n        border-radius: 8px;\r\n        border: 1px solid #dee2e6;\r\n    }\r\n    \r\n    .checkbox-container {\r\n        display: flex;\r\n        align-items: center;\r\n        cursor: pointer;\r\n        font-size: 16px;\r\n        color: #333;\r\n        user-select: none;\r\n    }\r\n    \r\n    .checkbox-container input[type=\"checkbox\"] {\r\n        margin-right: 10px;\r\n        transform: scale(1.2);\r\n        cursor: pointer;\r\n    }\r\n    \r\n    .search-section {\r\n        margin-bottom: 30px;\r\n    }\r\n    \r\n    .search-input-container {\r\n        position: relative;\r\n        margin-bottom: 15px;\r\n    }\r\n    \r\n    .search-input {\r\n        width: 100%;\r\n        padding: 15px;\r\n        border: 2px solid #ddd;\r\n        border-radius: 8px;\r\n        font-size: 16px;\r\n        box-sizing: border-box;\r\n    }\r\n    \r\n    .search-input:focus {\r\n        outline: none;\r\n        border-color: #007bff;\r\n    }\r\n    \r\n    .search-spinner {\r\n        position: absolute;\r\n        right: 15px;\r\n        top: 50%;\r\n        transform: translateY(-50%);\r\n        font-size: 18px;\r\n    }\r\n    \r\n    .search-results {\r\n        border: 1px solid #ddd;\r\n        border-radius: 8px;\r\n        max-height: 300px;\r\n        overflow-y: auto;\r\n        background: white;\r\n        box-shadow: 0 2px 10px rgba(0,0,0,0.1);\r\n    }\r\n    \r\n    .search-result-item {\r\n        padding: 15px;\r\n        border-bottom: 1px solid #eee;\r\n        cursor: pointer;\r\n        transition: background-color 0.2s;\r\n        outline: none;\r\n    }\r\n    \r\n    .search-result-item:hover,\r\n    .search-result-item:focus {\r\n        background-color: #f5f5f5;\r\n    }\r\n    \r\n    .search-result-item:focus {\r\n        box-shadow: 0 0 0 2px #007bff;\r\n    }\r\n    \r\n    .search-result-item:last-child {\r\n        border-bottom: none;\r\n    }\r\n    \r\n    .student-info {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 5px;\r\n    }\r\n    \r\n    .student-name {\r\n        font-weight: bold;\r\n        color: #333;\r\n    }\r\n    \r\n    .student-details {\r\n        color: #666;\r\n        font-size: 14px;\r\n    }\r\n    \r\n    .student-phone {\r\n        color: #007bff;\r\n        font-size: 14px;\r\n    }\r\n    \r\n    .student-phone.no-phone {\r\n        color: #dc3545;\r\n    }\r\n    \r\n    .no-results {\r\n        padding: 20px;\r\n        text-align: center;\r\n        color: #666;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .selected-student-section {\r\n        background: #f8f9fa;\r\n        border-radius: 12px;\r\n        padding: 20px;\r\n        margin-bottom: 20px;\r\n    }\r\n    \r\n    .selected-student-header {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        margin-bottom: 20px;\r\n        padding-bottom: 15px;\r\n        border-bottom: 1px solid #dee2e6;\r\n    }\r\n    \r\n    .student-card {\r\n        flex: 1;\r\n    }\r\n    \r\n    .clear-button {\r\n        background: #6c757d;\r\n        color: white;\r\n        border: none;\r\n        padding: 8px 16px;\r\n        border-radius: 6px;\r\n        cursor: pointer;\r\n        font-size: 14px;\r\n    }\r\n    \r\n    .clear-button:hover {\r\n        background: #5a6268;\r\n    }\r\n    \r\n    .loading {\r\n        text-align: center;\r\n        padding: 40px;\r\n        color: #666;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .schedule-preview h3 {\r\n        color: #333;\r\n        margin-bottom: 15px;\r\n    }\r\n    \r\n    .classes-list {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 12px;\r\n        margin-bottom: 25px;\r\n    }\r\n    \r\n    .class-item {\r\n        background: white;\r\n        padding: 15px;\r\n        border-radius: 8px;\r\n        border: 1px solid #dee2e6;\r\n    }\r\n    \r\n    .class-day-time {\r\n        font-weight: bold;\r\n        color: #007bff;\r\n        margin-bottom: 5px;\r\n    }\r\n    \r\n    .class-subject {\r\n        font-size: 16px;\r\n        color: #333;\r\n        margin-bottom: 5px;\r\n    }\r\n    \r\n    .class-teacher {\r\n        font-size: 14px;\r\n        color: #666;\r\n    }\r\n    \r\n    .message-preview-section {\r\n        margin-bottom: 25px;\r\n    }\r\n    \r\n    .message-preview-section h4 {\r\n        color: #333;\r\n        margin-bottom: 10px;\r\n    }\r\n    \r\n    .message-preview {\r\n        background: white;\r\n        padding: 15px;\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 8px;\r\n        white-space: pre-line;\r\n        font-family: monospace;\r\n        font-size: 14px;\r\n        color: #333;\r\n        line-height: 1.4;\r\n    }\r\n    \r\n    .send-section {\r\n        text-align: center;\r\n    }\r\n    \r\n    .send-button {\r\n        background: #28a745;\r\n        color: white;\r\n        border: none;\r\n        padding: 15px 30px;\r\n        border-radius: 8px;\r\n        font-size: 16px;\r\n        font-weight: bold;\r\n        cursor: pointer;\r\n        transition: background-color 0.2s;\r\n    }\r\n    \r\n    .send-button:hover:not(:disabled) {\r\n        background: #218838;\r\n    }\r\n    \r\n    .send-button:disabled {\r\n        background: #6c757d;\r\n        cursor: not-allowed;\r\n    }\r\n    \r\n    .no-phone-warning {\r\n        background: #f8d7da;\r\n        color: #721c24;\r\n        padding: 15px;\r\n        border-radius: 8px;\r\n        border: 1px solid #f5c6cb;\r\n        text-align: center;\r\n        font-weight: bold;\r\n    }\r\n    \r\n    .no-classes {\r\n        text-align: center;\r\n        padding: 40px;\r\n    }\r\n    \r\n    .no-classes h3 {\r\n        color: #666;\r\n        margin-bottom: 10px;\r\n    }\r\n    \r\n    .no-classes p {\r\n        color: #999;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .success-message {\r\n        background: #d4edda;\r\n        color: #155724;\r\n        padding: 15px;\r\n        border-radius: 8px;\r\n        border: 1px solid #c3e6cb;\r\n        margin-top: 20px;\r\n        text-align: center;\r\n        font-weight: bold;\r\n    }\r\n    \r\n    .error-message {\r\n        background: #f8d7da;\r\n        color: #721c24;\r\n        padding: 15px;\r\n        border-radius: 8px;\r\n        border: 1px solid #f5c6cb;\r\n        margin-top: 20px;\r\n        text-align: center;\r\n        font-weight: bold;\r\n    }\r\n</style>\r\n","<script>\r\n    import { createEventDispatcher, onDestroy } from 'svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n\r\n    export let channel;\r\n    export let inactive = false;\r\n    $: studentGroup = inactive ? 'Inactive students' : 'Active students';\r\n    const dispatch = createEventDispatcher();\r\n    let startDate = '';\r\n    let endDate = '';\r\n    let isLoading = false;\r\n    let errorMessage = '';\r\n    let appliedRange = '';\r\n    let requestVersion = 0;\r\n\r\n    function resetRange() {\r\n        requestVersion += 1;\r\n        isLoading = false;\r\n        errorMessage = '';\r\n        appliedRange = '';\r\n        dispatch('recipients', []);\r\n    }\r\n\r\n    async function applyRange() {\r\n        resetRange();\r\n        if (!startDate || !endDate) {\r\n            errorMessage = 'Choose both a start date and an end date.';\r\n            return;\r\n        }\r\n        if (startDate > endDate) {\r\n            errorMessage = 'Start date must be on or before end date.';\r\n            return;\r\n        }\r\n        const version = requestVersion;\r\n        const range = `${startDate} to ${endDate}`;\r\n        isLoading = true;\r\n        try {\r\n            const query = new URLSearchParams({ start_date: startDate, end_date: endDate });\r\n            const response = await fetch(`${getApiBase()}/studentplayground/api/users-for-${channel}-selection/?${query}`, {\r\n                headers: { Authorization: `Bearer ${localStorage.getItem('jwtToken')}` },\r\n            });\r\n            const data = await response.json();\r\n            if (!response.ok) throw new Error(data.message || `Failed to load ${studentGroup.toLowerCase()}`);\r\n            if (version !== requestVersion) return;\r\n            appliedRange = range;\r\n            dispatch('recipients', (inactive ? data.inactive_students : data.active_students) || []);\r\n        } catch (error) {\r\n            if (version === requestVersion) errorMessage = error.message;\r\n        } finally {\r\n            if (version === requestVersion) isLoading = false;\r\n        }\r\n    }\r\n\r\n    onDestroy(() => { requestVersion += 1; });\r\n</script>\r\n\r\n<div class=\"date-range-filter\">\r\n    <p>{inactive ? 'Students with no scheduled classes' : 'Students with at least one scheduled class'} in the chosen dates (Vilnius time), including both dates. Cancelled classes and cancelled student places are excluded.</p>\r\n    <div class=\"date-range-controls\">\r\n        <label>Start date <input type=\"date\" bind:value={startDate} on:input={resetRange} /></label>\r\n        <label>End date <input type=\"date\" bind:value={endDate} on:input={resetRange} /></label>\r\n        <button type=\"button\" on:click={applyRange} disabled={isLoading}>Apply date range</button>\r\n    </div>\r\n    {#if isLoading}<p role=\"status\">Loading {studentGroup.toLowerCase()}...</p>{/if}\r\n    {#if appliedRange}<p role=\"status\">{studentGroup}: {appliedRange}</p>{/if}\r\n    {#if errorMessage}<p role=\"alert\">{errorMessage}</p>{/if}\r\n</div>\r\n\r\n<style>\r\n    .date-range-filter { margin: 0 0 1rem; padding: 1rem; border: 1px solid #ddd; border-radius: 6px; }\r\n    p { margin: 0 0 0.75rem; }\r\n    .date-range-controls { display: flex; flex-wrap: wrap; align-items: end; gap: 0.75rem; }\r\n    label { display: flex; flex-direction: column; gap: 0.3rem; }\r\n    input, button { padding: 0.6rem; font: inherit; border: 1px solid #aaa; border-radius: 4px; }\r\n    button { cursor: pointer; background: #f5f5f5; }\r\n    button:disabled { cursor: wait; opacity: 0.6; }\r\n    [role='alert'] { color: #b42318; margin-top: 0.75rem; }\r\n    [role='status'] { margin-top: 0.75rem; }\r\n</style>\r\n","export function filterRecipients(recipients, searchQuery, getSearchText) {\r\n    const query = searchQuery.trim().toLowerCase();\r\n    if (!query) return [...recipients];\r\n    return recipients.filter(recipient => getSearchText(recipient).includes(query));\r\n}\r\n\r\nexport function toggleSelection(selectedIds, id) {\r\n    const next = new Set(selectedIds);\r\n    if (next.has(id)) next.delete(id);\r\n    else next.add(id);\r\n    return next;\r\n}\r\n\r\nexport function selectVisible(selectedIds, visibleRecipients) {\r\n    const next = new Set(selectedIds);\r\n    for (const recipient of visibleRecipients) next.add(recipient.id);\r\n    return next;\r\n}\r\n\r\nexport function selectedRecipients(recipients, selectedIds) {\r\n    return recipients.filter(recipient => selectedIds.has(recipient.id));\r\n}\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import ActiveStudentDateFilter from './ActiveStudentDateFilter.svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n    import {\r\n        filterRecipients,\r\n        selectedRecipients,\r\n        selectVisible,\r\n        toggleSelection,\r\n    } from './recipientSelection.js';\r\n\r\n    // State variables\r\n    let users = [];\r\n    let dateStudents = [];\r\n    let inactiveMonthParents = [];\r\n    let inactiveMonthParentsGrade12OrBelow = [];\r\n    let filteredUsers = [];\r\n    let selectedUserIds = new Set();\r\n    let isLoading = false;\r\n    let isSending = false;\r\n    let errorMessage = '';\r\n    let successMessage = '';\r\n    let searchQuery = '';\r\n    \r\n    // Filter state\r\n    let activeFilter = 'all'; // 'all', 'students', 'teachers', 'student_spreadsheet'\r\n    let emailTarget = 'student';\r\n    \r\n    // Email form data\r\n    let emailSubject = '';\r\n    let emailMessage = '';\r\n    \r\n    // Email progress logging\r\n    let successLogs = [];\r\n    let failedEmails = [];\r\n    let showProgressBox = false;\r\n    \r\n    // Email editing\r\n    let userEmailOverrides = new Map(); // Map of user_id -> custom_email\r\n    let editingEmailUserId = null;\r\n    \r\n    // Student spreadsheet emails\r\n    let spreadsheetEmails = [];\r\n    let spreadsheetEmailsLoaded = false;\r\n\r\n    const apiBase = getApiBase();\r\n    \r\n    // Load users on component mount\r\n    onMount(() => {\r\n        loadUsers();\r\n    });\r\n    \r\n    async function loadUsers() {\r\n        isLoading = true;\r\n        errorMessage = '';\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/users-for-email-selection/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                const errorData = await response.json();\r\n                throw new Error(errorData.message || 'Failed to load users');\r\n            }\r\n            \r\n            const data = await response.json();\r\n            users = data.users || [];\r\n            inactiveMonthParents = data.inactive_month_parents || [];\r\n            inactiveMonthParentsGrade12OrBelow = data.inactive_month_parents_grade_12_or_below || [];\r\n            applyFilters();\r\n            \r\n        } catch (error) {\r\n            errorMessage = `Error loading users: ${error.message}`;\r\n            console.error('Error loading users:', error);\r\n        } finally {\r\n            isLoading = false;\r\n        }\r\n    }\r\n    \r\n    function getBaseListForFilter() {\r\n        if (activeFilter === 'active_date_students' || activeFilter === 'inactive_date_students') return dateStudents;\r\n        if (activeFilter === 'inactive_month_parents') {\r\n            return [...inactiveMonthParents];\r\n        }\r\n        if (activeFilter === 'inactive_month_parents_grade_12_or_below') {\r\n            return [...inactiveMonthParentsGrade12OrBelow];\r\n        }\r\n        if (activeFilter === 'student_spreadsheet') return [];\r\n\r\n        let recipients = [...users];\r\n        if (activeFilter === 'students') {\r\n            recipients = recipients.filter(user => user.user_type === 'student');\r\n        } else if (activeFilter === 'teachers') {\r\n            recipients = recipients.filter(user => user.user_type === 'teacher');\r\n        }\r\n        return recipients;\r\n    }\r\n\r\n    function userSearchText(user) {\r\n        return [\r\n            user.first_name,\r\n            user.last_name,\r\n            user.email,\r\n            user.username,\r\n            getUserEmail(user),\r\n        ].filter(Boolean).join(' ').toLowerCase();\r\n    }\r\n\r\n    function applyFilters() {\r\n        filteredUsers = filterRecipients(getBaseListForFilter(), searchQuery, userSearchText);\r\n    }\r\n    \r\n    function setFilter(filter) {\r\n        if (filter !== activeFilter) {\r\n            emailTarget = ['inactive_month_parents', 'inactive_month_parents_grade_12_or_below'].includes(filter) ? 'parent' : 'student';\r\n            userEmailOverrides = new Map();\r\n            editingEmailUserId = null;\r\n        }\r\n        if (filter !== activeFilter) dateStudents = [];\r\n        if (filter !== activeFilter) selectedUserIds = new Set();\r\n        activeFilter = filter;\r\n        if (filter === 'student_spreadsheet' && !spreadsheetEmailsLoaded) {\r\n            loadSpreadsheetEmails();\r\n        }\r\n        applyFilters();\r\n    }\r\n\r\n    function updateDateRecipients(event) {\r\n        dateStudents = event.detail;\r\n        selectedUserIds = new Set();\r\n        applyFilters();\r\n    }\r\n    \r\n    async function loadSpreadsheetEmails() {\r\n        isLoading = true;\r\n        errorMessage = '';\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/student-spreadsheet-emails/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                const errorData = await response.json();\r\n                throw new Error(errorData.message || 'Failed to load spreadsheet emails');\r\n            }\r\n            \r\n            const data = await response.json();\r\n            spreadsheetEmails = data.emails || [];\r\n            spreadsheetEmailsLoaded = true;\r\n            \r\n            // Auto-select all spreadsheet emails\r\n            selectedUserIds = new Set(spreadsheetEmails.map((_, index) => `spreadsheet_${index}`));\r\n            \r\n        } catch (error) {\r\n            errorMessage = `Error loading spreadsheet emails: ${error.message}`;\r\n            console.error('Error loading spreadsheet emails:', error);\r\n        } finally {\r\n            isLoading = false;\r\n        }\r\n    }\r\n    \r\n    function toggleUserSelection(userId) {\r\n        selectedUserIds = toggleSelection(selectedUserIds, userId);\r\n    }\r\n    \r\n    function selectAll() {\r\n        selectedUserIds = selectVisible(selectedUserIds, filteredUsers);\r\n    }\r\n    \r\n    function clearAll() {\r\n        selectedUserIds = new Set();\r\n    }\r\n    \r\n    function getSelectedUsers() {\r\n        return selectedRecipients(getBaseListForFilter(), selectedUserIds);\r\n    }\r\n    \r\n    function getUserEmail(user) {\r\n        const destination = emailTarget === 'parent'\r\n            ? (user.parent_email ?? (user.user_type === 'parent' ? user.email : ''))\r\n            : (user.student_email ?? (user.user_type === 'parent' ? '' : user.email));\r\n        return userEmailOverrides.get(user.id) || destination;\r\n    }\r\n\r\n    function changeEmailTarget() {\r\n        clearAll();\r\n        userEmailOverrides = new Map();\r\n        editingEmailUserId = null;\r\n        applyFilters();\r\n    }\r\n    \r\n    function startEditingEmail(userId) {\r\n        editingEmailUserId = userId;\r\n    }\r\n    \r\n    function saveEmailEdit(userId, newEmail) {\r\n        if (newEmail.trim()) {\r\n            userEmailOverrides.set(userId, newEmail.trim());\r\n            userEmailOverrides = userEmailOverrides; // Trigger reactivity\r\n        } else {\r\n            userEmailOverrides.delete(userId);\r\n            userEmailOverrides = userEmailOverrides; // Trigger reactivity\r\n        }\r\n        editingEmailUserId = null;\r\n    }\r\n    \r\n    function cancelEmailEdit() {\r\n        editingEmailUserId = null;\r\n    }\r\n    \r\n    function resetEmailOverride(userId) {\r\n        userEmailOverrides.delete(userId);\r\n        userEmailOverrides = userEmailOverrides; // Trigger reactivity\r\n    }\r\n    \r\n    // Custom focus directive\r\n    function focusInput(element) {\r\n        setTimeout(() => element.focus(), 10);\r\n    }\r\n    \r\n    function addSuccessLog(emailAddress) {\r\n        successLogs = [...successLogs, { \r\n            email: emailAddress, \r\n            timestamp: new Date() \r\n        }];\r\n        // Auto-scroll to bottom of progress box\r\n        setTimeout(() => {\r\n            const progressBox = document.querySelector('.progress-logs');\r\n            if (progressBox) {\r\n                progressBox.scrollTop = progressBox.scrollHeight;\r\n            }\r\n        }, 10);\r\n    }\r\n    \r\n    async function sendEmailsOneByOne() {\r\n        if (activeFilter === 'student_spreadsheet' && spreadsheetEmails.length === 0) {\r\n            errorMessage = 'No emails found in student spreadsheet';\r\n            return;\r\n        } else if (activeFilter !== 'student_spreadsheet' && selectedUserIds.size === 0) {\r\n            errorMessage = 'Please select at least one user';\r\n            return;\r\n        }\r\n        \r\n        if (!emailSubject.trim()) {\r\n            errorMessage = 'Email subject is required';\r\n            return;\r\n        }\r\n        \r\n        if (!emailMessage.trim()) {\r\n            errorMessage = 'Email message is required';\r\n            return;\r\n        }\r\n        \r\n        isSending = true;\r\n        showProgressBox = true;\r\n        errorMessage = '';\r\n        successMessage = '';\r\n        successLogs = [];\r\n        failedEmails = [];\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        \r\n        let successCount = 0;\r\n        let failureCount = 0;\r\n        const attemptedEmailAddresses = new Set();\r\n\r\n        function shouldSendTo(emailAddress) {\r\n            const normalizedEmail = (emailAddress || '').trim().toLowerCase();\r\n            if (!normalizedEmail || attemptedEmailAddresses.has(normalizedEmail)) {\r\n                return false;\r\n            }\r\n            attemptedEmailAddresses.add(normalizedEmail);\r\n            return true;\r\n        }\r\n        \r\n        // Handle spreadsheet mode differently\r\n        if (activeFilter === 'student_spreadsheet') {\r\n            // Send to all spreadsheet emails directly\r\n            for (const email of spreadsheetEmails) {\r\n                if (!email) {\r\n                    failedEmails.push('Empty email address from spreadsheet');\r\n                    failureCount++;\r\n                    continue;\r\n                }\r\n\r\n                if (!shouldSendTo(email)) {\r\n                    continue;\r\n                }\r\n                \r\n                try {\r\n                    const response = await fetch(`${apiBase}/studentplayground/api/send-bulk-emails/`, {\r\n                        method: 'POST',\r\n                        headers: {\r\n                            'Authorization': `Bearer ${token}`,\r\n                            'Content-Type': 'application/json'\r\n                        },\r\n                        body: JSON.stringify({\r\n                            user_ids: [], // Empty user IDs for spreadsheet mode\r\n                            subject: emailSubject.trim(),\r\n                            message: emailMessage.trim(),\r\n                            custom_email: email\r\n                        })\r\n                    });\r\n                    \r\n                    const data = await response.json();\r\n                    \r\n                    if (response.ok && data.successful_sends > 0) {\r\n                        addSuccessLog(email);\r\n                        successCount++;\r\n                    } else {\r\n                        failedEmails.push(email);\r\n                        failureCount++;\r\n                    }\r\n                    \r\n                    // Small delay between sends to avoid overwhelming the server\r\n                    await new Promise(resolve => setTimeout(resolve, 100));\r\n                    \r\n                } catch (error) {\r\n                    failedEmails.push(email);\r\n                    failureCount++;\r\n                    console.error(`Error sending email to ${email}:`, error);\r\n                }\r\n            }\r\n        } else {\r\n            // Handle regular user mode\r\n            const target = emailTarget;\r\n            const selectedUsers = getSelectedUsers().map(user => ({\r\n                user,\r\n                emailToUse: getUserEmail(user),\r\n                customEmail: userEmailOverrides.get(user.id) || null,\r\n            }));\r\n            \r\n            for (const { user, emailToUse, customEmail } of selectedUsers) {\r\n                if (!emailToUse) {\r\n                    failedEmails.push(`${user.first_name} ${user.last_name} (no email address)`);\r\n                    failureCount++;\r\n                    continue;\r\n                }\r\n\r\n                if (!shouldSendTo(emailToUse)) {\r\n                    continue;\r\n                }\r\n            \r\n            try {\r\n                const response = await fetch(`${apiBase}/studentplayground/api/send-bulk-emails/`, {\r\n                    method: 'POST',\r\n                    headers: {\r\n                        'Authorization': `Bearer ${token}`,\r\n                        'Content-Type': 'application/json'\r\n                    },\r\n                    body: JSON.stringify({\r\n                        user_ids: user.user_type === 'parent' ? [] : [user.id],\r\n                        email_target: target,\r\n                        subject: emailSubject.trim(),\r\n                        message: emailMessage.trim(),\r\n                        custom_email: user.user_type === 'parent'\r\n                            ? emailToUse\r\n                            : customEmail\r\n                    })\r\n                });\r\n                \r\n                const data = await response.json();\r\n                \r\n                if (response.ok && data.successful_sends > 0) {\r\n                    addSuccessLog(emailToUse);\r\n                    successCount++;\r\n                } else {\r\n                    failedEmails.push(emailToUse);\r\n                    failureCount++;\r\n                }\r\n                \r\n                // Small delay between sends to avoid overwhelming the server\r\n                await new Promise(resolve => setTimeout(resolve, 100));\r\n                \r\n            } catch (error) {\r\n                failedEmails.push(emailToUse);\r\n                failureCount++;\r\n                console.error(`Error sending email to ${emailToUse}:`, error);\r\n            }\r\n            }\r\n        }\r\n        \r\n        // Final processing completed\r\n        \r\n        isSending = false;\r\n        \r\n        // Set success message\r\n        if (successCount > 0) {\r\n            successMessage = `Successfully sent ${successCount} emails. ${failureCount > 0 ? `${failureCount} failed.` : ''}`;\r\n        }\r\n        \r\n        // Clear form on success\r\n        if (successCount > 0) {\r\n            emailSubject = '';\r\n            emailMessage = '';\r\n            selectedUserIds = new Set();\r\n        }\r\n    }\r\n    \r\n    // Keep the old function for backward compatibility, but make it call the new one\r\n    async function sendEmails() {\r\n        return sendEmailsOneByOne();\r\n    }\r\n    \r\n    // Reactive statements - trigger filtering when any relevant variable changes\r\n    $: searchQuery, activeFilter, emailTarget, users, inactiveMonthParents, inactiveMonthParentsGrade12OrBelow, userEmailOverrides, applyFilters();\r\n</script>\r\n\r\n<div class=\"select-users-email-container\">\r\n    <h3>Send Email to Selected Users</h3>\r\n    \r\n    <!-- Filter buttons -->\r\n    <div class=\"filter-buttons\">\r\n        <button class=\"filter-btn {activeFilter === 'active_date_students' ? 'active' : ''}\" on:click={() => setFilter('active_date_students')}>\r\n            Active Students by Date ({activeFilter === 'active_date_students' ? dateStudents.length : 0})\r\n        </button>\r\n        <button class=\"filter-btn {activeFilter === 'inactive_date_students' ? 'active' : ''}\" on:click={() => setFilter('inactive_date_students')}>\r\n            Inactive Students by Date ({activeFilter === 'inactive_date_students' ? dateStudents.length : 0})\r\n        </button>\r\n        <button \r\n            class=\"filter-btn {activeFilter === 'all' ? 'active' : ''}\"\r\n            on:click={() => setFilter('all')}\r\n        >\r\n            All Users ({users.length})\r\n        </button>\r\n        <button \r\n            class=\"filter-btn {activeFilter === 'students' ? 'active' : ''}\"\r\n            on:click={() => setFilter('students')}\r\n        >\r\n            Students ({users.filter(u => u.user_type === 'student').length})\r\n        </button>\r\n        <button \r\n            class=\"filter-btn {activeFilter === 'teachers' ? 'active' : ''}\"\r\n            on:click={() => setFilter('teachers')}\r\n        >\r\n            Teachers ({users.filter(u => u.user_type === 'teacher').length})\r\n        </button>\r\n        <button\r\n            class=\"filter-btn {activeFilter === 'inactive_month_parents' ? 'active' : ''}\"\r\n            on:click={() => setFilter('inactive_month_parents')}\r\n        >\r\n            Inactive This Month Parents ({inactiveMonthParents.length})\r\n        </button>\r\n        <button\r\n            class=\"filter-btn {activeFilter === 'inactive_month_parents_grade_12_or_below' ? 'active' : ''}\"\r\n            on:click={() => setFilter('inactive_month_parents_grade_12_or_below')}\r\n        >\r\n            Inactive Parents Grade 12 or Below ({inactiveMonthParentsGrade12OrBelow.length})\r\n        </button>\r\n        <button \r\n            class=\"filter-btn {activeFilter === 'student_spreadsheet' ? 'active' : ''}\"\r\n            on:click={() => setFilter('student_spreadsheet')}\r\n        >\r\n            Student Spreadsheet ({spreadsheetEmailsLoaded ? spreadsheetEmails.length : '...'})\r\n        </button>\r\n    </div>\r\n    \r\n    {#if activeFilter !== 'student_spreadsheet'}\r\n        <div class=\"form-group\">\r\n            <label for=\"email-recipient-target\">Send to</label>\r\n            <select id=\"email-recipient-target\" class=\"form-input\" bind:value={emailTarget} on:change={changeEmailTarget} disabled={isSending}>\r\n                <option value=\"student\">{activeFilter === 'teachers' ? 'Teacher email' : 'Student email'}</option>\r\n                <option value=\"parent\">Parent email</option>\r\n            </select>\r\n            <p>Only the selected email is used. Missing addresses are reported, and shared addresses receive one message.</p>\r\n        </div>\r\n    {/if}\r\n\r\n    {#if activeFilter === 'active_date_students' || activeFilter === 'inactive_date_students'}\r\n        {#key activeFilter}\r\n            <ActiveStudentDateFilter channel=\"email\" inactive={activeFilter === 'inactive_date_students'} on:recipients={updateDateRecipients} />\r\n        {/key}\r\n    {/if}\r\n\r\n    <!-- Search bar -->\r\n    <div class=\"search-container\">\r\n        <input \r\n            type=\"text\" \r\n            placeholder=\"Search by name, email, or username...\" \r\n            bind:value={searchQuery}\r\n            class=\"search-input\"\r\n        />\r\n    </div>\r\n    \r\n    <!-- Selection controls -->\r\n    <div class=\"selection-controls\">\r\n        <button on:click={selectAll} class=\"selection-btn\">\r\n            Select All Visible ({filteredUsers.length})\r\n        </button>\r\n        <button on:click={clearAll} class=\"selection-btn\">\r\n            Clear All\r\n        </button>\r\n        <span class=\"selected-count\">\r\n            Selected: {selectedUserIds.size} users\r\n        </span>\r\n    </div>\r\n    \r\n    <!-- Users list -->\r\n    {#if isLoading}\r\n        <div class=\"loading\">Loading {activeFilter === 'student_spreadsheet' ? 'spreadsheet emails' : 'users'}...</div>\r\n    {:else if activeFilter === 'student_spreadsheet'}\r\n        {#if spreadsheetEmails.length === 0}\r\n            <div class=\"no-users\">No emails found in student spreadsheet</div>\r\n        {:else}\r\n            <div class=\"spreadsheet-info\">\r\n                <p><strong>{spreadsheetEmails.length} unique billing emails found in student spreadsheet</strong></p>\r\n                <p>All emails have been automatically selected for sending.</p>\r\n            </div>\r\n            <div class=\"users-list\">\r\n                {#each spreadsheetEmails as email, index (`spreadsheet_${index}`)}\r\n                    <div class=\"user-item selected\">\r\n                        <label class=\"user-label\">\r\n                            <input \r\n                                type=\"checkbox\" \r\n                                checked={true}\r\n                                disabled={true}\r\n                            />\r\n                            <div class=\"user-info\">\r\n                                <div class=\"user-name\">\r\n                                    Spreadsheet Email #{index + 1}\r\n                                    <span class=\"user-type spreadsheet\">spreadsheet</span>\r\n                                </div>\r\n                                <div class=\"user-email-container\">\r\n                                    <div class=\"user-email-display\">\r\n                                        <span class=\"user-email\">{email}</span>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </label>\r\n                    </div>\r\n                {/each}\r\n            </div>\r\n        {/if}\r\n    {:else if filteredUsers.length === 0}\r\n        <div class=\"no-users\">No users found</div>\r\n    {:else}\r\n        <div class=\"users-list\">\r\n            {#each filteredUsers as user (user.id)}\r\n                <div class=\"user-item {selectedUserIds.has(user.id) ? 'selected' : ''}\">\r\n                    <label class=\"user-label\">\r\n                        <input \r\n                            type=\"checkbox\" \r\n                            checked={selectedUserIds.has(user.id)}\r\n                            on:change={() => toggleUserSelection(user.id)}\r\n                        />\r\n                        <div class=\"user-info\">\r\n                            <div class=\"user-name\">\r\n                                {user.first_name} {user.last_name}\r\n                                <span class=\"user-type {user.user_type}\">{user.user_type}</span>\r\n                            </div>\r\n                            <div class=\"user-email-container\">\r\n                                {#if editingEmailUserId === user.id}\r\n                                    <div class=\"email-edit-container\">\r\n                                        <input \r\n                                            type=\"email\" \r\n                                            value={getUserEmail(user)}\r\n                                            class=\"email-edit-input\"\r\n                                            placeholder=\"Enter email address\"\r\n                                            on:keydown={(e) => {\r\n                                                if (e.key === 'Enter') {\r\n                                                    saveEmailEdit(user.id, e.target.value);\r\n                                                } else if (e.key === 'Escape') {\r\n                                                    cancelEmailEdit();\r\n                                                }\r\n                                            }}\r\n                                            on:blur={(e) => saveEmailEdit(user.id, e.target.value)}\r\n                                            use:focusInput\r\n                                        />\r\n                                        <button \r\n                                            class=\"email-edit-btn save\"\r\n                                            on:click={(e) => {\r\n                                                e.stopPropagation();\r\n                                                const input = e.target.parentElement.querySelector('input');\r\n                                                saveEmailEdit(user.id, input.value);\r\n                                            }}\r\n                                        >\r\n                                            ✓\r\n                                        </button>\r\n                                        <button \r\n                                            class=\"email-edit-btn cancel\"\r\n                                            on:click={(e) => {\r\n                                                e.stopPropagation();\r\n                                                cancelEmailEdit();\r\n                                            }}\r\n                                        >\r\n                                            ×\r\n                                        </button>\r\n                                    </div>\r\n                                {:else}\r\n                                    <div class=\"user-email-display\">\r\n                                        <span class=\"user-email {userEmailOverrides.has(user.id) ? 'custom-email' : ''}\">\r\n                                            {getUserEmail(user) || (emailTarget === 'parent' ? 'No parent email' : 'No student email')}\r\n                                            {#if userEmailOverrides.has(user.id)}\r\n                                                <span class=\"email-status\">(custom)</span>\r\n                                            {/if}\r\n                                        </span>\r\n                                        <button \r\n                                            class=\"edit-email-btn\"\r\n                                            on:click={(e) => {\r\n                                                e.stopPropagation();\r\n                                                startEditingEmail(user.id);\r\n                                            }}\r\n                                            title=\"Edit email address\"\r\n                                        >\r\n                                            ✏️\r\n                                        </button>\r\n                                        {#if userEmailOverrides.has(user.id)}\r\n                                            <button \r\n                                                class=\"reset-email-btn\"\r\n                                                on:click={(e) => {\r\n                                                    e.stopPropagation();\r\n                                                    resetEmailOverride(user.id);\r\n                                                }}\r\n                                                title=\"Reset to original email\"\r\n                                            >\r\n                                                ↺\r\n                                            </button>\r\n                                        {/if}\r\n                                    </div>\r\n                                {/if}\r\n                            </div>\r\n                        </div>\r\n                    </label>\r\n                </div>\r\n            {/each}\r\n        </div>\r\n    {/if}\r\n    \r\n    <!-- Email form -->\r\n    {#if selectedUserIds.size > 0}\r\n        <div class=\"email-form\">\r\n            <h4>Email Details</h4>\r\n            \r\n            <div class=\"form-group\">\r\n                <label for=\"email-subject\">Subject:</label>\r\n                <input \r\n                    id=\"email-subject\"\r\n                    type=\"text\" \r\n                    bind:value={emailSubject}\r\n                    placeholder=\"Enter email subject\"\r\n                    class=\"form-input\"\r\n                />\r\n            </div>\r\n            \r\n            <div class=\"form-group\">\r\n                <label for=\"email-message\">Message:</label>\r\n                <textarea \r\n                    id=\"email-message\"\r\n                    bind:value={emailMessage}\r\n                    placeholder=\"Enter email message\"\r\n                    rows=\"8\"\r\n                    class=\"form-textarea\"\r\n                ></textarea>\r\n            </div>\r\n            \r\n            <div class=\"selected-preview\">\r\n                {#if activeFilter === 'student_spreadsheet'}\r\n                    <h5>Sending to {spreadsheetEmails.length} spreadsheet emails:</h5>\r\n                    <div class=\"preview-list\">\r\n                        {#each spreadsheetEmails as email}\r\n                            <span class=\"preview-user\">Spreadsheet Email ({email})</span>\r\n                        {/each}\r\n                    </div>\r\n                {:else}\r\n                    <h5>Sending to {selectedUserIds.size} users:</h5>\r\n                    <div class=\"preview-list\">\r\n                        {#each getSelectedUsers() as user}\r\n                            <span class=\"preview-user\">\r\n                                {user.first_name} {user.last_name} ({getUserEmail(user)})\r\n                                {#if userEmailOverrides.has(user.id)}\r\n                                    <span class=\"custom-indicator\">*</span>\r\n                                {/if}\r\n                            </span>\r\n                        {/each}\r\n                    </div>\r\n                {/if}\r\n            </div>\r\n            \r\n            <button \r\n                on:click={sendEmails}\r\n                disabled={isSending || (activeFilter === 'student_spreadsheet' ? spreadsheetEmails.length === 0 : selectedUserIds.size === 0)}\r\n                class=\"send-btn {isSending ? 'sending' : ''}\"\r\n            >\r\n                {#if isSending}\r\n                    Sending...\r\n                {:else}\r\n                    Send Emails\r\n                {/if}\r\n            </button>\r\n        </div>\r\n    {/if}\r\n    \r\n    <!-- Email Progress Display -->\r\n    {#if showProgressBox && (successLogs.length > 0 || isSending)}\r\n        <div class=\"progress-container\">\r\n            <div class=\"progress-header\">\r\n                <h4>Email Sending Progress</h4>\r\n                <button on:click={() => showProgressBox = false} class=\"close-progress\">×</button>\r\n            </div>\r\n            <div class=\"progress-logs\">\r\n                {#if isSending && successLogs.length === 0}\r\n                    <div class=\"progress-message\">Starting email sending process...</div>\r\n                {/if}\r\n                {#each successLogs as log}\r\n                    <div class=\"success-entry\">\r\n                        <span class=\"timestamp\">[{log.timestamp.toLocaleTimeString()}]</span>\r\n                        <span class=\"success-message\">Email SUCCESSFULLY sent to: {log.email}</span>\r\n                    </div>\r\n                {/each}\r\n                {#if !isSending && successLogs.length > 0}\r\n                    <div class=\"completion-message\">\r\n                        Email sending completed. {successLogs.length} emails sent successfully.\r\n                    </div>\r\n                {/if}\r\n            </div>\r\n        </div>\r\n    {/if}\r\n    \r\n    <!-- Final failed emails summary -->\r\n    {#if !isSending && failedEmails.length > 0 && showProgressBox}\r\n        <div class=\"failed-summary\">\r\n            <h4>Failed Email Summary</h4>\r\n            <p>The following email addresses failed to receive the email:</p>\r\n            <ul class=\"failed-list\">\r\n                {#each failedEmails as email}\r\n                    <li>{email}</li>\r\n                {/each}\r\n            </ul>\r\n            <p class=\"contact-note\">Please contact Herkus for assistance with these failed emails.</p>\r\n        </div>\r\n    {/if}\r\n    \r\n    <!-- Messages -->\r\n    {#if errorMessage}\r\n        <div class=\"error-message\">{errorMessage}</div>\r\n    {/if}\r\n    \r\n    {#if successMessage}\r\n        <div class=\"success-message\">{successMessage}</div>\r\n    {/if}\r\n</div>\r\n\r\n<style>\r\n    .select-users-email-container {\r\n        max-width: 800px;\r\n        margin: 0 auto;\r\n        padding: 20px;\r\n    }\r\n    \r\n    .filter-buttons {\r\n        display: flex;\r\n        gap: 10px;\r\n        margin-bottom: 20px;\r\n        flex-wrap: wrap;\r\n    }\r\n    \r\n    .filter-btn {\r\n        padding: 8px 16px;\r\n        border: 1px solid #ddd;\r\n        background: white;\r\n        cursor: pointer;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .filter-btn.active {\r\n        background: #fab45a;\r\n        color: black;\r\n        border-color: #fab45a;\r\n    }\r\n    \r\n    .filter-btn:hover:not(.active) {\r\n        background: #f5f5f5;\r\n    }\r\n    \r\n    .search-container {\r\n        margin-bottom: 15px;\r\n    }\r\n    \r\n    .search-input {\r\n        width: 100%;\r\n        padding: 10px;\r\n        border: 1px solid #ddd;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n    }\r\n    \r\n    .selection-controls {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n        margin-bottom: 20px;\r\n        flex-wrap: wrap;\r\n    }\r\n    \r\n    .selection-btn {\r\n        padding: 6px 12px;\r\n        border: 1px solid #007bff;\r\n        background: white;\r\n        color: #007bff;\r\n        cursor: pointer;\r\n        border-radius: 4px;\r\n        font-size: 13px;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .selection-btn:hover {\r\n        background: #007bff;\r\n        color: white;\r\n    }\r\n    \r\n    .selected-count {\r\n        font-weight: bold;\r\n        color: #555;\r\n        margin-left: auto;\r\n    }\r\n    \r\n    .loading, .no-users {\r\n        text-align: center;\r\n        padding: 20px;\r\n        color: #666;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .users-list {\r\n        max-height: 400px;\r\n        overflow-y: auto;\r\n        border: 1px solid #ddd;\r\n        border-radius: 6px;\r\n        margin-bottom: 20px;\r\n    }\r\n    \r\n    .user-item {\r\n        border-bottom: 1px solid #eee;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n    \r\n    .user-item:last-child {\r\n        border-bottom: none;\r\n    }\r\n    \r\n    .user-item.selected {\r\n        background-color: #f0f8ff;\r\n    }\r\n    \r\n    .user-item:hover {\r\n        background-color: #f9f9f9;\r\n    }\r\n    \r\n    .user-item.selected:hover {\r\n        background-color: #e6f3ff;\r\n    }\r\n    \r\n    .user-label {\r\n        display: flex;\r\n        align-items: center;\r\n        padding: 12px;\r\n        cursor: pointer;\r\n        gap: 12px;\r\n    }\r\n    \r\n    .user-info {\r\n        flex: 1;\r\n    }\r\n    \r\n    .user-name {\r\n        font-weight: 500;\r\n        margin-bottom: 4px;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n    }\r\n    \r\n    .user-type {\r\n        padding: 2px 8px;\r\n        border-radius: 12px;\r\n        font-size: 11px;\r\n        font-weight: bold;\r\n        text-transform: uppercase;\r\n    }\r\n    \r\n    .user-type.student {\r\n        background-color: #e3f2fd;\r\n        color: #1976d2;\r\n    }\r\n    \r\n    .user-type.teacher {\r\n        background-color: #f3e5f5;\r\n        color: #7b1fa2;\r\n    }\r\n    \r\n    .user-type.spreadsheet {\r\n        background-color: #fff3cd;\r\n        color: #856404;\r\n    }\r\n    \r\n    .spreadsheet-info {\r\n        background: #e3f2fd;\r\n        padding: 15px;\r\n        border-radius: 6px;\r\n        margin-bottom: 15px;\r\n        border: 1px solid #90caf9;\r\n    }\r\n    \r\n    .spreadsheet-info p {\r\n        margin: 5px 0;\r\n        color: #1565c0;\r\n    }\r\n    \r\n    .spreadsheet-info strong {\r\n        color: #0d47a1;\r\n    }\r\n    \r\n    .user-email-container {\r\n        flex: 1;\r\n    }\r\n    \r\n    .user-email-display {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 6px;\r\n    }\r\n    \r\n    .user-email {\r\n        color: #666;\r\n        font-size: 13px;\r\n        flex: 1;\r\n    }\r\n    \r\n    .user-email.custom-email {\r\n        color: #0066cc;\r\n        font-weight: 500;\r\n    }\r\n    \r\n    .email-status {\r\n        font-size: 11px;\r\n        color: #0066cc;\r\n        font-style: italic;\r\n    }\r\n    \r\n    .edit-email-btn, .reset-email-btn {\r\n        background: none;\r\n        border: none;\r\n        cursor: pointer;\r\n        padding: 2px;\r\n        font-size: 12px;\r\n        opacity: 0.6;\r\n        transition: opacity 0.2s ease;\r\n        border-radius: 3px;\r\n    }\r\n    \r\n    .edit-email-btn:hover, .reset-email-btn:hover {\r\n        opacity: 1;\r\n        background-color: #f0f0f0;\r\n    }\r\n    \r\n    .reset-email-btn {\r\n        color: #666;\r\n        font-weight: bold;\r\n    }\r\n    \r\n    .email-edit-container {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 4px;\r\n        width: 100%;\r\n    }\r\n    \r\n    .email-edit-input {\r\n        flex: 1;\r\n        padding: 4px 6px;\r\n        border: 1px solid #ddd;\r\n        border-radius: 3px;\r\n        font-size: 12px;\r\n        min-width: 0;\r\n    }\r\n    \r\n    .email-edit-input:focus {\r\n        outline: none;\r\n        border-color: #007bff;\r\n        box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\r\n    }\r\n    \r\n    .email-edit-btn {\r\n        background: none;\r\n        border: 1px solid #ddd;\r\n        cursor: pointer;\r\n        padding: 2px 6px;\r\n        font-size: 11px;\r\n        border-radius: 3px;\r\n        min-width: 20px;\r\n        height: 24px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .email-edit-btn.save {\r\n        color: #28a745;\r\n        border-color: #28a745;\r\n    }\r\n    \r\n    .email-edit-btn.save:hover {\r\n        background-color: #28a745;\r\n        color: white;\r\n    }\r\n    \r\n    .email-edit-btn.cancel {\r\n        color: #dc3545;\r\n        border-color: #dc3545;\r\n    }\r\n    \r\n    .email-edit-btn.cancel:hover {\r\n        background-color: #dc3545;\r\n        color: white;\r\n    }\r\n    \r\n    .custom-indicator {\r\n        color: #0066cc;\r\n        font-weight: bold;\r\n        margin-left: 4px;\r\n    }\r\n    \r\n    .email-form {\r\n        background: #f9f9f9;\r\n        padding: 20px;\r\n        border-radius: 8px;\r\n        margin-top: 20px;\r\n    }\r\n    \r\n    .form-group {\r\n        margin-bottom: 15px;\r\n    }\r\n    \r\n    .form-group label {\r\n        display: block;\r\n        margin-bottom: 5px;\r\n        font-weight: 500;\r\n        color: #333;\r\n    }\r\n    \r\n    .form-input, .form-textarea {\r\n        width: 100%;\r\n        padding: 10px;\r\n        border: 1px solid #ddd;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n        font-family: inherit;\r\n    }\r\n    \r\n    .form-textarea {\r\n        resize: vertical;\r\n        min-height: 120px;\r\n    }\r\n    \r\n    .selected-preview {\r\n        margin-bottom: 20px;\r\n        padding: 15px;\r\n        background: white;\r\n        border-radius: 6px;\r\n        border: 1px solid #ddd;\r\n    }\r\n    \r\n    .selected-preview h5 {\r\n        margin: 0 0 10px 0;\r\n        color: #333;\r\n    }\r\n    \r\n    .preview-list {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: 8px;\r\n    }\r\n    \r\n    .preview-user {\r\n        background: #e9ecef;\r\n        padding: 4px 8px;\r\n        border-radius: 4px;\r\n        font-size: 12px;\r\n        color: #495057;\r\n    }\r\n    \r\n    .send-btn {\r\n        padding: 12px 24px;\r\n        background: #28a745;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 6px;\r\n        font-size: 16px;\r\n        font-weight: 500;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .send-btn:hover:not(:disabled) {\r\n        background: #218838;\r\n    }\r\n    \r\n    .send-btn:disabled {\r\n        background: #6c757d;\r\n        cursor: not-allowed;\r\n    }\r\n    \r\n    .send-btn.sending {\r\n        background: #ffc107;\r\n        color: #212529;\r\n    }\r\n    \r\n    .error-message {\r\n        background: #f8d7da;\r\n        color: #721c24;\r\n        padding: 12px;\r\n        border-radius: 6px;\r\n        margin-top: 15px;\r\n        border: 1px solid #f5c6cb;\r\n    }\r\n    \r\n    .success-message {\r\n        background: #d4edda;\r\n        color: #155724;\r\n        padding: 12px;\r\n        border-radius: 6px;\r\n        margin-top: 15px;\r\n        border: 1px solid #c3e6cb;\r\n    }\r\n    \r\n    /* Progress Box styles */\r\n    .progress-container {\r\n        margin-top: 20px;\r\n        background: white;\r\n        border: 1px solid #e0e0e0;\r\n        border-radius: 8px;\r\n        overflow: hidden;\r\n        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n    }\r\n    \r\n    .progress-header {\r\n        background: #f8f9fa;\r\n        color: #333;\r\n        padding: 12px 15px;\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        border-bottom: 1px solid #e0e0e0;\r\n    }\r\n    \r\n    .progress-header h4 {\r\n        margin: 0;\r\n        font-size: 14px;\r\n        font-weight: 500;\r\n        color: #333;\r\n    }\r\n    \r\n    .close-progress {\r\n        background: none;\r\n        border: none;\r\n        color: #666;\r\n        font-size: 18px;\r\n        cursor: pointer;\r\n        padding: 0;\r\n        width: 20px;\r\n        height: 20px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 3px;\r\n        transition: all 0.2s ease;\r\n    }\r\n    \r\n    .close-progress:hover {\r\n        background: #e9ecef;\r\n        color: #333;\r\n    }\r\n    \r\n    .progress-logs {\r\n        height: 250px;\r\n        overflow-y: auto;\r\n        padding: 15px;\r\n        background: white;\r\n        font-size: 13px;\r\n        line-height: 1.5;\r\n    }\r\n    \r\n    .progress-message {\r\n        color: #6c757d;\r\n        font-style: italic;\r\n        margin-bottom: 10px;\r\n    }\r\n    \r\n    .success-entry {\r\n        margin-bottom: 8px;\r\n        display: flex;\r\n        align-items: flex-start;\r\n        word-wrap: break-word;\r\n        padding: 4px 0;\r\n    }\r\n    \r\n    .success-message {\r\n        color: #28a745;\r\n        font-weight: 500;\r\n        flex: 1;\r\n    }\r\n    \r\n    .completion-message {\r\n        margin-top: 15px;\r\n        padding: 10px;\r\n        background: #d4edda;\r\n        color: #155724;\r\n        border-radius: 4px;\r\n        font-weight: 500;\r\n        text-align: center;\r\n    }\r\n    \r\n    .timestamp {\r\n        color: #6c757d;\r\n        margin-right: 10px;\r\n        flex-shrink: 0;\r\n        font-size: 11px;\r\n        font-family: monospace;\r\n    }\r\n    \r\n    /* Progress scrollbar */\r\n    .progress-logs::-webkit-scrollbar {\r\n        width: 6px;\r\n    }\r\n    \r\n    .progress-logs::-webkit-scrollbar-track {\r\n        background: #f1f1f1;\r\n    }\r\n    \r\n    .progress-logs::-webkit-scrollbar-thumb {\r\n        background: #c1c1c1;\r\n        border-radius: 3px;\r\n    }\r\n    \r\n    .progress-logs::-webkit-scrollbar-thumb:hover {\r\n        background: #a8a8a8;\r\n    }\r\n    \r\n    /* Failed summary styles */\r\n    .failed-summary {\r\n        margin-top: 20px;\r\n        background: #fff3cd;\r\n        border: 1px solid #ffeaa7;\r\n        border-radius: 8px;\r\n        padding: 20px;\r\n        color: #856404;\r\n    }\r\n    \r\n    .failed-summary h4 {\r\n        margin: 0 0 10px 0;\r\n        color: #721c24;\r\n    }\r\n    \r\n    .failed-list {\r\n        background: white;\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 4px;\r\n        padding: 15px;\r\n        margin: 15px 0;\r\n        max-height: 200px;\r\n        overflow-y: auto;\r\n    }\r\n    \r\n    .failed-list li {\r\n        margin-bottom: 8px;\r\n        padding: 4px 0;\r\n        border-bottom: 1px solid #f0f0f0;\r\n        font-family: 'Courier New', monospace;\r\n        font-size: 13px;\r\n    }\r\n    \r\n    .failed-list li:last-child {\r\n        border-bottom: none;\r\n        margin-bottom: 0;\r\n    }\r\n    \r\n    .contact-note {\r\n        margin: 15px 0 0 0;\r\n        font-weight: 500;\r\n        font-style: italic;\r\n        color: #495057;\r\n    }\r\n    \r\n    /* Responsive design */\r\n    @media (max-width: 768px) {\r\n        .select-users-email-container {\r\n            padding: 15px;\r\n        }\r\n        \r\n        .filter-buttons, .selection-controls {\r\n            flex-direction: column;\r\n            align-items: stretch;\r\n        }\r\n        \r\n        .selected-count {\r\n            margin-left: 0;\r\n            margin-top: 10px;\r\n        }\r\n        \r\n        .user-label {\r\n            padding: 10px;\r\n        }\r\n        \r\n        .preview-list {\r\n            flex-direction: column;\r\n        }\r\n    }\r\n</style>\r\n","<script>\r\n    import { onMount, onDestroy } from 'svelte';\r\n    import ActiveStudentDateFilter from './ActiveStudentDateFilter.svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n    import {\r\n        filterRecipients,\r\n        selectedRecipients,\r\n        selectVisible,\r\n        toggleSelection as toggleSelectedId,\r\n    } from './recipientSelection.js';\r\n\r\n    // State\r\n    let users = []; // students + teachers (User model)\r\n    let dateStudents = [];\r\n    let parents = []; // Parent model records\r\n    let thisMonthParents = []; // Parent model records limited to current month activity\r\n    let inactiveMonthParents = []; // Parents whose students have no classes this month\r\n    let inactiveMonthParentsGrade12OrBelow = []; // Inactive parents with a known school grade up to 12\r\n    let filtered = [];\r\n\r\n    let selectedIds = new Set();\r\n    let isLoading = false;\r\n    let isSending = false;\r\n    let errorMessage = '';\r\n    let successMessage = '';\r\n\r\n\r\n    let searchQuery = '';\r\n\r\n    // Filters: users plus parent activity/grade groups\r\n    let activeFilter = 'all';\r\n    let phoneTarget = 'student';\r\n\r\n\r\n    // SMS form\r\n    let smsMessage = '';\r\n    let customPhone = ''; // Optional override for testing\r\n\r\n    let batch = null, batchId = '', recentBatches = [];\r\n    let preparing = false, submissionUnconfirmed = false, preparedPayload = null;\r\n    let pollTimer, statusAbort, statusGeneration = 0, alive = true;\r\n    const savedBatchKey = 'tutory-bulk-sms-batch';\r\n    const apiBase = getApiBase();\r\n\r\n    onMount(() => {\r\n        loadRecipients();\r\n        loadRecentBatches();\r\n        batchId = localStorage.getItem(savedBatchKey) || '';\r\n        if (batchId) { submissionUnconfirmed = true; isSending = true; checkBatchStatus(); }\r\n    });\r\n\r\n    async function loadRecipients() {\r\n        isLoading = true;\r\n        errorMessage = '';\r\n\r\n        const token = localStorage.getItem('jwtToken');\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/users-for-sms-selection/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n\r\n            if (!response.ok) {\r\n                const errorData = await response.json().catch(() => ({}));\r\n                throw new Error(errorData.message || 'Failed to load recipients');\r\n            }\r\n\r\n            const data = await response.json();\r\n            users = data.users || [];\r\n            parents = data.parents || [];\r\n            thisMonthParents = data.this_month_parents || [];\r\n            inactiveMonthParents = data.inactive_month_parents || [];\r\n            inactiveMonthParentsGrade12OrBelow = data.inactive_month_parents_grade_12_or_below || [];\r\n            applyFilters();\r\n        } catch (error) {\r\n            errorMessage = `Error loading recipients: ${error.message}`;\r\n            console.error('Error loading SMS recipients:', error);\r\n        } finally {\r\n            isLoading = false;\r\n        }\r\n    }\r\n\r\n    function setFilter(filter) {\r\n        if (filter !== activeFilter) {\r\n            phoneTarget = ['parents', 'this_month_parents', 'inactive_month_parents', 'inactive_month_parents_grade_12_or_below'].includes(filter) ? 'parent' : 'student';\r\n        }\r\n        if (filter !== activeFilter) dateStudents = [];\r\n        if (filter !== activeFilter) selectedIds = new Set();\r\n        activeFilter = filter;\r\n        applyFilters();\r\n    }\r\n\r\n    function updateDateRecipients(event) {\r\n        dateStudents = event.detail;\r\n        selectedIds = new Set();\r\n        applyFilters();\r\n    }\r\n\r\n    function normalizePhone(phone) {\r\n        if (!phone) return '';\r\n        return String(phone).trim();\r\n    }\r\n\r\n    function canonicalPhone(phone) {\r\n        const raw = normalizePhone(phone);\r\n        if (!raw) return '';\r\n        let digits = raw.replace(/\\D/g, '');\r\n        if (digits.startsWith('00')) digits = digits.slice(2);\r\n        return digits;\r\n    }\r\n\r\n    function maskPhone(phone) {\r\n        const p = normalizePhone(phone);\r\n        if (!p) return '';\r\n        const digits = p.replace(/\\D/g, '');\r\n        if (digits.length <= 4) return p;\r\n        return `${'*'.repeat(Math.max(0, digits.length - 4))}${digits.slice(-4)}`;\r\n    }\r\n\r\n    function recipientLabel(r) {\r\n        if (!r) return '';\r\n        const first = (r.first_name || '').trim();\r\n        const last = (r.last_name || '').trim();\r\n        const name = `${first} ${last}`.trim() || (r.username || '').trim() || `ID ${r.id}`;\r\n        if (r.user_type === 'parent' && r.student_name) {\r\n            return `${name} (parent of ${r.student_name})`;\r\n        }\r\n        return name;\r\n    }\r\n\r\n    function recipientSearchText(r) {\r\n        const parts = [\r\n            r.first_name,\r\n            r.last_name,\r\n            r.username,\r\n            r.email,\r\n            r.user_type,\r\n            r.student_name,\r\n            normalizePhone(r.phone_number),\r\n        ].filter(Boolean);\r\n        return parts.join(' ').toLowerCase();\r\n    }\r\n\r\n    function getBaseListForFilter() {\r\n        if (activeFilter === 'active_date_students' || activeFilter === 'inactive_date_students') return dateStudents.map(user => withPhoneDestination(user, 'user'));\r\n        if (activeFilter === 'parents') return parents.map(p => withPhoneDestination(p, 'parent'));\r\n        if (activeFilter === 'this_month_parents') return thisMonthParents.map(p => withPhoneDestination(p, 'parent'));\r\n        if (activeFilter === 'inactive_month_parents') return inactiveMonthParents.map(p => withPhoneDestination(p, 'parent'));\r\n        if (activeFilter === 'inactive_month_parents_grade_12_or_below') {\r\n            return inactiveMonthParentsGrade12OrBelow.map(p => withPhoneDestination(p, 'parent'));\r\n        }\r\n\r\n        // users list\r\n        let list = users.map(u => withPhoneDestination(u, 'user'));\r\n        if (activeFilter === 'students') list = list.filter(u => u.user_type === 'student');\r\n        if (activeFilter === 'teachers') list = list.filter(u => u.user_type === 'teacher');\r\n        return list;\r\n    }\r\n\r\n    function withPhoneDestination(recipient, kind) {\r\n        return {\r\n            ...recipient,\r\n            _kind: kind,\r\n            phone_number: phoneTarget === 'student' ? recipient.student_phone_number : recipient.parent_phone_number,\r\n\r\n        };\r\n    }\r\n\r\n    function applyFilters() {\r\n        const list = getBaseListForFilter();\r\n        filtered = filterRecipients(list, searchQuery, recipientSearchText);\r\n    }\r\n\r\n    function toggleSelection(id) {\r\n        selectedIds = toggleSelectedId(selectedIds, id);\r\n    }\r\n\r\n    function selectAllVisible() {\r\n        selectedIds = selectVisible(selectedIds, filtered);\r\n    }\r\n\r\n    function clearAll() {\r\n        selectedIds = new Set();\r\n    }\r\n\r\n    async function loadRecentBatches() {\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/bulk-sms-batches/`, {\r\n                headers: { Authorization: `Bearer ${localStorage.getItem('jwtToken')}` }, cache: 'no-store',\r\n            });\r\n            if (response.ok && alive) recentBatches = (await response.json()).results || [];\r\n        } catch (_) { /* Sending and status checks show their own connection errors. */ }\r\n    }\r\n\r\n    function displayBatch(result) {\r\n        batch = result;\r\n        isSending = result.pending_sends > 0;\r\n        successMessage = `Accepted ${result.successful_sends} SMS for sending. Confirmed delivered: ${result.delivered_sends}.`;\r\n    }\r\n\r\n    function scheduleStatusCheck(result) {\r\n        clearTimeout(pollTimer);\r\n        if (result.pending_sends > 0 || result.monitoring) {\r\n            pollTimer = setTimeout(checkBatchStatus, result.pending_sends > 0 ? 1500 : 15000);\r\n        }\r\n    }\r\n\r\n    async function checkBatchStatus() {\r\n        if (!batchId || preparing) return;\r\n        clearTimeout(pollTimer);\r\n        statusAbort?.abort(); statusAbort = new AbortController();\r\n        const id = batchId, generation = ++statusGeneration;\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/bulk-sms-batches/${id}/`, {\r\n                headers: { Authorization: `Bearer ${localStorage.getItem('jwtToken')}` },\r\n                signal: statusAbort.signal, cache: 'no-store',\r\n            });\r\n            if (!alive || generation !== statusGeneration || id !== batchId) return;\r\n            if (response.status === 404 && !preparedPayload) {\r\n                localStorage.removeItem(savedBatchKey); batchId = ''; submissionUnconfirmed = false; isSending = false;\r\n                errorMessage = 'The previous batch is unavailable. Select recipients for a new batch.';\r\n                return;\r\n            }\r\n            if (!response.ok) throw new Error('Batch status is not confirmed. Use Check batch status before sending again.');\r\n            const result = await response.json();\r\n            if (!alive || generation !== statusGeneration || id !== batchId) return;\r\n            displayBatch(result); submissionUnconfirmed = false; errorMessage = '';\r\n            selectedIds = new Set();\r\n            scheduleStatusCheck(result);\r\n        } catch (error) {\r\n            if (alive && generation === statusGeneration && error.name !== 'AbortError') {\r\n                errorMessage = error.message; submissionUnconfirmed = true; isSending = false;\r\n            }\r\n        }\r\n    }\r\n\r\n    async function submitPreparedBatch(payload) {\r\n        if (preparing) return;\r\n        preparing = true; isSending = true; submissionUnconfirmed = true;\r\n        errorMessage = ''; successMessage = '';\r\n        clearTimeout(pollTimer); statusAbort?.abort(); statusGeneration++;\r\n        batchId = payload.batch_id; localStorage.setItem(savedBatchKey, batchId);\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/send-bulk-sms/`, {\r\n                method: 'POST', headers: {\r\n                    Authorization: `Bearer ${localStorage.getItem('jwtToken')}`, 'Content-Type': 'application/json',\r\n                }, body: JSON.stringify(payload),\r\n            });\r\n            const result = await response.json();\r\n            if (!alive) return;\r\n            if (!response.ok) {\r\n                if ([400, 401, 403].includes(response.status)) {\r\n                    submissionUnconfirmed = false; localStorage.removeItem(savedBatchKey); batchId = ''; preparedPayload = null;\r\n                }\r\n                throw new Error(result.message || result.detail || 'The batch could not be confirmed. Check its status.');\r\n            }\r\n            displayBatch(result); submissionUnconfirmed = false;\r\n            selectedIds = new Set(); smsMessage = ''; preparedPayload = null;\r\n            loadRecentBatches(); scheduleStatusCheck(result);\r\n        } catch (error) {\r\n            if (alive) {\r\n                isSending = false;\r\n                errorMessage = error.message || 'Batch submission is unconfirmed. Check its status; do not start another send.';\r\n            }\r\n        } finally { preparing = false; }\r\n    }\r\n\r\n    async function sendSms() {\r\n        if (isSending || preparing || submissionUnconfirmed) return;\r\n        const selected = selectedRecipients(getBaseListForFilter(), selectedIds);\r\n        if (!selected.length) { errorMessage = 'Please select at least one recipient'; return; }\r\n        if (!smsMessage.trim()) { errorMessage = 'SMS message is required'; return; }\r\n        preparedPayload = Object.freeze({\r\n            batch_id: crypto.randomUUID(), user_ids: selected.map(recipient => recipient.id),\r\n            recipient_kind: selected[0]._kind, phone_target: phoneTarget,\r\n            message: smsMessage.trim(), custom_phone: customPhone.trim() || null,\r\n        });\r\n        await submitPreparedBatch(preparedPayload);\r\n    }\r\n\r\n    function viewBatch(id) {\r\n        if (isSending || preparing) return;\r\n        clearTimeout(pollTimer); statusAbort?.abort(); statusGeneration++;\r\n        batch = null; batchId = id; preparedPayload = null; submissionUnconfirmed = !!id;\r\n        if (!id) { localStorage.removeItem(savedBatchKey); return; }\r\n        localStorage.setItem(savedBatchKey, id); checkBatchStatus();\r\n    }\r\n\r\n    onDestroy(() => {\r\n        alive = false; clearTimeout(pollTimer); statusAbort?.abort(); statusGeneration++;\r\n    });\r\n    // Reactive filtering\r\n    $: searchQuery, activeFilter, phoneTarget, users, parents, thisMonthParents, inactiveMonthParents, inactiveMonthParentsGrade12OrBelow, applyFilters();\r\n</script>\r\n\r\n<div class=\"select-users-sms-container\">\r\n    <h3>Send SMS to Selected Recipients</h3>\r\n\r\n    <div class=\"filter-buttons\">\r\n        <button class=\"filter-btn {activeFilter === 'active_date_students' ? 'active' : ''}\" on:click={() => setFilter('active_date_students')}>\r\n            Active Students by Date ({activeFilter === 'active_date_students' ? dateStudents.length : 0})\r\n        </button>\r\n        <button class=\"filter-btn {activeFilter === 'inactive_date_students' ? 'active' : ''}\" on:click={() => setFilter('inactive_date_students')}>\r\n            Inactive Students by Date ({activeFilter === 'inactive_date_students' ? dateStudents.length : 0})\r\n        </button>\r\n        <button class=\"filter-btn {activeFilter === 'all' ? 'active' : ''}\" on:click={() => setFilter('all')}>\r\n            All Users ({users.length})\r\n        </button>\r\n        <button class=\"filter-btn {activeFilter === 'students' ? 'active' : ''}\" on:click={() => setFilter('students')}>\r\n            Students ({users.filter(u => u.user_type === 'student').length})\r\n        </button>\r\n        <button class=\"filter-btn {activeFilter === 'teachers' ? 'active' : ''}\" on:click={() => setFilter('teachers')}>\r\n            Teachers ({users.filter(u => u.user_type === 'teacher').length})\r\n        </button>\r\n        <button class=\"filter-btn {activeFilter === 'parents' ? 'active' : ''}\" on:click={() => setFilter('parents')}>\r\n            Parents ({parents.length})\r\n        </button>\r\n        <button class=\"filter-btn {activeFilter === 'this_month_parents' ? 'active' : ''}\" on:click={() => setFilter('this_month_parents')}>\r\n            This Month Parents ({thisMonthParents.length})\r\n        </button>\r\n        <button class=\"filter-btn {activeFilter === 'inactive_month_parents' ? 'active' : ''}\" on:click={() => setFilter('inactive_month_parents')}>\r\n            Inactive This Month Parents ({inactiveMonthParents.length})\r\n        </button>\r\n        <button class=\"filter-btn {activeFilter === 'inactive_month_parents_grade_12_or_below' ? 'active' : ''}\" on:click={() => setFilter('inactive_month_parents_grade_12_or_below')}>\r\n            Inactive Parents Grade 12 or Below ({inactiveMonthParentsGrade12OrBelow.length})\r\n        </button>\r\n    </div>\r\n\r\n    <div class=\"form-group\">\r\n        <label for=\"sms-phone-target\">Send to</label>\r\n        <select id=\"sms-phone-target\" class=\"form-input\" bind:value={phoneTarget} on:change={clearAll} disabled={isSending}>\r\n            <option value=\"student\">{activeFilter === 'teachers' ? 'Teacher phone' : 'Student phone'}</option>\r\n            <option value=\"parent\">Parent phone</option>\r\n        </select>\r\n        <p>Only the selected phone is used. Missing or failed numbers are listed below. Repeated requests and shared numbers are protected against duplicate sends.</p>\r\n    </div>\r\n\r\n    {#if activeFilter === 'active_date_students' || activeFilter === 'inactive_date_students'}\r\n        {#key activeFilter}\r\n            <ActiveStudentDateFilter channel=\"sms\" inactive={activeFilter === 'inactive_date_students'} on:recipients={updateDateRecipients} />\r\n        {/key}\r\n    {/if}\r\n\r\n    <div class=\"search-container\">\r\n        <input\r\n            type=\"text\"\r\n            placeholder=\"Search by name, email, username, or phone...\"\r\n            bind:value={searchQuery}\r\n            class=\"search-input\"\r\n        />\r\n    </div>\r\n\r\n    <div class=\"selection-controls\">\r\n        <button on:click={selectAllVisible} class=\"selection-btn\">\r\n            Select All Visible ({filtered.length})\r\n        </button>\r\n        <button on:click={clearAll} class=\"selection-btn\">\r\n            Clear All\r\n        </button>\r\n        <span class=\"selected-count\">Selected: {selectedIds.size}</span>\r\n    </div>\r\n\r\n    {#if isLoading}\r\n        <div class=\"loading\">Loading recipients...</div>\r\n    {:else if filtered.length === 0}\r\n        <div class=\"no-users\">No recipients found</div>\r\n    {:else}\r\n        <div class=\"users-list\">\r\n            {#each filtered as r (r.id)}\r\n                <div class=\"user-item {selectedIds.has(r.id) ? 'selected' : ''}\">\r\n                    <label class=\"user-label\">\r\n                        <input\r\n                            type=\"checkbox\"\r\n                            checked={selectedIds.has(r.id)}\r\n                            on:change={() => toggleSelection(r.id)}\r\n                        />\r\n                        <div class=\"user-info\">\r\n                            <div class=\"user-name\">\r\n                                {recipientLabel(r)}\r\n                                <span class=\"user-type {r.user_type}\">{r.user_type}</span>\r\n                            </div>\r\n                            <div class=\"user-meta\">\r\n                                {#if r.phone_number}\r\n                                    <span class=\"phone\">Phone: {maskPhone(r.phone_number)}</span>\r\n                                {:else}\r\n                                    <span class=\"phone missing\">No phone</span>\r\n                                {/if}\r\n\r\n                            </div>\r\n                        </div>\r\n                    </label>\r\n                </div>\r\n            {/each}\r\n        </div>\r\n    {/if}\r\n\r\n    {#if selectedIds.size > 0}\r\n        <div class=\"sms-form\">\r\n            <h4>SMS Details</h4>\r\n\r\n            <div class=\"form-group\">\r\n                <label for=\"custom-phone\">Custom phone (optional override):</label>\r\n                <input\r\n                    id=\"custom-phone\"\r\n                    type=\"text\"\r\n                    placeholder=\"e.g. +370...\"\r\n                    bind:value={customPhone}\r\n                    disabled={isSending || preparing || submissionUnconfirmed}\r\n                    class=\"form-input\"\r\n                />\r\n            </div>\r\n\r\n            <div class=\"form-group\">\r\n                <label for=\"sms-message\">Message:</label>\r\n                <textarea\r\n                    id=\"sms-message\"\r\n                    bind:value={smsMessage}\r\n                    disabled={isSending || preparing || submissionUnconfirmed}\r\n                    placeholder=\"Enter SMS message...\"\r\n                    rows=\"6\"\r\n                    class=\"form-textarea\"\r\n                ></textarea>\r\n            </div>\r\n\r\n            <button on:click={sendSms} disabled={isSending || preparing || submissionUnconfirmed || selectedIds.size === 0} class=\"send-btn {isSending ? 'sending' : ''}\">\r\n                {#if isSending}Sending...{:else}Send SMS{/if}\r\n            </button>\r\n        </div>\r\n    {/if}\r\n\r\n    {#if recentBatches.length}\r\n        <label for=\"recent-sms-batch\">Recent SMS batches</label>\r\n        <select id=\"recent-sms-batch\" value={batchId} disabled={preparing || isSending} on:change={event => viewBatch(event.currentTarget.value)} class=\"form-input\">\r\n            <option value=\"\">Select a batch</option>\r\n            {#each recentBatches as item (item.batch_id)}\r\n                <option value={item.batch_id}>{new Date(item.created_at).toLocaleString()} · {item.phone_target} · {item.message_preview}</option>\r\n            {/each}\r\n        </select>\r\n    {/if}\r\n    {#if batchId}\r\n        <button type=\"button\" on:click={checkBatchStatus} disabled={preparing}>Check batch status</button>\r\n    {/if}\r\n    {#if preparedPayload && submissionUnconfirmed}\r\n        <button type=\"button\" on:click={() => submitPreparedBatch(preparedPayload)} disabled={preparing}>Resume same batch</button>\r\n    {/if}\r\n    {#if batch}\r\n        <section class=\"progress-container\" aria-label=\"SMS batch results\" aria-busy={isSending}>\r\n            <h4>SMS batch · {batch.phone_target} phone</h4>\r\n            <p>Recipients: {batch.total_users}. Awaiting attempt: {batch.pending_sends}.</p>\r\n            <p>Duplicate sends prevented: {batch.duplicate_sends_skipped}.</p>\r\n            <p class=\"success-message\">{successMessage}</p>\r\n            <p>Failed recipients: {batch.failed_sends}</p>\r\n            {#if batch.monitoring}<p role=\"status\">Accepted is not confirmed delivery. This list updates as Twilio reports results, including later failures.</p>{/if}\r\n            {#if batch.failures.length}\r\n                <div class=\"failed-summary\">\r\n                    <h4>Failed SMS recipients</h4>\r\n                    <ul class=\"failed-list\">{#each batch.failures as row (`${row.recipient_kind}-${row.recipient_id}`)}\r\n                        <li>{row.label}{row.phone_last4 ? ` · phone ending ${row.phone_last4}` : ''}: {row.reason}</li>\r\n                    {/each}</ul>\r\n                </div>\r\n            {/if}\r\n            {#if batch.unconfirmed.length}\r\n                <div class=\"unconfirmed-summary\">\r\n                    <h4>Unconfirmed sends — review before retrying</h4>\r\n                    <ul>{#each batch.unconfirmed as row (`${row.recipient_kind}-${row.recipient_id}`)}<li>{row.label}: {row.reason}</li>{/each}</ul>\r\n                </div>\r\n            {/if}\r\n        </section>\r\n    {/if}\r\n    {#if errorMessage}<div class=\"error-message\" role=\"alert\">{errorMessage}</div>{/if}\r\n</div>\r\n\r\n<style>\r\n\r\n\r\n\r\n    .select-users-sms-container {\r\n        max-width: 800px;\r\n        margin: 0 auto;\r\n        padding: 20px;\r\n    }\r\n\r\n    .filter-buttons {\r\n        display: flex;\r\n        gap: 10px;\r\n        margin-bottom: 20px;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .filter-btn {\r\n        padding: 8px 16px;\r\n        border: 1px solid #ddd;\r\n        background: white;\r\n        cursor: pointer;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n        transition: all 0.2s ease;\r\n    }\r\n\r\n    .filter-btn.active {\r\n        background: #fab45a;\r\n        color: black;\r\n        border-color: #fab45a;\r\n    }\r\n\r\n    .search-container {\r\n        margin-bottom: 15px;\r\n    }\r\n\r\n    .search-input {\r\n        width: 100%;\r\n        padding: 10px;\r\n        border: 1px solid #ddd;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n    }\r\n\r\n    .selection-controls {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n        margin-bottom: 20px;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .selection-btn {\r\n        padding: 6px 12px;\r\n        border: 1px solid #007bff;\r\n        background: white;\r\n        color: #007bff;\r\n        cursor: pointer;\r\n        border-radius: 4px;\r\n        font-size: 13px;\r\n        transition: all 0.2s ease;\r\n    }\r\n\r\n    .selected-count {\r\n        font-weight: bold;\r\n        color: #555;\r\n        margin-left: auto;\r\n    }\r\n\r\n    .loading, .no-users {\r\n        text-align: center;\r\n        padding: 20px;\r\n        color: #666;\r\n        font-style: italic;\r\n    }\r\n\r\n    .users-list {\r\n        max-height: 400px;\r\n        overflow-y: auto;\r\n        border: 1px solid #ddd;\r\n        border-radius: 6px;\r\n        margin-bottom: 20px;\r\n    }\r\n\r\n    .user-item {\r\n        border-bottom: 1px solid #eee;\r\n    }\r\n\r\n    .user-item.selected {\r\n        background-color: #f0f8ff;\r\n    }\r\n\r\n    .user-label {\r\n        display: flex;\r\n        align-items: center;\r\n        padding: 12px;\r\n        cursor: pointer;\r\n        gap: 12px;\r\n    }\r\n\r\n    .user-info {\r\n        flex: 1;\r\n    }\r\n\r\n    .user-name {\r\n        font-weight: 500;\r\n        margin-bottom: 4px;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .user-type {\r\n        padding: 2px 8px;\r\n        border-radius: 12px;\r\n        font-size: 11px;\r\n        font-weight: bold;\r\n        text-transform: uppercase;\r\n    }\r\n\r\n    .user-type.student {\r\n        background-color: #e3f2fd;\r\n        color: #1976d2;\r\n    }\r\n\r\n    .user-type.teacher {\r\n        background-color: #f3e5f5;\r\n        color: #7b1fa2;\r\n    }\r\n\r\n    .user-type.parent {\r\n        background-color: #fff3cd;\r\n        color: #856404;\r\n    }\r\n\r\n    .user-meta {\r\n        color: #666;\r\n        font-size: 12px;\r\n    }\r\n\r\n    .phone.missing {\r\n        color: #b00020;\r\n        font-style: italic;\r\n    }\r\n\r\n    .sms-form {\r\n        background: #f9f9f9;\r\n        padding: 20px;\r\n        border-radius: 8px;\r\n        margin-top: 20px;\r\n    }\r\n\r\n    .form-group {\r\n        margin-bottom: 15px;\r\n    }\r\n\r\n    .form-group label {\r\n        display: block;\r\n        margin-bottom: 5px;\r\n        font-weight: 500;\r\n        color: #333;\r\n    }\r\n\r\n    .form-input, .form-textarea {\r\n        width: 100%;\r\n        padding: 10px;\r\n        border: 1px solid #ddd;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n        font-family: inherit;\r\n    }\r\n\r\n    .send-btn {\r\n        padding: 12px 24px;\r\n        background: #28a745;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 6px;\r\n        font-size: 16px;\r\n        font-weight: 500;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n    }\r\n\r\n    .send-btn:disabled {\r\n        background: #6c757d;\r\n        cursor: not-allowed;\r\n    }\r\n\r\n    .send-btn.sending {\r\n        background: #ffc107;\r\n        color: #212529;\r\n    }\r\n\r\n    .error-message {\r\n        background: #f8d7da;\r\n        color: #721c24;\r\n        padding: 12px;\r\n        border-radius: 6px;\r\n        margin-top: 15px;\r\n        border: 1px solid #f5c6cb;\r\n    }\r\n\r\n    .success-message {\r\n        background: #d4edda;\r\n        color: #155724;\r\n        padding: 12px;\r\n        border-radius: 6px;\r\n        margin-top: 15px;\r\n        border: 1px solid #c3e6cb;\r\n    }\r\n\r\n    .progress-container {\r\n        margin-top: 20px;\r\n        background: white;\r\n        border: 1px solid #e0e0e0;\r\n        border-radius: 8px;\r\n        overflow: hidden;\r\n        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n    }\r\n\r\n    .progress-header {\r\n        background: #f8f9fa;\r\n        color: #333;\r\n        padding: 12px 15px;\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        border-bottom: 1px solid #e0e0e0;\r\n    }\r\n\r\n    .progress-header h4 {\r\n        margin: 0;\r\n        font-size: 14px;\r\n        font-weight: 500;\r\n        color: #333;\r\n    }\r\n\r\n    .close-progress {\r\n        background: none;\r\n        border: none;\r\n        color: #666;\r\n        font-size: 18px;\r\n        cursor: pointer;\r\n        padding: 0;\r\n        width: 20px;\r\n        height: 20px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 3px;\r\n    }\r\n\r\n    .progress-logs {\r\n        height: 250px;\r\n        overflow-y: auto;\r\n        padding: 15px;\r\n        background: white;\r\n        font-size: 13px;\r\n        line-height: 1.5;\r\n    }\r\n\r\n    .success-entry {\r\n        margin-bottom: 8px;\r\n        display: flex;\r\n        align-items: flex-start;\r\n        word-wrap: break-word;\r\n        padding: 4px 0;\r\n    }\r\n\r\n    .timestamp {\r\n        color: #6c757d;\r\n        margin-right: 10px;\r\n        flex-shrink: 0;\r\n        font-size: 11px;\r\n        font-family: monospace;\r\n    }\r\n\r\n    .success-message {\r\n        color: #28a745;\r\n        font-weight: 500;\r\n        flex: 1;\r\n        background: none;\r\n        border: none;\r\n        padding: 0;\r\n        margin: 0;\r\n    }\r\n\r\n    .completion-message {\r\n        margin-top: 15px;\r\n        padding: 10px;\r\n        background: #d4edda;\r\n        color: #155724;\r\n        border-radius: 4px;\r\n        font-weight: 500;\r\n        text-align: center;\r\n    }\r\n\r\n    .failed-summary {\r\n        margin-top: 20px;\r\n        background: #fff3cd;\r\n        border: 1px solid #ffeaa7;\r\n        border-radius: 8px;\r\n        padding: 20px;\r\n        color: #856404;\r\n    }\r\n\r\n    .failed-list {\r\n        background: white;\r\n        border: 1px solid #dee2e6;\r\n        border-radius: 4px;\r\n        padding: 15px;\r\n        margin: 15px 0 0 0;\r\n        max-height: 200px;\r\n        overflow-y: auto;\r\n    }\r\n</style>\r\n\r\n","<script>\r\n  import { onMount } from 'svelte';\r\n  import Editor from '@tinymce/tinymce-svelte';\r\n\r\n  const tinyMceApiKey = 'usvl1m5wsho8d78ixib2ladkg9cca2oonqln4so3wls7ujj5';\r\n  const API_BASE_URL = '/studentplayground';\r\n\r\n  // Form state\r\n  let topic = '';\r\n  let content = '';\r\n  let displayOrder = 0;\r\n  let isPublished = false;\r\n  let isFeatured = false;\r\n  let showToTeachers = true;\r\n  let showToStudents = true;\r\n\r\n  // Component state\r\n  let sections = [];\r\n  let loading = false;\r\n  let errorMessage = '';\r\n  let successMessage = '';\r\n  let editingId = null;\r\n  let isSubmitting = false;\r\n\r\n  // Fetch all sections\r\n  async function fetchSections() {\r\n    loading = true;\r\n    errorMessage = '';\r\n    const token = localStorage.getItem('jwtToken');\r\n    \r\n    if (!token) {\r\n      errorMessage = 'JWT token not found. Please log in.';\r\n      loading = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const response = await fetch(`${API_BASE_URL}/api/information-sections/`, {\r\n        method: 'GET',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        sections = data.sections || [];\r\n      } else {\r\n        const errorData = await response.json().catch(() => ({}));\r\n        errorMessage = errorData.error || `Failed to fetch sections: ${response.status}`;\r\n      }\r\n    } catch (error) {\r\n      errorMessage = `Network error: ${error.message}`;\r\n    } finally {\r\n      loading = false;\r\n    }\r\n  }\r\n\r\n  // Load section for editing\r\n  function loadSectionForEdit(section) {\r\n    editingId = section.id;\r\n    topic = section.topic;\r\n    content = section.content || '';\r\n    displayOrder = section.display_order || 0;\r\n    isPublished = section.is_published || false;\r\n    isFeatured = section.is_featured || false;\r\n    showToTeachers = section.show_to_teachers !== undefined ? section.show_to_teachers : true;\r\n    showToStudents = section.show_to_students !== undefined ? section.show_to_students : true;\r\n    \r\n    // Scroll to form\r\n    document.querySelector('.section-form')?.scrollIntoView({ behavior: 'smooth' });\r\n  }\r\n\r\n  // Reset form\r\n  function resetForm() {\r\n    editingId = null;\r\n    topic = '';\r\n    content = '';\r\n    displayOrder = 0;\r\n    isPublished = false;\r\n    isFeatured = false;\r\n    showToTeachers = true;\r\n    showToStudents = true;\r\n    errorMessage = '';\r\n    successMessage = '';\r\n  }\r\n\r\n  // Submit form (create or update)\r\n  async function submitForm() {\r\n    if (!topic.trim()) {\r\n      errorMessage = 'Topic is required';\r\n      return;\r\n    }\r\n\r\n    if (!content.trim()) {\r\n      errorMessage = 'Content is required';\r\n      return;\r\n    }\r\n\r\n    isSubmitting = true;\r\n    errorMessage = '';\r\n    successMessage = '';\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      errorMessage = 'JWT token not found. Please log in.';\r\n      isSubmitting = false;\r\n      return;\r\n    }\r\n\r\n    const payload = {\r\n      topic: topic.trim(),\r\n      content: content,\r\n      display_order: displayOrder,\r\n      is_published: isPublished,\r\n      is_featured: isFeatured,\r\n      show_to_teachers: showToTeachers,\r\n      show_to_students: showToStudents,\r\n    };\r\n\r\n    try {\r\n      const url = editingId \r\n        ? `${API_BASE_URL}/api/information-sections/${editingId}/update/`\r\n        : `${API_BASE_URL}/api/information-sections/create/`;\r\n      \r\n      const method = editingId ? 'PUT' : 'POST';\r\n\r\n      const response = await fetch(url, {\r\n        method: method,\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(payload),\r\n      });\r\n\r\n      if (response.ok) {\r\n        successMessage = editingId ? 'Section updated successfully!' : 'Section created successfully!';\r\n        resetForm();\r\n        await fetchSections();\r\n        \r\n        setTimeout(() => {\r\n          successMessage = '';\r\n        }, 3000);\r\n      } else {\r\n        const errorData = await response.json().catch(() => ({}));\r\n        errorMessage = errorData.error || `Failed to ${editingId ? 'update' : 'create'} section: ${response.status}`;\r\n      }\r\n    } catch (error) {\r\n      errorMessage = `Network error: ${error.message}`;\r\n    } finally {\r\n      isSubmitting = false;\r\n    }\r\n  }\r\n\r\n  // Delete section\r\n  async function deleteSection(sectionId) {\r\n    if (!confirm('Are you sure you want to delete this section?')) {\r\n      return;\r\n    }\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      errorMessage = 'JWT token not found. Please log in.';\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const response = await fetch(`${API_BASE_URL}/api/information-sections/${sectionId}/delete/`, {\r\n        method: 'DELETE',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n      });\r\n\r\n      if (response.ok) {\r\n        successMessage = 'Section deleted successfully!';\r\n        await fetchSections();\r\n        \r\n        setTimeout(() => {\r\n          successMessage = '';\r\n        }, 3000);\r\n      } else {\r\n        const errorData = await response.json().catch(() => ({}));\r\n        errorMessage = errorData.error || `Failed to delete section: ${response.status}`;\r\n      }\r\n    } catch (error) {\r\n      errorMessage = `Network error: ${error.message}`;\r\n    }\r\n  }\r\n\r\n  // TinyMCE image upload handler\r\n  async function handleImageUpload(blobInfo, progress) {\r\n    return new Promise(async (resolve, reject) => {\r\n      const token = localStorage.getItem('jwtToken');\r\n      if (!token) {\r\n        reject('JWT token not found');\r\n        return;\r\n      }\r\n\r\n      const formData = new FormData();\r\n      formData.append('image', blobInfo.blob(), blobInfo.filename());\r\n\r\n      try {\r\n        const xhr = new XMLHttpRequest();\r\n        \r\n        xhr.upload.addEventListener('progress', (e) => {\r\n          if (e.lengthComputable) {\r\n            progress((e.loaded / e.total) * 100);\r\n          }\r\n        });\r\n\r\n        xhr.addEventListener('load', () => {\r\n          if (xhr.status === 200) {\r\n            const response = JSON.parse(xhr.responseText);\r\n            resolve(response.image_url);\r\n          } else {\r\n            reject('Image upload failed');\r\n          }\r\n        });\r\n\r\n        xhr.addEventListener('error', () => {\r\n          reject('Image upload failed');\r\n        });\r\n\r\n        xhr.open('POST', `${API_BASE_URL}/api/information-sections/upload-image/`);\r\n        xhr.setRequestHeader('Authorization', `Bearer ${token}`);\r\n        xhr.send(formData);\r\n      } catch (error) {\r\n        reject(error.message);\r\n      }\r\n    });\r\n  }\r\n\r\n  // Format date for display\r\n  function formatDate(dateString) {\r\n    if (!dateString) return 'N/A';\r\n    const date = new Date(dateString);\r\n    return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();\r\n  }\r\n\r\n  // Initialize on mount\r\n  onMount(() => {\r\n    fetchSections();\r\n  });\r\n</script>\r\n\r\n<div class=\"information-section-component\">\r\n  <h2>Information Sections Management</h2>\r\n  <p class=\"description\">Create and manage information sections with rich text content and images.</p>\r\n\r\n  <!-- Success/Error Messages -->\r\n  {#if successMessage}\r\n    <div class=\"message success\">{successMessage}</div>\r\n  {/if}\r\n\r\n  {#if errorMessage}\r\n    <div class=\"message error\">{errorMessage}</div>\r\n  {/if}\r\n\r\n  <!-- Form Section -->\r\n  <div class=\"section-form\">\r\n    <h3>{editingId ? 'Edit Section' : 'Create New Section'}</h3>\r\n    \r\n    <form on:submit|preventDefault={submitForm}>\r\n      <div class=\"form-group\">\r\n        <label for=\"topic\">Topic Name *</label>\r\n        <input\r\n          id=\"topic\"\r\n          type=\"text\"\r\n          bind:value={topic}\r\n          placeholder=\"e.g., How to Book a Class, Payment Methods\"\r\n          required\r\n        />\r\n      </div>\r\n\r\n      <div class=\"form-group\">\r\n        <label for=\"content\">Content *</label>\r\n        <Editor\r\n          channel=\"7\"\r\n          bind:value={content}\r\n          apiKey={tinyMceApiKey}\r\n          conf={{\r\n            height: 500,\r\n            menubar: true,\r\n            plugins: [\r\n              'advlist autolink lists link image charmap preview anchor',\r\n              'searchreplace visualblocks code fullscreen',\r\n              'insertdatetime media table code help wordcount',\r\n            ],\r\n            toolbar:\r\n              'undo redo | blocks | bold italic underline | \\\r\n              alignleft aligncenter alignright alignjustify | \\\r\n              bullist numlist | link image | code | help',\r\n            content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px }',\r\n            automatic_uploads: true,\r\n            images_upload_handler: handleImageUpload,\r\n            paste_data_images: true, // Allow pasting images\r\n            file_picker_types: 'image',\r\n          }}\r\n        />\r\n      </div>\r\n\r\n      <div class=\"form-row\">\r\n        <div class=\"form-group\">\r\n          <label for=\"display-order\">Display Order</label>\r\n          <input\r\n            id=\"display-order\"\r\n            type=\"number\"\r\n            bind:value={displayOrder}\r\n            min=\"0\"\r\n          />\r\n          <small>Lower numbers appear first</small>\r\n        </div>\r\n\r\n        <div class=\"form-group checkbox-group\">\r\n          <label>\r\n            <input type=\"checkbox\" bind:checked={isPublished} />\r\n            Published\r\n          </label>\r\n          <small>Visible to users</small>\r\n        </div>\r\n\r\n        <div class=\"form-group checkbox-group\">\r\n          <label>\r\n            <input type=\"checkbox\" bind:checked={isFeatured} />\r\n            Featured\r\n          </label>\r\n          <small>Highlight prominently</small>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"form-row\">\r\n        <div class=\"form-group checkbox-group\">\r\n          <label>\r\n            <input type=\"checkbox\" bind:checked={showToTeachers} />\r\n            Show to Teachers\r\n          </label>\r\n          <small>Visible to teachers</small>\r\n        </div>\r\n\r\n        <div class=\"form-group checkbox-group\">\r\n          <label>\r\n            <input type=\"checkbox\" bind:checked={showToStudents} />\r\n            Show to Students\r\n          </label>\r\n          <small>Visible to students</small>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"form-actions\">\r\n        <button type=\"submit\" disabled={isSubmitting} class=\"btn-primary\">\r\n          {#if isSubmitting}\r\n            {editingId ? 'Updating...' : 'Creating...'}\r\n          {:else}\r\n            {editingId ? 'Update Section' : 'Create Section'}\r\n          {/if}\r\n        </button>\r\n        \r\n        {#if editingId}\r\n          <button type=\"button\" on:click={resetForm} class=\"btn-secondary\">\r\n            Cancel\r\n          </button>\r\n        {/if}\r\n      </div>\r\n    </form>\r\n  </div>\r\n\r\n  <!-- Sections List -->\r\n  <div class=\"sections-list\">\r\n    <div class=\"list-header\">\r\n      <h3>Existing Sections ({sections.length})</h3>\r\n      <button on:click={fetchSections} class=\"btn-refresh\" disabled={loading}>\r\n        {loading ? 'Loading...' : 'Refresh'}\r\n      </button>\r\n    </div>\r\n\r\n    {#if loading && sections.length === 0}\r\n      <div class=\"loading\">Loading sections...</div>\r\n    {:else if sections.length === 0}\r\n      <div class=\"empty\">No sections found. Create your first section above.</div>\r\n    {:else}\r\n      <div class=\"sections-table\">\r\n        <table>\r\n          <thead>\r\n            <tr>\r\n              <th>Topic</th>\r\n              <th>Order</th>\r\n              <th>Status</th>\r\n              <th>Views</th>\r\n              <th>Created</th>\r\n              <th>Actions</th>\r\n            </tr>\r\n          </thead>\r\n          <tbody>\r\n            {#each sections as section}\r\n              <tr>\r\n                <td class=\"topic-cell\">\r\n                  <strong>{section.topic}</strong>\r\n                  {#if section.is_featured}\r\n                    <span class=\"badge featured\">Featured</span>\r\n                  {/if}\r\n                </td>\r\n                <td>{section.display_order}</td>\r\n                <td>\r\n                  {#if section.is_published}\r\n                    <span class=\"badge published\">Published</span>\r\n                  {:else}\r\n                    <span class=\"badge draft\">Draft</span>\r\n                  {/if}\r\n                </td>\r\n                <td>{section.view_count || 0}</td>\r\n                <td class=\"date-cell\">{formatDate(section.created_at)}</td>\r\n                <td class=\"actions-cell\">\r\n                  <button \r\n                    on:click={() => loadSectionForEdit(section)} \r\n                    class=\"btn-edit\"\r\n                    title=\"Edit\"\r\n                  >\r\n                    Edit\r\n                  </button>\r\n                  <button \r\n                    on:click={() => deleteSection(section.id)} \r\n                    class=\"btn-delete\"\r\n                    title=\"Delete\"\r\n                  >\r\n                    Delete\r\n                  </button>\r\n                </td>\r\n              </tr>\r\n            {/each}\r\n          </tbody>\r\n        </table>\r\n      </div>\r\n    {/if}\r\n  </div>\r\n</div>\r\n\r\n<style>\r\n  .information-section-component {\r\n    max-width: 100%;\r\n    padding: 20px;\r\n  }\r\n\r\n  .information-section-component h2 {\r\n    color: #fab45a;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .description {\r\n    color: #666;\r\n    margin-bottom: 30px;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .message {\r\n    padding: 12px 16px;\r\n    border-radius: 6px;\r\n    margin-bottom: 20px;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .message.success {\r\n    background-color: #d4edda;\r\n    color: #155724;\r\n    border: 1px solid #c3e6cb;\r\n  }\r\n\r\n  .message.error {\r\n    background-color: #f8d7da;\r\n    color: #721c24;\r\n    border: 1px solid #f5c6cb;\r\n  }\r\n\r\n  .section-form {\r\n    background: white;\r\n    padding: 25px;\r\n    border-radius: 8px;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    margin-bottom: 30px;\r\n  }\r\n\r\n  .section-form h3 {\r\n    margin-top: 0;\r\n    margin-bottom: 20px;\r\n    color: #333;\r\n  }\r\n\r\n  .form-group {\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .form-group label {\r\n    display: block;\r\n    margin-bottom: 8px;\r\n    font-weight: 500;\r\n    color: #333;\r\n  }\r\n\r\n  .form-group input[type=\"text\"],\r\n  .form-group input[type=\"number\"] {\r\n    width: 100%;\r\n    padding: 10px;\r\n    border: 2px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 14px;\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .form-group input[type=\"text\"]:focus,\r\n  .form-group input[type=\"number\"]:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 3px rgba(250, 180, 90, 0.1);\r\n  }\r\n\r\n  .form-group small {\r\n    display: block;\r\n    margin-top: 5px;\r\n    color: #666;\r\n    font-size: 12px;\r\n  }\r\n\r\n  .form-row {\r\n    display: flex;\r\n    gap: 20px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .form-row .form-group {\r\n    flex: 1;\r\n    min-width: 150px;\r\n  }\r\n\r\n  .checkbox-group {\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: flex-end;\r\n  }\r\n\r\n  .checkbox-group label {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .checkbox-group input[type=\"checkbox\"] {\r\n    width: auto;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .form-actions {\r\n    display: flex;\r\n    gap: 10px;\r\n    margin-top: 25px;\r\n  }\r\n\r\n  button {\r\n    padding: 10px 20px;\r\n    border: none;\r\n    border-radius: 6px;\r\n    font-size: 14px;\r\n    font-weight: 500;\r\n    cursor: pointer;\r\n    transition: all 0.2s;\r\n  }\r\n\r\n  button:disabled {\r\n    opacity: 0.6;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  .btn-primary {\r\n    background: #fab45a;\r\n    color: black;\r\n  }\r\n\r\n  .btn-primary:hover:not(:disabled) {\r\n    background: #f9a845;\r\n  }\r\n\r\n  .btn-secondary {\r\n    background: #6c757d;\r\n    color: white;\r\n  }\r\n\r\n  .btn-secondary:hover:not(:disabled) {\r\n    background: #5a6268;\r\n  }\r\n\r\n  .btn-refresh {\r\n    background: #007bff;\r\n    color: white;\r\n    padding: 8px 16px;\r\n    font-size: 13px;\r\n  }\r\n\r\n  .btn-refresh:hover:not(:disabled) {\r\n    background: #0056b3;\r\n  }\r\n\r\n  .sections-list {\r\n    background: white;\r\n    padding: 25px;\r\n    border-radius: 8px;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n  }\r\n\r\n  .list-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .list-header h3 {\r\n    margin: 0;\r\n    color: #333;\r\n  }\r\n\r\n  .loading,\r\n  .empty {\r\n    text-align: center;\r\n    padding: 40px;\r\n    color: #666;\r\n  }\r\n\r\n  .sections-table {\r\n    overflow-x: auto;\r\n  }\r\n\r\n  table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n  }\r\n\r\n  thead {\r\n    background-color: #f8f9fa;\r\n  }\r\n\r\n  th {\r\n    padding: 12px;\r\n    text-align: left;\r\n    font-weight: 600;\r\n    color: #333;\r\n    border-bottom: 2px solid #dee2e6;\r\n  }\r\n\r\n  td {\r\n    padding: 12px;\r\n    border-bottom: 1px solid #dee2e6;\r\n    color: #555;\r\n  }\r\n\r\n  tr:hover {\r\n    background-color: #f8f9fa;\r\n  }\r\n\r\n  .topic-cell {\r\n    font-weight: 500;\r\n  }\r\n\r\n  .date-cell {\r\n    font-size: 13px;\r\n    color: #666;\r\n  }\r\n\r\n  .actions-cell {\r\n    display: flex;\r\n    gap: 8px;\r\n  }\r\n\r\n  .btn-edit {\r\n    background: #17a2b8;\r\n    color: white;\r\n    padding: 6px 12px;\r\n    font-size: 13px;\r\n  }\r\n\r\n  .btn-edit:hover {\r\n    background: #138496;\r\n  }\r\n\r\n  .btn-delete {\r\n    background: #dc3545;\r\n    color: white;\r\n    padding: 6px 12px;\r\n    font-size: 13px;\r\n  }\r\n\r\n  .btn-delete:hover {\r\n    background: #c82333;\r\n  }\r\n\r\n  .badge {\r\n    display: inline-block;\r\n    padding: 4px 8px;\r\n    border-radius: 4px;\r\n    font-size: 11px;\r\n    font-weight: 600;\r\n    margin-left: 8px;\r\n  }\r\n\r\n  .badge.published {\r\n    background-color: #d4edda;\r\n    color: #155724;\r\n  }\r\n\r\n  .badge.draft {\r\n    background-color: #fff3cd;\r\n    color: #856404;\r\n  }\r\n\r\n  .badge.featured {\r\n    background-color: #d1ecf1;\r\n    color: #0c5460;\r\n  }\r\n</style>\r\n\r\n","<script>\r\n  import { onMount } from 'svelte';\r\n\r\n  const API_BASE_URL = '/studentplayground';\r\n\r\n  // State\r\n  let sections = [];\r\n  let loading = false;\r\n  let errorMessage = '';\r\n  let expandedSections = []; // Track which sections are expanded (array of IDs)\r\n  let filterType = 'all'; // 'all', 'published', 'featured'\r\n  let searchQuery = '';\r\n  let sortBy = 'display_order'; // 'display_order', 'created_at', 'topic'\r\n\r\n  // Fetch all sections\r\n  async function fetchSections() {\r\n    loading = true;\r\n    errorMessage = '';\r\n    const token = localStorage.getItem('jwtToken');\r\n    \r\n    if (!token) {\r\n      errorMessage = 'JWT token not found. Please log in.';\r\n      loading = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const response = await fetch(`${API_BASE_URL}/api/information-sections/`, {\r\n        method: 'GET',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        sections = data.sections || [];\r\n      } else {\r\n        const errorData = await response.json().catch(() => ({}));\r\n        errorMessage = errorData.error || `Failed to fetch sections: ${response.status}`;\r\n      }\r\n    } catch (error) {\r\n      errorMessage = `Network error: ${error.message}`;\r\n    } finally {\r\n      loading = false;\r\n    }\r\n  }\r\n\r\n  // Toggle section expansion\r\n  function toggleSection(sectionId) {\r\n    const index = expandedSections.indexOf(sectionId);\r\n    if (index > -1) {\r\n      // Remove from array\r\n      expandedSections = [\r\n        ...expandedSections.slice(0, index),\r\n        ...expandedSections.slice(index + 1)\r\n      ];\r\n    } else {\r\n      // Add to array\r\n      expandedSections = [...expandedSections, sectionId];\r\n    }\r\n  }\r\n\r\n  // Check if section is expanded (reactive)\r\n  function isExpanded(sectionId) {\r\n    return expandedSections.includes(sectionId);\r\n  }\r\n\r\n  // Filter sections based on filter type and search query\r\n  $: filteredSections = sections.filter(section => {\r\n    // Filter by type\r\n    if (filterType === 'published' && !section.is_published) {\r\n      return false;\r\n    }\r\n    if (filterType === 'featured' && !section.is_featured) {\r\n      return false;\r\n    }\r\n    \r\n    // Filter by search query\r\n    if (searchQuery.trim()) {\r\n      const query = searchQuery.toLowerCase();\r\n      return section.topic.toLowerCase().includes(query) ||\r\n             (section.content && section.content.toLowerCase().includes(query));\r\n    }\r\n    \r\n    return true;\r\n  });\r\n\r\n  // Sort sections\r\n  $: sortedSections = [...filteredSections].sort((a, b) => {\r\n    if (sortBy === 'display_order') {\r\n      if (a.display_order !== b.display_order) {\r\n        return a.display_order - b.display_order;\r\n      }\r\n      // Secondary sort by topic if display_order is same\r\n      return a.topic.localeCompare(b.topic);\r\n    } else if (sortBy === 'created_at') {\r\n      const dateA = new Date(a.created_at || 0);\r\n      const dateB = new Date(b.created_at || 0);\r\n      return dateB - dateA; // Newest first\r\n    } else if (sortBy === 'topic') {\r\n      return a.topic.localeCompare(b.topic);\r\n    }\r\n    return 0;\r\n  });\r\n\r\n  // Format date for display\r\n  function formatDate(dateString) {\r\n    if (!dateString) return 'N/A';\r\n    const date = new Date(dateString);\r\n    return date.toLocaleDateString('en-US', { \r\n      year: 'numeric', \r\n      month: 'short', \r\n      day: 'numeric' \r\n    });\r\n  }\r\n\r\n  // Initialize on mount\r\n  onMount(() => {\r\n    fetchSections();\r\n  });\r\n</script>\r\n\r\n<div class=\"information-sections-display\">\r\n  <div class=\"header\">\r\n    <h2>Information Sections</h2>\r\n    <p class=\"description\">View and browse all information sections with their full content.</p>\r\n  </div>\r\n\r\n  <!-- Controls -->\r\n  <div class=\"controls\">\r\n    <div class=\"filter-group\">\r\n      <label for=\"filter-type\">Filter:</label>\r\n      <select id=\"filter-type\" bind:value={filterType}>\r\n        <option value=\"all\">All Sections</option>\r\n        <option value=\"published\">Published Only</option>\r\n        <option value=\"featured\">Featured Only</option>\r\n      </select>\r\n    </div>\r\n\r\n    <div class=\"search-group\">\r\n      <label for=\"search\">Search:</label>\r\n      <input\r\n        id=\"search\"\r\n        type=\"text\"\r\n        bind:value={searchQuery}\r\n        placeholder=\"Search by topic or content...\"\r\n      />\r\n    </div>\r\n\r\n    <div class=\"sort-group\">\r\n      <label for=\"sort\">Sort by:</label>\r\n      <select id=\"sort\" bind:value={sortBy}>\r\n        <option value=\"display_order\">Display Order</option>\r\n        <option value=\"created_at\">Date Created</option>\r\n        <option value=\"topic\">Topic (A-Z)</option>\r\n      </select>\r\n    </div>\r\n\r\n    <button on:click={fetchSections} class=\"btn-refresh\" disabled={loading}>\r\n      {loading ? 'Loading...' : 'Refresh'}\r\n    </button>\r\n  </div>\r\n\r\n  <!-- Error Message -->\r\n  {#if errorMessage}\r\n    <div class=\"message error\">{errorMessage}</div>\r\n  {/if}\r\n\r\n  <!-- Loading State -->\r\n  {#if loading && sections.length === 0}\r\n    <div class=\"loading\">Loading sections...</div>\r\n  {:else if sortedSections.length === 0}\r\n    <div class=\"empty\">\r\n      {#if searchQuery || filterType !== 'all'}\r\n        No sections match your filters. Try adjusting your search or filter criteria.\r\n      {:else}\r\n        No sections found. Create your first section in the \"Information Sections\" tab.\r\n      {/if}\r\n    </div>\r\n  {:else}\r\n    <!-- Sections List -->\r\n    <div class=\"sections-list\">\r\n      {#each sortedSections as section (section.id)}\r\n        {@const isExpandedSection = expandedSections.includes(section.id)}\r\n        <div class=\"section-card\" class:expanded={isExpandedSection}>\r\n          <!-- Section Header (Always Visible) -->\r\n          <div class=\"section-header\" on:click={() => toggleSection(section.id)}>\r\n            <div class=\"section-header-content\">\r\n              <div class=\"section-title-group\">\r\n                <h3 class=\"section-topic\">{section.topic}</h3>\r\n                <div class=\"badges\">\r\n                  {#if section.is_featured}\r\n                    <span class=\"badge featured\">Featured</span>\r\n                  {/if}\r\n                  {#if section.is_published}\r\n                    <span class=\"badge published\">Published</span>\r\n                  {:else}\r\n                    <span class=\"badge draft\">Draft</span>\r\n                  {/if}\r\n                </div>\r\n              </div>\r\n              <div class=\"section-meta\">\r\n                <span class=\"meta-item\">Order: {section.display_order}</span>\r\n                <span class=\"meta-item\">Views: {section.view_count || 0}</span>\r\n                <span class=\"meta-item\">Created: {formatDate(section.created_at)}</span>\r\n              </div>\r\n            </div>\r\n            <div class=\"expand-icon\" class:expanded={isExpandedSection}>\r\n              <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n                <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n              </svg>\r\n            </div>\r\n          </div>\r\n\r\n          <!-- Section Content (Expanded) -->\r\n          {#if isExpandedSection}\r\n            <div class=\"section-content\">\r\n              <div class=\"content-wrapper\">\r\n                {@html section.content}\r\n              </div>\r\n              {#if section.created_by || section.last_updated_by}\r\n                <div class=\"section-footer\">\r\n                  {#if section.created_by}\r\n                    <span class=\"footer-item\">Created by: {section.created_by}</span>\r\n                  {/if}\r\n                  {#if section.last_updated_by}\r\n                    <span class=\"footer-item\">Last updated by: {section.last_updated_by}</span>\r\n                  {/if}\r\n                  {#if section.published_at}\r\n                    <span class=\"footer-item\">Published: {formatDate(section.published_at)}</span>\r\n                  {/if}\r\n                </div>\r\n              {/if}\r\n            </div>\r\n          {/if}\r\n        </div>\r\n      {/each}\r\n    </div>\r\n  {/if}\r\n</div>\r\n\r\n<style>\r\n  .information-sections-display {\r\n    max-width: 100%;\r\n    padding: 20px;\r\n  }\r\n\r\n  .header h2 {\r\n    color: #fab45a;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .description {\r\n    color: #666;\r\n    margin-bottom: 25px;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .controls {\r\n    display: flex;\r\n    gap: 15px;\r\n    margin-bottom: 25px;\r\n    flex-wrap: wrap;\r\n    align-items: flex-end;\r\n    padding: 15px;\r\n    background: #f8f9fa;\r\n    border-radius: 8px;\r\n  }\r\n\r\n  .filter-group,\r\n  .search-group,\r\n  .sort-group {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 5px;\r\n  }\r\n\r\n  .filter-group label,\r\n  .search-group label,\r\n  .sort-group label {\r\n    font-size: 12px;\r\n    font-weight: 500;\r\n    color: #555;\r\n  }\r\n\r\n  .filter-group select,\r\n  .sort-group select {\r\n    padding: 8px 12px;\r\n    border: 2px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 14px;\r\n    background: white;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .filter-group select:focus,\r\n  .sort-group select:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n  }\r\n\r\n  .search-group input {\r\n    padding: 8px 12px;\r\n    border: 2px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 14px;\r\n    min-width: 200px;\r\n  }\r\n\r\n  .search-group input:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 3px rgba(250, 180, 90, 0.1);\r\n  }\r\n\r\n  .btn-refresh {\r\n    padding: 8px 16px;\r\n    background: #007bff;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 6px;\r\n    font-size: 14px;\r\n    font-weight: 500;\r\n    cursor: pointer;\r\n    transition: background 0.2s;\r\n  }\r\n\r\n  .btn-refresh:hover:not(:disabled) {\r\n    background: #0056b3;\r\n  }\r\n\r\n  .btn-refresh:disabled {\r\n    opacity: 0.6;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  .message {\r\n    padding: 12px 16px;\r\n    border-radius: 6px;\r\n    margin-bottom: 20px;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .message.error {\r\n    background-color: #f8d7da;\r\n    color: #721c24;\r\n    border: 1px solid #f5c6cb;\r\n  }\r\n\r\n  .loading,\r\n  .empty {\r\n    text-align: center;\r\n    padding: 60px 20px;\r\n    color: #666;\r\n    font-size: 16px;\r\n  }\r\n\r\n  .sections-list {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 15px;\r\n  }\r\n\r\n  .section-card {\r\n    background: white;\r\n    border: 2px solid #e0e0e0;\r\n    border-radius: 8px;\r\n    overflow: hidden;\r\n    transition: all 0.3s ease;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n  }\r\n\r\n  .section-card:hover {\r\n    border-color: #fab45a;\r\n    box-shadow: 0px 2px 8px rgba(250, 180, 90, 0.15);\r\n  }\r\n\r\n  .section-card.expanded {\r\n    border-color: #fab45a;\r\n  }\r\n\r\n  .section-header {\r\n    padding: 20px;\r\n    cursor: pointer;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    transition: background-color 0.2s;\r\n  }\r\n\r\n  .section-header:hover {\r\n    background-color: #f8f9fa;\r\n  }\r\n\r\n  .section-header-content {\r\n    flex: 1;\r\n  }\r\n\r\n  .section-title-group {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 12px;\r\n    margin-bottom: 10px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .section-topic {\r\n    margin: 0;\r\n    font-size: 1.3em;\r\n    font-weight: 600;\r\n    color: #333;\r\n  }\r\n\r\n  .badges {\r\n    display: flex;\r\n    gap: 8px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .badge {\r\n    display: inline-block;\r\n    padding: 4px 10px;\r\n    border-radius: 4px;\r\n    font-size: 11px;\r\n    font-weight: 600;\r\n    text-transform: uppercase;\r\n  }\r\n\r\n  .badge.published {\r\n    background-color: #d4edda;\r\n    color: #155724;\r\n  }\r\n\r\n  .badge.draft {\r\n    background-color: #fff3cd;\r\n    color: #856404;\r\n  }\r\n\r\n  .badge.featured {\r\n    background-color: #d1ecf1;\r\n    color: #0c5460;\r\n  }\r\n\r\n  .section-meta {\r\n    display: flex;\r\n    gap: 15px;\r\n    flex-wrap: wrap;\r\n    font-size: 13px;\r\n    color: #666;\r\n  }\r\n\r\n  .meta-item {\r\n    display: flex;\r\n    align-items: center;\r\n  }\r\n\r\n  .expand-icon {\r\n    transition: transform 0.3s ease;\r\n    color: #666;\r\n    flex-shrink: 0;\r\n    margin-left: 15px;\r\n  }\r\n\r\n  .expand-icon.expanded {\r\n    transform: rotate(180deg);\r\n  }\r\n\r\n  .section-content {\r\n    padding: 0 20px 20px 20px;\r\n    border-top: 1px solid #e0e0e0;\r\n    animation: slideDown 0.3s ease;\r\n  }\r\n\r\n  @keyframes slideDown {\r\n    from {\r\n      opacity: 0;\r\n      max-height: 0;\r\n    }\r\n    to {\r\n      opacity: 1;\r\n      max-height: 5000px;\r\n    }\r\n  }\r\n\r\n  .content-wrapper {\r\n    padding: 20px 0;\r\n    line-height: 1.6;\r\n    color: #333;\r\n  }\r\n\r\n  /* Style HTML content from TinyMCE */\r\n  .content-wrapper :global(p) {\r\n    margin-bottom: 1em;\r\n  }\r\n\r\n  .content-wrapper :global(h1),\r\n  .content-wrapper :global(h2),\r\n  .content-wrapper :global(h3),\r\n  .content-wrapper :global(h4),\r\n  .content-wrapper :global(h5),\r\n  .content-wrapper :global(h6) {\r\n    margin-top: 1.5em;\r\n    margin-bottom: 0.5em;\r\n    font-weight: 600;\r\n    color: #333;\r\n  }\r\n\r\n  .content-wrapper :global(h1) {\r\n    font-size: 2em;\r\n  }\r\n\r\n  .content-wrapper :global(h2) {\r\n    font-size: 1.5em;\r\n  }\r\n\r\n  .content-wrapper :global(h3) {\r\n    font-size: 1.25em;\r\n  }\r\n\r\n  .content-wrapper :global(ul),\r\n  .content-wrapper :global(ol) {\r\n    margin-bottom: 1em;\r\n    padding-left: 2em;\r\n  }\r\n\r\n  .content-wrapper :global(li) {\r\n    margin-bottom: 0.5em;\r\n  }\r\n\r\n  .content-wrapper :global(img) {\r\n    max-width: 100%;\r\n    height: auto;\r\n    border-radius: 6px;\r\n    margin: 1em 0;\r\n    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n  }\r\n\r\n  .content-wrapper :global(a) {\r\n    color: #007bff;\r\n    text-decoration: none;\r\n  }\r\n\r\n  .content-wrapper :global(a:hover) {\r\n    text-decoration: underline;\r\n  }\r\n\r\n  .content-wrapper :global(table) {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n    margin: 1em 0;\r\n  }\r\n\r\n  .content-wrapper :global(table td),\r\n  .content-wrapper :global(table th) {\r\n    padding: 8px 12px;\r\n    border: 1px solid #ddd;\r\n  }\r\n\r\n  .content-wrapper :global(table th) {\r\n    background-color: #f8f9fa;\r\n    font-weight: 600;\r\n  }\r\n\r\n  .content-wrapper :global(blockquote) {\r\n    border-left: 4px solid #fab45a;\r\n    padding-left: 1em;\r\n    margin: 1em 0;\r\n    color: #666;\r\n    font-style: italic;\r\n  }\r\n\r\n  .section-footer {\r\n    margin-top: 20px;\r\n    padding-top: 15px;\r\n    border-top: 1px solid #e0e0e0;\r\n    display: flex;\r\n    gap: 20px;\r\n    flex-wrap: wrap;\r\n    font-size: 12px;\r\n    color: #666;\r\n  }\r\n\r\n  .footer-item {\r\n    display: flex;\r\n    align-items: center;\r\n  }\r\n</style>\r\n\r\n","<script>    \r\n    import { onMount } from 'svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n    import RefreshDatabaseButtonComponent from \"./RefreshDatabaseButtonComponent.svelte\";\r\n    import CreateStudentEmailComponent from \"./CreateStudentEmailComponent.svelte\";\r\n    import AdminRescheduleRequestsComponent from \"./AdminRescheduleRequestsComponent.svelte\";\r\n    import AdminClassRegistrationRequestsComponent from \"./AdminClassRegistrationRequestsComponent.svelte\";\r\n    import AdminRegistrationComponent from \"./AdminRegistrationComponent.svelte\";\r\n    import SendWeeklyScheduleSMS from \"./SendWeeklyScheduleSMS.svelte\";\r\n    import SelectUsersEmailComponent from \"./SelectUsersEmailComponent.svelte\";\r\n    import SelectUsersSMSComponent from \"./SelectUsersSMSComponent.svelte\";\r\n    import TeacherFinderComponent from \"./TeacherFinderComponent.svelte\";\r\n    import TeacherAvailabilityCapacityComponent from \"./TeacherAvailabilityCapacityComponent.svelte\";\r\n    import CreateInformationSectionComponent from \"./CreateInformationSectionComponent.svelte\";\r\n    import InformationSectionsDisplayComponent from \"./InformationSectionsDisplayComponent.svelte\";\r\n    import NavBarReusable from \"./NavbarReusable.svelte\";\r\n\r\n    const apiBase = getApiBase();\r\n\r\n    // State for tab management\r\n    let activeTab = 'reschedule-requests'; // 'reschedule-requests', 'class-registrations', 'send-emails', 'send-bulk-emails', 'send-bulk-sms', 'send-sms', 'find-teachers', 'system-maintenance', 'information-sections', 'view-information-sections'\r\n    let registrationSubTab = 'view-requests'; // 'view-requests', 'create-request'\r\n    let acceptedUnhandledCount = 0;\r\n\r\n    function switchTab(tab) {\r\n        activeTab = tab;\r\n        // Refresh count when switching away from class-registrations tab\r\n        if (tab !== 'class-registrations') {\r\n            fetchAcceptedUnhandledCount();\r\n        }\r\n    }\r\n\r\n    function openExerciseBank() {\r\n        const currentUrl = window.location.origin;\r\n        window.open(`${currentUrl}/#/exercise-bank`, '_blank');\r\n    }\r\n\r\n    function switchRegistrationSubTab(subTab) {\r\n        registrationSubTab = subTab;\r\n    }\r\n\r\n    // Function to fetch count of unhandled registrations\r\n    async function fetchAcceptedUnhandledCount() {\r\n        const token = localStorage.getItem('jwtToken');\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/requests/admin-registration-count/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                acceptedUnhandledCount = data.accepted_unhandled_count;\r\n            }\r\n        } catch (error) {\r\n            console.error('Error fetching accepted unhandled count:', error);\r\n        }\r\n    }\r\n\r\n    // Initialize count on component mount\r\n    onMount(() => {\r\n        fetchAcceptedUnhandledCount();\r\n    });\r\n</script>\r\n\r\n<NavBarReusable label=\"Admin - Communication & Scheduling\" />\r\n\r\n<div class=\"tab-navigation\">\r\n    <button \r\n        class=\"tab-button {activeTab === 'reschedule-requests' ? 'active' : ''}\"\r\n        on:click={() => switchTab('reschedule-requests')}\r\n    >\r\n        Reschedule Requests\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'class-registrations' ? 'active' : ''}\"\r\n        on:click={() => switchTab('class-registrations')}\r\n    >\r\n        <span>Class Registrations</span>\r\n        {#if acceptedUnhandledCount > 0}\r\n            <span class=\"count-badge\">{acceptedUnhandledCount}</span>\r\n        {/if}\r\n    </button>\r\n\r\n    <button \r\n        class=\"tab-button {activeTab === 'send-emails' ? 'active' : ''}\"\r\n        on:click={() => switchTab('send-emails')}\r\n    >\r\n        Send Class Emails\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'send-bulk-emails' ? 'active' : ''}\"\r\n        on:click={() => switchTab('send-bulk-emails')}\r\n    >\r\n        Send Bulk Emails\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'send-bulk-sms' ? 'active' : ''}\"\r\n        on:click={() => switchTab('send-bulk-sms')}\r\n    >\r\n        Send Bulk SMS\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'send-sms' ? 'active' : ''}\"\r\n        on:click={() => switchTab('send-sms')}\r\n    >\r\n        Send SMS\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'find-teachers' ? 'active' : ''}\"\r\n        on:click={() => switchTab('find-teachers')}\r\n    >\r\n        Find Teachers\r\n    </button>\r\n    <button\r\n        class=\"tab-button {activeTab === 'teacher-capacity' ? 'active' : ''}\"\r\n        on:click={() => switchTab('teacher-capacity')}\r\n    >\r\n        Availability Capacity\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'system-maintenance' ? 'active' : ''}\"\r\n        on:click={() => switchTab('system-maintenance')}\r\n    >\r\n        Database refresh\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'information-sections' ? 'active' : ''}\"\r\n        on:click={() => switchTab('information-sections')}\r\n    >\r\n        Bendra Informacija SUBMIT\r\n    </button>\r\n    <button \r\n        class=\"tab-button {activeTab === 'view-information-sections' ? 'active' : ''}\"\r\n        on:click={() => switchTab('view-information-sections')}\r\n    >\r\n        bendra informacija DISPLAY\r\n    </button>\r\n    <button \r\n        class=\"tab-button\"\r\n        on:click={openExerciseBank}\r\n    >\r\n        Uzduotys (HERKUS)\r\n    </button>\r\n</div>\r\n\r\n{#if activeTab === 'reschedule-requests'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Handle Reschedule Requests</h3>\r\n        <AdminRescheduleRequestsComponent />\r\n    </div>\r\n{:else if activeTab === 'class-registrations'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Class Registration Management</h3>\r\n        \r\n        <!-- Sub-tabs for class registration management -->\r\n        <div class=\"sub-tab-navigation\">\r\n            <button \r\n                class=\"sub-tab-button {registrationSubTab === 'view-requests' ? 'active' : ''}\"\r\n                on:click={() => switchRegistrationSubTab('view-requests')}\r\n            >\r\n                View Requests\r\n            </button>\r\n            <button \r\n                class=\"sub-tab-button {registrationSubTab === 'create-request' ? 'active' : ''}\"\r\n                on:click={() => switchRegistrationSubTab('create-request')}\r\n            >\r\n                Create New Request\r\n            </button>\r\n        </div>\r\n\r\n        <!-- Sub-tab content -->\r\n        {#if registrationSubTab === 'view-requests'}\r\n            <div class=\"sub-content\">\r\n                <h4>Handle Class Registration Requests</h4>\r\n                <AdminClassRegistrationRequestsComponent />\r\n            </div>\r\n        {:else if registrationSubTab === 'create-request'}\r\n            <div class=\"sub-content\">\r\n                <h4>Create Class Registration Request</h4>\r\n                <AdminRegistrationComponent />\r\n            </div>\r\n        {/if}\r\n    </div>\r\n{:else if activeTab === 'send-emails'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Send Student Emails</h3>\r\n        <CreateStudentEmailComponent />\r\n    </div>\r\n{:else if activeTab === 'send-bulk-emails'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Send Bulk Emails to Users</h3>\r\n        <SelectUsersEmailComponent />\r\n    </div>\r\n{:else if activeTab === 'send-bulk-sms'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Send Bulk SMS to Users</h3>\r\n        <SelectUsersSMSComponent />\r\n    </div>\r\n{:else if activeTab === 'send-sms'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Send Weekly Schedule SMS</h3>\r\n        <SendWeeklyScheduleSMS />\r\n    </div>\r\n{:else if activeTab === 'find-teachers'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Find Teachers</h3>\r\n        <TeacherFinderComponent />\r\n    </div>\r\n{:else if activeTab === 'teacher-capacity'}\r\n    <div class=\"classcontainer\">\r\n        <TeacherAvailabilityCapacityComponent />\r\n    </div>\r\n{:else if activeTab === 'system-maintenance'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Database refresh</h3>\r\n        <RefreshDatabaseButtonComponent />\r\n    </div>\r\n{:else if activeTab === 'information-sections'}\r\n    <div class=\"classcontainer\">\r\n        <h3>Information Sections</h3>\r\n        <CreateInformationSectionComponent />\r\n    </div>\r\n{:else if activeTab === 'view-information-sections'}\r\n    <div class=\"classcontainer\">\r\n        <InformationSectionsDisplayComponent />\r\n    </div>\r\n{/if}\r\n\r\n<style>\r\n    .tab-navigation {\r\n        display: flex;\r\n        gap: 10px;\r\n        margin-bottom: 20px;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .tab-button {\r\n        padding: 10px 20px;\r\n        border: 1px solid #ccc;\r\n        background: white;\r\n        cursor: pointer;\r\n        border-radius: 8px;\r\n        font-size: 14px;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n        position: relative;\r\n    }\r\n\r\n    .tab-button.active {\r\n        background: #fab45a;\r\n        color: black;\r\n        border-color: #fab45a;\r\n    }\r\n\r\n    .count-badge {\r\n        background-color: #dc3545;\r\n        color: white;\r\n        border-radius: 50%;\r\n        padding: 4px 8px;\r\n        font-size: 12px;\r\n        font-weight: bold;\r\n        min-width: 20px;\r\n        height: 20px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        line-height: 1;\r\n    }\r\n\r\n    .classcontainer {\r\n        padding: 15px;\r\n        background-color: white;\r\n        flex-direction: column;\r\n        margin-bottom: 15px;\r\n        gap: 10px;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        border-radius: 8px;\r\n        flex: none;\r\n        color: black;\r\n        align-items: flex-start;\r\n    }\r\n\r\n    .classcontainer h3 {\r\n        margin: 0 0 15px 0;\r\n        color: #333;\r\n    }\r\n\r\n    .classcontainer h4 {\r\n        margin: 0 0 10px 0;\r\n        color: #555;\r\n        font-size: 1.1rem;\r\n        font-weight: 500;\r\n    }\r\n\r\n    /* Sub-tab navigation */\r\n    .sub-tab-navigation {\r\n        display: flex;\r\n        gap: 8px;\r\n        margin-bottom: 20px;\r\n        border-bottom: 1px solid #e0e0e0;\r\n        padding-bottom: 10px;\r\n    }\r\n\r\n    .sub-tab-button {\r\n        padding: 8px 16px;\r\n        border: 1px solid #ddd;\r\n        background: #f8f9fa;\r\n        cursor: pointer;\r\n        border-radius: 6px;\r\n        font-size: 13px;\r\n        color: #666;\r\n        transition: all 0.2s ease;\r\n    }\r\n\r\n    .sub-tab-button.active {\r\n        background: #007bff;\r\n        color: white;\r\n        border-color: #007bff;\r\n    }\r\n\r\n    .sub-tab-button:hover:not(.active) {\r\n        background: #e9ecef;\r\n        border-color: #bbb;\r\n    }\r\n\r\n    .sub-content {\r\n        margin-top: 15px;\r\n    }\r\n\r\n    /* Override nested component styles for cleaner integration */\r\n    :global(.classcontainer .admin-reschedule-requests) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    :global(.classcontainer .create-student-email) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    :global(.classcontainer .send-weekly-sms) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    :global(.classcontainer .refresh-database) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    :global(.classcontainer .select-users-email-container) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    :global(.classcontainer .select-users-sms-container) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    :global(.classcontainer .teacher-finder) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    :global(.classcontainer .information-section-component) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    :global(.classcontainer .information-sections-display) {\r\n        max-width: none;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n</style>\r\n","<script>\r\n  import { onMount } from 'svelte';\r\n\r\n  // State for teachers\r\n  let teachers = [];\r\n  let teacherQuery = '';\r\n  let filteredTeachers = [];\r\n  let selectedTeacher = null;\r\n  let showTeacherDropdown = false;\r\n\r\n  // State for students\r\n  let students = [];\r\n  let studentQuery = '';\r\n  let filteredStudents = [];\r\n  let selectedStudent = null;\r\n  let showStudentDropdown = false;\r\n\r\n  // State for shared classes\r\n  let sharedClasses = [];\r\n  let loadingClasses = false;\r\n  let classesError = null;\r\n\r\n  // State for class selection and form\r\n  let selectedClass = null;\r\n  let responsibility = '';\r\n  let type = '';\r\n  let comment = '';\r\n  let submitting = false;\r\n  let submitError = null;\r\n  let submitSuccess = false;\r\n\r\n  // Fetch teachers\r\n  async function fetchTeachers() {\r\n    const url = '/studentplayground/api/get_google_calendar_ids/';\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) return;\r\n    try {\r\n      const response = await fetch(url, {\r\n        method: 'GET',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n      });\r\n      if (!response.ok) throw new Error(`Error: ${response.status}`);\r\n      const data = await response.json();\r\n      teachers = data.teachers || [];\r\n      filteredTeachers = teachers;\r\n    } catch (error) {\r\n      console.error('Failed to fetch teachers:', error);\r\n    }\r\n  }\r\n\r\n  // Fetch students\r\n  async function fetchStudents() {\r\n    const url = '/studentplayground/get_all_students/';\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) return;\r\n    try {\r\n      const response = await fetch(url, {\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`\r\n        }\r\n      });\r\n      if (!response.ok) throw new Error(`Error: ${response.status}`);\r\n      const data = await response.json();\r\n      students = data.students || [];\r\n      filteredStudents = students;\r\n    } catch (error) {\r\n      console.error('Failed to fetch students:', error);\r\n    }\r\n  }\r\n\r\n  // Fetch shared classes between selected teacher and student\r\n  async function fetchSharedClasses(teacherId, studentId) {\r\n    loadingClasses = true;\r\n    classesError = null;\r\n    const url = '/studentplayground/api/get_shared_classes/';\r\n    const token = localStorage.getItem('jwtToken');\r\n    \r\n    if (!token) {\r\n      classesError = 'JWT token not found. Please log in.';\r\n      loadingClasses = false;\r\n      return;\r\n    }\r\n  \r\n    try {\r\n      const response = await fetch(url, {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n          teacher_id: teacherId,\r\n          student_id: studentId\r\n        })\r\n      });\r\n  \r\n      if (!response.ok) {\r\n        throw new Error(`Error: ${response.status}`);\r\n      }\r\n  \r\n      const data = await response.json();\r\n      sharedClasses = data.classes || [];\r\n    } catch (error) {\r\n      classesError = `Failed to fetch shared classes: ${error.message}`;\r\n      sharedClasses = [];\r\n    } finally {\r\n      loadingClasses = false;\r\n    }\r\n  }\r\n\r\n  // Filter teachers as user types\r\n  $: filteredTeachers = teacherQuery\r\n    ? teachers.filter(t => t.name.toLowerCase().includes(teacherQuery.toLowerCase()))\r\n    : teachers;\r\n  $: showTeacherDropdown = teacherQuery && filteredTeachers.length > 0 && !selectedTeacher;\r\n\r\n  // Filter students as user types\r\n  $: filteredStudents = studentQuery\r\n    ? students.filter(s => `${s.first_name} ${s.last_name}`.toLowerCase().includes(studentQuery.toLowerCase()))\r\n    : students;\r\n  $: showStudentDropdown = studentQuery && filteredStudents.length > 0 && !selectedStudent;\r\n\r\n  // Fetch classes when both teacher and student are selected\r\n  $: if (selectedTeacher && selectedStudent) {\r\n    fetchSharedClasses(selectedTeacher.id, selectedStudent.id);\r\n  }\r\n\r\n  // On mount, fetch both lists\r\n  onMount(() => { \r\n    fetchTeachers();\r\n    fetchStudents();\r\n  });\r\n\r\n  function selectTeacher(teacher) {\r\n    selectedTeacher = teacher;\r\n    teacherQuery = teacher.name;\r\n    showTeacherDropdown = false;\r\n  }\r\n\r\n  function selectStudent(student) {\r\n    selectedStudent = student;\r\n    studentQuery = `${student.first_name} ${student.last_name}`;\r\n    showStudentDropdown = false;\r\n  }\r\n\r\n  function selectClass(classItem) {\r\n    selectedClass = classItem;\r\n    // Reset form when selecting a new class\r\n    responsibility = '';\r\n    type = '';\r\n    comment = '';\r\n  }\r\n\r\n  function clearSelection() {\r\n    selectedClass = null;\r\n    responsibility = '';\r\n    type = '';\r\n    comment = '';\r\n    submitError = null;\r\n    submitSuccess = false;\r\n  }\r\n\r\n  async function submitResponsibility() {\r\n    // Reset previous states\r\n    submitError = null;\r\n    submitSuccess = false;\r\n    submitting = true;\r\n\r\n    // Validate form\r\n    if (!responsibility) {\r\n      submitError = 'Please select who is responsible.';\r\n      submitting = false;\r\n      return;\r\n    }\r\n    if (!type) {\r\n      submitError = 'Please select the incident type.';\r\n      submitting = false;\r\n      return;\r\n    }\r\n    if (!selectedClass) {\r\n      submitError = 'No class selected.';\r\n      submitting = false;\r\n      return;\r\n    }\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      submitError = 'JWT token not found. Please log in.';\r\n      submitting = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const response = await fetch('/studentplayground/api/submit_class_responsibility/', {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n                 body: JSON.stringify({\r\n           class_data: {\r\n             id: selectedClass.id,\r\n             name: selectedClass.name || selectedClass.subject,  // Send full name\r\n             subject: selectedClass.subject,  // Keep for backward compatibility\r\n             teacher: selectedClass.teacher,\r\n             student: selectedClass.student,\r\n             date: selectedClass.date,\r\n             start_time: selectedClass.start_time,\r\n             end_time: selectedClass.end_time\r\n           },\r\n          responsibility: responsibility,\r\n          incident_type: type,\r\n          comment: comment.trim()\r\n        })\r\n      });\r\n\r\n      const data = await response.json();\r\n\r\n      if (response.ok) {\r\n        submitSuccess = true;\r\n        \r\n        // If it was a cancellation (Atsaukimas), refresh the shared classes list\r\n        if (type === 'Atsaukimas') {\r\n          // Remove the cancelled class from the current list immediately\r\n          sharedClasses = sharedClasses.filter(c => c.id !== selectedClass.id);\r\n          \r\n          // Refresh the full list from server to ensure consistency\r\n          setTimeout(() => {\r\n            if (selectedTeacher && selectedStudent) {\r\n              fetchSharedClasses(selectedTeacher.id, selectedStudent.id);\r\n            }\r\n          }, 1000);\r\n        }\r\n        \r\n        // Clear form after successful submission\r\n        setTimeout(() => {\r\n          clearSelection();\r\n        }, 2000);\r\n      } else {\r\n        submitError = data.error || 'Failed to submit responsibility form.';\r\n      }\r\n    } catch (error) {\r\n      submitError = `Network error: ${error.message}`;\r\n    } finally {\r\n      submitting = false;\r\n    }\r\n  }\r\n</script>\r\n\r\n<div>\r\n  <label for=\"teacher-input\"><strong>Select Teacher:</strong></label>\r\n  <input\r\n    id=\"teacher-input\"\r\n    type=\"text\"\r\n    placeholder=\"Search teacher...\"\r\n    bind:value={teacherQuery}\r\n    on:input={() => {\r\n      if (selectedTeacher && teacherQuery !== selectedTeacher.name) {\r\n        selectedTeacher = null;\r\n        showTeacherDropdown = true;\r\n      }\r\n    }}\r\n    autocomplete=\"off\"\r\n  />\r\n  {#if showTeacherDropdown}\r\n    <ul class=\"autocomplete-list\">\r\n      {#each filteredTeachers.slice(0, 8) as teacher}\r\n        <li>\r\n          <button\r\n            type=\"button\"\r\n            on:click={() => selectTeacher(teacher)}\r\n            on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectTeacher(teacher)}\r\n          >\r\n            {teacher.name}\r\n          </button>\r\n        </li>\r\n      {/each}\r\n    </ul>\r\n  {/if}\r\n  {#if selectedTeacher}\r\n    <div class=\"selected\">Selected Teacher: {selectedTeacher.name}</div>\r\n  {/if}\r\n</div>\r\n\r\n<div style=\"margin-top: 2em;\">\r\n  <label for=\"student-input\"><strong>Select Student:</strong></label>\r\n  <input\r\n    id=\"student-input\"\r\n    type=\"text\"\r\n    placeholder=\"Search student...\"\r\n    bind:value={studentQuery}\r\n    on:input={() => {\r\n      if (selectedStudent && studentQuery !== `${selectedStudent.first_name} ${selectedStudent.last_name}`) {\r\n        selectedStudent = null;\r\n        showStudentDropdown = true;\r\n      }\r\n    }}\r\n    autocomplete=\"off\"\r\n  />\r\n  {#if showStudentDropdown}\r\n    <ul class=\"autocomplete-list\">\r\n      {#each filteredStudents.slice(0, 8) as student}\r\n        <li>\r\n          <button\r\n            type=\"button\"\r\n            on:click={() => selectStudent(student)}\r\n            on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectStudent(student)}\r\n          >\r\n            {student.first_name} {student.last_name}\r\n          </button>\r\n        </li>\r\n      {/each}\r\n    </ul>\r\n  {/if}\r\n  {#if selectedStudent}\r\n    <div class=\"selected\">Selected Student: {selectedStudent.first_name} {selectedStudent.last_name}</div>\r\n  {/if}\r\n</div>\r\n\r\n<!-- Shared Classes Section -->\r\n{#if selectedTeacher && selectedStudent}\r\n  <div style=\"margin-top: 3em;\">\r\n    <h3>Shared Classes</h3>\r\n    <p>Classes between <strong>{selectedTeacher.name}</strong> and <strong>{selectedStudent.first_name} {selectedStudent.last_name}</strong></p>\r\n    \r\n    {#if loadingClasses}\r\n      <div class=\"loading\">Loading shared classes...</div>\r\n    {:else if classesError}\r\n      <div class=\"error\">{classesError}</div>\r\n        {:else if sharedClasses.length > 0}\r\n      <div class=\"classes-list\">\r\n        {#each sharedClasses as classItem}\r\n          <div \r\n            class=\"class-item {selectedClass?.id === classItem.id ? 'selected' : ''} {selectedClass && selectedClass.id !== classItem.id ? 'minimized' : ''}\"\r\n            on:click={() => selectClass(classItem)}\r\n            role=\"button\"\r\n            tabindex=\"0\"\r\n            on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectClass(classItem)}\r\n          >\r\n            <h4>{classItem.name || classItem.subject || 'Class'}</h4>\r\n            <p><strong>Date:</strong> {classItem.date}</p>\r\n            <p><strong>Time:</strong> {classItem.start_time} - {classItem.end_time}</p>\r\n            <p><strong>Teacher:</strong> {classItem.teacher}</p>\r\n            <p><strong>Student:</strong> {classItem.student}</p>\r\n            {#if classItem.status}\r\n              <p><strong>Status:</strong> {classItem.status}</p>\r\n            {/if}\r\n          </div>\r\n        {/each}\r\n      </div>\r\n\r\n      {#if selectedClass}\r\n        <div class=\"responsibility-form\">\r\n          <h3>Class Responsibility Form</h3>\r\n          <div class=\"selected-class-info\">\r\n            <strong>Selected:</strong> {selectedClass.name || selectedClass.subject} on {selectedClass.date} at {selectedClass.start_time} - {selectedClass.end_time}\r\n          </div>\r\n          \r\n          <div class=\"form-group\">\r\n            <label for=\"responsibility\">Kaltininkas:</label>\r\n            <select id=\"responsibility\" bind:value={responsibility}>\r\n              <option value=\"\">Select responsibility...</option>\r\n              <option value=\"Teacher\">Teacher</option>\r\n              <option value=\"Student\">Student</option>\r\n            </select>\r\n          </div>\r\n\r\n          <div class=\"form-group\">\r\n            <label for=\"type\">Tipas:</label>\r\n            <select id=\"type\" bind:value={type}>\r\n              <option value=\"\">Select type...</option>\r\n              <option value=\"Velavimas\">Velavimas</option>\r\n              <option value=\"Atsaukimas\">Atsaukimas</option>\r\n              <option value=\"Kitas\">Kitas</option>\r\n            </select>\r\n          </div>\r\n\r\n          <div class=\"form-group\">\r\n            <label for=\"comment\">Comment:</label>\r\n            <textarea \r\n              id=\"comment\" \r\n              bind:value={comment} \r\n              placeholder=\"Add any additional details...\"\r\n              rows=\"3\"\r\n            ></textarea>\r\n          </div>\r\n\r\n          {#if submitError}\r\n            <div class=\"submit-error\">{submitError}</div>\r\n          {/if}\r\n\r\n          {#if submitSuccess}\r\n            <div class=\"submit-success\">Responsibility assignment submitted successfully!</div>\r\n          {/if}\r\n\r\n          <div class=\"form-actions\">\r\n            <button \r\n              type=\"button\" \r\n              class=\"btn-submit\"\r\n              on:click={submitResponsibility}\r\n              disabled={submitting || !responsibility || !type}\r\n            >\r\n              {submitting ? 'Submitting...' : 'Submit'}\r\n            </button>\r\n            <button type=\"button\" class=\"btn-cancel\" on:click={clearSelection}>Cancel</button>\r\n          </div>\r\n        </div>\r\n      {/if}\r\n    {:else}\r\n      <div class=\"no-classes\">No shared classes found between this teacher and student.</div>\r\n    {/if}\r\n  </div>\r\n{/if}\r\n\r\n<style>\r\n  .autocomplete-list {\r\n    border: 1px solid #ccc;\r\n    max-height: 180px;\r\n    overflow-y: auto;\r\n    margin: 0;\r\n    padding: 0;\r\n    list-style: none;\r\n    background: white;\r\n    position: absolute;\r\n    z-index: 10;\r\n    width: 300px;\r\n  }\r\n  .autocomplete-list li {\r\n    padding: 0;\r\n  }\r\n  .autocomplete-list button {\r\n    width: 100%;\r\n    text-align: left;\r\n    background: none;\r\n    border: none;\r\n    padding: 8px 12px;\r\n    cursor: pointer;\r\n    display: block;\r\n  }\r\n  .autocomplete-list button:hover {\r\n    background: #f0f0f0;\r\n  }\r\n  .selected {\r\n    margin-top: 0.5em;\r\n    color: #2a7ae2;\r\n  }\r\n  input[type=\"text\"] {\r\n    width: 300px;\r\n    padding: 8px;\r\n    margin-bottom: 0;\r\n    box-sizing: border-box;\r\n  }\r\n \r\n   /* Shared Classes Styles */\r\n  .loading {\r\n    color: #666;\r\n    font-style: italic;\r\n    padding: 1em;\r\n  }\r\n  \r\n  .error {\r\n    color: #d32f2f;\r\n    background: #ffebee;\r\n    padding: 1em;\r\n    border-radius: 4px;\r\n    border-left: 4px solid #d32f2f;\r\n  }\r\n  \r\n  .classes-list {\r\n    display: grid;\r\n    gap: 1em;\r\n    margin-top: 1em;\r\n  }\r\n  \r\n  .class-item {\r\n    border: 1px solid #ddd;\r\n    border-radius: 8px;\r\n    padding: 1em;\r\n    background: #f9f9f9;\r\n    cursor: pointer;\r\n    transition: all 0.3s ease;\r\n  }\r\n  \r\n  .class-item:hover {\r\n    background: #f0f8ff;\r\n    border-color: #2a7ae2;\r\n  }\r\n  \r\n  .class-item.selected {\r\n    background: #e6f3ff;\r\n    border-color: #2a7ae2;\r\n    border-width: 2px;\r\n  }\r\n  \r\n  .class-item.minimized {\r\n    opacity: 0.4;\r\n    transform: scale(0.95);\r\n  }\r\n  \r\n  .class-item h4 {\r\n    margin: 0 0 0.5em 0;\r\n    color: #2a7ae2;\r\n  }\r\n  \r\n  .class-item p {\r\n    margin: 0.25em 0;\r\n    font-size: 0.9em;\r\n  }\r\n  \r\n  .no-classes {\r\n    color: #666;\r\n    font-style: italic;\r\n    padding: 1em;\r\n    text-align: center;\r\n    background: #f5f5f5;\r\n    border-radius: 4px;\r\n  }\r\n\r\n  /* Responsibility Form Styles */\r\n  .responsibility-form {\r\n    margin-top: 2em;\r\n    padding: 1.5em;\r\n    border: 1px solid #ddd;\r\n    border-radius: 8px;\r\n    background: #fff;\r\n  }\r\n\r\n  .responsibility-form h3 {\r\n    margin: 0 0 1em 0;\r\n    color: #2a7ae2;\r\n  }\r\n\r\n  .selected-class-info {\r\n    background: #f0f8ff;\r\n    padding: 0.75em;\r\n    border-radius: 4px;\r\n    margin-bottom: 1em;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .form-group {\r\n    margin-bottom: 1em;\r\n  }\r\n\r\n  .form-group label {\r\n    display: block;\r\n    margin-bottom: 0.5em;\r\n    font-weight: bold;\r\n    color: #333;\r\n  }\r\n\r\n  .form-group select,\r\n  .form-group textarea {\r\n    width: 100%;\r\n    padding: 0.5em;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n    font-size: 1em;\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .form-group select:focus,\r\n  .form-group textarea:focus {\r\n    outline: none;\r\n    border-color: #2a7ae2;\r\n    box-shadow: 0 0 0 2px rgba(42, 122, 226, 0.1);\r\n  }\r\n\r\n  .form-actions {\r\n    display: flex;\r\n    gap: 1em;\r\n    margin-top: 1.5em;\r\n  }\r\n\r\n  .btn-submit,\r\n  .btn-cancel {\r\n    padding: 0.75em 1.5em;\r\n    border: none;\r\n    border-radius: 4px;\r\n    font-size: 1em;\r\n    cursor: pointer;\r\n    transition: background-color 0.2s;\r\n  }\r\n\r\n  .btn-submit {\r\n    background: #2a7ae2;\r\n    color: white;\r\n  }\r\n\r\n  .btn-submit:hover {\r\n    background: #1e5bb8;\r\n  }\r\n\r\n  .btn-cancel {\r\n    background: #6c757d;\r\n    color: white;\r\n  }\r\n\r\n  .btn-cancel:hover {\r\n    background: #545b62;\r\n  }\r\n\r\n  .btn-submit:disabled {\r\n    background: #ccc;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  .btn-submit:disabled:hover {\r\n    background: #ccc;\r\n  }\r\n\r\n  .submit-error {\r\n    color: #d32f2f;\r\n    background: #ffebee;\r\n    padding: 0.75em;\r\n    border-radius: 4px;\r\n    border-left: 4px solid #d32f2f;\r\n    margin-bottom: 1em;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .submit-success {\r\n    color: #2e7d32;\r\n    background: #e8f5e8;\r\n    padding: 0.75em;\r\n    border-radius: 4px;\r\n    border-left: 4px solid #2e7d32;\r\n    margin-bottom: 1em;\r\n    font-size: 0.9em;\r\n  }\r\n</style>\r\n    ","const FIRST_MONTH = { year: 2025, monthIndex: 8 };\r\nconst LAST_MONTH = { year: 2027, monthIndex: 7 };\r\n\r\nexport function generateTeacherPerformanceMonths(locale = 'lt-LT') {\r\n    const months = [];\r\n    let year = FIRST_MONTH.year;\r\n    let monthIndex = FIRST_MONTH.monthIndex;\r\n\r\n    while (year < LAST_MONTH.year || (year === LAST_MONTH.year && monthIndex <= LAST_MONTH.monthIndex)) {\r\n        const date = new Date(year, monthIndex, 1);\r\n\r\n        months.push({\r\n            value: `${year}-${String(monthIndex + 1).padStart(2, '0')}`,\r\n            label: date.toLocaleDateString(locale, { month: 'long', year: 'numeric' })\r\n        });\r\n\r\n        monthIndex += 1;\r\n        if (monthIndex === 12) {\r\n            monthIndex = 0;\r\n            year += 1;\r\n        }\r\n    }\r\n\r\n    return months;\r\n}\r\n","<script>\r\n  import { getApiBase } from './apiBase.js';\r\n\r\n  export let teacherId;\r\n  export let teacherName;\r\n  export let month;\r\n  export let bonusEligible;\r\n  export let bonusAmount;\r\n\r\n  let container;\r\n  let open = false;\r\n  let loading = false;\r\n  let error = '';\r\n  let coverage = null;\r\n  let openedWithKeyboard = false;\r\n  let openAbove = false;\r\n  let requestVersion = 0;\r\n  let previousMonth = month;\r\n\r\n  $: if (month !== previousMonth) {\r\n    previousMonth = month;\r\n    close();\r\n  }\r\n\r\n  function close() {\r\n    open = false;\r\n    openedWithKeyboard = false;\r\n    loading = false;\r\n    coverage = null;\r\n    error = '';\r\n    requestVersion += 1;\r\n  }\r\n\r\n  function show(event) {\r\n    if (event?.type === 'focus') openedWithKeyboard = true;\r\n    if (!open) loadCoverage();\r\n  }\r\n\r\n  async function loadCoverage() {\r\n    const bounds = container?.getBoundingClientRect();\r\n    openAbove = bounds && window.innerHeight - bounds.bottom < 300 && bounds.top > 300;\r\n    open = true;\r\n    loading = true;\r\n    error = '';\r\n    coverage = null;\r\n    const version = ++requestVersion;\r\n    const requestedMonth = month;\r\n    const params = new URLSearchParams({ teacher_id: String(teacherId), month: requestedMonth });\r\n    try {\r\n      const response = await fetch(`${getApiBase()}/studentplayground/api/teacher_comment_coverage/?${params}`, {\r\n        headers: { Authorization: `Bearer ${localStorage.getItem('jwtToken') || ''}` },\r\n        cache: 'no-store',\r\n      });\r\n      if (!response.ok) throw new Error('Could not load class feedback.');\r\n      const data = await response.json();\r\n      if (version === requestVersion && requestedMonth === month && open) coverage = data;\r\n    } catch (cause) {\r\n      if (version === requestVersion && requestedMonth === month && open) error = cause.message;\r\n    } finally {\r\n      if (version === requestVersion && requestedMonth === month && open) loading = false;\r\n    }\r\n  }\r\n\r\n  function handleMouseLeave() {\r\n    if (!loading && !openedWithKeyboard && !container?.contains(document.activeElement)) close();\r\n  }\r\n\r\n  function handleOutsideClick(event) {\r\n    if (open && !event.composedPath().includes(container)) close();\r\n  }\r\n\r\n  function handleKeydown(event) {\r\n    if (open && event.key === 'Escape') close();\r\n  }\r\n\r\n  function formatClassTime(value) {\r\n    return new Intl.DateTimeFormat('en-GB', {\r\n      timeZone: 'Europe/Vilnius', dateStyle: 'medium', timeStyle: 'short',\r\n    }).format(new Date(value));\r\n  }\r\n</script>\r\n\r\n<svelte:window on:click={handleOutsideClick} on:keydown={handleKeydown} />\r\n\r\n<div class=\"bonus-detail\" bind:this={container} on:mouseleave={handleMouseLeave}>\r\n  <button type=\"button\" class=\"bonus-trigger\" aria-label={`Class feedback for ${teacherName}`} aria-expanded={open} on:mouseenter={show} on:focus={show} on:click={show}>\r\n    {#if bonusEligible}\r\n      <span class=\"bonus-yes\">✅ €{bonusAmount}</span>\r\n    {:else}\r\n      <span class=\"bonus-no\">—</span>\r\n    {/if}\r\n    <span class=\"detail-indicator\" aria-hidden=\"true\">ⓘ</span>\r\n  </button>\r\n  {#if open}\r\n    <div class=\"coverage-popover\" class:above={openAbove} role=\"dialog\" aria-label={`Class feedback for ${teacherName}`}>\r\n      <div class=\"popover-header\">\r\n        <strong>Class feedback · {teacherName}</strong>\r\n        <button type=\"button\" class=\"close-button\" aria-label=\"Close class feedback details\" on:click={close}>×</button>\r\n      </div>\r\n      {#if loading}\r\n        <p role=\"status\">Loading class feedback…</p>\r\n      {:else if error}\r\n        <p role=\"alert\">{error}</p>\r\n        <button type=\"button\" on:click={loadCoverage}>Try again</button>\r\n      {:else if coverage}\r\n        <p class=\"coverage-summary\"><strong>{coverage.submitted_count} submitted</strong> · <strong>{coverage.missing_count} missing</strong> of {coverage.total_classes} classes</p>\r\n        <p class=\"snapshot-note\">Feedback status is live. Bonus eligibility and amount use the saved payment snapshot.</p>\r\n        {#if coverage.total_classes === 0}\r\n          <p>No classes in this month.</p>\r\n        {:else if coverage.missing_count === 0}\r\n          <p>All class feedback submitted.</p>\r\n        {:else}\r\n          <p class=\"list-label\">Classes missing feedback</p>\r\n          <ul class=\"missing-list\">\r\n            {#each coverage.missing_classes as cls (cls.class_id)}\r\n              <li>\r\n                <span class=\"class-name\">{cls.class_name}</span>\r\n                <span class=\"class-meta\">{formatClassTime(cls.class_time)}{#if cls.upcoming} · Upcoming{/if}</span>\r\n              </li>\r\n            {/each}\r\n          </ul>\r\n        {/if}\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n</div>\r\n\r\n<style>\r\n  .bonus-detail { position: relative; display: inline-block; }\r\n  .bonus-trigger { display: inline-flex; align-items: center; gap: .35rem; border: 0; border-radius: 4px; background: transparent; padding: .3rem .4rem; font: inherit; cursor: pointer; white-space: nowrap; }\r\n  .bonus-trigger:hover, .bonus-trigger:focus-visible { background: #f1f5f9; outline: 2px solid #2a6f9e; outline-offset: 1px; }\r\n  .bonus-yes { color: #2e7d32; font-weight: 600; }\r\n  .bonus-no { color: #666; }\r\n  .detail-indicator { color: #356f91; font-size: .85em; }\r\n  .coverage-popover { position: absolute; z-index: 50; right: 0; top: calc(100% + 5px); width: min(340px, calc(100vw - 32px)); padding: 14px; text-align: left; color: #263238; background: #fff; border: 1px solid #cbd5e1; border-radius: 8px; box-shadow: 0 8px 26px rgba(15, 23, 42, .22); white-space: normal; }\r\n  .coverage-popover.above { top: auto; bottom: calc(100% + 5px); }\r\n  .popover-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }\r\n  .close-button { border: 0; background: transparent; font-size: 1.35rem; line-height: 1; cursor: pointer; }\r\n  .coverage-summary { margin: 12px 0 6px; }\r\n  .snapshot-note { margin: 0 0 12px; color: #596675; font-size: .82rem; }\r\n  .list-label { margin: 0 0 6px; font-weight: 600; }\r\n  .missing-list { max-height: 240px; overflow-y: auto; margin: 0; padding: 0; list-style: none; }\r\n  .missing-list li { display: flex; flex-direction: column; gap: 2px; padding: 7px 0; border-top: 1px solid #e5e7eb; }\r\n  .class-name { overflow-wrap: anywhere; }\r\n  .class-meta { color: #596675; font-size: .82rem; }\r\n</style>\r\n","<script>\r\n  import { onDestroy } from 'svelte';\r\n  import { getApiBase } from './apiBase.js';\r\n\r\n  export let month;\r\n  export let teacherId = null;\r\n  export let refreshKey = 0;\r\n\r\n  let data = null;\r\n  let teachers = [];\r\n  let loading = false;\r\n  let error = '';\r\n  let teacher = '';\r\n  let party = '';\r\n  let type = '';\r\n  let search = '';\r\n  let query = '';\r\n  let page = 1;\r\n  let context = '';\r\n  let scope = '';\r\n  let requestVersion = 0;\r\n  let controller;\r\n  const types = { Velavimas: 'Late', Atsaukimas: 'Cancellation', Kitas: 'Other' };\r\n  const dateFormat = new Intl.DateTimeFormat('en-GB', { timeZone: 'Europe/Vilnius', dateStyle: 'medium', timeStyle: 'short' });\r\n  const monthFormat = new Intl.DateTimeFormat('en-GB', { timeZone: 'Europe/Vilnius', month: 'long', year: 'numeric' });\r\n  $: monthLabel = month ? monthFormat.format(new Date(`${month}-15T12:00:00Z`)) : '';\r\n  $: hasFilters = Boolean(teacher || party || type || query);\r\n  $: if (month && `${month}:${teacherId}:${refreshKey}` !== context) {\r\n    context = `${month}:${teacherId}:${refreshKey}`;\r\n    if (scope !== `${month}:${teacherId}`) {\r\n      scope = `${month}:${teacherId}`;\r\n      teacher = party = type = search = query = '';\r\n      teachers = [];\r\n      page = 1;\r\n    }\r\n    load();\r\n  }\r\n\r\n  onDestroy(() => { requestVersion += 1; controller?.abort(); });\r\n\r\n  async function load() {\r\n    const version = ++requestVersion;\r\n    controller?.abort();\r\n    controller = new AbortController();\r\n    loading = true;\r\n    error = '';\r\n    data = null;\r\n    const params = new URLSearchParams({ month, page: String(page) });\r\n    if (teacherId) params.set('teacher_id', String(teacherId));\r\n    if (teacher) params.set('teacher', teacher);\r\n    if (party) params.set('party', party);\r\n    if (type) params.set('type', type);\r\n    if (query) params.set('q', query);\r\n    try {\r\n      const response = await fetch(`${getApiBase()}/studentplayground/api/class_incidents/?${params}`, {\r\n        headers: { Authorization: `Bearer ${localStorage.getItem('jwtToken') || ''}` },\r\n        cache: 'no-store', signal: controller.signal,\r\n      });\r\n      if (!response.ok) throw new Error('Could not load class incidents. Please try again.');\r\n      const result = await response.json();\r\n      if (version === requestVersion) { data = result; teachers = result.teachers; page = result.page; }\r\n    } catch (cause) {\r\n      if (version === requestVersion && cause.name !== 'AbortError') error = cause.message;\r\n    } finally {\r\n      if (version === requestVersion) loading = false;\r\n    }\r\n  }\r\n\r\n  function filter() { page = 1; load(); }\r\n  function clearFilters() { teacher = party = type = search = query = ''; filter(); }\r\n  function searchIncidents(event) { event.preventDefault(); query = search.trim(); filter(); }\r\n  function changePage(amount) { page += amount; load(); }\r\n</script>\r\n\r\n<section class=\"incident-report\" aria-label=\"Class incidents\" aria-busy={loading}>\r\n  <header>\r\n    <div><p class=\"eyebrow\">Live incident register</p><h3>Class incidents</h3><p class=\"period\">{monthLabel} · By class date · Vilnius time</p></div>\r\n    <button type=\"button\" class=\"refresh\" on:click={load} disabled={loading}>Refresh incidents</button>\r\n  </header>\r\n\r\n  {#if loading}\r\n    <p class=\"state\" role=\"status\">Loading class incidents…</p>\r\n  {:else if error}\r\n    <div class=\"state\"><p role=\"alert\">{error}</p><button type=\"button\" on:click={load}>Try again</button></div>\r\n  {:else if data}\r\n    <div class=\"summary\" aria-label=\"Incident totals for the selected month\">\r\n      <div><strong>{data.summary.total}</strong><span>Total incidents</span></div>\r\n      <div><strong>{data.summary.teacher}</strong><span>Teacher responsibility</span></div>\r\n      <div><strong>{data.summary.student}</strong><span>Student responsibility</span></div>\r\n    </div>\r\n    <div class=\"type-totals\"><span><strong>{data.summary.cancellation}</strong> cancellations</span><span><strong>{data.summary.late}</strong> late arrivals</span><span><strong>{data.summary.other}</strong> other incidents</span></div>\r\n    <p class=\"summary-note\">Totals cover the full selected month. Filters below narrow the incident list.</p>\r\n  {/if}\r\n\r\n  <form class=\"filters\" on:submit={searchIncidents}>\r\n    {#if !teacherId}\r\n      <label>Teacher<select bind:value={teacher} on:change={filter}><option value=\"\">All teachers</option>{#each teachers as name}<option value={name}>{name || 'Teacher not recorded'}</option>{/each}</select></label>\r\n    {/if}\r\n    <label>Responsible party<select bind:value={party} on:change={filter}><option value=\"\">Teacher and student</option><option value=\"Teacher\">Teacher</option><option value=\"Student\">Student</option></select></label>\r\n    <label>Incident type<select bind:value={type} on:change={filter}><option value=\"\">All types</option><option value=\"Atsaukimas\">Cancellation</option><option value=\"Velavimas\">Late</option><option value=\"Kitas\">Other</option></select></label>\r\n    <label class=\"search\">Search incidents<input type=\"search\" bind:value={search} placeholder=\"Class, student, teacher or comment\" /></label>\r\n    <button type=\"submit\">Search</button>\r\n    {#if hasFilters}<button type=\"button\" class=\"clear\" on:click={clearFilters}>Clear filters</button>{/if}\r\n  </form>\r\n\r\n  {#if data && !loading && !error}\r\n    <div class=\"list-heading\"><h4>Incident details</h4><p role=\"status\">{data.count} {data.count === 1 ? 'incident' : 'incidents'}{hasFilters ? ' matching filters' : ' this month'} · Newest class first</p></div>\r\n    {#if data.count === 0}\r\n      <p class=\"state\">{hasFilters ? 'No incidents match these filters.' : 'No class incidents recorded for this month.'}</p>\r\n    {:else}\r\n      <div class=\"incident-list\">\r\n        {#each data.results as incident (incident.id)}\r\n          <details class=\"incident\">\r\n            <summary>\r\n              <div class=\"class-info\"><time datetime={incident.class_time}>{dateFormat.format(new Date(incident.class_time))}</time><strong>{incident.class_name || 'Class name not recorded'}</strong></div>\r\n              <div class=\"people\"><span class=\"person-label\">Teacher</span><span>{incident.teacher_name || 'Not recorded'}</span><span class=\"person-label\">Student{incident.student_name?.includes(',') ? 's' : ''}</span><span>{incident.student_name || 'Not recorded'}</span></div>\r\n              <div class=\"classification\"><span class=\"type\" class:cancellation={incident.incident_type === 'Atsaukimas'} class:late={incident.incident_type === 'Velavimas'}>{types[incident.incident_type] || incident.incident_type}</span><span>{incident.responsible_party} responsibility</span></div>\r\n              <span class=\"disclosure\"><span class=\"closed-label\">View details</span><span class=\"open-label\">Hide details</span><span class=\"plus\" aria-hidden=\"true\">+</span></span>\r\n            </summary>\r\n            <div class=\"incident-details\">\r\n              <h5>Incident description</h5>\r\n              <p class=\"comment\">{incident.comment || 'No description provided.'}</p>\r\n              <p class=\"recorded\">Recorded by {incident.created_by} · {dateFormat.format(new Date(incident.created_at))}</p>\r\n              {#if !incident.class_exists}<p class=\"archive-note\">Original class no longer available.</p>{/if}\r\n            </div>\r\n          </details>\r\n        {/each}\r\n      </div>\r\n      <nav class=\"pagination\" aria-label=\"Incident pages\">\r\n        <span>Page {data.page} of {Math.max(1, Math.ceil(data.count / data.page_size))} · {data.count} total</span>\r\n        <div><button type=\"button\" aria-label=\"Previous page\" disabled={data.page <= 1} on:click={() => changePage(-1)}>Previous</button><button type=\"button\" aria-label=\"Next page\" disabled={data.page * data.page_size >= data.count} on:click={() => changePage(1)}>Next</button></div>\r\n      </nav>\r\n    {/if}\r\n  {/if}\r\n</section>\r\n\r\n<style>\r\n  .incident-report { margin: 1.5rem 0 2rem; padding: clamp(1rem, 3vw, 1.75rem); border: 1px solid #eaeaea; border-radius: 8px; background: #fff; color: #2f3437; font-family: 'Helvetica Neue', Arial, sans-serif; line-height: 1.5; min-width: 0; }\r\n  header { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; }\r\n  .eyebrow { margin: 0 0 .3rem; text-transform: uppercase; letter-spacing: .1em; font-size: .68rem; color: #686862; font-weight: 700; }\r\n  h3 { margin: 0; font-size: 1.5rem; letter-spacing: -.03em; font-weight: 650; }\r\n  .period { margin: .4rem 0 0; color: #66675f; font-size: .82rem; }\r\n  button, input, select { font: inherit; box-sizing: border-box; }\r\n  button { border: 1px solid #d9dad5; border-radius: 5px; background: #fff; color: #343830; padding: .55rem .8rem; cursor: pointer; font-size: .8rem; white-space: nowrap; }\r\n  button:hover:not(:disabled) { background: #f7f6f3; }\r\n  button:disabled { opacity: .5; cursor: default; }\r\n  :is(button, input, select, summary):focus-visible { outline: 2px solid #75643f; outline-offset: 3px; }\r\n  .summary { display: grid; grid-template-columns: repeat(3, 1fr); margin-top: 1.5rem; background: #f7f6f3; border-radius: 6px; }\r\n  .summary > div { padding: 1rem 1.25rem; display: flex; flex-direction: column; gap: .1rem; }\r\n  .summary > div + div { border-left: 1px solid #e4e3de; }\r\n  .summary strong { font-size: 1.8rem; font-weight: 600; font-variant-numeric: tabular-nums; letter-spacing: -.04em; }\r\n  .summary span { font-size: .8rem; color: #5a5f56; }\r\n  .type-totals { display: flex; flex-wrap: wrap; gap: .5rem 1.5rem; margin-top: .85rem; font-size: .82rem; }\r\n  .summary-note { font-size: .75rem; color: #6b6f66; margin: .5rem 0 1.35rem; }\r\n  .filters { display: flex; flex-wrap: wrap; gap: .75rem; align-items: flex-end; padding: 1rem 0; border-top: 1px solid #eaeaea; border-bottom: 1px solid #eaeaea; }\r\n  label { display: flex; flex: 1 1 145px; flex-direction: column; gap: .35rem; font-size: .75rem; font-weight: 600; min-width: 0; }\r\n  .search { flex: 2 1 220px; }\r\n  input, select { width: 100%; border: 1px solid #d9dad5; border-radius: 5px; padding: .6rem; background: #fff; color: #343830; font-size: .8rem; min-width: 0; }\r\n  .filters button[type=submit] { background: #30372e; color: white; border-color: #30372e; }\r\n  .clear { border-color: transparent; text-decoration: underline; }\r\n  .list-heading { display: flex; justify-content: space-between; align-items: baseline; flex-wrap: wrap; gap: .4rem 1rem; padding: 1.3rem 0 .6rem; }\r\n  h4 { font-size: .9rem; margin: 0; font-weight: 650; }\r\n  .list-heading p { margin: 0; font-size: .75rem; color: #666b62; }\r\n  .incident { border-bottom: 1px solid #eaeaea; }\r\n  summary { list-style: none; cursor: pointer; display: grid; grid-template-columns: 1.1fr 1.2fr 1fr auto; gap: 1rem; align-items: center; padding: 1rem .2rem; }\r\n  summary::-webkit-details-marker { display: none; }\r\n  summary:hover { background: #fbfbfa; }\r\n  .class-info, .people, .classification { display: flex; flex-direction: column; align-items: flex-start; min-width: 0; overflow-wrap: anywhere; }\r\n  .class-info strong { font-size: .9rem; font-weight: 600; margin-top: .25rem; }\r\n  time { font-size: .75rem; color: #666b62; }\r\n  .people { font-size: .82rem; }\r\n  .person-label { color: #6b6f66; font-size: .66rem; }\r\n  .person-label:not(:first-child) { margin-top: .3rem; }\r\n  .classification { gap: .4rem; font-size: .73rem; color: #61665d; }\r\n  .type { padding: .2rem .5rem; border-radius: 4px; background: #efefec; color: #565d50; font-weight: 600; font-size: .73rem; }\r\n  .type.cancellation { background: #fdebeb; color: #913e39; }\r\n  .type.late { background: #fbf3db; color: #805c18; }\r\n  .disclosure { display: flex; gap: .7rem; align-items: center; font-size: .75rem; color: #50584a; white-space: nowrap; }\r\n  .plus { font-size: 1.25rem; }\r\n  .open-label, details[open] .closed-label { display: none; }\r\n  details[open] .open-label { display: inline; }\r\n  details[open] .plus { transform: rotate(45deg); }\r\n  .incident-details { padding: 1rem 1.2rem; margin: 0 0 1rem; background: #f9f9f8; border-left: 2px solid #d8dacf; overflow-wrap: anywhere; }\r\n  h5 { margin: 0 0 .5rem; font-size: .75rem; color: #62675b; font-weight: 600; }\r\n  .comment { white-space: pre-wrap; font-size: .9rem; margin: 0 0 1rem; line-height: 1.65; }\r\n  .recorded, .archive-note { margin: .4rem 0 0; color: #666b62; font-size: .75rem; }\r\n  .pagination { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .75rem; padding-top: 1rem; font-size: .75rem; color: #62675b; }\r\n  .pagination div { display: flex; gap: .5rem; }\r\n  .state { padding: 1.5rem 0; color: #62675b; font-size: .85rem; }\r\n  @media (max-width: 640px) {\r\n    header { flex-wrap: wrap; }\r\n    .summary > div { padding: .8rem .6rem; }\r\n    .summary strong { font-size: 1.5rem; }\r\n    .summary span { font-size: .7rem; }\r\n    summary { grid-template-columns: 1fr 1fr; gap: .8rem; }\r\n    .disclosure { justify-self: end; }\r\n    .incident-details { padding: 1rem .8rem; }\r\n  }\r\n</style>\r\n","<script>\r\n  import { onDestroy, onMount } from 'svelte';\r\n  import { getApiBase } from './apiBase.js';\r\n  import { generateTeacherPerformanceMonths } from './teacherPerformanceMonths.js';\r\n  import TeacherCommentCoveragePopover from './TeacherCommentCoveragePopover.svelte';\r\n  import ClassIncidentReport from './ClassIncidentReport.svelte';\r\n\r\n  export let embedded = false;\r\n  export let teacherId = null;\r\n  let lastAutoLoadKey = null;\r\n\r\n  // State for teachers\r\n  let teachers = [];\r\n  let teacherQuery = '';\r\n  let filteredTeachers = [];\r\n  let selectedTeacher = null;\r\n  let showTeacherDropdown = false;\r\n\r\n  // State for month selection\r\n  let selectedMonth = '';\r\n  let availableMonths = [];\r\n\r\n  // State for submission\r\n  let submitting = false;\r\n  let submitError = null;\r\n  let submitSuccess = false;\r\n  let retentionData = null;\r\n  let commentsData = null;\r\n  let completionData = null;\r\n  let surveyData = null;\r\n  let paymentData = null;\r\n  let attendanceData = null;\r\n  let bonusData = null;\r\n\r\n  // Expand state for classes with surveys\r\n  let showAllSurveyClasses = false;\r\n  \r\n  // Expand state for other class sections\r\n  let showAllPaymentClasses = false;\r\n  let showAllAttendanceClasses = false;\r\n  let showAllStudentAttendanceClasses = false;\r\n\r\n  // Tab system\r\n  let activeTab = 'individual'; // 'individual' or 'dashboard'\r\n  \r\n  // Dashboard data\r\n  let allSnapshotsData = null;\r\n  let dashboardLoading = false;\r\n  let dashboardError = null;\r\n  let dashboardMonth = '';\r\n  let incidentRefreshKey = 0;\r\n  \r\n  // Recalculation state\r\n  let recalculating = false;\r\n  let recalculationError = null;\r\n  let recalculationSuccess = false;\r\n  let recalculationMessage = null;\r\n  let recalculationStatus = null;\r\n  let recalculationStatusPollId = null;\r\n  let lastStatusCheckKey = null;\r\n  const RECALC_AWAITING_MONTH_KEY = 'teacherSnapshotRecalcAwaitingMonth';\r\n  const RECALC_DONE_MONTH_KEY = 'teacherSnapshotRecalcDoneMonth';\r\n  const ACTIVE_RECALC_STATUSES = new Set(['started', 'already_running', 'running']);\r\n\r\n  // Admin check\r\n  let isUserSuper = null;\r\n\r\n  const apiBase = getApiBase();\r\n\r\n  // Get rating color class based on rating value (1-5)\r\n  function getRatingColorClass(rating) {\r\n    switch(rating) {\r\n      case 1: return 'rating-1'; // red\r\n      case 2: return 'rating-2'; // orange-red (between red and yellow)\r\n      case 3: return 'rating-3'; // yellow\r\n      case 4: return 'rating-4'; // yellow-green (between yellow and green)\r\n      case 5: return 'rating-5'; // green\r\n      default: return '';\r\n    }\r\n  }\r\n\r\n  // Check if user is admin (superuser)\r\n  async function checkIfUserIsAdmin() {\r\n    try {\r\n      const token = localStorage.getItem('jwtToken');\r\n      if (!token) {\r\n        console.warn('JWT token not found for admin check');\r\n        return;\r\n      }\r\n\r\n      const response = await fetch(`${apiBase}/studentplayground/isSuperUser/`, {\r\n        method: 'GET',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        }\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        isUserSuper = data.isUserSuper;\r\n        console.log('Admin status:', isUserSuper);\r\n      }\r\n    } catch (error) {\r\n      console.error('Error checking admin status:', error);\r\n    }\r\n  }\r\n\r\n  // Fetch teachers using the same API as ClassDidNotHappenComponent\r\n  async function fetchTeachers() {\r\n    const url = `${apiBase}/studentplayground/api/get_google_calendar_ids/`;\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      submitError = 'JWT token not found. Please log in.';\r\n      return;\r\n    }\r\n    \r\n    try {\r\n      const response = await fetch(url, {\r\n        method: 'GET',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n      });\r\n      \r\n      if (!response.ok) throw new Error(`Error: ${response.status}`);\r\n      \r\n      const data = await response.json();\r\n      teachers = data.teachers || [];\r\n      filteredTeachers = teachers;\r\n    } catch (error) {\r\n      console.error('Failed to fetch teachers:', error);\r\n      submitError = `Failed to fetch teachers: ${error.message}`;\r\n    }\r\n  }\r\n\r\n  // Filter teachers as user types\r\n  $: filteredTeachers = teacherQuery\r\n    ? teachers.filter(t => t.name.toLowerCase().includes(teacherQuery.toLowerCase()))\r\n    : teachers;\r\n  $: showTeacherDropdown = teacherQuery && filteredTeachers.length > 0 && !selectedTeacher;\r\n\r\n  // Embedded mode: force individual tab and auto-select teacher\r\n  $: if (embedded && activeTab !== 'individual') {\r\n    activeTab = 'individual';\r\n  }\r\n\r\n  $: if (embedded && teacherId && teachers.length) {\r\n    const match = teachers.find(t => t.id === Number(teacherId));\r\n    if (match && (!selectedTeacher || selectedTeacher.id !== match.id)) {\r\n      selectTeacher(match);\r\n    }\r\n  }\r\n\r\n  // On mount, fetch teachers, check admin status, and initialize months\r\n  onMount(() => {\r\n    fetchTeachers();\r\n    checkIfUserIsAdmin();\r\n    availableMonths = generateTeacherPerformanceMonths();\r\n\r\n    if (embedded) {\r\n      // Default to current month (if present in availableMonths)\r\n      const now = new Date();\r\n      const currentValue = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`;\r\n      if (!selectedMonth) {\r\n        selectedMonth = availableMonths.find(m => m.value === currentValue)?.value || availableMonths[0]?.value || '';\r\n      }\r\n    }\r\n  });\r\n\r\n  function selectTeacher(teacher) {\r\n    selectedTeacher = teacher;\r\n    teacherQuery = teacher.name;\r\n    showTeacherDropdown = false;\r\n    // Clear any previous states\r\n    submitError = null;\r\n    submitSuccess = false;\r\n  }\r\n\r\n  function clearSelection() {\r\n    selectedTeacher = null;\r\n    teacherQuery = '';\r\n    selectedMonth = '';\r\n    submitError = null;\r\n    submitSuccess = false;\r\n    retentionData = null;\r\n    commentsData = null;\r\n    completionData = null;\r\n    surveyData = null;\r\n    paymentData = null;\r\n    attendanceData = null;\r\n  }\r\n\r\n  // Submit selected teacher to dummy view\r\n  async function submitTeacherSelection() {\r\n    if (!selectedTeacher) {\r\n      submitError = 'Please select a teacher first.';\r\n      return;\r\n    }\r\n\r\n    if (!selectedMonth) {\r\n      submitError = 'Please select a month first.';\r\n      return;\r\n    }\r\n\r\n    submitting = true;\r\n    submitError = null;\r\n    submitSuccess = false;\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      submitError = 'JWT token not found. Please log in.';\r\n      submitting = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const response = await fetch(`${apiBase}/studentplayground/api/teacher_performance_rating/`, {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n          teacher_id: selectedTeacher.id,\r\n          teacher_name: selectedTeacher.name,\r\n          selected_month: selectedMonth,\r\n          selected_at: new Date().toISOString()\r\n        })\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        console.log('Teacher performance data received:', data);\r\n        retentionData = data.retention_analysis;\r\n        commentsData = data.comments_analysis;\r\n        completionData = data.completion_analysis;\r\n        surveyData = data.survey_analysis;\r\n        paymentData = data.payment_analysis;\r\n        attendanceData = data.attendance_analysis;\r\n        bonusData = data.bonus_analysis;\r\n        if (!embedded) {\r\n          submitSuccess = true;\r\n          setTimeout(() => {\r\n            submitSuccess = false;\r\n          }, 3000);\r\n        }\r\n      } else {\r\n        const data = await response.json();\r\n        submitError = data.error || 'Failed to submit teacher selection.';\r\n      }\r\n    } catch (error) {\r\n      submitError = `Network error: ${error.message}`;\r\n    } finally {\r\n      submitting = false;\r\n    }\r\n  }\r\n\r\n  // Embedded mode: auto-load when teacher + month are ready (and re-load on month change)\r\n  $: if (embedded && selectedTeacher && selectedMonth && !submitting) {\r\n    const key = `${selectedTeacher.id}:${selectedMonth}`;\r\n    if (key !== lastAutoLoadKey) {\r\n      lastAutoLoadKey = key;\r\n      submitTeacherSelection();\r\n    }\r\n  }\r\n\r\n  // Fetch all teacher payment snapshots for dashboard view\r\n  async function fetchAllSnapshots() {\r\n    if (!dashboardMonth) {\r\n      dashboardError = 'Please select a month';\r\n      return;\r\n    }\r\n\r\n    dashboardLoading = true;\r\n    incidentRefreshKey += 1;\r\n    dashboardError = null;\r\n    allSnapshotsData = null;\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      dashboardError = 'JWT token not found. Please log in.';\r\n      dashboardLoading = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const url = `${apiBase}/studentplayground/api/all_teacher_payment_snapshots/?month=${dashboardMonth}`;\r\n      const response = await fetch(url, {\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        }\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        if (data.success) {\r\n          allSnapshotsData = data;\r\n          console.log('All snapshots loaded:', allSnapshotsData);\r\n        } else {\r\n          dashboardError = 'No snapshot data available';\r\n        }\r\n      } else {\r\n        const errorData = await response.json();\r\n        dashboardError = errorData.error || 'Failed to fetch snapshots';\r\n      }\r\n    } catch (error) {\r\n      dashboardError = `Network error: ${error.message}`;\r\n    } finally {\r\n      dashboardLoading = false;\r\n    }\r\n  }\r\n\r\n  // Recalculate all teacher snapshots for the selected month\r\n  async function recalculateAllSnapshots() {\r\n    if (!dashboardMonth) {\r\n      recalculationError = 'Please select a month';\r\n      return;\r\n    }\r\n\r\n    recalculating = true;\r\n    recalculationError = null;\r\n    recalculationSuccess = false;\r\n    recalculationMessage = null;\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      recalculationError = 'JWT token not found. Please log in.';\r\n      recalculating = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const url = `${apiBase}/studentplayground/api/recalculate_all_teacher_snapshots/`;\r\n      const response = await fetch(url, {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        },\r\n        body: JSON.stringify({\r\n          month: dashboardMonth\r\n        })\r\n      });\r\n\r\n      let data = null;\r\n      try {\r\n        data = await response.json();\r\n      } catch {\r\n        data = null;\r\n      }\r\n\r\n      if (response.ok) {\r\n        if (data?.success) {\r\n          sessionStorage.setItem(RECALC_AWAITING_MONTH_KEY, dashboardMonth);\r\n          recalculationSuccess = true;\r\n          recalculationMessage = 'Calculating...';\r\n          recalculationStatus = {\r\n            ...data,\r\n            status: ACTIVE_RECALC_STATUSES.has(data.status) ? 'running' : data.status,\r\n            month: dashboardMonth\r\n          };\r\n          console.log('Recalculation request accepted:', data);\r\n\r\n          if (ACTIVE_RECALC_STATUSES.has(data.status)) {\r\n            startRecalculationStatusPolling();\r\n            fetchRecalculationStatus();\r\n          }\r\n        } else {\r\n          recalculationError = data?.error || 'Failed to start recalculation';\r\n        }\r\n      } else {\r\n        recalculationError = data?.error || 'Failed to start recalculation';\r\n      }\r\n    } catch (error) {\r\n      recalculationError = `Network error: ${error.message}`;\r\n    } finally {\r\n      recalculating = false;\r\n    }\r\n  }\r\n\r\n  async function fetchRecalculationStatus() {\r\n    if (!dashboardMonth || embedded || !isUserSuper) {\r\n      return;\r\n    }\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const url = `${apiBase}/studentplayground/api/recalculate_all_teacher_snapshots_status/?month=${dashboardMonth}`;\r\n      const response = await fetch(url, {\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        }\r\n      });\r\n\r\n      if (!response.ok) {\r\n        return;\r\n      }\r\n\r\n      const data = await response.json();\r\n      if (!data?.success) {\r\n        return;\r\n      }\r\n\r\n      recalculationStatus = data;\r\n\r\n      if (ACTIVE_RECALC_STATUSES.has(data.status)) {\r\n        recalculationSuccess = true;\r\n        recalculationMessage = 'Calculating...';\r\n        recalculationError = null;\r\n        startRecalculationStatusPolling();\r\n      } else if (data.status === 'completed') {\r\n        stopRecalculationStatusPolling();\r\n        const awaitingMonth = sessionStorage.getItem(RECALC_AWAITING_MONTH_KEY);\r\n        if (awaitingMonth === data.month) {\r\n          sessionStorage.removeItem(RECALC_AWAITING_MONTH_KEY);\r\n          sessionStorage.setItem(RECALC_DONE_MONTH_KEY, data.month);\r\n          window.location.reload();\r\n          return;\r\n        }\r\n\r\n        recalculationSuccess = true;\r\n        recalculationError = null;\r\n        recalculationMessage = 'Done.';\r\n      } else if (data.status === 'failed') {\r\n        sessionStorage.removeItem(RECALC_AWAITING_MONTH_KEY);\r\n        recalculationError = data.message || 'Recalculation failed.';\r\n        recalculationSuccess = false;\r\n        stopRecalculationStatusPolling();\r\n      } else if (data.status === 'idle') {\r\n        recalculationStatus = null;\r\n        recalculationSuccess = false;\r\n        recalculationMessage = null;\r\n        stopRecalculationStatusPolling();\r\n      }\r\n    } catch (error) {\r\n      console.warn('Failed to fetch recalculation status:', error);\r\n    }\r\n  }\r\n\r\n  function startRecalculationStatusPolling() {\r\n    if (recalculationStatusPollId) {\r\n      return;\r\n    }\r\n\r\n    recalculationStatusPollId = setInterval(() => {\r\n      fetchRecalculationStatus();\r\n    }, 3000);\r\n  }\r\n\r\n  function stopRecalculationStatusPolling() {\r\n    if (recalculationStatusPollId) {\r\n      clearInterval(recalculationStatusPollId);\r\n      recalculationStatusPollId = null;\r\n    }\r\n  }\r\n\r\n  // Initialize dashboard month to current month when component mounts\r\n  onMount(() => {\r\n    const doneMonth = sessionStorage.getItem(RECALC_DONE_MONTH_KEY);\r\n    const awaitingMonth = sessionStorage.getItem(RECALC_AWAITING_MONTH_KEY);\r\n\r\n    const now = new Date();\r\n    const currentMonth = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`;\r\n\r\n    dashboardMonth = doneMonth || awaitingMonth || currentMonth;\r\n\r\n    if (doneMonth) {\r\n      activeTab = 'dashboard';\r\n      recalculationSuccess = true;\r\n      recalculationMessage = 'Done.';\r\n      sessionStorage.removeItem(RECALC_DONE_MONTH_KEY);\r\n      fetchAllSnapshots();\r\n    } else if (awaitingMonth) {\r\n      activeTab = 'dashboard';\r\n      recalculationSuccess = true;\r\n      recalculationMessage = 'Calculating...';\r\n      startRecalculationStatusPolling();\r\n      fetchRecalculationStatus();\r\n    }\r\n  });\r\n\r\n  onDestroy(() => {\r\n    stopRecalculationStatusPolling();\r\n  });\r\n\r\n  $: if (isUserSuper && !embedded && activeTab === 'dashboard' && dashboardMonth) {\r\n    const statusKey = `${activeTab}:${dashboardMonth}`;\r\n    if (statusKey !== lastStatusCheckKey) {\r\n      lastStatusCheckKey = statusKey;\r\n      fetchRecalculationStatus();\r\n    }\r\n  }\r\n\r\n  // Dashboard: teachers with at least 1 class, sorted alphabetically by name\r\n  $: displayedSnapshots = allSnapshotsData?.snapshots\r\n    ? [...allSnapshotsData.snapshots]\r\n        .filter((s) => (s.total_classes || 0) > 0)\r\n        .sort((a, b) => (a.teacher_name || '').localeCompare(b.teacher_name || '', undefined, { sensitivity: 'base' }))\r\n    : [];\r\n\r\n  // Summary for displayed rows only (filtered list)\r\n  $: displayedSummary = displayedSnapshots.length\r\n    ? {\r\n        total_teachers: displayedSnapshots.length,\r\n        grand_total_payment: displayedSnapshots.reduce((sum, s) => sum + (parseFloat(s.total_eur) || 0), 0).toFixed(2),\r\n        total_classes: displayedSnapshots.reduce((sum, s) => sum + (s.total_classes || 0), 0),\r\n        average_per_teacher: (displayedSnapshots.reduce((sum, s) => sum + (parseFloat(s.total_eur) || 0), 0) / displayedSnapshots.length).toFixed(2),\r\n      }\r\n    : null;\r\n</script>\r\n\r\n<div class=\"teacher-performance-rating\">\r\n  <h2>Teacher Performance Rating</h2>\r\n  <p class=\"description\">Select a teacher and month to view their performance ratings and feedback for that specific period.</p>\r\n\r\n  <!-- Tab Navigation -->\r\n  {#if isUserSuper && !embedded}\r\n    <div class=\"tab-navigation\">\r\n      <button \r\n        class=\"tab-button\" \r\n        class:active={activeTab === 'individual'}\r\n        on:click={() => activeTab = 'individual'}\r\n      >\r\n        Individual Teacher\r\n      </button>\r\n      <button \r\n        class=\"tab-button\" \r\n        class:active={activeTab === 'dashboard'}\r\n        on:click={() => activeTab = 'dashboard'}\r\n      >\r\n        All Teachers Dashboard\r\n      </button>\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Individual Teacher Tab -->\r\n  {#if activeTab === 'individual'}\r\n  <div class=\"teacher-selection\">\r\n    {#if !embedded}\r\n      <label for=\"teacher-input\"><strong>Select Teacher:</strong></label>\r\n      <div class=\"input-container\">\r\n        <input\r\n          id=\"teacher-input\"\r\n          type=\"text\"\r\n          placeholder=\"Search teacher by name...\"\r\n          bind:value={teacherQuery}\r\n          on:input={() => {\r\n            if (selectedTeacher && teacherQuery !== selectedTeacher.name) {\r\n              selectedTeacher = null;\r\n              showTeacherDropdown = true;\r\n            }\r\n          }}\r\n          autocomplete=\"off\"\r\n        />\r\n        \r\n        {#if showTeacherDropdown}\r\n          <ul class=\"autocomplete-list\">\r\n            {#each filteredTeachers.slice(0, 8) as teacher}\r\n              <li>\r\n                <button\r\n                  type=\"button\"\r\n                  on:click={() => selectTeacher(teacher)}\r\n                  on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectTeacher(teacher)}\r\n                >\r\n                  <div class=\"teacher-option\">\r\n                    <span class=\"teacher-name\">{teacher.name}</span>\r\n                    {#if teacher.email}\r\n                      <span class=\"teacher-email\">{teacher.email}</span>\r\n                    {/if}\r\n                  </div>\r\n                </button>\r\n              </li>\r\n            {/each}\r\n          </ul>\r\n        {/if}\r\n      </div>\r\n    {:else if teacherId && !selectedTeacher}\r\n      <div class=\"loading\">Loading teacher...</div>\r\n    {/if}\r\n\r\n    <div class=\"month-selection\">\r\n      <label for=\"month-select\"><strong>Select Month:</strong></label>\r\n      <select\r\n        id=\"month-select\"\r\n        bind:value={selectedMonth}\r\n        class=\"month-dropdown\"\r\n      >\r\n        <option value=\"\">Choose a month...</option>\r\n        {#each availableMonths as month}\r\n          <option value={month.value}>{month.label}</option>\r\n        {/each}\r\n      </select>\r\n    </div>\r\n    \r\n    {#if selectedTeacher}\r\n      <div class=\"selected-teacher\">\r\n        <div class=\"selected-teacher-info\">\r\n          <h3>Selected Teacher</h3>\r\n          <p><strong>Name:</strong> {selectedTeacher.name}</p>\r\n          {#if selectedTeacher.email}\r\n            <p><strong>Email:</strong> {selectedTeacher.email}</p>\r\n          {/if}\r\n          <p><strong>ID:</strong> {selectedTeacher.id}</p>\r\n          {#if selectedMonth}\r\n            <p><strong>Selected Month:</strong> {availableMonths.find(m => m.value === selectedMonth)?.label}</p>\r\n          {/if}\r\n        </div>\r\n        \r\n        <div class=\"action-buttons\">\r\n          {#if !embedded}\r\n            <button \r\n              type=\"button\" \r\n              class=\"btn-submit\"\r\n              on:click={submitTeacherSelection}\r\n              disabled={submitting || !selectedMonth}\r\n            >\r\n              {submitting ? 'Processing...' : 'View Performance Rating'}\r\n            </button>\r\n          {:else}\r\n            <div class=\"embedded-auto\">\r\n              {#if submitting}\r\n                <span>Loading performance…</span>\r\n              {:else}\r\n                <span>Auto-refresh enabled</span>\r\n              {/if}\r\n            </div>\r\n          {/if}\r\n          {#if !embedded}\r\n            <button \r\n              type=\"button\" \r\n              class=\"btn-clear\" \r\n              on:click={clearSelection}\r\n              disabled={submitting}\r\n            >\r\n              Clear Selection\r\n            </button>\r\n          {/if}\r\n        </div>\r\n      </div>\r\n    {/if}\r\n  </div>\r\n\r\n  {#if submitError}\r\n    <div class=\"error-message\">{submitError}</div>\r\n  {/if}\r\n\r\n  {#if isUserSuper && selectedTeacher && selectedMonth}\r\n    <ClassIncidentReport month={selectedMonth} teacherId={selectedTeacher.id} />\r\n  {/if}\r\n\r\n  {#if submitSuccess}\r\n    <div class=\"success-message\">\r\n      Teacher performance data retrieved successfully!\r\n    </div>\r\n  {/if}\r\n\r\n  {#if paymentData}\r\n    <div class=\"retention-container\">\r\n      <h3>Teacher Payment Analysis</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Total Payment: €{paymentData.payment_analysis.total_payment}</strong>\r\n        </div>\r\n        <p>({paymentData.payment_analysis.total_completed_classes} completed, {paymentData.payment_analysis.total_upcoming_classes} upcoming | Average €{paymentData.payment_analysis.average_payment_per_class} per class)</p>\r\n        <p>Period: {new Date(paymentData.period.start_date).toLocaleDateString()} - {new Date(paymentData.period.end_date).toLocaleDateString()}</p>\r\n      </div>\r\n\r\n      {#if paymentData.payment_analysis.total_month_classes > 0}\r\n        <!-- Class Summary Section -->\r\n        <div class=\"comments-section\">\r\n          <h4>Class Summary</h4>\r\n          <div class=\"payment-breakdown-container\">\r\n            <div class=\"payment-section\">\r\n              <h5>Class Types</h5>\r\n              <ul class=\"class-count-list\">\r\n                <li><strong>Individual Classes:</strong> {paymentData.payment_analysis.payment_summary.individual_classes.count} classes</li>\r\n                <li><strong>Pair Classes:</strong> {paymentData.payment_analysis.payment_summary.pair_classes.count} classes</li>\r\n                <li><strong>Group Classes:</strong> {paymentData.payment_analysis.payment_summary.group_classes.count} classes</li>\r\n              </ul>\r\n            </div>\r\n            \r\n            <div class=\"payment-section\">\r\n              <h5>Special Categories</h5>\r\n              <ul class=\"class-count-list\">\r\n                <li><strong>Special Conditions Classes:</strong> {paymentData.payment_analysis.payment_summary.ib_classes.count} classes</li>\r\n                {#if paymentData.payment_analysis.payment_summary.free_classes.count > 0}\r\n                  <li><strong>Free Classes:</strong> {paymentData.payment_analysis.payment_summary.free_classes.count} classes</li>\r\n                {/if}\r\n                <li class=\"total-classes\"><strong>Total Classes: {paymentData.payment_analysis.total_completed_classes + paymentData.payment_analysis.total_upcoming_classes}</strong></li>\r\n              </ul>\r\n            </div>\r\n          </div>\r\n          <div class=\"payment-total-only\">\r\n            <p><strong>Total Payment: €{paymentData.payment_analysis.total_payment}</strong></p>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Class-by-Class Payment Details -->\r\n        <div class=\"comments-section\">\r\n          <h4>Class-by-Class Payment Details</h4>\r\n          <div class=\"attendance-details\">\r\n            {#each paymentData.payment_analysis.class_payment_details\r\n              .sort((a, b) => new Date(a.class_time) - new Date(b.class_time))\r\n              .slice(0, showAllPaymentClasses ? paymentData.payment_analysis.class_payment_details.length : 10) as classDetail}\r\n              <div class=\"attendance-item {classDetail.status === 'upcoming' ? 'upcoming-class' : ''}\">\r\n                <div class=\"attendance-header\">\r\n                  <strong>{classDetail.class_name}</strong>\r\n                  <div class=\"class-status-payment\">\r\n                    <span class=\"class-status {classDetail.status}\">{classDetail.status}</span>\r\n                    <span class=\"attendance-rate {classDetail.is_free_class ? 'free-class' : 'paid-class'}\">\r\n                      €{classDetail.payment}\r\n                    </span>\r\n                  </div>\r\n                </div>\r\n                <div class=\"attendance-stats\">\r\n                  <small>{classDetail.display_time}</small>\r\n                  <small>Students: {classDetail.students} ({classDetail.student_count_category})</small>\r\n                  {#if classDetail.special_conditions && classDetail.special_conditions.length > 0}\r\n                    <div class=\"special-conditions-container\">\r\n                      {#each classDetail.special_conditions as condition}\r\n                        {#if condition === 'IB'}\r\n                          <small class=\"special-condition ib-condition\">IB (+€5)</small>\r\n                        {:else if condition === 'Special Needs'}\r\n                          <small class=\"special-condition special-needs-condition\">Special Needs (+€3)</small>\r\n                        {:else if condition === 'Lithuanian Second Language'}\r\n                          <small class=\"special-condition lithuanian-condition\">Lithuanian L2 (+€3)</small>\r\n                        {/if}\r\n                      {/each}\r\n                      {#if classDetail.special_conditions_surcharge > 0}\r\n                        <small class=\"total-surcharge\">Total surcharge: +€{classDetail.special_conditions_surcharge}</small>\r\n                      {/if}\r\n                    </div>\r\n                  {/if}\r\n                  {#if classDetail.is_free_class}\r\n                    <small class=\"free-reason\">Free: First class for non-retained students</small>\r\n                  {/if}\r\n                  {#if classDetail.has_first_time_students && classDetail.first_time_students.length > 0}\r\n                    <small class=\"first-time\">First-time: {classDetail.first_time_students.join(', ')}</small>\r\n                  {/if}\r\n                  {#if classDetail.has_retained_students && classDetail.retained_students.length > 0}\r\n                    <small class=\"retained\">Retained: {classDetail.retained_students.join(', ')}</small>\r\n                  {/if}\r\n                </div>\r\n              </div>\r\n            {/each}\r\n            {#if paymentData.payment_analysis.class_payment_details.length > 10}\r\n              <div class=\"more-classes\">\r\n                <button \r\n                  class=\"expand-button\" \r\n                  on:click={() => showAllPaymentClasses = !showAllPaymentClasses}\r\n                >\r\n                  {showAllPaymentClasses \r\n                    ? 'Show Less' \r\n                    : `Show ${paymentData.payment_analysis.class_payment_details.length - 10} More Classes`}\r\n                </button>\r\n              </div>\r\n            {/if}\r\n          </div>\r\n        </div>\r\n      {:else}\r\n        <div class=\"no-data\">\r\n          <p>No classes found for this teacher in the current month.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  {#if commentsData}\r\n    <div class=\"retention-container\">\r\n      <h3>Student Comments About Teacher</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Comments: {commentsData.comments_analysis.total_comments}</strong>\r\n        </div>\r\n        <p>Student feedback from {new Date(commentsData.month_period.start_date).toLocaleDateString()} - {new Date(commentsData.month_period.end_date).toLocaleDateString()}</p>\r\n      </div>\r\n\r\n      {#if commentsData.comments_analysis.total_comments > 0}\r\n        <!-- Student Rating Average Section -->\r\n        <div class=\"comments-section\">\r\n          <h4>Student Rating</h4>\r\n          <div class=\"student-rating-summary\">\r\n            <div class=\"rating-display\">\r\n              <div class=\"rating-value\">\r\n                <strong>{commentsData.comments_analysis.rating_averages.general.average}/5</strong>\r\n              </div>\r\n              <div class=\"rating-details\">\r\n                <p>Average Class Rating</p>\r\n                <p>({commentsData.comments_analysis.rating_averages.general.rated_comments} student ratings)</p>\r\n              </div>\r\n            </div>\r\n            <div class=\"rating-bar-container\">\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {(commentsData.comments_analysis.rating_averages.general.average / 5) * 100}%\"></div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- All Student Comments Section - Always visible for admins -->\r\n        {#if commentsData.comments_analysis.sample_comments.length > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>All Student Comments</h4>\r\n            <div class=\"sample-comments\">\r\n              {#each commentsData.comments_analysis.sample_comments as comment}\r\n                <div class=\"comment-item\">\r\n                  <strong>{comment.student}:</strong>\r\n                  <span>\"{comment.text}\"</span>\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n      {:else}\r\n        <div class=\"no-data\">\r\n          <p>No student comments found for this teacher in the current month.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  {#if bonusData}\r\n    <div class=\"retention-container\">\r\n      <h3>Bonus Eligibility Analysis</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Bonus Eligibility: {bonusData.eligible_for_bonus ? 'Eligible' : 'Not Eligible'}</strong>\r\n        </div>\r\n         <p>Criteria: {bonusData.criteria?.criteria_met || 0}/{bonusData.criteria?.total_criteria || 0} met</p>\r\n         <p>Period: {new Date(bonusData.month_period?.start_date || bonusData.details?.month_period?.start_date).toLocaleDateString()} - {new Date(bonusData.month_period?.end_date || bonusData.details?.month_period?.end_date).toLocaleDateString()}</p>\r\n      </div>\r\n\r\n      {#if bonusData.eligible_for_bonus}\r\n        <div class=\"bonus-eligibility-banner\">\r\n          <div class=\"bonus-icon\">🎉</div>\r\n          <div class=\"bonus-message\">\r\n            <h4>Congratulations! You are eligible for bonus</h4>\r\n            <p>Each paid class this month receives <strong>+€{bonusData.amount_per_class ?? 2} bonus</strong></p>\r\n             {#if bonusData.month_period || bonusData.details?.month_period}\r\n               <small>Period: {new Date(bonusData.month_period?.start_date || bonusData.details?.month_period?.start_date).toLocaleDateString()} - {new Date(bonusData.month_period?.end_date || bonusData.details?.month_period?.end_date).toLocaleDateString()}</small>\r\n             {/if}\r\n          </div>\r\n        </div>\r\n      {:else}\r\n        <div class=\"bonus-eligibility-banner not-eligible\">\r\n          <div class=\"bonus-icon\">📊</div>\r\n          <div class=\"bonus-message\">\r\n            <h4>Bonus criteria not met</h4>\r\n            <p>When all criteria are met, you will receive <strong>+€{bonusData.amount_per_class ?? 2} bonus</strong> for each paid class</p>\r\n             {#if bonusData.month_period || bonusData.details?.month_period}\r\n               <small>Period: {new Date(bonusData.month_period?.start_date || bonusData.details?.month_period?.start_date).toLocaleDateString()} - {new Date(bonusData.month_period?.end_date || bonusData.details?.month_period?.end_date).toLocaleDateString()}</small>\r\n             {/if}\r\n          </div>\r\n        </div>\r\n      {/if}\r\n\r\n       <!-- Detailed Criteria Breakdown -->\r\n       {#if bonusData.criteria?.criteria_breakdown && bonusData.criteria.criteria_breakdown.length > 0}\r\n         <div class=\"comments-section\">\r\n           <h4>Criteria Breakdown</h4>\r\n           <div class=\"criteria-breakdown\">\r\n             {#each bonusData.criteria.criteria_breakdown as criterion}\r\n            <div class=\"criterion-item\">\r\n              <div class=\"criterion-name\">\r\n                <strong>{criterion.name}</strong>\r\n                <span class=\"criterion-status {criterion.met ? 'met' : 'not-met'}\">\r\n                  {criterion.met ? '✓' : '✗'}\r\n                </span>\r\n              </div>\r\n              <div class=\"criterion-details\">\r\n                <p>{criterion.description}</p>\r\n                <p class=\"criterion-value\">\r\n                  Current: {criterion.current_value} / Required: {criterion.required_value}\r\n                </p>\r\n              </div>\r\n             </div>\r\n           {/each}\r\n         </div>\r\n       </div>\r\n       {/if}\r\n     </div>\r\n   {/if}\r\n\r\n  {#if surveyData}\r\n    <div class=\"retention-container\">\r\n      <h3>Teacher Survey Submission Rate</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Survey Submission Rate: {surveyData.survey_analysis.submission_rate_percentage}%</strong>\r\n        </div>\r\n        <p>({surveyData.survey_analysis.surveys_submitted} out of {surveyData.survey_analysis.total_classes} classes have teacher surveys)</p>\r\n        <p>Period: {new Date(surveyData.month_period.start_date).toLocaleDateString()} - {new Date(surveyData.month_period.end_date).toLocaleDateString()}</p>\r\n      </div>\r\n\r\n      {#if surveyData.survey_analysis.total_classes > 0}\r\n        <!-- Progress Bar -->\r\n        <div class=\"comments-section\">\r\n          <h4>Submission Overview</h4>\r\n          <div class=\"metric-item\">\r\n            <strong>Overall Compliance</strong>\r\n            <div class=\"metric-bar\">\r\n              <div class=\"metric-fill\" style=\"width: {surveyData.survey_analysis.submission_rate_percentage}%\"></div>\r\n            </div>\r\n            <small>{surveyData.survey_analysis.surveys_submitted} submitted, {surveyData.survey_analysis.classes_missing_surveys.length} missing</small>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Classes with Surveys -->\r\n        {#if surveyData.survey_analysis.classes_with_surveys.length > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>Classes with Teacher Surveys ({surveyData.survey_analysis.classes_with_surveys.length})</h4>\r\n            <div class=\"sample-comments\">\r\n              {#each surveyData.survey_analysis.classes_with_surveys\r\n                .sort((a, b) => new Date(a.class_time) - new Date(b.class_time))\r\n                .slice(0, showAllSurveyClasses ? surveyData.survey_analysis.classes_with_surveys.length : 5) as classItem}\r\n                <div class=\"comment-item\">\r\n                  <strong>{classItem.class_name}</strong>\r\n                  <div class=\"class-details\">\r\n                    <small>{new Date(classItem.class_time).toLocaleDateString()} - {classItem.class_display_time}</small>\r\n                    <small>Students: {classItem.students}</small>\r\n                    {#if classItem.note_text}\r\n                      <p>\"{classItem.note_text}\"</p>\r\n                    {/if}\r\n                    <div class=\"survey-ratings\">\r\n                      {#if classItem.effort_rating > 0}\r\n                        <span class=\"rating-badge {getRatingColorClass(classItem.effort_rating)}\">Effort: {classItem.effort_rating}/5</span>\r\n                      {/if}\r\n                      {#if classItem.learned_rating > 0}\r\n                        <span class=\"rating-badge {getRatingColorClass(classItem.learned_rating)}\">Learning: {classItem.learned_rating}/5</span>\r\n                      {/if}\r\n                      {#if classItem.general_rating > 0}\r\n                        <span class=\"rating-badge {getRatingColorClass(classItem.general_rating)}\">General: {classItem.general_rating}/5</span>\r\n                      {/if}\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              {/each}\r\n              {#if surveyData.survey_analysis.classes_with_surveys.length > 5}\r\n                <div class=\"more-classes\">\r\n                  <button \r\n                    class=\"expand-button\" \r\n                    on:click={() => showAllSurveyClasses = !showAllSurveyClasses}\r\n                  >\r\n                    {showAllSurveyClasses \r\n                      ? 'Show Less' \r\n                      : `Show ${surveyData.survey_analysis.classes_with_surveys.length - 5} More Classes`}\r\n                  </button>\r\n                </div>\r\n              {/if}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n\r\n        <!-- Classes Missing Surveys -->\r\n        {#if surveyData.survey_analysis.classes_missing_surveys.length > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>Classes Missing Teacher Surveys ({surveyData.survey_analysis.classes_missing_surveys.length})</h4>\r\n            <div class=\"missing-surveys\">\r\n              {#each surveyData.survey_analysis.classes_missing_surveys\r\n                .sort((a, b) => new Date(a.class_time) - new Date(b.class_time)) as classItem}\r\n                <div class=\"missing-item\">\r\n                  <strong>{classItem.class_name}</strong>\r\n                  <div class=\"class-details\">\r\n                    <small>{new Date(classItem.class_time).toLocaleDateString()} - {classItem.class_display_time}</small>\r\n                    <small>Students: {classItem.students}</small>\r\n                    <span class=\"missing-badge\">Survey Missing</span>\r\n                  </div>\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n      {:else}\r\n        <div class=\"no-data\">\r\n          <p>No classes found for this teacher in the current month.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  {#if commentsData}\r\n    <div class=\"retention-container\">\r\n      <h3>Student Comments About Teacher</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Comments: {commentsData.comments_analysis.total_comments}</strong>\r\n        </div>\r\n        <p>Student feedback from {new Date(commentsData.month_period.start_date).toLocaleDateString()} - {new Date(commentsData.month_period.end_date).toLocaleDateString()}</p>\r\n      </div>\r\n\r\n      {#if commentsData.comments_analysis.total_comments > 0}\r\n        <!-- Student Rating Average Section -->\r\n        <div class=\"comments-section\">\r\n          <h4>Student Rating</h4>\r\n          <div class=\"student-rating-summary\">\r\n            <div class=\"rating-display\">\r\n              <div class=\"rating-value\">\r\n                <strong>{commentsData.comments_analysis.rating_averages.general.average}/5</strong>\r\n              </div>\r\n              <div class=\"rating-details\">\r\n                <p>Average Class Rating</p>\r\n                <p>({commentsData.comments_analysis.rating_averages.general.rated_comments} student ratings)</p>\r\n              </div>\r\n            </div>\r\n            <div class=\"rating-bar-container\">\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {(commentsData.comments_analysis.rating_averages.general.average / 5) * 100}%\"></div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- All Student Comments Section - Always visible for admins -->\r\n        {#if commentsData.comments_analysis.sample_comments.length > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>All Student Comments</h4>\r\n            <div class=\"sample-comments\">\r\n              {#each commentsData.comments_analysis.sample_comments as comment}\r\n                <div class=\"comment-item\">\r\n                  <strong>{comment.student}:</strong>\r\n                  <span>\"{comment.text}\"</span>\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n      {:else}\r\n        <div class=\"no-data\">\r\n          <p>No student comments found for this teacher in the current month.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  {#if attendanceData && isUserSuper}\r\n    <div class=\"retention-container\">\r\n      <h3>Teacher Attendance Analysis</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Teacher Attendance Rate: {attendanceData.attendance_analysis.attendance_rate_percentage}%</strong>\r\n        </div>\r\n        <p>({attendanceData.attendance_analysis.attended_classes} out of {attendanceData.attendance_analysis.total_scheduled} classes attended)</p>\r\n        <p>Period: {new Date(attendanceData.month_period.start_date).toLocaleDateString()} - {new Date(attendanceData.month_period.end_date).toLocaleDateString()}</p>\r\n      </div>\r\n\r\n      {#if attendanceData.attendance_analysis.total_scheduled > 0}\r\n        <!-- Main Metrics Section -->\r\n        <div class=\"month-comparison\">\r\n          <div class=\"month-data\">\r\n            <h4>Teacher Attendance Summary</h4>\r\n            <ul>\r\n              <li><strong>Total Scheduled:</strong> {attendanceData.attendance_analysis.total_scheduled}</li>\r\n              <li><strong>Classes Attended:</strong> {attendanceData.attendance_analysis.attended_classes}</li>\r\n              <li><strong>Late Arrivals:</strong> {attendanceData.attendance_analysis.late_classes}</li>\r\n              <li><strong>No-Shows:</strong> {attendanceData.attendance_analysis.no_show_classes}</li>\r\n            </ul>\r\n          </div>\r\n          \r\n          <div class=\"month-data\">\r\n            <h4>Attendance Performance</h4>\r\n            <ul>\r\n              <li><strong>On-Time Classes:</strong> {attendanceData.attendance_analysis.on_time_classes}</li>\r\n              <li><strong>Attendance Rate:</strong> {attendanceData.attendance_analysis.attendance_rate_percentage}%</li>\r\n              <li><strong>Punctuality Rate:</strong> {attendanceData.attendance_analysis.punctuality_rate_percentage}%</li>\r\n            </ul>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Visual Progress Bars -->\r\n        <div class=\"comments-section\">\r\n          <h4>Attendance Overview</h4>\r\n          <div class=\"metrics-grid\">\r\n            <div class=\"metric-item\">\r\n              <strong>Teacher Attendance Rate</strong>\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {attendanceData.attendance_analysis.attendance_rate_percentage}%\"></div>\r\n              </div>\r\n              <small>{attendanceData.attendance_analysis.attended_classes} out of {attendanceData.attendance_analysis.total_scheduled} classes attended</small>\r\n            </div>\r\n            \r\n            <div class=\"metric-item\">\r\n              <strong>Teacher Punctuality Rate</strong>\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {attendanceData.attendance_analysis.punctuality_rate_percentage}%\"></div>\r\n              </div>\r\n              <small>{attendanceData.attendance_analysis.on_time_classes} out of {attendanceData.attendance_analysis.total_scheduled} classes on time ({attendanceData.attendance_analysis.late_classes} late arrivals)</small>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Class-by-Class Teacher Attendance Details -->\r\n        {#if attendanceData.attendance_analysis.class_attendance_details && attendanceData.attendance_analysis.class_attendance_details.length > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>Class-by-Class Teacher Attendance Details</h4>\r\n            <div class=\"attendance-details\">\r\n              {#each attendanceData.attendance_analysis.class_attendance_details\r\n                .sort((a, b) => new Date(a.class_time) - new Date(b.class_time))\r\n                .slice(0, showAllAttendanceClasses ? attendanceData.attendance_analysis.class_attendance_details.length : 10) as classDetail}\r\n                <div class=\"attendance-item {classDetail.attendance_status === 'no_show' ? 'no-show-item' : classDetail.attendance_status === 'late' ? 'late-item' : 'on-time-item'}\">\r\n                  <div class=\"attendance-header\">\r\n                    <strong>{classDetail.class_name}</strong>\r\n                    <div class=\"class-status-payment\">\r\n                      <span class=\"attendance-status {classDetail.attendance_status}\">\r\n                        {classDetail.attendance_status === 'no_show' ? 'No Show' : \r\n                         classDetail.attendance_status === 'late' ? `Late (${classDetail.minutes_late}min)` : \r\n                         'On Time'}\r\n                      </span>\r\n                    </div>\r\n                  </div>\r\n                  <div class=\"attendance-stats\">\r\n                    <small>Scheduled: {classDetail.class_time}</small>\r\n                    <small>Attended: {classDetail.attendance_time}</small>\r\n                    <small>Display: {classDetail.display_time}</small>\r\n                  </div>\r\n                </div>\r\n              {/each}\r\n              {#if attendanceData.attendance_analysis.class_attendance_details.length > 10}\r\n                <div class=\"more-classes\">\r\n                  <button \r\n                    class=\"expand-button\" \r\n                    on:click={() => showAllAttendanceClasses = !showAllAttendanceClasses}\r\n                  >\r\n                    {showAllAttendanceClasses \r\n                      ? 'Show Less' \r\n                      : `Show ${attendanceData.attendance_analysis.class_attendance_details.length - 10} More Classes`}\r\n                  </button>\r\n                </div>\r\n              {/if}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n      {:else}\r\n        <div class=\"no-data\">\r\n          <p>No scheduled classes found for this teacher in the current month.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  {#if retentionData}\r\n    <div class=\"retention-container\">\r\n      <h3>Teacher Retention Analysis</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Retention Rate: {retentionData.retention.retention_rate_percentage}%</strong>\r\n        </div>\r\n        <p>({retentionData.retention.retained_students} out of {retentionData.current_month.unique_students} students continuing to next month)</p>\r\n      </div>\r\n\r\n      <div class=\"month-comparison\">\r\n        <div class=\"month-data\">\r\n          <h4>Current Month</h4>\r\n          <ul>\r\n            <li><strong>Unique Students:</strong> {retentionData.current_month.unique_students}</li>\r\n            <li><strong>Total Classes:</strong> {retentionData.current_month.total_classes}</li>\r\n            <li><strong>Period:</strong> {new Date(retentionData.current_month.start_date).toLocaleDateString()} - {new Date(retentionData.current_month.end_date).toLocaleDateString()}</li>\r\n          </ul>\r\n        </div>\r\n        \r\n        <div class=\"month-data\">\r\n          <h4>Next Month</h4>\r\n          <ul>\r\n            <li><strong>Unique Students:</strong> {retentionData.next_month.unique_students}</li>\r\n            <li><strong>Total Classes:</strong> {retentionData.next_month.total_classes}</li>\r\n            <li><strong>Period:</strong> {new Date(retentionData.next_month.start_date).toLocaleDateString()} - {new Date(retentionData.next_month.end_date).toLocaleDateString()}</li>\r\n          </ul>\r\n        </div>\r\n      </div>\r\n\r\n      {#if retentionData.retention.retained_students_details.length > 0}\r\n        <div class=\"student-details\">\r\n          <h4>Retained Students ({retentionData.retention.retained_students})</h4>\r\n          <ul class=\"student-list\">\r\n            {#each retentionData.retention.retained_students_details as student}\r\n              <li>{student.name || student.username}</li>\r\n            {/each}\r\n          </ul>\r\n        </div>\r\n      {/if}\r\n\r\n      {#if retentionData.retention.lost_students_details.length > 0}\r\n        <div class=\"student-details\">\r\n          <h4>Students Not Continuing ({retentionData.retention.lost_students_details.length})</h4>\r\n          <ul class=\"student-list\">\r\n            {#each retentionData.retention.lost_students_details as student}\r\n              <li>{student.name || student.username}</li>\r\n            {/each}\r\n          </ul>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  {#if completionData}\r\n    <div class=\"retention-container\">\r\n      <h3>Class Completion & Punctuality</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Operational Efficiency: {completionData.completion_analysis.operational_efficiency.overall_score}%</strong>\r\n        </div>\r\n        <p>Combined completion rate and punctuality score for {new Date(completionData.month_period.start_date).toLocaleDateString()} - {new Date(completionData.month_period.end_date).toLocaleDateString()}</p>\r\n      </div>\r\n\r\n      {#if completionData.completion_analysis.total_scheduled > 0}\r\n        <!-- Main Metrics Section -->\r\n        <div class=\"month-comparison\">\r\n          <div class=\"month-data\">\r\n            <h4>Teacher Performance</h4>\r\n            <ul>\r\n              <li><strong>Total Scheduled:</strong> {completionData.completion_analysis.total_scheduled}</li>\r\n              <li><strong>Teacher Completed:</strong> {completionData.completion_analysis.teacher_completed_classes}</li>\r\n              <li><strong>Teacher Cancelled:</strong> {completionData.completion_analysis.teacher_cancelled_classes}</li>\r\n              <li><strong>Teacher Completion Rate:</strong> {completionData.completion_analysis.teacher_completion_rate_percentage}%</li>\r\n            </ul>\r\n          </div>\r\n          \r\n          <div class=\"month-data\">\r\n            <h4>Payment & Responsibility</h4>\r\n            <ul>\r\n              <li><strong>Payment Eligible Classes:</strong> {completionData.completion_analysis.payment_eligible_classes.total_eligible}</li>\r\n              <li><strong>Student Cancellations:</strong> {completionData.completion_analysis.responsibility_breakdown.student_cancellations}</li>\r\n              <li><strong>Classes Actually Held:</strong> {completionData.completion_analysis.classes_actually_held}</li>\r\n              <li><strong>Actual Completion Rate:</strong> {completionData.completion_analysis.actual_completion_rate_percentage}%</li>\r\n            </ul>\r\n          </div>\r\n          \r\n          <div class=\"month-data\">\r\n            <h4>Punctuality</h4>\r\n            <ul>\r\n              <li><strong>On-Time Classes:</strong> {completionData.completion_analysis.punctuality.on_time_classes}</li>\r\n              <li><strong>Total Late Incidents:</strong> {completionData.completion_analysis.punctuality.total_late_incidents}</li>\r\n              <li><strong>Formal Late Reports:</strong> {completionData.completion_analysis.punctuality.formal_late_incidents}</li>\r\n              <li><strong>Student-Reported Late:</strong> {completionData.completion_analysis.punctuality.student_reported_late}</li>\r\n              <li><strong>Punctuality Rate:</strong> {completionData.completion_analysis.punctuality.punctuality_rate_percentage}%</li>\r\n            </ul>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Student Attendance Section -->\r\n        <div class=\"comments-section\">\r\n          <h4>Student Attendance Overview</h4>\r\n          <div class=\"month-comparison\">\r\n            <div class=\"month-data\">\r\n              <h5>Attendance Summary</h5>\r\n              <ul>\r\n                <li><strong>Classes with Students:</strong> {completionData.completion_analysis.student_attendance.total_classes_with_students}</li>\r\n                <li><strong>Classes with Attendance:</strong> {completionData.completion_analysis.student_attendance.classes_with_attendance}</li>\r\n                <li><strong>Classes with No-Shows:</strong> {completionData.completion_analysis.student_attendance.classes_with_no_attendance}</li>\r\n              </ul>\r\n            </div>\r\n            \r\n            <div class=\"month-data\">\r\n              <h5>Attendance Rates</h5>\r\n              <ul>\r\n                <li><strong>Student Attendance Rate:</strong> {completionData.completion_analysis.student_attendance.student_attendance_rate_percentage}%</li>\r\n                <li><strong>Student No-Show Rate:</strong> {completionData.completion_analysis.student_attendance.student_no_show_rate}%</li>\r\n                <li><strong>Total Attendances:</strong> {completionData.completion_analysis.student_attendance.total_actual_attendances}/{completionData.completion_analysis.student_attendance.total_expected_attendances}</li>\r\n              </ul>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Visual Progress Bars -->\r\n        <div class=\"comments-section\">\r\n          <h4>Performance Overview</h4>\r\n          <div class=\"metrics-grid\">\r\n            <div class=\"metric-item\">\r\n              <strong>Teacher Completion Rate</strong>\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {completionData.completion_analysis.teacher_completion_rate_percentage}%\"></div>\r\n              </div>\r\n              <small>{completionData.completion_analysis.teacher_completed_classes} out of {completionData.completion_analysis.total_scheduled} classes completed by teacher</small>\r\n            </div>\r\n            \r\n            <div class=\"metric-item\">\r\n              <strong>Punctuality Rate</strong>\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {completionData.completion_analysis.punctuality.punctuality_rate_percentage}%\"></div>\r\n              </div>\r\n              <small>{completionData.completion_analysis.punctuality.on_time_classes} out of {completionData.completion_analysis.total_scheduled} classes on time ({completionData.completion_analysis.punctuality.total_late_incidents} late incidents)</small>\r\n            </div>\r\n            \r\n            <div class=\"metric-item\">\r\n              <strong>Student Attendance Rate</strong>\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {completionData.completion_analysis.student_attendance.student_attendance_rate_percentage}%\"></div>\r\n              </div>\r\n              <small>{completionData.completion_analysis.student_attendance.total_actual_attendances} out of {completionData.completion_analysis.student_attendance.total_expected_attendances} expected attendances</small>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Student Attendance Details -->\r\n        {#if completionData.completion_analysis.student_attendance_details && completionData.completion_analysis.student_attendance_details.length > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>Class-by-Class Attendance Details</h4>\r\n            <div class=\"attendance-details\">\r\n              {#each completionData.completion_analysis.student_attendance_details\r\n                .sort((a, b) => new Date(a.class_time) - new Date(b.class_time))\r\n                .slice(0, showAllStudentAttendanceClasses ? completionData.completion_analysis.student_attendance_details.length : 10) as classDetail}\r\n                <div class=\"attendance-item\">\r\n                  <div class=\"attendance-header\">\r\n                    <strong>{classDetail.class_name}</strong>\r\n                    <span class=\"attendance-rate\">{classDetail.attendance_rate.toFixed(1)}%</span>\r\n                  </div>\r\n                  <div class=\"attendance-stats\">\r\n                    <small>{classDetail.display_time}</small>\r\n                    <small>{classDetail.attending_students}/{classDetail.enrolled_students} students attended</small>\r\n                    {#if classDetail.no_show_students > 0}\r\n                      <small class=\"no-show\">({classDetail.no_show_students} no-shows)</small>\r\n                    {/if}\r\n                  </div>\r\n                </div>\r\n              {/each}\r\n              {#if completionData.completion_analysis.student_attendance_details.length > 10}\r\n                <div class=\"more-classes\">\r\n                  <button \r\n                    class=\"expand-button\" \r\n                    on:click={() => showAllStudentAttendanceClasses = !showAllStudentAttendanceClasses}\r\n                  >\r\n                    {showAllStudentAttendanceClasses \r\n                      ? 'Show Less' \r\n                      : `Show ${completionData.completion_analysis.student_attendance_details.length - 10} More Classes`}\r\n                  </button>\r\n                </div>\r\n              {/if}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n\r\n        <!-- Weekly Trends if available -->\r\n        {#if Object.keys(completionData.completion_analysis.weekly_trends || {}).length > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>Weekly Trends</h4>\r\n            <div class=\"weekly-trends\">\r\n              {#each Object.entries(completionData.completion_analysis.weekly_trends) as [week, data]}\r\n                <div class=\"week-item\">\r\n                  <strong>Week {week.split('_')[1]}</strong>\r\n                  <div class=\"week-stats\">\r\n                    <span>Completion: {data.completion_rate.toFixed(1)}%</span>\r\n                    <span>Punctuality: {data.punctuality_rate.toFixed(1)}%</span>\r\n                    {#if data.total_late_incidents > 0}\r\n                      <span class=\"late-incidents\">Late: {data.formal_late || 0} formal, {data.student_reported_late || 0} student</span>\r\n                    {/if}\r\n                  </div>\r\n                  <small>{data.period}</small>\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n\r\n        <!-- Student feedback is separate from formal responsibility incidents. -->\r\n        {#if completionData.completion_analysis.punctuality.student_late_details?.length > 0}\r\n                <div class=\"incident-details\">\r\n                  <h5>Student-Reported Punctuality Issues:</h5>\r\n                  {#each completionData.completion_analysis.punctuality.student_late_details.slice(0, 5) as report}\r\n                    <div class=\"incident-item student-feedback\">\r\n                      <strong>Class: {report.class_id}</strong>\r\n                      <small>Reported by: {report.student_name}</small>\r\n                      {#if report.note_text !== 'No additional comment'}\r\n                        <span>Student comment: \"{report.note_text}\"</span>\r\n                      {/if}\r\n                      <div class=\"rating-info\">\r\n                        {#if report.effort_rating > 0}\r\n                          <small class=\"rating-badge {getRatingColorClass(report.effort_rating)}\">Effort rating: {report.effort_rating}/5</small>\r\n                        {/if}\r\n                        {#if report.learned_rating > 0}\r\n                          <small class=\"rating-badge {getRatingColorClass(report.learned_rating)}\">Learning rating: {report.learned_rating}/5</small>\r\n                        {/if}\r\n                        {#if report.general_rating > 0}\r\n                          <small class=\"rating-badge {getRatingColorClass(report.general_rating)}\">General rating: {report.general_rating}/5</small>\r\n                        {/if}\r\n                        <small class=\"punctuality-issue\">On-time: No</small>\r\n                      </div>\r\n                    </div>\r\n                  {/each}\r\n                  {#if completionData.completion_analysis.punctuality.student_late_details.length > 5}\r\n                    <div class=\"more-reports\">\r\n                      <small>... and {completionData.completion_analysis.punctuality.student_late_details.length - 5} more student reports</small>\r\n                    </div>\r\n                  {/if}\r\n                </div>\r\n              {/if}\r\n      {:else}\r\n        <div class=\"no-data\">\r\n          <p>No scheduled classes found for this teacher in the current month.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n  {/if}\r\n  <!-- End Individual Teacher Tab -->\r\n\r\n  <!-- All Teachers Dashboard Tab -->\r\n  {#if activeTab === 'dashboard' && isUserSuper}\r\n    <div class=\"dashboard-tab\">\r\n      <div class=\"dashboard-controls\">\r\n        <label for=\"dashboard-month-select\"><strong>Select Month:</strong></label>\r\n        <div class=\"dashboard-month-selector\">\r\n          <select\r\n            id=\"dashboard-month-select\"\r\n            bind:value={dashboardMonth}\r\n            class=\"month-dropdown\"\r\n          >\r\n            {#each availableMonths as month}\r\n              <option value={month.value}>{month.label}</option>\r\n            {/each}\r\n          </select>\r\n          <button \r\n            class=\"btn-load-dashboard\"\r\n            on:click={fetchAllSnapshots}\r\n            disabled={dashboardLoading || recalculating}\r\n          >\r\n            {dashboardLoading ? 'Loading...' : 'Load Dashboard'}\r\n          </button>\r\n          {#if allSnapshotsData}\r\n            <button \r\n              class=\"btn-recalculate-dashboard\"\r\n              on:click={recalculateAllSnapshots}\r\n              disabled={dashboardLoading || recalculating || ACTIVE_RECALC_STATUSES.has(recalculationStatus?.status) || !dashboardMonth}\r\n              title=\"Recalculate all teacher snapshots for the selected month\"\r\n            >\r\n              {recalculating ? 'Starting...' : ACTIVE_RECALC_STATUSES.has(recalculationStatus?.status) ? 'Calculating...' : 'Recalculate All'}\r\n            </button>\r\n          {/if}\r\n        </div>\r\n      </div>\r\n\r\n      {#if dashboardError}\r\n        <div class=\"error-message\">{dashboardError}</div>\r\n      {/if}\r\n\r\n      {#if dashboardMonth}\r\n        <ClassIncidentReport month={dashboardMonth} refreshKey={incidentRefreshKey} />\r\n      {/if}\r\n\r\n      {#if recalculationError}\r\n        <div class=\"error-message\">{recalculationError}</div>\r\n      {/if}\r\n\r\n      {#if recalculationSuccess}\r\n        <div class=\"success-message\">\r\n          {recalculationMessage || 'Done.'}\r\n        </div>\r\n      {/if}\r\n\r\n      {#if allSnapshotsData}\r\n        <div class=\"dashboard-summary\">\r\n          <h3>Summary for {availableMonths.find(m => m.value === dashboardMonth)?.label}</h3>\r\n          <div class=\"summary-stats\">\r\n            <div class=\"stat-item\">\r\n              <strong>Total Teachers:</strong> {displayedSummary ? displayedSummary.total_teachers : allSnapshotsData.summary.total_teachers}\r\n            </div>\r\n            <div class=\"stat-item\">\r\n              <strong>Grand Total Payment:</strong> €{displayedSummary ? displayedSummary.grand_total_payment : allSnapshotsData.summary.grand_total_payment}\r\n            </div>\r\n            <div class=\"stat-item\">\r\n              <strong>Total Classes:</strong> {displayedSummary ? displayedSummary.total_classes : allSnapshotsData.summary.total_classes}\r\n            </div>\r\n            <div class=\"stat-item\">\r\n              <strong>Average per Teacher:</strong> €{displayedSummary ? displayedSummary.average_per_teacher : allSnapshotsData.summary.average_per_teacher}\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"snapshots-table-container\">\r\n          <table class=\"snapshots-table\">\r\n            <thead>\r\n              <tr>\r\n                <th>Teacher Name</th>\r\n                <th>SOLO EUR</th>\r\n                <th># of SOLO</th>\r\n                <th>DUO EUR</th>\r\n                <th># of DUO</th>\r\n                <th>TRIO EUR</th>\r\n                <th># of TRIO</th>\r\n                <th>TOTAL</th>\r\n                <th>Classes</th>\r\n                <th>Bonus</th>\r\n                <th>Status</th>\r\n              </tr>\r\n            </thead>\r\n            <tbody>\r\n              {#each displayedSnapshots as snapshot}\r\n                <tr class:finalized={snapshot.is_finalized}>\r\n                  <td class=\"teacher-name\">{snapshot.teacher_name}</td>\r\n                  <td class=\"currency\">€{snapshot.solo_eur}</td>\r\n                  <td class=\"number\">{snapshot.solo_count}</td>\r\n                  <td class=\"currency\">€{snapshot.duo_eur}</td>\r\n                  <td class=\"number\">{snapshot.duo_count}</td>\r\n                  <td class=\"currency\">€{snapshot.trio_eur}</td>\r\n                  <td class=\"number\">{snapshot.trio_count}</td>\r\n                  <td class=\"currency total-cell\"><strong>€{snapshot.total_eur}</strong></td>\r\n                  <td class=\"number\">{snapshot.total_classes}</td>\r\n                  <td class=\"bonus-cell\">\r\n                    <TeacherCommentCoveragePopover\r\n                      teacherId={snapshot.teacher_id}\r\n                      teacherName={snapshot.teacher_name}\r\n                      month={dashboardMonth}\r\n                      bonusEligible={snapshot.bonus_eligible}\r\n                      bonusAmount={snapshot.bonus_amount}\r\n                    />\r\n                  </td>\r\n                  <td class=\"status-cell\">\r\n                    {#if snapshot.is_finalized}\r\n                      <span class=\"status-finalized\">FINALIZED</span>\r\n                    {:else}\r\n                      <span class=\"status-draft\">DRAFT</span>\r\n                    {/if}\r\n                  </td>\r\n                </tr>\r\n              {/each}\r\n            </tbody>\r\n            <tfoot>\r\n              <tr class=\"totals-row\">\r\n                <td><strong>TOTALS</strong></td>\r\n                <td colspan=\"6\"></td>\r\n                <td class=\"currency\"><strong>€{displayedSummary ? displayedSummary.grand_total_payment : allSnapshotsData.summary.grand_total_payment}</strong></td>\r\n                <td class=\"number\"><strong>{displayedSummary ? displayedSummary.total_classes : allSnapshotsData.summary.total_classes}</strong></td>\r\n                <td colspan=\"2\"></td>\r\n              </tr>\r\n            </tfoot>\r\n          </table>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n  <!-- End Dashboard Tab -->\r\n\r\n</div>\r\n\r\n<style>\r\n  .teacher-performance-rating {\r\n    max-width: 100%;\r\n    margin: 0 auto;\r\n    padding: 2em;\r\n    width: 100%;\r\n  }\r\n\r\n  .teacher-performance-rating h2 {\r\n    color: #fab45a;\r\n    margin-bottom: 0.5em;\r\n  }\r\n\r\n  .description {\r\n    color: #666;\r\n    margin-bottom: 2em;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .teacher-selection {\r\n    margin-bottom: 2em;\r\n  }\r\n\r\n  .teacher-selection label {\r\n    display: block;\r\n    margin-bottom: 0.5em;\r\n    font-weight: bold;\r\n    color: #333;\r\n  }\r\n\r\n  .month-selection {\r\n    margin-top: 1.5em;\r\n  }\r\n\r\n  .month-selection label {\r\n    display: block;\r\n    margin-bottom: 0.5em;\r\n    font-weight: bold;\r\n    color: #333;\r\n  }\r\n\r\n  .month-dropdown {\r\n    width: 100%;\r\n    padding: 0.75em;\r\n    border: 2px solid #ddd;\r\n    border-radius: 8px;\r\n    font-size: 1em;\r\n    background-color: white;\r\n    cursor: pointer;\r\n    transition: border-color 0.2s;\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .month-dropdown:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 3px rgba(250, 180, 90, 0.1);\r\n  }\r\n\r\n  .month-dropdown:hover {\r\n    border-color: #fab45a;\r\n  }\r\n\r\n  .input-container {\r\n    position: relative;\r\n    margin-bottom: 1em;\r\n  }\r\n\r\n  input[type=\"text\"] {\r\n    width: 100%;\r\n    padding: 0.75em;\r\n    border: 2px solid #ddd;\r\n    border-radius: 8px;\r\n    font-size: 1em;\r\n    box-sizing: border-box;\r\n    transition: border-color 0.2s;\r\n  }\r\n\r\n  input[type=\"text\"]:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 3px rgba(250, 180, 90, 0.1);\r\n  }\r\n\r\n  .autocomplete-list {\r\n    position: absolute;\r\n    top: 100%;\r\n    left: 0;\r\n    right: 0;\r\n    background: white;\r\n    border: 2px solid #ddd;\r\n    border-top: none;\r\n    border-radius: 0 0 8px 8px;\r\n    max-height: 240px;\r\n    overflow-y: auto;\r\n    margin: 0;\r\n    padding: 0;\r\n    list-style: none;\r\n    z-index: 10;\r\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\r\n  }\r\n\r\n  .autocomplete-list li {\r\n    padding: 0;\r\n  }\r\n\r\n  .autocomplete-list button {\r\n    width: 100%;\r\n    background: none;\r\n    border: none;\r\n    padding: 0.75em;\r\n    cursor: pointer;\r\n    display: block;\r\n    text-align: left;\r\n    transition: background-color 0.2s;\r\n  }\r\n\r\n  .autocomplete-list button:hover {\r\n    background: #f8f9fa;\r\n  }\r\n\r\n  .teacher-option {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.25em;\r\n  }\r\n\r\n  .teacher-name {\r\n    font-weight: 500;\r\n    color: #333;\r\n  }\r\n\r\n  .teacher-email {\r\n    font-size: 0.9em;\r\n    color: #666;\r\n  }\r\n\r\n  .selected-teacher {\r\n    background: #f8f9fa;\r\n    border: 2px solid #fab45a;\r\n    border-radius: 8px;\r\n    padding: 1.5em;\r\n    margin-top: 1em;\r\n  }\r\n\r\n  .selected-teacher-info {\r\n    margin-bottom: 1.5em;\r\n  }\r\n\r\n  .selected-teacher-info h3 {\r\n    margin: 0 0 1em 0;\r\n    color: #fab45a;\r\n  }\r\n\r\n  .selected-teacher-info p {\r\n    margin: 0.5em 0;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .action-buttons {\r\n    display: flex;\r\n    gap: 1em;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .embedded-auto {\r\n    padding: 0.75em 0;\r\n    color: #666;\r\n    font-size: 0.95em;\r\n    font-style: italic;\r\n  }\r\n\r\n  .btn-submit,\r\n  .btn-clear {\r\n    padding: 0.75em 1.5em;\r\n    border: none;\r\n    border-radius: 6px;\r\n    font-size: 1em;\r\n    cursor: pointer;\r\n    font-weight: 500;\r\n    transition: all 0.2s;\r\n  }\r\n\r\n  .btn-submit {\r\n    background: #fab45a;\r\n    color: black;\r\n  }\r\n\r\n  .btn-submit:hover:not(:disabled) {\r\n    background: #e09a43;\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .btn-clear {\r\n    background: #6c757d;\r\n    color: white;\r\n  }\r\n\r\n  .btn-clear:hover:not(:disabled) {\r\n    background: #545b62;\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .btn-submit:disabled,\r\n  .btn-clear:disabled {\r\n    opacity: 0.6;\r\n    cursor: not-allowed;\r\n    transform: none;\r\n  }\r\n\r\n  .error-message {\r\n    color: #d32f2f;\r\n    background: #ffebee;\r\n    padding: 1em;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #d32f2f;\r\n    margin-top: 1em;\r\n  }\r\n\r\n  .success-message {\r\n    color: #2e7d32;\r\n    background: #e8f5e8;\r\n    padding: 1em;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #2e7d32;\r\n    margin-top: 1em;\r\n  }\r\n  /* Retention data display styles */\r\n  .retention-container {\r\n    margin-top: 2em;\r\n    padding: 15px;\r\n    background-color: white;\r\n    border-radius: 8px;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    color: black;\r\n  }\r\n\r\n  .retention-container h3 {\r\n    margin: 0 0 15px 0;\r\n    color: #333;\r\n    font-size: 1.2em;\r\n  }\r\n\r\n  .retention-summary {\r\n    margin-bottom: 20px;\r\n    padding: 10px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n    text-align: center;\r\n  }\r\n\r\n  .retention-rate {\r\n    font-size: 1.3em;\r\n    color: #fab45a;\r\n    margin-bottom: 5px;\r\n  }\r\n\r\n  .retention-summary p {\r\n    margin: 0;\r\n    color: #666;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .month-comparison {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 20px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  /* Payment breakdown specific styling */\r\n  .payment-breakdown-container {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 20px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .payment-section {\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .payment-section h5 {\r\n    margin: 0 0 12px 0;\r\n    color: #fab45a;\r\n    font-size: 1em;\r\n    border-bottom: 1px solid #ddd;\r\n    padding-bottom: 4px;\r\n  }\r\n\r\n  .class-count-list {\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n  }\r\n\r\n  .class-count-list li {\r\n    padding: 6px 0;\r\n    font-size: 0.9em;\r\n    border-bottom: 1px solid #e9ecef;\r\n  }\r\n\r\n  .class-count-list li:last-child {\r\n    border-bottom: none;\r\n  }\r\n\r\n  .total-classes {\r\n    background-color: #e8f5e8;\r\n    color: #2e7d32;\r\n    padding: 6px 8px;\r\n    border-radius: 4px;\r\n    margin-top: 6px;\r\n    border: none !important;\r\n  }\r\n\r\n  .payment-total-only {\r\n    background-color: #fab45a;\r\n    color: black;\r\n    padding: 12px;\r\n    border-radius: 8px;\r\n    margin-top: 20px;\r\n    text-align: center;\r\n  }\r\n\r\n  .payment-total-only p {\r\n    margin: 0;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .month-data {\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .month-data h4 {\r\n    margin: 0 0 10px 0;\r\n    color: #333;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .month-data ul {\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n  }\r\n\r\n  .month-data li {\r\n    padding: 3px 0;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .student-details {\r\n    margin-bottom: 15px;\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .student-details h4 {\r\n    margin: 0 0 10px 0;\r\n    color: #333;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .student-list {\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: 5px;\r\n  }\r\n\r\n  .student-list li {\r\n    padding: 3px 0;\r\n    font-size: 0.9em;\r\n    color: #555;\r\n  }\r\n\r\n  /* Comments analysis styles */\r\n  .comments-section {\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .comments-section h4 {\r\n    margin: 0 0 10px 0;\r\n    color: #333;\r\n    font-size: 1.1em;\r\n    border-bottom: 1px solid #ddd;\r\n    padding-bottom: 5px;\r\n  }\r\n\r\n  .comments-section h5 {\r\n    margin: 0 0 8px 0;\r\n    color: #fab45a;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .metrics-grid {\r\n    display: grid;\r\n    gap: 15px;\r\n    margin-top: 10px;\r\n  }\r\n\r\n  .metric-item {\r\n    background-color: #f8f9fa;\r\n    padding: 12px;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .metric-item strong {\r\n    display: block;\r\n    margin-bottom: 8px;\r\n    color: #333;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .metric-bar {\r\n    width: 100%;\r\n    height: 20px;\r\n    background-color: #e9ecef;\r\n    border-radius: 10px;\r\n    overflow: hidden;\r\n    margin-bottom: 5px;\r\n  }\r\n\r\n  .metric-fill {\r\n    height: 100%;\r\n    background-color: #fab45a;\r\n    transition: width 0.3s ease;\r\n    border-radius: 10px;\r\n  }\r\n\r\n  .metric-item small {\r\n    color: #666;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .sample-comments {\r\n    background-color: #f8f9fa;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .comment-item {\r\n    margin-bottom: 10px;\r\n    padding-bottom: 10px;\r\n    border-bottom: 1px solid #e9ecef;\r\n  }\r\n\r\n  .comment-item:last-child {\r\n    margin-bottom: 0;\r\n    padding-bottom: 0;\r\n    border-bottom: none;\r\n  }\r\n\r\n  .comment-item strong {\r\n    color: #fab45a;\r\n    font-size: 0.9em;\r\n    margin-right: 8px;\r\n  }\r\n\r\n  .comment-item span {\r\n    color: #555;\r\n    font-size: 0.9em;\r\n    line-height: 1.4;\r\n  }\r\n\r\n  .no-data {\r\n    text-align: center;\r\n    padding: 20px;\r\n    color: #666;\r\n    font-style: italic;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  /* Completion and punctuality specific styles */\r\n  .weekly-trends {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: 15px;\r\n    margin-top: 10px;\r\n  }\r\n\r\n  .week-item {\r\n    background-color: #f8f9fa;\r\n    padding: 12px;\r\n    border-radius: 6px;\r\n    text-align: center;\r\n  }\r\n\r\n  .week-item strong {\r\n    display: block;\r\n    color: #fab45a;\r\n    margin-bottom: 8px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .week-stats {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n    margin-bottom: 8px;\r\n  }\r\n\r\n  .week-stats span {\r\n    font-size: 0.8em;\r\n    color: #555;\r\n  }\r\n\r\n  .week-stats .late-incidents {\r\n    color: #d32f2f;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .week-item small {\r\n    color: #666;\r\n    font-size: 0.75em;\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  .incident-details {\r\n    margin-top: 15px;\r\n    padding-top: 15px;\r\n    border-top: 1px solid #e9ecef;\r\n  }\r\n\r\n  .incident-details h5 {\r\n    margin: 0 0 10px 0;\r\n    color: #fab45a;\r\n    font-size: 0.95em;\r\n  }\r\n\r\n  .incident-item {\r\n    background-color: white;\r\n    padding: 10px;\r\n    margin-bottom: 8px;\r\n    border-radius: 4px;\r\n    border-left: 3px solid #fab45a;\r\n  }\r\n\r\n  .incident-item:last-child {\r\n    margin-bottom: 0;\r\n  }\r\n\r\n  .incident-item strong {\r\n    display: block;\r\n    color: #333;\r\n    margin-bottom: 4px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .incident-item small {\r\n    display: block;\r\n    color: #666;\r\n    font-size: 0.8em;\r\n    margin-bottom: 4px;\r\n  }\r\n\r\n  .incident-item span {\r\n    display: block;\r\n    color: #555;\r\n    font-size: 0.85em;\r\n    line-height: 1.4;\r\n  }\r\n\r\n\r\n\r\n  /* Student attendance specific styles */\r\n  .attendance-details {\r\n    background-color: #f8f9fa;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .attendance-item {\r\n    background-color: white;\r\n    padding: 12px;\r\n    margin-bottom: 10px;\r\n    border-radius: 4px;\r\n    border-left: 3px solid #fab45a;\r\n  }\r\n\r\n  .attendance-item:last-child {\r\n    margin-bottom: 0;\r\n  }\r\n\r\n  .attendance-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin-bottom: 8px;\r\n  }\r\n\r\n  .attendance-header strong {\r\n    color: #333;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .attendance-rate {\r\n    background-color: #fab45a;\r\n    color: black;\r\n    padding: 2px 8px;\r\n    border-radius: 12px;\r\n    font-size: 0.8em;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .attendance-stats {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 2px;\r\n  }\r\n\r\n  .attendance-stats small {\r\n    color: #666;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .attendance-stats .no-show {\r\n    color: #d32f2f;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .more-classes {\r\n    text-align: center;\r\n    padding: 10px;\r\n    color: #666;\r\n    font-style: italic;\r\n  }\r\n\r\n  /* Student feedback specific styles */\r\n  .student-feedback {\r\n    border-left-color: #2e7d32;\r\n    background-color: #f8fff8;\r\n  }\r\n\r\n  .rating-info {\r\n    display: flex;\r\n    gap: 15px;\r\n    margin-top: 6px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .rating-info small {\r\n    background-color: #e8f5e8;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    color: #2e7d32;\r\n    font-size: 0.75em;\r\n  }\r\n\r\n  .rating-info .punctuality-issue {\r\n    background-color: #ffebee;\r\n    color: #d32f2f;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .more-reports {\r\n    text-align: center;\r\n    padding: 10px;\r\n    color: #666;\r\n    font-style: italic;\r\n    background-color: #f0f8f0;\r\n    border-radius: 4px;\r\n    margin-top: 8px;\r\n  }\r\n\r\n  .missing-surveys {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 1em;\r\n  }\r\n\r\n  .missing-item {\r\n    background: #fef2f2;\r\n    border: 1px solid #fecaca;\r\n    border-radius: 8px;\r\n    padding: 1em;\r\n  }\r\n\r\n  .missing-item strong {\r\n    color: #dc2626;\r\n  }\r\n\r\n  .missing-badge {\r\n    display: inline-block;\r\n    background: #dc2626;\r\n    color: white;\r\n    padding: 0.25em 0.5em;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n    margin-top: 0.5em;\r\n  }\r\n\r\n  .survey-ratings {\r\n    display: flex;\r\n    gap: 1em;\r\n    margin-top: 0.5em;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .survey-ratings span {\r\n    background: #f0f9ff;\r\n    border: 1px solid #bae6fd;\r\n    padding: 0.25em 0.5em;\r\n    border-radius: 4px;\r\n    font-size: 0.8em;\r\n    color: #0369a1;\r\n  }\r\n\r\n  /* Rating color classes */\r\n  .rating-badge {\r\n    padding: 0.25em 0.5em;\r\n    border-radius: 4px;\r\n    font-weight: 500;\r\n    display: inline-block;\r\n  }\r\n\r\n  /* Override default survey-ratings span styles with rating colors */\r\n  .survey-ratings .rating-badge.rating-1,\r\n  .rating-badge.rating-1 {\r\n    background-color: #ffebee !important;\r\n    border: 1px solid #ef5350 !important;\r\n    color: #c62828 !important;\r\n  }\r\n\r\n  .survey-ratings .rating-badge.rating-2,\r\n  .rating-badge.rating-2 {\r\n    background-color: #fff3e0 !important;\r\n    border: 1px solid #ff9800 !important;\r\n    color: #e65100 !important;\r\n  }\r\n\r\n  .survey-ratings .rating-badge.rating-3,\r\n  .rating-badge.rating-3 {\r\n    background-color: #fffde7 !important;\r\n    border: 1px solid #ffc107 !important;\r\n    color: #f57f17 !important;\r\n  }\r\n\r\n  .survey-ratings .rating-badge.rating-4,\r\n  .rating-badge.rating-4 {\r\n    background-color: #f1f8e9 !important;\r\n    border: 1px solid #8bc34a !important;\r\n    color: #558b2f !important;\r\n  }\r\n\r\n  .survey-ratings .rating-badge.rating-5,\r\n  .rating-badge.rating-5 {\r\n    background-color: #e8f5e9 !important;\r\n    border: 1px solid #4caf50 !important;\r\n    color: #2e7d32 !important;\r\n  }\r\n\r\n  .class-details {\r\n    margin-top: 0.5em;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.25em;\r\n  }\r\n\r\n  .class-details p {\r\n    margin: 0.5em 0;\r\n    font-style: italic;\r\n    color: #555;\r\n  }\r\n\r\n  .more-classes {\r\n    text-align: center;\r\n    margin-top: 0.5em;\r\n    padding-top: 0.5em;\r\n    border-top: 1px solid #eee;\r\n  }\r\n\r\n  .more-classes .expand-button {\r\n    background-color: #f5f5f5;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n    padding: 8px 16px;\r\n    cursor: pointer;\r\n    font-size: 0.9em;\r\n    color: #333;\r\n    transition: all 0.2s ease;\r\n  }\r\n\r\n  .more-classes .expand-button:hover {\r\n    background-color: #e8e8e8;\r\n    border-color: #bbb;\r\n  }\r\n\r\n  .more-classes .expand-button:active {\r\n    background-color: #ddd;\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n  @media (max-width: 600px) {\r\n    .teacher-performance-rating {\r\n      padding: 1em;\r\n    }\r\n    \r\n    .action-buttons {\r\n      flex-direction: column;\r\n    }\r\n    \r\n    .btn-submit,\r\n    .btn-clear {\r\n      width: 100%;\r\n    }\r\n\r\n    .month-comparison {\r\n      grid-template-columns: 1fr;\r\n      gap: 10px;\r\n    }\r\n\r\n    .student-list {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .metrics-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .comment-item {\r\n      padding: 8px 0;\r\n    }\r\n\r\n    .comment-item strong,\r\n    .comment-item span {\r\n      display: block;\r\n      margin-bottom: 4px;\r\n    }\r\n\r\n    .weekly-trends {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .week-stats {\r\n      flex-direction: column;\r\n      gap: 2px;\r\n    }\r\n\r\n    .week-stats .late-incidents {\r\n      font-size: 0.7em;\r\n    }\r\n\r\n    .incident-item strong,\r\n    .incident-item small,\r\n    .incident-item span {\r\n      font-size: 0.85em;\r\n    }\r\n\r\n    .attendance-header {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 4px;\r\n    }\r\n\r\n    .attendance-stats {\r\n      gap: 1px;\r\n    }\r\n\r\n    .attendance-stats small {\r\n      font-size: 0.75em;\r\n    }\r\n\r\n    .rating-info {\r\n      flex-direction: column;\r\n      gap: 4px;\r\n    }\r\n\r\n    .rating-info small {\r\n      font-size: 0.7em;\r\n    }\r\n\r\n    .special-conditions-container {\r\n      flex-direction: column;\r\n      gap: 2px;\r\n    }\r\n\r\n    .special-condition,\r\n    .total-surcharge {\r\n      font-size: 0.7em;\r\n      padding: 1px 4px;\r\n    }\r\n  }\r\n\r\n\r\n    .payment-breakdown-container {\r\n      grid-template-columns: 1fr;\r\n      gap: 15px;\r\n    }\r\n\r\n    .payment-section {\r\n      padding: 12px;\r\n    }\r\n\r\n    .payment-section h5 {\r\n      font-size: 0.95em;\r\n    }\r\n\r\n    .class-count-list li {\r\n      font-size: 0.85em;\r\n      padding: 5px 0;\r\n    }\r\n\r\n    .total-classes {\r\n      padding: 5px 6px;\r\n      font-size: 0.85em;\r\n    }\r\n\r\n    .payment-total-only {\r\n      padding: 10px;\r\n      margin-top: 15px;\r\n    }\r\n\r\n    .payment-total-only p {\r\n      font-size: 1em;\r\n    }\r\n\r\n  /* Payment analysis specific styles */\r\n  .paid-class {\r\n    background-color: #fab45a;\r\n    color: black;\r\n  }\r\n\r\n  .free-class {\r\n    background-color: #e8f5e8;\r\n    color: #2e7d32;\r\n    border: 1px solid #2e7d32;\r\n  }\r\n\r\n  /* Special conditions styling */\r\n  .special-conditions-container {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 4px;\r\n    margin-top: 4px;\r\n  }\r\n\r\n  .special-condition {\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n    display: inline-block;\r\n  }\r\n\r\n  .ib-condition {\r\n    background-color: #e3f2fd;\r\n    color: #1976d2;\r\n    border: 1px solid #1976d2;\r\n  }\r\n\r\n  .special-needs-condition {\r\n    background-color: #fff3e0;\r\n    color: #f57c00;\r\n    border: 1px solid #f57c00;\r\n  }\r\n\r\n  .lithuanian-condition {\r\n    background-color: #e8f5e8;\r\n    color: #2e7d32;\r\n    border: 1px solid #2e7d32;\r\n  }\r\n\r\n  .total-surcharge {\r\n    background-color: #fab45a;\r\n    color: black;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    font-weight: bold;\r\n    display: inline-block;\r\n    border: 2px solid #e09a43;\r\n  }\r\n\r\n  /* Legacy IB class styling for backwards compatibility */\r\n  .ib-class {\r\n    background-color: #e3f2fd;\r\n    color: #1976d2;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n    margin-top: 2px;\r\n    display: inline-block;\r\n  }\r\n\r\n  .free-reason {\r\n    background-color: #ffebee;\r\n    color: #d32f2f;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n    margin-top: 2px;\r\n    display: inline-block;\r\n  }\r\n\r\n  .first-time {\r\n    background-color: #fff3e0;\r\n    color: #f57c00;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    margin-top: 2px;\r\n    display: inline-block;\r\n  }\r\n\r\n  .retained {\r\n    background-color: #e8f5e8;\r\n    color: #2e7d32;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    margin-top: 2px;\r\n    display: inline-block;\r\n  }\r\n\r\n  /* Upcoming classes styling */\r\n  .upcoming-class {\r\n    opacity: 0.7;\r\n    background-color: #f8f9fa;\r\n    border-left: 4px solid #6c757d;\r\n  }\r\n\r\n  .upcoming-class:hover {\r\n    opacity: 0.9;\r\n  }\r\n\r\n  /* Class status and payment layout */\r\n  .class-status-payment {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n  }\r\n\r\n  .class-status {\r\n    padding: 2px 8px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n    text-transform: uppercase;\r\n  }\r\n\r\n  .class-status.completed {\r\n    background-color: #d4edda;\r\n    color: #155724;\r\n  }\r\n\r\n  .class-status.upcoming {\r\n    background-color: #fff3cd;\r\n    color: #856404;\r\n  }\r\n\r\n  /* Teacher Attendance Status Styles */\r\n  .attendance-status {\r\n    padding: 3px 8px;\r\n    border-radius: 12px;\r\n    font-size: 0.8em;\r\n    font-weight: 600;\r\n    text-transform: uppercase;\r\n  }\r\n\r\n  .attendance-status.attended,\r\n  .attendance-status.on_time {\r\n    background-color: #d4edda;\r\n    color: #155724;\r\n  }\r\n\r\n  .attendance-status.late {\r\n    background-color: #fff3cd;\r\n    color: #856404;\r\n  }\r\n\r\n  .attendance-status.no_show {\r\n    background-color: #f8d7da;\r\n    color: #721c24;\r\n  }\r\n\r\n  /* Student rating summary styles */\r\n  .student-rating-summary {\r\n    background-color: #f8f9fa;\r\n    padding: 20px;\r\n    border-radius: 8px;\r\n    margin-top: 15px;\r\n  }\r\n\r\n  .rating-display {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 20px;\r\n    margin-bottom: 15px;\r\n  }\r\n\r\n  .rating-value {\r\n    font-size: 2.5em;\r\n    color: #fab45a;\r\n    font-weight: bold;\r\n    min-width: 120px;\r\n  }\r\n\r\n  .rating-details {\r\n    flex: 1;\r\n  }\r\n\r\n  .rating-details p {\r\n    margin: 5px 0;\r\n    color: #666;\r\n  }\r\n\r\n  .rating-details p:first-child {\r\n    font-weight: bold;\r\n    color: #333;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .rating-bar-container {\r\n    width: 100%;\r\n  }\r\n\r\n  @media (max-width: 600px) {\r\n    .rating-display {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 10px;\r\n    }\r\n\r\n    .rating-value {\r\n      font-size: 2em;\r\n      min-width: auto;\r\n    }\r\n\r\n    .student-rating-summary {\r\n      padding: 15px;\r\n    }\r\n  }\r\n\r\n  .bonus-eligibility-banner {\r\n    margin-top: 20px;\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 8px;\r\n    border: 1px solid #e0e0e0;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    color: black;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n  }\r\n\r\n  .bonus-eligibility-banner.not-eligible {\r\n    border-left: 4px solid #d32f2f;\r\n    background-color: #fff3e0;\r\n  }\r\n\r\n  .bonus-icon {\r\n    font-size: 2em;\r\n    color: #fab45a;\r\n  }\r\n\r\n  .bonus-message h4 {\r\n    margin: 0 0 5px 0;\r\n    color: #333;\r\n  }\r\n\r\n  .bonus-message p {\r\n    margin: 5px 0;\r\n    color: #666;\r\n  }\r\n\r\n  .bonus-message small {\r\n    color: #888;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .criteria-breakdown {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 15px;\r\n  }\r\n\r\n  .criterion-item {\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 8px;\r\n    border: 1px solid #e0e0e0;\r\n  }\r\n\r\n  .criterion-name {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .criterion-status {\r\n    font-size: 1.2em;\r\n    font-weight: bold;\r\n  }\r\n\r\n  .criterion-status.met {\r\n    color: #4caf50;\r\n  }\r\n\r\n  .criterion-status.not-met {\r\n    color: #d32f2f;\r\n  }\r\n\r\n  .criterion-details p {\r\n    margin: 5px 0;\r\n    color: #666;\r\n  }\r\n\r\n    .criterion-value {\r\n    font-weight: bold;\r\n    color: #333;\r\n  }\r\n\r\n  @media (max-width: 768px) {\r\n    .bonus-eligibility-banner {\r\n      flex-direction: column;\r\n      text-align: center;\r\n      gap: 15px;\r\n    }\r\n\r\n    .bonus-icon {\r\n      font-size: 1.5em;\r\n    }\r\n  }\r\n\r\n  /* Tab Navigation Styles */\r\n  .tab-navigation {\r\n    display: flex;\r\n    gap: 10px;\r\n    margin-bottom: 2em;\r\n    border-bottom: 2px solid #ddd;\r\n  }\r\n\r\n  .tab-button {\r\n    padding: 12px 24px;\r\n    border: none;\r\n    background: none;\r\n    cursor: pointer;\r\n    font-size: 1em;\r\n    font-weight: 500;\r\n    color: #666;\r\n    border-bottom: 3px solid transparent;\r\n    transition: all 0.2s;\r\n  }\r\n\r\n  .tab-button:hover {\r\n    color: #fab45a;\r\n  }\r\n\r\n  .tab-button.active {\r\n    color: #fab45a;\r\n    border-bottom-color: #fab45a;\r\n  }\r\n\r\n  /* Dashboard Tab Styles */\r\n  .dashboard-tab {\r\n    padding: 1em 0;\r\n  }\r\n\r\n  .dashboard-controls {\r\n    margin-bottom: 2em;\r\n  }\r\n\r\n  .dashboard-month-selector {\r\n    display: flex;\r\n    gap: 15px;\r\n    align-items: center;\r\n    margin-top: 0.5em;\r\n  }\r\n\r\n  .btn-load-dashboard {\r\n    padding: 0.75em 1.5em;\r\n    background: #fab45a;\r\n    color: black;\r\n    border: none;\r\n    border-radius: 6px;\r\n    font-size: 1em;\r\n    cursor: pointer;\r\n    font-weight: 500;\r\n    transition: all 0.2s;\r\n  }\r\n\r\n  .btn-load-dashboard:hover:not(:disabled) {\r\n    background: #e09a43;\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .btn-load-dashboard:disabled {\r\n    opacity: 0.6;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  .btn-recalculate-dashboard {\r\n    padding: 0.75em 1.5em;\r\n    background: #28a745;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 6px;\r\n    font-size: 1em;\r\n    cursor: pointer;\r\n    font-weight: 500;\r\n    transition: all 0.2s;\r\n  }\r\n\r\n  .btn-recalculate-dashboard:hover:not(:disabled) {\r\n    background: #218838;\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .btn-recalculate-dashboard:disabled {\r\n    opacity: 0.6;\r\n    cursor: not-allowed;\r\n    transform: none;\r\n  }\r\n\r\n  .dashboard-summary {\r\n    background: #f8f9fa;\r\n    padding: 1.5em;\r\n    border-radius: 8px;\r\n    margin-bottom: 2em;\r\n  }\r\n\r\n  .dashboard-summary h3 {\r\n    margin: 0 0 1em 0;\r\n    color: #333;\r\n  }\r\n\r\n  .summary-stats {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: 1em;\r\n  }\r\n\r\n  .stat-item {\r\n    background: white;\r\n    padding: 1em;\r\n    border-radius: 6px;\r\n    border-left: 3px solid #fab45a;\r\n  }\r\n\r\n  .stat-item strong {\r\n    display: block;\r\n    margin-bottom: 0.5em;\r\n    color: #666;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  /* Table Styles */\r\n  .snapshots-table-container {\r\n    overflow-x: visible;\r\n    background: white;\r\n    border-radius: 8px;\r\n    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n    width: 100%;\r\n  }\r\n\r\n  .snapshots-table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n    font-size: 1em;\r\n    table-layout: auto;\r\n  }\r\n\r\n  .snapshots-table thead {\r\n    background: #fab45a;\r\n    color: black;\r\n  }\r\n\r\n  .snapshots-table th {\r\n    padding: 12px 12px;\r\n    text-align: left;\r\n    font-weight: 600;\r\n    border-bottom: 2px solid #e09a43;\r\n  }\r\n\r\n  .snapshots-table td {\r\n    padding: 10px 12px;\r\n    border-bottom: 1px solid #e9ecef;\r\n  }\r\n\r\n  .snapshots-table tbody tr:hover {\r\n    background: #f8f9fa;\r\n  }\r\n\r\n  .snapshots-table tbody tr.finalized {\r\n    background: #e8f5e8;\r\n  }\r\n\r\n  .snapshots-table tbody tr.finalized:hover {\r\n    background: #d4edda;\r\n  }\r\n\r\n  .teacher-name {\r\n    font-weight: 500;\r\n    color: #333;\r\n  }\r\n\r\n  .currency {\r\n    text-align: right;\r\n    font-family: 'Courier New', monospace;\r\n  }\r\n\r\n  .number {\r\n    text-align: center;\r\n  }\r\n\r\n  .total-cell {\r\n    background: #fff3e0;\r\n    font-weight: bold;\r\n  }\r\n\r\n  .bonus-cell {\r\n    text-align: center;\r\n  }\r\n\r\n  .bonus-yes {\r\n    color: #2e7d32;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .bonus-no {\r\n    color: #999;\r\n  }\r\n\r\n  .status-cell {\r\n    text-align: center;\r\n  }\r\n\r\n  .status-finalized {\r\n    background: #d4edda;\r\n    color: #155724;\r\n    padding: 4px 8px;\r\n    border-radius: 4px;\r\n    font-size: 0.8em;\r\n    font-weight: 600;\r\n  }\r\n\r\n  .status-draft {\r\n    background: #fff3cd;\r\n    color: #856404;\r\n    padding: 4px 8px;\r\n    border-radius: 4px;\r\n    font-size: 0.8em;\r\n    font-weight: 600;\r\n  }\r\n\r\n  .snapshots-table tfoot {\r\n    background: #f8f9fa;\r\n    font-weight: bold;\r\n  }\r\n\r\n  .totals-row td {\r\n    padding: 15px 8px;\r\n    border-top: 2px solid #fab45a;\r\n  }\r\n\r\n</style>\r\n","<script>\r\n  import { onMount } from 'svelte';\r\n\r\n  // State management\r\n  let loading = false;\r\n  let loadingTeachers = false;\r\n  let loadingClasses = false;\r\n  let error = null;\r\n  let success = null;\r\n  let teachers = [];\r\n  let teacherClasses = [];\r\n  let selectedTeacher = null;\r\n  let selectedMonth = '';\r\n  let selectedClassIds = [];\r\n  let currentInvoicePdf = null;\r\n  let invoiceData = null;\r\n  let customSum = '';\r\n  let isRegenerating = false;\r\n  let isSaving = false;\r\n  let teacherQuery = '';\r\n  let filteredTeachers = [];\r\n  let showTeacherDropdown = false;\r\n\r\n  // Fetch all teachers for admin selection\r\n  async function fetchAllTeachers() {\r\n    loadingTeachers = true;\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      error = 'JWT token not found. Please log in.';\r\n      loadingTeachers = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const response = await fetch('/studentplayground/api/teachers-list/?include_inactive=1', {\r\n        method: 'GET',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        teachers = data.teachers || [];\r\n        filteredTeachers = teachers;\r\n      } else {\r\n        const errorData = await response.json();\r\n        error = errorData.message || 'Failed to load teachers.';\r\n      }\r\n    } catch (err) {\r\n      error = `Network error: ${err.message}`;\r\n    } finally {\r\n      loadingTeachers = false;\r\n    }\r\n  }\r\n\r\n  // Fetch classes for selected teacher and month\r\n  async function fetchTeacherClassesForMonth() {\r\n    if (!selectedTeacher || !selectedMonth) {\r\n      return;\r\n    }\r\n\r\n    loadingClasses = true;\r\n    error = null;\r\n    teacherClasses = [];\r\n    selectedClassIds = [];\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      error = 'JWT token not found. Please log in.';\r\n      loadingClasses = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const response = await fetch('/studentplayground/api/teacher-classes-by-month/', {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n          teacher_id: selectedTeacher.id,\r\n          month: selectedMonth\r\n        })\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        teacherClasses = data.classes || [];\r\n      } else {\r\n        const errorData = await response.json();\r\n        error = errorData.message || 'Failed to load classes for selected month.';\r\n      }\r\n    } catch (err) {\r\n      error = `Network error: ${err.message}`;\r\n    } finally {\r\n      loadingClasses = false;\r\n    }\r\n  }\r\n\r\n  // Generate invoice for selected teacher and classes\r\n  async function generateInvoice() {\r\n    if (!selectedTeacher) {\r\n      error = 'Please select a teacher first.';\r\n      return;\r\n    }\r\n    \r\n    if (!selectedMonth) {\r\n      error = 'Please select a month first.';\r\n      return;\r\n    }\r\n\r\n    if (selectedClassIds.length === 0) {\r\n      error = 'Please select at least one class to generate an invoice.';\r\n      return;\r\n    }\r\n\r\n    loading = true;\r\n    error = null;\r\n    success = null;\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      error = 'JWT token not found. Please log in.';\r\n      loading = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const response = await fetch('/studentplayground/api/teacher-invoice/', {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n          teacher_id: selectedTeacher.id,\r\n          class_ids: selectedClassIds\r\n        })\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        currentInvoicePdf = data.pdf_base64;\r\n        invoiceData = data;\r\n        success = `Invoice generated successfully for ${selectedTeacher.name}! Total: €${data.sum} for ${data.class_count} classes in ${selectedMonth}.`;\r\n        \r\n        // Clear selections\r\n        selectedClassIds = [];\r\n        updateSelectAllCheckbox();\r\n      } else {\r\n        const errorData = await response.json();\r\n        error = errorData.message || 'Failed to generate invoice.';\r\n      }\r\n    } catch (err) {\r\n      error = `Network error: ${err.message}`;\r\n    } finally {\r\n      loading = false;\r\n    }\r\n  }\r\n\r\n  // Download PDF\r\n  function downloadPdf() {\r\n    if (currentInvoicePdf && invoiceData) {\r\n      const link = document.createElement('a');\r\n      link.href = `data:application/pdf;base64,${currentInvoicePdf}`;\r\n      link.download = `${invoiceData.teacher_name.replace(' ', '_')}_invoice.pdf`;\r\n      link.click();\r\n    }\r\n  }\r\n\r\n  // Regenerate invoice with custom sum\r\n  async function regenerateInvoice() {\r\n    if (!customSum || isNaN(customSum) || parseFloat(customSum) <= 0) {\r\n      error = 'Please enter a valid positive number for the custom sum.';\r\n      return;\r\n    }\r\n\r\n    isRegenerating = true;\r\n    error = null;\r\n    success = null;\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      error = 'JWT token not found. Please log in.';\r\n      isRegenerating = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const response = await fetch('/studentplayground/api/teacher-invoice/', {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n          teacher_id: selectedTeacher.id,\r\n          class_ids: selectedClassIds.length > 0 ? selectedClassIds : teacherClasses.map(c => c.id),\r\n          custom_sum: parseFloat(customSum)\r\n        })\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        currentInvoicePdf = data.pdf_base64;\r\n        invoiceData = { ...data, sum: parseFloat(customSum) }; // Update the displayed sum\r\n        success = `Invoice regenerated successfully with custom amount €${customSum}!`;\r\n      } else {\r\n        const errorData = await response.json();\r\n        error = errorData.message || 'Failed to regenerate invoice.';\r\n      }\r\n    } catch (err) {\r\n      error = `Network error: ${err.message}`;\r\n    } finally {\r\n      isRegenerating = false;\r\n    }\r\n  }\r\n\r\n  // Save invoice for teacher\r\n  async function saveInvoice() {\r\n    if (!currentInvoicePdf || !selectedTeacher || !selectedMonth) {\r\n      error = 'Cannot save invoice: missing data.';\r\n      return;\r\n    }\r\n\r\n    isSaving = true;\r\n    error = null;\r\n    success = null;\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      error = 'JWT token not found. Please log in.';\r\n      isSaving = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const response = await fetch('/studentplayground/api/save-teacher-invoice/', {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n          teacher_id: selectedTeacher.id,\r\n          month: selectedMonth,\r\n          pdf_base64: currentInvoicePdf,\r\n          class_ids: selectedClassIds.length > 0 ? selectedClassIds : teacherClasses.map(c => c.id),\r\n          total_sum: invoiceData ? invoiceData.sum : 0\r\n        })\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        success = `Invoice saved successfully for ${data.teacher_name} (${data.month})!`;\r\n      } else {\r\n        const errorData = await response.json();\r\n        error = errorData.message || 'Failed to save invoice.';\r\n      }\r\n    } catch (err) {\r\n      error = `Network error: ${err.message}`;\r\n    } finally {\r\n      isSaving = false;\r\n    }\r\n  }\r\n\r\n  // Handle class selection\r\n  function handleClassSelection(classId, checked) {\r\n    if (checked) {\r\n      selectedClassIds = [...selectedClassIds, classId];\r\n    } else {\r\n      selectedClassIds = selectedClassIds.filter(id => id !== classId);\r\n    }\r\n    updateSelectAllCheckbox();\r\n  }\r\n\r\n  // Handle select all\r\n  function handleSelectAll(checked) {\r\n    if (checked) {\r\n      selectedClassIds = teacherClasses.map(c => c.id);\r\n    } else {\r\n      selectedClassIds = [];\r\n    }\r\n  }\r\n\r\n  // Update select all checkbox state\r\n  function updateSelectAllCheckbox() {\r\n    const selectAllCheckbox = document.getElementById('selectAllClasses');\r\n    if (selectAllCheckbox) {\r\n      selectAllCheckbox.checked = selectedClassIds.length === teacherClasses.length && teacherClasses.length > 0;\r\n      selectAllCheckbox.indeterminate = selectedClassIds.length > 0 && selectedClassIds.length < teacherClasses.length;\r\n    }\r\n  }\r\n\r\n  // Filter teachers based on search query\r\n  function filterTeachers() {\r\n    if (!teacherQuery.trim()) {\r\n      filteredTeachers = teachers;\r\n      showTeacherDropdown = false;\r\n    } else {\r\n      const query = teacherQuery.toLowerCase();\r\n      filteredTeachers = teachers.filter(teacher => \r\n        teacher.name.toLowerCase().includes(query) ||\r\n        teacher.email.toLowerCase().includes(query)\r\n      );\r\n      // Only show dropdown if no teacher is selected and there are filtered results\r\n      showTeacherDropdown = !selectedTeacher && filteredTeachers.length > 0;\r\n    }\r\n  }\r\n\r\n  // Handle teacher selection\r\n  function selectTeacher(teacher) {\r\n    selectedTeacher = teacher;\r\n    teacherQuery = teacher.name;\r\n    showTeacherDropdown = false; // Explicitly close dropdown\r\n    teacherClasses = [];\r\n    selectedClassIds = [];\r\n    currentInvoicePdf = null;\r\n    invoiceData = null;\r\n    success = null;\r\n    error = null;\r\n    customSum = '';\r\n    \r\n    // Force update to ensure dropdown closes\r\n    filteredTeachers = teachers;\r\n    \r\n    // Fetch classes if month is also selected\r\n    if (selectedMonth) {\r\n      fetchTeacherClassesForMonth();\r\n    }\r\n  }\r\n\r\n  // Handle month change\r\n  function handleMonthChange() {\r\n    teacherClasses = [];\r\n    selectedClassIds = [];\r\n    currentInvoicePdf = null;\r\n    invoiceData = null;\r\n    success = null;\r\n    customSum = '';\r\n    \r\n    // Fetch classes if teacher is also selected\r\n    if (selectedTeacher && selectedMonth) {\r\n      fetchTeacherClassesForMonth();\r\n    }\r\n  }\r\n\r\n  // Month dropdown options (inclusive range): Sep 2025 -> Dec 2026\r\n  // Keep values in \"YYYY-MM\" so the backend API continues to work unchanged.\r\n  function getMonthOptions() {\r\n    const start = { year: 2025, monthIndex: 8 };  // September (0-based)\r\n    const end = { year: 2026, monthIndex: 11 };   // December (0-based)\r\n\r\n    const formatter = new Intl.DateTimeFormat('en-US', { month: 'long', year: 'numeric' });\r\n    const months = [];\r\n\r\n    let year = start.year;\r\n    let monthIndex = start.monthIndex;\r\n\r\n    while (year < end.year || (year === end.year && monthIndex <= end.monthIndex)) {\r\n      const monthNumber = monthIndex + 1; // 1-12\r\n      const value = `${year}-${String(monthNumber).padStart(2, '0')}`;\r\n      const label = formatter.format(new Date(year, monthIndex, 1));\r\n      months.push({ value, label });\r\n\r\n      monthIndex += 1;\r\n      if (monthIndex > 11) {\r\n        monthIndex = 0;\r\n        year += 1;\r\n      }\r\n    }\r\n\r\n    return months;\r\n  }\r\n\r\n  // Reactive statement to filter teachers when search query changes\r\n  $: if (teacherQuery !== undefined) {\r\n    filterTeachers();\r\n  }\r\n\r\n  // Initialize\r\n  onMount(() => {\r\n    fetchAllTeachers();\r\n  });\r\n</script>\r\n\r\n<div class=\"teacher-invoice-container\">\r\n  <h3>Generate Teacher Invoice</h3>\r\n  <p class=\"description\">Search for a teacher, select a month, and generate their invoice.</p>\r\n\r\n  {#if error}\r\n    <div class=\"error-message\">{error}</div>\r\n  {/if}\r\n\r\n  {#if success}\r\n    <div class=\"success-message\">{success}</div>\r\n  {/if}\r\n\r\n  <!-- Step 1: Teacher Selection -->\r\n  <div class=\"selection-section\">\r\n    <h4>Step 1: Select Teacher</h4>\r\n    \r\n    {#if loadingTeachers}\r\n      <div class=\"loading-message\">Loading teachers...</div>\r\n    {:else}\r\n      <div class=\"input-container\">\r\n        <input \r\n          type=\"text\" \r\n          placeholder=\"Search teacher by name...\"\r\n          bind:value={teacherQuery}\r\n          on:input={() => {\r\n            if (selectedTeacher && teacherQuery !== selectedTeacher.name) {\r\n              selectedTeacher = null;\r\n              showTeacherDropdown = true;\r\n            } else if (!selectedTeacher) {\r\n              showTeacherDropdown = teacherQuery.trim().length > 0;\r\n            }\r\n          }}\r\n          autocomplete=\"off\"\r\n          class=\"search-input\"\r\n        />\r\n        \r\n        {#if showTeacherDropdown}\r\n          <ul class=\"autocomplete-list\">\r\n            {#each filteredTeachers.slice(0, 8) as teacher}\r\n              <li>\r\n                <button\r\n                  type=\"button\"\r\n                  on:click={() => selectTeacher(teacher)}\r\n                  on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectTeacher(teacher)}\r\n                >\r\n                  <div class=\"teacher-option\">\r\n                    <span class=\"teacher-name\">{teacher.name}</span>\r\n                    {#if teacher.email}\r\n                      <span class=\"teacher-email\">{teacher.email}</span>\r\n                    {/if}\r\n                  </div>\r\n                </button>\r\n              </li>\r\n            {/each}\r\n          </ul>\r\n        {/if}\r\n      </div>\r\n      \r\n      {#if selectedTeacher}\r\n        <div class=\"selected-teacher\">\r\n          <div class=\"selected-teacher-info\">\r\n            <h5>Selected Teacher</h5>\r\n            <p><strong>Name:</strong> {selectedTeacher.name}</p>\r\n            {#if selectedTeacher.email}\r\n              <p><strong>Email:</strong> {selectedTeacher.email}</p>\r\n            {/if}\r\n            <p><strong>Classes:</strong> {selectedTeacher.class_count}</p>\r\n            <p><strong>Bank Account:</strong> {selectedTeacher.bank_nr}</p>\r\n          </div>\r\n          \r\n          <button \r\n            type=\"button\" \r\n            class=\"btn-clear-small\" \r\n            on:click={() => { selectedTeacher = null; teacherQuery = ''; showTeacherDropdown = false; }}\r\n          >\r\n            Clear Selection\r\n          </button>\r\n        </div>\r\n      {/if}\r\n    {/if}\r\n  </div>\r\n\r\n  <!-- Step 2: Month Selection -->\r\n  <div class=\"selection-section\">\r\n    <h4>Step 2: Select Month</h4>\r\n    <select bind:value={selectedMonth} on:change={handleMonthChange} class=\"month-select\">\r\n      <option value=\"\">Choose a month...</option>\r\n      {#each getMonthOptions() as month}\r\n        <option value={month.value}>{month.label}</option>\r\n      {/each}\r\n    </select>\r\n  </div>\r\n\r\n  <!-- Selected Teacher and Month Info -->\r\n  {#if selectedTeacher && selectedMonth}\r\n    <div class=\"selected-info-section\">\r\n      <h4>Selected Information</h4>\r\n      <div class=\"info-grid\">\r\n        <div><strong>Teacher:</strong> {selectedTeacher.name}</div>\r\n        <div><strong>Email:</strong> {selectedTeacher.email}</div>\r\n        <div><strong>Month:</strong> {getMonthOptions().find(m => m.value === selectedMonth)?.label}</div>\r\n        <div><strong>Bank Account:</strong> {selectedTeacher.bank_nr}</div>\r\n      </div>\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Step 3: Class Selection (only show when teacher and month are selected) -->\r\n  {#if selectedTeacher && selectedMonth}\r\n    <div class=\"classes-section\">\r\n      <h4>Step 3: Select Classes for Invoice</h4>\r\n      \r\n      {#if loadingClasses}\r\n        <div class=\"loading-message\">Loading classes for {selectedTeacher.name} in {getMonthOptions().find(m => m.value === selectedMonth)?.label}...</div>\r\n      {:else if teacherClasses.length > 0}\r\n        <div class=\"classes-found\">\r\n          <p><strong>{teacherClasses.length} classes found</strong> for {selectedTeacher.name} in {getMonthOptions().find(m => m.value === selectedMonth)?.label}</p>\r\n          {#if teacherClasses[0]?.teacher_price !== undefined}\r\n            <p><small>Total month value: €{teacherClasses.reduce((sum, c) => sum + (c.teacher_price || 0), 0)}</small></p>\r\n          {/if}\r\n        </div>\r\n        \r\n        <div class=\"select-all-container\">\r\n          <label class=\"select-all-label\">\r\n            <input \r\n              type=\"checkbox\" \r\n              id=\"selectAllClasses\"\r\n              on:change={(e) => handleSelectAll(e.target.checked)}\r\n            />\r\n            Select All Classes\r\n          </label>\r\n        </div>\r\n\r\n        <div class=\"classes-list\">\r\n          {#each teacherClasses as classItem (classItem.id)}\r\n            <div class=\"class-item\">\r\n              <label class=\"class-label\">\r\n                <input \r\n                  type=\"checkbox\" \r\n                  checked={selectedClassIds.includes(classItem.id)}\r\n                  on:change={(e) => handleClassSelection(classItem.id, e.target.checked)}\r\n                />\r\n                <div class=\"class-info\">\r\n                  <div class=\"class-name\">{classItem.name}</div>\r\n                  <div class=\"class-details\">\r\n                    <small>{classItem.display_time}</small>\r\n                    <small>{classItem.student_count} students</small>\r\n                    {#if classItem.teacher_price !== undefined}\r\n                      <small class=\"price-info\">€{classItem.teacher_price}</small>\r\n                    {/if}\r\n                  </div>\r\n                </div>\r\n              </label>\r\n            </div>\r\n          {/each}\r\n        </div>\r\n\r\n        <div class=\"actions-section\">\r\n          <div class=\"selection-summary\">\r\n            <strong>{selectedClassIds.length} classes selected</strong>\r\n          </div>\r\n          \r\n          <div class=\"action-buttons\">\r\n            <button \r\n              class=\"btn btn-primary\" \r\n              on:click={generateInvoice}\r\n              disabled={loading || selectedClassIds.length === 0}\r\n            >\r\n              {#if loading}\r\n                Generating Invoice...\r\n              {:else}\r\n                Generate Invoice ({selectedClassIds.length} classes)\r\n              {/if}\r\n            </button>\r\n\r\n            {#if selectedClassIds.length > 0}\r\n              <button \r\n                class=\"btn btn-secondary\" \r\n                on:click={() => { selectedClassIds = []; updateSelectAllCheckbox(); }}\r\n              >\r\n                Clear Selection\r\n              </button>\r\n            {/if}\r\n          </div>\r\n        </div>\r\n      {:else}\r\n        <div class=\"no-classes\">\r\n          <p>No classes found for {selectedTeacher.name} in {getMonthOptions().find(m => m.value === selectedMonth)?.label}.</p>\r\n          <small>Try selecting a different month or verify that this teacher has classes scheduled.</small>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {:else if selectedTeacher && !selectedMonth}\r\n    <div class=\"instruction-message\">\r\n      <p>👆 Please select a month to view classes for {selectedTeacher.name}</p>\r\n    </div>\r\n  {:else if !selectedTeacher && selectedMonth}\r\n    <div class=\"instruction-message\">\r\n      <p>👆 Please select a teacher to view classes for {getMonthOptions().find(m => m.value === selectedMonth)?.label}</p>\r\n    </div>\r\n  {/if}\r\n\r\n  {#if currentInvoicePdf && invoiceData}\r\n    <div class=\"invoice-preview-section\">\r\n      <h4>Invoice Preview</h4>\r\n      \r\n      <div class=\"invoice-summary\">\r\n        <div class=\"summary-grid\">\r\n          <div class=\"summary-item\">\r\n            <strong>Teacher:</strong> {invoiceData.teacher_name}\r\n          </div>\r\n          <div class=\"summary-item\">\r\n            <strong>Classes:</strong> {invoiceData.class_count}\r\n          </div>\r\n          <div class=\"summary-item\">\r\n            <strong>Total Amount:</strong> €{invoiceData.sum}\r\n          </div>\r\n          <div class=\"summary-item\">\r\n            <strong>Email:</strong> {invoiceData.teacher_email}\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Custom Sum Section -->\r\n      <div class=\"custom-sum-section\">\r\n        <h5>Adjust Invoice Amount</h5>\r\n        <div class=\"custom-sum-input-group\">\r\n          <input \r\n            type=\"number\" \r\n            bind:value={customSum} \r\n            placeholder=\"Enter custom amount (€)\" \r\n            min=\"0\" \r\n            step=\"0.01\"\r\n            class=\"custom-sum-input\"\r\n          />\r\n          <button \r\n            class=\"btn btn-primary\" \r\n            on:click={regenerateInvoice} \r\n            disabled={isRegenerating || !customSum}\r\n          >\r\n            {isRegenerating ? 'Regenerating...' : 'Regenerate Invoice'}\r\n          </button>\r\n        </div>\r\n        <p class=\"custom-sum-note\">\r\n          Enter a custom amount to override the calculated total and regenerate the invoice.\r\n        </p>\r\n      </div>\r\n\r\n      <div class=\"pdf-preview-container\">\r\n        <iframe \r\n          src=\"data:application/pdf;base64,{currentInvoicePdf}\"\r\n          class=\"pdf-preview\"\r\n          title=\"Invoice Preview\"\r\n        ></iframe>\r\n      </div>\r\n\r\n      <div class=\"download-actions\">\r\n        <button class=\"btn btn-success\" on:click={downloadPdf}>\r\n          📄 Download PDF Invoice\r\n        </button>\r\n        \r\n        <button \r\n          class=\"btn btn-primary\" \r\n          on:click={saveInvoice} \r\n          disabled={isSaving}\r\n        >\r\n          {isSaving ? 'Saving...' : '💾 Save Invoice for Teacher'}\r\n        </button>\r\n        \r\n        <button \r\n          class=\"btn btn-secondary\" \r\n          on:click={() => { currentInvoicePdf = null; invoiceData = null; success = null; customSum = ''; }}\r\n        >\r\n          Create New Invoice\r\n        </button>\r\n      </div>\r\n    </div>\r\n  {/if}\r\n</div>\r\n\r\n<style>\r\n  .teacher-invoice-container {\r\n    margin-top: 2em;\r\n    padding: 15px;\r\n    background-color: white;\r\n    border-radius: 8px;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    color: black;\r\n  }\r\n\r\n  .teacher-invoice-container h3 {\r\n    margin: 0 0 15px 0;\r\n    color: #fab45a;\r\n    font-size: 1.2em;\r\n  }\r\n\r\n  .teacher-invoice-container h4 {\r\n    margin: 20px 0 10px 0;\r\n    color: #333;\r\n    font-size: 1.1em;\r\n    border-bottom: 1px solid #ddd;\r\n    padding-bottom: 5px;\r\n  }\r\n\r\n  .description {\r\n    color: #666;\r\n    margin-bottom: 20px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .error-message {\r\n    color: #d32f2f;\r\n    background: #ffebee;\r\n    padding: 12px;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #d32f2f;\r\n    margin-bottom: 20px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .success-message {\r\n    color: #2e7d32;\r\n    background: #e8f5e8;\r\n    padding: 12px;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #2e7d32;\r\n    margin-bottom: 20px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .selection-section {\r\n    background-color: #f8f9fa;\r\n    padding: 20px;\r\n    border-radius: 8px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .input-container {\r\n    position: relative;\r\n    margin-top: 15px;\r\n  }\r\n\r\n  .search-input {\r\n    width: 100%;\r\n    padding: 12px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    background-color: white;\r\n  }\r\n\r\n  .search-input:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 2px rgba(250, 180, 90, 0.2);\r\n  }\r\n\r\n  .autocomplete-list {\r\n    position: absolute;\r\n    top: 100%;\r\n    left: 0;\r\n    right: 0;\r\n    background: white;\r\n    border: 1px solid #ddd;\r\n    border-top: none;\r\n    border-radius: 0 0 6px 6px;\r\n    max-height: 200px;\r\n    overflow-y: auto;\r\n    z-index: 1000;\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n    box-shadow: 0 2px 8px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .autocomplete-list li {\r\n    border-bottom: 1px solid #f0f0f0;\r\n  }\r\n\r\n  .autocomplete-list li:last-child {\r\n    border-bottom: none;\r\n  }\r\n\r\n  .autocomplete-list button {\r\n    width: 100%;\r\n    padding: 12px;\r\n    border: none;\r\n    background: none;\r\n    text-align: left;\r\n    cursor: pointer;\r\n    transition: background-color 0.2s;\r\n  }\r\n\r\n  .autocomplete-list button:hover {\r\n    background-color: #f8f9fa;\r\n  }\r\n\r\n  .teacher-option {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n  }\r\n\r\n  .teacher-name {\r\n    font-weight: 500;\r\n    color: #333;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .teacher-email {\r\n    color: #666;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .selected-teacher {\r\n    margin-top: 20px;\r\n    padding: 15px;\r\n    background-color: #fff3e0;\r\n    border: 2px solid #fab45a;\r\n    border-radius: 8px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: flex-start;\r\n    gap: 15px;\r\n  }\r\n\r\n  .selected-teacher-info h5 {\r\n    margin: 0 0 10px 0;\r\n    color: #fab45a;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .selected-teacher-info p {\r\n    margin: 5px 0;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .selected-teacher-info p strong {\r\n    color: #333;\r\n  }\r\n\r\n  .btn-clear-small {\r\n    padding: 8px 16px;\r\n    background-color: #6c757d;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 4px;\r\n    cursor: pointer;\r\n    font-size: 0.85em;\r\n    white-space: nowrap;\r\n  }\r\n\r\n  .btn-clear-small:hover {\r\n    background-color: #545b62;\r\n  }\r\n\r\n  .month-select {\r\n    width: 100%;\r\n    padding: 12px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    background-color: white;\r\n    margin-top: 10px;\r\n  }\r\n\r\n  .month-select:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 2px rgba(250, 180, 90, 0.2);\r\n  }\r\n\r\n  .selected-info-section {\r\n    background-color: #fff3e0;\r\n    border: 2px solid #fab45a;\r\n    padding: 20px;\r\n    border-radius: 8px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .info-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: 10px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .info-grid div strong {\r\n    color: #fab45a;\r\n  }\r\n\r\n  .classes-found {\r\n    background-color: #e8f5e8;\r\n    padding: 12px;\r\n    border-radius: 6px;\r\n    margin-bottom: 15px;\r\n    text-align: center;\r\n  }\r\n\r\n  .classes-found p {\r\n    margin: 0;\r\n    color: #2e7d32;\r\n  }\r\n\r\n  .price-info {\r\n    background-color: #fab45a;\r\n    color: black;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .instruction-message {\r\n    text-align: center;\r\n    padding: 20px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 8px;\r\n    border: 2px dashed #ddd;\r\n    margin: 20px 0;\r\n  }\r\n\r\n  .instruction-message p {\r\n    margin: 0;\r\n    color: #666;\r\n    font-size: 1em;\r\n  }\r\n\r\n\r\n\r\n  .loading-message {\r\n    text-align: center;\r\n    padding: 20px;\r\n    color: #fab45a;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .classes-section {\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .select-all-container {\r\n    margin-bottom: 15px;\r\n    padding: 10px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .select-all-label {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    font-weight: 500;\r\n    cursor: pointer;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .classes-list {\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    padding: 10px;\r\n    background-color: #fafafa;\r\n  }\r\n\r\n  .class-item {\r\n    margin-bottom: 8px;\r\n    padding: 10px;\r\n    background-color: white;\r\n    border-radius: 4px;\r\n    border: 1px solid #e9ecef;\r\n    transition: background-color 0.2s;\r\n  }\r\n\r\n  .class-item:hover {\r\n    background-color: #f8f9fa;\r\n  }\r\n\r\n  .class-item:last-child {\r\n    margin-bottom: 0;\r\n  }\r\n\r\n  .class-label {\r\n    display: flex;\r\n    align-items: flex-start;\r\n    gap: 10px;\r\n    cursor: pointer;\r\n    width: 100%;\r\n  }\r\n\r\n  .class-info {\r\n    flex-grow: 1;\r\n  }\r\n\r\n  .class-name {\r\n    font-weight: 500;\r\n    color: #333;\r\n    font-size: 0.9em;\r\n    margin-bottom: 4px;\r\n  }\r\n\r\n  .class-details {\r\n    display: flex;\r\n    gap: 15px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .class-details small {\r\n    color: #666;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .actions-section {\r\n    margin-top: 20px;\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .selection-summary {\r\n    margin-bottom: 15px;\r\n    text-align: center;\r\n    color: #fab45a;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .action-buttons {\r\n    display: flex;\r\n    gap: 10px;\r\n    justify-content: center;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .btn {\r\n    padding: 10px 20px;\r\n    border: none;\r\n    border-radius: 5px;\r\n    cursor: pointer;\r\n    font-size: 0.9em;\r\n    font-weight: 500;\r\n    transition: all 0.2s;\r\n    text-decoration: none;\r\n    display: inline-block;\r\n  }\r\n\r\n  .btn:disabled {\r\n    opacity: 0.6;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  .btn-primary {\r\n    background-color: #fab45a;\r\n    color: black;\r\n  }\r\n\r\n  .btn-primary:hover:not(:disabled) {\r\n    background-color: #e09a43;\r\n  }\r\n\r\n  .btn-secondary {\r\n    background-color: #6c757d;\r\n    color: white;\r\n  }\r\n\r\n  .btn-secondary:hover:not(:disabled) {\r\n    background-color: #545b62;\r\n  }\r\n\r\n  .btn-success {\r\n    background-color: #28a745;\r\n    color: white;\r\n  }\r\n\r\n  .btn-success:hover {\r\n    background-color: #218838;\r\n  }\r\n\r\n  .no-classes {\r\n    text-align: center;\r\n    padding: 40px 20px;\r\n    color: #666;\r\n    font-style: italic;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .invoice-preview-section {\r\n    margin-top: 30px;\r\n    padding: 20px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 8px;\r\n    border: 2px solid #fab45a;\r\n  }\r\n\r\n  .invoice-summary {\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .summary-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: 10px;\r\n    background-color: white;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .summary-item {\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .summary-item strong {\r\n    color: #fab45a;\r\n  }\r\n\r\n  .pdf-preview-container {\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .pdf-preview {\r\n    width: 100%;\r\n    height: 500px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    background-color: white;\r\n  }\r\n\r\n  .download-actions {\r\n    display: flex;\r\n    gap: 10px;\r\n    justify-content: center;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  /* Mobile responsiveness */\r\n  @media (max-width: 600px) {\r\n    .teacher-invoice-container {\r\n      padding: 12px;\r\n      margin-top: 1em;\r\n    }\r\n\r\n    .selection-section {\r\n      padding: 15px;\r\n    }\r\n\r\n    .info-grid {\r\n      grid-template-columns: 1fr;\r\n      gap: 8px;\r\n    }\r\n\r\n    .selected-teacher {\r\n      flex-direction: column;\r\n      gap: 10px;\r\n    }\r\n\r\n    .autocomplete-list {\r\n      max-height: 150px;\r\n    }\r\n\r\n    .action-buttons,\r\n    .download-actions {\r\n      flex-direction: column;\r\n    }\r\n\r\n    .btn {\r\n      width: 100%;\r\n      margin-bottom: 8px;\r\n    }\r\n\r\n    .summary-grid {\r\n      grid-template-columns: 1fr;\r\n      gap: 8px;\r\n    }\r\n\r\n    .class-details {\r\n      flex-direction: column;\r\n      gap: 4px;\r\n    }\r\n\r\n    .pdf-preview {\r\n      height: 400px;\r\n    }\r\n\r\n    .classes-list {\r\n      max-height: 300px;\r\n    }\r\n  }\r\n\r\n  /* Custom Sum Section Styles */\r\n  .custom-sum-section {\r\n    background-color: #f8f9fa;\r\n    border: 1px solid #dee2e6;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin: 20px 0;\r\n  }\r\n\r\n  .custom-sum-section h5 {\r\n    margin: 0 0 15px 0;\r\n    color: #495057;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .custom-sum-input-group {\r\n    display: flex;\r\n    gap: 10px;\r\n    align-items: center;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .custom-sum-input {\r\n    flex: 1;\r\n    padding: 8px 12px;\r\n    border: 1px solid #ced4da;\r\n    border-radius: 4px;\r\n    font-size: 16px;\r\n    max-width: 200px;\r\n  }\r\n\r\n  .custom-sum-input:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 2px rgba(250, 180, 90, 0.2);\r\n  }\r\n\r\n  .custom-sum-note {\r\n    margin: 0;\r\n    font-size: 0.85em;\r\n    color: #6c757d;\r\n    font-style: italic;\r\n  }\r\n\r\n  @media (max-width: 600px) {\r\n    .custom-sum-input-group {\r\n      flex-direction: column;\r\n      align-items: stretch;\r\n    }\r\n\r\n    .custom-sum-input {\r\n      max-width: none;\r\n      margin-bottom: 10px;\r\n    }\r\n  }\r\n</style> ","<script>\r\n  import { onDestroy } from 'svelte';\r\n  import PersonalNoteSections from './PersonalNoteSections.svelte';\r\n  import { createPersonalNotesApi, classDescription } from './personalNotes.js';\r\n  import { getApiBase } from './apiBase.js';\r\n  export let teacherId;\r\n  let loadedTeacher, rows = [], nextCursor = null, loading = false, error = '', selected = null, detailLoading = false;\r\n  let requestVersion = 0, detailVersion = 0, destroyed = false;\r\n  const api = createPersonalNotesApi({ apiBase: getApiBase(), token: localStorage.getItem('jwtToken') });\r\n  $: if (teacherId && teacherId !== loadedTeacher) {\r\n    loadedTeacher = teacherId;\r\n    rows = [];\r\n    selected = null;\r\n    detailVersion++;\r\n    detailLoading = false;\r\n    nextCursor = null;\r\n    load(true);\r\n  }\r\n  async function load(reset = false) {\r\n    const version = ++requestVersion;\r\n    loading = true;\r\n    error = '';\r\n    try {\r\n      const result = await api.adminList(teacherId, reset ? null : nextCursor);\r\n      if (destroyed || version !== requestVersion) return;\r\n      rows = reset ? result.results : [...rows, ...result.results];\r\n      nextCursor = result.next_cursor;\r\n    } catch (err) { if (!destroyed && version === requestVersion) error = err.message; }\r\n    finally { if (!destroyed && version === requestVersion) loading = false; }\r\n  }\r\n  async function select(row) {\r\n    const version = ++detailVersion;\r\n    detailLoading = true;\r\n    error = '';\r\n    selected = null;\r\n    try {\r\n      const result = await api.adminRead(teacherId, row.note_id);\r\n      if (!destroyed && version === detailVersion) selected = result;\r\n    } catch (err) { if (!destroyed && version === detailVersion) error = err.message; }\r\n    finally { if (!destroyed && version === detailVersion) detailLoading = false; }\r\n  }\r\n  onDestroy(() => { destroyed = true; });\r\n</script>\r\n\r\n<section class=\"admin-personal-notes\" aria-label=\"Mokytojo asmeniniai užrašai\">\r\n  <h3>Asmeniniai pamokų užrašai</h3>\r\n  <p>Administratoriaus peržiūra · tik skaitymui.</p>\r\n  {#if error}<p role=\"alert\">{error}</p><button type=\"button\" on:click={() => load(true)}>Bandyti dar kartą</button>{/if}\r\n  {#if loading}<p>Įkeliama...</p>{/if}\r\n  {#if !loading && !error && rows.length === 0}<p>Asmeninių užrašų nėra.</p>{/if}\r\n  <ul>{#each rows as row (row.note_id)}<li><button type=\"button\" on:click={() => select(row)}>\r\n    <strong>{row.class_info.title}</strong><span>{classDescription(row.class_info)}</span>\r\n  </button></li>{/each}</ul>\r\n  {#if nextCursor}<button type=\"button\" disabled={loading} on:click={() => load()}>Rodyti daugiau</button>{/if}\r\n  {#if detailLoading}<p>Įkeliami užrašai...</p>{/if}\r\n  {#if selected}\r\n    <article aria-label=\"Asmeninių užrašų peržiūra\">\r\n      <h4>{selected.class_info.title}</h4><p>{classDescription(selected.class_info)}</p>\r\n      <PersonalNoteSections sections={selected.sections} readonly />\r\n    </article>\r\n  {/if}\r\n</section>\r\n\r\n<style>\r\n  .admin-personal-notes { margin: 24px 0; padding: 20px; border: 1px solid #d2d4c6; border-radius: 8px; background: #faf9f3; color: #24251f; }\r\n  ul { padding: 0; list-style: none; max-height: 360px; overflow: auto; }\r\n  button { display: flex; flex-direction: column; gap: 6px; text-align: left; padding: 10px 14px; margin: 6px 0; max-width: 100%; background: white; color: inherit; border: 1px solid #b8bdac; border-radius: 5px; cursor: pointer; overflow-wrap: anywhere; }\r\n  article { margin-top: 20px; border-top: 1px solid #b8bdac; }\r\n  span { font-size: 13px; }\r\n</style>\r\n","<script>\r\n  import { onDestroy, onMount } from 'svelte';\r\n  import { getApiBase } from './apiBase.js';\r\n  import { SUBJECT_NAMES } from './subjectCatalog.js';\r\n  import { loadTeacherWorkQrPreview } from './teacherWorkQrApi.js';\r\n  import AdminTeacherPersonalNotes from './AdminTeacherPersonalNotes.svelte';\r\n\r\n  export let embedded = false;\r\n  export let teacherId = null;\r\n  export let teacher = null; // optional: passed from dashboard to avoid waiting on teacher list\r\n  const apiBase = getApiBase();\r\n\r\n  let teachers = [];\r\n  let selectedTeacher = null;\r\n  let teacherDetails = null;\r\n  let teacherOverview = null;\r\n  let teacherComments = null;\r\n  let loading = false;\r\n  let loadingOverview = false;\r\n  let loadingComments = false;\r\n  let error = '';\r\n  let editMode = false;\r\n  let saving = false;\r\n  let teacherQuery = '';\r\n  let filteredTeachers = [];\r\n  let showTeacherDropdown = false;\r\n  let embeddedSelecting = false;\r\n  let qrCodePreviewUrl = '';\r\n  let qrCodePdfUrl = '';\r\n  let qrCodeLoading = false;\r\n  let qrCodeError = '';\r\n\r\n  // Month selection\r\n  let selectedMonth = new Date().getMonth() + 1; // 1-12\r\n  let selectedYear = new Date().getFullYear();\r\n  let availableYears = [];\r\n\r\n  // Editable teacher data\r\n  let editableData = {\r\n    teacher: {},\r\n    teacher_info: {},\r\n    timeslots: []\r\n  };\r\n\r\n  // Available subjects list (will be populated from backend)\r\n  let availableSubjects = [];\r\n  \r\n  // Subject editing functions\r\n  function toggleSubject(subject) {\r\n    if (editableData.teacher_info.subjects.includes(subject)) {\r\n      editableData.teacher_info.subjects = editableData.teacher_info.subjects.filter(s => s !== subject);\r\n    } else {\r\n      editableData.teacher_info.subjects = [...editableData.teacher_info.subjects, subject];\r\n    }\r\n    \r\n    // Force reactive update by reassigning the object\r\n    editableData = editableData;\r\n  }\r\n\r\n  function removeSubject(subject) {\r\n    editableData.teacher_info.subjects = editableData.teacher_info.subjects.filter(s => s !== subject);\r\n    // Force reactive update by reassigning the object\r\n    editableData = editableData;\r\n  }\r\n\r\n  onMount(async () => {\r\n    await loadTeachers();\r\n    await loadAvailableSubjects();\r\n    initializeAvailableYears();\r\n  });\r\n\r\n  // Embedded mode: if dashboard passed a teacher object, use it immediately.\r\n  // This prevents getting stuck on \"Loading teacher details...\" while waiting for teacher lists.\r\n  $: if (embedded && teacher?.id && (!selectedTeacher || selectedTeacher.id !== teacher.id) && !embeddedSelecting) {\r\n    embeddedSelecting = true;\r\n    Promise.resolve(selectTeacher(teacher)).finally(() => {\r\n      embeddedSelecting = false;\r\n    });\r\n  }\r\n\r\n  function initializeAvailableYears() {\r\n    const currentYear = new Date().getFullYear();\r\n    // Show current year and previous 2 years\r\n    availableYears = [currentYear, currentYear - 1, currentYear - 2];\r\n  }\r\n\r\n  async function loadTeachers() {\r\n    try {\r\n      const token = localStorage.getItem('jwtToken');\r\n      const response = await fetch(`${apiBase}/studentplayground/api/teachers-list/`, {\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        }\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        if (data.status === 'success') {\r\n          teachers = data.teachers || [];\r\n          filteredTeachers = teachers;\r\n        } else {\r\n          throw new Error(data.message || 'Failed to load teachers');\r\n        }\r\n      } else {\r\n        if (response.status === 401) {\r\n          // If response is 401 Unauthorized, redirect to login\r\n          alert('Reikia prisijungti iš naujo.');\r\n          localStorage.removeItem('jwtToken');\r\n          window.location.href = '#/about';\r\n        } else {\r\n          throw new Error(`HTTP error! status: ${response.status}`);\r\n        }\r\n      }\r\n    } catch (err) {\r\n      console.error('Error loading teachers:', err);\r\n      error = `Error loading teachers: ${err.message}`;\r\n    }\r\n  }\r\n\r\n  async function loadAvailableSubjects() {\r\n    availableSubjects = SUBJECT_NAMES;\r\n  }\r\n\r\n  async function selectTeacher(teacher) {\r\n    closeQrCodePreview();\r\n    selectedTeacher = teacher;\r\n    teacherQuery = teacher.name;\r\n    showTeacherDropdown = false; // Explicitly close dropdown\r\n    teacherDetails = null;\r\n    teacherOverview = null;\r\n    teacherComments = null;\r\n    editMode = false;\r\n    loading = true;\r\n    error = '';\r\n    \r\n    // Force update to ensure dropdown closes\r\n    filteredTeachers = teachers;\r\n\r\n    await loadTeacherData();\r\n  }\r\n\r\n  async function viewTeacherQrCode() {\r\n    if (!selectedTeacher?.id) return;\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      qrCodeError = 'Please sign in again to view the QR code.';\r\n      return;\r\n    }\r\n\r\n    qrCodeLoading = true;\r\n    qrCodeError = '';\r\n    closeQrCodePreview();\r\n    try {\r\n      const preview = await loadTeacherWorkQrPreview({\r\n        apiBase,\r\n        token,\r\n        contentType: teacherDetails.teacher.work_with_children_qr_code?.content_type,\r\n        teacherId: selectedTeacher.id,\r\n        fallbackError: 'Failed to load QR code.'\r\n      });\r\n      if (preview.kind === 'pdf') {\r\n        qrCodePdfUrl = preview.objectUrl;\r\n      } else {\r\n        qrCodePreviewUrl = preview.objectUrl;\r\n      }\r\n    } catch (err) {\r\n      qrCodeError = err.message || 'Failed to load QR code.';\r\n    } finally {\r\n      qrCodeLoading = false;\r\n    }\r\n  }\r\n\r\n  function closeQrCodePreview() {\r\n    if (qrCodePreviewUrl) URL.revokeObjectURL(qrCodePreviewUrl);\r\n    if (qrCodePdfUrl) URL.revokeObjectURL(qrCodePdfUrl);\r\n    qrCodePreviewUrl = '';\r\n    qrCodePdfUrl = '';\r\n    qrCodeError = '';\r\n  }\r\n\r\n  onDestroy(closeQrCodePreview);\r\n\r\n  async function loadTeacherData() {\r\n    if (!selectedTeacher) return;\r\n    \r\n    loading = true;\r\n    error = '';\r\n    \r\n    // Clear old data to force refresh\r\n    teacherOverview = null;\r\n    teacherComments = null;\r\n\r\n    try {\r\n      const token = localStorage.getItem('jwtToken');\r\n      \r\n      // Build query parameters for month/year\r\n      const monthParam = `?month=${selectedMonth}&year=${selectedYear}`;\r\n      \r\n      console.log(`Loading teacher data for ${getMonthName(selectedMonth)} ${selectedYear}`, monthParam);\r\n      \r\n      // Fetch detailed info, overview, and comments in parallel\r\n      const [detailsResponse, overviewResponse, commentsResponse] = await Promise.all([\r\n        fetch(`${apiBase}/studentplayground/api/teacher-detailed-info/${selectedTeacher.id}/`, {\r\n          headers: {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json'\r\n          }\r\n        }),\r\n        fetch(`${apiBase}/studentplayground/api/teacher-overview/${selectedTeacher.id}${monthParam}`, {\r\n          headers: {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json'\r\n          }\r\n        }),\r\n        fetch(`${apiBase}/studentplayground/api/teacher_performance_rating/`, {\r\n          method: 'POST',\r\n          headers: {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json'\r\n          },\r\n          body: JSON.stringify({\r\n            teacher_id: selectedTeacher.id,\r\n            teacher_name: selectedTeacher.name,\r\n            selected_at: new Date().toISOString(),\r\n            selected_month: `${selectedYear}-${String(selectedMonth).padStart(2, '0')}`\r\n          })\r\n        })\r\n      ]);\r\n\r\n      if (detailsResponse.ok) {\r\n        const data = await detailsResponse.json();\r\n        if (data.status === 'success') {\r\n          teacherDetails = data;\r\n          // Initialize editable data\r\n          initializeEditableData(data);\r\n        } else {\r\n          throw new Error(data.message || 'Failed to load teacher details');\r\n        }\r\n      } else {\r\n        if (detailsResponse.status === 401) {\r\n          // If response is 401 Unauthorized, redirect to login\r\n          alert('Reikia prisijungti iš naujo.');\r\n          localStorage.removeItem('jwtToken');\r\n          window.location.href = '#/about';\r\n        } else {\r\n          throw new Error(`HTTP error! status: ${detailsResponse.status}`);\r\n        }\r\n      }\r\n\r\n      if (overviewResponse.ok) {\r\n        const overviewData = await overviewResponse.json();\r\n        if (overviewData.status === 'success') {\r\n          console.log('Teacher overview data received:', {\r\n            total_classes: overviewData.current_month?.total_classes,\r\n            cancelled_classes: overviewData.current_month?.cancelled_classes,\r\n            students_count: overviewData.students?.length,\r\n            all_week_classes_count: overviewData.all_week_classes?.length\r\n          });\r\n          teacherOverview = overviewData;\r\n        } else {\r\n          console.warn('Failed to load teacher overview:', overviewData.message);\r\n        }\r\n      } else {\r\n        console.warn('Failed to fetch teacher overview');\r\n      }\r\n\r\n      if (commentsResponse.ok) {\r\n        const commentsData = await commentsResponse.json();\r\n        if (commentsData.status === 'success') {\r\n          console.log('Teacher comments data received:', {\r\n            total_comments: commentsData.comments_analysis?.total_comments\r\n          });\r\n          teacherComments = commentsData.comments_analysis;\r\n        } else {\r\n          console.warn('Failed to load teacher comments:', commentsData.error);\r\n        }\r\n      } else {\r\n        console.warn('Failed to fetch teacher comments');\r\n      }\r\n\r\n    } catch (err) {\r\n      console.error('Error loading teacher data:', err);\r\n      error = `Error loading teacher data: ${err.message}`;\r\n    } finally {\r\n      loading = false;\r\n    }\r\n  }\r\n\r\n  // Filter teachers based on search query\r\n  function filterTeachers() {\r\n    if (!teacherQuery.trim()) {\r\n      filteredTeachers = teachers;\r\n      showTeacherDropdown = false;\r\n    } else {\r\n      const query = teacherQuery.toLowerCase();\r\n      filteredTeachers = teachers.filter(teacher => \r\n        teacher.name.toLowerCase().includes(query) ||\r\n        teacher.email.toLowerCase().includes(query)\r\n      );\r\n      // Only show dropdown if no teacher is selected and there are filtered results\r\n      showTeacherDropdown = !selectedTeacher && filteredTeachers.length > 0;\r\n    }\r\n  }\r\n\r\n  // Handle month/year change\r\n  async function handleMonthChange() {\r\n    if (selectedTeacher) {\r\n      await loadTeacherData();\r\n    }\r\n  }\r\n\r\n  // Get month name for display\r\n  function getMonthName(monthNum) {\r\n    const months = [\r\n      'January', 'February', 'March', 'April', 'May', 'June',\r\n      'July', 'August', 'September', 'October', 'November', 'December'\r\n    ];\r\n    return months[monthNum - 1];\r\n  }\r\n\r\n  // Initialize editable data from teacher details\r\n  function initializeEditableData(data) {\r\n    // Use legacy format for backward compatibility in editing\r\n    const legacyInfo = data.teacher_info_legacy || data.teacher_info;\r\n    \r\n    // Ensure subjects is always an array\r\n    let subjects = [];\r\n    if (Array.isArray(legacyInfo?.subjects)) {\r\n      subjects = [...legacyInfo.subjects];\r\n    } else if (Array.isArray(legacyInfo) && legacyInfo.length > 0 && Array.isArray(legacyInfo[0]?.subjects)) {\r\n      // If teacher_info is an array, get subjects from first element\r\n      subjects = [...legacyInfo[0].subjects];\r\n    }\r\n    \r\n    \r\n    editableData = {\r\n      teacher: { \r\n        ...data.teacher,\r\n        meeting_link: data.teacher.meeting_link || ''\r\n      },\r\n      teacher_info: { \r\n        subjects: subjects,\r\n        grade: legacyInfo?.grade || (Array.isArray(legacyInfo) && legacyInfo[0]?.grade) || ''\r\n      },\r\n      timeslots: data.timeslots.map(slot => ({ ...slot }))\r\n    };\r\n  }\r\n\r\n  // Toggle edit mode\r\n  function toggleEditMode() {\r\n    if (editMode) {\r\n      // Reset editable data to original\r\n      if (teacherDetails) {\r\n        initializeEditableData(teacherDetails);\r\n      }\r\n    }\r\n    editMode = !editMode;\r\n    error = '';\r\n  }\r\n\r\n  // Add new time slot\r\n  function addTimeSlot() {\r\n    editableData.timeslots = [...editableData.timeslots, {\r\n      id: null,\r\n      day_of_week: 1,\r\n      day_name: 'Monday',\r\n      start_time: '09:00',\r\n      end_time: '10:00'\r\n    }];\r\n  }\r\n\r\n  // Remove time slot\r\n  function removeTimeSlot(index) {\r\n    editableData.timeslots = editableData.timeslots.filter((_, i) => i !== index);\r\n  }\r\n\r\n  // Update day name when day of week changes\r\n  function updateDayName(index, dayOfWeek) {\r\n    const dayMapping = {\r\n      1: 'Monday', 2: 'Tuesday', 3: 'Wednesday', \r\n      4: 'Thursday', 5: 'Friday', 6: 'Saturday', 7: 'Sunday'\r\n    };\r\n    editableData.timeslots[index].day_of_week = parseInt(dayOfWeek);\r\n    editableData.timeslots[index].day_name = dayMapping[dayOfWeek];\r\n  }\r\n\r\n  // Save teacher information\r\n  async function saveTeacherInfo() {\r\n    if (!selectedTeacher) {\r\n      error = 'No teacher selected';\r\n      return;\r\n    }\r\n\r\n    saving = true;\r\n    error = '';\r\n\r\n    try {\r\n      const token = localStorage.getItem('jwtToken');\r\n      const response = await fetch(`${apiBase}/studentplayground/api/update-teacher-detailed-info/${selectedTeacher.id}/`, {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        },\r\n        body: JSON.stringify(editableData)\r\n      });\r\n      const data = await response.json();\r\n\r\n      if (response.ok) {\r\n        if (data.status === 'success') {\r\n          // Update the displayed data with the saved data\r\n          teacherDetails = data;\r\n          initializeEditableData(data);\r\n          editMode = false;\r\n          alert('Teacher information updated successfully!');\r\n        } else {\r\n          throw new Error(data.message || 'Failed to save teacher information');\r\n        }\r\n      } else {\r\n        if (response.status === 401) {\r\n          alert('Reikia prisijungti iš naujo.');\r\n          localStorage.removeItem('jwtToken');\r\n          window.location.href = '#/about';\r\n        } else {\r\n          throw new Error(data.indiv_lic || data.message || `HTTP error! status: ${response.status}`);\r\n        }\r\n      }\r\n    } catch (err) {\r\n      console.error('Error saving teacher information:', err);\r\n      error = `Error saving teacher information: ${err.message}`;\r\n    } finally {\r\n      saving = false;\r\n    }\r\n  }\r\n\r\n  function formatTimeslots(timeslots) {\r\n    if (!timeslots || timeslots.length === 0) {\r\n      return 'No time slots defined';\r\n    }\r\n    \r\n    return timeslots.map(slot => \r\n      `${slot.day_name}: ${slot.start_time} - ${slot.end_time}`\r\n    ).join(', ');\r\n  }\r\n\r\n  // Reactive statement to filter teachers when search query changes\r\n  $: if (teacherQuery !== undefined) {\r\n    filterTeachers();\r\n  }\r\n  \r\n  // Reactive statement to force UI updates when subjects change\r\n  $: editableSubjects = editableData.teacher_info.subjects;\r\n\r\n  // Embedded mode: auto-select teacher by id and hide internal search UI\r\n  $: if (embedded && teacherId && teachers.length && !embeddedSelecting) {\r\n    const match = teachers.find(t => t.id === Number(teacherId));\r\n    if (match && (!selectedTeacher || selectedTeacher.id !== match.id)) {\r\n      embeddedSelecting = true;\r\n      Promise.resolve(selectTeacher(match)).finally(() => {\r\n        embeddedSelecting = false;\r\n      });\r\n    }\r\n  }\r\n</script>\r\n\r\n<div class=\"teacher-info-container\" class:embedded={embedded}>\r\n  <h3>{embedded ? 'Teacher Information' : 'Teacher Information Lookup'}</h3>\r\n  \r\n  {#if error}\r\n    <div class=\"error-message\">\r\n      {error}\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Teacher Selection -->\r\n  {#if !embedded}\r\n    <div class=\"selection-section\">\r\n      <h4>Step 1: Select Teacher</h4>\r\n      \r\n      <div class=\"input-container\">\r\n        <input \r\n          type=\"text\" \r\n          placeholder=\"Search teacher by name...\"\r\n          bind:value={teacherQuery}\r\n          on:input={() => {\r\n            if (selectedTeacher && teacherQuery !== selectedTeacher.name) {\r\n              selectedTeacher = null;\r\n              showTeacherDropdown = true;\r\n            } else if (!selectedTeacher) {\r\n              showTeacherDropdown = teacherQuery.trim().length > 0;\r\n            }\r\n          }}\r\n          autocomplete=\"off\"\r\n          class=\"search-input\"\r\n        />\r\n        \r\n        {#if showTeacherDropdown}\r\n          <ul class=\"autocomplete-list\">\r\n            {#each filteredTeachers.slice(0, 8) as teacher}\r\n              <li>\r\n                <button\r\n                  type=\"button\"\r\n                  on:click={() => selectTeacher(teacher)}\r\n                  on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectTeacher(teacher)}\r\n                >\r\n                  <div class=\"teacher-option\">\r\n                    <span class=\"teacher-name\">{teacher.name}</span>\r\n                    {#if teacher.email}\r\n                      <span class=\"teacher-email\">{teacher.email}</span>\r\n                    {/if}\r\n                  </div>\r\n                </button>\r\n              </li>\r\n            {/each}\r\n          </ul>\r\n        {/if}\r\n      </div>\r\n      \r\n      {#if selectedTeacher}\r\n        <div class=\"selected-teacher\">\r\n          <div class=\"selected-teacher-info\">\r\n            <h5>Selected Teacher</h5>\r\n            <p><strong>Name:</strong> {selectedTeacher.name}</p>\r\n            {#if selectedTeacher.email}\r\n              <p><strong>Email:</strong> {selectedTeacher.email}</p>\r\n            {/if}\r\n            <p><strong>Classes:</strong> {selectedTeacher.class_count}</p>\r\n          </div>\r\n          \r\n          <button \r\n            type=\"button\" \r\n            class=\"btn-clear-small\" \r\n            on:click={() => { \r\n              selectedTeacher = null; \r\n              teacherQuery = ''; \r\n              showTeacherDropdown = false; \r\n              teacherDetails = null;\r\n              teacherOverview = null;\r\n              teacherComments = null;\r\n              editMode = false;\r\n            }}\r\n          >\r\n            Clear Selection\r\n          </button>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {:else}\r\n    {#if !selectedTeacher}\r\n      <div class=\"loading\">Loading teacher details...</div>\r\n    {/if}\r\n  {/if}\r\n\r\n  <!-- Month Selection -->\r\n  <div class=\"selection-section\">\r\n    <h4>{embedded ? 'Month & Year' : 'Step 2: Select Month & Year'}</h4>\r\n    <div class=\"month-selection\">\r\n      <div class=\"month-selector-container\">\r\n        <label for=\"month-select\" class=\"selector-label\">Month:</label>\r\n        <select \r\n          id=\"month-select\"\r\n          bind:value={selectedMonth} \r\n          on:change={handleMonthChange}\r\n          class=\"month-select\"\r\n        >\r\n          <option value={1}>January</option>\r\n          <option value={2}>February</option>\r\n          <option value={3}>March</option>\r\n          <option value={4}>April</option>\r\n          <option value={5}>May</option>\r\n          <option value={6}>June</option>\r\n          <option value={7}>July</option>\r\n          <option value={8}>August</option>\r\n          <option value={9}>September</option>\r\n          <option value={10}>October</option>\r\n          <option value={11}>November</option>\r\n          <option value={12}>December</option>\r\n        </select>\r\n      </div>\r\n      \r\n      <div class=\"month-selector-container\">\r\n        <label for=\"year-select\" class=\"selector-label\">Year:</label>\r\n        <select \r\n          id=\"year-select\"\r\n          bind:value={selectedYear} \r\n          on:change={handleMonthChange}\r\n          class=\"year-select\"\r\n        >\r\n          {#each availableYears as year}\r\n            <option value={year}>{year}</option>\r\n          {/each}\r\n        </select>\r\n      </div>\r\n\r\n      <div class=\"selected-period\">\r\n        <span class=\"period-label\">Viewing data for:</span>\r\n        <span class=\"period-value\">{getMonthName(selectedMonth)} {selectedYear}</span>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Loading Indicator -->\r\n  {#if loading}\r\n    <div class=\"loading\">\r\n      Loading teacher details...\r\n    </div>\r\n  {/if}\r\n\r\n  {#if selectedTeacher}\r\n    <AdminTeacherPersonalNotes teacherId={selectedTeacher.id} />\r\n  {/if}\r\n\r\n  <!-- Teacher Overview Display -->\r\n  {#if teacherOverview && !loading}\r\n    <div class=\"teacher-overview\">\r\n      <h4>Teacher Overview: {teacherOverview.teacher_name} - {getMonthName(selectedMonth)} {selectedYear}</h4>\r\n      \r\n      <!-- Classes This Month -->\r\n      <div class=\"overview-section\">\r\n        <h5>📚 Classes for {getMonthName(selectedMonth)} {selectedYear}</h5>\r\n        <div class=\"overview-grid\">\r\n          <div class=\"overview-item\">\r\n            <span class=\"overview-label\">Total Classes:</span>\r\n            <span class=\"overview-value\">{teacherOverview.current_month.total_classes}</span>\r\n          </div>\r\n          <div class=\"overview-item\">\r\n            <span class=\"overview-label\">Cancelled:</span>\r\n            <span class=\"overview-value\">{teacherOverview.current_month.cancelled_classes}</span>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Subjects Taught -->\r\n      <div class=\"overview-section\">\r\n        <h5>📖 Subjects Taught</h5>\r\n        <div class=\"subjects-overview\">\r\n          {#each Object.entries(teacherOverview.subjects_taught) as [subject, count]}\r\n            <div class=\"subject-badge\">\r\n              <span class=\"subject-name\">{subject}</span>\r\n              <span class=\"subject-count\">{count} classes</span>\r\n            </div>\r\n          {/each}\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Students -->\r\n      <div class=\"overview-section\">\r\n        <h5>👥 Students ({teacherOverview.students.length} total)</h5>\r\n        <div class=\"students-overview\">\r\n          {#each teacherOverview.students as student}\r\n            <div class=\"student-item\">\r\n              <span class=\"student-name\">{student.name}</span>\r\n              <small class=\"student-details\">{student.class_count} classes</small>\r\n            </div>\r\n          {/each}\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Teaching Start Date -->\r\n      {#if teacherDetails && teacherDetails.teaching_preference}\r\n        <div class=\"overview-section\">\r\n          <h5>📅 Teaching Start Date</h5>\r\n          <div class=\"teaching-start-info\">\r\n            {#if teacherDetails.teaching_preference.preferred_start_date}\r\n              <div class=\"start-date-item\">\r\n                <span class=\"start-date-label\">Preferred Start Date:</span>\r\n                <span class=\"start-date-value\">{new Date(teacherDetails.teaching_preference.preferred_start_date).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })}</span>\r\n              </div>\r\n            {:else}\r\n              <p class=\"no-start-date\">No preferred start date set</p>\r\n            {/if}\r\n          </div>\r\n        </div>\r\n      {/if}\r\n\r\n      <!-- Available Time Slots -->\r\n      <div class=\"overview-section\">\r\n        <h5>⏰ Available Time Slots This Week</h5>\r\n        {#if teacherOverview.available_slots.length > 0}\r\n          <div class=\"available-slots\">\r\n            {#each teacherOverview.available_slots as slot}\r\n              <div class=\"slot-item available\">\r\n                <span class=\"slot-day\">{slot.day_name}</span>\r\n                <span class=\"slot-time\">{slot.start_time} - {slot.end_time}</span>\r\n                <span class=\"slot-status\">Available</span>\r\n              </div>\r\n            {/each}\r\n          </div>\r\n        {:else}\r\n          <p class=\"no-slots\">No available time slots this week</p>\r\n        {/if}\r\n      </div>\r\n\r\n      <!-- All Classes This Week -->\r\n      <div class=\"overview-section\">\r\n        <h5>📅 All Classes This Week</h5>\r\n        {#if teacherOverview.all_week_classes.length > 0}\r\n          <div class=\"week-classes\">\r\n            {#each teacherOverview.all_week_classes as classItem}\r\n              <div class=\"class-item {classItem.falls_in_timeslot ? 'in-timeslot' : 'outside-timeslot'}\">\r\n                <div class=\"class-time\">\r\n                  <span class=\"class-day\">{classItem.day_name}</span>\r\n                  <span class=\"class-datetime\">{classItem.display_time}</span>\r\n                </div>\r\n                <div class=\"class-details\">\r\n                  <span class=\"class-name\">{classItem.class_name}</span>\r\n                  <span class=\"class-student\">{classItem.student_name}</span>\r\n                </div>\r\n                {#if classItem.falls_in_timeslot}\r\n                  <span class=\"timeslot-indicator\">In Timeslot</span>\r\n                {:else}\r\n                  <span class=\"outside-indicator\">Outside Timeslot</span>\r\n                {/if}\r\n              </div>\r\n            {/each}\r\n          </div>\r\n        {:else}\r\n          <p class=\"no-slots\">No classes scheduled this week</p>\r\n        {/if}\r\n      </div>\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Teacher Comments Analysis -->\r\n  {#if teacherComments && !loading}\r\n    <div class=\"teacher-comments\">\r\n      <h4>📊 Student Feedback Analysis - {getMonthName(selectedMonth)} {selectedYear}</h4>\r\n      \r\n      <div class=\"comments-summary\">\r\n        <div class=\"summary-header\">\r\n          <strong>Total Comments: {teacherComments.total_comments}</strong>\r\n        </div>\r\n        <p>Student feedback from {getMonthName(selectedMonth)} {selectedYear}</p>\r\n      </div>\r\n\r\n      {#if teacherComments.total_comments > 0}\r\n        <!-- Rating Averages Section -->\r\n        <div class=\"comments-section\">\r\n          <h5>⭐ Rating Averages (1-5 scale)</h5>\r\n          <div class=\"month-comparison\">\r\n            <div class=\"month-data\">\r\n              <h6>Learning & Effort</h6>\r\n              <ul>\r\n                <li><strong>Effort Rating:</strong> {teacherComments.rating_averages.effort.average}/5 ({teacherComments.rating_averages.effort.rated_comments} ratings)</li>\r\n                <li><strong>Learning Effectiveness:</strong> {teacherComments.rating_averages.learned.average}/5 ({teacherComments.rating_averages.learned.rated_comments} ratings)</li>\r\n                <li><strong>General Satisfaction:</strong> {teacherComments.rating_averages.general.average}/5 ({teacherComments.rating_averages.general.rated_comments} ratings)</li>\r\n              </ul>\r\n            </div>\r\n            \r\n            <div class=\"month-data\">\r\n              <h6>Issues & Performance</h6>\r\n              <ul>\r\n                <li><strong>Technical Issues:</strong> {teacherComments.rating_averages.technical_issues.average}/5 ({teacherComments.rating_averages.technical_issues.rated_comments} reports)</li>\r\n                <li><strong>Punctuality:</strong> {teacherComments.boolean_metrics.punctuality.punctuality_percentage}% on time</li>\r\n                <li><strong>Class Completion:</strong> {teacherComments.boolean_metrics.class_completion.completion_percentage}% completed</li>\r\n              </ul>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Performance Metrics Section -->\r\n        <div class=\"comments-section\">\r\n          <h5>📈 Performance Metrics</h5>\r\n          <div class=\"metrics-grid\">\r\n            <div class=\"metric-item\">\r\n              <strong>Punctuality</strong>\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {teacherComments.boolean_metrics.punctuality.punctuality_percentage}%\"></div>\r\n              </div>\r\n              <small>{teacherComments.boolean_metrics.punctuality.on_time_count} on time, {teacherComments.boolean_metrics.punctuality.late_count} late</small>\r\n            </div>\r\n            \r\n            <div class=\"metric-item\">\r\n              <strong>Class Completion</strong>\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {teacherComments.boolean_metrics.class_completion.completion_percentage}%\"></div>\r\n              </div>\r\n              <small>{teacherComments.boolean_metrics.class_completion.completed_count} completed, {teacherComments.boolean_metrics.class_completion.not_completed_count} not completed</small>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Sample Comments Section -->\r\n        {#if teacherComments.sample_comments && teacherComments.sample_comments.length > 0}\r\n          <div class=\"comments-section\">\r\n            <h5>💬 Recent Student Comments</h5>\r\n            <div class=\"sample-comments\">\r\n              {#each teacherComments.sample_comments as comment}\r\n                <div class=\"comment-item\">\r\n                  <strong>{comment.student}:</strong>\r\n                  <span>\"{comment.text}\"</span>\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n      {:else}\r\n        <div class=\"no-data\">\r\n          <p>No student comments found for this teacher in the current month.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Teacher Details Display -->\r\n  {#if teacherDetails && !loading}\r\n    <div class=\"teacher-details\">\r\n      <div class=\"teacher-details-header\">\r\n        <h4>Teacher Details: {teacherDetails.teacher.name}</h4>\r\n        <div class=\"edit-controls\">\r\n          <button class=\"btn btn-secondary\" on:click={toggleEditMode}>\r\n            {editMode ? 'Cancel Edit' : 'Edit Information'}\r\n          </button>\r\n          {#if editMode}\r\n            <button class=\"btn btn-primary\" on:click={saveTeacherInfo} disabled={saving}>\r\n              {saving ? 'Saving...' : 'Save Changes'}\r\n            </button>\r\n          {/if}\r\n        </div>\r\n      </div>\r\n      \r\n      <!-- Basic Teacher Information -->\r\n      <div class=\"info-section\">\r\n        <h5>Basic Information</h5>\r\n        <div class=\"info-grid\">\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Name:</span>\r\n            {#if editMode}\r\n              <input type=\"text\" bind:value={editableData.teacher.name} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{teacherDetails.teacher.name}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Username:</span>\r\n            {#if editMode}\r\n              <input type=\"text\" bind:value={editableData.teacher.username} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{teacherDetails.teacher.username}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Email:</span>\r\n            {#if editMode}\r\n              <input type=\"email\" bind:value={editableData.teacher.email} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{teacherDetails.teacher.email}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Phone Number:</span>\r\n            {#if editMode}\r\n              <input type=\"text\" bind:value={editableData.teacher.phone_number} class=\"edit-input\" placeholder=\"+370 600 12345\" />\r\n            {:else}\r\n              <span class=\"value\">{teacherDetails.teacher.phone_number || 'Not set'}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Google Calendar ID:</span>\r\n            {#if editMode}\r\n              <input type=\"text\" bind:value={editableData.teacher.google_calendar_id} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{teacherDetails.teacher.google_calendar_id}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Bank Number:</span>\r\n            {#if editMode}\r\n              <input type=\"text\" bind:value={editableData.teacher.bank_nr} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{teacherDetails.teacher.bank_nr}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Individual License:</span>\r\n            {#if editMode}\r\n              <input type=\"text\" name=\"admin-individual-activity-certificate\" inputmode=\"numeric\" autocomplete=\"off\" autocapitalize=\"none\" autocorrect=\"off\" spellcheck=\"false\" data-lpignore=\"true\" data-1p-ignore=\"true\" bind:value={editableData.teacher.indiv_lic} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{teacherDetails.teacher.indiv_lic}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Meeting Link:</span>\r\n            {#if editMode}\r\n              <input type=\"url\" bind:value={editableData.teacher.meeting_link} class=\"edit-input\" placeholder=\"https://zoom.us/j/...\" />\r\n            {:else}\r\n              <span class=\"value\">{teacherDetails.teacher.meeting_link || 'Not set'}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item qr-code-admin-item\">\r\n            <span class=\"label\">Teisėto darbo su vaikais QR kodas:</span>\r\n            {#if teacherDetails.teacher.work_with_children_qr_code?.exists}\r\n              <span class=\"value\">Uploaded {new Date(teacherDetails.teacher.work_with_children_qr_code.uploaded_at).toLocaleString('lt-LT')}</span>\r\n              <button class=\"btn btn-secondary btn-small\" type=\"button\" on:click={viewTeacherQrCode} disabled={qrCodeLoading}>\r\n                {qrCodeLoading ? 'Loading...' : 'View QR code'}\r\n              </button>\r\n            {:else}\r\n              <span class=\"value\">Not uploaded</span>\r\n            {/if}\r\n          </div>\r\n        </div>\r\n        {#if qrCodeError}\r\n          <div class=\"qr-code-admin-error\" role=\"alert\">{qrCodeError}</div>\r\n        {/if}\r\n        {#if qrCodePreviewUrl}\r\n          <div class=\"qr-code-admin-preview\">\r\n            <img src={qrCodePreviewUrl} alt=\"Teisėto darbo su vaikais QR kodas\" />\r\n            <button class=\"btn btn-secondary btn-small\" type=\"button\" on:click={closeQrCodePreview}>Close QR code</button>\r\n          </div>\r\n        {/if}\r\n      </div>\r\n\r\n      <!-- Teaching Information -->\r\n      <div class=\"info-section\">\r\n        <h5>Teaching Information</h5>\r\n        \r\n        {#if editMode}\r\n          <!-- Edit mode - enhanced subject selection -->\r\n          <div class=\"info-grid\">\r\n            <div class=\"info-item-full-width\">\r\n              <span class=\"label\">Subjects:</span>\r\n              \r\n              {#if editableSubjects && editableSubjects.length > 0}\r\n                <div class=\"selected-subjects\">\r\n                  <div>Selected subjects:</div>\r\n                  {#each editableSubjects as subject}\r\n                    <span class=\"selected-subject-tag\">\r\n                      {subject}\r\n                      <span \r\n                        class=\"remove-subject\" \r\n                        on:click={() => removeSubject(subject)}\r\n                        on:keydown={(e) => e.key === 'Enter' && removeSubject(subject)}\r\n                        tabindex=\"0\"\r\n                        role=\"button\"\r\n                        aria-label=\"Remove {subject}\"\r\n                      >×</span>\r\n                    </span>\r\n                  {/each}\r\n                </div>\r\n              {/if}\r\n\r\n              <div class=\"subjects-container\">\r\n                <div style=\"margin-bottom: 8px; font-size: 13px; color: #888; font-style: italic;\">Format: subject + language (e.g., \"Lietuvių k. Angl.\" = Lithuanian language, taught in English)</div>\r\n                <div style=\"margin-bottom: 12px; font-size: 14px; color: #666;\">Select subjects:</div>\r\n                {#each availableSubjects as subject}\r\n                  <div class=\"subject-item\">\r\n                    <label class=\"subject-label\">\r\n                      <input \r\n                        type=\"checkbox\" \r\n                        checked={editableSubjects && editableSubjects.includes(subject)}\r\n                        on:change={() => toggleSubject(subject)}\r\n                      >\r\n                      <span class=\"checkmark\"></span>\r\n                      <span class=\"subject-text\">{subject}</span>\r\n                    </label>\r\n                  </div>\r\n                {/each}\r\n              </div>\r\n            </div>\r\n            <div class=\"info-item\">\r\n              <span class=\"label\">Grade Range:</span>\r\n              <input type=\"text\" bind:value={editableData.teacher_info.grade} class=\"edit-input\" placeholder=\"e.g., 1-6 or 10-12\" />\r\n            </div>\r\n          </div>\r\n        {:else}\r\n          <!-- Display mode - show detailed structure -->\r\n          {#if Array.isArray(teacherDetails.teacher_info) && teacherDetails.teacher_info.length > 0}\r\n            <div class=\"teacher-info-detailed\">\r\n              <p class=\"info-description\">Subject & Grade Combinations:</p>\r\n              {#each teacherDetails.teacher_info as info, index}\r\n                <div class=\"subject-grade-combo\">\r\n                  <div class=\"combo-header\">\r\n                    <span class=\"combo-title\">Combination {index + 1}</span>\r\n                  </div>\r\n                  <div class=\"combo-details\">\r\n                    <div class=\"combo-item\">\r\n                      <span class=\"combo-label\">Subjects:</span>\r\n                      <span class=\"combo-value\">\r\n                        {info.subjects.length > 0 ? info.subjects.join(', ') : 'No subjects'}\r\n                      </span>\r\n                    </div>\r\n                    <div class=\"combo-item\">\r\n                      <span class=\"combo-label\">Grade Range:</span>\r\n                      <span class=\"combo-value\">{info.grade || 'Not specified'}</span>\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          {:else}\r\n            <!-- Fallback to legacy format if new format not available -->\r\n            <div class=\"info-grid\">\r\n              <div class=\"info-item\">\r\n                <span class=\"label\">Subjects:</span>\r\n                <span class=\"value\">\r\n                  {(teacherDetails.teacher_info_legacy?.subjects?.length > 0 || teacherDetails.teacher_info?.subjects?.length > 0)\r\n                    ? (teacherDetails.teacher_info_legacy?.subjects || teacherDetails.teacher_info?.subjects).join(', ') \r\n                    : 'No subjects assigned'}\r\n                </span>\r\n              </div>\r\n              <div class=\"info-item\">\r\n                <span class=\"label\">Grade Range:</span>\r\n                <span class=\"value\">\r\n                  {teacherDetails.teacher_info_legacy?.grade || teacherDetails.teacher_info?.grade || 'No grade range specified'}\r\n                </span>\r\n              </div>\r\n            </div>\r\n          {/if}\r\n\r\n          <div class=\"info-item student-count-item\">\r\n            <span class=\"label\">Kiek norite pamokų per <strong>savaitę</strong>?</span>\r\n            <span class=\"value\">\r\n              {(teacherDetails.teacher?.desired_student_count ?? null) !== null\r\n                ? teacherDetails.teacher.desired_student_count\r\n                : 'Nenurodyta'}\r\n            </span>\r\n          </div>\r\n        {/if}\r\n      </div>\r\n\r\n      <!-- Time Slots -->\r\n      <div class=\"info-section\">\r\n        <div class=\"timeslots-header\">\r\n          <h5>Available Time Slots</h5>\r\n          {#if editMode}\r\n            <button class=\"btn btn-small\" on:click={addTimeSlot}>\r\n              Add Time Slot\r\n            </button>\r\n          {/if}\r\n        </div>\r\n        \r\n        {#if editMode}\r\n          {#if editableData.timeslots.length > 0}\r\n            <div class=\"timeslots-edit\">\r\n              {#each editableData.timeslots as slot, index}\r\n                <div class=\"timeslot-edit-item\">\r\n                  <select bind:value={slot.day_of_week} on:change={(e) => updateDayName(index, e.target.value)} class=\"day-select\">\r\n                    <option value={1}>Monday</option>\r\n                    <option value={2}>Tuesday</option>\r\n                    <option value={3}>Wednesday</option>\r\n                    <option value={4}>Thursday</option>\r\n                    <option value={5}>Friday</option>\r\n                    <option value={6}>Saturday</option>\r\n                    <option value={7}>Sunday</option>\r\n                  </select>\r\n                  <input type=\"time\" bind:value={slot.start_time} class=\"time-input\" />\r\n                  <input type=\"time\" bind:value={slot.end_time} class=\"time-input\" />\r\n                  <button class=\"btn btn-danger btn-small\" on:click={() => removeTimeSlot(index)}>\r\n                    Remove\r\n                  </button>\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          {:else}\r\n            <p class=\"no-data\">No time slots defined. Click \"Add Time Slot\" to add one.</p>\r\n          {/if}\r\n        {:else}\r\n          {#if teacherDetails.timeslots.length > 0}\r\n            <div class=\"timeslots-grid\">\r\n              {#each teacherDetails.timeslots as slot}\r\n                <div class=\"timeslot-item\">\r\n                  <span class=\"day\">{slot.day_name}</span>\r\n                  <span class=\"time\">{slot.start_time} - {slot.end_time}</span>\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          {:else}\r\n            <p class=\"no-data\">No time slots defined for this teacher</p>\r\n          {/if}\r\n        {/if}\r\n      </div>\r\n    </div>\r\n  {/if}\r\n</div>\r\n\r\n<style>\r\n  .teacher-info-container {\r\n    padding: 20px;\r\n    max-width: 1200px;\r\n    margin: 0 auto;\r\n  }\r\n\r\n  .teacher-info-container.embedded {\r\n    padding: 0;\r\n    max-width: none;\r\n    margin: 0;\r\n  }\r\n\r\n  .selection-section {\r\n    background-color: #f8f9fa;\r\n    padding: 20px;\r\n    border-radius: 8px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .selection-section h4 {\r\n    margin: 0 0 15px 0;\r\n    color: #333;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .month-selection {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 20px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .month-selector-container {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n  }\r\n\r\n  .selector-label {\r\n    font-weight: 600;\r\n    color: #555;\r\n    font-size: 0.95em;\r\n  }\r\n\r\n  .month-select,\r\n  .year-select {\r\n    padding: 8px 12px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    background-color: white;\r\n    cursor: pointer;\r\n    transition: border-color 0.2s;\r\n  }\r\n\r\n  .month-select {\r\n    min-width: 130px;\r\n  }\r\n\r\n  .year-select {\r\n    min-width: 90px;\r\n  }\r\n\r\n  .month-select:focus,\r\n  .year-select:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 2px rgba(250, 180, 90, 0.2);\r\n  }\r\n\r\n  .month-select:hover,\r\n  .year-select:hover {\r\n    border-color: #fab45a;\r\n  }\r\n\r\n  .selected-period {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    padding: 8px 16px;\r\n    background-color: #fff3e0;\r\n    border: 2px solid #fab45a;\r\n    border-radius: 6px;\r\n    margin-left: auto;\r\n  }\r\n\r\n  .period-label {\r\n    font-weight: 500;\r\n    color: #666;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .period-value {\r\n    font-weight: 600;\r\n    color: #fab45a;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .input-container {\r\n    position: relative;\r\n    margin-top: 15px;\r\n  }\r\n\r\n  .search-input {\r\n    width: 100%;\r\n    padding: 12px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    background-color: white;\r\n  }\r\n\r\n  .search-input:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 2px rgba(250, 180, 90, 0.2);\r\n  }\r\n\r\n  .autocomplete-list {\r\n    position: absolute;\r\n    top: 100%;\r\n    left: 0;\r\n    right: 0;\r\n    background: white;\r\n    border: 1px solid #ddd;\r\n    border-top: none;\r\n    border-radius: 0 0 6px 6px;\r\n    max-height: 200px;\r\n    overflow-y: auto;\r\n    z-index: 1000;\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n    box-shadow: 0 2px 8px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .autocomplete-list li {\r\n    border-bottom: 1px solid #f0f0f0;\r\n  }\r\n\r\n  .autocomplete-list li:last-child {\r\n    border-bottom: none;\r\n  }\r\n\r\n  .autocomplete-list button {\r\n    width: 100%;\r\n    padding: 12px;\r\n    border: none;\r\n    background: none;\r\n    text-align: left;\r\n    cursor: pointer;\r\n    transition: background-color 0.2s;\r\n  }\r\n\r\n  .autocomplete-list button:hover {\r\n    background-color: #f8f9fa;\r\n  }\r\n\r\n  .teacher-option {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n  }\r\n\r\n  .teacher-name {\r\n    font-weight: 500;\r\n    color: #333;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .teacher-email {\r\n    color: #666;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .selected-teacher {\r\n    margin-top: 20px;\r\n    padding: 15px;\r\n    background-color: #fff3e0;\r\n    border: 2px solid #fab45a;\r\n    border-radius: 8px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: flex-start;\r\n    gap: 15px;\r\n  }\r\n\r\n  .selected-teacher-info h5 {\r\n    margin: 0 0 10px 0;\r\n    color: #fab45a;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .selected-teacher-info p {\r\n    margin: 5px 0;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .selected-teacher-info p strong {\r\n    color: #333;\r\n  }\r\n\r\n  .btn-clear-small {\r\n    padding: 8px 16px;\r\n    background-color: #6c757d;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 4px;\r\n    cursor: pointer;\r\n    font-size: 0.85em;\r\n    white-space: nowrap;\r\n  }\r\n\r\n  .btn-clear-small:hover {\r\n    background-color: #545b62;\r\n  }\r\n\r\n  .teacher-info-container h3 {\r\n    margin: 0 0 20px 0;\r\n    color: #333;\r\n    border-bottom: 2px solid #fab45a;\r\n    padding-bottom: 10px;\r\n  }\r\n\r\n  .error-message {\r\n    background-color: #f8d7da;\r\n    color: #721c24;\r\n    padding: 10px;\r\n    border: 1px solid #f5c6cb;\r\n    border-radius: 5px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .loading {\r\n    text-align: center;\r\n    padding: 20px;\r\n    color: #666;\r\n    font-style: italic;\r\n  }\r\n\r\n  .teacher-overview {\r\n    background: #fff;\r\n    border: 2px solid #fab45a;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-top: 20px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .teacher-overview h4 {\r\n    margin: 0 0 20px 0;\r\n    color: #fab45a;\r\n    font-size: 1.2em;\r\n    border-bottom: 2px solid #fab45a;\r\n    padding-bottom: 10px;\r\n  }\r\n\r\n  .overview-section {\r\n    margin-bottom: 20px;\r\n    padding: 15px;\r\n    background: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .overview-section h5 {\r\n    margin: 0 0 15px 0;\r\n    color: #333;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .overview-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: 15px;\r\n  }\r\n\r\n  .overview-item {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 10px;\r\n    background: white;\r\n    border-radius: 4px;\r\n    border-left: 4px solid #fab45a;\r\n  }\r\n\r\n  .overview-label {\r\n    font-weight: 600;\r\n    color: #555;\r\n  }\r\n\r\n  .overview-value {\r\n    font-weight: bold;\r\n    color: #fab45a;\r\n  }\r\n\r\n  .subjects-overview {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 10px;\r\n  }\r\n\r\n  .subject-badge {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    padding: 10px;\r\n    background: #fab45a;\r\n    color: black;\r\n    border-radius: 6px;\r\n    min-width: 100px;\r\n  }\r\n\r\n  .subject-name {\r\n    font-weight: bold;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .subject-count {\r\n    font-size: 0.8em;\r\n    opacity: 0.8;\r\n  }\r\n\r\n  .students-overview {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\r\n    gap: 10px;\r\n  }\r\n\r\n  .student-item {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 8px 12px;\r\n    background: white;\r\n    border-radius: 4px;\r\n    border: 1px solid #ddd;\r\n  }\r\n\r\n  .student-name {\r\n    font-weight: 500;\r\n    color: #333;\r\n  }\r\n\r\n  .student-details {\r\n    color: #666;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .available-slots {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 8px;\r\n  }\r\n\r\n  .slot-item {\r\n    display: grid;\r\n    grid-template-columns: 100px 140px 1fr auto;\r\n    align-items: center;\r\n    padding: 10px;\r\n    border-radius: 4px;\r\n    gap: 10px;\r\n  }\r\n\r\n  .slot-item.available {\r\n    background: #d4edda;\r\n    border: 1px solid #c3e6cb;\r\n  }\r\n\r\n  .slot-day {\r\n    font-weight: 600;\r\n    color: #333;\r\n  }\r\n\r\n  .slot-time {\r\n    font-family: monospace;\r\n    color: #555;\r\n  }\r\n\r\n  .slot-status {\r\n    color: #155724;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .no-slots {\r\n    color: #666;\r\n    font-style: italic;\r\n    margin: 0;\r\n    text-align: center;\r\n    padding: 20px;\r\n  }\r\n\r\n  /* Teacher Comments Styles */\r\n  .teacher-comments {\r\n    background: #f8f9fa;\r\n    border: 2px solid #fab45a;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-top: 20px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .teacher-comments h4 {\r\n    margin: 0 0 15px 0;\r\n    color: #fab45a;\r\n    font-size: 1.2em;\r\n    border-bottom: 2px solid #fab45a;\r\n    padding-bottom: 10px;\r\n  }\r\n\r\n  .comments-summary {\r\n    margin-bottom: 20px;\r\n    padding: 15px;\r\n    background: white;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #fab45a;\r\n  }\r\n\r\n  .summary-header {\r\n    font-size: 1.1em;\r\n    color: #fab45a;\r\n    margin-bottom: 5px;\r\n  }\r\n\r\n  .comments-summary p {\r\n    margin: 0;\r\n    color: #666;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .comments-section {\r\n    margin-bottom: 20px;\r\n    padding: 15px;\r\n    background: white;\r\n    border-radius: 6px;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.05);\r\n  }\r\n\r\n  .comments-section h5 {\r\n    margin: 0 0 15px 0;\r\n    color: #333;\r\n    font-size: 1.1em;\r\n    border-bottom: 1px solid #eee;\r\n    padding-bottom: 8px;\r\n  }\r\n\r\n  .month-comparison {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\r\n    gap: 20px;\r\n  }\r\n\r\n  .month-data {\r\n    background: #f8f9fa;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #fab45a;\r\n  }\r\n\r\n  .month-data h6 {\r\n    margin: 0 0 12px 0;\r\n    color: #fab45a;\r\n    font-size: 1em;\r\n    font-weight: 600;\r\n  }\r\n\r\n  .month-data ul {\r\n    margin: 0;\r\n    padding-left: 15px;\r\n  }\r\n\r\n  .month-data li {\r\n    margin-bottom: 8px;\r\n    color: #555;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .metrics-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\r\n    gap: 15px;\r\n  }\r\n\r\n  .metric-item {\r\n    background: #f8f9fa;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #fab45a;\r\n  }\r\n\r\n  .metric-item strong {\r\n    display: block;\r\n    margin-bottom: 10px;\r\n    color: #333;\r\n    font-size: 0.95em;\r\n  }\r\n\r\n  .metric-bar {\r\n    background: #e9ecef;\r\n    border-radius: 10px;\r\n    height: 8px;\r\n    margin-bottom: 8px;\r\n    overflow: hidden;\r\n  }\r\n\r\n  .metric-fill {\r\n    background: linear-gradient(90deg, #fab45a, #e09a43);\r\n    height: 100%;\r\n    transition: width 0.3s ease;\r\n  }\r\n\r\n  .metric-item small {\r\n    color: #666;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .sample-comments {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 12px;\r\n  }\r\n\r\n  .comment-item {\r\n    padding: 12px;\r\n    background: #f8f9fa;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #fab45a;\r\n  }\r\n\r\n  .comment-item strong {\r\n    color: #fab45a;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .comment-item span {\r\n    color: #555;\r\n    font-style: italic;\r\n    margin-left: 8px;\r\n  }\r\n\r\n  .week-classes {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 10px;\r\n  }\r\n\r\n  .class-item {\r\n    display: grid;\r\n    grid-template-columns: 200px 1fr auto;\r\n    align-items: center;\r\n    padding: 12px;\r\n    border-radius: 6px;\r\n    gap: 15px;\r\n    border: 2px solid transparent;\r\n  }\r\n\r\n  .class-item.in-timeslot {\r\n    background: #d1ecf1;\r\n    border-color: #17a2b8;\r\n  }\r\n\r\n  .class-item.outside-timeslot {\r\n    background: #f8d7da;\r\n    border-color: #dc3545;\r\n  }\r\n\r\n  .class-time {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n  }\r\n\r\n  .class-day {\r\n    font-weight: 600;\r\n    color: #333;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .class-datetime {\r\n    font-family: monospace;\r\n    color: #555;\r\n    font-size: 0.85em;\r\n  }\r\n\r\n  .class-details {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n  }\r\n\r\n  .class-name {\r\n    font-weight: 500;\r\n    color: #333;\r\n    font-size: 0.95em;\r\n  }\r\n\r\n  .class-student {\r\n    color: #666;\r\n    font-size: 0.85em;\r\n  }\r\n\r\n  .timeslot-indicator {\r\n    background: #17a2b8;\r\n    color: white;\r\n    padding: 4px 8px;\r\n    border-radius: 12px;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n    white-space: nowrap;\r\n  }\r\n\r\n  .outside-indicator {\r\n    background: #dc3545;\r\n    color: white;\r\n    padding: 4px 8px;\r\n    border-radius: 12px;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n    white-space: nowrap;\r\n  }\r\n\r\n  /* Teaching Start Date styles */\r\n  .teaching-start-info {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 10px;\r\n  }\r\n\r\n  .start-date-item {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 12px;\r\n    background: white;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #fab45a;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .start-date-label {\r\n    font-weight: 600;\r\n    color: #555;\r\n  }\r\n\r\n  .start-date-value {\r\n    font-weight: bold;\r\n    color: #fab45a;\r\n    font-size: 1.05em;\r\n  }\r\n\r\n  .no-start-date {\r\n    color: #666;\r\n    font-style: italic;\r\n    margin: 0;\r\n    text-align: center;\r\n    padding: 20px;\r\n  }\r\n\r\n  .teacher-details {\r\n    background: #f8f9fa;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-top: 20px;\r\n  }\r\n\r\n  .teacher-details-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin-bottom: 20px;\r\n    flex-wrap: wrap;\r\n    gap: 10px;\r\n  }\r\n\r\n  .teacher-details h4 {\r\n    margin: 0;\r\n    color: #333;\r\n    font-size: 1.2em;\r\n  }\r\n\r\n  .edit-controls {\r\n    display: flex;\r\n    gap: 10px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .btn {\r\n    padding: 8px 16px;\r\n    border: none;\r\n    border-radius: 5px;\r\n    cursor: pointer;\r\n    font-size: 0.9em;\r\n    font-weight: 500;\r\n    transition: all 0.2s;\r\n    text-decoration: none;\r\n    display: inline-block;\r\n  }\r\n\r\n  .btn:disabled {\r\n    opacity: 0.6;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  .btn-primary {\r\n    background-color: #fab45a;\r\n    color: black;\r\n  }\r\n\r\n  .btn-primary:hover:not(:disabled) {\r\n    background-color: #e09a43;\r\n  }\r\n\r\n  .btn-secondary {\r\n    background-color: #6c757d;\r\n    color: white;\r\n  }\r\n\r\n  .btn-secondary:hover:not(:disabled) {\r\n    background-color: #545b62;\r\n  }\r\n\r\n  .btn-danger {\r\n    background-color: #dc3545;\r\n    color: white;\r\n  }\r\n\r\n  .btn-danger:hover:not(:disabled) {\r\n    background-color: #c82333;\r\n  }\r\n\r\n  .btn-small {\r\n    padding: 6px 12px;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .edit-input {\r\n    flex: 1;\r\n    padding: 6px 10px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .edit-input:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 2px rgba(250, 180, 90, 0.2);\r\n  }\r\n\r\n  .info-section {\r\n    margin-bottom: 25px;\r\n    background: white;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .info-section h5 {\r\n    margin: 0 0 15px 0;\r\n    color: #fab45a;\r\n    font-size: 1.1em;\r\n    border-bottom: 1px solid #eee;\r\n    padding-bottom: 5px;\r\n  }\r\n\r\n  .info-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\r\n    gap: 15px;\r\n  }\r\n\r\n  .info-item {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 8px 0;\r\n    border-bottom: 1px solid #f0f0f0;\r\n  }\r\n\r\n  .info-item:last-child {\r\n    border-bottom: none;\r\n  }\r\n\r\n  .qr-code-admin-item {\r\n    flex-wrap: wrap;\r\n    gap: 10px;\r\n  }\r\n\r\n  .qr-code-admin-preview {\r\n    margin-top: 16px;\r\n    padding: 12px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    background: #f8f9fa;\r\n  }\r\n\r\n  .qr-code-admin-preview img {\r\n    display: block;\r\n    max-width: 100%;\r\n    max-height: 600px;\r\n    margin: 0 auto 12px;\r\n    object-fit: contain;\r\n  }\r\n\r\n  .qr-code-admin-error {\r\n    margin-top: 12px;\r\n    color: #c0392b;\r\n    font-weight: 600;\r\n  }\r\n\r\n  .label {\r\n    font-weight: 600;\r\n    color: #555;\r\n    min-width: 140px;\r\n  }\r\n\r\n  .value {\r\n    color: #333;\r\n    text-align: right;\r\n    flex: 1;\r\n    word-break: break-word;\r\n  }\r\n\r\n  .timeslots-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\r\n    gap: 10px;\r\n  }\r\n\r\n  .timeslot-item {\r\n    background: #fff;\r\n    border: 1px solid #e0e0e0;\r\n    border-radius: 5px;\r\n    padding: 10px;\r\n    text-align: center;\r\n  }\r\n\r\n  .day {\r\n    display: block;\r\n    font-weight: 600;\r\n    color: #fab45a;\r\n    margin-bottom: 5px;\r\n  }\r\n\r\n  .time {\r\n    display: block;\r\n    color: #666;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .no-data {\r\n    color: #666;\r\n    font-style: italic;\r\n    margin: 0;\r\n  }\r\n\r\n\r\n  .timeslots-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin-bottom: 15px;\r\n  }\r\n\r\n  .timeslots-edit {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 10px;\r\n  }\r\n\r\n  .timeslot-edit-item {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    padding: 10px;\r\n    background: #f8f9fa;\r\n    border-radius: 6px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .day-select {\r\n    padding: 6px 10px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n    font-size: 0.9em;\r\n    min-width: 120px;\r\n  }\r\n\r\n  .time-input {\r\n    padding: 6px 10px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n    font-size: 0.9em;\r\n    min-width: 100px;\r\n  }\r\n\r\n  .day-select:focus,\r\n  .time-input:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 2px rgba(250, 180, 90, 0.2);\r\n  }\r\n\r\n  /* New styles for detailed teacher info */\r\n  .teacher-info-detailed {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 15px;\r\n  }\r\n\r\n  .info-description {\r\n    margin: 0 0 10px 0;\r\n    font-weight: 600;\r\n    color: #555;\r\n    font-size: 0.95em;\r\n  }\r\n\r\n  .subject-grade-combo {\r\n    background: #f8f9fa;\r\n    border: 1px solid #e9ecef;\r\n    border-radius: 6px;\r\n    padding: 15px;\r\n    border-left: 4px solid #fab45a;\r\n  }\r\n\r\n  .combo-header {\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .combo-title {\r\n    font-weight: 600;\r\n    color: #fab45a;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .combo-details {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 8px;\r\n  }\r\n\r\n  .combo-item {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 5px 0;\r\n  }\r\n\r\n  .combo-label {\r\n    font-weight: 500;\r\n    color: #666;\r\n    min-width: 100px;\r\n  }\r\n\r\n  .combo-value {\r\n    color: #333;\r\n    text-align: right;\r\n    flex: 1;\r\n    word-break: break-word;\r\n  }\r\n\r\n  .student-count-item {\r\n    margin-top: 12px;\r\n    padding-top: 12px;\r\n    border-top: 1px solid #eee;\r\n  }\r\n\r\n  /* Subject editing styles adapted from AccountPage */\r\n  .info-item-full-width {\r\n    grid-column: 1 / -1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 10px;\r\n    padding: 8px 0;\r\n    border-bottom: 1px solid #f0f0f0;\r\n  }\r\n\r\n  .subjects-container {\r\n    max-height: 180px;\r\n    overflow-y: auto;\r\n    overflow-x: hidden;\r\n    border: 1px solid #ddd;\r\n    border-radius: 8px;\r\n    padding: 12px;\r\n    background-color: #f8f9fa;\r\n    margin-top: 8px;\r\n    overscroll-behavior: contain;\r\n    touch-action: pan-y;\r\n    -webkit-overflow-scrolling: touch;\r\n    scrollbar-width: thin;\r\n    user-select: none;\r\n  }\r\n\r\n  .subject-item {\r\n    margin-bottom: 6px;\r\n    background-color: white;\r\n    border-radius: 6px;\r\n    border: 1px solid #f0f0f0;\r\n    transition: background-color 0.2s;\r\n    user-select: none;\r\n    -webkit-user-select: none;\r\n    -moz-user-select: none;\r\n    -ms-user-select: none;\r\n  }\r\n\r\n  .subject-item:hover {\r\n    background-color: #f5f5f5;\r\n    border-color: #e0e0e0;\r\n  }\r\n\r\n  .subject-label {\r\n    display: flex;\r\n    align-items: center;\r\n    padding: 8px;\r\n    cursor: pointer;\r\n    width: 100%;\r\n    position: relative;\r\n  }\r\n\r\n  .subject-label input[type=\"checkbox\"] {\r\n    position: absolute;\r\n    opacity: 0;\r\n    cursor: pointer;\r\n    height: 0;\r\n    width: 0;\r\n  }\r\n\r\n  .checkmark {\r\n    height: 24px;\r\n    width: 24px;\r\n    background-color: white;\r\n    border: 2px solid #333;\r\n    border-radius: 6px;\r\n    margin-right: 12px;\r\n    position: relative;\r\n    transition: all 0.3s ease;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  .subject-label input:checked ~ .checkmark {\r\n    background-color: #fab45a;\r\n    border-color: #fab45a;\r\n  }\r\n\r\n  .subject-label input:checked ~ .checkmark:after {\r\n    content: \"\";\r\n    position: absolute;\r\n    display: block;\r\n    left: 6px;\r\n    top: 2px;\r\n    width: 6px;\r\n    height: 12px;\r\n    border: solid white;\r\n    border-width: 0 3px 3px 0;\r\n    transform: rotate(45deg);\r\n  }\r\n\r\n  .subject-text {\r\n    font-size: 15px;\r\n    color: #444;\r\n    user-select: none;\r\n  }\r\n\r\n  .selected-subjects {\r\n    margin-top: 12px;\r\n    margin-bottom: 12px;\r\n  }\r\n  \r\n  .selected-subjects > div {\r\n    font-size: 14px;\r\n    font-weight: 500;\r\n    color: #666;\r\n    margin-bottom: 8px;\r\n  }\r\n\r\n  .selected-subject-tag {\r\n    display: inline-block;\r\n    background-color: #fab45a;\r\n    color: black;\r\n    padding: 6px 12px;\r\n    margin: 4px 4px 4px 0;\r\n    border-radius: 20px;\r\n    font-size: 14px;\r\n    font-weight: 400;\r\n  }\r\n\r\n  .remove-subject {\r\n    margin-left: 8px;\r\n    cursor: pointer;\r\n    font-weight: bold;\r\n    padding: 2px 4px;\r\n    border-radius: 50%;\r\n    transition: background-color 0.2s;\r\n  }\r\n\r\n  .remove-subject:hover {\r\n    background-color: rgba(255, 255, 255, 0.3);\r\n  }\r\n\r\n  @media (max-width: 768px) {\r\n    .teacher-info-container {\r\n      padding: 15px;\r\n    }\r\n\r\n    .month-selection {\r\n      flex-direction: column;\r\n      align-items: stretch;\r\n      gap: 15px;\r\n    }\r\n\r\n    .month-selector-container {\r\n      flex-direction: column;\r\n      align-items: stretch;\r\n      gap: 8px;\r\n    }\r\n\r\n    .month-select,\r\n    .year-select {\r\n      width: 100%;\r\n    }\r\n\r\n    .selected-period {\r\n      margin-left: 0;\r\n      justify-content: center;\r\n    }\r\n\r\n    .combo-item {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 5px;\r\n    }\r\n\r\n    .combo-label {\r\n      min-width: auto;\r\n    }\r\n\r\n    .combo-value {\r\n      text-align: left;\r\n    }\r\n\r\n    .overview-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .overview-item {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 5px;\r\n    }\r\n\r\n    .subjects-overview {\r\n      justify-content: center;\r\n    }\r\n\r\n    .students-overview {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .slot-item {\r\n      grid-template-columns: 1fr;\r\n      gap: 5px;\r\n      text-align: center;\r\n    }\r\n\r\n    .class-item {\r\n      grid-template-columns: 1fr;\r\n      gap: 10px;\r\n      text-align: left;\r\n    }\r\n\r\n    .class-time {\r\n      text-align: center;\r\n    }\r\n\r\n    .info-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .info-item {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 5px;\r\n    }\r\n\r\n    .label {\r\n      min-width: auto;\r\n    }\r\n\r\n    .value {\r\n      text-align: left;\r\n    }\r\n\r\n    .timeslots-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .month-comparison {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .metrics-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .start-date-item {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 8px;\r\n    }\r\n\r\n    .start-date-label {\r\n      font-size: 0.9em;\r\n    }\r\n\r\n    .start-date-value {\r\n      text-align: left;\r\n      font-size: 1em;\r\n    }\r\n\r\n    /* Mobile styles for subject editing */\r\n    .subjects-container {\r\n      max-height: 150px;\r\n    }\r\n    \r\n    .subject-label {\r\n      padding: 12px;\r\n    }\r\n    \r\n    .checkmark {\r\n      height: 28px;\r\n      width: 28px;\r\n      margin-right: 15px;\r\n    }\r\n    \r\n    .subject-label input:checked ~ .checkmark:after {\r\n      left: 8px;\r\n      top: 3px;\r\n      width: 7px;\r\n      height: 14px;\r\n    }\r\n    \r\n    .subject-text {\r\n      font-size: 16px;\r\n    }\r\n  }\r\n</style>\r\n\r\n","<script>\r\n  import { onMount } from 'svelte';\r\n  import { getApiBase } from './apiBase.js';\r\n\r\n  export let studentId = null;\r\n  export let embedded = false;\r\n  const apiBase = getApiBase();\r\n\r\n  let students = [];\r\n  let selectedStudent = null;\r\n  let studentDetails = null;\r\n  let studentOverview = null;\r\n  let studentComments = null;\r\n  let loading = false;\r\n  let loadingOverview = false;\r\n  let loadingComments = false;\r\n  let error = '';\r\n  let editMode = false;\r\n  let saving = false;\r\n  let studentQuery = '';\r\n  let filteredStudents = [];\r\n  let showStudentDropdown = false;\r\n  let expandedComments = new Set();\r\n  let showAttendanceDetails = false;\r\n  \r\n  // Sorted attendance details\r\n  let sortedLateClasses = [];\r\n  let sortedOnTimeClasses = [];\r\n  let sortedNoShowClasses = [];\r\n  \r\n  // Phone search functionality\r\n  let phoneQuery = '';\r\n  let filteredPhones = [];\r\n  let showPhoneDropdown = false;\r\n  let searchType = 'name'; // 'name' or 'phone'\r\n\r\n  // All transactions functionality\r\n  let showAllTransactionsModal = false;\r\n  let allTransactions = null;\r\n  let loadingAllTransactions = false;\r\n\r\n  // Month selection\r\n  let selectedMonth = new Date().getMonth() + 1; // 1-12\r\n  let selectedYear = new Date().getFullYear();\r\n  let availableYears = [];\r\n\r\n  // Editable student data\r\n  let editableData = {\r\n    user: {},\r\n    google_cal_searchable: '',\r\n    parent: {},\r\n    phone_number: '',\r\n    special_conditions: {}\r\n  };\r\n\r\n  let lastAutoSelectedStudentId = null;\r\n\r\n  onMount(async () => {\r\n    await loadStudents();\r\n    initializeAvailableYears();\r\n    if (embedded && studentId) {\r\n      await autoSelectStudentById(studentId);\r\n    }\r\n  });\r\n\r\n  async function autoSelectStudentById(id) {\r\n    if (!id) return;\r\n    const idNum = typeof id === 'string' ? parseInt(id, 10) : id;\r\n    if (Number.isNaN(idNum)) return;\r\n    if (!students || students.length === 0) return;\r\n    if (idNum === lastAutoSelectedStudentId) return;\r\n\r\n    const match = students.find(s => s.id === idNum);\r\n    if (!match) {\r\n      error = `Student with ID ${idNum} not found.`;\r\n      return;\r\n    }\r\n\r\n    lastAutoSelectedStudentId = idNum;\r\n    await selectStudent(match);\r\n  }\r\n\r\n  $: if (embedded && studentId && students.length > 0) {\r\n    const idNum = typeof studentId === 'string' ? parseInt(studentId, 10) : studentId;\r\n    if (!Number.isNaN(idNum) && idNum !== lastAutoSelectedStudentId) {\r\n      autoSelectStudentById(idNum);\r\n    }\r\n  }\r\n\r\n  function initializeAvailableYears() {\r\n    const currentYear = new Date().getFullYear();\r\n    // Show current year and previous 2 years\r\n    availableYears = [currentYear, currentYear - 1, currentYear - 2];\r\n  }\r\n\r\n  async function loadStudents() {\r\n    try {\r\n      const token = localStorage.getItem('jwtToken');\r\n      const url = `${apiBase}/studentplayground/api/students-list/`;\r\n      const response = await fetch(url, {\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        }\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        if (data.status === 'success') {\r\n          students = data.students || [];\r\n          filteredStudents = students;\r\n        } else {\r\n          throw new Error(data.message || 'Failed to load students');\r\n        }\r\n      } else {\r\n        if (response.status === 401) {\r\n          alert('Reikia prisijungti iš naujo.');\r\n          localStorage.removeItem('jwtToken');\r\n          window.location.href = '#/about';\r\n        } else {\r\n          throw new Error(`HTTP error! status: ${response.status}`);\r\n        }\r\n      }\r\n    } catch (err) {\r\n      console.error('Error loading students:', err);\r\n      error = `Error loading students: ${err.message}`;\r\n    }\r\n  }\r\n\r\n  async function selectStudent(student) {\r\n    selectedStudent = student;\r\n    studentQuery = student.name;\r\n    showStudentDropdown = false;\r\n    studentDetails = null;\r\n    studentOverview = null;\r\n    studentComments = null;\r\n    editMode = false;\r\n    loading = true;\r\n    error = '';\r\n    showAttendanceDetails = false;\r\n    \r\n    filteredStudents = students;\r\n\r\n    await loadStudentData();\r\n  }\r\n\r\n  async function loadStudentData() {\r\n    if (!selectedStudent) return;\r\n    \r\n    loading = true;\r\n    error = '';\r\n    \r\n    // Clear old data to force refresh\r\n    studentOverview = null;\r\n    studentComments = null;\r\n    showAttendanceDetails = false;\r\n    sortedLateClasses = [];\r\n    sortedOnTimeClasses = [];\r\n    sortedNoShowClasses = [];\r\n\r\n    try {\r\n      const token = localStorage.getItem('jwtToken');\r\n      \r\n      // Build query parameters for month/year\r\n      const monthParam = `?month=${selectedMonth}&year=${selectedYear}`;\r\n      \r\n      console.log(`Loading student data for ${getMonthName(selectedMonth)} ${selectedYear}`, monthParam);\r\n      \r\n      // Fetch detailed info, overview, and comments in parallel\r\n      const detailsUrl = `${apiBase}/studentplayground/api/student-detailed-info/${selectedStudent.id}/`;\r\n      const overviewUrl = `${apiBase}/studentplayground/api/student-overview/${selectedStudent.id}${monthParam}`;\r\n      const commentsUrl = `${apiBase}/studentplayground/api/student-comments/${selectedStudent.id}${monthParam}`;\r\n      const [detailsResponse, overviewResponse, commentsResponse] = await Promise.all([\r\n        fetch(detailsUrl, {\r\n          headers: {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json'\r\n          }\r\n        }),\r\n        fetch(overviewUrl, {\r\n          headers: {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json'\r\n          }\r\n        }),\r\n        fetch(commentsUrl, {\r\n          headers: {\r\n            'Authorization': `Bearer ${token}`,\r\n            'Content-Type': 'application/json'\r\n          }\r\n        })\r\n      ]);\r\n\r\n      if (detailsResponse.ok) {\r\n        const data = await detailsResponse.json();\r\n        if (data.status === 'success') {\r\n          studentDetails = data;\r\n          initializeEditableData(data);\r\n        } else {\r\n          throw new Error(data.message || 'Failed to load student details');\r\n        }\r\n      } else {\r\n        if (detailsResponse.status === 401) {\r\n          alert('Reikia prisijungti iš naujo.');\r\n          localStorage.removeItem('jwtToken');\r\n          window.location.href = '#/about';\r\n        } else {\r\n          throw new Error(`HTTP error! status: ${detailsResponse.status}`);\r\n        }\r\n      }\r\n\r\n      if (overviewResponse.ok) {\r\n        const overviewData = await overviewResponse.json();\r\n        if (overviewData.status === 'success') {\r\n          console.log('Student overview data received:', {\r\n            total_classes: overviewData.classes?.total_classes,\r\n            late_count: overviewData.classes?.late_classes_details?.length,\r\n            on_time_count: overviewData.classes?.on_time_classes_details?.length,\r\n            no_show_count: overviewData.classes?.no_show_classes_details?.length\r\n          });\r\n          studentOverview = overviewData;\r\n        } else {\r\n          console.warn('Failed to load student overview:', overviewData.message);\r\n        }\r\n      } else {\r\n        console.warn('Failed to fetch student overview');\r\n      }\r\n\r\n      if (commentsResponse.ok) {\r\n        const commentsData = await commentsResponse.json();\r\n        if (commentsData.status === 'success') {\r\n          console.log('Student comments data received:', {\r\n            comments_count: commentsData.comments_count,\r\n            comments_length: commentsData.comments?.length\r\n          });\r\n          studentComments = commentsData;\r\n        } else {\r\n          console.warn('Failed to load student comments:', commentsData.message);\r\n        }\r\n      } else {\r\n        console.warn('Failed to fetch student comments');\r\n      }\r\n\r\n    } catch (err) {\r\n      console.error('Error loading student data:', err);\r\n      error = `Error loading student data: ${err.message}`;\r\n    } finally {\r\n      loading = false;\r\n    }\r\n  }\r\n\r\n  function filterStudents() {\r\n    if (!studentQuery.trim()) {\r\n      filteredStudents = students;\r\n      showStudentDropdown = false;\r\n    } else {\r\n      const query = studentQuery.toLowerCase();\r\n      filteredStudents = students.filter(student => \r\n        student.name.toLowerCase().includes(query) ||\r\n        student.email.toLowerCase().includes(query)\r\n      );\r\n      showStudentDropdown = !selectedStudent && filteredStudents.length > 0;\r\n    }\r\n  }\r\n\r\n  // Handle month/year change\r\n  async function handleMonthChange() {\r\n    if (selectedStudent) {\r\n      await loadStudentData();\r\n    }\r\n  }\r\n\r\n  // Get month name for display\r\n  function getMonthName(monthNum) {\r\n    const months = [\r\n      'January', 'February', 'March', 'April', 'May', 'June',\r\n      'July', 'August', 'September', 'October', 'November', 'December'\r\n    ];\r\n    return months[monthNum - 1];\r\n  }\r\n\r\n  function initializeEditableData(data) {\r\n    editableData = {\r\n      user: { ...data.user },\r\n      google_cal_searchable: data.google_cal_searchable || '',\r\n      parent: { ...data.parent },\r\n      phone_number: data.phone_number || '',\r\n      special_conditions: { ...data.special_conditions }\r\n    };\r\n  }\r\n\r\n  function toggleEditMode() {\r\n    if (editMode) {\r\n      if (studentDetails) {\r\n        initializeEditableData(studentDetails);\r\n      }\r\n    }\r\n    editMode = !editMode;\r\n    error = '';\r\n  }\r\n\r\n  async function saveStudentInfo() {\r\n    if (!selectedStudent) {\r\n      error = 'No student selected';\r\n      return;\r\n    }\r\n\r\n    saving = true;\r\n    error = '';\r\n\r\n    try {\r\n      const token = localStorage.getItem('jwtToken');\r\n      const response = await fetch(`${apiBase}/studentplayground/api/update-student-detailed-info/${selectedStudent.id}/`, {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        },\r\n        body: JSON.stringify(editableData)\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        if (data.status === 'success') {\r\n          studentDetails = data;\r\n          initializeEditableData(data);\r\n          editMode = false;\r\n          alert('Student information updated successfully!');\r\n        } else {\r\n          throw new Error(data.message || 'Failed to save student information');\r\n        }\r\n      } else {\r\n        if (response.status === 401) {\r\n          alert('Reikia prisijungti iš naujo.');\r\n          localStorage.removeItem('jwtToken');\r\n          window.location.href = '#/about';\r\n        } else {\r\n          throw new Error(`HTTP error! status: ${response.status}`);\r\n        }\r\n      }\r\n    } catch (err) {\r\n      console.error('Error saving student information:', err);\r\n      error = `Error saving student information: ${err.message}`;\r\n    } finally {\r\n      saving = false;\r\n    }\r\n  }\r\n\r\n  function toggleCommentExpansion(commentId) {\r\n    if (expandedComments.has(commentId)) {\r\n      expandedComments.delete(commentId);\r\n    } else {\r\n      expandedComments.add(commentId);\r\n    }\r\n    expandedComments = expandedComments; // Trigger reactivity\r\n  }\r\n\r\n  // Function to sort attendance details by scheduled time\r\n  function sortAttendanceByTime(attendanceArray) {\r\n    if (!attendanceArray || !Array.isArray(attendanceArray)) {\r\n      return [];\r\n    }\r\n    \r\n    return [...attendanceArray].sort((a, b) => {\r\n      // Compare scheduled_time strings directly - they should be in a comparable format\r\n      if (!a.scheduled_time || !b.scheduled_time) {\r\n        return 0;\r\n      }\r\n      \r\n      try {\r\n        const timeA = parseDateTime(a.scheduled_time);\r\n        const timeB = parseDateTime(b.scheduled_time);\r\n        if (timeA && timeB) {\r\n          return timeA.getTime() - timeB.getTime();\r\n        } else {\r\n          // Fallback to string comparison if date parsing fails\r\n          return a.scheduled_time.localeCompare(b.scheduled_time);\r\n        }\r\n      } catch (error) {\r\n        // Fallback to string comparison if date parsing fails\r\n        return a.scheduled_time.localeCompare(b.scheduled_time);\r\n      }\r\n    });\r\n  }\r\n\r\n  // Helper function to parse datetime and return a Date object for Lithuanian timezone formatting\r\n  function parseDateTime(datetime) {\r\n    if (!datetime) return null;\r\n    \r\n    try {\r\n      let date;\r\n      \r\n      if (datetime.includes('T')) {\r\n        // ISO format datetime - handle various formats\r\n        if (datetime.endsWith('Z')) {\r\n          // Handle non-standard format like \"2025-09-10T090000Z\"\r\n          if (/T\\d{6}Z$/.test(datetime)) {\r\n            // Convert HHMMSS to HH:MM:SS format\r\n            const match = datetime.match(/^(.+T)(\\d{2})(\\d{2})(\\d{2})(Z)$/);\r\n            if (match) {\r\n              const formattedDateTime = `${match[1]}${match[2]}:${match[3]}:${match[4]}${match[5]}`;\r\n              date = new Date(formattedDateTime);\r\n            } else {\r\n              date = new Date(datetime);\r\n            }\r\n          } else {\r\n            date = new Date(datetime);\r\n          }\r\n        } else {\r\n          // If no Z suffix, assume it's UTC time without the Z indicator\r\n          date = new Date(datetime + 'Z');\r\n        }\r\n      } else {\r\n        // Space-separated format, assume UTC\r\n        const parts = datetime.split(\" \");\r\n        if (parts.length >= 2) {\r\n          // Handle format like \"2025-09-10 09:00\"\r\n          const isoString = `${parts[0]}T${parts[1]}Z`;\r\n          date = new Date(isoString);\r\n        } else {\r\n          // Fallback for partial datetime\r\n          date = new Date(datetime);\r\n        }\r\n      }\r\n      \r\n      return date;\r\n      \r\n    } catch (error) {\r\n      console.warn('Error parsing datetime:', datetime, error);\r\n      return new Date(datetime); // Fallback to original\r\n    }\r\n  }\r\n\r\n  // Format datetime with Lithuanian timezone conversion\r\n  function formatDateTime(datetime) {\r\n    if (!datetime) return '';\r\n    \r\n    try {\r\n      const date = parseDateTime(datetime);\r\n      if (!date || isNaN(date.getTime())) {\r\n        console.warn('formatDateTime: Failed to parse date, returning original:', datetime);\r\n        return datetime;\r\n      }\r\n      \r\n      // Use manual timezone conversion for better browser compatibility\r\n      const lithuanianTime = new Date(date.getTime() + getTimezoneOffset());\r\n      \r\n      const year = lithuanianTime.getUTCFullYear();\r\n      const month = (lithuanianTime.getUTCMonth() + 1).toString().padStart(2, '0');\r\n      const day = lithuanianTime.getUTCDate().toString().padStart(2, '0');\r\n      const hours = lithuanianTime.getUTCHours().toString().padStart(2, '0');\r\n      const minutes = lithuanianTime.getUTCMinutes().toString().padStart(2, '0');\r\n      \r\n      // Get day of week in Lithuanian\r\n      const dayNames = ['Sek', 'Pir', 'Ant', 'Tre', 'Ket', 'Pen', 'Šeš'];\r\n      const dayName = dayNames[lithuanianTime.getUTCDay()];\r\n      \r\n      return `${dayName} ${year}-${month}-${day} ${hours}:${minutes}`;\r\n      \r\n    } catch (error) {\r\n      console.warn('Error formatting datetime:', datetime, error);\r\n      return datetime;\r\n    }\r\n  }\r\n\r\n  // Format time only (HH:MM) with Lithuanian timezone conversion\r\n  function formatTimeOnly(datetime) {\r\n    if (!datetime) return '';\r\n    \r\n    try {\r\n      const date = parseDateTime(datetime);\r\n      if (!date || isNaN(date.getTime())) {\r\n        console.warn('formatTimeOnly: Failed to parse date or invalid date, using fallback parsing for:', datetime);\r\n        return extractTimeWithTimezone(datetime);\r\n      }\r\n      \r\n      // Use manual timezone conversion for better browser compatibility\r\n      const lithuanianTime = new Date(date.getTime() + getTimezoneOffset());\r\n      const hours = lithuanianTime.getUTCHours().toString().padStart(2, '0');\r\n      const minutes = lithuanianTime.getUTCMinutes().toString().padStart(2, '0');\r\n      return `${hours}:${minutes}`;\r\n      \r\n    } catch (error) {\r\n      console.warn('Error formatting time:', datetime, error);\r\n      return extractTimeWithTimezone(datetime);\r\n    }\r\n  }\r\n  \r\n  // Helper function to get Lithuanian timezone offset in milliseconds\r\n  function getTimezoneOffset() {\r\n    // Lithuania is UTC+2 in winter, UTC+3 in summer (DST)\r\n    // Use a simple approximation based on current date\r\n    const now = new Date();\r\n    const year = now.getFullYear();\r\n    \r\n    // DST in Lithuania: last Sunday in March to last Sunday in October\r\n    const dstStart = getLastSundayOfMonth(year, 2); // March (0-indexed)\r\n    const dstEnd = getLastSundayOfMonth(year, 9);   // October (0-indexed)\r\n    \r\n    if (now >= dstStart && now < dstEnd) {\r\n      return 3 * 60 * 60 * 1000; // UTC+3 (summer time)\r\n    } else {\r\n      return 2 * 60 * 60 * 1000; // UTC+2 (standard time)\r\n    }\r\n  }\r\n  \r\n  // Helper function to get the last Sunday of a given month\r\n  function getLastSundayOfMonth(year, month) {\r\n    const lastDay = new Date(year, month + 1, 0); // Last day of the month\r\n    const lastSunday = new Date(lastDay);\r\n    lastSunday.setDate(lastDay.getDate() - lastDay.getDay()); // Go back to last Sunday\r\n    lastSunday.setHours(1, 0, 0, 0); // Set to 1 AM to avoid midnight edge cases\r\n    return lastSunday;\r\n  }\r\n  \r\n  // Fallback function to extract time and convert timezone\r\n  function extractTimeWithTimezone(datetime) {\r\n    if (typeof datetime === 'string') {\r\n      // Extract time from formats like \"2025-09-10 09:00\" or \"2025-09-10T09:00:00\"\r\n      const timeMatch = datetime.match(/(\\d{2}):(\\d{2})/);\r\n      if (timeMatch) {\r\n        const hours = parseInt(timeMatch[1]);\r\n        const minutes = timeMatch[2];\r\n        \r\n        // Determine if we're in DST period (approximation)\r\n        const now = new Date();\r\n        const isDST = now.getMonth() >= 2 && now.getMonth() <= 9; // Rough DST period\r\n        const offset = isDST ? 3 : 2; // UTC+3 in summer, UTC+2 in winter\r\n        \r\n        const lithuanianHours = (hours + offset) % 24;\r\n        return `${lithuanianHours.toString().padStart(2, '0')}:${minutes}`;\r\n      }\r\n    }\r\n    \r\n    return datetime; // Ultimate fallback to original\r\n  }\r\n\r\n  // Format date only with Lithuanian timezone conversion\r\n  function formatDateOnly(datetime) {\r\n    if (!datetime) return '';\r\n    \r\n    try {\r\n      const date = parseDateTime(datetime);\r\n      if (!date || isNaN(date.getTime())) {\r\n        console.warn('formatDateOnly: Failed to parse date, returning original:', datetime);\r\n        return datetime;\r\n      }\r\n      \r\n      // Use manual timezone conversion for better browser compatibility\r\n      const lithuanianTime = new Date(date.getTime() + getTimezoneOffset());\r\n      \r\n      const year = lithuanianTime.getUTCFullYear();\r\n      const month = (lithuanianTime.getUTCMonth() + 1).toString().padStart(2, '0');\r\n      const day = lithuanianTime.getUTCDate().toString().padStart(2, '0');\r\n      \r\n      return `${year}-${month}-${day}`;\r\n      \r\n    } catch (error) {\r\n      console.warn('Error formatting date:', datetime, error);\r\n      return datetime;\r\n    }\r\n  }\r\n\r\n  // Format compact date and time for attendance display (MM-DD HH:MM)\r\n  function formatCompactDateTime(datetime) {\r\n    if (!datetime) return '';\r\n    \r\n    try {\r\n      const date = parseDateTime(datetime);\r\n      if (!date || isNaN(date.getTime())) {\r\n        console.warn('formatCompactDateTime: Failed to parse date, using fallback for:', datetime);\r\n        return extractTimeWithTimezone(datetime);\r\n      }\r\n      \r\n      // Use manual timezone conversion for better browser compatibility\r\n      const lithuanianTime = new Date(date.getTime() + getTimezoneOffset());\r\n      \r\n      const month = (lithuanianTime.getUTCMonth() + 1).toString().padStart(2, '0');\r\n      const day = lithuanianTime.getUTCDate().toString().padStart(2, '0');\r\n      const hours = lithuanianTime.getUTCHours().toString().padStart(2, '0');\r\n      const minutes = lithuanianTime.getUTCMinutes().toString().padStart(2, '0');\r\n      \r\n      return `${month}-${day} ${hours}:${minutes}`;\r\n      \r\n    } catch (error) {\r\n      console.warn('Error formatting compact datetime:', datetime, error);\r\n      return extractTimeWithTimezone(datetime);\r\n    }\r\n  }\r\n\r\n  async function searchPhoneNumbers() {\r\n    if (!phoneQuery.trim()) {\r\n      filteredPhones = [];\r\n      showPhoneDropdown = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const token = localStorage.getItem('jwtToken');\r\n      const response = await fetch(`${apiBase}/studentplayground/api/students-list/?search=${encodeURIComponent(phoneQuery)}&type=phone`, {\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        }\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        if (data.status === 'success' && data.search_type === 'phone') {\r\n          filteredPhones = data.phones || [];\r\n          showPhoneDropdown = filteredPhones.length > 0;\r\n        }\r\n      } else {\r\n        if (response.status === 401) {\r\n          alert('Reikia prisijungti iš naujo.');\r\n          localStorage.removeItem('jwtToken');\r\n          window.location.href = '#/about';\r\n        }\r\n      }\r\n    } catch (err) {\r\n      console.error('Error searching phone numbers:', err);\r\n    }\r\n  }\r\n\r\n  async function selectStudentByPhone(phoneItem) {\r\n    // Find the student by ID\r\n    const token = localStorage.getItem('jwtToken');\r\n    \r\n    try {\r\n      const response = await fetch(`${apiBase}/studentplayground/api/students-list/`, {\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        }\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        if (data.status === 'success') {\r\n          const student = data.students.find(s => s.id === phoneItem.student_id);\r\n          if (student) {\r\n            // Copy exact same logic as selectStudent for name search\r\n            selectedStudent = student;\r\n            phoneQuery = phoneItem.phone;\r\n            showPhoneDropdown = false;\r\n            studentDetails = null;\r\n            studentOverview = null;\r\n            studentComments = null;\r\n            editMode = false;\r\n            loading = true;\r\n            error = '';\r\n            showAttendanceDetails = false;\r\n            \r\n            // Clear name search\r\n            studentQuery = '';\r\n            showStudentDropdown = false;\r\n            filteredStudents = students;\r\n\r\n            // Load student data using the new function\r\n            await loadStudentData();\r\n          }\r\n        }\r\n      }\r\n    } catch (err) {\r\n      console.error('Error selecting student by phone:', err);\r\n    }\r\n  }\r\n\r\n  function switchSearchType(type) {\r\n    searchType = type;\r\n    \r\n    // Clear the other search\r\n    if (type === 'name') {\r\n      phoneQuery = '';\r\n      showPhoneDropdown = false;\r\n      filteredPhones = [];\r\n    } else {\r\n      studentQuery = '';\r\n      showStudentDropdown = false;\r\n      filteredStudents = students;\r\n    }\r\n    \r\n    // Clear selection if switching types\r\n    if (selectedStudent) {\r\n      selectedStudent = null;\r\n      studentDetails = null;\r\n      studentOverview = null;\r\n      studentComments = null;\r\n      expandedComments = new Set();\r\n      editMode = false;\r\n      showAttendanceDetails = false;\r\n    }\r\n  }\r\n\r\n  async function fetchAllTransactions() {\r\n    if (!selectedStudent) {\r\n      return;\r\n    }\r\n\r\n    loadingAllTransactions = true;\r\n    \r\n    try {\r\n      const token = localStorage.getItem('jwtToken');\r\n      const response = await fetch(`${apiBase}/studentplayground/api/student-all-transactions/${selectedStudent.id}/`, {\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json'\r\n        }\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        if (data.status === 'success') {\r\n          allTransactions = data;\r\n          showAllTransactionsModal = true;\r\n        } else {\r\n          throw new Error(data.message || 'Failed to load all transactions');\r\n        }\r\n      } else {\r\n        if (response.status === 401) {\r\n          alert('Reikia prisijungti iš naujo.');\r\n          localStorage.removeItem('jwtToken');\r\n          window.location.href = '#/about';\r\n        } else {\r\n          throw new Error(`HTTP error! status: ${response.status}`);\r\n        }\r\n      }\r\n    } catch (err) {\r\n      console.error('Error loading all transactions:', err);\r\n      alert(`Error loading all transactions: ${err.message}`);\r\n    } finally {\r\n      loadingAllTransactions = false;\r\n    }\r\n  }\r\n\r\n  function closeAllTransactionsModal() {\r\n    showAllTransactionsModal = false;\r\n    allTransactions = null;\r\n  }\r\n\r\n  // Reactive statement to filter students when search query changes\r\n  $: if (studentQuery !== undefined) {\r\n    filterStudents();\r\n  }\r\n\r\n  // Reactive statement for phone search\r\n  $: if (phoneQuery !== undefined && searchType === 'phone') {\r\n    searchPhoneNumbers();\r\n  }\r\n\r\n  // Reactive statements to sort attendance details when data changes\r\n  $: if (studentOverview?.classes?.late_classes_details) {\r\n    sortedLateClasses = sortAttendanceByTime(studentOverview.classes.late_classes_details);\r\n  }\r\n\r\n  $: if (studentOverview?.classes?.on_time_classes_details) {\r\n    sortedOnTimeClasses = sortAttendanceByTime(studentOverview.classes.on_time_classes_details);\r\n  }\r\n\r\n  $: if (studentOverview?.classes?.no_show_classes_details) {\r\n    sortedNoShowClasses = sortAttendanceByTime(studentOverview.classes.no_show_classes_details);\r\n  }\r\n</script>\r\n\r\n<div class=\"student-info-container {embedded ? 'embedded' : ''}\">\r\n  <h3>Student Information Management</h3>\r\n  \r\n  {#if error}\r\n    <div class=\"error-message\">\r\n      {error}\r\n    </div>\r\n  {/if}\r\n\r\n  {#if !embedded}\r\n  <!-- Student Selection -->\r\n  <div class=\"selection-section\">\r\n    <h4>Step 1: Select Student</h4>\r\n    \r\n    <!-- Search Type Toggle -->\r\n    <div class=\"search-type-toggle\">\r\n      <button \r\n        type=\"button\" \r\n        class=\"toggle-btn {searchType === 'name' ? 'active' : ''}\"\r\n        on:click={() => switchSearchType('name')}\r\n      >\r\n        🔍 Search by Name\r\n      </button>\r\n      <button \r\n        type=\"button\" \r\n        class=\"toggle-btn {searchType === 'phone' ? 'active' : ''}\"\r\n        on:click={() => switchSearchType('phone')}\r\n      >\r\n        📱 Search by Phone\r\n      </button>\r\n    </div>\r\n\r\n    <!-- Name Search -->\r\n    {#if searchType === 'name'}\r\n      <div class=\"input-container\">\r\n        <input \r\n          type=\"text\" \r\n          placeholder=\"Search student by name...\"\r\n          bind:value={studentQuery}\r\n          on:input={() => {\r\n            if (selectedStudent && studentQuery !== selectedStudent.name) {\r\n              selectedStudent = null;\r\n              showStudentDropdown = true;\r\n            } else if (!selectedStudent) {\r\n              showStudentDropdown = studentQuery.trim().length > 0;\r\n            }\r\n          }}\r\n          autocomplete=\"off\"\r\n          class=\"search-input\"\r\n        />\r\n        \r\n        {#if showStudentDropdown}\r\n          <ul class=\"autocomplete-list\">\r\n            {#each filteredStudents.slice(0, 8) as student}\r\n              <li>\r\n                <button\r\n                  type=\"button\"\r\n                  on:click={() => selectStudent(student)}\r\n                  on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectStudent(student)}\r\n                >\r\n                  <div class=\"student-option\">\r\n                    <span class=\"student-name\">{student.name}</span>\r\n                    {#if student.email}\r\n                      <span class=\"student-email\">{student.email}</span>\r\n                    {/if}\r\n                  </div>\r\n                </button>\r\n              </li>\r\n            {/each}\r\n          </ul>\r\n        {/if}\r\n      </div>\r\n    {/if}\r\n\r\n    <!-- Phone Search -->\r\n    {#if searchType === 'phone'}\r\n      <div class=\"input-container\">\r\n        <input \r\n          type=\"text\" \r\n          placeholder=\"Search student by phone number...\"\r\n          bind:value={phoneQuery}\r\n          on:input={() => {\r\n            if (selectedStudent && phoneQuery !== selectedStudent.phone) {\r\n              selectedStudent = null;\r\n            }\r\n          }}\r\n          autocomplete=\"off\"\r\n          class=\"search-input\"\r\n        />\r\n        \r\n        {#if showPhoneDropdown}\r\n          <ul class=\"autocomplete-list\">\r\n            {#each filteredPhones.slice(0, 8) as phoneItem}\r\n              <li>\r\n                <button\r\n                  type=\"button\"\r\n                  on:click={() => selectStudentByPhone(phoneItem)}\r\n                  on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectStudentByPhone(phoneItem)}\r\n                >\r\n                  <div class=\"phone-option\">\r\n                    <span class=\"phone-number\">📱 {phoneItem.phone}</span>\r\n                    <span class=\"phone-student-name\">{phoneItem.student_name}</span>\r\n                    {#if phoneItem.student_email}\r\n                      <span class=\"phone-student-email\">{phoneItem.student_email}</span>\r\n                    {/if}\r\n                  </div>\r\n                </button>\r\n              </li>\r\n            {/each}\r\n          </ul>\r\n        {/if}\r\n      </div>\r\n    {/if}\r\n    \r\n    {#if selectedStudent}\r\n      <div class=\"selected-student\">\r\n        <div class=\"selected-student-info\">\r\n          <h5>Selected Student</h5>\r\n          <p><strong>Name:</strong> {selectedStudent.name}</p>\r\n          {#if selectedStudent.email}\r\n            <p><strong>Email:</strong> {selectedStudent.email}</p>\r\n          {/if}\r\n        </div>\r\n        \r\n        <button \r\n          type=\"button\" \r\n          class=\"btn-clear-small\" \r\n          on:click={() => { \r\n            selectedStudent = null; \r\n            studentQuery = ''; \r\n            phoneQuery = '';\r\n            showStudentDropdown = false; \r\n            showPhoneDropdown = false;\r\n            studentDetails = null;\r\n            studentOverview = null;\r\n            studentComments = null;\r\n            expandedComments = new Set();\r\n            editMode = false;\r\n            showAttendanceDetails = false;\r\n            searchType = 'name';\r\n          }}\r\n        >\r\n          Clear Selection\r\n        </button>\r\n      </div>\r\n    {/if}\r\n  </div>\r\n  {/if}\r\n\r\n  <!-- Month Selection -->\r\n  <div class=\"selection-section\">\r\n    <h4>Step 2: Select Month & Year</h4>\r\n    <div class=\"month-selection\">\r\n      <div class=\"month-selector-container\">\r\n        <label for=\"month-select\" class=\"selector-label\">Month:</label>\r\n        <select \r\n          id=\"month-select\"\r\n          bind:value={selectedMonth} \r\n          on:change={handleMonthChange}\r\n          class=\"month-select\"\r\n        >\r\n          <option value={1}>January</option>\r\n          <option value={2}>February</option>\r\n          <option value={3}>March</option>\r\n          <option value={4}>April</option>\r\n          <option value={5}>May</option>\r\n          <option value={6}>June</option>\r\n          <option value={7}>July</option>\r\n          <option value={8}>August</option>\r\n          <option value={9}>September</option>\r\n          <option value={10}>October</option>\r\n          <option value={11}>November</option>\r\n          <option value={12}>December</option>\r\n        </select>\r\n      </div>\r\n      \r\n      <div class=\"month-selector-container\">\r\n        <label for=\"year-select\" class=\"selector-label\">Year:</label>\r\n        <select \r\n          id=\"year-select\"\r\n          bind:value={selectedYear} \r\n          on:change={handleMonthChange}\r\n          class=\"year-select\"\r\n        >\r\n          {#each availableYears as year}\r\n            <option value={year}>{year}</option>\r\n          {/each}\r\n        </select>\r\n      </div>\r\n\r\n      <div class=\"selected-period\">\r\n        <span class=\"period-label\">Viewing data for:</span>\r\n        <span class=\"period-value\">{getMonthName(selectedMonth)} {selectedYear}</span>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Loading Indicator -->\r\n  {#if loading}\r\n    <div class=\"loading\">\r\n      Loading student details...\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Student Overview Display -->\r\n  {#if studentOverview && !loading}\r\n    <div class=\"student-overview\">\r\n      <h4>Student Overview: {studentOverview.student_name} - {getMonthName(selectedMonth)} {selectedYear}</h4>\r\n      \r\n      <!-- Balance Information -->\r\n      <div class=\"overview-section\">\r\n        <h5>💰 Balance Information</h5>\r\n        <div class=\"overview-grid\">\r\n          <div class=\"overview-item\">\r\n            <span class=\"overview-label\">Current Balance:</span>\r\n            <span class=\"overview-value\">€{studentOverview.balance.current_balance}</span>\r\n          </div>\r\n          <div class=\"overview-item\">\r\n            <span class=\"overview-label\">Recent Transactions:</span>\r\n            <span class=\"overview-value\">{studentOverview.balance.recent_transactions_count}</span>\r\n          </div>\r\n        </div>\r\n        \r\n        {#if studentOverview.balance.recent_transactions.length > 0}\r\n          <div class=\"transactions-list\">\r\n            <h6>Recent Transactions:</h6>\r\n            {#each studentOverview.balance.recent_transactions as transaction}\r\n              <div class=\"transaction-item\">\r\n                <span class=\"transaction-amount\">€{transaction.amount}</span>\r\n                <span class=\"transaction-type\">{transaction.transaction_type}</span>\r\n                <span class=\"transaction-date\">{formatDateOnly(transaction.date)}</span>\r\n              </div>\r\n            {/each}\r\n            \r\n            <!-- View All Transactions Button -->\r\n            <div class=\"view-all-transactions-btn-container\">\r\n              <button \r\n                type=\"button\"\r\n                class=\"btn-view-all-transactions\"\r\n                on:click={fetchAllTransactions}\r\n                disabled={loadingAllTransactions}\r\n              >\r\n                {loadingAllTransactions ? 'Loading...' : '📋 View All Transactions'}\r\n              </button>\r\n            </div>\r\n          </div>\r\n        {/if}\r\n      </div>\r\n\r\n      <!-- Class Attendance -->\r\n      <div class=\"overview-section\">\r\n        <h5>📚 Class Attendance</h5>\r\n        <div class=\"overview-grid\">\r\n          <div class=\"overview-item\">\r\n            <span class=\"overview-label\">Total Classes:</span>\r\n            <span class=\"overview-value\">{studentOverview.classes.total_classes}</span>\r\n          </div>\r\n          <div class=\"overview-item\">\r\n            <span class=\"overview-label\">Attended:</span>\r\n            <span class=\"overview-value\">{studentOverview.classes.attended_classes}</span>\r\n          </div>\r\n          <div class=\"overview-item\">\r\n            <span class=\"overview-label\">Attendance Rate:</span>\r\n            <span class=\"overview-value\">{studentOverview.classes.attendance_rate}%</span>\r\n          </div>\r\n          <div class=\"overview-item\">\r\n            <span class=\"overview-label\">Late Attendances:</span>\r\n            <span class=\"overview-value\">{studentOverview.classes.late_attendance_count || 0}</span>\r\n          </div>\r\n        </div>\r\n        \r\n        <!-- Expandable Attendance Details -->\r\n        {#if (sortedLateClasses && sortedLateClasses.length > 0) || (sortedNoShowClasses && sortedNoShowClasses.length > 0) || (sortedOnTimeClasses && sortedOnTimeClasses.length > 0)}\r\n          <div class=\"attendance-details-toggle\">\r\n            <button \r\n              type=\"button\"\r\n              class=\"btn-toggle-details\"\r\n              on:click={() => showAttendanceDetails = !showAttendanceDetails}\r\n            >\r\n              {showAttendanceDetails ? '▼' : '▶'} View Attendance Details\r\n            </button>\r\n          </div>\r\n          \r\n          {#if showAttendanceDetails}\r\n            <div class=\"attendance-details\">\r\n              \r\n              <!-- Late Attendances -->\r\n              {#if sortedLateClasses && sortedLateClasses.length > 0}\r\n                <div class=\"attendance-category\">\r\n                  <h6>🕐 Late Attendances ({sortedLateClasses.length})</h6>\r\n                  <div class=\"attendance-list\">\r\n                    {#each sortedLateClasses as lateClass}\r\n                      <div class=\"attendance-item late-item\">\r\n                        <div class=\"attendance-header\">\r\n                          <span class=\"class-name\">{lateClass.class_name}</span>\r\n                          <span class=\"class-teacher\">{lateClass.teacher}</span>\r\n                          <span class=\"late-badge\">{lateClass.minutes_late} min late</span>\r\n                        </div>\r\n                        <div class=\"attendance-times\">\r\n                          <span class=\"time-info\">\r\n                            <strong>Scheduled:</strong> {formatCompactDateTime(lateClass.scheduled_time)}\r\n                          </span>\r\n                          <span class=\"time-info\">\r\n                            <strong>Attended:</strong> {formatCompactDateTime(lateClass.attendance_time)}\r\n                          </span>\r\n                        </div>\r\n                      </div>\r\n                    {/each}\r\n                  </div>\r\n                </div>\r\n              {/if}\r\n              \r\n              <!-- On-Time Attendances -->\r\n              {#if sortedOnTimeClasses && sortedOnTimeClasses.length > 0}\r\n                <div class=\"attendance-category\">\r\n                  <h6>✅ On-Time Attendances ({sortedOnTimeClasses.length})</h6>\r\n                  <div class=\"attendance-list\">\r\n                    {#each sortedOnTimeClasses as onTimeClass}\r\n                      <div class=\"attendance-item on-time-item\">\r\n                        <div class=\"attendance-header\">\r\n                          <span class=\"class-name\">{onTimeClass.class_name}</span>\r\n                          <span class=\"class-teacher\">{onTimeClass.teacher}</span>\r\n                          <span class=\"on-time-badge\">\r\n                            {onTimeClass.minutes_early > 0 ? `${onTimeClass.minutes_early} min early` : 'On Time'}\r\n                          </span>\r\n                        </div>\r\n                        <div class=\"attendance-times\">\r\n                          <span class=\"time-info\">\r\n                            <strong>Scheduled:</strong> {formatCompactDateTime(onTimeClass.scheduled_time)}\r\n                          </span>\r\n                          <span class=\"time-info\">\r\n                            <strong>Attended:</strong> {formatCompactDateTime(onTimeClass.attendance_time)}\r\n                          </span>\r\n                        </div>\r\n                      </div>\r\n                    {/each}\r\n                  </div>\r\n                </div>\r\n              {/if}\r\n              \r\n              <!-- No Shows -->\r\n              {#if sortedNoShowClasses && sortedNoShowClasses.length > 0}\r\n                <div class=\"attendance-category\">\r\n                  <h6>❌ No Shows ({sortedNoShowClasses.length})</h6>\r\n                  <div class=\"attendance-list\">\r\n                    {#each sortedNoShowClasses as noShowClass}\r\n                      <div class=\"attendance-item no-show-item\">\r\n                        <div class=\"attendance-header\">\r\n                          <span class=\"class-name\">{noShowClass.class_name}</span>\r\n                          <span class=\"class-teacher\">{noShowClass.teacher}</span>\r\n                          <span class=\"no-show-badge\">No Show</span>\r\n                        </div>\r\n                        <div class=\"attendance-times\">\r\n                          <span class=\"time-info\">\r\n                            <strong>Scheduled:</strong> {formatCompactDateTime(noShowClass.scheduled_time)}\r\n                          </span>\r\n                        </div>\r\n                      </div>\r\n                    {/each}\r\n                  </div>\r\n                </div>\r\n              {/if}\r\n            </div>\r\n          {/if}\r\n        {/if}\r\n      </div>\r\n\r\n      <!-- Subjects -->\r\n      <div class=\"overview-section\">\r\n        <h5>📖 Subjects</h5>\r\n        <div class=\"subjects-overview\">\r\n          {#if studentOverview.subjects && studentOverview.subjects.length > 0}\r\n            {#each studentOverview.subjects as subject}\r\n              <span class=\"subject-tag\">{subject}</span>\r\n            {/each}\r\n          {:else}\r\n            <p class=\"no-data\">No subjects found</p>\r\n          {/if}\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Teachers -->\r\n      <div class=\"overview-section\">\r\n        <h5>👨‍🏫 Teachers</h5>\r\n        <div class=\"teachers-overview\">\r\n          {#each studentOverview.teachers as teacher}\r\n            <div class=\"teacher-item\">\r\n              <span class=\"teacher-name\">{teacher.name}</span>\r\n              <small class=\"teacher-details\">{teacher.class_count} classes</small>\r\n            </div>\r\n          {/each}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Student Comments Display -->\r\n  {#if studentComments && !loading}\r\n    <div class=\"student-comments\">\r\n      <h4>💬 Teacher Comments: {studentComments.student_name} - {getMonthName(selectedMonth)} {selectedYear}</h4>\r\n      \r\n      {#if studentComments.comments && studentComments.comments.length > 0}\r\n        <div class=\"comments-summary\">\r\n          <p>Total Comments: <strong>{studentComments.comments_count}</strong></p>\r\n          <p class=\"period-note\">Comments from {getMonthName(selectedMonth)} {selectedYear}</p>\r\n        </div>\r\n        \r\n        <div class=\"comments-list\">\r\n          {#each studentComments.comments as comment}\r\n            <div class=\"comment-item\">\r\n              <div class=\"comment-header\" on:click={() => toggleCommentExpansion(comment.id)} role=\"button\" tabindex=\"0\" on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && toggleCommentExpansion(comment.id)}>\r\n                <div class=\"comment-basic-info\">\r\n                  <span class=\"comment-class\">{comment.class_name}</span>\r\n                  <span class=\"comment-subject\">{comment.subject}</span>\r\n                  <span class=\"comment-teacher\">{comment.teacher_name}</span>\r\n                  <span class=\"comment-date\">{formatDateTime(comment.displayTime)}</span>\r\n                </div>\r\n                <div class=\"comment-summary\">\r\n                  <span class=\"comment-note-preview\">\r\n                    {comment.note && comment.note.length > 50 ? comment.note.substring(0, 50) + '...' : comment.note || 'No note'}\r\n                  </span>\r\n                  <span class=\"expand-indicator\">\r\n                    {expandedComments.has(comment.id) ? '▼' : '▶'}\r\n                  </span>\r\n                </div>\r\n              </div>\r\n              \r\n              {#if expandedComments.has(comment.id)}\r\n                <div class=\"comment-details\">\r\n                  <div class=\"comment-ratings\">\r\n                    <div class=\"rating-item\">\r\n                      <span class=\"rating-label\">Learned:</span>\r\n                      <span class=\"rating-value\">{comment.learned}/5</span>\r\n                    </div>\r\n                    <div class=\"rating-item\">\r\n                      <span class=\"rating-label\">Technical Issues:</span>\r\n                      <span class=\"rating-value\">{comment.technical_issues}/5</span>\r\n                    </div>\r\n                    <div class=\"rating-item\">\r\n                      <span class=\"rating-label\">Effort:</span>\r\n                      <span class=\"rating-value\">{comment.effort}/5</span>\r\n                    </div>\r\n                    <div class=\"rating-item\">\r\n                      <span class=\"rating-label\">General:</span>\r\n                      <span class=\"rating-value\">{comment.general}/5</span>\r\n                    </div>\r\n                    <div class=\"rating-item\">\r\n                      <span class=\"rating-label\">On Time:</span>\r\n                      <span class=\"rating-value\">{comment.on_time ? 'Yes' : 'No'}</span>\r\n                    </div>\r\n                  </div>\r\n                  \r\n                  {#if comment.note}\r\n                    <div class=\"comment-full-note\">\r\n                      <h6>Full Comment:</h6>\r\n                      <p>{comment.note}</p>\r\n                    </div>\r\n                  {/if}\r\n                </div>\r\n              {/if}\r\n            </div>\r\n          {/each}\r\n        </div>\r\n      {:else}\r\n        <div class=\"no-comments\">\r\n          <p>No teacher comments found for this student.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Student Details Display -->\r\n  {#if studentDetails && !loading}\r\n    <div class=\"student-details\">\r\n      <div class=\"student-details-header\">\r\n        <h4>Student Details: {studentDetails.user.first_name} {studentDetails.user.last_name}</h4>\r\n        <div class=\"edit-controls\">\r\n          <button class=\"btn btn-secondary\" on:click={toggleEditMode}>\r\n            {editMode ? 'Cancel Edit' : 'Edit Information'}\r\n          </button>\r\n          {#if editMode}\r\n            <button class=\"btn btn-primary\" on:click={saveStudentInfo} disabled={saving}>\r\n              {saving ? 'Saving...' : 'Save Changes'}\r\n            </button>\r\n          {/if}\r\n        </div>\r\n      </div>\r\n      \r\n      <!-- Basic Student Information -->\r\n      <div class=\"info-section\">\r\n        <h5>Basic Information</h5>\r\n        <div class=\"info-grid\">\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">First Name:</span>\r\n            {#if editMode}\r\n              <input type=\"text\" bind:value={editableData.user.first_name} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{studentDetails.user.first_name}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Last Name:</span>\r\n            {#if editMode}\r\n              <input type=\"text\" bind:value={editableData.user.last_name} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{studentDetails.user.last_name}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Email:</span>\r\n            {#if editMode}\r\n              <input type=\"email\" bind:value={editableData.user.email} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{studentDetails.user.email}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Google Cal Searchable:</span>\r\n            {#if editMode}\r\n              <input type=\"text\" bind:value={editableData.google_cal_searchable} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{studentDetails.google_cal_searchable || 'Not set'}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Phone Number:</span>\r\n            {#if editMode}\r\n              <input type=\"text\" bind:value={editableData.phone_number} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{studentDetails.phone_number || 'Not set'}</span>\r\n            {/if}\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Parent Information -->\r\n      <div class=\"info-section\">\r\n        <h5>Parent Information</h5>\r\n        <div class=\"info-grid\">\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Parent Name:</span>\r\n            {#if editMode}\r\n              <input type=\"text\" bind:value={editableData.parent.name} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{studentDetails.parent.name || 'Not set'}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Parent Email:</span>\r\n            {#if editMode}\r\n              <input type=\"email\" bind:value={editableData.parent.email} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{studentDetails.parent.email || 'Not set'}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Parent Phone:</span>\r\n            {#if editMode}\r\n              <input type=\"text\" bind:value={editableData.parent.phone} class=\"edit-input\" />\r\n            {:else}\r\n              <span class=\"value\">{studentDetails.parent.phone || 'Not set'}</span>\r\n            {/if}\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Special Conditions -->\r\n      <div class=\"info-section\">\r\n        <h5>Special Conditions</h5>\r\n        <div class=\"info-grid\">\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Conditions:</span>\r\n            {#if editMode}\r\n              <textarea bind:value={editableData.special_conditions.conditions} class=\"edit-textarea\" rows=\"3\"></textarea>\r\n            {:else}\r\n              <span class=\"value\">{studentDetails.special_conditions.conditions || 'None'}</span>\r\n            {/if}\r\n          </div>\r\n          <div class=\"info-item\">\r\n            <span class=\"label\">Notes:</span>\r\n            {#if editMode}\r\n              <textarea bind:value={editableData.special_conditions.notes} class=\"edit-textarea\" rows=\"2\"></textarea>\r\n            {:else}\r\n              <span class=\"value\">{studentDetails.special_conditions.notes || 'None'}</span>\r\n            {/if}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- All Transactions Modal -->\r\n  {#if showAllTransactionsModal && allTransactions}\r\n    <div class=\"modal-overlay\" on:click={closeAllTransactionsModal} role=\"button\" tabindex=\"0\" on:keydown={(e) => e.key === 'Escape' && closeAllTransactionsModal()}>\r\n      <div class=\"modal-content\" on:click|stopPropagation role=\"button\" tabindex=\"0\" on:keydown={() => {}}>\r\n        <div class=\"modal-header\">\r\n          <h4>💰 All Transactions: {allTransactions.student_name}</h4>\r\n          <button type=\"button\" class=\"modal-close-btn\" on:click={closeAllTransactionsModal}>×</button>\r\n        </div>\r\n        \r\n        <div class=\"modal-body\">\r\n          <div class=\"transactions-summary\">\r\n            <p>Total Transactions: <strong>{allTransactions.transactions_count}</strong></p>\r\n          </div>\r\n          \r\n          {#if allTransactions.transactions && allTransactions.transactions.length > 0}\r\n            <div class=\"all-transactions-list\">\r\n              {#each allTransactions.transactions as transaction}\r\n                <div class=\"transaction-item-detailed\">\r\n                  <div class=\"transaction-main-info\">\r\n                    <span class=\"transaction-amount-detailed {transaction.transaction_type === 'payment' ? 'payment' : 'charge'}\">\r\n                      €{transaction.amount}\r\n                    </span>\r\n                    <span class=\"transaction-type-detailed\">{transaction.transaction_type}</span>\r\n                    <span class=\"transaction-date-detailed\">{formatDateOnly(transaction.date)}</span>\r\n                  </div>\r\n                  {#if transaction.description}\r\n                    <div class=\"transaction-description\">\r\n                      <span class=\"description-label\">Description:</span>\r\n                      <span class=\"description-text\">{transaction.description}</span>\r\n                    </div>\r\n                  {/if}\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          {:else}\r\n            <div class=\"no-transactions\">\r\n              <p>No transactions found for this student.</p>\r\n            </div>\r\n          {/if}\r\n        </div>\r\n        \r\n        <div class=\"modal-footer\">\r\n          <button type=\"button\" class=\"btn btn-secondary\" on:click={closeAllTransactionsModal}>\r\n            Close\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  {/if}\r\n</div>\r\n\r\n<style>\r\n  .student-info-container {\r\n    padding: 20px;\r\n    max-width: 1200px;\r\n    margin: 0 auto;\r\n  }\r\n\r\n  .student-info-container.embedded {\r\n    max-width: none;\r\n    margin: 0;\r\n    padding: 0;\r\n  }\r\n\r\n  .selection-section {\r\n    background-color: #f8f9fa;\r\n    padding: 20px;\r\n    border-radius: 8px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .selection-section h4 {\r\n    margin: 0 0 15px 0;\r\n    color: #333;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .month-selection {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 20px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .month-selector-container {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n  }\r\n\r\n  .selector-label {\r\n    font-weight: 600;\r\n    color: #555;\r\n    font-size: 0.95em;\r\n  }\r\n\r\n  .month-select,\r\n  .year-select {\r\n    padding: 8px 12px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    background-color: white;\r\n    cursor: pointer;\r\n    transition: border-color 0.2s;\r\n  }\r\n\r\n  .month-select {\r\n    min-width: 130px;\r\n  }\r\n\r\n  .year-select {\r\n    min-width: 90px;\r\n  }\r\n\r\n  .month-select:focus,\r\n  .year-select:focus {\r\n    outline: none;\r\n    border-color: #28a745;\r\n    box-shadow: 0 0 0 2px rgba(40, 167, 69, 0.2);\r\n  }\r\n\r\n  .month-select:hover,\r\n  .year-select:hover {\r\n    border-color: #28a745;\r\n  }\r\n\r\n  .selected-period {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    padding: 8px 16px;\r\n    background-color: #d4edda;\r\n    border: 2px solid #28a745;\r\n    border-radius: 6px;\r\n    margin-left: auto;\r\n  }\r\n\r\n  .period-label {\r\n    font-weight: 500;\r\n    color: #666;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .period-value {\r\n    font-weight: 600;\r\n    color: #28a745;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .period-note {\r\n    margin: 5px 0 0 0;\r\n    color: #666;\r\n    font-size: 0.85em;\r\n    font-style: italic;\r\n  }\r\n\r\n  .input-container {\r\n    position: relative;\r\n    margin-top: 15px;\r\n  }\r\n\r\n  .search-input {\r\n    width: 100%;\r\n    padding: 12px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    background-color: white;\r\n  }\r\n\r\n  .search-input:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 2px rgba(250, 180, 90, 0.2);\r\n  }\r\n\r\n  .autocomplete-list {\r\n    position: absolute;\r\n    top: 100%;\r\n    left: 0;\r\n    right: 0;\r\n    background: white;\r\n    border: 1px solid #ddd;\r\n    border-top: none;\r\n    border-radius: 0 0 6px 6px;\r\n    max-height: 200px;\r\n    overflow-y: auto;\r\n    z-index: 1000;\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n    box-shadow: 0 2px 8px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .autocomplete-list li {\r\n    border-bottom: 1px solid #f0f0f0;\r\n  }\r\n\r\n  .autocomplete-list li:last-child {\r\n    border-bottom: none;\r\n  }\r\n\r\n  .autocomplete-list button {\r\n    width: 100%;\r\n    padding: 12px;\r\n    border: none;\r\n    background: none;\r\n    text-align: left;\r\n    cursor: pointer;\r\n    transition: background-color 0.2s;\r\n  }\r\n\r\n  .autocomplete-list button:hover {\r\n    background-color: #f8f9fa;\r\n  }\r\n\r\n  .student-option {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n  }\r\n\r\n  .student-name {\r\n    font-weight: 500;\r\n    color: #333;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .student-email {\r\n    color: #666;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  /* Search Type Toggle Styles */\r\n  .search-type-toggle {\r\n    display: flex;\r\n    gap: 10px;\r\n    margin-bottom: 15px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .toggle-btn {\r\n    padding: 8px 16px;\r\n    border: 2px solid #28a745;\r\n    background: white;\r\n    color: #28a745;\r\n    border-radius: 20px;\r\n    cursor: pointer;\r\n    font-size: 0.9em;\r\n    font-weight: 500;\r\n    transition: all 0.2s;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 5px;\r\n  }\r\n\r\n  .toggle-btn:hover {\r\n    background: #f8f9fa;\r\n  }\r\n\r\n  .toggle-btn.active {\r\n    background: #28a745;\r\n    color: white;\r\n  }\r\n\r\n  /* Phone Search Styles */\r\n  .phone-option {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n  }\r\n\r\n  .phone-number {\r\n    font-weight: 600;\r\n    color: #28a745;\r\n    font-size: 0.95em;\r\n  }\r\n\r\n  .phone-student-name {\r\n    font-weight: 500;\r\n    color: #333;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .phone-student-email {\r\n    color: #666;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .selected-student {\r\n    margin-top: 20px;\r\n    padding: 15px;\r\n    background-color: #fff3e0;\r\n    border: 2px solid #fab45a;\r\n    border-radius: 8px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: flex-start;\r\n    gap: 15px;\r\n  }\r\n\r\n  .selected-student-info h5 {\r\n    margin: 0 0 10px 0;\r\n    color: #fab45a;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .selected-student-info p {\r\n    margin: 5px 0;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .selected-student-info p strong {\r\n    color: #333;\r\n  }\r\n\r\n  .btn-clear-small {\r\n    padding: 8px 16px;\r\n    background-color: #6c757d;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 4px;\r\n    cursor: pointer;\r\n    font-size: 0.85em;\r\n    white-space: nowrap;\r\n  }\r\n\r\n  .btn-clear-small:hover {\r\n    background-color: #545b62;\r\n  }\r\n\r\n  .student-info-container h3 {\r\n    margin: 0 0 20px 0;\r\n    color: #333;\r\n    border-bottom: 2px solid #fab45a;\r\n    padding-bottom: 10px;\r\n  }\r\n\r\n  .error-message {\r\n    background-color: #f8d7da;\r\n    color: #721c24;\r\n    padding: 10px;\r\n    border: 1px solid #f5c6cb;\r\n    border-radius: 5px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .loading {\r\n    text-align: center;\r\n    padding: 20px;\r\n    color: #666;\r\n    font-style: italic;\r\n  }\r\n\r\n  .student-overview {\r\n    background: #fff;\r\n    border: 2px solid #28a745;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-top: 20px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .student-overview h4 {\r\n    margin: 0 0 20px 0;\r\n    color: #28a745;\r\n    font-size: 1.2em;\r\n    border-bottom: 2px solid #28a745;\r\n    padding-bottom: 10px;\r\n  }\r\n\r\n  .overview-section {\r\n    margin-bottom: 20px;\r\n    padding: 15px;\r\n    background: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .overview-section h5 {\r\n    margin: 0 0 15px 0;\r\n    color: #333;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .overview-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: 15px;\r\n  }\r\n\r\n  .overview-item {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 10px;\r\n    background: white;\r\n    border-radius: 4px;\r\n    border-left: 4px solid #28a745;\r\n  }\r\n\r\n  .overview-label {\r\n    font-weight: 600;\r\n    color: #555;\r\n  }\r\n\r\n  .overview-value {\r\n    font-weight: bold;\r\n    color: #28a745;\r\n  }\r\n\r\n  .transactions-list {\r\n    margin-top: 15px;\r\n  }\r\n\r\n  .transactions-list h6 {\r\n    margin: 0 0 10px 0;\r\n    color: #666;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .transaction-item {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 8px;\r\n    background: white;\r\n    border-radius: 4px;\r\n    margin-bottom: 5px;\r\n    border-left: 3px solid #28a745;\r\n  }\r\n\r\n  .transaction-amount {\r\n    font-weight: bold;\r\n    color: #28a745;\r\n  }\r\n\r\n  .transaction-type {\r\n    color: #666;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .transaction-date {\r\n    color: #999;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .teachers-overview {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\r\n    gap: 10px;\r\n  }\r\n\r\n  .teacher-item {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 8px 12px;\r\n    background: white;\r\n    border-radius: 4px;\r\n    border: 1px solid #ddd;\r\n  }\r\n\r\n  .teacher-name {\r\n    font-weight: 500;\r\n    color: #333;\r\n  }\r\n\r\n  .teacher-details {\r\n    color: #666;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .subjects-overview {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 8px;\r\n  }\r\n\r\n  .subject-tag {\r\n    padding: 6px 12px;\r\n    background: linear-gradient(135deg, #28a745, #20c997);\r\n    color: white;\r\n    border-radius: 15px;\r\n    font-size: 0.85em;\r\n    font-weight: 500;\r\n    text-align: center;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .no-data {\r\n    color: #666;\r\n    font-style: italic;\r\n    margin: 0;\r\n  }\r\n\r\n  /* Attendance Details Styles */\r\n  .attendance-details-toggle {\r\n    margin-top: 15px;\r\n    text-align: center;\r\n  }\r\n\r\n  .btn-toggle-details {\r\n    padding: 8px 16px;\r\n    background: #28a745;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 20px;\r\n    cursor: pointer;\r\n    font-size: 0.9em;\r\n    font-weight: 500;\r\n    transition: all 0.2s;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 5px;\r\n  }\r\n\r\n  .btn-toggle-details:hover {\r\n    background: #218838;\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .attendance-details {\r\n    margin-top: 15px;\r\n    padding: 15px;\r\n    background: white;\r\n    border-radius: 8px;\r\n    border: 1px solid #ddd;\r\n  }\r\n\r\n  .attendance-category {\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .attendance-category:last-child {\r\n    margin-bottom: 0;\r\n  }\r\n\r\n  .attendance-category h6 {\r\n    margin: 0 0 12px 0;\r\n    color: #333;\r\n    font-size: 1em;\r\n    font-weight: 600;\r\n    padding-bottom: 8px;\r\n    border-bottom: 2px solid #28a745;\r\n  }\r\n\r\n  .attendance-list {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 10px;\r\n  }\r\n\r\n  .attendance-item {\r\n    padding: 12px;\r\n    border-radius: 6px;\r\n    border-left: 4px solid;\r\n  }\r\n\r\n  .late-item {\r\n    background: #fff3cd;\r\n    border-left-color: #ffc107;\r\n  }\r\n\r\n  .no-show-item {\r\n    background: #f8d7da;\r\n    border-left-color: #dc3545;\r\n  }\r\n\r\n  .on-time-item {\r\n    background: #d4edda;\r\n    border-left-color: #28a745;\r\n  }\r\n\r\n  .attendance-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin-bottom: 8px;\r\n    flex-wrap: wrap;\r\n    gap: 8px;\r\n  }\r\n\r\n  .class-name {\r\n    font-weight: 600;\r\n    color: #333;\r\n    flex: 1;\r\n    min-width: 150px;\r\n  }\r\n\r\n  .class-teacher {\r\n    color: #666;\r\n    font-size: 0.9em;\r\n    background: #f8f9fa;\r\n    padding: 2px 8px;\r\n    border-radius: 12px;\r\n  }\r\n\r\n  .late-badge {\r\n    background: #ffc107;\r\n    color: #000;\r\n    padding: 3px 8px;\r\n    border-radius: 12px;\r\n    font-size: 0.8em;\r\n    font-weight: 600;\r\n  }\r\n\r\n  .no-show-badge {\r\n    background: #dc3545;\r\n    color: white;\r\n    padding: 3px 8px;\r\n    border-radius: 12px;\r\n    font-size: 0.8em;\r\n    font-weight: 600;\r\n  }\r\n\r\n  .on-time-badge {\r\n    background: #28a745;\r\n    color: white;\r\n    padding: 3px 8px;\r\n    border-radius: 12px;\r\n    font-size: 0.8em;\r\n    font-weight: 600;\r\n  }\r\n\r\n  .attendance-times {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n  }\r\n\r\n  .time-info {\r\n    font-size: 0.85em;\r\n    color: #666;\r\n  }\r\n\r\n  .time-info strong {\r\n    color: #333;\r\n  }\r\n\r\n  .student-comments {\r\n    background: #f8f9fa;\r\n    border: 2px solid #28a745;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-top: 20px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .student-comments h4 {\r\n    margin: 0 0 15px 0;\r\n    color: #28a745;\r\n    font-size: 1.2em;\r\n    border-bottom: 2px solid #28a745;\r\n    padding-bottom: 10px;\r\n  }\r\n\r\n  .comments-summary {\r\n    margin-bottom: 15px;\r\n    padding: 10px;\r\n    background: white;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .comments-summary p {\r\n    margin: 0;\r\n    color: #666;\r\n  }\r\n\r\n  .comments-list {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 12px;\r\n  }\r\n\r\n  .comment-item {\r\n    background: white;\r\n    border-radius: 8px;\r\n    border: 1px solid #ddd;\r\n    overflow: hidden;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.05);\r\n  }\r\n\r\n  .comment-header {\r\n    padding: 15px;\r\n    cursor: pointer;\r\n    transition: background-color 0.2s;\r\n    user-select: none;\r\n  }\r\n\r\n  .comment-header:hover {\r\n    background-color: #f8f9fa;\r\n  }\r\n\r\n  .comment-basic-info {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 10px;\r\n    margin-bottom: 8px;\r\n  }\r\n\r\n  .comment-class {\r\n    background: #007bff;\r\n    color: white;\r\n    padding: 3px 8px;\r\n    border-radius: 12px;\r\n    font-size: 0.8em;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .comment-subject {\r\n    background: #28a745;\r\n    color: white;\r\n    padding: 3px 8px;\r\n    border-radius: 12px;\r\n    font-size: 0.8em;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .comment-teacher {\r\n    background: #6c757d;\r\n    color: white;\r\n    padding: 3px 8px;\r\n    border-radius: 12px;\r\n    font-size: 0.8em;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .comment-date {\r\n    background: #ffc107;\r\n    color: #000;\r\n    padding: 3px 8px;\r\n    border-radius: 12px;\r\n    font-size: 0.8em;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .comment-summary {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    gap: 10px;\r\n  }\r\n\r\n  .comment-note-preview {\r\n    flex: 1;\r\n    color: #666;\r\n    font-style: italic;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .expand-indicator {\r\n    color: #28a745;\r\n    font-weight: bold;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .comment-details {\r\n    padding: 15px;\r\n    background: #f8f9fa;\r\n    border-top: 1px solid #ddd;\r\n  }\r\n\r\n  .comment-ratings {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\r\n    gap: 10px;\r\n    margin-bottom: 15px;\r\n  }\r\n\r\n  .rating-item {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 8px 12px;\r\n    background: white;\r\n    border-radius: 6px;\r\n    border-left: 3px solid #28a745;\r\n  }\r\n\r\n  .rating-label {\r\n    font-weight: 500;\r\n    color: #555;\r\n    font-size: 0.85em;\r\n  }\r\n\r\n  .rating-value {\r\n    font-weight: bold;\r\n    color: #28a745;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .comment-full-note {\r\n    background: white;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #28a745;\r\n  }\r\n\r\n  .comment-full-note h6 {\r\n    margin: 0 0 10px 0;\r\n    color: #28a745;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .comment-full-note p {\r\n    margin: 0;\r\n    color: #333;\r\n    line-height: 1.5;\r\n  }\r\n\r\n  .no-comments {\r\n    text-align: center;\r\n    padding: 40px 20px;\r\n    color: #666;\r\n  }\r\n\r\n  .no-comments p {\r\n    margin: 0;\r\n    font-style: italic;\r\n  }\r\n\r\n  .student-details {\r\n    background: #f8f9fa;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-top: 20px;\r\n  }\r\n\r\n  .student-details-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin-bottom: 20px;\r\n    flex-wrap: wrap;\r\n    gap: 10px;\r\n  }\r\n\r\n  .student-details h4 {\r\n    margin: 0;\r\n    color: #333;\r\n    font-size: 1.2em;\r\n  }\r\n\r\n  .edit-controls {\r\n    display: flex;\r\n    gap: 10px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .btn {\r\n    padding: 8px 16px;\r\n    border: none;\r\n    border-radius: 5px;\r\n    cursor: pointer;\r\n    font-size: 0.9em;\r\n    font-weight: 500;\r\n    transition: all 0.2s;\r\n    text-decoration: none;\r\n    display: inline-block;\r\n  }\r\n\r\n  .btn:disabled {\r\n    opacity: 0.6;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  .btn-primary {\r\n    background-color: #fab45a;\r\n    color: black;\r\n  }\r\n\r\n  .btn-primary:hover:not(:disabled) {\r\n    background-color: #e09a43;\r\n  }\r\n\r\n  .btn-secondary {\r\n    background-color: #6c757d;\r\n    color: white;\r\n  }\r\n\r\n  .btn-secondary:hover:not(:disabled) {\r\n    background-color: #545b62;\r\n  }\r\n\r\n  .info-section {\r\n    margin-bottom: 25px;\r\n    background: white;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .info-section h5 {\r\n    margin: 0 0 15px 0;\r\n    color: #28a745;\r\n    font-size: 1.1em;\r\n    border-bottom: 1px solid #eee;\r\n    padding-bottom: 5px;\r\n  }\r\n\r\n  .info-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\r\n    gap: 15px;\r\n  }\r\n\r\n  .info-item {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 8px 0;\r\n    border-bottom: 1px solid #f0f0f0;\r\n  }\r\n\r\n  .info-item:last-child {\r\n    border-bottom: none;\r\n  }\r\n\r\n  .label {\r\n    font-weight: 600;\r\n    color: #555;\r\n    min-width: 140px;\r\n  }\r\n\r\n  .value {\r\n    color: #333;\r\n    text-align: right;\r\n    flex: 1;\r\n    word-break: break-word;\r\n  }\r\n\r\n  .edit-input {\r\n    flex: 1;\r\n    padding: 6px 10px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .edit-input:focus {\r\n    outline: none;\r\n    border-color: #28a745;\r\n    box-shadow: 0 0 0 2px rgba(40, 167, 69, 0.2);\r\n  }\r\n\r\n  .edit-textarea {\r\n    flex: 1;\r\n    padding: 6px 10px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n    font-size: 0.9em;\r\n    resize: vertical;\r\n  }\r\n\r\n  .edit-textarea:focus {\r\n    outline: none;\r\n    border-color: #28a745;\r\n    box-shadow: 0 0 0 2px rgba(40, 167, 69, 0.2);\r\n  }\r\n\r\n  /* View All Transactions Button Styles */\r\n  .view-all-transactions-btn-container {\r\n    margin-top: 15px;\r\n    text-align: center;\r\n    padding-top: 10px;\r\n    border-top: 1px solid #eee;\r\n  }\r\n\r\n  .btn-view-all-transactions {\r\n    padding: 10px 20px;\r\n    background: linear-gradient(135deg, #28a745, #20c997);\r\n    color: white;\r\n    border: none;\r\n    border-radius: 25px;\r\n    cursor: pointer;\r\n    font-size: 0.9em;\r\n    font-weight: 600;\r\n    transition: all 0.3s;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n  }\r\n\r\n  .btn-view-all-transactions:hover:not(:disabled) {\r\n    background: linear-gradient(135deg, #218838, #1e8e7a);\r\n    transform: translateY(-2px);\r\n    box-shadow: 0 4px 8px rgba(0,0,0,0.15);\r\n  }\r\n\r\n  .btn-view-all-transactions:disabled {\r\n    opacity: 0.6;\r\n    cursor: not-allowed;\r\n    transform: none;\r\n  }\r\n\r\n  /* Modal Styles */\r\n  .modal-overlay {\r\n    position: fixed;\r\n    top: 0;\r\n    left: 0;\r\n    right: 0;\r\n    bottom: 0;\r\n    background: rgba(0, 0, 0, 0.5);\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n    z-index: 1000;\r\n    padding: 20px;\r\n  }\r\n\r\n  .modal-content {\r\n    background: white;\r\n    border-radius: 12px;\r\n    max-width: 800px;\r\n    width: 100%;\r\n    max-height: 90vh;\r\n    overflow: hidden;\r\n    box-shadow: 0 10px 30px rgba(0,0,0,0.3);\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n\r\n  .modal-header {\r\n    padding: 20px;\r\n    border-bottom: 1px solid #ddd;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    background: #f8f9fa;\r\n  }\r\n\r\n  .modal-header h4 {\r\n    margin: 0;\r\n    color: #28a745;\r\n    font-size: 1.3em;\r\n  }\r\n\r\n  .modal-close-btn {\r\n    background: none;\r\n    border: none;\r\n    font-size: 2em;\r\n    color: #666;\r\n    cursor: pointer;\r\n    padding: 0;\r\n    width: 40px;\r\n    height: 40px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    border-radius: 50%;\r\n    transition: all 0.2s;\r\n  }\r\n\r\n  .modal-close-btn:hover {\r\n    background: #f0f0f0;\r\n    color: #333;\r\n  }\r\n\r\n  .modal-body {\r\n    padding: 20px;\r\n    overflow-y: auto;\r\n    flex: 1;\r\n  }\r\n\r\n  .modal-footer {\r\n    padding: 15px 20px;\r\n    border-top: 1px solid #ddd;\r\n    display: flex;\r\n    justify-content: flex-end;\r\n    background: #f8f9fa;\r\n  }\r\n\r\n  .transactions-summary {\r\n    margin-bottom: 20px;\r\n    padding: 15px;\r\n    background: #f8f9fa;\r\n    border-radius: 8px;\r\n    border-left: 4px solid #28a745;\r\n  }\r\n\r\n  .transactions-summary p {\r\n    margin: 0;\r\n    color: #666;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .all-transactions-list {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 12px;\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n  }\r\n\r\n  .transaction-item-detailed {\r\n    background: white;\r\n    border: 1px solid #ddd;\r\n    border-radius: 8px;\r\n    padding: 15px;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.05);\r\n    transition: all 0.2s;\r\n  }\r\n\r\n  .transaction-item-detailed:hover {\r\n    box-shadow: 0 4px 8px rgba(0,0,0,0.1);\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .transaction-main-info {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    flex-wrap: wrap;\r\n    gap: 10px;\r\n    margin-bottom: 8px;\r\n  }\r\n\r\n  .transaction-amount-detailed {\r\n    font-weight: bold;\r\n    font-size: 1.1em;\r\n    padding: 4px 12px;\r\n    border-radius: 15px;\r\n  }\r\n\r\n  .transaction-amount-detailed.payment {\r\n    background: #d4edda;\r\n    color: #155724;\r\n  }\r\n\r\n  .transaction-amount-detailed.charge {\r\n    background: #f8d7da;\r\n    color: #721c24;\r\n  }\r\n\r\n  .transaction-type-detailed {\r\n    background: #007bff;\r\n    color: white;\r\n    padding: 3px 12px;\r\n    border-radius: 12px;\r\n    font-size: 0.85em;\r\n    font-weight: 500;\r\n    text-transform: capitalize;\r\n  }\r\n\r\n  .transaction-date-detailed {\r\n    background: #6c757d;\r\n    color: white;\r\n    padding: 3px 12px;\r\n    border-radius: 12px;\r\n    font-size: 0.85em;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .transaction-description {\r\n    margin-top: 8px;\r\n    padding-top: 8px;\r\n    border-top: 1px solid #eee;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n  }\r\n\r\n  .description-label {\r\n    font-weight: 600;\r\n    color: #555;\r\n    font-size: 0.85em;\r\n  }\r\n\r\n  .description-text {\r\n    color: #333;\r\n    font-size: 0.9em;\r\n    line-height: 1.4;\r\n  }\r\n\r\n  .no-transactions {\r\n    text-align: center;\r\n    padding: 40px 20px;\r\n    color: #666;\r\n  }\r\n\r\n  .no-transactions p {\r\n    margin: 0;\r\n    font-style: italic;\r\n  }\r\n\r\n  @media (max-width: 768px) {\r\n    .student-info-container {\r\n      padding: 15px;\r\n    }\r\n\r\n    .month-selection {\r\n      flex-direction: column;\r\n      align-items: stretch;\r\n      gap: 15px;\r\n    }\r\n\r\n    .month-selector-container {\r\n      flex-direction: column;\r\n      align-items: stretch;\r\n      gap: 8px;\r\n    }\r\n\r\n    .month-select,\r\n    .year-select {\r\n      width: 100%;\r\n    }\r\n\r\n    .selected-period {\r\n      margin-left: 0;\r\n      justify-content: center;\r\n    }\r\n\r\n    .overview-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .overview-item {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 5px;\r\n    }\r\n\r\n    .teachers-overview {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .info-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .info-item {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 5px;\r\n    }\r\n\r\n    .label {\r\n      min-width: auto;\r\n    }\r\n\r\n    .value {\r\n      text-align: left;\r\n    }\r\n\r\n    .subjects-overview {\r\n      justify-content: center;\r\n    }\r\n\r\n    .comment-basic-info {\r\n      justify-content: center;\r\n    }\r\n\r\n    .comment-ratings {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .comment-summary {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 10px;\r\n    }\r\n\r\n    .search-type-toggle {\r\n      justify-content: center;\r\n    }\r\n\r\n    .toggle-btn {\r\n      flex: 1;\r\n      min-width: 120px;\r\n      justify-content: center;\r\n    }\r\n\r\n    .attendance-header {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 8px;\r\n    }\r\n\r\n    .class-name {\r\n      min-width: auto;\r\n    }\r\n\r\n    .attendance-times {\r\n      width: 100%;\r\n    }\r\n\r\n    .modal-content {\r\n      margin: 10px;\r\n      max-height: 95vh;\r\n    }\r\n\r\n    .modal-header h4 {\r\n      font-size: 1.1em;\r\n    }\r\n\r\n    .transaction-main-info {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 8px;\r\n    }\r\n\r\n    .btn-view-all-transactions {\r\n      font-size: 0.8em;\r\n      padding: 8px 16px;\r\n    }\r\n\r\n    .view-all-transactions-btn-container {\r\n      margin-top: 10px;\r\n    }\r\n\r\n    .all-transactions-list {\r\n      max-height: 300px;\r\n    }\r\n\r\n    .transaction-item-detailed {\r\n      padding: 12px;\r\n    }\r\n  }\r\n</style>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    \r\n    // Component state\r\n    let teachers = [];\r\n    let loading = false;\r\n    let error = '';\r\n    let searchTerm = '';\r\n    let exportLoading = false;\r\n    \r\n    // Filtered and sorted teachers based on search and last_login\r\n    $: filteredTeachers = teachers\r\n        .filter(teacher => \r\n            teacher.first_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n            teacher.last_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n            teacher.email.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n            teacher.username.toLowerCase().includes(searchTerm.toLowerCase())\r\n        )\r\n        .sort((a, b) => {\r\n            // Sort by last_login with most recent first\r\n            // Handle null values (never logged in) - put them at the end\r\n            if (!a.last_login && !b.last_login) return 0;\r\n            if (!a.last_login) return 1;\r\n            if (!b.last_login) return -1;\r\n            \r\n            // Compare dates (most recent first)\r\n            return new Date(b.last_login) - new Date(a.last_login);\r\n        });\r\n    \r\n    // Format last login date\r\n    function formatLastLogin(lastLoginStr) {\r\n        if (!lastLoginStr) return 'Niekada';\r\n        \r\n        const lastLogin = new Date(lastLoginStr);\r\n        const now = new Date();\r\n        const timeDiff = now - lastLogin;\r\n        const daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24));\r\n        \r\n        if (daysDiff === 0) return 'Šiandien';\r\n        if (daysDiff === 1) return 'Vakar';\r\n        if (daysDiff < 7) return `Prieš ${daysDiff} dienas`;\r\n        if (daysDiff < 30) return `Prieš ${Math.floor(daysDiff / 7)} savaites`;\r\n        if (daysDiff < 365) return `Prieš ${Math.floor(daysDiff / 30)} mėnesius`;\r\n        \r\n        return lastLogin.toLocaleDateString('lt-LT');\r\n    }\r\n    \r\n    // Get status color based on last login\r\n    function getLoginStatus(lastLoginStr) {\r\n        if (!lastLoginStr) return 'never-logged';\r\n        \r\n        const lastLogin = new Date(lastLoginStr);\r\n        const now = new Date();\r\n        const daysDiff = Math.floor((now - lastLogin) / (1000 * 60 * 60 * 24));\r\n        \r\n        if (daysDiff <= 7) return 'recent';\r\n        if (daysDiff <= 30) return 'moderate';\r\n        return 'old';\r\n    }\r\n    \r\n    // Fetch teachers data\r\n    async function fetchTeachers() {\r\n        loading = true;\r\n        error = '';\r\n        \r\n        try {\r\n            const token = localStorage.getItem('jwtToken');\r\n            if (!token) {\r\n                error = 'Reikalinga autentifikacija. Prisijunkite prie sistemos.';\r\n                return;\r\n            }\r\n            \r\n            const response = await fetch('/studentplayground/api/teachers-with-login/', {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                const errorData = await response.json().catch(() => ({}));\r\n                error = errorData.message || 'Nepavyko gauti mokytojų duomenų';\r\n                return;\r\n            }\r\n            \r\n            const data = await response.json();\r\n            if (data.status === 'success') {\r\n                teachers = data.teachers;\r\n            } else {\r\n                error = data.message || 'Netikėta klaida';\r\n            }\r\n            \r\n        } catch (err) {\r\n            console.error('Error fetching teachers:', err);\r\n            error = 'Tinklo klaida. Bandykite dar kartą.';\r\n        } finally {\r\n            loading = false;\r\n        }\r\n    }\r\n    \r\n    // Export teachers data to CSV\r\n    async function exportTeachersData() {\r\n        exportLoading = true;\r\n        \r\n        try {\r\n            const token = localStorage.getItem('jwtToken');\r\n            if (!token) {\r\n                error = 'Reikalinga autentifikacija. Prisijunkite prie sistemos.';\r\n                return;\r\n            }\r\n            \r\n            const response = await fetch('/studentplayground/api/teachers-export-data/', {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                const errorData = await response.json().catch(() => ({}));\r\n                error = errorData.message || 'Nepavyko gauti eksporto duomenų';\r\n                return;\r\n            }\r\n            \r\n            const data = await response.json();\r\n            if (data.status === 'success') {\r\n                downloadCSV(data.export_data);\r\n            } else {\r\n                error = data.message || 'Netikėta klaida';\r\n            }\r\n            \r\n        } catch (err) {\r\n            console.error('Error exporting teachers data:', err);\r\n            error = 'Tinklo klaida. Bandykite dar kartą.';\r\n        } finally {\r\n            exportLoading = false;\r\n        }\r\n    }\r\n    \r\n    // Convert data to CSV and trigger download\r\n    function downloadCSV(exportData) {\r\n        // Define CSV headers in Lithuanian\r\n        const headers = [\r\n            'Mokytojo vardas',\r\n            'Dėstomas dalykas', \r\n            'Dėstomi klasių intervalai',\r\n            'El. paštas',\r\n            'Banko sąskaitos numeris',\r\n            'Individualios veiklos licencijos numeris',\r\n            'Telefono numeris',\r\n            'Darbo pradžios data',\r\n            'Susitikimų nuoroda',\r\n            'Laiko intervalai pateikti'\r\n        ];\r\n        \r\n        // Create CSV content\r\n        let csvContent = headers.join(',') + '\\n';\r\n        \r\n        exportData.forEach(teacher => {\r\n            const row = [\r\n                `\"${teacher.teacher_name}\"`,\r\n                `\"${teacher.taught_subjects}\"`,\r\n                `\"${teacher.taught_grades}\"`, \r\n                `\"${teacher.email}\"`,\r\n                `\"${teacher.bank_account_number}\"`,\r\n                `\"${teacher.individual_licence_number}\"`,\r\n                `\"${teacher.phone_number}\"`,\r\n                `\"${teacher.job_start_date}\"`,\r\n                `\"${teacher.meeting_link}\"`,\r\n                `\"${teacher.timeslots_submitted}\"`\r\n            ];\r\n            csvContent += row.join(',') + '\\n';\r\n        });\r\n        \r\n        // Create blob and download\r\n        const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\r\n        const link = document.createElement('a');\r\n        const url = URL.createObjectURL(blob);\r\n        \r\n        const now = new Date();\r\n        const timestamp = now.toISOString().split('T')[0]; // YYYY-MM-DD format\r\n        const filename = `mokytojai_duomenys_${timestamp}.csv`;\r\n        \r\n        link.setAttribute('href', url);\r\n        link.setAttribute('download', filename);\r\n        link.style.visibility = 'hidden';\r\n        document.body.appendChild(link);\r\n        link.click();\r\n        document.body.removeChild(link);\r\n        URL.revokeObjectURL(url);\r\n    }\r\n\r\n    // Load data when component mounts\r\n    onMount(() => {\r\n        fetchTeachers();\r\n    });\r\n</script>\r\n\r\n<div class=\"teachers-list-container\">\r\n    <!-- Search and filters -->\r\n    <div class=\"search-section\">\r\n        <div class=\"search-controls\">\r\n            <div class=\"search-field\">\r\n                <label for=\"search\">Ieškoti mokytoją:</label>\r\n                <input \r\n                    id=\"search\" \r\n                    type=\"text\" \r\n                    bind:value={searchTerm} \r\n                    placeholder=\"Vardas, pavardė, el. paštas arba naudotojo vardas...\"\r\n                />\r\n            </div>\r\n            <div class=\"export-section\">\r\n                <button \r\n                    class=\"export-button\"\r\n                    on:click={exportTeachersData}\r\n                    disabled={exportLoading}\r\n                >\r\n                    {#if exportLoading}\r\n                        <span class=\"loading-spinner\"></span>\r\n                        Eksportuojama...\r\n                    {:else}\r\n                        <span class=\"export-icon\">📊</span>\r\n                        Eksportuoti CSV\r\n                    {/if}\r\n                </button>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    \r\n    <!-- Loading state -->\r\n    {#if loading}\r\n        <div class=\"loading-message\">\r\n            <p>Kraunami duomenys...</p>\r\n        </div>\r\n    {/if}\r\n    \r\n    <!-- Error state -->\r\n    {#if error}\r\n        <div class=\"error-message\">\r\n            <p>{error}</p>\r\n            <button on:click={fetchTeachers} class=\"retry-button\">Bandyti dar kartą</button>\r\n        </div>\r\n    {/if}\r\n    \r\n    <!-- Teachers list -->\r\n    {#if !loading && !error && filteredTeachers.length > 0}\r\n        <div class=\"teachers-summary\">\r\n            <p>Rasta mokytojų: <strong>{filteredTeachers.length}</strong> iš {teachers.length}</p>\r\n        </div>\r\n        \r\n        <div class=\"teachers-list\">\r\n            {#each filteredTeachers as teacher}\r\n                <div class=\"teacher-card\">\r\n                    <div class=\"teacher-header\">\r\n                        <div class=\"teacher-name\">\r\n                            <h3>{teacher.first_name} {teacher.last_name}</h3>\r\n                            <p class=\"teacher-email\">{teacher.email}</p>\r\n                        </div>\r\n                        <div class=\"login-status {getLoginStatus(teacher.last_login)}\">\r\n                            <span class=\"status-indicator\"></span>\r\n                            {formatLastLogin(teacher.last_login)}\r\n                        </div>\r\n                    </div>\r\n                    \r\n                    <div class=\"teacher-details\">\r\n                        <div class=\"detail-row\">\r\n                            <span class=\"detail-label\">Naudotojo vardas:</span>\r\n                            <span class=\"detail-value\">{teacher.username}</span>\r\n                        </div>\r\n                        \r\n                        <div class=\"detail-row\">\r\n                            <span class=\"detail-label\">Registracijos data:</span>\r\n                            <span class=\"detail-value\">{new Date(teacher.date_joined).toLocaleDateString('lt-LT')}</span>\r\n                        </div>\r\n                        \r\n                        <div class=\"detail-row\">\r\n                            <span class=\"detail-label\">Statusas:</span>\r\n                            <span class=\"detail-value {teacher.is_active ? 'active' : 'inactive'}\">\r\n                                {teacher.is_active ? 'Aktyvus' : 'Neaktyvus'}\r\n                            </span>\r\n                        </div>\r\n                        \r\n                        {#if teacher.google_calendar_id}\r\n                            <div class=\"detail-row\">\r\n                                <span class=\"detail-label\">Google kalendorius:</span>\r\n                                <span class=\"detail-value calendar-id\">{teacher.google_calendar_id}</span>\r\n                            </div>\r\n                        {/if}\r\n                        \r\n                        {#if teacher.bank_nr && teacher.bank_nr !== '000000'}\r\n                            <div class=\"detail-row\">\r\n                                <span class=\"detail-label\">Banko nr.:</span>\r\n                                <span class=\"detail-value\">{teacher.bank_nr}</span>\r\n                            </div>\r\n                        {/if}\r\n                    </div>\r\n                </div>\r\n            {/each}\r\n        </div>\r\n    {:else if !loading && !error && filteredTeachers.length === 0 && teachers.length > 0}\r\n        <div class=\"no-results\">\r\n            <p>Nerasta mokytojų pagal jūsų paieškos kriterijus.</p>\r\n        </div>\r\n    {:else if !loading && !error && teachers.length === 0}\r\n        <div class=\"no-teachers\">\r\n            <p>Sistemoje nėra registruotų mokytojų.</p>\r\n        </div>\r\n    {/if}\r\n</div>\r\n\r\n<style>\r\n    .teachers-list-container {\r\n        max-width: 100%;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n    \r\n    .search-section {\r\n        background: #f8f9fa;\r\n        padding: 15px;\r\n        border-radius: 8px;\r\n        margin-bottom: 20px;\r\n        border: 1px solid #e1e5e9;\r\n    }\r\n    \r\n    .search-controls {\r\n        display: flex;\r\n        gap: 20px;\r\n        align-items: flex-end;\r\n    }\r\n    \r\n    .search-field {\r\n        flex: 1;\r\n    }\r\n    \r\n    .search-field label {\r\n        display: block;\r\n        margin-bottom: 8px;\r\n        font-weight: 500;\r\n        color: #333;\r\n    }\r\n    \r\n    .search-field input {\r\n        width: 100%;\r\n        padding: 12px 16px;\r\n        border: 2px solid #e1e5e9;\r\n        border-radius: 8px;\r\n        font-size: 16px;\r\n        transition: border-color 0.3s ease;\r\n    }\r\n    \r\n    .search-field input:focus {\r\n        outline: none;\r\n        border-color: #667eea;\r\n        box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\r\n    }\r\n    \r\n    .export-section {\r\n        display: flex;\r\n        align-items: center;\r\n    }\r\n    \r\n    .export-button {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        background: #28a745;\r\n        color: white;\r\n        border: none;\r\n        padding: 12px 20px;\r\n        border-radius: 8px;\r\n        font-size: 14px;\r\n        font-weight: 500;\r\n        cursor: pointer;\r\n        transition: all 0.3s ease;\r\n        white-space: nowrap;\r\n    }\r\n    \r\n    .export-button:hover:not(:disabled) {\r\n        background: #218838;\r\n        transform: translateY(-1px);\r\n        box-shadow: 0 4px 12px rgba(40, 167, 69, 0.3);\r\n    }\r\n    \r\n    .export-button:disabled {\r\n        background: #6c757d;\r\n        cursor: not-allowed;\r\n        transform: none;\r\n        box-shadow: none;\r\n    }\r\n    \r\n    .export-icon {\r\n        font-size: 16px;\r\n    }\r\n    \r\n    .loading-spinner {\r\n        width: 16px;\r\n        height: 16px;\r\n        border: 2px solid transparent;\r\n        border-top: 2px solid white;\r\n        border-radius: 50%;\r\n        animation: spin 1s linear infinite;\r\n    }\r\n    \r\n    @keyframes spin {\r\n        from { transform: rotate(0deg); }\r\n        to { transform: rotate(360deg); }\r\n    }\r\n    \r\n    .loading-message, .error-message, .no-results, .no-teachers {\r\n        text-align: center;\r\n        padding: 40px 20px;\r\n        background: white;\r\n        border-radius: 12px;\r\n        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\r\n    }\r\n    \r\n    .error-message {\r\n        color: #dc3545;\r\n    }\r\n    \r\n    .retry-button {\r\n        background: #667eea;\r\n        color: white;\r\n        border: none;\r\n        padding: 10px 20px;\r\n        border-radius: 6px;\r\n        cursor: pointer;\r\n        margin-top: 15px;\r\n        transition: background-color 0.3s ease;\r\n    }\r\n    \r\n    .retry-button:hover {\r\n        background: #5a67d8;\r\n    }\r\n    \r\n    .teachers-summary {\r\n        margin-bottom: 20px;\r\n        padding: 15px;\r\n        background: #f8f9fa;\r\n        border-radius: 8px;\r\n        text-align: center;\r\n    }\r\n    \r\n    .teachers-list {\r\n        display: grid;\r\n        gap: 20px;\r\n    }\r\n    \r\n    .teacher-card {\r\n        background: white;\r\n        border-radius: 12px;\r\n        padding: 25px;\r\n        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\r\n        border: 1px solid #e1e5e9;\r\n        transition: transform 0.2s ease, box-shadow 0.2s ease;\r\n    }\r\n    \r\n    .teacher-card:hover {\r\n        transform: translateY(-2px);\r\n        box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);\r\n    }\r\n    \r\n    .teacher-header {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: flex-start;\r\n        margin-bottom: 20px;\r\n        padding-bottom: 15px;\r\n        border-bottom: 1px solid #e1e5e9;\r\n    }\r\n    \r\n    .teacher-name h3 {\r\n        margin: 0 0 5px 0;\r\n        color: #2d3748;\r\n        font-size: 1.3em;\r\n        font-weight: 600;\r\n    }\r\n    \r\n    .teacher-email {\r\n        margin: 0;\r\n        color: #667eea;\r\n        font-size: 0.95em;\r\n    }\r\n    \r\n    .login-status {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        padding: 8px 12px;\r\n        border-radius: 20px;\r\n        font-size: 0.85em;\r\n        font-weight: 500;\r\n    }\r\n    \r\n    .status-indicator {\r\n        width: 8px;\r\n        height: 8px;\r\n        border-radius: 50%;\r\n    }\r\n    \r\n    .login-status.recent {\r\n        background: #d4edda;\r\n        color: #155724;\r\n    }\r\n    \r\n    .login-status.recent .status-indicator {\r\n        background: #28a745;\r\n    }\r\n    \r\n    .login-status.moderate {\r\n        background: #fff3cd;\r\n        color: #856404;\r\n    }\r\n    \r\n    .login-status.moderate .status-indicator {\r\n        background: #ffc107;\r\n    }\r\n    \r\n    .login-status.old {\r\n        background: #f8d7da;\r\n        color: #721c24;\r\n    }\r\n    \r\n    .login-status.old .status-indicator {\r\n        background: #dc3545;\r\n    }\r\n    \r\n    .login-status.never-logged {\r\n        background: #e2e3e5;\r\n        color: #383d41;\r\n    }\r\n    \r\n    .login-status.never-logged .status-indicator {\r\n        background: #6c757d;\r\n    }\r\n    \r\n    .teacher-details {\r\n        display: grid;\r\n        gap: 12px;\r\n    }\r\n    \r\n    .detail-row {\r\n        display: grid;\r\n        grid-template-columns: 1fr 1fr;\r\n        gap: 15px;\r\n        align-items: center;\r\n    }\r\n    \r\n    .detail-label {\r\n        font-weight: 500;\r\n        color: #4a5568;\r\n    }\r\n    \r\n    .detail-value {\r\n        color: #2d3748;\r\n        word-break: break-word;\r\n    }\r\n    \r\n    .detail-value.active {\r\n        color: #28a745;\r\n        font-weight: 500;\r\n    }\r\n    \r\n    .detail-value.inactive {\r\n        color: #dc3545;\r\n        font-weight: 500;\r\n    }\r\n    \r\n    .detail-value.calendar-id {\r\n        font-family: 'Courier New', monospace;\r\n        font-size: 0.9em;\r\n        background: #f8f9fa;\r\n        padding: 4px 8px;\r\n        border-radius: 4px;\r\n    }\r\n    \r\n    @media (max-width: 768px) {\r\n        .search-controls {\r\n            flex-direction: column;\r\n            gap: 15px;\r\n            align-items: stretch;\r\n        }\r\n        \r\n        .export-button {\r\n            justify-content: center;\r\n            width: 100%;\r\n        }\r\n        \r\n        .teacher-header {\r\n            flex-direction: column;\r\n            gap: 15px;\r\n        }\r\n        \r\n        .detail-row {\r\n            grid-template-columns: 1fr;\r\n            gap: 5px;\r\n        }\r\n        \r\n        .detail-label {\r\n            font-size: 0.9em;\r\n        }\r\n    }\r\n</style>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    \r\n    // Component state\r\n    let students = [];\r\n    let familyGroups = {};\r\n    let studentsWithoutFamily = [];\r\n    let loading = false;\r\n    let error = '';\r\n    let searchTerm = '';\r\n    let showGrouped = true; // Toggle between grouped and flat view\r\n    \r\n    // Filtered students based on search\r\n    $: filteredStudents = students.filter(student => \r\n        student.first_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n        student.last_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n        student.email.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n        student.username.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n        (student.parent && (\r\n            student.parent.first_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n            student.parent.last_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n            student.parent.email.toLowerCase().includes(searchTerm.toLowerCase())\r\n        ))\r\n    );\r\n    \r\n    // Filtered family groups based on search\r\n    $: filteredFamilyGroups = Object.entries(familyGroups).reduce((acc, [familyName, familyStudents]) => {\r\n        const filteredFamilyStudents = familyStudents.filter(student => \r\n            student.first_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n            student.last_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n            student.email.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n            student.username.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n            (student.parent && (\r\n                student.parent.first_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n                student.parent.last_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n                student.parent.email.toLowerCase().includes(searchTerm.toLowerCase())\r\n            ))\r\n        );\r\n        \r\n        if (filteredFamilyStudents.length > 0 || familyName.toLowerCase().includes(searchTerm.toLowerCase())) {\r\n            acc[familyName] = filteredFamilyStudents;\r\n        }\r\n        return acc;\r\n    }, {});\r\n    \r\n    $: filteredStudentsWithoutFamily = studentsWithoutFamily.filter(student => \r\n        student.first_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n        student.last_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n        student.email.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n        student.username.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n        (student.parent && (\r\n            student.parent.first_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n            student.parent.last_name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n            student.parent.email.toLowerCase().includes(searchTerm.toLowerCase())\r\n        ))\r\n    );\r\n    \r\n    // Format last login date\r\n    function formatLastLogin(lastLoginStr) {\r\n        if (!lastLoginStr) return 'Niekada';\r\n        \r\n        const lastLogin = new Date(lastLoginStr);\r\n        const now = new Date();\r\n        const timeDiff = now - lastLogin;\r\n        const daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24));\r\n        \r\n        if (daysDiff === 0) return 'Šiandien';\r\n        if (daysDiff === 1) return 'Vakar';\r\n        if (daysDiff < 7) return `Prieš ${daysDiff} dienas`;\r\n        if (daysDiff < 30) return `Prieš ${Math.floor(daysDiff / 7)} savaites`;\r\n        if (daysDiff < 365) return `Prieš ${Math.floor(daysDiff / 30)} mėnesius`;\r\n        \r\n        return lastLogin.toLocaleDateString('lt-LT');\r\n    }\r\n    \r\n    // Get status color based on last login\r\n    function getLoginStatus(lastLoginStr) {\r\n        if (!lastLoginStr) return 'never-logged';\r\n        \r\n        const lastLogin = new Date(lastLoginStr);\r\n        const now = new Date();\r\n        const daysDiff = Math.floor((now - lastLogin) / (1000 * 60 * 60 * 24));\r\n        \r\n        if (daysDiff <= 7) return 'recent';\r\n        if (daysDiff <= 30) return 'moderate';\r\n        return 'old';\r\n    }\r\n    \r\n    // Fetch students data\r\n    async function fetchStudents() {\r\n        loading = true;\r\n        error = '';\r\n        \r\n        try {\r\n            const token = localStorage.getItem('jwtToken');\r\n            if (!token) {\r\n                error = 'Reikalinga autentifikacija. Prisijunkite prie sistemos.';\r\n                return;\r\n            }\r\n            \r\n            const response = await fetch('/studentplayground/api/students-with-info/', {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (!response.ok) {\r\n                const errorData = await response.json().catch(() => ({}));\r\n                error = errorData.message || 'Nepavyko gauti studentų duomenų';\r\n                return;\r\n            }\r\n            \r\n            const data = await response.json();\r\n            if (data.status === 'success') {\r\n                students = data.students;\r\n                familyGroups = data.family_groups;\r\n                studentsWithoutFamily = data.students_without_family;\r\n            } else {\r\n                error = data.message || 'Netikėta klaida';\r\n            }\r\n            \r\n        } catch (err) {\r\n            console.error('Error fetching students:', err);\r\n            error = 'Tinklo klaida. Bandykite dar kartą.';\r\n        } finally {\r\n            loading = false;\r\n        }\r\n    }\r\n    \r\n    // Load data when component mounts\r\n    onMount(() => {\r\n        fetchStudents();\r\n    });\r\n</script>\r\n\r\n<div class=\"students-list-container\">\r\n    <!-- Search and filters -->\r\n    <div class=\"search-section\">\r\n        <div class=\"search-field\">\r\n            <label for=\"search\">Ieškoti studentą:</label>\r\n            <input \r\n                id=\"search\" \r\n                type=\"text\" \r\n                bind:value={searchTerm} \r\n                placeholder=\"Vardas, pavardė, el. paštas, tėvo vardas...\"\r\n            />\r\n        </div>\r\n        \r\n        <div class=\"view-toggle\">\r\n            <label>\r\n                <input type=\"checkbox\" bind:checked={showGrouped} />\r\n                Rodyti grupuotus pagal šeimas\r\n            </label>\r\n        </div>\r\n    </div>\r\n    \r\n    <!-- Loading state -->\r\n    {#if loading}\r\n        <div class=\"loading-message\">\r\n            <p>Kraunami duomenys...</p>\r\n        </div>\r\n    {/if}\r\n    \r\n    <!-- Error state -->\r\n    {#if error}\r\n        <div class=\"error-message\">\r\n            <p>{error}</p>\r\n            <button on:click={fetchStudents} class=\"retry-button\">Bandyti dar kartą</button>\r\n        </div>\r\n    {/if}\r\n    \r\n    <!-- Students list -->\r\n    {#if !loading && !error}\r\n        <div class=\"students-summary\">\r\n            <p>Rasta studentų: <strong>{filteredStudents.length}</strong> iš {students.length}</p>\r\n        </div>\r\n        \r\n        {#if showGrouped}\r\n            <!-- Family groups view -->\r\n            {#if Object.keys(filteredFamilyGroups).length > 0}\r\n                <div class=\"family-groups\">\r\n                    {#each Object.entries(filteredFamilyGroups) as [familyName, familyStudents]}\r\n                        <div class=\"family-group\">\r\n                            <div class=\"family-header\">\r\n                                <h3>🏠 {familyName}</h3>\r\n                                <span class=\"family-count\">{familyStudents.length} studentų</span>\r\n                            </div>\r\n                            \r\n                            <div class=\"students-grid\">\r\n                                {#each familyStudents as student}\r\n                                    <div class=\"student-card\">\r\n                                        <div class=\"student-header\">\r\n                                            <div class=\"student-name\">\r\n                                                <h4>{student.first_name} {student.last_name}</h4>\r\n                                                <p class=\"student-email\">{student.email}</p>\r\n                                            </div>\r\n                                            <div class=\"login-status {getLoginStatus(student.last_login)}\">\r\n                                                <span class=\"status-indicator\"></span>\r\n                                                {formatLastLogin(student.last_login)}\r\n                                            </div>\r\n                                        </div>\r\n                                        \r\n                                        <div class=\"student-details\">\r\n                                            <div class=\"detail-row\">\r\n                                                <span class=\"detail-label\">Naudotojo vardas:</span>\r\n                                                <span class=\"detail-value\">{student.username}</span>\r\n                                            </div>\r\n                                            \r\n                                            {#if student.phone_number}\r\n                                                <div class=\"detail-row\">\r\n                                                    <span class=\"detail-label\">Tel. numeris:</span>\r\n                                                    <span class=\"detail-value\">{student.phone_number}</span>\r\n                                                </div>\r\n                                            {/if}\r\n                                            \r\n                                            {#if student.parent}\r\n                                                <div class=\"parent-section\">\r\n                                                    <h5>Tėvų informacija</h5>\r\n                                                    <div class=\"detail-row\">\r\n                                                        <span class=\"detail-label\">Tėvo vardas:</span>\r\n                                                        <span class=\"detail-value\">{student.parent.full_name}</span>\r\n                                                    </div>\r\n                                                    <div class=\"detail-row\">\r\n                                                        <span class=\"detail-label\">Tėvo el. paštas:</span>\r\n                                                        <span class=\"detail-value\">{student.parent.email}</span>\r\n                                                    </div>\r\n                                                    {#if student.parent.phone_number}\r\n                                                        <div class=\"detail-row\">\r\n                                                            <span class=\"detail-label\">Tėvo tel.:</span>\r\n                                                            <span class=\"detail-value\">{student.parent.phone_number}</span>\r\n                                                        </div>\r\n                                                    {/if}\r\n                                                </div>\r\n                                            {/if}\r\n                                            \r\n                                            <div class=\"detail-row\">\r\n                                                <span class=\"detail-label\">Registracijos data:</span>\r\n                                                <span class=\"detail-value\">{new Date(student.date_joined).toLocaleDateString('lt-LT')}</span>\r\n                                            </div>\r\n                                            \r\n                                            <div class=\"detail-row\">\r\n                                                <span class=\"detail-label\">Statusas:</span>\r\n                                                <span class=\"detail-value {student.is_active ? 'active' : 'inactive'}\">\r\n                                                    {student.is_active ? 'Aktyvus' : 'Neaktyvus'}\r\n                                                </span>\r\n                                            </div>\r\n                                        </div>\r\n                                    </div>\r\n                                {/each}\r\n                            </div>\r\n                        </div>\r\n                    {/each}\r\n                </div>\r\n            {/if}\r\n            \r\n            <!-- Students without family -->\r\n            {#if filteredStudentsWithoutFamily.length > 0}\r\n                <div class=\"students-without-family\">\r\n                    <div class=\"section-header\">\r\n                        <h3>👤 Studentai be šeimos grupės</h3>\r\n                        <span class=\"section-count\">{filteredStudentsWithoutFamily.length} studentų</span>\r\n                    </div>\r\n                    \r\n                    <div class=\"students-grid\">\r\n                        {#each filteredStudentsWithoutFamily as student}\r\n                            <div class=\"student-card\">\r\n                                <div class=\"student-header\">\r\n                                    <div class=\"student-name\">\r\n                                        <h4>{student.first_name} {student.last_name}</h4>\r\n                                        <p class=\"student-email\">{student.email}</p>\r\n                                    </div>\r\n                                    <div class=\"login-status {getLoginStatus(student.last_login)}\">\r\n                                        <span class=\"status-indicator\"></span>\r\n                                        {formatLastLogin(student.last_login)}\r\n                                    </div>\r\n                                </div>\r\n                                \r\n                                <div class=\"student-details\">\r\n                                    <div class=\"detail-row\">\r\n                                        <span class=\"detail-label\">Naudotojo vardas:</span>\r\n                                        <span class=\"detail-value\">{student.username}</span>\r\n                                    </div>\r\n                                    \r\n                                    {#if student.phone_number}\r\n                                        <div class=\"detail-row\">\r\n                                            <span class=\"detail-label\">Tel. numeris:</span>\r\n                                            <span class=\"detail-value\">{student.phone_number}</span>\r\n                                        </div>\r\n                                    {/if}\r\n                                    \r\n                                    {#if student.parent}\r\n                                        <div class=\"parent-section\">\r\n                                            <h5>Tėvų informacija</h5>\r\n                                            <div class=\"detail-row\">\r\n                                                <span class=\"detail-label\">Tėvo vardas:</span>\r\n                                                <span class=\"detail-value\">{student.parent.full_name}</span>\r\n                                            </div>\r\n                                            <div class=\"detail-row\">\r\n                                                <span class=\"detail-label\">Tėvo el. paštas:</span>\r\n                                                <span class=\"detail-value\">{student.parent.email}</span>\r\n                                            </div>\r\n                                            {#if student.parent.phone_number}\r\n                                                <div class=\"detail-row\">\r\n                                                    <span class=\"detail-label\">Tėvo tel.:</span>\r\n                                                    <span class=\"detail-value\">{student.parent.phone_number}</span>\r\n                                                </div>\r\n                                            {/if}\r\n                                        </div>\r\n                                    {/if}\r\n                                    \r\n                                    <div class=\"detail-row\">\r\n                                        <span class=\"detail-label\">Registracijos data:</span>\r\n                                        <span class=\"detail-value\">{new Date(student.date_joined).toLocaleDateString('lt-LT')}</span>\r\n                                    </div>\r\n                                    \r\n                                    <div class=\"detail-row\">\r\n                                        <span class=\"detail-label\">Statusas:</span>\r\n                                        <span class=\"detail-value {student.is_active ? 'active' : 'inactive'}\">\r\n                                            {student.is_active ? 'Aktyvus' : 'Neaktyvus'}\r\n                                        </span>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        {/each}\r\n                    </div>\r\n                </div>\r\n            {/if}\r\n        {:else}\r\n            <!-- Flat view -->\r\n            <div class=\"students-list\">\r\n                {#each filteredStudents as student}\r\n                    <div class=\"student-card\">\r\n                        <div class=\"student-header\">\r\n                            <div class=\"student-name\">\r\n                                <h4>{student.first_name} {student.last_name}</h4>\r\n                                <p class=\"student-email\">{student.email}</p>\r\n                                {#if student.families.length > 0}\r\n                                    <p class=\"student-families\">🏠 {student.families.join(', ')}</p>\r\n                                {/if}\r\n                            </div>\r\n                            <div class=\"login-status {getLoginStatus(student.last_login)}\">\r\n                                <span class=\"status-indicator\"></span>\r\n                                {formatLastLogin(student.last_login)}\r\n                            </div>\r\n                        </div>\r\n                        \r\n                        <div class=\"student-details\">\r\n                            <div class=\"detail-row\">\r\n                                <span class=\"detail-label\">Naudotojo vardas:</span>\r\n                                <span class=\"detail-value\">{student.username}</span>\r\n                            </div>\r\n                            \r\n                            {#if student.phone_number}\r\n                                <div class=\"detail-row\">\r\n                                    <span class=\"detail-label\">Tel. numeris:</span>\r\n                                    <span class=\"detail-value\">{student.phone_number}</span>\r\n                                </div>\r\n                            {/if}\r\n                            \r\n                            {#if student.parent}\r\n                                <div class=\"parent-section\">\r\n                                    <h5>Tėvų informacija</h5>\r\n                                    <div class=\"detail-row\">\r\n                                        <span class=\"detail-label\">Tėvo vardas:</span>\r\n                                        <span class=\"detail-value\">{student.parent.full_name}</span>\r\n                                    </div>\r\n                                    <div class=\"detail-row\">\r\n                                        <span class=\"detail-label\">Tėvo el. paštas:</span>\r\n                                        <span class=\"detail-value\">{student.parent.email}</span>\r\n                                    </div>\r\n                                    {#if student.parent.phone_number}\r\n                                        <div class=\"detail-row\">\r\n                                            <span class=\"detail-label\">Tėvo tel.:</span>\r\n                                            <span class=\"detail-value\">{student.parent.phone_number}</span>\r\n                                        </div>\r\n                                    {/if}\r\n                                </div>\r\n                            {/if}\r\n                            \r\n                            <div class=\"detail-row\">\r\n                                <span class=\"detail-label\">Registracijos data:</span>\r\n                                <span class=\"detail-value\">{new Date(student.date_joined).toLocaleDateString('lt-LT')}</span>\r\n                            </div>\r\n                            \r\n                            <div class=\"detail-row\">\r\n                                <span class=\"detail-label\">Statusas:</span>\r\n                                <span class=\"detail-value {student.is_active ? 'active' : 'inactive'}\">\r\n                                    {student.is_active ? 'Aktyvus' : 'Neaktyvus'}\r\n                                </span>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                {/each}\r\n            </div>\r\n        {/if}\r\n        \r\n        {#if filteredStudents.length === 0 && students.length > 0}\r\n            <div class=\"no-results\">\r\n                <p>Nerasta studentų pagal jūsų paieškos kriterijus.</p>\r\n            </div>\r\n        {:else if students.length === 0}\r\n            <div class=\"no-students\">\r\n                <p>Sistemoje nėra registruotų studentų.</p>\r\n            </div>\r\n        {/if}\r\n    {/if}\r\n</div>\r\n\r\n<style>\r\n    .students-list-container {\r\n        max-width: 100%;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n    \r\n    .search-section {\r\n        background: #f8f9fa;\r\n        padding: 15px;\r\n        border-radius: 8px;\r\n        margin-bottom: 20px;\r\n        border: 1px solid #e1e5e9;\r\n        display: flex;\r\n        gap: 20px;\r\n        align-items: flex-end;\r\n    }\r\n    \r\n    .search-field {\r\n        flex: 1;\r\n    }\r\n    \r\n    .search-field label {\r\n        display: block;\r\n        margin-bottom: 8px;\r\n        font-weight: 500;\r\n        color: #333;\r\n    }\r\n    \r\n    .search-field input {\r\n        width: 100%;\r\n        padding: 12px 16px;\r\n        border: 2px solid #e1e5e9;\r\n        border-radius: 8px;\r\n        font-size: 16px;\r\n        transition: border-color 0.3s ease;\r\n    }\r\n    \r\n    .search-field input:focus {\r\n        outline: none;\r\n        border-color: #667eea;\r\n        box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\r\n    }\r\n    \r\n    .view-toggle {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        font-weight: 500;\r\n        color: #333;\r\n    }\r\n    \r\n    .view-toggle input[type=\"checkbox\"] {\r\n        transform: scale(1.2);\r\n    }\r\n    \r\n    .loading-message, .error-message, .no-results, .no-students {\r\n        text-align: center;\r\n        padding: 40px 20px;\r\n        background: white;\r\n        border-radius: 12px;\r\n        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\r\n    }\r\n    \r\n    .error-message {\r\n        color: #dc3545;\r\n    }\r\n    \r\n    .retry-button {\r\n        background: #667eea;\r\n        color: white;\r\n        border: none;\r\n        padding: 10px 20px;\r\n        border-radius: 6px;\r\n        cursor: pointer;\r\n        margin-top: 15px;\r\n        transition: background-color 0.3s ease;\r\n    }\r\n    \r\n    .retry-button:hover {\r\n        background: #5a67d8;\r\n    }\r\n    \r\n    .students-summary {\r\n        margin-bottom: 20px;\r\n        padding: 15px;\r\n        background: #f8f9fa;\r\n        border-radius: 8px;\r\n        text-align: center;\r\n    }\r\n    \r\n    /* Family Groups Styles */\r\n    .family-groups {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 30px;\r\n    }\r\n    \r\n    .family-group {\r\n        background: white;\r\n        border-radius: 12px;\r\n        padding: 20px;\r\n        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\r\n        border: 2px solid #e1e5e9;\r\n    }\r\n    \r\n    .family-header {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        margin-bottom: 20px;\r\n        padding-bottom: 15px;\r\n        border-bottom: 2px solid #f0f4f8;\r\n    }\r\n    \r\n    .family-header h3 {\r\n        margin: 0;\r\n        color: #2d3748;\r\n        font-size: 1.4em;\r\n        font-weight: 600;\r\n    }\r\n    \r\n    .family-count, .section-count {\r\n        background: #fab45a;\r\n        color: white;\r\n        padding: 6px 12px;\r\n        border-radius: 15px;\r\n        font-size: 0.85em;\r\n        font-weight: 500;\r\n    }\r\n    \r\n    .students-without-family {\r\n        background: white;\r\n        border-radius: 12px;\r\n        padding: 20px;\r\n        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\r\n        border: 2px solid #e1e5e9;\r\n        margin-top: 30px;\r\n    }\r\n    \r\n    .section-header {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        margin-bottom: 20px;\r\n        padding-bottom: 15px;\r\n        border-bottom: 2px solid #f0f4f8;\r\n    }\r\n    \r\n    .section-header h3 {\r\n        margin: 0;\r\n        color: #2d3748;\r\n        font-size: 1.4em;\r\n        font-weight: 600;\r\n    }\r\n    \r\n    /* Students Grid */\r\n    .students-grid {\r\n        display: grid;\r\n        grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));\r\n        gap: 20px;\r\n    }\r\n    \r\n    .students-list {\r\n        display: grid;\r\n        gap: 20px;\r\n    }\r\n    \r\n    .student-card {\r\n        background: #fafbfc;\r\n        border-radius: 10px;\r\n        padding: 20px;\r\n        box-shadow: 0 1px 5px rgba(0, 0, 0, 0.05);\r\n        border: 1px solid #e8ecf0;\r\n        transition: transform 0.2s ease, box-shadow 0.2s ease;\r\n    }\r\n    \r\n    .student-card:hover {\r\n        transform: translateY(-2px);\r\n        box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\r\n    }\r\n    \r\n    .student-header {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: flex-start;\r\n        margin-bottom: 15px;\r\n        padding-bottom: 12px;\r\n        border-bottom: 1px solid #e1e5e9;\r\n    }\r\n    \r\n    .student-name h4 {\r\n        margin: 0 0 5px 0;\r\n        color: #2d3748;\r\n        font-size: 1.1em;\r\n        font-weight: 600;\r\n    }\r\n    \r\n    .student-email {\r\n        margin: 0;\r\n        color: #667eea;\r\n        font-size: 0.9em;\r\n    }\r\n    \r\n    .student-families {\r\n        margin: 5px 0 0 0;\r\n        color: #fab45a;\r\n        font-size: 0.85em;\r\n        font-weight: 500;\r\n    }\r\n    \r\n    .login-status {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 6px;\r\n        padding: 6px 10px;\r\n        border-radius: 15px;\r\n        font-size: 0.8em;\r\n        font-weight: 500;\r\n    }\r\n    \r\n    .status-indicator {\r\n        width: 6px;\r\n        height: 6px;\r\n        border-radius: 50%;\r\n    }\r\n    \r\n    .login-status.recent {\r\n        background: #d4edda;\r\n        color: #155724;\r\n    }\r\n    \r\n    .login-status.recent .status-indicator {\r\n        background: #28a745;\r\n    }\r\n    \r\n    .login-status.moderate {\r\n        background: #fff3cd;\r\n        color: #856404;\r\n    }\r\n    \r\n    .login-status.moderate .status-indicator {\r\n        background: #ffc107;\r\n    }\r\n    \r\n    .login-status.old {\r\n        background: #f8d7da;\r\n        color: #721c24;\r\n    }\r\n    \r\n    .login-status.old .status-indicator {\r\n        background: #dc3545;\r\n    }\r\n    \r\n    .login-status.never-logged {\r\n        background: #e2e3e5;\r\n        color: #383d41;\r\n    }\r\n    \r\n    .login-status.never-logged .status-indicator {\r\n        background: #6c757d;\r\n    }\r\n    \r\n    .student-details {\r\n        display: grid;\r\n        gap: 10px;\r\n    }\r\n    \r\n    .detail-row {\r\n        display: grid;\r\n        grid-template-columns: 1fr 1fr;\r\n        gap: 10px;\r\n        align-items: center;\r\n    }\r\n    \r\n    .detail-label {\r\n        font-weight: 500;\r\n        color: #4a5568;\r\n        font-size: 0.9em;\r\n    }\r\n    \r\n    .detail-value {\r\n        color: #2d3748;\r\n        word-break: break-word;\r\n        font-size: 0.9em;\r\n    }\r\n    \r\n    .detail-value.active {\r\n        color: #28a745;\r\n        font-weight: 500;\r\n    }\r\n    \r\n    .detail-value.inactive {\r\n        color: #dc3545;\r\n        font-weight: 500;\r\n    }\r\n    \r\n    .parent-section {\r\n        background: #f0f4f8;\r\n        padding: 12px;\r\n        border-radius: 8px;\r\n        margin-top: 8px;\r\n        grid-column: 1 / -1;\r\n    }\r\n    \r\n    .parent-section h5 {\r\n        margin: 0 0 10px 0;\r\n        color: #2d3748;\r\n        font-size: 0.95em;\r\n        font-weight: 600;\r\n    }\r\n    \r\n    .parent-section .detail-row {\r\n        margin-bottom: 5px;\r\n    }\r\n    \r\n    .parent-section .detail-row:last-child {\r\n        margin-bottom: 0;\r\n    }\r\n    \r\n    @media (max-width: 768px) {\r\n        .search-section {\r\n            flex-direction: column;\r\n            align-items: stretch;\r\n        }\r\n        \r\n        .students-grid {\r\n            grid-template-columns: 1fr;\r\n        }\r\n        \r\n        .student-header {\r\n            flex-direction: column;\r\n            gap: 15px;\r\n        }\r\n        \r\n        .detail-row {\r\n            grid-template-columns: 1fr;\r\n            gap: 5px;\r\n        }\r\n        \r\n        .detail-label {\r\n            font-size: 0.8em;\r\n        }\r\n        \r\n        .family-header, .section-header {\r\n            flex-direction: column;\r\n            gap: 10px;\r\n            align-items: flex-start;\r\n        }\r\n    }\r\n</style>\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n\r\n    let groupedClasses = {};\r\n    let filteredGroupedClasses = {};\r\n    let loading = true;\r\n    let activeFilter = 'all'; // 'all', 'today-onwards', 'week'\r\n\r\n    // map of classId → boolean (expanded?)\r\n    let expandedMap = {};\r\n\r\n    async function handleFetchFirstClasses() {\r\n      const token = localStorage.getItem('jwtToken');\r\n      try {\r\n        const res = await fetch(\r\n          '/studentplayground/api/admin/first-classes-new-teachers/',\r\n          {\r\n            method: 'GET',\r\n            headers: {\r\n              'Authorization': `Bearer ${token}`,\r\n              'Content-Type':  'application/json'\r\n            }\r\n          }\r\n        );\r\n        if (!res.ok) throw new Error(res.statusText);\r\n        groupedClasses = await res.json();\r\n      } catch (err) {\r\n        console.error('Error fetching first classes:', err);\r\n        alert(`Error loading first classes: ${err.message}`);\r\n      } finally {\r\n        loading = false;\r\n      }\r\n    }\r\n\r\n    onMount(handleFetchFirstClasses);\r\n\r\n    // Reactive statement to filter classes based on selected filter\r\n    $: {\r\n        filteredGroupedClasses = filterClassesByDate(groupedClasses, activeFilter);\r\n    }\r\n\r\n    function filterClassesByDate(classes, filter) {\r\n        if (filter === 'all') {\r\n            return classes;\r\n        }\r\n\r\n        const today = new Date();\r\n        today.setHours(0, 0, 0, 0); // Set to start of today\r\n        \r\n        let startDate, endDate;\r\n        \r\n        if (filter === 'today-onwards') {\r\n            startDate = new Date(today);\r\n            endDate = null; // No end date for \"today onwards\"\r\n        } else if (filter === 'week') {\r\n            // 3 days in the past and 3 days in the future\r\n            startDate = new Date(today);\r\n            startDate.setDate(today.getDate() - 3);\r\n            endDate = new Date(today);\r\n            endDate.setDate(today.getDate() + 3);\r\n        }\r\n\r\n        const filtered = {};\r\n        \r\n        Object.entries(classes).forEach(([dateString, classArray]) => {\r\n            const classDate = new Date(dateString);\r\n            classDate.setHours(0, 0, 0, 0);\r\n            \r\n            let includeDate = false;\r\n            \r\n            if (filter === 'today-onwards') {\r\n                includeDate = classDate >= startDate;\r\n            } else if (filter === 'week') {\r\n                includeDate = classDate >= startDate && classDate <= endDate;\r\n            }\r\n            \r\n            if (includeDate && classArray.length > 0) {\r\n                filtered[dateString] = classArray;\r\n            }\r\n        });\r\n        \r\n        return filtered;\r\n    }\r\n\r\n    function switchFilter(filter) {\r\n        activeFilter = filter;\r\n    }\r\n\r\n    // toggle expanded state for one card\r\n    function toggleExpand(id) {\r\n      expandedMap[id] = !expandedMap[id];\r\n      // reassign to trigger Svelte reactivity\r\n      expandedMap = { ...expandedMap };\r\n    }\r\n\r\n    function formatDateTime(dateString, timeString) {\r\n      if (!dateString || !timeString) return '-';\r\n      const d = new Date(`${dateString}T${timeString}`);\r\n      // Format in Lithuania timezone\r\n      return `${d.toLocaleDateString('lt-LT', { timeZone: 'Europe/Vilnius' })} at ${timeString}`;\r\n    }\r\n\r\n    function formatDateHeader(dateString) {\r\n      if (!dateString) return 'Unknown Date';\r\n      const d = new Date(dateString);\r\n      return d.toLocaleDateString('lt-LT', { \r\n        weekday: 'long',\r\n        year: 'numeric', \r\n        month: 'long', \r\n        day: 'numeric' \r\n      });\r\n    }\r\n\r\n    function getStudentDisplayName(studentName) {\r\n      return studentName || 'Unknown Student';\r\n    }\r\n\r\n    function openClassLink(link) {\r\n      if (link) {\r\n        window.open(link, '_blank');\r\n      }\r\n    }\r\n\r\n    // Function to handle admin handled/unhandled actions\r\n    async function handleAdminAction(classItem, action) {\r\n      const token = localStorage.getItem('jwtToken');\r\n      \r\n      try {\r\n        const response = await fetch(\r\n          '/studentplayground/api/admin/first-class-encounter-action/',\r\n          {\r\n            method: 'POST',\r\n            headers: {\r\n              'Authorization': `Bearer ${token}`,\r\n              'Content-Type': 'application/json'\r\n            },\r\n            body: JSON.stringify({\r\n              student_id: classItem.student_id,\r\n              teacher_name: classItem.teacher,\r\n              class_date: classItem.class_date,\r\n              gcal_event_id: classItem.gcal_event_id,\r\n              class_name: classItem.class_name,\r\n              action: action\r\n            })\r\n          }\r\n        );\r\n\r\n        if (response.ok) {\r\n          const result = await response.json();\r\n          let successMessage;\r\n          if (action === 'mark_handled') {\r\n            successMessage = 'First class encounter marked as handled successfully!';\r\n          } else if (action === 'mark_unhandled') {\r\n            successMessage = 'First class encounter marked as unhandled successfully!';\r\n          } else {\r\n            successMessage = `Encounter ${action} successfully!`;\r\n          }\r\n          alert(successMessage);\r\n          // Refresh the data\r\n          await handleFetchFirstClasses();\r\n        } else {\r\n          const error = await response.json();\r\n          console.error('Failed to perform action:', error);\r\n          alert(`Failed to ${action} encounter: ${error.error || response.statusText}`);\r\n        }\r\n      } catch (error) {\r\n        console.error('Error in admin action:', error);\r\n        alert(`Error ${action}ing encounter: ${error.message}`);\r\n      }\r\n    }\r\n  </script>\r\n  \r\n  <style>\r\n  /* Header styling matching AdminClassRegistrationRequestsComponent */\r\n  .labelDiv {\r\n    display: flex;\r\n    justify-content: space-around;\r\n    margin-bottom: 2rem;\r\n  }\r\n  .labelDiv span {\r\n    font-size: 1.2rem;\r\n    font-weight: bold;\r\n    color: #333;\r\n  }\r\n\r\n  /* Loading and empty states */\r\n  .loading-message, .empty-message {\r\n    text-align: center;\r\n    padding: 2rem;\r\n    color: #666;\r\n    font-style: italic;\r\n  }\r\n\r\n  /* Date group styling */\r\n  .date-group {\r\n    margin-bottom: 2rem;\r\n  }\r\n  .date-header {\r\n    font-size: 1.1rem;\r\n    font-weight: bold;\r\n    color: #0055aa;\r\n    border-bottom: 2px solid #0055aa;\r\n    padding-bottom: 0.5rem;\r\n    margin-bottom: 1rem;\r\n  }\r\n\r\n  /* Filter navigation */\r\n  .filter-navigation {\r\n    display: flex;\r\n    gap: 10px;\r\n    margin-bottom: 2rem;\r\n    justify-content: center;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .filter-button {\r\n    padding: 10px 20px;\r\n    border: 1px solid #ccc;\r\n    background: white;\r\n    cursor: pointer;\r\n    border-radius: 8px;\r\n    font-size: 14px;\r\n    transition: all 0.2s ease;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .filter-button:hover {\r\n    background-color: #f8f9fa;\r\n    border-color: #0055aa;\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .filter-button.active {\r\n    background: #0055aa;\r\n    color: white;\r\n    border-color: #0055aa;\r\n    box-shadow: 0 2px 4px rgba(0, 85, 170, 0.3);\r\n  }\r\n\r\n  .filter-button.active:hover {\r\n    background: #004488;\r\n  }\r\n\r\n  /* Section header */\r\n  .section-header {\r\n    margin: 2rem 0 1rem 0;\r\n    padding: 1.5rem;\r\n    border-radius: 8px;\r\n    text-align: center;\r\n    background: linear-gradient(135deg, #e8f5e8 0%, #d4edda 100%);\r\n    border: 1px solid #c3e6cb;\r\n    color: #155724;\r\n  }\r\n  .section-header h2 {\r\n    margin: 0 0 0.5rem 0;\r\n    font-size: 1.3rem;\r\n    font-weight: bold;\r\n  }\r\n  .section-header p {\r\n    margin: 0;\r\n    font-size: 0.95rem;\r\n    opacity: 0.8;\r\n  }\r\n  .results-count {\r\n    margin-top: 0.5rem;\r\n    font-size: 0.85rem;\r\n    font-weight: 600;\r\n    opacity: 0.9;\r\n  }\r\n\r\n  /* Class card styling */\r\n  .class-card {\r\n    border: 1px solid #ccc;\r\n    border-radius: 8px;\r\n    margin-bottom: 1rem;\r\n    background: #fff;\r\n    overflow: hidden;\r\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n    transition: box-shadow 0.2s ease;\r\n  }\r\n  .class-card:hover {\r\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\r\n  }\r\n\r\n  /* Summary button styling */\r\n  .class-summary {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    width: 100%;\r\n    padding: 1rem;\r\n    border: none;\r\n    background: #fff;\r\n    cursor: pointer;\r\n    text-align: left;\r\n    transition: background-color 0.2s ease;\r\n    font-size: 1rem;\r\n    border-left: 4px solid #28a745;\r\n  }\r\n  .class-summary:hover {\r\n    background-color: #f8f9fa;\r\n  }\r\n\r\n  /* Summary content layout */\r\n  .summary-content {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    flex: 1;\r\n    margin-right: 1rem;\r\n  }\r\n  .summary-main {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.3rem;\r\n  }\r\n  .student-name {\r\n    font-weight: bold;\r\n    color: #333;\r\n    font-size: 1rem;\r\n  }\r\n  .teacher-info {\r\n    color: #666;\r\n    font-size: 0.9rem;\r\n  }\r\n  .first-class-badge {\r\n    background: linear-gradient(135deg, #fff3cd 0%, #ffeaa7 100%);\r\n    color: #856404;\r\n    padding: 0.3rem 0.8rem;\r\n    border-radius: 12px;\r\n    font-size: 0.75rem;\r\n    font-weight: bold;\r\n    text-transform: uppercase;\r\n    border: 1px solid #ffeaa7;\r\n  }\r\n\r\n  /* Handled status badge */\r\n  .handled-badge {\r\n    padding: 0.3rem 0.8rem;\r\n    border-radius: 12px;\r\n    font-size: 0.75rem;\r\n    font-weight: bold;\r\n    text-transform: uppercase;\r\n  }\r\n  .handled-badge.handled {\r\n    background-color: #d4edda;\r\n    color: #155724;\r\n    border: 1px solid #c3e6cb;\r\n  }\r\n  .handled-badge.unhandled {\r\n    background-color: #fff3cd;\r\n    color: #856404;\r\n    border: 1px solid #ffeaa7;\r\n  }\r\n\r\n  /* Time badge */\r\n  .time-badge {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.3rem;\r\n    align-items: flex-end;\r\n  }\r\n  .class-time {\r\n    background-color: #e1f5fe;\r\n    color: #01579b;\r\n    padding: 0.3rem 0.8rem;\r\n    border-radius: 12px;\r\n    font-size: 0.85rem;\r\n    font-weight: bold;\r\n    border: 1px solid #b3e5fc;\r\n  }\r\n\r\n  /* Expand icon */\r\n  .expand-icon {\r\n    color: #0055aa;\r\n    font-size: 0.8rem;\r\n    transition: transform 0.2s ease;\r\n  }\r\n\r\n  /* Details section */\r\n  .class-details {\r\n    padding: 1.5rem;\r\n    background-color: #f8f9fa;\r\n    border-top: 1px solid #e9ecef;\r\n  }\r\n  .details-grid {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 1rem;\r\n  }\r\n  .detail-item {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.3rem;\r\n  }\r\n  .detail-item.full-width {\r\n    grid-column: 1 / -1;\r\n  }\r\n  .detail-label {\r\n    font-weight: bold;\r\n    color: #0055aa;\r\n    font-size: 0.9rem;\r\n  }\r\n  .detail-value {\r\n    color: #333;\r\n    font-size: 1rem;\r\n    padding: 0.4rem;\r\n    background-color: #fff;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n  }\r\n\r\n  /* Special highlight for first class */\r\n  .first-class-highlight {\r\n    background: linear-gradient(135deg, #fff3cd 0%, #fff8dc 100%);\r\n    border: 1px solid #ffeaa7;\r\n    color: #856404;\r\n    padding: 0.8rem;\r\n    border-radius: 6px;\r\n    font-size: 0.9rem;\r\n    line-height: 1.4;\r\n    font-weight: 600;\r\n  }\r\n\r\n  /* Handled info styling */\r\n  .handled-info {\r\n    background: #d4edda;\r\n    color: #155724;\r\n    padding: 0.8rem;\r\n    border-radius: 6px;\r\n    border: 1px solid #c3e6cb;\r\n    font-size: 0.9rem;\r\n    line-height: 1.4;\r\n  }\r\n\r\n  .handled-info strong {\r\n    font-weight: 600;\r\n  }\r\n\r\n  /* Parent information styling */\r\n  .parent-info {\r\n    background: #e8f4fd;\r\n    color: #0c5460;\r\n    padding: 0.8rem;\r\n    border-radius: 6px;\r\n    border: 1px solid #bee5eb;\r\n    font-size: 0.9rem;\r\n    line-height: 1.6;\r\n  }\r\n\r\n  .parent-info div {\r\n    margin-bottom: 0.3rem;\r\n  }\r\n\r\n  .parent-info div:last-child {\r\n    margin-bottom: 0;\r\n  }\r\n\r\n  .parent-info strong {\r\n    font-weight: 600;\r\n  }\r\n\r\n  .parent-info-none {\r\n    background: #f8f9fa;\r\n    color: #6c757d;\r\n    padding: 0.8rem;\r\n    border-radius: 6px;\r\n    border: 1px solid #dee2e6;\r\n    font-size: 0.9rem;\r\n    font-style: italic;\r\n  }\r\n\r\n  /* Action buttons */\r\n  .action-buttons {\r\n    display: flex;\r\n    gap: 1rem;\r\n    margin-top: 0.5rem;\r\n    flex-wrap: wrap;\r\n  }\r\n  \r\n  .action-button {\r\n    padding: 0.8rem 1.5rem;\r\n    border: none;\r\n    border-radius: 6px;\r\n    font-weight: bold;\r\n    cursor: pointer;\r\n    transition: all 0.2s ease;\r\n    font-size: 0.9rem;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 0.5rem;\r\n  }\r\n  \r\n  .handled-button {\r\n    background-color: #28a745;\r\n    color: white;\r\n  }\r\n  \r\n  .handled-button:hover {\r\n    background-color: #218838;\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 2px 4px rgba(40, 167, 69, 0.3);\r\n  }\r\n  \r\n  .unhandled-button {\r\n    background-color: #dc3545;\r\n    color: white;\r\n  }\r\n  \r\n  .unhandled-button:hover {\r\n    background-color: #c82333;\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 2px 4px rgba(220, 53, 69, 0.3);\r\n  }\r\n  \r\n  .join-button {\r\n    background-color: #17a2b8;\r\n    color: white;\r\n  }\r\n  \r\n  .join-button:hover {\r\n    background-color: #138496;\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 2px 4px rgba(23, 162, 184, 0.3);\r\n  }\r\n  \r\n  .action-button:active {\r\n    transform: translateY(0);\r\n  }\r\n\r\n  /* Responsive adjustments */\r\n  @media (max-width: 768px) {\r\n    .details-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n    .summary-content {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 0.5rem;\r\n    }\r\n    .time-badge {\r\n      align-self: flex-end;\r\n    }\r\n    .action-buttons {\r\n      flex-direction: column;\r\n      gap: 0.5rem;\r\n    }\r\n    .action-button {\r\n      justify-content: center;\r\n    }\r\n  }\r\n</style>\r\n  \r\n  <div class=\"labelDiv\">\r\n  <span>FIRST CLASSES WITH NEW TEACHERS</span>\r\n</div>\r\n\r\n<!-- Filter Navigation -->\r\n<div class=\"filter-navigation\">\r\n  <button \r\n    class=\"filter-button {activeFilter === 'all' ? 'active' : ''}\"\r\n    on:click={() => switchFilter('all')}\r\n  >\r\n    All\r\n  </button>\r\n  <button \r\n    class=\"filter-button {activeFilter === 'today-onwards' ? 'active' : ''}\"\r\n    on:click={() => switchFilter('today-onwards')}\r\n  >\r\n    Today Onwards\r\n  </button>\r\n  <button \r\n    class=\"filter-button {activeFilter === 'week' ? 'active' : ''}\"\r\n    on:click={() => switchFilter('week')}\r\n  >\r\n    Week (±3 days)\r\n  </button>\r\n</div>\r\n\r\n{#if loading}\r\n  <div class=\"loading-message\">Loading first classes data…</div>\r\n{:else if Object.keys(groupedClasses).length === 0}\r\n  <div class=\"empty-message\">No first classes with new teachers found.</div>\r\n{:else if Object.keys(filteredGroupedClasses).length === 0}\r\n  <div class=\"empty-message\">No first classes found for the selected filter.</div>\r\n{:else}\r\n  <div class=\"section-header\">\r\n    <h2>🎯 Student-Teacher First Encounters</h2>\r\n    <p>Students meeting their new teachers for the first time</p>\r\n    <div class=\"results-count\">\r\n      Showing {Object.values(filteredGroupedClasses).flat().length} encounters\r\n      {#if activeFilter !== 'all'}\r\n        ({activeFilter === 'today-onwards' ? 'from today onwards' : 'within ±3 days'})\r\n      {/if}\r\n    </div>\r\n  </div>\r\n  \r\n  {#each Object.entries(filteredGroupedClasses).sort((a, b) => a[0].localeCompare(b[0])) as [day, classes]}\r\n    <div class=\"date-group\">\r\n      <h3 class=\"date-header\">{formatDateHeader(day)}</h3>\r\n      {#each classes as classItem (classItem.id)}\r\n        <div class=\"class-card\">\r\n          <!-- Summary Header -->\r\n          <button\r\n            type=\"button\"\r\n            class=\"class-summary\"\r\n            on:click={() => toggleExpand(classItem.id)}\r\n          >\r\n            <div class=\"summary-content\">\r\n              <div class=\"summary-main\">\r\n                <span class=\"student-name\">{getStudentDisplayName(classItem.student_name)}</span>\r\n                <span class=\"teacher-info\">First class with: <strong>{classItem.teacher}</strong></span>\r\n              </div>\r\n              <div class=\"time-badge\">\r\n                <div class=\"first-class-badge\">First Encounter</div>\r\n                <div class=\"handled-badge {classItem.is_handled ? 'handled' : 'unhandled'}\">\r\n                  {classItem.is_handled ? 'Handled' : 'Unhandled'}\r\n                </div>\r\n                <div class=\"class-time\">{classItem.class_time}</div>\r\n              </div>\r\n            </div>\r\n            <div class=\"expand-icon\">\r\n              {expandedMap[classItem.id] ? '▼' : '▶'}\r\n            </div>\r\n          </button>\r\n\r\n          <!-- Expanded Details -->\r\n          {#if expandedMap[classItem.id]}\r\n            <div class=\"class-details\">\r\n              <div class=\"details-grid\">\r\n                <div class=\"detail-item\">\r\n                  <span class=\"detail-label\">Student Name:</span>\r\n                  <span class=\"detail-value\">{classItem.student_name}</span>\r\n                </div>\r\n                <div class=\"detail-item\">\r\n                  <span class=\"detail-label\">Student Email:</span>\r\n                  <span class=\"detail-value\">{classItem.student_email || 'N/A'}</span>\r\n                </div>\r\n                <div class=\"detail-item\">\r\n                  <span class=\"detail-label\">Student Phone:</span>\r\n                  <span class=\"detail-value\">{classItem.student_phone || 'N/A'}</span>\r\n                </div>\r\n                <div class=\"detail-item\">\r\n                  <span class=\"detail-label\">Teacher:</span>\r\n                  <span class=\"detail-value\">{classItem.teacher}</span>\r\n                </div>\r\n                <div class=\"detail-item\">\r\n                  <span class=\"detail-label\">Class Time:</span>\r\n                  <span class=\"detail-value\">{formatDateTime(classItem.class_date, classItem.class_time)}</span>\r\n                </div>\r\n                <div class=\"detail-item full-width\">\r\n                  <span class=\"detail-label\">Class Name:</span>\r\n                  <span class=\"detail-value\">{classItem.class_name}</span>\r\n                </div>\r\n                <div class=\"detail-item full-width\">\r\n                  <span class=\"detail-label\">Display Time:</span>\r\n                  <span class=\"detail-value\">{classItem.display_time || 'N/A'}</span>\r\n                </div>\r\n                \r\n                <!-- Parent Information Section -->\r\n                {#if classItem.parent_name || classItem.parent_phone || classItem.parent_email}\r\n                  <div class=\"detail-item full-width\">\r\n                    <span class=\"detail-label\">Parent Information:</span>\r\n                    <div class=\"parent-info\">\r\n                      {#if classItem.parent_name}\r\n                        <div><strong>👤 Parent Name:</strong> {classItem.parent_name}</div>\r\n                      {/if}\r\n                      {#if classItem.parent_phone}\r\n                        <div><strong>📞 Parent Phone:</strong> {classItem.parent_phone}</div>\r\n                      {/if}\r\n                      {#if classItem.parent_email}\r\n                        <div><strong>📧 Parent Email:</strong> {classItem.parent_email}</div>\r\n                      {/if}\r\n                    </div>\r\n                  </div>\r\n                {:else}\r\n                  <div class=\"detail-item full-width\">\r\n                    <span class=\"detail-label\">Parent Information:</span>\r\n                    <div class=\"parent-info-none\">\r\n                      ℹ️ No parent information available\r\n                    </div>\r\n                  </div>\r\n                {/if}\r\n                \r\n                <!-- Special highlight for first class -->\r\n                <div class=\"detail-item full-width\">\r\n                  <span class=\"detail-label\">Significance:</span>\r\n                  <div class=\"first-class-highlight\">\r\n                    🎯 <strong>First Time Meeting:</strong> This is the first class where {classItem.student_name} will work with {classItem.teacher}. This represents the beginning of their student-teacher relationship.\r\n                  </div>\r\n                </div>\r\n                \r\n                <!-- Handled status info -->\r\n                {#if classItem.is_handled && classItem.handled_by}\r\n                  <div class=\"detail-item full-width\">\r\n                    <span class=\"detail-label\">Handled Status:</span>\r\n                    <div class=\"handled-info\">\r\n                      <strong>✓ Handled by:</strong> {classItem.handled_by}<br>\r\n                      <strong>Handled at:</strong> {formatDateTime(classItem.handled_at?.split('T')[0], classItem.handled_at?.split('T')[1]?.split('.')[0])}\r\n                      {#if classItem.notes}\r\n                        <br><strong>Notes:</strong> {classItem.notes}\r\n                      {/if}\r\n                    </div>\r\n                  </div>\r\n                {/if}\r\n                \r\n                <!-- Admin action buttons -->\r\n                <div class=\"detail-item full-width\">\r\n                  <span class=\"detail-label\">Admin Actions:</span>\r\n                  <div class=\"action-buttons\">\r\n                    {#if classItem.is_handled}\r\n                      <button \r\n                        class=\"action-button unhandled-button\"\r\n                        on:click={() => handleAdminAction(classItem, 'mark_unhandled')}\r\n                      >\r\n                        ✗ Mark as Unhandled\r\n                      </button>\r\n                    {:else}\r\n                      <button \r\n                        class=\"action-button handled-button\"\r\n                        on:click={() => handleAdminAction(classItem, 'mark_handled')}\r\n                      >\r\n                        ✓ Mark as Handled\r\n                      </button>\r\n                    {/if}\r\n                    \r\n                    {#if classItem.class_link}\r\n                      <button \r\n                        class=\"action-button join-button\"\r\n                        on:click={() => openClassLink(classItem.class_link)}\r\n                      >\r\n                        🔗 Join Class\r\n                      </button>\r\n                    {/if}\r\n                  </div>\r\n                </div>\r\n                \r\n                <!-- Additional metadata -->\r\n                <div class=\"detail-item\">\r\n                  <span class=\"detail-label\">Event ID:</span>\r\n                  <span class=\"detail-value\">{classItem.gcal_event_id || 'N/A'}</span>\r\n                </div>\r\n                <div class=\"detail-item\">\r\n                  <span class=\"detail-label\">Student ID:</span>\r\n                  <span class=\"detail-value\">#{classItem.student_id}</span>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          {/if}\r\n        </div>\r\n      {/each}\r\n    </div>\r\n  {/each}\r\n{/if}\r\n","<script>\r\n  import { onMount } from 'svelte';\r\n  import ClassDidNotHappenComponent from './ClassDidNotHappenComponent.svelte';\r\n  import TeacherPerformanceRating from './TeacherPerformanceRating.svelte';\r\n  import TeacherInvoiceComponent from './TeacherInvoiceComponent.svelte';\r\n  import TeacherInfoComponent from './TeacherInfoComponent.svelte';\r\n  import StudentInfoComponent from './StudentInfoComponent.svelte';\r\n  import TeachersListComponent from './TeachersListComponent.svelte';\r\n  import StudentsListComponent from './StudentsListComponent.svelte';\r\n  import AdminFirstClassesNewTeachersComponent from './AdminFirstClassesNewTeachersComponent.svelte';\r\n\r\n  import NavBarReusable from './NavbarReusable.svelte';\r\n\r\n  // State for tab management\r\n  let activeTab = 'incidents'; // 'incidents', 'performance', 'invoices', 'first-classes-new-teachers', 'teacher-info', 'student-info', 'teachers-list', or 'students-list'\r\n  let deepLinkTeacherId = null;\r\n\r\n  function switchTab(tab) {\r\n    activeTab = tab;\r\n  }\r\n\r\n  function getHashParts() {\r\n    const hash = window.location.hash || '#/teacherSurveilance';\r\n    const qIndex = hash.indexOf('?');\r\n    if (qIndex === -1) return { path: hash, params: new URLSearchParams() };\r\n    return { path: hash.slice(0, qIndex), params: new URLSearchParams(hash.slice(qIndex + 1)) };\r\n  }\r\n\r\n  function readTabFromHash() {\r\n    const { path, params } = getHashParts();\r\n    if (!path.startsWith('#/teacherSurveilance')) return;\r\n    const tab = params.get('tab');\r\n    const teacherId = params.get('teacherId');\r\n    if (tab) activeTab = tab;\r\n    deepLinkTeacherId = teacherId ? parseInt(teacherId, 10) : null;\r\n  }\r\n\r\n  onMount(() => {\r\n    readTabFromHash();\r\n    const onHashChange = () => readTabFromHash();\r\n    window.addEventListener('hashchange', onHashChange);\r\n    return () => window.removeEventListener('hashchange', onHashChange);\r\n  });\r\n</script>\r\n\r\n<NavBarReusable label=\"Admin - Teacher Monitoring\" />\r\n\r\n<div class=\"calendar-launch\"><a href=\"#/admin/calendar\" target=\"_blank\" rel=\"noopener noreferrer\">Open Tutory Calendar</a></div>\r\n\r\n<div class=\"tab-navigation\">\r\n  <button \r\n    class=\"tab-button {activeTab === 'incidents' ? 'active' : ''}\"\r\n    on:click={() => switchTab('incidents')}\r\n  >\r\n    Class Incidents\r\n  </button>\r\n  <button \r\n    class=\"tab-button {activeTab === 'first-classes-new-teachers' ? 'active' : ''}\"\r\n    on:click={() => switchTab('first-classes-new-teachers')}\r\n  >\r\n    First Classes with New Teachers\r\n  </button>\r\n  <button \r\n    class=\"tab-button {activeTab === 'performance' ? 'active' : ''}\"\r\n    on:click={() => switchTab('performance')}\r\n  >\r\n    Teacher Performance\r\n  </button>\r\n  <button \r\n    class=\"tab-button {activeTab === 'invoices' ? 'active' : ''}\"\r\n    on:click={() => switchTab('invoices')}\r\n  >\r\n    Teacher Invoices\r\n  </button>\r\n  <button \r\n    class=\"tab-button {activeTab === 'teacher-info' ? 'active' : ''}\"\r\n    on:click={() => switchTab('teacher-info')}\r\n  >\r\n    Teacher Information\r\n  </button>\r\n  <button \r\n    class=\"tab-button {activeTab === 'student-info' ? 'active' : ''}\"\r\n    on:click={() => switchTab('student-info')}\r\n  >\r\n    Student Information\r\n  </button>\r\n  <button \r\n    class=\"tab-button {activeTab === 'teachers-list' ? 'active' : ''}\"\r\n    on:click={() => switchTab('teachers-list')}\r\n  >\r\n    Teachers List\r\n  </button>\r\n  <button \r\n    class=\"tab-button {activeTab === 'students-list' ? 'active' : ''}\"\r\n    on:click={() => switchTab('students-list')}\r\n  >\r\n    Students List\r\n  </button>\r\n</div>\r\n\r\n{#if activeTab === 'incidents'}\r\n  <div class=\"classcontainer\">\r\n    <h3>Class Incident Reporting</h3>\r\n    <ClassDidNotHappenComponent />\r\n  </div>\r\n{:else if activeTab === 'first-classes-new-teachers'}\r\n  <div class=\"classcontainer\">\r\n    <h3>First Classes with New Teachers</h3>\r\n    <AdminFirstClassesNewTeachersComponent />\r\n  </div>\r\n{:else if activeTab === 'performance'}\r\n  <div class=\"classcontainer\">\r\n    <h3>Teacher Performance Rating</h3>\r\n    <TeacherPerformanceRating embedded={!!deepLinkTeacherId} teacherId={deepLinkTeacherId} />\r\n  </div>\r\n{:else if activeTab === 'invoices'}\r\n  <div class=\"classcontainer\">\r\n    <h3>Teacher Invoice Generation</h3>\r\n    <TeacherInvoiceComponent />\r\n  </div>\r\n{:else if activeTab === 'teacher-info'}\r\n  <div class=\"classcontainer\">\r\n    <h3>Teacher Information</h3>\r\n    <TeacherInfoComponent embedded={!!deepLinkTeacherId} teacherId={deepLinkTeacherId} />\r\n  </div>\r\n{:else if activeTab === 'student-info'}\r\n  <div class=\"classcontainer\">\r\n    <h3>Student Information</h3>\r\n    <StudentInfoComponent />\r\n  </div>\r\n{:else if activeTab === 'teachers-list'}\r\n  <div class=\"classcontainer\">\r\n    <h3>Teachers List</h3>\r\n    <TeachersListComponent />\r\n  </div>\r\n{:else if activeTab === 'students-list'}\r\n  <div class=\"classcontainer\">\r\n    <h3>Students List</h3>\r\n    <StudentsListComponent />\r\n  </div>\r\n{/if}\r\n\r\n<style>\r\n  .calendar-launch { margin: 18px 0; }\r\n  .calendar-launch a { display: inline-block; padding: 14px 24px; background: #273c75; color: white; text-decoration: none; border-radius: 12px; font-weight: 700; }\r\n  .tab-navigation {\r\n    display: flex;\r\n    gap: 10px;\r\n    margin-bottom: 20px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .tab-button {\r\n    padding: 10px 20px;\r\n    border: 1px solid #ccc;\r\n    background: white;\r\n    cursor: pointer;\r\n    border-radius: 8px;\r\n  }\r\n\r\n  .tab-button.active {\r\n    background: #fab45a;\r\n    color: black;\r\n    border-color: #fab45a;\r\n  }\r\n\r\n  .classcontainer {\r\n    padding: 15px;\r\n    background-color: white;\r\n    display: flex;\r\n    flex-direction: column;\r\n    margin-bottom: 15px;\r\n    gap: 10px;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    border-radius: 8px;\r\n    flex: none;\r\n    color: black;\r\n    align-items: flex-start;\r\n  }\r\n\r\n  .classcontainer h3 {\r\n    margin: 0 0 15px 0;\r\n    color: #333;\r\n  }\r\n\r\n  /* Override nested component styles for cleaner integration */\r\n  :global(.classcontainer .teacher-performance-rating) {\r\n    max-width: none;\r\n    margin: 0;\r\n    padding: 0;\r\n  }\r\n</style>\r\n","<script>\r\n  import { push } from 'svelte-spa-router';\r\n\r\n  let formData = {\r\n    email: ''\r\n  };\r\n\r\n  let errorMessage = '';\r\n  let successMessage = '';\r\n  let isLoading = false;\r\n\r\n  async function handleSubmit(event) {\r\n    event.preventDefault();\r\n    errorMessage = '';\r\n    successMessage = '';\r\n    isLoading = true;\r\n\r\n    console.log('=== FORGOT PASSWORD DEBUG INFO ===');\r\n    console.log('Email:', formData.email);\r\n\r\n    // Create a timeout wrapper for fetch\r\n    const fetchWithTimeout = (url, options, timeout = 10000) => {\r\n      return Promise.race([\r\n        fetch(url, options),\r\n        new Promise((_, reject) =>\r\n          setTimeout(() => reject(new Error('Request timeout')), timeout)\r\n        )\r\n      ]);\r\n    };\r\n\r\n    try {\r\n      console.log('Sending forgot password request...');\r\n      \r\n      const response = await fetchWithTimeout('/studentplayground/api/forgot-password/', {\r\n          method: 'POST',\r\n          headers: {\r\n              'Content-Type': 'application/json',\r\n          },\r\n          body: JSON.stringify(formData)\r\n      }, 15000);\r\n\r\n      console.log('Received response:', response);\r\n\r\n      if (response.ok) {\r\n          console.log('Response OK:', response.status);\r\n          \r\n          const data = await response.json();\r\n          console.log('Response data:', data);\r\n          \r\n          successMessage = data.message || 'Slaptažodžio atkūrimo instrukcijos išsiųstos į jūsų el. paštą.';\r\n          \r\n          // Clear the form\r\n          formData.email = '';\r\n          \r\n      } else {\r\n          console.warn('Response NOT OK:', response.status);\r\n          \r\n          const errorData = await response.json();\r\n          console.log('Error data:', errorData);\r\n          \r\n          errorMessage = errorData.message || 'El. paštas nerastas sistemoje. Patikrinkite įvestį ir bandykite dar kartą.';\r\n      }\r\n    } catch (error) {\r\n      console.error('Fetch error:', error);\r\n      errorMessage = 'Klaida siunčiant užklausą. Patikrinkite interneto ryšį ir bandykite dar kartą.';\r\n    } finally {\r\n      isLoading = false;\r\n    }\r\n\r\n    console.log('Error message:', errorMessage);\r\n    console.log('Success message:', successMessage);\r\n  }\r\n\r\n  function goBackToLogin() {\r\n    push('/');\r\n  }\r\n\r\n  function handleBackToLoginKeydown(event) {\r\n    if (event.key === 'Enter' || event.key === ' ') {\r\n      event.preventDefault();\r\n      goBackToLogin();\r\n    }\r\n  }\r\n</script>\r\n\r\n<style>\r\n  .background {\r\n    position: fixed;\r\n    top: 0;\r\n    left: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    z-index: -1;\r\n    background-color: #fffffa;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n  }\r\n\r\n  .content {\r\n    position: relative;\r\n    z-index: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    justify-content: center;\r\n    max-width: 400px;\r\n    margin: 20px auto\r\n  }\r\n\r\n  div {\r\n    padding: 15px;\r\n  }\r\n\r\n  form {\r\n    width: 90%;\r\n    padding: 15px;\r\n    background-color: #eeebdb;\r\n    border-radius: 10px;\r\n    box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n  }\r\n\r\n  .form-title {\r\n    color: #14695b;\r\n    font-size: 22px;\r\n    font-weight: bold;\r\n    margin-bottom: 12px;\r\n    text-align: center;\r\n  }\r\n\r\n  .form-description {\r\n    color: #14695b;\r\n    font-size: 14px;\r\n    margin-bottom: 15px;\r\n    text-align: center;\r\n    line-height: 1.3;\r\n  }\r\n\r\n  label {\r\n    display: block;\r\n    margin-top: 10px;\r\n    font-weight: bold;\r\n    align-self: baseline;\r\n    color: #14695b;\r\n  }\r\n\r\n  input, button {\r\n    width: -webkit-fill-available;\r\n    display: block;\r\n    padding: 10px;\r\n    margin-top: 10px;\r\n    border-radius: 5px;\r\n    border: 1px solid #ddd;\r\n  }\r\n\r\n  button {\r\n    background-color: #fab45a;\r\n    color: #674a25;\r\n    font-weight: bold;\r\n    border: 1px solid;\r\n    border-color: #674a25;\r\n    height: 50px;\r\n    cursor: pointer;\r\n  }\r\n\r\n  button:hover:not(:disabled) {\r\n    background-color: #674a25;\r\n    color: #fab45a;\r\n    border-color: #fab45a;\r\n  }\r\n\r\n  button:disabled {\r\n    opacity: 0.6;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  .error-message {\r\n    color: red;\r\n    font-weight: bold;\r\n    margin-top: 10px;\r\n    text-align: center;\r\n  }\r\n\r\n  .success-message {\r\n    color: green;\r\n    font-weight: bold;\r\n    margin-top: 10px;\r\n    text-align: center;\r\n  }\r\n\r\n  .back-to-login {\r\n    margin-top: 8px;\r\n    text-align: center;\r\n    color: #14695b;\r\n    font-size: 14px;\r\n    cursor: pointer;\r\n    text-decoration: underline;\r\n  }\r\n\r\n  .back-to-login:hover,\r\n  .back-to-login:focus {\r\n    color: #fab45a;\r\n    outline: none;\r\n    text-decoration: none;\r\n    font-weight: bold;\r\n  }\r\n\r\n  @media (max-aspect-ratio: 4/3) {\r\n    .content {\r\n      width: calc(100%-40px);\r\n    }\r\n  }\r\n\r\n  @media (min-aspect-ratio: 4/3) {\r\n    .content {\r\n      width: 80%;\r\n      margin: 40px auto 0;\r\n    }\r\n  }\r\n</style>\r\n\r\n<div class=\"background\"></div>\r\n\r\n<div class=\"content\">\r\n  <form on:submit={handleSubmit}>\r\n    <img src=\"/static/images/Tutory Logo Black 1.png\" alt=\"TUTORY Logo\" class=\"logo\" style=\"max-width: 200px;\">\r\n    \r\n    <div class=\"form-title\">Slaptažodžio atkūrimas</div>\r\n    \r\n    <div class=\"form-description\">\r\n      Įveskite savo el. pašto adresą ir mes atsiųsime jums naują slaptažodį.\r\n    </div>\r\n    \r\n    <label for=\"email\">El. pašto adresas</label>\r\n    <input \r\n      type=\"email\" \r\n      bind:value={formData.email} \r\n      placeholder=\"jusu@email.com\"\r\n      required\r\n      disabled={isLoading}\r\n    >\r\n    \r\n    <button type=\"submit\" disabled={isLoading}>\r\n      {isLoading ? 'Siunčiama...' : 'Atkurti slaptažodį'}\r\n    </button>\r\n    \r\n    {#if errorMessage}\r\n      <div class=\"error-message\">{errorMessage}</div>\r\n    {/if}\r\n    \r\n    {#if successMessage}\r\n      <div class=\"success-message\">{successMessage}</div>\r\n    {/if}\r\n  </form>\r\n  \r\n  <div \r\n    class=\"back-to-login\" \r\n    on:click={goBackToLogin}\r\n    on:keydown={handleBackToLoginKeydown}\r\n    tabindex=\"0\"\r\n    role=\"button\"\r\n  >\r\n    ← Grįžti į prisijungimą\r\n  </div>\r\n</div>\r\n","<script>\r\n  import { onMount, onDestroy } from 'svelte';\r\n  import NavBarReusable from './NavbarReusable.svelte';\r\n  import { generateTeacherPerformanceMonths } from './teacherPerformanceMonths.js';\r\n\r\n  // State for submission and data\r\n  let loading = true;\r\n  let submitError = null;\r\n  let retentionData = null;\r\n  let commentsData = null;\r\n  let completionData = null;\r\n  let surveyData = null;\r\n  let paymentData = null;\r\n  let bonusData = null;\r\n  let teacherInfo = null;\r\n  let isUserAdmin = false;\r\n  let mounted = true;\r\n  let showAllPaymentClasses = false;\r\n\r\n  // State for month selection\r\n  let selectedMonth = '';\r\n  let availableMonths = [];\r\n\r\n  // Check if user is admin\r\n  async function checkIfUserIsAdmin() {\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      isUserAdmin = false;\r\n      return;\r\n    }\r\n\r\n    // Create a timeout promise for admin check\r\n    const timeoutPromise = new Promise((_, reject) => {\r\n      setTimeout(() => reject(new Error('Admin check timeout')), 10000); // 10 second timeout\r\n    });\r\n\r\n    try {\r\n      const responsePromise = fetch('/studentplayground/api/check_admin_status/', {\r\n        method: 'GET',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n      });\r\n\r\n      const response = await Promise.race([responsePromise, timeoutPromise]);\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        isUserAdmin = data.is_admin || false;\r\n      } else {\r\n        console.warn('Admin status check failed:', response.status);\r\n        isUserAdmin = false;\r\n      }\r\n    } catch (error) {\r\n      console.error('Error checking admin status:', error);\r\n      isUserAdmin = false;\r\n    }\r\n  }\r\n\r\n  // Fetch current teacher's performance data automatically\r\n  async function fetchTeacherPerformance() {\r\n    loading = true;\r\n    submitError = null;\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      submitError = 'JWT token not found. Please log in.';\r\n      loading = false;\r\n      return;\r\n    }\r\n\r\n    if (!selectedMonth) {\r\n      submitError = 'Please select a month first.';\r\n      loading = false;\r\n      return;\r\n    }\r\n\r\n    // Create a timeout promise to prevent infinite loading\r\n    const timeoutPromise = new Promise((_, reject) => {\r\n      setTimeout(() => reject(new Error('Request timeout')), 30000); // 30 second timeout\r\n    });\r\n\r\n    try {\r\n      // Get current teacher info first with timeout protection\r\n      const teacherResponsePromise = fetch('/studentplayground/api/get_current_teacher_info/', {\r\n        method: 'GET',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n      });\r\n\r\n      const teacherResponse = await Promise.race([teacherResponsePromise, timeoutPromise]);\r\n\r\n      if (!teacherResponse.ok) {\r\n        const errorText = await teacherResponse.text();\r\n        throw new Error(`Failed to get teacher information: ${teacherResponse.status} - ${errorText}`);\r\n      }\r\n\r\n      const teacherData = await teacherResponse.json();\r\n      teacherInfo = teacherData;\r\n\r\n      // Validate teacher data before proceeding\r\n      if (!teacherData.teacher_id || !teacherData.teacher_name) {\r\n        throw new Error('Invalid teacher information received');\r\n      }\r\n\r\n      // Now get performance data with timeout protection\r\n      const performanceResponsePromise = fetch('/studentplayground/api/teacher_performance_rating/', {\r\n        method: 'POST',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n          teacher_id: teacherData.teacher_id,\r\n          teacher_name: teacherData.teacher_name,\r\n          selected_month: selectedMonth,\r\n          selected_at: new Date().toISOString()\r\n        })\r\n      });\r\n\r\n      const response = await Promise.race([performanceResponsePromise, timeoutPromise]);\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        console.log('Teacher performance data received:', data);\r\n        retentionData = data.retention_analysis;\r\n        commentsData = data.comments_analysis;\r\n        completionData = data.completion_analysis;\r\n        surveyData = data.survey_analysis;\r\n        paymentData = data.payment_analysis;\r\n        bonusData = data.bonus_analysis;\r\n      } else {\r\n        const errorData = await response.json().catch(() => ({}));\r\n        submitError = errorData.error || `Failed to load performance data: ${response.status}`;\r\n        // Still show teacher info even if performance data fails\r\n        console.log('Performance data failed but teacher info available');\r\n      }\r\n    } catch (error) {\r\n      console.error('Error fetching teacher performance:', error);\r\n      if (error.message === 'Request timeout') {\r\n        submitError = 'Request timed out. Please check your connection and try again.';\r\n      } else {\r\n        submitError = `Network error: ${error.message}`;\r\n      }\r\n      // Make sure navigation still works even if there are errors\r\n      console.log('Error occurred but ensuring component remains navigable');\r\n    } finally {\r\n      // Ensure loading is always set to false and navigation remains functional\r\n      if (mounted) {\r\n        loading = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  // On mount, automatically fetch teacher performance\r\n  onMount(() => {\r\n    // Initialize available months\r\n    availableMonths = generateTeacherPerformanceMonths();\r\n    \r\n    // Set default to current month\r\n    const now = new Date();\r\n    const currentYear = now.getFullYear();\r\n    const currentMonth = now.getMonth() + 1; // getMonth() is 0-indexed\r\n    const currentMonthValue = `${currentYear}-${String(currentMonth).padStart(2, '0')}`;\r\n    \r\n    // Check if current month is in available months, otherwise use first available month\r\n    const isCurrentMonthAvailable = availableMonths.some(m => m.value === currentMonthValue);\r\n    selectedMonth = isCurrentMonthAvailable ? currentMonthValue : (availableMonths.length > 0 ? availableMonths[0].value : '');\r\n    \r\n    // Add a small delay to ensure the component is fully mounted before making API calls\r\n    setTimeout(() => {\r\n      if (mounted) {\r\n        checkIfUserIsAdmin();\r\n        fetchTeacherPerformance();\r\n      }\r\n    }, 100);\r\n\r\n    // Safety mechanism: Clear loading state after a maximum time\r\n    const maxLoadingTime = setTimeout(() => {\r\n      if (mounted && loading) {\r\n        console.warn('Loading state cleared due to timeout');\r\n        loading = false;\r\n        if (!submitError) {\r\n          submitError = 'Data loading timed out. Please try again.';\r\n        }\r\n      }\r\n    }, 60000); // 60 seconds max loading time\r\n\r\n    // Clear the timeout when component is destroyed\r\n    return () => {\r\n      clearTimeout(maxLoadingTime);\r\n    };\r\n  });\r\n\r\n  // Cleanup on destroy - delay the cleanup to ensure navigation isn't interfered with\r\n  onDestroy(() => {\r\n    // Use a small delay to prevent interference with navigation\r\n    setTimeout(() => {\r\n      mounted = false;\r\n    }, 50);\r\n  });\r\n</script>\r\n\r\n<NavBarReusable label=\"Statistika\" />\r\n\r\n<div class=\"teacher-performance-page\">\r\n  <h2>Statistika</h2>\r\n  <p class=\"description\">Čia pateikti jūsų mokymo veiklos rodikliai ir mokinių atsiliepimai.</p>\r\n\r\n  <div class=\"month-selection\">\r\n    <label for=\"month-select\"><strong>Pasirinkite mėnesį:</strong></label>\r\n    <select\r\n      id=\"month-select\"\r\n      bind:value={selectedMonth}\r\n      class=\"month-dropdown\"\r\n      on:change={fetchTeacherPerformance}\r\n    >\r\n      <option value=\"\">Pasirinkite mėnesį...</option>\r\n      {#each availableMonths as month}\r\n        <option value={month.value}>{month.label}</option>\r\n      {/each}\r\n    </select>\r\n  </div>\r\n\r\n  {#if loading}\r\n    <div class=\"loading-message\">\r\n      Kraunami jūsų veiklos duomenys...\r\n    </div>\r\n  {/if}\r\n\r\n  {#if submitError}\r\n    <div class=\"error-message\">\r\n      {submitError}\r\n      <div class=\"error-actions\">\r\n        <button class=\"retry-button\" on:click={fetchTeacherPerformance}>\r\n          Bandyti dar kartą\r\n        </button>\r\n      </div>\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Always show basic content even when there's no data -->\r\n  {#if !loading && !submitError && (!retentionData && !commentsData && !completionData && !surveyData && !paymentData && !bonusData)}\r\n    <div class=\"no-data-message\">\r\n      <p>Šiame mėnesyje pamokų nerasta</p>\r\n    </div>\r\n  {/if}\r\n\r\n  {#if teacherInfo && !loading}\r\n    <div class=\"teacher-info\">\r\n      <h3>Teacher Information</h3>\r\n      <p><strong>Name:</strong> {teacherInfo.teacher_name}</p>\r\n      {#if teacherInfo.email}\r\n        <p><strong>Email:</strong> {teacherInfo.email}</p>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  <!-- Bonus Criteria Summary Section -->\r\n  {#if bonusData}\r\n    <div class=\"bonus-criteria-summary\">\r\n      <h3>🎯 Bonus Criteria Status</h3>\r\n      <div class=\"criteria-grid\">\r\n        <div class=\"criterion-card {bonusData.details.admin_punctuality_rate >= 90 ? 'eligible' : 'not-eligible'}\">\r\n          <div class=\"criterion-icon\">\r\n            {#if bonusData.details.admin_punctuality_rate >= 90}✅{:else}❌{/if}\r\n          </div>\r\n          <div class=\"criterion-content\">\r\n            <h4>Profesionalumas</h4>\r\n            <p class=\"criterion-value\">{bonusData.details.admin_punctuality_rate ?? 'nerasta'}% (90%+ reikia)</p>\r\n            <p class=\"criterion-status {bonusData.details.admin_punctuality_rate >= 90 ? 'met' : 'not-met'}\">\r\n              {bonusData.details.admin_punctuality_rate >= 90 ? 'Įvykdyta' : 'Neįvykdyta'}\r\n            </p>\r\n            <small>Incidentų: {bonusData.details.teacher_incidents_count ?? 'nerasta'}</small>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"criterion-card {bonusData.details.teacher_comment_submission_rate >= 93 ? 'eligible' : 'not-eligible'}\">\r\n          <div class=\"criterion-icon\">\r\n            {#if bonusData.details.teacher_comment_submission_rate >= 93}✅{:else}❌{/if}\r\n          </div>\r\n          <div class=\"criterion-content\">\r\n            <h4>Komentarų pateikimas</h4>\r\n            <p class=\"criterion-value\">{bonusData.details.teacher_comment_submission_rate ?? 'nerasta'}% (93% reikia)</p>\r\n            <p class=\"criterion-status {bonusData.details.teacher_comment_submission_rate >= 93 ? 'met' : 'not-met'}\">\r\n              {bonusData.details.teacher_comment_submission_rate >= 93 ? 'Įvykdyta' : 'Neįvykdyta'}\r\n            </p>\r\n            <small>Komentarų: {bonusData.details.classes_with_teacher_comments ?? 'nerasta'}/{bonusData.details.total_classes ?? 'nerasta'}</small>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      {#if bonusData.eligible_for_bonus}\r\n        <div class=\"bonus-eligibility-banner\">\r\n          <div class=\"bonus-icon\">🎉</div>\r\n          <div class=\"bonus-message\">\r\n            <h4>Sveikiname! Gaunate premijos priedą</h4>\r\n            <p>Kiekviena mokama pamoka šį mėnesį gauna <strong>+€{bonusData.amount_per_class ?? 2} premijos priedą</strong></p>\r\n            {#if bonusData.details.month_period}\r\n              <small>Laikotarpis: {new Date(bonusData.details.month_period.start_date).toLocaleDateString()} - {new Date(bonusData.details.month_period.end_date).toLocaleDateString()}</small>\r\n            {/if}\r\n          </div>\r\n        </div>\r\n      {:else}\r\n        <div class=\"bonus-eligibility-banner not-eligible\">\r\n          <div class=\"bonus-icon\">📊</div>\r\n          <div class=\"bonus-message\">\r\n            <h4>Premijos kriterijai neįvykdyti</h4>\r\n            <p>Kai visi kriterijai bus įvykdyti, gausite <strong>+€{bonusData.amount_per_class ?? 2} premijos priedą</strong> už kiekvieną mokamą pamoką</p>\r\n            {#if bonusData.details.month_period}\r\n              <small>Laikotarpis: {new Date(bonusData.details.month_period.start_date).toLocaleDateString()} - {new Date(bonusData.details.month_period.end_date).toLocaleDateString()}</small>\r\n            {/if}\r\n          </div>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  {#if paymentData}\r\n    <div class=\"retention-container\">\r\n      <h3>Mano mokėjimų analizė</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Bendras mokėjimas: €{paymentData.payment_analysis.total_payment}</strong>\r\n        </div>\r\n        <p>({paymentData.payment_analysis.total_completed_classes} baigta, {paymentData.payment_analysis.total_upcoming_classes} planuojama | Vidutiniškai €{paymentData.payment_analysis.average_payment_per_class} už pamoką)</p>\r\n        <p>Laikotarpis: {new Date(paymentData.period.start_date).toLocaleDateString()} - {new Date(paymentData.period.end_date).toLocaleDateString()}</p>\r\n      </div>\r\n\r\n      {#if paymentData.payment_analysis.total_month_classes > 0}\r\n        <!-- Class Summary Section -->\r\n        <div class=\"comments-section\">\r\n          <h4>Pamokų suvestinė</h4>\r\n          <div class=\"payment-breakdown-container\">\r\n            <div class=\"payment-section\">\r\n              <h5>Pamokų tipai</h5>\r\n              <ul class=\"class-count-list\">\r\n                <li><strong>Individualios pamokos:</strong> {paymentData.payment_analysis.payment_summary?.individual_classes?.count || 0} pamokos</li>\r\n                <li><strong>Porų pamokos:</strong> {paymentData.payment_analysis.payment_summary?.pair_classes?.count || 0} pamokos</li>\r\n                <li><strong>Grupės pamokos:</strong> {paymentData.payment_analysis.payment_summary?.group_classes?.count || 0} pamokos</li>\r\n              </ul>\r\n            </div>\r\n            \r\n            <div class=\"payment-section\">\r\n              <h5>Specialios kategorijos</h5>\r\n              <ul class=\"class-count-list\">\r\n                <li><strong>Specialių sąlygų pamokos:</strong> {paymentData.payment_analysis.payment_summary?.ib_classes?.count || 0} pamokos</li>\r\n                {#if (paymentData.payment_analysis.payment_summary?.free_classes?.count || 0) > 0}\r\n                  <li><strong>Nemokamos pamokos:</strong> {paymentData.payment_analysis.payment_summary?.free_classes?.count || 0} pamokos</li>\r\n                {/if}\r\n                <li class=\"total-classes\"><strong>Iš viso pamokų: {paymentData.payment_analysis.total_completed_classes + paymentData.payment_analysis.total_upcoming_classes}</strong></li>\r\n              </ul>\r\n            </div>\r\n          </div>\r\n          <div class=\"payment-total-only\">\r\n            <p><strong>Bendras mokėjimas: €{paymentData.payment_analysis.total_payment}</strong></p>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Class-by-Class Payment Details -->\r\n        <div class=\"comments-section\">\r\n          <h4>Detalūs mokėjimų duomenys pagal pamokas</h4>\r\n          <div class=\"attendance-details\">\r\n            {#each paymentData.payment_analysis.class_payment_details\r\n              .sort((a, b) => new Date(a.class_time) - new Date(b.class_time))\r\n              .slice(0, showAllPaymentClasses ? paymentData.payment_analysis.class_payment_details.length : 10) as classDetail}\r\n              <div class=\"attendance-item {classDetail.status === 'upcoming' ? 'upcoming-class' : ''}\">\r\n                <div class=\"attendance-header\">\r\n                  <strong>{classDetail.class_name}</strong>\r\n                  <div class=\"class-status-payment\">\r\n                    <span class=\"class-status {classDetail.status}\">{classDetail.status === 'upcoming' ? 'planuojama' : classDetail.status === 'completed' ? 'baigta' : classDetail.status}</span>\r\n                    <span class=\"attendance-rate {classDetail.is_free_class ? 'free-class' : 'paid-class'}\">\r\n                      €{classDetail.payment}\r\n                    </span>\r\n                  </div>\r\n                </div>\r\n                <div class=\"attendance-stats\">\r\n                  <small>{classDetail.display_time}</small>\r\n                  <small>Mokiniai: {classDetail.students} ({classDetail.student_count_category === 'individual' ? 'individualus' : classDetail.student_count_category === 'pair' ? 'pora' : classDetail.student_count_category === 'group' ? 'grupė' : classDetail.student_count_category})</small>\r\n                  {#if classDetail.special_conditions && classDetail.special_conditions.length > 0}\r\n                    <div class=\"special-conditions-container\">\r\n                      {#each classDetail.special_conditions as condition}\r\n                        {#if condition === 'IB'}\r\n                          <small class=\"special-condition ib-condition\">IB (+€5)</small>\r\n                        {:else if condition === 'Special Needs'}\r\n                          <small class=\"special-condition special-needs-condition\">Spec. poreikiai (+€3)</small>\r\n                        {:else if condition === 'Lithuanian Second Language'}\r\n                          <small class=\"special-condition lithuanian-condition\">Lietuvių K2(+€3)</small>\r\n                        {/if}\r\n                      {/each}\r\n                      {#if classDetail.special_conditions_surcharge > 0}\r\n                        <small class=\"total-surcharge\">Viso priedas: +€{classDetail.special_conditions_surcharge}</small>\r\n                      {/if}\r\n                    </div>\r\n                  {/if}\r\n                  {#if classDetail.bonus_applied}\r\n                    <div class=\"bonus-container\">\r\n                      <small class=\"special-condition bonus-condition\">PREMIJA (+€{classDetail.bonus_amount_applied ?? bonusData?.amount_per_class ?? 2})</small>\r\n                    </div>\r\n                  {/if}\r\n                  {#if classDetail.is_free_class}\r\n                    <small class=\"free-reason\">Nemokai: Pirmoji pamoka nepasilikusiems mokiniams</small>\r\n                  {/if}\r\n                  {#if classDetail.has_first_time_students && classDetail.first_time_students.length > 0}\r\n                    <small class=\"first-time\">Pirmą kartą: {classDetail.first_time_students.join(', ')}</small>\r\n                  {/if}\r\n                  {#if classDetail.has_retained_students && classDetail.retained_students.length > 0}\r\n                    <small class=\"retained\">Pasilieka: {classDetail.retained_students.join(', ')}</small>\r\n                  {/if}\r\n                </div>\r\n              </div>\r\n            {/each}\r\n            {#if paymentData.payment_analysis.class_payment_details.length > 10 && !showAllPaymentClasses}\r\n              <div class=\"show-all-button-container\">\r\n                <button class=\"show-all-button\" on:click={() => showAllPaymentClasses = true}>\r\n                  Peržiūrėti visas pamokas ({paymentData.payment_analysis.class_payment_details.length - 10} daugiau)\r\n                </button>\r\n              </div>\r\n            {/if}\r\n          </div>\r\n        </div>\r\n      {:else}\r\n        <div class=\"no-data\">\r\n          <p>Šį mėnesį pamokų nerasta.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n\r\n\r\n  {#if surveyData}\r\n    <div class=\"retention-container\">\r\n      <h3>Mano apklausų pateikimo dažnis</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Apklausų pateikimo dažnis: {surveyData.survey_analysis.submission_rate_percentage}%</strong>\r\n        </div>\r\n        <p>({surveyData.survey_analysis.surveys_submitted} iš {surveyData.survey_analysis.total_classes} pamokų turi mokytojų apklausas)</p>\r\n        <p>Laikotarpis: {new Date(surveyData.month_period.start_date).toLocaleDateString()} - {new Date(surveyData.month_period.end_date).toLocaleDateString()}</p>\r\n      </div>\r\n\r\n      {#if surveyData.survey_analysis.total_classes > 0}\r\n        <!-- Progress Bar -->\r\n        <div class=\"comments-section\">\r\n          <h4>Pateikimo apžvalga</h4>\r\n          <div class=\"metric-item\">\r\n            <strong>Bendras atitikimas</strong>\r\n            <div class=\"metric-bar\">\r\n              <div class=\"metric-fill\" style=\"width: {surveyData.survey_analysis.submission_rate_percentage}%\"></div>\r\n            </div>\r\n            <small>{surveyData.survey_analysis.surveys_submitted} pateikta, {surveyData.survey_analysis.classes_missing_surveys.length} trūksta</small>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Classes with Surveys -->\r\n        {#if surveyData.survey_analysis.classes_with_surveys.length > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>Pamokos su mokytojų apklausomis ({surveyData.survey_analysis.classes_with_surveys.length})</h4>\r\n            <div class=\"sample-comments\">\r\n              {#each surveyData.survey_analysis.classes_with_surveys.slice(0, 5) as classItem}\r\n                <div class=\"comment-item\">\r\n                  <strong>{classItem.class_name}</strong>\r\n                  <div class=\"class-details\">\r\n                    <small>{new Date(classItem.class_time).toLocaleDateString()} - {classItem.class_display_time}</small>\r\n                    <small>Mokiniai: {classItem.students}</small>\r\n                    {#if classItem.note_text}\r\n                      <p>\"{classItem.note_text}\"</p>\r\n                    {/if}\r\n                    <div class=\"survey-ratings\">\r\n                      {#if classItem.effort_rating > 0}\r\n                        <span>Pastangos: {classItem.effort_rating}/5</span>\r\n                      {/if}\r\n                      {#if classItem.learned_rating > 0}\r\n                        <span>Mokymasis: {classItem.learned_rating}/5</span>\r\n                      {/if}\r\n                      {#if classItem.general_rating > 0}\r\n                        <span>Bendrai: {classItem.general_rating}/5</span>\r\n                      {/if}\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              {/each}\r\n              {#if surveyData.survey_analysis.classes_with_surveys.length > 5}\r\n                <div class=\"more-classes\">\r\n                  <small>... ir dar {surveyData.survey_analysis.classes_with_surveys.length - 5} pamokų su apklausomis</small>\r\n                </div>\r\n              {/if}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n\r\n        <!-- Classes Missing Surveys -->\r\n        {#if surveyData.survey_analysis.classes_missing_surveys.length > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>Pamokos be mokytojų apklausų ({surveyData.survey_analysis.classes_missing_surveys.length})</h4>\r\n            <div class=\"missing-surveys\">\r\n              {#each surveyData.survey_analysis.classes_missing_surveys as classItem}\r\n                <div class=\"missing-item\">\r\n                  <strong>{classItem.class_name}</strong>\r\n                  <div class=\"class-details\">\r\n                    <small>{new Date(classItem.class_time).toLocaleDateString()} - {classItem.class_display_time}</small>\r\n                    <small>Mokiniai: {classItem.students}</small>\r\n                    <span class=\"missing-badge\">Trūksta apklausos</span>\r\n                  </div>\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n      {:else}\r\n        <div class=\"no-data\">\r\n          <p>Šį mėnesį pamokų nerasta.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  {#if retentionData}\r\n    <div class=\"retention-container\">\r\n      <h3>Mano mokinių išlikimo analizė</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Išlikimo dažnis: {retentionData.retention.retention_rate_percentage}%</strong>\r\n        </div>\r\n        <p>({retentionData.retention.retained_students} iš {retentionData.current_month.unique_students} mokinių tęsia kito mėnesio pamokas)</p>\r\n      </div>\r\n\r\n      <div class=\"month-comparison\">\r\n        <div class=\"month-data\">\r\n          <h4>Einamasis mėnuo</h4>\r\n          <ul>\r\n            <li><strong>Unikalūs mokiniai:</strong> {retentionData.current_month.unique_students}</li>\r\n            <li><strong>Iš viso pamokų:</strong> {retentionData.current_month.total_classes}</li>\r\n            <li><strong>Laikotarpis:</strong> {new Date(retentionData.current_month.start_date).toLocaleDateString()} - {new Date(retentionData.current_month.end_date).toLocaleDateString()}</li>\r\n          </ul>\r\n        </div>\r\n        \r\n        <div class=\"month-data\">\r\n          <h4>Kitas mėnuo</h4>\r\n          <ul>\r\n            <li><strong>Unikalūs mokiniai:</strong> {retentionData.next_month.unique_students}</li>\r\n            <li><strong>Iš viso pamokų:</strong> {retentionData.next_month.total_classes}</li>\r\n            <li><strong>Laikotarpis:</strong> {new Date(retentionData.next_month.start_date).toLocaleDateString()} - {new Date(retentionData.next_month.end_date).toLocaleDateString()}</li>\r\n          </ul>\r\n        </div>\r\n      </div>\r\n\r\n      {#if retentionData.retention.retained_students_details.length > 0}\r\n        <div class=\"student-details\">\r\n          <h4>Pasiliekantys mokiniai ({retentionData.retention.retained_students})</h4>\r\n          <ul class=\"student-list\">\r\n            {#each retentionData.retention.retained_students_details as student}\r\n              <li>{student.name || student.username}</li>\r\n            {/each}\r\n          </ul>\r\n        </div>\r\n      {/if}\r\n\r\n      {#if retentionData.retention.lost_students_details.length > 0}\r\n        <div class=\"student-details\">\r\n          <h4>Netęsiantys mokiniai ({retentionData.retention.lost_students_details.length})</h4>\r\n          <ul class=\"student-list\">\r\n            {#each retentionData.retention.lost_students_details as student}\r\n              <li>{student.name || student.username}</li>\r\n            {/each}\r\n          </ul>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  {#if commentsData}\r\n    <div class=\"retention-container\">\r\n      <h3>Mokinių atsiliepimai apie mano pamokas</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Komentarai: {commentsData.comments_analysis.total_comments}</strong>\r\n        </div>\r\n        <p>Mokinių atsiliepimai iš {new Date(commentsData.month_period.start_date).toLocaleDateString()} - {new Date(commentsData.month_period.end_date).toLocaleDateString()}</p>\r\n      </div>\r\n\r\n      {#if commentsData.comments_analysis.total_comments > 0}\r\n        <!-- Student Rating Average Section -->\r\n        <div class=\"comments-section\">\r\n          <h4>Mokinių įvertinimas</h4>\r\n          <div class=\"student-rating-summary\">\r\n            <div class=\"rating-display\">\r\n              <div class=\"rating-value\">\r\n                <strong>{commentsData.comments_analysis.rating_averages?.general?.average || 0}/5</strong>\r\n              </div>\r\n              <div class=\"rating-details\">\r\n                <p>Vidutinis pamokų įvertinimas</p>\r\n                <p>({commentsData.comments_analysis.rating_averages?.general?.rated_comments || 0} mokinių įvertinimai)</p>\r\n              </div>\r\n            </div>\r\n            <div class=\"rating-bar-container\">\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {((commentsData.comments_analysis.rating_averages?.general?.average || 0) / 5) * 100}%\"></div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Sample Comments Section - Only visible to admins -->\r\n        {#if isUserAdmin && commentsData.comments_analysis.sample_comments.length > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>Naujausi mokinių komentarai</h4>\r\n            <div class=\"sample-comments\">\r\n              {#each commentsData.comments_analysis.sample_comments as comment}\r\n                <div class=\"comment-item\">\r\n                  <strong>{comment.student}:</strong>\r\n                  <span>\"{comment.text}\"</span>\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n      {:else}\r\n        <div class=\"no-data\">\r\n          <p>Šį mėnesį mokinių komentarų nerasta.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n  {#if completionData}\r\n    <div class=\"retention-container\">\r\n      <h3>Mano pamokų baigimas ir punktualumas</h3>\r\n      \r\n      <div class=\"retention-summary\">\r\n        <div class=\"retention-rate\">\r\n          <strong>Veiklos efektyvumas: {completionData.completion_analysis.operational_efficiency?.overall_score || 0}%</strong>\r\n        </div>\r\n        <p>Bendras baigimo ir punktualumo įvertinimas už {new Date(completionData.month_period.start_date).toLocaleDateString()} - {new Date(completionData.month_period.end_date).toLocaleDateString()}</p>\r\n      </div>\r\n\r\n      {#if completionData.completion_analysis.total_scheduled > 0}\r\n        <!-- Main Metrics Section -->\r\n        <div class=\"month-comparison\">\r\n          <div class=\"month-data\">\r\n            <h4>Mano veikla</h4>\r\n            <ul>\r\n              <li><strong>Viso suplanuota:</strong> {completionData.completion_analysis.total_scheduled}</li>\r\n              <li><strong>Viso baigta:</strong> {completionData.completion_analysis.teacher_completed_classes}</li>\r\n              <li><strong>Viso atšaukta:</strong> {completionData.completion_analysis.teacher_cancelled_classes}</li>\r\n              <li><strong>Įvykusios Pamokos:</strong> {completionData.completion_analysis.teacher_completion_rate_percentage}%</li>\r\n            </ul>\r\n          </div>\r\n          \r\n          <div class=\"month-data\">\r\n            <h4>Mokėjimas ir atsakomybė</h4>\r\n            <ul>\r\n              <li><strong>Apmokamos pamokos:</strong> {completionData.completion_analysis.payment_eligible_classes?.total_eligible || 0}</li>\r\n              <li><strong>Mokinių atšaukimai:</strong> {completionData.completion_analysis.responsibility_breakdown?.student_cancellations || 0}</li>\r\n              <li><strong>Įvykusios pamokos:</strong> {completionData.completion_analysis.classes_actually_held}</li>\r\n              <li><strong>Tikrasis baigimo dažnis:</strong> {completionData.completion_analysis.actual_completion_rate_percentage}%</li>\r\n            </ul>\r\n          </div>\r\n          \r\n          <div class=\"month-data\">\r\n            <h4>Mano punktualumas</h4>\r\n            <ul>\r\n              <li><strong>Pamokos laiku:</strong> {completionData.completion_analysis.punctuality?.on_time_classes || 0}</li>\r\n              <li><strong>Viso vėlavimo atvejų:</strong> {completionData.completion_analysis.punctuality?.total_late_incidents || 0}</li>\r\n              <!-- <li><strong>Oficialus vėlavimas:</strong> {completionData.completion_analysis.punctuality.formal_late_incidents}</li> -->\r\n              <!-- <li><strong>Mokinių praneštas vėlavimas:</strong> {completionData.completion_analysis.punctuality.student_reported_late}</li> -->\r\n              <li><strong>Punktualumo dažnis:</strong> {completionData.completion_analysis.punctuality?.punctuality_rate_percentage || 0}%</li>\r\n            </ul>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Student Attendance Section -->\r\n        <div class=\"comments-section\">\r\n          <h4>Mokinių dalyvavimas mano pamokose</h4>\r\n          <div class=\"month-comparison\">\r\n            <div class=\"month-data\">\r\n              <h5>Dalyvavimo suvestinė</h5>\r\n              <ul>\r\n                              <li><strong>Pamokos su mokiniais:</strong> {completionData.completion_analysis.student_attendance?.total_classes_with_students || 0}</li>\r\n              <li><strong>Pamokos su dalyviais:</strong> {completionData.completion_analysis.student_attendance?.classes_with_attendance || 0}</li>\r\n              <li><strong>Pamokos be dalyvių:</strong> {completionData.completion_analysis.student_attendance?.classes_with_no_attendance || 0}</li>\r\n              </ul>\r\n            </div>\r\n            \r\n            <div class=\"month-data\">\r\n              <h5>Dalyvavimo rodikliai</h5>\r\n              <ul>\r\n                <li><strong>Mokinių dalyvavimo dažnis:</strong> {completionData.completion_analysis.student_attendance?.student_attendance_rate_percentage || 0}%</li>\r\n                <li><strong>Nedalyvavimo dažnis:</strong> {completionData.completion_analysis.student_attendance?.student_no_show_rate || 0}%</li>\r\n                <li><strong>Viso dalyvavę:</strong> {completionData.completion_analysis.student_attendance?.total_actual_attendances || 0}/{completionData.completion_analysis.student_attendance?.total_expected_attendances || 0}</li>\r\n              </ul>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Visual Progress Bars -->\r\n        <div class=\"comments-section\">\r\n          <h4>Veiklos apžvalga</h4>\r\n          <div class=\"metrics-grid\">\r\n            <div class=\"metric-item\">\r\n              <strong>Įvykusios Pamokos</strong>\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {completionData.completion_analysis.teacher_completion_rate_percentage}%\"></div>\r\n              </div>\r\n              <small>{completionData.completion_analysis.teacher_completed_classes} iš {completionData.completion_analysis.total_scheduled} pamokų įvykusios</small>\r\n            </div>\r\n            \r\n            <div class=\"metric-item\">\r\n              <strong>Mano punktualumo dažnis</strong>\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {completionData.completion_analysis.punctuality?.punctuality_rate_percentage || 0}%\"></div>\r\n              </div>\r\n              <small>{completionData.completion_analysis.punctuality?.on_time_classes || 0} iš {completionData.completion_analysis.total_scheduled} pamokų laiku ({completionData.completion_analysis.punctuality?.total_late_incidents || 0} vėlavimo atvejų)</small>\r\n            </div>\r\n            \r\n            <div class=\"metric-item\">\r\n              <strong>Mokinių dalyvavimo dažnis</strong>\r\n              <div class=\"metric-bar\">\r\n                <div class=\"metric-fill\" style=\"width: {completionData.completion_analysis.student_attendance?.student_attendance_rate_percentage || 0}%\"></div>\r\n              </div>\r\n              <small>{completionData.completion_analysis.student_attendance?.total_actual_attendances || 0} iš {completionData.completion_analysis.student_attendance?.total_expected_attendances || 0} dalyvautų pamokų</small>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Student Attendance Details -->\r\n        <!-- Temporarily commented out student attendance details display\r\n        {#if completionData.completion_analysis.student_attendance_details && completionData.completion_analysis.student_attendance_details.length > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>Detalus dalyvavimas pagal pamokas</h4>\r\n            <div class=\"attendance-details\">\r\n              {#each completionData.completion_analysis.student_attendance_details.slice(0, 10) as classDetail}\r\n                <div class=\"attendance-item\">\r\n                  <div class=\"attendance-header\">\r\n                    <strong>{classDetail.class_name}</strong>\r\n                    <span class=\"attendance-rate\">{classDetail.attendance_rate.toFixed(1)}%</span>\r\n                  </div>\r\n                  <div class=\"attendance-stats\">\r\n                    <small>{classDetail.display_time}</small>\r\n                    <small>{classDetail.attending_students}/{classDetail.enrolled_students} mokinių dalyvavo</small>\r\n                    {#if classDetail.no_show_students > 0}\r\n                      <small class=\"no-show\">({classDetail.no_show_students} nedalyvavo)</small>\r\n                    {/if}\r\n                  </div>\r\n                </div>\r\n              {/each}\r\n              {#if completionData.completion_analysis.student_attendance_details.length > 10}\r\n                <div class=\"more-classes\">\r\n                  <small>... ir dar {completionData.completion_analysis.student_attendance_details.length - 10} pamokų</small>\r\n                </div>\r\n              {/if}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n        -->\r\n\r\n        <!-- Weekly Trends if available -->\r\n        {#if Object.keys(completionData.completion_analysis.weekly_trends || {}).length > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>Savaitės tendencijos</h4>\r\n            <div class=\"weekly-trends\">\r\n              {#each Object.entries(completionData.completion_analysis.weekly_trends) as [week, data]}\r\n                <div class=\"week-item\">\r\n                  <strong>Savaitė {week.split('_')[1]}</strong>\r\n                  <div class=\"week-stats\">\r\n                    <span>Baigimas: {data.completion_rate.toFixed(1)}%</span>\r\n                    <span>Punktualumas: {data.punctuality_rate.toFixed(1)}%</span>\r\n                    {#if data.total_late_incidents > 0}\r\n                      <span class=\"late-incidents\">Vėluoja: {data.formal_late || 0} oficialiai</span>\r\n                    {/if}\r\n                  </div>\r\n                  <small>{data.period}</small>\r\n                </div>\r\n              {/each}\r\n            </div>\r\n          </div>\r\n        {/if}\r\n\r\n        <!-- Incident Details if any exist -->\r\n        {#if (completionData.completion_analysis.incident_summary?.total_teacher_incidents || 0) > 0}\r\n          <div class=\"comments-section\">\r\n            <h4>Incidentų suvestinė</h4>\r\n            <div class=\"incident-summary\">\r\n              <div class=\"responsibility-breakdown\">\r\n                <div class=\"teacher-incidents\">\r\n                  <p><strong>Mano incidentai:</strong> {completionData.completion_analysis.incident_summary?.total_teacher_incidents || 0}</p>\r\n                  <ul>\r\n                    <li>Atšaukimai: {completionData.completion_analysis.incident_summary?.teacher_cancellations || 0}</li>\r\n                    <li>Vėlavimas: {completionData.completion_analysis.incident_summary?.teacher_late_arrivals || 0}</li>\r\n                    <li>Kitos problemos: {completionData.completion_analysis.incident_summary?.teacher_other_issues || 0}</li>\r\n                  </ul>\r\n                </div>\r\n                \r\n                <div class=\"student-incidents\">\r\n                  <p><strong>Mokinių incidentai:</strong> {completionData.completion_analysis.incident_summary?.total_student_incidents || 0}</p>\r\n                  <ul>\r\n                    <li>Atšaukimai: {completionData.completion_analysis.incident_summary?.student_cancellations || 0} <em>(vis dar apmokama)</em></li>\r\n                    <!-- <li>Vėlavimas: {completionData.completion_analysis.incident_summary.student_late_arrivals}</li> -->\r\n                    <li>Kitos problemos: {completionData.completion_analysis.incident_summary?.student_other_issues || 0}</li>\r\n                  </ul>\r\n                </div>\r\n              </div>\r\n              \r\n              {#if (completionData.completion_analysis.incident_details?.teacher_cancellations?.length || 0) > 0}\r\n                <div class=\"incident-details\">\r\n                  <h5>Mano atšaukimai:</h5>\r\n                  {#each completionData.completion_analysis.incident_details.teacher_cancellations.slice(0, 3) as incident}\r\n                    <div class=\"incident-item\">\r\n                      <strong>{incident.class_name}</strong> - {new Date(incident.class_time).toLocaleDateString()}\r\n                      <small>Mokinys: {incident.student}</small>\r\n                      {#if incident.comment !== 'No comment provided'}\r\n                        <span>Komentaras: {incident.comment}</span>\r\n                      {/if}\r\n                    </div>\r\n                  {/each}\r\n                </div>\r\n              {/if}\r\n\r\n              {#if (completionData.completion_analysis.incident_details?.student_cancellations?.length || 0) > 0}\r\n                <div class=\"incident-details\">\r\n                  <h5>Mokinių atšaukimai (vis dar apmokama):</h5>\r\n                  {#each completionData.completion_analysis.incident_details.student_cancellations.slice(0, 3) as incident}\r\n                    <div class=\"incident-item student-cancellation\">\r\n                      <strong>{incident.class_name}</strong> - {new Date(incident.class_time).toLocaleDateString()}\r\n                      <small>Mokinys: {incident.student}</small>\r\n                      {#if incident.comment !== 'No comment provided'}\r\n                        <span>Komentaras: {incident.comment}</span>\r\n                      {/if}\r\n                      <span class=\"payment-note\">💰 Tinkama apmokėjimui</span>\r\n                    </div>\r\n                  {/each}\r\n                </div>\r\n              {/if}\r\n\r\n              {#if (completionData.completion_analysis.incident_details?.teacher_late_arrivals?.length || 0) > 0}\r\n                <div class=\"incident-details\">\r\n                  <h5>Mano vėlavimai:</h5>\r\n                  {#each completionData.completion_analysis.incident_details.teacher_late_arrivals.slice(0, 3) as incident}\r\n                    <div class=\"incident-item\">\r\n                      <strong>{incident.class_name}</strong> - {new Date(incident.class_time).toLocaleDateString()}\r\n                      <small>Mokinys: {incident.student}</small>\r\n                      {#if incident.comment !== 'No comment provided'}\r\n                        <span>Komentaras: {incident.comment}</span>\r\n                      {/if}\r\n                    </div>\r\n                  {/each}\r\n                </div>\r\n              {/if}\r\n\r\n              <!-- Temporarily commented out student late details display\r\n              {#if completionData.completion_analysis.punctuality.student_late_details.length > 0}\r\n                <div class=\"incident-details\">\r\n                  <h5>Mokinių praneštos punktualumo problemos:</h5>\r\n                  {#each completionData.completion_analysis.punctuality.student_late_details.slice(0, 5) as report}\r\n                    <div class=\"incident-item student-feedback\">\r\n                      <strong>Pamoka: {report.class_id}</strong>\r\n                      <small>Pranešė: {report.student_name}</small>\r\n                      {#if report.note_text !== 'No additional comment'}\r\n                        <span>Mokinio komentaras: \"{report.note_text}\"</span>\r\n                      {/if}\r\n                      <div class=\"rating-info\">\r\n                        {#if report.effort_rating > 0}\r\n                          <small>Pastangų įvertinimas: {report.effort_rating}/5</small>\r\n                        {/if}\r\n                        {#if report.learned_rating > 0}\r\n                          <small>Mokymosi įvertinimas: {report.learned_rating}/5</small>\r\n                        {/if}\r\n                        {#if report.general_rating > 0}\r\n                          <small>Bendras įvertinimas: {report.general_rating}/5</small>\r\n                        {/if}\r\n                        <small class=\"punctuality-issue\">Laiku: Ne</small>\r\n                      </div>\r\n                    </div>\r\n                  {/each}\r\n                  {#if completionData.completion_analysis.punctuality.student_late_details.length > 5}\r\n                    <div class=\"more-reports\">\r\n                      <small>... ir dar {completionData.completion_analysis.punctuality.student_late_details.length - 5} mokinių pranešimų</small>\r\n                    </div>\r\n                  {/if}\r\n                </div>\r\n              {/if}\r\n              -->\r\n            </div>\r\n          </div>\r\n        {:else}\r\n          <div class=\"no-incidents\">\r\n            <p>✅ Šį mėnesį incidentų nepranešta!</p>\r\n          </div>\r\n        {/if}\r\n      {:else}\r\n        <div class=\"no-data\">\r\n          <p>Šį mėnesį suplanuotų pamokų nerasta.</p>\r\n        </div>\r\n      {/if}\r\n    </div>\r\n  {/if}\r\n\r\n</div>\r\n\r\n<style>\r\n  .teacher-performance-page {\r\n    max-width: 800px;\r\n    margin: 0 auto;\r\n    padding: 2em;\r\n  }\r\n\r\n  .teacher-performance-page h2 {\r\n    color: #fab45a;\r\n    margin-bottom: 0.5em;\r\n    text-align: center;\r\n  }\r\n\r\n  .description {\r\n    color: #666;\r\n    margin-bottom: 2em;\r\n    font-size: 1.1em;\r\n    text-align: center;\r\n  }\r\n\r\n  .month-selection {\r\n    margin-bottom: 2em;\r\n    text-align: center;\r\n  }\r\n\r\n  .month-selection label {\r\n    display: block;\r\n    margin-bottom: 0.5em;\r\n    font-weight: bold;\r\n    color: #333;\r\n  }\r\n\r\n  .month-dropdown {\r\n    width: 100%;\r\n    max-width: 300px;\r\n    padding: 0.75em;\r\n    border: 2px solid #ddd;\r\n    border-radius: 8px;\r\n    font-size: 1em;\r\n    background-color: white;\r\n    cursor: pointer;\r\n    transition: border-color 0.2s;\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .month-dropdown:focus {\r\n    outline: none;\r\n    border-color: #fab45a;\r\n    box-shadow: 0 0 0 3px rgba(250, 180, 90, 0.1);\r\n  }\r\n\r\n  .month-dropdown:hover {\r\n    border-color: #fab45a;\r\n  }\r\n\r\n  .loading-message {\r\n    text-align: center;\r\n    padding: 2em;\r\n    color: #fab45a;\r\n    font-size: 1.2em;\r\n  }\r\n\r\n  .teacher-info {\r\n    background: #f8f9fa;\r\n    border: 2px solid #fab45a;\r\n    border-radius: 8px;\r\n    padding: 1.5em;\r\n    margin-bottom: 2em;\r\n  }\r\n\r\n  .teacher-info h3 {\r\n    margin: 0 0 1em 0;\r\n    color: #fab45a;\r\n  }\r\n\r\n  .teacher-info p {\r\n    margin: 0.5em 0;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .error-message {\r\n    color: #d32f2f;\r\n    background: #ffebee;\r\n    padding: 1em;\r\n    border-radius: 6px;\r\n    border-left: 4px solid #d32f2f;\r\n    margin-top: 1em;\r\n  }\r\n\r\n  .error-actions {\r\n    margin-top: 1em;\r\n    text-align: center;\r\n  }\r\n\r\n  .retry-button {\r\n    background-color: #fab45a;\r\n    color: black;\r\n    border: none;\r\n    padding: 10px 20px;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    font-weight: 500;\r\n    cursor: pointer;\r\n    transition: background-color 0.3s ease;\r\n  }\r\n\r\n  .retry-button:hover {\r\n    background-color: #e09a43;\r\n  }\r\n\r\n  /* All the styles from TeacherPerformanceRating.svelte for data display */\r\n  .retention-container {\r\n    margin-top: 2em;\r\n    padding: 15px;\r\n    background-color: white;\r\n    border-radius: 8px;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    color: black;\r\n  }\r\n\r\n  .retention-container h3 {\r\n    margin: 0 0 15px 0;\r\n    color: #333;\r\n    font-size: 1.2em;\r\n  }\r\n\r\n  .retention-summary {\r\n    margin-bottom: 20px;\r\n    padding: 10px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n    text-align: center;\r\n  }\r\n\r\n  .retention-rate {\r\n    font-size: 1.3em;\r\n    color: #fab45a;\r\n    margin-bottom: 5px;\r\n  }\r\n\r\n  .retention-summary p {\r\n    margin: 0;\r\n    color: #666;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .month-comparison {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 20px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  /* Payment breakdown specific styling */\r\n  .payment-breakdown-container {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 20px;\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .payment-section {\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .payment-section h5 {\r\n    margin: 0 0 12px 0;\r\n    color: #fab45a;\r\n    font-size: 1em;\r\n    border-bottom: 1px solid #ddd;\r\n    padding-bottom: 4px;\r\n  }\r\n\r\n  .class-count-list {\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n  }\r\n\r\n  .class-count-list li {\r\n    padding: 6px 0;\r\n    font-size: 0.9em;\r\n    border-bottom: 1px solid #e9ecef;\r\n  }\r\n\r\n  .class-count-list li:last-child {\r\n    border-bottom: none;\r\n  }\r\n\r\n  .total-classes {\r\n    background-color: #e8f5e8;\r\n    color: #2e7d32;\r\n    padding: 6px 8px;\r\n    border-radius: 4px;\r\n    margin-top: 6px;\r\n    border: none !important;\r\n  }\r\n\r\n  .payment-total-only {\r\n    background-color: #fab45a;\r\n    color: black;\r\n    padding: 12px;\r\n    border-radius: 8px;\r\n    margin-top: 20px;\r\n    text-align: center;\r\n  }\r\n\r\n  .payment-total-only p {\r\n    margin: 0;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .month-data {\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .month-data h4 {\r\n    margin: 0 0 10px 0;\r\n    color: #333;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .month-data ul {\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n  }\r\n\r\n  .month-data li {\r\n    padding: 3px 0;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .student-details {\r\n    margin-bottom: 15px;\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .student-details h4 {\r\n    margin: 0 0 10px 0;\r\n    color: #333;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .student-list {\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: 5px;\r\n  }\r\n\r\n  .student-list li {\r\n    padding: 3px 0;\r\n    font-size: 0.9em;\r\n    color: #555;\r\n  }\r\n\r\n  /* Comments analysis styles */\r\n  .comments-section {\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .comments-section h4 {\r\n    margin: 0 0 10px 0;\r\n    color: #333;\r\n    font-size: 1.1em;\r\n    border-bottom: 1px solid #ddd;\r\n    padding-bottom: 5px;\r\n  }\r\n\r\n  .comments-section h5 {\r\n    margin: 0 0 8px 0;\r\n    color: #fab45a;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .metrics-grid {\r\n    display: grid;\r\n    gap: 15px;\r\n    margin-top: 10px;\r\n  }\r\n\r\n  .metric-item {\r\n    background-color: #f8f9fa;\r\n    padding: 12px;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .metric-item strong {\r\n    display: block;\r\n    margin-bottom: 8px;\r\n    color: #333;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .metric-bar {\r\n    width: 100%;\r\n    height: 20px;\r\n    background-color: #e9ecef;\r\n    border-radius: 10px;\r\n    overflow: hidden;\r\n    margin-bottom: 5px;\r\n  }\r\n\r\n  .metric-fill {\r\n    height: 100%;\r\n    background-color: #fab45a;\r\n    transition: width 0.3s ease;\r\n    border-radius: 10px;\r\n  }\r\n\r\n  .metric-item small {\r\n    color: #666;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .sample-comments {\r\n    background-color: #f8f9fa;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .comment-item {\r\n    margin-bottom: 10px;\r\n    padding-bottom: 10px;\r\n    border-bottom: 1px solid #e9ecef;\r\n  }\r\n\r\n  .comment-item:last-child {\r\n    margin-bottom: 0;\r\n    padding-bottom: 0;\r\n    border-bottom: none;\r\n  }\r\n\r\n  .comment-item strong {\r\n    color: #fab45a;\r\n    font-size: 0.9em;\r\n    margin-right: 8px;\r\n  }\r\n\r\n  .comment-item span {\r\n    color: #555;\r\n    font-size: 0.9em;\r\n    line-height: 1.4;\r\n  }\r\n\r\n  .no-data {\r\n    text-align: center;\r\n    padding: 20px;\r\n    color: #666;\r\n    font-style: italic;\r\n    background-color: #f8f9fa;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .no-data-message {\r\n    text-align: center;\r\n    padding: 30px 20px;\r\n    color: #666;\r\n    background-color: #f8f9fa;\r\n    border-radius: 8px;\r\n    margin: 20px 0;\r\n    border: 1px solid #e9ecef;\r\n  }\r\n\r\n  .no-data-message p {\r\n    margin: 10px 0;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .no-data-message p:first-child {\r\n    font-weight: 500;\r\n    color: #333;\r\n  }\r\n\r\n  /* Completion and punctuality specific styles */\r\n  .weekly-trends {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: 15px;\r\n    margin-top: 10px;\r\n  }\r\n\r\n  .week-item {\r\n    background-color: #f8f9fa;\r\n    padding: 12px;\r\n    border-radius: 6px;\r\n    text-align: center;\r\n  }\r\n\r\n  .week-item strong {\r\n    display: block;\r\n    color: #fab45a;\r\n    margin-bottom: 8px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .week-stats {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n    margin-bottom: 8px;\r\n  }\r\n\r\n  .week-stats span {\r\n    font-size: 0.8em;\r\n    color: #555;\r\n  }\r\n\r\n  .week-stats .late-incidents {\r\n    color: #d32f2f;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .week-item small {\r\n    color: #666;\r\n    font-size: 0.75em;\r\n  }\r\n\r\n  .incident-summary {\r\n    background-color: #f8f9fa;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .incident-summary p {\r\n    margin: 0 0 10px 0;\r\n    color: #333;\r\n  }\r\n\r\n  .incident-summary ul {\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0 0 15px 0;\r\n  }\r\n\r\n  .incident-summary li {\r\n    padding: 4px 0;\r\n    font-size: 0.9em;\r\n    color: #555;\r\n  }\r\n\r\n  .incident-details {\r\n    margin-top: 15px;\r\n    padding-top: 15px;\r\n    border-top: 1px solid #e9ecef;\r\n  }\r\n\r\n  .incident-details h5 {\r\n    margin: 0 0 10px 0;\r\n    color: #fab45a;\r\n    font-size: 0.95em;\r\n  }\r\n\r\n  .incident-item {\r\n    background-color: white;\r\n    padding: 10px;\r\n    margin-bottom: 8px;\r\n    border-radius: 4px;\r\n    border-left: 3px solid #fab45a;\r\n  }\r\n\r\n  .incident-item:last-child {\r\n    margin-bottom: 0;\r\n  }\r\n\r\n  .incident-item strong {\r\n    display: block;\r\n    color: #333;\r\n    margin-bottom: 4px;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .incident-item small {\r\n    display: block;\r\n    color: #666;\r\n    font-size: 0.8em;\r\n    margin-bottom: 4px;\r\n  }\r\n\r\n  .incident-item span {\r\n    display: block;\r\n    color: #555;\r\n    font-size: 0.85em;\r\n    line-height: 1.4;\r\n  }\r\n\r\n  .no-incidents {\r\n    text-align: center;\r\n    padding: 20px;\r\n    background-color: #e8f5e8;\r\n    border-radius: 6px;\r\n    color: #2e7d32;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .no-incidents p {\r\n    margin: 0;\r\n  }\r\n\r\n  /* Student attendance specific styles */\r\n  .attendance-details {\r\n    background-color: #f8f9fa;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .attendance-item {\r\n    background-color: white;\r\n    padding: 12px;\r\n    margin-bottom: 10px;\r\n    border-radius: 4px;\r\n    border-left: 3px solid #fab45a;\r\n  }\r\n\r\n  .attendance-item:last-child {\r\n    margin-bottom: 0;\r\n  }\r\n\r\n  .attendance-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin-bottom: 8px;\r\n  }\r\n\r\n  .attendance-header strong {\r\n    color: #333;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .attendance-rate {\r\n    background-color: #fab45a;\r\n    color: black;\r\n    padding: 2px 8px;\r\n    border-radius: 12px;\r\n    font-size: 0.8em;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .attendance-stats {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 2px;\r\n  }\r\n\r\n  .attendance-stats small {\r\n    color: #666;\r\n    font-size: 0.8em;\r\n  }\r\n\r\n  .attendance-stats .no-show {\r\n    color: #d32f2f;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .more-classes {\r\n    text-align: center;\r\n    padding: 10px;\r\n    color: #666;\r\n    font-style: italic;\r\n  }\r\n\r\n  .show-all-button-container {\r\n    text-align: center;\r\n    padding: 15px;\r\n  }\r\n\r\n  .show-all-button {\r\n    background-color: #fab45a;\r\n    color: black;\r\n    border: none;\r\n    padding: 10px 20px;\r\n    border-radius: 6px;\r\n    font-size: 0.9em;\r\n    font-weight: 500;\r\n    cursor: pointer;\r\n    transition: background-color 0.3s ease;\r\n  }\r\n\r\n  .show-all-button:hover {\r\n    background-color: #e09a43;\r\n  }\r\n\r\n  /* Student feedback specific styles */\r\n  .student-feedback {\r\n    border-left-color: #2e7d32;\r\n    background-color: #f8fff8;\r\n  }\r\n\r\n  .rating-info {\r\n    display: flex;\r\n    gap: 15px;\r\n    margin-top: 6px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .rating-info small {\r\n    background-color: #e8f5e8;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    color: #2e7d32;\r\n    font-size: 0.75em;\r\n  }\r\n\r\n  .rating-info .punctuality-issue {\r\n    background-color: #ffebee;\r\n    color: #d32f2f;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .more-reports {\r\n    text-align: center;\r\n    padding: 10px;\r\n    color: #666;\r\n    font-style: italic;\r\n    background-color: #f0f8f0;\r\n    border-radius: 4px;\r\n    margin-top: 8px;\r\n  }\r\n\r\n  .missing-surveys {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 1em;\r\n  }\r\n\r\n  .missing-item {\r\n    background: #fef2f2;\r\n    border: 1px solid #fecaca;\r\n    border-radius: 8px;\r\n    padding: 1em;\r\n  }\r\n\r\n  .missing-item strong {\r\n    color: #dc2626;\r\n  }\r\n\r\n  .missing-badge {\r\n    display: inline-block;\r\n    background: #dc2626;\r\n    color: white;\r\n    padding: 0.25em 0.5em;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n    margin-top: 0.5em;\r\n  }\r\n\r\n  .survey-ratings {\r\n    display: flex;\r\n    gap: 1em;\r\n    margin-top: 0.5em;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .survey-ratings span {\r\n    background: #f0f9ff;\r\n    border: 1px solid #bae6fd;\r\n    padding: 0.25em 0.5em;\r\n    border-radius: 4px;\r\n    font-size: 0.8em;\r\n    color: #0369a1;\r\n  }\r\n\r\n  .class-details {\r\n    margin-top: 0.5em;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.25em;\r\n  }\r\n\r\n  .class-details p {\r\n    margin: 0.5em 0;\r\n    font-style: italic;\r\n    color: #555;\r\n  }\r\n\r\n  .responsibility-breakdown {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 20px;\r\n    margin-bottom: 15px;\r\n  }\r\n\r\n  .teacher-incidents,\r\n  .student-incidents {\r\n    background-color: #f8f9fa;\r\n    padding: 15px;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  .student-incidents {\r\n    border-left: 3px solid #fab45a;\r\n  }\r\n\r\n  .teacher-incidents {\r\n    border-left: 3px solid #d32f2f;\r\n  }\r\n\r\n  .student-cancellation {\r\n    background-color: #fff3e0;\r\n    border-left-color: #fab45a;\r\n  }\r\n\r\n  .payment-note {\r\n    background-color: #fab45a;\r\n    color: black;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n    margin-top: 4px;\r\n    display: inline-block;\r\n  }\r\n\r\n  /* Payment analysis specific styles */\r\n  .paid-class {\r\n    background-color: #fab45a;\r\n    color: black;\r\n  }\r\n\r\n  .free-class {\r\n    background-color: #e8f5e8;\r\n    color: #2e7d32;\r\n    border: 1px solid #2e7d32;\r\n  }\r\n\r\n  /* Special conditions styling */\r\n  .special-conditions-container {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 4px;\r\n    margin-top: 4px;\r\n  }\r\n\r\n  .special-condition {\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n    display: inline-block;\r\n  }\r\n\r\n  .ib-condition {\r\n    background-color: #e3f2fd;\r\n    color: #1976d2;\r\n    border: 1px solid #1976d2;\r\n  }\r\n\r\n  .special-needs-condition {\r\n    background-color: #fff3e0;\r\n    color: #f57c00;\r\n    border: 1px solid #f57c00;\r\n  }\r\n\r\n  .lithuanian-condition {\r\n    background-color: #e8f5e8;\r\n    color: #2e7d32;\r\n    border: 1px solid #2e7d32;\r\n  }\r\n\r\n  .total-surcharge {\r\n    background-color: #fab45a;\r\n    color: black;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    font-weight: bold;\r\n    display: inline-block;\r\n    border: 2px solid #e09a43;\r\n  }\r\n\r\n  .free-reason {\r\n    background-color: #ffebee;\r\n    color: #d32f2f;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n    margin-top: 2px;\r\n    display: inline-block;\r\n  }\r\n\r\n  .first-time {\r\n    background-color: #fff3e0;\r\n    color: #f57c00;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    margin-top: 2px;\r\n    display: inline-block;\r\n  }\r\n\r\n  .retained {\r\n    background-color: #e8f5e8;\r\n    color: #2e7d32;\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    margin-top: 2px;\r\n    display: inline-block;\r\n  }\r\n\r\n  /* Upcoming classes styling */\r\n  .upcoming-class {\r\n    opacity: 0.7;\r\n    background-color: #f8f9fa;\r\n    border-left: 4px solid #6c757d;\r\n  }\r\n\r\n  .upcoming-class:hover {\r\n    opacity: 0.9;\r\n  }\r\n\r\n  /* Class status and payment layout */\r\n  .class-status-payment {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n  }\r\n\r\n  .class-status {\r\n    padding: 2px 8px;\r\n    border-radius: 4px;\r\n    font-size: 0.75em;\r\n    font-weight: 500;\r\n    text-transform: uppercase;\r\n  }\r\n\r\n  .class-status.completed {\r\n    background-color: #d4edda;\r\n    color: #155724;\r\n  }\r\n\r\n  .class-status.upcoming {\r\n    background-color: #fff3cd;\r\n    color: #856404;\r\n  }\r\n\r\n  /* Student rating summary styles */\r\n  .student-rating-summary {\r\n    background-color: #f8f9fa;\r\n    padding: 20px;\r\n    border-radius: 8px;\r\n    margin-top: 15px;\r\n  }\r\n\r\n  .rating-display {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 20px;\r\n    margin-bottom: 15px;\r\n  }\r\n\r\n  .rating-value {\r\n    font-size: 2.5em;\r\n    color: #fab45a;\r\n    font-weight: bold;\r\n    min-width: 120px;\r\n  }\r\n\r\n  .rating-details {\r\n    flex: 1;\r\n  }\r\n\r\n  .rating-details p {\r\n    margin: 5px 0;\r\n    color: #666;\r\n  }\r\n\r\n  .rating-details p:first-child {\r\n    font-weight: bold;\r\n    color: #333;\r\n    font-size: 1.1em;\r\n  }\r\n\r\n  .rating-bar-container {\r\n    width: 100%;\r\n  }\r\n\r\n  /* Bonus Criteria Summary Section */\r\n  .bonus-criteria-summary {\r\n    margin-top: 2em;\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 8px;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    color: black;\r\n  }\r\n\r\n  .bonus-criteria-summary h3 {\r\n    margin: 0 0 15px 0;\r\n    color: #333;\r\n    font-size: 1.2em;\r\n    text-align: center;\r\n  }\r\n\r\n  .criteria-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n    gap: 15px;\r\n  }\r\n\r\n  .criterion-card {\r\n    display: flex;\r\n    align-items: center;\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 8px;\r\n    border: 1px solid #e0e0e0;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n  }\r\n\r\n  .criterion-card.eligible {\r\n    border-left: 4px solid #28a745;\r\n    background-color: #f8fff8;\r\n  }\r\n\r\n  .criterion-card.not-eligible {\r\n    border-left: 4px solid #d32f2f;\r\n    background-color: #fff3e0;\r\n  }\r\n\r\n  .criterion-icon {\r\n    font-size: 2em;\r\n    margin-right: 15px;\r\n    color: #fab45a;\r\n  }\r\n\r\n  .criterion-content h4 {\r\n    margin: 0 0 5px 0;\r\n    color: #333;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .criterion-value {\r\n    font-size: 1.5em;\r\n    font-weight: bold;\r\n    color: #fab45a;\r\n    margin-bottom: 5px;\r\n  }\r\n\r\n  .criterion-status {\r\n    font-size: 0.8em;\r\n    color: #666;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .criterion-status.met {\r\n    color: #28a745;\r\n    font-weight: bold;\r\n  }\r\n\r\n  .criterion-status.not-met {\r\n    color: #d32f2f;\r\n    font-weight: bold;\r\n  }\r\n\r\n  .bonus-eligibility-banner {\r\n    margin-top: 20px;\r\n    padding: 15px;\r\n    background-color: #f8f9fa;\r\n    border-radius: 8px;\r\n    border: 1px solid #e0e0e0;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    color: black;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n  }\r\n\r\n  .bonus-eligibility-banner.not-eligible {\r\n    border-left: 4px solid #d32f2f;\r\n    background-color: #fff3e0;\r\n  }\r\n\r\n  .bonus-icon {\r\n    font-size: 2em;\r\n    color: #fab45a;\r\n  }\r\n\r\n  .bonus-message h4 {\r\n    margin: 0 0 5px 0;\r\n    color: #333;\r\n    font-size: 1em;\r\n  }\r\n\r\n  .bonus-message p {\r\n    margin: 0 0 5px 0;\r\n    color: #666;\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .bonus-message strong {\r\n    color: #fab45a;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .bonus-message small {\r\n    display: block;\r\n    color: #666;\r\n    font-size: 0.75em;\r\n  }\r\n\r\n  @media (max-width: 600px) {\r\n    .teacher-performance-page {\r\n      padding: 1em;\r\n    }\r\n\r\n    .month-comparison {\r\n      grid-template-columns: 1fr;\r\n      gap: 10px;\r\n    }\r\n\r\n    .student-list {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .metrics-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .comment-item {\r\n      padding: 8px 0;\r\n    }\r\n\r\n    .comment-item strong,\r\n    .comment-item span {\r\n      display: block;\r\n      margin-bottom: 4px;\r\n    }\r\n\r\n    .weekly-trends {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .week-stats {\r\n      flex-direction: column;\r\n      gap: 2px;\r\n    }\r\n\r\n    .week-stats .late-incidents {\r\n      font-size: 0.7em;\r\n    }\r\n\r\n    .incident-item strong,\r\n    .incident-item small,\r\n    .incident-item span {\r\n      font-size: 0.85em;\r\n    }\r\n\r\n    .attendance-header {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 4px;\r\n    }\r\n\r\n    .attendance-stats {\r\n      gap: 1px;\r\n    }\r\n\r\n    .attendance-stats small {\r\n      font-size: 0.75em;\r\n    }\r\n\r\n    .rating-info {\r\n      flex-direction: column;\r\n      gap: 4px;\r\n    }\r\n\r\n    .rating-info small {\r\n      font-size: 0.7em;\r\n    }\r\n\r\n    .special-conditions-container {\r\n      flex-direction: column;\r\n      gap: 2px;\r\n    }\r\n\r\n    .special-condition,\r\n    .total-surcharge {\r\n      font-size: 0.7em;\r\n      padding: 1px 4px;\r\n    }\r\n\r\n    .responsibility-breakdown {\r\n      grid-template-columns: 1fr;\r\n      gap: 10px;\r\n    }\r\n\r\n    .payment-breakdown-container {\r\n      grid-template-columns: 1fr;\r\n      gap: 15px;\r\n    }\r\n\r\n    .payment-section {\r\n      padding: 12px;\r\n    }\r\n\r\n    .payment-section h5 {\r\n      font-size: 0.95em;\r\n    }\r\n\r\n    .class-count-list li {\r\n      font-size: 0.85em;\r\n      padding: 5px 0;\r\n    }\r\n\r\n    .total-classes {\r\n      padding: 5px 6px;\r\n      font-size: 0.85em;\r\n    }\r\n\r\n    .payment-total-only {\r\n      padding: 10px;\r\n      margin-top: 15px;\r\n    }\r\n\r\n    .payment-total-only p {\r\n      font-size: 1em;\r\n    }\r\n\r\n    .rating-display {\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 10px;\r\n    }\r\n\r\n    .rating-value {\r\n      font-size: 2em;\r\n      min-width: auto;\r\n    }\r\n\r\n    .student-rating-summary {\r\n      padding: 15px;\r\n    }\r\n\r\n    /* Bonus criteria responsive styles */\r\n    .criteria-grid {\r\n      grid-template-columns: 1fr;\r\n      gap: 10px;\r\n    }\r\n\r\n    .criterion-card {\r\n      padding: 12px;\r\n    }\r\n\r\n    .criterion-icon {\r\n      font-size: 1.5em;\r\n      margin-right: 10px;\r\n    }\r\n\r\n    .criterion-value {\r\n      font-size: 1.2em;\r\n    }\r\n\r\n    .bonus-eligibility-banner {\r\n      flex-direction: column;\r\n      text-align: center;\r\n      gap: 15px;\r\n    }\r\n\r\n    .bonus-icon {\r\n      font-size: 1.5em;\r\n    }\r\n\r\n    .month-dropdown {\r\n      max-width: 100%;\r\n    }\r\n  }\r\n</style>\r\n","<script>    \r\n    import TeacherRegistrationRequestsComponent from \"./TeacherRegistrationRequestsComponent.svelte\";\r\n    import NavBarReusable from \"./NavbarReusable.svelte\";\r\n</script>\r\n\r\n<NavBarReusable label=\"Teacher - Class Registration Requests\" />\r\n\r\n<div class=\"classcontainer\">\r\n    <h3>Class Registration Requests</h3>\r\n    <p class=\"description\">\r\n        Review and accept class registration requests from students. Accepted requests will remain visible until handled by administrators.\r\n    </p>\r\n    <TeacherRegistrationRequestsComponent />\r\n</div>\r\n\r\n<style>\r\n    .classcontainer {\r\n        padding: 15px;\r\n        background-color: white;\r\n        display: flex;\r\n        flex-direction: column;\r\n        margin-bottom: 15px;\r\n        gap: 10px;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        border-radius: 8px;\r\n        flex: none;\r\n        color: black;\r\n        align-items: flex-start;\r\n    }\r\n\r\n    .classcontainer h3 {\r\n        margin: 0 0 15px 0;\r\n        color: #333;\r\n        font-size: 1.5rem;\r\n    }\r\n\r\n    .description {\r\n        color: #666;\r\n        font-size: 0.95rem;\r\n        margin: 0 0 20px 0;\r\n        line-height: 1.4;\r\n    }\r\n</style>\r\n","<script>\r\n    import CheckBoxAreaForInvoicesComponent from \"./CheckBoxAreaForInvoicesComponent.svelte\";\r\n    import { onMount } from 'svelte';\r\n    import CheckBoxAreForClassesComponent from \"./CheckBoxAreForClassesComponent.svelte\";\r\n    import CompletedPaymentsList from './CompletedPaymentsListComponent.svelte';\r\n    import NavBarReusable from \"./NavbarReusable.svelte\";\r\n    import { push } from 'svelte-spa-router';\r\n    \r\n    // Student selection variables\r\n    let allStudents = [];\r\n    let selectedStudentId = null;\r\n    let selectedStudent = null;\r\n    let isLoadingStudents = true;\r\n    let studentsError = null;\r\n    let studentQuery = '';\r\n    let filteredStudents = [];\r\n    let showStudentDropdown = false;\r\n    \r\n    // Invoice page variables (identical to StandaloneInvoicesPage.svelte)\r\n    let selectedMonths = [];\r\n    let pdfUrl = ''; // Store the URL of the PDF to display\r\n    let isCreatingPDF = false;\r\n    let email = '';\r\n    let pdfBase64V = '';\r\n\r\n    let invoiceSum = 0; // Only set after invoice is generated\r\n    let paymentLink = '';\r\n    let isFetchingPaymentLink = false;\r\n\r\n    let selectedClasses = [];\r\n\r\n    let invoiceData = null;\r\n    let errorForInvoiceData = null;\r\n    let isLoadingInvoiceData = false; // Don't load automatically\r\n    let backLinkUrl = \"/admin\"; // Back to admin page\r\n\r\n    // Month filtering variables\r\n    let loadedMonths = []; // Array of month strings like \"2024-09\"\r\n    let originalMonth = ''; // Track the original month that was first loaded\r\n    let isLoadingMonth = false;\r\n    let monthlyData = {}; // Store data by month key\r\n\r\n    // Helper: Get current month string\r\n    function getCurrentMonthString() {\r\n        const now = new Date();\r\n        return `${now.getFullYear()}-${(now.getMonth() + 1).toString().padStart(2, '0')}`;\r\n    }\r\n\r\n    // Helper: Get next month string\r\n    function getNextMonth(monthString) {\r\n        const [year, month] = monthString.split('-').map(Number);\r\n        const nextMonth = month === 12 ? 1 : month + 1;\r\n        const nextYear = month === 12 ? year + 1 : year;\r\n        return `${nextYear}-${nextMonth.toString().padStart(2, '0')}`;\r\n    }\r\n\r\n    // Helper: Get previous month string\r\n    function getPreviousMonth(monthString) {\r\n        const [year, month] = monthString.split('-').map(Number);\r\n        const prevMonth = month === 1 ? 12 : month - 1;\r\n        const prevYear = month === 1 ? year - 1 : year;\r\n        return `${prevYear}-${prevMonth.toString().padStart(2, '0')}`;\r\n    }\r\n\r\n    // Helper: Format month for display\r\n    function formatMonthForDisplay(monthString) {\r\n        const [year, month] = monthString.split('-');\r\n        const date = new Date(year, month - 1);\r\n        return date.toLocaleDateString('lt-LT', { year: 'numeric', month: 'long' });\r\n    }\r\n\r\n    // Check if \"Add Past Month\" button should be disabled\r\n    // Reactive computation based on loadedMonths\r\n    $: canAddPast = (() => {\r\n        if (loadedMonths.length === 0) return false;\r\n        \r\n        const earliestMonth = loadedMonths[0];\r\n        const prevMonth = getPreviousMonth(earliestMonth);\r\n        \r\n        // Cannot go before 2025-09 (baseline month)\r\n        return prevMonth >= '2025-09';\r\n    })();\r\n\r\n    // Check if remove buttons should be shown\r\n    // Reactive computation based on loadedMonths and originalMonth\r\n    $: canRemoveFuture = (() => {\r\n        if (loadedMonths.length <= 1) return false;\r\n        const latestMonth = loadedMonths[loadedMonths.length - 1];\r\n        return latestMonth !== originalMonth;\r\n    })();\r\n\r\n    $: canRemovePast = (() => {\r\n        if (loadedMonths.length <= 1) return false;\r\n        const earliestMonth = loadedMonths[0];\r\n        return earliestMonth !== originalMonth;\r\n    })();\r\n\r\n    // Helper: calculate invoice sum as sum of amount_due for selected classes\r\n    function calculateInvoiceSum() {\r\n        if (!invoiceData || !invoiceData.classes) {\r\n            console.log('🔄 ADMIN DEBUG - calculateInvoiceSum: No invoice data or classes');\r\n            return 0;\r\n        }\r\n        const sum = selectedClasses.reduce((sum, classId) => {\r\n            const cls = invoiceData.classes.find(c => c.id === classId);\r\n            // Ensure amount_due is always treated as a float number\r\n            const amount = cls ? parseFloat(cls.amount_due) || 0.0 : 0.0;\r\n            console.log(`🔄 ADMIN DEBUG - Class ${classId}: amount_due=${cls?.amount_due}, converted=${amount}`);\r\n            return sum + amount;\r\n        }, 0.0);\r\n        console.log(`🔄 ADMIN DEBUG - Total invoice sum calculated: ${sum} for classes:`, selectedClasses);\r\n        return Math.round(sum * 100) / 100; // Round to 2 decimal places to avoid floating point errors\r\n    }\r\n\r\n    // Update invoiceSum whenever selectedClasses changes\r\n    $: {\r\n        console.log('🔄 ADMIN DEBUG - Reactive update triggered. Selected classes:', selectedClasses);\r\n        invoiceSum = calculateInvoiceSum();\r\n        console.log('🔄 ADMIN DEBUG - Updated invoiceSum to:', invoiceSum);\r\n    }\r\n\r\n    async function handleSubmit(event) {\r\n        event.preventDefault();\r\n        if (selectedClasses.length === 0) {\r\n            alert(\"Prašome pasirinkti nors vieną pamoką, kurią norėtumėte apmokėti.\");\r\n            return;\r\n        }\r\n        isCreatingPDF = true;\r\n        await generateInvoiceFromClasses(selectedClasses);\r\n        isCreatingPDF = false;\r\n    }\r\n\r\n    async function generateInvoiceFromClasses(selectedClasses) {\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            console.error('No JWT token found. User might not be logged in.');\r\n            return;\r\n        }\r\n\r\n        try {\r\n            const response = await fetch('/studentplayground/admin/debug-invoice/', {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json',\r\n                },\r\n                body: JSON.stringify({ \r\n                    class_ids: selectedClasses,\r\n                    student_id: selectedStudentId // Pass student ID for admin debugging\r\n                })\r\n            });\r\n\r\n            const data = await response.json();\r\n\r\n            if (data.status === 'success') {\r\n                email = data.email;\r\n                const pdfBase64 = data.pdf_base64;\r\n                pdfBase64V = pdfBase64;\r\n                pdfUrl = `data:application/pdf;base64,${pdfBase64}`;\r\n                console.log(\"PDF URL set:\", pdfUrl);\r\n            } else {\r\n                const error = data;\r\n                console.log('Error:', error);\r\n                alert(`Error generating invoice: ${error.message || 'Unknown error'}`);\r\n            }\r\n        } catch (error) {\r\n            console.log('Fetch error:', error);\r\n        }\r\n    }\r\n\r\n    // Fetch payment link and redirect immediately (one-click payment) - DISABLED for admin\r\n    async function fetchPaymentLinkAndRedirect() {\r\n        alert(\"🚫 Payment functionality disabled in admin debug mode. This would normally redirect the student to payment.\");\r\n        return;\r\n    }\r\n\r\n    async function fetchInvoiceData() {\r\n        if (!selectedStudentId) {\r\n            console.error('No student selected for invoice data fetch');\r\n            return;\r\n        }\r\n\r\n        // Default to current month on initial load\r\n        if (loadedMonths.length === 0) {\r\n            const currentMonth = getCurrentMonthString();\r\n            originalMonth = currentMonth; // Track the original month\r\n            await fetchMonthData(currentMonth, true); // Mark as initial load\r\n        }\r\n    }\r\n\r\n    async function fetchMonthData(monthString, isInitialLoad = false) {\r\n        if (!selectedStudentId) {\r\n            console.error('No student selected for month data fetch');\r\n            return;\r\n        }\r\n\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            console.error('No JWT token found. User might not be logged in.');\r\n            errorForInvoiceData = 'Nepavyko rasti autentifikacijos duomenų. Prašome prisijungti iš naujo.';\r\n            isLoadingMonth = false;\r\n            return;\r\n        }\r\n\r\n        isLoadingMonth = true;\r\n        if (isInitialLoad) {\r\n            errorForInvoiceData = null;\r\n        }\r\n\r\n        try {\r\n            // Build URL with month parameter - always fetch single month data\r\n            const url = new URL(`/studentplayground/admin/debug-invoice-data/${selectedStudentId}/`);\r\n            if (monthString) {\r\n                url.searchParams.append('months', monthString);\r\n            } else {\r\n                url.searchParams.append('current_month_only', 'true');\r\n            }\r\n\r\n            const response = await fetch(url, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json',\r\n                },\r\n            });\r\n\r\n            if (response.ok) {\r\n                const result = await response.json();\r\n                \r\n                console.log('📊 ADMIN DEBUG - Month data loaded for student:', selectedStudentId, 'month:', monthString);\r\n                console.log('📊 ADMIN DEBUG - Month data:', JSON.stringify(result, null, 2));\r\n                \r\n                // Store monthly data without affecting existing data\r\n                if (monthString) {\r\n                    monthlyData[monthString] = result;\r\n                    if (!loadedMonths.includes(monthString)) {\r\n                        loadedMonths = [...loadedMonths, monthString].sort();\r\n                    }\r\n                }\r\n                \r\n                // Only combine if this is initial load, otherwise append incrementally\r\n                if (isInitialLoad) {\r\n                    combineMonthlyData();\r\n                } else {\r\n                    appendMonthData(monthString, result);\r\n                }\r\n                \r\n                errorForInvoiceData = null;\r\n            } else {\r\n                const error = await response.json();\r\n                console.log('Error fetching month data:', error);\r\n                if (isInitialLoad) {\r\n                    errorForInvoiceData = error.message || 'Nepavyko gauti sąskaitos duomenų.';\r\n                }\r\n            }\r\n        } catch (error) {\r\n            console.log('Fetch error:', error);\r\n            if (isInitialLoad) {\r\n                errorForInvoiceData = 'Tinklo klaida. Patikrinkite interneto ryšį.';\r\n            }\r\n        } finally {\r\n            isLoadingMonth = false;\r\n        }\r\n    }\r\n\r\n    function combineMonthlyData() {\r\n        if (Object.keys(monthlyData).length === 0) {\r\n            invoiceData = null;\r\n            return;\r\n        }\r\n        \r\n        // Use the first month's balance and metadata\r\n        const firstMonthKey = loadedMonths[0];\r\n        const firstMonthData = monthlyData[firstMonthKey];\r\n        \r\n        if (!firstMonthData) {\r\n            invoiceData = null;\r\n            return;\r\n        }\r\n        \r\n        // Combine classes from all loaded months\r\n        let allClasses = [];\r\n        for (const monthKey of loadedMonths) {\r\n            const monthData = monthlyData[monthKey];\r\n            if (monthData && monthData.classes) {\r\n                allClasses = [...allClasses, ...monthData.classes];\r\n            }\r\n        }\r\n        \r\n        // Sort classes by date\r\n        allClasses.sort((a, b) => new Date(a.start_time) - new Date(b.start_time));\r\n        \r\n        // Create combined invoice data\r\n        invoiceData = {\r\n            ...firstMonthData,\r\n            classes: allClasses,\r\n            loaded_months: loadedMonths,\r\n            total_months_loaded: loadedMonths.length\r\n        };\r\n        \r\n        console.log('📊 ADMIN DEBUG - Combined data from months:', loadedMonths);\r\n        console.log('📊 ADMIN DEBUG - Total classes after combination:', allClasses.length);\r\n    }\r\n\r\n    function appendMonthData(monthString, newMonthData) {\r\n        if (!invoiceData) {\r\n            // If no existing data, just use the new data\r\n            invoiceData = {\r\n                ...newMonthData,\r\n                loaded_months: [monthString],\r\n                total_months_loaded: 1\r\n            };\r\n            console.log('📊 ADMIN DEBUG - Created initial invoice data for month:', monthString);\r\n            return;\r\n        }\r\n\r\n        // Preserve existing data and append new classes\r\n        const existingClasses = invoiceData.classes || [];\r\n        const newClasses = newMonthData.classes || [];\r\n        \r\n        // Remove any duplicate classes (by ID) to avoid conflicts\r\n        const existingClassIds = new Set(existingClasses.map(c => c.id));\r\n        const uniqueNewClasses = newClasses.filter(c => !existingClassIds.has(c.id));\r\n        \r\n        // Combine and sort all classes\r\n        const allClasses = [...existingClasses, ...uniqueNewClasses];\r\n        allClasses.sort((a, b) => new Date(a.start_time) - new Date(b.start_time));\r\n        \r\n        // Update invoice data with new classes while preserving everything else\r\n        invoiceData = {\r\n            ...invoiceData, // Keep existing balance, payments, etc.\r\n            classes: allClasses,\r\n            loaded_months: loadedMonths,\r\n            total_months_loaded: loadedMonths.length,\r\n            // Optionally update metadata from the newest month\r\n            last_updated_date: newMonthData.last_updated_date || invoiceData.last_updated_date\r\n        };\r\n        \r\n        console.log('📊 ADMIN DEBUG - Appended month:', monthString);\r\n        console.log('📊 ADMIN DEBUG - Added classes:', uniqueNewClasses.length);\r\n        console.log('📊 ADMIN DEBUG - Total classes now:', allClasses.length);\r\n        console.log('📊 ADMIN DEBUG - Loaded months:', loadedMonths);\r\n    }\r\n\r\n    async function addFutureMonth() {\r\n        if (loadedMonths.length === 0) {\r\n            console.error('No months loaded yet');\r\n            return;\r\n        }\r\n        \r\n        const latestMonth = loadedMonths[loadedMonths.length - 1];\r\n        const nextMonth = getNextMonth(latestMonth);\r\n        \r\n        console.log('📊 ADMIN DEBUG - Adding future month:', nextMonth);\r\n        await fetchMonthData(nextMonth);\r\n    }\r\n\r\n    async function addPastMonth() {\r\n        if (loadedMonths.length === 0) {\r\n            console.error('No months loaded yet');\r\n            return;\r\n        }\r\n        \r\n        const earliestMonth = loadedMonths[0];\r\n        const prevMonth = getPreviousMonth(earliestMonth);\r\n        \r\n        // Check if we would go before the 2025-09 baseline\r\n        if (prevMonth < '2025-09') {\r\n            console.log('📊 ADMIN DEBUG - Cannot add past month:', prevMonth, '- before 2025-09 baseline');\r\n            alert('Cannot load months before September 2025 (baseline month)');\r\n            return;\r\n        }\r\n        \r\n        console.log('📊 ADMIN DEBUG - Adding past month:', prevMonth);\r\n        await fetchMonthData(prevMonth);\r\n    }\r\n\r\n    function removeFutureMonth() {\r\n        if (loadedMonths.length <= 1) {\r\n            console.error('Cannot remove the only month');\r\n            return;\r\n        }\r\n        \r\n        const latestMonth = loadedMonths[loadedMonths.length - 1];\r\n        \r\n        // Don't allow removing the original month\r\n        if (latestMonth === originalMonth) {\r\n            console.error('Cannot remove the original month');\r\n            return;\r\n        }\r\n        \r\n        console.log('📊 ADMIN DEBUG - Removing future month:', latestMonth);\r\n        \r\n        // Remove from loaded months\r\n        loadedMonths = loadedMonths.slice(0, -1);\r\n        \r\n        // Remove from monthly data\r\n        delete monthlyData[latestMonth];\r\n        \r\n        // Rebuild invoice data without the removed month\r\n        rebuildInvoiceData();\r\n    }\r\n\r\n    function removePastMonth() {\r\n        if (loadedMonths.length <= 1) {\r\n            console.error('Cannot remove the only month');\r\n            return;\r\n        }\r\n        \r\n        const earliestMonth = loadedMonths[0];\r\n        \r\n        // Don't allow removing the original month\r\n        if (earliestMonth === originalMonth) {\r\n            console.error('Cannot remove the original month');\r\n            return;\r\n        }\r\n        \r\n        console.log('📊 ADMIN DEBUG - Removing past month:', earliestMonth);\r\n        \r\n        // Remove from loaded months\r\n        loadedMonths = loadedMonths.slice(1);\r\n        \r\n        // Remove from monthly data\r\n        delete monthlyData[earliestMonth];\r\n        \r\n        // Rebuild invoice data without the removed month\r\n        rebuildInvoiceData();\r\n    }\r\n\r\n    function rebuildInvoiceData() {\r\n        if (loadedMonths.length === 0) {\r\n            invoiceData = null;\r\n            return;\r\n        }\r\n        \r\n        // Use the original month's data as base\r\n        const baseMonthData = monthlyData[originalMonth];\r\n        if (!baseMonthData) {\r\n            console.error('Original month data not found');\r\n            return;\r\n        }\r\n        \r\n        // Combine classes from remaining loaded months\r\n        let allClasses = [];\r\n        for (const monthKey of loadedMonths) {\r\n            const monthData = monthlyData[monthKey];\r\n            if (monthData && monthData.classes) {\r\n                allClasses = [...allClasses, ...monthData.classes];\r\n            }\r\n        }\r\n        \r\n        // Sort classes by date\r\n        allClasses.sort((a, b) => new Date(a.start_time) - new Date(b.start_time));\r\n        \r\n        // Rebuild invoice data using original month as base\r\n        invoiceData = {\r\n            ...baseMonthData,\r\n            classes: allClasses,\r\n            loaded_months: loadedMonths,\r\n            total_months_loaded: loadedMonths.length\r\n        };\r\n        \r\n        console.log('📊 ADMIN DEBUG - Rebuilt data with months:', loadedMonths);\r\n        console.log('📊 ADMIN DEBUG - Total classes after rebuild:', allClasses.length);\r\n    }\r\n\r\n    async function fetchAllStudents() {\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            console.error('No JWT token found. User might not be logged in.');\r\n            studentsError = 'Nepavyko rasti autentifikacijos duomenų.';\r\n            isLoadingStudents = false;\r\n            return;\r\n        }\r\n\r\n        try {\r\n            const response = await fetch('/studentplayground/admin/get-all-students/', {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json',\r\n                },\r\n            });\r\n\r\n            if (response.ok) {\r\n                const result = await response.json();\r\n                allStudents = result.students || [];\r\n                filteredStudents = allStudents;\r\n                console.log('👥 ADMIN DEBUG - Loaded students:', allStudents.length);\r\n                studentsError = null;\r\n            } else {\r\n                const error = await response.json();\r\n                console.log('Error fetching students:', error);\r\n                studentsError = error.message || 'Nepavyko gauti studentų sąrašo.';\r\n            }\r\n        } catch (error) {\r\n            console.log('Fetch error:', error);\r\n            studentsError = 'Tinklo klaida. Patikrinkite interneto ryšį.';\r\n        } finally {\r\n            isLoadingStudents = false;\r\n        }\r\n    }\r\n\r\n    function selectStudent(student) {\r\n        selectedStudent = student;\r\n        selectedStudentId = student.id;\r\n        studentQuery = `${student.first_name} ${student.last_name}`;\r\n        showStudentDropdown = false;\r\n        \r\n        console.log('👤 ADMIN DEBUG - Selected student:', selectedStudent);\r\n        \r\n        // Reset invoice data when changing student\r\n        invoiceData = null;\r\n        errorForInvoiceData = null;\r\n        selectedClasses = [];\r\n        pdfUrl = '';\r\n        \r\n        // Reset monthly data\r\n        loadedMonths = [];\r\n        monthlyData = {};\r\n        originalMonth = '';\r\n        isLoadingMonth = false;\r\n        \r\n        // Fetch invoice data for selected student (starts with current month)\r\n        fetchInvoiceData();\r\n    }\r\n\r\n    function filterStudents() {\r\n        if (!studentQuery.trim()) {\r\n            filteredStudents = allStudents;\r\n            showStudentDropdown = false;\r\n        } else {\r\n            const query = studentQuery.toLowerCase();\r\n            filteredStudents = allStudents.filter(student => \r\n                `${student.first_name} ${student.last_name}`.toLowerCase().includes(query) ||\r\n                student.email.toLowerCase().includes(query)\r\n            );\r\n            showStudentDropdown = !selectedStudent && filteredStudents.length > 0;\r\n        }\r\n    }\r\n\r\n    function clearStudentSelection() {\r\n        selectedStudent = null;\r\n        selectedStudentId = null;\r\n        studentQuery = '';\r\n        showStudentDropdown = false;\r\n        filteredStudents = allStudents;\r\n        \r\n        // Reset invoice data\r\n        invoiceData = null;\r\n        errorForInvoiceData = null;\r\n        selectedClasses = [];\r\n        pdfUrl = '';\r\n        \r\n        // Reset monthly data\r\n        loadedMonths = [];\r\n        monthlyData = {};\r\n        originalMonth = '';\r\n        isLoadingMonth = false;\r\n    }\r\n\r\n    onMount(async () => {\r\n        await fetchAllStudents();\r\n    });\r\n\r\n    // Reactive statement to filter students when search query changes\r\n    $: if (studentQuery !== undefined) {\r\n        filterStudents();\r\n    }\r\n</script>\r\n\r\n<style>\r\n    /* Import all styles from StandaloneInvoicesPage.svelte */\r\n    button span {\r\n         font-weight: bolder;\r\n         font-size:larger;\r\n     }\r\n  \r\n     button {\r\n        margin-top:10px;\r\n         box-sizing: border-box;\r\n         display: flex;\r\n         flex-direction: row;\r\n         justify-content: center;\r\n         align-items: center;\r\n         padding: 12px 20px;\r\n         gap: 10px;\r\n     \r\n         width: 100%;\r\n         height: 60px;\r\n     \r\n         /* Purple background */\r\n         background-color: #fab45a;\r\n     \r\n         /* Black border */\r\n         border: 2px solid #000000;\r\n     \r\n         /* Box shadow */\r\n         box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n     \r\n         /* Rounded corners */\r\n         border-radius: 8px;\r\n     \r\n         /* Inside auto layout */\r\n         flex: none;\r\n         order: 0;\r\n         align-self: stretch;\r\n         flex-grow: 0;\r\n     \r\n         /* Remove default button styling */\r\n         outline: none;\r\n         cursor: pointer;\r\n   \r\n         /* Remove the default button background on focus */\r\n         background-image: none;\r\n         transition: background-color 0.3s ease, color 0.3s ease;\r\n     }\r\n  \r\n     /* Button hover effect */\r\n     button:hover {\r\n         background-color: #14695b;\r\n         color:white;\r\n     }\r\n  \r\n     /* Text inside the button */\r\n     span {\r\n        margin-top: 5px;\r\n        margin-bottom: 5px;\r\n        font-size: 1rem;\r\n        font-weight: bold;\r\n     \r\n     }\r\n   form {\r\n       padding-bottom: 10px;\r\n       padding-top:15px;\r\n   }\r\n   span {\r\n       font-weight: bold;\r\n   }\r\n   \r\n   label {\r\n          font-size: 18px;\r\n          font-weight: bold;\r\n          margin-bottom: 5px;\r\n          display: block;\r\n          color:#14695b;\r\n          text-align: center;\r\n      }\r\n\r\n      .balance-info {\r\n          margin: 1rem 0 1.5rem 0;\r\n          padding: 1rem;\r\n          background-color: #f8f9fa;\r\n          border-radius: 8px;\r\n          border-left: 4px solid #14695b;\r\n          text-align: center;\r\n      }\r\n\r\n      .balance-info > div {\r\n          margin-bottom: 8px;\r\n      }\r\n\r\n      .balance-label {\r\n          font-weight: 600;\r\n          color: #14695b;\r\n          display: inline;\r\n      }\r\n\r\n      .balance-amount {\r\n          font-weight: 700;\r\n          font-size: 1.1em;\r\n          color: #333;\r\n          margin-left: 8px;\r\n      }\r\n\r\n      .balance-date {\r\n          color: #666;\r\n          font-size: 0.9em;\r\n          margin-left: 8px;\r\n      }\r\n\r\n      .loading-container {\r\n          display: flex;\r\n          flex-direction: column;\r\n          align-items: center;\r\n          justify-content: center;\r\n          padding: 2rem;\r\n          margin: 2rem 0;\r\n      }\r\n\r\n      .loading-spinner {\r\n          width: 40px;\r\n          height: 40px;\r\n          border: 4px solid #f3f3f3;\r\n          border-top: 4px solid #14695b;\r\n          border-radius: 50%;\r\n          animation: spin 1s linear infinite;\r\n          margin-bottom: 1rem;\r\n      }\r\n\r\n      @keyframes spin {\r\n          0% { transform: rotate(0deg); }\r\n          100% { transform: rotate(360deg); }\r\n      }\r\n\r\n      .loading-text {\r\n          color: #666;\r\n          font-size: 1rem;\r\n          margin: 0;\r\n      }\r\n\r\n      .error-container {\r\n          display: flex;\r\n          flex-direction: column;\r\n          align-items: center;\r\n          justify-content: center;\r\n          padding: 2rem;\r\n          margin: 2rem 0;\r\n          background-color: #fff3f3;\r\n          border-radius: 8px;\r\n          border-left: 4px solid #dc3545;\r\n      }\r\n\r\n      .error-text {\r\n          color: #dc3545;\r\n          font-size: 1rem;\r\n          margin-bottom: 1rem;\r\n          text-align: center;\r\n      }\r\n\r\n      .error-container button {\r\n          background-color: #dc3545;\r\n          color: white;\r\n          border: none;\r\n          padding: 0.5rem 1rem;\r\n          border-radius: 4px;\r\n          cursor: pointer;\r\n          font-size: 0.9rem;\r\n      }\r\n\r\n      .error-container button:hover {\r\n          background-color: #c82333;\r\n      }\r\n\r\n      .payments-section {\r\n          margin-top: 2rem;\r\n          padding-top: 2rem;\r\n          border-top: 2px solid #e9ecef;\r\n      }\r\n\r\n      .payments-header {\r\n          color: #14695b;\r\n          font-size: 1.5rem;\r\n          font-weight: 600;\r\n          margin-bottom: 0.5rem;\r\n      }\r\n\r\n      .payments-description {\r\n          color: #666;\r\n          font-size: 1rem;\r\n          margin-bottom: 1.5rem;\r\n          line-height: 1.4;\r\n      }\r\n\r\n      .no-payments-section {\r\n          margin-top: 2rem;\r\n          padding: 2rem;\r\n          background-color: #f8f9fa;\r\n          border-radius: 8px;\r\n          text-align: center;\r\n      }\r\n\r\n      .no-payments-text {\r\n          font-size: 1rem;\r\n          color: #333;\r\n      }\r\n\r\n      /* Admin-specific styles */\r\n      .admin-header {\r\n          background-color: #dc3545;\r\n          color: white;\r\n          padding: 1rem;\r\n          margin-bottom: 2rem;\r\n          border-radius: 8px;\r\n          text-align: center;\r\n      }\r\n\r\n      .admin-title {\r\n          font-size: 1.5rem;\r\n          font-weight: bold;\r\n          margin: 0 0 0.5rem 0;\r\n      }\r\n\r\n      .admin-subtitle {\r\n          font-size: 1rem;\r\n          margin: 0;\r\n          opacity: 0.9;\r\n      }\r\n\r\n      .student-selector {\r\n          margin-bottom: 2rem;\r\n          padding: 1.5rem;\r\n          background-color: #f8f9fa;\r\n          border-radius: 8px;\r\n          border-left: 4px solid #dc3545;\r\n      }\r\n\r\n      .student-selector label {\r\n          color: #dc3545;\r\n          font-size: 1.2rem;\r\n          margin-bottom: 1rem;\r\n          display: block;\r\n      }\r\n\r\n      .input-container {\r\n          position: relative;\r\n          margin-top: 15px;\r\n      }\r\n\r\n      .search-input {\r\n          width: 100%;\r\n          padding: 12px;\r\n          border: 1px solid #ddd;\r\n          border-radius: 6px;\r\n          font-size: 0.9em;\r\n          background-color: white;\r\n          box-sizing: border-box;\r\n      }\r\n\r\n      .search-input:focus {\r\n          outline: none;\r\n          border-color: #14695b;\r\n          box-shadow: 0 0 0 2px rgba(20, 105, 91, 0.2);\r\n      }\r\n\r\n      .autocomplete-list {\r\n          position: absolute;\r\n          top: 100%;\r\n          left: 0;\r\n          right: 0;\r\n          background: white;\r\n          border: 1px solid #ddd;\r\n          border-top: none;\r\n          border-radius: 0 0 6px 6px;\r\n          max-height: 200px;\r\n          overflow-y: auto;\r\n          z-index: 1000;\r\n          box-shadow: 0 2px 8px rgba(0,0,0,0.1);\r\n      }\r\n\r\n      .autocomplete-list-item {\r\n          padding: 0.25rem 0.5rem;\r\n          cursor: pointer;\r\n          border-bottom: 1px solid #f0f0f0;\r\n          transition: background-color 0.2s ease;\r\n      }\r\n\r\n      .autocomplete-list-item:hover {\r\n          background-color: #f8f9fa;\r\n      }\r\n\r\n      .autocomplete-list-item:last-child {\r\n          border-bottom: none;\r\n      }\r\n\r\n      .student-option {\r\n          display: flex;\r\n          flex-direction: column;\r\n          gap: 0;\r\n      }\r\n\r\n      .student-name {\r\n          font-weight: 500;\r\n          color: #333;\r\n          font-size: 0.8em;\r\n          line-height: 1.1;\r\n      }\r\n\r\n      .student-email {\r\n          color: #666;\r\n          font-size: 0.7em;\r\n          line-height: 1.1;\r\n      }\r\n\r\n      .student-id {\r\n          color: #dc3545;\r\n          font-size: 0.65em;\r\n          font-weight: 500;\r\n          line-height: 1.1;\r\n      }\r\n\r\n      .selected-student-badge {\r\n          display: inline-flex;\r\n          align-items: center;\r\n          background-color: #d1ecf1;\r\n          color: #0c5460;\r\n          padding: 0.5rem 0.75rem;\r\n          border-radius: 6px;\r\n          font-size: 0.9rem;\r\n          margin-top: 0.5rem;\r\n      }\r\n\r\n      .selected-student-badge .remove-selection {\r\n          background: none;\r\n          border: none;\r\n          color: #0c5460;\r\n          margin-left: 0.5rem;\r\n          cursor: pointer;\r\n          font-weight: bold;\r\n          font-size: 1.2rem;\r\n          padding: 0;\r\n          width: auto;\r\n          height: auto;\r\n      }\r\n\r\n      .selected-student-badge .remove-selection:hover {\r\n          color: #062c33;\r\n          background: none;\r\n      }\r\n\r\n      .form-help {\r\n          font-size: 0.9rem;\r\n          color: #666;\r\n          margin-top: 0.5rem;\r\n      }\r\n\r\n      .selected-student-info {\r\n          margin-top: 1rem;\r\n          padding: 1rem;\r\n          background-color: white;\r\n          border-radius: 4px;\r\n          border: 1px solid #ddd;\r\n          display: flex;\r\n          justify-content: space-between;\r\n          align-items: flex-start;\r\n          gap: 15px;\r\n      }\r\n\r\n      .selected-student-details {\r\n          flex: 1;\r\n      }\r\n\r\n      .student-info-label {\r\n          font-weight: 600;\r\n          color: #dc3545;\r\n      }\r\n\r\n      .btn-clear-selection {\r\n          padding: 8px 16px;\r\n          background-color: #6c757d;\r\n          color: white;\r\n          border: none;\r\n          border-radius: 4px;\r\n          cursor: pointer;\r\n          font-size: 0.85em;\r\n          white-space: nowrap;\r\n          transition: background-color 0.2s;\r\n      }\r\n\r\n      .btn-clear-selection:hover {\r\n          background-color: #545b62;\r\n      }\r\n\r\n      .debug-warning {\r\n          background-color: #fff3cd;\r\n          border: 1px solid #ffeaa7;\r\n          border-left: 4px solid #f39c12;\r\n          padding: 1rem;\r\n          margin-bottom: 1rem;\r\n          border-radius: 4px;\r\n      }\r\n\r\n      .debug-warning-title {\r\n          font-weight: bold;\r\n          color: #856404;\r\n          margin-bottom: 0.5rem;\r\n      }\r\n\r\n      .debug-warning-text {\r\n          color: #856404;\r\n          margin: 0;\r\n      }\r\n\r\n      /* Loaded months info styles */\r\n      .loaded-months-info {\r\n          margin: 1rem 0;\r\n          padding: 0.75rem;\r\n          background-color: #f8f9fa;\r\n          border-radius: 6px;\r\n          border-left: 3px solid #14695b;\r\n      }\r\n\r\n      .loaded-months-header {\r\n          font-weight: 600;\r\n          color: #14695b;\r\n          margin-bottom: 0.5rem;\r\n          font-size: 0.95rem;\r\n      }\r\n\r\n      .loaded-months-list {\r\n          font-size: 0.85rem;\r\n          color: #666;\r\n      }\r\n\r\n      .loaded-month {\r\n          display: inline-block;\r\n          background-color: #14695b;\r\n          color: white;\r\n          padding: 3px 6px;\r\n          margin: 1px;\r\n          border-radius: 3px;\r\n          font-size: 0.75rem;\r\n      }\r\n\r\n      .loaded-month.baseline-month {\r\n          background-color: #ffc107;\r\n          color: #000;\r\n          border: 1px solid #f39c12;\r\n          font-weight: 600;\r\n      }\r\n\r\n      /* Expand/collapse button styles */\r\n      .expand-button-container {\r\n          display: flex;\r\n          justify-content: center;\r\n          gap: 10px;\r\n          margin: 1rem 0;\r\n          flex-wrap: wrap;\r\n      }\r\n\r\n      .expand-btn {\r\n          display: flex;\r\n          align-items: center;\r\n          gap: 6px;\r\n          padding: 8px 20px;\r\n          background-color: #e9ecef;\r\n          color: #495057;\r\n          border: 1px solid #ced4da;\r\n          border-radius: 25px; /* Oval shape */\r\n          cursor: pointer;\r\n          font-size: 0.85rem;\r\n          font-weight: 500;\r\n          transition: all 0.2s ease;\r\n          min-width: 120px;\r\n          justify-content: center;\r\n          box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n      }\r\n\r\n      .expand-btn:hover:not(:disabled) {\r\n          background-color: #14695b;\r\n          color: white;\r\n          border-color: #14695b;\r\n          transform: translateY(-1px);\r\n          box-shadow: 0 2px 6px rgba(0,0,0,0.15);\r\n      }\r\n\r\n      .expand-btn:disabled {\r\n          background-color: #f8f9fa;\r\n          color: #adb5bd;\r\n          border-color: #e9ecef;\r\n          cursor: not-allowed;\r\n          opacity: 0.6;\r\n          transform: none;\r\n          box-shadow: none;\r\n      }\r\n\r\n      .expand-btn.loading {\r\n          background-color: #fff3cd;\r\n          color: #856404;\r\n          border-color: #ffeaa7;\r\n      }\r\n\r\n      .expand-text {\r\n          font-size: 0.8rem;\r\n          white-space: nowrap;\r\n      }\r\n\r\n      .expand-btn.remove-btn {\r\n          background-color: #f8d7da;\r\n          color: #721c24;\r\n          border-color: #f5c6cb;\r\n      }\r\n\r\n      .expand-btn.remove-btn:hover:not(:disabled) {\r\n          background-color: #dc3545;\r\n          color: white;\r\n          border-color: #dc3545;\r\n      }\r\n  </style>\r\n\r\n<NavBarReusable label=\"Admin: Student Invoice Debug\" backLink={backLinkUrl} />\r\n\r\n<div class=\"admin-header\">\r\n    <h1 class=\"admin-title\">🔧 Admin Debug: Student Invoice Viewer</h1>\r\n    <p class=\"admin-subtitle\">View any student's invoice page exactly as they see it</p>\r\n</div>\r\n\r\n<div class=\"debug-warning\">\r\n    <div class=\"debug-warning-title\">⚠️ Debug Mode Active</div>\r\n    <p class=\"debug-warning-text\">This is an admin debugging tool. Payment functionality is disabled. You're seeing the exact view that the selected student would see.</p>\r\n</div>\r\n\r\n<!-- Student Selection -->\r\n<div class=\"student-selector\">\r\n    <label for=\"student-search\">Select Student to Debug:</label>\r\n    \r\n    {#if isLoadingStudents}\r\n        <div class=\"loading-container\">\r\n            <div class=\"loading-spinner\"></div>\r\n            <p class=\"loading-text\">Loading students...</p>\r\n        </div>\r\n    {:else if studentsError}\r\n        <div class=\"error-container\">\r\n            <p class=\"error-text\">Error: {studentsError}</p>\r\n            <button on:click={() => { isLoadingStudents = true; studentsError = null; fetchAllStudents(); }}>\r\n                Try Again\r\n            </button>\r\n        </div>\r\n    {:else}\r\n        <div class=\"input-container\">\r\n            <input \r\n                id=\"student-search\"\r\n                type=\"text\" \r\n                placeholder=\"Search student by name or email...\"\r\n                bind:value={studentQuery}\r\n                on:input={() => {\r\n                    if (selectedStudent && studentQuery !== `${selectedStudent.first_name} ${selectedStudent.last_name}`) {\r\n                        selectedStudent = null;\r\n                        selectedStudentId = null;\r\n                        showStudentDropdown = true;\r\n                    } else if (!selectedStudent) {\r\n                        showStudentDropdown = studentQuery.trim().length > 0;\r\n                    }\r\n                }}\r\n                autocomplete=\"off\"\r\n                class=\"search-input\"\r\n            />\r\n            \r\n            {#if selectedStudent}\r\n                <div class=\"selected-student-badge\">\r\n                    ✓ {selectedStudent.first_name} {selectedStudent.last_name} ({selectedStudent.email})\r\n                    <button \r\n                        type=\"button\" \r\n                        class=\"remove-selection\"\r\n                        on:click={() => {\r\n                            selectedStudent = null;\r\n                            selectedStudentId = null;\r\n                            studentQuery = '';\r\n                            showStudentDropdown = false;\r\n                            filteredStudents = allStudents;\r\n                            invoiceData = null;\r\n                            errorForInvoiceData = null;\r\n                            selectedClasses = [];\r\n                            pdfUrl = '';\r\n                            loadedMonths = [];\r\n                            monthlyData = {};\r\n                            originalMonth = '';\r\n                            isLoadingMonth = false;\r\n                        }}\r\n                    >\r\n                        ×\r\n                    </button>\r\n                </div>\r\n            {/if}\r\n            \r\n            {#if showStudentDropdown}\r\n                <div class=\"autocomplete-list\">\r\n                    {#each filteredStudents.slice(0, 8) as student}\r\n                        <div \r\n                            class=\"autocomplete-list-item\"\r\n                            on:click={() => selectStudent(student)}\r\n                            role=\"button\"\r\n                            tabindex=\"0\"\r\n                            on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectStudent(student)}\r\n                        >\r\n                            <div class=\"student-option\">\r\n                                <span class=\"student-name\">{student.first_name} {student.last_name}</span>\r\n                                <span class=\"student-email\">{student.email}</span>\r\n                                <span class=\"student-id\">ID: {student.id}</span>\r\n                            </div>\r\n                        </div>\r\n                    {/each}\r\n                </div>\r\n            {/if}\r\n        </div>\r\n        <div class=\"form-help\">Start typing to search for students by name or email</div>\r\n        \r\n        {#if selectedStudent}\r\n            <div class=\"selected-student-info\">\r\n                <div class=\"selected-student-details\">\r\n                    <div><span class=\"student-info-label\">Name:</span> {selectedStudent.first_name} {selectedStudent.last_name}</div>\r\n                    <div><span class=\"student-info-label\">Email:</span> {selectedStudent.email}</div>\r\n                    <div><span class=\"student-info-label\">ID:</span> {selectedStudent.id}</div>\r\n                </div>\r\n                <button \r\n                    type=\"button\" \r\n                    class=\"btn-clear-selection\" \r\n                    on:click={clearStudentSelection}\r\n                >\r\n                    Clear Selection\r\n                </button>\r\n            </div>\r\n        {/if}\r\n    {/if}\r\n</div>\r\n\r\n<!-- Loaded Months Info (only show if student is selected and has data) -->\r\n{#if selectedStudentId && loadedMonths.length > 0}\r\n    <div class=\"loaded-months-info\">\r\n        <div class=\"loaded-months-header\">📅 Loaded Months</div>\r\n        <div class=\"loaded-months-list\">\r\n            {#each loadedMonths as month}\r\n                <span class=\"loaded-month\" class:baseline-month={month === '2025-09'}>\r\n                    {formatMonthForDisplay(month)}\r\n                    {#if month === '2025-09'}\r\n                        <span style=\"font-size: 0.7em; opacity: 0.8;\">📍</span>\r\n                    {/if}\r\n                </span>\r\n            {/each}\r\n        </div>\r\n    </div>\r\n{/if}\r\n\r\n<!-- Student Invoice View (identical to StandaloneInvoicesPage.svelte) -->\r\n{#if selectedStudentId}\r\n    {#if isLoadingInvoiceData || isLoadingMonth}\r\n        <div class=\"loading-container\">\r\n            <div class=\"loading-spinner\"></div>\r\n            <p class=\"loading-text\">Loading student invoice data...</p>\r\n        </div>\r\n    {:else if errorForInvoiceData}\r\n        <div class=\"error-container\">\r\n            <p class=\"error-text\">Error: {errorForInvoiceData}</p>\r\n            <button on:click={() => { isLoadingInvoiceData = true; errorForInvoiceData = null; fetchInvoiceData(); }}>\r\n                Try Again\r\n            </button>\r\n        </div>\r\n    {:else if invoiceData}\r\n        <div class=\"balance-info\">\r\n            <div>\r\n                <span class=\"balance-label\">Student's Current Balance:</span>\r\n                <span class=\"balance-amount\">{invoiceData.balance} EUR</span>\r\n            </div>\r\n            <div>\r\n                <span class=\"balance-label\">Last Updated:</span>\r\n                <span class=\"balance-date\">{new Date(invoiceData.last_updated_date).toLocaleDateString('lt-LT')}</span>\r\n            </div>\r\n            {#if invoiceData.loaded_months && invoiceData.loaded_months.length > 0}\r\n                <div>\r\n                    <span class=\"balance-label\">Showing months:</span>\r\n                    <span class=\"balance-date\">\r\n                        {invoiceData.loaded_months.map(month => formatMonthForDisplay(month)).join(', ')}\r\n                    </span>\r\n                </div>\r\n                <div>\r\n                    <span class=\"balance-label\">Total classes:</span>\r\n                    <span class=\"balance-date\">{invoiceData.classes.length}</span>\r\n                </div>\r\n            {/if}\r\n            {#if invoiceData.snapshots_info && invoiceData.snapshots_info.total_snapshots > 0}\r\n                <div style=\"margin-top: 0.5rem; padding: 0.5rem; background-color: #e8f5e8; border-radius: 4px;\">\r\n                    <span class=\"balance-label\">📸 Snapshots created:</span>\r\n                    <span class=\"balance-date\">{invoiceData.snapshots_info.total_snapshots} month(s)</span>\r\n                    {#if invoiceData.snapshots_info.snapshots_created && invoiceData.snapshots_info.snapshots_created.length > 0}\r\n                        <div style=\"font-size: 0.8em; color: #666; margin-top: 4px;\">\r\n                            {invoiceData.snapshots_info.snapshots_created.map(month => formatMonthForDisplay(month)).join(', ')}\r\n                        </div>\r\n                    {/if}\r\n                </div>\r\n            {/if}\r\n            {#if invoiceData.validation_info}\r\n                <div style=\"margin-top: 1rem; font-size: 0.9em; color: #666;\">\r\n                    <div><strong>Debug Info:</strong></div>\r\n                    <div>Valid Charges: €{invoiceData.validation_info.valid_charges_total}</div>\r\n                    <div>Invalid Charges: €{invoiceData.validation_info.invalid_charges_total}</div>\r\n                    <div>Total Payments: €{invoiceData.validation_info.total_payments}</div>\r\n                    <div>Stored Balance: €{invoiceData.validation_info.stored_balance}</div>\r\n                    <div>Validated Balance: €{invoiceData.validation_info.validated_balance}</div>\r\n                </div>\r\n            {/if}\r\n        </div>\r\n\r\n        {#if pdfUrl} <!-- Show PDF in iframe if URL exists -->\r\n            <div>\r\n                <iframe title=\"pdf_preview\" src={pdfUrl} width=\"100%\" height=\"600px\"></iframe>\r\n            </div>\r\n           \r\n            <div>\r\n                <p>Total: {Math.round(invoiceSum)} EUR</p>\r\n            \r\n                <button\r\n                    on:click={fetchPaymentLinkAndRedirect}\r\n                    disabled={isFetchingPaymentLink}\r\n                    style=\"background-color: #6c757d; cursor: not-allowed;\"\r\n                >\r\n                    🚫 Payment Disabled (Debug Mode)\r\n                </button>\r\n            </div>\r\n        {/if}\r\n\r\n        <form on:submit|preventDefault={handleSubmit}>\r\n            <label for=\"class-select\">Select Classes (Student View):</label>\r\n            \r\n            <!-- Add/Remove Past Month Buttons (above classes) -->\r\n            {#if loadedMonths.length > 0}\r\n                <div class=\"expand-button-container\">\r\n                    <button \r\n                        type=\"button\"\r\n                        class=\"expand-btn\" \r\n                        class:loading={isLoadingMonth}\r\n                        disabled={isLoadingMonth || !canAddPast}\r\n                        on:click={addPastMonth}\r\n                        title={!canAddPast ? 'Cannot go before September 2025 (baseline month)' : 'Load previous month'}\r\n                    >\r\n                        <span class=\"expand-text\">\r\n                            {#if isLoadingMonth}\r\n                                Kraunama...\r\n                            {:else if !canAddPast}\r\n                                Pasiekta pradžia\r\n                            {:else}\r\n                                Rodyti ankstesnį mėnesį\r\n                            {/if}\r\n                        </span>\r\n                    </button>\r\n                    \r\n                    {#if canRemovePast}\r\n                        <button \r\n                            type=\"button\"\r\n                            class=\"expand-btn remove-btn\" \r\n                            disabled={isLoadingMonth}\r\n                            on:click={removePastMonth}\r\n                            title=\"Remove earliest month\"\r\n                        >\r\n                            ❌ <span class=\"expand-text\">Išimti ankščiausią</span>\r\n                        </button>\r\n                    {/if}\r\n                </div>\r\n            {/if}\r\n            \r\n            <CheckBoxAreForClassesComponent\r\n                classes={invoiceData.classes}\r\n                bind:selectedClasses\r\n            />\r\n\r\n            <!-- Add/Remove Future Month Buttons (below classes) -->\r\n            {#if loadedMonths.length > 0}\r\n                <div class=\"expand-button-container\">\r\n                    <button \r\n                        type=\"button\"\r\n                        class=\"expand-btn\" \r\n                        class:loading={isLoadingMonth}\r\n                        disabled={isLoadingMonth}\r\n                        on:click={addFutureMonth}\r\n                        title=\"Load next month\"\r\n                    >\r\n                        <span class=\"expand-text\">\r\n                            {#if isLoadingMonth}\r\n                                Kraunama...\r\n                            {:else}\r\n                                Rodyti vėlesnį mėnesį\r\n                            {/if}\r\n                        </span>\r\n                    </button>\r\n                    \r\n                    {#if canRemoveFuture}\r\n                        <button \r\n                            type=\"button\"\r\n                            class=\"expand-btn remove-btn\" \r\n                            disabled={isLoadingMonth}\r\n                            on:click={removeFutureMonth}\r\n                            title=\"Remove latest month\"\r\n                        >\r\n                            ❌ <span class=\"expand-text\">Išimti vėliausią</span>\r\n                        </button>\r\n                    {/if}\r\n                </div>\r\n            {/if}\r\n\r\n            <button type=\"submit\">\r\n                <span>{isCreatingPDF ? 'Creating...' : 'Generate Invoice (Debug)'}</span>\r\n            </button>\r\n        </form>\r\n\r\n        {#if invoiceData.previous_payments.length > 0}\r\n            <div class=\"payments-section\">\r\n                <h2 class=\"payments-header\">Student's Previous Payments</h2>\r\n                <p class=\"payments-description\">Payment history as seen by the student.</p>\r\n                <CompletedPaymentsList payments={invoiceData.previous_payments} />\r\n            </div>\r\n        {:else}\r\n            <div class=\"no-payments-section\">\r\n                <h2 class=\"payments-header\">Student's Previous Payments</h2>\r\n                <p class=\"no-payments-text\">This student has no previous payments.</p>\r\n            </div>\r\n        {/if}\r\n    {/if}\r\n{:else}\r\n    <div class=\"loading-container\">\r\n        <p class=\"loading-text\">👆 Please select a student above to view their invoice page</p>\r\n    </div>\r\n{/if}\r\n","<script>\r\n    import ClassName from './ClassNameComponent.svelte';\r\n    import TeacherName from './TeacherNameComponent.svelte';\r\n    import TimeShower from './TimeShowerComponent.svelte';\r\n    import SendEmailLink from './RecieveEmailComponent.svelte';\r\n    import ButtonToJoinClass from './ButtonToJoinClassComponent.svelte'\r\n    import { push } from 'svelte-spa-router';\r\n    import { onMount } from 'svelte';\r\n    import ButtonToJoinClassComponent from './ButtonToJoinClassComponent.svelte';\r\n    import FilterButtons from './FilterButtons.svelte';\r\n    import RescheduleButton from './ButtonToRescheduleComponent.svelte'\r\n    import ButtonToComment from './ButtonToLeaveCommentComponent.svelte'\r\n    import NavBarReusable from './NavbarReusable.svelte';\r\n    import RescheduleRequestsContent from './RescheduleRequestsContent.svelte';\r\n    import TeacherRegistrationRequestsComponent from './TeacherRegistrationRequestsComponent.svelte';\r\n    import StudentsWithGradesComponent from './StudentsWithGradesComponent.svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n    \r\n    export let studentId = null;\r\n    export let embedded = false;\r\n    let lastEmbeddedStudentId = null;\r\n    const apiBase = getApiBase();\r\n\r\n    function getHashQueryParam(name) {\r\n        const hash = window.location.hash || '';\r\n        const qIndex = hash.indexOf('?');\r\n        if (qIndex === -1) return null;\r\n        const params = new URLSearchParams(hash.slice(qIndex + 1));\r\n        return params.get(name);\r\n    }\r\n\r\n    // Student selection variables (from AdminStudentInvoiceViewer)\r\n    let allStudents = [];\r\n    let selectedStudentId = null;\r\n    let selectedStudent = null;\r\n    let selectedUserIsTeacher = false; // Track if selected user is a teacher\r\n    let isLoadingStudents = true;\r\n    let studentsError = null;\r\n    let studentQuery = '';\r\n    let filteredStudents = [];\r\n    let showStudentDropdown = false;\r\n    \r\n    // Schedule variables (from Schedule.svelte)\r\n    let events = [];\r\n    let currentFilter = 'past_classes';\r\n    let isUserTeacher = false;\r\n    let activeTab = 'schedule'; // 'schedule', 'reschedule-requests', or 'registration-requests'\r\n    let unacceptedRequestsCount = 0;\r\n    let unacceptedRescheduleRequestsCount = 0;\r\n    \r\n    // Admin-specific variables\r\n    let isLoadingSchedule = false;\r\n    let scheduleError = null;\r\n    let backLinkUrl = \"/admin\"; // Back to admin page\r\n\r\n    // If opened via Students dashboard deep link, make Back return there\r\n    $: if (!embedded && getHashQueryParam('studentId')) {\r\n        backLinkUrl = \"/admin/students\";\r\n    }\r\n    \r\n    // Function to switch between tabs\r\n    function switchTab(tab) {\r\n        activeTab = tab;\r\n        // Refresh counts when switching away from specific tabs\r\n        if (tab !== 'registration-requests' && selectedUserIsTeacher) {\r\n            fetchUnacceptedRequestsCount();\r\n        }\r\n        if (tab !== 'reschedule-requests') {\r\n            fetchUnacceptedRescheduleRequestsCount();\r\n        }\r\n    }\r\n\r\n    // Function to fetch unaccepted registration requests count\r\n    const fetchUnacceptedRequestsCount = async () => {\r\n        if (!selectedUserIsTeacher || !selectedStudentId) return;\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/teacher/class-registration-requests/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                let count = 0;\r\n                \r\n                // Count unaccepted requests across all days\r\n                Object.values(data).forEach(dayRequests => {\r\n                    dayRequests.forEach(req => {\r\n                        if (!req.accepted_by_teacher) {\r\n                            count++;\r\n                        }\r\n                    });\r\n                });\r\n                \r\n                unacceptedRequestsCount = count;\r\n            }\r\n        } catch (error) {\r\n            console.error('Error fetching registration requests count:', error);\r\n        }\r\n    };\r\n\r\n    // Function to fetch unaccepted reschedule requests count\r\n    const fetchUnacceptedRescheduleRequestsCount = async () => {\r\n        if (!selectedStudentId) return;\r\n        \r\n        const token = localStorage.getItem('jwtToken');\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/api/reschedule-requests-count/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                unacceptedRescheduleRequestsCount = data.pending_count;\r\n            }\r\n        } catch (error) {\r\n            console.error('Error fetching reschedule requests count:', error);\r\n        }\r\n    };\r\n\r\n    // Function to change the link text when clicked\r\n    function changeLinkText(event) {\r\n        const link = event.target;\r\n        link.textContent = \"Pamokos informacija išsiųsta!\";\r\n    }\r\n\r\n    function isPastEvent(eventTime) {\r\n        console.log(\"THis is the event time RAW\");\r\n        console.log(eventTime);\r\n        \r\n        // Format the event time to get the CLASS END TIME (not start time)\r\n        const validEventTime = formatEventTime(eventTime)\r\n        \r\n        console.log(\"Event END time formatted:\", validEventTime);\r\n        \r\n        if (!validEventTime) {\r\n            console.error(\"Could not parse event time:\", eventTime);\r\n            return false; // Default to not past if we can't parse\r\n        }\r\n        \r\n        try {\r\n            // Parse the Lithuanian time string and create Date objects in Lithuanian timezone\r\n            const [datePart, timePart] = validEventTime.split('T');\r\n            \r\n            // Create event date by treating the input as Lithuanian timezone\r\n            // We need to parse it and then convert to UTC for accurate comparison\r\n            const eventDateTime = new Date(validEventTime);\r\n            \r\n            // The key insight: the backend provides time in Lithuanian timezone, \r\n            // but JavaScript Date constructor treats it as local timezone\r\n            // So we need to adjust for the difference\r\n            \r\n            // Get current time in Lithuanian timezone\r\n            const now = new Date();\r\n            const nowInLithuaniaStr = now.toLocaleString(\"sv-SE\", { timeZone: \"Europe/Vilnius\" });\r\n            const nowInLithuania = new Date(nowInLithuaniaStr);\r\n            \r\n            // Create event time in Lithuanian timezone using the same method\r\n            const eventInLithuaniaStr = validEventTime.replace('T', ' ');\r\n            const eventInLithuania = new Date(eventInLithuaniaStr);\r\n            \r\n            // Add 10-minute buffer for both teachers and students - they can leave comments 10 minutes before class ends\r\n            // This allows both to submit feedback if they finish early\r\n            const bufferMinutes = 10; // Apply 10-minute buffer for everyone\r\n            const eventWithBuffer = new Date(eventInLithuania.getTime() - (bufferMinutes * 60 * 1000));\r\n            \r\n            // Since both are now in the same reference frame, we can compare directly\r\n            console.log(\"Event END time (Lithuanian interpreted):\", eventInLithuania);\r\n            console.log(\"Event END time with buffer:\", eventWithBuffer);\r\n            console.log(\"Current time (Lithuanian interpreted):\", nowInLithuania);\r\n            console.log(\"Is past event (class ended + buffer):\", eventWithBuffer < nowInLithuania);\r\n\r\n            // Check if the event is in the past (considering the 10-minute buffer for everyone)\r\n            return eventWithBuffer < nowInLithuania;\r\n            \r\n        } catch (error) {\r\n            console.error(\"Error parsing event time:\", error);\r\n            return false; // Default to not past if parsing fails\r\n        }\r\n    }\r\n\r\n    const formatDateTime = (datetime) => {\r\n        let parts = datetime.split(\" \");\r\n        let datePart = parts[0];\r\n        let timePart = parts[1];\r\n        let dayPart = parts[2];\r\n\r\n        let formattedDate = `${dayPart}<br>${datePart}`;\r\n        return { timePart, formattedDate };\r\n    };\r\n\r\n    function formatEventTime(eventTime) {\r\n        // Extract the date and time parts using a regular expression\r\n        const match = eventTime.match(/^(\\d{4}-\\d{2}-\\d{2})\\s+(\\d{2}:\\d{2})/);\r\n\r\n        if (!match) {\r\n            console.error(\"Invalid date format:\", eventTime);\r\n            return null; // Return null if the format doesn't match the expected pattern\r\n        }\r\n\r\n        const datePart = match[1]; // e.g., \"2024-09-06\"\r\n        const timePart = match[2]; // e.g., \"14:00\"\r\n\r\n        // FIXED: Since displayTime contains START time, but we need to check END time,\r\n        // add 1 hour to get the actual class end time\r\n        const [hours, minutes] = timePart.split(':').map(Number);\r\n        const startTime = new Date(`${datePart}T${timePart}:00`);\r\n        const endTime = new Date(startTime.getTime() + (60 * 60 * 1000)); // Add 1 hour\r\n        \r\n        // Format back to ISO string format for consistency\r\n        const endHours = endTime.getHours().toString().padStart(2, '0');\r\n        const endMinutes = endTime.getMinutes().toString().padStart(2, '0');\r\n        \r\n        return `${datePart}T${endHours}:${endMinutes}:00`;\r\n    }\r\n\r\n    const fetchUserRole = async () => {\r\n        const token = localStorage.getItem('jwtToken')\r\n        console.log(\"This is the token:)\")\r\n        console.log(token)\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/isUserTeacher/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n\r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                isUserTeacher = data.isUserTeacher\r\n                console.log(\"THis is what returns for isUserTeacher:\")\r\n                console.log(isUserTeacher)// Assuming the role is returned in the JSON as { \"role\": \"Teacher\" }\r\n            } else {\r\n                if (response.status === 401) {\r\n                    // If response is 401 Unauthorized, redirect to login\r\n                    alert('Reikia prisijungti iš naujo.');\r\n                    localStorage.removeItem('jwtToken'); // Optional: Clear any stored tokens\r\n                    window.location.href = '#/about'; // Redirect to login page\r\n                } else {\r\n                    // Handle other errors\r\n                    alert('Error submitting form!');\r\n                }\r\n            }\r\n        } catch (error) {\r\n            console.error(\"Failed to fetch user role:\", error);\r\n            return null;\r\n        }\r\n    };\r\n\r\n    const fetchEvents = async () => {\r\n        if (!selectedStudentId) {\r\n            console.error('No user selected for schedule fetch');\r\n            return;\r\n        }\r\n\r\n        const token = localStorage.getItem('jwtToken'); // Retrieve token from localStorage\r\n\r\n        if (!token) {\r\n            console.error('No JWT token found. User might not be logged in.');\r\n            scheduleError = 'Nepavyko rasti autentifikacijos duomenų.';\r\n            return;\r\n        }\r\n\r\n        isLoadingSchedule = true;\r\n        scheduleError = null;\r\n\r\n        try {\r\n            const userType = selectedUserIsTeacher ? 'teacher' : 'student';\r\n            console.log(`📅 ADMIN DEBUG - Fetching schedule for ${userType}:`, selectedStudentId);\r\n            console.log(\"Selected user is teacher:\", selectedUserIsTeacher);\r\n            console.log(\"Logged-in user is teacher:\", isUserTeacher);\r\n            \r\n            // Use different endpoints based on whether selected user is a teacher or student\r\n            const url = selectedUserIsTeacher\r\n                ? `${apiBase}/studentplayground/admin/debug-teacher-schedule/${selectedStudentId}/?filter=${currentFilter}`\r\n                : `${apiBase}/studentplayground/admin/debug-schedule/${selectedStudentId}/?filter=${currentFilter}`;\r\n\r\n            console.log(\"THis is the url we trynna get to:\")\r\n            console.log(url)\r\n\r\n            // Make the request\r\n            const response = await fetch(url, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                }\r\n            });\r\n            \r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                events = data.events;\r\n                console.log(\"📅 ADMIN DEBUG - Loaded events:\", events.length);\r\n                scheduleError = null;\r\n            } else {\r\n                if (response.status === 401) {\r\n                    // If response is 401 Unauthorized, redirect to login\r\n                    alert('Reikia prisijungti iš naujo.');\r\n                    localStorage.removeItem('jwtToken'); // Optional: Clear any stored tokens\r\n                    window.location.href = '#/about'; // Redirect to login page\r\n                } else {\r\n                    // Handle other errors\r\n                    const error = await response.json();\r\n                    scheduleError = error.message || 'Nepavyko gauti tvarkaraščio duomenų.';\r\n                }\r\n            }\r\n        } catch (error) {\r\n            console.error(\"Failed to fetch events:\", error);\r\n            scheduleError = 'Tinklo klaida. Patikrinkite interneto ryšį.';\r\n        } finally {\r\n            isLoadingSchedule = false;\r\n        }\r\n    };\r\n\r\n    // Handle filter change event from FilterButtons component\r\n    const handleFilterChange = (event) => {\r\n        currentFilter = event.detail.filter; // Update the filter\r\n        fetchEvents(); // Fetch new events based on the filter\r\n    };\r\n\r\n    // Student selection functions (from AdminStudentInvoiceViewer)\r\n    async function fetchAllStudents() {\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            console.error('No JWT token found. User might not be logged in.');\r\n            studentsError = 'Nepavyko rasti autentifikacijos duomenų.';\r\n            isLoadingStudents = false;\r\n            return;\r\n        }\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/admin/get-all-students/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json',\r\n                },\r\n            });\r\n\r\n            if (response.ok) {\r\n                const result = await response.json();\r\n                allStudents = result.students || [];\r\n                filteredStudents = allStudents;\r\n                console.log('👥 ADMIN DEBUG - Loaded students:', allStudents.length);\r\n                studentsError = null;\r\n            } else {\r\n                const error = await response.json();\r\n                console.log('Error fetching students:', error);\r\n                studentsError = error.message || 'Nepavyko gauti studentų sąrašo.';\r\n            }\r\n        } catch (error) {\r\n            console.log('Fetch error:', error);\r\n            studentsError = 'Tinklo klaida. Patikrinkite interneto ryšį.';\r\n        } finally {\r\n            isLoadingStudents = false;\r\n        }\r\n    }\r\n\r\n    function selectStudent(student) {\r\n        selectedStudent = student;\r\n        selectedStudentId = student.id;\r\n        selectedUserIsTeacher = student.is_teacher || false; // Set whether selected user is a teacher\r\n        studentQuery = `${student.first_name} ${student.last_name}`;\r\n        showStudentDropdown = false;\r\n        \r\n        const userType = selectedUserIsTeacher ? 'teacher' : 'student';\r\n        console.log(`👤 ADMIN DEBUG - Selected ${userType}:`, selectedStudent);\r\n        \r\n        // Reset schedule data when changing student\r\n        events = [];\r\n        scheduleError = null;\r\n        \r\n        // Reset counts\r\n        unacceptedRequestsCount = 0;\r\n        unacceptedRescheduleRequestsCount = 0;\r\n        \r\n        // Fetch schedule data for selected student/teacher\r\n        fetchEvents();\r\n        \r\n        // Fetch counts if SELECTED user is a teacher (not logged-in user)\r\n        if (selectedUserIsTeacher) {\r\n            fetchUnacceptedRequestsCount();\r\n        }\r\n        fetchUnacceptedRescheduleRequestsCount();\r\n    }\r\n\r\n    function filterStudents() {\r\n        if (!studentQuery.trim()) {\r\n            filteredStudents = allStudents;\r\n            showStudentDropdown = false;\r\n        } else {\r\n            const query = studentQuery.toLowerCase();\r\n            filteredStudents = allStudents.filter(student => \r\n                `${student.first_name} ${student.last_name}`.toLowerCase().includes(query) ||\r\n                student.email.toLowerCase().includes(query)\r\n            );\r\n            showStudentDropdown = !selectedStudent && filteredStudents.length > 0;\r\n        }\r\n    }\r\n\r\n    function clearStudentSelection() {\r\n        selectedStudent = null;\r\n        selectedStudentId = null;\r\n        selectedUserIsTeacher = false;\r\n        studentQuery = '';\r\n        showStudentDropdown = false;\r\n        filteredStudents = allStudents;\r\n        \r\n        // Reset schedule data\r\n        events = [];\r\n        scheduleError = null;\r\n        unacceptedRequestsCount = 0;\r\n        unacceptedRescheduleRequestsCount = 0;\r\n    }\r\n\r\n    // Fetch user role and students when component mounts\r\n    onMount(async () => {\r\n        await fetchUserRole();\r\n        console.log(\"THis is teacher value:D\")\r\n        console.log(isUserTeacher)\r\n        if (embedded && studentId) {\r\n            const idNum = typeof studentId === 'string' ? parseInt(studentId, 10) : studentId;\r\n            if (!Number.isNaN(idNum)) {\r\n                lastEmbeddedStudentId = idNum;\r\n                selectedStudentId = idNum;\r\n                selectedStudent = null;\r\n                selectedUserIsTeacher = false;\r\n                isLoadingStudents = false;\r\n                studentsError = null;\r\n                await fetchEvents();\r\n                return;\r\n            }\r\n        }\r\n\r\n        await fetchAllStudents();\r\n\r\n        // Full-page deep link support: #/admin/student-schedule-debug?studentId=123\r\n        const fromQuery = getHashQueryParam('studentId');\r\n        if (fromQuery) {\r\n            const idNum = parseInt(fromQuery, 10);\r\n            if (!Number.isNaN(idNum) && allStudents && allStudents.length > 0) {\r\n                const match = allStudents.find(s => s.id === idNum);\r\n                if (match) {\r\n                    selectStudent(match);\r\n                } else {\r\n                    selectedStudentId = idNum;\r\n                    selectedStudent = null;\r\n                    selectedUserIsTeacher = false;\r\n                    fetchEvents();\r\n                }\r\n            }\r\n        }\r\n    });\r\n\r\n    $: if (embedded && studentId) {\r\n        const idNum = typeof studentId === 'string' ? parseInt(studentId, 10) : studentId;\r\n        if (!Number.isNaN(idNum) && idNum !== lastEmbeddedStudentId) {\r\n            lastEmbeddedStudentId = idNum;\r\n            selectedStudentId = idNum;\r\n            selectedStudent = null;\r\n            selectedUserIsTeacher = false;\r\n            events = [];\r\n            scheduleError = null;\r\n            fetchEvents();\r\n        }\r\n    }\r\n\r\n    // Reactive statement to filter students when search query changes\r\n    $: if (studentQuery !== undefined) {\r\n        filterStudents();\r\n    }\r\n</script>\r\n\r\n<style>\r\n    /* Import schedule styles from Schedule.svelte */\r\n    .classcontainer{\r\n        padding: 15px;\r\n        background-color: #eeebdb;\r\n        display: flex;\r\n        flex-direction: column;\r\n        margin-bottom:15px;\r\n        gap: 10px;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        border-radius: 8px;\r\n        flex: none;\r\n        color:black;\r\n        align-items: flex-start;\r\n    }\r\n\r\n    .no-classes-message {\r\n        padding: 30px;\r\n        text-align: center;\r\n        background-color: #f8f9fa;\r\n        border-radius: 8px;\r\n        margin: 20px 0;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    }\r\n\r\n    .no-classes-message p {\r\n        color: #6c757d;\r\n        font-size: 16px;\r\n        margin: 0;\r\n        font-weight: 500;\r\n    }\r\n\r\n    .reschedule-tab {\r\n        width: 100%;\r\n        margin-top: 10px;\r\n    }\r\n\r\n    .reschedule-tab-button {\r\n        width: 100%;\r\n        padding: 15px 20px;\r\n        border: 1px solid #ccc;\r\n        background: white;\r\n        cursor: pointer;\r\n        border-radius: 8px;\r\n        font-size: 16px;\r\n        font-weight: bold;\r\n        transition: background-color 0.3s, color 0.3s;\r\n        color: #000000;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        gap: 10px;\r\n        position: relative;\r\n    }\r\n\r\n    .reschedule-tab-button.active {\r\n        background-color: #fab45a;\r\n        color: black;\r\n        border-color: #fab45a;\r\n    }\r\n\r\n    .reschedule-tab-button:hover {\r\n        background-color: #fab45a;\r\n        color: black;\r\n    }\r\n\r\n    .teacher-registration-tab {\r\n        width: 100%;\r\n        margin-top: 10px;\r\n        margin-bottom: 10px;\r\n    }\r\n\r\n    .teacher-registration-button {\r\n        width: 100%;\r\n        padding: 15px 20px;\r\n        border: 1px solid #ccc;\r\n        background: white;\r\n        cursor: pointer;\r\n        border-radius: 8px;\r\n        font-size: 16px;\r\n        font-weight: bold;\r\n        transition: background-color 0.3s, color 0.3s;\r\n        color: #000000;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        gap: 10px;\r\n        position: relative;\r\n    }\r\n\r\n    .teacher-registration-button:hover {\r\n        background-color: #fab45a;\r\n        color: black;\r\n    }\r\n\r\n    .count-badge {\r\n        background-color: #dc3545;\r\n        color: white;\r\n        border-radius: 50%;\r\n        padding: 4px 8px;\r\n        font-size: 12px;\r\n        font-weight: bold;\r\n        min-width: 20px;\r\n        height: 20px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        line-height: 1;\r\n    }\r\n\r\n    /* Admin-specific styles (from AdminStudentInvoiceViewer) */\r\n    .admin-header {\r\n        background-color: #dc3545;\r\n        color: white;\r\n        padding: 1rem;\r\n        margin-bottom: 2rem;\r\n        border-radius: 8px;\r\n        text-align: center;\r\n    }\r\n\r\n    .admin-title {\r\n        font-size: 1.5rem;\r\n        font-weight: bold;\r\n        margin: 0 0 0.5rem 0;\r\n    }\r\n\r\n    .admin-subtitle {\r\n        font-size: 1rem;\r\n        margin: 0;\r\n        opacity: 0.9;\r\n    }\r\n\r\n    .student-selector {\r\n        margin-bottom: 2rem;\r\n        padding: 1.5rem;\r\n        background-color: #f8f9fa;\r\n        border-radius: 8px;\r\n        border-left: 4px solid #dc3545;\r\n    }\r\n\r\n    .student-selector label {\r\n        color: #dc3545;\r\n        font-size: 1.2rem;\r\n        margin-bottom: 1rem;\r\n        display: block;\r\n    }\r\n\r\n    .input-container {\r\n        position: relative;\r\n        margin-top: 15px;\r\n    }\r\n\r\n    .search-input {\r\n        width: 100%;\r\n        padding: 12px;\r\n        border: 2px solid #ddd;\r\n        border-radius: 6px;\r\n        font-size: 1rem;\r\n        background-color: white;\r\n    }\r\n\r\n    .search-input:focus {\r\n        outline: none;\r\n        border-color: #dc3545;\r\n        box-shadow: 0 0 0 2px rgba(220, 53, 69, 0.2);\r\n    }\r\n\r\n    .autocomplete-list {\r\n        position: absolute;\r\n        top: 100%;\r\n        left: 0;\r\n        right: 0;\r\n        background: white;\r\n        border: 1px solid #ddd;\r\n        border-top: none;\r\n        border-radius: 0 0 6px 6px;\r\n        max-height: 200px;\r\n        overflow-y: auto;\r\n        z-index: 1000;\r\n        list-style: none;\r\n        padding: 0;\r\n        margin: 0;\r\n        box-shadow: 0 2px 8px rgba(0,0,0,0.1);\r\n    }\r\n\r\n    .autocomplete-list li {\r\n        border-bottom: 1px solid #f0f0f0;\r\n    }\r\n\r\n    .autocomplete-list li:last-child {\r\n        border-bottom: none;\r\n    }\r\n\r\n    .autocomplete-list button {\r\n        width: 100%;\r\n        padding: 12px;\r\n        border: none;\r\n        background: none;\r\n        text-align: left;\r\n        cursor: pointer;\r\n        transition: background-color 0.2s;\r\n    }\r\n\r\n    .autocomplete-list button:hover {\r\n        background-color: #f8f9fa;\r\n    }\r\n\r\n    .student-option {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 4px;\r\n    }\r\n\r\n    .student-name {\r\n        font-weight: 500;\r\n        color: #333;\r\n        font-size: 0.9em;\r\n    }\r\n\r\n    .student-email {\r\n        color: #666;\r\n        font-size: 0.8em;\r\n    }\r\n\r\n    .student-id {\r\n        color: #dc3545;\r\n        font-size: 0.75em;\r\n        font-weight: 500;\r\n    }\r\n\r\n    .selected-student-info {\r\n        margin-top: 1rem;\r\n        padding: 1rem;\r\n        background-color: white;\r\n        border-radius: 4px;\r\n        border: 1px solid #ddd;\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: flex-start;\r\n        gap: 15px;\r\n    }\r\n\r\n    .selected-student-details {\r\n        flex: 1;\r\n    }\r\n\r\n    .student-info-label {\r\n        font-weight: 600;\r\n        color: #dc3545;\r\n    }\r\n\r\n    .btn-clear-selection {\r\n        padding: 8px 16px;\r\n        background-color: #6c757d;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 4px;\r\n        cursor: pointer;\r\n        font-size: 0.85em;\r\n        white-space: nowrap;\r\n        transition: background-color 0.2s;\r\n    }\r\n\r\n    .btn-clear-selection:hover {\r\n        background-color: #545b62;\r\n    }\r\n\r\n    .debug-warning {\r\n        background-color: #fff3cd;\r\n        border: 1px solid #ffeaa7;\r\n        border-left: 4px solid #f39c12;\r\n        padding: 1rem;\r\n        margin-bottom: 1rem;\r\n        border-radius: 4px;\r\n    }\r\n\r\n    .debug-warning-title {\r\n        font-weight: bold;\r\n        color: #856404;\r\n        margin-bottom: 0.5rem;\r\n    }\r\n\r\n    .debug-warning-text {\r\n        color: #856404;\r\n        margin: 0;\r\n    }\r\n\r\n    .loading-container {\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        justify-content: center;\r\n        padding: 2rem;\r\n        margin: 2rem 0;\r\n    }\r\n\r\n    .loading-spinner {\r\n        width: 40px;\r\n        height: 40px;\r\n        border: 4px solid #f3f3f3;\r\n        border-top: 4px solid #14695b;\r\n        border-radius: 50%;\r\n        animation: spin 1s linear infinite;\r\n        margin-bottom: 1rem;\r\n    }\r\n\r\n    @keyframes spin {\r\n        0% { transform: rotate(0deg); }\r\n        100% { transform: rotate(360deg); }\r\n    }\r\n\r\n    .loading-text {\r\n        color: #666;\r\n        font-size: 1rem;\r\n        margin: 0;\r\n    }\r\n\r\n    .error-container {\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        justify-content: center;\r\n        padding: 2rem;\r\n        margin: 2rem 0;\r\n        background-color: #fff3f3;\r\n        border-radius: 8px;\r\n        border-left: 4px solid #dc3545;\r\n    }\r\n\r\n    .error-text {\r\n        color: #dc3545;\r\n        font-size: 1rem;\r\n        margin-bottom: 1rem;\r\n        text-align: center;\r\n    }\r\n\r\n    .error-container button {\r\n        background-color: #dc3545;\r\n        color: white;\r\n        border: none;\r\n        padding: 0.5rem 1rem;\r\n        border-radius: 4px;\r\n        cursor: pointer;\r\n        font-size: 0.9rem;\r\n    }\r\n\r\n    .error-container button:hover {\r\n        background-color: #c82333;\r\n    }\r\n</style>\r\n\r\n{#if !embedded}\r\n<NavBarReusable label=\"Admin: Schedule Debug\" backLink={backLinkUrl} />\r\n\r\n<div class=\"admin-header\">\r\n    <h1 class=\"admin-title\">📅 Admin Debug: User Schedule Viewer</h1>\r\n    <p class=\"admin-subtitle\">View any student or teacher's schedule page exactly as they see it</p>\r\n</div>\r\n\r\n<div class=\"debug-warning\">\r\n    <div class=\"debug-warning-title\">⚠️ Debug Mode Active</div>\r\n    <p class=\"debug-warning-text\">This is an admin debugging tool. Interactive functionality (joining classes, rescheduling) is disabled. You're seeing the exact view that the selected user (student or teacher) would see.</p>\r\n</div>\r\n\r\n<!-- Student Selection -->\r\n<div class=\"student-selector\">\r\n    <label for=\"student-search\">Select User to Debug:</label>\r\n    \r\n    {#if isLoadingStudents}\r\n        <div class=\"loading-container\">\r\n            <div class=\"loading-spinner\"></div>\r\n            <p class=\"loading-text\">Loading students...</p>\r\n        </div>\r\n    {:else if studentsError}\r\n        <div class=\"error-container\">\r\n            <p class=\"error-text\">Error: {studentsError}</p>\r\n            <button on:click={() => { isLoadingStudents = true; studentsError = null; fetchAllStudents(); }}>\r\n                Try Again\r\n            </button>\r\n        </div>\r\n    {:else}\r\n        <div class=\"input-container\">\r\n            <input \r\n                id=\"student-search\"\r\n                type=\"text\" \r\n                placeholder=\"Search user by name or email...\"\r\n                bind:value={studentQuery}\r\n                on:input={() => {\r\n                    if (selectedStudent && studentQuery !== `${selectedStudent.first_name} ${selectedStudent.last_name}`) {\r\n                        selectedStudent = null;\r\n                        selectedStudentId = null;\r\n                        showStudentDropdown = true;\r\n                    } else if (!selectedStudent) {\r\n                        showStudentDropdown = studentQuery.trim().length > 0;\r\n                    }\r\n                }}\r\n                autocomplete=\"off\"\r\n                class=\"search-input\"\r\n            />\r\n            \r\n            {#if showStudentDropdown}\r\n                <ul class=\"autocomplete-list\">\r\n                    {#each filteredStudents.slice(0, 8) as student}\r\n                        <li>\r\n                            <button\r\n                                type=\"button\"\r\n                                on:click={() => selectStudent(student)}\r\n                                on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectStudent(student)}\r\n                            >\r\n                                <div class=\"student-option\">\r\n                                    <span class=\"student-name\">\r\n                                        {student.first_name} {student.last_name}\r\n                                        {#if student.is_teacher}\r\n                                            <span style=\"color: #28a745; font-size: 0.8em; margin-left: 5px;\">👨‍🏫 Teacher</span>\r\n                                        {/if}\r\n                                    </span>\r\n                                    <span class=\"student-email\">{student.email}</span>\r\n                                    <span class=\"student-id\">ID: {student.id}</span>\r\n                                </div>\r\n                            </button>\r\n                        </li>\r\n                    {/each}\r\n                </ul>\r\n            {/if}\r\n        </div>\r\n        \r\n        {#if selectedStudent}\r\n            <div class=\"selected-student-info\">\r\n                <div class=\"selected-student-details\">\r\n                    <div>\r\n                        <span class=\"student-info-label\">Name:</span> {selectedStudent.first_name} {selectedStudent.last_name}\r\n                        {#if selectedUserIsTeacher}\r\n                            <span style=\"color: #28a745; font-weight: bold; margin-left: 8px;\">👨‍🏫 Teacher</span>\r\n                        {/if}\r\n                    </div>\r\n                    <div><span class=\"student-info-label\">Email:</span> {selectedStudent.email}</div>\r\n                    <div><span class=\"student-info-label\">ID:</span> {selectedStudent.id}</div>\r\n                </div>\r\n                <button \r\n                    type=\"button\" \r\n                    class=\"btn-clear-selection\" \r\n                    on:click={clearStudentSelection}\r\n                >\r\n                    Clear Selection\r\n                </button>\r\n            </div>\r\n        {/if}\r\n    {/if}\r\n</div>\r\n{/if}\r\n\r\n<!-- Student Schedule View (identical to Schedule.svelte but with admin modifications) -->\r\n{#if selectedStudentId}\r\n    {#if isLoadingSchedule}\r\n        <div class=\"loading-container\">\r\n            <div class=\"loading-spinner\"></div>\r\n            <p class=\"loading-text\">Loading student schedule...</p>\r\n        </div>\r\n    {:else if scheduleError}\r\n        <div class=\"error-container\">\r\n            <p class=\"error-text\">Error: {scheduleError}</p>\r\n            <button on:click={() => { isLoadingSchedule = true; scheduleError = null; fetchEvents(); }}>\r\n                Try Again\r\n            </button>\r\n        </div>\r\n    {:else}\r\n        <!-- Teacher registration button - shown only for teachers -->\r\n        {#if selectedUserIsTeacher && activeTab === 'schedule'}\r\n            <div class=\"teacher-registration-tab\">\r\n                <button \r\n                    class=\"teacher-registration-button\"\r\n                    on:click={() => switchTab('registration-requests')}\r\n                >\r\n                    <span>KLASIŲ REGISTRACIJOS</span>\r\n                    {#if unacceptedRequestsCount > 0}\r\n                        <span class=\"count-badge\">{unacceptedRequestsCount}</span>\r\n                    {/if}\r\n                </button>\r\n            </div>\r\n        {/if}\r\n\r\n        {#if activeTab === 'schedule'}\r\n            <FilterButtons \r\n                currentFilter={currentFilter} \r\n                on:filterChange={handleFilterChange} />\r\n        {/if}\r\n\r\n        {#if activeTab !== 'registration-requests'}\r\n            <div class=\"reschedule-tab\">\r\n                <button \r\n                    class=\"reschedule-tab-button {activeTab === 'reschedule-requests' ? 'active' : ''}\"\r\n                    on:click={() => switchTab(activeTab === 'reschedule-requests' ? 'schedule' : 'reschedule-requests')}\r\n                >\r\n                    <span>{activeTab === 'reschedule-requests' ? 'ATGAL Į TVARKARAŠTĮ' : 'PAMOKŲ PAKEITIMAI'}</span>\r\n                    {#if unacceptedRescheduleRequestsCount > 0 && activeTab !== 'reschedule-requests'}\r\n                        <span class=\"count-badge\">{unacceptedRescheduleRequestsCount}</span>\r\n                    {/if}\r\n                </button>\r\n            </div>\r\n        {/if}\r\n\r\n        <!-- Back button for registration requests -->\r\n        {#if activeTab === 'registration-requests'}\r\n            <div class=\"reschedule-tab\">\r\n                <button \r\n                    class=\"reschedule-tab-button active\"\r\n                    on:click={() => switchTab('schedule')}\r\n                >\r\n                    ATGAL Į TVARKARAŠTĮ\r\n                </button>\r\n            </div>\r\n        {/if}\r\n\r\n        {#if activeTab === 'schedule'}\r\n            <div class=\"classSection\">\r\n                {#if events.length === 0}\r\n                    <div class=\"no-classes-message\">\r\n                        <p>Pamokų nerasta</p>\r\n                    </div>\r\n                {:else}\r\n                    {#each events as event}\r\n                        <div class=\"classcontainer {isPastEvent(event.laikasDisp) ? 'past-event' : 'upcoming-event'}\">\r\n                            <!-- Render the class details -->\r\n                            <ClassName name={event.pamoka} />\r\n                            <TeacherName teacher={event.mokytojas}/>\r\n                            <TimeShower \r\n                                time={formatDateTime(event.laikasDisp).timePart} \r\n                                date={formatDateTime(event.laikasDisp).formattedDate} \r\n                            />\r\n                            \r\n                            <!-- Show students with grades for teachers -->\r\n                            {#if selectedUserIsTeacher && event.students}\r\n                                <StudentsWithGradesComponent students={event.students} />\r\n                            {/if}\r\n                \r\n                            {#if isPastEvent(event.laikasDisp)}\r\n                                <!-- Render components for past events -->\r\n                                \r\n                                {#if event.note === 'nėra atsiliepimo' || !event.note}\r\n                                    <ButtonToComment classId={event.id}  label=\"Palikti Atsiliepimą (Debug)\"></ButtonToComment>\r\n                                {:else}\r\n                                    <ButtonToComment classId={event.id} label=\"Koreguoti Atsiliepimą (Debug)\" buttonClass=\"koregouti\"></ButtonToComment>\r\n                                {/if}\r\n                            {:else}\r\n                                <!-- Render components for upcoming events with admin modifications -->\r\n                                \r\n                                <ButtonToJoinClass \r\n                                    link={event.nuoroda} \r\n                                    classId={event.id}\r\n                                    label=\"Jungtis į pamoką\" \r\n                                />\r\n                                <button \r\n                                    style=\"background-color: #6c757d; cursor: not-allowed;\"\r\n                                    disabled\r\n                                >\r\n                                    🚫 Reschedule (Debug Mode)\r\n                                </button>\r\n                            {/if}\r\n                        </div>\r\n                    {/each}\r\n                {/if}\r\n            </div>\r\n        {:else if activeTab === 'reschedule-requests'}\r\n            <RescheduleRequestsContent />\r\n        {:else if activeTab === 'registration-requests'}\r\n            <TeacherRegistrationRequestsComponent />\r\n        {/if}\r\n    {/if}\r\n{:else}\r\n    <div class=\"loading-container\">\r\n        <p class=\"loading-text\">👆 Please select a user above to view their schedule</p>\r\n    </div>\r\n{/if}\r\n","<script>\r\n    import CheckBoxAreaForInvoicesComponent from \"./CheckBoxAreaForInvoicesComponent.svelte\";\r\n    import { onMount } from 'svelte';\r\n    import CheckBoxAreForClassesComponent from \"./CheckBoxAreForClassesComponent.svelte\";\r\n    import CompletedPaymentsList from './CompletedPaymentsListComponent.svelte';\r\n    import NavBarReusable from \"./NavbarReusable.svelte\";\r\n    import { getApiBase } from './apiBase.js';\r\n    import { buildInvoiceClassWindow, retainVisibleSelections } from './invoiceClassWindow.js';\r\n\r\n    export let studentId = null;\r\n    export let embedded = false;\r\n    let lastEmbeddedStudentId = null;\r\n    const apiBase = getApiBase();\r\n\r\n    function getHashQueryParam(name) {\r\n        const hash = window.location.hash || '';\r\n        const qIndex = hash.indexOf('?');\r\n        if (qIndex === -1) return null;\r\n        const params = new URLSearchParams(hash.slice(qIndex + 1));\r\n        return params.get(name);\r\n    }\r\n    \r\n    // ========== ADMIN USER SELECTION SECTION ==========\r\n    let allStudents = [];\r\n    let selectedStudentId = null;\r\n    let selectedStudent = null;\r\n    let isLoadingStudents = true;\r\n    let studentsError = null;\r\n    let studentQuery = '';\r\n    let filteredStudents = [];\r\n    let showStudentDropdown = false;\r\n    \r\n    // ========== NEGATIVE BALANCE USERS SECTION ==========\r\n    let negativeBalanceUsers = [];\r\n    let isLoadingNegativeBalances = true;\r\n    let negativeBalancesError = null;\r\n    let isRecalculatingBalances = false;\r\n    let isRecalculatingSelectedStudent = false;\r\n    let isSyncingSelectedStudent = false;\r\n    // When true, only show debtors with NO upcoming classes (stale debt).\r\n    let showStaleOnly = false;\r\n\r\n    $: displayedNegativeBalanceUsers = showStaleOnly\r\n        ? negativeBalanceUsers.filter(u => u.has_future_classes === false)\r\n        : negativeBalanceUsers;\r\n    \r\n    // ========== INVOICE PAGE VARIABLES (IDENTICAL TO StandaloneInvoicesPage.svelte) ==========\r\n    let selectedMonths = [];\r\n\r\n    let invoiceSum = 0; // Only set after invoice is generated\r\n    let paymentLink = '';\r\n    let isFetchingPaymentLink = false;\r\n\r\n    let selectedClasses = [];\r\n\r\n    let invoiceData = null;\r\n    let visibleOlderMonthCount = 0;\r\n    let visibleFutureMonthCount = 0;\r\n    $: classWindow = buildInvoiceClassWindow(invoiceData?.classes || [], {\r\n        visibleOlderMonthCount,\r\n        visibleFutureMonthCount,\r\n    });\r\n    let errorForInvoiceData = null;\r\n    let isLoadingInvoiceData = false; // Don't load automatically until user is selected\r\n    let backLinkUrl = \"/admin\"; // Back to admin page\r\n\r\n    // If opened via Students dashboard deep link, make Back return there\r\n    $: if (!embedded && getHashQueryParam('studentId')) {\r\n        backLinkUrl = \"/admin/students\";\r\n    }\r\n\r\n    function showOneMorePastMonth() {\r\n        visibleOlderMonthCount += 1;\r\n    }\r\n\r\n    function showOneLessPastMonth() {\r\n        const nextMonthCount = Math.max(0, visibleOlderMonthCount - 1);\r\n        const smallerWindow = buildInvoiceClassWindow(invoiceData?.classes || [], {\r\n            visibleOlderMonthCount: nextMonthCount,\r\n            visibleFutureMonthCount,\r\n        });\r\n        selectedClasses = retainVisibleSelections(selectedClasses, smallerWindow.visibleClasses);\r\n        visibleOlderMonthCount = nextMonthCount;\r\n    }\r\n\r\n    function showOneMoreFutureMonth() {\r\n        visibleFutureMonthCount += 1;\r\n    }\r\n\r\n    function showOneLessFutureMonth() {\r\n        const nextMonthCount = Math.max(0, visibleFutureMonthCount - 1);\r\n        const smallerWindow = buildInvoiceClassWindow(invoiceData?.classes || [], {\r\n            visibleOlderMonthCount,\r\n            visibleFutureMonthCount: nextMonthCount,\r\n        });\r\n        selectedClasses = retainVisibleSelections(selectedClasses, smallerWindow.visibleClasses);\r\n        visibleFutureMonthCount = nextMonthCount;\r\n    }\r\n\r\n    // ========== ADMIN USER SELECTION FUNCTIONS ==========\r\n    async function fetchAllStudents() {\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            console.error('No JWT token found. User might not be logged in.');\r\n            studentsError = 'Nepavyko rasti autentifikacijos duomenų.';\r\n            isLoadingStudents = false;\r\n            return;\r\n        }\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/admin/get-all-students/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json',\r\n                },\r\n            });\r\n\r\n            if (response.ok) {\r\n                const result = await response.json();\r\n                allStudents = result.students || [];\r\n                filteredStudents = allStudents;\r\n                console.log('👥 ADMIN USER VIEW - Loaded students:', allStudents.length);\r\n                studentsError = null;\r\n            } else {\r\n                const error = await response.json();\r\n                console.log('Error fetching students:', error);\r\n                studentsError = error.message || 'Nepavyko gauti studentų sąrašo.';\r\n            }\r\n        } catch (error) {\r\n            console.log('Fetch error:', error);\r\n            studentsError = 'Tinklo klaida. Patikrinkite interneto ryšį.';\r\n        } finally {\r\n            isLoadingStudents = false;\r\n        }\r\n    }\r\n\r\n    async function fetchNegativeBalanceUsers() {\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            console.error('No JWT token found. User might not be logged in.');\r\n            negativeBalancesError = 'Nepavyko rasti autentifikacijos duomenų.';\r\n            isLoadingNegativeBalances = false;\r\n            return;\r\n        }\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/admin/get-negative-balance-users/`, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json',\r\n                },\r\n            });\r\n\r\n            if (response.ok) {\r\n                const result = await response.json();\r\n                negativeBalanceUsers = result.users || [];\r\n                console.log('💰 ADMIN USER VIEW - Loaded negative balance users:', negativeBalanceUsers.length);\r\n                negativeBalancesError = null;\r\n            } else {\r\n                const error = await response.json();\r\n                console.log('Error fetching negative balance users:', error);\r\n                negativeBalancesError = error.message || 'Nepavyko gauti neigiamo balanso naudotojų.';\r\n            }\r\n        } catch (error) {\r\n            console.log('Fetch error:', error);\r\n            negativeBalancesError = 'Tinklo klaida. Patikrinkite interneto ryšį.';\r\n        } finally {\r\n            isLoadingNegativeBalances = false;\r\n        }\r\n    }\r\n\r\n    async function recalculateSelectedStudentBalance(studentId) {\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            console.error('No JWT token found. User might not be logged in.');\r\n            alert('Nepavyko rasti autentifikacijos duomenų.');\r\n            return;\r\n        }\r\n\r\n        isRecalculatingSelectedStudent = true;\r\n        console.log(`🔄 Recalculating balance for student ${studentId}...`);\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/admin/recalculate-student-balance/${studentId}/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json',\r\n                },\r\n            });\r\n\r\n            const result = await response.json();\r\n\r\n            if (response.ok && result.status === 'success') {\r\n                console.log('✅ Student balance recalculation completed:', result);\r\n\r\n                // Refresh the negative balance users list (uses stored StudentBalance.current_balance)\r\n                isLoadingNegativeBalances = true;\r\n                await fetchNegativeBalanceUsers();\r\n            } else {\r\n                console.error('Error recalculating student balance:', result);\r\n                alert(`Error recalculating student balance: ${result.message || 'Unknown error'}`);\r\n            }\r\n        } catch (error) {\r\n            console.error('Fetch error:', error);\r\n            alert('Network error. Please check your connection and try again.');\r\n        } finally {\r\n            isRecalculatingSelectedStudent = false;\r\n        }\r\n    }\r\n\r\n    async function syncSelectedStudentChargesAndBalance(studentId) {\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            alert('Nepavyko rasti autentifikacijos duomenų.');\r\n            return;\r\n        }\r\n\r\n        isSyncingSelectedStudent = true;\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/admin/sync-student-charges-and-balance/${studentId}/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json',\r\n                },\r\n            });\r\n\r\n            const result = await response.json();\r\n            if (response.ok && result.status === 'success') {\r\n                // Refresh the negative balance list and re-fetch invoice data for this student\r\n                isLoadingNegativeBalances = true;\r\n                await fetchNegativeBalanceUsers();\r\n                fetchInvoiceData();\r\n            } else {\r\n                alert(`Sync failed: ${result.message || 'Unknown error'}`);\r\n            }\r\n        } catch (e) {\r\n            console.error('Sync error:', e);\r\n            alert('Network error. Please check your connection and try again.');\r\n        } finally {\r\n            isSyncingSelectedStudent = false;\r\n        }\r\n    }\r\n\r\n    async function recalculateAllBalances() {\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            console.error('No JWT token found. User might not be logged in.');\r\n            alert('Nepavyko rasti autentifikacijos duomenų.');\r\n            return;\r\n        }\r\n\r\n        isRecalculatingBalances = true;\r\n        console.log('🔄 Starting balance recalculation...');\r\n\r\n        try {\r\n            const response = await fetch(`${apiBase}/studentplayground/admin/recalculate-all-balances/`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json',\r\n                },\r\n            });\r\n\r\n            const result = await response.json();\r\n\r\n            if (response.ok && result.status === 'success') {\r\n                console.log('✅ Balance recalculation completed:', result);\r\n                alert(`Balance recalculation completed!\\n\\nNegative balance users: ${result.negative_balance_count}`);\r\n                \r\n                // Refresh the negative balance users list\r\n                isLoadingNegativeBalances = true;\r\n                await fetchNegativeBalanceUsers();\r\n            } else {\r\n                console.error('Error recalculating balances:', result);\r\n                alert(`Error recalculating balances: ${result.message || 'Unknown error'}`);\r\n            }\r\n        } catch (error) {\r\n            console.error('Fetch error:', error);\r\n            alert('Network error. Please check your connection and try again.');\r\n        } finally {\r\n            isRecalculatingBalances = false;\r\n        }\r\n    }\r\n\r\n    async function selectStudent(student) {\r\n        selectedStudent = student;\r\n        selectedStudentId = student.id;\r\n        studentQuery = `${student.first_name} ${student.last_name}`;\r\n        showStudentDropdown = false;\r\n        \r\n        // Reset invoice data when changing student\r\n        invoiceData = null;\r\n        errorForInvoiceData = null;\r\n        selectedClasses = [];\r\n        \r\n        // Recalculate this student's stored balance for admin lists (efficient single-user update)\r\n        await recalculateSelectedStudentBalance(selectedStudentId);\r\n\r\n        // Fetch invoice data for selected student\r\n        fetchInvoiceData();\r\n    }\r\n\r\n    function filterStudents() {\r\n        if (!studentQuery.trim()) {\r\n            filteredStudents = allStudents;\r\n            showStudentDropdown = false;\r\n        } else {\r\n            const query = studentQuery.toLowerCase();\r\n            filteredStudents = allStudents.filter(student => \r\n                `${student.first_name} ${student.last_name}`.toLowerCase().includes(query) ||\r\n                student.email.toLowerCase().includes(query)\r\n            );\r\n            showStudentDropdown = !selectedStudent && filteredStudents.length > 0;\r\n        }\r\n    }\r\n\r\n    function clearStudentSelection() {\r\n        selectedStudent = null;\r\n        selectedStudentId = null;\r\n        studentQuery = '';\r\n        showStudentDropdown = false;\r\n        filteredStudents = allStudents;\r\n        \r\n        // Reset invoice data\r\n        invoiceData = null;\r\n        errorForInvoiceData = null;\r\n        selectedClasses = [];\r\n    }\r\n\r\n    // ========== INVOICE FUNCTIONS (IDENTICAL TO StandaloneInvoicesPage.svelte) ==========\r\n    // Helper: calculate invoice sum as sum of amount_due for selected classes\r\n    function calculateInvoiceSum() {\r\n        if (!invoiceData || !invoiceData.classes) {\r\n            return 0;\r\n        }\r\n        const sum = selectedClasses.reduce((sum, classId) => {\r\n            const cls = invoiceData.classes.find(c => c.id === classId);\r\n            // Ensure amount_due is always treated as a float number\r\n            const amount = cls ? parseFloat(cls.amount_due) || 0.0 : 0.0;\r\n            return sum + amount;\r\n        }, 0.0);\r\n        return Math.round(sum * 100) / 100; // Round to 2 decimal places to avoid floating point errors\r\n    }\r\n\r\n    // Update invoiceSum whenever selectedClasses changes\r\n    $: {\r\n        invoiceSum = calculateInvoiceSum();\r\n    }\r\n\r\n    // Fetch payment link - DISABLED for admin viewing (admin replica only)\r\n    async function fetchPaymentLinkAndRedirect() {\r\n        alert(\"🚫 ADMIN VIEW: Payment functionality is disabled for safety. This shows exactly what the user would see, but payments cannot be processed from this admin view.\");\r\n        return;\r\n    }\r\n\r\n    async function fetchInvoiceData() {\r\n        if (!selectedStudentId) {\r\n            console.error('No student selected');\r\n            return;\r\n        }\r\n\r\n        const token = localStorage.getItem('jwtToken');\r\n        if (!token) {\r\n            console.error('No JWT token found. User might not be logged in.');\r\n            errorForInvoiceData = 'Nepavyko rasti autentifikacijos duomenų. Prašome prisijungti iš naujo.';\r\n            isLoadingInvoiceData = false;\r\n            return;\r\n        }\r\n\r\n        isLoadingInvoiceData = true;\r\n\r\n        try {\r\n            // Use admin debug endpoint to get data for selected student\r\n            // NO month filtering - fetch ALL data just like the user endpoint does\r\n        const url = `${apiBase}/studentplayground/admin/debug-invoice-data/${selectedStudentId}/`;\r\n\r\n            const response = await fetch(url, {\r\n                method: 'GET',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json',\r\n                },\r\n            });\r\n\r\n            if (response.ok) {\r\n                const result = await response.json();\r\n                invoiceData = result;\r\n                const outstandingWindow = buildInvoiceClassWindow(result.classes || [], {\r\n                    visibleOlderMonthCount: Number.MAX_SAFE_INTEGER,\r\n                });\r\n                visibleOlderMonthCount = outstandingWindow.initialOlderMonthCount;\r\n                visibleFutureMonthCount = 0;\r\n                selectedClasses = [];\r\n                errorForInvoiceData = null;\r\n            } else {\r\n                const error = await response.json();\r\n                console.error('Error fetching invoice data:', error);\r\n                errorForInvoiceData = error.message || 'Nepavyko gauti sąskaitos duomenų.';\r\n            }\r\n        } catch (error) {\r\n            console.error('Fetch error:', error);\r\n            errorForInvoiceData = 'Tinklo klaida. Patikrinkite interneto ryšį.';\r\n        } finally {\r\n            isLoadingInvoiceData = false;\r\n        }\r\n    }\r\n\r\n    onMount(async () => {\r\n        if (embedded && studentId) {\r\n            const idNum = typeof studentId === 'string' ? parseInt(studentId, 10) : studentId;\r\n            if (!Number.isNaN(idNum)) {\r\n                lastEmbeddedStudentId = idNum;\r\n                selectedStudentId = idNum;\r\n                selectedStudent = null;\r\n                isLoadingStudents = false;\r\n                isLoadingNegativeBalances = false;\r\n                studentsError = null;\r\n                negativeBalancesError = null;\r\n                negativeBalanceUsers = [];\r\n                // Do not fetch here; the reactive embedded block below performs the initial fetch.\r\n                return;\r\n            }\r\n        }\r\n\r\n        await Promise.all([fetchAllStudents(), fetchNegativeBalanceUsers()]);\r\n\r\n        // Full-page deep link support: #/admin/user-invoice-view?studentId=123\r\n        const fromQuery = getHashQueryParam('studentId');\r\n        if (fromQuery) {\r\n            const idNum = parseInt(fromQuery, 10);\r\n            if (!Number.isNaN(idNum)) {\r\n                const match = allStudents.find(s => s.id === idNum);\r\n                if (match) {\r\n                    await selectStudent(match);\r\n                } else {\r\n                    selectedStudentId = idNum;\r\n                    selectedStudent = null;\r\n                    invoiceData = null;\r\n                    errorForInvoiceData = null;\r\n                    fetchInvoiceData();\r\n                }\r\n            }\r\n        }\r\n    });\r\n\r\n    $: if (embedded && studentId) {\r\n        const idNum = typeof studentId === 'string' ? parseInt(studentId, 10) : studentId;\r\n        if (!Number.isNaN(idNum) && idNum !== lastEmbeddedStudentId) {\r\n            lastEmbeddedStudentId = idNum;\r\n            selectedStudentId = idNum;\r\n            selectedStudent = null;\r\n            invoiceData = null;\r\n            errorForInvoiceData = null;\r\n            fetchInvoiceData();\r\n        }\r\n    }\r\n\r\n    // Reactive statement to filter students when search query changes\r\n    $: if (studentQuery !== undefined) {\r\n        filterStudents();\r\n    }\r\n</script>\r\n\r\n<style>\r\n    /* ========== STYLES FROM StandaloneInvoicesPage.svelte ========== */\r\n    button span {\r\n         font-weight: bolder;\r\n         font-size:larger;\r\n     }\r\n  \r\n     button {\r\n        margin-top:10px;\r\n         box-sizing: border-box;\r\n         display: flex;\r\n         flex-direction: row;\r\n         justify-content: center;\r\n         align-items: center;\r\n         padding: 12px 20px;\r\n         gap: 10px;\r\n     \r\n         width: 100%;\r\n         height: 60px;\r\n     \r\n         /* Purple background */\r\n         background-color: #fab45a;\r\n     \r\n         /* Black border */\r\n         border: 2px solid #000000;\r\n     \r\n         /* Box shadow */\r\n         box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n     \r\n         /* Rounded corners */\r\n         border-radius: 8px;\r\n     \r\n         /* Inside auto layout */\r\n         flex: none;\r\n         order: 0;\r\n         align-self: stretch;\r\n         flex-grow: 0;\r\n     \r\n         /* Remove default button styling */\r\n         outline: none;\r\n         cursor: pointer;\r\n   \r\n         /* Remove the default button background on focus */\r\n         background-image: none;\r\n         transition: background-color 0.3s ease, color 0.3s ease;\r\n     }\r\n  \r\n     /* Button hover effect */\r\n     button:hover {\r\n         background-color: #14695b;\r\n         color:white;\r\n     }\r\n  \r\n     /* Text inside the button */\r\n     span {\r\n        margin-top: 5px;\r\n        margin-bottom: 5px;\r\n        font-size: 1rem;\r\n        font-weight: bold;\r\n     \r\n     }\r\n   form {\r\n       padding-bottom: 10px;\r\n       padding-top:15px;\r\n   }\r\n   span {\r\n       font-weight: bold;\r\n   }\r\n   \r\n   label {\r\n          font-size: 18px;\r\n          font-weight: bold;\r\n          margin-bottom: 5px;\r\n          display: block;\r\n          color:#14695b;\r\n          text-align: center;\r\n      }\r\n\r\n      .balance-info {\r\n          margin: 1rem 0 1.5rem 0;\r\n          padding: 1rem;\r\n          background-color: #f8f9fa;\r\n          border-radius: 8px;\r\n          border-left: 4px solid #14695b;\r\n          text-align: center;\r\n      }\r\n\r\n      .balance-info > div {\r\n          margin-bottom: 8px;\r\n      }\r\n\r\n      .balance-label {\r\n          font-weight: 600;\r\n          color: #14695b;\r\n          display: inline;\r\n      }\r\n\r\n      .balance-amount {\r\n          font-weight: 700;\r\n          font-size: 1.1em;\r\n          color: #333;\r\n          margin-left: 8px;\r\n      }\r\n\r\n      .balance-date {\r\n          color: #666;\r\n          font-size: 0.9em;\r\n          margin-left: 8px;\r\n      }\r\n\r\n      .loading-container {\r\n          display: flex;\r\n          flex-direction: column;\r\n          align-items: center;\r\n          justify-content: center;\r\n          padding: 2rem;\r\n          margin: 2rem 0;\r\n      }\r\n\r\n      .loading-spinner {\r\n          width: 40px;\r\n          height: 40px;\r\n          border: 4px solid #f3f3f3;\r\n          border-top: 4px solid #14695b;\r\n          border-radius: 50%;\r\n          animation: spin 1s linear infinite;\r\n          margin-bottom: 1rem;\r\n      }\r\n\r\n      @keyframes spin {\r\n          0% { transform: rotate(0deg); }\r\n          100% { transform: rotate(360deg); }\r\n      }\r\n\r\n      .loading-text {\r\n          color: #666;\r\n          font-size: 1rem;\r\n          margin: 0;\r\n      }\r\n\r\n      .error-container {\r\n          display: flex;\r\n          flex-direction: column;\r\n          align-items: center;\r\n          justify-content: center;\r\n          padding: 2rem;\r\n          margin: 2rem 0;\r\n          background-color: #fff3f3;\r\n          border-radius: 8px;\r\n          border-left: 4px solid #dc3545;\r\n      }\r\n\r\n      .error-text {\r\n          color: #dc3545;\r\n          font-size: 1rem;\r\n          margin-bottom: 1rem;\r\n          text-align: center;\r\n      }\r\n\r\n      .error-container button {\r\n          background-color: #dc3545;\r\n          color: white;\r\n          border: none;\r\n          padding: 0.5rem 1rem;\r\n          border-radius: 4px;\r\n          cursor: pointer;\r\n          font-size: 0.9rem;\r\n      }\r\n\r\n      .error-container button:hover {\r\n          background-color: #c82333;\r\n      }\r\n\r\n      .payments-section {\r\n          margin-top: 2rem;\r\n          padding-top: 2rem;\r\n          border-top: 2px solid #e9ecef;\r\n      }\r\n\r\n      .payments-header {\r\n          color: #14695b;\r\n          font-size: 1.5rem;\r\n          font-weight: 600;\r\n          margin-bottom: 0.5rem;\r\n      }\r\n\r\n      .payments-description {\r\n          color: #666;\r\n          font-size: 1rem;\r\n          margin-bottom: 1.5rem;\r\n          line-height: 1.4;\r\n      }\r\n\r\n      .no-payments-section {\r\n          margin-top: 2rem;\r\n          padding: 2rem;\r\n          background-color: #f8f9fa;\r\n          border-radius: 8px;\r\n          text-align: center;\r\n      }\r\n\r\n      .no-payments-text {\r\n          font-size: 1rem;\r\n          color: #333;\r\n      }\r\n\r\n      .class-window-toggle {\r\n          width: auto;\r\n          height: auto;\r\n          min-height: 36px;\r\n          margin: 0;\r\n          padding: 0.45rem 0.9rem;\r\n          align-self: center;\r\n          border: 1px solid #14695b;\r\n          background-color: #fff7ec;\r\n          color: #14695b;\r\n          font-size: 0.9rem;\r\n          font-weight: 600;\r\n      }\r\n\r\n      .class-window-controls {\r\n          display: flex;\r\n          flex-wrap: wrap;\r\n          justify-content: center;\r\n          gap: 0.5rem;\r\n          margin: 0.65rem 0;\r\n      }\r\n\r\n      /* ========== ADMIN-SPECIFIC STYLES ========== */\r\n      .admin-banner {\r\n          background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\r\n          color: white;\r\n          padding: 0.75rem 1rem;\r\n          margin-bottom: 1.5rem;\r\n          border-radius: 8px;\r\n          text-align: center;\r\n          box-shadow: 0 2px 8px rgba(0,0,0,0.15);\r\n      }\r\n\r\n      .admin-banner-title {\r\n          font-size: 1.1rem;\r\n          font-weight: bold;\r\n          margin: 0 0 0.25rem 0;\r\n      }\r\n\r\n      .admin-banner-subtitle {\r\n          font-size: 0.9rem;\r\n          margin: 0;\r\n          opacity: 0.95;\r\n      }\r\n\r\n      .student-selector {\r\n          margin-bottom: 2rem;\r\n          padding: 1.5rem;\r\n          background-color: #f8f9fa;\r\n          border-radius: 8px;\r\n          border-left: 4px solid #667eea;\r\n      }\r\n\r\n      .student-selector-label {\r\n          color: #667eea;\r\n          font-size: 1.1rem;\r\n          font-weight: 600;\r\n          margin-bottom: 1rem;\r\n          display: block;\r\n      }\r\n\r\n      .form-help {\r\n          font-size: 0.9rem;\r\n          color: #666;\r\n          margin-top: 0.5rem;\r\n      }\r\n\r\n      .input-container {\r\n          position: relative;\r\n          margin-top: 15px;\r\n      }\r\n\r\n      .search-input {\r\n          width: 100%;\r\n          padding: 12px;\r\n          border: 1px solid #ddd;\r\n          border-radius: 6px;\r\n          font-size: 0.9em;\r\n          background-color: white;\r\n          box-sizing: border-box;\r\n      }\r\n\r\n      .search-input:focus {\r\n          outline: none;\r\n          border-color: #14695b;\r\n          box-shadow: 0 0 0 2px rgba(20, 105, 91, 0.2);\r\n      }\r\n\r\n      .autocomplete-list {\r\n          position: absolute;\r\n          top: 100%;\r\n          left: 0;\r\n          right: 0;\r\n          background: white;\r\n          border: 1px solid #ddd;\r\n          border-top: none;\r\n          border-radius: 0 0 6px 6px;\r\n          max-height: 200px;\r\n          overflow-y: auto;\r\n          z-index: 1000;\r\n          box-shadow: 0 2px 8px rgba(0,0,0,0.1);\r\n      }\r\n\r\n      .autocomplete-list-item {\r\n          padding: 0.25rem 0.5rem;\r\n          cursor: pointer;\r\n          border-bottom: 1px solid #f0f0f0;\r\n          transition: background-color 0.2s ease;\r\n      }\r\n\r\n      .autocomplete-list-item:hover {\r\n          background-color: #f8f9fa;\r\n      }\r\n\r\n      .autocomplete-list-item:last-child {\r\n          border-bottom: none;\r\n      }\r\n\r\n      .student-option {\r\n          display: flex;\r\n          flex-direction: column;\r\n          gap: 0;\r\n      }\r\n\r\n      .student-name {\r\n          font-weight: 500;\r\n          color: #333;\r\n          font-size: 0.8em;\r\n          line-height: 1.1;\r\n      }\r\n\r\n      .student-email {\r\n          color: #666;\r\n          font-size: 0.7em;\r\n          line-height: 1.1;\r\n      }\r\n\r\n      .student-id {\r\n          color: #667eea;\r\n          font-size: 0.65em;\r\n          font-weight: 500;\r\n          line-height: 1.1;\r\n      }\r\n\r\n      .selected-student-badge {\r\n          display: inline-flex;\r\n          align-items: center;\r\n          background-color: #d1ecf1;\r\n          color: #0c5460;\r\n          padding: 0.5rem 0.75rem;\r\n          border-radius: 6px;\r\n          font-size: 0.9rem;\r\n          margin-top: 0.5rem;\r\n      }\r\n\r\n      .selected-student-badge .remove-selection {\r\n          background: none;\r\n          border: none;\r\n          color: #0c5460;\r\n          margin-left: 0.5rem;\r\n          cursor: pointer;\r\n          font-weight: bold;\r\n          font-size: 1.2rem;\r\n          padding: 0;\r\n          width: auto;\r\n          height: auto;\r\n      }\r\n\r\n      .selected-student-badge .remove-selection:hover {\r\n          color: #062c33;\r\n          background: none;\r\n      }\r\n\r\n      .selected-student-info {\r\n          margin-top: 1rem;\r\n          padding: 1rem;\r\n          background-color: white;\r\n          border-radius: 4px;\r\n          border: 1px solid #ddd;\r\n          display: flex;\r\n          justify-content: space-between;\r\n          align-items: flex-start;\r\n          gap: 15px;\r\n      }\r\n\r\n      .selected-student-details {\r\n          flex: 1;\r\n      }\r\n\r\n      .student-info-label {\r\n          font-weight: 600;\r\n          color: #667eea;\r\n      }\r\n\r\n      .btn-clear-selection {\r\n          padding: 8px 16px;\r\n          background-color: #6c757d;\r\n          color: white;\r\n          border: none;\r\n          border-radius: 4px;\r\n          cursor: pointer;\r\n          font-size: 0.85em;\r\n          white-space: nowrap;\r\n          transition: background-color 0.2s;\r\n      }\r\n\r\n      .btn-clear-selection:hover {\r\n          background-color: #545b62;\r\n      }\r\n\r\n      /* Payment button override for admin view */\r\n      .payment-disabled {\r\n          background-color: #6c757d !important;\r\n          cursor: not-allowed !important;\r\n          opacity: 0.7;\r\n      }\r\n\r\n      .payment-disabled:hover {\r\n          background-color: #5a6268 !important;\r\n      }\r\n\r\n      /* ========== NEGATIVE BALANCE USERS STYLES ========== */\r\n      .negative-balance-container {\r\n          margin-bottom: 2rem;\r\n          padding: 1.5rem;\r\n          background-color: #fff5f5;\r\n          border-radius: 8px;\r\n          border-left: 4px solid #dc3545;\r\n      }\r\n\r\n      .negative-balance-header {\r\n          color: #dc3545;\r\n          font-size: 1.1rem;\r\n          font-weight: 600;\r\n          margin-bottom: 0.5rem;\r\n          display: flex;\r\n          align-items: center;\r\n          gap: 8px;\r\n      }\r\n\r\n      .header-row {\r\n          display: flex;\r\n          justify-content: space-between;\r\n          align-items: center;\r\n          margin-bottom: 0.5rem;\r\n      }\r\n\r\n      .btn-recalculate {\r\n          padding: 0;\r\n          background-color: #667eea;\r\n          color: white;\r\n          border: none;\r\n          border-radius: 6px;\r\n          cursor: pointer;\r\n          font-size: 1.5em;\r\n          font-weight: 600;\r\n          transition: background-color 0.2s;\r\n          display: flex;\r\n          align-items: center;\r\n          justify-content: center;\r\n          height: 40px;\r\n          width: 80px;\r\n          margin-top: 0;\r\n          box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n      }\r\n\r\n      .btn-recalculate:hover:not(:disabled) {\r\n          background-color: #5568d3;\r\n      }\r\n\r\n      .btn-recalculate:disabled {\r\n          background-color: #9ca3af;\r\n          cursor: not-allowed;\r\n          opacity: 0.6;\r\n      }\r\n\r\n      .btn-recalculate.active {\r\n          background-color: #dc3545;\r\n      }\r\n\r\n      .btn-recalculate.active:hover:not(:disabled) {\r\n          background-color: #c82333;\r\n      }\r\n\r\n      .negative-balance-footer {\r\n          margin-top: 1rem;\r\n          padding-top: 0.75rem;\r\n          border-top: 1px dashed #f5c6cb;\r\n          display: flex;\r\n          justify-content: flex-end;\r\n      }\r\n\r\n      .btn-sync-student {\r\n          padding: 8px 14px;\r\n          height: auto;\r\n          width: auto;\r\n          background-color: #667eea;\r\n          color: white;\r\n          border: none;\r\n          border-radius: 6px;\r\n          cursor: pointer;\r\n          font-size: 0.85rem;\r\n          font-weight: 600;\r\n          line-height: 1;\r\n          display: inline-flex;\r\n          align-items: center;\r\n          gap: 8px;\r\n          transition: background-color 0.2s;\r\n          box-shadow: 0 2px 4px rgba(0,0,0,0.1);\r\n      }\r\n\r\n      .btn-sync-student:hover:not(:disabled) {\r\n          background-color: #5568d3;\r\n      }\r\n\r\n      .btn-sync-student:disabled {\r\n          background-color: #9ca3af;\r\n          cursor: not-allowed;\r\n          opacity: 0.7;\r\n      }\r\n\r\n      .btn-sync-icon {\r\n          font-size: 1.1em;\r\n      }\r\n\r\n      .btn-recalculate .spinner {\r\n          width: 10px;\r\n          height: 10px;\r\n          border: 2px solid #fff;\r\n          border-top: 2px solid transparent;\r\n          border-radius: 50%;\r\n          animation: spin 0.8s linear infinite;\r\n      }\r\n\r\n      .negative-balance-count {\r\n          background-color: #dc3545;\r\n          color: white;\r\n          padding: 2px 10px;\r\n          border-radius: 12px;\r\n          font-size: 0.9rem;\r\n          font-weight: bold;\r\n      }\r\n\r\n      .negative-balance-subtitle {\r\n          color: #666;\r\n          font-size: 0.9rem;\r\n          margin-bottom: 1rem;\r\n      }\r\n\r\n      .negative-balance-list {\r\n          max-height: 250px;\r\n          overflow-y: auto;\r\n          background-color: white;\r\n          border-radius: 6px;\r\n          border: 1px solid #ddd;\r\n      }\r\n\r\n      .negative-balance-list::-webkit-scrollbar {\r\n          width: 6px;\r\n      }\r\n\r\n      .negative-balance-list::-webkit-scrollbar-track {\r\n          background: #f1f1f1;\r\n          border-radius: 3px;\r\n      }\r\n\r\n      .negative-balance-list::-webkit-scrollbar-thumb {\r\n          background: #dc3545;\r\n          border-radius: 3px;\r\n      }\r\n\r\n      .negative-balance-list::-webkit-scrollbar-thumb:hover {\r\n          background: #c82333;\r\n      }\r\n\r\n      .negative-balance-item {\r\n          padding: 0.25rem 0.5rem;\r\n          border-bottom: 1px solid #f0f0f0;\r\n          display: flex;\r\n          justify-content: space-between;\r\n          align-items: center;\r\n          transition: background-color 0.2s;\r\n          cursor: pointer;\r\n      }\r\n\r\n      .negative-balance-item:hover {\r\n          background-color: #f8f9fa;\r\n      }\r\n\r\n      .negative-balance-item:last-child {\r\n          border-bottom: none;\r\n      }\r\n\r\n      .user-info {\r\n          flex: 1;\r\n          display: flex;\r\n          flex-direction: column;\r\n          gap: 0;\r\n      }\r\n\r\n      .user-name {\r\n          font-weight: 500;\r\n          color: #333;\r\n          font-size: 0.8em;\r\n          line-height: 1.1;\r\n      }\r\n\r\n      .user-email {\r\n          color: #666;\r\n          font-size: 0.7em;\r\n          line-height: 1.1;\r\n      }\r\n\r\n      .user-id {\r\n          color: #999;\r\n          font-size: 0.65em;\r\n          line-height: 1.1;\r\n      }\r\n\r\n      .balance-value {\r\n          font-weight: 700;\r\n          font-size: 0.8em;\r\n          padding: 2px 6px;\r\n          border-radius: 4px;\r\n          white-space: nowrap;\r\n      }\r\n\r\n      .balance-negative {\r\n          color: #dc3545;\r\n          background-color: #ffebee;\r\n      }\r\n\r\n      .no-negative-balances {\r\n          text-align: center;\r\n          padding: 2rem;\r\n          color: #28a745;\r\n          background-color: white;\r\n          border-radius: 6px;\r\n          border: 1px solid #d4edda;\r\n      }\r\n\r\n      .no-negative-balances-icon {\r\n          font-size: 2rem;\r\n          margin-bottom: 0.5rem;\r\n      }\r\n\r\n      .no-negative-balances-text {\r\n          font-weight: 500;\r\n          font-size: 1rem;\r\n      }\r\n</style>\r\n\r\n{#if !embedded}\r\n<NavBarReusable label=\"Admin: View User's Invoice Page\" backLink={backLinkUrl} />\r\n\r\n<div class=\"admin-banner\">\r\n    <div class=\"admin-banner-title\">👁️ Admin User View Mode</div>\r\n    <div class=\"admin-banner-subtitle\">You're seeing exactly what the selected user sees on their invoice page</div>\r\n</div>\r\n\r\n<!-- Negative Balance Users Section -->\r\n<div class=\"negative-balance-container\">\r\n    <div class=\"header-row\">\r\n        <div class=\"negative-balance-header\">\r\n            💰 Users with Negative Balance\r\n            {#if !isLoadingNegativeBalances && !negativeBalancesError}\r\n                <span class=\"negative-balance-count\">{displayedNegativeBalanceUsers.length}</span>\r\n            {/if}\r\n        </div>\r\n        <button \r\n            type=\"button\"\r\n            class=\"btn-recalculate\" \r\n            on:click={() => selectedStudentId ? recalculateSelectedStudentBalance(selectedStudentId) : recalculateAllBalances()}\r\n            disabled={isRecalculatingBalances || isRecalculatingSelectedStudent}\r\n            title={selectedStudentId ? \"Recalculate selected student's balance\" : \"Recalculate all student balances\"}\r\n        >\r\n            {#if isRecalculatingBalances || isRecalculatingSelectedStudent}\r\n                <div class=\"spinner\"></div>\r\n            {:else}\r\n                🔄\r\n            {/if}\r\n        </button>\r\n        <button\r\n            type=\"button\"\r\n            class=\"btn-recalculate\"\r\n            class:active={showStaleOnly}\r\n            aria-pressed={showStaleOnly}\r\n            on:click={() => showStaleOnly = !showStaleOnly}\r\n            title={showStaleOnly\r\n                ? \"Showing only stale debt (no upcoming classes). Click to show all debtors.\"\r\n                : \"Filter to debtors with no upcoming classes (stale debt).\"}\r\n        >\r\n            🕒\r\n        </button>\r\n    </div>\r\n    <p class=\"negative-balance-subtitle\">Quick access to users who owe money</p>\r\n    \r\n    {#if isLoadingNegativeBalances}\r\n        <div class=\"loading-container\">\r\n            <div class=\"loading-spinner\"></div>\r\n            <p class=\"loading-text\">Loading negative balances...</p>\r\n        </div>\r\n    {:else if negativeBalancesError}\r\n        <div class=\"error-container\">\r\n            <p class=\"error-text\">Error: {negativeBalancesError}</p>\r\n            <button on:click={() => { isLoadingNegativeBalances = true; negativeBalancesError = null; fetchNegativeBalanceUsers(); }}>\r\n                Try Again\r\n            </button>\r\n        </div>\r\n    {:else if displayedNegativeBalanceUsers.length === 0}\r\n        <div class=\"no-negative-balances\">\r\n            <div class=\"no-negative-balances-icon\">✅</div>\r\n            <p class=\"no-negative-balances-text\">\r\n                {#if showStaleOnly}\r\n                    No stale debt — every debtor still has upcoming classes.\r\n                {:else}\r\n                    All users have positive or zero balance!\r\n                {/if}\r\n            </p>\r\n        </div>\r\n    {:else}\r\n        <div class=\"negative-balance-list\">\r\n            {#each displayedNegativeBalanceUsers as user}\r\n                <div \r\n                    class=\"negative-balance-item\"\r\n                    on:click={() => selectStudent(user)}\r\n                    on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectStudent(user)}\r\n                    role=\"button\"\r\n                    tabindex=\"0\"\r\n                >\r\n                    <div class=\"user-info\">\r\n                        <span class=\"user-name\">{user.first_name} {user.last_name}</span>\r\n                        <span class=\"user-email\">{user.email}</span>\r\n                        <span class=\"user-id\">ID: {user.id}</span>\r\n                    </div>\r\n                    <div class=\"balance-value balance-negative\">\r\n                        {user.current_balance.toFixed(2)} EUR\r\n                    </div>\r\n                </div>\r\n            {/each}\r\n        </div>\r\n    {/if}\r\n\r\n    {#if selectedStudentId}\r\n        <div class=\"negative-balance-footer\">\r\n            <button\r\n                type=\"button\"\r\n                class=\"btn-sync-student\"\r\n                on:click={() => syncSelectedStudentChargesAndBalance(selectedStudentId)}\r\n                disabled={isSyncingSelectedStudent}\r\n                title=\"Re-bill any finished classes that were missed, then recompute this student's balance.\"\r\n            >\r\n                {#if isSyncingSelectedStudent}\r\n                    <div class=\"spinner\"></div>\r\n                    <span>Sinchronizuojama…</span>\r\n                {:else}\r\n                    <span class=\"btn-sync-icon\">⚡</span>\r\n                    <span>Sync charges + recalc balance for selected student</span>\r\n                {/if}\r\n            </button>\r\n        </div>\r\n    {/if}\r\n</div>\r\n\r\n<!-- Student Selection (Admin Only) -->\r\n<div class=\"student-selector\">\r\n    <label for=\"student-search\" class=\"student-selector-label\">Select User to View As:</label>\r\n    \r\n    {#if isLoadingStudents}\r\n        <div class=\"loading-container\">\r\n            <div class=\"loading-spinner\"></div>\r\n            <p class=\"loading-text\">Loading users...</p>\r\n        </div>\r\n    {:else if studentsError}\r\n        <div class=\"error-container\">\r\n            <p class=\"error-text\">Error: {studentsError}</p>\r\n            <button on:click={() => { isLoadingStudents = true; studentsError = null; fetchAllStudents(); }}>\r\n                Try Again\r\n            </button>\r\n        </div>\r\n    {:else}\r\n        <div class=\"input-container\">\r\n            <input \r\n                id=\"student-search\"\r\n                type=\"text\" \r\n                placeholder=\"Search user by name or email...\"\r\n                bind:value={studentQuery}\r\n                on:input={() => {\r\n                    if (selectedStudent && studentQuery !== `${selectedStudent.first_name} ${selectedStudent.last_name}`) {\r\n                        selectedStudent = null;\r\n                        selectedStudentId = null;\r\n                        showStudentDropdown = true;\r\n                    } else if (!selectedStudent) {\r\n                        showStudentDropdown = studentQuery.trim().length > 0;\r\n                    }\r\n                }}\r\n                autocomplete=\"off\"\r\n                class=\"search-input\"\r\n            />\r\n            \r\n            {#if selectedStudent}\r\n                <div class=\"selected-student-badge\">\r\n                    ✓ {selectedStudent.first_name} {selectedStudent.last_name} ({selectedStudent.email})\r\n                    <button \r\n                        type=\"button\" \r\n                        class=\"remove-selection\"\r\n                        on:click={() => {\r\n                            selectedStudent = null;\r\n                            selectedStudentId = null;\r\n                            studentQuery = '';\r\n                            showStudentDropdown = false;\r\n                            filteredStudents = allStudents;\r\n                            invoiceData = null;\r\n                            errorForInvoiceData = null;\r\n                            selectedClasses = [];\r\n                        }}\r\n                    >\r\n                        ×\r\n                    </button>\r\n                </div>\r\n            {/if}\r\n            \r\n            {#if showStudentDropdown}\r\n                <div class=\"autocomplete-list\">\r\n                    {#each filteredStudents.slice(0, 8) as student}\r\n                        <div \r\n                            class=\"autocomplete-list-item\"\r\n                            on:click={() => selectStudent(student)}\r\n                            role=\"button\"\r\n                            tabindex=\"0\"\r\n                            on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectStudent(student)}\r\n                        >\r\n                            <div class=\"student-option\">\r\n                                <span class=\"student-name\">{student.first_name} {student.last_name}</span>\r\n                                <span class=\"student-email\">{student.email}</span>\r\n                                <span class=\"student-id\">ID: {student.id}</span>\r\n                            </div>\r\n                        </div>\r\n                    {/each}\r\n                </div>\r\n            {/if}\r\n        </div>\r\n        <div class=\"form-help\">Start typing to search for users by name or email</div>\r\n        \r\n        {#if selectedStudent}\r\n            <div class=\"selected-student-info\">\r\n                <div class=\"selected-student-details\">\r\n                    <div><span class=\"student-info-label\">Viewing as:</span> {selectedStudent.first_name} {selectedStudent.last_name}</div>\r\n                    <div><span class=\"student-info-label\">Email:</span> {selectedStudent.email}</div>\r\n                    <div><span class=\"student-info-label\">ID:</span> {selectedStudent.id}</div>\r\n                </div>\r\n                <button \r\n                    type=\"button\" \r\n                    class=\"btn-clear-selection\" \r\n                    on:click={clearStudentSelection}\r\n                >\r\n                    Clear Selection\r\n                </button>\r\n            </div>\r\n        {/if}\r\n    {/if}\r\n</div>\r\n{/if}\r\n\r\n<!-- Invoice Page View (EXACT REPLICA of what user sees) -->\r\n{#if selectedStudentId}\r\n    {#if isLoadingInvoiceData}\r\n        <div class=\"loading-container\">\r\n            <div class=\"loading-spinner\"></div>\r\n            <p class=\"loading-text\">Kraunamos sąskaitos...</p>\r\n        </div>\r\n    {:else if errorForInvoiceData}\r\n        <div class=\"error-container\">\r\n            <p class=\"error-text\">Klaida: {errorForInvoiceData}</p>\r\n            <button on:click={() => { isLoadingInvoiceData = true; errorForInvoiceData = null; fetchInvoiceData(); }}>\r\n                Bandyti dar kartą\r\n            </button>\r\n        </div>\r\n    {:else if invoiceData}\r\n        <div class=\"balance-info\">\r\n            <div>\r\n                <span class=\"balance-label\">Dabartinis balansas:</span>\r\n                <span class=\"balance-amount\">{invoiceData.balance} EUR</span>\r\n            </div>\r\n            <div>\r\n                <span class=\"balance-label\">Paskutinį kartą atnaujinta:</span>\r\n                <span class=\"balance-date\">{new Date(invoiceData.last_updated_date).toLocaleDateString('lt-LT')}</span>\r\n            </div>\r\n        </div>\r\n\r\n        <form on:submit|preventDefault={fetchPaymentLinkAndRedirect}>\r\n            <label for=\"class-select\">Pasirinkite Pamokas:</label>\r\n            {#if classWindow.canShowMorePast || classWindow.canShowLessPast}\r\n                <div class=\"class-window-controls\" role=\"group\" aria-label=\"Ankstesni mėnesiai\">\r\n                    {#if classWindow.canShowMorePast}\r\n                        <button\r\n                            type=\"button\"\r\n                            class=\"class-window-toggle\"\r\n                            on:click={showOneMorePastMonth}\r\n                            aria-expanded={visibleOlderMonthCount > 0}\r\n                            aria-controls=\"admin-invoice-class-list\"\r\n                        >\r\n                            Rodyti daugiau\r\n                        </button>\r\n                    {/if}\r\n                    {#if classWindow.canShowLessPast}\r\n                        <button\r\n                            type=\"button\"\r\n                            class=\"class-window-toggle\"\r\n                            on:click={showOneLessPastMonth}\r\n                            aria-expanded=\"true\"\r\n                            aria-controls=\"admin-invoice-class-list\"\r\n                        >\r\n                            Rodyti mažiau\r\n                        </button>\r\n                    {/if}\r\n                </div>\r\n            {/if}\r\n\r\n            <div id=\"admin-invoice-class-list\">\r\n                <CheckBoxAreForClassesComponent\r\n                    classes={classWindow.visibleClasses}\r\n                    bind:selectedClasses\r\n                />\r\n            </div>\r\n\r\n            {#if classWindow.canShowMoreFuture || classWindow.canShowLessFuture}\r\n                <div class=\"class-window-controls\" role=\"group\" aria-label=\"Vėlesni mėnesiai\">\r\n                    {#if classWindow.canShowMoreFuture}\r\n                        <button\r\n                            type=\"button\"\r\n                            class=\"class-window-toggle\"\r\n                            on:click={showOneMoreFutureMonth}\r\n                            aria-expanded={visibleFutureMonthCount > 0}\r\n                            aria-controls=\"admin-invoice-class-list\"\r\n                        >\r\n                            Rodyti daugiau\r\n                        </button>\r\n                    {/if}\r\n                    {#if classWindow.canShowLessFuture}\r\n                        <button\r\n                            type=\"button\"\r\n                            class=\"class-window-toggle\"\r\n                            on:click={showOneLessFutureMonth}\r\n                            aria-expanded=\"true\"\r\n                            aria-controls=\"admin-invoice-class-list\"\r\n                        >\r\n                            Rodyti mažiau\r\n                        </button>\r\n                    {/if}\r\n                </div>\r\n            {/if}\r\n\r\n            <p>Viso: {Math.round(invoiceSum)} EUR</p>\r\n\r\n            <button type=\"submit\" disabled={isFetchingPaymentLink} class=\"payment-disabled\">\r\n                <span>{isFetchingPaymentLink ? 'Kuriama nuoroda...' : 'Apmokėti'}</span>\r\n            </button>\r\n        </form>\r\n\r\n        {#if invoiceData.previous_payments.length > 0}\r\n            <div class=\"payments-section\">\r\n                <h2 class=\"payments-header\">Atlikti mokėjimai</h2>\r\n                <p class=\"payments-description\">Čia galite peržiūrėti savo mokėjimo istoriją ir atsisiųsti sąskaitas.</p>\r\n                <CompletedPaymentsList payments={invoiceData.previous_payments} />\r\n            </div>\r\n        {:else}\r\n            <div class=\"no-payments-section\">\r\n                <h2 class=\"payments-header\">Atlikti mokėjimai</h2>\r\n                <p class=\"no-payments-text\">Kol kas neturite atliktų mokėjimų.</p>\r\n            </div>\r\n        {/if}\r\n    {/if}\r\n{:else}\r\n    <div class=\"loading-container\">\r\n        <p class=\"loading-text\">👆 Please select a user above to view their invoice page</p>\r\n    </div>\r\n{/if}\r\n\r\n","<script>\r\n\timport StudentSearchComponent from './StudentSearchComponent.svelte';\r\n\timport NavBarReusable from './NavbarReusable.svelte';\r\n\timport { onMount } from 'svelte';\r\n\timport { getApiBase } from './apiBase.js';\r\n\r\n\t// Admin tools\r\n\timport AdminCreateUserComponent from './AdminCreateUserComponent.svelte';\r\n\timport AdminManualPaymentComponent from './AdminManualPaymentComponent.svelte';\r\n\timport RefreshDatabaseButtonComponent from './RefreshDatabaseButtonComponent.svelte';\r\n\timport CreateStudentEmailComponent from './CreateStudentEmailComponent.svelte';\r\n\timport SelectUsersEmailComponent from './SelectUsersEmailComponent.svelte';\r\n\timport SendWeeklyScheduleSMS from './SendWeeklyScheduleSMS.svelte';\r\n\timport AdminFamilyManagerComponent from './AdminFamilyManagerComponent.svelte';\r\n\r\n\t// Student widgets\r\n\timport StudentInfoComponent from './StudentInfoComponent.svelte';\r\n\timport StudentPricingModifierComponent from './StudentPricingModifierComponent.svelte';\r\n\timport FindStudentsComments from './FindStudentsComments.svelte';\r\n\timport AdminStudentScheduleViewer from './AdminStudentScheduleViewer.svelte';\r\n\timport AdminUserInvoicePageViewer from './AdminUserInvoicePageViewer.svelte';\r\n\r\n\tlet selectedStudent = null;\r\n\r\n\tlet infoRefresh = 0;\r\n\tlet pricingRefresh = 0;\r\n\tlet commentsRefresh = 0;\r\n\tlet scheduleRefresh = 0;\r\n\tlet invoiceRefresh = 0;\r\n\r\n\tconst lastStudentKey = 'adminStudents:lastStudent';\r\n\tconst collapsedKey = 'adminStudents:collapsed';\r\n\tconst toolsCollapsedKey = 'adminStudents:collapsedTools';\r\n\tconst showToolsKey = 'adminStudents:showTools';\r\n\r\n\tlet showAdminTools = true;\r\n\r\n\tlet collapsed = {\r\n\t\tinfo: false,\r\n\t\tpricing: true,\r\n\t\tcomments: true,\r\n\t\tschedule: true,\r\n\t\tinvoice: true,\r\n\t};\r\n\r\n\tconst widgetOrder = /** @type {const} */ (['info', 'pricing', 'comments', 'schedule', 'invoice']);\r\n\r\n\tfunction widgetTitle(key) {\r\n\t\tswitch (key) {\r\n\t\t\tcase 'info':\r\n\t\t\t\treturn 'Student Information';\r\n\t\t\tcase 'pricing':\r\n\t\t\t\treturn 'Student Pricing';\r\n\t\t\tcase 'comments':\r\n\t\t\t\treturn 'Student Comments';\r\n\t\t\tcase 'schedule':\r\n\t\t\t\treturn 'Schedule Debug';\r\n\t\t\tcase 'invoice':\r\n\t\t\t\treturn '👁️ User Invoice View';\r\n\t\t\tdefault:\r\n\t\t\t\treturn key;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction normalizeCollapsedState() {\r\n\t\t// Ensure collapsed has all expected keys (no single-open enforcement).\r\n\t\tcollapsed = {\r\n\t\t\tinfo: !!collapsed?.info,\r\n\t\t\tpricing: !!collapsed?.pricing,\r\n\t\t\tcomments: !!collapsed?.comments,\r\n\t\t\tschedule: !!collapsed?.schedule,\r\n\t\t\tinvoice: !!collapsed?.invoice,\r\n\t\t};\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\t$: openWidgetKeys = widgetOrder.filter(k => !collapsed[k]);\r\n\r\n\tlet toolsCollapsed = {\r\n\t\tcreateUsers: false,\r\n\t\tmanualPayments: false,\r\n\t\trefreshDb: false,\r\n\t\tclassEmails: false,\r\n\t\tbulkEmails: false,\r\n\t\tsms: false,\r\n\t\tfamilies: false,\r\n\t};\r\n\r\n\tlet toast = '';\r\n\tlet toastTimer = null;\r\n\r\n\tfunction showToast(message) {\r\n\t\ttoast = message;\r\n\t\tif (toastTimer) clearTimeout(toastTimer);\r\n\t\ttoastTimer = setTimeout(() => {\r\n\t\t\ttoast = '';\r\n\t\t}, 1200);\r\n\t}\r\n\r\n\tfunction studentLabel(student) {\r\n\t\tif (!student) return '';\r\n\t\tconst first = (student.first_name || '').trim();\r\n\t\tconst last = (student.last_name || '').trim();\r\n\t\tconst full = `${first} ${last}`.trim();\r\n\t\treturn full || `ID ${student.id}`;\r\n\t}\r\n\r\n\tfunction getHashParts() {\r\n\t\tconst hash = window.location.hash || '#/admin/students';\r\n\t\tconst qIndex = hash.indexOf('?');\r\n\t\tif (qIndex === -1) return { path: hash, params: new URLSearchParams() };\r\n\t\treturn { path: hash.slice(0, qIndex), params: new URLSearchParams(hash.slice(qIndex + 1)) };\r\n\t}\r\n\r\n\tfunction getHashQueryParam(name) {\r\n\t\tconst { params } = getHashParts();\r\n\t\treturn params.get(name);\r\n\t}\r\n\r\n\tfunction setStudentsHashStudentId(id) {\r\n\t\tconst { path, params } = getHashParts();\r\n\t\t// Only mutate when we're on Students page route\r\n\t\tif (!path.startsWith('#/admin/students')) return;\r\n\t\tif (id) params.set('studentId', String(id));\r\n\t\telse params.delete('studentId');\r\n\t\tconst nextHash = params.toString() ? `${path}?${params.toString()}` : path;\r\n\t\tif (nextHash !== window.location.hash) window.location.hash = nextHash;\r\n\t}\r\n\r\n\tfunction persistSelectedStudent(student) {\r\n\t\ttry {\r\n\t\t\tif (!student) {\r\n\t\t\t\tlocalStorage.removeItem(lastStudentKey);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tlocalStorage.setItem(lastStudentKey, JSON.stringify(student));\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction loadCollapsedState() {\r\n\t\ttry {\r\n\t\t\tconst raw = localStorage.getItem(collapsedKey);\r\n\t\t\tif (!raw) return;\r\n\t\t\tconst parsed = JSON.parse(raw);\r\n\t\t\tif (!parsed || typeof parsed !== 'object') return;\r\n\t\t\tcollapsed = {\r\n\t\t\t\tinfo: !!parsed.info,\r\n\t\t\t\tpricing: !!parsed.pricing,\r\n\t\t\t\tcomments: !!parsed.comments,\r\n\t\t\t\tschedule: !!parsed.schedule,\r\n\t\t\t\tinvoice: !!parsed.invoice,\r\n\t\t\t};\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction saveCollapsedState() {\r\n\t\ttry {\r\n\t\t\tlocalStorage.setItem(collapsedKey, JSON.stringify(collapsed));\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction openWidget(key) {\r\n\t\t// Multi-open behavior: opening a widget does not close others.\r\n\t\tcollapsed = { ...collapsed, [key]: false };\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction closeWidget(key) {\r\n\t\tif (!key) return;\r\n\t\tcollapsed = { ...collapsed, [key]: true };\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction toggleCollapsed(key) {\r\n\t\t// Multi-open behavior: toggle only this widget.\r\n\t\tcollapsed = { ...collapsed, [key]: !collapsed[key] };\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction loadToolsCollapsedState() {\r\n\t\ttry {\r\n\t\t\tconst raw = localStorage.getItem(toolsCollapsedKey);\r\n\t\t\tif (!raw) return;\r\n\t\t\tconst parsed = JSON.parse(raw);\r\n\t\t\tif (!parsed || typeof parsed !== 'object') return;\r\n\t\t\ttoolsCollapsed = {\r\n\t\t\t\tcreateUsers: !!parsed.createUsers,\r\n\t\t\t\tmanualPayments: !!parsed.manualPayments,\r\n\t\t\t\trefreshDb: !!parsed.refreshDb,\r\n\t\t\t\tclassEmails: !!parsed.classEmails,\r\n\t\t\t\tbulkEmails: !!parsed.bulkEmails,\r\n\t\t\t\tsms: !!parsed.sms,\r\n\t\t\t\tfamilies: !!parsed.families,\r\n\t\t\t};\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction saveToolsCollapsedState() {\r\n\t\ttry {\r\n\t\t\tlocalStorage.setItem(toolsCollapsedKey, JSON.stringify(toolsCollapsed));\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleToolsCollapsed(key) {\r\n\t\ttoolsCollapsed = { ...toolsCollapsed, [key]: !toolsCollapsed[key] };\r\n\t\tsaveToolsCollapsedState();\r\n\t}\r\n\r\n\tfunction closeAllWidgets() {\r\n\t\tcollapsed = {\r\n\t\t\tinfo: true,\r\n\t\t\tpricing: true,\r\n\t\t\tcomments: true,\r\n\t\t\tschedule: true,\r\n\t\t\tinvoice: true,\r\n\t\t};\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction loadShowToolsState() {\r\n\t\ttry {\r\n\t\t\tconst raw = localStorage.getItem(showToolsKey);\r\n\t\t\tif (raw === null) return;\r\n\t\t\tshowAdminTools = raw === 'true';\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleTools() {\r\n\t\tshowAdminTools = !showAdminTools;\r\n\t\ttry {\r\n\t\t\tlocalStorage.setItem(showToolsKey, String(showAdminTools));\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tasync function copyToClipboard(text, label) {\r\n\t\tif (!text) return;\r\n\t\ttry {\r\n\t\t\tif (navigator?.clipboard?.writeText) {\r\n\t\t\t\tawait navigator.clipboard.writeText(text);\r\n\t\t\t} else {\r\n\t\t\t\tconst textarea = document.createElement('textarea');\r\n\t\t\t\ttextarea.value = text;\r\n\t\t\t\ttextarea.style.position = 'fixed';\r\n\t\t\t\ttextarea.style.left = '-9999px';\r\n\t\t\t\tdocument.body.appendChild(textarea);\r\n\t\t\t\ttextarea.focus();\r\n\t\t\t\ttextarea.select();\r\n\t\t\t\tdocument.execCommand('copy');\r\n\t\t\t\tdocument.body.removeChild(textarea);\r\n\t\t\t}\r\n\t\t\tshowToast(`Copied ${label}`);\r\n\t\t} catch {\r\n\t\t\tshowToast('Copy failed');\r\n\t\t}\r\n\t}\r\n\r\n\tfunction jumpTo(key) {\r\n\t\t// Previous behavior was scrolling to a widget section.\r\n\t\t// With the dock model, we open the widget instead.\r\n\t\topenWidget(key);\r\n\t}\r\n\r\n\tasync function searchStudents(term) {\r\n\t\tconst apiBase = getApiBase();\r\n\t\tconst response = await fetch(`${apiBase}/studentplayground/api/admin/search-students/`, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\tAuthorization: `Bearer ${localStorage.getItem('jwtToken')}`,\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify({ search_term: term }),\r\n\t\t});\r\n\r\n\t\tif (!response.ok) return [];\r\n\t\tconst data = await response.json();\r\n\t\treturn data?.students || [];\r\n\t}\r\n\r\n\tasync function restoreSelectedStudent() {\r\n\t\t// 1) deep link: #/admin/students?studentId=123\r\n\t\tconst fromHash = getHashQueryParam('studentId');\r\n\t\tif (fromHash) {\r\n\t\t\tconst idNum = parseInt(fromHash, 10);\r\n\t\t\tif (!Number.isNaN(idNum)) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst results = await searchStudents(String(idNum));\r\n\t\t\t\t\tconst match = results.find(s => s.id === idNum) || results[0];\r\n\t\t\t\t\tif (match) {\r\n\t\t\t\t\t\tselectedStudent = match;\r\n\t\t\t\t\t\tinfoRefresh += 1;\r\n\t\t\t\t\t\tpricingRefresh += 1;\r\n\t\t\t\t\t\tcommentsRefresh += 1;\r\n\t\t\t\t\t\tscheduleRefresh += 1;\r\n\t\t\t\t\t\tinvoiceRefresh += 1;\r\n\t\t\t\t\t\tpersistSelectedStudent(match);\r\n\t\t\t\t\t\tsetStudentsHashStudentId(match.id);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch {\r\n\t\t\t\t\t// ignore\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// 2) last selection persistence\r\n\t\ttry {\r\n\t\t\tconst raw = localStorage.getItem(lastStudentKey);\r\n\t\t\tif (!raw) return;\r\n\t\t\tconst parsed = JSON.parse(raw);\r\n\t\t\tif (parsed && parsed.id) {\r\n\t\t\t\tselectedStudent = parsed;\r\n\t\t\t\tinfoRefresh += 1;\r\n\t\t\t\tpricingRefresh += 1;\r\n\t\t\t\tcommentsRefresh += 1;\r\n\t\t\t\tscheduleRefresh += 1;\r\n\t\t\t\tinvoiceRefresh += 1;\r\n\t\t\t\tsetStudentsHashStudentId(parsed.id);\r\n\t\t\t}\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction handleStudentSelected(e) {\r\n\t\tselectedStudent = e.detail;\r\n\t\tinfoRefresh += 1;\r\n\t\tpricingRefresh += 1;\r\n\t\tcommentsRefresh += 1;\r\n\t\tscheduleRefresh += 1;\r\n\t\tinvoiceRefresh += 1;\r\n\t\tpersistSelectedStudent(selectedStudent);\r\n\t\tsetStudentsHashStudentId(selectedStudent?.id);\r\n\t}\r\n\r\n\tfunction handleStudentCleared() {\r\n\t\tselectedStudent = null;\r\n\t\tpersistSelectedStudent(null);\r\n\t\tsetStudentsHashStudentId(null);\r\n\t}\r\n\r\n\tonMount(() => {\r\n\t\tloadShowToolsState();\r\n\t\tloadCollapsedState();\r\n\t\tnormalizeCollapsedState();\r\n\t\tloadToolsCollapsedState();\r\n\t\trestoreSelectedStudent();\r\n\t});\r\n</script>\r\n\r\n<div class=\"app-container\">\r\n\t<NavBarReusable label=\"Admin - Students\" />\r\n\r\n\t<div class=\"page\">\r\n\t\t<section class=\"section\">\r\n\t\t\t<div class=\"section-title-row\">\r\n\t\t\t\t<h2 class=\"section-title\">Admin tools</h2>\r\n\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={toggleTools}>\r\n\t\t\t\t\t{showAdminTools ? 'Hide tools' : 'Show tools'}\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t\t{#if showAdminTools}\r\n\t\t\t\t<div class=\"tools-grid\">\r\n\t\t\t\t\t<div class=\"card tool tool-create-users\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\taria-controls=\"students-tool-createUsers-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.createUsers}\r\n\t\t\t\t\t\t\t\ton:click={() => toggleToolsCollapsed('createUsers')}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.createUsers ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\tCreate Users\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.createUsers}\r\n\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"students-tool-createUsers-body\">\r\n\t\t\t\t\t\t\t\t<AdminCreateUserComponent />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"card tool tool-manual-payments\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\taria-controls=\"students-tool-manualPayments-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.manualPayments}\r\n\t\t\t\t\t\t\t\ton:click={() => toggleToolsCollapsed('manualPayments')}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.manualPayments ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\tManual Payments\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.manualPayments}\r\n\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"students-tool-manualPayments-body\">\r\n\t\t\t\t\t\t\t\t<AdminManualPaymentComponent />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"card tool tool-db-refresh\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\taria-controls=\"students-tool-refreshDb-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.refreshDb}\r\n\t\t\t\t\t\t\t\ton:click={() => toggleToolsCollapsed('refreshDb')}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.refreshDb ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\tDatabase refresh\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.refreshDb}\r\n\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"students-tool-refreshDb-body\">\r\n\t\t\t\t\t\t\t\t<RefreshDatabaseButtonComponent />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"card tool tool-class-emails\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\taria-controls=\"students-tool-classEmails-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.classEmails}\r\n\t\t\t\t\t\t\t\ton:click={() => toggleToolsCollapsed('classEmails')}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.classEmails ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\tSend Class Emails\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.classEmails}\r\n\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"students-tool-classEmails-body\">\r\n\t\t\t\t\t\t\t\t<CreateStudentEmailComponent />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"card tool tool-bulk-emails\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\taria-controls=\"students-tool-bulkEmails-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.bulkEmails}\r\n\t\t\t\t\t\t\t\ton:click={() => toggleToolsCollapsed('bulkEmails')}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.bulkEmails ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\tSend Bulk Emails\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.bulkEmails}\r\n\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"students-tool-bulkEmails-body\">\r\n\t\t\t\t\t\t\t\t<SelectUsersEmailComponent />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"card tool tool-sms\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\taria-controls=\"students-tool-sms-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.sms}\r\n\t\t\t\t\t\t\t\ton:click={() => toggleToolsCollapsed('sms')}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.sms ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\tSend SMS\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.sms}\r\n\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"students-tool-sms-body\">\r\n\t\t\t\t\t\t\t\t<SendWeeklyScheduleSMS />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"card tool tool-families\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\taria-controls=\"students-tool-families-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.families}\r\n\t\t\t\t\t\t\t\ton:click={() => toggleToolsCollapsed('families')}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.families ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t👪 Families\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.families}\r\n\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"students-tool-families-body\">\r\n\t\t\t\t\t\t\t\t<AdminFamilyManagerComponent />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t{/if}\r\n\t\t</section>\r\n\r\n\t\t<section class=\"section\">\r\n\t\t\t<h2 class=\"section-title\">Find student</h2>\r\n\t\t\t<StudentSearchComponent\r\n\t\t\t\t{selectedStudent}\r\n\t\t\t\ton:studentSelected={handleStudentSelected}\r\n\t\t\t\ton:studentCleared={handleStudentCleared}\r\n\t\t\t/>\r\n\t\t</section>\r\n\r\n\t\t<section class=\"section\">\r\n\t\t\t<h2 class=\"section-title\">Student dashboard</h2>\r\n\r\n\t\t\t{#if !selectedStudent}\r\n\t\t\t\t<div class=\"empty\">\r\n\t\t\t\t\tSelect a student to load comments, pricing, schedule, invoices, and student info.\r\n\t\t\t\t</div>\r\n\t\t\t{:else}\r\n\t\t\t\t<div class=\"selected-row\">\r\n\t\t\t\t\t<div class=\"selected-meta\">\r\n\t\t\t\t\t\t<strong>{studentLabel(selectedStudent)}</strong>\r\n\t\t\t\t\t\t{#if selectedStudent.username || selectedStudent.email}\r\n\t\t\t\t\t\t\t<span class=\"muted\">• @{selectedStudent.username} • {selectedStudent.email}</span>\r\n\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t<span class=\"muted\">• ID: {selectedStudent.id}</span>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t<div class=\"quick-actions\">\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => copyToClipboard(String(selectedStudent.id), 'ID')}>Copy ID</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" disabled={!selectedStudent.email} on:click={() => copyToClipboard(selectedStudent.email, 'email')}>Copy email</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" disabled={!selectedStudent.phone_number} on:click={() => copyToClipboard(selectedStudent.phone_number, 'phone')}>Copy phone</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" disabled={!selectedStudent.username} on:click={() => copyToClipboard(selectedStudent.username, 'username')}>Copy username</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => openWidget('info')}>Info</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => openWidget('pricing')}>Pricing</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => openWidget('comments')}>Comments</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => openWidget('schedule')}>Schedule</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => openWidget('invoice')}>Invoice</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"selected-actions\">\r\n\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" disabled={openWidgetKeys.length === 0} on:click={closeAllWidgets}>\r\n\t\t\t\t\t\t\tClose all widgets\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button type=\"button\" class=\"btn\" on:click={handleStudentCleared}>Clear</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t{#if toast}\r\n\t\t\t\t\t<div class=\"toast\" role=\"status\">{toast}</div>\r\n\t\t\t\t{/if}\r\n\r\n\t\t\t\t{#if widgetOrder.some(k => collapsed[k])}\r\n\t\t\t\t\t<div class=\"widget-dock\" aria-label=\"Closed widgets\">\r\n\t\t\t\t\t\t<div class=\"widget-dock-label\">Closed widgets</div>\r\n\t\t\t\t\t\t<div class=\"widget-dock-buttons\">\r\n\t\t\t\t\t\t\t{#each widgetOrder as key (key)}\r\n\t\t\t\t\t\t\t\t{#if collapsed[key]}\r\n\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"dock-btn\" on:click={() => openWidget(key)}>\r\n\t\t\t\t\t\t\t\t\t\t{widgetTitle(key)}\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t{/if}\r\n\r\n\t\t\t\t<div class=\"widgets-grid\">\r\n\t\t\t\t\t{#if openWidgetKeys.length === 0}\r\n\t\t\t\t\t\t<div class=\"empty widgets-empty\">Select a widget above to open.</div>\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t{#each openWidgetKeys as key (key)}\r\n\t\t\t\t\t\t\t{#if key === 'info'}\r\n\t\t\t\t\t\t\t\t<div class=\"card widget info-card\" id=\"students-widget-info\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-controls=\"students-widget-info-body\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.info}\r\n\t\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('info')}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.info ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\t\tStudent Information\r\n\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => (infoRefresh += 1)}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('info')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"students-widget-info-body\">\r\n\t\t\t\t\t\t\t\t\t\t{#key infoRefresh}\r\n\t\t\t\t\t\t\t\t\t\t\t<StudentInfoComponent studentId={selectedStudent.id} embedded={true} />\r\n\t\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t\t{#if key === 'pricing'}\r\n\t\t\t\t\t\t\t\t<div class=\"card widget pricing-card\" id=\"students-widget-pricing\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-controls=\"students-widget-pricing-body\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.pricing}\r\n\t\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('pricing')}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.pricing ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\t\tStudent Pricing\r\n\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => (pricingRefresh += 1)}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('pricing')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"students-widget-pricing-body\">\r\n\t\t\t\t\t\t\t\t\t\t{#key pricingRefresh}\r\n\t\t\t\t\t\t\t\t\t\t\t<StudentPricingModifierComponent studentId={selectedStudent.id} embedded={true} />\r\n\t\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t\t{#if key === 'comments'}\r\n\t\t\t\t\t\t\t\t<div class=\"card widget comments-card\" id=\"students-widget-comments\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-controls=\"students-widget-comments-body\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.comments}\r\n\t\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('comments')}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.comments ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\t\tStudent Comments\r\n\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => (commentsRefresh += 1)}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('comments')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"students-widget-comments-body\">\r\n\t\t\t\t\t\t\t\t\t\t{#key commentsRefresh}\r\n\t\t\t\t\t\t\t\t\t\t\t<FindStudentsComments studentId={selectedStudent.id} embedded={true} />\r\n\t\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t\t{#if key === 'schedule'}\r\n\t\t\t\t\t\t\t\t<div class=\"card widget schedule-card\" id=\"students-widget-schedule\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-controls=\"students-widget-schedule-body\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.schedule}\r\n\t\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('schedule')}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.schedule ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\t\tSchedule Debug\r\n\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"link\" href={`#/admin/student-schedule-debug?studentId=${selectedStudent.id}`} target=\"_blank\" rel=\"noreferrer\">Open full</a>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => (scheduleRefresh += 1)}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('schedule')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"students-widget-schedule-body\">\r\n\t\t\t\t\t\t\t\t\t\t{#key scheduleRefresh}\r\n\t\t\t\t\t\t\t\t\t\t\t<AdminStudentScheduleViewer studentId={selectedStudent.id} embedded={true} />\r\n\t\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t\t{#if key === 'invoice'}\r\n\t\t\t\t\t\t\t\t<div class=\"card widget invoice-card\" id=\"students-widget-invoice\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-controls=\"students-widget-invoice-body\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.invoice}\r\n\t\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('invoice')}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.invoice ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t👁️ User Invoice View\r\n\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"link\" href={`#/admin/user-invoice-view?studentId=${selectedStudent.id}`} target=\"_blank\" rel=\"noreferrer\">Open full</a>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => (invoiceRefresh += 1)}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('invoice')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"students-widget-invoice-body\">\r\n\t\t\t\t\t\t\t\t\t\t{#key invoiceRefresh}\r\n\t\t\t\t\t\t\t\t\t\t\t<AdminUserInvoicePageViewer studentId={selectedStudent.id} embedded={true} />\r\n\t\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t</div>\r\n\t\t\t{/if}\r\n\t\t</section>\r\n\t</div>\r\n</div>\r\n\r\n<style>\r\n\t.page {\r\n\t\tpadding: 18px 22px 30px;\r\n\t\tbackground: #f6f7fb;\r\n\t}\r\n\r\n\t.section {\r\n\t\tmargin-bottom: 22px;\r\n\t}\r\n\r\n\t.section-title {\r\n\t\tmargin: 0 0 10px 0;\r\n\t\tfont-size: 18px;\r\n\t}\r\n\r\n\t.section-title-row {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 12px;\r\n\t\tmargin: 0 0 10px 0;\r\n\t}\r\n\r\n\t.tools-grid {\r\n\t\t/* Masonry-style layout to avoid large empty gaps when some cards are collapsed */\r\n\t\tcolumn-count: 3;\r\n\t\tcolumn-gap: 24px;\r\n\t}\r\n\r\n\t/* Cards inside a column layout */\r\n\t.tools-grid > .card {\r\n\t\tbreak-inside: avoid;\r\n\t\t/* keep card's flex layout, but prevent horizontal overlap */\r\n\t\tdisplay: flex;\r\n\t\twidth: 100%;\r\n\t\tbox-sizing: border-box;\r\n\t\tmargin: 0 0 16px;\r\n\t}\r\n\r\n\t.widgets-grid {\r\n\t\t/* Match tools-grid stacking behavior (masonry-style columns). */\r\n\t\tcolumn-count: 2;\r\n\t\tcolumn-gap: 16px;\r\n\t}\r\n\r\n\t.widgets-grid > .card {\r\n\t\tbreak-inside: avoid;\r\n\t\tdisplay: flex;\r\n\t\twidth: 100%;\r\n\t\tbox-sizing: border-box;\r\n\t\tmargin: 0 0 16px;\r\n\t}\r\n\r\n\t.widget-dock {\r\n\t\tmargin: 10px 0 14px;\r\n\t\tpadding: 12px;\r\n\t\tborder-radius: 10px;\r\n\t\tbackground: rgba(255, 255, 255, 0.7);\r\n\t\tborder: 1px solid rgba(0, 0, 0, 0.08);\r\n\t}\r\n\r\n\t.widget-dock-label {\r\n\t\tfont-weight: 800;\r\n\t\tcolor: #1f2937;\r\n\t\tmargin-bottom: 8px;\r\n\t}\r\n\r\n\t.widget-dock-buttons {\r\n\t\tdisplay: flex;\r\n\t\tflex-wrap: wrap;\r\n\t\tgap: 8px;\r\n\t}\r\n\r\n\t.dock-btn {\r\n\t\tpadding: 6px 10px;\r\n\t\tborder: 1px solid rgba(0, 0, 0, 0.14);\r\n\t\tbackground: rgba(255, 255, 255, 0.95);\r\n\t\tborder-radius: 999px;\r\n\t\tcursor: pointer;\r\n\t\tfont-size: 12px;\r\n\t\tfont-weight: 700;\r\n\t\tcolor: #111827;\r\n\t}\r\n\r\n\t.dock-btn:hover {\r\n\t\tbackground: white;\r\n\t}\r\n\r\n\t.widgets-empty {\r\n\t\t/* Ensure the empty state spans full width in column layout */\r\n\t\tcolumn-span: all;\r\n\t}\r\n\r\n\t.card {\r\n\t\tpadding: 15px;\r\n\t\tbackground-color: white;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tgap: 10px;\r\n\t\tbox-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n\t\tborder-radius: 8px;\r\n\t\tcolor: black;\r\n\t\talign-items: stretch;\r\n\t}\r\n\r\n\t/* Widget theming: makes boundaries obvious */\r\n\t.card.widget {\r\n\t\tbackground: var(--tint, #fff);\r\n\t\tborder-left: 6px solid var(--accent, transparent);\r\n\t}\r\n\r\n\t/* Tool theming: same visual separation as widgets */\r\n\t.card.tool {\r\n\t\tbackground: var(--tint, #fff);\r\n\t\tborder-left: 6px solid var(--accent, transparent);\r\n\t}\r\n\r\n\t.tool-create-users {\r\n\t\t--accent: #0ea5e9;\r\n\t\t--tint: #e0f2fe;\r\n\t}\r\n\t.tool-manual-payments {\r\n\t\t--accent: #6366f1;\r\n\t\t--tint: #eef2ff;\r\n\t}\r\n\t.tool-db-refresh {\r\n\t\t--accent: #6b7280;\r\n\t\t--tint: #f3f4f6;\r\n\t}\r\n\t.tool-class-emails {\r\n\t\t--accent: #14b8a6;\r\n\t\t--tint: #ccfbf1;\r\n\t}\r\n\t.tool-bulk-emails {\r\n\t\t--accent: #a855f7;\r\n\t\t--tint: #f5f3ff;\r\n\t}\r\n\t.tool-sms {\r\n\t\t--accent: #f97316;\r\n\t\t--tint: #ffedd5;\r\n\t}\r\n\t.tool-families {\r\n\t\t--accent: #14695b;\r\n\t\t--tint: #e6f4f1;\r\n\t}\r\n\r\n\t.info-card {\r\n\t\t--accent: #2563eb;\r\n\t\t--tint: #eff6ff;\r\n\t}\r\n\t.pricing-card {\r\n\t\t--accent: #7c3aed;\r\n\t\t--tint: #f5f3ff;\r\n\t}\r\n\t.comments-card {\r\n\t\t--accent: #d97706;\r\n\t\t--tint: #fffbeb;\r\n\t}\r\n\t.schedule-card {\r\n\t\t--accent: #059669;\r\n\t\t--tint: #ecfdf5;\r\n\t}\r\n\t.invoice-card {\r\n\t\t--accent: #dc2626;\r\n\t\t--tint: #fef2f2;\r\n\t}\r\n\r\n\t.widget-header {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 10px;\r\n\t}\r\n\r\n\t.widget-actions {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tgap: 10px;\r\n\t}\r\n\r\n\t.widget-title {\r\n\t\tdisplay: inline-flex;\r\n\t\talign-items: center;\r\n\t\tgap: 8px;\r\n\t\tpadding: 6px 8px;\r\n\t\tborder: 0;\r\n\t\tbackground: transparent;\r\n\t\tfont-weight: 800;\r\n\t\tcolor: #1f2937;\r\n\t\tcursor: pointer;\r\n\t\tborder-radius: 8px;\r\n\t\ttext-align: left;\r\n\t}\r\n\r\n\t.widget-title:hover {\r\n\t\tbackground: rgba(255, 255, 255, 0.7);\r\n\t}\r\n\r\n\t.widget-title:focus {\r\n\t\toutline: 2px solid rgba(20, 105, 91, 0.4);\r\n\t\toutline-offset: 2px;\r\n\t}\r\n\r\n\t.chevron {\r\n\t\tfont-size: 14px;\r\n\t\topacity: 0.9;\r\n\t}\r\n\r\n\t.widget-body {\r\n\t\twidth: 100%;\r\n\t}\r\n\r\n\t.widget-body.scroll {\r\n\t\tmax-height: 650px;\r\n\t\toverflow: auto;\r\n\t\tpadding: 10px;\r\n\t\tborder-radius: 8px;\r\n\t\tborder: 1px solid rgba(0, 0, 0, 0.08);\r\n\t\tbackground: rgba(255, 255, 255, 0.75);\r\n\t}\r\n\r\n\t.selected-row {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 10px;\r\n\t\tmargin: 10px 0 14px;\r\n\t\tpadding: 10px 12px;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground: rgba(248, 249, 250, 0.92);\r\n\t\tbackdrop-filter: blur(8px);\r\n\t\tborder: 1px solid rgba(0, 0, 0, 0.08);\r\n\t\tposition: sticky;\r\n\t\ttop: 10px;\r\n\t\tz-index: 20;\r\n\t}\r\n\r\n\t.quick-actions {\r\n\t\tmargin-top: 8px;\r\n\t\tdisplay: flex;\r\n\t\tflex-wrap: wrap;\r\n\t\tgap: 8px;\r\n\t}\r\n\r\n\t.toast {\r\n\t\tmargin: 10px 0 14px;\r\n\t\tpadding: 10px 12px;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground: #e7f3ff;\r\n\t\tborder: 1px solid #bcdcff;\r\n\t\tcolor: #0b3d69;\r\n\t}\r\n\r\n\t.muted {\r\n\t\tcolor: #666;\r\n\t\tfont-weight: 400;\r\n\t}\r\n\r\n\t.btn {\r\n\t\tpadding: 8px 12px;\r\n\t\tborder: 1px solid #ccc;\r\n\t\tbackground: white;\r\n\t\tborder-radius: 8px;\r\n\t\tcursor: pointer;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\r\n\t.btn.small {\r\n\t\tpadding: 6px 10px;\r\n\t\tborder-radius: 6px;\r\n\t\tfont-size: 12px;\r\n\t}\r\n\r\n\t.link {\r\n\t\tcolor: #14695b;\r\n\t\ttext-decoration: underline;\r\n\t\tfont-size: 12px;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\r\n\t.empty {\r\n\t\tpadding: 18px 16px;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground: #f8f9fa;\r\n\t\tborder: 1px solid #e0e0e0;\r\n\t\tcolor: #666;\r\n\t}\r\n\r\n\t@media (max-width: 1400px) {\r\n\t\t.tools-grid {\r\n\t\t\tcolumn-count: 2;\r\n\t\t}\r\n\t}\r\n\r\n\t@media (max-width: 1100px) {\r\n\t\t.tools-grid {\r\n\t\t\tcolumn-count: 1;\r\n\t\t}\r\n\r\n\t\t.widgets-grid {\r\n\t\t\tcolumn-count: 1;\r\n\t\t}\r\n\t}\r\n</style>\r\n\r\n","<script>\r\n  import { onMount, onDestroy, createEventDispatcher, tick } from 'svelte';\r\n  const dispatch = createEventDispatcher();\r\n  const base = '/studentplayground/api/admin/teacher-onboarding/';\r\n  let firstName = '', lastName = '', email = '', calendarMode = 'new', calendarId = '', adminEmail = '';\r\n  let sendEmail = false, busy = false, error = '', notice = '', available = false;\r\n  let jobs = [], selected = null, message = '', expiry = '', search = '', page = 1, hasMore = false;\r\n  let confirmed = false, recoveredId = '', acknowledgeUnknown = false;\r\n  let pollTimer, destroyed = false, pollBusy = false;\r\n  let createRequest = null;\r\n  let preview = null, previewDocument = '', previewDialog;\r\n  const announced = new Set();\r\n  const pendingActions = new Map();\r\n\r\n  function identity() { return crypto.randomUUID(); }\r\n  function closePreview() {\r\n    previewDialog?.close();\r\n    preview = null; previewDocument = '';\r\n  }\r\n  function browserDocument(data) {\r\n    const doc = new DOMParser().parseFromString(data.html_body, 'text/html');\r\n    doc.querySelectorAll('script,iframe,object,embed,form,base,link,meta[http-equiv]').forEach(node => node.remove());\r\n    doc.querySelectorAll('*').forEach(node => {\r\n      for (const attribute of [...node.attributes]) {\r\n        if (attribute.name.startsWith('on') || ['href', 'src', 'srcset', 'action'].includes(attribute.name)) node.removeAttribute(attribute.name);\r\n      }\r\n    });\r\n    doc.querySelectorAll('img').forEach(node => { if (data.logo_data_url?.startsWith('data:image/png;base64,')) node.setAttribute('src', data.logo_data_url); });\r\n    const policy = doc.createElement('meta');\r\n    policy.httpEquiv = 'Content-Security-Policy';\r\n    policy.content = \"default-src 'none'; img-src data:; style-src 'unsafe-inline'; form-action 'none'; base-uri 'none'\";\r\n    doc.head.prepend(policy);\r\n    return '<!DOCTYPE html>' + doc.documentElement.outerHTML;\r\n  }\r\n  async function openEmailPreview() {\r\n    if (!selected || busy) return;\r\n    const id = selected.id;\r\n    busy = true; error = ''; notice = '';\r\n    try {\r\n      const data = await api(`${id}/email-preview/`, {}, identity());\r\n      if (destroyed || selected?.id !== id) return;\r\n      previewDocument = browserDocument(data); preview = data;\r\n      await tick();\r\n      previewDialog?.showModal();\r\n    } catch (e) { error = e.message; }\r\n    finally { busy = false; }\r\n  }\r\n  function openTeacher(event) {\r\n    if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey || event.button !== 0) return;\r\n    event.preventDefault();\r\n    dispatch('openTeacher', selected);\r\n  }\r\n  async function api(path, body, key) {\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) throw new Error('Please sign in as an administrator.');\r\n    const controller = new AbortController();\r\n    const timeout = setTimeout(() => controller.abort(), 15000);\r\n    try {\r\n      const response = await fetch(base + path, { method: body === undefined ? 'GET' : 'POST',\r\n        headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json', ...(key ? { 'Idempotency-Key': key } : {}) },\r\n        ...(body === undefined ? {} : { body: JSON.stringify(body) }), signal: controller.signal, cache: 'no-store' });\r\n      const data = await response.json().catch(() => ({}));\r\n      if (!response.ok) {\r\n        const fields = Object.entries(data.fields || {}).map(([field, errors]) => `${field}: ${[].concat(errors).join(' ')}`).join(' ');\r\n        throw new Error(fields || data.detail || data.explanation || data.error || 'Request failed. Please retry.');\r\n      }\r\n      return data;\r\n    } finally { clearTimeout(timeout); }\r\n  }\r\n  function choose(job) {\r\n    if (selected?.id !== job.id) { closePreview(); message = ''; expiry = ''; confirmed = false; acknowledgeUnknown = false; }\r\n    selected = job;\r\n    if (job.teacher_id && !announced.has(job.id)) {\r\n      announced.add(job.id);\r\n      dispatch('created', job);\r\n    }\r\n    if (job.status === 'queued' || job.status === 'running') schedulePoll();\r\n  }\r\n  function schedulePoll() {\r\n    clearTimeout(pollTimer);\r\n    if (!destroyed) pollTimer = setTimeout(poll, 2000);\r\n  }\r\n  async function poll() {\r\n    if (!selected || destroyed || pollBusy) return;\r\n    pollBusy = true;\r\n    const id = selected.id;\r\n    try { const job = await api(`${id}/`); if (!destroyed && selected?.id === id) choose(job); }\r\n    catch (e) { error = e.message; schedulePoll(); }\r\n    finally { pollBusy = false; }\r\n  }\r\n  async function history(reset = true) {\r\n    error = '';\r\n    try {\r\n      const nextPage = reset ? 1 : page + 1;\r\n      const data = await api(`?q=${encodeURIComponent(search)}&page=${nextPage}`);\r\n      if (destroyed) return;\r\n      available = data.enabled;\r\n      jobs = reset ? data.results : [...jobs, ...data.results]; page = nextPage; hasMore = data.has_more;\r\n      if (reset && !selected) {\r\n        const pending = jobs.find(j => j.status === 'queued' || j.status === 'running');\r\n        if (pending) choose(pending);\r\n      }\r\n    } catch (e) { error = e.message; }\r\n  }\r\n  async function submit() {\r\n    busy = true; error = ''; notice = '';\r\n    const body = { first_name: firstName, last_name: lastName, email, calendar_mode: calendarMode,\r\n      calendar_id: calendarMode === 'existing' ? calendarId : '', admin_calendar_email: adminEmail, send_email: sendEmail };\r\n    const fingerprint = JSON.stringify(body);\r\n    if (!createRequest || createRequest.fingerprint !== fingerprint) createRequest = { fingerprint, key: identity() };\r\n    try {\r\n      sessionStorage.setItem('teacherOnboarding:pending', JSON.stringify(createRequest));\r\n      choose(await api('', body, createRequest.key));\r\n      createRequest = null; sessionStorage.removeItem('teacherOnboarding:pending');\r\n      notice = 'Teacher onboarding queued. Progress is saved if you leave this page.';\r\n      await history();\r\n    } catch (e) { error = e.name === 'AbortError' ? 'Request timed out. Retry this submission to check its saved result.' : e.message; }\r\n    finally { busy = false; }\r\n  }\r\n  async function action(name, body = {}) {\r\n    if (!selected) return;\r\n    busy = true; error = ''; notice = '';\r\n    const operation = `${selected.id}/${name}/${JSON.stringify(body)}`;\r\n    if (!pendingActions.has(operation)) pendingActions.set(operation, identity());\r\n    try {\r\n      const data = await api(`${selected.id}/${name}/`, body, pendingActions.get(operation));\r\n      pendingActions.delete(operation);\r\n      if (name === 'message') {\r\n        message = data.message; expiry = data.expires_at;\r\n        try { await navigator.clipboard.writeText(message); notice = 'Message copied.'; }\r\n        catch { notice = 'Select and copy the message below. Clipboard access is unavailable.'; }\r\n      } else { if (name === 'send-email') closePreview(); choose(data); await history(); }\r\n    } catch (e) { error = e.message; }\r\n    finally { busy = false; }\r\n  }\r\n  onMount(() => {\r\n    try { createRequest = JSON.parse(sessionStorage.getItem('teacherOnboarding:pending') || 'null'); } catch { /* ignore invalid local state */ }\r\n    history();\r\n  });\r\n  onDestroy(() => { destroyed = true; clearTimeout(pollTimer); message = ''; preview = null; previewDocument = ''; });\r\n</script>\r\n\r\n<section class=\"onboarding\" aria-label=\"Create teacher\">\r\n  <h3>Create teacher</h3>\r\n  {#if !available}<p>Teacher creation is currently disabled. Saved onboarding history remains available.</p>{/if}\r\n  <form on:submit|preventDefault={submit}>\r\n    <div class=\"fields\">\r\n      <label>Teacher first name<input bind:value={firstName} required maxlength=\"150\" autocomplete=\"given-name\" /></label>\r\n      <label>Teacher surname<input bind:value={lastName} required maxlength=\"150\" autocomplete=\"family-name\" /></label>\r\n      <label>Teacher email<input type=\"email\" bind:value={email} required maxlength=\"254\" autocomplete=\"email\" /></label>\r\n    </div>\r\n    <fieldset><legend>Lesson calendar</legend>\r\n      <label class=\"option\"><input type=\"radio\" bind:group={calendarMode} value=\"new\" />Create new calendar</label>\r\n      <label class=\"option\"><input type=\"radio\" bind:group={calendarMode} value=\"existing\" />Connect existing calendar</label>\r\n      {#if calendarMode === 'existing'}\r\n        <label>Existing Google Calendar ID<input bind:value={calendarId} required maxlength=\"255\" /></label>\r\n        <p>The service account needs permission to edit events. The calendar name must end with “ Tutory”.</p>\r\n      {:else}\r\n        <p>Calendar: {firstName || 'First name'} {lastName || 'Surname'} Tutory · Europe/Vilnius</p>\r\n        <p>New calendars are automatically shared with erika.tutory@gmail.com and nojusmar@gmail.com as event editors.</p>\r\n      {/if}\r\n      <label>Administrator Google email (optional)<input type=\"email\" bind:value={adminEmail} maxlength=\"254\" /></label>\r\n      <p>The teacher and optional administrator can edit calendar events.</p>\r\n    </fieldset>\r\n    <label class=\"option\"><input type=\"checkbox\" bind:checked={sendEmail} />Send onboarding email</label>\r\n    <p>The personalized message is also available to copy. Google may send a separate calendar-sharing invitation.</p>\r\n    <button class=\"primary\" type=\"submit\" disabled={busy || !available}>{busy ? 'Working…' : 'Create teacher account'}</button>\r\n  </form>\r\n  {#if error}<p role=\"alert\" class=\"error\">{error}</p>{/if}\r\n  {#if notice}<p role=\"status\" class=\"notice\">{notice}</p>{/if}\r\n  {#if selected}\r\n    <section class=\"progress\" aria-label=\"Teacher onboarding progress\">\r\n      <h4>{selected.first_name} {selected.last_name}</h4>\r\n      <p>{selected.email} · {selected.status.replaceAll('_', ' ')}</p>\r\n      <dl>\r\n        <div><dt>Calendar</dt><dd>{selected.calendar_status}</dd></div>\r\n        <div><dt>Sharing</dt><dd>{selected.sharing_status}</dd></div>\r\n        <div><dt>Account</dt><dd>{selected.account_status}</dd></div>\r\n        <div><dt>Email</dt><dd>{selected.email_status === 'sent' ? 'Sent (accepted by mail server)' : selected.email_status.replaceAll('_', ' ')}</dd></div>\r\n      </dl>\r\n      {#if selected.username}<p>Username: <strong>{selected.username}</strong></p>{/if}\r\n      {#if selected.calendar_name}<p>{selected.calendar_name}</p>{/if}\r\n      {#if selected.calendar_id}<p class=\"calendar-id\">{selected.calendar_id}</p>{/if}\r\n      {#if selected.explanation}<p>{selected.explanation}</p>{/if}\r\n      {#if selected.credential_status === 'selected'}<p>Password already selected. Use Forgot password for account recovery.</p>{/if}\r\n      <div class=\"actions\">\r\n        {#if selected.teacher_id}<a href={`#/admin/teachers?teacherId=${selected.teacher_id}`} on:click={openTeacher}>Open teacher</a>{/if}\r\n        {#if selected.allowed_actions.includes('retry')}<button disabled={busy} on:click={() => action('retry')}>Retry failed step</button>{/if}\r\n        {#if selected.allowed_actions.includes('message')}\r\n          <button disabled={busy} on:click={() => action('message')}>Copy message</button>\r\n          {#if error.includes('expired')}<button disabled={busy} on:click={() => action('message', { renew: true })}>Generate new link</button>{/if}\r\n        {/if}\r\n        {#if selected.allowed_actions.includes('send-email')}\r\n          <button disabled={busy} on:click={openEmailPreview}>Send email</button>\r\n        {/if}\r\n      </div>\r\n      {#if selected.allowed_actions.includes('confirm-sharing')}\r\n        <label class=\"option\"><input type=\"checkbox\" bind:checked={confirmed} />I confirmed calendar sharing in Google Calendar</label>\r\n        <button disabled={busy || !confirmed} on:click={() => action('confirm-sharing', { confirmed: true })}>Confirm sharing</button>\r\n      {/if}\r\n      {#if selected.allowed_actions.includes('recover-calendar')}\r\n        <label>Created calendar ID<input bind:value={recoveredId} /></label>\r\n        <button disabled={busy || !recoveredId.trim()} on:click={() => action('recover-calendar', { calendar_id: recoveredId })}>Recover calendar</button>\r\n      {/if}\r\n      {#if message}\r\n        <p>Link expires: {new Date(expiry).toLocaleString('lt-LT', { timeZone: 'Europe/Vilnius' })} (Lithuanian time)</p>\r\n        <label>Onboarding message<textarea readonly rows=\"12\" value={message}></textarea></label>\r\n      {/if}\r\n    </section>\r\n  {/if}\r\n  <section class=\"history\" aria-label=\"Teacher onboarding history\">\r\n    <h4>Recent teacher onboarding</h4>\r\n    <form class=\"actions\" on:submit|preventDefault={() => history()}>\r\n      <label>Search teacher onboarding<input type=\"search\" bind:value={search} maxlength=\"150\" /></label>\r\n      <button type=\"submit\">Refresh onboarding history</button>\r\n    </form>\r\n    {#each jobs as job (job.id)}\r\n      <button class=\"history-job\" on:click={() => choose(job)}>{job.first_name} {job.last_name} · {job.email} · {job.status.replaceAll('_', ' ')}</button>\r\n    {:else}<p>No matching onboarding records.</p>{/each}\r\n    {#if hasMore}<button on:click={() => history(false)}>Load more onboarding records</button>{/if}\r\n  </section>\r\n</section>\r\n\r\n{#if preview}\r\n  <dialog bind:this={previewDialog} aria-label=\"Teacher onboarding email preview\" on:close={closePreview}>\r\n    <h3>Teacher onboarding email preview</h3>\r\n    <dl>\r\n      <div><dt>To</dt><dd>{preview.recipient}</dd></div>\r\n      <div><dt>From</dt><dd>{preview.from_email}</dd></div>\r\n      <div><dt>Subject</dt><dd>{preview.subject}</dd></div>\r\n      <div><dt>Link expires</dt><dd>{new Date(preview.expires_at).toLocaleString('lt-LT', { timeZone: 'Europe/Vilnius' })} (Lithuanian time)</dd></div>\r\n    </dl>\r\n    <iframe title=\"Email body preview\" sandbox=\"\" referrerpolicy=\"no-referrer\" srcdoc={previewDocument}></iframe>\r\n    <p>This is the rendered email. Links are disabled in this preview. Nothing is sent until you confirm.</p>\r\n    {#if selected?.email_status === 'unknown'}<label class=\"option\"><input type=\"checkbox\" bind:checked={acknowledgeUnknown} />I understand the previous email may already have been sent</label>{/if}\r\n    {#if error}<p role=\"alert\" class=\"error\">{error}</p>{/if}\r\n    <div class=\"actions\">\r\n      <button disabled={busy || (selected?.email_status === 'unknown' && !acknowledgeUnknown)} class=\"primary\" on:click={() => action('send-email', { acknowledge_unknown: acknowledgeUnknown, preview_fingerprint: preview.preview_fingerprint })}>Confirm send email</button>\r\n      <button disabled={busy} on:click={closePreview}>Cancel</button>\r\n    </div>\r\n  </dialog>\r\n{/if}\r\n\r\n<style>\r\n  dialog { box-sizing: border-box; width: min(850px, 96vw); max-height: 92dvh; overflow: auto; border: 1px solid #b9c9c2; border-radius: 8px; padding: 1.2rem; color: #263b35; text-align: left; }\r\n  dialog::backdrop { background: #0008; }\r\n  iframe { width: 100%; height: 50dvh; border: 1px solid #d7e1dc; background: white; }\r\n  .onboarding { color: #263b35; text-align: left; }\r\n  h3, h4 { margin: 0 0 1rem; }\r\n  .fields { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr)); gap: 1rem; }\r\n  label { display: flex; flex-direction: column; gap: .4rem; margin-bottom: .9rem; font-weight: 600; }\r\n  input, textarea { box-sizing: border-box; max-width: 100%; width: 100%; border: 1px solid #b9c9c2; padding: .65rem; border-radius: 5px; font: inherit; }\r\n  .option { flex-direction: row; align-items: center; gap: .6rem; }\r\n  .option input { width: auto; flex-shrink: 0; }\r\n  fieldset { border: 1px solid #d7e1dc; border-radius: 6px; margin: .8rem 0 1rem; min-width: 0; padding: 1rem; }\r\n  p { font-size: .9rem; line-height: 1.5; }\r\n  button, a { cursor: pointer; font: inherit; padding: .6rem .8rem; border-radius: 5px; border: 1px solid #a5bcb0; background: #f5f8f6; color: #164d39; }\r\n  .primary { background: #14695b; color: white; }\r\n  button:disabled { opacity: .5; cursor: default; }\r\n  .actions { display: flex; flex-wrap: wrap; gap: .65rem; align-items: center; margin: .8rem 0; }\r\n  .progress, .history { border-top: 1px solid #d7e1dc; padding-top: 1.2rem; margin-top: 1.5rem; }\r\n  dl { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .7rem; }\r\n  dt { font-weight: 600; } dd { margin: .2rem 0; overflow-wrap: anywhere; }\r\n  .calendar-id { overflow-wrap: anywhere; }\r\n  .history-job { display: block; width: 100%; text-align: left; margin-top: .5rem; overflow-wrap: anywhere; }\r\n  .error { color: #a42525; background: #fff1f1; padding: .7rem; }\r\n  .notice { color: #155237; background: #edf7f0; padding: .7rem; }\r\n  textarea { resize: vertical; font-weight: normal; }\r\n</style>\r\n","// Teacher normalization helpers used by the Admin Teachers dashboard flow.\r\n// Keep this module small and dependency-free so other pages aren't affected.\r\n\r\nexport function normalizeTeacher(raw) {\r\n  if (!raw) return null;\r\n\r\n  const id = raw.id ?? raw.teacher_id ?? null;\r\n  const first = (raw.first_name ?? '').trim();\r\n  const last = (raw.last_name ?? '').trim();\r\n  const fallbackName = `${first} ${last}`.trim();\r\n\r\n  const name = (raw.name ?? fallbackName ?? '').trim();\r\n\r\n  return {\r\n    ...raw,\r\n    id,\r\n    name: name || (id != null ? `ID ${id}` : ''),\r\n    first_name: raw.first_name ?? (name && !raw.first_name ? name.split(' ')[0] : raw.first_name),\r\n    last_name: raw.last_name ?? raw.last_name,\r\n    email: raw.email ?? raw.email,\r\n    username: raw.username ?? raw.username,\r\n    phone_number: raw.phone_number ?? raw.phone ?? raw.phoneNumber,\r\n    // Normalize google calendar id naming variations\r\n    google_calendar_id: raw.google_calendar_id ?? raw.googleCalendarId ?? raw.google_calendar ?? raw.googleCalendarID,\r\n  };\r\n}\r\n\r\nexport function mergeTeacher(base, incoming) {\r\n  if (!base) return normalizeTeacher(incoming);\r\n  if (!incoming) return normalizeTeacher(base);\r\n  const b = normalizeTeacher(base) || {};\r\n  const i = normalizeTeacher(incoming) || {};\r\n\r\n  // Prefer incoming values when present, but keep any extra metadata from base.\r\n  return {\r\n    ...b,\r\n    ...i,\r\n    id: i.id ?? b.id,\r\n    name: (i.name || b.name || '').trim(),\r\n  };\r\n}\r\n\r\nexport function teacherDisplayName(t) {\r\n  const nt = normalizeTeacher(t);\r\n  return nt?.name || '';\r\n}\r\n\r\n","<script>\r\n\timport { createEventDispatcher, onMount } from 'svelte';\r\n\timport { normalizeTeacher } from './teacherNormalize.js';\r\n\timport { getApiBase } from './apiBase.js';\r\n\r\n\texport let selectedTeacher = null;\r\n\texport let placeholder = 'Search teachers by name or email...';\r\n\r\n\tconst dispatch = createEventDispatcher();\r\n\r\n\tlet teachers = [];\r\n\tlet teachersLoaded = false;\r\n\tlet loadError = '';\r\n\tlet isLoadingTeachers = false;\r\n\r\n\tlet searchTerm = '';\r\n\tlet searchResults = [];\r\n\tlet isSearching = false;\r\n\tlet debounceTimer = null;\r\n\r\n\tasync function loadTeachersOnce() {\r\n\t\tif (teachersLoaded || isLoadingTeachers) return;\r\n\t\tisLoadingTeachers = true;\r\n\t\tloadError = '';\r\n\t\tconst token = localStorage.getItem('jwtToken');\r\n\t\tif (!token) {\r\n\t\t\tloadError = 'JWT token not found. Please log in.';\r\n\t\t\tisLoadingTeachers = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tconst apiBase = getApiBase();\r\n\t\t\tconst response = await fetch(`${apiBase}/studentplayground/api/teachers-list/?include_inactive=1`, {\r\n\t\t\t\tmethod: 'GET',\r\n\t\t\t\theaders: {\r\n\t\t\t\t\tAuthorization: `Bearer ${token}`,\r\n\t\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t},\r\n\t\t\t});\r\n\r\n\t\t\tif (!response.ok) {\r\n\t\t\t\tconst data = await response.json().catch(() => ({}));\r\n\t\t\t\tthrow new Error(data.message || `Failed to load teachers (${response.status})`);\r\n\t\t\t}\r\n\r\n\t\t\tconst data = await response.json();\r\n\t\t\tteachers = data?.teachers || [];\r\n\t\t\tteachersLoaded = true;\r\n\t\t} catch (e) {\r\n\t\t\tloadError = e?.message || 'Failed to load teachers';\r\n\t\t\tteachers = [];\r\n\t\t\tteachersLoaded = false;\r\n\t\t} finally {\r\n\t\t\tisLoadingTeachers = false;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction filterTeachers(term) {\r\n\t\tconst q = term.toLowerCase();\r\n\t\treturn teachers\r\n\t\t\t.map(normalizeTeacher)\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.filter(t => {\r\n\t\t\t\tconst name = (t.name || '').toLowerCase();\r\n\t\t\t\tconst email = (t.email || '').toLowerCase();\r\n\t\t\t\treturn name.includes(q) || email.includes(q) || String(t.id) === term;\r\n\t\t\t})\r\n\t\t\t.slice(0, 20);\r\n\t}\r\n\r\n\tfunction debouncedSearch(term) {\r\n\t\tif (debounceTimer) clearTimeout(debounceTimer);\r\n\t\tdebounceTimer = setTimeout(async () => {\r\n\t\t\tawait searchTeachers(term);\r\n\t\t}, 200);\r\n\t}\r\n\r\n\tasync function searchTeachers(term) {\r\n\t\tisSearching = true;\r\n\t\tawait loadTeachersOnce();\r\n\t\tif (!teachersLoaded) {\r\n\t\t\tsearchResults = [];\r\n\t\t\tisSearching = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsearchResults = filterTeachers(term);\r\n\t\tisSearching = false;\r\n\t}\r\n\r\n\tfunction selectTeacher(teacher) {\r\n\t\tdispatch('teacherSelected', teacher);\r\n\t\tsearchResults = [];\r\n\t}\r\n\r\n\tfunction clearSelection() {\r\n\t\tdispatch('teacherCleared');\r\n\t}\r\n\r\n\t// Exposed method for parent: resolve a teacher by ID\r\n\texport async function resolveTeacherById(id) {\r\n\t\tconst idNum = parseInt(String(id), 10);\r\n\t\tif (Number.isNaN(idNum)) return null;\r\n\t\tawait loadTeachersOnce();\r\n\t\tif (!teachersLoaded) return null;\r\n\t\treturn normalizeTeacher(teachers.find(t => t.id === idNum)) || null;\r\n\t}\r\n\r\n\texport async function refreshTeachers() {\r\n\t\tteachersLoaded = false;\r\n\t\tawait loadTeachersOnce();\r\n\t}\r\n\r\n\t$: if (!selectedTeacher && searchTerm && searchTerm.trim().length >= 2) {\r\n\t\tdebouncedSearch(searchTerm.trim());\r\n\t} else if (!selectedTeacher && (!searchTerm || searchTerm.trim().length < 2)) {\r\n\t\tif (debounceTimer) clearTimeout(debounceTimer);\r\n\t\tdebounceTimer = null;\r\n\t\tsearchResults = [];\r\n\t}\r\n\r\n\tonMount(() => {\r\n\t\t// Preload so deep-link resolution is snappy.\r\n\t\tloadTeachersOnce();\r\n\t});\r\n</script>\r\n\r\n<div class=\"teacher-search\">\r\n\t{#if loadError}\r\n\t\t<div class=\"error\">{loadError}</div>\r\n\t{/if}\r\n\r\n\t<div class=\"search-row\">\r\n\t\t<input\r\n\t\t\tclass=\"search-input\"\r\n\t\t\ttype=\"text\"\r\n\t\t\tbind:value={searchTerm}\r\n\t\t\tplaceholder={placeholder}\r\n\t\t\tdisabled={!!selectedTeacher}\r\n\t\t/>\r\n\t\t{#if isSearching || isLoadingTeachers}\r\n\t\t\t<div class=\"spinner\" aria-label=\"Searching\">⌛</div>\r\n\t\t{/if}\r\n\t\t{#if selectedTeacher}\r\n\t\t\t<button type=\"button\" class=\"change-btn\" on:click={clearSelection}>Change</button>\r\n\t\t{/if}\r\n\t</div>\r\n\r\n\t{#if selectedTeacher}\r\n\t\t<div class=\"selected-card\">\r\n\t\t\t<div class=\"name\">{selectedTeacher.name || `${selectedTeacher.first_name || ''} ${selectedTeacher.last_name || ''}`.trim()}</div>\r\n\t\t\t{#if selectedTeacher.email}\r\n\t\t\t\t<div class=\"meta\">{selectedTeacher.email}</div>\r\n\t\t\t{/if}\r\n\t\t\t<div class=\"meta\">ID: {selectedTeacher.id}</div>\r\n\t\t</div>\r\n\t{/if}\r\n\r\n\t{#if searchResults.length > 0 && !selectedTeacher}\r\n\t\t<div class=\"results\" role=\"listbox\" aria-label=\"Teacher search results\">\r\n\t\t\t{#each searchResults as teacher}\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"result\"\r\n\t\t\t\t\trole=\"option\"\r\n\t\t\t\t\ttabindex=\"0\"\r\n\t\t\t\t\taria-selected=\"false\"\r\n\t\t\t\t\ton:click={() => selectTeacher(teacher)}\r\n\t\t\t\t\ton:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && selectTeacher(teacher)}\r\n\t\t\t\t>\r\n\t\t\t\t\t<div class=\"name\">{teacher.name}</div>\r\n\t\t\t\t\t<div class=\"meta\">{teacher.email || ''}</div>\r\n\t\t\t\t</div>\r\n\t\t\t{/each}\r\n\t\t</div>\r\n\t{:else if !selectedTeacher && !isSearching && !isLoadingTeachers && searchTerm && searchTerm.trim().length >= 2}\r\n\t\t<div class=\"no-results\">No teachers found.</div>\r\n\t{/if}\r\n</div>\r\n\r\n<style>\r\n\t.teacher-search {\r\n\t\tposition: relative;\r\n\t\twidth: 100%;\r\n\t}\r\n\r\n\t.search-row {\r\n\t\tdisplay: flex;\r\n\t\tgap: 10px;\r\n\t\talign-items: center;\r\n\t}\r\n\r\n\t.search-input {\r\n\t\tflex: 1;\r\n\t\twidth: 100%;\r\n\t\tpadding: 12px 14px;\r\n\t\tborder: 1px solid #ccc;\r\n\t\tborder-radius: 8px;\r\n\t\tfont-size: 14px;\r\n\t}\r\n\r\n\t.search-input:disabled {\r\n\t\tbackground: #f7f7f7;\r\n\t\tcursor: not-allowed;\r\n\t}\r\n\r\n\t.spinner {\r\n\t\tfont-size: 12px;\r\n\t\tcolor: #666;\r\n\t}\r\n\r\n\t.change-btn {\r\n\t\tpadding: 10px 14px;\r\n\t\tborder: 1px solid #ccc;\r\n\t\tbackground: white;\r\n\t\tborder-radius: 8px;\r\n\t\tcursor: pointer;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\r\n\t.selected-card {\r\n\t\tmargin-top: 12px;\r\n\t\tpadding: 12px 14px;\r\n\t\tborder-radius: 8px;\r\n\t\tborder: 1px solid #bcdcff;\r\n\t\tbackground: #e7f3ff;\r\n\t}\r\n\r\n\t.results {\r\n\t\tmargin-top: 8px;\r\n\t\tborder: 1px solid #e0e0e0;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground: white;\r\n\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\r\n\t\tmax-height: 320px;\r\n\t\toverflow: auto;\r\n\t}\r\n\r\n\t.result {\r\n\t\tpadding: 10px 12px;\r\n\t\tborder-bottom: 1px solid #f0f0f0;\r\n\t\tcursor: pointer;\r\n\t\toutline: none;\r\n\t}\r\n\r\n\t.result:hover,\r\n\t.result:focus {\r\n\t\tbackground: #f8f9fa;\r\n\t}\r\n\r\n\t.result:last-child {\r\n\t\tborder-bottom: none;\r\n\t}\r\n\r\n\t.name {\r\n\t\tfont-weight: 600;\r\n\t\tcolor: #222;\r\n\t}\r\n\r\n\t.meta {\r\n\t\tcolor: #666;\r\n\t\tfont-size: 12px;\r\n\t\tmargin-top: 2px;\r\n\t}\r\n\r\n\t.no-results {\r\n\t\tmargin-top: 8px;\r\n\t\tpadding: 12px 14px;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground: #f8f9fa;\r\n\t\tborder: 1px solid #e0e0e0;\r\n\t\tcolor: #666;\r\n\t}\r\n\r\n\t.error {\r\n\t\tmargin-bottom: 10px;\r\n\t\tpadding: 10px 12px;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground: #ffebee;\r\n\t\tborder: 1px solid #f5c6cb;\r\n\t\tcolor: #721c24;\r\n\t}\r\n</style>\r\n\r\n","<script>\r\n\timport NavBarReusable from './NavbarReusable.svelte';\r\n\timport { onMount, tick } from 'svelte';\r\n\r\n\t// Tools (no specific teacher required)\r\n\timport TeacherFinderComponent from './TeacherFinderComponent.svelte';\r\n\timport AdminCreateTeacherComponent from './AdminCreateTeacherComponent.svelte';\r\n\timport TeacherAvailabilityCapacityComponent from './TeacherAvailabilityCapacityComponent.svelte';\r\n\timport RefreshDatabaseButtonComponent from './RefreshDatabaseButtonComponent.svelte';\r\n\timport ClassDidNotHappenComponent from './ClassDidNotHappenComponent.svelte';\r\n\timport TeacherInvoiceComponent from './TeacherInvoiceComponent.svelte';\r\n\r\n\t// Teacher search + widgets (require selected teacher)\r\n\timport TeacherSearchComponent from './TeacherSearchComponent.svelte';\r\n\timport TeacherPerformanceRating from './TeacherPerformanceRating.svelte';\r\n\timport TeacherInfoComponent from './TeacherInfoComponent.svelte';\r\n\timport TeacherPricingModifierComponent from './TeacherPricingModifierComponent.svelte';\r\n\timport { normalizeTeacher, mergeTeacher, teacherDisplayName } from './teacherNormalize.js';\r\n\r\n\tlet selectedTeacher = null;\r\n\tlet teacherSearchRef = null;\r\n\tlet pendingHashTeacherId = null;\r\n\tlet lastHydratedHashTeacherId = null;\r\n\tlet isHydratingFromHash = false;\r\n\tlet isHydratingSelectedTeacher = false;\r\n\r\n\tlet performanceRefresh = 0;\r\n\tlet infoRefresh = 0;\r\n\tlet pricingRefresh = 0;\r\n\r\n\tconst lastTeacherKey = 'adminTeachers:lastTeacher';\r\n\tconst collapsedKey = 'adminTeachers:collapsed';\r\n\tconst toolsCollapsedKey = 'adminTeachers:collapsedTools';\r\n\tconst showToolsKey = 'adminTeachers:showTools';\r\n\r\n\tlet showAdminTools = true;\r\n\r\n\tlet collapsed = {\r\n\t\tperformance: false,\r\n\t\tinfo: true,\r\n\t\tpricing: true,\r\n\t};\r\n\r\n\tconst widgetOrder = /** @type {const} */ (['performance', 'info', 'pricing']);\r\n\r\n\tfunction widgetTitle(key) {\r\n\t\tswitch (key) {\r\n\t\t\tcase 'performance':\r\n\t\t\t\treturn 'Teacher Performance';\r\n\t\t\tcase 'info':\r\n\t\t\t\treturn 'Teacher Information';\r\n\t\t\tcase 'pricing':\r\n\t\t\t\treturn 'Teacher Pricing';\r\n\t\t\tdefault:\r\n\t\t\t\treturn key;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction normalizeCollapsedState() {\r\n\t\t// Ensure collapsed has all expected keys (no single-open enforcement).\r\n\t\tcollapsed = {\r\n\t\t\tperformance: !!collapsed?.performance,\r\n\t\t\tinfo: !!collapsed?.info,\r\n\t\t\tpricing: !!collapsed?.pricing,\r\n\t\t};\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\t$: openWidgetKeys = widgetOrder.filter(k => !collapsed[k]);\r\n\r\n\tlet toolsCollapsed = {\r\n\t\tcreateTeacher: false,\r\n\t\tfindTeachers: false,\r\n\t\tteacherCapacity: false,\r\n\t\trefreshDb: false,\r\n\t\tclassIncidents: false,\r\n\t\tteacherInvoices: false,\r\n\t};\r\n\r\n\tlet toast = '';\r\n\tlet toastTimer = null;\r\n\r\n\tfunction showToast(message) {\r\n\t\ttoast = message;\r\n\t\tif (toastTimer) clearTimeout(toastTimer);\r\n\t\ttoastTimer = setTimeout(() => {\r\n\t\t\ttoast = '';\r\n\t\t}, 1200);\r\n\t}\r\n\r\n\tfunction teacherLabel(teacher) {\r\n\t\treturn teacherDisplayName(teacher);\r\n\t}\r\n\r\n\tfunction teacherHasUsefulMeta(teacher) {\r\n\t\tif (!teacher) return false;\r\n\t\treturn !!(teacher.name || teacher.email || teacher.username || teacher.phone_number);\r\n\t}\r\n\r\n\tfunction getHashParts() {\r\n\t\tconst hash = window.location.hash || '#/admin/teachers';\r\n\t\tconst qIndex = hash.indexOf('?');\r\n\t\tif (qIndex === -1) return { path: hash, params: new URLSearchParams() };\r\n\t\treturn { path: hash.slice(0, qIndex), params: new URLSearchParams(hash.slice(qIndex + 1)) };\r\n\t}\r\n\r\n\tfunction getHashQueryParam(name) {\r\n\t\tconst { params } = getHashParts();\r\n\t\treturn params.get(name);\r\n\t}\r\n\r\n\tfunction getHashTeacherId() {\r\n\t\treturn getHashQueryParam('teacherId');\r\n\t}\r\n\r\n\tfunction setTeachersHashTeacherId(id) {\r\n\t\tconst { path, params } = getHashParts();\r\n\t\t// Only mutate when we're on Teachers page route\r\n\t\tif (!path.startsWith('#/admin/teachers')) return;\r\n\t\tif (id) params.set('teacherId', String(id));\r\n\t\telse params.delete('teacherId');\r\n\t\tconst nextHash = params.toString() ? `${path}?${params.toString()}` : path;\r\n\t\tif (nextHash !== window.location.hash) window.location.hash = nextHash;\r\n\t}\r\n\r\n\tfunction persistSelectedTeacher(teacher) {\r\n\t\ttry {\r\n\t\t\tif (!teacher) {\r\n\t\t\t\tlocalStorage.removeItem(lastTeacherKey);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tlocalStorage.setItem(lastTeacherKey, JSON.stringify(teacher));\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction loadCollapsedState() {\r\n\t\ttry {\r\n\t\t\tconst raw = localStorage.getItem(collapsedKey);\r\n\t\t\tif (!raw) return;\r\n\t\t\tconst parsed = JSON.parse(raw);\r\n\t\t\tif (!parsed || typeof parsed !== 'object') return;\r\n\t\t\tcollapsed = {\r\n\t\t\t\tperformance: !!parsed.performance,\r\n\t\t\t\tinfo: !!parsed.info,\r\n\t\t\t\tpricing: !!parsed.pricing,\r\n\t\t\t};\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction saveCollapsedState() {\r\n\t\ttry {\r\n\t\t\tlocalStorage.setItem(collapsedKey, JSON.stringify(collapsed));\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction openWidget(key) {\r\n\t\t// Multi-open behavior: opening a widget does not close others.\r\n\t\tcollapsed = { ...collapsed, [key]: false };\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction closeWidget(key) {\r\n\t\tif (!key) return;\r\n\t\tcollapsed = { ...collapsed, [key]: true };\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction toggleCollapsed(key) {\r\n\t\t// Multi-open behavior: toggle only this widget.\r\n\t\tcollapsed = { ...collapsed, [key]: !collapsed[key] };\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction loadToolsCollapsedState() {\r\n\t\ttry {\r\n\t\t\tconst raw = localStorage.getItem(toolsCollapsedKey);\r\n\t\t\tif (!raw) return;\r\n\t\t\tconst parsed = JSON.parse(raw);\r\n\t\t\tif (!parsed || typeof parsed !== 'object') return;\r\n\t\t\ttoolsCollapsed = {\r\n\t\t\t\tcreateTeacher: !!parsed.createTeacher,\r\n\t\t\t\tfindTeachers: !!parsed.findTeachers,\r\n\t\t\t\tteacherCapacity: !!parsed.teacherCapacity,\r\n\t\t\t\trefreshDb: !!parsed.refreshDb,\r\n\t\t\t\tclassIncidents: !!parsed.classIncidents,\r\n\t\t\t\tteacherInvoices: !!parsed.teacherInvoices,\r\n\t\t\t};\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction saveToolsCollapsedState() {\r\n\t\ttry {\r\n\t\t\tlocalStorage.setItem(toolsCollapsedKey, JSON.stringify(toolsCollapsed));\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleToolsCollapsed(key) {\r\n\t\ttoolsCollapsed = { ...toolsCollapsed, [key]: !toolsCollapsed[key] };\r\n\t\tsaveToolsCollapsedState();\r\n\t}\r\n\r\n\tfunction closeAllWidgets() {\r\n\t\tcollapsed = {\r\n\t\t\tperformance: true,\r\n\t\t\tinfo: true,\r\n\t\t\tpricing: true,\r\n\t\t};\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction loadShowToolsState() {\r\n\t\ttry {\r\n\t\t\tconst raw = localStorage.getItem(showToolsKey);\r\n\t\t\tif (raw === null) return;\r\n\t\t\tshowAdminTools = raw === 'true';\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleTools() {\r\n\t\tshowAdminTools = !showAdminTools;\r\n\t\ttry {\r\n\t\t\tlocalStorage.setItem(showToolsKey, String(showAdminTools));\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tasync function copyToClipboard(text, label) {\r\n\t\tif (!text) return;\r\n\t\ttry {\r\n\t\t\tif (navigator?.clipboard?.writeText) {\r\n\t\t\t\tawait navigator.clipboard.writeText(text);\r\n\t\t\t} else {\r\n\t\t\t\tconst textarea = document.createElement('textarea');\r\n\t\t\t\ttextarea.value = text;\r\n\t\t\t\ttextarea.style.position = 'fixed';\r\n\t\t\t\ttextarea.style.left = '-9999px';\r\n\t\t\t\tdocument.body.appendChild(textarea);\r\n\t\t\t\ttextarea.focus();\r\n\t\t\t\ttextarea.select();\r\n\t\t\t\tdocument.execCommand('copy');\r\n\t\t\t\tdocument.body.removeChild(textarea);\r\n\t\t\t}\r\n\t\t\tshowToast(`Copied ${label}`);\r\n\t\t} catch {\r\n\t\t\tshowToast('Copy failed');\r\n\t\t}\r\n\t}\r\n\r\n\tfunction jumpTo(key) {\r\n\t\t// Previous behavior was scrolling to a widget section.\r\n\t\t// With the dock model, we open the widget instead.\r\n\t\topenWidget(key);\r\n\t}\r\n\r\n\tfunction handleTeacherSelected(e) {\r\n\t\tapplySelectedTeacher(e.detail);\r\n\t}\r\n\r\n\tasync function handleTeacherCreated(e) {\r\n\t\tawait teacherSearchRef?.refreshTeachers?.();\r\n\t\tconst teacher = await teacherSearchRef?.resolveTeacherById?.(e.detail.teacher_id);\r\n\t\tif (teacher) applySelectedTeacher(teacher);\r\n\t}\r\n\r\n\tasync function handleOpenTeacher(e) {\r\n\t\tawait handleTeacherCreated(e);\r\n\t\tif (selectedTeacher?.id !== e.detail.teacher_id) {\r\n\t\t\tapplySelectedTeacher({ ...e.detail, id: e.detail.teacher_id,\r\n\t\t\t\tname: `${e.detail.first_name} ${e.detail.last_name}`.trim() });\r\n\t\t}\r\n\t\topenWidget('info');\r\n\t\tawait tick();\r\n\t\tconst panel = document.getElementById('teachers-widget-info');\r\n\t\tpanel?.focus({ preventScroll: true });\r\n\t\tpanel?.scrollIntoView({ behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth', block: 'start' });\r\n\t}\r\n\r\n\tfunction handleTeacherCleared() {\r\n\t\tselectedTeacher = null;\r\n\t\tpersistSelectedTeacher(null);\r\n\t\tsetTeachersHashTeacherId(null);\r\n\t}\r\n\r\n\tfunction applySelectedTeacher(teacher) {\r\n\t\tselectedTeacher = normalizeTeacher(teacher);\r\n\t\tperformanceRefresh += 1;\r\n\t\tinfoRefresh += 1;\r\n\t\tpricingRefresh += 1;\r\n\t\tpersistSelectedTeacher(selectedTeacher);\r\n\t\tsetTeachersHashTeacherId(selectedTeacher?.id || null);\r\n\t}\r\n\r\n\tasync function hydrateFromHash() {\r\n\t\tif (!teacherSearchRef?.resolveTeacherById) return;\r\n\t\tconst fromHash = getHashTeacherId();\r\n\t\tif (!fromHash) return;\r\n\r\n\t\tconst idNum = parseInt(fromHash, 10);\r\n\t\tif (Number.isNaN(idNum)) return;\r\n\r\n\t\t// Avoid duplicate hydrations for same hash value when nothing changed.\r\n\t\tif (lastHydratedHashTeacherId === fromHash && selectedTeacher?.id === idNum) return;\r\n\r\n\t\tisHydratingFromHash = true;\r\n\t\ttry {\r\n\t\t\tconst resolved = await teacherSearchRef.resolveTeacherById(idNum);\r\n\t\t\tif (resolved) {\r\n\t\t\t\tlastHydratedHashTeacherId = fromHash;\r\n\t\t\t\tapplySelectedTeacher(resolved);\r\n\t\t\t}\r\n\t\t} finally {\r\n\t\t\tisHydratingFromHash = false;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction restoreSelectedTeacherFromStorage() {\r\n\t\ttry {\r\n\t\t\tconst raw = localStorage.getItem(lastTeacherKey);\r\n\t\t\tif (!raw) return;\r\n\t\t\tconst parsed = JSON.parse(raw);\r\n\t\t\tif (parsed && parsed.id) {\r\n\t\t\t\tselectedTeacher = normalizeTeacher(parsed);\r\n\t\t\t\tperformanceRefresh += 1;\r\n\t\t\t\tinfoRefresh += 1;\r\n\t\t\t\tpricingRefresh += 1;\r\n\t\t\t\t// Do not write hash here; hash should be controlled by user selection or deep-link hydration.\r\n\t\t\t}\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tonMount(() => {\r\n\t\tloadShowToolsState();\r\n\t\tloadCollapsedState();\r\n\t\tnormalizeCollapsedState();\r\n\t\tloadToolsCollapsedState();\r\n\t\t// 1) Restore last selection immediately (fast UI feedback)\r\n\t\trestoreSelectedTeacherFromStorage();\r\n\r\n\t\t// 2) If URL has teacherId, prefer it (may need to wait until TeacherSearchComponent loads)\r\n\t\tconst fromHash = getHashTeacherId();\r\n\t\tif (fromHash) pendingHashTeacherId = fromHash;\r\n\r\n\t\t// 3) React to back/forward changes\r\n\t\tconst onHashChange = () => {\r\n\t\t\tconst next = getHashTeacherId();\r\n\t\t\tpendingHashTeacherId = next;\r\n\t\t\t// If cleared, clear selection to match URL.\r\n\t\t\tif (!next) handleTeacherCleared();\r\n\t\t};\r\n\t\twindow.addEventListener('hashchange', onHashChange);\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener('hashchange', onHashChange);\r\n\t\t};\r\n\t});\r\n\r\n\t// When TeacherSearchComponent is ready, hydrate from hash if needed.\r\n\t$: if (teacherSearchRef && pendingHashTeacherId && !isHydratingFromHash) {\r\n\t\t// Only hydrate if the pending value differs from current selection\r\n\t\tconst idNum = parseInt(pendingHashTeacherId, 10);\r\n\t\tif (!Number.isNaN(idNum) && selectedTeacher?.id !== idNum) {\r\n\t\t\thydrateFromHash();\r\n\t\t}\r\n\t}\r\n\r\n\t// When selection came from storage (or older cached object), hydrate missing meta fields.\r\n\t$: if (teacherSearchRef?.resolveTeacherById && selectedTeacher?.id && !teacherHasUsefulMeta(selectedTeacher) && !isHydratingSelectedTeacher) {\r\n\t\tisHydratingSelectedTeacher = true;\r\n\t\tPromise.resolve(teacherSearchRef.resolveTeacherById(selectedTeacher.id))\r\n\t\t\t.then((resolved) => {\r\n\t\t\t\tif (resolved) {\r\n\t\t\t\t\t// Merge so we keep any extra fields from storage, but prefer fresh meta.\r\n\t\t\t\t\tselectedTeacher = mergeTeacher(selectedTeacher, resolved);\r\n\t\t\t\t\tpersistSelectedTeacher(selectedTeacher);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tisHydratingSelectedTeacher = false;\r\n\t\t\t});\r\n\t}\r\n</script>\r\n\r\n<div class=\"app-container\">\r\n\t<NavBarReusable label=\"Admin - Teachers\" />\r\n\t<div class=\"calendar-launch\"><a class=\"btn\" href=\"#/admin/calendar\" target=\"_blank\" rel=\"noopener noreferrer\">Open Tutory Calendar</a></div>\r\n\r\n\t<div class=\"page\">\r\n\t\t<section class=\"section\">\r\n\t\t\t<div class=\"section-title-row\">\r\n\t\t\t\t<h2 class=\"section-title\">Admin tools</h2>\r\n\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={toggleTools}>\r\n\t\t\t\t\t{showAdminTools ? 'Hide tools' : 'Show tools'}\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t{#if showAdminTools}\r\n\t\t\t\t<div class=\"tools-grid\">\r\n\t\t\t\t\t<div class=\"card tool tool-create-teacher\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"widget-title\" aria-controls=\"teachers-tool-create-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.createTeacher} on:click={() => toggleToolsCollapsed('createTeacher')}>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.createTeacher ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\tTeacher account creation\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.createTeacher}<div class=\"widget-body\" id=\"teachers-tool-create-body\">\r\n\t\t\t\t\t\t\t<AdminCreateTeacherComponent on:created={handleTeacherCreated} on:openTeacher={handleOpenTeacher} />\r\n\t\t\t\t\t\t</div>{/if}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"card tool tool-find-teachers\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\taria-controls=\"teachers-tool-findTeachers-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.findTeachers}\r\n\t\t\t\t\t\t\t\ton:click={() => toggleToolsCollapsed('findTeachers')}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.findTeachers ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\tFind Teachers\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.findTeachers}\r\n\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"teachers-tool-findTeachers-body\">\r\n\t\t\t\t\t\t\t\t<TeacherFinderComponent />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"card tool tool-teacher-capacity\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\taria-controls=\"teachers-tool-teacherCapacity-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.teacherCapacity}\r\n\t\t\t\t\t\t\t\ton:click={() => toggleToolsCollapsed('teacherCapacity')}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.teacherCapacity ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\tAvailability Capacity\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.teacherCapacity}\r\n\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"teachers-tool-teacherCapacity-body\">\r\n\t\t\t\t\t\t\t\t<TeacherAvailabilityCapacityComponent />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"card tool tool-db-refresh\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\taria-controls=\"teachers-tool-refreshDb-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.refreshDb}\r\n\t\t\t\t\t\t\t\ton:click={() => toggleToolsCollapsed('refreshDb')}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.refreshDb ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\tDatabase refresh\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.refreshDb}\r\n\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"teachers-tool-refreshDb-body\">\r\n\t\t\t\t\t\t\t\t<RefreshDatabaseButtonComponent />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"card tool tool-incidents\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\taria-controls=\"teachers-tool-incidents-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.classIncidents}\r\n\t\t\t\t\t\t\t\ton:click={() => toggleToolsCollapsed('classIncidents')}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.classIncidents ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\tClass Incidents\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.classIncidents}\r\n\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"teachers-tool-incidents-body\">\r\n\t\t\t\t\t\t\t\t<ClassDidNotHappenComponent />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"card tool tool-invoices\">\r\n\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\taria-controls=\"teachers-tool-invoices-body\"\r\n\t\t\t\t\t\t\t\taria-expanded={!toolsCollapsed.teacherInvoices}\r\n\t\t\t\t\t\t\t\ton:click={() => toggleToolsCollapsed('teacherInvoices')}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{toolsCollapsed.teacherInvoices ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\tTeacher Invoices\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{#if !toolsCollapsed.teacherInvoices}\r\n\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"teachers-tool-invoices-body\">\r\n\t\t\t\t\t\t\t\t<TeacherInvoiceComponent />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t{/if}\r\n\t\t</section>\r\n\r\n\t\t<section class=\"section\">\r\n\t\t\t<h2 class=\"section-title\">Find teacher</h2>\r\n\t\t\t<TeacherSearchComponent\r\n\t\t\t\tbind:this={teacherSearchRef}\r\n\t\t\t\t{selectedTeacher}\r\n\t\t\t\ton:teacherSelected={handleTeacherSelected}\r\n\t\t\t\ton:teacherCleared={handleTeacherCleared}\r\n\t\t\t/>\r\n\t\t</section>\r\n\r\n\t\t<section class=\"section\">\r\n\t\t\t<h2 class=\"section-title\">Teacher dashboard</h2>\r\n\r\n\t\t\t{#if !selectedTeacher}\r\n\t\t\t\t<div class=\"empty\">\r\n\t\t\t\t\tSelect a teacher to load performance, information, and pricing.\r\n\t\t\t\t</div>\r\n\t\t\t{:else}\r\n\t\t\t\t<div class=\"selected-row\">\r\n\t\t\t\t\t<div class=\"selected-meta\">\r\n\t\t\t\t\t\t<strong>{teacherLabel(selectedTeacher)}</strong>\r\n\t\t\t\t\t\t<span class=\"muted\">\r\n\t\t\t\t\t\t\t• ID: {selectedTeacher.id}\r\n\t\t\t\t\t\t\t{#if selectedTeacher.username}\r\n\t\t\t\t\t\t\t\t• @{selectedTeacher.username}\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t{#if selectedTeacher.email}\r\n\t\t\t\t\t\t\t\t• {selectedTeacher.email}\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t{#if selectedTeacher.phone_number}\r\n\t\t\t\t\t\t\t\t• {selectedTeacher.phone_number}\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t\t<div class=\"quick-actions\">\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => copyToClipboard(String(selectedTeacher.id), 'ID')}>Copy ID</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" disabled={!selectedTeacher.email} on:click={() => copyToClipboard(selectedTeacher.email, 'email')}>Copy email</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" disabled={!selectedTeacher.username} on:click={() => copyToClipboard(selectedTeacher.username, 'username')}>Copy username</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" disabled={!selectedTeacher.phone_number} on:click={() => copyToClipboard(selectedTeacher.phone_number, 'phone')}>Copy phone</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => openWidget('performance')}>Performance</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => openWidget('info')}>Info</button>\r\n\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => openWidget('pricing')}>Pricing</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"selected-actions\">\r\n\t\t\t\t\t<a class=\"btn\" href=\"#/admin/calendar\" target=\"_blank\" rel=\"noopener noreferrer\">Open Tutory Calendar</a>\r\n\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" disabled={openWidgetKeys.length === 0} on:click={closeAllWidgets}>\r\n\t\t\t\t\t\t\tClose all widgets\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button type=\"button\" class=\"btn\" on:click={handleTeacherCleared}>Clear</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t{#if toast}\r\n\t\t\t\t\t<div class=\"toast\" role=\"status\">{toast}</div>\r\n\t\t\t\t{/if}\r\n\r\n\t\t\t\t{#if widgetOrder.some(k => collapsed[k])}\r\n\t\t\t\t\t<div class=\"widget-dock\" aria-label=\"Closed widgets\">\r\n\t\t\t\t\t\t<div class=\"widget-dock-label\">Closed widgets</div>\r\n\t\t\t\t\t\t<div class=\"widget-dock-buttons\">\r\n\t\t\t\t\t\t\t{#each widgetOrder as key (key)}\r\n\t\t\t\t\t\t\t\t{#if collapsed[key]}\r\n\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"dock-btn\" on:click={() => openWidget(key)}>\r\n\t\t\t\t\t\t\t\t\t\t{widgetTitle(key)}\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t{/if}\r\n\r\n\t\t\t\t<div class=\"widgets-grid\">\r\n\t\t\t\t\t{#if openWidgetKeys.length === 0}\r\n\t\t\t\t\t\t<div class=\"empty widgets-empty\">Select a widget above to open.</div>\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t{#each openWidgetKeys as key (key)}\r\n\t\t\t\t\t\t\t{#if key === 'performance'}\r\n\t\t\t\t\t\t\t\t<div class=\"card widget performance-card\" id=\"teachers-widget-performance\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-controls=\"teachers-widget-performance-body\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.performance}\r\n\t\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('performance')}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.performance ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\t\tTeacher Performance\r\n\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"link\" href={`#/teacherSurveilance?tab=performance&teacherId=${selectedTeacher.id}`} target=\"_blank\" rel=\"noreferrer\">Open full</a>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => (performanceRefresh += 1)}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('performance')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"teachers-widget-performance-body\">\r\n\t\t\t\t\t\t\t\t\t\t{#key performanceRefresh}\r\n\t\t\t\t\t\t\t\t\t\t\t<TeacherPerformanceRating teacherId={selectedTeacher.id} embedded={true} />\r\n\t\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t\t{#if key === 'info'}\r\n\t\t\t\t\t\t\t\t<div class=\"card widget info-card\" id=\"teachers-widget-info\" role=\"region\" aria-label=\"Teacher information panel\" tabindex=\"-1\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-controls=\"teachers-widget-info-body\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.info}\r\n\t\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('info')}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.info ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\t\tTeacher Information\r\n\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"link\" href={`#/teacherSurveilance?tab=teacher-info&teacherId=${selectedTeacher.id}`} target=\"_blank\" rel=\"noreferrer\">Open full</a>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => (infoRefresh += 1)}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('info')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"teachers-widget-info-body\">\r\n\t\t\t\t\t\t\t\t\t\t{#key infoRefresh}\r\n\t\t\t\t\t\t\t\t\t\t\t<TeacherInfoComponent teacherId={selectedTeacher.id} teacher={selectedTeacher} embedded={true} />\r\n\t\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t\t{#if key === 'pricing'}\r\n\t\t\t\t\t\t\t\t<div class=\"card widget pricing-card\" id=\"teachers-widget-pricing\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-controls=\"teachers-widget-pricing-body\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.pricing}\r\n\t\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('pricing')}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.pricing ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\t\tTeacher Pricing\r\n\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"link\" href={`#/admin?tab=teacher-pricing&teacherId=${selectedTeacher.id}`} target=\"_blank\" rel=\"noreferrer\">Open full</a>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => (pricingRefresh += 1)}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('pricing')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"teachers-widget-pricing-body\">\r\n\t\t\t\t\t\t\t\t\t\t{#key pricingRefresh}\r\n\t\t\t\t\t\t\t\t\t\t\t<TeacherPricingModifierComponent teacherId={selectedTeacher.id} teacher={selectedTeacher} embedded={true} />\r\n\t\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t</div>\r\n\t\t\t{/if}\r\n\t\t</section>\r\n\t</div>\r\n</div>\r\n\r\n<style>\r\n\t.calendar-launch { padding: 18px 24px 0; }\r\n\t.calendar-launch .btn { display: inline-block; padding: 14px 24px; background: #273c75; color: white; text-decoration: none; border-radius: 12px; font-weight: 700; }\r\n\t.page {\r\n\t\tpadding: 18px 22px 30px;\r\n\t\tbackground: #f6f7fb;\r\n\t}\r\n\r\n\t.section {\r\n\t\tmargin-bottom: 22px;\r\n\t}\r\n\r\n\t.section-title {\r\n\t\tmargin: 0 0 10px 0;\r\n\t\tfont-size: 18px;\r\n\t}\r\n\r\n\t.section-title-row {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 12px;\r\n\t\tmargin: 0 0 10px 0;\r\n\t}\r\n\r\n\t.tools-grid {\r\n\t\tcolumn-count: 2;\r\n\t\tcolumn-gap: 24px;\r\n\t}\r\n\r\n\t.tools-grid > .card {\r\n\t\tbreak-inside: avoid;\r\n\t\tdisplay: flex;\r\n\t\twidth: 100%;\r\n\t\tbox-sizing: border-box;\r\n\t\tmargin: 0 0 16px;\r\n\t}\r\n\r\n\t.widgets-grid {\r\n\t\t/* Match tools-grid stacking behavior (masonry-style columns). */\r\n\t\tcolumn-count: 2;\r\n\t\tcolumn-gap: 16px;\r\n\t}\r\n\r\n\t.widgets-grid > .card {\r\n\t\tbreak-inside: avoid;\r\n\t\tdisplay: flex;\r\n\t\twidth: 100%;\r\n\t\tbox-sizing: border-box;\r\n\t\tmargin: 0 0 16px;\r\n\t}\r\n\r\n\t.widget-dock {\r\n\t\tmargin: 10px 0 14px;\r\n\t\tpadding: 12px;\r\n\t\tborder-radius: 10px;\r\n\t\tbackground: rgba(255, 255, 255, 0.7);\r\n\t\tborder: 1px solid rgba(0, 0, 0, 0.08);\r\n\t}\r\n\r\n\t.widget-dock-label {\r\n\t\tfont-weight: 800;\r\n\t\tcolor: #1f2937;\r\n\t\tmargin-bottom: 8px;\r\n\t}\r\n\r\n\t.widget-dock-buttons {\r\n\t\tdisplay: flex;\r\n\t\tflex-wrap: wrap;\r\n\t\tgap: 8px;\r\n\t}\r\n\r\n\t.dock-btn {\r\n\t\tpadding: 6px 10px;\r\n\t\tborder: 1px solid rgba(0, 0, 0, 0.14);\r\n\t\tbackground: rgba(255, 255, 255, 0.95);\r\n\t\tborder-radius: 999px;\r\n\t\tcursor: pointer;\r\n\t\tfont-size: 12px;\r\n\t\tfont-weight: 700;\r\n\t\tcolor: #111827;\r\n\t}\r\n\r\n\t.dock-btn:hover {\r\n\t\tbackground: white;\r\n\t}\r\n\r\n\t.widgets-empty {\r\n\t\tcolumn-span: all;\r\n\t}\r\n\r\n\t.card {\r\n\t\tpadding: 15px;\r\n\t\tbackground-color: white;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tgap: 10px;\r\n\t\tbox-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n\t\tborder-radius: 8px;\r\n\t\tcolor: black;\r\n\t\talign-items: stretch;\r\n\t}\r\n\r\n\t.card.widget,\r\n\t.card.tool {\r\n\t\tbackground: var(--tint, #fff);\r\n\t\tborder-left: 6px solid var(--accent, transparent);\r\n\t}\r\n\r\n\t.tool-find-teachers {\r\n\t\t--accent: #0ea5e9;\r\n\t\t--tint: #e0f2fe;\r\n\t}\r\n\t.tool-db-refresh {\r\n\t\t--accent: #6b7280;\r\n\t\t--tint: #f3f4f6;\r\n\t}\r\n\t.tool-incidents {\r\n\t\t--accent: #dc2626;\r\n\t\t--tint: #fef2f2;\r\n\t}\r\n\t.tool-invoices {\r\n\t\t--accent: #059669;\r\n\t\t--tint: #ecfdf5;\r\n\t}\r\n\r\n\t.performance-card {\r\n\t\t--accent: #f59e0b;\r\n\t\t--tint: #fffbeb;\r\n\t}\r\n\t.info-card {\r\n\t\t--accent: #2563eb;\r\n\t\t--tint: #eff6ff;\r\n\t}\r\n\t.pricing-card {\r\n\t\t--accent: #7c3aed;\r\n\t\t--tint: #f5f3ff;\r\n\t}\r\n\r\n\t.widget-header {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 10px;\r\n\t}\r\n\r\n\t.widget-actions {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tgap: 10px;\r\n\t}\r\n\r\n\t.widget-title {\r\n\t\tdisplay: inline-flex;\r\n\t\talign-items: center;\r\n\t\tgap: 8px;\r\n\t\tpadding: 6px 8px;\r\n\t\tborder: 0;\r\n\t\tbackground: transparent;\r\n\t\tfont-weight: 800;\r\n\t\tcolor: #1f2937;\r\n\t\tcursor: pointer;\r\n\t\tborder-radius: 8px;\r\n\t\ttext-align: left;\r\n\t}\r\n\r\n\t.widget-title:hover {\r\n\t\tbackground: rgba(255, 255, 255, 0.7);\r\n\t}\r\n\r\n\t.widget-title:focus {\r\n\t\toutline: 2px solid rgba(20, 105, 91, 0.4);\r\n\t\toutline-offset: 2px;\r\n\t}\r\n\r\n\t.chevron {\r\n\t\tfont-size: 14px;\r\n\t\topacity: 0.9;\r\n\t}\r\n\r\n\t.widget-body {\r\n\t\twidth: 100%;\r\n\t}\r\n\r\n\t.widget-body.scroll {\r\n\t\tmax-height: 650px;\r\n\t\toverflow: auto;\r\n\t\tpadding: 10px;\r\n\t\tborder-radius: 8px;\r\n\t\tborder: 1px solid rgba(0, 0, 0, 0.08);\r\n\t\tbackground: rgba(255, 255, 255, 0.75);\r\n\t}\r\n\r\n\t.selected-row {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 10px;\r\n\t\tmargin: 10px 0 14px;\r\n\t\tpadding: 10px 12px;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground: rgba(248, 249, 250, 0.92);\r\n\t\tbackdrop-filter: blur(8px);\r\n\t\tborder: 1px solid rgba(0, 0, 0, 0.08);\r\n\t\tposition: sticky;\r\n\t\ttop: 10px;\r\n\t\tz-index: 20;\r\n\t}\r\n\r\n\t.quick-actions {\r\n\t\tmargin-top: 8px;\r\n\t\tdisplay: flex;\r\n\t\tflex-wrap: wrap;\r\n\t\tgap: 8px;\r\n\t}\r\n\r\n\t.toast {\r\n\t\tmargin: 10px 0 14px;\r\n\t\tpadding: 10px 12px;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground: #e7f3ff;\r\n\t\tborder: 1px solid #bcdcff;\r\n\t\tcolor: #0b3d69;\r\n\t}\r\n\r\n\t.muted {\r\n\t\tcolor: #666;\r\n\t\tfont-weight: 400;\r\n\t}\r\n\r\n\t.btn {\r\n\t\tpadding: 8px 12px;\r\n\t\tborder: 1px solid #ccc;\r\n\t\tbackground: white;\r\n\t\tborder-radius: 8px;\r\n\t\tcursor: pointer;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\r\n\t.btn.small {\r\n\t\tpadding: 6px 10px;\r\n\t\tborder-radius: 6px;\r\n\t\tfont-size: 12px;\r\n\t}\r\n\r\n\t.empty {\r\n\t\tpadding: 18px 16px;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground: #f8f9fa;\r\n\t\tborder: 1px solid #e0e0e0;\r\n\t\tcolor: #666;\r\n\t}\r\n\r\n\t@media (max-width: 1400px) {\r\n\t\t.tools-grid {\r\n\t\t\tcolumn-count: 1;\r\n\t\t}\r\n\t}\r\n\r\n\t@media (max-width: 1100px) {\r\n\t\t.widgets-grid {\r\n\t\t\tcolumn-count: 1;\r\n\t\t}\r\n\t}\r\n</style>\r\n\r\n","const REPORT_PATH = '/studentplayground/api/admin/class-attendance/';\r\n\r\n\r\nfunction isoDate(date) {\r\n    return date.toISOString().slice(0, 10);\r\n}\r\n\r\n\r\nexport function vilniusWeek(now = new Date()) {\r\n    const parts = new Intl.DateTimeFormat('en-CA', {\r\n        timeZone: 'Europe/Vilnius',\r\n        year: 'numeric',\r\n        month: '2-digit',\r\n        day: '2-digit'\r\n    }).formatToParts(now);\r\n    const value = Object.fromEntries(parts.map(part => [part.type, part.value]));\r\n    const localDate = new Date(Date.UTC(\r\n        Number(value.year),\r\n        Number(value.month) - 1,\r\n        Number(value.day)\r\n    ));\r\n    const daysSinceMonday = (localDate.getUTCDay() + 6) % 7;\r\n    const monday = new Date(localDate);\r\n    monday.setUTCDate(monday.getUTCDate() - daysSinceMonday);\r\n    const sunday = new Date(monday);\r\n    sunday.setUTCDate(sunday.getUTCDate() + 6);\r\n    return { startDate: isoDate(monday), endDate: isoDate(sunday) };\r\n}\r\n\r\n\r\nexport function buildAttendanceReportUrl({\r\n    apiBase = '',\r\n    startDate,\r\n    endDate,\r\n    page = 1,\r\n    pageSize = 50\r\n}) {\r\n    const params = new URLSearchParams({\r\n        start_date: startDate,\r\n        end_date: endDate,\r\n        page: String(page),\r\n        page_size: String(pageSize)\r\n    });\r\n    return `${apiBase}${REPORT_PATH}?${params.toString()}`;\r\n}\r\n\r\n\r\nexport async function fetchAttendanceReport({ fetchImpl = fetch, token, ...query }) {\r\n    const response = await fetchImpl(buildAttendanceReportUrl(query), {\r\n        method: 'GET',\r\n        headers: {\r\n            Authorization: `Bearer ${token}`,\r\n            'Content-Type': 'application/json'\r\n        }\r\n    });\r\n    const payload = await response.json().catch(() => ({}));\r\n    if (!response.ok) {\r\n        throw new Error(payload.error || `Failed to load attendance (${response.status}).`);\r\n    }\r\n    return payload;\r\n}\r\n","<script>\r\n    import { onMount } from 'svelte';\r\n    import { getApiBase } from './apiBase.js';\r\n    import { fetchAttendanceReport, vilniusWeek } from './attendanceReportApi.js';\r\n\r\n    const apiBase = getApiBase();\r\n    const defaults = vilniusWeek();\r\n    const pageSize = 50;\r\n    let startDate = defaults.startDate;\r\n    let endDate = defaults.endDate;\r\n    let report = null;\r\n    let loading = false;\r\n    let error = '';\r\n    let page = 1;\r\n    let expanded = {};\r\n\r\n    function formatDateTime(value) {\r\n        if (!value) return '—';\r\n        return new Intl.DateTimeFormat('lt-LT', {\r\n            timeZone: 'Europe/Vilnius', year: 'numeric', month: '2-digit',\r\n            day: '2-digit', hour: '2-digit', minute: '2-digit'\r\n        }).format(new Date(value));\r\n    }\r\n\r\n    function statusLabel(status) {\r\n        return { attended: 'Attended', missing: 'Missing', pending: 'Pending', unresolved: 'Unresolved' }[status] || status;\r\n    }\r\n\r\n    function toggleClass(eventId) {\r\n        expanded = { ...expanded, [eventId]: !expanded[eventId] };\r\n    }\r\n\r\n    async function loadReport(targetPage = 1) {\r\n        loading = true;\r\n        error = '';\r\n        try {\r\n            report = await fetchAttendanceReport({\r\n                apiBase, token: localStorage.getItem('jwtToken'), startDate,\r\n                endDate, page: targetPage, pageSize\r\n            });\r\n            page = report.pagination.page;\r\n        } catch (err) {\r\n            error = err.message || 'Failed to load class attendance.';\r\n            report = null;\r\n        } finally {\r\n            loading = false;\r\n        }\r\n    }\r\n\r\n    function submitRange() {\r\n        expanded = {};\r\n        loadReport(1);\r\n    }\r\n\r\n    onMount(() => loadReport(1));\r\n</script>\r\n\r\n<div class=\"attendance-report\">\r\n    <form class=\"filters\" on:submit|preventDefault={submitRange}>\r\n        <label><span>From</span><input type=\"date\" bind:value={startDate} required /></label>\r\n        <label><span>To</span><input type=\"date\" bind:value={endDate} required /></label>\r\n        <button type=\"submit\" disabled={loading}>Show classes</button>\r\n    </form>\r\n\r\n    {#if loading}\r\n        <div class=\"state\">Loading attendance…</div>\r\n    {:else if error}\r\n        <div class=\"state error\" role=\"alert\">{error}</div>\r\n    {:else if report && report.classes.length === 0}\r\n        <div class=\"state\">No active scheduled classes in this date range.</div>\r\n    {:else if report}\r\n        <div class=\"result-summary\">{report.pagination.total_items} scheduled {report.pagination.total_items === 1 ? 'class' : 'classes'}</div>\r\n        <div class=\"class-list\">\r\n            {#each report.classes as scheduledClass (scheduledClass.event_id)}\r\n                <article class=\"class-card\">\r\n                    <button type=\"button\" class=\"class-summary\" aria-expanded={!!expanded[scheduledClass.event_id]} on:click={() => toggleClass(scheduledClass.event_id)}>\r\n                        <span class=\"chevron\" aria-hidden=\"true\">{expanded[scheduledClass.event_id] ? '▾' : '▸'}</span>\r\n                        <span class=\"class-identity\">\r\n                            <strong>{scheduledClass.name}</strong>\r\n                            <small>{formatDateTime(scheduledClass.starts_at)} · {scheduledClass.teacher_label}</small>\r\n                        </span>\r\n                        <span class=\"counts\">\r\n                            <span class=\"count attended\">{scheduledClass.counts.attended} attended</span>\r\n                            {#if scheduledClass.counts.missing}<span class=\"count missing\">{scheduledClass.counts.missing} missing</span>{/if}\r\n                            {#if scheduledClass.counts.pending}<span class=\"count pending\">{scheduledClass.counts.pending} pending</span>{/if}\r\n                            {#if scheduledClass.counts.unresolved}<span class=\"count unresolved\">{scheduledClass.counts.unresolved} unresolved</span>{/if}\r\n                        </span>\r\n                    </button>\r\n\r\n                    {#if expanded[scheduledClass.event_id]}\r\n                        <div class=\"participants\">\r\n                            <div class=\"participant header\" aria-hidden=\"true\"><span>Participant</span><span>Role</span><span>Status</span><span>Check-in</span></div>\r\n                            {#each scheduledClass.participants as participant, index (`${participant.role}-${participant.user_id || index}`)}\r\n                                <div class=\"participant\">\r\n                                    <span class=\"participant-name\">{participant.name}{#if participant.assignment_warning}<small>{participant.assignment_warning}</small>{/if}</span>\r\n                                    <span class=\"role\">{participant.role}</span>\r\n                                    <span><span class=\"status-badge\" class:attended={participant.status === 'attended'} class:missing={participant.status === 'missing'} class:pending={participant.status === 'pending'} class:unresolved={participant.status === 'unresolved'}>{statusLabel(participant.status)}</span></span>\r\n                                    <span>{formatDateTime(participant.checked_at)}</span>\r\n                                </div>\r\n                            {/each}\r\n                        </div>\r\n                    {/if}\r\n                </article>\r\n            {/each}\r\n        </div>\r\n\r\n        {#if report.pagination.total_pages > 1}\r\n            <nav class=\"pagination\" aria-label=\"Attendance report pages\">\r\n                <button type=\"button\" disabled={!report.pagination.has_previous || loading} on:click={() => loadReport(page - 1)}>Previous</button>\r\n                <span>Page {page} of {report.pagination.total_pages}</span>\r\n                <button type=\"button\" disabled={!report.pagination.has_next || loading} on:click={() => loadReport(page + 1)}>Next</button>\r\n            </nav>\r\n        {/if}\r\n    {/if}\r\n</div>\r\n\r\n<style>\r\n    .attendance-report { color: #1f2937; }\r\n    .filters { display: flex; align-items: end; gap: 12px; flex-wrap: wrap; margin-bottom: 16px; }\r\n    label { display: grid; gap: 5px; font-size: 13px; font-weight: 600; }\r\n    input { border: 1px solid #cbd5e1; border-radius: 7px; padding: 8px 10px; font: inherit; }\r\n    button { border: 1px solid #2563eb; border-radius: 7px; background: #2563eb; color: white; padding: 8px 13px; cursor: pointer; font: inherit; }\r\n    button:disabled { cursor: not-allowed; opacity: .55; }\r\n    .state { padding: 20px; text-align: center; color: #64748b; }\r\n    .state.error { color: #b91c1c; background: #fef2f2; border-radius: 8px; }\r\n    .result-summary { margin-bottom: 10px; color: #64748b; font-size: 13px; }\r\n    .class-list { display: grid; gap: 10px; }\r\n    .class-card { border: 1px solid #e2e8f0; border-radius: 10px; overflow: hidden; background: white; }\r\n    .class-summary { width: 100%; display: grid; grid-template-columns: auto minmax(220px, 1fr) auto; align-items: center; gap: 10px; border: 0; border-radius: 0; background: white; color: inherit; text-align: left; padding: 13px; }\r\n    .class-summary:hover { background: #f8fafc; }\r\n    .chevron { color: #64748b; }\r\n    .class-identity { display: grid; gap: 3px; }\r\n    .class-identity small { color: #64748b; font-weight: 400; }\r\n    .counts { display: flex; gap: 6px; flex-wrap: wrap; justify-content: end; }\r\n    .count, .status-badge { border-radius: 999px; padding: 3px 8px; font-size: 12px; font-weight: 700; white-space: nowrap; }\r\n    .attended { color: #166534; background: #dcfce7; }\r\n    .missing { color: #991b1b; background: #fee2e2; }\r\n    .pending { color: #92400e; background: #fef3c7; }\r\n    .unresolved { color: #5b21b6; background: #ede9fe; }\r\n    .participants { border-top: 1px solid #e2e8f0; }\r\n    .participant { display: grid; grid-template-columns: minmax(180px, 1.4fr) .6fr .7fr 1fr; gap: 10px; align-items: center; padding: 10px 13px; border-top: 1px solid #f1f5f9; font-size: 13px; }\r\n    .participant:first-child { border-top: 0; }\r\n    .participant.header { background: #f8fafc; color: #64748b; font-size: 11px; font-weight: 700; text-transform: uppercase; }\r\n    .participant-name { display: grid; }\r\n    .participant-name small { color: #7c3aed; }\r\n    .role { text-transform: capitalize; }\r\n    .pagination { display: flex; align-items: center; justify-content: center; gap: 14px; margin-top: 16px; }\r\n    @media (max-width: 720px) {\r\n        .class-summary { grid-template-columns: auto 1fr; }\r\n        .counts { grid-column: 2; justify-content: start; }\r\n        .participant, .participant.header { grid-template-columns: 1fr .7fr .8fr; }\r\n        .participant > :last-child, .participant.header > :last-child { grid-column: 1 / -1; }\r\n    }\r\n</style>\r\n","<script>\r\n\timport { onMount } from 'svelte';\r\n\timport NavBarReusable from './NavbarReusable.svelte';\r\n\r\n\timport AdminRescheduleRequestsComponent from './AdminRescheduleRequestsComponent.svelte';\r\n\timport AdminClassRegistrationRequestsComponent from './AdminClassRegistrationRequestsComponent.svelte';\r\n\timport AdminRegistrationComponent from './AdminRegistrationComponent.svelte';\r\n\timport SelectUsersSMSComponent from './SelectUsersSMSComponent.svelte';\r\n\timport CreateInformationSectionComponent from './CreateInformationSectionComponent.svelte';\r\n\timport InformationSectionsDisplayComponent from './InformationSectionsDisplayComponent.svelte';\r\n\timport BalanceTransactionsCsvDownloader from './BalanceTransactionsCsvDownloader.svelte';\r\n\timport TeacherRevenuePaymentCsvDownloader from './TeacherRevenuePaymentCsvDownloader.svelte';\r\n\timport TeachersListComponent from './TeachersListComponent.svelte';\r\n\timport StudentsListComponent from './StudentsListComponent.svelte';\r\n\timport AdminFirstClassesNewTeachersComponent from './AdminFirstClassesNewTeachersComponent.svelte';\r\n\timport AdminClassAttendanceComponent from './AdminClassAttendanceComponent.svelte';\r\n\timport AdminDashboardLauncher from './AdminDashboardLauncher.svelte';\r\n\timport AdminAgreements from './AdminAgreements.svelte';\r\n\r\n\tconst collapsedKey = 'adminAllDashboard:collapsed';\r\n\r\n\tconst widgetOrder = /** @type {const} */ ([\r\n\t\t'agreements',\r\n\t\t'activity',\r\n\t\t'monthlyFeedback',\r\n\t\t'classAttendance',\r\n\t\t'rescheduleRequests',\r\n\t\t'classRegistrationRequests',\r\n\t\t'classRegistrationCreate',\r\n\t\t'smsRecipients',\r\n\t\t'informationSectionsSubmit',\r\n\t\t'informationSectionsDisplay',\r\n\t\t'teachersList',\r\n\t\t'studentsList',\r\n\t\t'firstClassesNewTeachers',\r\n\t\t'balanceCsv',\r\n\t\t'teacherRevenueCsv',\r\n\t]);\r\n\r\n\tlet collapsed = {\r\n\t\tagreements: true,\r\n\t\tactivity: false,\r\n\t\tmonthlyFeedback: false,\r\n\t\tclassAttendance: false,\r\n\t\trescheduleRequests: false,\r\n\t\tclassRegistrationRequests: false,\r\n\t\tclassRegistrationCreate: true,\r\n\t\tsmsRecipients: true,\r\n\t\tinformationSectionsSubmit: true,\r\n\t\tinformationSectionsDisplay: true,\r\n\t\tteachersList: true,\r\n\t\tstudentsList: true,\r\n\t\tfirstClassesNewTeachers: true,\r\n\t\tbalanceCsv: true,\r\n\t\tteacherRevenueCsv: true,\r\n\t};\r\n\r\n\tlet refresh = {\r\n\t\tactivity: 0,\r\n\t\tmonthlyFeedback: 0,\r\n\t\tclassAttendance: 0,\r\n\t\trescheduleRequests: 0,\r\n\t\tclassRegistrationRequests: 0,\r\n\t\tclassRegistrationCreate: 0,\r\n\t\tsmsRecipients: 0,\r\n\t\tinformationSectionsSubmit: 0,\r\n\t\tinformationSectionsDisplay: 0,\r\n\t\tteachersList: 0,\r\n\t\tstudentsList: 0,\r\n\t\tfirstClassesNewTeachers: 0,\r\n\t\tbalanceCsv: 0,\r\n\t\tteacherRevenueCsv: 0,\r\n\t};\r\n\r\n\tfunction widgetTitle(key) {\r\n\t\tswitch (key) {\r\n\t\t\tcase 'agreements': return 'Dokumentai pasirašymui';\r\n\t\t\tcase 'activity':\r\n\t\t\t\treturn '📊 Activity Dashboard';\r\n\t\t\tcase 'monthlyFeedback':\r\n\t\t\t\treturn 'Monthly email review';\r\n\t\t\tcase 'classAttendance':\r\n\t\t\t\treturn 'Class Attendance';\r\n\t\t\tcase 'rescheduleRequests':\r\n\t\t\t\treturn 'Reschedule Requests';\r\n\t\t\tcase 'classRegistrationRequests':\r\n\t\t\t\treturn 'Class Registration Requests';\r\n\t\t\tcase 'classRegistrationCreate':\r\n\t\t\t\treturn 'Create Class Registration';\r\n\t\t\tcase 'smsRecipients':\r\n\t\t\t\treturn 'Send Bulk SMS';\r\n\t\t\tcase 'informationSectionsSubmit':\r\n\t\t\t\treturn 'Bendra Informacija SUBMIT';\r\n\t\t\tcase 'informationSectionsDisplay':\r\n\t\t\t\treturn 'Bendra Informacija DISPLAY';\r\n\t\t\tcase 'teachersList':\r\n\t\t\t\treturn 'Teachers List';\r\n\t\t\tcase 'studentsList':\r\n\t\t\t\treturn 'Students List';\r\n\t\t\tcase 'firstClassesNewTeachers':\r\n\t\t\t\treturn 'First Classes with New Teachers';\r\n\t\t\tcase 'balanceCsv':\r\n\t\t\t\treturn '📥 Balance CSV';\r\n\t\t\tcase 'teacherRevenueCsv':\r\n\t\t\t\treturn '💰 Teacher Revenue CSV';\r\n\t\t\tdefault:\r\n\t\t\t\treturn key;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction normalizeCollapsedState() {\r\n\t\tconst next = {};\r\n\t\tfor (const k of widgetOrder) next[k] = !!collapsed?.[k];\r\n\t\tcollapsed = next;\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction loadCollapsedState() {\r\n\t\ttry {\r\n\t\t\tconst raw = localStorage.getItem(collapsedKey);\r\n\t\t\tif (!raw) return;\r\n\t\t\tconst parsed = JSON.parse(raw);\r\n\t\t\tif (!parsed || typeof parsed !== 'object') return;\r\n\t\t\tconst next = {};\r\n\t\t\tfor (const k of widgetOrder) next[k] = !!parsed[k];\r\n\t\t\tcollapsed = next;\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction saveCollapsedState() {\r\n\t\ttry {\r\n\t\t\tlocalStorage.setItem(collapsedKey, JSON.stringify(collapsed));\r\n\t\t} catch {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\tfunction openWidget(key) {\r\n\t\tcollapsed = { ...collapsed, [key]: false };\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction closeWidget(key) {\r\n\t\tcollapsed = { ...collapsed, [key]: true };\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction toggleCollapsed(key) {\r\n\t\tcollapsed = { ...collapsed, [key]: !collapsed[key] };\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction closeAllWidgets() {\r\n\t\tconst next = {};\r\n\t\tfor (const k of widgetOrder) next[k] = true;\r\n\t\tcollapsed = next;\r\n\t\tsaveCollapsedState();\r\n\t}\r\n\r\n\tfunction reloadWidget(key) {\r\n\t\trefresh = { ...refresh, [key]: (refresh[key] || 0) + 1 };\r\n\t}\r\n\r\n\t$: openWidgetKeys = widgetOrder.filter(k => !collapsed[k]);\r\n\r\n\tonMount(() => {\r\n\t\tloadCollapsedState();\r\n\t\tnormalizeCollapsedState();\r\n\t});\r\n</script>\r\n\r\n<div class=\"app-container\">\r\n\t<NavBarReusable label=\"Admin\" />\r\n\r\n\t<div class=\"page\">\r\n\t\t<section class=\"section\">\r\n\t\t\t<div class=\"section-title-row\">\r\n\t\t\t\t<h2 class=\"section-title\">Admin dashboard</h2>\r\n\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={closeAllWidgets} disabled={openWidgetKeys.length === 0}>\r\n\t\t\t\t\tClose all widgets\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t{#if widgetOrder.some(k => collapsed[k])}\r\n\t\t\t\t<div class=\"widget-dock\" aria-label=\"Closed widgets\">\r\n\t\t\t\t\t<div class=\"widget-dock-label\">Closed widgets</div>\r\n\t\t\t\t\t<div class=\"widget-dock-buttons\">\r\n\t\t\t\t\t\t{#each widgetOrder as key (key)}\r\n\t\t\t\t\t\t\t{#if collapsed[key]}\r\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"dock-btn\" on:click={() => openWidget(key)}>\r\n\t\t\t\t\t\t\t\t\t{widgetTitle(key)}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<div class=\"widgets-grid\">\r\n\t\t\t\t{#if openWidgetKeys.length === 0}\r\n\t\t\t\t\t<div class=\"empty widgets-empty\">Select a widget above to open.</div>\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t{#each openWidgetKeys as key (key)}\r\n\t\t\t\t\t\t{#if key === 'agreements'}\r\n\t\t\t\t\t\t\t<div class=\"card widget\" id=\"adminall-widget-agreements\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\"><button type=\"button\" class=\"btn small\" on:click={() => closeWidget('agreements')}>Uždaryti dokumentus</button></div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body\"><AdminAgreements /></div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t{#if key === 'monthlyFeedback'}\r\n\t\t\t\t\t\t\t<AdminDashboardLauncher\r\n\t\t\t\t\t\t\t\ttitle=\"Monthly email review\"\r\n\t\t\t\t\t\t\t\thref=\"#/admin/monthly-feedback\"\r\n\t\t\t\t\t\t\t\tdescription=\"Review each family's frozen teacher feedback email, hold anything that needs attention, then send eligible emails from the full review page.\"\r\n\t\t\t\t\t\t\t\tlaunchLabel=\"Launch Monthly email review\"\r\n\t\t\t\t\t\t\t\ton:close={() => closeWidget('monthlyFeedback')}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t{#if key === 'activity'}\r\n\t\t\t\t\t\t\t<div class=\"card widget activity-card\" id=\"adminall-widget-activity\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-title\">\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">📊</span>\r\n\t\t\t\t\t\t\t\t\t\t📊 Activity Dashboard\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<a class=\"btn small dashboard-launch\" href=\"#/admin/activity-dashboard\" target=\"_blank\" rel=\"noopener noreferrer\">Open full page ↗</a>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('activity')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body activity-launch-body\" id=\"adminall-widget-activity-body\">\r\n\t\t\t\t\t\t\t\t\t<p>The operations market dashboard now opens in its own full-width browser tab.</p>\r\n\t\t\t\t\t\t\t\t\t<a class=\"dashboard-launch large\" href=\"#/admin/activity-dashboard\" target=\"_blank\" rel=\"noopener noreferrer\">Launch Activity Dashboard ↗</a>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t{#if key === 'classAttendance'}\r\n\t\t\t\t\t\t\t<div class=\"card widget attendance-card\" id=\"adminall-widget-class-attendance\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\taria-controls=\"adminall-widget-class-attendance-body\"\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.classAttendance}\r\n\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('classAttendance')}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.classAttendance ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\tClass Attendance\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => reloadWidget('classAttendance')}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('classAttendance')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"adminall-widget-class-attendance-body\">\r\n\t\t\t\t\t\t\t\t\t{#key refresh.classAttendance}\r\n\t\t\t\t\t\t\t\t\t\t<AdminClassAttendanceComponent />\r\n\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t{#if key === 'rescheduleRequests'}\r\n\t\t\t\t\t\t\t<div class=\"card widget reschedule-card\" id=\"adminall-widget-reschedule\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\taria-controls=\"adminall-widget-reschedule-body\"\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.rescheduleRequests}\r\n\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('rescheduleRequests')}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.rescheduleRequests ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\tReschedule Requests\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => reloadWidget('rescheduleRequests')}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('rescheduleRequests')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"adminall-widget-reschedule-body\">\r\n\t\t\t\t\t\t\t\t\t{#key refresh.rescheduleRequests}\r\n\t\t\t\t\t\t\t\t\t\t<AdminRescheduleRequestsComponent />\r\n\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t{#if key === 'classRegistrationRequests'}\r\n\t\t\t\t\t\t\t<div class=\"card widget registration-requests-card\" id=\"adminall-widget-class-registration-requests\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\taria-controls=\"adminall-widget-class-registration-requests-body\"\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.classRegistrationRequests}\r\n\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('classRegistrationRequests')}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.classRegistrationRequests ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\tClass Registration Requests\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => reloadWidget('classRegistrationRequests')}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('classRegistrationRequests')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"adminall-widget-class-registration-requests-body\">\r\n\t\t\t\t\t\t\t\t\t{#key refresh.classRegistrationRequests}\r\n\t\t\t\t\t\t\t\t\t\t<AdminClassRegistrationRequestsComponent />\r\n\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t{#if key === 'classRegistrationCreate'}\r\n\t\t\t\t\t\t\t<div class=\"card widget registration-create-card\" id=\"adminall-widget-class-registration-create\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\taria-controls=\"adminall-widget-class-registration-create-body\"\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.classRegistrationCreate}\r\n\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('classRegistrationCreate')}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.classRegistrationCreate ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\tCreate Class Registration\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => reloadWidget('classRegistrationCreate')}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('classRegistrationCreate')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"adminall-widget-class-registration-create-body\">\r\n\t\t\t\t\t\t\t\t\t{#key refresh.classRegistrationCreate}\r\n\t\t\t\t\t\t\t\t\t\t<AdminRegistrationComponent />\r\n\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t{#if key === 'smsRecipients'}\r\n\t\t\t\t\t\t\t<div class=\"card widget sms-card\" id=\"adminall-widget-sms\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\taria-controls=\"adminall-widget-sms-body\"\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.smsRecipients}\r\n\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('smsRecipients')}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.smsRecipients ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\tSend Bulk SMS\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => reloadWidget('smsRecipients')}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('smsRecipients')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"adminall-widget-sms-body\">\r\n\t\t\t\t\t\t\t\t\t{#key refresh.smsRecipients}\r\n\t\t\t\t\t\t\t\t\t\t<SelectUsersSMSComponent />\r\n\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t{#if key === 'informationSectionsSubmit'}\r\n\t\t\t\t\t\t\t<div class=\"card widget info-submit-card\" id=\"adminall-widget-info-submit\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\taria-controls=\"adminall-widget-info-submit-body\"\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.informationSectionsSubmit}\r\n\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('informationSectionsSubmit')}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.informationSectionsSubmit ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\tBendra Informacija SUBMIT\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => reloadWidget('informationSectionsSubmit')}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('informationSectionsSubmit')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"adminall-widget-info-submit-body\">\r\n\t\t\t\t\t\t\t\t\t{#key refresh.informationSectionsSubmit}\r\n\t\t\t\t\t\t\t\t\t\t<CreateInformationSectionComponent />\r\n\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t{#if key === 'informationSectionsDisplay'}\r\n\t\t\t\t\t\t\t<div class=\"card widget info-display-card\" id=\"adminall-widget-info-display\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\taria-controls=\"adminall-widget-info-display-body\"\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.informationSectionsDisplay}\r\n\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('informationSectionsDisplay')}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.informationSectionsDisplay ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\tBendra Informacija DISPLAY\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => reloadWidget('informationSectionsDisplay')}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('informationSectionsDisplay')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"adminall-widget-info-display-body\">\r\n\t\t\t\t\t\t\t\t\t{#key refresh.informationSectionsDisplay}\r\n\t\t\t\t\t\t\t\t\t\t<InformationSectionsDisplayComponent />\r\n\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t{#if key === 'teachersList'}\r\n\t\t\t\t\t\t\t<div class=\"card widget teachers-list-card\" id=\"adminall-widget-teachers-list\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\taria-controls=\"adminall-widget-teachers-list-body\"\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.teachersList}\r\n\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('teachersList')}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.teachersList ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\tTeachers List\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => reloadWidget('teachersList')}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('teachersList')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"adminall-widget-teachers-list-body\">\r\n\t\t\t\t\t\t\t\t\t{#key refresh.teachersList}\r\n\t\t\t\t\t\t\t\t\t\t<TeachersListComponent />\r\n\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t{#if key === 'studentsList'}\r\n\t\t\t\t\t\t\t<div class=\"card widget students-list-card\" id=\"adminall-widget-students-list\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\taria-controls=\"adminall-widget-students-list-body\"\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.studentsList}\r\n\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('studentsList')}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.studentsList ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\tStudents List\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => reloadWidget('studentsList')}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('studentsList')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"adminall-widget-students-list-body\">\r\n\t\t\t\t\t\t\t\t\t{#key refresh.studentsList}\r\n\t\t\t\t\t\t\t\t\t\t<StudentsListComponent />\r\n\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t{#if key === 'firstClassesNewTeachers'}\r\n\t\t\t\t\t\t\t<div class=\"card widget first-classes-card\" id=\"adminall-widget-first-classes\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\taria-controls=\"adminall-widget-first-classes-body\"\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.firstClassesNewTeachers}\r\n\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('firstClassesNewTeachers')}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.firstClassesNewTeachers ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\tFirst Classes with New Teachers\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => reloadWidget('firstClassesNewTeachers')}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('firstClassesNewTeachers')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body scroll\" id=\"adminall-widget-first-classes-body\">\r\n\t\t\t\t\t\t\t\t\t{#key refresh.firstClassesNewTeachers}\r\n\t\t\t\t\t\t\t\t\t\t<AdminFirstClassesNewTeachersComponent />\r\n\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t{#if key === 'balanceCsv'}\r\n\t\t\t\t\t\t\t<div class=\"card widget balance-csv-card\" id=\"adminall-widget-balance-csv\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\taria-controls=\"adminall-widget-balance-csv-body\"\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.balanceCsv}\r\n\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('balanceCsv')}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.balanceCsv ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\t📥 Balance CSV\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => reloadWidget('balanceCsv')}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('balanceCsv')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"adminall-widget-balance-csv-body\">\r\n\t\t\t\t\t\t\t\t\t{#key refresh.balanceCsv}\r\n\t\t\t\t\t\t\t\t\t\t<BalanceTransactionsCsvDownloader />\r\n\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t{#if key === 'teacherRevenueCsv'}\r\n\t\t\t\t\t\t\t<div class=\"card widget revenue-csv-card\" id=\"adminall-widget-teacher-revenue-csv\">\r\n\t\t\t\t\t\t\t\t<div class=\"widget-header\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"widget-title\"\r\n\t\t\t\t\t\t\t\t\t\taria-controls=\"adminall-widget-teacher-revenue-csv-body\"\r\n\t\t\t\t\t\t\t\t\t\taria-expanded={!collapsed.teacherRevenueCsv}\r\n\t\t\t\t\t\t\t\t\t\ton:click={() => toggleCollapsed('teacherRevenueCsv')}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"chevron\" aria-hidden=\"true\">{collapsed.teacherRevenueCsv ? '▸' : '▾'}</span>\r\n\t\t\t\t\t\t\t\t\t\t💰 Teacher Revenue CSV\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<div class=\"widget-actions\">\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => reloadWidget('teacherRevenueCsv')}>Reload</button>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn small\" on:click={() => closeWidget('teacherRevenueCsv')}>Close</button>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"widget-body\" id=\"adminall-widget-teacher-revenue-csv-body\">\r\n\t\t\t\t\t\t\t\t\t{#key refresh.teacherRevenueCsv}\r\n\t\t\t\t\t\t\t\t\t\t<TeacherRevenuePaymentCsvDownloader />\r\n\t\t\t\t\t\t\t\t\t{/key}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t{/each}\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\t\t</section>\r\n\t</div>\r\n</div>\r\n\r\n<style>\r\n\t.page {\r\n\t\tpadding: 18px 22px 30px;\r\n\t\tbackground: #f6f7fb;\r\n\t}\r\n\r\n\t.section {\r\n\t\tmargin-bottom: 22px;\r\n\t}\r\n\r\n\t.section-title {\r\n\t\tmargin: 0 0 10px 0;\r\n\t\tfont-size: 18px;\r\n\t}\r\n\r\n\t.section-title-row {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 12px;\r\n\t\tmargin: 0 0 10px 0;\r\n\t}\r\n\r\n\t.widgets-grid {\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: repeat(2, minmax(0, 1fr));\r\n\t\tgap: 16px;\r\n\t\talign-items: start;\r\n\t\t/* Visually separate the widget area from the dock */\r\n\t\tpadding: 14px;\r\n\t\tborder-radius: 14px;\r\n\t\tbackground: rgba(255, 255, 255, 0.8);\r\n\t\tborder: 1px solid rgba(0, 0, 0, 0.06);\r\n\t}\r\n\r\n\t.widgets-grid > .card {\r\n\t\tdisplay: flex;\r\n\t\tbox-sizing: border-box;\r\n\t\tmargin: 0;\r\n\t}\r\n\r\n\t.widgets-grid > .attendance-card {\r\n\t\tgrid-column: 1 / -1;\r\n\t}\r\n\r\n\t@supports not (color: color-mix(in srgb, red, blue)) {\r\n\t\t.widget-dock {\r\n\t\t\tbackground: #fff7ed; /* orange-50 */\r\n\t\t\tborder-color: rgba(245, 158, 11, 0.25);\r\n\t\t\tbox-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\r\n\t\t}\r\n\t\t.widget-dock-label {\r\n\t\t\tcolor: #9a3412; /* orange-800 */\r\n\t\t}\r\n\t\t.dock-btn {\r\n\t\t\tbackground: #ffedd5; /* orange-100 */\r\n\t\t\tborder-color: rgba(245, 158, 11, 0.35);\r\n\t\t\tcolor: #7c2d12; /* orange-900 */\r\n\t\t}\r\n\t\t.dock-btn:hover {\r\n\t\t\tbackground: #fed7aa; /* orange-200 */\r\n\t\t\tborder-color: rgba(245, 158, 11, 0.55);\r\n\t\t\tbox-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);\r\n\t\t\ttransform: translateY(-1px);\r\n\t\t}\r\n\t\t.dock-btn:focus-visible {\r\n\t\t\toutline-color: rgba(245, 158, 11, 0.55);\r\n\t\t}\r\n\t}\r\n\r\n\t.widget-dock {\r\n\t\t--dock-orange: #f59e0b;\r\n\t\tmargin: 10px 0 14px;\r\n\t\tpadding: 14px 16px;\r\n\t\tborder-radius: 12px;\r\n\t\tbackground:\r\n\t\t\tcolor-mix(in srgb, var(--dock-orange) 10%, transparent) 0 0 / 100% 100% no-repeat,\r\n\t\t\tcolor-mix(in srgb, Canvas 96%, var(--dock-orange) 4%);\r\n\t\tborder: 1px solid color-mix(in srgb, var(--dock-orange) 28%, transparent);\r\n\t\tbox-shadow: 0 1px 3px color-mix(in srgb, var(--dock-orange) 20%, transparent);\r\n\t}\r\n\r\n\t.widget-dock-label {\r\n\t\tfont-size: 11px;\r\n\t\tfont-weight: 600;\r\n\t\tletter-spacing: 0.04em;\r\n\t\ttext-transform: uppercase;\r\n\t\tcolor: color-mix(in srgb, var(--dock-orange) 70%, #111827 30%);\r\n\t\tmargin: 0 0 10px 0;\r\n\t}\r\n\r\n\t.widget-dock-buttons {\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: repeat(4, minmax(0, 1fr));\r\n\t\tgap: 10px;\r\n\t\talign-items: stretch;\r\n\t}\r\n\r\n\t.dock-btn {\r\n\t\t--dock-btn-bg: color-mix(in srgb, var(--dock-orange) 14%, transparent);\r\n\t\t--dock-btn-border: color-mix(in srgb, var(--dock-orange) 30%, transparent);\r\n\t\t--dock-btn-text: color-mix(in srgb, #111827 70%, var(--dock-orange) 30%);\r\n\t\t--dock-btn-shadow: color-mix(in srgb, var(--dock-orange) 25%, transparent);\r\n\r\n\t\twidth: 100%;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: flex-start;\r\n\t\ttext-align: left;\r\n\t\tpadding: 8px 10px;\r\n\t\tmin-height: 36px;\r\n\t\tborder: 1px solid var(--dock-btn-border);\r\n\t\tbackground: var(--dock-btn-bg);\r\n\t\tborder-radius: 12px;\r\n\t\tcursor: pointer;\r\n\t\tfont-size: 13px;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: var(--dock-btn-text);\r\n\t\twhite-space: nowrap;\r\n\t\ttransition:\r\n\t\t\ttransform 0.15s ease,\r\n\t\t\tbox-shadow 0.15s ease,\r\n\t\t\tbackground-color 0.15s ease,\r\n\t\t\tborder-color 0.15s ease;\r\n\t}\r\n\r\n\t.dock-btn:hover {\r\n\t\tbackground: color-mix(in srgb, var(--dock-orange) 20%, transparent);\r\n\t\tborder-color: color-mix(in srgb, var(--dock-orange) 44%, transparent);\r\n\t\tbox-shadow: 0 2px 6px var(--dock-btn-shadow);\r\n\t\ttransform: translateY(-1px);\r\n\t}\r\n\r\n\t.dock-btn:active {\r\n\t\ttransform: translateY(0);\r\n\t\tbox-shadow: 0 1px 2px var(--dock-btn-shadow);\r\n\t}\r\n\r\n\t.dock-btn:focus {\r\n\t\toutline: none;\r\n\t}\r\n\r\n\t.dock-btn:focus-visible {\r\n\t\toutline: 2px solid color-mix(in srgb, var(--dock-orange) 55%, transparent);\r\n\t\toutline-offset: 2px;\r\n\t}\r\n\r\n\t@media (prefers-reduced-motion: reduce) {\r\n\t\t.dock-btn {\r\n\t\t\ttransition: none;\r\n\t\t}\r\n\r\n\t\t.dock-btn:hover {\r\n\t\t\ttransform: none;\r\n\t\t}\r\n\t}\r\n\r\n\t@media (max-width: 1100px) {\r\n\t\t.widget-dock-buttons {\r\n\t\t\tgrid-template-columns: repeat(3, minmax(0, 1fr));\r\n\t\t}\r\n\t}\r\n\r\n\t@media (max-width: 850px) {\r\n\t\t.widget-dock-buttons {\r\n\t\t\tgrid-template-columns: repeat(2, minmax(0, 1fr));\r\n\t\t}\r\n\t}\r\n\r\n\t@media (max-width: 600px) {\r\n\t\t.widget-dock-buttons {\r\n\t\t\tgrid-template-columns: 1fr;\r\n\t\t}\r\n\t}\r\n\r\n\t.widgets-empty {\r\n\t\tcolumn-span: all;\r\n\t}\r\n\r\n\t.card {\r\n\t\tpadding: 15px;\r\n\t\tbackground-color: white;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tgap: 10px;\r\n\t\tbox-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n\t\tborder-radius: 8px;\r\n\t\tcolor: black;\r\n\t\talign-items: stretch;\r\n\t}\r\n\r\n\t.card.widget {\r\n\t\tbackground: var(--tint, #fff);\r\n\t\tborder-left: 6px solid var(--accent, transparent);\r\n\t}\r\n\r\n\t.activity-card {\r\n\t\t--accent: #0ea5e9;\r\n\t\t--tint: #e0f2fe;\r\n\t}\r\n\r\n\t.activity-launch-body {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 18px;\r\n\t\tpadding: 12px 8px 4px;\r\n\t}\r\n\r\n\t.activity-launch-body p {\r\n\t\tmargin: 0;\r\n\t\tcolor: #475569;\r\n\t}\r\n\r\n\t.dashboard-launch {\r\n\t\tdisplay: inline-flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t\tbackground: #0c131d;\r\n\t\tborder: 1px solid #1b8d68;\r\n\t\tborder-radius: 6px;\r\n\t\tcolor: #dce7f3;\r\n\t\tfont-weight: 700;\r\n\t\ttext-decoration: none;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\r\n\t.dashboard-launch.large {\r\n\t\tpadding: 10px 14px;\r\n\t}\r\n\t.reschedule-card {\r\n\t\t--accent: #f59e0b;\r\n\t\t--tint: #fffbeb;\r\n\t}\r\n\t.registration-requests-card {\r\n\t\t--accent: #2563eb;\r\n\t\t--tint: #eff6ff;\r\n\t}\r\n\t.registration-create-card {\r\n\t\t--accent: #7c3aed;\r\n\t\t--tint: #f5f3ff;\r\n\t}\r\n\t.sms-card {\r\n\t\t--accent: #f97316;\r\n\t\t--tint: #ffedd5;\r\n\t}\r\n\t.info-submit-card {\r\n\t\t--accent: #14b8a6;\r\n\t\t--tint: #ccfbf1;\r\n\t}\r\n\t.info-display-card {\r\n\t\t--accent: #06b6d4;\r\n\t\t--tint: #cffafe;\r\n\t}\r\n\t.teachers-list-card {\r\n\t\t--accent: #111827;\r\n\t\t--tint: #f3f4f6;\r\n\t}\r\n\t.students-list-card {\r\n\t\t--accent: #374151;\r\n\t\t--tint: #f9fafb;\r\n\t}\r\n\t.first-classes-card {\r\n\t\t--accent: #059669;\r\n\t\t--tint: #ecfdf5;\r\n\t}\r\n\t.balance-csv-card {\r\n\t\t--accent: #6b7280;\r\n\t\t--tint: #f3f4f6;\r\n\t}\r\n\t.revenue-csv-card {\r\n\t\t--accent: #dc2626;\r\n\t\t--tint: #fef2f2;\r\n\t}\r\n\r\n\t.widget-header {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 10px;\r\n\t}\r\n\r\n\t.widget-actions {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tgap: 10px;\r\n\t}\r\n\r\n\t.widget-title {\r\n\t\tdisplay: inline-flex;\r\n\t\talign-items: center;\r\n\t\tgap: 10px;\r\n\t\tpadding: 6px 8px;\r\n\t\tborder: 0;\r\n\t\tbackground: transparent;\r\n\t\tfont-weight: 800;\r\n\t\tcolor: #1f2937;\r\n\t\tcursor: pointer;\r\n\t\tborder-radius: 8px;\r\n\t\ttext-align: left;\r\n\t\t/* Ensure all titles align perfectly across widgets */\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\r\n\t.widget-title:hover {\r\n\t\tbackground: rgba(255, 255, 255, 0.7);\r\n\t}\r\n\r\n\t.widget-title:focus {\r\n\t\toutline: 2px solid rgba(20, 105, 91, 0.4);\r\n\t\toutline-offset: 2px;\r\n\t}\r\n\r\n\t.chevron {\r\n\t\t/* Fixed width so title text starts on same x */\r\n\t\twidth: 18px;\r\n\t\tdisplay: inline-flex;\r\n\t\tjustify-content: center;\r\n\t\tfont-size: 14px;\r\n\t\topacity: 0.9;\r\n\t}\r\n\r\n\t.widget-body {\r\n\t\twidth: 100%;\r\n\t}\r\n\r\n\t.widget-body.scroll {\r\n\t\tmax-height: 650px;\r\n\t\toverflow: auto;\r\n\t\tpadding: 10px;\r\n\t\tborder-radius: 8px;\r\n\t\tborder: 1px solid rgba(0, 0, 0, 0.08);\r\n\t\tbackground: rgba(255, 255, 255, 0.75);\r\n\t}\r\n\r\n\t.btn {\r\n\t\tpadding: 8px 12px;\r\n\t\tborder: 1px solid #ccc;\r\n\t\tbackground: white;\r\n\t\tborder-radius: 8px;\r\n\t\tcursor: pointer;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\r\n\t.btn.small {\r\n\t\tpadding: 6px 10px;\r\n\t\tborder-radius: 6px;\r\n\t\tfont-size: 12px;\r\n\t}\r\n\r\n\t.empty {\r\n\t\tpadding: 18px 16px;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground: #f8f9fa;\r\n\t\tborder: 1px solid #e0e0e0;\r\n\t\tcolor: #666;\r\n\t}\r\n\r\n\t@media (max-width: 1100px) {\r\n\t\t.widgets-grid {\r\n\t\t\tgrid-template-columns: 1fr;\r\n\t\t}\r\n\t}\r\n\r\n\t@media (max-width: 600px) {\r\n\t\t.activity-launch-body {\r\n\t\t\talign-items: stretch;\r\n\t\t\tflex-direction: column;\r\n\t\t}\r\n\t}\r\n</style>\r\n\r\n","export function buildMonthOptions(periods, currentMonth) {\r\n  const options = [...(periods || [])].sort((a, b) => b.value.localeCompare(a.value));\r\n  const selected = options.some((item) => item.value === currentMonth)\r\n    ? currentMonth\r\n    : (options[0]?.value || currentMonth);\r\n  return { options, selected };\r\n}\r\n\r\nexport function sparklinePoints(values, width = 160, height = 48) {\r\n  if (!values?.length) return '';\r\n  const numeric = values.map((value) => Number(value) || 0);\r\n  const minimum = Math.min(...numeric);\r\n  const maximum = Math.max(...numeric);\r\n  const range = maximum - minimum;\r\n  return numeric.map((value, index) => {\r\n    const x = numeric.length === 1 ? width / 2 : index / (numeric.length - 1) * width;\r\n    const y = range === 0 ? height / 2 : height - ((value - minimum) / range * height);\r\n    return `${Number(x.toFixed(2))},${Number(y.toFixed(2))}`;\r\n  }).join(' ');\r\n}\r\n\r\nexport function deltaTone(direction, inverse = false) {\r\n  if (direction === 'flat' || !direction) return 'neutral';\r\n  const positive = direction === 'up';\r\n  return positive !== inverse ? 'positive' : 'negative';\r\n}\r\n\r\nexport function financialCardDefinitions() {\r\n  return [\r\n    { key: 'projected_student_charges', label: 'Projected Student Charges' },\r\n    { key: 'realized_student_charges', label: 'Realized Student Charges' },\r\n    { key: 'cash_collected', label: 'Cash Collected' },\r\n    { key: 'accrued_teacher_pay', label: 'Accrued Teacher Pay', neutral: true },\r\n    { key: 'realized_contribution', label: 'Realized Gross Profit' },\r\n    { key: 'total_profit', label: 'Total Profit' },\r\n  ];\r\n}\r\n\r\nexport function cashFlowCardDefinitions() {\r\n  return [\r\n    { key: 'total_bank_outflows', label: 'Bank Outflows (excl. prior-month teacher pay)', inverse: true },\r\n    { key: 'company_expenditures', label: 'Company Expenditures', inverse: true },\r\n    { key: 'net_cash_flow', label: 'Net Cash Flow (excl. prior-month teacher pay)' },\r\n  ];\r\n}\r\n\r\nexport function formatCurrency(value) {\r\n  return new Intl.NumberFormat('en-IE', {\r\n    style: 'currency', currency: 'EUR', maximumFractionDigits: 2,\r\n  }).format(Number(value) || 0);\r\n}\r\n\r\nexport function formatOptionalCurrency(value) {\r\n  return value == null ? '—' : formatCurrency(value);\r\n}\r\n\r\nexport function formatDelta(comparison) {\r\n  if (!comparison) return 'No comparison';\r\n  const sign = Number(comparison.absolute_change) > 0 ? '+' : '';\r\n  const percentage = comparison.percentage_change == null\r\n    ? 'new'\r\n    : `${comparison.percentage_change > 0 ? '+' : ''}${comparison.percentage_change}%`;\r\n  return `${sign}${formatCurrency(comparison.absolute_change)} · ${percentage}`;\r\n}\r\n\r\nfunction comparisonDate(value) {\r\n  if (!value) return 'unavailable';\r\n  const date = new Date(value);\r\n  if (Number.isNaN(date.getTime())) return 'unavailable';\r\n  const parts = new Intl.DateTimeFormat('en-CA', {\r\n    timeZone: 'Europe/Vilnius', year: 'numeric', month: '2-digit', day: '2-digit',\r\n    hour: '2-digit', minute: '2-digit', second: '2-digit', hourCycle: 'h23',\r\n  }).formatToParts(date);\r\n  const values = Object.fromEntries(parts.map(({ type, value }) => [type, value]));\r\n  return `${values.year}-${values.month}-${values.day} ${values.hour}:${values.minute}:${values.second}`;\r\n}\r\n\r\nexport function financialComparisonRows(metric = {}) {\r\n  return [\r\n    ['comparison', 'Previous month'],\r\n    ['year_over_year_comparison', 'Same month last year'],\r\n  ].map(([key, name]) => {\r\n    const comparison = metric?.[key];\r\n    const month = comparison?.period?.month;\r\n    const monthDate = /^\\d{4}-(0[1-9]|1[0-2])$/.test(month || '') ? new Date(`${month}-01T00:00:00Z`) : null;\r\n    const monthLabel = monthDate ? new Intl.DateTimeFormat('en-GB', { month: 'long', year: 'numeric', timeZone: 'UTC' }).format(monthDate) : null;\r\n    const label = monthLabel ? `vs ${monthLabel} · ${name}` : name;\r\n    const validNumbers = comparison?.previous_value != null && comparison?.absolute_change != null\r\n      && Number.isFinite(Number(comparison.previous_value)) && Number.isFinite(Number(comparison.absolute_change));\r\n    const available = comparison?.status === 'available' && validNumbers;\r\n    let value = 'Comparison unavailable';\r\n    if (comparison?.status === 'partial') value = 'Comparison incomplete';\r\n    else if (comparison?.status === 'unavailable') value = key === 'year_over_year_comparison' ? 'No recorded prior-year data' : 'No recorded previous-month data';\r\n    else if (available) {\r\n      const change = Number(comparison.absolute_change);\r\n      const classCount = metric?.unit === 'classes';\r\n      const percent = comparison.percentage_change == null\r\n        ? `Percentage unavailable—baseline ${classCount ? '0' : '€0'}`\r\n        : `${comparison.percentage_change > 0 ? '+' : ''}${comparison.percentage_change}%`;\r\n      value = `${change > 0 ? '+' : ''}${classCount ? new Intl.NumberFormat('en-IE').format(change) : formatCurrency(change)} · ${percent}`;\r\n    }\r\n    const range = comparison?.range_basis === 'full_month_projection' ? 'Full-month projection'\r\n      : comparison?.range_basis === 'full_month_schedule' ? 'Full-month schedules'\r\n      : comparison?.range_basis === 'full_month' ? 'Full months' : 'Matching elapsed dates';\r\n    const basis = comparison?.calculation_basis === 'recalculated'\r\n      ? 'Recalculated using the dashboard pricing and account data; not a finalized historical payment total.'\r\n      : metric?.unit === 'classes' ? 'Based on recorded class schedules and feedback.' : 'Based on recorded transactions.';\r\n    const warnings = (comparison?.warnings || []).map((warning) => `${warning.period || ''}: ${String(warning.code || 'incomplete data').replaceAll('_', ' ')}`).join('; ');\r\n    const details = comparison\r\n      ? `${range}. Current: ${comparisonDate(comparison.current_period?.start)} until ${comparisonDate(comparison.current_data_through)}. Comparison: ${comparisonDate(comparison.period?.start)} until ${comparisonDate(comparison.data_through)}. Cutoffs are exclusive; Europe/Vilnius. ${basis}${comparison.status === 'unavailable' ? ' No relevant source records were found; this does not establish zero activity.' : ''}${warnings ? ` Data quality: ${warnings}.` : ''}`\r\n      : 'This snapshot does not contain this comparison. Refresh data to calculate it.';\r\n    return { key, label, value, details, direction: available ? comparison.direction : null };\r\n  });\r\n}\r\n\r\nexport function volumeBarTooltip(point, series) {\r\n  if (series === 'completed') {\r\n    return `${point.date} · Teacher-confirmed completed: ${Number(point.completed_classes) || 0}`;\r\n  }\r\n  return `${point.date} · Active scheduled: ${Number(point.active_classes) || 0}`;\r\n}\r\n\r\nexport function cumulativeChartPoints(rows, key, width = 800, height = 210) {\r\n  if (!rows?.length) return [];\r\n  const values = rows.map((row) => Number(row[key]) || 0);\r\n  const minimum = Math.min(...values);\r\n  const maximum = Math.max(...values);\r\n  const range = maximum - minimum;\r\n\r\n  return rows.map((row, index) => {\r\n    const value = values[index];\r\n    const x = rows.length === 1 ? width / 2 : index / (rows.length - 1) * width;\r\n    const y = range === 0 ? height / 2 : height - ((value - minimum) / range * height);\r\n    return {\r\n      x: Number(x.toFixed(2)),\r\n      y: Number(y.toFixed(2)),\r\n      date: row.date,\r\n      value,\r\n      dailyChange: value - (index === 0 ? 0 : values[index - 1]),\r\n    };\r\n  });\r\n}\r\n\r\n// Daily series contain cumulative money values; subtract before explaining a day.\r\nexport function chartDayDetails(data, key, index, teacher = null) {\r\n  const rows = teacher?.daily_series || data?.series?.daily || [];\r\n  const row = rows[index] || {};\r\n  const previous = rows[index - 1];\r\n  const number = value => value == null || !Number.isFinite(Number(value)) ? null : Number(value);\r\n  const delta = field => {\r\n    const current = number(row[field]);\r\n    const before = index === 0 ? 0 : number(previous?.[field]);\r\n    return current == null || before == null ? null : Math.round((current - before) * 100) / 100;\r\n  };\r\n  const component = (label, field, sign = 1) => ({label, amount: delta(field) == null ? null : delta(field) * sign});\r\n  const specs = {\r\n    net_cash_flow: [['Cash collected','cash_collected',1],['Bank outflows','total_bank_outflows',-1]],\r\n    realized_contribution: [['Realized student charges','realized_student_charges',1],['Accrued teacher pay','accrued_teacher_pay',-1]],\r\n    total_profit: [['Realized student charges','realized_student_charges',1],['Accrued teacher pay','accrued_teacher_pay',-1],['Other company expenses','non_teacher_expenditures',-1]],\r\n  };\r\n  const components = (specs[key] || []).map(args => component(...args));\r\n  const localDate = new Intl.DateTimeFormat('en-CA',{timeZone:'Europe/Vilnius',year:'numeric',month:'2-digit',day:'2-digit'});\r\n  const cutoff = data?.data_through ? localDate.format(new Date(data.data_through)) : rows.at(-1)?.date;\r\n  const start = data?.series?.daily?.[0]?.date;\r\n  const transactions = (data?.expenditures?.transactions || []).filter(transaction => {\r\n    if (key === 'net_cash_flow' || key === 'total_bank_outflows') return transaction.date === row.date && transaction.included_in_cash_flow === true;\r\n    if (!['company_expenditures','total_profit'].includes(key)) return false;\r\n    if (!transaction.is_company_expenditure || !transaction.expense_in_period) return false;\r\n    if (key === 'total_profit' && transaction.category === 'Teacher Compensation') return false;\r\n    let date = transaction.expense_date || transaction.date;\r\n    const plottedCutoff = cutoff < start ? start : cutoff;\r\n    if (date > plottedCutoff) date = plottedCutoff;\r\n    return date === row.date;\r\n  }).sort((a,b) => Number(b.amount) - Number(a.amount));\r\n  const teachers = ['accrued_teacher_pay','realized_contribution','total_profit'].includes(key)\r\n    ? (data?.teacher_watchlist || []).map(owner => {\r\n      const points = owner.daily_series || [];\r\n      const dayIndex = points.findIndex(point => point.date === row.date);\r\n      const amount = dayIndex < 0 ? 0 : Number(points[dayIndex].accrued_pay || 0) - Number(points[dayIndex - 1]?.accrued_pay || 0);\r\n      return {label:owner.teacher_name,amount:Math.round(amount * 100) / 100};\r\n    }).filter(owner => owner.amount !== 0).sort((a,b)=> b.amount-a.amount) : [];\r\n  let note = '';\r\n  if (key === 'projected_student_charges') note = 'Scheduled lesson prices for this date, including past and future lessons. Individual class quotes are not included in this snapshot.';\r\n  if (key === 'realized_student_charges') note = 'Recorded student charges assigned to the lesson date. Individual charge records are not included in this snapshot.';\r\n  if (key === 'cash_collected' || key === 'net_cash_flow') note = 'Cash collected is the daily settled-payment total. Individual incoming payments are not included in this snapshot.';\r\n  if (key === 'net_cash_flow' || key === 'total_bank_outflows') note += ' Outflows exclude prior-month teacher pay, matching this graph.';\r\n  if (key === 'company_expenditures') note = 'Expenses follow their allocated service date. Month-level allocations appear at the reporting cutoff; payment dates are shown below.';\r\n  if (key === 'total_profit') note = 'Teacher cost is deducted once through accrued pay. Payment rows below contain only other company expenses.';\r\n  if (teacher) note = 'Daily accrued pay for this teacher, with feedback and completed-class totals through this date.';\r\n  return {date:row.date,value:number(row[key]),change:delta(key),components,transactions,teachers,note,\r\n    counts: teacher ? [{label:'Completed through this date',value:row.completed_classes},{label:'Feedback submitted / due',value:`${row.feedback_submitted || 0} / ${row.feedback_due || 0}`}]\r\n      : [{label:'Active scheduled lessons',value:row.active_classes},{label:'Teacher-confirmed completed',value:row.completed_classes}].filter(item=>item.value != null)};\r\n}\r\n","<script>\r\n  import { onDestroy } from 'svelte';\r\n  import { chartDayDetails, cumulativeChartPoints, formatOptionalCurrency } from './adminActivityDashboard.js';\r\n  export let rows = [];\r\n  export let metric;\r\n  export let label;\r\n  export let data = {};\r\n  export let teacher = null;\r\n  export let height = 48;\r\n  let active = null;\r\n  let pinned = false;\r\n  let left = 8;\r\n  let top = 8;\r\n  let closeTimer;\r\n  let previousRows;\r\n  let container;\r\n  let maxHeight = 400;\r\n  $: points = cumulativeChartPoints(rows, metric, 800, 200);\r\n  $: details = active == null ? null : chartDayDetails(data, metric, active, teacher);\r\n  $: if (previousRows !== rows) { previousRows = rows; active = null; pinned = false; }\r\n  $: path = points.filter((point,index) => rows[index][metric] != null).map(point=>`${point.x},${point.y}`).join(' ');\r\n  const money = value => value == null ? 'Unavailable' : `${value > 0 ? '+' : ''}${formatOptionalCurrency(value)}`;\r\n  function show(index, event) {\r\n    if (event.type === 'mouseenter' && !window.matchMedia('(hover: hover)').matches) return;\r\n    clearTimeout(closeTimer);\r\n    if (pinned && active !== index && event.type === 'mouseenter') return;\r\n    if (active == null) window.dispatchEvent(new CustomEvent('dashboardtrendopen', { detail: container }));\r\n    active = index;\r\n    const box = container.getBoundingClientRect();\r\n    // Mobile pages can have horizontal overflow. innerWidth then exceeds the\r\n    // visible screen, so anchor the panel to the actual layout viewport.\r\n    const viewportWidth = document.documentElement.clientWidth;\r\n    const viewportHeight = document.documentElement.clientHeight;\r\n    left = Math.min(Math.max(8, box.left), Math.max(8, viewportWidth - 388));\r\n    const below = viewportHeight - box.bottom - 16;\r\n    const above = box.top - 16;\r\n    maxHeight = Math.min(400, Math.max(100, below > above ? below : above), viewportHeight - 16);\r\n    top = below >= maxHeight ? box.bottom + 8 : Math.max(8, box.top - maxHeight - 8);\r\n  }\r\n  function close() { active = null; pinned = false; }\r\n  function leave() { if (!pinned) closeTimer = setTimeout(close, 200); }\r\n  function toggle(index,event) { if (pinned && active === index) close(); else { pinned = false; show(index,event); pinned = true; } }\r\n  function key(event,index) {\r\n    if(event.key === 'Escape') { close(); return; }\r\n    if(event.key === 'Enter' || event.key === ' ') { event.preventDefault(); toggle(index,event); }\r\n    if(event.key === 'ArrowRight' || event.key === 'ArrowLeft') {\r\n      event.preventDefault(); pinned = false;\r\n      const next = Math.min(rows.length-1,Math.max(0,index+(event.key === 'ArrowRight' ? 1 : -1)));\r\n      event.currentTarget.parentElement.querySelectorAll('[role=\"button\"]')[next]?.focus();\r\n    }\r\n  }\r\n  onDestroy(()=>clearTimeout(closeTimer));\r\n</script>\r\n\r\n<svelte:window on:dashboardtrendopen={event=>{if(event.detail !== container) close();}} on:keydown={event=>{if(event.key === 'Escape') close();}} on:pointerdown={event=>{if(active != null && !container?.contains(event.target)) close();}} />\r\n<div bind:this={container} class=\"trend\" role=\"group\" aria-label={label} style={`height:${height}px`} on:mouseenter={()=>clearTimeout(closeTimer)} on:mouseleave={leave}>\r\n  <svg viewBox=\"0 0 800 200\" preserveAspectRatio=\"none\" aria-label={label}>\r\n    <polyline points={path}/>\r\n    {#if active != null && points[active] && rows[active]?.[metric] != null}\r\n      <line x1={points[active].x} x2={points[active].x} y1=\"0\" y2=\"200\"/>\r\n      <circle cx={points[active].x} cy={points[active].y} r=\"4\"/>\r\n    {/if}\r\n    {#each points as point,index}\r\n      <g role=\"button\" tabindex={index === (active ?? 0) ? 0 : -1} aria-label={`${point.date}: ${formatOptionalCurrency(rows[index][metric])}. Show daily breakdown`} aria-expanded={active === index} on:mouseenter={event=>show(index,event)} on:focus={event=>show(index,event)} on:blur={leave} on:click={event=>toggle(index,event)} on:keydown={event=>key(event,index)}>\r\n        <rect x={points.length === 1 ? 0 : Math.max(0,point.x-400/(points.length-1))} y=\"0\" width={points.length === 1 ? 800 : (index === 0 || index === points.length-1 ? 400 : 800)/(points.length-1)} height=\"200\"/>\r\n      </g>\r\n    {/each}\r\n  </svg>\r\n  {#if details}\r\n    <div class=\"hover-card\" role=\"tooltip\" style={`left:${left}px;top:${top}px;max-height:${maxHeight}px`} on:mouseenter={()=>clearTimeout(closeTimer)}>\r\n      <header><strong>{details.date}</strong><button type=\"button\" on:click={close} aria-label=\"Close graph details\">×</button></header>\r\n      <div class=\"chart-name\">{label.replace(' cumulative daily trend','')}</div>\r\n      <div class=\"amount\"><span>Cumulative total</span><b>{details.value == null ? 'Unavailable' : formatOptionalCurrency(details.value)}</b></div>\r\n      <div class=\"amount\"><span>Change on this day</span><b class:negative={details.change < 0}>{money(details.change)}</b></div>\r\n      {#each details.components as part}<div class=\"amount\"><span>{part.label}</span><b>{money(part.amount)}</b></div>{/each}\r\n      {#each details.counts as count}<div class=\"amount\"><span>{count.label}</span><b>{count.value}</b></div>{/each}\r\n      {#if details.teachers.length}<h4>Teacher pay on this day</h4>{#each details.teachers as owner}<div class=\"amount\"><span>{owner.label}</span><b>{formatOptionalCurrency(owner.amount)}</b></div>{/each}{/if}\r\n      {#if details.transactions.length}\r\n        <h4>Payments contributing to this day · {details.transactions.length}</h4>\r\n        {#each details.transactions as transaction}\r\n          <div class=\"transaction\"><div class=\"amount\"><strong>{transaction.payee || transaction.category}</strong><b>{formatOptionalCurrency(transaction.amount)}</b></div><small>{transaction.category} · Paid {transaction.date}</small><p>{transaction.description}</p></div>\r\n        {/each}\r\n      {/if}\r\n      {#if details.note}<p class=\"note\">{details.note}</p>{/if}\r\n      <small>Hover or use arrow keys to explore. Click or tap to keep open.</small>\r\n    </div>\r\n  {/if}\r\n</div>\r\n<style>\r\n  .trend{position:relative;margin:10px 0 4px;width:100%;min-width:0}.trend svg{width:100%;height:100%;overflow:visible;display:block}polyline{fill:none;stroke:var(--green,#26d99a);stroke-width:2;vector-effect:non-scaling-stroke}line{stroke:#708399;stroke-width:1;vector-effect:non-scaling-stroke;stroke-dasharray:3 3}circle{fill:#26d99a;vector-effect:non-scaling-stroke}rect{fill:transparent;cursor:crosshair}g:focus{outline:none}g:focus-visible rect{stroke:#708399;stroke-width:1;vector-effect:non-scaling-stroke}.hover-card{position:fixed;z-index:10000;box-sizing:border-box;width:min(380px,calc(100vw - 16px));max-height:min(400px,65vh);overflow:auto;overscroll-behavior:contain;padding:14px;background:#0c131d;color:#dce7f3;border:1px solid #38546b;border-radius:6px;box-shadow:0 8px 28px #0009;font:12px/1.5 system-ui,sans-serif;text-align:left;white-space:normal;letter-spacing:normal}header,.amount{display:flex;justify-content:space-between;align-items:baseline;gap:12px}header{color:#26d99a}button{background:transparent;color:#dce7f3;border:0;cursor:pointer;font-size:20px;padding:0 5px}button:focus-visible{outline:2px solid #26d99a}.chart-name{font-size:11px;color:#9aaec2;margin:4px 0 10px}.amount{margin:5px 0}.amount span,.amount strong{overflow-wrap:anywhere}.amount b{white-space:nowrap;font-variant-numeric:tabular-nums}.negative{color:#ff8797}h4{font-size:11px;margin:14px 0 6px;border-top:1px solid #294158;padding-top:8px}.transaction{border-bottom:1px solid #1c2a39;padding-bottom:6px}.transaction p{margin:3px 0;font-size:11px;overflow-wrap:anywhere}small,.note{font-size:10px;color:#9aaec2}.note{border-top:1px solid #294158;padding-top:8px;margin-top:10px}\r\n</style>\r\n","<script>\r\n  import { onDestroy, onMount } from 'svelte';\r\n  import DashboardTrend from './DashboardTrend.svelte';\r\n  import { getApiBase } from './apiBase.js';\r\n  import { buildMonthOptions, cashFlowCardDefinitions, deltaTone, financialCardDefinitions, financialComparisonRows, formatCurrency, formatDelta, formatOptionalCurrency, volumeBarTooltip } from './adminActivityDashboard.js';\r\n\r\n  const endpoint = `${getApiBase()}/studentplayground/api/admin/activity-dashboard/`;\r\n  const expenditureEndpoint = `${getApiBase()}/studentplayground/api/admin/activity-dashboard/expenditures/refresh/`;\r\n  const currentMonth = new Intl.DateTimeFormat('en-CA', { timeZone: 'Europe/Vilnius', year: 'numeric', month: '2-digit' }).format(new Date());\r\n  let selectedMonth = currentMonth;\r\n  let availableMonths = [{ value: currentMonth, label: currentMonth }];\r\n  let dashboardData = null;\r\n  let snapshot = null;\r\n  let refresh = { status: 'idle' };\r\n  let expenditureRefresh = { status: 'idle' };\r\n  let loading = true;\r\n  let refreshing = false;\r\n  let expenditureRefreshing = false;\r\n  let error = '';\r\n  let pollTimer;\r\n\r\n  $: metrics = dashboardData?.metrics || {};\r\n  $: daily = dashboardData?.series?.daily || [];\r\n  $: cards = dashboardData ? financialCardDefinitions() : [];\r\n  $: cashFlowCards = dashboardData ? cashFlowCardDefinitions() : [];\r\n  $: expenditures = dashboardData?.expenditures || { status: 'unavailable', categories: [], transactions: [] };\r\n  $: displayState = (dashboardData?.state || (['queued', 'running'].includes(refresh.status) ? 'refreshing' : 'ready')).toUpperCase();\r\n  $: maxDailyClasses = Math.max(1, ...daily.map((row) => Number(row.active_classes) || 0));\r\n\r\n  function headers() { return { Authorization: `Bearer ${localStorage.getItem('jwtToken')}`, 'Content-Type': 'application/json' }; }\r\n\r\n  async function readDashboard({ quiet = false } = {}) {\r\n    if (!quiet) loading = true;\r\n    error = '';\r\n    try {\r\n      const response = await fetch(`${endpoint}?selected_month=${encodeURIComponent(selectedMonth)}`, { headers: headers() });\r\n      const body = await response.json();\r\n      if (!response.ok && response.status !== 202) throw new Error(body.message || `Request failed (${response.status})`);\r\n      if (body.available_periods?.length) availableMonths = buildMonthOptions(body.available_periods, selectedMonth).options;\r\n      dashboardData = body.data || dashboardData;\r\n      snapshot = body.snapshot || snapshot;\r\n      refresh = body.refresh || { status: 'idle' };\r\n      expenditureRefresh = body.expenditure_refresh || { status: 'idle' };\r\n      if (['queued', 'running'].includes(refresh.status) || ['queued', 'running'].includes(expenditureRefresh.status)) schedulePoll(); else stopPoll();\r\n    } catch (err) { error = err.message; } finally { loading = false; }\r\n  }\r\n\r\n  async function requestRefresh() {\r\n    refreshing = true;\r\n    error = '';\r\n    try {\r\n      const response = await fetch(endpoint, { method: 'POST', headers: headers(), body: JSON.stringify({ selected_month: selectedMonth }) });\r\n      const body = await response.json();\r\n      if (!response.ok && response.status !== 202) throw new Error(body.message || 'Refresh failed');\r\n      refresh = body.refresh;\r\n      schedulePoll();\r\n    } catch (err) { error = err.message; } finally { refreshing = false; }\r\n  }\r\n\r\n  async function requestExpenditureRefresh() {\r\n    expenditureRefreshing = true;\r\n    error = '';\r\n    try {\r\n      const response = await fetch(expenditureEndpoint, { method: 'POST', headers: headers(), body: '{}' });\r\n      const body = await response.json();\r\n      if (!response.ok && response.status !== 202) throw new Error(body.message || 'Expenditure refresh failed');\r\n      expenditureRefresh = body.refresh;\r\n      schedulePoll();\r\n    } catch (err) { error = err.message; } finally { expenditureRefreshing = false; }\r\n  }\r\n\r\n  function schedulePoll() { if (!pollTimer) pollTimer = setInterval(() => readDashboard({ quiet: true }), 2500); }\r\n  function stopPoll() { if (pollTimer) clearInterval(pollTimer); pollTimer = null; }\r\n  function selectMonth() { dashboardData = null; snapshot = null; stopPoll(); readDashboard(); }\r\n  function seriesFor(key) { return daily.filter((row) => row[key] != null).map((row) => Number(row[key]) || 0); }\r\n  function dateTime(value) { return value ? new Date(value).toLocaleString('lt-LT') : '—'; }\r\n\r\n  onMount(readDashboard);\r\n  onDestroy(stopPoll);\r\n</script>\r\n\r\n{#snippet comparisons(metric, label, inverse = false, neutral = false)}\r\n  {#each financialComparisonRows(metric) as comparison (comparison.key)}\r\n    <div class=\"comparison-row\">\r\n      <div class=\"delta {neutral ? 'neutral' : deltaTone(comparison.direction, inverse)}\">\r\n        {#if comparison.direction}<span aria-hidden=\"true\">{comparison.direction === 'up' ? '▲' : comparison.direction === 'down' ? '▼' : '→'}</span>{/if}\r\n        {comparison.value}\r\n      </div>\r\n      <details class=\"comparison-details\">\r\n        <summary aria-label={`${label}: ${comparison.label}. Show comparison details`}>{comparison.label}</summary>\r\n        <p>{comparison.details}</p>\r\n      </details>\r\n    </div>\r\n  {/each}\r\n{/snippet}\r\n\r\n<section class=\"terminal\" aria-busy={loading}>\r\n  <header class=\"masthead\">\r\n    <div><div class=\"eyebrow\">TUTORY OPERATIONS · ACTIVITY MARKET</div><h1>Activity Dashboard <span>V{dashboardData?.definition_version || 8}</span></h1></div>\r\n    <div class=\"controls\">\r\n      <label>REPORTING PERIOD<select bind:value={selectedMonth} on:change={selectMonth} disabled={loading}>{#each availableMonths as month}<option value={month.value}>{month.label}</option>{/each}</select></label>\r\n      <button on:click={requestRefresh} disabled={refreshing || refresh.status === 'running'}>{refreshing ? 'QUEUING…' : 'REFRESH DATA'}</button>\r\n      <button class=\"expense-button\" on:click={requestExpenditureRefresh} disabled={expenditureRefreshing || ['queued', 'running'].includes(expenditureRefresh.status)}>{expenditureRefreshing ? 'QUEUING…' : 'REFRESH EXPENDITURES'}</button>\r\n    </div>\r\n  </header>\r\n\r\n  <div class=\"ticker\" role=\"status\"><span class:live={refresh.status === 'running'} class=\"dot\"></span><b>{displayState}</b><span>{refresh.status === 'queued' ? 'REFRESH QUEUED' : refresh.status === 'running' ? 'CALCULATING' : 'LAST KNOWN-GOOD SNAPSHOT'}</span><span>DATA THROUGH {dateTime(dashboardData?.data_through || snapshot?.data_through)}</span><span>GENERATED {dateTime(dashboardData?.generated_at || snapshot?.generated_at)}</span><span>TZ EUROPE/VILNIUS</span></div>\r\n  <div class=\"ticker expense-ticker\" role=\"status\"><span class:live={expenditureRefresh.status === 'running'} class=\"dot expense-dot\"></span><b>EXPENDITURES {expenditureRefresh.status?.toUpperCase() || 'IDLE'}</b><span>SOURCE {expenditures.source_repository || 'NOT IMPORTED'}</span><span>COMMIT {expenditures.source_commit_sha?.slice(0, 8) || '—'}</span><span>IMPORTED {dateTime(expenditures.imported_at)}</span><span>EXPENSE DATA THROUGH {expenditures.data_through || '—'}</span></div>\r\n  {#if error}<div class=\"alert error\">{error}</div>{/if}\r\n  {#if refresh.error}<div class=\"alert error\">LAST REFRESH FAILED · {refresh.error}</div>{/if}\r\n  {#if !dashboardData && loading}<div class=\"empty\">LOADING LAST KNOWN-GOOD SNAPSHOT…</div>\r\n  {:else if !dashboardData}<div class=\"empty\">FIRST SNAPSHOT IS {refresh.status?.toUpperCase() || 'QUEUED'}.</div>\r\n  {:else}\r\n    <div class=\"market-grid\">\r\n      {#each cards as card}\r\n        <article class=\"quote-card\" aria-label={card.label}>\r\n          <div class=\"quote-label\">{card.label}</div>\r\n          <div class=\"quote-value\">{formatOptionalCurrency(metrics[card.key]?.value)}</div>\r\n          {#if card.key === 'total_profit'}\r\n            <p class=\"profit-calculation\" role=\"note\" aria-label=\"Total Profit calculation\">\r\n              {#if metrics.total_profit?.value == null}\r\n                Monthly expense data is unavailable.\r\n              {:else}\r\n                Gross Profit {formatOptionalCurrency(metrics.total_profit?.breakdown?.gross_profit)} minus other company expenses {formatOptionalCurrency(metrics.total_profit?.breakdown?.non_teacher_expenditures)}. Teacher pay is already deducted in Gross Profit.\r\n              {/if}\r\n            </p>\r\n          {/if}\r\n          {@render comparisons(metrics[card.key], card.label, false, card.neutral)}\r\n          <DashboardTrend rows={daily} metric={card.key} label={`${card.label} cumulative daily trend`} data={dashboardData} />\r\n          <div class=\"basis\">{metrics[card.key]?.calculation_basis === 'recalculated' ? 'Recalculated · ' : ''}{metrics[card.key]?.basis?.replaceAll('_', ' ') || 'derived metric'} · {metrics[card.key]?.completeness || 'unknown'}</div>\r\n        </article>\r\n      {/each}\r\n    </div>\r\n\r\n    <div class=\"activity-strip\">\r\n      <div role=\"group\" aria-label=\"Active Scheduled\"><small>ACTIVE SCHEDULED</small><strong>{metrics.active_scheduled_classes?.value || 0}</strong>{@render comparisons(metrics.active_scheduled_classes, 'Active Scheduled')}</div>\r\n      <div><small>ENDED ACTIVE</small><strong>{metrics.ended_active_classes?.value || 0}</strong></div>\r\n      <div role=\"group\" aria-label=\"Completed\"><small>COMPLETED</small><strong>{metrics.completed_classes?.value || 0}</strong>{@render comparisons(metrics.completed_classes, 'Completed')}</div>\r\n      <div><small>FEEDBACK SUBMITTED</small><strong>{metrics.teacher_feedback?.submitted || 0}/{metrics.teacher_feedback?.due || 0}</strong></div><div><small>SUBMISSION RATE</small><strong>{metrics.teacher_feedback?.rate || 0}%</strong></div><div><small>INCIDENTS</small><strong>{metrics.responsibility_incidents?.total || 0}</strong></div>\r\n    </div>\r\n\r\n    <div class=\"market-grid cash-flow-grid\">\r\n      {#each cashFlowCards as card}\r\n        <article class=\"quote-card cash-flow-card\" aria-label={card.label}>\r\n          <div class=\"quote-label\">{card.label}</div>\r\n          <div class=\"quote-value\">{formatOptionalCurrency(metrics[card.key]?.value)}</div>\r\n          {@render comparisons(metrics[card.key], card.label, card.inverse)}\r\n          <DashboardTrend rows={daily} metric={card.key} label={`${card.label} cumulative daily trend`} data={dashboardData} />\r\n          <div class=\"basis\">{metrics[card.key]?.basis?.replaceAll('_', ' ') || 'source unavailable'} · {metrics[card.key]?.completeness || 'unavailable'}</div>\r\n        </article>\r\n      {/each}\r\n    </div>\r\n\r\n    {#if expenditures.status !== 'available'}\r\n      <div class=\"alert source-unavailable\">EXPENDITURE DATA IS UNAVAILABLE FOR {selectedMonth}. Refresh expenditures after committing updated Payment_documents to InvoiceScraper.</div>\r\n    {:else}\r\n      <p class=\"expense-allocation-note\" role=\"note\" aria-label=\"Expense allocation basis\">Teacher costs are assigned to the service month; other expenses use their payment date. Bank outflows and net cash flow exclude teacher pay for earlier service months. Current-month teacher pay remains included on its payment date. Excluded prior-month teacher pay: {formatOptionalCurrency(expenditures.excluded_prior_month_teacher_pay)}. Teacher costs reflect known payments and are not prorated by day.</p>\r\n      {#if expenditures.allocation_warnings?.length}<p class=\"expense-allocation-note warning\" role=\"note\">{expenditures.allocation_warnings.some((warning) => warning.code === 'expense_allocation_refresh_required') ? 'Refresh expenditures to apply the service-month allocation.' : 'Some teacher payment descriptions name multiple months. Their expense date remains the payment date until reviewed.'}</p>{/if}\r\n      <div class=\"expense-panels\">\r\n        <article class=\"panel\">\r\n          <div class=\"panel-title\"><span>COMPANY EXPENDITURES BY CATEGORY</span><span>RANKED · {formatCurrency(expenditures.company_expenditures)}</span></div>\r\n          <div class=\"category-list\">\r\n            {#each expenditures.categories || [] as category}\r\n              <details class=\"category-row\">\r\n                <summary><span>{category.category}</span><span class=\"category-bar\" title={`${category.category}: ${formatCurrency(category.total)} (${category.percentage}%). ${category.payees?.map(payee => `${payee.payee}: ${formatCurrency(payee.total)}`).join(\"; \") || \"\"}`}><i style={`width:${category.percentage}%`}></i></span><strong>{formatCurrency(category.total)}</strong><small>{category.percentage}%</small></summary>\r\n                {#each category.payees || [] as payee}\r\n                  <details class=\"payee-row\">\r\n                    <summary><span>{payee.payee}</span><strong>{formatCurrency(payee.total)}</strong></summary>\r\n                    <table><thead><tr><th>PAID DATE</th><th>EXPENSE MONTH</th><th>DESCRIPTION</th><th>AMOUNT</th></tr></thead><tbody>{#each payee.transactions || [] as transaction}<tr><td>{transaction.date}</td><td>{transaction.expense_date?.slice(0, 7) || selectedMonth}</td><td>{transaction.description || '—'}</td><td>{formatCurrency(transaction.amount)}</td></tr>{/each}</tbody></table>\r\n                  </details>\r\n                {/each}\r\n              </details>\r\n            {:else}<div class=\"muted category-empty\">NO CLASSIFIED COMPANY EXPENDITURES</div>{/each}\r\n          </div>\r\n        </article>\r\n        <article class=\"panel\">\r\n          <div class=\"panel-title\"><span>PAYMENTS &amp; ALLOCATED EXPENSES</span><span>OUTFLOWS EXCL. PRIOR-MONTH TEACHER PAY {formatOptionalCurrency(expenditures.total_bank_outflows)}</span></div>\r\n          <div class=\"table-wrap expense-table\"><table><thead><tr><th>PAID DATE</th><th>EXPENSE MONTH</th><th>CATEGORY / PAYEE</th><th>DESCRIPTION</th><th>AMOUNT</th></tr></thead><tbody>{#each expenditures.transactions || [] as transaction}<tr class:non-expense={!transaction.is_company_expenditure}><td>{transaction.date}</td><td>{transaction.expense_date?.slice(0, 7) || transaction.date?.slice(0, 7)}{#if transaction.expense_in_period === false && transaction.is_company_expenditure}<small>Expense in another month</small>{/if}{#if transaction.bank_date_in_period === false}<small>Paid in another month</small>{/if}{#if transaction.bank_date_in_period && transaction.excluded_from_cash_flow}<small>Excluded from outflows and net cash flow</small>{/if}{#if transaction.allocation_basis === 'ambiguous_description'}<small class=\"warning\">Service month needs review</small>{/if}</td><td>{transaction.category}<small>{transaction.payee}</small></td><td>{transaction.description || '—'}</td><td>{formatCurrency(transaction.amount)}</td></tr>{:else}<tr><td colspan=\"5\" class=\"muted\">NO PAYMENTS OR ALLOCATED EXPENSES</td></tr>{/each}</tbody></table></div>\r\n        </article>\r\n      </div>\r\n    {/if}\r\n\r\n    <div class=\"panels\">\r\n      <article class=\"panel chart-panel\">\r\n        <div class=\"panel-title\"><span>CUMULATIVE REALIZED CHARGES</span><span>{selectedMonth}</span></div>\r\n        <div class=\"large-trend\"><DashboardTrend rows={daily} metric=\"realized_student_charges\" label=\"Cumulative realized student charges chart\" data={dashboardData} height={220} /></div>\r\n        <div class=\"legend\"><span class=\"swatch\"></span> Realized student charges · cumulative by class date · hover points for details</div>\r\n      </article>\r\n      <article class=\"panel\"><div class=\"panel-title\"><span>TEACHER WATCHLIST</span><span>LOWEST RATE FIRST</span></div><div class=\"table-wrap\"><table><thead><tr><th>TEACHER / ALERTS</th><th>FEEDBACK</th><th>RATE / Δ</th><th>COMPLETED</th><th>ACCRUED / TREND</th></tr></thead><tbody>{#each dashboardData.teacher_watchlist || [] as teacher}<tr><td>{teacher.teacher_name}{#if teacher.alerts?.length}<small class=\"warning\">⚠ {teacher.alerts.join(' · ').replaceAll('_', ' ')}</small>{/if}</td><td>{teacher.feedback_submitted}/{teacher.feedback_due}</td><td class:warning={teacher.feedback_rate < 80}>{teacher.feedback_rate}% <small>{formatDelta(teacher.feedback_rate_comparison)}</small></td><td>{teacher.completed_classes}</td><td>{formatCurrency(teacher.accrued_pay)}<DashboardTrend rows={teacher.daily_series || []} metric=\"accrued_pay\" label={`${teacher.teacher_name} accrued pay trend`} data={dashboardData} {teacher} height={24} /></td></tr>{:else}<tr><td colspan=\"5\" class=\"muted\">NO ENDED ACTIVE CLASSES</td></tr>{/each}</tbody></table></div></article>\r\n      <article class=\"panel volume-panel\">\r\n        <div class=\"panel-title\"><span>DAILY CLASS VOLUME</span><span>ACTIVE / COMPLETED</span></div>\r\n        <div class=\"volume-chart\">\r\n          {#each daily as point}\r\n            <div class=\"volume-day\">\r\n              <div\r\n                class=\"bar active\"\r\n                style={`height:${point.active_classes / maxDailyClasses * 100}%`}\r\n                data-tooltip={volumeBarTooltip(point, 'active')}\r\n                aria-label={volumeBarTooltip(point, 'active')}\r\n                tabindex=\"0\"\r\n              ></div>\r\n              <div\r\n                class=\"bar completed\"\r\n                style={`height:${point.completed_classes / maxDailyClasses * 100}%`}\r\n                data-tooltip={volumeBarTooltip(point, 'completed')}\r\n                aria-label={volumeBarTooltip(point, 'completed')}\r\n                tabindex=\"0\"\r\n              ></div>\r\n            </div>\r\n          {/each}\r\n        </div>\r\n        <div class=\"legend\"><span class=\"swatch\"></span> Active scheduled <span class=\"swatch amber\"></span> Teacher-confirmed completed</div>\r\n      </article>\r\n    </div>\r\n    {#if dashboardData.warnings?.length}<details class=\"warnings\"><summary>DATA QUALITY FLAGS · {dashboardData.warnings.length}</summary><pre>{JSON.stringify(dashboardData.warnings, null, 2)}</pre></details>{/if}\r\n  {/if}\r\n</section>\r\n\r\n<style>\r\n  .large-trend{padding:0 15px 15px}\r\n\r\n  .activity-strip>div{align-content:start;min-width:0}\r\n  .activity-strip .comparison-row{font-size:10px}\r\n  .profit-calculation{font:11px/1.5 ui-monospace,monospace;color:var(--muted);margin:8px 0;white-space:normal}\r\n  .expense-allocation-note{color:var(--muted);font:11px/1.6 ui-monospace,Consolas,monospace;margin:16px 0 0;max-width:100%;overflow-wrap:anywhere}\r\n  .comparison-row{margin-top:10px;line-height:1.5;overflow-wrap:anywhere}\r\n  .comparison-row + .comparison-row{padding-top:9px;border-top:1px solid var(--line)}\r\n  .comparison-row .delta{line-height:1.5}\r\n  .comparison-details{margin-top:3px;color:var(--muted);font:10px/1.5 ui-monospace,Consolas,monospace}\r\n  .comparison-details summary{cursor:pointer;list-style-position:inside}\r\n  .comparison-details summary:focus-visible{outline:2px solid var(--green);outline-offset:3px}\r\n  .comparison-details p{margin:8px 0 0;color:var(--text)}\r\n  :global(body){background:#070b12}.terminal{--panel:#0c131d;--line:#1c2a39;--text:#dce7f3;--muted:#708399;--green:#26d99a;--red:#ff5d73;min-height:100vh;background:#070b12;color:var(--text);padding:20px;font-family:Inter,system-ui,sans-serif}.masthead{display:flex;justify-content:space-between;gap:24px;align-items:end;border-bottom:1px solid var(--line);padding-bottom:16px}.eyebrow,.quote-label,.panel-title,label,.basis,small{font:600 11px/1.4 ui-monospace,Consolas,monospace;letter-spacing:.09em;color:var(--muted)}h1{margin:5px 0 0;font-size:28px;letter-spacing:-.03em}h1 span{color:var(--green);font:600 11px ui-monospace,monospace;vertical-align:top}.controls{display:flex;gap:10px;align-items:end}label{display:grid;gap:5px}select,button{border:1px solid #294158;background:#101a27;color:var(--text);padding:9px 12px;font:600 12px ui-monospace,monospace}button{background:#1b8d68;border-color:#2bb88d;cursor:pointer}button:disabled{opacity:.45}.ticker{min-height:34px;display:flex;align-items:center;gap:18px;border-bottom:1px solid var(--line);color:var(--muted);overflow:auto;white-space:nowrap;font:11px ui-monospace,monospace}.ticker b{color:var(--text)}.dot{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 9px #26d99a66}.dot.live{animation:pulse 1.2s infinite}.market-grid{display:grid;grid-template-columns:repeat(3,minmax(175px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);margin-top:16px}.quote-card{background:var(--panel);padding:15px;min-width:0}.quote-value{font:650 27px/1.25 ui-monospace,monospace;margin-top:8px;letter-spacing:-.05em}.delta{font:600 11px ui-monospace,monospace}.delta span{color:var(--muted);font-weight:400}.positive{color:var(--green)}.negative,.warning{color:var(--red)}.neutral{color:var(--muted)}.basis{text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:9px}.activity-strip{display:grid;grid-template-columns:repeat(6,1fr);border:1px solid var(--line);border-top:0;background:var(--panel)}.activity-strip>div{padding:13px 15px;border-right:1px solid var(--line);display:grid;gap:5px}.activity-strip strong{font:650 20px ui-monospace,monospace}.panels{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(400px,1fr);gap:16px;margin-top:16px}.panel{background:var(--panel);border:1px solid var(--line)}.panel-title{display:flex;justify-content:space-between;padding:11px 13px;border-bottom:1px solid var(--line);color:var(--text)}.panel-title span:last-child{color:var(--muted)}.legend{padding:0 15px 13px;color:var(--muted);font:10px ui-monospace,monospace}.swatch{display:inline-block;width:14px;border-top:2px solid var(--green)}.table-wrap{max-height:270px;overflow:auto}table{width:100%;border-collapse:collapse;font:12px ui-monospace,monospace}th,td{text-align:right;padding:10px;border-bottom:1px solid #162332}th{position:sticky;top:0;background:#0c131d;color:var(--muted);font-size:9px}th:first-child,td:first-child{text-align:left}.muted{color:var(--muted);text-align:center!important}.alert,.empty{padding:18px;border:1px solid var(--line);margin-top:16px;font:12px ui-monospace,monospace}.error{border-color:#743040;color:#ff8797}.empty{color:var(--muted);min-height:180px;display:grid;place-items:center}.warnings{margin-top:16px;border:1px solid #55411f;padding:12px;color:#f4bd50;font:11px ui-monospace,monospace}.warnings pre{white-space:pre-wrap;color:#b9a478}@keyframes pulse{50%{opacity:.25}}@media(max-width:1100px){.market-grid{grid-template-columns:repeat(2,1fr)}.panels{grid-template-columns:1fr}.activity-strip{grid-template-columns:repeat(3,1fr)}}@media(max-width:650px){.terminal{padding:10px}.masthead{align-items:stretch;flex-direction:column}.controls{align-items:stretch}.controls label{flex:1}.market-grid{grid-template-columns:1fr}.activity-strip{grid-template-columns:repeat(2,1fr)}.panels{display:block}.panel{margin-top:12px}}\r\n  td small{display:block;font-size:8px}.volume-panel{grid-column:1/-1}.volume-chart{height:150px;display:flex;align-items:end;gap:4px;padding:20px 15px 5px}.volume-day{height:100%;flex:1;display:flex;align-items:end;gap:1px;border-bottom:1px solid #294158}.bar{width:50%;min-height:1px;background:#26d99a99}.bar.completed{background:#f4bd50}.swatch.amber{border-color:#f4bd50;margin-left:12px}\r\n  @media(max-width:650px){.market-grid{display:flex;overflow-x:auto}.quote-card{min-width:250px}}\r\n\r\n  .bar{position:relative;cursor:crosshair}\r\n  .bar::after{content:attr(data-tooltip);position:absolute;left:50%;bottom:calc(100% + 7px);z-index:20;transform:translate(-50%,4px);padding:6px 8px;border:1px solid #294158;border-radius:3px;background:#070b12;color:var(--text);box-shadow:0 5px 18px #000a;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .12s ease,transform .12s ease;font:600 10px ui-monospace,Consolas,monospace}\r\n  .bar:hover::after,.bar:focus::after{opacity:1;transform:translate(-50%,0)}\r\n  .bar:focus-visible{outline:2px solid #dce7f3;outline-offset:2px}\r\n  .expense-button{background:#18263a;border-color:#416185}.expense-ticker{border-top:1px solid #121d2a;background:#09101a}.expense-dot{background:#68a7ff;box-shadow:0 0 9px #68a7ff66}.cash-flow-grid{grid-template-columns:repeat(3,minmax(210px,1fr));margin-top:16px}.cash-flow-card{border-top:2px solid #294158}.expense-panels{display:grid;grid-template-columns:minmax(420px,.9fr) minmax(0,1.1fr);gap:16px;margin-top:16px}.category-list{max-height:430px;overflow:auto}.category-row,.payee-row{border-bottom:1px solid #162332}.category-row>summary,.payee-row>summary{display:grid;align-items:center;gap:10px;cursor:pointer;list-style:none;font:12px ui-monospace,monospace}.category-row>summary{grid-template-columns:minmax(130px,1fr) minmax(80px,1fr) auto 46px;padding:12px}.payee-row>summary{grid-template-columns:1fr auto;padding:9px 22px;background:#09111b}.category-bar{height:5px;background:#172535;overflow:hidden}.category-bar i{display:block;height:100%;background:var(--green)}.category-row strong,.payee-row strong{font-weight:600;text-align:right}.category-row small{text-align:right}.payee-row table{background:#080e16}.payee-row td:first-child{padding-left:35px}.category-empty{padding:30px}.expense-table{max-height:430px}.expense-table td:nth-child(2),.expense-table td:nth-child(3){text-align:left}.expense-table tr.non-expense{opacity:.52}.source-unavailable{border-color:#40536c;color:#91a5bd}.expense-table small{margin-top:3px}@media(max-width:1100px){.expense-panels{grid-template-columns:1fr}}@media(max-width:650px){.controls{flex-wrap:wrap}.cash-flow-grid{display:flex}.expense-panels{display:block}.expense-panels .panel{margin-top:12px}.category-row>summary{grid-template-columns:1fr auto auto}.category-bar{display:none}}\r\n</style>\r\n","<script>\r\n  import NavBarReusable from './NavbarReusable.svelte';\r\n  import AdminActivityDashboard from './AdminActivityDashboard.svelte';\r\n</script>\r\n\r\n<div class=\"app-container activity-dashboard-page\">\r\n  <NavBarReusable label=\"Activity Dashboard\" backLink=\"/admin/all\" />\r\n  <AdminActivityDashboard />\r\n</div>\r\n\r\n<style>\r\n  .activity-dashboard-page {\r\n    min-height: 100vh;\r\n    width: 100%;\r\n    background: #070b12;\r\n  }\r\n</style>\r\n","const API_ROOT = '/studentplayground/api/admin/calendar';\r\nconst PALETTE = ['#1a73e8', '#d93025', '#188038', '#a142f4', '#e37400', '#007b83', '#c5221f', '#5f6368'];\r\nconst VILNIUS_DATE_FORMAT = new Intl.DateTimeFormat('en-GB', {\r\n  timeZone: 'Europe/Vilnius', year: 'numeric', month: '2-digit', day: '2-digit',\r\n});\r\nconst VILNIUS_TIME_FORMAT = new Intl.DateTimeFormat('en-GB', {\r\n  timeZone: 'Europe/Vilnius', hour: '2-digit', minute: '2-digit', hourCycle: 'h23',\r\n});\r\n\r\nfunction dateKey(date) {\r\n  return `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, '0')}-${String(date.getUTCDate()).padStart(2, '0')}`;\r\n}\r\n\r\nexport function calendarDateKey(value) {\r\n  const date = new Date(value);\r\n  if (Number.isNaN(date.getTime())) return null;\r\n  const parts = VILNIUS_DATE_FORMAT.formatToParts(date);\r\n  const fields = Object.fromEntries(parts.map((part) => [part.type, part.value]));\r\n  return `${fields.year}-${fields.month}-${fields.day}`;\r\n}\r\n\r\nexport function calendarTime(value) {\r\n  const parts = VILNIUS_TIME_FORMAT.formatToParts(new Date(value));\r\n  const fields = Object.fromEntries(parts.map((part) => [part.type, part.value]));\r\n  return `${fields.hour}:${fields.minute}`;\r\n}\r\n\r\nfunction dayRecord(date, focusMonth) {\r\n  return { date, key: dateKey(date), inMonth: focusMonth == null || date.getUTCMonth() === focusMonth };\r\n}\r\n\r\nexport function weekdayLabel(value, style = 'long') {\r\n  const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(String(value || ''));\r\n  if (!match) return '';\r\n  const [, year, month, day] = match;\r\n  const date = new Date(Date.UTC(Number(year), Number(month) - 1, Number(day)));\r\n  if (date.getUTCFullYear() !== Number(year)\r\n    || date.getUTCMonth() !== Number(month) - 1\r\n    || date.getUTCDate() !== Number(day)) return '';\r\n  return new Intl.DateTimeFormat('en-GB', {\r\n    weekday: style === 'short' ? 'short' : 'long',\r\n    timeZone: 'UTC',\r\n  }).format(date);\r\n}\r\n\r\nexport function weekDays(value) {\r\n  const date = new Date(value);\r\n  const mondayOffset = (date.getUTCDay() + 6) % 7;\r\n  const monday = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate() - mondayOffset));\r\n  return Array.from({ length: 7 }, (_, index) => {\r\n    const day = new Date(monday);\r\n    day.setUTCDate(day.getUTCDate() + index);\r\n    return dayRecord(day);\r\n  });\r\n}\r\n\r\nexport function monthGrid(value) {\r\n  const focus = new Date(value);\r\n  const year = focus.getUTCFullYear();\r\n  const month = focus.getUTCMonth();\r\n  const offset = (new Date(Date.UTC(year, month, 1)).getUTCDay() + 6) % 7;\r\n  const daysInMonth = new Date(Date.UTC(year, month + 1, 0)).getUTCDate();\r\n  const slots = Math.ceil((offset + daysInMonth) / 7) * 7;\r\n  return Array.from({ length: slots }, (_, index) => {\r\n    const dayNumber = index - offset + 1;\r\n    return dayNumber < 1 || dayNumber > daysInMonth\r\n      ? { date: null, key: null, inMonth: false }\r\n      : dayRecord(new Date(Date.UTC(year, month, dayNumber)), month);\r\n  });\r\n}\r\n\r\nexport function viewDateRange(value, view) {\r\n  const focus = new Date(value);\r\n  if (view === 'week') {\r\n    const days = weekDays(focus);\r\n    const last = new Date(days[6].date);\r\n    last.setUTCDate(last.getUTCDate() + 1);\r\n    return { dateStart: days[0].key, dateEnd: dateKey(last) };\r\n  }\r\n  const year = focus.getUTCFullYear();\r\n  const month = focus.getUTCMonth();\r\n  return {\r\n    dateStart: dateKey(new Date(Date.UTC(year, month, 1))),\r\n    dateEnd: dateKey(new Date(Date.UTC(year, month + 1, 1))),\r\n  };\r\n}\r\n\r\nexport function classTotal(events, visibleDays) {\r\n  const visibleKeys = new Set(visibleDays.filter((day) => day.key).map((day) => day.key));\r\n  return new Set((events || [])\r\n    .filter((event) => visibleKeys.has(calendarDateKey(event.start)))\r\n    .map((event) => `${event.calendar_id}:${event.id}`)).size;\r\n}\r\n\r\nexport function stableCalendarColor(value) {\r\n  let hash = 2166136261;\r\n  for (const character of String(value || '')) {\r\n    hash ^= character.charCodeAt(0);\r\n    hash = Math.imul(hash, 16777619);\r\n  }\r\n  return PALETTE[Math.abs(hash) % PALETTE.length];\r\n}\r\n\r\nexport function parseRecurrence(rules = []) {\r\n  const rule = rules.find((item) => item.startsWith('RRULE:')) || '';\r\n  const values = Object.fromEntries(rule.slice(6).split(';').filter(Boolean).map((part) => {\r\n    const [key, value] = part.split('=');\r\n    return [key, value];\r\n  }));\r\n  return {\r\n    frequency: (values.FREQ || 'WEEKLY').toLowerCase(),\r\n    interval: Number(values.INTERVAL || 1),\r\n    weekdays: values.BYDAY ? values.BYDAY.split(',') : [],\r\n  };\r\n}\r\n\r\nfunction actionTime(value) {\r\n  if (!value) return '';\r\n  const date = new Date(value);\r\n  if (Number.isNaN(date.getTime())) return '';\r\n  return new Intl.DateTimeFormat('en-GB', {\r\n    day: 'numeric', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit',\r\n    hourCycle: 'h23', timeZone: 'Europe/Vilnius',\r\n  }).format(date);\r\n}\r\n\r\nfunction actionTimeRange(snapshot) {\r\n  const start = actionTime(snapshot.start);\r\n  const end = actionTime(snapshot.end);\r\n  if (!start) return '';\r\n  if (!end) return start;\r\n  const day = start.split(', ')[0];\r\n  return end.startsWith(`${day}, `) ? `${start}–${end.slice(day.length + 2)}` : `${start}–${end}`;\r\n}\r\n\r\nfunction actionRecurrence(value) {\r\n  if (!value || (Array.isArray(value) && !value.length) || value.enabled === false) return '';\r\n  const parsed = Array.isArray(value) ? parseRecurrence(value) : value;\r\n  if (!parsed.frequency) return '';\r\n  const frequency = parsed.frequency === 'daily' ? 'day' : 'week';\r\n  const interval = Number(parsed.interval || 1);\r\n  const weekday = (parsed.weekdays || []).join(', ');\r\n  return `Every ${interval > 1 ? `${interval} ${frequency}s` : frequency}${weekday ? ` · ${weekday}` : ''}`;\r\n}\r\n\r\nfunction actionPrice(value) {\r\n  const number = Number(value);\r\n  return Number.isFinite(number) ? `€${number.toFixed(2)}` : '';\r\n}\r\n\r\nexport function actionDetailRows(details) {\r\n  const before = details.before || {};\r\n  const after = details.after || {};\r\n  const update = details.operation === 'update';\r\n  const current = details.operation === 'cancel' ? before : after;\r\n  const rows = [];\r\n  const add = (label, oldValue, newValue) => {\r\n    if (update) {\r\n      if (oldValue !== newValue) rows.push({ label, before: oldValue || '—', after: newValue || '—' });\r\n    } else if (newValue) rows.push({ label, before: '', after: newValue });\r\n  };\r\n  add('Class', update ? before.title || '' : '', (update ? after : current).title || '');\r\n  add('Time', update ? actionTimeRange(before) : '', actionTimeRange(update ? after : current));\r\n  add('Students', update ? before.description || '' : '', (update ? after : current).description || '');\r\n  if (details.scope !== 'single') {\r\n    add('Repeats', update ? actionRecurrence(before.recurrence) : '', actionRecurrence((update ? after : current).recurrence));\r\n  }\r\n  const oldPrices = new Map((before.student_prices || []).map((item) => [String(item.student_id), item]));\r\n  const newPrices = new Map((after.student_prices || []).map((item) => [String(item.student_id), item]));\r\n  const ids = update ? new Set([...oldPrices.keys(), ...newPrices.keys()]) : new Set((current.student_prices || []).map((item) => String(item.student_id)));\r\n  for (const id of ids) {\r\n    const oldItem = oldPrices.get(id);\r\n    const newItem = newPrices.get(id);\r\n    const currentItem = details.operation === 'cancel' ? oldItem : newItem;\r\n    const name = (newItem || oldItem)?.student_name || `Student #${id}`;\r\n    add(`Price — ${name}`, update ? actionPrice(oldItem?.base_price) : '', actionPrice(currentItem?.base_price));\r\n  }\r\n  return rows;\r\n}\r\n\r\nexport function buildMutationPayload(form) {\r\n  const suffix = ' | Tutory';\r\n  let title = String(form.title || '').trim();\r\n  while (title.endsWith(suffix)) title = title.slice(0, -suffix.length).trim();\r\n  const selected = new Set((form.selectedStudentIds || []).map(Number));\r\n  const students = (form.students || []).filter((student) => selected.has(Number(student.id)));\r\n  return {\r\n    ...form,\r\n    title,\r\n    description: String(form.description || '').trim() || students.map((student) => student.token).join(' / '),\r\n    student_prices: students.map((student) => ({ student_id: student.id, base_price: student.basePrice })),\r\n  };\r\n}\r\n\r\nexport function filterStudents(students, query = '') {\r\n  const needle = String(query).trim().toLocaleLowerCase();\r\n  if (!needle) return [...(students || [])];\r\n  return (students || []).filter((student) => [student.name, student.token, student.grade]\r\n    .some((value) => String(value || '').toLocaleLowerCase().includes(needle)));\r\n}\r\n\r\nexport function generatedClassTitle(subject, students, groupLetter = 'A') {\r\n  if (!subject || !students?.length) return '';\r\n  const base = students.length === 1\r\n    ? `${students[0].title_prefix} ${subject.calendar_label} Pamoka`\r\n    : `${subject.calendar_label} Grupė ${groupLetter || 'A'}`;\r\n  return `${base} | Tutory`;\r\n}\r\n\r\nexport function oneHourAfter(startTime) {\r\n  if (!/^([01]\\d|2[0-3]):[0-5]\\d$/.test(startTime)) return null;\r\n  const [hours, minutes] = startTime.split(':').map(Number);\r\n  return `${String((hours + 1) % 24).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`;\r\n}\r\n\r\nexport function defaultClassTimes(now = new Date()) {\r\n  const rounded = new Date(Math.ceil(now.getTime() / 300000) * 300000);\r\n  const startTime = calendarTime(rounded);\r\n  return { startDate: calendarDateKey(rounded), startTime, endTime: oneHourAfter(startTime) };\r\n}\r\n\r\nexport function buildTimedRange(date, startTime, endTime) {\r\n  let endDate = date;\r\n  if (oneHourAfter(startTime) && oneHourAfter(endTime) && endTime < startTime && date) {\r\n    const nextDay = new Date(`${date}T12:00:00Z`);\r\n    nextDay.setUTCDate(nextDay.getUTCDate() + 1);\r\n    endDate = nextDay.toISOString().slice(0, 10);\r\n  }\r\n  return {\r\n    start: `${date}T${startTime}:00`,\r\n    end: `${endDate}T${endTime}:00`,\r\n  };\r\n}\r\n\r\nexport function unavailableTimeRanges(events, calendarId, selectedDate, excludedEventId = '') {\r\n  if (!calendarId || !selectedDate) return [];\r\n  const dayStart = new Date(`${selectedDate}T00:00:00`);\r\n  const dayEnd = new Date(dayStart);\r\n  dayEnd.setDate(dayEnd.getDate() + 1);\r\n  const clock = (value) => `${String(value.getHours()).padStart(2, '0')}:${String(value.getMinutes()).padStart(2, '0')}`;\r\n\r\n  return (events || [])\r\n    .filter((event) => event.calendar_id === calendarId && event.id !== excludedEventId)\r\n    .map((event) => ({ event, start: new Date(event.start), end: new Date(event.end) }))\r\n    .filter(({ start, end }) => !Number.isNaN(start.getTime()) && !Number.isNaN(end.getTime()) && start < dayEnd && end > dayStart)\r\n    .sort((left, right) => left.start - right.start)\r\n    .map(({ event, start, end }) => ({\r\n      eventId: event.id,\r\n      label: event.all_day ? 'All day' : `${clock(start < dayStart ? dayStart : start)}–${clock(end > dayEnd ? dayEnd : end)}`,\r\n    }));\r\n}\r\n\r\nexport function mergeCalendarHealth(calendars, refreshed) {\r\n  const byId = new Map((refreshed || []).map((calendar) => [calendar.id, calendar]));\r\n  return calendars.map((calendar) => {\r\n    if (!byId.has(calendar.id)) return calendar;\r\n    const health = { ...byId.get(calendar.id) };\r\n    delete health.hidden;\r\n    return { ...calendar, ...health };\r\n  });\r\n}\r\n\r\nexport function calendarsNeedingValidation(calendars) {\r\n  return (calendars || [])\r\n    .filter((calendar) => calendar.id && calendar.needs_validation)\r\n    .map((calendar) => calendar.id);\r\n}\r\n\r\nexport function filterAndSortCalendars(calendars, query = '') {\r\n  const needle = String(query).trim().toLocaleLowerCase();\r\n  const priority = (status) => {\r\n    if (status === 'ready' || status === 'no_classes') return 0;\r\n    if (status === 'checking') return 1;\r\n    if (status === 'invalid') return 3;\r\n    return 2;\r\n  };\r\n  return calendars\r\n    .filter((calendar) => !needle || [calendar.name, calendar.teacher_name, calendar.id]\r\n      .some((value) => String(value || '').toLocaleLowerCase().includes(needle)))\r\n    .slice()\r\n    .sort((left, right) => priority(left.status) - priority(right.status)\r\n      || String(left.name).localeCompare(String(right.name), undefined, { sensitivity: 'base' }));\r\n}\r\n\r\nasync function request(path, init = {}) {\r\n  const token = globalThis.localStorage?.getItem('jwtToken');\r\n  const headers = {\r\n    'Content-Type': 'application/json',\r\n    ...(token ? { Authorization: `Bearer ${token}` } : {}),\r\n    ...(init.headers || {}),\r\n  };\r\n  const response = await fetch(`${API_ROOT}${path}`, {\r\n    ...init,\r\n    headers,\r\n  });\r\n  const data = await response.json().catch(() => ({}));\r\n  if (!response.ok) {\r\n    const error = new Error(data.detail || data.code || `Calendar request failed (${response.status})`);\r\n    error.code = data.code || '';\r\n    error.data = data;\r\n    throw error;\r\n  }\r\n  return data;\r\n}\r\n\r\nexport const calendarApi = {\r\n  options: () => request('/options/'),\r\n  setTeacherVisibility: (teacherId, hidden) => request(`/teachers/${encodeURIComponent(teacherId)}/visibility/`, {\r\n    method: 'PATCH', body: JSON.stringify({ hidden }),\r\n  }),\r\n  health: (calendarIds) => request('/health/', { method: 'POST', body: JSON.stringify({ calendar_ids: calendarIds }) }),\r\n  events: (timeMin, timeMax, calendarIds) => request('/events/', {\r\n    method: 'POST',\r\n    body: JSON.stringify({ time_min: timeMin, time_max: timeMax, calendar_ids: calendarIds }),\r\n  }),\r\n  eventsInView: (dateStart, dateEnd, selection) => request('/events/', {\r\n    method: 'POST',\r\n    body: JSON.stringify({\r\n      date_start: dateStart,\r\n      date_end: dateEnd,\r\n      ...(selection.kind === 'student'\r\n        ? { student_id: selection.id }\r\n        : { calendar_ids: selection.ids }),\r\n    }),\r\n  }),\r\n  actions: () => request('/actions/'),\r\n  action: (mutationId) => request(`/mutations/${encodeURIComponent(mutationId)}/`),\r\n  create: (payload) => request('/classes/', { method: 'POST', body: JSON.stringify(payload) }),\r\n  update: (eventId, payload) => request(`/classes/${encodeURIComponent(eventId)}/`, { method: 'PATCH', body: JSON.stringify(payload) }),\r\n  cancel: (eventId, payload) => request(`/classes/${encodeURIComponent(eventId)}/`, { method: 'DELETE', body: JSON.stringify(payload) }),\r\n  retry: (mutationId) => request(`/actions/${encodeURIComponent(mutationId)}/retry/`, { method: 'POST', body: '{}' }),\r\n  reconcile: (mutationId) => request(`/mutations/${encodeURIComponent(mutationId)}/reconcile/`, { method: 'POST', body: '{}' }),\r\n};\r\n","<script>\r\n  import { onMount, tick } from 'svelte';\r\n  import NavBarReusable from './NavbarReusable.svelte';\r\n  import { actionDetailRows, defaultClassTimes, oneHourAfter, buildMutationPayload, buildTimedRange, calendarApi, calendarDateKey, calendarTime, calendarsNeedingValidation, classTotal, filterAndSortCalendars, filterStudents, generatedClassTitle, mergeCalendarHealth, monthGrid, parseRecurrence, stableCalendarColor, unavailableTimeRanges, viewDateRange, weekdayLabel, weekDays } from './adminCalendar.js';\r\n\r\n  let loading = true;\r\n  let error = '';\r\n  let options = { calendars: [], students: [] };\r\n  let events = [];\r\n  let eventsLoading = false;\r\n  let eventRequestNumber = 0;\r\n  let actions = [];\r\n  let selection = { kind: 'none' };\r\n  let calendarSearch = '';\r\n  let studentCalendarSearch = '';\r\n  let hiddenListOpen = false;\r\n  let visibilityPendingTeacherIds = [];\r\n  let view = 'month';\r\n  let todayKey = calendarDateKey(new Date());\r\n  let focusDate = new Date(`${todayKey}T12:00:00Z`);\r\n  let dialogOpen = false;\r\n  let dialogDirty = false;\r\n  let editingEvent = null;\r\n  let actionHistoryOpen = false;\r\n  let expandedActionId = null;\r\n  let actionDetails = {};\r\n  let actionDetailLoadingId = null;\r\n  let actionDetailError = null;\r\n  let submitting = false;\r\n  let mutationNotice = '';\r\n  let form = emptyForm();\r\n  let titleInput;\r\n  let studentSearchInput;\r\n  let studentSearch = '';\r\n  let studentPickerExpanded = true;\r\n  let returnFocus;\r\n\r\n  $: visibleDays = view === 'month' ? monthGrid(focusDate) : weekDays(focusDate);\r\n  $: selectedCalendarIds = selection.kind === 'teachers' ? selection.ids : [];\r\n  $: selectedCalendars = options.calendars.filter((calendar) => selectedCalendarIds.includes(calendar.id));\r\n  $: filteredCalendars = filterAndSortCalendars(options.calendars, calendarSearch);\r\n  $: visibleCalendars = filteredCalendars.filter((calendar) => !calendar.hidden);\r\n  $: hiddenCalendars = filteredCalendars.filter((calendar) => calendar.hidden);\r\n  $: sidebarStudents = filterStudents(options.students, studentCalendarSearch);\r\n  $: displayedClassTotal = classTotal(events, visibleDays);\r\n  $: selectedStudents = form.students.filter((student) => form.selectedStudentIds.includes(student.id));\r\n  $: selectedSubject = (options.subjects || []).find((subject) => subject.name === form.subject);\r\n  $: generatedTitle = generatedClassTitle(selectedSubject, selectedStudents, form.groupLetter);\r\n  $: if (!form.titleIsCustom) form.title = generatedTitle;\r\n  $: availableStudents = filterStudents(\r\n    form.students.filter((student) => !form.selectedStudentIds.includes(student.id)),\r\n    studentSearch,\r\n  );\r\n  $: notificationChoices = buildNotificationChoices(form.calendar_id, selectedStudents);\r\n  $: unavailableTimes = unavailableTimeRanges(events, form.calendar_id, form.startDate, editingEvent?.id);\r\n\r\n  function emptyForm(now = new Date()) {\r\n    return {\r\n      calendar_id: '', subject: '', title: '', titleIsCustom: false, groupLetter: 'A', description: '', selectedStudentIds: [], students: [], ...defaultClassTimes(now),\r\n       recurring: false, frequency: 'weekly', interval: 1,\r\n      weekdays: [], scope: 'single', reason: '', notifications: [], confirm_reset_exceptions: false,\r\n      responsibilityEnabled: false, responsibleParty: 'teacher', incidentType: 'other', expected_etag: '',\r\n    };\r\n  }\r\n\r\n  function authFailure(message) {\r\n    error = message === 'Authentication credentials were not provided.' ? 'Please sign in with a staff account.' : message;\r\n  }\r\n\r\n  async function initialise() {\r\n    loading = true;\r\n    try {\r\n      [options, { actions }] = await Promise.all([calendarApi.options(), calendarApi.actions()]);\r\n      selection = { kind: 'none' };\r\n      await loadEvents();\r\n      validateCalendars();\r\n    } catch (caught) { authFailure(caught.message); }\r\n    loading = false;\r\n  }\r\n\r\n  async function validateCalendars() {\r\n    const ids = calendarsNeedingValidation(options.calendars);\r\n    for (let offset = 0; offset < ids.length; offset += 10) {\r\n      try {\r\n        const result = await calendarApi.health(ids.slice(offset, offset + 10));\r\n        options = { ...options, calendars: mergeCalendarHealth(options.calendars, result.calendars) };\r\n      } catch (caught) {\r\n        error = `Calendar validation paused: ${caught.message}`;\r\n        return;\r\n      }\r\n    }\r\n  }\r\n\r\n  async function loadEvents() {\r\n    const requestNumber = ++eventRequestNumber;\r\n    events = [];\r\n    if (selection.kind === 'none') { eventsLoading = false; return; }\r\n    eventsLoading = true;\r\n    const requestedSelection = selection;\r\n    const { dateStart, dateEnd } = viewDateRange(focusDate, view);\r\n    try {\r\n      const result = await calendarApi.eventsInView(dateStart, dateEnd, requestedSelection);\r\n      if (requestNumber === eventRequestNumber) events = result.events || [];\r\n    } catch (caught) {\r\n      if (requestNumber === eventRequestNumber) error = caught.message;\r\n    } finally {\r\n      if (requestNumber === eventRequestNumber) eventsLoading = false;\r\n    }\r\n  }\r\n\r\n  function toggleCalendar(id) {\r\n    error = '';\r\n    selection = selection.kind === 'teachers' && selection.ids.length === 1 && selection.ids[0] === id\r\n      ? { kind: 'none' }\r\n      : { kind: 'teachers', ids: [id] };\r\n    loadEvents();\r\n  }\r\n\r\n  function toggleSidebarStudent(id) {\r\n    error = '';\r\n    selection = selection.kind === 'student' && selection.id === id\r\n      ? { kind: 'none' }\r\n      : { kind: 'student', id };\r\n    loadEvents();\r\n  }\r\n\r\n  function selectAll() {\r\n    error = '';\r\n    const ids = options.calendars.filter((calendar) => calendar.writable && !calendar.hidden).map((calendar) => calendar.id);\r\n    selection = ids.length ? { kind: 'teachers', ids } : { kind: 'none' };\r\n    loadEvents();\r\n  }\r\n\r\n  function deselectAll() {\r\n    error = '';\r\n    selection = { kind: 'none' };\r\n    loadEvents();\r\n  }\r\n\r\n  async function setTeacherVisibility(calendar, hidden) {\r\n    if (visibilityPendingTeacherIds.includes(calendar.teacher_id)) return;\r\n    visibilityPendingTeacherIds = [...visibilityPendingTeacherIds, calendar.teacher_id];\r\n    error = '';\r\n    try {\r\n      const result = await calendarApi.setTeacherVisibility(calendar.teacher_id, hidden);\r\n      options = {\r\n        ...options,\r\n        calendars: options.calendars.map((item) => item.teacher_id === calendar.teacher_id\r\n          ? { ...item, hidden: result.hidden }\r\n          : item),\r\n      };\r\n      if (hidden && selection.kind === 'teachers') {\r\n        const visibleIds = new Set(options.calendars.filter((item) => !item.hidden).map((item) => item.id));\r\n        const ids = selection.ids.filter((id) => visibleIds.has(id));\r\n        if (ids.length !== selection.ids.length) {\r\n          selection = ids.length ? { kind: 'teachers', ids } : { kind: 'none' };\r\n          await loadEvents();\r\n        }\r\n      }\r\n    } catch (caught) {\r\n      error = `Could not update teacher visibility: ${caught.message}`;\r\n    } finally {\r\n      visibilityPendingTeacherIds = visibilityPendingTeacherIds.filter((id) => id !== calendar.teacher_id);\r\n    }\r\n  }\r\n\r\n  function move(amount) {\r\n    const next = new Date(focusDate);\r\n    if (view === 'month') focusDate = new Date(Date.UTC(next.getUTCFullYear(), next.getUTCMonth() + amount, 15, 12));\r\n    else { next.setUTCDate(next.getUTCDate() + (amount * 7)); focusDate = next; }\r\n    loadEvents();\r\n  }\r\n\r\n  function eventsFor(loadedEvents, day) {\r\n    return loadedEvents.filter((event) => calendarDateKey(event.start) === day.key);\r\n  }\r\n\r\n  function openCreate(day) {\r\n    if (!selectedCalendarIds.length) { error = 'Select at least one writable teacher calendar first.'; return; }\r\n    error = '';\r\n    editingEvent = null;\r\n    returnFocus = document.activeElement;\r\n    const now = new Date();\r\n    form = emptyForm(now);\r\n    form.calendar_id = selectedCalendarIds.length === 1 ? selectedCalendarIds[0] : '';\r\n    form.startDate = day.key === calendarDateKey(now) ? form.startDate : day.key;\r\n    form.students = options.students.map((student) => ({ ...student, basePrice: '' }));\r\n    studentSearch = '';\r\n    studentPickerExpanded = true;\r\n    dialogOpen = true;\r\n    dialogDirty = false;\r\n    tick().then(() => studentSearchInput?.focus());\r\n  }\r\n\r\n  function openCreateForDay(day) {\r\n    if (selectedCalendarIds.length !== 1) {\r\n      error = 'Select exactly one teacher calendar to create a class by clicking a day.';\r\n      return;\r\n    }\r\n    openCreate(day);\r\n  }\r\n\r\n  function openEdit(event) {\r\n    error = '';\r\n    returnFocus = document.activeElement;\r\n    editingEvent = event;\r\n    const start = new Date(event.start);\r\n    const end = new Date(event.end);\r\n    form = emptyForm();\r\n    form.calendar_id = event.calendar_id;\r\n    form.title = event.display_title;\r\n    form.titleIsCustom = true;\r\n    form.subject = event.subject || '';\r\n    form.groupLetter = event.group_letter || (options.next_group_letters?.[form.subject] || 'A');\r\n    form.description = event.description;\r\n    form.startDate = calendarDateKey(start);\r\n    form.startTime = calendarTime(start);\r\n    form.endTime = calendarTime(end);\r\n    form.selectedStudentIds = event.students.map((student) => student.id);\r\n    form.students = options.students.map((student) => {\r\n      const enrolled = event.students.find((value) => value.id === student.id);\r\n      const defaultPrice = event.students.length >= 2 ? student.default_group_base_price : student.default_individual_base_price;\r\n      return { ...student, basePrice: enrolled ? (enrolled.base_price === '' || enrolled.base_price == null ? defaultPrice : enrolled.base_price) : '' };\r\n    });\r\n    const suggestedTitle = generatedClassTitle(\r\n      (options.subjects || []).find((subject) => subject.name === form.subject),\r\n      form.students.filter((student) => form.selectedStudentIds.includes(student.id)),\r\n      form.groupLetter,\r\n    );\r\n    form.titleIsCustom = form.title !== suggestedTitle.replace(/ \\| Tutory$/, '');\r\n    studentSearch = '';\r\n    studentPickerExpanded = false;\r\n    form.recurring = !!event.recurring_event_id;\r\n    form.expected_etag = event.etag || '';\r\n    if (form.recurring) {\r\n      const recurrence = parseRecurrence(event.recurrence);\r\n      form.frequency = recurrence.frequency;\r\n      form.interval = recurrence.interval;\r\n      form.weekdays = recurrence.weekdays;\r\n    }\r\n    dialogOpen = true;\r\n    dialogDirty = false;\r\n    tick().then(() => titleInput?.focus());\r\n  }\r\n\r\n  function duplicateClass() {\r\n    if (!editingEvent || submitting) return;\r\n    error = '';\r\n    form = {\r\n      ...form,\r\n      titleIsCustom: true,\r\n      expected_etag: '', scope: 'single', confirm_reset_exceptions: false,\r\n      responsibilityEnabled: false,\r\n    };\r\n    editingEvent = null;\r\n    dialogDirty = true;\r\n    tick().then(() => titleInput?.focus());\r\n  }\r\n\r\n  function closeDialog() { dialogOpen = false; dialogDirty = false; tick().then(() => returnFocus?.focus?.()); }\r\n\r\n  async function handleMutationConflict(caught) {\r\n    if (caught.code !== 'stale_event') return false;\r\n    const currentEvent = caught.data?.current_event;\r\n    if (currentEvent) {\r\n      openEdit(currentEvent);\r\n      error = 'This class changed in Google Calendar. The latest version has been loaded for review.';\r\n    } else {\r\n      closeDialog();\r\n      await loadEvents();\r\n      error = 'This class no longer exists in Google Calendar.';\r\n    }\r\n    return true;\r\n  }\r\n\r\n  function markDirty() { dialogDirty = true; }\r\n  function toggleStudent(id) {\r\n    const adding = !form.selectedStudentIds.includes(id);\r\n    form.selectedStudentIds = form.selectedStudentIds.includes(id)\r\n      ? form.selectedStudentIds.filter((value) => value !== id)\r\n      : [...form.selectedStudentIds, id];\r\n    const group = form.selectedStudentIds.length >= 2;\r\n    form.students = form.students.map((student) => ({\r\n      ...student,\r\n      basePrice: form.selectedStudentIds.includes(student.id) && !student.basePrice\r\n        ? (group ? student.default_group_base_price : student.default_individual_base_price)\r\n        : student.basePrice,\r\n    }));\r\n    form.description = form.students.filter((student) => form.selectedStudentIds.includes(student.id)).map((student) => student.token).join(' / ');\r\n    if (adding) {\r\n      studentSearch = '';\r\n      studentPickerExpanded = false;\r\n    }\r\n    if (form.selectedStudentIds.length >= 2 && !editingEvent) {\r\n      form.groupLetter = options.next_group_letters?.[form.subject] || 'A';\r\n    }\r\n    markDirty();\r\n  }\r\n  function syncDescription() {\r\n    const tokens = form.description.split('/').map((value) => value.trim().toLowerCase()).filter(Boolean);\r\n    form.selectedStudentIds = form.students.filter((student) => tokens.includes(student.token.toLowerCase())).map((student) => student.id);\r\n    markDirty();\r\n  }\r\n  function toggleNotification(choice) {\r\n    const exists = selectedNotification(choice);\r\n    form.notifications = exists\r\n      ? form.notifications.filter((item) => !sameNotification(item, choice))\r\n      : [...form.notifications, { kind: choice.kind, participant_id: choice.participant_id, email: choice.email }];\r\n    markDirty();\r\n  }\r\n  function sameNotification(left, right) { return left.kind === right.kind && Number(left.participant_id) === Number(right.participant_id); }\r\n  function selectedNotification(choice) { return form.notifications.find((item) => sameNotification(item, choice)); }\r\n  function updateNotificationEmail(choice, email) {\r\n    form.notifications = form.notifications.map((item) => sameNotification(item, choice) ? { ...item, email } : item);\r\n    markDirty();\r\n  }\r\n  function buildNotificationChoices(calendarId, students) {\r\n    const calendar = options.calendars.find((item) => item.id === calendarId);\r\n    const teacher = (calendar?.email_destinations || []).map((item) => ({ ...item, participant_id: calendar.teacher_user_id }));\r\n    const studentChoices = students.flatMap((student) => student.email_destinations.map((item) => ({ ...item, participant_id: student.id, label: `${student.name} — ${item.label}` })));\r\n    return [...teacher, ...studentChoices];\r\n  }\r\n  function uuid() { return globalThis.crypto?.randomUUID?.() || `${Date.now()}-0000-4000-8000-${Math.random().toString(16).slice(2).padEnd(12, '0').slice(0, 12)}`; }\r\n\r\n  function submittedPayload() {\r\n    const range = buildTimedRange(form.startDate, form.startTime, form.endTime);\r\n    const start = new Date(range.start).toISOString();\r\n    const end = new Date(range.end).toISOString();\r\n    return buildMutationPayload({\r\n      ...form, title_is_custom: form.titleIsCustom, idempotency_key: uuid(), start, end,\r\n      recurrence: { enabled: form.recurring, frequency: form.frequency, interval: Number(form.interval), weekdays: form.weekdays },\r\n      responsibility: form.responsibilityEnabled ? {\r\n        enabled: true, responsible_party: form.responsibleParty, incident_type: form.incidentType, comment: form.reason,\r\n      } : { enabled: false },\r\n    });\r\n  }\r\n  async function submit() {\r\n    if (submitting) return;\r\n    error = '';\r\n    if (!form.calendar_id || !form.subject || !form.title.trim() || !form.selectedStudentIds.length) { error = 'Teacher calendar, subject, name and at least one student are required.'; return; }\r\n    if (form.scope === 'following' && !form.confirm_reset_exceptions) { error = 'Confirm that future exceptions may be reset.'; return; }\r\n    submitting = true;\r\n    try {\r\n      const payload = submittedPayload();\r\n      const result = editingEvent ? await calendarApi.update(editingEvent.id, payload) : await calendarApi.create(payload);\r\n      mutationNotice = result.status === 'reconciling'\r\n        ? 'Google was updated, but the local copy needs reconciliation. Use Previous actions to retry safely.'\r\n        : 'Calendar change committed.';\r\n      await afterMutation();\r\n    } catch (caught) {\r\n      if (!await handleMutationConflict(caught)) {\r\n        error = caught.code === 'class_conflict' ? 'This class conflicts with another active Tutory class.' : caught.message;\r\n      }\r\n    }\r\n    submitting = false;\r\n  }\r\n\r\n  async function cancelClass() {\r\n    if (!editingEvent || !window.confirm('Delete this class using the selected recurrence scope?')) return;\r\n    error = '';\r\n    submitting = true;\r\n    try {\r\n      const payload = submittedPayload();\r\n      const result = await calendarApi.cancel(editingEvent.id, payload);\r\n      mutationNotice = result.status === 'reconciling'\r\n        ? 'Google was updated, but the local copy needs reconciliation. Use Previous actions to retry safely.'\r\n        : 'Class cancelled.';\r\n      await afterMutation();\r\n    } catch (caught) {\r\n      if (!await handleMutationConflict(caught)) {\r\n        error = caught.code === 'google_delete_failed'\r\n          ? 'Google Calendar could not delete this class. Please try again.'\r\n          : caught.message;\r\n      }\r\n    }\r\n    submitting = false;\r\n  }\r\n\r\n  async function afterMutation() {\r\n    closeDialog();\r\n    await Promise.all([loadEvents(), refreshActions()]);\r\n  }\r\n  async function refreshActions() {\r\n    ({ actions } = await calendarApi.actions());\r\n    actionDetails = {};\r\n    expandedActionId = null;\r\n  }\r\n  async function retry(actionId) { await calendarApi.retry(actionId); await refreshActions(); }\r\n  async function reconcile(actionId) { await calendarApi.reconcile(actionId); await Promise.all([refreshActions(), loadEvents()]); }\r\n  async function toggleActionDetails(actionId) {\r\n    if (expandedActionId === actionId) { expandedActionId = null; return; }\r\n    expandedActionId = actionId;\r\n    actionDetailError = null;\r\n    if (actionDetails[actionId]) return;\r\n    actionDetailLoadingId = actionId;\r\n    try {\r\n      const detail = await calendarApi.action(actionId);\r\n      actionDetails = { ...actionDetails, [actionId]: detail };\r\n    } catch (caught) {\r\n      actionDetailError = { id: actionId, message: caught.message };\r\n    } finally {\r\n      if (actionDetailLoadingId === actionId) actionDetailLoadingId = null;\r\n    }\r\n  }\r\n  function actionCalendarName(calendarId) {\r\n    return options.calendars.find((calendar) => calendar.id === calendarId)?.name || calendarId;\r\n  }\r\n  function incidentLabel(responsibility) {\r\n    const party = responsibility.responsible_party === 'teacher' ? 'Teacher' : responsibility.responsible_party === 'student' ? 'Student' : 'Class';\r\n    const type = responsibility.incident_type === 'late' ? 'Late' : responsibility.incident_type === 'cancellation' ? 'Cancellation' : 'Other';\r\n    return `${party} · ${type}`;\r\n  }\r\n\r\n  onMount(() => {\r\n    initialise();\r\n    const poll = setInterval(() => {\r\n      todayKey = calendarDateKey(new Date());\r\n      if (!dialogDirty) loadEvents();\r\n    }, 60000);\r\n    return () => clearInterval(poll);\r\n  });\r\n</script>\r\n\r\n<svelte:window on:keydown={(event) => dialogOpen && event.key === 'Escape' && closeDialog()} />\r\n<div class=\"calendar-page\">\r\n  <NavBarReusable label=\"Tutory Calendar\" backLink=\"/admin/all\" />\r\n  <div class=\"workspace\">\r\n    <aside>\r\n      <button class=\"create\" on:click={() => openCreate({ key: todayKey })}>＋ Create class</button>\r\n      <section class=\"student-calendars\">\r\n        <div class=\"aside-heading\"><strong>Student calendars</strong></div>\r\n        <input class=\"calendar-search\" type=\"search\" aria-label=\"Search student calendars\" placeholder=\"Search students\" bind:value={studentCalendarSearch} />\r\n        <div class=\"student-calendar-list\">\r\n          {#each sidebarStudents as student}\r\n            <label class=\"calendar-choice-main student-calendar-choice\">\r\n              <input type=\"checkbox\" checked={selection.kind === 'student' && selection.id === student.id} on:change={() => toggleSidebarStudent(student.id)} />\r\n              <i style={`background:${stableCalendarColor(`student-${student.id}`)}`}></i><span>{student.name}</span>\r\n            </label>\r\n          {:else}<p class=\"no-calendars\">No matching students.</p>{/each}\r\n        </div>\r\n      </section>\r\n      <div class=\"aside-heading\"><strong>Teacher calendars</strong><div class=\"calendar-selection-actions\"><button type=\"button\" on:click={selectAll}>Select all</button><button type=\"button\" on:click={deselectAll}>Deselect all</button></div></div>\r\n      <input class=\"calendar-search\" type=\"search\" aria-label=\"Search teacher calendars\" placeholder=\"Search calendars\" bind:value={calendarSearch} />\r\n      {#each visibleCalendars as calendar}\r\n        <div class=\"calendar-choice\">\r\n          <label class:disabled={!calendar.writable} class=\"calendar-choice-main\">\r\n            <input type=\"checkbox\" disabled={!calendar.writable} checked={selectedCalendarIds.includes(calendar.id)} on:change={() => toggleCalendar(calendar.id)} />\r\n            <i style={`background:${stableCalendarColor(calendar.id)}`}></i><span>{calendar.name}</span>\r\n            {#if calendar.error_code === 'google_unavailable' && calendar.writable}\r\n              <small>Validation temporarily unavailable; using the last successful check</small>\r\n            {:else if calendar.status !== 'ready'}\r\n              <small>{calendar.status === 'no_classes' ? 'No classes' : calendar.status === 'checking' ? 'Checking…' : calendar.status === 'unavailable' ? 'Validation temporarily unavailable' : calendar.status.replace('_', ' ')}</small>\r\n            {/if}\r\n          </label>\r\n          <button type=\"button\" class=\"visibility-toggle\" aria-label={`Hide ${calendar.name}`} title=\"Move to hidden calendars\" disabled={visibilityPendingTeacherIds.includes(calendar.teacher_id)} on:click={() => setTeacherVisibility(calendar, true)}><i class=\"fa-regular fa-eye\" aria-hidden=\"true\"></i></button>\r\n        </div>\r\n      {:else}<p class=\"no-calendars\">No matching calendars.</p>{/each}\r\n      <section class=\"hidden-calendars\">\r\n        <button type=\"button\" class=\"hidden-calendars-title\" aria-expanded={hiddenListOpen} on:click={() => hiddenListOpen = !hiddenListOpen}>Hidden calendars ({hiddenCalendars.length}) <span aria-hidden=\"true\">{hiddenListOpen ? '▾' : '▸'}</span></button>\r\n        {#if hiddenListOpen}\r\n          {#each hiddenCalendars as calendar}\r\n            <div class=\"hidden-calendar-choice\">\r\n              <i style={`background:${stableCalendarColor(calendar.id)}`} aria-hidden=\"true\"></i>\r\n              <span>{calendar.name}</span>\r\n              <button type=\"button\" class=\"visibility-toggle\" aria-label={`Show ${calendar.name}`} title=\"Restore to teacher calendars\" disabled={visibilityPendingTeacherIds.includes(calendar.teacher_id)} on:click={() => setTeacherVisibility(calendar, false)}><i class=\"fa-regular fa-eye-slash\" aria-hidden=\"true\"></i></button>\r\n            </div>\r\n          {:else}<p class=\"no-calendars\">No matching hidden calendars.</p>{/each}\r\n        {/if}\r\n      </section>\r\n    </aside>\r\n\r\n    <section class=\"calendar-shell\">\r\n      <header class=\"toolbar\">\r\n        <button aria-label={`Previous ${view}`} on:click={() => move(-1)}>‹</button><button aria-label={`Next ${view}`} on:click={() => move(1)}>›</button>\r\n        <button on:click={() => { todayKey = calendarDateKey(new Date()); focusDate = new Date(`${todayKey}T12:00:00Z`); loadEvents(); }}>Today</button>\r\n        <button on:click={loadEvents}>Refresh</button>\r\n        <h1>{focusDate.toLocaleDateString('en-GB', { month: 'long', year: 'numeric', timeZone: 'UTC' })}</h1>\r\n        {#if selection.kind !== 'none'}<p class=\"class-total\" role=\"status\" aria-label=\"Class total\">{eventsLoading ? 'Loading classes…' : `${displayedClassTotal} ${displayedClassTotal === 1 ? 'class' : 'classes'} this ${view}`}</p>{/if}\r\n        <div class=\"view-toggle\"><button class:active={view === 'month'} on:click={() => { view = 'month'; loadEvents(); }}>Month</button><button class:active={view === 'week'} on:click={() => { view = 'week'; loadEvents(); }}>Week</button></div>\r\n      </header>\r\n      {#if error && !dialogOpen}<div class=\"error\" role=\"alert\">{error}<button aria-label=\"Dismiss\" on:click={() => error = ''}>×</button></div>{/if}\r\n      {#if mutationNotice}<div class=\"notice\" role=\"status\">{mutationNotice}<button aria-label=\"Dismiss\" on:click={() => mutationNotice = ''}>×</button></div>{/if}\r\n      {#if loading}<div class=\"empty\">Loading calendar…</div>\r\n      {:else if selection.kind === 'none'}<div class=\"empty\"><strong>Select a teacher or student</strong><span>No calendars are selected by default. Choose a teacher or student, or use Select all.</span></div>\r\n      {:else}\r\n        <div class=\"calendar-board\">\r\n          <div class=\"weekday-headings\" role=\"row\">\r\n            {#each ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] as weekday}\r\n              <span role=\"columnheader\">{weekday}</span>\r\n            {/each}\r\n          </div>\r\n          <div class:week={view === 'week'} class=\"calendar-grid\" style={`--week-count:${visibleDays.length / 7}`}>\r\n            {#each visibleDays as day}\r\n              {#if day.key}\r\n                <div class=\"day\">\r\n                  <button class=\"day-create-target\" aria-label={`Add class on ${day.key}`} title={`Add class on ${day.key}`} on:click={() => openCreateForDay(day)}></button>\r\n                  <span class:today={day.key === todayKey} class=\"day-number\" aria-current={day.key === todayKey ? 'date' : undefined}>{day.date.getUTCDate()}</span>\r\n                  {#if view === 'week' && day.key === todayKey}<div class=\"current-time\" style={`top:${(new Date().getHours() * 60 + new Date().getMinutes()) / 1440 * 100}%`} title=\"Current time\"></div>{/if}\r\n                  {#each eventsFor(events, day) as event}\r\n                    <button class=\"event\" disabled={!options.calendars.some((calendar) => calendar.id === event.calendar_id)} aria-label={`Edit ${event.display_title}`} title={options.calendars.some((calendar) => calendar.id === event.calendar_id) ? 'Edit class' : 'Owning teacher calendar unavailable'} style={`--event:${stableCalendarColor(event.calendar_id)}`} on:click={() => openEdit(event)}>\r\n                      <time>{event.all_day ? 'All day' : calendarTime(event.start)}</time>\r\n                      <span>{event.display_title}</span>\r\n                    </button>\r\n                  {/each}\r\n                </div>\r\n              {:else}<div class=\"day day-placeholder\" aria-hidden=\"true\"></div>{/if}\r\n            {/each}\r\n          </div>\r\n        </div>\r\n      {/if}\r\n      <section class=\"history\">\r\n        <button class=\"history-title\" on:click={() => actionHistoryOpen = !actionHistoryOpen}>Previous actions <span>{actionHistoryOpen ? '▾' : '▸'}</span></button>\r\n        {#if actionHistoryOpen}\r\n          {#each actions as action}\r\n            <div class=\"history-entry\">\r\n              <div class=\"history-row\">\r\n                <button class=\"history-summary\" type=\"button\" aria-expanded={expandedActionId === action.id} aria-label={`Show details for ${action.operation} action from ${new Date(action.created_at).toLocaleString('en-GB')}`} on:click={() => toggleActionDetails(action.id)}>\r\n                  <span><strong>{action.operation}</strong> · {action.scope} · {new Date(action.created_at).toLocaleString('en-GB')}</span>\r\n                  <span class=\"history-status\">{action.status} <span aria-hidden=\"true\">{expandedActionId === action.id ? '▾' : '▸'}</span></span>\r\n                </button>\r\n                {#if action.status === 'reconciling'}<button on:click={() => reconcile(action.id)}>Retry reconciliation</button>{/if}\r\n                {#if action.notifications.some((item) => item.status === 'failed')}<button on:click={() => retry(action.id)}>Resend failed</button>{/if}\r\n              </div>\r\n              {#if expandedActionId === action.id}\r\n                <div class=\"history-detail\" role=\"region\" aria-label=\"Action details\">\r\n                  {#if actionDetailLoadingId === action.id && !actionDetails[action.id]}<p>Loading action details…</p>\r\n                  {:else if actionDetailError?.id === action.id && !actionDetails[action.id]}<p class=\"history-detail-error\" role=\"alert\">Could not load action details: {actionDetailError.message}</p>\r\n                  {:else if actionDetails[action.id]}\r\n                    <h3>{actionDetails[action.id].details.after.title || actionDetails[action.id].details.before.title || 'Class action'}</h3>\r\n                    <p class=\"history-meta\">{actionCalendarName(actionDetails[action.id].details.calendar_id)} · Changed by {actionDetails[action.id].details.actor}</p>\r\n                    {#if actionDetailRows(actionDetails[action.id].details).length}\r\n                      <dl class=\"history-changes\">\r\n                        {#each actionDetailRows(actionDetails[action.id].details) as row}\r\n                          <div><dt>{row.label}</dt><dd>{#if row.before}<span>{row.before}</span><span aria-hidden=\"true\">→</span>{/if}<strong>{row.after}</strong></dd></div>\r\n                        {/each}\r\n                      </dl>\r\n                    {:else if action.operation === 'update'}<p>No class fields changed.</p>{/if}\r\n                    {#if actionDetails[action.id].details.after.responsibility?.enabled}\r\n                      <p><strong>Responsibility incident:</strong> {incidentLabel(actionDetails[action.id].details.after.responsibility)}</p>\r\n                    {/if}\r\n                    {#if actionDetails[action.id].details.reason}<p><strong>Reason:</strong> {actionDetails[action.id].details.reason}</p>{/if}\r\n                    {#if actionDetails[action.id].details.error_message}<p class=\"history-detail-error\"><strong>Action error:</strong> {actionDetails[action.id].details.error_message}</p>{/if}\r\n                    <div class=\"history-deliveries\"><strong>Email notifications</strong>\r\n                      {#if actionDetails[action.id].notifications.length}\r\n                        <ul>{#each actionDetails[action.id].notifications as delivery}<li>{delivery.email} · {delivery.status}{#if delivery.error} · {delivery.error}{/if}</li>{/each}</ul>\r\n                      {:else}<p>None selected.</p>{/if}\r\n                    </div>\r\n                  {/if}\r\n                </div>\r\n              {/if}\r\n            </div>\r\n          {:else}<p>No calendar actions yet.</p>{/each}\r\n        {/if}\r\n      </section>\r\n    </section>\r\n  </div>\r\n</div>\r\n\r\n{#if dialogOpen}\r\n  <div class=\"modal\" role=\"presentation\">\r\n    <form class=\"dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"calendar-dialog-title\" on:submit|preventDefault={submit} on:input={markDirty}>\r\n      <header><h2 id=\"calendar-dialog-title\">{editingEvent ? 'Edit class' : 'Create class'}</h2><button type=\"button\" aria-label=\"Close\" on:click={closeDialog}>×</button></header>\r\n      <label>Teacher calendar<select bind:value={form.calendar_id} disabled={!!editingEvent} required><option value=\"\">Select calendar</option>{#each editingEvent ? options.calendars.filter((calendar) => calendar.id === editingEvent.calendar_id) : options.calendars.filter((calendar) => calendar.writable) as calendar}<option value={calendar.id}>{calendar.name}</option>{/each}</select></label>\r\n      <fieldset class=\"students\"><legend>Students and base class price</legend>\r\n        {#each selectedStudents as student}\r\n          <div class=\"selected-student\"><span><strong>{student.name}</strong> <small>Grade {student.grade || '—'}</small></span><label>€ <input class=\"price\" type=\"number\" min=\"0\" step=\"1\" placeholder=\"Default class price\" bind:value={student.basePrice} required /></label><button type=\"button\" aria-label={`Remove ${student.name}`} on:click={() => toggleStudent(student.id)}>×</button></div>\r\n        {/each}\r\n        {#if studentPickerExpanded || !selectedStudents.length}\r\n          <div class=\"student-picker\"><input bind:this={studentSearchInput} type=\"search\" aria-label=\"Search students\" placeholder=\"Search by name or grade\" bind:value={studentSearch} />\r\n            <div class=\"student-results\">{#each availableStudents as student}<div class=\"student-row\"><label><input type=\"checkbox\" on:change={() => toggleStudent(student.id)} />{student.name} <small>Grade {student.grade || '—'}</small></label></div>{:else}<small>No students found.</small>{/each}</div>\r\n          </div>\r\n        {:else}\r\n          <button class=\"add-student\" type=\"button\" on:click={() => { studentPickerExpanded = true; tick().then(() => document.querySelector('[aria-label=\"Search students\"]')?.focus()); }}>Add another student</button>\r\n        {/if}\r\n      </fieldset>\r\n      <label>Class subject<input bind:this={titleInput} list=\"calendar-subject-options\" bind:value={form.subject} on:change={() => { if (form.selectedStudentIds.length >= 2 && !editingEvent) form.groupLetter = options.next_group_letters?.[form.subject] || 'A'; }} placeholder=\"Search subjects\" autocomplete=\"off\" required /><datalist id=\"calendar-subject-options\">{#each options.subjects || [] as subject}<option value={subject.name}></option>{/each}</datalist></label>\r\n      <label>Class name<input class=\"generated-title\" value={form.title} on:input={(event) => form = { ...form, title: event.currentTarget.value, titleIsCustom: true }} placeholder=\"Select a subject and student\" maxlength=\"190\" required /></label>\r\n      {#if form.titleIsCustom}<button type=\"button\" on:click={() => { form.titleIsCustom = false; markDirty(); }}>Use automatic name</button>{/if}\r\n      <label>Google Calendar description<textarea bind:value={form.description} on:change={syncDescription} placeholder=\"Denis Semionov / Markus Kateščenka / Ivan Michailov\" required></textarea><small>Use exact student tokens separated with “ / ”. This controls class enrolment.</small></label>\r\n      {#if form.calendar_id}<p class=\"meeting\">Meeting link: {options.calendars.find((calendar) => calendar.id === form.calendar_id)?.meeting_link || 'No teacher meeting link'}</p>{/if}\r\n      <div class=\"dates\"><div class=\"date-field\"><label for=\"calendar-start-date\">Start date</label><input id=\"calendar-start-date\" type=\"date\" bind:value={form.startDate} required />{#if form.startDate}<small class=\"selected-weekday\" aria-live=\"polite\">{weekdayLabel(form.startDate)}</small>{/if}</div><label>Start time<input type=\"time\" step=\"300\" bind:value={form.startTime} on:input={(event) => { const end = oneHourAfter(event.currentTarget.value); if (end) form.endTime = end; }} required /></label><label>End time<input type=\"time\" step=\"300\" bind:value={form.endTime} required /></label></div>\r\n      {#if form.startTime && form.endTime && form.endTime < form.startTime}<small>Ends the following day.</small>{/if}\r\n      {#if form.calendar_id && form.startDate}<div class=\"availability\" aria-live=\"polite\"><strong>Unavailable times</strong>{#if unavailableTimes.length}<div class=\"busy-times\">{#each unavailableTimes as time}<span>{time.label}</span>{/each}</div>{:else}<small>No existing classes on this day.</small>{/if}</div>{/if}\r\n      {#if !editingEvent}<label class=\"inline\"><input type=\"checkbox\" bind:checked={form.recurring} /> Repeating class</label>{/if}\r\n      {#if form.recurring}<div class=\"recurrence\"><label>Repeat<select bind:value={form.frequency}><option value=\"daily\">Daily</option><option value=\"weekly\">Weekly</option></select></label><label>Interval<select bind:value={form.interval}><option value={1}>Every week/day</option><option value={2}>Bi-weekly</option></select></label><div class=\"weekdays\">{#each ['MO','TU','WE','TH','FR','SA','SU'] as weekday}<label><input type=\"checkbox\" value={weekday} bind:group={form.weekdays} />{weekday}</label>{/each}</div><small>No-end series are saved through August 31 of the active academic year.</small></div>{/if}\r\n      {#if editingEvent && editingEvent.recurring_event_id}<fieldset><legend>Apply to</legend>{#each [['single','This occurrence'],['following','This and following'],['series','Entire series']] as scope}<label class=\"inline\"><input type=\"radio\" bind:group={form.scope} value={scope[0]} />{scope[1]}</label>{/each}{#if form.scope === 'following'}<label class=\"warning\"><input type=\"checkbox\" bind:checked={form.confirm_reset_exceptions} /> I understand future exceptions will be reset</label>{/if}</fieldset>{/if}\r\n      <label>Reason (optional)<textarea bind:value={form.reason}></textarea></label>\r\n      <fieldset><legend>Email notifications (optional)</legend>{#each notificationChoices as choice}<div class=\"notify\"><label><input type=\"checkbox\" disabled={!choice.available} checked={!!selectedNotification(choice)} on:change={() => toggleNotification(choice)} /><span>{choice.label}</span></label>{#if selectedNotification(choice)}<input type=\"email\" aria-label={`Email for ${choice.label}`} value={selectedNotification(choice).email} on:input={(event) => updateNotificationEmail(choice, event.currentTarget.value)} required />{:else}<small>{choice.email || 'No email available'}</small>{/if}</div>{/each}</fieldset>\r\n      {#if editingEvent}<fieldset><legend>Class responsibility (optional, selected occurrence only)</legend><label class=\"inline\"><input type=\"checkbox\" bind:checked={form.responsibilityEnabled} /> Create responsibility incident</label>{#if form.responsibilityEnabled}<select bind:value={form.responsibleParty}><option value=\"teacher\">Teacher</option><option value=\"student\">Student</option></select><select bind:value={form.incidentType}><option value=\"late\">Late</option><option value=\"cancellation\">Cancellation</option><option value=\"other\">Other</option></select><small>The optional reason above will be saved as the incident description.</small>{/if}</fieldset>{/if}\r\n      <footer>{#if editingEvent}<button type=\"button\" disabled={submitting} on:click={duplicateClass}>Duplicate class</button>{/if}{#if editingEvent}<button class=\"danger\" type=\"button\" disabled={submitting} on:click={cancelClass}>Delete class</button>{/if}<span></span><button type=\"button\" on:click={closeDialog}>Cancel</button>{#if error}<div class=\"error footer-error\" role=\"alert\">{error}<button type=\"button\" aria-label=\"Dismiss\" on:click={() => error = ''}>×</button></div>{/if}<button class=\"primary\" aria-busy={submitting} disabled={submitting}>{submitting ? 'Loading…' : editingEvent ? 'Save changes' : 'Create class'}</button></footer>\r\n    </form>\r\n  </div>\r\n{/if}\r\n\r\n<style>\r\n  :global(body:has(.calendar-page) main){padding:0;max-width:none;margin:0;width:100%}.calendar-page{min-height:100vh;background:#f8fafc;color:#243047}.workspace{display:grid;grid-template-columns:270px 1fr;min-height:calc(100vh - 64px)}aside{background:white;border-right:1px solid #e5eaf0;padding:22px 16px;box-sizing:border-box;height:calc(100vh - 64px);overflow-y:auto;position:sticky;top:64px}.create{border:0;border-radius:16px;background:#273c75;color:white;padding:14px 22px;font-weight:700;box-shadow:0 2px 8px #1b2a5030;margin-bottom:24px}.aside-heading{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px}.calendar-selection-actions{display:flex;gap:6px;white-space:nowrap}.aside-heading button{border:0;background:none;color:#3657a7;padding:0}.calendar-choice{display:grid;grid-template-columns:20px 12px 1fr;gap:8px;align-items:center;padding:8px 2px}.calendar-choice i{width:10px;height:10px;border-radius:3px}.calendar-choice small{grid-column:3;color:#b06026}.disabled{opacity:.55}.calendar-shell{min-width:0;padding:20px}.toolbar{display:flex;gap:9px;align-items:center;margin-bottom:16px}.toolbar button,.view-toggle button{border:1px solid #dce2e9;background:#fff;border-radius:8px;padding:8px 12px}.toolbar h1{font-size:22px;flex:1;margin:0 12px}.view-toggle .active{background:#e8eefc;color:#203f8a}.calendar-board{overflow-x:auto}.weekday-headings{display:grid;grid-template-columns:repeat(7,minmax(110px,1fr));min-width:770px;background:#fff;border:1px solid #dfe4ea;border-bottom:0}.weekday-headings span{padding:9px 5px;text-align:center;color:#667085;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(110px,1fr));grid-template-rows:repeat(6,minmax(110px,1fr));min-width:770px;background:#dfe4ea;border:1px solid #dfe4ea;gap:1px}.calendar-grid.week{grid-template-rows:minmax(620px,1fr)}.day{position:relative;background:#fff;min-width:0;padding:5px;overflow:hidden}.current-time{position:absolute;left:0;right:0;border-top:2px solid #d93025;z-index:2}.current-time:before{content:'';position:absolute;width:7px;height:7px;border-radius:50%;background:#d93025;left:0;top:-4px}.outside{background:#f6f7f9;color:#9299a4}.day-number{border:0;background:none;border-radius:50%;width:30px;height:30px}.event{display:flex;width:100%;gap:5px;text-align:left;border:0;border-left:4px solid var(--event);background:color-mix(in srgb,var(--event) 13%,white);border-radius:4px;padding:5px;margin:2px 0;overflow:hidden}.event time{font-size:10px}.event span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.empty{height:50vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:#697386}.error,.notice{padding:10px 14px;margin-bottom:10px;border-radius:8px;display:flex;justify-content:space-between}.error{background:#fff0ee;color:#a72820}.notice{background:#e9f6ee;color:#176538}.error button,.notice button{border:0;background:none}.history{background:white;margin-top:16px;border:1px solid #e3e7ed;border-radius:10px}.history-title{width:100%;text-align:left;border:0;background:none;padding:13px;font-weight:700}.history-row{display:flex;gap:12px;justify-content:space-between;border-top:1px solid #edf0f4;padding:10px 13px;font-size:13px}.modal{position:fixed;inset:0;background:#15213d88;z-index:1000;display:grid;place-items:center;padding:20px}.dialog{background:white;border-radius:16px;padding:20px;width:min(720px,95vw);max-height:92vh;overflow:auto;box-shadow:0 20px 60px #0004}.dialog header,.dialog footer{display:flex;align-items:center;gap:10px}.dialog header h2{flex:1}.dialog header button{border:0;background:none;font-size:25px}.dialog>label,.dialog fieldset{display:block;margin:13px 0}.dialog input,.dialog select,.dialog textarea{box-sizing:border-box;border:1px solid #ccd3dd;border-radius:7px;padding:8px}.dialog>label>select,.dialog>label>textarea,.dialog>label>input{display:block;width:100%;margin-top:5px}.generated-title{background:#f5f7fa;color:#39455a}.student-picker>input{width:100%;margin-bottom:8px}.student-results{max-height:210px;overflow-y:auto;border:1px solid #e2e7ed;border-radius:8px;padding:5px}.selected-student{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:10px;background:#f5f7fa;border-radius:9px;padding:8px;margin:6px 0}.selected-student button{border:0;background:none;font-size:20px;color:#6c7480}.add-student{border:1px dashed #9ca8b7;background:#fff;border-radius:8px;padding:8px 12px;margin-top:7px;color:#294c9b}.student-row,.notify{display:flex!important;align-items:center;justify-content:space-between;gap:12px;padding:5px}.notify label{display:flex;align-items:center;gap:8px;flex:1}.notify>input{min-width:230px}.notify small{color:#697386}.price{width:110px}.dates{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.dates label,.date-field,.recurrence label{display:flex;flex-direction:column;gap:4px}.date-field input{width:100%}.selected-weekday{color:#667085;font-weight:600}.inline{display:inline-flex!important;align-items:center;gap:6px;margin-right:15px}.recurrence{display:flex;gap:12px;align-items:end;flex-wrap:wrap}.weekdays{display:flex;gap:5px}.weekdays label{font-size:11px;align-items:center}.warning{display:block;color:#a14d14;margin-top:8px}.dialog footer{border-top:1px solid #e4e8ee;padding-top:15px;flex-wrap:wrap}.dialog footer span{flex:1}.dialog footer button{padding:9px 14px;border:1px solid #ccd3dd;border-radius:7px;background:#fff}.dialog footer .footer-error{margin:0;flex:0 1 300px;padding:8px 10px;font-size:13px}.dialog footer .footer-error button{padding:0;margin-left:8px}.dialog footer .primary{background:#273c75;color:white}.dialog footer .danger{color:#b3261e;border-color:#e6b6b2}@media(max-width:800px){.workspace{grid-template-columns:1fr}aside{border-right:0;height:auto;max-height:42vh;position:static}.calendar-shell{padding:8px}.calendar-grid{grid-template-columns:repeat(7,minmax(80px,1fr));min-width:560px}.weekday-headings{grid-template-columns:repeat(7,minmax(80px,1fr));min-width:560px}.dates{grid-template-columns:1fr}.selected-student{grid-template-columns:1fr auto}.selected-student button{grid-column:2}.notify{align-items:flex-start;flex-direction:column}.notify>input{width:100%;min-width:0}.dialog footer .footer-error{order:10;flex:1 1 100%}}\r\n  .calendar-search{box-sizing:border-box;width:100%;margin:0 0 10px;border:1px solid #ccd3dd;border-radius:8px;padding:8px 10px;font:inherit;font-size:13px;background:#fff}\r\n  .calendar-search:focus{outline:2px solid #9db5ee;outline-offset:1px;border-color:#3657a7}\r\n  .no-calendars{color:#697386;font-size:13px}\r\n  .day-create-target{position:absolute;inset:0;width:100%;height:100%;border:0;background:transparent;cursor:pointer}\r\n  .day-create-target:focus-visible{outline:2px solid #3657a7;outline-offset:-3px}\r\n  .day-number{position:relative;z-index:1;display:inline-grid;place-items:center;pointer-events:none}\r\n  .event{position:relative;z-index:1}\r\n  .event:hover,.event:focus-visible{background:color-mix(in srgb,var(--event) 45%,white);box-shadow:0 3px 9px #203f8a40}\r\n  .event:active{background:color-mix(in srgb,var(--event) 72%,white);box-shadow:inset 0 2px 4px #17203355}\r\n  .availability{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:9px 0 13px;padding:9px 11px;border-radius:8px;background:#fff7e8;color:#704600;font-size:13px}\r\n  .busy-times{display:flex;gap:6px;flex-wrap:wrap}\r\n  .busy-times span{padding:3px 7px;border-radius:999px;background:#ffe4b5;font-weight:700}\r\n  .history-row{align-items:center}\r\n  .history-summary{display:flex;align-items:center;justify-content:space-between;gap:15px;flex:1;min-width:0;padding:3px 0;border:0;background:none;text-align:left;color:inherit;cursor:pointer;font:inherit}\r\n  .history-summary:hover,.history-summary:focus-visible{color:#234b9a}\r\n  .history-status{white-space:nowrap;color:#58677c}\r\n  .history-detail{border-top:1px solid #edf0f4;background:#f8faff;padding:15px 18px 17px 24px;font-size:13px;overflow-wrap:anywhere}\r\n  .history-detail h3{font-size:15px;margin:0 0 5px}\r\n  .history-meta{color:#637087;margin:0 0 13px}\r\n  .history-changes{display:grid;gap:0;margin:0 0 12px;border:1px solid #e2e9f2;border-radius:8px;background:#fff}\r\n  .history-changes>div{display:grid;grid-template-columns:minmax(110px,25%) 1fr;gap:12px;padding:8px 11px}\r\n  .history-changes>div+div{border-top:1px solid #edf0f4}\r\n  .history-changes dt{font-weight:700;color:#536174}\r\n  .history-changes dd{margin:0;display:flex;align-items:center;gap:8px;flex-wrap:wrap}\r\n  .history-changes dd>span:first-child{color:#667085;text-decoration:line-through}\r\n  .history-changes dd>strong{font-weight:700;color:#243047}\r\n  .history-deliveries{border-top:1px solid #e2e9f2;margin-top:12px;padding-top:10px}\r\n  .history-deliveries ul{margin:6px 0 0;padding-left:19px}\r\n  .history-deliveries p{margin:5px 0 0;color:#637087}\r\n  .history-detail-error{color:#a72820}\r\n  @media(max-width:800px){.history-changes>div{grid-template-columns:1fr;gap:3px}.history-summary{align-items:flex-start;flex-direction:column;gap:4px}}\r\n  .calendar-choice{display:flex;align-items:flex-start;gap:3px;padding:0}\r\n  .calendar-choice-main{display:grid;grid-template-columns:20px 12px minmax(0,1fr);gap:8px;align-items:center;flex:1;min-width:0;padding:8px 2px;cursor:pointer}\r\n  .calendar-choice-main small{grid-column:3;color:#b06026}\r\n  .calendar-choice-main>span{overflow-wrap:anywhere}\r\n  .visibility-toggle{flex:none;display:grid;place-items:center;width:27px;height:27px;margin-top:5px;border:0;border-radius:7px;background:transparent;color:#667085;cursor:pointer;font-size:14px}\r\n  .visibility-toggle i{width:auto;height:auto;border-radius:0}\r\n  .visibility-toggle:hover,.visibility-toggle:focus-visible{background:#e8eefc;color:#203f8a}\r\n  .visibility-toggle:disabled{opacity:.45;cursor:wait}\r\n  .hidden-calendars{border-top:1px solid #e5eaf0;margin-top:14px;padding-top:5px}\r\n  .hidden-calendars-title{display:flex;justify-content:space-between;align-items:center;width:100%;padding:10px 2px;border:0;background:transparent;color:#526278;font:inherit;font-size:13px;font-weight:700;text-align:left;cursor:pointer}\r\n  .hidden-calendar-choice{display:grid;grid-template-columns:12px minmax(0,1fr) 27px;gap:8px;align-items:center;padding:4px 2px;color:#526278;font-size:13px}\r\n  .hidden-calendar-choice>i{width:10px;height:10px;border-radius:3px}\r\n  .hidden-calendar-choice>span{overflow-wrap:anywhere}\r\n  .hidden-calendar-choice .visibility-toggle{margin-top:0}\r\n  .student-calendars{border-bottom:1px solid #e5eaf0;margin-bottom:16px;padding-bottom:14px}\r\n  .student-calendar-list{max-height:190px;overflow-y:auto}\r\n  .student-calendar-choice{font-size:13px}\r\n  .student-calendar-choice i{width:10px;height:10px;border-radius:3px}\r\n  .aside-heading{flex-wrap:wrap}\r\n  .calendar-selection-actions{flex-wrap:wrap;white-space:normal}\r\n  .class-total{margin:0;color:#405782;font-size:13px;font-weight:700;white-space:nowrap}\r\n  .calendar-grid{grid-template-rows:repeat(var(--week-count),minmax(110px,1fr))}\r\n  .day-placeholder{background:#fff;pointer-events:none}\r\n  .day-number.today{background:#273c75;color:#fff;font-weight:700}\r\n  .event:disabled{cursor:default;opacity:.65}\r\n  @media(max-width:800px){.toolbar{flex-wrap:wrap}.class-total{order:3;width:100%}}\r\n</style>\r\n","<script>\r\n  import { onMount, onDestroy, tick } from 'svelte';\r\n  import { getApiBase } from './apiBase.js';\r\n\r\n  const endpoint = `${getApiBase()}/studentplayground/api/admin/monthly-feedback/`;\r\n  const parts = new Intl.DateTimeFormat('en-CA', { timeZone: 'Europe/Vilnius', year: 'numeric', month: '2-digit' }).formatToParts(new Date());\r\n  const currentMonth = Number(parts.find(p => p.type === 'year').value) * 12 + Number(parts.find(p => p.type === 'month').value) - 2;\r\n  const lastMonth = `${Math.floor(currentMonth / 12)}-${String(currentMonth % 12 + 1).padStart(2, '0')}`;\r\n  let month = lastMonth;\r\n  let batch = null;\r\n  let pages = new Map();\r\n  let pending = new Map();\r\n  let controllers = new Set();\r\n  let generation = 0;\r\n  let position = 0;\r\n  let cacheVersion = 0;\r\n  let logo = '';\r\n  let busy = false;\r\n  let navigating = false;\r\n  let statusPending = false;\r\n  let error = '';\r\n  let textMode = false;\r\n  let dialog = null;\r\n  let holdReason = '';\r\n  let dialogElement;\r\n  let priorFocus;\r\n  let poll;\r\n  let destroyed = false;\r\n  let searchQuery = '';\r\n  let searchResults = null;\r\n  let searching = false;\r\n  let searchRequest = 0;\r\n\r\n  $: current = (cacheVersion, pages.get(Math.floor(position / 10) * 10)?.items.find(item => item.position === position));\r\n  $: active = !!batch?.active_job;\r\n  $: mutable = batch?.is_current && batch?.status === 'ready' && !active && !busy;\r\n  $: previewDocument = current ? browserDocument(current.html_body, logo) : '';\r\n\r\n  function browserDocument(html, logoUrl) {\r\n    const parsed = new DOMParser().parseFromString(html.replaceAll('cid:tutory_logo', logoUrl), 'text/html');\r\n    parsed.querySelectorAll('script, iframe, object, embed, form, base, link, meta[http-equiv]').forEach(node => node.remove());\r\n    parsed.querySelectorAll('[href], [srcset], [action]').forEach(node => {\r\n      node.removeAttribute('href'); node.removeAttribute('srcset'); node.removeAttribute('action');\r\n    });\r\n    const policy = parsed.createElement('meta');\r\n    policy.httpEquiv = 'Content-Security-Policy';\r\n    policy.content = \"default-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:; form-action 'none'; base-uri 'none'\";\r\n    parsed.head.prepend(policy);\r\n    return '<!doctype html>' + parsed.documentElement.outerHTML;\r\n  }\r\n\r\n  async function api(path, method = 'GET', data = null) {\r\n    const controller = new AbortController();\r\n    controllers.add(controller);\r\n    try {\r\n      const response = await fetch(endpoint + path, {\r\n        method, signal: controller.signal, cache: 'no-store',\r\n        headers: { Authorization: `Bearer ${localStorage.getItem('jwtToken')}`, 'Content-Type': 'application/json' },\r\n        ...(data ? { body: JSON.stringify(data) } : {}),\r\n      });\r\n      const result = await response.json();\r\n      if (!response.ok) throw new Error(result.message || (response.status === 403 ? 'Superuser access required' : 'Request failed'));\r\n      return result;\r\n    } finally { controllers.delete(controller); }\r\n  }\r\n\r\n  function resetRequests() {\r\n    generation++;\r\n    searchRequest++; searching = false; searchResults = null;\r\n    navigating = false;\r\n    controllers.forEach(controller => controller.abort());\r\n    controllers.clear(); pages = new Map(); pending = new Map(); cacheVersion++;\r\n  }\r\n\r\n  async function fetchPage(cursor) {\r\n    if (pages.has(cursor)) return pages.get(cursor);\r\n    if (pending.has(cursor)) return pending.get(cursor);\r\n    const stamp = generation;\r\n    const id = batch.id;\r\n    const promise = (async () => {\r\n      const result = await api(`batches/${id}/previews/?cursor=${cursor}`);\r\n      if (stamp !== generation || id !== batch?.id) return null;\r\n      if (result.batch_id !== id || result.version !== batch.version) throw new Error('This review changed. Reload before continuing.');\r\n      pages.set(cursor, result);\r\n      logo = result.logo_data_url;\r\n      while (pages.size > 3) {\r\n        const currentCursor = Math.floor(position / 10) * 10;\r\n        const candidate = [...pages.keys()].find(key => key !== currentCursor && key !== cursor);\r\n        pages.delete(candidate);\r\n      }\r\n      cacheVersion++;\r\n      return result;\r\n    })();\r\n    pending.set(cursor, promise);\r\n    try { return await promise; }\r\n    finally { if (stamp === generation) pending.delete(cursor); }\r\n  }\r\n\r\n  async function loadMonth() {\r\n    searchQuery = '';\r\n    resetRequests(); batch = null; position = 0; dialog = null; error = ''; busy = true;\r\n    const stamp = generation;\r\n    try {\r\n      const result = await api('batches/', 'POST', { month });\r\n      if (stamp !== generation) return;\r\n      batch = result;\r\n      if (batch.status === 'ready') await fetchPage(0);\r\n    } catch (err) { if (stamp === generation && err.name !== 'AbortError') error = err.message; }\r\n    finally { if (stamp === generation) busy = false; }\r\n  }\r\n\r\n  async function refreshStatus() {\r\n    if (!batch || statusPending || busy || destroyed) return;\r\n    statusPending = true;\r\n    const stamp = generation;\r\n    const id = batch.id;\r\n    try {\r\n      const result = await api(`batches/${id}/`);\r\n      if (stamp !== generation || busy) return;\r\n      if (result.status === 'ready' && !result.is_current && result.current_batch_id) {\r\n        batch = await api(`batches/${result.current_batch_id}/`);\r\n        resetRequests(); position = 0;\r\n        await fetchPage(0);\r\n      } else {\r\n        const changed = batch.version !== result.version || batch.status !== result.status\r\n          || JSON.stringify(batch.counts) !== JSON.stringify(result.counts);\r\n        batch = result;\r\n        if (changed && batch.status === 'ready') {\r\n          resetRequests();\r\n          position = Math.min(position, Math.max(0, batch.total - 1));\r\n          await fetchPage(Math.floor(position / 10) * 10);\r\n        }\r\n      }\r\n    } catch (err) { if (stamp === generation && err.name !== 'AbortError') error = err.message; }\r\n    finally { statusPending = false; }\r\n  }\r\n\r\n  async function navigate(offset) {\r\n    if (dialog || navigating || !batch || position + offset < 0 || position + offset >= batch.total) return;\r\n    const stamp = generation;\r\n    navigating = true; error = '';\r\n    try {\r\n      const target = position + offset;\r\n      const result = await fetchPage(Math.floor(target / 10) * 10);\r\n      if (!result || stamp !== generation) return;\r\n      position = target;\r\n      // Two cached emails remain ahead: load only the next page, once.\r\n      if (result.next_cursor !== null && result.next_cursor - position <= 3) {\r\n        fetchPage(result.next_cursor).catch(err => { if (stamp === generation && err.name !== 'AbortError') error = err.message; });\r\n      }\r\n    } catch (err) { if (stamp === generation && err.name !== 'AbortError') error = err.message; }\r\n    finally { if (stamp === generation) navigating = false; }\r\n  }\r\n\r\n  async function retryPreview() {\r\n    error = '';\r\n    try { await fetchPage(Math.floor(position / 10) * 10 + (current ? 10 : 0)); }\r\n    catch (err) { if (err.name !== 'AbortError') error = err.message; }\r\n  }\r\n\r\n  async function searchRecipients() {\r\n    const query = searchQuery.trim();\r\n    const request = ++searchRequest;\r\n    const stamp = generation;\r\n    searchResults = null; error = '';\r\n    if (!query || !batch) return;\r\n    searching = true;\r\n    try {\r\n      const result = await api(`batches/${batch.id}/recipients/?q=${encodeURIComponent(query)}`);\r\n      if (request !== searchRequest || stamp !== generation) return;\r\n      if (result.batch_id !== batch.id || result.version !== batch.version) throw new Error('This review changed. Search again.');\r\n      searchResults = result;\r\n    } catch (err) { if (request === searchRequest && stamp === generation && err.name !== 'AbortError') error = err.message; }\r\n    finally { if (request === searchRequest && stamp === generation) searching = false; }\r\n  }\r\n\r\n  async function selectRecipient(result) {\r\n    if (dialog || navigating || busy) return;\r\n    await navigate(result.position - position);\r\n    searchResults = null;\r\n  }\r\n\r\n  async function openDialog(mode) {\r\n    priorFocus = document.activeElement;\r\n    holdReason = '';\r\n    dialog = { mode, batchId: batch.id, version: batch.version, itemId: current?.id, month: batch.month,\r\n      recipientEmail: current?.recipient_email, studentNames: current?.students.map(student => student.name).join(', '),\r\n      familyCount: batch.counts[mode === 'retry' ? 'failed' : 'pending'],\r\n      studentCount: batch.student_counts[mode === 'retry' ? 'failed' : 'pending'] || 0,\r\n      heldCount: batch.counts.held };\r\n    await tick();\r\n    dialogElement?.querySelector('textarea, button')?.focus();\r\n  }\r\n\r\n  function closeDialog() { dialog = null; priorFocus?.focus(); }\r\n\r\n  async function mutate(mode, confirmation = dialog) {\r\n    if (busy) return;\r\n    busy = true; error = '';\r\n    const stamp = generation;\r\n    try {\r\n      const expected_revision = confirmation?.version ?? batch.version;\r\n      let result;\r\n      if (mode === 'hold' || mode === 'restore') {\r\n        result = await api(`items/${confirmation?.itemId ?? current.id}/`, 'PATCH',\r\n          { held: mode === 'hold', reason: holdReason.trim(), expected_revision });\r\n      } else {\r\n        const single = mode === 'send-one' || mode === 'retry-one';\r\n        const action = mode === 'retry' || mode === 'retry-one' ? 'retry-failed' : mode === 'send-one' ? 'send' : mode;\r\n        result = await api(`batches/${confirmation?.batchId ?? batch.id}/${action}/`, 'POST',\r\n          { expected_revision, ...(single ? { item_id: confirmation.itemId } : {}) });\r\n      }\r\n      if (stamp !== generation) return;\r\n      batch = result; busy = false; closeDialog(); resetRequests();\r\n      if (mode === 'rebuild') position = 0;\r\n      if (batch.status === 'ready') await fetchPage(Math.floor(position / 10) * 10);\r\n    } catch (err) { if (stamp === generation && err.name !== 'AbortError') { closeDialog(); error = err.message; } }\r\n    finally { if (stamp === generation) busy = false; }\r\n  }\r\n\r\n  function keydown(event) {\r\n    if (dialog) {\r\n      if (event.key === 'Escape' && !busy) { event.preventDefault(); closeDialog(); }\r\n      if (event.key === 'Tab') {\r\n        const focusable = [...dialogElement.querySelectorAll('button:not(:disabled), textarea')];\r\n        const next = event.shiftKey ? focusable[0] : focusable.at(-1);\r\n        if (document.activeElement === next) { event.preventDefault(); (event.shiftKey ? focusable.at(-1) : focusable[0]).focus(); }\r\n      }\r\n      return;\r\n    }\r\n    if (event.target.closest('input, textarea, select, [contenteditable=\"true\"]') || event.altKey || event.ctrlKey || event.metaKey) return;\r\n    if (event.key === 'ArrowRight' || event.key === 'ArrowLeft') { event.preventDefault(); navigate(event.key === 'ArrowRight' ? 1 : -1); }\r\n  }\r\n\r\n  onMount(() => { loadMonth(); poll = setInterval(refreshStatus, 5000); });\r\n  onDestroy(() => { destroyed = true; clearInterval(poll); resetRequests(); });\r\n</script>\r\n\r\n<svelte:window on:keydown={keydown} />\r\n\r\n<main class=\"review\">\r\n  <header>\r\n    <div><h1>Monthly feedback review</h1><p>Review the frozen email each family would receive. Navigation does not approve or send email.</p></div>\r\n    <div class=\"month-controls\">\r\n      <label>Reporting month <input aria-label=\"Reporting month\" type=\"month\" max={lastMonth} bind:value={month} on:change={loadMonth} /></label>\r\n    </div>\r\n  </header>\r\n  {#if error}<div class=\"error\" role=\"alert\">{error} <button on:click={retryPreview} disabled={!batch || batch.status !== 'ready'}>Retry preview loading</button></div>{/if}\r\n  {#if !batch}<p role=\"status\">{busy ? 'Loading review…' : 'Select a completed month to load its review.'}</p>\r\n  {:else}\r\n    {#if batch.status === 'ready' && batch.total > 0}\r\n      <section class=\"recipient-search\" aria-label=\"Find a recipient\">\r\n        <form on:submit|preventDefault={searchRecipients}>\r\n          <label for=\"recipient-search\">Find a person</label>\r\n          <div class=\"search-controls\">\r\n            <input id=\"recipient-search\" type=\"search\" placeholder=\"Parent name, student name or email\" maxlength=\"254\" bind:value={searchQuery}\r\n              on:input={() => { searchRequest++; searching = false; searchResults = null; }} disabled={!!dialog || busy} />\r\n            <button type=\"submit\" disabled={searching || !searchQuery.trim() || !!dialog || busy}>Search</button>\r\n          </div>\r\n        </form>\r\n        {#if searching}<p role=\"status\">Searching recipients…</p>{/if}\r\n        {#if searchResults}\r\n          {#if searchResults.items.length === 0}<p role=\"status\">No matching recipients in this month.</p>\r\n          {:else}\r\n            <ul class=\"search-results\">\r\n              {#each searchResults.items as result}\r\n                <li><button on:click={() => selectRecipient(result)} disabled={navigating || !!dialog || busy}>\r\n                  <strong>{result.recipient_email}</strong>\r\n                  <span>{result.parent_names.join(', ')}</span>\r\n                  <span>{result.students.map(student => student.name).join(', ')}</span>\r\n                </button></li>\r\n              {/each}\r\n            </ul>\r\n            {#if searchResults.truncated}<p role=\"status\">Showing the first 20 matches. Refine your search to find someone else.</p>{/if}\r\n          {/if}\r\n        {/if}\r\n      </section>\r\n    {/if}\r\n    {#if batch.status === 'ready' && batch.total === 0}<p role=\"status\">No eligible teacher feedback emails for this month.</p>\r\n    {:else if current}\r\n      <section class=\"sending-details\" aria-label=\"Sending details\">\r\n        <dl><dt>To</dt><dd>{current.recipient_email}</dd><dt>Students</dt><dd>{current.students.map(student => student.name).join(', ')}</dd><dt>Subject</dt><dd>{current.subject}</dd><dt>Status</dt><dd>{current.state === 'delivery_unknown' ? 'Unresolved — do not retry without investigating delivery' : current.state}</dd></dl>\r\n        {#if current.held}<p class=\"hold-reason\">{current.hold_reason}</p>{/if}\r\n      </section>\r\n      <section class=\"email-card\" aria-label=\"Family email\">\r\n        <div class=\"preview-controls\">\r\n          <div class=\"preview-toolbar\">\r\n            <button aria-label=\"Previous email\" on:click={() => navigate(-1)} disabled={position === 0 || navigating || !!dialog}>← Previous</button>\r\n            <span aria-live=\"polite\">Email {position + 1} of {batch.total}</span>\r\n            <button aria-label=\"Next email\" on:click={() => navigate(1)} disabled={position + 1 >= batch.total || navigating || !!dialog}>Next →</button>\r\n          </div>\r\n          <div class=\"email-actions\">\r\n            {#if current.state === 'failed'}\r\n              <button class=\"primary\" on:click={() => openDialog('retry-one')} disabled={!mutable || !batch.sending_enabled || current.held}>Retry this email</button>\r\n            {:else}\r\n              <button class=\"primary\" on:click={() => openDialog('send-one')} disabled={!mutable || !batch.sending_enabled || current.held || current.state !== 'pending'}>Send this email</button>\r\n            {/if}\r\n            <button on:click={() => textMode = !textMode}>{textMode ? 'HTML preview' : 'Plain text'}</button>\r\n            {#if current.held}<button on:click={() => mutate('restore')} disabled={!mutable}>Restore family email</button>\r\n            {:else}<button on:click={() => openDialog('hold')} disabled={!mutable || !['pending', 'failed'].includes(current.state)}>Hold family email</button>{/if}\r\n          </div>\r\n        </div>\r\n        {#if textMode}<pre>{current.text_body}</pre>\r\n        {:else}<iframe title=\"Email preview\" sandbox=\"\" referrerpolicy=\"no-referrer\" srcdoc={previewDocument}></iframe>{/if}\r\n      </section>\r\n    {:else}<p role=\"status\">{batch.status === 'ready' ? 'Loading previews…' : 'Preparing frozen feedback and the first ten previews…'}</p>{/if}\r\n    <section class=\"batch-info\" aria-label=\"Batch status\">\r\n      <p><strong>{batch.month} · Revision {batch.revision}</strong> · {batch.status}\r\n        {#if batch.prepared_at} · Frozen {new Date(batch.prepared_at).toLocaleString('lt-LT', { timeZone: 'Europe/Vilnius' })}{/if}</p>\r\n      <div class=\"counts\">{#each ['sent', 'held', 'failed', 'delivery_unknown', 'skipped'] as state}<span>{state === 'delivery_unknown' ? 'Unresolved' : state[0].toUpperCase() + state.slice(1)}: {batch.counts[state] || 0}</span>{/each}<span>Eligible: {batch.counts.pending}</span></div>\r\n      {#if batch.active_job}<p role=\"status\">{batch.active_job.operation}: {batch.active_job.processed} / {batch.active_job.total || 'preparing'} · {batch.active_job.status}. You may close this page; work continues.</p>{/if}\r\n      {#if batch.last_job?.status === 'failed'}<p class=\"error\">Operation failed: {batch.last_job.error}. The last good revision remains available.</p>{/if}\r\n      {#if !batch.sending_enabled}<p>SMTP delivery is disabled. Preparation and review remain available.</p>{/if}\r\n      {#if batch.summary.already_covered_students}<p>Already delivered or unresolved student sections excluded: {batch.summary.already_covered_students}</p>{/if}\r\n      {#if Object.keys(batch.summary.skipped || {}).length}<details><summary>Selection exclusions</summary>{#each Object.entries(batch.summary.skipped) as [reason, count]}<p>{reason.replaceAll('_', ' ')}: {count}</p>{/each}</details>{/if}\r\n      <button on:click={() => openDialog('rebuild')} disabled={!mutable}>Rebuild unsent emails</button>\r\n    </section>\r\n    <footer>\r\n      <p>Held, sent, failed and unresolved emails are excluded from normal delivery. Definite failures require a separate retry.</p>\r\n      <div class=\"footer-actions\">\r\n        <button class=\"primary\" on:click={() => openDialog('send')} disabled={!mutable || !batch.sending_enabled || batch.counts.pending === 0}>{batch.counts.sent > 0 ? 'Send remaining emails' : 'Send all eligible emails'}</button>\r\n        <button on:click={() => openDialog('retry')} disabled={!mutable || !batch.sending_enabled || batch.counts.failed === 0}>Retry definite failures</button>\r\n      </div>\r\n    </footer>\r\n  {/if}\r\n</main>\r\n\r\n{#if dialog}\r\n  <div class=\"modal-backdrop\">\r\n    <section role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"review-dialog-title\" bind:this={dialogElement} class=\"modal\">\r\n      <h2 id=\"review-dialog-title\">{dialog.mode === 'send-one' ? 'Send this email' : dialog.mode === 'retry-one' ? 'Retry this email' : dialog.mode === 'hold' ? 'Hold this family email' : dialog.mode === 'rebuild' ? 'Rebuild unsent emails' : dialog.mode === 'retry' ? 'Retry definite failures' : 'Send eligible emails'}</h2>\r\n      {#if dialog.mode === 'hold'}\r\n        <label>Hold reason <textarea aria-label=\"Hold reason\" maxlength=\"2000\" bind:value={holdReason}></textarea></label>\r\n        <p>The entire family email will be held. Original teacher feedback is not edited.</p>\r\n      {:else if dialog.mode === 'send-one' || dialog.mode === 'retry-one'}\r\n        <p>Send the frozen feedback for {dialog.month} to <strong>{dialog.recipientEmail}</strong>?</p>\r\n        <p>Students: {dialog.studentNames}</p>\r\n        <p>Only this recipient will receive an email.</p>\r\n      {:else if dialog.mode === 'rebuild'}\r\n        <p>Create a new frozen revision from current feedback and parent details for {dialog.month}? Holds carry over. Sent and unresolved student sections will not be resent.</p>\r\n      {:else}\r\n        <p>{dialog.month} · Revision {batch.revision}</p>\r\n        <p>{dialog.familyCount} family emails · {dialog.studentCount} students</p>\r\n        <p>Held family emails excluded: {dialog.heldCount}</p>\r\n        <p>{dialog.mode === 'retry' ? 'Only definite failures are retried. Unresolved deliveries are excluded.' : 'Emails you have not opened are included. This sends the frozen reviewed version, not later edits.'}</p>\r\n      {/if}\r\n      <div class=\"footer-actions\"><button on:click={closeDialog} disabled={busy}>Cancel</button><button class=\"primary\" disabled={busy || (dialog.mode === 'hold' && !holdReason.trim())} on:click={() => mutate(dialog.mode)}>{dialog.mode === 'hold' ? 'Save hold' : dialog.mode === 'rebuild' ? 'Confirm rebuild' : dialog.mode === 'retry' ? 'Confirm retry' : 'Confirm send'}</button></div>\r\n    </section>\r\n  </div>\r\n{/if}\r\n\r\n<style>\r\n  .recipient-search { margin: 20px 0; }\r\n  .recipient-search label { display: block; margin-bottom: 8px; font-weight: bold; }\r\n  .search-controls { display: flex; gap: 8px; }\r\n  .search-controls input { flex: 1; min-width: 0; padding: 10px; border: 1px solid #bbb; border-radius: 6px; }\r\n  .search-results { list-style: none; padding: 0; max-height: 300px; overflow-y: auto; }\r\n  .search-results button { width: 100%; text-align: left; margin-bottom: 6px; overflow-wrap: anywhere; }\r\n  .search-results span { display: block; font-size: 13px; margin-top: 3px; }\r\n  .review { max-width: 1100px; margin: 0 auto; padding: 24px; color: #292929; font-family: Arial, sans-serif; }\r\n  h1 { font-size: 28px; margin: 0 0 12px; } p { line-height: 1.5; }\r\n  header, .month-controls, .preview-toolbar, .email-actions, .footer-actions, .counts { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }\r\n  header { justify-content: space-between; margin-bottom: 24px; }\r\n  label { display: flex; flex-direction: column; gap: 8px; }\r\n  button, input, textarea { font: inherit; padding: 12px 16px; border: 1px solid #bfb7aa; border-radius: 8px; background: #fff; color: #292929; }\r\n  button { cursor: pointer; min-height: 44px; } button:hover:not(:disabled) { background: #fff4e4; } button:disabled { opacity: .5; cursor: not-allowed; }\r\n  button:focus-visible, input:focus-visible, textarea:focus-visible { outline: 3px solid #a85800; outline-offset: 3px; }\r\n  .primary { background: #fab45a; border-color: #e99c34; font-weight: bold; }\r\n  .batch-info, .email-card, .sending-details { background: #fff; border: 1px solid #eadac4; border-top: 4px solid #fab45a; border-radius: 12px; padding: 20px; margin-bottom: 20px; }\r\n  .batch-info { background: #fff8ee; } .counts span { background: #fff; padding: 8px 12px; border-radius: 8px; }\r\n  .preview-controls { position: sticky; top: 12px; z-index: 10; background: #fff8ee; border: 1px solid #eadac4; border-radius: 10px; padding: 12px; margin-bottom: 16px; box-shadow: 0 4px 12px #29292912; }\r\n  .preview-toolbar { justify-content: space-between; } dl { display: grid; grid-template-columns: 80px minmax(0, 1fr); gap: 10px; } dt { font-weight: bold; } dd { margin: 0; overflow-wrap: anywhere; }\r\n  iframe { display: block; box-sizing: border-box; width: 100%; height: 720px; border: 1px solid #eadac4; background: #fff; border-radius: 8px; }\r\n  pre { white-space: pre-wrap; overflow-wrap: anywhere; padding: 16px; background: #fff8ee; }\r\n  .error { background: #ffe9e9; color: #7f1616; padding: 12px; border-radius: 8px; margin: 12px 0; }\r\n  .hold-reason { background: #fff0d8; padding: 12px; border-left: 4px solid #a85800; }\r\n  footer { padding: 16px 0 32px; } .modal-backdrop { position: fixed; inset: 0; background: #0008; display: flex; justify-content: center; align-items: center; z-index: 10000; padding: 20px; }\r\n  .modal { background: white; border-top: 5px solid #fab45a; border-radius: 12px; padding: 24px; max-width: 560px; max-height: 90vh; overflow-y: auto; width: 100%; } textarea { min-height: 100px; }\r\n  @media (max-width: 600px) { .review { padding: 12px; } .email-card, .sending-details, .batch-info { padding: 12px; } .preview-controls { top: 8px; padding: 8px; } h1 { font-size: 24px; } .preview-toolbar { gap: 6px; } .preview-toolbar button { padding: 10px; } .modal { padding: 16px; } }\r\n</style>\r\n","<script>\r\n  import NavbarReusable from './NavbarReusable.svelte';\r\n  import AdminMonthlyFeedbackReview from './AdminMonthlyFeedbackReview.svelte';\r\n</script>\r\n\r\n<div class=\"app-container\">\r\n  <NavbarReusable label=\"Monthly feedback review\" backLink=\"/admin/all\" />\r\n  <AdminMonthlyFeedbackReview />\r\n</div>\r\n","<script>\r\n\texport let activePage = 'pradzia';\r\n\texport let onPageChange = (pageId) => {};\r\n\r\n\t// Navigation items data structure\r\n\tconst navItems = [\r\n\t\t{ id: 'pradzia', label: 'Pradžia', icon: 'home' },\r\n\t\t{ id: 'biblioteka', label: 'Biblioteka', icon: 'book-open' },\r\n\t\t{ id: 'egzaminai', label: 'Egzaminai', icon: 'file-text' },\r\n\t\t{ id: 'uzduociu-bankas', label: 'Užduočių Bankas', icon: 'database' },\r\n\t\t{ id: 'ikelti', label: 'Įkelti užduotį', icon: 'upload' },\r\n\t];\r\n\r\n\t// Icon components as SVG strings\r\n\tconst icons = {\r\n\t\thome: `<path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"></path><polyline points=\"9 22 9 12 15 12 15 22\"></polyline>`,\r\n\t\t'book-open': `<path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"></path><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"></path>`,\r\n\t\t'file-text': `<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line><polyline points=\"10 9 9 9 8 9\"></polyline>`,\r\n\t\tdatabase: `<ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"></ellipse><path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\"></path><path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\"></path>`,\r\n\t\tupload: `<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"17 8 12 3 7 8\"></polyline><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"></line>`,\r\n\t};\r\n\r\n\tfunction handleClick(pageId) {\r\n\t\tonPageChange(pageId);\r\n\t}\r\n</script>\r\n\r\n<aside class=\"sidebar\">\r\n\t<div class=\"sidebar-header\">\r\n\t\t<h1>Užduočių Bankas</h1>\r\n\t</div>\r\n\r\n\t<nav class=\"sidebar-nav\">\r\n\t\t<ul class=\"nav-list\">\r\n\t\t\t{#each navItems as item}\r\n\t\t\t\t<li>\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tclass=\"nav-button\"\r\n\t\t\t\t\t\tclass:active={activePage === item.id}\r\n\t\t\t\t\t\ton:click={() => handleClick(item.id)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\tclass=\"nav-icon\"\r\n\t\t\t\t\t\t\twidth=\"20\"\r\n\t\t\t\t\t\t\theight=\"20\"\r\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\t\t\t\t\tfill=\"none\"\r\n\t\t\t\t\t\t\tstroke=\"currentColor\"\r\n\t\t\t\t\t\t\tstroke-width=\"2\"\r\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\r\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{@html icons[item.icon]}\r\n\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t<span>{item.label}</span>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</li>\r\n\t\t\t{/each}\r\n\t\t</ul>\r\n\t</nav>\r\n</aside>\r\n\r\n<style>\r\n\t.sidebar {\r\n\t\twidth: 256px;\r\n\t\tbackground-color: white;\r\n\t\tborder-right: 1px solid #e5e7eb;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t}\r\n\r\n\t.sidebar-header {\r\n\t\tpadding: 24px;\r\n\t\tborder-bottom: 1px solid #e5e7eb;\r\n\t}\r\n\r\n\t.sidebar-header h1 {\r\n\t\tmargin: 0;\r\n\t\tcolor: #111827;\r\n\t\tfont-size: 18px;\r\n\t\tfont-weight: 600;\r\n\t}\r\n\r\n\t.sidebar-nav {\r\n\t\tflex: 1;\r\n\t\tpadding: 16px;\r\n\t}\r\n\r\n\t.nav-list {\r\n\t\tlist-style: none;\r\n\t\tmargin: 0;\r\n\t\tpadding: 0;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tgap: 8px;\r\n\t}\r\n\r\n\t.nav-button {\r\n\t\twidth: 100%;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tgap: 12px;\r\n\t\tpadding: 12px 16px;\r\n\t\tborder-radius: 8px;\r\n\t\tborder: none;\r\n\t\tbackground: transparent;\r\n\t\tcolor: #374151;\r\n\t\tcursor: pointer;\r\n\t\ttransition: all 0.2s ease;\r\n\t\tfont-size: 14px;\r\n\t\tfont-family: inherit;\r\n\t}\r\n\r\n\t.nav-button:hover:not(.active) {\r\n\t\tbackground-color: #f9fafb;\r\n\t}\r\n\r\n\t.nav-button.active {\r\n\t\tbackground-color: #fff7ed;\r\n\t\tcolor: #fab45a;\r\n\t}\r\n\r\n\t.nav-icon {\r\n\t\tflex-shrink: 0;\r\n\t}\r\n\r\n\t/* Responsive Design */\r\n\t@media (max-width: 768px) {\r\n\t\t.sidebar {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-right: none;\r\n\t\t\tborder-bottom: 1px solid #e5e7eb;\r\n\t\t}\r\n\r\n\t\t.sidebar-nav {\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t.nav-list {\r\n\t\t\tflex-direction: row;\r\n\t\t\toverflow-x: auto;\r\n\t\t\tgap: 4px;\r\n\t\t}\r\n\r\n\t\t.nav-button {\r\n\t\t\twhite-space: nowrap;\r\n\t\t\tpadding: 8px 12px;\r\n\t\t}\r\n\t}\r\n</style>\r\n","<script>\r\n\timport ExerciseBankSidebar from './ExerciseBankSidebar.svelte';\r\n\timport { push } from 'svelte-spa-router';\r\n\r\n\t// Statistics data structure\r\n\tconst stats = [\r\n\t\t{ label: 'Užduotys', value: '1,234', icon: 'book-open' },\r\n\t\t{ label: 'Aktyvūs mokiniai', value: '856', icon: 'users' },\r\n\t\t{ label: 'Išspręsta šią savaitę', value: '2,451', icon: 'trending-up' },\r\n\t];\r\n\r\n\tlet activePage = 'pradzia';\r\n\tlet searchQuery = '';\r\n\r\n\tfunction handlePageChange(pageId) {\r\n\t\tif (pageId === 'ikelti') {\r\n\t\t\t// Navigate to upload exercise page\r\n\t\t\tpush('/exercise-bank/upload');\r\n\t\t} else if (pageId === 'uzduociu-bankas') {\r\n\t\t\t// Navigate to exercise bank page\r\n\t\t\tpush('/exercise-bank/bank');\r\n\t\t} else {\r\n\t\t\tactivePage = pageId;\r\n\t\t}\r\n\t}\r\n\r\n\t// Icon components as SVG strings (for stats and search)\r\n\tconst icons = {\r\n\t\t'book-open': `<path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"></path><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"></path>`,\r\n\t\tsearch: `<circle cx=\"11\" cy=\"11\" r=\"8\"></circle><path d=\"m21 21-4.35-4.35\"></path>`,\r\n\t\tusers: `<path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"9\" cy=\"7\" r=\"4\"></circle><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"></path><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"></path>`,\r\n\t\t'trending-up': `<polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"></polyline><polyline points=\"17 6 23 6 23 12\"></polyline>`,\r\n\t};\r\n</script>\r\n\r\n<div class=\"app-container\">\r\n\t<!-- Sidebar -->\r\n\t<ExerciseBankSidebar {activePage} onPageChange={handlePageChange} />\r\n\r\n\t<!-- Main Content -->\r\n\t<main class=\"main-content\">\r\n\t\t{#if activePage === 'pradzia'}\r\n\t\t\t<div class=\"home-container\">\r\n\t\t\t\t<!-- Hero Section -->\r\n\t\t\t\t<div class=\"hero-section\">\r\n\t\t\t\t\t<h1 class=\"hero-title\">Sveiki atvykę į Užduočių Banką</h1>\r\n\t\t\t\t\t<p class=\"hero-description\">\r\n\t\t\t\t\t\tRaskite ir spręskite užduotis iš įvairių dalykų. Pasiruoškite egzaminams\r\n\t\t\t\t\t\tir tobulėkite savo tempiu.\r\n\t\t\t\t\t</p>\r\n\r\n\t\t\t\t\t<!-- Search Bar -->\r\n\t\t\t\t\t<div class=\"search-container\">\r\n\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\tclass=\"search-icon\"\r\n\t\t\t\t\t\t\twidth=\"20\"\r\n\t\t\t\t\t\t\theight=\"20\"\r\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\t\t\t\t\tfill=\"none\"\r\n\t\t\t\t\t\t\tstroke=\"currentColor\"\r\n\t\t\t\t\t\t\tstroke-width=\"2\"\r\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\r\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{@html icons.search}\r\n\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\tclass=\"search-input\"\r\n\t\t\t\t\t\t\tplaceholder=\"Ieškokite užduočių pagal temą ar dalyką...\"\r\n\t\t\t\t\t\t\tbind:value={searchQuery}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- Stats Cards -->\r\n\t\t\t\t<div class=\"stats-grid\">\r\n\t\t\t\t\t{#each stats as stat}\r\n\t\t\t\t\t\t<div class=\"stat-card\">\r\n\t\t\t\t\t\t\t<div class=\"stat-content\">\r\n\t\t\t\t\t\t\t\t<div class=\"stat-icon-wrapper\">\r\n\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\tclass=\"stat-icon\"\r\n\t\t\t\t\t\t\t\t\t\twidth=\"24\"\r\n\t\t\t\t\t\t\t\t\t\theight=\"24\"\r\n\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\r\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\r\n\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{@html icons[stat.icon]}\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"stat-info\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"stat-label\">{stat.label}</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"stat-value\">{stat.value}</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t{/each}\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- Quick Actions -->\r\n\t\t\t\t<div class=\"quick-actions\">\r\n\t\t\t\t\t<h2 class=\"quick-actions-title\">Pradėkite dabar</h2>\r\n\t\t\t\t\t<div class=\"quick-actions-grid\">\r\n\t\t\t\t\t\t<button class=\"action-button\">\r\n\t\t\t\t\t\t\t<div class=\"action-content\">\r\n\t\t\t\t\t\t\t\t<div class=\"action-title\">Naršyti užduotis</div>\r\n\t\t\t\t\t\t\t\t<div class=\"action-description\">\r\n\t\t\t\t\t\t\t\t\tRaskite užduotis pagal dalyką ir temą\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button class=\"action-button\">\r\n\t\t\t\t\t\t\t<div class=\"action-content\">\r\n\t\t\t\t\t\t\t\t<div class=\"action-title\">Bandomieji egzaminai</div>\r\n\t\t\t\t\t\t\t\t<div class=\"action-description\">\r\n\t\t\t\t\t\t\t\t\tPasitikrinkite žinias su bandomaisiais testais\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t</main>\r\n</div>\r\n\r\n<style>\r\n\t.app-container {\r\n\t\tdisplay: flex;\r\n\t\theight: 100vh;\r\n\t\tbackground-color: #f9fafb;\r\n\t\tposition: fixed;\r\n\t\ttop: 0;\r\n\t\tleft: 0;\r\n\t\tright: 0;\r\n\t\tbottom: 0;\r\n\t\twidth: 100vw;\r\n\t\tz-index: 1000;\r\n\t}\r\n\r\n\t/* Main Content Styles */\r\n\t.main-content {\r\n\t\tflex: 1;\r\n\t\toverflow: auto;\r\n\t}\r\n\r\n\t.home-container {\r\n\t\tmax-width: 1280px;\r\n\t\tmargin: 0 auto;\r\n\t\tpadding: 48px 32px;\r\n\t}\r\n\r\n\t/* Hero Section */\r\n\t.hero-section {\r\n\t\ttext-align: center;\r\n\t\tmargin-bottom: 64px;\r\n\t}\r\n\r\n\t.hero-title {\r\n\t\tcolor: #111827;\r\n\t\tfont-size: 32px;\r\n\t\tfont-weight: 700;\r\n\t\tmargin: 0 0 16px 0;\r\n\t}\r\n\r\n\t.hero-description {\r\n\t\tcolor: #4b5563;\r\n\t\tmax-width: 672px;\r\n\t\tmargin: 0 auto 32px;\r\n\t\tfont-size: 16px;\r\n\t\tline-height: 1.5;\r\n\t}\r\n\r\n\t.search-container {\r\n\t\tmax-width: 576px;\r\n\t\tmargin: 0 auto;\r\n\t\tposition: relative;\r\n\t}\r\n\r\n\t.search-icon {\r\n\t\tposition: absolute;\r\n\t\tleft: 16px;\r\n\t\ttop: 50%;\r\n\t\ttransform: translateY(-50%);\r\n\t\tcolor: #9ca3af;\r\n\t\tpointer-events: none;\r\n\t}\r\n\r\n\t.search-input {\r\n\t\twidth: 100%;\r\n\t\tpadding: 12px 16px 12px 48px;\r\n\t\theight: 48px;\r\n\t\tborder: 1px solid #d1d5db;\r\n\t\tborder-radius: 8px;\r\n\t\tfont-size: 14px;\r\n\t\tfont-family: inherit;\r\n\t\tbackground-color: white;\r\n\t\tbox-sizing: border-box;\r\n\t}\r\n\r\n\t.search-input:focus {\r\n\t\toutline: none;\r\n\t\tborder-color: #fab45a;\r\n\t\tbox-shadow: 0 0 0 3px rgba(250, 180, 90, 0.1);\r\n\t}\r\n\r\n\t/* Stats Grid */\r\n\t.stats-grid {\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\r\n\t\tgap: 24px;\r\n\t\tmargin-bottom: 64px;\r\n\t}\r\n\r\n\t.stat-card {\r\n\t\tbackground-color: white;\r\n\t\tborder-radius: 8px;\r\n\t\tpadding: 24px;\r\n\t\tborder: 1px solid #e5e7eb;\r\n\t}\r\n\r\n\t.stat-content {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tgap: 16px;\r\n\t}\r\n\r\n\t.stat-icon-wrapper {\r\n\t\twidth: 48px;\r\n\t\theight: 48px;\r\n\t\tborder-radius: 8px;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t\tbackground-color: #fff7ed;\r\n\t}\r\n\r\n\t.stat-icon {\r\n\t\tcolor: #fab45a;\r\n\t}\r\n\r\n\t.stat-info {\r\n\t\tflex: 1;\r\n\t}\r\n\r\n\t.stat-label {\r\n\t\tcolor: #4b5563;\r\n\t\tfont-size: 14px;\r\n\t\tmargin-bottom: 4px;\r\n\t}\r\n\r\n\t.stat-value {\r\n\t\tcolor: #111827;\r\n\t\tfont-size: 20px;\r\n\t\tfont-weight: 600;\r\n\t}\r\n\r\n\t/* Quick Actions */\r\n\t.quick-actions {\r\n\t\tbackground-color: white;\r\n\t\tborder-radius: 8px;\r\n\t\tpadding: 32px;\r\n\t\tborder: 1px solid #e5e7eb;\r\n\t}\r\n\r\n\t.quick-actions-title {\r\n\t\tcolor: #111827;\r\n\t\tfont-size: 20px;\r\n\t\tfont-weight: 600;\r\n\t\tmargin: 0 0 24px 0;\r\n\t}\r\n\r\n\t.quick-actions-grid {\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\r\n\t\tgap: 16px;\r\n\t}\r\n\r\n\t.action-button {\r\n\t\theight: auto;\r\n\t\tpadding: 16px;\r\n\t\ttext-align: left;\r\n\t\tborder: 1px solid #e5e7eb;\r\n\t\tborder-radius: 8px;\r\n\t\tbackground-color: white;\r\n\t\tcursor: pointer;\r\n\t\ttransition: all 0.2s ease;\r\n\t\tfont-family: inherit;\r\n\t}\r\n\r\n\t.action-button:hover {\r\n\t\tborder-color: #fab45a;\r\n\t\tbackground-color: #fff7ed;\r\n\t}\r\n\r\n\t.action-content {\r\n\t\ttext-align: left;\r\n\t}\r\n\r\n\t.action-title {\r\n\t\tcolor: #111827;\r\n\t\tfont-size: 16px;\r\n\t\tfont-weight: 500;\r\n\t\tmargin-bottom: 4px;\r\n\t}\r\n\r\n\t.action-description {\r\n\t\tcolor: #4b5563;\r\n\t\tfont-size: 14px;\r\n\t}\r\n\r\n\t/* Responsive Design */\r\n\t@media (max-width: 768px) {\r\n\t\t.app-container {\r\n\t\t\tflex-direction: column;\r\n\t\t}\r\n\r\n\t\t.home-container {\r\n\t\t\tpadding: 24px 16px;\r\n\t\t}\r\n\r\n\t\t.hero-title {\r\n\t\t\tfont-size: 24px;\r\n\t\t}\r\n\r\n\t\t.stats-grid {\r\n\t\t\tgrid-template-columns: 1fr;\r\n\t\t}\r\n\r\n\t\t.quick-actions-grid {\r\n\t\t\tgrid-template-columns: 1fr;\r\n\t\t}\r\n\t}\r\n</style>\r\n","/** MathLive 0.108.2 */\nvar Nh=Object.defineProperty,Fh=Object.defineProperties;var $h=Object.getOwnPropertyDescriptors;var Ko=Object.getOwnPropertySymbols;var iu=Object.prototype.hasOwnProperty,nu=Object.prototype.propertyIsEnumerable;var ru=(t,e,r)=>e in t?Nh(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,p=(t,e)=>{for(var r in e||(e={}))iu.call(e,r)&&ru(t,r,e[r]);if(Ko)for(var r of Ko(e))nu.call(e,r)&&ru(t,r,e[r]);return t},g=(t,e)=>Fh(t,$h(e));var Gs=t=>typeof t==\"symbol\"?t:t+\"\",Ai=(t,e)=>{var r={};for(var i in t)iu.call(t,i)&&e.indexOf(i)<0&&(r[i]=t[i]);if(t!=null&&Ko)for(var i of Ko(t))e.indexOf(i)<0&&nu.call(t,i)&&(r[i]=t[i]);return r};function ke(){return\"window\"in globalThis&&\"document\"in globalThis}function Po(){return\"matchMedia\"in window?window.matchMedia(\"(pointer: coarse)\").matches:\"ontouchstart\"in window||navigator.maxTouchPoints>0}function ou(){try{return window.self!==window.top}catch(t){return!0}}function Ro(){return typeof navigator.vibrate==\"function\"}function At(){var e,r;if(!ke())return\"other\";let t=(r=(e=navigator.userAgentData)==null?void 0:e.platform)!=null?r:navigator.platform;return/^mac/i.test(t)?navigator.maxTouchPoints===5?\"ios\":\"macos\":/^win/i.test(t)?\"windows\":/android/i.test(navigator.userAgent)?\"android\":/iphone|ipod|ipad/i.test(navigator.userAgent)?\"ios\":/\\bcros\\b/i.test(navigator.userAgent)?\"chromeos\":\"other\"}function au(){if(!ke())return!0;if(/firefox/i.test(navigator.userAgent)){let t=navigator.userAgent.match(/firefox\\/(\\d+)/i);return t?parseInt(t[1])>=78:!1}if(/trident/i.test(navigator.userAgent))return!1;if(/edge/i.test(navigator.userAgent)){let t=navigator.userAgent.match(/edg\\/(\\d+)/i);return t?parseInt(t[1])>=79:!1}return!0}function Xs(){return HTMLElement.prototype.hasOwnProperty(\"popover\")}var su={id:\"dvorak\",locale:\"en\",displayName:\"Dvorak\",virtualLayout:\"dvorak\",platform:\"\",score:0,mapping:{KeyA:[\"a\",\"A\",\"\\xE5\",\"\\xC5\"],KeyB:[\"x\",\"X\",\"\\u2248\",\"\\u02DB\"],KeyC:[\"j\",\"J\",\"\\u2206\",\"\\xD4\"],KeyD:[\"e\",\"E\",\"\\xB4\",\"\\xB4\"],KeyE:[\".\",\">\",\"\\u2265\",\"\\u02D8\"],KeyF:[\"u\",\"U\",\"\\xA8\",\"\\xA8\"],KeyG:[\"i\",\"I\",\"\\u02C6\",\"\\u02C6\"],KeyH:[\"d\",\"D\",\"\\u2202\",\"\\xCE\"],KeyI:[\"c\",\"C\",\"\\xE7\",\"\\xC7\"],KeyJ:[\"h\",\"H\",\"\\u02D9\",\"\\xD3\"],KeyK:[\"t\",\"T\",\"\\u2020\",\"\\u02C7\"],KeyL:[\"n\",\"N\",\"\\u02DC\",\"\\u02DC\"],KeyM:[\"m\",\"M\",\"\\xB5\",\"\\xC2\"],KeyN:[\"b\",\"B\",\"\\u222B\",\"\\u0131\"],KeyO:[\"r\",\"R\",\"\\xAE\",\"\\u2030\"],KeyP:[\"l\",\"L\",\"\\xAC\",\"\\xD2\"],KeyQ:[\"'\",'\"',\"\\xE6\",\"\\xC6\"],KeyR:[\"p\",\"P\",\"\\u03C0\",\"\\u220F\"],KeyS:[\"o\",\"O\",\"\\xF8\",\"\\xD8\"],KeyT:[\"y\",\"Y\",\"\\xA5\",\"\\xC1\"],KeyU:[\"g\",\"G\",\"\\xA9\",\"\\u02DD\"],KeyV:[\"k\",\"K\",\"\\u02DA\",\"\\uF8FF\"],KeyW:[\",\",\"<\",\"\\u2264\",\"\\xAF\"],KeyX:[\"q\",\"Q\",\"\\u0153\",\"\\u0152\"],KeyY:[\"f\",\"F\",\"\\u0192\",\"\\xCF\"],KeyZ:[\";\",\":\",\"\\u2026\",\"\\xDA\"],Digit1:[\"1\",\"!\",\"\\xA1\",\"\\u2044\"],Digit2:[\"2\",\"@\",\"\\u2122\",\"\\u20AC\"],Digit3:[\"3\",\"#\",\"\\xA3\",\"\\u2039\"],Digit4:[\"4\",\"$\",\"\\xA2\",\"\\u203A\"],Digit5:[\"5\",\"%\",\"\\u221E\",\"\\uFB01\"],Digit6:[\"6\",\"^\",\"\\xA7\",\"\\uFB02\"],Digit7:[\"7\",\"&\",\"\\xB6\",\"\\u2021\"],Digit8:[\"8\",\"*\",\"\\u2022\",\"\\xB0\"],Digit9:[\"9\",\"(\",\"\\xAA\",\"\\xB7\"],Digit0:[\"0\",\")\",\"\\xBA\",\"\\u201A\"],Space:[\" \",\" \",\" \",\" \"],Minus:[\"[\",\"{\",\"\\u201C\",\"\\u201D\"],Equal:[\"]\",\"}\",\"\\u2018\",\"\\u2019\"],BracketLeft:[\"/\",\"?\",\"\\xF7\",\"\\xBF\"],BracketRight:[\"=\",\"+\",\"\\u2260\",\"\\xB1\"],Backslash:[\"\\\\\",\"|\",\"\\xAB\",\"\\xBB\"],Semicolon:[\"s\",\"S\",\"\\xDF\",\"\\xCD\"],Quote:[\"-\",\"_\",\"\\u2013\",\"\\u2014\"],Backquote:[\"`\",\"~\",\"`\",\"`\"],Comma:[\"w\",\"W\",\"\\u2211\",\"\\u201E\"],Period:[\"v\",\"V\",\"\\u221A\",\"\\u25CA\"],Slash:[\"z\",\"Z\",\"\\u03A9\",\"\\xB8\"],NumpadDivide:[\"/\",\"/\",\"/\",\"/\"],NumpadMultiply:[\"*\",\"*\",\"*\",\"*\"],NumpadSubtract:[\"-\",\"-\",\"-\",\"-\"],NumpadAdd:[\"+\",\"+\",\"+\",\"+\"],Numpad1:[\"1\",\"1\",\"1\",\"1\"],Numpad2:[\"2\",\"2\",\"2\",\"2\"],Numpad3:[\"3\",\"3\",\"3\",\"3\"],Numpad4:[\"4\",\"4\",\"4\",\"4\"],Numpad5:[\"5\",\"5\",\"5\",\"5\"],Numpad6:[\"6\",\"6\",\"6\",\"6\"],Numpad7:[\"7\",\"7\",\"7\",\"7\"],Numpad8:[\"8\",\"8\",\"8\",\"8\"],Numpad9:[\"9\",\"9\",\"9\",\"9\"],Numpad0:[\"0\",\"0\",\"0\",\"0\"],NumpadDecimal:[\".\",\".\",\".\",\".\"],IntlBackslash:[\"\\xA7\",\"\\xB1\",\"\\xA7\",\"\\xB1\"],NumpadEqual:[\"=\",\"=\",\"=\",\"=\"],AudioVolumeUp:[\"\",\"=\",\"\",\"=\"]}};var Io={id:\"apple.en-intl\",displayName:\"English (international)\",virtualLayout:\"qwerty\",platform:\"apple\",locale:\"en\",score:0,mapping:{KeyA:[\"a\",\"A\",\"\\xE5\",\"\\xC5\"],KeyB:[\"b\",\"B\",\"\\u222B\",\"\\u0131\"],KeyC:[\"c\",\"C\",\"\\xE7\",\"\\xC7\"],KeyD:[\"d\",\"D\",\"\\u2202\",\"\\xCE\"],KeyE:[\"e\",\"E\",\"\\xB4\",\"\\xB4\"],KeyF:[\"f\",\"F\",\"\\u0192\",\"\\xCF\"],KeyG:[\"g\",\"G\",\"\\xA9\",\"\\u02DD\"],KeyH:[\"h\",\"H\",\"\\u02D9\",\"\\xD3\"],KeyI:[\"i\",\"I\",\"\\u02C6\",\"\\u02C6\"],KeyJ:[\"j\",\"J\",\"\\u2206\",\"\\xD4\"],KeyK:[\"k\",\"K\",\"\\u02DA\",\"\\uF8FF\"],KeyL:[\"l\",\"L\",\"\\xAC\",\"\\xD2\"],KeyM:[\"m\",\"M\",\"\\xB5\",\"\\xC2\"],KeyN:[\"n\",\"N\",\"\\u02DC\",\"\\u02DC\"],KeyO:[\"o\",\"O\",\"\\xF8\",\"\\xD8\"],KeyP:[\"p\",\"P\",\"\\u03C0\",\"\\u220F\"],KeyQ:[\"q\",\"Q\",\"\\u0153\",\"\\u0152\"],KeyR:[\"r\",\"R\",\"\\xAE\",\"\\u2030\"],KeyS:[\"s\",\"S\",\"\\xDF\",\"\\xCD\"],KeyT:[\"t\",\"T\",\"\\u2020\",\"\\u02C7\"],KeyU:[\"u\",\"U\",\"\\xA8\",\"\\xA8\"],KeyV:[\"v\",\"V\",\"\\u221A\",\"\\u25CA\"],KeyW:[\"w\",\"W\",\"\\u2211\",\"\\u201E\"],KeyX:[\"x\",\"X\",\"\\u2248\",\"\\u02DB\"],KeyY:[\"y\",\"Y\",\"\\xA5\",\"\\xC1\"],KeyZ:[\"z\",\"Z\",\"\\u03A9\",\"\\xB8\"],Digit1:[\"1\",\"!\",\"\\xA1\",\"\\u2044\"],Digit2:[\"2\",\"@\",\"\\u2122\",\"\\u20AC\"],Digit3:[\"3\",\"#\",\"\\xA3\",\"\\u2039\"],Digit4:[\"4\",\"$\",\"\\xA2\",\"\\u203A\"],Digit5:[\"5\",\"%\",\"\\u221E\",\"\\uFB01\"],Digit6:[\"6\",\"^\",\"\\xA7\",\"\\uFB02\"],Digit7:[\"7\",\"&\",\"\\xB6\",\"\\u2021\"],Digit8:[\"8\",\"*\",\"\\u2022\",\"\\xB0\"],Digit9:[\"9\",\"(\",\"\\xAA\",\"\\xB7\"],Digit0:[\"0\",\")\",\"\\xBA\",\"\\u201A\"],Space:[\" \",\" \",\" \",\" \"],Minus:[\"-\",\"_\",\"\\u2013\",\"\\u2014\"],Equal:[\"=\",\"+\",\"\\u2260\",\"\\xB1\"],BracketLeft:[\"[\",\"{\",\"\\u201C\",\"\\u201D\"],BracketRight:[\"]\",\"}\",\"\\u2018\",\"\\u2019\"],Backslash:[\"\\\\\",\"|\",\"\\xAB\",\"\\xBB\"],Semicolon:[\";\",\":\",\"\\u2026\",\"\\xDA\"],Quote:[\"'\",'\"',\"\\xE6\",\"\\xC6\"],Backquote:[\"`\",\"\\u02DC\",\"`\",\"`\"],Comma:[\",\",\"<\",\"\\u2264\",\"\\xAF\"],Period:[\".\",\">\",\"\\u2265\",\"\\u02D8\"],Slash:[\"/\",\"?\",\"\\xF7\",\"\\xBF\"],NumpadDivide:[\"/\",\"/\",\"/\",\"/\"],NumpadMultiply:[\"*\",\"*\",\"*\",\"*\"],NumpadSubtract:[\"-\",\"-\",\"-\",\"-\"],NumpadAdd:[\"+\",\"+\",\"+\",\"+\"],Numpad1:[\"1\",\"1\",\"1\",\"1\"],Numpad2:[\"2\",\"2\",\"2\",\"2\"],Numpad3:[\"3\",\"3\",\"3\",\"3\"],Numpad4:[\"4\",\"4\",\"4\",\"4\"],Numpad5:[\"5\",\"5\",\"5\",\"5\"],Numpad6:[\"6\",\"6\",\"6\",\"6\"],Numpad7:[\"7\",\"7\",\"7\",\"7\"],Numpad8:[\"8\",\"8\",\"8\",\"8\"],Numpad9:[\"9\",\"9\",\"9\",\"9\"],Numpad0:[\"0\",\"0\",\"0\",\"0\"],NumpadDecimal:[\".\",\".\",\".\",\".\"],IntlBackslash:[\"\\xA7\",\"\\xB1\",\"\\xA7\",\"\\xB1\"],NumpadEqual:[\"=\",\"=\",\"=\",\"=\"],AudioVolumeUp:[\"\",\"=\",\"\",\"=\"]}},Zs={id:\"windows.en-intl\",displayName:\"English (international)\",platform:\"windows\",virtualLayout:\"qwerty\",locale:\"en\",score:0,mapping:{KeyA:[\"a\",\"A\",\"\\xE1\",\"\\xC1\"],KeyB:[\"b\",\"B\",\"\",\"\"],KeyC:[\"c\",\"C\",\"\\xA9\",\"\\xA2\"],KeyD:[\"d\",\"D\",\"\\xF0\",\"\\xD0\"],KeyE:[\"e\",\"E\",\"\\xE9\",\"\\xC9\"],KeyF:[\"f\",\"F\",\"\",\"\"],KeyG:[\"g\",\"G\",\"\",\"\"],KeyH:[\"h\",\"H\",\"\",\"\"],KeyI:[\"i\",\"I\",\"\\xED\",\"\\xCD\"],KeyJ:[\"j\",\"J\",\"\",\"\"],KeyK:[\"k\",\"K\",\"\",\"\"],KeyL:[\"l\",\"L\",\"\\xF8\",\"\\xD8\"],KeyM:[\"m\",\"M\",\"\\xB5\",\"\"],KeyN:[\"n\",\"N\",\"\\xF1\",\"\\xD1\"],KeyO:[\"o\",\"O\",\"\\xF3\",\"\\xD3\"],KeyP:[\"p\",\"P\",\"\\xF6\",\"\\xD6\"],KeyQ:[\"q\",\"Q\",\"\\xE4\",\"\\xC4\"],KeyR:[\"r\",\"R\",\"\\xAE\",\"\"],KeyS:[\"s\",\"S\",\"\\xDF\",\"\\xA7\"],KeyT:[\"t\",\"T\",\"\\xFE\",\"\\xDE\"],KeyU:[\"u\",\"U\",\"\\xFA\",\"\\xDA\"],KeyV:[\"v\",\"V\",\"\",\"\"],KeyW:[\"w\",\"W\",\"\\xE5\",\"\\xC5\"],KeyX:[\"x\",\"X\",\"\",\"\"],KeyY:[\"y\",\"Y\",\"\\xFC\",\"\\xDC\"],KeyZ:[\"z\",\"Z\",\"\\xE6\",\"\\xC6\"],Digit1:[\"1\",\"!\",\"\\xA1\",\"\\xB9\"],Digit2:[\"2\",\"@\",\"\\xB2\",\"\"],Digit3:[\"3\",\"#\",\"\\xB3\",\"\"],Digit4:[\"4\",\"$\",\"\\xA4\",\"\\xA3\"],Digit5:[\"5\",\"%\",\"\\u20AC\",\"\"],Digit6:[\"6\",\"^\",\"\\xBC\",\"\"],Digit7:[\"7\",\"&\",\"\\xBD\",\"\"],Digit8:[\"8\",\"*\",\"\\xBE\",\"\"],Digit9:[\"9\",\"(\",\"\\u2018\",\"\"],Digit0:[\"0\",\")\",\"\\u2019\",\"\"],Space:[\" \",\" \",\"\",\"\"],Minus:[\"-\",\"_\",\"\\xA5\",\"\"],Equal:[\"=\",\"+\",\"\\xD7\",\"\\xF7\"],BracketLeft:[\"[\",\"{\",\"\\xAB\",\"\"],BracketRight:[\"]\",\"}\",\"\\xBB\",\"\"],Backslash:[\"\\\\\",\"|\",\"\\xAC\",\"\\xA6\"],Semicolon:[\";\",\":\",\"\\xB6\",\"\\xB0\"],Quote:[\"'\",'\"',\"\\xB4\",\"\\xA8\"],Backquote:[\"`\",\"~\",\"\",\"\"],Comma:[\",\",\"<\",\"\\xE7\",\"\\xC7\"],Period:[\".\",\">\",\"\",\"\"],Slash:[\"/\",\"?\",\"\\xBF\",\"\"],NumpadDivide:[\"/\",\"/\",\"\",\"\"],NumpadMultiply:[\"*\",\"*\",\"\",\"\"],NumpadSubtract:[\"-\",\"-\",\"\",\"\"],NumpadAdd:[\"+\",\"+\",\"\",\"\"],IntlBackslash:[\"\\\\\",\"|\",\"\",\"\"]}},Ys={id:\"linux.en\",displayName:\"English\",platform:\"linux\",virtualLayout:\"qwerty\",locale:\"en\",score:0,mapping:{KeyA:[\"a\",\"A\",\"a\",\"A\"],KeyB:[\"b\",\"B\",\"b\",\"B\"],KeyC:[\"c\",\"C\",\"c\",\"C\"],KeyD:[\"d\",\"D\",\"d\",\"D\"],KeyE:[\"e\",\"E\",\"e\",\"E\"],KeyF:[\"f\",\"F\",\"f\",\"F\"],KeyG:[\"g\",\"G\",\"g\",\"G\"],KeyH:[\"h\",\"H\",\"h\",\"H\"],KeyI:[\"i\",\"I\",\"i\",\"I\"],KeyJ:[\"j\",\"J\",\"j\",\"J\"],KeyK:[\"k\",\"K\",\"k\",\"K\"],KeyL:[\"l\",\"L\",\"l\",\"L\"],KeyM:[\"m\",\"M\",\"m\",\"M\"],KeyN:[\"n\",\"N\",\"n\",\"N\"],KeyO:[\"o\",\"O\",\"o\",\"O\"],KeyP:[\"p\",\"P\",\"p\",\"P\"],KeyQ:[\"q\",\"Q\",\"q\",\"Q\"],KeyR:[\"r\",\"R\",\"r\",\"R\"],KeyS:[\"s\",\"S\",\"s\",\"S\"],KeyT:[\"t\",\"T\",\"t\",\"T\"],KeyU:[\"u\",\"U\",\"u\",\"U\"],KeyV:[\"v\",\"V\",\"v\",\"V\"],KeyW:[\"w\",\"W\",\"w\",\"W\"],KeyX:[\"x\",\"X\",\"x\",\"X\"],KeyY:[\"y\",\"Y\",\"y\",\"Y\"],KeyZ:[\"z\",\"Z\",\"z\",\"Z\"],Digit1:[\"1\",\"!\",\"1\",\"!\"],Digit2:[\"2\",\"@\",\"2\",\"@\"],Digit3:[\"3\",\"#\",\"3\",\"#\"],Digit4:[\"4\",\"$\",\"4\",\"$\"],Digit5:[\"5\",\"%\",\"5\",\"%\"],Digit6:[\"6\",\"^\",\"6\",\"^\"],Digit7:[\"7\",\"&\",\"7\",\"&\"],Digit8:[\"8\",\"*\",\"8\",\"*\"],Digit9:[\"9\",\"(\",\"9\",\"(\"],Digit0:[\"0\",\")\",\"0\",\")\"],Space:[\" \",\" \",\" \",\" \"],Minus:[\"-\",\"_\",\"-\",\"_\"],Equal:[\"=\",\"+\",\"=\",\"+\"],BracketLeft:[\"[\",\"{\",\"[\",\"{\"],BracketRight:[\"]\",\"}\",\"]\",\"}\"],Backslash:[\"\\\\\",\"|\",\"\\\\\",\"|\"],Semicolon:[\";\",\":\",\";\",\":\"],Quote:[\"'\",'\"',\"'\",'\"'],Backquote:[\"`\",\"~\",\"`\",\"~\"],Comma:[\",\",\"<\",\",\",\"<\"],Period:[\".\",\">\",\".\",\">\"],Slash:[\"/\",\"?\",\"/\",\"?\"],NumpadDivide:[\"/\",\"/\",\"/\",\"/\"],NumpadMultiply:[\"*\",\"*\",\"*\",\"*\"],NumpadSubtract:[\"-\",\"-\",\"-\",\"-\"],NumpadAdd:[\"+\",\"+\",\"+\",\"+\"],Numpad1:[\"1\",\"1\",\"1\",\"1\"],Numpad2:[\"2\",\"2\",\"2\",\"2\"],Numpad3:[\"3\",\"3\",\"3\",\"3\"],Numpad4:[\"4\",\"4\",\"4\",\"4\"],Numpad5:[\"5\",\"5\",\"5\",\"5\"],Numpad6:[\"6\",\"6\",\"6\",\"6\"],Numpad7:[\"7\",\"7\",\"7\",\"7\"],Numpad8:[\"8\",\"8\",\"8\",\"8\"],Numpad9:[\"9\",\"9\",\"9\",\"9\"],Numpad0:[\"0\",\"0\",\"0\",\"0\"],NumpadDecimal:[\"\",\".\",\"\",\".\"],IntlBackslash:[\"<\",\">\",\"|\",\"\\xA6\"],NumpadEqual:[\"=\",\"=\",\"=\",\"=\"],NumpadComma:[\".\",\".\",\".\",\".\"],NumpadParenLeft:[\"(\",\"(\",\"(\",\"(\"],NumpadParenRight:[\")\",\")\",\")\",\")\"]}};var lu={id:\"apple.french\",locale:\"fr\",displayName:\"French\",platform:\"apple\",virtualLayout:\"azerty\",score:0,mapping:{KeyA:[\"q\",\"Q\",\"\\u2021\",\"\\u03A9\"],KeyB:[\"b\",\"B\",\"\\xDF\",\"\\u222B\"],KeyC:[\"c\",\"C\",\"\\xA9\",\"\\xA2\"],KeyD:[\"d\",\"D\",\"\\u2202\",\"\\u2206\"],KeyE:[\"e\",\"E\",\"\\xEA\",\"\\xCA\"],KeyF:[\"f\",\"F\",\"\\u0192\",\"\\xB7\"],KeyG:[\"g\",\"G\",\"\\uFB01\",\"\\uFB02\"],KeyH:[\"h\",\"H\",\"\\xCC\",\"\\xCE\"],KeyI:[\"i\",\"I\",\"\\xEE\",\"\\xEF\"],KeyJ:[\"j\",\"J\",\"\\xCF\",\"\\xCD\"],KeyK:[\"k\",\"K\",\"\\xC8\",\"\\xCB\"],KeyL:[\"l\",\"L\",\"\\xAC\",\"|\"],KeyM:[\",\",\"?\",\"\\u221E\",\"\\xBF\"],KeyN:[\"n\",\"N\",\"~\",\"\\u0131\"],KeyO:[\"o\",\"O\",\"\\u0153\",\"\\u0152\"],KeyP:[\"p\",\"P\",\"\\u03C0\",\"\\u220F\"],KeyQ:[\"a\",\"A\",\"\\xE6\",\"\\xC6\"],KeyR:[\"r\",\"R\",\"\\xAE\",\"\\u201A\"],KeyS:[\"s\",\"S\",\"\\xD2\",\"\\u2211\"],KeyT:[\"t\",\"T\",\"\\u2020\",\"\\u2122\"],KeyU:[\"u\",\"U\",\"\\xBA\",\"\\xAA\"],KeyV:[\"v\",\"V\",\"\\u25CA\",\"\\u221A\"],KeyW:[\"z\",\"Z\",\"\\xC2\",\"\\xC5\"],KeyX:[\"x\",\"X\",\"\\u2248\",\"\\u2044\"],KeyY:[\"y\",\"Y\",\"\\xDA\",\"\\u0178\"],KeyZ:[\"w\",\"W\",\"\\u2039\",\"\\u203A\"],Digit1:[\"&\",\"1\",\"\\uF8FF\",\"\\xB4\"],Digit2:[\"\\xE9\",\"2\",\"\\xEB\",\"\\u201E\"],Digit3:['\"',\"3\",\"\\u201C\",\"\\u201D\"],Digit4:[\"'\",\"4\",\"\\u2018\",\"\\u2019\"],Digit5:[\"(\",\"5\",\"{\",\"[\"],Digit6:[\"\\xA7\",\"6\",\"\\xB6\",\"\\xE5\"],Digit7:[\"\\xE8\",\"7\",\"\\xAB\",\"\\xBB\"],Digit8:[\"!\",\"8\",\"\\xA1\",\"\\xDB\"],Digit9:[\"\\xE7\",\"9\",\"\\xC7\",\"\\xC1\"],Digit0:[\"\\xE0\",\"0\",\"\\xF8\",\"\\xD8\"],Space:[\" \",\" \",\" \",\" \"],Minus:[\")\",\"\\xB0\",\"}\",\"]\"],Equal:[\"-\",\"_\",\"\\u2014\",\"\\u2013\"],BracketLeft:[\"^\",\"\\xA8\",\"\\xF4\",\"\\xD4\"],BracketRight:[\"$\",\"*\",\"\\u20AC\",\"\\xA5\"],Backslash:[\"`\",\"\\xA3\",\"@\",\"#\"],Semicolon:[\"m\",\"M\",\"\\xB5\",\"\\xD3\"],Quote:[\"\\xF9\",\"%\",\"\\xD9\",\"\\u2030\"],Backquote:[\"<\",\">\",\"\\u2264\",\"\\u2265\"],Comma:[\";\",\".\",\"\\u2026\",\"\\u2022\"],Period:[\":\",\"/\",\"\\xF7\",\"\\\\\"],Slash:[\"=\",\"+\",\"\\u2260\",\"\\xB1\"],NumpadDivide:[\"/\",\"/\",\"/\",\"/\"],NumpadMultiply:[\"*\",\"*\",\"*\",\"*\"],NumpadSubtract:[\"-\",\"-\",\"-\",\"-\"],NumpadAdd:[\"+\",\"+\",\"+\",\"+\"],NumpadDecimal:[\",\",\".\",\",\",\".\"],IntlBackslash:[\"@\",\"#\",\"\\u2022\",\"\\u0178\"],NumpadEqual:[\"=\",\"=\",\"=\",\"=\"]}},cu={id:\"windows.french\",locale:\"fr\",displayName:\"French\",virtualLayout:\"azerty\",platform:\"windows\",score:0,mapping:{KeyA:[\"q\",\"Q\",\"\",\"\"],KeyB:[\"b\",\"B\",\"\",\"\"],KeyC:[\"c\",\"C\",\"\",\"\"],KeyD:[\"d\",\"D\",\"\",\"\"],KeyE:[\"e\",\"E\",\"\\u20AC\",\"\"],KeyF:[\"f\",\"F\",\"\",\"\"],KeyG:[\"g\",\"G\",\"\",\"\"],KeyH:[\"h\",\"H\",\"\",\"\"],KeyI:[\"i\",\"I\",\"\",\"\"],KeyJ:[\"j\",\"J\",\"\",\"\"],KeyK:[\"k\",\"K\",\"\",\"\"],KeyL:[\"l\",\"L\",\"\",\"\"],KeyM:[\",\",\"?\",\"\",\"\"],KeyN:[\"n\",\"N\",\"\",\"\"],KeyO:[\"o\",\"O\",\"\",\"\"],KeyP:[\"p\",\"P\",\"\",\"\"],KeyQ:[\"a\",\"A\",\"\",\"\"],KeyR:[\"r\",\"R\",\"\",\"\"],KeyS:[\"s\",\"S\",\"\",\"\"],KeyT:[\"t\",\"T\",\"\",\"\"],KeyU:[\"u\",\"U\",\"\",\"\"],KeyV:[\"v\",\"V\",\"\",\"\"],KeyW:[\"z\",\"Z\",\"\",\"\"],KeyX:[\"x\",\"X\",\"\",\"\"],KeyY:[\"y\",\"Y\",\"\",\"\"],KeyZ:[\"w\",\"W\",\"\",\"\"],Digit1:[\"&\",\"1\",\"\",\"\"],Digit2:[\"\\xE9\",\"2\",\"~\",\"\"],Digit3:['\"',\"3\",\"#\",\"\"],Digit4:[\"'\",\"4\",\"{\",\"\"],Digit5:[\"(\",\"5\",\"[\",\"\"],Digit6:[\"-\",\"6\",\"|\",\"\"],Digit7:[\"\\xE8\",\"7\",\"`\",\"\"],Digit8:[\"_\",\"8\",\"\\\\\",\"\"],Digit9:[\"\\xE7\",\"9\",\"^\",\"\"],Digit0:[\"\\xE0\",\"0\",\"@\",\"\"],Space:[\" \",\" \",\"\",\"\"],Minus:[\")\",\"\\xB0\",\"]\",\"\"],Equal:[\"=\",\"+\",\"}\",\"\"],BracketLeft:[\"^\",\"\\xA8\",\"\",\"\"],BracketRight:[\"$\",\"\\xA3\",\"\\xA4\",\"\"],Backslash:[\"*\",\"\\xB5\",\"\",\"\"],Semicolon:[\"m\",\"M\",\"\",\"\"],Quote:[\"\\xF9\",\"%\",\"\",\"\"],Backquote:[\"\\xB2\",\"\",\"\",\"\"],Comma:[\";\",\".\",\"\",\"\"],Period:[\":\",\"/\",\"\",\"\"],Slash:[\"!\",\"\\xA7\",\"\",\"\"],NumpadDivide:[\"/\",\"/\",\"\",\"\"],NumpadMultiply:[\"*\",\"*\",\"\",\"\"],NumpadSubtract:[\"-\",\"-\",\"\",\"\"],NumpadAdd:[\"+\",\"+\",\"\",\"\"],IntlBackslash:[\"<\",\">\",\"\",\"\"]}},uu={id:\"linux.french\",locale:\"fr\",displayName:\"French\",virtualLayout:\"azerty\",platform:\"linux\",score:0,mapping:{KeyA:[\"q\",\"Q\",\"@\",\"\\u03A9\"],KeyB:[\"b\",\"B\",\"\\u201D\",\"\\u2019\"],KeyC:[\"c\",\"C\",\"\\xA2\",\"\\xA9\"],KeyD:[\"d\",\"D\",\"\\xF0\",\"\\xD0\"],KeyE:[\"e\",\"E\",\"\\u20AC\",\"\\xA2\"],KeyF:[\"f\",\"F\",\"\\u0111\",\"\\xAA\"],KeyG:[\"g\",\"G\",\"\\u014B\",\"\\u014A\"],KeyH:[\"h\",\"H\",\"\\u0127\",\"\\u0126\"],KeyI:[\"i\",\"I\",\"\\u2192\",\"\\u0131\"],KeyJ:[\"j\",\"J\",\"\\u0309\",\"\\u031B\"],KeyK:[\"k\",\"K\",\"\\u0138\",\"&\"],KeyL:[\"l\",\"L\",\"\\u0142\",\"\\u0141\"],KeyM:[\",\",\"?\",\"\\u0301\",\"\\u030B\"],KeyN:[\"n\",\"N\",\"n\",\"N\"],KeyO:[\"o\",\"O\",\"\\xF8\",\"\\xD8\"],KeyP:[\"p\",\"P\",\"\\xFE\",\"\\xDE\"],KeyQ:[\"a\",\"A\",\"\\xE6\",\"\\xC6\"],KeyR:[\"r\",\"R\",\"\\xB6\",\"\\xAE\"],KeyS:[\"s\",\"S\",\"\\xDF\",\"\\xA7\"],KeyT:[\"t\",\"T\",\"\\u0167\",\"\\u0166\"],KeyU:[\"u\",\"U\",\"\\u2193\",\"\\u2191\"],KeyV:[\"v\",\"V\",\"\\u201C\",\"\\u2018\"],KeyW:[\"z\",\"Z\",\"\\xAB\",\"<\"],KeyX:[\"x\",\"X\",\"\\xBB\",\">\"],KeyY:[\"y\",\"Y\",\"\\u2190\",\"\\xA5\"],KeyZ:[\"w\",\"W\",\"\\u0142\",\"\\u0141\"],Digit1:[\"&\",\"1\",\"\\xB9\",\"\\xA1\"],Digit2:[\"\\xE9\",\"2\",\"~\",\"\\u215B\"],Digit3:['\"',\"3\",\"#\",\"\\xA3\"],Digit4:[\"'\",\"4\",\"{\",\"$\"],Digit5:[\"(\",\"5\",\"[\",\"\\u215C\"],Digit6:[\"-\",\"6\",\"|\",\"\\u215D\"],Digit7:[\"\\xE8\",\"7\",\"`\",\"\\u215E\"],Digit8:[\"_\",\"8\",\"\\\\\",\"\\u2122\"],Digit9:[\"\\xE7\",\"9\",\"^\",\"\\xB1\"],Digit0:[\"\\xE0\",\"0\",\"@\",\"\\xB0\"],Enter:[\"\\r\",\"\\r\",\"\\r\",\"\\r\"],Escape:[\"\\x1B\",\"\\x1B\",\"\\x1B\",\"\\x1B\"],Backspace:[\"\\b\",\"\\b\",\"\\b\",\"\\b\"],Tab:[\"\t\",\"\",\"\t\",\"\"],Space:[\" \",\" \",\" \",\" \"],Minus:[\")\",\"\\xB0\",\"]\",\"\\xBF\"],Equal:[\"=\",\"+\",\"}\",\"\\u0328\"],BracketLeft:[\"\\u0302\",\"\\u0308\",\"\\u0308\",\"\\u030A\"],BracketRight:[\"$\",\"\\xA3\",\"\\xA4\",\"\\u0304\"],Backslash:[\"*\",\"\\xB5\",\"\\u0300\",\"\\u0306\"],Semicolon:[\"m\",\"M\",\"\\xB5\",\"\\xBA\"],Quote:[\"\\xF9\",\"%\",\"\\u0302\",\"\\u030C\"],Backquote:[\"\\xB2\",\"~\",\"\\xAC\",\"\\xAC\"],Comma:[\";\",\".\",\"\\u2500\",\"\\xD7\"],Period:[\":\",\"/\",\"\\xB7\",\"\\xF7\"],Slash:[\"!\",\"\\xA7\",\"\\u0323\",\"\\u0307\"],NumpadMultiply:[\"*\",\"*\",\"*\",\"*\"],NumpadSubtract:[\"-\",\"-\",\"-\",\"-\"],NumpadAdd:[\"+\",\"+\",\"+\",\"+\"],NumpadDecimal:[\"\",\".\",\"\",\".\"],IntlBackslash:[\"<\",\">\",\"|\",\"\\xA6\"]}};var du={id:\"apple.german\",locale:\"de\",displayName:\"German\",virtualLayout:\"qwertz\",platform:\"apple\",score:0,mapping:{KeyA:[\"a\",\"A\",\"\\xE5\",\"\\xC5\"],KeyB:[\"b\",\"B\",\"\\u222B\",\"\\u2039\"],KeyC:[\"c\",\"C\",\"\\xE7\",\"\\xC7\"],KeyD:[\"d\",\"D\",\"\\u2202\",\"\\u2122\"],KeyE:[\"e\",\"E\",\"\\u20AC\",\"\\u2030\"],KeyF:[\"f\",\"F\",\"\\u0192\",\"\\xCF\"],KeyG:[\"g\",\"G\",\"\\xA9\",\"\\xCC\"],KeyH:[\"h\",\"H\",\"\\xAA\",\"\\xD3\"],KeyI:[\"i\",\"I\",\"\\u2044\",\"\\xDB\"],KeyJ:[\"j\",\"J\",\"\\xBA\",\"\\u0131\"],KeyK:[\"k\",\"K\",\"\\u2206\",\"\\u02C6\"],KeyL:[\"l\",\"L\",\"@\",\"\\uFB02\"],KeyM:[\"m\",\"M\",\"\\xB5\",\"\\u02D8\"],KeyN:[\"n\",\"N\",\"~\",\"\\u203A\"],KeyO:[\"o\",\"O\",\"\\xF8\",\"\\xD8\"],KeyP:[\"p\",\"P\",\"\\u03C0\",\"\\u220F\"],KeyQ:[\"q\",\"Q\",\"\\xAB\",\"\\xBB\"],KeyR:[\"r\",\"R\",\"\\xAE\",\"\\xB8\"],KeyS:[\"s\",\"S\",\"\\u201A\",\"\\xCD\"],KeyT:[\"t\",\"T\",\"\\u2020\",\"\\u02DD\"],KeyU:[\"u\",\"U\",\"\\xA8\",\"\\xC1\"],KeyV:[\"v\",\"V\",\"\\u221A\",\"\\u25CA\"],KeyW:[\"w\",\"W\",\"\\u2211\",\"\\u201E\"],KeyX:[\"x\",\"X\",\"\\u2248\",\"\\xD9\"],KeyY:[\"z\",\"Z\",\"\\u03A9\",\"\\u02C7\"],KeyZ:[\"y\",\"Y\",\"\\xA5\",\"\\u2021\"],Digit1:[\"1\",\"!\",\"\\xA1\",\"\\xAC\"],Digit2:[\"2\",'\"',\"\\u201C\",\"\\u201D\"],Digit3:[\"3\",\"\\xA7\",\"\\xB6\",\"#\"],Digit4:[\"4\",\"$\",\"\\xA2\",\"\\xA3\"],Digit5:[\"5\",\"%\",\"[\",\"\\uFB01\"],Digit6:[\"6\",\"&\",\"]\",\"^\"],Digit7:[\"7\",\"/\",\"|\",\"\\\\\"],Digit8:[\"8\",\"(\",\"{\",\"\\u02DC\"],Digit9:[\"9\",\")\",\"}\",\"\\xB7\"],Digit0:[\"0\",\"=\",\"\\u2260\",\"\\xAF\"],Space:[\" \",\" \",\" \",\" \"],Minus:[\"\\xDF\",\"?\",\"\\xBF\",\"\\u02D9\"],Equal:[\"\\xB4\",\"`\",\"'\",\"\\u02DA\"],BracketLeft:[\"\\xFC\",\"\\xDC\",\"\\u2022\",\"\\xB0\"],BracketRight:[\"+\",\"*\",\"\\xB1\",\"\\uF8FF\"],Backslash:[\"#\",\"'\",\"\\u2018\",\"\\u2019\"],Semicolon:[\"\\xF6\",\"\\xD6\",\"\\u0153\",\"\\u0152\"],Quote:[\"\\xE4\",\"\\xC4\",\"\\xE6\",\"\\xC6\"],Backquote:[\"<\",\">\",\"\\u2264\",\"\\u2265\"],Comma:[\",\",\";\",\"\\u221E\",\"\\u02DB\"],Period:[\".\",\":\",\"\\u2026\",\"\\xF7\"],Slash:[\"-\",\"_\",\"\\u2013\",\"\\u2014\"],NumpadDivide:[\"/\",\"/\",\"/\",\"/\"],NumpadMultiply:[\"*\",\"*\",\"*\",\"*\"],NumpadSubtract:[\"-\",\"-\",\"-\",\"-\"],NumpadAdd:[\"+\",\"+\",\"+\",\"+\"],NumpadDecimal:[\",\",\",\",\".\",\".\"],IntlBackslash:[\"^\",\"\\xB0\",\"\\u201E\",\"\\u201C\"],NumpadEqual:[\"=\",\"=\",\"=\",\"=\"]}},mu={id:\"windows.german\",locale:\"de\",displayName:\"German\",platform:\"windows\",virtualLayout:\"qwertz\",score:0,mapping:{KeyA:[\"a\",\"A\",\"\",\"\"],KeyB:[\"b\",\"B\",\"\",\"\"],KeyC:[\"c\",\"C\",\"\",\"\"],KeyD:[\"d\",\"D\",\"\",\"\"],KeyE:[\"e\",\"E\",\"\\u20AC\",\"\"],KeyF:[\"f\",\"F\",\"\",\"\"],KeyG:[\"g\",\"G\",\"\",\"\"],KeyH:[\"h\",\"H\",\"\",\"\"],KeyI:[\"i\",\"I\",\"\",\"\"],KeyJ:[\"j\",\"J\",\"\",\"\"],KeyK:[\"k\",\"K\",\"\",\"\"],KeyL:[\"l\",\"L\",\"\",\"\"],KeyM:[\"m\",\"M\",\"\\xB5\",\"\"],KeyN:[\"n\",\"N\",\"\",\"\"],KeyO:[\"o\",\"O\",\"\",\"\"],KeyP:[\"p\",\"P\",\"\",\"\"],KeyQ:[\"q\",\"Q\",\"@\",\"\"],KeyR:[\"r\",\"R\",\"\",\"\"],KeyS:[\"s\",\"S\",\"\",\"\"],KeyT:[\"t\",\"T\",\"\",\"\"],KeyU:[\"u\",\"U\",\"\",\"\"],KeyV:[\"v\",\"V\",\"\",\"\"],KeyW:[\"w\",\"W\",\"\",\"\"],KeyX:[\"x\",\"X\",\"\",\"\"],KeyY:[\"z\",\"Z\",\"\",\"\"],KeyZ:[\"y\",\"Y\",\"\",\"\"],Digit1:[\"1\",\"!\",\"\",\"\"],Digit2:[\"2\",'\"',\"\\xB2\",\"\"],Digit3:[\"3\",\"\\xA7\",\"\\xB3\",\"\"],Digit4:[\"4\",\"$\",\"\",\"\"],Digit5:[\"5\",\"%\",\"\",\"\"],Digit6:[\"6\",\"&\",\"\",\"\"],Digit7:[\"7\",\"/\",\"{\",\"\"],Digit8:[\"8\",\"(\",\"[\",\"\"],Digit9:[\"9\",\")\",\"]\",\"\"],Digit0:[\"0\",\"=\",\"}\",\"\"],Space:[\" \",\" \",\"\",\"\"],Minus:[\"\\xDF\",\"?\",\"\\\\\",\"\\u1E9E\"],Equal:[\"\\xB4\",\"`\",\"\",\"\"],BracketLeft:[\"\\xFC\",\"\\xDC\",\"\",\"\"],BracketRight:[\"+\",\"*\",\"~\",\"\"],Backslash:[\"#\",\"'\",\"\",\"\"],Semicolon:[\"\\xF6\",\"\\xD6\",\"\",\"\"],Quote:[\"\\xE4\",\"\\xC4\",\"\",\"\"],Backquote:[\"^\",\"\\xB0\",\"\",\"\"],Comma:[\",\",\";\",\"\",\"\"],Period:[\".\",\":\",\"\",\"\"],Slash:[\"-\",\"_\",\"\",\"\"],NumpadDivide:[\"/\",\"/\",\"\",\"\"],NumpadMultiply:[\"*\",\"*\",\"\",\"\"],NumpadSubtract:[\"-\",\"-\",\"\",\"\"],NumpadAdd:[\"+\",\"+\",\"\",\"\"],IntlBackslash:[\"<\",\">\",\"|\",\"\"]}},pu={id:\"linux.german\",locale:\"de\",displayName:\"German\",platform:\"windows\",virtualLayout:\"qwertz\",score:0,mapping:{KeyA:[\"a\",\"A\",\"\\xE6\",\"\\xC6\"],KeyB:[\"b\",\"B\",\"\\u201C\",\"\\u2018\"],KeyC:[\"c\",\"C\",\"\\xA2\",\"\\xA9\"],KeyD:[\"d\",\"D\",\"\\xF0\",\"\\xD0\"],KeyE:[\"e\",\"E\",\"\\u20AC\",\"\\u20AC\"],KeyF:[\"f\",\"F\",\"\\u0111\",\"\\xAA\"],KeyG:[\"g\",\"G\",\"\\u014B\",\"\\u014A\"],KeyH:[\"h\",\"H\",\"\\u0127\",\"\\u0126\"],KeyI:[\"i\",\"I\",\"\\u2192\",\"\\u0131\"],KeyJ:[\"j\",\"J\",\"\\u0323\",\"\\u0307\"],KeyK:[\"k\",\"K\",\"\\u0138\",\"&\"],KeyL:[\"l\",\"L\",\"\\u0142\",\"\\u0141\"],KeyM:[\"m\",\"M\",\"\\xB5\",\"\\xBA\"],KeyN:[\"n\",\"N\",\"\\u201D\",\"\\u2019\"],KeyO:[\"o\",\"O\",\"\\xF8\",\"\\xD8\"],KeyP:[\"p\",\"P\",\"\\xFE\",\"\\xDE\"],KeyQ:[\"q\",\"Q\",\"@\",\"\\u03A9\"],KeyR:[\"r\",\"R\",\"\\xB6\",\"\\xAE\"],KeyS:[\"s\",\"S\",\"\\u017F\",\"\\u1E9E\"],KeyT:[\"t\",\"T\",\"\\u0167\",\"\\u0166\"],KeyU:[\"u\",\"U\",\"\\u2193\",\"\\u2191\"],KeyV:[\"v\",\"V\",\"\\u201E\",\"\\u201A\"],KeyW:[\"w\",\"W\",\"\\u0142\",\"\\u0141\"],KeyX:[\"x\",\"X\",\"\\xAB\",\"\\u2039\"],KeyY:[\"z\",\"Z\",\"\\u2190\",\"\\xA5\"],KeyZ:[\"y\",\"Y\",\"\\xBB\",\"\\u203A\"],Digit1:[\"1\",\"!\",\"\\xB9\",\"\\xA1\"],Digit2:[\"2\",'\"',\"\\xB2\",\"\\u215B\"],Digit3:[\"3\",\"\\xA7\",\"\\xB3\",\"\\xA3\"],Digit4:[\"4\",\"$\",\"\\xBC\",\"\\xA4\"],Digit5:[\"5\",\"%\",\"\\xBD\",\"\\u215C\"],Digit6:[\"6\",\"&\",\"\\xAC\",\"\\u215D\"],Digit7:[\"7\",\"/\",\"{\",\"\\u215E\"],Digit8:[\"8\",\"(\",\"[\",\"\\u2122\"],Digit9:[\"9\",\")\",\"]\",\"\\xB1\"],Digit0:[\"0\",\"=\",\"}\",\"\\xB0\"],Enter:[\"\\r\",\"\\r\",\"\\r\",\"\\r\"],Escape:[\"\\x1B\",\"\\x1B\",\"\\x1B\",\"\\x1B\"],Backspace:[\"\\b\",\"\\b\",\"\\b\",\"\\b\"],Tab:[\"\t\",\"\",\"\t\",\"\"],Space:[\" \",\" \",\" \",\" \"],Minus:[\"\\xDF\",\"?\",\"\\\\\",\"\\xBF\"],Equal:[\"\\u0301\",\"\\u0300\",\"\\u0327\",\"\\u0328\"],BracketLeft:[\"\\xFC\",\"\\xDC\",\"\\u0308\",\"\\u030A\"],BracketRight:[\"+\",\"*\",\"~\",\"\\xAF\"],Backslash:[\"#\",\"'\",\"\\u2019\",\"\\u0306\"],Semicolon:[\"\\xF6\",\"\\xD6\",\"\\u030B\",\"\\u0323\"],Quote:[\"\\xE4\",\"\\xC4\",\"\\u0302\",\"\\u030C\"],Backquote:[\"\\u0302\",\"\\xB0\",\"\\u2032\",\"\\u2033\"],Comma:[\",\",\";\",\"\\xB7\",\"\\xD7\"],Period:[\".\",\":\",\"\\u2026\",\"\\xF7\"],Slash:[\"-\",\"_\",\"\\u2013\",\"\\u2014\"],PrintScreen:[\"\",\"\",\"\",\"\"],PageUp:[\"/\",\"/\",\"/\",\"/\"],NumpadMultiply:[\"*\",\"*\",\"*\",\"*\"],NumpadSubtract:[\"-\",\"-\",\"-\",\"-\"],NumpadAdd:[\"+\",\"+\",\"+\",\"+\"],Numpad1:[\"\",\"1\",\"\",\"1\"],Numpad2:[\"\",\"2\",\"\",\"2\"],Numpad3:[\"\",\"3\",\"\",\"3\"],Numpad4:[\"\",\"4\",\"\",\"4\"],Numpad5:[\"\",\"5\",\"\",\"5\"],Numpad6:[\"\",\"6\",\"\",\"6\"],Numpad7:[\"\",\"7\",\"\",\"7\"],Numpad8:[\"\",\"8\",\"\",\"8\"],Numpad9:[\"\",\"9\",\"\",\"9\"],Numpad0:[\"\",\"0\",\"\",\"0\"],NumpadDecimal:[\"\",\",\",\"\",\",\"],IntlBackslash:[\"<\",\">\",\"|\",\"\\u0331\"],AltRight:[\"\\r\",\"\\r\",\"\\r\",\"\\r\"],MetaRight:[\".\",\".\",\".\",\".\"]}};var hu={id:\"apple.spanish\",locale:\"es\",displayName:\"Spanish ISO\",platform:\"apple\",virtualLayout:\"qwerty\",score:0,mapping:{KeyA:[\"a\",\"A\",\"\\xE5\",\"\\xC5\"],KeyB:[\"b\",\"B\",\"\\xDF\",\"\"],KeyC:[\"c\",\"C\",\"\\xA9\",\" \"],KeyD:[\"d\",\"D\",\"\\u2202\",\"\\u2206\"],KeyE:[\"e\",\"E\",\"\\u20AC\",\"\\u20AC\"],KeyF:[\"f\",\"F\",\"\\u0192\",\"\\uFB01\"],KeyG:[\"g\",\"G\",\"\\uF8FF\",\"\\uFB02\"],KeyH:[\"h\",\"H\",\"\\u2122\",\" \"],KeyI:[\"i\",\"I\",\" \",\" \"],KeyJ:[\"j\",\"J\",\"\\xB6\",\"\\xAF\"],KeyK:[\"k\",\"K\",\"\\xA7\",\"\\u02C7\"],KeyL:[\"l\",\"L\",\" \",\"\\u02D8\"],KeyM:[\"m\",\"M\",\"\\xB5\",\"\\u02DA\"],KeyN:[\"n\",\"N\",\" \",\"\\u02D9\"],KeyO:[\"o\",\"O\",\"\\xF8\",\"\\xD8\"],KeyP:[\"p\",\"P\",\"\\u03C0\",\"\\u220F\"],KeyQ:[\"q\",\"Q\",\"\\u0153\",\"\\u0152\"],KeyR:[\"r\",\"R\",\"\\xAE\",\" \"],KeyS:[\"s\",\"S\",\"\\u222B\",\" \"],KeyT:[\"t\",\"T\",\"\\u2020\",\"\\u2021\"],KeyU:[\"u\",\"U\",\" \",\" \"],KeyV:[\"v\",\"V\",\"\\u221A\",\"\\u25CA\"],KeyW:[\"w\",\"W\",\"\\xE6\",\"\\xC6\"],KeyX:[\"x\",\"X\",\"\\u2211\",\"\\u203A\"],KeyY:[\"y\",\"Y\",\"\\xA5\",\" \"],KeyZ:[\"z\",\"Z\",\"\\u03A9\",\"\\u2039\"],Digit1:[\"1\",\"!\",\"|\",\"\\u0131\"],Digit2:[\"2\",'\"',\"@\",\"\\u02DD\"],Digit3:[\"3\",\"\\xB7\",\"#\",\"\\u2022\"],Digit4:[\"4\",\"$\",\"\\xA2\",\"\\xA3\"],Digit5:[\"5\",\"%\",\"\\u221E\",\"\\u2030\"],Digit6:[\"6\",\"&\",\"\\xAC\",\" \"],Digit7:[\"7\",\"/\",\"\\xF7\",\"\\u2044\"],Digit8:[\"8\",\"(\",\"\\u201C\",\"\\u2018\"],Digit9:[\"9\",\")\",\"\\u201D\",\"\\u2019\"],Digit0:[\"0\",\"=\",\"\\u2260\",\"\\u2248\"],Space:[\" \",\" \",\" \",\" \"],Minus:[\"'\",\"?\",\"\\xB4\",\"\\xB8\"],Equal:[\"\\xA1\",\"\\xBF\",\"\\u201A\",\"\\u02DB\"],BracketLeft:[\"`\",\"^\",\"[\",\"\\u02C6\"],BracketRight:[\"+\",\"*\",\"]\",\"\\xB1\"],Backslash:[\"\\xE7\",\"\\xC7\",\"}\",\"\\xBB\"],Semicolon:[\"\\xF1\",\"\\xD1\",\"~\",\"\\u02DC\"],Quote:[\"\\xB4\",\"\\xA8\",\"{\",\"\\xAB\"],Backquote:[\"<\",\">\",\"\\u2264\",\"\\u2265\"],Comma:[\",\",\";\",\"\\u201E\",\"\"],Period:[\".\",\":\",\"\\u2026\",\"\\u2026\"],Slash:[\"-\",\"_\",\"\\u2013\",\"\\u2014\"],NumpadDivide:[\"/\",\"/\",\"/\",\"/\"],NumpadMultiply:[\"*\",\"*\",\"*\",\"*\"],NumpadSubtract:[\"-\",\"-\",\"-\",\"-\"],NumpadAdd:[\"+\",\"+\",\"+\",\"+\"],Numpad1:[\"1\",\"1\",\"1\",\"1\"],Numpad2:[\"2\",\"2\",\"2\",\"2\"],Numpad3:[\"3\",\"3\",\"3\",\"3\"],Numpad4:[\"4\",\"4\",\"4\",\"4\"],Numpad5:[\"5\",\"5\",\"5\",\"5\"],Numpad6:[\"6\",\"6\",\"6\",\"6\"],Numpad7:[\"7\",\"7\",\"7\",\"7\"],Numpad8:[\"8\",\"8\",\"8\",\"8\"],Numpad9:[\"9\",\"9\",\"9\",\"9\"],Numpad0:[\"0\",\"0\",\"0\",\"0\"],NumpadDecimal:[\",\",\",\",\",\",\",\"],IntlBackslash:[\"\\xBA\",\"\\xAA\",\"\\\\\",\"\\xB0\"]}},fu={id:\"windows.spanish\",locale:\"es\",displayName:\"Spanish\",platform:\"windows\",virtualLayout:\"qwerty\",score:0,mapping:{KeyA:[\"a\",\"A\",\"\",\"\"],KeyB:[\"b\",\"B\",\"\",\"\"],KeyC:[\"c\",\"C\",\"\",\"\"],KeyD:[\"d\",\"D\",\"\",\"\"],KeyE:[\"e\",\"E\",\"\\u20AC\",\"\"],KeyF:[\"f\",\"F\",\"\",\"\"],KeyG:[\"g\",\"G\",\"\",\"\"],KeyH:[\"h\",\"H\",\"\",\"\"],KeyI:[\"i\",\"I\",\"\",\"\"],KeyJ:[\"j\",\"J\",\"\",\"\"],KeyK:[\"k\",\"K\",\"\",\"\"],KeyL:[\"l\",\"L\",\"\",\"\"],KeyM:[\"m\",\"M\",\"\",\"\"],KeyN:[\"n\",\"N\",\"\",\"\"],KeyO:[\"o\",\"O\",\"\",\"\"],KeyP:[\"p\",\"P\",\"\",\"\"],KeyQ:[\"q\",\"Q\",\"\",\"\"],KeyR:[\"r\",\"R\",\"\",\"\"],KeyS:[\"s\",\"S\",\"\",\"\"],KeyT:[\"t\",\"T\",\"\",\"\"],KeyU:[\"u\",\"U\",\"\",\"\"],KeyV:[\"v\",\"V\",\"\",\"\"],KeyW:[\"w\",\"W\",\"\",\"\"],KeyX:[\"x\",\"X\",\"\",\"\"],KeyY:[\"y\",\"Y\",\"\",\"\"],KeyZ:[\"z\",\"Z\",\"\",\"\"],Digit1:[\"1\",\"!\",\"|\",\"\"],Digit2:[\"2\",'\"',\"@\",\"\"],Digit3:[\"3\",\"\\xB7\",\"#\",\"\"],Digit4:[\"4\",\"$\",\"~\",\"\"],Digit5:[\"5\",\"%\",\"\\u20AC\",\"\"],Digit6:[\"6\",\"&\",\"\\xAC\",\"\"],Digit7:[\"7\",\"/\",\"\",\"\"],Digit8:[\"8\",\"(\",\"\",\"\"],Digit9:[\"9\",\")\",\"\",\"\"],Digit0:[\"0\",\"=\",\"\",\"\"],Space:[\" \",\" \",\"\",\"\"],Minus:[\"'\",\"?\",\"\",\"\"],Equal:[\"\\xA1\",\"\\xBF\",\"\",\"\"],BracketLeft:[\"`\",\"^\",\"[\",\"\"],BracketRight:[\"+\",\"*\",\"]\",\"\"],Backslash:[\"\\xE7\",\"\\xC7\",\"}\",\"\"],Semicolon:[\"\\xF1\",\"\\xD1\",\"\",\"\"],Quote:[\"\\xB4\",\"\\xA8\",\"{\",\"\"],Backquote:[\"\\xBA\",\"\\xAA\",\"\\\\\",\"\"],Comma:[\",\",\";\",\"\",\"\"],Period:[\".\",\":\",\"\",\"\"],Slash:[\"-\",\"_\",\"\",\"\"],NumpadDivide:[\"/\",\"/\",\"\",\"\"],NumpadMultiply:[\"*\",\"*\",\"\",\"\"],NumpadSubtract:[\"-\",\"-\",\"\",\"\"],NumpadAdd:[\"+\",\"+\",\"\",\"\"],IntlBackslash:[\"<\",\">\",\"\",\"\"]}},gu={id:\"linux.spanish\",locale:\"es\",displayName:\"Spanish\",platform:\"linux\",virtualLayout:\"qwerty\",score:0,mapping:{KeyA:[\"a\",\"A\",\"\\xE6\",\"\\xC6\"],KeyB:[\"b\",\"B\",\"\\u201D\",\"\\u2019\"],KeyC:[\"c\",\"C\",\"\\xA2\",\"\\xA9\"],KeyD:[\"d\",\"D\",\"\\xF0\",\"\\xD0\"],KeyE:[\"e\",\"E\",\"\\u20AC\",\"\\xA2\"],KeyF:[\"f\",\"F\",\"\\u0111\",\"\\xAA\"],KeyG:[\"g\",\"G\",\"\\u014B\",\"\\u014A\"],KeyH:[\"h\",\"H\",\"\\u0127\",\"\\u0126\"],KeyI:[\"i\",\"I\",\"\\u2192\",\"\\u0131\"],KeyJ:[\"j\",\"J\",\"\\u0309\",\"\\u031B\"],KeyK:[\"k\",\"K\",\"\\u0138\",\"&\"],KeyL:[\"l\",\"L\",\"\\u0142\",\"\\u0141\"],KeyM:[\"m\",\"M\",\"\\xB5\",\"\\xBA\"],KeyN:[\"n\",\"N\",\"n\",\"N\"],KeyO:[\"o\",\"O\",\"\\xF8\",\"\\xD8\"],KeyP:[\"p\",\"P\",\"\\xFE\",\"\\xDE\"],KeyQ:[\"q\",\"Q\",\"@\",\"\\u03A9\"],KeyR:[\"r\",\"R\",\"\\xB6\",\"\\xAE\"],KeyS:[\"s\",\"S\",\"\\xDF\",\"\\xA7\"],KeyT:[\"t\",\"T\",\"\\u0167\",\"\\u0166\"],KeyU:[\"u\",\"U\",\"\\u2193\",\"\\u2191\"],KeyV:[\"v\",\"V\",\"\\u201C\",\"\\u2018\"],KeyW:[\"w\",\"W\",\"\\u0142\",\"\\u0141\"],KeyX:[\"x\",\"X\",\"\\xBB\",\">\"],KeyY:[\"y\",\"Y\",\"\\u2190\",\"\\xA5\"],KeyZ:[\"z\",\"Z\",\"\\xAB\",\"<\"],Digit1:[\"1\",\"!\",\"|\",\"\\xA1\"],Digit2:[\"2\",'\"',\"@\",\"\\u215B\"],Digit3:[\"3\",\"\\xB7\",\"#\",\"\\xA3\"],Digit4:[\"4\",\"$\",\"~\",\"$\"],Digit5:[\"5\",\"%\",\"\\xBD\",\"\\u215C\"],Digit6:[\"6\",\"&\",\"\\xAC\",\"\\u215D\"],Digit7:[\"7\",\"/\",\"{\",\"\\u215E\"],Digit8:[\"8\",\"(\",\"[\",\"\\u2122\"],Digit9:[\"9\",\")\",\"]\",\"\\xB1\"],Digit0:[\"0\",\"=\",\"}\",\"\\xB0\"],Enter:[\"\\r\",\"\\r\",\"\\r\",\"\\r\"],Escape:[\"\\x1B\",\"\\x1B\",\"\\x1B\",\"\\x1B\"],Backspace:[\"\\b\",\"\\b\",\"\\b\",\"\\b\"],Tab:[\"\t\",\"\",\"\t\",\"\"],Space:[\" \",\" \",\" \",\" \"],Minus:[\"'\",\"?\",\"\\\\\",\"\\xBF\"],Equal:[\"\\xA1\",\"\\xBF\",\"\\u0303\",\"~\"],BracketLeft:[\"\\u0300\",\"\\u0302\",\"[\",\"\\u030A\"],BracketRight:[\"+\",\"*\",\"]\",\"\\u0304\"],Backslash:[\"\\xE7\",\"\\xC7\",\"}\",\"\\u0306\"],Semicolon:[\"\\xF1\",\"\\xD1\",\"~\",\"\\u030B\"],Quote:[\"\\u0301\",\"\\u0308\",\"{\",\"{\"],Backquote:[\"\\xBA\",\"\\xAA\",\"\\\\\",\"\\\\\"],Comma:[\",\",\";\",\"\\u2500\",\"\\xD7\"],Period:[\".\",\":\",\"\\xB7\",\"\\xF7\"],Slash:[\"-\",\"_\",\"\\u0323\",\"\\u0307\"],NumpadDivide:[\"/\",\"/\",\"/\",\"/\"],NumpadMultiply:[\"*\",\"*\",\"*\",\"*\"],NumpadSubtract:[\"-\",\"-\",\"-\",\"-\"],NumpadAdd:[\"+\",\"+\",\"+\",\"+\"],NumpadEnter:[\"\\r\",\"\\r\",\"\\r\",\"\\r\"],Numpad1:[\"\",\"1\",\"\",\"1\"],Numpad2:[\"\",\"2\",\"\",\"2\"],Numpad3:[\"\",\"3\",\"\",\"3\"],Numpad4:[\"\",\"4\",\"\",\"4\"],Numpad5:[\"\",\"5\",\"\",\"5\"],Numpad6:[\"\",\"6\",\"\",\"6\"],Numpad7:[\"\",\"7\",\"\",\"7\"],Numpad8:[\"\",\"8\",\"\",\"8\"],Numpad9:[\"\",\"9\",\"\",\"9\"],Numpad0:[\"\",\"0\",\"\",\"0\"],NumpadDecimal:[\"\",\".\",\"\",\".\"],IntlBackslash:[\"<\",\">\",\"|\",\"\\xA6\"],NumpadEqual:[\"=\",\"=\",\"=\",\"=\"],NumpadComma:[\".\",\".\",\".\",\".\"],NumpadParenLeft:[\"(\",\"(\",\"(\",\"(\"],NumpadParenRight:[\")\",\")\",\")\",\")\"]}};function Qs(t){let e=t.split(\"+\"),r={shift:!1,alt:!1,cmd:!1,win:!1,meta:!1,ctrl:!1,key:e.pop()};return e.includes(\"shift\")&&(r.shift=!0),e.includes(\"alt\")&&(r.alt=!0),e.includes(\"ctrl\")&&(r.ctrl=!0),e.includes(\"cmd\")&&(r.cmd=!0),e.includes(\"win\")&&(r.win=!0),e.includes(\"meta\")&&(r.meta=!0),r}function Gr(t){let e=\"\";return t.shift&&(e+=\"shift+\"),t.alt&&(e+=\"alt+\"),t.ctrl&&(e+=\"ctrl+\"),t.cmd&&(e+=\"cmd+\"),t.win&&(e+=\"win+\"),t.meta&&(e+=\"meta+\"),e+t.key}var Vh={enter:\"[Enter]\",escape:\"[Escape]\",backspace:\"[Backspace]\",tab:\"[Tab]\",space:\"[Space]\",pausebreak:\"[Pause]\",insert:\"[Insert]\",home:\"[Home]\",pageup:\"[PageUp]\",delete:\"[Delete]\",end:\"[End]\",pagedown:\"[PageDown]\",right:\"[ArrowRight]\",left:\"[ArrowLeft]\",down:\"[ArrowDown]\",up:\"[ArrowUp]\",numpad0:\"[Numpad0]\",numpad1:\"[Numpad1]\",numpad2:\"[Numpad2]\",numpad3:\"[Numpad3]\",numpad4:\"[Numpad4]\",numpad5:\"[Numpad5]\",numpad6:\"[Numpad6]\",numpad7:\"[Numpad7]\",numpad8:\"[Numpad8]\",numpad9:\"[Numpad9]\",numpad_divide:\"[NumpadDivide]\",numpad_multiply:\"[NumpadMultiply]\",numpad_subtract:\"[NumpadSubtract]\",numpad_add:\"[NumpadAdd]\",numpad_decimal:\"[NumpadDecimal]\",numpad_separator:\"[NumpadComma]\",capslock:\"[Capslock]\",f1:\"[F1]\",f2:\"[F2]\",f3:\"[F3]\",f4:\"[F4]\",f5:\"[F5]\",f6:\"[F6]\",f7:\"[F7]\",f8:\"[F8]\",f9:\"[F9]\",f10:\"[F10]\",f11:\"[F11]\",f12:\"[F12]\",f13:\"[F13]\",f14:\"[F14]\",f15:\"[F15]\",f16:\"[F16]\",f17:\"[F17]\",f18:\"[F18]\",f19:\"[F19]\"},Ci=[],Xt;function el(){switch(At()){case\"macos\":case\"ios\":return\"apple\";case\"windows\":return\"windows\"}return\"linux\"}function je(t){(!t.platform||t.platform===el())&&Ci.push(t)}function bu(t,e){var i;let r={shift:!1,alt:!1,cmd:!1,win:!1,meta:!1,ctrl:!1,key:\"\"};if(!t)return r;for(let[n,o]of Object.entries(e.mapping)){if(o[0]===t)return r.key=`[${n}]`,r;if(o[1]===t)return r.shift=!0,r.key=`[${n}]`,r;if(o[2]===t)return r.alt=!0,r.key=`[${n}]`,r;if(o[3]===t)return r.shift=!0,r.alt=!0,r.key=`[${n}]`,r}return r.key=(i=Vh[t])!=null?i:\"\",r}function yu(t){if(t.code)return t;let e=Object.entries(gr().mapping),r=!1,i=!1,n=\"\";for(let o=0;o<4;o++){for(let[a,s]of e)if(s[o]===t.key){n=a,o===3?(r=!0,i=!0):o===2?r=!0:o===1&&(i=!0);break}if(n)break}return new KeyboardEvent(t.type,g(p({},t),{altKey:r,shiftKey:i,code:n}))}function xu(t){var r,i;if(!t||t.key===\"Unidentified\"||t.key===\"Dead\")return;let e=t.shiftKey&&t.altKey?3:t.altKey?2:t.shiftKey?1:0;for(let n of Ci)((r=n.mapping[t.code])==null?void 0:r[e])===t.key?n.score+=1:(i=n.mapping[t.code])!=null&&i[e]&&(n.score=0);Ci.sort((n,o)=>o.score-n.score)}function zo(t){Xt=Ci.find(e=>t.startsWith(e.locale))}function vu(t){return Xt=Ci.find(e=>e.id===t),Xt}function gr(){return Xt!=null?Xt:Ci[0]}function _u(){switch(el()){case\"apple\":return Io;case\"windows\":return Zs;case\"linux\":return Ys}return Io}switch(el()){case\"apple\":je(Io),je(lu),je(hu),je(du);break;case\"windows\":je(Zs),je(cu),je(fu),je(mu);break;case\"linux\":je(Ys),je(uu),je(gu),je(pu);break}je(su);function qh(t){vu(t)}function Hh(t){zo(t)}function ee(t){return Array.isArray(t)}var Mu={en:{\"keyboard.tooltip.symbols\":\"Symbols\",\"keyboard.tooltip.greek\":\"Greek Letters\",\"keyboard.tooltip.numeric\":\"Numeric\",\"keyboard.tooltip.alphabetic\":\"Roman Letters\",\"tooltip.copy to clipboard\":\"Copy to Clipboard\",\"tooltip.cut to clipboard\":\"Cut to Clipboard\",\"tooltip.paste from clipboard\":\"Paste from Clipboard\",\"tooltip.redo\":\"Redo\",\"tooltip.toggle virtual keyboard\":\"Toggle Virtual Keyboard\",\"tooltip.menu\":\"Menu\",\"tooltip.undo\":\"Undo\",\"menu.borders\":\"Borders\",\"menu.insert matrix\":\"Insert Matrix\",\"menu.array.add row above\":\"Add Row Before\",\"menu.array.add row below\":\"Add Row After\",\"menu.array.add column after\":\"Add Column After\",\"menu.array.add column before\":\"Add Column Before\",\"menu.array.delete row\":\"Delete Row\",\"menu.array.delete rows\":\"Delete Selected Rows\",\"menu.array.delete column\":\"Delete Column\",\"menu.array.delete columns\":\"Delete Selected Columns\",\"menu.mode\":\"Mode\",\"menu.mode-math\":\"Math\",\"menu.mode-text\":\"Text\",\"menu.mode-latex\":\"LaTeX\",\"menu.insert\":\"Insert\",\"menu.insert.abs\":\"Absolute Value\",\"menu.insert.abs-template\":\"\\\\left|x\\\\right|\",\"menu.insert.nth-root\":\"n<sup>th</sup> Root\",\"menu.insert.nth-root-template\":\"\\\\sqrt[n]{x}\",\"menu.insert.log-base\":\"Logarithm base a\",\"menu.insert.log-base-template\":\"\\\\log_a(x)\",\"menu.insert.heading-calculus\":\"Calculus\",\"menu.insert.derivative\":\"Derivative\",\"menu.insert.derivative-template\":\"\\\\dfrac{\\\\mathrm{d}}{\\\\mathrm{d}x}f(x)\\\\bigm|_{x=a}\",\"menu.insert.nth-derivative\":\"n<sup>th</sup> derivative\",\"menu.insert.nth-derivative-template\":\"\\\\dfrac{\\\\mathrm{d}^n}{\\\\mathrm{d}x^n}f(x)\\\\bigm|_{x=a}\",\"menu.insert.integral\":\"Integral\",\"menu.insert.integral-template\":\"$\\\\int_a^b f(x)\\\\,\\\\mathrm{d}x$\",\"menu.insert.sum\":\"Sum\",\"menu.insert.sum-template\":\"$\\\\sum_{i=1}^n x_i$\",\"menu.insert.product\":\"Product\",\"menu.insert.product-template\":\"\\\\prod_{i=1}^n x_i\",\"menu.insert.heading-complex-numbers\":\"Complex Numbers\",\"menu.insert.modulus\":\"Modulus\",\"menu.insert.modulus-template\":\"\\\\lvert z \\\\rvert\",\"menu.insert.argument\":\"Argument\",\"menu.insert.argument-template\":\"\\\\arg(z)\",\"menu.insert.real-part\":\"Real Part\",\"menu.insert.real-part-template\":\"\\\\Re(z)\",\"menu.insert.imaginary-part\":\"Imaginary Part\",\"menu.insert.imaginary-part-template\":\"\\\\Im(z)\",\"menu.insert.conjugate\":\"Conjugate\",\"menu.insert.conjugate-template\":\"\\\\overline{z}\",\"tooltip.blackboard\":\"Blackboard\",\"tooltip.bold\":\"Bold\",\"tooltip.italic\":\"Italic\",\"tooltip.fraktur\":\"Fraktur\",\"tooltip.script\":\"Script\",\"tooltip.caligraphic\":\"Caligraphic\",\"tooltip.typewriter\":\"Typewriter\",\"tooltip.roman-upright\":\"Roman Upright\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"Font Style\",\"menu.accent\":\"Accent\",\"menu.decoration\":\"Decoration\",\"menu.color\":\"Color\",\"menu.background-color\":\"Background\",\"menu.evaluate\":\"Evaluate\",\"menu.simplify\":\"Simplify\",\"menu.solve\":\"Solve\",\"menu.solve-for\":\"Solve for %@\",\"menu.cut\":\"Cut\",\"menu.copy\":\"Copy\",\"menu.copy-as-latex\":\"Copy as LaTeX\",\"menu.copy-as-typst\":\"Copy as Typst\",\"menu.copy-as-ascii-math\":\"Copy as ASCII Math\",\"menu.copy-as-mathml\":\"Copy as MathML\",\"menu.paste\":\"Paste\",\"menu.select-all\":\"Select All\",\"color.red\":\"Red\",\"color.orange\":\"Orange\",\"color.yellow\":\"Yellow\",\"color.lime\":\"Lime\",\"color.green\":\"Green\",\"color.teal\":\"Teal\",\"color.cyan\":\"Cyan\",\"color.blue\":\"Blue\",\"color.indigo\":\"Indigo\",\"color.purple\":\"Purple\",\"color.magenta\":\"Magenta\",\"color.black\":\"Black\",\"color.dark-grey\":\"Dark Grey\",\"color.grey\":\"Grey\",\"color.light-grey\":\"Light Grey\",\"color.white\":\"White\"},ar:{\"keyboard.tooltip.symbols\":\"\\u062D\\u0631\\u0641 \\u0627\\u0648 \\u0631\\u0645\\u0632\",\"keyboard.tooltip.greek\":\"\\u062D\\u0631\\u0648\\u0641 \\u064A\\u0648\\u0646\\u0627\\u0646\\u064A\\u0629\",\"keyboard.tooltip.numeric\":\"\\u0627\\u0644\\u0631\\u0642\\u0645\\u064A\\u0629\",\"keyboard.tooltip.alphabetic\":\"\\u0631\\u0645\\u0648\\u0632 \\u0627\\u0644\\u0627\\u062D\\u0631\\u0641 \\u0627\\u0644\\u0631\\u0648\\u0645\\u0627\\u0646\\u064A\\u0629\",\"tooltip.copy to clipboard\":\"\\u0646\\u0633\\u062E \\u0625\\u0644\\u0649 \\u0627\\u0644\\u062D\\u0627\\u0641\\u0638\\u0629\",\"tooltip.cut to clipboard\":\"\\u0642\\u0635 \\u0625\\u0644\\u0649 \\u0627\\u0644\\u062D\\u0627\\u0641\\u0638\\u0629\",\"tooltip.paste from clipboard\":\"\\u0644\\u0635\\u0642 \\u0645\\u0646 \\u0627\\u0644\\u062D\\u0627\\u0641\\u0638\\u0629\",\"tooltip.redo\":\"\\u0627\\u0644\\u0625\\u0639\\u0627\\u062F\\u0629\",\"tooltip.toggle virtual keyboard\":\"\\u062A\\u0628\\u062F\\u064A\\u0644 \\u0644\\u0648\\u062D\\u0629 \\u0627\\u0644\\u0645\\u0641\\u0627\\u062A\\u064A\\u062D \\u0627\\u0644\\u0625\\u0641\\u062A\\u0631\\u0627\\u0636\\u064A\\u0629\",\"tooltip.undo\":\"\\u0625\\u0644\\u063A\\u0627\\u0621\",\"menu.insert matrix\":\"\\u0623\\u062F\\u062E\\u0644 \\u0627\\u0644\\u0645\\u0635\\u0641\\u0648\\u0641\\u0629\",\"menu.borders\":\"\\u0645\\u062D\\u062F\\u062F\\u0627\\u062A \\u0627\\u0644\\u0645\\u0635\\u0641\\u0648\\u0641\\u0629\",\"menu.array.add row above\":\"\\u0623\\u0636\\u0641 \\u0635\\u0641\\u064B\\u0627 \\u0628\\u0639\\u062F \\u0630\\u0644\\u0643\",\"menu.array.add row below\":\"\\u0623\\u0636\\u0641 \\u0627\\u0644\\u0635\\u0641 \\u0642\\u0628\\u0644\",\"menu.array.add column after\":\"\\u0623\\u0636\\u0641 \\u0627\\u0644\\u0639\\u0645\\u0648\\u062F \\u0628\\u0639\\u062F \\u0630\\u0644\\u0643\",\"menu.array.add column before\":\"\\u0623\\u0636\\u0641 \\u0627\\u0644\\u0639\\u0645\\u0648\\u062F \\u0642\\u0628\\u0644\",\"menu.array.delete row\":\"\\u0627\\u062D\\u0630\\u0641 \\u0635\\u0641\",\"menu.array.delete rows\":\"\\u062D\\u0630\\u0641 \\u0627\\u0644\\u0635\\u0641\\u0648\\u0641 \\u0627\\u0644\\u0645\\u062D\\u062F\\u062F\\u0629\",\"menu.array.delete column\":\"\\u062D\\u0630\\u0641 \\u0627\\u0644\\u0639\\u0645\\u0648\\u062F\",\"menu.array.delete columns\":\"\\u062D\\u0630\\u0641 \\u0627\\u0644\\u0623\\u0639\\u0645\\u062F\\u0629 \\u0627\\u0644\\u0645\\u062D\\u062F\\u062F\\u0629\",\"menu.mode\":\"\\u0648\\u0636\\u0639\",\"menu.mode-math\":\"\\u0631\\u064A\\u0627\\u0636\\u064A\\u0627\\u062A\",\"menu.mode-text\":\"\\u0646\\u0635\",\"menu.mode-latex\":\"\\u0644\\u0627\\u062A\\u0643\\u0633\",\"tooltip.blackboard\":\"\\u0633\\u0628\\u0648\\u0631\\u0629\",\"tooltip.bold\":\"\\u0639\\u0631\\u064A\\u0636\",\"tooltip.italic\":\"\\u0645\\u0627\\u0626\\u0644\",\"tooltip.fraktur\":\"\\u0641\\u0631\\u0627\\u0643\\u062A\\u0648\\u0631\",\"tooltip.script\":\"\\u0633\\u0643\\u0631\\u064A\\u0628\\u062A\",\"tooltip.caligraphic\":\"\\u0643\\u0627\\u0644\\u064A\\u062C\\u0631\\u0627\\u0641\\u064A\\u0643\",\"tooltip.typewriter\":\"\\u0622\\u0644\\u0629 \\u0643\\u0627\\u062A\\u0628\\u0629\",\"tooltip.roman-upright\":\"\\u0631\\u0648\\u0645\\u0627\\u0646\\u064A \\u0645\\u0633\\u062A\\u0642\\u064A\\u0645\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"\\u0646\\u0645\\u0637 \\u0627\\u0644\\u062E\\u0637\",\"menu.accent\":\"\\u062A\\u0634\\u0643\\u064A\\u0644\",\"menu.decoration\":\"\\u0632\\u062E\\u0631\\u0641\\u0629\",\"menu.color\":\"\\u0644\\u0648\\u0646\",\"menu.background-color\":\"\\u0627\\u0644\\u062E\\u0644\\u0641\\u064A\\u0629\",\"menu.evaluate\":\"\\u062A\\u0642\\u064A\\u064A\\u0645\",\"menu.simplify\":\"\\u062A\\u0628\\u0633\\u064A\\u0637\",\"menu.solve\":\"\\u062D\\u0644\",\"menu.solve-for\":\"\\u062D\\u0644 \\u0644\\u0640 %@\",\"menu.cut\":\"\\u0642\\u0635\",\"menu.copy\":\"\\u0646\\u0633\\u062E\",\"menu.copy-as-latex\":\"\\u0646\\u0633\\u062E \\u0643\\u0640 LaTeX\",\"menu.copy-as-ascii-math\":\"\\u0646\\u0633\\u062E \\u0643\\u0640 ASCII Math\",\"menu.copy-as-mathml\":\"\\u0646\\u0633\\u062E \\u0643\\u0640 MathML\",\"menu.paste\":\"\\u0644\\u0635\\u0642\",\"menu.select-all\":\"\\u062A\\u062D\\u062F\\u064A\\u062F \\u0627\\u0644\\u0643\\u0644\",\"color.red\":\"\\u0623\\u062D\\u0645\\u0631\",\"color.orange\":\"\\u0628\\u0631\\u062A\\u0642\\u0627\\u0644\\u064A\",\"color.yellow\":\"\\u0623\\u0635\\u0641\\u0631\",\"color.lime\":\"\\u0644\\u064A\\u0645\\u0648\\u0646\\u064A\",\"color.green\":\"\\u0623\\u062E\\u0636\\u0631\",\"color.teal\":\"\\u0633\\u0645\\u0627\\u0648\\u064A\",\"color.cyan\":\"\\u0633\\u0645\\u0627\\u0648\\u064A \\u0641\\u0627\\u062A\\u062D\",\"color.blue\":\"\\u0623\\u0632\\u0631\\u0642\",\"color.indigo\":\"\\u0646\\u064A\\u0644\\u064A\",\"color.purple\":\"\\u0628\\u0646\\u0641\\u0633\\u062C\\u064A\",\"color.magenta\":\"\\u0623\\u0631\\u062C\\u0648\\u0627\\u0646\\u064A\",\"color.black\":\"\\u0623\\u0633\\u0648\\u062F\",\"color.dark-grey\":\"\\u0631\\u0645\\u0627\\u062F\\u064A \\u063A\\u0627\\u0645\\u0642\",\"color.grey\":\"\\u0631\\u0645\\u0627\\u062F\\u064A\",\"color.light-grey\":\"\\u0631\\u0645\\u0627\\u062F\\u064A \\u0641\\u0627\\u062A\\u062D\",\"color.white\":\"\\u0623\\u0628\\u064A\\u0636\"},de:{\"keyboard.tooltip.symbols\":\"Symbole\",\"keyboard.tooltip.greek\":\"Griechische Buchstaben\",\"keyboard.tooltip.numeric\":\"Numerisch\",\"keyboard.tooltip.alphabetic\":\"R\\xF6mische Buchstaben\",\"tooltip.copy to clipboard\":\"In die Zwischenablage kopieren\",\"tooltip.redo\":\"Wiederholen\",\"tooltip.toggle virtual keyboard\":\"Virtuelle Tastatur umschalten\",\"tooltip.undo\":\"Widerrufen\",\"menu.insert matrix\":\"Matrix einf\\xFCgen\",\"menu.borders\":\"Matrixtrennzeichen\",\"menu.array.add row above\":\"Zeile hinzuf\\xFCgen nach\",\"menu.array.add row below\":\"Zeile hinzuf\\xFCgen vor\",\"menu.array.add column after\":\"Spalte hinzuf\\xFCgen nach\",\"menu.array.add column before\":\"Spalte hinzuf\\xFCgen vor\",\"menu.array.delete row\":\"Zeile l\\xF6schen\",\"menu.array.delete rows\":\"Ausgew\\xE4hlte Zeilen l\\xF6schen\",\"menu.array.delete column\":\"Spalte l\\xF6schen\",\"menu.array.delete columns\":\"Ausgew\\xE4hlte Spalten l\\xF6schen\",\"menu.mode\":\"Modus\",\"menu.mode-math\":\"Mathematik\",\"menu.mode-text\":\"Text\",\"menu.mode-latex\":\"LaTeX\",\"tooltip.blackboard\":\"Tafel\",\"tooltip.bold\":\"Fett\",\"tooltip.italic\":\"Kursiv\",\"tooltip.fraktur\":\"Fraktur\",\"tooltip.script\":\"Skript\",\"tooltip.caligraphic\":\"Kalligraphie\",\"tooltip.typewriter\":\"Schreibmaschine\",\"tooltip.roman-upright\":\"R\\xF6misch aufrecht\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"Schriftstil\",\"menu.accent\":\"Akzent\",\"menu.decoration\":\"Dekoration\",\"menu.color\":\"Farbe\",\"menu.background-color\":\"Hintergrund\",\"menu.evaluate\":\"Auswerten\",\"menu.simplify\":\"Vereinfachen\",\"menu.solve\":\"L\\xF6sen\",\"menu.solve-for\":\"L\\xF6sen f\\xFCr %@\",\"menu.cut\":\"Ausschneiden\",\"menu.copy\":\"Kopieren\",\"menu.copy-as-latex\":\"Als LaTeX kopieren\",\"menu.copy-as-ascii-math\":\"Als ASCII Math kopieren\",\"menu.copy-as-mathml\":\"Als MathML kopieren\",\"menu.paste\":\"Einf\\xFCgen\",\"menu.select-all\":\"Alles ausw\\xE4hlen\",\"color.red\":\"Rot\",\"color.orange\":\"Orange\",\"color.yellow\":\"Gelb\",\"color.lime\":\"Limette\",\"color.green\":\"Gr\\xFCn\",\"color.teal\":\"Blaugr\\xFCn\",\"color.cyan\":\"Cyan\",\"color.blue\":\"Blau\",\"color.indigo\":\"Indigo\",\"color.purple\":\"Lila\",\"color.magenta\":\"Magenta\",\"color.black\":\"Schwarz\",\"color.dark-grey\":\"Dunkelgrau\",\"color.grey\":\"Grau\",\"color.light-grey\":\"Hellgrau\",\"color.white\":\"Wei\\xDF\"},el:{\"keyboard.tooltip.symbols\":\"\\u03C3\\u03CD\\u03BC\\u03B2\\u03BF\\u03BB\\u03B1\",\"keyboard.tooltip.greek\":\"\\u03B5\\u03BB\\u03BB\\u03B7\\u03BD\\u03B9\\u03BA\\u03AC \\u03B3\\u03C1\\u03AC\\u03BC\\u03BC\\u03B1\\u03C4\\u03B1\",\"keyboard.tooltip.numeric\":\"\\u0391\\u03C1\\u03B9\\u03B8\\u03BC\\u03B7\\u03C4\\u03B9\\u03BA\\u03CC\\u03C2\",\"keyboard.tooltip.alphabetic\":\"\\u03A1\\u03C9\\u03BC\\u03B1\\u03CA\\u03BA\\u03AC \\u03B3\\u03C1\\u03AC\\u03BC\\u03BC\\u03B1\\u03C4\\u03B1\",\"tooltip.copy to clipboard\":\"\\u0391\\u03BD\\u03C4\\u03B9\\u03B3\\u03C1\\u03B1\\u03C6\\u03AE \\u03C3\\u03C4\\u03BF \\u03C0\\u03C1\\u03CC\\u03C7\\u03B5\\u03B9\\u03C1\\u03BF\",\"tooltip.redo\":\"\\u039E\\u03B1\\u03BD\\u03B1\\u03BA\\u03AC\\u03BD\\u03C9\",\"tooltip.toggle virtual keyboard\":\"\\u0395\\u03BD\\u03B1\\u03BB\\u03BB\\u03B1\\u03B3\\u03AE \\u03B5\\u03B9\\u03BA\\u03BF\\u03BD\\u03B9\\u03BA\\u03BF\\u03CD \\u03C0\\u03BB\\u03B7\\u03BA\\u03C4\\u03C1\\u03BF\\u03BB\\u03BF\\u03B3\\u03AF\\u03BF\\u03C5\",\"tooltip.undo\":\"\\u039E\\u03B5\\u03BA\\u03AC\\u03BD\\u03C9\",\"menu.insert matrix\":\"\\u0395\\u03B9\\u03C3\\u03B1\\u03B3\\u03C9\\u03B3\\u03AE \\u03BC\\u03AE\\u03C4\\u03C1\\u03B1\",\"menu.borders\":\"\\u039F\\u03C1\\u03B9\\u03BF\\u03B8\\u03AD\\u03C4\\u03B5\\u03C2 \\u03BC\\u03AE\\u03C4\\u03C1\\u03B1\",\"menu.array.add row above\":\"\\u03A0\\u03C1\\u03BF\\u03C3\\u03B8\\u03AE\\u03BA\\u03B7 \\u03C3\\u03B5\\u03B9\\u03C1\\u03AC\\u03C2 \\u03BC\\u03B5\\u03C4\\u03AC\",\"menu.array.add row below\":\"\\u03A0\\u03C1\\u03BF\\u03C3\\u03B8\\u03AE\\u03BA\\u03B7 \\u03C3\\u03B5\\u03B9\\u03C1\\u03AC\\u03C2 \\u03C0\\u03C1\\u03B9\\u03BD\",\"menu.array.add column after\":\"\\u03A0\\u03C1\\u03BF\\u03C3\\u03B8\\u03AE\\u03BA\\u03B7 \\u03C3\\u03C4\\u03AE\\u03BB\\u03B7\\u03C2 \\u03BC\\u03B5\\u03C4\\u03AC\",\"menu.array.add column before\":\"\\u03A0\\u03C1\\u03BF\\u03C3\\u03B8\\u03AE\\u03BA\\u03B7 \\u03C3\\u03C4\\u03AE\\u03BB\\u03B7\\u03C2 \\u03C0\\u03C1\\u03B9\\u03BD\",\"menu.array.delete row\":\"\\u0394\\u03B9\\u03B1\\u03B3\\u03C1\\u03B1\\u03C6\\u03AE \\u03C3\\u03B5\\u03B9\\u03C1\\u03AC\\u03C2\",\"menu.array.delete rows\":\"\\u0394\\u03B9\\u03B1\\u03B3\\u03C1\\u03B1\\u03C6\\u03AE \\u03B5\\u03C0\\u03B9\\u03BB\\u03B5\\u03B3\\u03BC\\u03AD\\u03BD\\u03C9\\u03BD \\u03C3\\u03B5\\u03B9\\u03C1\\u03CE\\u03BD\",\"menu.array.delete column\":\"\\u0394\\u03B9\\u03B1\\u03B3\\u03C1\\u03B1\\u03C6\\u03AE \\u03C3\\u03C4\\u03AE\\u03BB\\u03B7\\u03C2\",\"menu.array.delete columns\":\"\\u0394\\u03B9\\u03B1\\u03B3\\u03C1\\u03B1\\u03C6\\u03AE \\u03B5\\u03C0\\u03B9\\u03BB\\u03B5\\u03B3\\u03BC\\u03AD\\u03BD\\u03C9\\u03BD \\u03C3\\u03C4\\u03B7\\u03BB\\u03CE\\u03BD\",\"menu.mode\":\"\\u039B\\u03B5\\u03B9\\u03C4\\u03BF\\u03C5\\u03C1\\u03B3\\u03AF\\u03B1\",\"menu.mode-math\":\"\\u039C\\u03B1\\u03B8\\u03B7\\u03BC\\u03B1\\u03C4\\u03B9\\u03BA\\u03AC\",\"menu.mode-text\":\"\\u039A\\u03B5\\u03AF\\u03BC\\u03B5\\u03BD\\u03BF\",\"menu.mode-latex\":\"LaTeX\",\"tooltip.blackboard\":\"\\u03A0\\u03AF\\u03BD\\u03B1\\u03BA\\u03B1\\u03C2\",\"tooltip.bold\":\"\\u0388\\u03BD\\u03C4\\u03BF\\u03BD\\u03B7\",\"tooltip.italic\":\"\\u03A0\\u03BB\\u03AC\\u03B3\\u03B9\\u03B1\",\"tooltip.fraktur\":\"\\u03A6\\u03C1\\u03AC\\u03BA\\u03C4\\u03BF\\u03C5\\u03C1\",\"tooltip.script\":\"\\u03A3\\u03B5\\u03BD\\u03AC\\u03C1\\u03B9\\u03BF\",\"tooltip.caligraphic\":\"\\u039A\\u03B1\\u03BB\\u03BB\\u03B9\\u03B3\\u03C1\\u03B1\\u03C6\\u03B9\\u03BA\\u03AE\",\"tooltip.typewriter\":\"\\u039C\\u03B7\\u03C7\\u03B1\\u03BD\\u03AE \\u03B3\\u03C1\\u03B1\\u03C6\\u03AE\\u03C2\",\"tooltip.roman-upright\":\"\\u03A1\\u03C9\\u03BC\\u03B1\\u03CA\\u03BA\\u03CC \\u039A\\u03B1\\u03C4\\u03B1\\u03BA\\u03CC\\u03C1\\u03C5\\u03C6\\u03BF\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"\\u03A3\\u03C4\\u03C5\\u03BB \\u03B3\\u03C1\\u03B1\\u03BC\\u03BC\\u03B1\\u03C4\\u03BF\\u03C3\\u03B5\\u03B9\\u03C1\\u03AC\\u03C2\",\"menu.accent\":\"\\u03A4\\u03CC\\u03BD\\u03BF\\u03C2\",\"menu.decoration\":\"\\u0394\\u03B9\\u03B1\\u03BA\\u03CC\\u03C3\\u03BC\\u03B7\\u03C3\\u03B7\",\"menu.color\":\"\\u03A7\\u03C1\\u03CE\\u03BC\\u03B1\",\"menu.background-color\":\"\\u03A7\\u03C1\\u03CE\\u03BC\\u03B1 \\u03C6\\u03CC\\u03BD\\u03C4\\u03BF\\u03C5\",\"menu.evaluate\":\"\\u0391\\u03BE\\u03B9\\u03BF\\u03BB\\u03CC\\u03B3\\u03B7\\u03C3\\u03B7\",\"menu.simplify\":\"\\u0391\\u03C0\\u03BB\\u03BF\\u03C0\\u03BF\\u03AF\\u03B7\\u03C3\\u03B7\",\"menu.solve\":\"\\u039B\\u03CD\\u03C3\\u03B7\",\"menu.solve-for\":\"\\u039B\\u03CD\\u03C3\\u03B7 \\u03B3\\u03B9\\u03B1 %@\",\"menu.cut\":\"\\u0391\\u03C0\\u03BF\\u03BA\\u03BF\\u03C0\\u03AE\",\"menu.copy\":\"\\u0391\\u03BD\\u03C4\\u03B9\\u03B3\\u03C1\\u03B1\\u03C6\\u03AE\",\"menu.copy-as-latex\":\"\\u0391\\u03BD\\u03C4\\u03B9\\u03B3\\u03C1\\u03B1\\u03C6\\u03AE \\u03C9\\u03C2 LaTeX\",\"menu.copy-as-ascii-math\":\"\\u0391\\u03BD\\u03C4\\u03B9\\u03B3\\u03C1\\u03B1\\u03C6\\u03AE \\u03C9\\u03C2 ASCII Math\",\"menu.copy-as-mathml\":\"\\u0391\\u03BD\\u03C4\\u03B9\\u03B3\\u03C1\\u03B1\\u03C6\\u03AE \\u03C9\\u03C2 MathML\",\"menu.paste\":\"\\u0395\\u03C0\\u03B9\\u03BA\\u03CC\\u03BB\\u03BB\\u03B7\\u03C3\\u03B7\",\"menu.select-all\":\"\\u0395\\u03C0\\u03B9\\u03BB\\u03BF\\u03B3\\u03AE \\u03CC\\u03BB\\u03C9\\u03BD\",\"color.red\":\"\\u039A\\u03CC\\u03BA\\u03BA\\u03B9\\u03BD\\u03BF\",\"color.orange\":\"\\u03A0\\u03BF\\u03C1\\u03C4\\u03BF\\u03BA\\u03B1\\u03BB\\u03AF\",\"color.yellow\":\"\\u039A\\u03AF\\u03C4\\u03C1\\u03B9\\u03BD\\u03BF\",\"color.lime\":\"\\u039B\\u03B1\\u03C7\\u03B1\\u03BD\\u03AF\",\"color.green\":\"\\u03A0\\u03C1\\u03AC\\u03C3\\u03B9\\u03BD\\u03BF\",\"color.teal\":\"\\u039A\\u03C5\\u03B1\\u03BD\\u03CC\",\"color.cyan\":\"\\u0393\\u03B1\\u03BB\\u03AC\\u03B6\\u03B9\\u03BF\",\"color.blue\":\"\\u039C\\u03C0\\u03BB\\u03B5\",\"color.indigo\":\"\\u0399\\u03BD\\u03B4\\u03B9\\u03BA\\u03CC\",\"color.purple\":\"\\u039C\\u03C9\\u03B2\",\"color.magenta\":\"\\u039C\\u03B1\\u03C4\\u03B6\\u03AD\\u03BD\\u03C4\\u03B1\",\"color.black\":\"\\u039C\\u03B1\\u03CD\\u03C1\\u03BF\",\"color.dark-grey\":\"\\u03A3\\u03BA\\u03BF\\u03CD\\u03C1\\u03BF \\u0393\\u03BA\\u03C1\\u03B9\",\"color.grey\":\"\\u0393\\u03BA\\u03C1\\u03B9\",\"color.light-grey\":\"\\u0391\\u03BD\\u03BF\\u03B9\\u03C7\\u03C4\\u03CC \\u0393\\u03BA\\u03C1\\u03B9\",\"color.white\":\"\\u039B\\u03B5\\u03C5\\u03BA\\u03CC\"},es:{\"keyboard.tooltip.symbols\":\"S\\xEDmbolos\",\"keyboard.tooltip.greek\":\"Letras griegas\",\"keyboard.tooltip.numeric\":\"Num\\xE9rico\",\"keyboard.tooltip.alphabetic\":\"Letras romanas\",\"tooltip.copy to clipboard\":\"Copiar al portapapeles\",\"tooltip.redo\":\"Rehacer\",\"tooltip.toggle virtual keyboard\":\"Alternar teclado virtual\",\"tooltip.undo\":\"Deshacer\",\"menu.insert matrix\":\"A\\xF1adir Matriz\",\"menu.borders\":\"Delimitadores de Matriz\",\"menu.array.add row above\":\"A\\xF1adir L\\xEDnea Antes\",\"menu.array.add row below\":\"A\\xF1adir L\\xEDnea Despues\",\"menu.array.add column after\":\"A\\xF1adir Columna Despues\",\"menu.array.add column before\":\"A\\xF1adir Columna Antes\",\"menu.array.delete row\":\"Borrar L\\xEDnea\",\"menu.array.delete rows\":\"Borrar L\\xEDneas Seleccionadas\",\"menu.array.delete column\":\"Borrar Columna\",\"menu.array.delete columns\":\"Borrar Columnas Seleccionadas\",\"menu.mode\":\"Modo\",\"menu.mode-math\":\"Matem\\xE1ticas\",\"menu.mode-text\":\"Texto\",\"menu.mode-latex\":\"LaTeX\",\"tooltip.blackboard\":\"Pizarra\",\"tooltip.bold\":\"Negrita\",\"tooltip.italic\":\"Cursiva\",\"tooltip.fraktur\":\"Fraktur\",\"tooltip.script\":\"Script\",\"tooltip.caligraphic\":\"Caligr\\xE1fico\",\"tooltip.typewriter\":\"M\\xE1quina de escribir\",\"tooltip.roman-upright\":\"Romano Vertical\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"Estilo de fuente\",\"menu.accent\":\"Acento\",\"menu.decoration\":\"Decoraci\\xF3n\",\"menu.color\":\"Color\",\"menu.background-color\":\"Fondo\",\"menu.evaluate\":\"Evaluar\",\"menu.simplify\":\"Simplificar\",\"menu.solve\":\"Resolver\",\"menu.solve-for\":\"Resolver para %@\",\"menu.cut\":\"Cortar\",\"menu.copy\":\"Copiar\",\"menu.copy-as-latex\":\"Copiar como LaTeX\",\"menu.copy-as-ascii-math\":\"Copiar como ASCII Math\",\"menu.copy-as-mathml\":\"Copiar como MathML\",\"menu.paste\":\"Pegar\",\"menu.select-all\":\"Seleccionar todo\",\"color.red\":\"Rojo\",\"color.orange\":\"Naranja\",\"color.yellow\":\"Amarillo\",\"color.lime\":\"Lima\",\"color.green\":\"Verde\",\"color.teal\":\"Verde azulado\",\"color.cyan\":\"Cian\",\"color.blue\":\"Azul\",\"color.indigo\":\"\\xCDndigo\",\"color.purple\":\"Morado\",\"color.magenta\":\"Magenta\",\"color.black\":\"Negro\",\"color.dark-grey\":\"Gris oscuro\",\"color.grey\":\"Gris\",\"color.light-grey\":\"Gris claro\",\"color.white\":\"Blanco\"},fr:{\"keyboard.tooltip.symbols\":\"Symboles\",\"keyboard.tooltip.greek\":\"Lettres grecques\",\"keyboard.tooltip.numeric\":\"Num\\xE9rique\",\"keyboard.tooltip.alphabetic\":\"Lettres romaines\",\"tooltip.menu\":\"Menu\",\"tooltip.copy to clipboard\":\"Copier dans le presse-papiers\",\"tooltip.redo\":\"R\\xE9tablir\",\"tooltip.toggle virtual keyboard\":\"Afficher/Masquer le clavier virtuel\",\"tooltip.undo\":\"Annuler\",\"menu.insert matrix\":\"Ins\\xE9rer une Matrice\",\"menu.borders\":\"Bords\",\"menu.array.add row above\":\"Ajouter une Ligne Avant\",\"menu.array.add row below\":\"Ajouter une Ligne Apr\\xE8s\",\"menu.array.add column before\":\"Ajouter une Colonne Avant\",\"menu.array.add column after\":\"Ajouter une Colonne Apr\\xE8s\",\"menu.array.delete row\":\"Enlever une Ligne\",\"menu.array.delete rows\":\"Enlever les Lignes S\\xE9lection\\xE9es\",\"menu.array.delete column\":\"Enlever une Colone\",\"menu.array.delete columns\":\"Enlever les Colonnes S\\xE9lection\\xE9es\",\"menu.mode\":\"Mode\",\"menu.mode-math\":\"Math\",\"menu.mode-text\":\"Text\",\"menu.mode-latex\":\"LaTeX\",\"tooltip.blackboard\":\"Tableau noir\",\"tooltip.bold\":\"Gras\",\"tooltip.italic\":\"Italique\",\"tooltip.fraktur\":\"Fraktur\",\"tooltip.script\":\"Script\",\"tooltip.caligraphic\":\"Calligraphique\",\"tooltip.typewriter\":\"Machine \\xE0 \\xE9crire\",\"tooltip.roman-upright\":\"Romain droit\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"Style de police\",\"menu.accent\":\"Accent\",\"menu.decoration\":\"D\\xE9coration\",\"menu.color\":\"Couleur\",\"menu.background-color\":\"Arri\\xE8re-plan\",\"menu.evaluate\":\"\\xC9valuer\",\"menu.simplify\":\"Simplifier\",\"menu.solve\":\"R\\xE9soudre\",\"menu.solve-for\":\"R\\xE9soudre pour %@\",\"menu.cut\":\"Couper\",\"menu.copy\":\"Copier\",\"menu.copy-as-latex\":\"Copier en LaTeX\",\"menu.copy-as-ascii-math\":\"Copier en ASCII Math\",\"menu.copy-as-mathml\":\"Copier en MathML\",\"menu.paste\":\"Coller\",\"menu.select-all\":\"S\\xE9lectionner tout\",\"color.red\":\"Rouge\",\"color.orange\":\"Orange\",\"color.yellow\":\"Jaune\",\"color.lime\":\"Citron vert\",\"color.green\":\"Vert\",\"color.teal\":\"Turquoise\",\"color.cyan\":\"Cyan\",\"color.blue\":\"Bleu\",\"color.indigo\":\"Indigo\",\"color.purple\":\"Violet\",\"color.magenta\":\"Magenta\",\"color.black\":\"Noir\",\"color.dark-grey\":\"Gris fonc\\xE9\",\"color.grey\":\"Gris\",\"color.light-grey\":\"Gris clair\",\"color.white\":\"Blanc\"},he:{\"keyboard.tooltip.symbols\":\"\\u05E1\\u05DE\\u05DC\\u05D9\\u05DD\",\"keyboard.tooltip.greek\":\"\\u05D0\\u05D5\\u05EA\\u05D9\\u05D5\\u05EA \\u05D9\\u05D5\\u05D5\\u05E0\\u05D9\\u05D5\\u05EA\",\"keyboard.tooltip.numeric\":\"\\u05DE\\u05E1\\u05E4\\u05E8\\u05D9\",\"keyboard.tooltip.alphabetic\":\"\\u05DE\\u05DB\\u05EA\\u05D1\\u05D9\\u05DD \\u05E8\\u05D5\\u05DE\\u05D9\\u05D9\\u05DD\",\"tooltip.copy to clipboard\":\"\\u05D4\\u05E2\\u05EA\\u05E7 \\u05DC\\u05DC\\u05D5\\u05D7\",\"tooltip.redo\":\"\\u05DC\\u05B7\\u05E2\\u05B2\\u05E9\\u05C2\\u05D5\\u05B9\\u05EA \\u05E9\\u05C1\\u05D5\\u05BC\\u05D1\",\"tooltip.toggle virtual keyboard\":\"\\u05D4\\u05D7\\u05DC\\u05E3 \\u05D0\\u05EA \\u05D4\\u05DE\\u05E7\\u05DC\\u05D3\\u05EA \\u05D4\\u05D5\\u05D5\\u05D9\\u05E8\\u05D8\\u05D5\\u05D0\\u05DC\\u05D9\\u05EA\",\"tooltip.undo\":\"\\u05DC\\u05D1\\u05D8\\u05DC\",\"menu.insert matrix\":\"\\u05D4\\u05DB\\u05E0\\u05E1 \\u05DE\\u05D8\\u05E8\\u05D9\\u05E7\\u05E1\",\"menu.borders\":\"\\u05DE\\u05E4\\u05E8\\u05D9\\u05D3\\u05D9 \\u05DE\\u05D8\\u05E8\\u05D9\\u05E7\\u05E1\",\"menu.array.add row above\":\"\\u05D4\\u05D5\\u05E1\\u05E3 \\u05E9\\u05D5\\u05E8\\u05D4 \\u05D0\\u05D7\\u05E8\\u05D9\",\"menu.array.add row below\":\"\\u05D4\\u05D5\\u05E1\\u05E3 \\u05E9\\u05D5\\u05E8\\u05D4 \\u05DC\\u05E4\\u05E0\\u05D9\",\"menu.array.add column after\":\"\\u05D4\\u05D5\\u05E1\\u05E3 \\u05E2\\u05DE\\u05D5\\u05D3\\u05D4 \\u05D0\\u05D7\\u05E8\\u05D9\",\"menu.array.add column before\":\"\\u05D4\\u05D5\\u05E1\\u05E3 \\u05E2\\u05DE\\u05D5\\u05D3\\u05D4 \\u05DC\\u05E4\\u05E0\\u05D9\",\"menu.array.delete row\":\"\\u05DE\\u05D7\\u05E7 \\u05E9\\u05D5\\u05E8\\u05D4\",\"menu.array.delete rows\":\"\\u05DE\\u05D7\\u05E7 \\u05E9\\u05D5\\u05E8\\u05D5\\u05EA \\u05E9\\u05E0\\u05D1\\u05D7\\u05E8\\u05D5\",\"menu.array.delete column\":\"\\u05DE\\u05D7\\u05E7 \\u05E2\\u05DE\\u05D5\\u05D3\\u05D4\",\"menu.array.delete columns\":\"\\u05DE\\u05D7\\u05E7 \\u05E2\\u05DE\\u05D5\\u05D3\\u05D5\\u05EA \\u05E9\\u05E0\\u05D1\\u05D7\\u05E8\\u05D5\",\"menu.mode\":\"\\u05DE\\u05E6\\u05D1\",\"menu.mode-math\":\"\\u05DE\\u05EA\\u05DE\\u05D8\\u05D9\\u05E7\\u05D4\",\"menu.mode-text\":\"\\u05D8\\u05E7\\u05E1\\u05D8\",\"menu.mode-latex\":\"LaTeX\",\"tooltip.blackboard\":\"\\u05DC\\u05D5\\u05D7 \\u05E9\\u05D7\\u05D5\\u05E8\",\"tooltip.bold\":\"\\u05DE\\u05D5\\u05D3\\u05D2\\u05E9\",\"tooltip.italic\":\"\\u05E0\\u05D8\\u05D5\\u05D9\",\"tooltip.fraktur\":\"\\u05E4\\u05E8\\u05E7\\u05D8\\u05D5\\u05E8\",\"tooltip.script\":\"\\u05DB\\u05EA\\u05D1\",\"tooltip.caligraphic\":\"\\u05E7\\u05DC\\u05D9\\u05D2\\u05E8\\u05E4\\u05D9\",\"tooltip.typewriter\":\"\\u05DE\\u05DB\\u05D5\\u05E0\\u05EA \\u05DB\\u05EA\\u05D9\\u05D1\\u05D4\",\"tooltip.roman-upright\":\"\\u05E8\\u05D5\\u05DE\\u05D9 \\u05D9\\u05E9\\u05E8\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"\\u05E1\\u05D2\\u05E0\\u05D5\\u05DF \\u05D2\\u05D5\\u05E4\\u05DF\",\"menu.accent\":\"\\u05E6\\u05DC\\u05D9\\u05DC\",\"menu.decoration\":\"\\u05E7\\u05D9\\u05E9\\u05D5\\u05D8\",\"menu.color\":\"\\u05E6\\u05D1\\u05E2\",\"menu.background-color\":\"\\u05E8\\u05E7\\u05E2\",\"menu.evaluate\":\"\\u05D7\\u05E9\\u05D1\",\"menu.simplify\":\"\\u05E4\\u05E9\\u05D8\",\"menu.solve\":\"\\u05E4\\u05EA\\u05D5\\u05E8\",\"menu.solve-for\":\"\\u05E4\\u05EA\\u05D5\\u05E8 \\u05E2\\u05D1\\u05D5\\u05E8 %@\",\"menu.cut\":\"\\u05D2\\u05D6\\u05D5\\u05E8\",\"menu.copy\":\"\\u05D4\\u05E2\\u05EA\\u05E7\",\"menu.copy-as-latex\":\"\\u05D4\\u05E2\\u05EA\\u05E7 \\u05DB\\u05BELaTeX\",\"menu.copy-as-ascii-math\":\"\\u05D4\\u05E2\\u05EA\\u05E7 \\u05DB\\u05BEASCII Math\",\"menu.copy-as-mathml\":\"\\u05D4\\u05E2\\u05EA\\u05E7 \\u05DB\\u05BEMathML\",\"menu.paste\":\"\\u05D4\\u05D3\\u05D1\\u05E7\",\"menu.select-all\":\"\\u05D1\\u05D7\\u05E8 \\u05D4\\u05DB\\u05DC\",\"color.red\":\"\\u05D0\\u05D3\\u05D5\\u05DD\",\"color.orange\":\"\\u05DB\\u05EA\\u05D5\\u05DD\",\"color.yellow\":\"\\u05E6\\u05D4\\u05D5\\u05D1\",\"color.lime\":\"\\u05D9\\u05E8\\u05D5\\u05E7 \\u05DC\\u05D9\\u05D9\\u05DD\",\"color.green\":\"\\u05D9\\u05E8\\u05D5\\u05E7\",\"color.teal\":\"\\u05D8\\u05D9\\u05DC\",\"color.cyan\":\"\\u05E6\\u05D9\\u05D0\\u05DF\",\"color.blue\":\"\\u05DB\\u05D7\\u05D5\\u05DC\",\"color.indigo\":\"\\u05D0\\u05D9\\u05E0\\u05D3\\u05D9\\u05D2\\u05D5\",\"color.purple\":\"\\u05E1\\u05D2\\u05D5\\u05DC\",\"color.magenta\":\"\\u05DE\\u05D2\\u05E0\\u05D8\\u05D4\",\"color.black\":\"\\u05E9\\u05D7\\u05D5\\u05E8\",\"color.dark-grey\":\"\\u05D0\\u05E4\\u05D5\\u05E8 \\u05DB\\u05D4\\u05D4\",\"color.grey\":\"\\u05D0\\u05E4\\u05D5\\u05E8\",\"color.light-grey\":\"\\u05D0\\u05E4\\u05D5\\u05E8 \\u05D1\\u05D4\\u05D9\\u05E8\",\"color.white\":\"\\u05DC\\u05D1\\u05DF\"},it:{\"keyboard.tooltip.symbols\":\"Simboli\",\"keyboard.tooltip.greek\":\"Lettere Greche\",\"keyboard.tooltip.numeric\":\"Numerico\",\"keyboard.tooltip.alphabetic\":\"Lettere Romane\",\"tooltip.copy to clipboard\":\"Copia negli appunti\",\"tooltip.cut to clipboard\":\"Taglia negli appunti\",\"tooltip.paste from clipboard\":\"Incolla dagli appunti\",\"tooltip.redo\":\"Ripeti\",\"tooltip.toggle virtual keyboard\":\"Attiva/Disattiva Tastiera Virtuale\",\"tooltip.menu\":\"Menu\",\"tooltip.undo\":\"Annulla\",\"menu.borders\":\"Bordi\",\"menu.insert matrix\":\"Inserisci Matrice\",\"menu.array.add row above\":\"Aggiungi Riga Prima\",\"menu.array.add row below\":\"Aggiungi Riga Dopo\",\"menu.array.add column after\":\"Aggiungi Colonna Dopo\",\"menu.array.add column before\":\"Aggiungi Colonna Prima\",\"menu.array.delete row\":\"Elimina Riga\",\"menu.array.delete rows\":\"Elimina Righe Selezionate\",\"menu.array.delete column\":\"Elimina Colonna\",\"menu.array.delete columns\":\"Elimina Colonne Selezionate\",\"menu.mode\":\"Modalit\\xE0\",\"menu.mode-math\":\"Matematica\",\"menu.mode-text\":\"Testo\",\"menu.mode-latex\":\"LaTeX\",\"menu.insert\":\"Inserisci\",\"menu.insert.abs\":\"Valore Assoluto\",\"menu.insert.abs-template\":\"\\\\left|x\\\\right|\",\"menu.insert.nth-root\":\"Radice n-esima\",\"menu.insert.nth-root-template\":\"\\\\sqrt[n]{x}\",\"menu.insert.log-base\":\"Logaritmo in base a\",\"menu.insert.log-base-template\":\"\\\\log_a(x)\",\"menu.insert.heading-calculus\":\"Calcolo\",\"menu.insert.derivative\":\"Derivata\",\"menu.insert.derivative-template\":\"\\\\dfrac{\\\\mathrm{d}}{\\\\mathrm{d}x}f(x)\\\\bigm|_{x=a}\",\"menu.insert.nth-derivative\":\"Derivata n-esima\",\"menu.insert.nth-derivative-template\":\"\\\\dfrac{\\\\mathrm{d}^n}{\\\\mathrm{d}x^n}f(x)\\\\bigm|_{x=a}\",\"menu.insert.integral\":\"Integrale\",\"menu.insert.integral-template\":\"$\\\\int_a^b f(x)\\\\,\\\\mathrm{d}x$\",\"menu.insert.sum\":\"Somma\",\"menu.insert.sum-template\":\"$\\\\sum_{i=1}^n x_i$\",\"menu.insert.product\":\"Prodotto\",\"menu.insert.product-template\":\"\\\\prod_{i=1}^n x_i\",\"menu.insert.heading-complex-numbers\":\"Numeri Complessi\",\"menu.insert.modulus\":\"Modulo\",\"menu.insert.modulus-template\":\"\\\\lvert z \\\\rvert\",\"menu.insert.argument\":\"Argomento\",\"menu.insert.argument-template\":\"\\\\arg(z)\",\"menu.insert.real-part\":\"Parte Reale\",\"menu.insert.real-part-template\":\"\\\\Re(z)\",\"menu.insert.imaginary-part\":\"Parte Immaginaria\",\"menu.insert.imaginary-part-template\":\"\\\\Im(z)\",\"menu.insert.conjugate\":\"Coniugato\",\"menu.insert.conjugate-template\":\"\\\\overline{z}\",\"tooltip.blackboard\":\"Lavagna\",\"tooltip.bold\":\"Grassetto\",\"tooltip.italic\":\"Corsivo\",\"tooltip.fraktur\":\"Fraktur\",\"tooltip.script\":\"Script\",\"tooltip.caligraphic\":\"Calligrafico\",\"tooltip.typewriter\":\"Macchina da Scrivere\",\"tooltip.roman-upright\":\"Romano Dritto\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"Stile del Carattere\",\"menu.accent\":\"Accento\",\"menu.decoration\":\"Decorazione\",\"menu.color\":\"Colore\",\"menu.background-color\":\"Sfondo\",\"menu.evaluate\":\"Valuta\",\"menu.simplify\":\"Semplifica\",\"menu.solve\":\"Risolvi\",\"menu.solve-for\":\"Risolvi per %@\",\"menu.cut\":\"Taglia\",\"menu.copy\":\"Copia\",\"menu.copy-as-latex\":\"Copia come LaTeX\",\"menu.copy-as-ascii-math\":\"Copia come ASCII Math\",\"menu.copy-as-mathml\":\"Copia come MathML\",\"menu.paste\":\"Incolla\",\"menu.select-all\":\"Seleziona Tutto\",\"color.red\":\"Rosso\",\"color.orange\":\"Arancione\",\"color.yellow\":\"Giallo\",\"color.lime\":\"Lime\",\"color.green\":\"Verde\",\"color.teal\":\"Verde Acqua\",\"color.cyan\":\"Ciano\",\"color.blue\":\"Blu\",\"color.indigo\":\"Indaco\",\"color.purple\":\"Viola\",\"color.magenta\":\"Magenta\",\"color.black\":\"Nero\",\"color.dark-grey\":\"Grigio Scuro\",\"color.grey\":\"Grigio\",\"color.light-grey\":\"Grigio Chiaro\",\"color.white\":\"Bianco\"},ja:{\"keyboard.tooltip.symbols\":\"\\u30B7\\u30F3\\u30DC\\u30EB\",\"keyboard.tooltip.greek\":\"\\u30AE\\u30EA\\u30B7\\u30E3\\u6587\\u5B57\",\"keyboard.tooltip.numeric\":\"\\u6570\\u5024\",\"keyboard.tooltip.alphabetic\":\"\\u30ED\\u30FC\\u30DE\\u5B57\",\"tooltip.menu\":\"\\u30E1\\u30CB\\u30E5\\u30FC\",\"tooltip.copy to clipboard\":\"\\u30AF\\u30EA\\u30C3\\u30D7\\u30DC\\u30FC\\u30C9\\u306B\\u30B3\\u30D4\\u30FC\",\"tooltip.redo\":\"\\u3084\\u308A\\u76F4\\u3057\",\"tooltip.toggle virtual keyboard\":\"\\u4EEE\\u60F3\\u30AD\\u30FC\\u30DC\\u30FC\\u30C9\\u306E\\u5207\\u308A\\u66FF\\u3048\",\"tooltip.undo\":\"\\u5143\\u306B\\u623B\\u3059\",\"menu.insert matrix\":\"\\u30DE\\u30C8\\u30EA\\u30C3\\u30AF\\u30B9\\u3092\\u633F\\u5165\",\"menu.borders\":\"\\u884C\\u5217\\u533A\\u5207\\u308A\\u6587\\u5B57\",\"menu.array.add row above\":\"\\u5F8C\\u306B\\u884C\\u3092\\u8FFD\\u52A0\",\"menu.array.add row below\":\"\\u524D\\u306B\\u884C\\u3092\\u8FFD\\u52A0\",\"menu.array.add column after\":\"\\u5F8C\\u306B\\u5217\\u3092\\u8FFD\\u52A0\",\"menu.array.add column before\":\"\\u524D\\u306B\\u5217\\u3092\\u8FFD\\u52A0\",\"menu.array.delete row\":\"\\u884C\\u3092\\u524A\\u9664\",\"menu.array.delete rows\":\"\\u9078\\u629E\\u3057\\u305F\\u884C\\u3092\\u524A\\u9664\\u3059\\u308B\",\"menu.array.delete column\":\"\\u5217\\u3092\\u524A\\u9664\",\"menu.array.delete columns\":\"\\u9078\\u629E\\u3057\\u305F\\u5217\\u3092\\u524A\\u9664\\u3059\\u308B\",\"menu.mode\":\"\\u30E2\\u30FC\\u30C9\",\"menu.mode-math\":\"\\u6570\\u5F0F\",\"menu.mode-text\":\"\\u30C6\\u30AD\\u30B9\\u30C8\",\"menu.mode-latex\":\"LaTeX\",\"tooltip.blackboard\":\"\\u9ED2\\u677F\",\"tooltip.bold\":\"\\u592A\\u5B57\",\"tooltip.italic\":\"\\u30A4\\u30BF\\u30EA\\u30C3\\u30AF\",\"tooltip.fraktur\":\"\\u30D5\\u30E9\\u30AF\\u30C8\\u30A5\\u30FC\\u30EB\",\"tooltip.script\":\"\\u30B9\\u30AF\\u30EA\\u30D7\\u30C8\",\"tooltip.caligraphic\":\"\\u30AB\\u30EA\\u30B0\\u30E9\\u30D5\\u30A3\\u30C3\\u30AF\",\"tooltip.typewriter\":\"\\u30BF\\u30A4\\u30D7\\u30E9\\u30A4\\u30BF\\u30FC\",\"tooltip.roman-upright\":\"\\u30ED\\u30FC\\u30DE\\u76F4\\u7ACB\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"\\u30D5\\u30A9\\u30F3\\u30C8\\u30B9\\u30BF\\u30A4\\u30EB\",\"menu.accent\":\"\\u30A2\\u30AF\\u30BB\\u30F3\\u30C8\",\"menu.decoration\":\"\\u88C5\\u98FE\",\"menu.color\":\"\\u8272\",\"menu.background-color\":\"\\u80CC\\u666F\",\"menu.evaluate\":\"\\u8A55\\u4FA1\",\"menu.simplify\":\"\\u7C21\\u7565\\u5316\",\"menu.solve\":\"\\u89E3\\u304F\",\"menu.solve-for\":\"%@ \\u3092\\u89E3\\u304F\",\"menu.cut\":\"\\u5207\\u308A\\u53D6\\u308A\",\"menu.copy\":\"\\u30B3\\u30D4\\u30FC\",\"menu.copy-as-latex\":\"LaTeX\\u3068\\u3057\\u3066\\u30B3\\u30D4\\u30FC\",\"menu.copy-as-ascii-math\":\"ASCII Math\\u3068\\u3057\\u3066\\u30B3\\u30D4\\u30FC\",\"menu.copy-as-mathml\":\"MathML\\u3068\\u3057\\u3066\\u30B3\\u30D4\\u30FC\",\"menu.paste\":\"\\u8CBC\\u308A\\u4ED8\\u3051\",\"menu.select-all\":\"\\u3059\\u3079\\u3066\\u9078\\u629E\",\"color.red\":\"\\u8D64\",\"color.orange\":\"\\u30AA\\u30EC\\u30F3\\u30B8\",\"color.yellow\":\"\\u9EC4\\u8272\",\"color.lime\":\"\\u30E9\\u30A4\\u30E0\",\"color.green\":\"\\u7DD1\",\"color.teal\":\"\\u30C6\\u30A3\\u30FC\\u30EB\",\"color.cyan\":\"\\u30B7\\u30A2\\u30F3\",\"color.blue\":\"\\u9752\",\"color.indigo\":\"\\u30A4\\u30F3\\u30C7\\u30A3\\u30B4\",\"color.purple\":\"\\u7D2B\",\"color.magenta\":\"\\u30DE\\u30BC\\u30F3\\u30BF\",\"color.black\":\"\\u9ED2\",\"color.dark-grey\":\"\\u6FC3\\u3044\\u30B0\\u30EC\\u30FC\",\"color.grey\":\"\\u30B0\\u30EC\\u30FC\",\"color.light-grey\":\"\\u8584\\u3044\\u30B0\\u30EC\\u30FC\",\"color.white\":\"\\u767D\"},ko:{\"keyboard.tooltip.symbols\":\"\\uAE30\\uD638\",\"keyboard.tooltip.greek\":\"\\uADF8\\uB9AC\\uC2A4 \\uBB38\\uC790\",\"keyboard.tooltip.numeric\":\"\\uC22B\\uC790\",\"keyboard.tooltip.alphabetic\":\"\\uB85C\\uB9C8 \\uBB38\\uC790\",\"tooltip.copy to clipboard\":\"\\uD074\\uB9BD \\uBCF4\\uB4DC\\uC5D0 \\uBCF5\\uC0AC\",\"tooltip.redo\":\"\\uB2E4\\uC2DC \\uD558\\uB2E4\",\"tooltip.toggle virtual keyboard\":\"\\uAC00\\uC0C1 \\uD0A4\\uBCF4\\uB4DC \\uC804\\uD658\",\"tooltip.undo\":\"\\uC2E4\\uD589 \\uCDE8\\uC18C\",\"menu.insert matrix\":\"\\uB9E4\\uD2B8\\uB9AD\\uC2A4 \\uC0BD\\uC785\",\"menu.borders\":\"\\uD589\\uB82C \\uAD6C\\uBD84 \\uAE30\\uD638\",\"menu.array.add row above\":\"\\uB4A4\\uC5D0 \\uD589 \\uCD94\\uAC00\",\"menu.array.add row below\":\"\\uC55E\\uC5D0 \\uD589 \\uCD94\\uAC00\",\"menu.array.add column after\":\"\\uB4A4\\uC5D0 \\uC5F4 \\uCD94\\uAC00\",\"menu.array.add column before\":\"\\uC55E\\uC5D0 \\uC5F4 \\uCD94\\uAC00\",\"menu.array.delete row\":\"\\uD589 \\uC0AD\\uC81C\",\"menu.array.delete rows\":\"\\uC120\\uD0DD\\uD55C \\uD589 \\uC0AD\\uC81C\",\"menu.array.delete column\":\"\\uC5F4 \\uC0AD\\uC81C\",\"menu.array.delete columns\":\"\\uC120\\uD0DD\\uD55C \\uC5F4 \\uC0AD\\uC81C\",\"menu.mode\":\"\\u30E2\\u30FC\\u30C9\",\"menu.mode-math\":\"\\u6570\\u5F0F\",\"menu.mode-text\":\"\\u30C6\\u30AD\\u30B9\\u30C8\",\"menu.mode-latex\":\"LaTeX\",\"tooltip.blackboard\":\"\\uCE60\\uD310\",\"tooltip.bold\":\"\\uAD75\\uAC8C\",\"tooltip.italic\":\"\\uC774\\uD0E4\\uB9AD\",\"tooltip.fraktur\":\"\\uD504\\uB799\\uD22C\\uC5B4\",\"tooltip.script\":\"\\uC2A4\\uD06C\\uB9BD\\uD2B8\",\"tooltip.caligraphic\":\"\\uCE98\\uB9AC\\uADF8\\uB798\\uD53D\",\"tooltip.typewriter\":\"\\uD0C0\\uC790\\uAE30\",\"tooltip.roman-upright\":\"\\uB85C\\uB9C8 \\uC9C1\\uB9BD\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"\\uAE00\\uAF34 \\uC2A4\\uD0C0\\uC77C\",\"menu.accent\":\"\\uC545\\uC13C\\uD2B8\",\"menu.decoration\":\"\\uC7A5\\uC2DD\",\"menu.color\":\"\\uC0C9\\uC0C1\",\"menu.background-color\":\"\\uBC30\\uACBD\",\"menu.evaluate\":\"\\uD3C9\\uAC00\",\"menu.simplify\":\"\\uAC04\\uC18C\\uD654\",\"menu.solve\":\"\\uD574\\uACB0\",\"menu.solve-for\":\"%@\\uC5D0 \\uB300\\uD574 \\uD574\\uACB0\",\"menu.cut\":\"\\uC798\\uB77C\\uB0B4\\uAE30\",\"menu.copy\":\"\\uBCF5\\uC0AC\",\"menu.copy-as-latex\":\"LaTeX\\uB85C \\uBCF5\\uC0AC\",\"menu.copy-as-ascii-math\":\"ASCII Math\\uB85C \\uBCF5\\uC0AC\",\"menu.copy-as-mathml\":\"MathML\\uB85C \\uBCF5\\uC0AC\",\"menu.paste\":\"\\uBD99\\uC5EC\\uB123\\uAE30\",\"menu.select-all\":\"\\uBAA8\\uB450 \\uC120\\uD0DD\",\"color.red\":\"\\uBE68\\uAC15\",\"color.orange\":\"\\uC8FC\\uD669\",\"color.yellow\":\"\\uB178\\uB791\",\"color.lime\":\"\\uB77C\\uC784\",\"color.green\":\"\\uCD08\\uB85D\",\"color.teal\":\"\\uCCAD\\uB85D\",\"color.cyan\":\"\\uCCAD\\uC0C9\",\"color.blue\":\"\\uD30C\\uB791\",\"color.indigo\":\"\\uB0A8\\uC0C9\",\"color.purple\":\"\\uBCF4\\uB77C\",\"color.magenta\":\"\\uC790\\uD64D\",\"color.black\":\"\\uAC80\\uC815\",\"color.dark-grey\":\"\\uC9C4\\uD55C \\uD68C\\uC0C9\",\"color.grey\":\"\\uD68C\\uC0C9\",\"color.light-grey\":\"\\uC5F0\\uD55C \\uD68C\\uC0C9\",\"color.white\":\"\\uD770\\uC0C9\"},pl:{\"keyboard.tooltip.symbols\":\"Symbolika\",\"keyboard.tooltip.greek\":\"Litery greckie\",\"keyboard.tooltip.numeric\":\"Numeryczne\",\"keyboard.tooltip.alphabetic\":\"Litery rzymskie\",\"tooltip.copy to clipboard\":\"Kopiuj do Schowka\",\"tooltip.cut to clipboard\":\"Wytnij ze Schowka\",\"tooltip.paste from clipboard\":\"Wklej ze Schowka\",\"tooltip.redo\":\"Przywr\\xF3\\u0107\",\"tooltip.toggle virtual keyboard\":\"Prze\\u0142\\u0105cz klawiatur\\u0119 wirtualn\\u0105\",\"tooltip.menu\":\"Menu\",\"tooltip.undo\":\"Cofnij\",\"menu.borders\":\"Ograniczniki macierzy\",\"menu.insert matrix\":\"Wstaw macierz\",\"menu.array.add row above\":\"Dodaj wiersz przed\",\"menu.array.add row below\":\"Dodaj wiersz po\",\"menu.array.add column after\":\"Dodaj kolumn\\u0119 po\",\"menu.array.add column before\":\"Dodaj kolumn\\u0119 przed\",\"menu.array.delete row\":\"Usu\\u0144 wiersz\",\"menu.array.delete rows\":\"Usu\\u0144 wybrane wiersze\",\"menu.array.delete column\":\"Usu\\u0144 kolumn\\u0119\",\"menu.array.delete columns\":\"Usu\\u0144 wybrane kolumny\",\"menu.mode\":\"Tryb\",\"menu.mode-math\":\"Formu\\u0142a\",\"menu.mode-text\":\"Tekst\",\"menu.mode-latex\":\"LaTeX\",\"menu.insert\":\"Wstaw\",\"menu.insert.abs\":\"Warto\\u015B\\u0107 bezwzgl\\u0119dna\",\"menu.insert.abs-template\":\"\\\\left|x\\\\right|\",\"menu.insert.nth-root\":\"Pierwiastek n-tego stopnia\",\"menu.insert.nth-root-template\":\"\\\\sqrt[n]{x}\",\"menu.insert.log-base\":\"Logarytm o podstawie a\",\"menu.insert.log-base-template\":\"\\\\log_a(x)\",\"menu.insert.heading-calculus\":\"Rachunek r\\xF3\\u017Cniczkowy i ca\\u0142kowy\",\"menu.insert.derivative\":\"Pochodna\",\"menu.insert.derivative-template\":\"\\\\dfrac{\\\\mathrm{d}}{\\\\mathrm{d}x}f(x)\\\\bigm|_{x=a}\",\"menu.insert.nth-derivative\":\"Pochodna n-tego rz\\u0119du\",\"menu.insert.nth-derivative-template\":\"\\\\dfrac{\\\\mathrm{d}^n}{\\\\mathrm{d}x^n}f(x)\\\\bigm|_{x=a}\",\"menu.insert.integral\":\"Ca\\u0142ka\",\"menu.insert.integral-template\":\"$\\\\int_a^b f(x)\\\\,\\\\mathrm{d}x$\",\"menu.insert.sum\":\"Suma\",\"menu.insert.sum-template\":\"$\\\\sum_{i=1}^n x_i$\",\"menu.insert.product\":\"Iloczyn\",\"menu.insert.product-template\":\"\\\\prod_{i=1}^n x_i\",\"menu.insert.heading-complex-numbers\":\"Liczby zespolone\",\"menu.insert.modulus\":\"Modu\\u0142\",\"menu.insert.modulus-template\":\"\\\\lvert z \\\\rvert\",\"menu.insert.argument\":\"Argument\",\"menu.insert.argument-template\":\"\\\\arg(z)\",\"menu.insert.real-part\":\"Cz\\u0119\\u015B\\u0107 rzeczywista\",\"menu.insert.real-part-template\":\"\\\\Re(z)\",\"menu.insert.imaginary-part\":\"Cz\\u0119\\u015B\\u0107 urojona\",\"menu.insert.imaginary-part-template\":\"\\\\Im(z)\",\"menu.insert.conjugate\":\"Sprz\\u0119\\u017Cenie\",\"menu.insert.conjugate-template\":\"\\\\overline{z}\",\"tooltip.blackboard\":\"Tablica\",\"tooltip.bold\":\"Pogrubienie\",\"tooltip.italic\":\"Kursywa\",\"tooltip.fraktur\":\"Fraktura\",\"tooltip.script\":\"Skrypt\",\"tooltip.caligraphic\":\"Kaligraficzny\",\"tooltip.typewriter\":\"Maszynowy\",\"tooltip.roman-upright\":\"Rzymski prosto\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"Styl czcionki\",\"menu.accent\":\"Akcent\",\"menu.decoration\":\"Dekoracja\",\"menu.color\":\"Kolor\",\"menu.background-color\":\"T\\u0142o\",\"menu.evaluate\":\"Oblicz\",\"menu.simplify\":\"Upro\\u015B\\u0107\",\"menu.solve\":\"Rozwi\\u0105\\u017C\",\"menu.solve-for\":\"Rozwi\\u0105\\u017C dla %@\",\"menu.cut\":\"Wytnij\",\"menu.copy\":\"Kopiuj\",\"menu.copy-as-latex\":\"Kopiuj jako LaTeX\",\"menu.copy-as-ascii-math\":\"Kopiuj jako ASCII Math\",\"menu.copy-as-mathml\":\"Kopiuj jako MathML\",\"menu.paste\":\"Wklej\",\"menu.select-all\":\"Zaznacz wszystko\",\"color.red\":\"Czerwony\",\"color.orange\":\"Pomara\\u0144czowy\",\"color.yellow\":\"\\u017B\\xF3\\u0142ty\",\"color.lime\":\"Limetkowy\",\"color.green\":\"Zielony\",\"color.teal\":\"Turkusowy\",\"color.cyan\":\"Cyjan\",\"color.blue\":\"Niebieski\",\"color.indigo\":\"Indygo\",\"color.purple\":\"Fioletowy\",\"color.magenta\":\"Magenta\",\"color.black\":\"Czarny\",\"color.dark-grey\":\"Ciemnoszary\",\"color.grey\":\"Szary\",\"color.light-grey\":\"Jasnoszary\",\"color.white\":\"Bia\\u0142y\"},pt:{\"keyboard.tooltip.symbols\":\"S\\xEDmbolos\",\"keyboard.tooltip.greek\":\"Letras gregas\",\"keyboard.tooltip.numeric\":\"Num\\xE9rico\",\"keyboard.tooltip.alphabetic\":\"Letras romanas\",\"tooltip.copy to clipboard\":\"Copiar para \\xE1rea de transfer\\xEAncia\",\"tooltip.redo\":\"Refazer\",\"tooltip.toggle virtual keyboard\":\"Alternar teclado virtual\",\"tooltip.undo\":\"Desfazer\",\"menu.insert matrix\":\"Inserir Matriz\",\"menu.borders\":\"Delimitadores de matriz\",\"menu.array.add row above\":\"Adicionar linha depois\",\"menu.array.add row below\":\"Adicionar linha antes\",\"menu.array.add column after\":\"Adicionar coluna depois\",\"menu.array.add column before\":\"Adicionar coluna antes\",\"menu.array.delete row\":\"Excluir linha\",\"menu.array.delete rows\":\"Excluir linhas selecionadas\",\"menu.array.delete column\":\"Apagar Coluna\",\"menu.array.delete columns\":\"Excluir Colunas Selecionadas\",\"menu.mode\":\"Modo\",\"menu.mode-math\":\"F\\xF3rmula\",\"menu.mode-text\":\"Texto\",\"menu.mode-latex\":\"LaTeX\",\"tooltip.blackboard\":\"Quadro Negro\",\"tooltip.bold\":\"Negrito\",\"tooltip.italic\":\"It\\xE1lico\",\"tooltip.fraktur\":\"Fraktur\",\"tooltip.script\":\"Script\",\"tooltip.caligraphic\":\"Caligr\\xE1fico\",\"tooltip.typewriter\":\"M\\xE1quina de Escrever\",\"tooltip.roman-upright\":\"Romano Vertical\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"Estilo da Fonte\",\"menu.accent\":\"Acento\",\"menu.decoration\":\"Decora\\xE7\\xE3o\",\"menu.color\":\"Cor\",\"menu.background-color\":\"Cor de Fundo\",\"menu.evaluate\":\"Avaliar\",\"menu.simplify\":\"Simplificar\",\"menu.solve\":\"Resolver\",\"menu.solve-for\":\"Resolver para %@\",\"menu.cut\":\"Recortar\",\"menu.copy\":\"Copiar\",\"menu.copy-as-latex\":\"Copiar como LaTeX\",\"menu.copy-as-ascii-math\":\"Copiar como ASCII Math\",\"menu.copy-as-mathml\":\"Copiar como MathML\",\"menu.paste\":\"Colar\",\"menu.select-all\":\"Selecionar Tudo\",\"color.red\":\"Vermelho\",\"color.orange\":\"Laranja\",\"color.yellow\":\"Amarelo\",\"color.lime\":\"Verde Lima\",\"color.green\":\"Verde\",\"color.teal\":\"Verde-azulado\",\"color.cyan\":\"Ciano\",\"color.blue\":\"Azul\",\"color.indigo\":\"\\xCDndigo\",\"color.purple\":\"Roxo\",\"color.magenta\":\"Magenta\",\"color.black\":\"Preto\",\"color.dark-grey\":\"Cinza Escuro\",\"color.grey\":\"Cinza\",\"color.light-grey\":\"Cinza Claro\",\"color.white\":\"Branco\"},uk:{\"keyboard.tooltip.symbols\":\"\\u0421\\u0438\\u043C\\u0432\\u043E\\u043B\\u0438\",\"keyboard.tooltip.greek\":\"\\u0413\\u0440\\u0435\\u0446\\u044C\\u043A\\u0456 \\u043B\\u0456\\u0442\\u0435\\u0440\\u0438\",\"keyboard.tooltip.numeric\":\"\\u0427\\u0438\\u0441\\u043B\\u043E\\u0432\\u0438\\u0439\",\"keyboard.tooltip.alphabetic\":\"\\u0420\\u0438\\u043C\\u0441\\u044C\\u043A\\u0456 \\u043B\\u0456\\u0442\\u0435\\u0440\\u0438\",\"tooltip.copy to clipboard\":\"\\u041A\\u043E\\u043F\\u0456\\u044E\\u0432\\u0430\\u0442\\u0438 \\u0432 \\u0431\\u0443\\u0444\\u0435\\u0440 \\u043E\\u0431\\u043C\\u0456\\u043D\\u0443\",\"tooltip.cut to clipboard\":\"\\u0412\\u0438\\u0440\\u0456\\u0437\\u0430\\u0442\\u0438 \\u0432 \\u0431\\u0443\\u0444\\u0435\\u0440 \\u043E\\u0431\\u043C\\u0456\\u043D\\u0443\",\"tooltip.paste from clipboard\":\"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0437 \\u0431\\u0443\\u0444\\u0435\\u0440\\u0430 \\u043E\\u0431\\u043C\\u0456\\u043D\\u0443\",\"tooltip.redo\":\"\\u041F\\u043E\\u0432\\u0442\\u043E\\u0440\\u0438\\u0442\\u0438\",\"tooltip.toggle virtual keyboard\":\"\\u041F\\u0435\\u0440\\u0435\\u043A\\u043B\\u044E\\u0447\\u0438\\u0442\\u0438 \\u0432\\u0456\\u0440\\u0442\\u0443\\u0430\\u043B\\u044C\\u043D\\u0443 \\u043A\\u043B\\u0430\\u0432\\u0456\\u0430\\u0442\\u0443\\u0440\\u0443\",\"tooltip.menu\":\"\\u041C\\u0435\\u043D\\u044E\",\"tooltip.undo\":\"\\u0421\\u043A\\u0430\\u0441\\u0443\\u0432\\u0430\\u0442\\u0438\",\"menu.borders\":\"\\u041C\\u0435\\u0436\\u0456\",\"menu.insert matrix\":\"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043C\\u0430\\u0442\\u0440\\u0438\\u0446\\u044E\",\"menu.array.add row above\":\"\\u0414\\u043E\\u0434\\u0430\\u0442\\u0438 \\u0440\\u044F\\u0434\\u043E\\u043A \\u043F\\u0435\\u0440\\u0435\\u0434\",\"menu.array.add row below\":\"\\u0414\\u043E\\u0434\\u0430\\u0442\\u0438 \\u0440\\u044F\\u0434\\u043E\\u043A \\u043F\\u0456\\u0441\\u043B\\u044F\",\"menu.array.add column after\":\"\\u0414\\u043E\\u0434\\u0430\\u0442\\u0438 \\u0441\\u0442\\u043E\\u0432\\u043F\\u0435\\u0446\\u044C \\u043F\\u0456\\u0441\\u043B\\u044F\",\"menu.array.add column before\":\"\\u0414\\u043E\\u0434\\u0430\\u0442\\u0438 \\u0441\\u0442\\u043E\\u0432\\u043F\\u0435\\u0446\\u044C \\u043F\\u0435\\u0440\\u0435\\u0434\",\"menu.array.delete row\":\"\\u0412\\u0438\\u0434\\u0430\\u043B\\u0438\\u0442\\u0438 \\u0440\\u044F\\u0434\\u043E\\u043A\",\"menu.array.delete rows\":\"\\u0412\\u0438\\u0434\\u0430\\u043B\\u0438\\u0442\\u0438 \\u0432\\u0438\\u0431\\u0440\\u0430\\u043D\\u0456 \\u0440\\u044F\\u0434\\u043A\\u0438\",\"menu.array.delete column\":\"\\u0412\\u0438\\u0434\\u0430\\u043B\\u0438\\u0442\\u0438 \\u0441\\u0442\\u043E\\u0432\\u043F\\u0435\\u0446\\u044C\",\"menu.array.delete columns\":\"\\u0412\\u0438\\u0434\\u0430\\u043B\\u0438\\u0442\\u0438 \\u0432\\u0438\\u0431\\u0440\\u0430\\u043D\\u0456 \\u0441\\u0442\\u043E\\u0432\\u043F\\u0446\\u0456\",\"menu.mode\":\"\\u0420\\u0435\\u0436\\u0438\\u043C\",\"menu.mode-math\":\"\\u041C\\u0430\\u0442\\u0435\\u043C\\u0430\\u0442\\u0438\\u043A\\u0430\",\"menu.mode-text\":\"\\u0422\\u0435\\u043A\\u0441\\u0442\",\"menu.mode-latex\":\"LaTeX\",\"menu.insert\":\"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438\",\"menu.insert.abs\":\"\\u0410\\u0431\\u0441\\u043E\\u043B\\u044E\\u0442\\u043D\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u043D\\u044F\",\"menu.insert.abs-template\":\"\\\\left|x\\\\right|\",\"menu.insert.nth-root\":\"\\u041A\\u043E\\u0440\\u0456\\u043D\\u044C n-\\u0433\\u043E \\u0441\\u0442\\u0435\\u043F\\u0435\\u043D\\u044F\",\"menu.insert.nth-root-template\":\"\\\\sqrt[n]{x}\",\"menu.insert.log-base\":\"\\u041B\\u043E\\u0433\\u0430\\u0440\\u0438\\u0444\\u043C \\u0437\\u0430 \\u043E\\u0441\\u043D\\u043E\\u0432\\u043E\\u044E a\",\"menu.insert.log-base-template\":\"\\\\log_a(x)\",\"menu.insert.heading-calculus\":\"\\u041E\\u0431\\u0447\\u0438\\u0441\\u043B\\u0435\\u043D\\u043D\\u044F\",\"menu.insert.derivative\":\"\\u041F\\u043E\\u0445\\u0456\\u0434\\u043D\\u0430\",\"menu.insert.derivative-template\":\"\\\\dfrac{\\\\mathrm{d}}{\\\\mathrm{d}x}f(x)\\\\bigm|_{x=a}\",\"menu.insert.nth-derivative\":\"\\u041F\\u043E\\u0445\\u0456\\u0434\\u043D\\u0430 n-\\u0433\\u043E \\u043F\\u043E\\u0440\\u044F\\u0434\\u043A\\u0443\",\"menu.insert.nth-derivative-template\":\"\\\\dfrac{\\\\mathrm{d}^n}{\\\\mathrm{d}x^n}f(x)\\\\bigm|_{x=a}\",\"menu.insert.integral\":\"\\u0406\\u043D\\u0442\\u0435\\u0433\\u0440\\u0430\\u043B\",\"menu.insert.integral-template\":\"$\\\\int_a^b f(x)\\\\,\\\\mathrm{d}x$\",\"menu.insert.sum\":\"\\u0421\\u0443\\u043C\\u0430\",\"menu.insert.sum-template\":\"$\\\\sum_{i=1}^n x_i$\",\"menu.insert.product\":\"\\u0414\\u043E\\u0431\\u0443\\u0442\\u043E\\u043A\",\"menu.insert.product-template\":\"\\\\prod_{i=1}^n x_i\",\"menu.insert.heading-complex-numbers\":\"\\u041A\\u043E\\u043C\\u043F\\u043B\\u0435\\u043A\\u0441\\u043D\\u0456 \\u0447\\u0438\\u0441\\u043B\\u0430\",\"menu.insert.modulus\":\"\\u041C\\u043E\\u0434\\u0443\\u043B\\u044C\",\"menu.insert.modulus-template\":\"\\\\lvert z \\\\rvert\",\"menu.insert.argument\":\"\\u0410\\u0440\\u0433\\u0443\\u043C\\u0435\\u043D\\u0442\",\"menu.insert.argument-template\":\"\\\\arg(z)\",\"menu.insert.real-part\":\"\\u0414\\u0456\\u0439\\u0441\\u043D\\u0430 \\u0447\\u0430\\u0441\\u0442\\u0438\\u043D\\u0430\",\"menu.insert.real-part-template\":\"\\\\Re(z)\",\"menu.insert.imaginary-part\":\"\\u0423\\u044F\\u0432\\u043D\\u0430 \\u0447\\u0430\\u0441\\u0442\\u0438\\u043D\\u0430\",\"menu.insert.imaginary-part-template\":\"\\\\Im(z)\",\"menu.insert.conjugate\":\"\\u0421\\u043F\\u0440\\u044F\\u0436\\u0435\\u043D\\u0435 \\u0447\\u0438\\u0441\\u043B\\u043E\",\"menu.insert.conjugate-template\":\"\\\\overline{z}\",\"tooltip.blackboard\":\"\\u0414\\u043E\\u0448\\u043A\\u0430\",\"tooltip.bold\":\"\\u0416\\u0438\\u0440\\u043D\\u0438\\u0439\",\"tooltip.italic\":\"\\u041A\\u0443\\u0440\\u0441\\u0438\\u0432\",\"tooltip.fraktur\":\"\\u0424\\u0440\\u0430\\u043A\\u0442\\u0443\\u0440\\u043D\\u0438\\u0439\",\"tooltip.script\":\"\\u0420\\u0443\\u043A\\u043E\\u043F\\u0438\\u0441\\u043D\\u0438\\u0439\",\"tooltip.caligraphic\":\"\\u041A\\u0430\\u043B\\u0456\\u0433\\u0440\\u0430\\u0444\\u0456\\u0447\\u043D\\u0438\\u0439\",\"tooltip.typewriter\":\"\\u0414\\u0440\\u0443\\u043A\\u0430\\u0440\\u0441\\u044C\\u043A\\u0438\\u0439\",\"tooltip.roman-upright\":\"\\u041F\\u0440\\u044F\\u043C\\u0438\\u0439 \\u0440\\u0438\\u043C\\u0441\\u044C\\u043A\\u0438\\u0439\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"\\u0421\\u0442\\u0438\\u043B\\u044C \\u0448\\u0440\\u0438\\u0444\\u0442\\u0443\",\"menu.accent\":\"\\u0410\\u043A\\u0446\\u0435\\u043D\\u0442\",\"menu.decoration\":\"\\u041E\\u0444\\u043E\\u0440\\u043C\\u043B\\u0435\\u043D\\u043D\\u044F\",\"menu.color\":\"\\u041A\\u043E\\u043B\\u0456\\u0440\",\"menu.background-color\":\"\\u0424\\u043E\\u043D\",\"menu.evaluate\":\"\\u041E\\u0431\\u0447\\u0438\\u0441\\u043B\\u0438\\u0442\\u0438\",\"menu.simplify\":\"\\u0421\\u043F\\u0440\\u043E\\u0441\\u0442\\u0438\\u0442\\u0438\",\"menu.solve\":\"\\u0420\\u043E\\u0437\\u0432\\u2019\\u044F\\u0437\\u0430\\u0442\\u0438\",\"menu.solve-for\":\"\\u0420\\u043E\\u0437\\u0432\\u2019\\u044F\\u0437\\u0430\\u0442\\u0438 \\u0434\\u043B\\u044F %@\",\"menu.cut\":\"\\u0412\\u0438\\u0440\\u0456\\u0437\\u0430\\u0442\\u0438\",\"menu.copy\":\"\\u041A\\u043E\\u043F\\u0456\\u044E\\u0432\\u0430\\u0442\\u0438\",\"menu.copy-as-latex\":\"\\u041A\\u043E\\u043F\\u0456\\u044E\\u0432\\u0430\\u0442\\u0438 \\u044F\\u043A LaTeX\",\"menu.copy-as-ascii-math\":\"\\u041A\\u043E\\u043F\\u0456\\u044E\\u0432\\u0430\\u0442\\u0438 \\u044F\\u043A ASCII Math\",\"menu.copy-as-mathml\":\"\\u041A\\u043E\\u043F\\u0456\\u044E\\u0432\\u0430\\u0442\\u0438 \\u044F\\u043A MathML\",\"menu.paste\":\"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438\",\"menu.select-all\":\"\\u0412\\u0438\\u0431\\u0440\\u0430\\u0442\\u0438 \\u0432\\u0441\\u0435\",\"color.red\":\"\\u0427\\u0435\\u0440\\u0432\\u043E\\u043D\\u0438\\u0439\",\"color.orange\":\"\\u041F\\u043E\\u043C\\u0430\\u0440\\u0430\\u043D\\u0447\\u0435\\u0432\\u0438\\u0439\",\"color.yellow\":\"\\u0416\\u043E\\u0432\\u0442\\u0438\\u0439\",\"color.lime\":\"\\u041B\\u0430\\u0439\\u043C\\u043E\\u0432\\u0438\\u0439\",\"color.green\":\"\\u0417\\u0435\\u043B\\u0435\\u043D\\u0438\\u0439\",\"color.teal\":\"\\u0411\\u0456\\u0440\\u044E\\u0437\\u043E\\u0432\\u0438\\u0439\",\"color.cyan\":\"\\u0421\\u0438\\u043D\\u044C\\u043E-\\u0437\\u0435\\u043B\\u0435\\u043D\\u0438\\u0439\",\"color.blue\":\"\\u0421\\u0438\\u043D\\u0456\\u0439\",\"color.indigo\":\"\\u0406\\u043D\\u0434\\u0438\\u0433\\u043E\",\"color.purple\":\"\\u0424\\u0456\\u043E\\u043B\\u0435\\u0442\\u043E\\u0432\\u0438\\u0439\",\"color.magenta\":\"\\u041F\\u0443\\u0440\\u043F\\u0443\\u0440\\u043D\\u0438\\u0439\",\"color.black\":\"\\u0427\\u043E\\u0440\\u043D\\u0438\\u0439\",\"color.dark-grey\":\"\\u0422\\u0435\\u043C\\u043D\\u043E-\\u0441\\u0456\\u0440\\u0438\\u0439\",\"color.grey\":\"\\u0421\\u0456\\u0440\\u0438\\u0439\",\"color.light-grey\":\"\\u0421\\u0432\\u0456\\u0442\\u043B\\u043E-\\u0441\\u0456\\u0440\\u0438\\u0439\",\"color.white\":\"\\u0411\\u0456\\u043B\\u0438\\u0439\"},\"zh-cn\":{\"keyboard.tooltip.symbols\":\"\\u7B26\\u53F7\",\"keyboard.tooltip.greek\":\"\\u5E0C\\u814A\\u5B57\\u6BCD\",\"keyboard.tooltip.numeric\":\"\\u6570\\u5B57\",\"keyboard.tooltip.alphabetic\":\"\\u7F57\\u9A6C\\u5B57\\u6BCD\",\"tooltip.copy to clipboard\":\"\\u590D\\u5236\\u5230\\u526A\\u8D34\\u677F\",\"tooltip.redo\":\"\\u91CD\\u505A\",\"tooltip.toggle virtual keyboard\":\"\\u5207\\u6362\\u865A\\u62DF\\u952E\\u76D8\",\"tooltip.undo\":\"\\u64A4\\u6D88\",\"menu.insert matrix\":\"\\u63D2\\u5165\\u77E9\\u9635\",\"menu.borders\":\"\\u77E9\\u9635\\u5206\\u9694\\u7B26\",\"menu.array.add row above\":\"\\u5728\\u540E\\u9762\\u6DFB\\u52A0\\u884C\",\"menu.array.add row below\":\"\\u5728\\u524D\\u9762\\u6DFB\\u52A0\\u884C\",\"menu.array.add column after\":\"\\u5728\\u540E\\u9762\\u6DFB\\u52A0\\u5217r\",\"menu.array.add column before\":\"\\u5728\\u524D\\u9762\\u6DFB\\u52A0\\u5217\",\"menu.array.delete row\":\"\\u5220\\u9664\\u884C\",\"menu.array.delete rows\":\"\\u5220\\u9664\\u9009\\u5B9A\\u884C\",\"menu.array.delete column\":\"\\u5220\\u9664\\u5217\",\"menu.array.delete columns\":\"\\u5220\\u9664\\u9009\\u5B9A\\u7684\\u5217\",\"menu.mode\":\"\\u6A21\\u5F0F\",\"menu.mode-math\":\"\\u6570\\u5B66\",\"menu.mode-text\":\"\\u6587\\u672C\",\"menu.mode-latex\":\"LaTeX\",\"tooltip.blackboard\":\"\\u9ED1\\u677F\",\"tooltip.bold\":\"\\u7C97\\u4F53\",\"tooltip.italic\":\"\\u659C\\u4F53\",\"tooltip.fraktur\":\"Fraktur\",\"tooltip.script\":\"\\u811A\\u672C\",\"tooltip.caligraphic\":\"\\u8349\\u4E66\",\"tooltip.typewriter\":\"\\u6253\\u5B57\\u673A\",\"tooltip.roman-upright\":\"\\u7F57\\u9A6C\\u76F4\\u7ACB\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"\\u5B57\\u4F53\\u6837\\u5F0F\",\"menu.accent\":\"\\u91CD\\u97F3\",\"menu.decoration\":\"\\u88C5\\u9970\",\"menu.color\":\"\\u989C\\u8272\",\"menu.background-color\":\"\\u80CC\\u666F\",\"menu.evaluate\":\"\\u8BA1\\u7B97\",\"menu.simplify\":\"\\u7B80\\u5316\",\"menu.solve\":\"\\u6C42\\u89E3\",\"menu.solve-for\":\"\\u6C42\\u89E3 %@\",\"menu.cut\":\"\\u526A\\u5207\",\"menu.copy\":\"\\u590D\\u5236\",\"menu.copy-as-latex\":\"\\u590D\\u5236\\u4E3A LaTeX\",\"menu.copy-as-ascii-math\":\"\\u590D\\u5236\\u4E3A ASCII Math\",\"menu.copy-as-mathml\":\"\\u590D\\u5236\\u4E3A MathML\",\"menu.paste\":\"\\u7C98\\u8D34\",\"menu.select-all\":\"\\u5168\\u9009\",\"color.red\":\"\\u7EA2\\u8272\",\"color.orange\":\"\\u6A59\\u8272\",\"color.yellow\":\"\\u9EC4\\u8272\",\"color.lime\":\"\\u7EFF\\u9EC4\\u8272\",\"color.green\":\"\\u7EFF\\u8272\",\"color.teal\":\"\\u9752\\u8272\",\"color.cyan\":\"\\u84DD\\u7EFF\\u8272\",\"color.blue\":\"\\u84DD\\u8272\",\"color.indigo\":\"\\u975B\\u84DD\\u8272\",\"color.purple\":\"\\u7D2B\\u8272\",\"color.magenta\":\"\\u6D0B\\u7EA2\\u8272\",\"color.black\":\"\\u9ED1\\u8272\",\"color.dark-grey\":\"\\u6DF1\\u7070\\u8272\",\"color.grey\":\"\\u7070\\u8272\",\"color.light-grey\":\"\\u6D45\\u7070\\u8272\",\"color.white\":\"\\u767D\\u8272\"},\"zh-tw\":{\"keyboard.tooltip.symbols\":\"\\u7B26\\u865F\",\"keyboard.tooltip.greek\":\"\\u5E0C\\u81D8\\u5B57\\u6BCD\",\"keyboard.tooltip.numeric\":\"\\u6578\\u5B57\",\"keyboard.tooltip.alphabetic\":\"\\u7F85\\u99AC\\u5B57\\u6BCD\",\"tooltip.copy to clipboard\":\"\\u8907\\u88FD\\u5230\\u526A\\u8CBC\\u677F\",\"tooltip.redo\":\"\\u91CD\\u505A\",\"tooltip.toggle virtual keyboard\":\"\\u5207\\u63DB\\u865B\\u64EC\\u9375\\u76E4\",\"tooltip.undo\":\"\\u64A4\\u6D88\",\"menu.insert matrix\":\"\\u63D2\\u5165\\u77E9\\u9663\",\"menu.borders\":\"\\u77E9\\u9663\\u5206\\u9694\\u7B26\",\"menu.array.add row above\":\"\\u5728\\u5F8C\\u9762\\u6DFB\\u52A0\\u884C\",\"menu.array.add row below\":\"\\u5728\\u524D\\u9762\\u6DFB\\u52A0\\u884C\",\"menu.array.add column after\":\"\\u5728\\u5F8C\\u9762\\u6DFB\\u52A0\\u5217\",\"menu.array.add column before\":\"\\u5728\\u524D\\u9762\\u6DFB\\u52A0\\u5217\",\"menu.array.delete row\":\"\\u522A\\u9664\\u884C\",\"menu.array.delete rows\":\"\\u522A\\u9664\\u9078\\u5B9A\\u884C\",\"menu.array.delete column\":\"\\u522A\\u9664\\u5217\",\"menu.array.delete columns\":\"\\u522A\\u9664\\u9078\\u5B9A\\u7684\\u5217\",\"menu.mode\":\"\\u6A21\\u5F0F\",\"menu.mode-math\":\"\\u6578\\u5B78\",\"menu.mode-text\":\"\\u6587\\u672C\",\"menu.mode-latex\":\"LaTeX\",\"tooltip.blackboard\":\"\\u9ED1\\u677F\",\"tooltip.bold\":\"\\u7C97\\u9AD4\",\"tooltip.italic\":\"\\u659C\\u9AD4\",\"tooltip.fraktur\":\"Fraktur\",\"tooltip.script\":\"\\u8173\\u672C\",\"tooltip.caligraphic\":\"\\u8349\\u66F8\",\"tooltip.typewriter\":\"\\u6253\\u5B57\\u6A5F\",\"tooltip.roman-upright\":\"\\u7F85\\u99AC\\u76F4\\u7ACB\",\"tooltip.row-by-col\":\"%@ \\xD7 %@\",\"menu.font-style\":\"\\u5B57\\u9AD4\\u6A23\\u5F0F\",\"menu.accent\":\"\\u91CD\\u97F3\",\"menu.decoration\":\"\\u88DD\\u98FE\",\"menu.color\":\"\\u984F\\u8272\",\"menu.background-color\":\"\\u80CC\\u666F\",\"menu.evaluate\":\"\\u8A08\\u7B97\",\"menu.simplify\":\"\\u7C21\\u5316\",\"menu.solve\":\"\\u6C42\\u89E3\",\"menu.solve-for\":\"\\u6C42\\u89E3 %@\",\"menu.cut\":\"\\u526A\\u4E0B\",\"menu.copy\":\"\\u8907\\u88FD\",\"menu.copy-as-latex\":\"\\u8907\\u88FD\\u70BA LaTeX\",\"menu.copy-as-ascii-math\":\"\\u8907\\u88FD\\u70BA ASCII Math\",\"menu.copy-as-mathml\":\"\\u8907\\u88FD\\u70BA MathML\",\"menu.paste\":\"\\u8CBC\\u4E0A\",\"menu.select-all\":\"\\u5168\\u9078\",\"color.red\":\"\\u7D05\\u8272\",\"color.orange\":\"\\u6A59\\u8272\",\"color.yellow\":\"\\u9EC3\\u8272\",\"color.lime\":\"\\u7DA0\\u9EC3\\u8272\",\"color.green\":\"\\u7DA0\\u8272\",\"color.teal\":\"\\u9752\\u8272\",\"color.cyan\":\"\\u85CD\\u7DA0\\u8272\",\"color.blue\":\"\\u85CD\\u8272\",\"color.indigo\":\"\\u975B\\u85CD\\u8272\",\"color.purple\":\"\\u7D2B\\u8272\",\"color.magenta\":\"\\u6D0B\\u7D05\\u8272\",\"color.black\":\"\\u9ED1\\u8272\",\"color.dark-grey\":\"\\u6DF1\\u7070\\u8272\",\"color.grey\":\"\\u7070\\u8272\",\"color.light-grey\":\"\\u6DFA\\u7070\\u8272\",\"color.white\":\"\\u767D\\u8272\"}};var F={strings:Mu,_locale:\"\",_dirty:!1,_subscribers:[],_numberFormatter:void 0,get locale(){return F._locale||(F._locale=ke()?navigator.language.slice(0,5):\"en-US\"),F._locale},set locale(t){F._locale=t,F._numberFormatter=void 0,F.dirty=!0},get numberFormatter(){if(!F._numberFormatter)try{F._numberFormatter=new Intl.NumberFormat(F.locale)}catch(t){try{F._numberFormatter=new Intl.NumberFormat(F.locale.slice(0,2))}catch(e){F._numberFormatter=new Intl.NumberFormat(\"en-US\")}}return F._numberFormatter},merge(t,e){if(typeof t==\"string\"&&e)F.strings[t]=p(p({},F.strings[t]),e),F.dirty=!0;else for(let r of Object.keys(t))F.merge(r,t[r])},get dirty(){return F._dirty},set dirty(t){F._dirty||F._dirty===t||(F._dirty=!0,setTimeout(()=>{F._dirty=!1,this._subscribers.forEach(e=>e==null?void 0:e())},0))},subscribe(t){return F._subscribers.push(t),F._subscribers.length-1},unsubscribe(t){t<0||t>=F._subscribers.length||(F._subscribers[t]=void 0)},update(t){let e=t.querySelectorAll(\"[data-l10n-tooltip]\");for(let r of e){let i=r.getAttribute(\"data-l10n-tooltip\");if(i){let n=I(i);n&&r.setAttribute(\"data-tooltip\",n)}}e=t.querySelectorAll(\"[data-l10n-arial-label]\");for(let r of e){let i=r.getAttribute(\"data-l10n-arial-label\");if(i){let n=I(i);n&&r.setAttribute(\"aria-label\",n)}}}};function I(t,...e){if(t===void 0)return;let r=\"\",i=F.locale;F.strings[i]&&(r=F.strings[i][t]);let n=i.slice(0,2);if(!r&&F.strings[n]&&(r=F.strings[n][t]),r||(r=F.strings.en[t]),!r)return;let o=/(%@|%([0-9]+)\\$@)/g,a=o.exec(r),s=0;for(;a;){if(e[s++]){let c=a[2]?parseInt(a[2],10)-1:s-1,u=e[c];typeof u==\"number\"&&(u=F.numberFormatter.format(u)),r=r.replace(a[1],u)}a=o.exec(r)}return r=r.replace(/%%/g,\"%\"),r}var Wh={m0:\"#3F3D99\",m1:\"#993D71\",m2:\"#998B3D\",m3:\"#3D9956\",m4:\"#3D5A99\",m5:\"#993D90\",m6:\"#996D3D\",m7:\"#43993D\",m8:\"#3D7999\",m9:\"#843D99\"},Uh={blue:\"#0072BD\",orange:\"#D95319\",yellow:\"#EDB120\",purple:\"#7E2F8E\",green:\"#77AC30\",cyan:\"#4DBEEE\",red:\"#A2142F\"},Zt={red:\"#fbbbb6\",orange:\"#ffe0c2\",yellow:\"#fff1c2\",lime:\"#d0e8b9\",green:\"#bceac4\",teal:\"#b9f1f1\",cyan:\"#b8e5c9\",blue:\"#b6d9fb\",indigo:\"#d1c2f0\",purple:\"#e3baf8\",magenta:\"#f9c8e0\",black:\"#353535\",\"dark-grey\":\"#8C8C8C\",grey:\"#D0D0D0\",\"light-grey\":\"#F0F0F0\",white:\"#ffffff\"},Yt={red:\"#d7170b\",orange:\"#fe8a2b\",yellow:\"#ffc02b\",lime:\"#63b215\",green:\"#21ba3a\",teal:\"#17cfcf\",cyan:\"#13a7ec\",blue:\"#0d80f2\",indigo:\"#63c\",purple:\"#a219e6\",magenta:\"#eb4799\",black:\"#000\",\"dark-grey\":\"#666\",grey:\"#A6A6A6\",\"light-grey\":\"#d4d5d2\",white:\"#ffffff\"},wu={Red:\"red\",Orange:\"orange\",Yellow:\"yellow\",LimeGreen:\"lime\",Green:\"green\",TealBlue:\"teal\",Blue:\"blue\",Violet:\"indigo\",Purple:\"purple\",Magenta:\"magenta\",Black:\"black\",Gray:\"grey\",White:\"white\"},jh={Apricot:\"#FBB982\",Aquamarine:\"#00B5BE\",Bittersweet:\"#C04F17\",Black:\"#221E1F\",Blue:\"#2D2F92\",BlueGreen:\"#00B3B8\",BlueViolet:\"#473992\",BrickRed:\"#B6321C\",Brown:\"#792500\",BurntOrange:\"#F7921D\",CadetBlue:\"#74729A\",CarnationPink:\"#F282B4\",Cerulean:\"#00A2E3\",CornflowerBlue:\"#41B0E4\",Cyan:\"#00AEEF\",Dandelion:\"#FDBC42\",DarkOrchid:\"#A4538A\",Emerald:\"#00A99D\",ForestGreen:\"#009B55\",Fuchsia:\"#8C368C\",Goldenrod:\"#FFDF42\",Gray:\"#949698\",Green:\"#00A64F\",GreenYellow:\"#DFE674\",JungleGreen:\"#00A99A\",Lavender:\"#F49EC4\",Limegreen:\"#8DC73E\",Magenta:\"#EC008C\",Mahogany:\"#A9341F\",Maroon:\"#AF3235\",Melon:\"#F89E7B\",MidnightBlue:\"#006795\",Mulberry:\"#A93C93\",NavyBlue:\"#006EB8\",OliveGreen:\"#3C8031\",Orange:\"#F58137\",OrangeRed:\"#ED135A\",Orchid:\"#AF72B0\",Peach:\"#F7965A\",Periwinkle:\"#7977B8\",PineGreen:\"#008B72\",Plum:\"#92268F\",ProcessBlue:\"#00B0F0\",Purple:\"#99479B\",RawSienna:\"#974006\",Red:\"#ED1B23\",RedOrange:\"#F26035\",RedViolet:\"#A1246B\",Rhodamine:\"#EF559F\",RoyalBlue:\"#0071BC\",RoyalPurple:\"#613F99\",RubineRed:\"#ED017D\",Salmon:\"#F69289\",SeaGreen:\"#3FBC9D\",Sepia:\"#671800\",SkyBlue:\"#46C5DD\",SpringGreen:\"#C6DC67\",Tan:\"#DA9D76\",TealBlue:\"#00AEB3\",Thistle:\"#D883B7\",Turquoise:\"#00B4CE\",Violet:\"#58429B\",VioletRed:\"#EF58A0\",White:\"#FFFFFF\",WildStrawberry:\"#EE2967\",Yellow:\"#FFF200\",YellowGreen:\"#98CC70\",YellowOrange:\"#FAA21A\"};function Xr(t){var u,m,d,h,f,x;let e=t.split(\"!\"),r,i,n,o=255,a=255,s=255,l=-1,c=e.length>0&&e[0].startsWith(\"-\");c&&(e[0]=e[0].slice(1));for(let v=0;v<e.length;v++){r=o,i=a,n=s;let b=(u=e[v].trim().match(/^([A-Za-z\\d-]+)/))==null?void 0:u[1],_=b==null?void 0:b.toLowerCase(),S=b&&(x=(f=(h=(d=(m=Yt[_])!=null?m:Yt[wu[b]])!=null?d:Uh[b])!=null?h:jh[b])!=null?f:Wh[b])!=null?x:e[v].trim(),A=S.match(/^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/i);if(A!=null&&A[1]&&A[2]&&A[3])o=Math.max(0,Math.min(255,Number.parseInt(A[1],16))),a=Math.max(0,Math.min(255,Number.parseInt(A[2],16))),s=Math.max(0,Math.min(255,Number.parseInt(A[3],16)));else if(A=S.match(/^#([\\da-f]{3})$/i),A!=null&&A[1]){let E=Number.parseInt(A[1][0],16),D=Number.parseInt(A[1][1],16),L=Number.parseInt(A[1][2],16);o=Math.max(0,Math.min(255,E*16+E)),a=Math.max(0,Math.min(255,D*16+D)),s=Math.max(0,Math.min(255,L*16+L))}else if(A=S.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i),A!=null&&A[1]&&A[2]&&A[3])o=Math.max(0,Math.min(255,Number.parseInt(A[1]))),a=Math.max(0,Math.min(255,Number.parseInt(A[2]))),s=Math.max(0,Math.min(255,Number.parseInt(A[3])));else return;l>=0&&(o=(1-l)*o+l*r,a=(1-l)*a+l*i,s=(1-l)*s+l*n,l=-1),v+1<e.length&&(l=Math.max(0,Math.min(100,Number.parseInt(e[++v])))/100)}return l>=0&&(o=l*o+(1-l)*r,a=l*a+(1-l)*i,s=l*s+(1-l)*n),c&&(o=255-o,a=255-a,s=255-s),\"#\"+(\"00\"+Math.round(o).toString(16)).slice(-2)+(\"00\"+Math.round(a).toString(16)).slice(-2)+(\"00\"+Math.round(s).toString(16)).slice(-2)}function Ei(t){var e,r;return t=t.trim(),(r=(e=Zt[t.toLowerCase()])!=null?e:Zt[wu[t]])!=null?r:Xr(t)}function Jh(t){if(!t||t[0]!==\"#\")return;t=t.slice(1);let e;return t.length<=4?(e={r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16)},t.length===4&&(e.a=parseInt(t[3]+t[3],16)/255)):(e={r:parseInt(t[0]+t[1],16),g:parseInt(t[2]+t[3],16),b:parseInt(t[4]+t[5],16)},t.length===8&&(e.a=parseInt(t[6]+t[7],16)/255)),e&&e.a===void 0&&(e.a=1),e}function tl(t,e,r){return r<0&&(r+=6),r>=6&&(r-=6),r<1?(e-t)*r+t:r<3?e:r<4?(e-t)*(4-r)+t:t}function Gh(t){let[e,r,i]=[t.h,t.s,t.l];e=(e+360)%360/60,i=Math.max(0,Math.min(i,1)),r=Math.max(0,Math.min(r,1));let n=i<=.5?i*(r+1):i+r-i*r,o=i*2-n;return{r:Math.round(255*tl(o,n,e+2)),g:Math.round(255*tl(o,n,e)),b:Math.round(255*tl(o,n,e-2))}}function rl(t){return t<0?0:t>255?255:Math.round(t)}function Xh(t){let{r:e,g:r,b:i}=t,n=((1<<24)+(rl(e)<<16)+(rl(r)<<8)+rl(i)).toString(16).slice(1);return n[0]===n[1]&&n[2]===n[3]&&n[4]===n[5]&&n[6]===n[7]&&(n=n[0]+n[2]+n[4]),\"#\"+n}function Zh(t){let{r:e,g:r,b:i}=t;e=e/255,r=r/255,i=i/255;let n=Math.min(e,r,i),o=Math.max(e,r,i),a=o-n,s,l;o===n?s=0:e===o?s=(r-i)/a:r===o?s=2+(i-e)/a:i===o&&(s=4+(e-r)/a),s=Math.min(s*60,360),s<0&&(s+=360);let c=(n+o)/2;return o===n?l=0:c<=.5?l=a/(o+n):l=a/(2-o-n),{h:s,s:l,l:c}}function Su(t){let e=Jh(t);if(!e)return t;let{h:r,s:i,l:n}=Zh(e);return i+=.1,n-=.1,Xh(Gh({h:r,s:i,l:n}))}var nl={60:\"\\\\lt\",62:\"\\\\gt\",111:\"o\",38:\"\\\\&\",123:\"\\\\lbrace\",125:\"\\\\rbrace\",91:\"\\\\lbrack\",93:\"\\\\rbrack\",58:\"\\\\colon\",160:\"~\",172:\"\\\\neg\",183:\"\\\\cdot\",188:\"\\\\frac{1}{4}\",189:\"\\\\frac{1}{2}\",190:\"\\\\frac{3}{4}\",8304:\"^{0}\",8305:\"^{i}\",185:\"^{1}\",178:\"^{2}\",179:\"^{3}\",8224:\"\\\\dagger\",8225:\"\\\\ddagger\",8230:\"\\\\ldots\",8308:\"^{4}\",8309:\"^{5}\",8310:\"^{6}\",8311:\"^{7}\",8312:\"^{8}\",8313:\"^{9}\",8314:\"^{+}\",8315:\"^{-}\",8316:\"^{=}\",8319:\"^{n}\",8320:\"_{0}\",8321:\"_{1}\",8322:\"_{2}\",8323:\"_{3}\",8324:\"_{4}\",8325:\"_{5}\",8326:\"_{6}\",8327:\"_{7}\",8328:\"_{8}\",8329:\"_{9}\",8330:\"_{+}\",8331:\"_{-}\",8332:\"_{=}\",8336:\"_{a}\",8337:\"_{e}\",8338:\"_{o}\",8339:\"_{x}\",8242:\"\\\\prime\",39:\"\\\\prime\",8592:\"\\\\gets\",8594:\"\\\\to\",9651:\"\\\\triangle\",9661:\"\\\\triangledown\",8715:\"\\\\owns\",8727:\"\\\\ast\",8739:\"\\\\vert\",8741:\"\\\\Vert\",8743:\"\\\\land\",8744:\"\\\\lor\",8901:\"\\\\cdot\",8904:\"\\\\bowtie\",8800:\"\\\\ne\",8804:\"\\\\le\",8805:\"\\\\ge\",8869:\"\\\\bot\",10178:\"\\\\perp\",10231:\"\\\\biconditional\",10232:\"\\\\impliedby\",10233:\"\\\\implies\",10234:\"\\\\iff\",8450:\"\\\\mathbb{C}\",8469:\"\\\\mathbb{N}\",8473:\"\\\\mathbb{P}\",8474:\"\\\\mathbb{Q}\",8477:\"\\\\mathbb{R}\",8484:\"\\\\mathbb{Z}\",8461:\"\\\\mathbb{H}\",8476:\"\\\\Re\",8465:\"\\\\Im\",42:\"\\\\ast\",11036:\"\\\\square\",9633:\"\\\\square\",8720:\"\\\\coprod\",8716:\"\\\\not\\\\ni\",9671:\"\\\\diamond\",8846:\"\\\\uplus\",8851:\"\\\\sqcap\",8852:\"\\\\sqcup\",8768:\"\\\\wr\",8750:\"\\\\oint\",8226:\"\\\\textbullet\",8722:\"-\",978:\"\\\\Upsilon\"},il={119893:8462,119965:8492,119968:8496,119969:8497,119971:8459,119972:8464,119975:8466,119976:8499,119981:8475,119994:8495,119996:8458,120004:8500,120070:8493,120075:8460,120076:8465,120085:8476,120093:8488,120122:8450,120127:8461,120133:8469,120135:8473,120136:8474,120137:8477,120145:8484},ku=[{start:119808,len:26,offset:65,style:\"bold\"},{start:119834,len:26,offset:97,style:\"bold\"},{start:120488,len:25,offset:913,style:\"bold\"},{start:120514,len:25,offset:945,style:\"bold\"},{start:119860,len:26,offset:65,style:\"italic\"},{start:119886,len:26,offset:97,style:\"italic\"},{start:120546,len:25,offset:913,style:\"italic\"},{start:120572,len:25,offset:945,style:\"italic\"},{start:119912,len:26,offset:65,style:\"bolditalic\"},{start:119938,len:26,offset:97,style:\"bolditalic\"},{start:120604,len:25,offset:913,style:\"bolditalic\"},{start:120630,len:25,offset:945,style:\"bolditalic\"},{start:120782,len:10,offset:48,variant:\"main\",style:\"bold\"},{start:119964,len:26,offset:65,variant:\"script\"},{start:119990,len:26,offset:97,variant:\"script\"},{start:120016,len:26,offset:65,variant:\"script\",style:\"bold\"},{start:120042,len:26,offset:97,variant:\"script\",style:\"bold\"},{start:120068,len:26,offset:65,variant:\"fraktur\"},{start:120094,len:26,offset:97,variant:\"fraktur\"},{start:120172,len:26,offset:65,variant:\"fraktur\",style:\"bold\"},{start:120198,len:26,offset:97,variant:\"fraktur\",style:\"bold\"},{start:120120,len:26,offset:65,variant:\"double-struck\"},{start:120146,len:26,offset:97,variant:\"double-struck\"},{start:120792,len:10,offset:48,variant:\"double-struck\"},{start:120432,len:26,offset:65,variant:\"monospace\"},{start:120458,len:26,offset:97,variant:\"monospace\"},{start:120822,len:10,offset:48,variant:\"monospace\"},{start:120224,len:26,offset:65,variant:\"sans-serif\"},{start:120250,len:26,offset:97,variant:\"sans-serif\"},{start:120276,len:26,offset:65,variant:\"sans-serif\",style:\"bold\"},{start:120302,len:26,offset:97,variant:\"sans-serif\",style:\"bold\"},{start:120328,len:26,offset:65,variant:\"sans-serif\",style:\"italic\"},{start:120354,len:26,offset:97,variant:\"sans-serif\",style:\"italic\"},{start:120380,len:26,offset:65,variant:\"sans-serif\",style:\"bolditalic\"},{start:120406,len:26,offset:97,variant:\"sans-serif\",style:\"bolditalic\"},{start:120662,len:25,offset:913,variant:\"sans-serif\",style:\"bold\"},{start:120688,len:25,offset:945,variant:\"sans-serif\",style:\"bold\"},{start:120720,len:25,offset:913,variant:\"sans-serif\",style:\"bolditalic\"},{start:120746,len:25,offset:945,variant:\"sans-serif\",style:\"bolditalic\"},{start:120803,len:10,offset:48,variant:\"sans-serif\"},{start:120812,len:10,offset:48,variant:\"sans-serif\",style:\"bold\"}];function Dn(t,e,r){if(!/[A-Za-z\\d]/.test(t)||(r===\"up\"&&(r=void 0),!e&&!r))return;let i=t.codePointAt(0);if(i===void 0)return t;for(let n of ku)if((!e||n.variant===e)&&(!r||n.style===r)&&i>=n.offset&&i<n.offset+n.len){let o=n.start+i-n.offset;return String.fromCodePoint(il[o]||o)}}function Yh(t){var e;if((t<119808||t>120831)&&(t<8448||t>8527))return{char:String.fromCodePoint(t)};for(let r in il)if(il[r]===t){t=(e=r.codePointAt(0))!=null?e:0;break}for(let r of ku)if(t>=r.start&&t<r.start+r.len)return{char:String.fromCodePoint(t-r.start+r.offset),variant:r.variant,style:r.style};return{char:String.fromCodePoint(t)}}function Lu(t){var a;if(\"{}<>[]$&*#^_%:'\\u02DC\".includes(t)||t.length>1)return;let e=(a=t.codePointAt(0))!=null?a:0,r=nl[e];if(r)return r;let{char:i,variant:n,style:o}=Yh(e);if(!(!n&&!o)){switch(r=i,n){case\"double-struck\":r=`\\\\mathbb{${r}}`;break;case\"fraktur\":r=`\\\\mathfrak{${r}}`;break;case\"script\":r=`\\\\mathscr{${r}}`;break;case\"sans-serif\":r=`\\\\mathsf{${r}}`;break;case\"monospace\":r=`\\\\mathtt{${r}}`;break;case\"calligraphic\":r=`\\\\mathcal{${r}}`;break}switch(o){case\"bold\":r=`\\\\mathbf{${r}}`;break;case\"italic\":r=`\\\\mathit{${r}}`;break;case\"bolditalic\":r=`\\\\mathbfit{${r}}`;break}return r}}function C(t){return t?Array.isArray(t)?t:typeof t==\"object\"&&\"group\"in t?t.group:[]:[]}var On={},Fo=p({},nl),Di={},al={},Qh={darr:\"\\\\downarrow\",dArr:\"\\\\Downarrow\",Darr:\"\\\\Downarrow\",lang:\"\\\\langle\",rang:\"\\\\rangle\",uarr:\"\\\\uparrow\",uArr:\"\\\\Uparrow\",Uarr:\"\\\\Uparrow\",C:\"\\\\mathbb{C}\",H:\"\\\\mathbb{H}\",N:\"\\\\mathbb{N}\",Q:\"\\\\mathbb{Q}\",R:\"\\\\mathbb{R}\",Z:\"\\\\mathbb{Z}\",alef:\"\\\\aleph\",alefsym:\"\\\\aleph\",Alpha:\"\\\\mathrm{A}\",Beta:\"\\\\mathrm{B}\",bull:\"\\\\bullet\",Chi:\"\\\\mathrm{X}\",clubs:\"\\\\clubsuit\",cnums:\"\\\\mathbb{C}\",Complex:\"\\\\mathbb{C}\",Dagger:\"\\\\ddagger\",diamonds:\"\\\\diamondsuit\",doublecap:\"\\\\Cap\",doublecup:\"\\\\Cup\",empty:\"\\\\emptyset\",Epsilon:\"\\\\mathrm{E}\",Eta:\"\\\\mathrm{H}\",exist:\"\\\\exists\",hArr:\"\\\\Leftrightarrow\",harr:\"\\\\leftrightarrow\",Harr:\"\\\\Leftrightarrow\",hearts:\"\\\\heartsuit\",image:\"\\\\Im\",infin:\"\\\\infty\",Iota:\"\\\\mathrm{I}\",isin:\"\\\\in\",Kappa:\"\\\\mathrm{K}\",larr:\"\\\\leftarrow\",Larr:\"\\\\Leftarrow\",lArr:\"\\\\Leftarrow\",lrarr:\"\\\\leftrightarrow\",Lrarr:\"\\\\Leftrightarrow\",lrArr:\"\\\\Leftrightarrow\",Mu:\"\\\\mathrm{M}\",natnums:\"\\\\mathbb{N}\",Nu:\"\\\\mathrm{N}\",Omicron:\"\\\\mathrm{O}\",part:\"\\\\partial\",plusmn:\"\\\\pm\",rarr:\"\\\\rightarrow\",Rarr:\"\\\\Rightarrow\",rArr:\"\\\\Rightarrow\",real:\"\\\\Re\",reals:\"\\\\mathbb{R}\",Reals:\"\\\\mathbb{R}\",restriction:\"\\\\upharpoonright\",Rho:\"\\\\mathrm{P}\",sdot:\"\\\\cdot\",sect:\"\\\\S\",spades:\"\\\\spadesuit\",sub:\"\\\\subset\",sube:\"\\\\subseteq\",supe:\"\\\\supseteq\",Tau:\"\\\\mathrm{T}\",thetasym:\"\\\\vartheta\",varcoppa:\"\\\\coppa\",weierp:\"\\\\wp\",Zeta:\"\\\\mathrm{Z}\"},ef={varGamma:\"\\\\mathit{\\\\Gamma}\",varDelta:\"\\\\mathit{\\\\Delta}\",varTheta:\"\\\\mathit{\\\\Theta}\",varLambda:\"\\\\mathit{\\\\Lambda}\",varXi:\"\\\\mathit{\\\\Xi}\",varPi:\"\\\\mathit{\\\\Pi}\",varSigma:\"\\\\mathit{\\\\Sigma}\",varUpsilon:\"\\\\mathit{\\\\Upsilon}\",varPhi:\"\\\\mathit{\\\\Phi}\",varPsi:\"\\\\mathit{\\\\Psi}\",varOmega:\"\\\\mathit{\\\\Omega}\",pmod:{def:\"\\\\quad(\\\\operatorname{mod}\\\\ #1)\",args:1,expand:!1,captureSelection:!1},mod:{def:\"\\\\quad\\\\operatorname{mod}\\\\,\\\\,#1\",args:1,expand:!1},bmod:{def:\"\\\\;\\\\mathbin{\\\\operatorname{mod }}\",expand:!1}},tf={bra:{def:\"\\\\mathinner{\\\\langle{#1}|}\",args:1,captureSelection:!1},ket:{def:\"\\\\mathinner{|{#1}\\\\rangle}\",args:1,captureSelection:!1},braket:{def:\"\\\\mathinner{\\\\langle{#1}\\\\rangle}\",args:1,captureSelection:!1},set:{def:\"\\\\mathinner{\\\\lbrace #1 \\\\rbrace}\",args:1,captureSelection:!1},Bra:{def:\"\\\\left\\\\langle #1\\\\right|\",args:1,captureSelection:!1},Ket:{def:\"\\\\left|#1\\\\right\\\\rangle\",args:1,captureSelection:!1},Braket:{def:\"\\\\left\\\\langle{#1}\\\\right\\\\rangle\",args:1,captureSelection:!1},Set:{def:\"\\\\left\\\\lbrace #1 \\\\right\\\\rbrace\",args:1,captureSelection:!1}},rf={strut:{primitive:!0,def:\"\\\\phantom{\\\\rule[0.3\\\\baselineskip]{0}{0.7\\\\baselineskip}}\",args:0,captureSelection:!0},iff:{primitive:!0,captureSelection:!0,def:\"\\\\;\\\\Longleftrightarrow\\\\;\"},nicefrac:\"^{#1}\\\\!\\\\!/\\\\!_{#2}\",phase:{def:\"\\\\enclose{phasorangle}{#1}\",args:1,captureSelection:!1},rd:\"\\\\mathrm{d}\",rD:\"\\\\mathrm{D}\",odif:\"\\\\mathrm{d}\",doubleStruckCapitalN:\"\\\\mathbb{N}\",doubleStruckCapitalR:\"\\\\mathbb{R}\",doubleStruckCapitalQ:\"\\\\mathbb{Q}\",doubleStruckCapitalZ:\"\\\\mathbb{Z}\",doubleStruckCapitalP:\"\\\\mathbb{P}\",scriptCapitalE:\"\\\\mathscr{E}\",scriptCapitalH:\"\\\\mathscr{H}\",scriptCapitalL:\"\\\\mathscr{L}\",gothicCapitalC:\"\\\\mathfrak{C}\",gothicCapitalH:\"\\\\mathfrak{H}\",gothicCapitalI:\"\\\\mathfrak{I}\",gothicCapitalR:\"\\\\mathfrak{R}\",imaginaryI:\"\\\\mathrm{i}\",imaginaryJ:\"\\\\mathrm{j}\",exponentialE:\"\\\\mathrm{e}\",differentialD:\"\\\\mathrm{d}\",capitalDifferentialD:\"\\\\mathrm{D}\",mathstrut:{def:\"\\\\vphantom{(}\",primitive:!0},angl:\"\\\\enclose{actuarial}{#1}\",angln:\"\\\\enclose{actuarial}{n}\",anglr:\"\\\\enclose{actuarial}{r}\",anglk:\"\\\\enclose{actuarial}{k}\",mathtools:{primitive:!0,package:{ordinarycolon:\":\",vcentcolon:\"\\\\mathrel{\\\\mathop\\\\ordinarycolon}\",dblcolon:'{\\\\mathop{\\\\char\"2237}}',coloneqq:'{\\\\mathop{\\\\char\"2254}}',Coloneqq:'{\\\\mathop{\\\\char\"2A74}}',coloneq:'{\\\\mathop{\\\\char\"2254}}',Coloneq:'{\\\\mathop{\\\\char\"2A74}}',eqqcolon:'{\\\\mathop{\\\\char\"2255}}',Eqqcolon:'{\\\\mathop{\\\\char\"3D\\\\char\"2237}}',eqcolon:'{\\\\mathop{\\\\char\"2255}}',Eqcolon:'{\\\\mathop{\\\\char\"3D\\\\char\"2237}}',colonapprox:'{\\\\mathop{\\\\char\"003A\\\\char\"2248}}',Colonapprox:'{\\\\mathop{\\\\char\"2237\\\\char\"2248}}',colonsim:'{\\\\mathop{\\\\char\"3A\\\\char\"223C}}',Colonsim:'{\\\\mathop{\\\\char\"2237\\\\char\"223C}}',colondash:\"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}\",Colondash:\"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}\",dashcolon:\"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\",Dashcolon:\"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\"}},ratio:\"\\\\vcentcolon\",coloncolon:\"\\\\dblcolon\",colonequals:\"\\\\coloneq\",coloncolonequals:\"\\\\Coloneq\",equalscolon:\"\\\\eqcolon\",equalscoloncolon:\"\\\\Eqcolon\",colonminus:\"\\\\colondash\",coloncolonminus:\"\\\\Colondash\",minuscolon:\"\\\\dashcolon\",minuscoloncolon:\"\\\\Dashcolon\",coloncolonapprox:\"\\\\Colonapprox\",coloncolonsim:\"\\\\Colonsim\",simcolon:\"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\",Simcolon:\"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\",simcoloncolon:\"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\",approxcolon:\"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\",Approxcolon:\"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\",approxcoloncolon:\"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\",notni:\"\\\\mathrel{\\\\char`\\u220C}\",limsup:\"\\\\operatorname*{lim\\\\,sup}\",liminf:\"\\\\operatorname*{lim\\\\,inf}\",injlim:\"\\\\operatorname*{inj\\\\,lim}\",projlim:\"\\\\operatorname*{proj\\\\,lim}\",varlimsup:\"\\\\operatorname*{\\\\overline{lim}}\",varliminf:\"\\\\operatorname*{\\\\underline{lim}}\",varinjlim:\"\\\\operatorname*{\\\\underrightarrow{lim}}\",varprojlim:\"\\\\operatorname*{\\\\underleftarrow{lim}}\",argmin:\"\\\\operatorname*{arg\\\\,min}\",argmax:\"\\\\operatorname*{arg\\\\,max}\",plim:\"\\\\mathop{\\\\operatorname{plim}}\\\\limits\",tripledash:{def:\"\\\\vphantom{-}\\\\raise{4mu}{\\\\mkern1.5mu\\\\rule{2mu}{1.5mu}\\\\mkern{2.25mu}\\\\rule{2mu}{1.5mu}\\\\mkern{2.25mu}\\\\rule{2mu}{1.5mu}\\\\mkern{2mu}}\",expand:!0},\"braket.sty\":{package:tf},\"amsmath.sty\":{package:ef,primitive:!0},\"texvc.sty\":{package:Qh,primitive:!1}},Ti={\" \":32,\"\\\\!\":33,\"\\\\#\":35,\"\\\\$\":36,\"\\\\%\":37,\"\\\\&\":38,\"\\\\_\":95,\"-\":45,\"\\\\textunderscore\":95,\"\\\\euro\":8364,\"\\\\maltese\":10016,\"\\\\{\":123,\"\\\\}\":125,\"\\\\textbraceleft\":123,\"\\\\textbraceright\":125,\"\\\\lbrace\":123,\"\\\\rbrace\":125,\"\\\\lbrack\":91,\"\\\\rbrack\":93,\"\\\\nobreakspace\":160,\"\\\\ldots\":8230,\"\\\\textellipsis\":8230,\"\\\\backslash\":92,\"`\":8216,\"'\":8217,\"``\":8220,\"''\":8221,\"\\\\degree\":176,\"\\\\textasciicircum\":94,\"\\\\textasciitilde\":126,\"\\\\textasteriskcentered\":42,\"\\\\textbackslash\":92,\"\\\\textbullet\":8226,\"\\\\textdollar\":36,\"\\\\textsterling\":163,\"\\\\textdagger\":8224,\"\\\\textdaggerdbl\":8225,\"\\u2013\":8211,\"\\u2014\":8212,\"\\u2018\":8216,\"\\u2019\":8217,\"\\u201C\":8220,\"\\u201D\":8221,'\"':8221,\"\\\\ss\":223,\"\\\\ae\":230,\"\\\\oe\":339,\"\\\\AE\":198,\"\\\\OE\":338,\"\\\\O\":216,\"\\\\i\":305,\"\\\\j\":567,\"\\\\aa\":229,\"\\\\AA\":197},Eu=/[\\w!@*()-=+{}\\[\\]\\\\';:?/.,~<>`|$%#&^\" ]/,$o,Zr;au()?($o=new RegExp(\"\\\\p{Letter}\",\"u\"),Zr=new RegExp(\"[0-9\\\\p{Letter}]\",\"u\")):($o=/[a-zA-ZаАбБвВгГдДеЕёЁжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяĄąĆćĘęŁłŃńÓóŚśŹźŻżàâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏÎŸÇÙÛÜÆŒößÖẞìíòúÌÍÒÚáñÁÑ]/,Zr=/[\\da-zA-ZаАбБвВгГдДеЕёЁжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяĄąĆćĘęŁłŃńÓóŚśŹźŻżàâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏÎŸÇÙÛÜÆŒößÖẞìíòúÌÍÒÚáñÁÑ]/);function ol(t,e,r=\"mord\",i){e!==void 0&&(On[t]={definitionType:\"symbol\",type:r,variant:i,codepoint:e},Fo[e]||(Fo[e]=t))}function Me(t,e,r){if(typeof t==\"string\"){for(let i=0;i<t.length;i++){let n=t.charAt(i);ol(n,n.codePointAt(0))}return}for(let[i,n,o,a]of t)ol(i,n,o!=null?o:e,a!=null?a:r)}function sl(t,e){for(let r=t;r<=e;r++)ol(String.fromCodePoint(r),r)}function Tu(t){var e;return(e=al[t])!=null?e:null}function Du(t,e){var n,o;if(e.length===0||e===\"\\\\\"||!e.startsWith(\"\\\\\"))return[];let r=[];for(let a in Di)a.startsWith(e)&&!Di[a].infix&&r.push({match:a,frequency:(n=Di[a].frequency)!=null?n:0});for(let a in On)a.startsWith(e)&&r.push({match:a,frequency:(o=On[a].frequency)!=null?o:0});let i=e.substring(1);for(let a of Object.keys(t.options.macros))a.startsWith(i)&&r.push({match:\"\\\\\"+a,frequency:0});return r.sort((a,s)=>{var l,c;return a.frequency===s.frequency?a.match.length===s.match.length?a.match<s.match?-1:1:a.match.length-s.match.length:((l=s.frequency)!=null?l:0)-((c=a.frequency)!=null?c:0)}),r.map(a=>a.match)}function Au(t){let e=\"auto\",r=t.match(/:([^=]+)/);return r&&(e=r[1].trim()),e}function Vo(t){if(!t)return[];let e=[],r=t.split(\"]\");if(r[0].startsWith(\"[\")){e.push({isOptional:!0,type:Au(r[0].slice(1))});for(let i=1;i<=r.length;i++)e.push(...Vo(r[i]))}else if(r=t.split(\"}\"),r[0].startsWith(\"{\")){e.push({isOptional:!1,type:Au(r[0].slice(1))});for(let i=1;i<=r.length;i++)e.push(...Vo(r[i]))}return e}function ll(t){if(!t)return\"\";let e=\"\",r=!0;for(let i of t)typeof i.value==\"string\"?e+=i.value:r=!1;return r?e:\"\"}function Ct(t,e,r){typeof t==\"string\"&&(t=[t]);let n={tabular:!0,rootOnly:!1,params:Vo(e),createAtom:r};for(let o of t)al[o]=n}function qo(t,e,r){var n;typeof t==\"string\"&&(t=[t]);let i={tabular:(n=r==null?void 0:r.tabular)!=null?n:!1,rootOnly:!0,params:[],createAtom:e};for(let o of t)al[o]=i}function M(t,e,r){var n,o;r||(r={});let i={definitionType:\"function\",params:Vo(e),ifMode:r.ifMode,isFunction:(n=r.isFunction)!=null?n:!1,applyMode:r.applyMode,infix:(o=r.infix)!=null?o:!1,parse:r.parse,createAtom:r.createAtom,applyStyle:r.applyStyle,serialize:r.serialize,render:r.render};if(typeof t==\"string\")Di[\"\\\\\"+t]=i;else for(let a of t)Di[\"\\\\\"+a]=i}var No;function Bi(t){return No||(No=Oi(rf)),t?Oi(p(p({},No),t)):No}function Cu(t,e){var r,i,n,o;if(typeof t==\"string\"){let a=0,s=t;return/(^|[^\\\\])#1/.test(s)&&(a=1),/(^|[^\\\\])#2/.test(s)&&(a=2),/(^|[^\\\\])#3/.test(s)&&(a=3),/(^|[^\\\\])#4/.test(s)&&(a=4),/(^|[^\\\\])#5/.test(s)&&(a=5),/(^|[^\\\\])#6/.test(s)&&(a=6),/(^|[^\\\\])#7/.test(s)&&(a=7),/(^|[^\\\\])#8/.test(s)&&(a=8),/(^|[^\\\\])#9/.test(s)&&(a=9),{expand:(r=e==null?void 0:e.expand)!=null?r:!0,captureSelection:(i=e==null?void 0:e.captureSelection)!=null?i:!0,args:a,def:s}}return p({expand:(n=e==null?void 0:e.expand)!=null?n:!0,captureSelection:(o=e==null?void 0:e.captureSelection)!=null?o:!0,args:0},t)}function Oi(t){if(!t)return{};let e={};for(let r of Object.keys(t)){let i=t[r];if(i==null)delete e[r];else if(typeof i==\"object\"&&\"package\"in i)for(let n of Object.keys(i.package))e[n]=Cu(i.package[n],{expand:!i.primitive,captureSelection:i.captureSelection});else e[r]=Cu(i)}return e}function ne(t,e=\"math\"){if(!t||t.length===0)return null;let r=null;if(t.startsWith(\"\\\\\")){if(r=Di[t],r)return!r.ifMode||r.ifMode===e?r:null;e===\"math\"?r=On[t]:Ti[t]&&(r={definitionType:\"symbol\",type:\"mord\",codepoint:Ti[t]})}else if(e===\"math\"){if(r=On[t],!r&&t.length===1){let i=cl(\"math\",t.codePointAt(0));return i.startsWith(\"\\\\\")?g(p({},ne(i,\"math\")),{command:i}):null}}else Ti[t]?r={definitionType:\"symbol\",type:\"mord\",codepoint:Ti[t]}:e===\"text\"&&(r={definitionType:\"symbol\",type:\"mord\",codepoint:t.codePointAt(0)});return r!=null?r:null}function Ki(t,e){if(!t.startsWith(\"\\\\\"))return null;let r=t.slice(1);return e[r]}function cl(t,e){if(e===void 0)return\"\";if(t===\"math\"&&Fo[e])return Fo[e];if(t===\"text\"){let r=Object.keys(Ti).find(i=>Ti[i]===e);return r||String.fromCodePoint(e)}return String.fromCodePoint(e)}var Qe=[0,.68889,0,0,.72222],Yr=[0,.68889,0,0,.66667],ul=[0,.68889,0,0,.77778],Ho=[0,.68889,0,0,.61111],Ou=[.16667,.68889,0,0,.77778],Bn=[0,.68889,0,0,.55556],Z=[0,0,0,0,.25],Bu=[0,.825,0,0,2.33334],Ku=[0,.9,0,0,2.33334],Wo=[0,.68889,0,0,.54028],dl=[-.03598,.46402,0,0,.5],De=[-.13313,.36687,0,0,1],Uo=[.01354,.52239,0,0,1],Pu=[.01354,.52239,0,0,1.11111],Ru=[0,.54986,0,0,1],jo=[0,.69224,0,0,.5],ml=[0,.43056,0,0,1],br=[.08198,.58198,0,0,.77778],Jo=[.19444,.69224,0,0,.41667],Go=[.1808,.675,0,0,1],Iu=[.19444,.69224,0,0,.83334],zu=[.13667,.63667,0,0,1],Nu=[-.064,.437,0,0,1.334],yr=[.08167,.58167,0,0,.77778],Kn=[0,.69224,0,0,.72222],pl=[0,.69224,0,0,.66667],Xo=[-.13313,.36687,0,0,.77778],Fu=[.06062,.54986,0,0,.77778],Zo=[0,.69224,0,0,.77778],Pi=[.25583,.75583,0,0,.77778],Et=[.25142,.75726,0,0,.77778],Ri=[.20576,.70576,0,0,.77778],lt=[.30274,.79383,0,0,.77778],Pn=[.22958,.72958,0,0,.77778],$u=[.1808,.675,0,0,.77778],Tt=[.13667,.63667,0,0,.77778],$e=[.13597,.63597,0,0,.77778],xr=[.03517,.54986,0,0,.77778],Ii=[0,.675,0,0,.77778],Vu=[.19444,.69224,0,0,.61111],qu=[0,.54986,0,0,.76042],Hu=[0,.54986,0,0,.66667],vr=[.0391,.5391,0,0,.77778],Wu=[.03517,.54986,0,0,1.33334],Uu=[.38569,.88569,0,0,.77778],Yo=[.23222,.74111,0,0,.77778],ju=[.19444,.69224,0,0,.77778],Ju=[0,.37788,0,0,.5],Qo=[0,.54986,0,0,.72222],Gu=[0,.69224,0,0,.83334],Xu=[.11111,.69224,0,0,.66667],zi=[.26167,.75726,0,0,.77778],Zu=[.48256,.98256,0,0,.77778],Yu=[.28481,.79383,0,0,.77778],Qu=[.08167,.58167,0,0,.22222],ed=[.08167,.58167,0,0,.38889],td=[0,.43056,.04028,0,.66667],rd=[.41951,.91951,0,0,.77778],id=[.24982,.74947,0,0,.38865],nd=[.08319,.58283,0,0,.75623],od=[0,.10803,0,0,.27764],hl=[0,.47534,0,0,.50181],Rn=[.18906,.47534,0,0,.50181],ad=[0,.69141,0,0,.50181],sd=[.24982,.74947,0,0,.27764],fl=[0,.69141,0,0,.21471],ea=[.25,.75,0,0,.44722],et=[0,.64444,0,0,.575],Ni=[.08556,.58556,0,0,.89444],ta=[0,.69444,0,0,.89444],ra=[0,.68611,0,0,.9],gl=[0,.68611,0,0,.86944],_r=[.25,.75,0,0,.575],ia=[.25,.75,0,0,.31944],Qr=[0,.69444,0,0,.63889],Fi=[0,.69444,0,0,.31944],ld=[0,.44444,0,0,.63889],cd=[0,.44444,0,0,.51111],Mr=[0,.69444,0,0,.575],ct=[.13333,.63333,0,0,.89444],ud=[0,.44444,0,0,.31944],dd=[0,.69444,0,0,.86944],md=[0,.68611,0,0,.69166],na=[0,.68611,0,0,.83055],bl=[0,.68611,0,0,.89444],yl=[0,.69444,0,0,.60278],pd=[.19444,.69444,0,0,.51111],hd=[0,.69444,0,0,.83055],Dt=[-.10889,.39111,0,0,1.14999],fd=[.19444,.69444,0,0,.575],In=[.19444,.69444,0,0,1.14999],gd=[.19444,.69444,0,0,.70277],bd=[.05556,.75,0,0,.575],xl=[0,.68611,0,0,.95833],yd=[.08556,.58556,0,0,.76666],vl=[-.02639,.47361,0,0,.575],xd=[0,.44444,0,0,.89444],ei=[0,.55556,0,0,.76666],vd=[-.10889,.39111,0,0,.89444],_l=[.00222,.50222,0,0,.89444],wr=[.19667,.69667,0,0,.89444],_d=[.08556,.58556,0,0,1.14999],Ml=[0,.69444,0,0,.70277],oa=[-.02778,.47222,0,0,.575],aa=[.25,.75,0,0,.51111],Md=[-.13889,.36111,0,0,1.14999],wd=[.19444,.69444,0,0,1.02222],sa=[.12963,.69444,0,0,.89444],Sd=[.19444,.69444,0,0,.44722],Sr=[0,.64444,.13167,0,.59111],kd=[.19444,.64444,.13167,0,.59111],wl=[0,.68611,.17208,0,.8961],Ld=[.19444,.44444,.105,0,.53222],Ad=[0,.44444,.085,0,.82666],Cd=[0,.69444,.06709,0,.59111],la=[0,.69444,.12945,0,.35555],Ed=[0,.69444,0,0,.94888],Sl=[0,.69444,.11472,0,.59111],Td=[0,.68611,.10778,0,.88555],Dd=[0,.69444,.07939,0,.62055],ca=[0,.69444,.12417,0,.30667],kr=[0,.64444,.13556,0,.51111],Od=[.19444,.64444,.13556,0,.51111],ua=[0,.68333,.16389,0,.74333],Bd=[.19444,.43056,.08847,0,.46],Kd=[0,.43056,.07514,0,.71555],Pd=[0,.69444,.06646,0,.51111],Rd=[0,.69444,0,0,.83129],Id=[0,.69444,.1225,0,.51111],zd=[0,.68333,.09403,0,.76666],Nd=[0,.68333,.11111,0,.76666],Fd=[0,.69444,.06961,0,.51444],Qt=[0,.69444,0,0,.27778],$i=[.25,.75,0,0,.38889],tt=[0,.64444,0,0,.5],ti=[0,.69444,0,0,.77778],ri=[0,.68333,0,0,.75],zn=[0,.68333,0,0,.77778],$d=[0,.68333,0,0,.68056],Nn=[0,.68333,0,0,.72222],er=[.25,.75,0,0,.5],da=[.25,.75,0,0,.27778],we=[0,.69444,0,0,.5],Vi=[0,.69444,0,0,.55556],kl=[0,.43056,0,0,.44445],Fn=[0,.43056,0,0,.5],Vd=[.19444,.43056,0,0,.55556],qd=[0,.43056,0,0,.55556],rt=[.08333,.58333,0,0,.77778],Hd=[0,.43056,0,0,.27778],Wd=[0,.66786,0,0,.27778],Ud=[0,.69444,0,0,.75],jd=[0,.66786,0,0,.5],Jd=[0,.68333,0,0,.625],Ll=[.19444,.69444,0,0,.44445],$n=[0,.69444,0,0,.72222],Gd=[.19444,.69444,0,0,.5],Vn=[.19444,.69444,0,0,1],Xd=[.011,.511,0,0,1.126],Al=[.19444,.69444,0,0,.61111],Cl=[.05556,.75,0,0,.5],Zd=[0,.68333,0,0,.83334],Yd=[.0391,.5391,0,0,.66667],El=[-.05555,.44445,0,0,.5],Qd=[0,.43056,0,0,.77778],ii=[0,.55556,0,0,.66667],ma=[-.03625,.46375,0,0,.77778],em=[-.01688,.48312,0,0,.77778],tm=[.0391,.5391,0,0,1],Lr=[0,.69444,0,0,.61111],pa=[-.03472,.46528,0,0,.5],ha=[.25,.75,0,0,.44445],rm=[-.14236,.35764,0,0,1],fa=[.244,.744,0,0,.412],im=[.19444,.69444,0,0,.88889],ga=[.12963,.69444,0,0,.77778],nm=[.19444,.69444,0,0,.38889],om=[.011,.511,0,0,1.638],am=[.19444,.69444,0,0,0],ba=[0,.44444,0,0,.575],qn=[.19444,.44444,0,0,.575],sm=[0,.68611,0,0,.75555],lm=[0,.69444,0,0,.66759],cm=[0,.68611,0,0,.80555],um=[0,.68611,.08229,0,.98229],dm=[0,.68611,0,0,.76666],mm=[0,.44444,0,0,.58472],pm=[.19444,.44444,0,0,.6118],Hn=[.19444,.43056,0,0,.5],hm=[0,.68333,.02778,.08334,.76278],fm=[0,.68333,.08125,.05556,.83125],gm=[0,.43056,0,.05556,.48472],bm=[.19444,.43056,0,.08334,.51702],ym=[.25,.75,0,0,.42778],Ce=[0,.69444,0,0,.55],tr=[0,.69444,0,0,.73334],Ar=[0,.69444,0,0,.79445],xm=[0,.69444,0,0,.51945],Tl=[0,.69444,0,0,.70278],vm=[0,.69444,0,0,.76389],_m=[.25,.75,0,0,.34306],Dl=[0,.69444,0,0,.56111],Mm=[0,.69444,0,0,.25556],wm=[.19444,.45833,0,0,.56111],Sm=[0,.45833,0,0,.56111],ya=[0,.69444,0,0,.30556],km=[0,.69444,0,0,.58056],Lm=[0,.69444,0,0,.67223],Ol=[0,.69444,0,0,.85556],Bl=[0,.69444,0,0,.55834],Ot=[0,.65556,.11156,0,.5],Kl=[0,.69444,.08094,0,.70834],Pl=[.17014,0,0,0,.44445],Am=[0,.69444,.0799,0,.5],Cm=[0,.69444,0,0,.73752],Em=[0,.69444,.09205,0,.5],Tm=[0,.69444,.09031,0,.77778],Rl=[0,.69444,.07816,0,.27778],Dm=[0,.69444,.00316,0,.5],Om=[.19444,.69444,0,0,.83334],Bm=[.05556,.75,0,0,.83334],Km=[0,.75,0,0,.5],Pm=[.125,.08333,0,0,.27778],Rm=[0,.08333,0,0,.27778],Bt=[0,.65556,0,0,.5],Il=[0,.69444,0,0,.47222],rr=[0,.69444,0,0,.66667],Im=[0,.69444,0,0,.59722],zl=[0,.69444,0,0,.54167],Nl=[0,.69444,0,0,.70834],zm=[.25,.75,0,0,.28889],Fl=[0,.69444,0,0,.51667],Nm=[0,.44444,0,0,.44445],Fm=[.19444,.44444,0,0,.51667],$m=[0,.44444,0,0,.38333],Vm=[0,.44444,0,0,.51667],qm=[0,.69444,0,0,.83334],Hm=[.35001,.85,0,0,.45834],Wm=[.35001,.85,0,0,.57778],Um=[.35001,.85,0,0,.41667],jm=[.35001,.85,0,0,.58334],xa=[0,.72222,0,0,.55556],Jm=[1e-5,.6,0,0,.66667],Gm=[1e-5,.6,0,0,.77778],Xm=[.25001,.75,0,0,.94445],Zm=[.306,.805,.19445,0,.47222],Ym=[.30612,.805,.19445,0,.47222],qi=[.25001,.75,0,0,.83334],Hi=[.35001,.85,0,0,.47222],$l=[.25001,.75,0,0,1.11111],Qm=[.65002,1.15,0,0,.59722],e0=[.65002,1.15,0,0,.81111],t0=[.65002,1.15,0,0,.47222],r0=[.65002,1.15,0,0,.66667],va=[0,.75,0,0,1],i0=[.55001,1.05,0,0,1.27778],n0=[.862,1.36,.44445,0,.55556],o0=[.86225,1.36,.44445,0,.55556],Wi=[.55001,1.05,0,0,1.11111],_a=[.65002,1.15,0,0,.52778],a0=[.65002,1.15,0,0,.61111],Vl=[.55001,1.05,0,0,1.51112],s0=[.95003,1.45,0,0,.73611],l0=[.95003,1.45,0,0,1.04445],c0=[.95003,1.45,0,0,.52778],Ma=[.95003,1.45,0,0,.75],wa=[0,.75,0,0,1.44445],Sa=[.95003,1.45,0,0,.58334],u0=[1.25003,1.75,0,0,.79167],d0=[1.25003,1.75,0,0,1.27778],m0=[1.25003,1.75,0,0,.58334],ka=[1.25003,1.75,0,0,.80556],La=[0,.825,0,0,1.8889],Aa=[1.25003,1.75,0,0,.63889],Ca=[.64502,1.155,0,0,.875],p0=[1e-5,.6,0,0,.875],ql=[-99e-5,.601,0,0,.66667],Ea=[.64502,1.155,0,0,.66667],h0=[1e-5,.9,0,0,.88889],f0=[.65002,1.15,0,0,.88889],g0=[.90001,0,0,0,.88889],b0=[-.00499,.605,0,0,1.05556],Ta=[0,.12,0,0,.45],O=[0,.61111,0,0,.525],ut=[.08333,.69444,0,0,.525],y0=[-.08056,.53055,0,0,.525],x0=[-.05556,.55556,0,0,.525],Ke=[0,.43056,0,0,.525],Wn=[.22222,.43056,0,0,.525],v0=[0,0,0,0,.525],_0={\"AMS-Regular\":{32:Z,65:Qe,66:Yr,67:Qe,68:Qe,69:Yr,70:Ho,71:ul,72:ul,73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:ul,76:Yr,77:[0,.68889,0,0,.94445],78:Qe,79:Ou,80:Ho,81:Ou,82:Qe,83:Bn,84:Yr,85:Qe,86:Qe,87:[0,.68889,0,0,1],88:Qe,89:Qe,90:Yr,107:Bn,160:Z,165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:Bn,295:Wo,710:Bu,732:Ku,770:Bu,771:Ku,989:yr,1008:td,8245:[0,.54986,0,0,.275],8463:Wo,8487:Qe,8498:Bn,8502:Yr,8503:[0,.68889,0,0,.44445],8504:Yr,8513:[0,.68889,0,0,.63889],8592:dl,8594:dl,8602:De,8603:De,8606:Uo,8608:Uo,8610:Pu,8611:Pu,8619:Ru,8620:Ru,8621:[-.13313,.37788,0,0,1.38889],8622:De,8624:jo,8625:jo,8630:ml,8631:ml,8634:br,8635:br,8638:Jo,8639:Jo,8642:Jo,8643:Jo,8644:Go,8646:Go,8647:Go,8648:Iu,8649:Go,8650:Iu,8651:Uo,8652:Uo,8653:De,8654:De,8655:De,8666:zu,8667:zu,8669:[-.13313,.37788,0,0,1],8672:Nu,8674:Nu,8705:[0,.825,0,0,.5],8708:Bn,8709:yr,8717:[0,.43056,0,0,.42917],8722:dl,8724:[.08198,.69224,0,0,.77778],8726:yr,8733:Zo,8736:Kn,8737:Kn,8738:[.03517,.52239,0,0,.72222],8739:Qu,8740:[.25142,.74111,0,0,.27778],8741:ed,8742:[.25142,.74111,0,0,.5],8756:pl,8757:pl,8764:Xo,8765:[-.13313,.37788,0,0,.77778],8769:Xo,8770:ma,8774:lt,8776:em,8778:yr,8782:Fu,8783:Fu,8785:br,8786:br,8787:br,8790:Zo,8791:Pn,8796:[.08198,.91667,0,0,.77778],8806:Pi,8807:Pi,8808:Et,8809:Et,8812:[.25583,.75583,0,0,.5],8814:Ri,8815:Ri,8816:lt,8817:lt,8818:Pn,8819:Pn,8822:$u,8823:$u,8828:Tt,8829:Tt,8830:Pn,8831:Pn,8832:Ri,8833:Ri,8840:lt,8841:lt,8842:$e,8843:$e,8847:xr,8848:xr,8858:br,8859:br,8861:br,8862:Ii,8863:Ii,8864:Ii,8865:Ii,8872:[0,.69224,0,0,.61111],8873:Kn,8874:[0,.69224,0,0,.88889],8876:Ho,8877:Ho,8878:Qe,8879:Qe,8882:xr,8883:xr,8884:Tt,8885:Tt,8888:[0,.54986,0,0,1.11111],8890:Vd,8891:Vu,8892:Vu,8901:[0,.54986,0,0,.27778],8903:yr,8905:yr,8906:yr,8907:Zo,8908:Zo,8909:[-.03598,.46402,0,0,.77778],8910:qu,8911:qu,8912:xr,8913:xr,8914:Hu,8915:Hu,8916:pl,8918:vr,8919:vr,8920:Wu,8921:Wu,8922:Uu,8923:Uu,8926:Tt,8927:Tt,8928:lt,8929:lt,8934:Yo,8935:Yo,8936:Yo,8937:Yo,8938:Ri,8939:Ri,8940:lt,8941:lt,8994:ju,8995:ju,9416:[.15559,.69224,0,0,.90222],9484:jo,9488:jo,9492:Ju,9496:Ju,9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:Ii,9633:Ii,9650:Qo,9651:Qo,9654:xr,9660:Qo,9661:Qo,9664:xr,9674:Xu,9733:[.19444,.69224,0,0,.94445],10003:Gu,10016:Gu,10731:Xu,10846:[.19444,.75583,0,0,.61111],10877:Tt,10878:Tt,10885:Pi,10886:Pi,10887:$e,10888:$e,10889:zi,10890:zi,10891:Zu,10892:Zu,10901:Tt,10902:Tt,10933:Et,10934:Et,10935:zi,10936:zi,10937:zi,10938:zi,10949:Pi,10950:Pi,10955:Yu,10956:Yu,57350:Qu,57351:ed,57352:yr,57353:td,57356:Et,57357:Et,57358:rd,57359:lt,57360:lt,57361:rd,57366:Et,57367:Et,57368:Et,57369:Et,57370:$e,57371:$e},\"Caligraphic-Regular\":{32:Z,65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:Z},\"Fraktur-Regular\":{32:Z,33:[0,.69141,0,0,.29574],34:fl,38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:id,41:id,42:[0,.62119,0,0,.27764],43:nd,44:od,45:nd,46:od,47:[.24982,.74947,0,0,.50181],48:hl,49:hl,50:hl,51:Rn,52:Rn,53:Rn,54:ad,55:Rn,56:ad,57:Rn,58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:sd,93:sd,94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:Z,8216:fl,8217:fl,58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},\"Main-Bold\":{32:Z,33:[0,.69444,0,0,.35],34:yl,35:[.19444,.69444,0,0,.95833],36:bd,37:[.05556,.75,0,0,.95833],38:ta,39:Fi,40:ea,41:ea,42:[0,.75,0,0,.575],43:ct,44:[.19444,.15556,0,0,.31944],45:$m,46:[0,.15556,0,0,.31944],47:_r,48:et,49:et,50:et,51:et,52:et,53:et,54:et,55:et,56:et,57:et,58:ud,59:[.19444,.44444,0,0,.31944],60:Ni,61:vd,62:Ni,63:[0,.69444,0,0,.54305],64:ta,65:gl,66:[0,.68611,0,0,.81805],67:na,68:[0,.68611,0,0,.88194],69:sm,70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:ra,73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:md,77:[0,.68611,0,0,1.09166],78:ra,79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:gl,89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:ia,92:_r,93:ia,94:Mr,95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:Qr,99:cd,100:Qr,101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:Qr,105:Fi,106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:Fi,109:[0,.44444,0,0,.95833],110:ld,111:ba,112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:ld,118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:cd,123:_r,124:ia,125:_r,126:[.35,.34444,0,0,.575],160:Z,163:[0,.69444,0,0,.86853],168:Mr,172:[0,.44444,0,0,.76666],176:dd,177:ct,184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:ct,216:[.04861,.73472,0,0,.89444],223:Im,230:[0,.44444,0,0,.83055],247:ct,248:[.09722,.54167,0,0,.575],305:ud,338:[0,.68611,0,0,1.16944],339:xd,567:[.19444,.44444,0,0,.35139],710:Mr,711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:Mr,715:Mr,728:Mr,729:Fi,730:dd,732:Mr,733:Mr,915:md,916:xl,920:bl,923:cm,926:dm,928:ra,931:na,933:bl,934:na,936:bl,937:na,8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:Fi,8217:Fi,8220:yl,8221:yl,8224:pd,8225:pd,8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:lm,8465:hd,8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:hd,8501:Ml,8592:Dt,8593:fd,8594:Dt,8595:fd,8596:Dt,8597:_r,8598:In,8599:In,8600:In,8601:In,8636:Dt,8637:Dt,8640:Dt,8641:Dt,8656:Dt,8657:gd,8658:Dt,8659:gd,8660:Dt,8661:[.25,.75,0,0,.70277],8704:Qr,8706:[0,.69444,.06389,0,.62847],8707:Qr,8709:bd,8711:xl,8712:yd,8715:yd,8722:ct,8723:ct,8725:_r,8726:_r,8727:oa,8728:vl,8729:vl,8730:[.18,.82,0,0,.95833],8733:xd,8734:[0,.44444,0,0,1.14999],8736:Kn,8739:ia,8741:_r,8743:ei,8744:ei,8745:ei,8746:ei,8747:[.19444,.69444,.12778,0,.56875],8764:vd,8768:[.19444,.69444,0,0,.31944],8771:_l,8776:[.02444,.52444,0,0,.89444],8781:_l,8801:_l,8804:wr,8805:wr,8810:_d,8811:_d,8826:Ni,8827:Ni,8834:Ni,8835:Ni,8838:wr,8839:wr,8846:ei,8849:wr,8850:wr,8851:ei,8852:ei,8853:ct,8854:ct,8855:ct,8856:ct,8857:ct,8866:Ml,8867:Ml,8868:ta,8869:ta,8900:vl,8901:[-.02639,.47361,0,0,.31944],8902:oa,8968:aa,8969:aa,8970:aa,8971:aa,8994:Md,8995:Md,9651:wd,9657:oa,9661:wd,9667:oa,9711:In,9824:sa,9825:sa,9826:sa,9827:sa,9837:[0,.75,0,0,.44722],9838:Sd,9839:Sd,10216:ea,10217:ea,10815:ra,10927:wr,10928:wr,57376:am},\"Main-BoldItalic\":{32:Z,33:[0,.69444,.11417,0,.38611],34:Dd,35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:la,40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:Sr,49:Sr,50:Sr,51:Sr,52:kd,53:Sr,54:Sr,55:kd,56:Sr,57:Sr,58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:Sl,64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:wl,73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:wl,79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:Cd,95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:Ld,104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:Ld,114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:Z,168:[0,.69444,.11473,0,.59111],176:Ed,184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:Ad,248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:Ad,567:[.19444,.44444,.04611,0,.385],710:Cd,711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:la,730:Ed,732:Sl,733:Sl,915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:wl,931:[0,.68611,.11431,0,.82666],933:Td,934:[0,.68611,.05632,0,.82666],936:Td,937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:la,8217:la,8220:[0,.69444,.16772,0,.62055],8221:Dd},\"Main-Italic\":{32:Z,33:ca,34:Fd,35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:ca,40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:kr,49:kr,50:kr,51:kr,52:Od,53:kr,54:kr,55:Od,56:kr,57:kr,58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:Id,64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:ua,73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:ua,79:zd,80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:ua,86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:Pd,95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:Bd,104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:Bd,114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:Z,168:[0,.66786,.10474,0,.51111],176:Rd,184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:Kd,248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:Kd,710:Pd,711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:Rd,732:[0,.66786,.11585,0,.51111],733:Id,915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:zd,923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:ua,931:[0,.68333,.12028,0,.71555],933:Nd,934:[0,.68333,.05986,0,.71555],936:Nd,937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:ca,8217:ca,8220:[0,.69444,.1685,0,.51444],8221:Fd,8463:Wo},\"Main-Regular\":{32:Z,33:Qt,34:we,35:Om,36:Cl,37:Bm,38:ti,39:Qt,40:$i,41:$i,42:Km,43:rt,44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:er,48:tt,49:tt,50:tt,51:tt,52:tt,53:tt,54:tt,55:tt,56:tt,57:tt,58:Hd,59:[.19444,.43056,0,0,.27778],60:vr,61:Xo,62:vr,63:Il,64:ti,65:ri,66:[0,.68333,0,0,.70834],67:Nn,68:[0,.68333,0,0,.76389],69:$d,70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:ri,73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:zn,76:Jd,77:[0,.68333,0,0,.91667],78:ri,79:zn,80:$d,81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:Nn,85:ri,86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:ri,89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:da,92:er,93:da,94:we,95:[.31,.12056,.02778,0,.5],97:Fn,98:Vi,99:kl,100:Vi,101:kl,102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:Vi,105:Wd,106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:Qt,109:[0,.43056,0,0,.83334],110:qd,111:Fn,112:Vd,113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:qd,118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:kl,123:er,124:da,125:er,126:[.35,.31786,0,0,.5],160:Z,163:[0,.69444,0,0,.76909],167:Ll,168:jd,172:[0,.43056,0,0,.66667],176:Ud,177:rt,182:Al,184:Pl,198:[0,.68333,0,0,.90278],215:rt,216:[.04861,.73194,0,0,.77778],223:we,230:[0,.43056,0,0,.72222],247:rt,248:[.09722,.52778,0,0,.5],305:Hd,338:[0,.68333,0,0,1.01389],339:Qd,567:[.19444,.43056,0,0,.30556],710:we,711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:we,715:we,728:we,729:Wd,730:Ud,732:jd,733:we,915:Jd,916:Zd,920:zn,923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:ri,931:Nn,933:zn,934:Nn,936:zn,937:Nn,8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:Qt,8217:Qt,8220:we,8221:we,8224:Ll,8225:Ll,8230:[0,.12,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:Wo,8465:$n,8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:$n,8501:Lr,8592:De,8593:Gd,8594:De,8595:Gd,8596:De,8597:er,8598:Vn,8599:Vn,8600:Vn,8601:Vn,8614:[.011,.511,0,0,1],8617:Xd,8618:Xd,8636:De,8637:De,8640:De,8641:De,8652:[.011,.671,0,0,1],8656:De,8657:Al,8658:De,8659:Al,8660:De,8661:[.25,.75,0,0,.61111],8704:Vi,8706:[0,.69444,.05556,.08334,.5309],8707:Vi,8709:Cl,8711:Zd,8712:Yd,8715:Yd,8722:rt,8723:rt,8725:er,8726:er,8727:pa,8728:El,8729:El,8730:[.2,.8,0,0,.83334],8733:Qd,8734:ml,8736:Kn,8739:da,8741:er,8743:ii,8744:ii,8745:ii,8746:ii,8747:[.19444,.69444,.11111,0,.41667],8764:Xo,8768:[.19444,.69444,0,0,.27778],8771:ma,8773:[-.022,.589,0,0,1],8776:em,8781:ma,8784:[-.133,.67,0,0,.778],8801:ma,8804:$e,8805:$e,8810:tm,8811:tm,8826:vr,8827:vr,8834:vr,8835:vr,8838:$e,8839:$e,8846:ii,8849:$e,8850:$e,8851:ii,8852:ii,8853:rt,8854:rt,8855:rt,8856:rt,8857:rt,8866:Lr,8867:Lr,8868:ti,8869:ti,8872:[.249,.75,0,0,.867],8900:El,8901:[-.05555,.44445,0,0,.27778],8902:pa,8904:[.005,.505,0,0,.9],8942:[.03,.9,0,0,.278],8943:[-.19,.31,0,0,1.172],8945:[-.1,.82,0,0,1.282],8968:ha,8969:ha,8970:ha,8971:ha,8994:rm,8995:rm,9136:fa,9137:fa,9651:im,9657:pa,9661:im,9667:pa,9711:Vn,9824:ga,9825:ga,9826:ga,9827:ga,9837:[0,.75,0,0,.38889],9838:nm,9839:nm,10216:$i,10217:$i,10222:fa,10223:fa,10229:[.011,.511,0,0,1.609],10230:om,10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:om,10815:ri,10927:$e,10928:$e,57376:am},\"Math-BoldItalic\":{32:Z,48:ba,49:ba,50:ba,51:qn,52:qn,53:qn,54:et,55:qn,56:et,57:qn,65:gl,66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:um,73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:sm,77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:lm,105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:mm,112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:Z,915:[0,.68611,.15972,0,.65694],916:xl,920:[0,.68611,.03194,0,.86722],923:cm,926:[0,.68611,.07458,0,.84125],928:um,931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:dm,936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:mm,960:[0,.44444,.03704,0,.68241],961:pm,962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:pm,1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},\"Math-Italic\":{32:Z,48:Fn,49:Fn,50:Fn,51:Hn,52:Hn,53:Hn,54:tt,55:Hn,56:tt,57:Hn,65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:fm,73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:hm,80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:gm,112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:Z,915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:hm,923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:fm,931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:gm,960:[0,.43056,.03588,0,.57003],961:bm,962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:bm,1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},\"SansSerif-Bold\":{32:Z,33:[0,.69444,0,0,.36667],34:Bl,35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:ya,40:ym,41:ym,42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:Ce,49:Ce,50:Ce,51:Ce,52:Ce,53:Ce,54:Ce,55:Ce,56:Ce,57:Ce,58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:xm,64:tr,65:tr,66:tr,67:Tl,68:Ar,69:[0,.69444,0,0,.64167],70:Lr,71:tr,72:Ar,73:[0,.69444,0,0,.33056],74:xm,75:vm,76:km,77:[0,.69444,0,0,.97778],78:Ar,79:Ar,80:Tl,81:[.10556,.69444,0,0,.79445],82:Tl,83:Lr,84:tr,85:vm,86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:tr,89:[0,.69444,.0275,0,.73334],90:Lm,91:_m,93:_m,94:Ce,95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:Dl,99:[0,.45833,0,0,.48889],100:Dl,101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:Dl,105:Mm,106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:Mm,109:[0,.45833,0,0,.86667],110:Sm,111:[0,.45833,0,0,.55],112:wm,113:wm,114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:Sm,118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:Z,168:Ce,176:tr,180:Ce,184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:Ce,711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:Ce,729:ya,730:tr,732:Ce,733:Ce,915:km,916:[0,.69444,0,0,.91667],920:Ol,923:Lm,926:tr,928:Ar,931:Ar,933:Ol,934:Ar,936:Ol,937:Ar,8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:ya,8217:ya,8220:Bl,8221:Bl},\"SansSerif-Italic\":{32:Z,33:[0,.69444,.05733,0,.31945],34:Dm,35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:Rl,40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:Pm,45:[0,.44444,.01946,0,.33333],46:Rm,47:[.25,.75,.13164,0,.5],48:Ot,49:Ot,50:Ot,51:Ot,52:Ot,53:Ot,54:Ot,55:Ot,56:Ot,57:Ot,58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:rr,66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:Kl,73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:zl,77:[0,.69444,.08094,0,.875],78:Kl,79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:Am,95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:Z,168:[0,.67937,.06385,0,.5],176:Cm,184:Pl,305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:Am,711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:Em,715:we,728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:Cm,732:[0,.67659,.08826,0,.5],733:Em,915:[0,.69444,.13372,0,.54167],916:qm,920:[0,.69444,.07555,0,.77778],923:Lr,926:[0,.69444,.12816,0,.66667],928:Kl,931:[0,.69444,.11983,0,.72222],933:Tm,934:[0,.69444,.04603,0,.72222],936:Tm,937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:Rl,8217:Rl,8220:[0,.69444,.14205,0,.5],8221:Dm},\"SansSerif-Regular\":{32:Z,33:[0,.69444,0,0,.31945],34:we,35:Om,36:Cl,37:Bm,38:[0,.69444,0,0,.75834],39:Qt,40:$i,41:$i,42:Km,43:rt,44:Pm,45:[0,.44444,0,0,.33333],46:Rm,47:er,48:Bt,49:Bt,50:Bt,51:Bt,52:Bt,53:Bt,54:Bt,55:Bt,56:Bt,57:Bt,58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:Il,64:rr,65:rr,66:rr,67:Qr,68:[0,.69444,0,0,.72223],69:Im,70:[0,.69444,0,0,.56945],71:rr,72:Nl,73:Qt,74:Il,75:[0,.69444,0,0,.69445],76:zl,77:[0,.69444,0,0,.875],78:Nl,79:[0,.69444,0,0,.73611],80:Qr,81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:Vi,84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:rr,89:[0,.69444,.025,0,.66667],90:Lr,91:zm,93:zm,94:we,95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:Fl,99:Nm,100:Fl,101:Nm,102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:Fl,105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:Vm,111:[0,.44444,0,0,.5],112:Fm,113:Fm,114:[0,.44444,.01389,0,.34167],115:$m,116:[0,.57143,0,0,.36111],117:Vm,118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:Z,168:[0,.67937,0,0,.5],176:rr,184:Pl,305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:we,711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:we,715:we,728:we,729:[0,.67937,0,0,.27778],730:rr,732:[0,.67659,0,0,.5],733:we,915:zl,916:qm,920:ti,923:Lr,926:rr,928:Nl,931:$n,933:ti,934:$n,936:ti,937:$n,8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:Qt,8217:Qt,8220:we,8221:we},\"Script-Regular\":{32:Z,65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:Z},\"Size1-Regular\":{32:Z,40:Hm,41:Hm,47:Wm,91:Um,92:Wm,93:Um,123:jm,125:jm,160:Z,710:xa,732:xa,770:xa,771:xa,8214:[-99e-5,.601,0,0,.77778],8593:Jm,8595:Jm,8657:Gm,8659:Gm,8719:Xm,8720:Xm,8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:Ym,8748:Zm,8749:Zm,8750:Ym,8896:qi,8897:qi,8898:qi,8899:qi,8968:Hi,8969:Hi,8970:Hi,8971:Hi,9168:ql,10216:Hi,10217:Hi,10752:$l,10753:$l,10754:$l,10756:qi,10758:qi},\"Size2-Regular\":{32:Z,40:Qm,41:Qm,47:e0,91:t0,92:e0,93:t0,123:r0,125:r0,160:Z,710:va,732:va,770:va,771:va,8719:i0,8720:i0,8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:o0,8748:n0,8749:n0,8750:o0,8896:Wi,8897:Wi,8898:Wi,8899:Wi,8968:_a,8969:_a,8970:_a,8971:_a,10216:a0,10217:a0,10752:Vl,10753:Vl,10754:Vl,10756:Wi,10758:Wi},\"Size3-Regular\":{32:Z,40:s0,41:s0,47:l0,91:c0,92:l0,93:c0,123:Ma,125:Ma,160:Z,710:wa,732:wa,770:wa,771:wa,8730:[.95003,1.45,0,0,1],8968:Sa,8969:Sa,8970:Sa,8971:Sa,10216:Ma,10217:Ma},\"Size4-Regular\":{32:Z,40:u0,41:u0,47:d0,91:m0,92:d0,93:m0,123:ka,125:ka,160:Z,710:La,732:La,770:La,771:La,8730:[1.25003,1.75,0,0,1],8968:Aa,8969:Aa,8970:Aa,8971:Aa,9115:Ca,9116:p0,9117:Ca,9118:Ca,9119:p0,9120:Ca,9121:Ea,9122:ql,9123:Ea,9124:Ea,9125:ql,9126:Ea,9127:h0,9128:f0,9129:g0,9130:[0,.3,0,0,.88889],9131:h0,9132:f0,9133:g0,9143:[.88502,.915,0,0,1.05556],10216:ka,10217:ka,57344:b0,57345:b0,57680:Ta,57681:Ta,57682:Ta,57683:Ta},\"Typewriter-Regular\":{32:v0,33:O,34:O,35:O,36:ut,37:ut,38:O,39:O,40:ut,41:ut,42:[0,.52083,0,0,.525],43:y0,44:[.13889,.125,0,0,.525],45:y0,46:[0,.125,0,0,.525],47:ut,48:O,49:O,50:O,51:O,52:O,53:O,54:O,55:O,56:O,57:O,58:Ke,59:[.13889,.43056,0,0,.525],60:x0,61:[-.19549,.41562,0,0,.525],62:x0,63:O,64:O,65:O,66:O,67:O,68:O,69:O,70:O,71:O,72:O,73:O,74:O,75:O,76:O,77:O,78:O,79:O,80:O,81:[.13889,.61111,0,0,.525],82:O,83:O,84:O,85:O,86:O,87:O,88:O,89:O,90:O,91:ut,92:ut,93:ut,94:O,95:[.09514,0,0,0,.525],96:O,97:Ke,98:O,99:Ke,100:O,101:Ke,102:O,103:Wn,104:O,105:O,106:[.22222,.61111,0,0,.525],107:O,108:O,109:Ke,110:Ke,111:Ke,112:Wn,113:Wn,114:Ke,115:Ke,116:[0,.55358,0,0,.525],117:Ke,118:Ke,119:Ke,120:Ke,121:Wn,122:Ke,123:ut,124:ut,125:ut,126:O,127:O,160:v0,176:O,184:[.19445,0,0,0,.525],305:Ke,567:Wn,711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:O,715:O,728:O,730:O,770:O,771:O,776:O,915:O,916:O,920:O,923:O,926:O,928:O,931:O,933:O,934:O,936:O,937:O,8216:O,8217:O,8242:O,9251:[.11111,.21944,0,0,.525]}};var nf=/[\\u3040-\\u309F]|[\\u30A0-\\u30FF]|[\\u4E00-\\u9FAF]|[\\uAC00-\\uD7AF]/,Kt=10,Pe=.25,w0=1.2,Je=.431,Hl={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[Je,Je,Je],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.5,.732,.925],num2:[.394,.384,.5],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[Pe,Pe,Pe],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04]},Un=[0,.5,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Ui=5,M0={\"\\xA0\":\" \",\"\\u200B\":\" \",\\u00C5:\"A\",\\u00C7:\"C\",\\u00D0:\"D\",\\u00DE:\"o\",\\u00E5:\"a\",\\u00E7:\"c\",\\u00F0:\"d\",\\u00FE:\"o\",\\u0410:\"A\",\\u0411:\"B\",\\u0412:\"B\",\\u0413:\"F\",\\u0414:\"A\",\\u0415:\"E\",\\u0416:\"K\",\\u0417:\"3\",\\u0418:\"N\",\\u0419:\"N\",\\u041A:\"K\",\\u041B:\"N\",\\u041C:\"M\",\\u041D:\"H\",\\u041E:\"O\",\\u041F:\"N\",\\u0420:\"P\",\\u0421:\"C\",\\u0422:\"T\",\\u0423:\"y\",\\u0424:\"O\",\\u0425:\"X\",\\u0426:\"U\",\\u0427:\"h\",\\u0428:\"W\",\\u0429:\"W\",\\u042A:\"B\",\\u042B:\"X\",\\u042C:\"B\",\\u042D:\"3\",\\u042E:\"X\",\\u042F:\"R\",\\u0430:\"a\",\\u0431:\"b\",\\u0432:\"a\",\\u0433:\"r\",\\u0434:\"y\",\\u0435:\"e\",\\u0436:\"m\",\\u0437:\"e\",\\u0438:\"n\",\\u0439:\"n\",\\u043A:\"n\",\\u043B:\"n\",\\u043C:\"m\",\\u043D:\"n\",\\u043E:\"o\",\\u043F:\"n\",\\u0440:\"p\",\\u0441:\"c\",\\u0442:\"o\",\\u0443:\"y\",\\u0444:\"b\",\\u0445:\"x\",\\u0446:\"n\",\\u0447:\"n\",\\u0448:\"w\",\\u0449:\"w\",\\u044A:\"a\",\\u044B:\"m\",\\u044C:\"a\",\\u044D:\"e\",\\u044E:\"m\",\\u044F:\"r\"};function Cr(t,e){t===void 0&&(t=77);let r=_0[e][t];if(r)return{defaultMetrics:!1,depth:r[0],height:r[1],italic:r[2],skew:r[3],width:r[4]};if(t===11034)return{defaultMetrics:!0,depth:.2,height:.8,italic:0,skew:0,width:.8};let i=String.fromCodePoint(t);if(i in M0)t=M0[i].codePointAt(0);else if(nf.test(i))return t=77,{defaultMetrics:!0,depth:.2,height:.9,italic:0,skew:0,width:1};return{defaultMetrics:!0,depth:.2,height:.7,italic:0,skew:0,width:.8}}var Wl={overrightarrow:[[\"rightarrow\"],.888,522,\"xMaxYMin\"],overleftarrow:[[\"leftarrow\"],.888,522,\"xMinYMin\"],underrightarrow:[[\"rightarrow\"],.888,522,\"xMaxYMin\"],underleftarrow:[[\"leftarrow\"],.888,522,\"xMinYMin\"],xrightarrow:[[\"rightarrow\"],1.469,522,\"xMaxYMin\"],longrightarrow:[[\"rightarrow\"],1.469,522,\"xMaxYMin\"],xleftarrow:[[\"leftarrow\"],1.469,522,\"xMinYMin\"],longleftarrow:[[\"leftarrow\"],1.469,522,\"xMinYMin\"],Overrightarrow:[[\"doublerightarrow\"],.888,560,\"xMaxYMin\"],xRightarrow:[[\"doublerightarrow\"],1.526,560,\"xMaxYMin\"],xLeftarrow:[[\"doubleleftarrow\"],1.526,560,\"xMinYMin\"],overleftharpoon:[[\"leftharpoon\"],.888,522,\"xMinYMin\"],xleftharpoonup:[[\"leftharpoon\"],.888,522,\"xMinYMin\"],xleftharpoondown:[[\"leftharpoondown\"],.888,522,\"xMinYMin\"],overrightharpoon:[[\"rightharpoon\"],.888,522,\"xMaxYMin\"],xrightharpoonup:[[\"rightharpoon\"],.888,522,\"xMaxYMin\"],xrightharpoondown:[[\"rightharpoondown\"],.888,522,\"xMaxYMin\"],xlongequal:[[\"longequal\"],.888,334,\"xMinYMin\"],xtwoheadleftarrow:[[\"twoheadleftarrow\"],.888,334,\"xMinYMin\"],xtwoheadrightarrow:[[\"twoheadrightarrow\"],.888,334,\"xMaxYMin\"],overleftrightarrow:[[\"leftarrow\",\"rightarrow\"],.888,522],overbrace:[[\"leftbrace\",\"midbrace\",\"rightbrace\"],1.6,548],underbrace:[[\"leftbraceunder\",\"midbraceunder\",\"rightbraceunder\"],1.6,548],underleftrightarrow:[[\"leftarrow\",\"rightarrow\"],.888,522],xleftrightarrow:[[\"leftarrow\",\"rightarrow\"],1.75,522],longleftrightarrow:[[\"leftarrow\",\"rightarrow\"],1.75,522],xLeftrightarrow:[[\"doubleleftarrow\",\"doublerightarrow\"],1.75,560],xrightleftharpoons:[[\"leftharpoondownplus\",\"rightharpoonplus\"],1.75,716],longrightleftharpoons:[[\"leftharpoondownplus\",\"rightharpoonplus\"],1.75,716],xleftrightharpoons:[[\"leftharpoonplus\",\"rightharpoondownplus\"],1.75,716],longleftrightharpoons:[[\"leftharpoonplus\",\"rightharpoondownplus\"],1.75,716],xhookleftarrow:[[\"leftarrow\",\"righthook\"],1.08,522],xhookrightarrow:[[\"lefthook\",\"rightarrow\"],1.08,522],overlinesegment:[[\"leftlinesegment\",\"rightlinesegment\"],.888,522],underlinesegment:[[\"leftlinesegment\",\"rightlinesegment\"],.888,522],overgroup:[[\"leftgroup\",\"rightgroup\"],.888,342],undergroup:[[\"leftgroupunder\",\"rightgroupunder\"],.888,342],xmapsto:[[\"leftmapsto\",\"rightarrow\"],1.5,522],xtofrom:[[\"leftToFrom\",\"rightToFrom\"],1.75,528],xleftrightarrows:[[\"baraboveleftarrow\",\"rightarrowabovebar\"],1.75,901],longleftrightarrows:[[\"baraboveleftarrow\",\"rightarrowabovebar\"],1.75,901],xRightleftharpoons:[[\"baraboveshortleftharpoon\",\"rightharpoonaboveshortbar\"],1.75,716],longRightleftharpoons:[[\"baraboveshortleftharpoon\",\"rightharpoonaboveshortbar\"],1.75,716],xLeftrightharpoons:[[\"shortbaraboveleftharpoon\",\"shortrightharpoonabovebar\"],1.75,716],longLeftrightharpoons:[[\"shortbaraboveleftharpoon\",\"shortrightharpoonabovebar\"],1.75,716]},Ul={widehat1:[1062,239,.24],widehat2:[2364,300,.3],widehat3:[2364,360,.36],widehat4:[2364,420,.42],widecheck1:[1062,239,.24],widecheck2:[2364,300,.3],widecheck3:[2364,360,.36],widecheck4:[2364,420,.42],widetilde1:[600,260,.26],widetilde2:[1033,286,.286],widetilde3:[2339,306,.306],widetilde4:[2340,312,.34],overarc:[1061,159,.3],underarc:[1061,159,.3]},S0={doubleleftarrow:`M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,overarc:\"M529 0c179 0 524 115 524 115 5 1 9 5 9 10 0 1-1 2-1 3l-4 22c-1 5-5 9-11 9h-2s-338-93-512-92c-174 0-513 92-513 92h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13 0 0 342-115 520-115z\",underarc:`m 529 160\n  c -179 0 -524 -115 -524 -115\n  c -5 -1 -9 -5 -9 -10\n  c 0 -1 1 -2 1 -3\n  l 4 -22\n  c 1 -5 5 -9 11 -9\n  h 2\n  s 338 93 512 92\n  c 174 0 513 -92 513 -92\n  h 2\n  c 5 0 9 4 11 9\n  l 5 22\n  c 1 6 -2 12 -8 13\n  c 0 0 -342 115 -520 115\n  z\n  `,leftgroup:`M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z`,leftgroupunder:`M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,widetilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z`,widetilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,widetilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z`,widetilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`};function k0(t){if(Ul[t]){let[c,u,m]=Ul[t],d=`<span class=\"ML__stretchy\" style=\"height:${m}em\"><svg width=\"100%\" height=\"${m}em\" viewBox=\"0 0 ${c} ${u}\" preserveAspectRatio=\"none\" ><path fill=\"currentcolor\" d=\"${S0[t]}\"></path></svg></span>`;return`<span style=\"display:inline-block;height:${Math.floor(100*m/2)/100}em;min-width:0\">${d}</span>`}let[e,r,i,n]=Wl[t],o,a,s=i/1e3;e.length===3?(o=[\"slice-1-of-3\",\"slice-2-of-3\",\"slice-3-of-3\"],a=[\"xMinYMin\",\"xMidYMin\",\"xMaxYMin\"]):e.length===2?(o=[\"slice-1-of-2\",\"slice-2-of-2\"],a=[\"xMinYMin\",\"xMaxYMin\"]):(o=[\"slice-1-of-1\"],a=[n]);let l=e.map((c,u)=>`<span class=\"${o[u]}\" style=height:${s}em><svg width=400em height=${s}em viewBox=\"0 0 400000 ${i}\" preserveAspectRatio=\"${a[u]} slice\"><path fill=\"currentcolor\" d=\"${S0[c]}\"></path></svg></span>`).join(\"\");return`<span style=\"display:inline-block;height:${s}em;min-width:${r}em;\">${l}</span>`}function L0(t){return Wl[t]?Wl[t][2]/1e3:Ul[t][2]}function of(t){let e=[];for(let r=0;r<t.length;r++){let i=t.charCodeAt(r);if(i===13&&t.charCodeAt(r+1)===10&&(i=10,r++),(i===13||i===12)&&(i=10),i===0&&(i=65533),i>=55296&&i<=56319){let n=t.charCodeAt(r+1);if(n>=56320&&n<=57343){let o=i-55296,a=n-56320;i=2**16+o*2**10+a,r++}}e.push(i)}return e}var Oa=8205,af=[[Oa,1],[65038,2],[127995,5],[129456,4],[917536,96]],Da,A0=[127462,127487];function C0(t){var e;if(Da===void 0){Da={};for(let r of af)for(let i=r[0];i<=r[0]+r[1]-1;i++)Da[i]=!0}return(e=Da[t])!=null?e:!1}function sf(t){return t>=A0[0]&&t<=A0[1]}function Ba(t){if(/^[\\u0020-\\u00FF]*$/.test(t))return t;let e=[],r=of(t),i=0;for(;i<r.length;){let n=r[i++],o=r[i];if(o===Oa){let a=i-1;for(i+=2;r[i]===Oa;)i+=2;e.push(String.fromCodePoint(...r.slice(a,i-a+1)))}else if(C0(o)){let a=i-1;for(;C0(r[i]);)i+=r[i]===Oa?2:1;e.push(String.fromCodePoint(...r.slice(a,2*i-a-1)))}else sf(n)?(i+=1,e.push(String.fromCodePoint(...r.slice(i-2,2)))):e.push(String.fromCodePoint(n))}return e}var jl=class{constructor(e){this.obeyspaces=!1;this.pos=0;this.s=Ba(e)}end(){return this.pos>=this.s.length}get(){return this.pos<this.s.length?this.s[this.pos++]:\"\"}peek(){return this.s[this.pos]}match(e){let r=typeof this.s==\"string\"?e.exec(this.s.slice(this.pos)):e.exec(this.s.slice(this.pos).join(\"\"));return r!=null&&r[0]?(this.pos+=r[0].length,r[0]):\"\"}next(){if(this.end())return null;if(!this.obeyspaces&&this.match(/^[ \\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029]+/)||this.obeyspaces&&this.match(/^[ \\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029]/))return\"<space>\";let e=this.get();if(e===\"\\\\\"){if(!this.end()){let r=this.match(/^[a-zA-Z\\*]+/);return r?this.match(/^[ \\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029]*/):r=this.get(),\"\\\\\"+r}}else{if(e===\"{\")return\"<{>\";if(e===\"}\")return\"<}>\";if(e===\"^\"){if(this.peek()===\"^\"){this.get();let r=this.match(/^(\\^(\\^(\\^(\\^[\\da-f])?[\\da-f])?[\\da-f])?[\\da-f])?[\\da-f]{2}/);if(r)return String.fromCodePoint(Number.parseInt(r.slice(r.lastIndexOf(\"^\")+1),16))}return e}else if(e===\"#\"){if(!this.end()){let r=!1;if(/[\\d?@]/.test(this.peek())&&(r=!0,this.pos+1<this.s.length)){let i=this.s[this.pos+1];r=/[^\\dA-Za-z]/.test(i)}return r?\"#\"+this.get():\"#\"}}else if(e===\"$\")return this.peek()===\"$\"?(this.get(),\"<$$>\"):\"<$>\"}return e}};function lf(t,e){var n,o,a,s;let r=[],i=t.next();if(i&&i!==\"\\\\relax\"){if(i===\"\\\\noexpand\")i=t.next(),i&&r.push(i);else if(i===\"\\\\obeyspaces\")t.obeyspaces=!0;else if(i===\"\\\\bgroup\")r.push(\"<{>\");else if(i===\"\\\\egroup\")r.push(\"<}>\");else if(i===\"\\\\string\"){if(i=t.next(),i)if(i.startsWith(\"\\\\\"))for(let l of i)r.push(l===\"\\\\\"?\"\\\\backslash\":l);else i===\"<{>\"?r.push(\"\\\\{\"):i===\"<space>\"?r.push(\"~\"):i===\"<}>\"&&r.push(\"\\\\}\")}else if(i===\"\\\\csname\"){for(;t.peek()===\"<space>\";)t.next();let l=\"\",c=!1,u=[];do{if(u.length===0)if(/^#[\\d?@]$/.test(t.peek())){let m=t.get().slice(1);u=ji((o=(n=e==null?void 0:e(m))!=null?n:e==null?void 0:e(\"?\"))!=null?o:\"\\\\placeholder{}\",e),i=u[0]}else i=t.next(),u=i?[i]:[];c=u.length===0,!c&&i===\"\\\\endcsname\"&&(c=!0,u.shift()),c||(c=i===\"<$>\"||i===\"<$$>\"||i===\"<{>\"||i===\"<}>\"||typeof i==\"string\"&&i.length>1&&i.startsWith(\"\\\\\")),c||(l+=u.shift())}while(!c);l&&r.push(\"\\\\\"+l),r.push(...u)}else if(i!==\"\\\\endcsname\")if(i.length>1&&i.startsWith(\"#\")){let l=i.slice(1);r.push(...ji((s=(a=e==null?void 0:e(l))!=null?a:e==null?void 0:e(\"?\"))!=null?s:\"\\\\placeholder{}\",e))}else r.push(i)}return r}function ji(t,e=null){if(!t)return[];let r=[],i=\"\";for(let a of t.toString().split(/\\r?\\n/)){i&&r.push(i),i=\" \";let s=a.match(/((?:\\\\%)|[^%])*/);s!==null&&r.push(s[0])}let n=new jl(r.join(\"\")),o=[];do o.push(...lf(n,e));while(!n.end());return o}function P(t){let e=\"\",r=[];for(let i of t)i&&(e&&/^[a-zA-Z\\*]/.test(i)&&r.push(e),r.push(i),/^\\\\[a-zA-Z]+\\*?[\\\"\\'][^\\ ]+$/.test(i)&&r.push(\" \"),e=/\\\\[a-zA-Z]+\\*?$/.test(i)?\" \":\"\");return r.join(\"\")}function W(t,...e){return t.startsWith(\"\\\\\"),e.length===0?t:P([t,...e.map(r=>`{${r}}`)])}function Er(t){return P(t.map(e=>{var r;return(r={\"<space>\":\" \",\"<$$>\":\"$$\",\"<$>\":\"$\",\"<{>\":\"{\",\"<}>\":\"}\"}[e])!=null?r:e}))}var ni=class ni{constructor(e){ni._registry[e]=this}static createAtom(e,r,i){return ni._registry[e].createAtom(r,ne(r,e),i)}static serialize(e,r){var i;if(!e||e.length===0)return\"\";if((i=r.skipStyles)!=null&&i){let n=[];for(let o of T0(e)){let a=ni._registry[o[0].mode];n.push(...a.serialize(o,r))}return P(n)}return P(uf(e,r))}static getFont(e,r,i){return ni._registry[e].getFont(r,i)}};ni._registry={};var ve=ni;function T0(t){let e=[],r=[],i=\"NONE\";for(let n of t)n.type!==\"first\"&&(n.mode!==i?(r.length>0&&e.push(r),r=[n],i=n.mode):r.push(n));return r.length>0&&e.push(r),e}function Ka(t){if((t==null?void 0:t.mode)!==\"math\")return\"\";let{style:e}=t;return!e||!e.variantStyle?\"\":e.variantStyle===\"bold\"||e.variantStyle===\"bolditalic\"?\"bold\":\"\"}function Pa(t){if(!t)return\"\";let{style:e}=t;if(!e)return\"\";let r=e.variant;return r===void 0?\"normal\":(![\"calligraphic\",\"fraktur\",\"double-struck\",\"script\",\"monospace\",\"sans-serif\"].includes(r)&&e.variantStyle&&(r+=\"-\"+e.variantStyle),r)}function dt(t,e){let r=[],i=[],n;for(let o of t){if(o.type===\"first\")continue;let a;e===\"variant\"?a=Pa(o):e===\"bold\"?a=Ka(o):a=o.style[e],a===n?i.push(o):(i.length>0&&r.push(i),i=[o],n=a)}return i.length>0&&r.push(i),r}function E0(t,e){var o;let{parent:r}=t[0],i=r==null?void 0:r.style.color,n=[];for(let a of T0(t)){let s=e.defaultMode;for(let l of dt(a,\"color\")){let c=l[0].style,u=ve._registry[l[0].mode].serialize(l,g(p({},e),{defaultMode:s===\"text\"?\"text\":\"math\"}));!e.skipStyles&&c.color&&c.color!==\"none\"&&(!r||i!==c.color)?n.push(W(\"\\\\textcolor\",(o=c.verbatimColor)!=null?o:c.color,P(u))):n.push(P(u))}}return n}function cf(t,e){let{parent:r}=t[0],i=r==null?void 0:r.style.backgroundColor;return dt(t,\"backgroundColor\").map(n=>{var o;if(n.length>0||n[0].type!==\"box\"){let a=n[0].style;if(a.backgroundColor&&a.backgroundColor!==\"none\"&&(!r||i!==a.backgroundColor))return W(\"\\\\colorbox\",(o=a.verbatimBackgroundColor)!=null?o:a.backgroundColor,P(E0(n,g(p({},e),{defaultMode:\"text\"}))))}return P(E0(n,e))})}function uf(t,e){if(t.length===0)return[];let{parent:r}=t[0],i=r==null?void 0:r.style.fontSize,n=[];for(let o of dt(t,\"fontSize\")){let a=o[0].style.fontSize,s=cf(o,e);s&&(a&&a!==\"auto\"&&(!r||i!==a)?n.push([\"\",\"\\\\tiny\",\"\\\\scriptsize\",\"\\\\footnotesize\",\"\\\\small\",\"\\\\normalsize\",\"\\\\large\",\"\\\\Large\",\"\\\\LARGE\",\"\\\\huge\",\"\\\\Huge\"][a],...s):n.push(...s))}return n}function Ra(t){return t?{mord:\"ord\",mbin:\"bin\",mop:\"op\",mrel:\"rel\",mopen:\"open\",mclose:\"close\",mpunct:\"punct\",minner:\"inner\",spacing:\"ignore\",latex:\"latex\",composition:\"inner\",error:\"inner\",placeholder:\"ord\",supsub:\"ignore\"}[t]:void 0}function oi(t){if(t.length===0)return\"ord\";let e=Ra(t[0].type),r=Ra(t[t.length-1].type);return e&&e===r?e:\"ord\"}function jn(t,e){if(typeof t==\"string\")return t;if(typeof t==\"number\"){Number.isFinite(t);let r=Math.ceil(100*t)/100;return r===0?\"0\":r.toString()+(e!=null?e:\"\")}return\"\"}var w=class t{constructor(e,r){var n,o,a,s,l;if(typeof e==\"number\"?this.value=String.fromCodePoint(e):typeof e==\"string\"?this.value=e:ee(e)?this.children=e.filter(c=>c!==null):e&&e instanceof t&&(this.children=[e]),this.children)for(let c of this.children)c.parent=this;this.type=(n=r==null?void 0:r.type)!=null?n:\"ignore\",this.isSelected=(r==null?void 0:r.isSelected)===!0,r!=null&&r.caret&&(this.caret=r.caret),this.classes=(o=r==null?void 0:r.classes)!=null?o:\"\",this.isTight=(a=r==null?void 0:r.isTight)!=null?a:!1,r!=null&&r.attributes&&(this.attributes=r.attributes);let i=r==null?void 0:r.fontFamily;r!=null&&r.style&&this.value&&(i=(l=ve.getFont((s=r.mode)!=null?s:\"math\",this,g(p({variant:\"normal\"},r.style),{letterShapeStyle:r.letterShapeStyle})))!=null?l:void 0),i||(i=\"Main-Regular\"),this._height=0,this._depth=0,this._width=0,this.hasExplicitWidth=!1,this.skew=0,this.italic=0,this.maxFontSize=0,this.scale=1,(r==null?void 0:r.maxFontSize)!==void 0&&(this.maxFontSize=r.maxFontSize),df(this,i)}set atomID(e){e===void 0||e.length===0||(this.id=e)}selected(e){if(this.isSelected!==e&&(this.isSelected=e,this.children))for(let r of this.children)r.selected(e)}setStyle(e,r,i){if(r===void 0)return;let n=jn(r,i);n.length>0&&(this.cssProperties||(this.cssProperties={}),this.cssProperties[e]=n)}setTop(e){Number.isFinite(e)&&Math.abs(e)>.01&&(this.cssProperties||(this.cssProperties={}),this.cssProperties.top=jn(e,\"em\"),this.height-=e,this.depth+=e)}get left(){var e;return(e=this.cssProperties)!=null&&e[\"margin-left\"]?Number.parseFloat(this.cssProperties[\"margin-left\"]):0}set left(e){Number.isFinite(e)&&(e===0?this.cssProperties&&delete this.cssProperties[\"margin-left\"]:(this.cssProperties||(this.cssProperties={}),this.cssProperties[\"margin-left\"]=jn(e,\"em\")))}set right(e){Number.isFinite(e)&&(e===0?this.cssProperties&&delete this.cssProperties[\"margin-right\"]:(this.cssProperties||(this.cssProperties={}),this.cssProperties[\"margin-right\"]=jn(e,\"em\")))}set bottom(e){Number.isFinite(e)&&(e===0?this.cssProperties&&delete this.cssProperties[\"margin-bottom\"]:(this.cssProperties||(this.cssProperties={}),this.cssProperties[\"margin-bottom\"]=jn(e,\"em\")))}get width(){return this._width*this.scale}set width(e){this._width=e,this.hasExplicitWidth=!0}set softWidth(e){}get height(){return this._height*this.scale}set height(e){this._height=e}get depth(){return this._depth*this.scale}set depth(e){this._depth=e}wrap(e){let r=e.parent;if(!r)return this;e.isPhantom&&this.setStyle(\"opacity\",0);let i=e.color;i&&i!==r.color&&this.setStyle(\"color\",i);let o=e.backgroundColor;this.isSelected&&(o=Su(o)),o&&o!==r.backgroundColor&&(this.setStyle(\"background-color\",o),this.setStyle(\"--bg-color\",o),this.setStyle(\"display\",\"inline-block\"),this.setStyle(\"position\",\"relative\"),this.classes=this.classes?`${this.classes} ML__bg`:\"ML__bg\");let a=e.scalingFactor;return this.scale=a,this.skew*=a,this.italic*=a,this}toMarkup(){var c,u,m,d;let e=(c=this.value)!=null?c:\"\";if(this.children)for(let h of this.children)e+=h.toMarkup();let r=\"\";if(this.svgBody)r=k0(this.svgBody);else if(this.svgOverlay){r='<span style=\"',r+=\"display: inline-block;\",r+=`height:${Math.floor(100*(this.height+this.depth))/100}em;`,r+=`vertical-align:${Math.floor(100*this.depth)/100}em;`,r+='\">',r+=e,r+=\"</span>\",r+='<svg style=\"position:absolute;overflow:visible;',r+=`height:${Math.floor(100*(this.height+this.depth))/100}em;`;let h=(u=this.cssProperties)==null?void 0:u.padding;h?(r+=`top:${h};`,r+=`left:${h};`,r+=`width:calc(100% - 2 * ${h} );`):r+=\"top:0;left:0;width:100%;\",r+=\"z-index:2;\",r+='\"',this.svgStyle&&(r+=this.svgStyle),r+=` viewBox=\"0 0 ${Math.floor(100*this.width)/100} ${Math.floor(100*(this.height+this.depth))/100}\"`,r+=`>${this.svgOverlay}</svg>`}let i=[],n=this.classes.split(\" \");n.push((m={latex:\"ML__raw-latex\",placeholder:\"ML__placeholder\",error:\"ML__error\"}[this.type])!=null?m:\"\"),this.caret===\"latex\"&&n.push(\"ML__latex-caret\"),this.isSelected&&n.push(\"ML__selected\");let o=n.length===1?n[0]:n.filter((h,f,x)=>h.length>0&&x.indexOf(h)===f).join(\" \");if(o.length>0&&i.push(`class=${Ji(`\"${o}\"`)}`),this.id&&i.push(` data-atom-id=${Ji(this.id)}`),this.cssId&&i.push(` id=${Ji(`\"${this.cssId.replace(/ /g,\"-\")}\"`)}`),this.attributes&&i.push(...Object.keys(this.attributes).map(h=>`${Jl(h)}=${Ji(this.attributes[h])}`)),this.htmlData){let h=this.htmlData.split(\",\");for(let f of h){let x=f.match(/([^=]+)=(.+$)/);if(x){let v=Jl(x[1]);if(v)if(v===\"href\"){let b=new URL(x[2]);if(b.protocol!==\"http:\"&&b.protocol!==\"https:\")throw new Error(`Invalid URL: ${x[2]}`);i.push(`href=\"${x[2].replace(/\"/g,\"&quot;\")}\"`)}else i.push(`data-${v}=${Ji(x[2])}`)}else{let v=Jl(f);v&&i.push(`data-${v} `)}}}let a=(d=this.cssProperties)!=null?d:{};this.hasExplicitWidth&&a.width===void 0&&(a.width=`${Math.ceil(this._width*100)/100}em`);let s=Object.keys(a).map(h=>`${h}:${a[h]}`);if(this.scale!==void 0&&this.scale!==1&&(e.length>0||r.length>0)&&s.push(`font-size: ${Math.ceil(this.scale*1e4)/100}%`),this.htmlStyle)for(let h of this.htmlStyle.split(\";\")){let f=h.match(/([^:]+):(.+$)/);if(f){let x=f[1].trim().replace(/ /g,\"-\");x&&s.push(`${x}:${f[2]}`)}}s.length>0&&i.push(`style=${Ji(s.join(\";\"))}`);let l=\"\";return i.length>0||r.length>0?l=`<span ${i.join(\" \")}>${e}${r}</span>`:l=e,this.caret===\"text\"?l+='<span class=\"ML__text-caret\"></span>':this.caret===\"math\"&&(l+='<span class=\"ML__caret\"></span>'),l}tryCoalesceWith(e){if(this.svgBody||!this.value||e.svgBody||!e.value)return!1;let r=this.children&&this.children.length>0,i=e.children&&e.children.length>0;if(r||i)return!1;if(e.cssProperties||this.cssProperties){for(let l of[\"border\",\"border-left\",\"border-right\",\"border-right-width\",\"left\",\"margin\",\"margin-left\",\"margin-right\",\"padding\",\"position\",\"width\"])if(e.cssProperties&&l in e.cssProperties||this.cssProperties&&l in this.cssProperties)return!1}let n=this.cssProperties?Object.keys(this.cssProperties).length:0,o=e.cssProperties?Object.keys(e.cssProperties).length:0;if(n!==o)return!1;if(n>0){for(let l of Object.keys(this.cssProperties))if(this.cssProperties[l]!==e.cssProperties[l])return!1}let a=this.classes.trim().replace(/\\s+/g,\" \").split(\" \"),s=e.classes.trim().replace(/\\s+/g,\" \").split(\" \");if(a.length!==s.length)return!1;a.sort(),s.sort();for(let[l,c]of a.entries())if(c===\"ML__vertical-separator\"||c!==s[l])return!1;return this.value+=e.value,this.height=Math.max(this.height,e.height),this.depth=Math.max(this.depth,e.depth),this._width=this._width+e._width,this.maxFontSize=Math.max(this.maxFontSize,e.maxFontSize),this.italic=e.italic,!0}};function Gl(t){if(!t||t.length===0)return[];t[0].children=Gl(t[0].children);let e=[t[0]];for(let r=1;r<t.length;r++)e[e.length-1].tryCoalesceWith(t[r])||(t[r].children=Gl(t[r].children),e.push(t[r]));return e}function Tr(t){return t.children&&(t.children=Gl(t.children)),t}function Dr(t,e){if(!t)return new w(null,e);let r=new w(null,{classes:\"ML__strut\",type:\"ignore\"});r.setStyle(\"height\",Math.max(0,t.height),\"em\");let i=[r];if(t.depth!==0){let n=new w(null,{classes:\"ML__strut--bottom\",type:\"ignore\"});n.setStyle(\"height\",t.height+t.depth,\"em\"),n.setStyle(\"vertical-align\",-t.depth,\"em\"),i.push(n)}return i.push(t),new w(i,g(p({},e),{type:\"lift\"}))}function Gi(t){let e=L0(t)/2,r=new w(null,{maxFontSize:0});return r.height=e+.166,r.depth=e-.166,r.svgBody=t,r}function df(t,e){var r;if(t.type===\"latex\"){t.height=.9,t.depth=.2,t._width=1;return}if(t.value){t.height=-1/0,t.depth=-1/0,t._width=0,t.skew=-1/0,t.italic=-1/0;for(let i=0;i<t.value.length;i++){let n=Cr(t.value.codePointAt(i),e);t.height=Math.max(t.height,n.height),t.depth=Math.max(t.depth,n.depth),t._width+=n.width,t.skew=n.skew,t.italic=n.italic}return}if(t.children&&t.children.length>0){let i=-1/0,n=-1/0,o=0;for(let a of t.children)a.height>i&&(i=a.height),a.depth>n&&(n=a.depth),o=Math.max(o,(r=a.maxFontSize)!=null?r:0);t.height=i,t.depth=n,t._width=t.children.reduce((a,s)=>a+s.width,0),t.maxFontSize=o}}function Jl(t){if(t=t.trim().replace(/ /g,\"-\"),t.length===0)throw new Error(\"Invalid empty attribute name\");if(/[\\x20\\x09\\x0a\\x0c\\x0d\"'>/=\\x00-\\x1f]/.test(t))throw new Error(`Invalid attribute name \"${t}\"`);return t}function Ji(t){if(t=t.trim(),t.startsWith('\"')&&t.endsWith('\"')){if(/\"/.test(t.slice(1,-1)))throw new Error(`Invalid attribute value: ${t}`);return t}if(t.startsWith(\"'\")&&t.endsWith(\"'\")){if(/'/.test(t.slice(1,-1)))throw new Error(`Invalid attribute value: ${t}`);return t}if(t.length===0)throw new Error(\"Invalid empty attribute value\");return`\"${t.replace(/\"/g,\"&quot;\")}\"`}function mf(t){if(\"individualShift\"in t){let e=t.individualShift,r=e[0];if(r==null)return[null,0];let i=[r],n=-r.shift-r.box.depth,o=n;for(let a=1;a<e.length;a++){let s=e[a],l=-s.shift-o-s.box.depth,c=l-(r.box.height+r.box.depth);o=o+l,i.push(c),i.push(s),r=s}return[i,n]}if(\"top\"in t){let e=t.top;for(let r of t.children)e-=typeof r==\"number\"?r:r.box.height+r.box.depth;return[t.children,e]}else{if(\"bottom\"in t)return[t.children,-t.bottom];if(\"firstBaseline\"in t){let e=t.firstBaseline[0];if(typeof e==\"number\")throw new Error(\"First child must be an element.\");return[t.firstBaseline,-e.box.depth]}else if(\"shift\"in t){let e=t.children[0];if(typeof e==\"number\")throw new Error(\"First child must be an element.\");return[t.children,-e.box.depth-t.shift]}}return[null,0]}function pf(t){var h;let[e,r]=mf(t);if(!e)return[[],0,0];let i=new w(null,{classes:\"ML__pstrut\"}),n=0;for(let f of e)if(typeof f!=\"number\"){let x=f.box;n=Math.max(n,x.maxFontSize,x.height)}n+=2,i.height=n,i.setStyle(\"height\",n,\"em\");let o=[],a=r,s=r,l=r,c=0;for(let f of e){if(typeof f==\"number\")l+=f;else{let x=f.box,v=(h=f.classes)!=null?h:[],b=new w([i,x],{classes:v.join(\" \"),style:f.style});x.setStyle(\"height\",x.height+x.depth,\"em\"),x.setStyle(\"display\",\"inline-block\"),b.setStyle(\"top\",-n-l-x.depth,\"em\"),f.marginLeft&&b.setStyle(\"margin-left\",f.marginLeft,\"em\"),f.marginRight&&b.setStyle(\"margin-right\",f.marginRight,\"em\"),o.push(b),l+=x.height+x.depth,c=Math.max(c,b.width)}a=Math.min(a,l),s=Math.max(s,l)}o.forEach(f=>{f.softWidth=c});let u=new w(o,{classes:\"ML__vlist\"});if(u.softWidth=c,u.height=s,u.setStyle(\"height\",s,\"em\"),a>=0)return[[new w(u,{classes:\"ML__vlist-r\"})],s,-a];let m=new w(new w(null),{classes:\"ML__vlist\"});m.height=-a,m.setStyle(\"height\",-a,\"em\");let d=new w(8203,{classes:\"ML__vlist-s\",maxFontSize:0});return d.softWidth=0,d.height=0,d.depth=0,[[new w([u,d],{classes:\"ML__vlist-r\"}),new w(m,{classes:\"ML__vlist-r\"})],s,-a]}var te=class extends w{constructor(e,r){var a;let[i,n,o]=pf(e);super(i.length===1?i[0]:i,{type:r==null?void 0:r.type,classes:((a=r==null?void 0:r.classes)!=null?a:\"\")+\" ML__vlist-t\"+(i.length===2?\" ML__vlist-t2\":\"\")}),this.height=n,this.depth=o,this.softWidth=i.reduce((s,l)=>Math.max(s,l.width),0)}};function D0(t,e){var c,u,m,d,h;let r=t.metrics,i=new w(e.base),n=(c=e.baseShift)!=null?c:0,o=(u=e.slant)!=null?u:0,a=0,s=0;e.above&&(a=(m=e.aboveShift)!=null?m:Math.max(r.bigOpSpacing1,r.bigOpSpacing3-e.above.depth)),e.below&&(s=(d=e.belowShift)!=null?d:Math.max(r.bigOpSpacing2,r.bigOpSpacing4-e.below.height));let l=null;if(e.below&&e.above){let f=r.bigOpSpacing5+e.below.height+e.below.depth+s+i.depth+n;l=new te({bottom:f,children:[r.bigOpSpacing5,{box:e.below,marginLeft:-o,classes:[\"ML__center\"]},s,{box:i,classes:[\"ML__center\"]},a,{box:e.above,marginLeft:o,classes:[\"ML__center\"]},r.bigOpSpacing5]}).wrap(t)}else if(e.below&&!e.above)l=new te({top:i.height-n,children:[r.bigOpSpacing5,{box:e.below,marginLeft:-o,classes:[\"ML__center\"]},s,{box:i,classes:[\"ML__center\"]}]}).wrap(t);else if(!e.below&&e.above){let f=i.depth+n;l=new te({bottom:f,children:[{box:i,classes:[\"ML__center\"]},a,{box:e.above,marginLeft:o,classes:[\"ML__center\"]},r.bigOpSpacing5]}).wrap(t)}else{let f=i.depth+n;l=new te({bottom:f,children:[{box:i},r.bigOpSpacing5]}).wrap(t)}return new w(l,{type:(h=e.type)!=null?h:\"op\"})}var Ia=7,Gn=6,Xn=5,Or=4,ai=3,Ve=2,Br=1,Ee=0,Pt=class{constructor(e,r,i){this.id=e,this.sizeDelta=r,this.cramped=i;let n={\"-4\":2,\"-3\":1,0:0}[r];this.metrics=Object.keys(Hl).reduce((o,a)=>g(p({},o),{[a]:Hl[a][n]}),{})}getFontSize(e){return Math.max(1,e+this.sizeDelta)}get sup(){return mt[[Ee,Br,Ee,Br,Ve,ai,Ve,ai][this.id]]}get sub(){return mt[[Ee,Ee,Ee,Ee,Ve,Ve,Ve,Ve][this.id]]}get fracNum(){return mt[[Ee,Br,Ee,Br,Ve,ai,Or,Xn][this.id]]}get fracDen(){return mt[[Ee,Ee,Ee,Ee,Ve,Ve,Or,Or][this.id]]}get cramp(){return mt[[Ee,Ee,Ve,Ve,Or,Or,Gn,Gn][this.id]]}get isTight(){return this.sizeDelta<0}},Jn={7:new Pt(Ia,0,!1),6:new Pt(Gn,0,!0),5:new Pt(Xn,0,!1),4:new Pt(Or,0,!0),3:new Pt(ai,-3,!1),2:new Pt(Ve,-3,!0),1:new Pt(Br,-4,!1),0:new Pt(Ee,-4,!0)},mt=g(p({},Jn),{displaystyle:Jn[Ia],textstyle:Jn[Xn],scriptstyle:Jn[ai],scriptscriptstyle:Jn[Br]});function Zl(t,e){var i;if(!t)return 0;let r={pt:1,mm:7227/2540,cm:7227/254,ex:35271/8192,px:3/4,em:Kt,bp:803/800,dd:1238/1157,pc:12,in:72.27,mu:10/18}[(i=t.unit)!=null?i:\"pt\"];if(Number.isFinite(e)){let n=10**e;return Math.round(t.dimension/Kt*r*n)/n}return t.dimension*r}function za(t,e){if(t===null)return 0;let r=Zl(t)/Kt;if(Number.isFinite(e)){let i=10**e;return Math.round(r*i)/i}return r}function Xl(t){var e;return`${t.dimension}${(e=t.unit)!=null?e:\"pt\"}`}function hf(t){let e=Xl(t.glue);return t.grow&&t.grow.dimension!==0&&(e+=` plus ${Xl(t.grow)}`),t.shrink&&t.shrink.dimension!==0&&(e+=` minus ${Xl(t.shrink)}`),e}function _e(t){var r,i;if(t==null)return null;let e=\"\";if(\"dimension\"in t&&(e=`${t.dimension}${(r=t.unit)!=null?r:\"pt\"}`),\"glue\"in t&&(e=hf(t)),\"number\"in t)if(!(\"base\"in t)||t.base===\"decimal\")e=Number(t.number).toString();else if(t.base===\"alpha\")e=`\\`${String.fromCodePoint(t.number)}`;else{let n=Math.round(t.number)>>>0;t.base===\"hexadecimal\"?(e=Number(n).toString(16).toUpperCase(),n<=255?e=e.padStart(2,\"0\"):n<=65535?e=e.padStart(4,\"0\"):n<=16777215?e=e.padStart(6,\"0\"):e=e.padStart(8,\"0\"),e=`\"${e}`):t.base===\"octal\"&&(e=Number(n).toString(8),n<=63?e=e.padStart(2,\"0\"):n<=30583?e=e.padStart(4,\"0\"):e=e.padStart(8,\"0\"),e=`'${e}`)}return\"register\"in t&&(\"factor\"in t&&(t.factor===-1?e=\"-\":t.factor!==1&&(e=Number(t.factor).toString())),\"global\"in t&&t.global&&(e+=\"\\\\global\"),e+=`\\\\${t.register}`),\"string\"in t&&(e=t.string),(i=t.relax)!=null&&i&&(e+=\"\\\\relax\"),e}function pt(t,e){return t==null?null:\"number\"in t?g(p({},t),{number:t.number*e}):\"register\"in t?\"factor\"in t&&t.factor?g(p({},t),{factor:t.factor*e}):g(p({},t),{factor:e}):\"dimension\"in t?g(p({},t),{dimension:t.dimension*e}):\"glue\"in t?t.shrink&&t.grow?{glue:pt(t.glue,e),shrink:pt(t.shrink,e),grow:pt(t.grow,e)}:t.shrink?{glue:pt(t.glue,e),shrink:pt(t.shrink,e)}:t.grow?{glue:pt(t.glue,e),grow:pt(t.grow,e)}:{glue:pt(t.glue,e)}:null}var ff={\"p@\":{dimension:1},\"z@\":{dimension:0},maxdimen:{dimension:16383.99999},hfuzz:{dimension:.1},vfuzz:{dimension:.1},overfullrule:{dimension:5},hsize:{dimension:6.5,unit:\"in\"},vsize:{dimension:8.9,unit:\"in\"},parindent:{dimension:20},maxdepth:{dimension:4},splitmaxdepth:{register:\"maxdimen\"},boxmaxdepth:{register:\"maxdimen\"},delimitershortfall:{dimension:5},nulldelimiterspace:{dimension:1.2,unit:\"pt\"},scriptspace:{dimension:.5},topskip:{dimension:10},splittopskip:{dimension:10},normalbaselineskip:{dimension:12},normallineskip:{dimension:1},normallineskiplimit:{dimension:0},jot:{dimension:3},doublerulesep:{dimension:2},arrayrulewidth:{dimension:.4},arraycolsep:{dimension:5},fboxsep:{dimension:3},fboxrule:{dimension:.4},\"z@skip\":{glue:{dimension:0},shrink:{dimension:0},grow:{dimension:0}},hideskip:{glue:{dimension:-1e3},grow:{dimension:1,unit:\"fill\"}},\"@flushglue\":{glue:{dimension:0},grow:{dimension:1,unit:\"fill\"}},parskip:{glue:{dimension:0},grow:{dimension:1}},abovedisplayskip:{glue:{dimension:12},grow:{dimension:3},shrink:{dimension:9}},abovedisplayshortskip:{glue:{dimension:0},grow:{dimension:3}},belowdisplayskip:{glue:{dimension:12},grow:{dimension:3},shrink:{dimension:9}},belowdisplayshortskip:{glue:{dimension:7},grow:{dimension:3},shrink:{dimension:4}},parfillskip:{glue:{dimension:0},grow:{dimension:1,unit:\"fil\"}},thinmuskip:{glue:{dimension:3,unit:\"mu\"}},medmuskip:{glue:{dimension:4,unit:\"mu\"},grow:{dimension:2,unit:\"mu\"},shrink:{dimension:4,unit:\"mu\"}},thickmuskip:{glue:{dimension:5,unit:\"mu\"},grow:{dimension:5,unit:\"mu\"}},smallskipamount:{glue:{dimension:3},grow:{dimension:1},shrink:{dimension:1}},medskipamount:{glue:{dimension:6},grow:{dimension:2},shrink:{dimension:3}},bigskipamount:{glue:{dimension:12},grow:{dimension:2},shrink:{dimension:4}},pretolerance:100,tolerance:200,hbadness:1e3,vbadness:1e3,linepenalty:10,hyphenpenalty:50,exhyphenpenalty:50,binoppenalty:700,relpenalty:500,clubpenalty:150,widowpenalty:150,displaywidowpenalty:50,brokenpenalty:100,predisplaypenalty:1e4,doublehyphendemerits:1e4,finalhyphendemerits:5e3,adjdemerits:1e4,tracinglostchars:1,uchyph:1,delimiterfactor:901,defaulthyphenchar:\"\\\\-\",defaultskewchar:-1,newlinechar:-1,showboxbreadth:5,showboxdepth:3,errorcontextlines:5,interdisplaylinepenalty:100,interfootnotelinepenalty:100,baselineSkip:1.2,arraystretch:1,month:new Date().getMonth()+1,day:new Date().getDate(),year:new Date().getFullYear()};function Na(){return p({},ff)}function Zn(){return{registers:Na(),smartFence:!1,renderPlaceholder:void 0,placeholderSymbol:\"\\u25A2\",letterShapeStyle:F.locale.startsWith(\"fr\")?\"french\":\"tex\",minFontScale:0,maxMatrixCols:10,colorMap:Xr,backgroundColorMap:Ei,getMacro:t=>Ki(t,Bi())}}var B=class t{constructor(e,r){var o,a,s,l,c,u,m,d,h,f,x,v,b,_,S;let i;e!=null&&e.parent?(this.parent=e.parent,i=e.parent,this.registers={}):(i=p(p({},Zn()),(o=e==null?void 0:e.from)!=null?o:{}),this.registers=i.registers),i.atomIdsSettings&&(this.atomIdsSettings=p({},i.atomIdsSettings)),this.renderPlaceholder=i.renderPlaceholder,this.isPhantom=(l=(s=e==null?void 0:e.isPhantom)!=null?s:(a=this.parent)==null?void 0:a.isPhantom)!=null?l:!1,this.letterShapeStyle=i.letterShapeStyle,this.minFontScale=i.minFontScale,this.maxMatrixCols=i.maxMatrixCols,r!=null&&r.color&&r.color!==\"none\"?this.color=r.color:this.color=(u=(c=this.parent)==null?void 0:c.color)!=null?u:\"\",r!=null&&r.backgroundColor&&r.backgroundColor!==\"none\"?this.backgroundColor=r.backgroundColor:this.backgroundColor=(d=(m=this.parent)==null?void 0:m.backgroundColor)!=null?d:\"\",r!=null&&r.fontSize&&r.fontSize!==\"auto\"&&r.fontSize!==((h=this.parent)==null?void 0:h.size)?this.size=r.fontSize:this.size=(x=(f=this.parent)==null?void 0:f.size)!=null?x:Ui;let n=(b=(v=this.parent)==null?void 0:v.mathstyle)!=null?b:mt.displaystyle;if(typeof(e==null?void 0:e.mathstyle)==\"string\"){if(i instanceof t)switch(e.mathstyle){case\"cramp\":n=n.cramp;break;case\"superscript\":n=n.sup;break;case\"subscript\":n=n.sub;break;case\"numerator\":n=n.fracNum;break;case\"denominator\":n=n.fracDen;break}switch(e.mathstyle){case\"textstyle\":n=mt.textstyle;break;case\"displaystyle\":n=mt.displaystyle;break;case\"scriptstyle\":n=mt.scriptstyle;break;case\"scriptscriptstyle\":n=mt.scriptscriptstyle;break;case\"\":case\"auto\":break}}this.mathstyle=n,this.smartFence=i.smartFence,this.placeholderSymbol=i.placeholderSymbol,this.colorMap=(_=i.colorMap)!=null?_:(A=>A),this.backgroundColorMap=(S=i.backgroundColorMap)!=null?S:(A=>A),this.getMacro=i.getMacro,this.parent!==void 0||this.registers}makeID(){if(!this.atomIdsSettings)return;if(this.atomIdsSettings.overrideID)return this.atomIdsSettings.overrideID;if(typeof this.atomIdsSettings.seed!=\"number\")return`${Date.now().toString(36).slice(-2)}${Math.floor(Math.random()*1e5).toString(36)}`;let e=this.atomIdsSettings.seed.toString(36);return this.atomIdsSettings.seed+=1,e}scale(e){return e*this.effectiveFontSize}get scalingFactor(){return this.parent?this.effectiveFontSize/this.parent.effectiveFontSize:1}get isDisplayStyle(){return this.mathstyle.id===Ia||this.mathstyle.id===Gn}get isCramped(){return this.mathstyle.cramped}get isTight(){return this.mathstyle.isTight}get metrics(){return this.mathstyle.metrics}get effectiveFontSize(){return Math.max(Un[Math.max(1,this.size+this.mathstyle.sizeDelta)],this.minFontScale)}getRegister(e){if(this.registers&&e in this.registers)return this.registers[e];if(this.parent)return this.parent.getRegister(e)}getRegisterAsNumber(e){let r=this.getRegister(e);if(typeof r==\"number\")return r;if(typeof r==\"string\")return Number(r)}getRegisterAsGlue(e){if(this.registers&&e in this.registers){let r=this.registers[e];return typeof r==\"object\"&&\"glue\"in r?r:typeof r==\"object\"&&\"dimension\"in r?{glue:{dimension:r.dimension}}:typeof r==\"number\"?{glue:{dimension:r}}:void 0}if(this.parent)return this.parent.getRegisterAsGlue(e)}getRegisterAsEm(e,r){return za(this.getRegisterAsDimension(e),r)}getRegisterAsDimension(e){if(this.registers&&e in this.registers){let r=this.registers[e];return typeof r==\"object\"&&\"glue\"in r?r.glue:typeof r==\"object\"&&\"dimension\"in r?r:typeof r==\"number\"?{dimension:r}:void 0}if(this.parent)return this.parent.getRegisterAsDimension(e)}setRegister(e,r){if(r===void 0){delete this.registers[e];return}this.registers[e]=r}evaluate(e){if(!e||!(\"register\"in e))return e;let r=this;if(\"global\"in e&&e.global)for(;r.parent;)r=r.parent;let i=1;\"factor\"in e&&e.factor!==1&&e.factor!==void 0&&(i=e.factor);let n=r.getRegister(e.register);if(n===void 0)return;if(typeof n==\"string\")return{string:Number(n).toString()+n};if(typeof n==\"number\")return{number:i*n};let o=r.evaluate(n);if(o!==void 0)return\"string\"in o?{string:Number(n).toString()+o.string}:\"number\"in o?{number:i*o.number}:\"dimension\"in o?g(p({},o),{dimension:i*o.dimension}):\"glue\"in o?g(p({},o),{glue:g(p({},o.glue),{dimension:i*o.glue.dimension}),shrink:o.shrink?g(p({},o.shrink),{dimension:i*o.shrink.dimension}):void 0,grow:o.grow?g(p({},o.grow),{dimension:i*o.grow.dimension}):void 0}):e}toDimension(e){let r=this.evaluate(e);if(r===void 0)return null;if(\"dimension\"in r)return r;if(\"glue\"in r)return r.glue;if(\"number\"in r)return{dimension:r.number};if(\"string\"in r){let i=parseFloat(r.string),n=r.string.match(/(mm|cm|ex|px|em|bp|dd|pc|in|mu)$/);return n?{dimension:i,unit:n[0]}:{dimension:i}}return null}toEm(e,r){if(e===null)return 0;let i=this.toDimension(e);return i===null?0:Zl(i,r)/Kt}toNumber(e){if(e===null)return null;let r=this.evaluate(e);return r===void 0?null:\"number\"in r?r.number:\"dimension\"in r?r.dimension:\"glue\"in r?r.glue.dimension:\"string\"in r?Number(r.string):null}toColor(e){var i,n;if(e===null)return null;let r=this.evaluate(e);return r===void 0?null:\"string\"in r?(n=(i=this.colorMap)==null?void 0:i.call(this,r.string))!=null?n:r.string:null}toBackgroundColor(e){var i,n;if(e===null)return null;let r=this.evaluate(e);return r===void 0?null:\"string\"in r?(n=(i=this.backgroundColorMap)==null?void 0:i.call(this,r.string))!=null?n:r.string:null}};var Pr=[\"body\",\"above\",\"below\",\"superscript\",\"subscript\"];function Kr(t){return typeof t==\"string\"&&Pr.includes(t)}function Ge(t){return t!==void 0&&Array.isArray(t)&&t.length===2}var y=class t{constructor(e){this.isRoot=!1;var r,i,n,o,a,s,l;this.type=e.type,typeof e.value==\"string\"&&(this.value=e.value),this.command=(i=(r=e.command)!=null?r:this.value)!=null?i:\"\",this.mode=(n=e.mode)!=null?n:\"math\",e.isFunction&&(this.isFunction=!0),(e.isRoot||this.type===\"root\")&&(this.isRoot=!0),e.limits&&(this.subsupPlacement=e.limits),this.style=p({},(o=e.style)!=null?o:{}),this.displayContainsHighlight=(a=e.displayContainsHighlight)!=null?a:!1,this.captureSelection=(s=e.captureSelection)!=null?s:!1,this.skipBoundary=(l=e.skipBoundary)!=null?l:!1,e.verbatimLatex!==void 0&&e.verbatimLatex!==null&&(this.verbatimLatex=e.verbatimLatex),e.args&&(this.args=e.args),e.body&&(this.body=e.body),this._changeCounter=0}static createBox(e,r,i){var s;if(!r)return null;let n=gf(r),o=[];for(let l of n){let c=l[0].style,u=bf(e,l,{style:{color:c.color,backgroundColor:c.backgroundColor,fontSize:c.fontSize}});u&&o.push(u)}if(o.length===0)return null;let a=((s=i==null?void 0:i.classes)!=null?s:\"\").trim();return o.length===1&&!a&&!(i!=null&&i.type)?o[0].wrap(e):new w(o,{classes:a,type:i==null?void 0:i.type}).wrap(e)}static serialize(e,r){return ve.serialize(e,r)}static commonAncestor(e,r){if(e===r||e.parent===r.parent)return e.parent;let i=new WeakSet,{parent:n}=e;for(;n;)i.add(n),n=n.parent;for(n=r.parent;n;){if(i.has(n))return n;n=n.parent}}static fromJson(e){return typeof e==\"string\"?new t({type:\"mord\",value:e,mode:\"math\"}):new t(e)}toJson(){if(this._json)return this._json;let e={};if(this.type&&(e.type=this.type),this.mode!==\"math\"&&(e.mode=this.mode),this.command&&this.command!==this.value&&(e.command=this.command),this.value!==void 0&&(e.value=this.value),this.style&&Object.keys(this.style).length>0&&(e.style=p({},this.style)),this.verbatimLatex!==void 0&&(e.verbatimLatex=this.verbatimLatex),this.subsupPlacement&&(e.subsupPlacement=this.subsupPlacement),this.explicitSubsupPlacement&&(e.explicitSubsupPlacement=!0),this.isFunction&&(e.isFunction=!0),this.displayContainsHighlight&&(e.displayContainsHighlight=!0),this.skipBoundary&&(e.skipBoundary=!0),this.captureSelection&&(e.captureSelection=!0),this.args&&(e.args=yf(this.args)),this._branches)for(let r of Object.keys(this._branches))this._branches[r]&&(e[r]=this._branches[r].filter(i=>i.type!==\"first\").map(i=>i.toJson()));return e.type===\"mord\"&&Object.keys(e).length===2&&\"value\"in e?e.value:(this._json=e,e)}get changeCounter(){return this.parent?this.parent.changeCounter:this._changeCounter}set isDirty(e){e&&(this._json=void 0,this.parent||this._changeCounter++,\"verbatimLatex\"in this&&(this.verbatimLatex=void 0),this._children=void 0,this.parent&&(this.parent.isDirty=!0))}_serialize(e){if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex==\"string\")return this.verbatimLatex;let r=ne(this.command,this.mode);return r!=null&&r.serialize?r.serialize(this,e):this.body&&this.command?P([W(this.command,this.bodyToLatex(e)),this.supsubToLatex(e)]):this.body?P([this.bodyToLatex(e),this.supsubToLatex(e)]):!this.value||this.value===\"\\u200B\"?\"\":this.command}bodyToLatex(e){var i;let r=(i=e.defaultMode)!=null?i:this.mode===\"math\"?\"math\":\"text\";return ve.serialize(this.body,g(p({},e),{defaultMode:r}))}aboveToLatex(e){return ve.serialize(this.above,e)}belowToLatex(e){return ve.serialize(this.below,e)}supsubToLatex(e){let r=\"\";if(e=g(p({},e),{defaultMode:\"math\"}),this.branch(\"subscript\")!==void 0){let i=ve.serialize(this.subscript,e);i.length===0?r+=\"_{}\":i.length===1?/^[0-9]$/.test(i)?r+=`_${i}`:r+=`_{${i}}`:r+=`_{${i}}`}if(this.branch(\"superscript\")!==void 0){let i=ve.serialize(this.superscript,e);i.length===0?r+=\"^{}\":i.length===1?i===\"\\u2032\"?r+=\"^\\\\prime \":i===\"\\u2033\"?r+=\"^\\\\doubleprime \":/^[0-9]$/.test(i)?r+=`^${i}`:r+=`^{${i}}`:r+=`^{${i}}`}return r}get treeDepth(){let e=1,r=this.parent;for(;r;)r=r.parent,e+=1;return e}get inCaptureSelection(){let e=this;for(;e;){if(e.captureSelection)return!0;e=e.parent}return!1}get parentPrompt(){let e=this.parent;for(;e;){if(e.type===\"prompt\"&&!e.captureSelection)return e;e=e.parent}return null}branch(e){if(Kr(e)&&this._branches)return this._branches[e]}get branches(){if(!this._branches)return[];let e=[];for(let r of Pr)this._branches[r]&&e.push(r);return e}createBranch(e){return Kr(e),Kr(e)?(this._branches?this._branches[e]||(this._branches[e]=[this.makeFirstAtom(e)]):this._branches={[e]:[this.makeFirstAtom(e)]},this.isDirty=!0,this._branches[e]):[]}get row(){return Ge(this.parentBranch)?this.parentBranch[0]:-1}get col(){return Ge(this.parentBranch)?this.parentBranch[1]:-1}get body(){var e;return(e=this._branches)==null?void 0:e.body}set body(e){this.setChildren(e,\"body\")}get superscript(){var e;return(e=this._branches)==null?void 0:e.superscript}set superscript(e){this.setChildren(e,\"superscript\")}get subscript(){var e;return(e=this._branches)==null?void 0:e.subscript}set subscript(e){this.setChildren(e,\"subscript\")}get above(){var e;return(e=this._branches)==null?void 0:e.above}set above(e){this.setChildren(e,\"above\")}get below(){var e;return(e=this._branches)==null?void 0:e.below}set below(e){this.setChildren(e,\"below\")}applyStyle(e,r){this.isDirty=!0,r!=null&&r.unstyledOnly?(e.color&&!this.style.color&&(this.style.color=e.color),e.backgroundColor&&!this.style.backgroundColor&&(this.style.backgroundColor=e.backgroundColor),e.fontFamily&&!this.style.fontFamily&&(this.style.fontFamily=e.fontFamily),e.fontShape&&!this.style.fontShape&&(this.style.fontShape=e.fontShape),e.fontSeries&&!this.style.fontSeries&&(this.style.fontSeries=e.fontSeries),e.fontSize&&!this.style.fontSize&&(this.style.fontSize=e.fontSize),e.variant&&!this.style.variant&&(this.style.variant=e.variant),e.variantStyle&&!this.style.variantStyle&&(this.style.variantStyle=e.variantStyle)):this.style=p(p({},this.style),e),this.style.fontFamily===\"none\"&&delete this.style.fontFamily,this.style.fontShape===\"auto\"&&delete this.style.fontShape,this.style.fontSeries===\"auto\"&&delete this.style.fontSeries,this.style.color===\"none\"&&(delete this.style.color,delete this.style.verbatimColor),this.style.backgroundColor===\"none\"&&(delete this.style.backgroundColor,delete this.style.verbatimBackgroundColor),this.style.fontSize===\"auto\"&&delete this.style.fontSize;for(let i of this.children)i.applyStyle(e,r)}getInitialBaseElement(){var e,r,i;return this.hasEmptyBranch(\"body\")?this:((e=this.body)==null||e[0].type,(i=(r=this.body[1])==null?void 0:r.getInitialBaseElement())!=null?i:this)}getFinalBaseElement(){return this.hasEmptyBranch(\"body\")?this:this.body[this.body.length-1].getFinalBaseElement()}isCharacterBox(){return this.type===\"leftright\"||this.type===\"genfrac\"||this.type===\"subsup\"||this.type===\"delim\"||this.type===\"array\"||this.type===\"surd\"?!1:this.getFinalBaseElement().type===\"mord\"}hasEmptyBranch(e){let r=this.branch(e);return r?(r.length>0,r[0].type,r.length===1):!0}setChildren(e,r){var n;if(!e||(Kr(r),!Kr(r)))return;let i=((n=e[0])==null?void 0:n.type)===\"first\"?[...e]:[this.makeFirstAtom(r),...e];this._branches?this._branches[r]=i:this._branches={[r]:i};for(let o of e)o.parent=this,o.parentBranch=r;this.isDirty=!0}makeFirstAtom(e){let r=new t({type:\"first\",mode:this.mode});return r.parent=this,r.parentBranch=e,r}addChild(e,r){e.type,this.createBranch(r).push(e),this.isDirty=!0,e.parent=this,e.parentBranch=r}addChildBefore(e,r){r.parentBranch;let i=this.createBranch(r.parentBranch);i.splice(i.indexOf(r),0,e),this.isDirty=!0,e.parent=this,e.parentBranch=r.parentBranch}addChildAfter(e,r){r.parentBranch;let i=this.createBranch(r.parentBranch);i.splice(i.indexOf(r)+1,0,e),this.isDirty=!0,e.parent=this,e.parentBranch=r.parentBranch}addChildren(e,r){let i=this.createBranch(r);for(let n of e)n.parent=this,n.parentBranch=r,i.push(n);this.isDirty=!0}addChildrenAfter(e,r){e.length===0||e[0].type,r.parentBranch;let i=this.createBranch(r.parentBranch);i.splice(i.indexOf(r)+1,0,...e),this.isDirty=!0;for(let n of e)n.parent=this,n.parentBranch=r.parentBranch;return e[e.length-1]}removeBranch(e){let r=this.branch(e);if(Kr(e)&&(this._branches[e]=void 0),!r)return[];for(let o of r)o.parent=void 0,o.parentBranch=void 0;r[0].type;let[i,...n]=r;return this.isDirty=!0,n}removeChild(e){if(e.parent,e.type===\"first\")return;let r=this.branch(e.parentBranch),i=r.indexOf(e);i>=0,r.splice(i,1),this.isDirty=!0,e.parent=void 0,e.parentBranch=void 0}get siblings(){return this.parent?this.parent.branch(this.parentBranch):[]}get firstSibling(){return this.siblings[0]}get lastSibling(){let{siblings:e}=this;return e[e.length-1]}get isFirstSibling(){return this===this.firstSibling}get isLastSibling(){return this===this.lastSibling}get hasNoSiblings(){return this.siblings.length===1}get leftSibling(){this.parent;let e=this.parent.branch(this.parentBranch);return e[e.indexOf(this)-1]}get rightSibling(){this.parent;let e=this.parent.branch(this.parentBranch);return e[e.indexOf(this)+1]}get hasChildren(){return!!(this._branches&&this.children.length>0)}get firstChild(){return this.hasChildren,this.children[0]}get lastChild(){this.hasChildren;let{children:e}=this;return e[e.length-1]}get children(){if(this._children)return this._children;if(!this._branches)return[];let e=[];for(let r of Pr)if(this._branches[r])for(let i of this._branches[r])e.push(...i.children),e.push(i);return this._children=e,e}render(e){if(this.type===\"first\"&&!e.atomIdsSettings)return null;let r=ne(this.command,this.mode);if(r!=null&&r.render)return r.render(this,e);let i=new B({parent:e},this.style),n=this.createBox(i,{classes:this.parent?\"\":\"ML__base\"});return n?(!this.subsupPlacement&&(this.superscript||this.subscript)&&(n=this.attachSupsub(i,{base:n})),n.wrap(i)):null}attachSupsub(e,r){var f;let i=r.base,n=this.superscript,o=this.subscript;if(!n&&!o)return i;let a=null,s=null,l=(f=r.isCharacterBox)!=null?f:this.isCharacterBox(),c=0;if(n){let x=new B({parent:e,mathstyle:\"superscript\"});a=t.createBox(x,n),l||(c=i.height-e.metrics.supDrop*x.scalingFactor)}let u=0;if(o){let x=new B({parent:e,mathstyle:\"subscript\"});s=t.createBox(x,o),l||(u=i.depth+e.metrics.subDrop*x.scalingFactor)}let m;e.isDisplayStyle?m=e.metrics.sup1:e.isCramped?m=e.metrics.sup3:m=e.metrics.sup2;let d=.5/Kt/e.scalingFactor,h=null;if(s&&a){c=Math.max(c,m,a.depth+.25*e.metrics.xHeight),u=Math.max(u,e.metrics.sub2);let x=e.metrics.defaultRuleThickness;if(c-a.depth-(s.height-u)<4*x){u=4*x-(c-a.depth)+s.height;let b=.8*e.metrics.xHeight-(c-a.depth);b>0&&(c+=b,u-=b)}let v=this.type===\"extensible-symbol\"&&i.italic?-i.italic:0;h=new te({individualShift:[{box:s,shift:u,marginLeft:v},{box:a,shift:-c}]})}else s&&!a?(u=Math.max(u,e.metrics.sub1,s.height-.8*Je),h=new te({shift:u,children:[{box:s,marginRight:d,marginLeft:this.isCharacterBox()?-i.italic:0}]})):!s&&a&&(c=Math.max(c,m,a.depth+.25*Je),h=new te({shift:-c,children:[{box:a,marginRight:d}]}));return new w([i,new w(h,{caret:this.caret,isSelected:this.isSelected,classes:\"ML__msubsup\"})],{type:r.type})}attachLimits(e,r){let i=this.superscript?t.createBox(new B({parent:e,mathstyle:\"superscript\"},this.style),this.superscript):null,n=this.subscript?t.createBox(new B({parent:e,mathstyle:\"subscript\"},this.style),this.subscript):null;return!i&&!n?r.base.wrap(e):D0(e,g(p({},r),{above:i,below:n}))}bind(e,r){if(!r||e.isPhantom||this.value===\"\\u200B\")return r;let i=this.parent;for(;i&&!i.captureSelection;)i=i.parent;return i!=null&&i.captureSelection||(this.id||(this.id=e.makeID()),r.atomID=this.id),r}createBox(e,r){var s,l,c,u;let i=(s=this.value)!=null?s:this.body,n=(l=r==null?void 0:r.boxType)!=null?l:Ra(this.type),o=(c=r==null?void 0:r.classes)!=null?c:\"\";this.mode===\"text\"&&(o+=\" ML__text\");let a=typeof i==\"string\"||i===void 0?new w(i!=null?i:null,{type:n,isSelected:this.isSelected,mode:this.mode,maxFontSize:e.scalingFactor,style:g(p({variant:\"normal\"},this.style),{fontSize:Math.max(1,e.size+e.mathstyle.sizeDelta)}),letterShapeStyle:e.letterShapeStyle,classes:o}):(u=t.createBox(e,i,{type:n,classes:o}))!=null?u:new w(null);return e.isTight&&(a.isTight=!0),(this.mode!==\"math\"||this.style.variant===\"main\")&&(a.italic=0),a.right=a.italic,this.bind(e,a),this.caret&&!this.superscript&&!this.subscript&&(a.caret=this.caret),a}isDigit(){var e;return this.type===\"mord\"&&this.value?/^[\\d,\\.]$/.test(this.value):this.type===\"group\"&&((e=this.body)==null?void 0:e.length)===2?this.body[0].type===\"first\"&&this.body[1].value===\",\":!1}asDigit(){var e;return this.type===\"mord\"&&this.value&&/^[\\d,\\.]$/.test(this.value)?this.value:this.type===\"group\"&&((e=this.body)==null?void 0:e.length)===2&&this.body[0].type===\"first\"&&this.body[1].value===\",\"?\".\":\"\"}};function gf(t){let e,r=[],i=[];for(let n of t)if(n.type===\"first\"&&i.push(n),!e&&!n.style)i.push(n);else{let o=n.style;e&&o.color===e.color&&o.backgroundColor===e.backgroundColor&&o.fontSize===e.fontSize?i.push(n):(i.length>0&&r.push(i),i=[n],e=o)}return i.length>0&&r.push(i),r}function bf(t,e,r){var s,l,c,u,m;if(!e||e.length===0)return null;let i=new B({parent:t},r.style),n=!((s=i.atomIdsSettings)!=null&&s.groupNumbers),o=[];if(e.length===1){let d=e[0],h=d.render(i);h&&(n&&d.isSelected&&h.selected(!0),o=[h])}else{let d=\"\",h=!0;for(let f of e){(l=i.atomIdsSettings)!=null&&l.groupNumbers&&d&&(h&&f.isDigit()||!h&&Yl(f))&&(i.atomIdsSettings.overrideID=d);let x=f.render(i);i.atomIdsSettings&&(i.atomIdsSettings.overrideID=void 0),x&&((c=i.atomIdsSettings)!=null&&c.groupNumbers&&((f.isDigit()||Yl(f))&&(!d||h!==f.isDigit())&&(h=f.isDigit(),d=(u=f.id)!=null?u:\"\"),d&&(!(f.isDigit()||Yl(f))||!f.hasEmptyBranch(\"superscript\")||!f.hasEmptyBranch(\"subscript\"))&&(d=\"\")),n&&f.isSelected&&x.selected(!0),o.push(x))}}if(o.length===0)return null;let a=new w(o,g(p({isTight:i.isTight},r),{type:(m=r.type)!=null?m:\"lift\"}));return a.isSelected=o.every(d=>d.isSelected),a.wrap(i)}function Yl(t){return t.mode===\"text\"}function yf(t){return t.map(e=>e===null?\"<null>\":Array.isArray(e)&&e[0]instanceof y?{atoms:e.map(r=>r.toJson())}:typeof e==\"object\"&&\"group\"in e?{group:e.group.map(r=>r.toJson())}:e)}var qe=class t extends y{constructor(e,r,i){super({type:\"text\",command:e,mode:\"text\",displayContainsHighlight:!0}),this.value=r,this.verbatimLatex=r,this.applyStyle(i)}static fromJson(e){return new t(e.command,e.value,e.style)}render(e){let r=this.createBox(e);return this.caret&&(r.caret=this.caret),r}_serialize(e){var r;return(r=this.verbatimLatex)!=null?r:cl(\"text\",this.value.codePointAt(0))}};function O0(t,e){if(t.direction===e.direction){let r=t.ranges.length;if(e.ranges.length===r){let i=0;for(;i<r&&xf(t.ranges[i],e.ranges[i])===\"equal\";)i++;return i===r?\"equal\":\"different\"}}return\"different\"}function xf(t,e){return t[0]===e[0]&&t[1]===e[1]?\"equal\":\"different\"}function de(t){let e=1/0,r=-1/0;for(let i of t.ranges)e=Math.min(e,i[0],i[1]),r=Math.max(r,i[0],i[1]);return[e,r]}function Rt(t){return typeof t==\"number\"&&!Number.isNaN(t)}function si(t){return Array.isArray(t)&&t.length===2}function Xi(t){return t!=null&&typeof t==\"object\"&&\"ranges\"in t&&Array.isArray(t.ranges)}function B0(t,e){let r=t.at(e),i;if(r){i=r.mode;let n=r.parent;for(;!i&&n;)n&&(i=n.mode),n=n.parent}return i}function vf(t,e){if(!e)return\"\";if(typeof e==\"string\")return e;if(!t||e.after===void 0)return e.value;let r=!1,i=!1,n=!1,o=!1,a=!1,s=!1,l=!1,c=!1,u=!1,m=!1,d=!1,h=!1,f=!1,x=!1,v=!1,b=t[0],_=0;for(;b!=null&&b.type&&/^(subsup|placeholder)$/.test(b.type);)_+=1,b=t[_];return r=!b||b.type===\"first\",b&&(x=b.mode===\"text\",i=!x&&b.type===\"mord\"&&$o.test(b.value),n=!x&&b.type===\"mord\"&&/\\d+$/.test(b.value),o=!x&&b.isFunction,a=b.type===\"genfrac\",s=b.type===\"surd\",l=b.type===\"mbin\",c=b.type===\"mrel\",u=b.type===\"mop\"||b.type===\"operator\"||b.type===\"extensible-symbol\",m=b.type===\"mpunct\"||b.type===\"minner\",d=b.type===\"array\",h=b.type===\"mopen\",f=b.type===\"mclose\"||b.type===\"leftright\",v=b.type===\"space\"),e.after.includes(\"nothing\")&&r||e.after.includes(\"letter\")&&i||e.after.includes(\"digit\")&&n||e.after.includes(\"function\")&&o||e.after.includes(\"frac\")&&a||e.after.includes(\"surd\")&&s||e.after.includes(\"binop\")&&l||e.after.includes(\"relop\")&&c||e.after.includes(\"operator\")&&u||e.after.includes(\"punct\")&&m||e.after.includes(\"array\")&&d||e.after.includes(\"openfence\")&&h||e.after.includes(\"closefence\")&&f||e.after.includes(\"text\")&&x||e.after.includes(\"space\")&&v?e.value:\"\"}function Yn(t,e,r){return r?vf(t,r[e]):\"\"}var Fa={\"&\":\"\\\\&\",\"%\":\"\\\\%\",$:\"\\\\$\",\"''\":\"^{\\\\doubleprime}\",\"'''\":\"^{\\\\prime\\\\prime\\\\prime}\",\"''''\":\"^{\\\\prime\\\\prime\\\\prime\\\\prime}\",alpha:\"\\\\alpha\",delta:\"\\\\delta\",Delta:\"\\\\Delta\",pi:\"\\\\pi\",Pi:\"\\\\Pi\",theta:\"\\\\theta\",Theta:\"\\\\Theta\",ii:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\imaginaryI\"},jj:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\imaginaryJ\"},ee:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\exponentialE\"},nabla:\"\\\\nabla\",grad:\"\\\\nabla\",del:\"\\\\partial\",deg:{after:\"digit+space\",value:\"\\\\degree\"},infty:\"\\\\infty\",\"\\u221E\":\"\\\\infty\",oo:{after:\"nothing+digit+frac+surd+binop+relop+punct+array+openfence+closefence+space\",value:\"\\\\infty\"},\"\\u2211\":\"\\\\sum\",sum:\"\\\\sum_{#?}^{#?}\",int:\"\\\\int_{#?}^{#?}\",prod:\"\\\\prod_{#?}^{#?}\",sqrt:\"\\\\sqrt{#?}\",\"\\u2206\":\"\\\\differentialD\",\"\\u2202\":\"\\\\differentialD\",sin:\"\\\\sin\",cos:\"\\\\cos\",tan:\"\\\\tan\",arccos:\"\\\\arccos\",arcsin:\"\\\\arcsin\",arctan:\"\\\\arctan\",arctg:\"\\\\operatorname{arctg}\",arcsec:\"\\\\operatorname{arcsec}\",arccsc:\"\\\\operatorname{arccsc}\",arsinh:\"\\\\operatorname{arsinh}\",arccosh:\"\\\\operatorname{arccosh}\",arcosh:\"\\\\operatorname{arcosh}\",artanh:\"\\\\operatorname{artanh}\",arctanh:\"\\\\operatorname{arctanh}\",arcsech:\"\\\\operatorname{arcsech}\",arccsch:\"\\\\operatorname{arccsch}\",ch:\"\\\\operatorname{ch}\",cosec:\"\\\\operatorname{cosec}\",cosh:\"\\\\cosh\",cot:\"\\\\cot\",cotg:\"\\\\operatorname{cotg}\",coth:\"\\\\coth\",csc:\"\\\\csc\",ctg:\"\\\\operatorname{ctg}\",cth:\"\\\\operatorname{cth}\",sec:\"\\\\sec\",sech:\"\\\\operatorname{sech}\",sinh:\"\\\\sinh\",sh:\"\\\\operatorname{sh}\",tanh:\"\\\\tanh\",tg:\"\\\\operatorname{tg}\",th:\"\\\\operatorname{th}\",arg:\"\\\\arg\",lg:\"\\\\lg\",lb:\"\\\\operatorname{lb}\",log:\"\\\\log_{#?}\",ln:\"\\\\ln\",exp:\"\\\\exp\",lim:\"\\\\lim_{#?\\\\to#?}\",dx:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\differentialD x\"},dy:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\differentialD y\"},dt:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\differentialD t\"},AA:\"\\\\forall\",EE:\"\\\\exists\",\"!EE\":\"\\\\nexists\",\"&&\":\"\\\\land\",xin:{after:\"nothing+text+relop+punct+openfence+space\",value:\"x \\\\in\"},sint:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\sin t\"},in:{after:\"nothing+letter+closefence\",value:\"\\\\in\"},\"!in\":\"\\\\notin\",NN:\"\\\\mathbb{N}\",ZZ:\"\\\\mathbb{Z}\",QQ:\"\\\\mathbb{Q}\",RR:\"\\\\mathbb{R}\",CC:\"\\\\mathbb{C}\",xx:\"\\\\times\",\"+-\":\"\\\\pm\",\"\\u2260\":\"\\\\ne\",\"!=\":\"\\\\ne\",\"\\u2265\":\"\\\\ge\",\">=\":\"\\\\ge\",\"\\u2264\":\"\\\\le\",\"<=\":\"\\\\le\",\"<<\":\"\\\\ll\",\">>\":\"\\\\gg\",\"~~\":\"\\\\approx\",\"\\u2248\":\"\\\\approx\",\"?=\":\"\\\\questeq\",\"\\xF7\":\"\\\\div\",\"\\xAC\":\"\\\\neg\",\":=\":\"\\\\coloneq\",\"::\":\"\\\\Colon\",\"(:\":\"\\\\langle\",\":)\":\"\\\\rangle\",beta:\"\\\\beta\",chi:\"\\\\chi\",epsilon:\"\\\\epsilon\",varepsilon:\"\\\\varepsilon\",eta:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\eta\"},gamma:\"\\\\gamma\",Gamma:\"\\\\Gamma\",iota:\"\\\\iota\",kappa:\"\\\\kappa\",lambda:\"\\\\lambda\",Lambda:\"\\\\Lambda\",mu:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\mu\"},nu:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\nu\"},\\u00B5:\"\\\\mu\",phi:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\phi\"},Phi:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\Phi\"},varphi:\"\\\\varphi\",psi:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\psi\"},Psi:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\Psi\"},rho:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\rho\"},sigma:\"\\\\sigma\",Sigma:\"\\\\Sigma\",tau:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\tau\"},vartheta:\"\\\\vartheta\",upsilon:\"\\\\upsilon\",xi:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space\",value:\"\\\\xi\"},Xi:{after:\"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text\",value:\"\\\\Xi\"},zeta:\"\\\\zeta\",omega:\"\\\\omega\",Omega:\"\\\\Omega\",\\u03A9:\"\\\\omega\",forall:\"\\\\forall\",exists:\"\\\\exists\",\"!exists\":\"\\\\nexists\",\":.\":\"\\\\therefore\",liminf:\"\\\\liminf_{#?}\",limsup:\"\\\\limsup_{#?}\",argmin:\"\\\\operatorname*{arg~min}_{#?}\",argmax:\"\\\\operatorname*{arg~max}_{#?}\",det:\"\\\\det\",mod:\"\\\\bmod{#?}\",\"(mod\":\"\\\\pmod{#?}\",max:\"\\\\max\",min:\"\\\\min\",erf:\"\\\\operatorname{erf}\",erfc:\"\\\\operatorname{erfc}\",bessel:\"\\\\operatorname{bessel}\",mean:\"\\\\operatorname{mean}\",median:\"\\\\operatorname{median}\",fft:\"\\\\operatorname{fft}\",lcm:\"\\\\operatorname{lcm}\",gcd:\"\\\\gcd\",randomReal:\"\\\\operatorname{randomReal}\",randomInteger:\"\\\\operatorname{randomInteger}\",Re:\"\\\\operatorname{Re}\",Im:\"\\\\operatorname{Im}\",mm:{after:\"nothing+digit+operator\",value:\"\\\\operatorname{mm}\"},cm:{after:\"nothing+digit+operator\",value:\"\\\\operatorname{cm}\"},km:{after:\"nothing+digit+operator\",value:\"\\\\operatorname{km}\"},kg:{after:\"nothing+digit+operator\",value:\"\\\\operatorname{kg}\"},ft:{after:\"nothing+digit+operator\",value:\"\\\\operatorname{ft}\"},inch:{after:\"nothing+digit+operator\",value:\"\\\\operatorname{inch}\"},mi:{after:\"nothing+digit+operator\",value:\"\\\\operatorname{mi}\"},\"...\":\"\\\\ldots\",\"+...\":\"+\\\\cdots\",\"-...\":\"-\\\\cdots\",\"->...\":\"\\\\to\\\\cdots\",\"-->...\":\"\\\\longrightarrow\\\\cdots\",\"->\":\"\\\\to\",\"|->\":\"\\\\mapsto\",\"-->\":\"\\\\longrightarrow\",\"<--\":\"\\\\longleftarrow\",\"=>\":\"\\\\Rightarrow\",\"==>\":\"\\\\Longrightarrow\",\"<=>\":\"\\\\iff\",\"<->\":\"\\\\leftrightarrow\",\"(.)\":\"\\\\odot\",\"(+)\":\"\\\\oplus\",\"(/)\":\"\\\\oslash\",\"(*)\":\"\\\\otimes\",\"(-)\":\"\\\\ominus\",\"||\":\"\\\\Vert\",\"*\":\"\\\\cdot\",\"**\":\"\\\\star\",\"***\":\"\\\\ast\",\"//\":\"\\\\slash\",\"\\\\\\\\\":\"\\\\backslash\",setminus:\"\\\\backslash\",\"|><\":\"\\\\ltimes\",\"><|\":\"\\\\rtimes\",\"|><|\":\"\\\\bowtie\",\"-:\":\"\\\\div\",divide:\"\\\\div\",\"@\":\"\\\\circ\",\"^^\":\"\\\\wedge\",\"^^^\":\"\\\\bigwedge\",vv:\"\\\\vee\",vvv:\"\\\\bigvee\",nn:\"\\\\cap\",nnn:\"\\\\bigcap\",uu:\"\\\\cup\",uuu:\"\\\\bigcup\",\"-=\":\"\\\\equiv\",\"~=\":\"\\\\cong\",lt:\"<\",\"lt=\":\"\\\\leq\",gt:\">\",\"gt=\":\"\\\\geq\",\"-<\":\"\\\\prec\",\"-lt\":\"\\\\prec\",\"-<=\":\"\\\\preceq\",\">-=\":\"\\\\succeq\",prop:\"\\\\propto\",diamond:\"\\\\diamond\",square:\"\\\\square\",iff:\"\\\\iff\",sub:\"\\\\subset\",sup:\"\\\\supset\",sube:\"\\\\subseteq\",supe:\"\\\\supseteq\",uarr:\"\\\\uparrow\",darr:\"\\\\downarrow\",rarr:\"\\\\rightarrow\",rArr:\"\\\\Rightarrow\",larr:\"\\\\leftarrow\",lArr:\"\\\\Leftarrow\",harr:\"\\\\leftrightarrow\",hArr:\"\\\\Leftrightarrow\",aleph:\"\\\\aleph\",and:\"\\\\land\",or:\"\\\\lor\",not:\"\\\\neg\",\"_|_\":\"\\\\bot\",TT:\"\\\\top\",\"|--\":\"\\\\vdash\",\"|==\":\"\\\\models\",\"|__\":\"\\\\lfloor\",\"__|\":\"\\\\rfloor\",\"|~\":\"\\\\lceil\",\"~|\":\"\\\\rceil\",\">->\":\"\\\\rightarrowtail\",\"->>\":\"\\\\twoheadrightarrow\",\">->>\":\"\\\\twoheadrightarrowtail\",times:\"\\\\times\",of:\"\\\\circ\",infinity:\"\\\\infty\",defint:\"\\\\int_{#?}^{#?}\",approaches:\"\\\\to\",ceil:\"\\\\left\\\\lceil#?\\\\right\\\\rceil\",floor:\"\\\\left\\\\lfloor#?\\\\right\\\\rfloor\",union:\"\\\\cup\",asterisk:\"\\\\ast\",frac:\"\\\\frac{#?}{#?}\",cbrt:\"\\\\sqrt[3]{#?}\",nthroot:\"\\\\sqrt[#?]{#?}\"};function ir(t,e){var i;let r=(i=e==null?void 0:e.format)!=null?i:\"auto\";return r===\"auto\"&&([r,t]=_f(t)),r===\"ascii-math\"?(t=t.replace(/\\u2061/gu,\"\"),t=t.replace(/\\u3016/gu,\"{\"),t=t.replace(/\\u3017/gu,\"}\"),t=t.replace(/([^\\\\])sinx/g,\"$1\\\\sin x\"),t=t.replace(/([^\\\\])cosx/g,\"$1\\\\cos x \"),t=t.replace(/\\u2013/g,\"-\"),[\"ascii-math\",He(t,{inlineShortcuts:e==null?void 0:e.inlineShortcuts})]):[\"latex\",t]}function He(t,e){var a;if(t=t.trim(),!t)return\"\";let r=(a=e.inlineShortcuts)!=null?a:Fa;if(t.startsWith(\"^\")||t.startsWith(\"_\")){let{match:s,rest:l}=li(t.slice(1),{inlineShortcuts:r,noWrap:!0});return`${t[0]}{${s}}${He(l,e)}`}let i=t.match(/^(sqrt|\\u221A)(.*)/);if(i){let{match:s,rest:l}=li(i[2],{inlineShortcuts:r,noWrap:!0});return`\\\\sqrt{${s!=null?s:\"\\\\placeholder{}\"}}${He(l,e)}`}if(i=t.match(/^(\\\\cbrt|\\u221B)(.*)/),i){let{match:s,rest:l}=li(i[2],{inlineShortcuts:r,noWrap:!0});return`\\\\sqrt[3]{${s!=null?s:\"\\\\placeholder{}\"}}${He(l,e)}`}if(i=t.match(/^abs(.*)/),i){let{match:s,rest:l}=li(i[1],{inlineShortcuts:r,noWrap:!0});return`\\\\left|${s!=null?s:\"\\\\placeholder{}\"}\\\\right|${He(l,e)}`}if(i=t.match(/^[\"”“](.*?)[\"”“](.*)/),i)return`\\\\text{${i[1]}}${He(i[2],e)}`;if(i=t.match(/^([^a-zA-Z0-9\\(\\{\\[\\_\\^\\\\\\s\"]+)(.*)/),i)return`${P0(i[1],r)}${He(i[2],e)}`;if(/^([fgh])[^a-zA-Z]/.test(t)){let{rest:s,match:l}=li(t.slice(1),{inlineShortcuts:r,noWrap:!0}),c=\"\";return t[1]===\"(\"?c=`${t[0]}\\\\left(${l}\\\\right)`:c=t[0]+l,c+He(s,e)}if(i=t.match(/^([a-zA-Z]+)(.*)/),i)return P0(i[1],r)+He(i[2],e);let{match:n,rest:o}=li(t,{inlineShortcuts:r,noWrap:!0});if(n&&o[0]===\"/\"){let s=li(o.slice(1),{inlineShortcuts:r,noWrap:!0});if(s.match)return`\\\\frac{${n}}{${s.match}}${He(s.rest,e)}`}else return t.startsWith(\"(\")?\"\\\\left(\"+n+\"\\\\right)\"+He(o,e):n+He(o,e);return i=t.match(/^(\\s+)(.*)$/),i?\" \"+He(i[2],e):t}var K0={\"[\":\"\\\\lbrack\",\"]\":\"\\\\rbrack\",\"{\":\"\\\\lbrace\",\"}\":\"\\\\rbrace\"};function li(t,e){var a,s;let r=\"\";t=t.trim();let i=t,n=t.charAt(0),o={\"(\":\")\",\"{\":\"}\",\"[\":\"]\"}[n];if(o){let l=1,c=1;for(;c<t.length&&l>0;)t[c]===n&&l++,t[c]===o&&l--,c++;if(l===0){let u=He(t.substring(1,c-1),e);e.noWrap&&n===\"(\"?r=u:r=`\\\\left${(a=K0[n])!=null?a:n}${u}\\\\right${(s=K0[o])!=null?s:o}`,i=t.slice(Math.max(0,c))}else r=t.substring(1,c),i=\"\"}else{let l=t.match(/^([a-zA-Z]+)/);if(l){let c=Yn(null,t,e.inlineShortcuts);if(c)return c=c.replace(\"_{#?}\",\"\"),c=c.replace(\"^{#?}\",\"\"),{match:c,rest:t.slice(c.length)}}if(l=t.match(/^([a-zA-Z])/),l)return{match:l[1],rest:t.slice(1)};if(l=t.match(/^(-)?\\d+(\\.\\d*)?/),l)return{match:l[0],rest:t.slice(l[0].length)};/^\\\\(left|right)/.test(t)||(l=t.match(/^(\\\\[a-zA-Z]+)/),l&&(i=t.slice(l[1].length),r=l[1]))}return{match:r,rest:i}}function P0(t,e){let r=Yn(null,t,e);return r?(r=r.replace(\"_{#?}\",\"\"),r=r.replace(\"^{#?}\",\"\"),r+=\" \"):r=t,r}var Ql=[[\"\\\\[\",\"\\\\]\"],[\"\\\\(\",\"\\\\)\"],[\"$$\",\"$$\"],[\"$\",\"$\"],[\"\\\\begin{math}\",\"\\\\end{math}\"],[\"\\\\begin{displaymath}\",\"\\\\end{displaymath}\"],[\"\\\\begin{equation}\",\"\\\\end{equation}\"],[\"\\\\begin{equation*}\",\"\\\\end{equation*}\"]];function $a(t){let e=t.trim();for(let r of Ql)if(e.startsWith(r[0])&&e.endsWith(r[1]))return[!0,e.substring(r[0].length,e.length-r[1].length)];return[!1,t]}function _f(t){if(t=t.trim(),t.length<=1)return[\"latex\",t];let e;return[e,t]=$a(t),e?[\"latex\",t]:t.startsWith(\"`\")&&t.endsWith(\"`\")?(t=t.substring(1,t.length-1),[\"ascii-math\",t]):t.includes(\"\\\\\")?[\"latex\",t]:/\\$.+\\$/.test(t)?[\"latex\",`\\\\text{${t}}`]:[void 0,t]}var Mf=\"$$\",wf=\"$$\",R0=(t,e,r)=>(Ql.some(i=>e.startsWith(i[0])&&e.endsWith(i[1]))||(e=`${Mf} ${e} ${wf}`),e),Zi=class Zi{constructor(e){Zi._modes[e]=this}static onPaste(e,r,i){var o;if(!r.contentEditable&&r.userSelect===\"none\")return r.model.announce(\"plonk\"),!1;if(typeof i==\"string\"){let a=new DataTransfer;a.setData(\"text/plain\",i),i=a}let n=new ClipboardEvent(\"paste\",{clipboardData:i,cancelable:!0});return(o=r.host)!=null&&o.dispatchEvent(n)?Zi._modes[e].onPaste(r,i):!1}static copyToClipboard(e,r){if(!e.contentEditable&&e.userSelect===\"none\"){e.model.announce(\"plonk\");return}let i=e.model,n=i.selectionIsCollapsed?[0,i.lastOffset]:de(i.selection),o=i.getValue(n,r);navigator.clipboard.writeText(o).then(()=>{},()=>e.model.announce(\"plonk\"))}static onCopy(e,r){var a;if(!r.clipboardData)return;if(!e.contentEditable&&e.userSelect===\"none\"){e.model.announce(\"plonk\");return}let i=e.model,n=i.selectionIsCollapsed?[0,i.lastOffset]:de(i.selection),o=i.getAtoms(n);if(o.every(s=>s.mode===\"text\"||!s.mode))r.clipboardData.setData(\"text/plain\",o.filter(s=>s instanceof qe).map(s=>s.value).join(\"\"));else if(o.every(s=>s.mode===\"latex\"))r.clipboardData.setData(\"text/plain\",i.getAtoms(n,{includeChildren:!0}).map(s=>{var l;return(l=s.value)!=null?l:\"\"}).join(\"\"));else{let s;o.length===1&&o[0].verbatimLatex!==void 0?s=o[0].verbatimLatex:s=i.getValue(n,\"latex-expanded\"),r.clipboardData.setData(\"application/x-latex\",s);try{r.clipboardData.setData(\"text/plain\",e.options.onExport(e,s,n))}catch(l){}if(o.length===1){let l=o[0];(l.type===\"root\"||l.type===\"group\")&&(o=l.body.filter(c=>c.type!==\"first\"))}try{r.clipboardData.setData(\"application/json+mathlive\",JSON.stringify(o.map(l=>l.toJson())))}catch(l){}if((a=window[Symbol.for(\"io.cortexjs.compute-engine\")])!=null&&a.ComputeEngine){let l=globalThis.MathfieldElement.computeEngine;if(l)try{let c=l.jsonSerializationOptions;l.jsonSerializationOptions={metadata:[\"latex\"]};let u=l.parse(i.getValue(n,\"latex-unstyled\"));l.jsonSerializationOptions=c;let m=JSON.stringify(u.json);m&&r.clipboardData.setData(\"application/json\",m)}catch(c){}}}r.preventDefault()}static insert(e,r,i={}){var o;let n=i.mode===\"auto\"?e.mode:(o=i.mode)!=null?o:e.mode;return Zi._modes[n].insert(e,r,i)}onPaste(e,r){return!1}insert(e,r,i){return!1}};Zi._modes={};var q=Zi;var I0=[{key:\"left\",command:\"moveToPreviousChar\"},{key:\"right\",command:\"moveToNextChar\"},{key:\"up\",command:\"moveUp\"},{key:\"down\",command:\"moveDown\"},{key:\"shift+[ArrowLeft]\",command:\"extendSelectionBackward\"},{key:\"shift+[ArrowRight]\",command:\"extendSelectionForward\"},{key:\"shift+[ArrowUp]\",command:\"extendSelectionUpward\"},{key:\"shift+[ArrowDown]\",command:\"extendSelectionDownward\"},{key:\"[Backspace]\",command:\"deleteBackward\"},{key:\"[Delete]\",command:\"deleteForward\"},{key:\"shift+[Backspace]\",command:\"deleteForward\"},{key:\"alt+[Backspace]\",command:\"deletePreviousWord\"},{key:\"alt+[Delete]\",command:\"deleteNextWord\"},{key:\"ctrl+[Backspace]\",command:\"deleteToGroupStart\"},{key:\"ctrl+[Delete]\",command:\"deleteToGroupEnd\"},{key:\"ctrl+shift+[Backspace]\",command:\"deleteToGroupEnd\"},{key:\"alt+[ArrowLeft]\",command:\"moveToPreviousWord\"},{key:\"alt+[ArrowRight]\",command:\"moveToNextWord\"},{key:\"shift+alt+[ArrowLeft]\",command:\"extendToPreviousWord\"},{key:\"shift+alt+[ArrowRight]\",command:\"extendToNextWord\"},{key:\"ctrl+[ArrowLeft]\",command:\"moveToGroupStart\"},{key:\"ctrl+[ArrowRight]\",command:\"moveToGroupEnd\"},{key:\"shift+ctrl+[ArrowLeft]\",command:\"extendToGroupStart\"},{key:\"shift+ctrl+[ArrowRight]\",command:\"extendToGroupEnd\"},{key:\"[Home]\",command:\"moveToMathfieldStart\"},{key:\"cmd+[ArrowLeft]\",command:\"moveToMathfieldStart\"},{key:\"shift+[Home]\",command:\"extendToMathFieldStart\"},{key:\"shift+cmd+[ArrowLeft]\",command:\"extendToMathFieldStart\"},{key:\"[End]\",command:\"moveToMathfieldEnd\"},{key:\"cmd+[ArrowRight]\",command:\"moveToMathfieldEnd\"},{key:\"shift+[End]\",command:\"extendToMathFieldEnd\"},{key:\"shift+cmd+[ArrowRight]\",command:\"extendToMathFieldEnd\"},{key:\"[Pageup]\",command:\"moveToGroupStart\"},{key:\"[Pagedown]\",command:\"moveToGroupEnd\"},{key:\"[Tab]\",command:\"moveToNextGroup\"},{key:\"shift+[Tab]\",command:\"moveToPreviousGroup\"},{key:\"[Escape]\",ifMode:\"math\",command:[\"switchMode\",\"latex\"]},{key:\"[Escape]\",ifMode:\"text\",command:[\"switchMode\",\"latex\"]},{key:\"[Escape]\",ifMode:\"latex\",command:[\"complete\",\"complete\",{selectItem:\"true\"}]},{key:\"\\\\\",ifMode:\"math\",command:[\"switchMode\",\"latex\",\"\",\"\\\\\"]},{key:\"[IntlBackslash]\",ifMode:\"math\",command:[\"switchMode\",\"latex\",\"\",\"\\\\\"]},{key:\"[Tab]\",ifMode:\"latex\",command:[\"complete\",\"accept-suggestion\"]},{key:\"[Return]\",ifMode:\"latex\",command:[\"complete\",\"accept-all\"]},{key:\"[Enter]\",ifMode:\"latex\",command:[\"complete\",\"accept-all\"]},{key:\"shift+[Escape]\",ifMode:\"latex\",command:[\"complete\",\"reject\"]},{key:\"[ArrowDown]\",ifMode:\"latex\",command:\"nextSuggestion\"},{key:\"[ArrowUp]\",ifMode:\"latex\",command:\"previousSuggestion\"},{key:\"ctrl+a\",ifPlatform:\"!macos\",command:\"selectAll\"},{key:\"cmd+a\",command:\"selectAll\"},{key:\"[Cut]\",command:\"cutToClipboard\"},{key:\"[Copy]\",command:\"copyToClipboard\"},{key:\"[Paste]\",command:\"pasteFromClipboard\"},{key:\"[Clear]\",command:\"deleteBackward\"},{key:\"[Undo]\",command:\"undo\"},{key:\"[Redo]\",command:\"redo\"},{key:\"[EraseEof]\",command:\"deleteToGroupEnd\"},{key:\"ctrl+x\",ifPlatform:\"ios\",command:\"cutToClipboard\"},{key:\"cmd+x\",ifPlatform:\"ios\",command:\"cutToClipboard\"},{key:\"ctrl+c\",ifPlatform:\"ios\",command:\"copyToClipboard\"},{key:\"cmd+c\",ifPlatform:\"ios\",command:\"copyToClipboard\"},{key:\"ctrl+v\",ifPlatform:\"ios\",command:\"pasteFromClipboard\"},{key:\"cmd+v\",ifPlatform:\"ios\",command:\"pasteFromClipboard\"},{key:\"ctrl+z\",ifPlatform:\"!macos\",command:\"undo\"},{key:\"cmd+z\",command:\"undo\"},{key:\"ctrl+y\",ifPlatform:\"!macos\",command:\"redo\"},{key:\"shift+cmd+y\",command:\"redo\"},{key:\"shift+ctrl+z\",ifPlatform:\"!macos\",command:\"redo\"},{key:\"shift+cmd+z\",command:\"redo\"},{key:\"ctrl+b\",ifPlatform:\"macos\",command:\"moveToPreviousChar\"},{key:\"ctrl+f\",ifPlatform:\"macos\",command:\"moveToNextChar\"},{key:\"ctrl+p\",ifPlatform:\"macos\",command:\"moveUp\"},{key:\"ctrl+n\",ifPlatform:\"macos\",command:\"moveDown\"},{key:\"ctrl+a\",ifPlatform:\"macos\",command:\"moveToMathfieldStart\"},{key:\"ctrl+e\",ifPlatform:\"macos\",command:\"moveToMathfieldEnd\"},{key:\"shift+ctrl+b\",ifPlatform:\"macos\",command:\"extendSelectionBackward\"},{key:\"shift+ctrl+f\",ifPlatform:\"macos\",command:\"extendSelectionForward\"},{key:\"shift+ctrl+p\",ifPlatform:\"macos\",command:\"extendSelectionUpward\"},{key:\"shift+ctrl+n\",ifPlatform:\"macos\",command:\"extendSelectionDownward\"},{key:\"shift+ctrl+a\",ifPlatform:\"macos\",command:\"extendToMathFieldStart\"},{key:\"shift+ctrl+e\",ifPlatform:\"macos\",command:\"extendToMathFieldEnd\"},{key:\"alt+ctrl+b\",ifPlatform:\"macos\",command:\"moveToPreviousWord\"},{key:\"alt+ctrl+f\",ifPlatform:\"macos\",command:\"moveToNextWord\"},{key:\"shift+alt+ctrl+b\",ifPlatform:\"macos\",command:\"extendToPreviousWord\"},{key:\"shift+alt+ctrl+f\",ifPlatform:\"macos\",command:\"extendToNextWord\"},{key:\"ctrl+h\",ifPlatform:\"macos\",command:\"deleteBackward\"},{key:\"ctrl+d\",ifPlatform:\"macos\",command:\"deleteForward\"},{key:\"ctrl+l\",ifPlatform:\"macos\",command:\"scrollIntoView\"},{key:\"ctrl+[Digit2]\",ifMode:\"math\",command:[\"insert\",\"\\\\sqrt{#0}\"]},{key:\"ctrl+[Digit5]\",ifMode:\"math\",command:\"moveToOpposite\"},{key:\"ctrl+[Digit6]\",ifMode:\"math\",command:\"moveToSuperscript\"},{key:\"ctrl+[Return]\",ifMode:\"math\",command:\"addRowAfter\"},{key:\"ctrl+[Enter]\",ifMode:\"math\",command:\"addRowAfter\"},{key:\"cmd+[Return]\",ifMode:\"math\",command:\"addRowAfter\"},{key:\"cmd+[Enter]\",ifMode:\"math\",command:\"addRowAfter\"},{key:\"alt+p\",ifMode:\"math\",command:[\"insert\",\"\\\\pi\"]},{key:\"alt+v\",ifMode:\"math\",command:[\"insert\",\"\\\\sqrt{#0}\"]},{key:\"alt+shift+v\",ifMode:\"math\",command:[\"insert\",\"\\\\sqrt[#0]{#1}\"]},{key:\"alt+o\",ifMode:\"math\",command:[\"insert\",\"\\\\emptyset\"]},{key:\"alt+d\",ifMode:\"math\",command:[\"insert\",\"\\\\differentialD\"]},{key:\"shift+alt+o\",ifMode:\"math\",command:[\"insert\",\"\\\\varnothing\"]},{key:\"shift+alt+d\",ifMode:\"math\",command:[\"insert\",\"\\\\partial\"]},{key:\"alt+[Backslash]\",ifMode:\"math\",command:[\"insert\",\"\\\\backslash\"]},{key:\"[NumpadDivide]\",ifMode:\"math\",command:[\"insert\",\"\\\\frac{#@}{#?}\"]},{key:\"alt+[NumpadDivide]\",ifMode:\"math\",command:[\"insert\",\"\\\\frac{#?}{#@}\"]},{key:\"shift+alt+k\",command:\"toggleKeystrokeCaption\"},{key:\"alt+[Space]\",command:\"toggleContextMenu\"},{key:\"alt+shift+[Space]\",command:\"toggleVirtualKeyboard\"},{key:\"alt+ctrl+[ArrowUp]\",command:[\"speak\",\"all\",{withHighlighting:!1}]},{key:\"alt+ctrl+[ArrowDown]\",command:[\"speak\",\"selection\",{withHighlighting:!1}]},{key:\"shift+[Quote]\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:[\"switchMode\",\"text\",\"\",\"\"]},{key:\"shift+[Quote]\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"text\",command:[\"switchMode\",\"math\",\"\",\"\"]},{key:\"shift+alt+[KeyT]\",ifMode:\"math\",command:[\"switchMode\",\"text\"]},{key:\"shift+alt+[KeyT]\",ifMode:\"text\",command:[\"switchMode\",\"math\"]},{key:\"/\",ifMode:\"math\",command:[\"insert\",\"\\\\frac{#@}{#?}\"]},{key:\"alt+/\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:[\"insert\",\"/\"]},{key:\"alt+shift+/\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:[\"insert\",\"/\"]},{key:\"alt+[BracketLeft]\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:[\"insert\",\"\\\\left\\\\lbrack #0 \\\\right\\\\rbrack\"]},{key:\"ctrl+[Minus]\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:\"moveToSubscript\"},{key:\"shift+alt+[BracketLeft]\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:[\"insert\",\"\\\\left\\\\lbrace #0 \\\\right\\\\rbrace\"]},{key:\"ctrl+;\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:\"addRowAfter\"},{key:\"cmd+;\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:\"addRowAfter\"},{key:\"shift+ctrl+;\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:\"addRowBefore\"},{key:\"shift+cmd+;\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:\"addRowBefore\"},{key:\"alt+[Tab]\",ifMode:\"math\",command:\"addColumnAfter\"},{key:\"shift+alt+[Tab]\",ifMode:\"math\",command:\"addColumnBefore\"},{key:\"alt+[Enter]\",ifMode:\"math\",command:\"addRowAfter\"},{key:\"shift+alt+[Enter]\",ifMode:\"math\",command:\"addRowBefore\"},{key:\"alt+[Return]\",ifMode:\"math\",command:\"addRowAfter\"},{key:\"shift+alt+[Return]\",ifMode:\"math\",command:\"addRowBefore\"},{key:\"shift+[Backspace]\",ifMode:\"math\",command:\"removeColumn\"},{key:\"shift+[Delete]\",ifMode:\"math\",command:\"removeRow\"},{key:\"shift+alt+[Backspace]\",ifMode:\"math\",command:\"removeRow\"},{key:\"alt+[Digit5]\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:[\"insert\",\"$\\\\infty\"]},{key:\"alt+[Digit9]\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:[\"insert\",\"(\"]},{key:\"alt+[Digit0]\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:[\"insert\",\")\"]},{key:\"alt+|\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:[\"insert\",\"|\"]},{key:\"shift+[Backquote]\",ifLayout:[\"apple.en-intl\",\"windows.en-intl\",\"linux.en\"],ifMode:\"math\",command:[\"insert\",\"\\\\~\"]},{key:\"[Backquote]\",ifLayout:[\"windows.french\",\"linux.french\"],ifMode:\"math\",command:[\"insert\",\"^2\"]},{key:\"[Backquote]\",ifLayout:[\"windows.german\",\"linux.german\"],ifMode:\"math\",command:[\"insert\",\"^\"]},{key:\"[IntlBackslash]\",ifLayout:[\"apple.german\"],ifMode:\"math\",command:[\"insert\",\"^\"]}],z0={\"\\\\sqrt\":[\"alt+v\",\"ctrl+[Digit2]\"],\"\\\\pi\":\"alt+p\",\"\\\\infty\":\"alt+[Digit5]\",\"\\\\differentialD\":\"alt+d\",\"\\\\partial\":\"shift+alt+d\",\"\\\\frac\":\"Slash\",\"\\\\emptyset\":\"alt+o\",\"\\\\varnothing\":\"shift+alt+o\",\"\\\\~\":\"~\"};function it(t){var e;return((e=t.element)==null?void 0:e.mathfield)===t}function Sf(t){var e,r;return(r=(e=t.querySelector(\".ML__caret\"))!=null?e:t.querySelector(\".ML__text-caret\"))!=null?r:t.querySelector(\".ML__latex-caret\")}function Yi(t){let e=Sf(t);if(!e)return null;let r=e.getBoundingClientRect();return{x:r.right,y:r.bottom,height:r.height}}function kf(t){var r;if(!t.parent)return\"root\";let e=(r=t.parent.id)!=null?r:\"\";return e+=typeof t.parentBranch==\"string\"?\"-\"+t.parentBranch:`-${t.parentBranch[0]}/${t.parentBranch[0]}`,e}function tc(t,e,r){if(!e)return null;let i=t.field.getBoundingClientRect(),n=e.right-e.left,o=e.bottom-e.top,a=Math.ceil(e.left-i.left+t.field.scrollLeft*r),s=Math.ceil(e.top-i.top);return{left:a,right:a+n,top:s,bottom:s+o}}function ec(t){let e=t,r=e.getBoundingClientRect();for(;r.bottom===r.top&&e.parentElement instanceof Element&&(e=e.parentElement,r=e.getBoundingClientRect(),r.bottom===r.top););let i=getComputedStyle(e),n=parseInt(i.marginRight),o=r.right-r.left,a=r.bottom-r.top;if(o===0||!Number.isFinite(o)){let l=parseFloat(i.width);Number.isFinite(l)&&l>0?o=l:e instanceof HTMLElement&&e.offsetWidth>0&&(o=e.offsetWidth)}if(a===0||!Number.isFinite(a)){let l=parseFloat(i.height);Number.isFinite(l)&&l>0?a=l:e instanceof HTMLElement&&e.offsetHeight>0&&(a=e.offsetHeight)}let s={top:r.top-1,bottom:r.top-1+a,left:r.left,right:r.left+o-1+n};if(t.children.length===0||t.tagName.toUpperCase()===\"SVG\")return s;for(let l of t.children)if(l.nodeType===1&&\"atomId\"in l.dataset&&!l.classList.contains(\"ML__pstrut\")){let c=ec(l);s.left=Math.min(s.left,c.left),s.right=Math.max(s.right,c.right),s.top=Math.min(s.top,c.top),s.bottom=Math.max(s.bottom,c.bottom)}return s}function nr(t,e){var o,a;if(!e.id)return null;let r=(a=(o=t.atomBoundsCache)==null?void 0:o.get(e.id))!=null?a:null;if(r!==null)return r;let i=t.field.querySelectorAll(`[data-atom-id=\"${e.id}\"]`),n=Array.from(i);if(e.type===\"prompt\"){for(let s of n)if(s.classList.contains(\"ML__prompt-atom\")){let l=s.querySelector(\".ML__prompt\");if(l){let c=ec(l);r?(r.left=Math.min(r.left,c.left),r.right=Math.max(r.right,c.right),r.top=Math.min(r.top,c.top),r.bottom=Math.max(r.bottom,c.bottom)):r=c}}}for(let s of n){let l=ec(s);r?(r.left=Math.min(r.left,l.left),r.right=Math.max(r.right,l.right),r.top=Math.min(r.top,l.top),r.bottom=Math.max(r.bottom,l.bottom)):r=l}return t.atomBoundsCache&&(r?t.atomBoundsCache.set(e.id,r):t.atomBoundsCache.delete(e.id)),r!=null?r:null}function N0(t,e){let[r,i]=e,n=null;for(let o=r;o<=i;o++){let a=nr(t,t.model.at(o));a&&(n?(n.top=Math.min(n.top,a.top),n.bottom=Math.max(n.bottom,a.bottom),n.left=Math.min(n.left,a.left),n.right=Math.max(n.right,a.right)):n=a)}return n!=null?n:{top:0,bottom:0,left:0,right:0}}function Lf(t,e,r){let i=new Map,n=t.field,o=n.offsetWidth,s=Math.floor(n.getBoundingClientRect().width)/o;s=isNaN(s)?1:s;for(let l of t.model.getAtoms(e,{includeChildren:!0})){if(r!=null&&r.excludeAtomsWithBackground&&l.style.backgroundColor)continue;let c=tc(t,nr(t,l),s);if(c){let u=kf(l);if(i.has(u)){let m=i.get(u);i.set(u,{left:Math.min(m.left,c.left),right:Math.max(m.right,c.right),top:Math.min(m.top,c.top),bottom:Math.max(m.bottom,c.bottom)})}else i.set(u,c)}}return[...i.values()]}function Va(t,e){return t.model.selection.ranges.reduce((r,i)=>r.concat(...Lf(t,i,e)),[])}function Qi(t,e){return t===\"*\"||e===\"none\"?!0:e===\"same-origin\"?!window.origin||t===window.origin:typeof e==\"function\"?e(t):!1}function rc(t){let e=0,r=0,i=t.offsetWidth,n=t.offsetHeight;for(;t instanceof HTMLElement;)e+=t.offsetTop,r+=t.offsetLeft,t=t.offsetParent;return new DOMRect(r,e,i,n)}function qa(t,e){if(!t)return;let r=t.model.at(e);if(!r)return;let i={},n=nr(t,r);n&&(i.bounds=new DOMRect(n.left,n.top,n.right-n.left,n.bottom-n.top)),i.depth=r.treeDepth-2,i.style=r.style;let o=r;for(;o;){if(o.command===\"\\\\htmlData\"&&o.args&&typeof o.args[0]==\"string\"){let a=o.args[0].split(\",\");for(let s of a){let l=s.match(/([^=]+)=(.+$)/);if(l){let c=l[1].trim().replace(/ /g,\"-\");c&&(i.data||(i.data={}),i.data[c]=l[2])}else{let c=s.trim().replace(/ /g,\"-\");c&&(i.data||(i.data={}),i.data[c]=void 0)}}}(o.command===\"\\\\htmlId\"||o.command===\"\\\\cssId\")&&!i.id&&o.args&&typeof o.args[0]==\"string\"&&(i.id=o.args[0]),o=o.parent}return(r.mode===\"math\"||r.mode===\"text\")&&(i.latex=y.serialize([r],{defaultMode:\"math\"})),i}function F0(t,e){let r=t.model.at(e);for(;r;){if(r.command===\"\\\\href\"){let i=r.args[0];if(typeof i==\"string\")return i}r=r.parent}return\"\"}var $0=`@keyframes ML__caret-blink {\n  0%,\n  100% {\n    opacity: 1;\n  }\n  50% {\n    opacity: 0;\n  }\n}\n:host {\n  display: block;\n}\n.ML__container {\n  display: inline-flex;\n  flex-flow: row;\n  justify-content: space-between;\n  align-items: flex-end;\n  min-height: 39px;\n  /* Need some room for the virtual keyboard toggle */\n  width: 100%;\n  padding: 4px;\n  box-sizing: border-box;\n  /* This attribute is necessary to work around a Firefox issue where\n  where clicking multiple times on the border leads to a focused mathfield that cannot be edited until focus is lost and regained (also fixes the multiple cursor issue on firefox that can occur with the same sequence of events).\n  */\n  pointer-events: auto;\n  /* Prevent the browser from trying to interpret touch gestures in the field */\n  /* \"Disabling double-tap to zoom removes the need for browsers to\n        delay the generation of click events when the user taps the screen.\" */\n  touch-action: none;\n  --_caret-color: var(--caret-color, hsl(var(--_hue), 40%, 49%));\n  --_selection-color: var(--selection-color, #000);\n  --_selection-background-color: var(--selection-background-color, hsl(var(--_hue), 70%, 85%));\n  --_text-highlight-background-color: var(--highlight-text, hsla(var(--_hue), 40%, 50%, 0.1));\n  --_contains-highlight-background-color: var(--contains-highlight-background-color, hsl(var(--_hue), 40%, 95%));\n  --_smart-fence-color: var(--smart-fence-color, currentColor);\n  --_smart-fence-opacity: var(--smart-fence-opacity, 0.5);\n  --_contains-highlight-color: var(--contains-highlight-color, var(--_caret-color));\n  --_latex-color: var(--latex-color, hsl(var(--_hue), 80%, 40%));\n  --_correct-color: var(--correct-color, #10a000);\n  --_incorrect-color: var(--incorrect-color, #a01b00);\n  --_composition-background-color: var(--composition-background-color, #fff1c2);\n  --_composition-text-color: var(--composition-text-color, black);\n  --_composition-underline-color: var(--composition-underline-color, transparent);\n  --_tooltip-border: var(--tooltip-border, 1px solid transparent);\n  --_tooltip-border-radius: var(--tooltip-border-radius, 8px);\n  --_tooltip-background-color: var(--tooltip-background-color, #616161);\n  --_tooltip-color: var(--tooltip-color, #fff);\n  --_tooltip-box-shadow: var(--tooltip-box-shadow, 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2));\n}\n@media (prefers-color-scheme: dark) {\n  .ML__container {\n    --_contains-highlight-color: var(--contains-highlight-color, hsl(var(--_hue), 85%, 75%));\n    --_caret-color: var(--caret-color, hsl(var(--_hue), 65%, 55%));\n    --_selection-color: var(--selection-color, #fff);\n    --_selection-background-color: var(--selection-background-color, hsl(var(--_hue), 65%, 55%));\n    --_text-highlight-background-color: var(--text-highlight-background-color, hsla(var(--_hue), 40%, 50%, 0.6));\n    --_contains-highlight-background-color: var(--contains-highlight-background-color, hsl(var(--_hue), 5%, 34%));\n    --_latex-color: var(--primary, hsl(var(--_hue), 40%, 50%));\n    --_composition-background-color: #69571c;\n    --_composition-text-color: white;\n    --_placeholder-color: hsl(var(--_hue), 60%, 69%);\n    --_smart-fence-color: var(--smart-fence-color, #fff);\n    --_smart-fence-opacity: var(--smart-fence-opacity, 0.7);\n  }\n}\n@media (forced-colors: active) {\n  .ML__container {\n    --_caret-color: white;\n    --_selection-color: white;\n    --_smart-fence-color: white;\n    --_latex-color: white;\n    --_correct-color: white;\n    --_incorrect-color: white;\n    --_composition-text-color: white;\n  }\n}\n@media (hover: none) and (pointer: coarse) {\n  :host(:not(:focus)) .ML__container {\n    pointer-events: none;\n  }\n}\n/* This is the actual field content (formula) */\n.ML__content {\n  display: flex;\n  align-items: center;\n  align-self: center;\n  position: relative;\n  overflow: hidden;\n  padding: 2px 3px 2px 1px;\n  width: 100%;\n  /* Encourage the browser to use the GPU to render the field.\n     Weirdly, this is required for prompts to be rendered correctly. \n   */\n  isolation: isolate;\n  text-shadow: var(--text-shadow);\n}\n.ML__content .ML__latex {\n  text-shadow: var(--text-shadow);\n}\n.ML__content .ML__sqrt-line {\n  box-shadow: var(--text-shadow);\n}\n.ML__content .ML__frac-line {\n  box-shadow: var(--text-shadow);\n}\n/* Container for the virtual keyboard toggle and menu toggle buttons */\n.ML__toggles {\n  display: flex;\n  flex-direction: row;\n  align-items: flex-start;\n  gap: 0;\n  align-self: flex-start;\n}\n/* Vertical layout modifier */\n.ML__toggles--vertical {\n  flex-direction: column;\n  align-items: center;\n  gap: 4px;\n}\n.ML__toggles--vertical .ML__virtual-keyboard-toggle,\n.ML__toggles--vertical .ML__menu-toggle {\n  margin-right: 0;\n}\n.ML__virtual-keyboard-toggle,\n.ML__menu-toggle {\n  box-sizing: border-box;\n  display: flex;\n  align-self: center;\n  align-items: center;\n  flex-shrink: 0;\n  flex-direction: column;\n  justify-content: center;\n  width: 34px;\n  height: 34px;\n  padding: 0;\n  margin-right: 4px;\n  cursor: pointer;\n  /* Avoid some weird blinking with :hover */\n  border-radius: 8px;\n  border: 1px solid transparent;\n  transition: background 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);\n  color: hsl(var(--_hue), 40%, 50%);\n  fill: currentColor;\n  background: transparent;\n}\n.ML__virtual-keyboard-toggle:hover,\n.ML__menu-toggle:hover {\n  background: hsla(0, 0%, 70%, 0.3);\n  color: #333;\n  fill: currentColor;\n}\n.ML__virtual-keyboard-toggle > span,\n.ML__menu-toggle > span {\n  display: flex;\n  align-self: center;\n  align-items: center;\n}\n@media (pointer: coarse) {\n  .ML__virtual-keyboard-toggle,\n  .ML__menu-toggle {\n    min-width: 60px;\n    min-height: 60px;\n  }\n}\n/* The invisible element used to capture keyboard events. We're just trying\n really hard to make sure it doesn't show. */\n.ML__keyboard-sink {\n  display: inline-block;\n  resize: none;\n  outline: none;\n  border: none;\n  pointer-events: none;\n  /* Need these for Microsoft Edge */\n  position: fixed;\n  clip: rect(0 0 0 0);\n  /* Need this to prevent iOS Safari from auto-zooming */\n  font-size: 1em;\n  font-family: KaTeX_Main;\n  line-height: 0.5;\n  /* On Chromium, if this is 0, no keyboard events are received */\n  /* Preferred over clip */\n  clip-path: inset(50%);\n}\n[part='placeholder'] {\n  color: var(--neutral-400);\n}\n.ML__composition {\n  background: var(--_composition-background-color);\n  color: var(--_composition-text-color);\n  text-decoration: underline var(--_composition-underline-color);\n}\n.ML__caret {\n  display: inline-block;\n}\n.ML__caret::after {\n  content: '';\n  visibility: hidden;\n  width: 0;\n  display: inline-block;\n  height: 0.76em;\n  --_caret-width: clamp(2px, 0.08em, 10px);\n  border: none;\n  border-radius: calc(var(--_caret-width) / 2);\n  border-right: var(--_caret-width) solid var(--_caret-color);\n  margin-right: calc(-1 * var(--_caret-width));\n  position: relative;\n  left: -0.045em;\n  bottom: -0.05em;\n  animation: ML__caret-blink 1.05s step-end forwards infinite;\n}\n.ML__text-caret::after {\n  content: '';\n  visibility: hidden;\n  width: 0;\n  display: inline-block;\n  height: 0.76em;\n  --_caret-width: clamp(2px, 0.08em, 10px);\n  border: none;\n  border-radius: calc(var(--_caret-width) / 2);\n  border-right: var(--_caret-width) solid var(--_caret-color);\n  margin-right: calc(-1 * var(--_caret-width));\n  position: relative;\n  left: -0.045em;\n  bottom: -0.05em;\n  animation: ML__caret-blink 1.05s step-end forwards infinite;\n}\n.ML__latex-caret::after {\n  content: '';\n  visibility: hidden;\n  --_caret-width: clamp(2px, 0.08em, 10px);\n  border: none;\n  border-radius: calc(var(--_caret-width) / 2);\n  border-right: var(--_caret-width) solid var(--_latex-color);\n  margin-right: calc(-1 * var(--_caret-width));\n  position: relative;\n  left: -0.019em;\n  animation: ML__caret-blink 1.05s step-end forwards infinite;\n}\n.ML__focused .ML__latex-caret::after,\n.ML__focused .ML__text-caret::after,\n.ML__focused .ML__caret::after {\n  visibility: visible;\n}\n.ML__focused .ML__text {\n  background: var(--_text-highlight-background-color);\n}\n/* When using smartFence, the anticipated closing fence is displayed\nwith this style */\n.ML__smart-fence__close {\n  opacity: var(--_smart-fence-opacity);\n  color: var(--_smart-fence-color);\n}\n.ML__focused .ML__selected,\n.ML__focused .ML__selected .ML__contains-caret,\n.ML__focused .ML__selected .ML__smart-fence__close,\n.ML__focused .ML__selected .ML__placeholder {\n  color: var(--_selection-color);\n  opacity: 1;\n}\n.ML__empty-line-anchor::after {\n  content: '';\n  position: absolute;\n  left: 0;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 8px;\n  height: 20px;\n  border-radius: 2px;\n  background: transparent;\n  opacity: 0;\n  pointer-events: none;\n}\n.ML__focused .ML__empty-line-anchor.ML__selected::after {\n  background: var(--_selection-background-color);\n  opacity: 1;\n}\n.ML__selection {\n  box-sizing: border-box;\n  background: transparent;\n}\n:host(:focus) .ML__selection {\n  background: var(--_selection-background-color) !important;\n}\n.ML__contains-caret.ML__close,\n.ML__contains-caret.ML__open,\n.ML__contains-caret > .ML__close,\n.ML__contains-caret > .ML__open,\n.ML__contains-caret .ML__sqrt-sign,\n.ML__contains-caret .ML__sqrt-line {\n  color: var(--_contains-highlight-color);\n}\n.ML__contains-highlight {\n  box-sizing: border-box;\n  background: transparent;\n}\n.ML__focused .ML__contains-highlight {\n  background: var(--_contains-highlight-background-color);\n}\n.ML__raw-latex {\n  font-family: 'Berkeley Mono', 'IBM Plex Mono', 'Source Code Pro', Consolas, 'Roboto Mono', Menlo, 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', Monaco, Courier, monospace;\n  font-weight: 400;\n  font-size: 0.8em;\n  letter-spacing: -0.05em;\n  color: var(--_latex-color);\n}\n.ML__suggestion {\n  color: var(--neutral-500);\n}\n.ML__virtual-keyboard-toggle.is-visible.is-pressed:hover {\n  background: hsl(var(--_hue), 25%, 35%);\n  color: #fafafa;\n  fill: currentColor;\n}\n.ML__virtual-keyboard-toggle.is-pressed,\n.ML__virtual-keyboard-toggle.is-active:hover,\n.ML__virtual-keyboard-toggle.is-active {\n  background: hsl(var(--_hue), 25%, 35%);\n  color: #fafafa;\n  fill: currentColor;\n}\n/* Add an attribute 'data-tooltip' to automatically show a\n   tooltip over a element on hover.\n*/\n[data-tooltip] {\n  position: relative;\n}\n[data-tooltip]::after {\n  content: attr(data-tooltip);\n  position: absolute;\n  display: block;\n  z-index: 2;\n  pointer-events: none;\n  right: auto;\n  top: calc(-100% - 4px);\n  width: max-content;\n  max-width: 200px;\n  padding: 8px 8px;\n  border-radius: 4px;\n  background: #616161;\n  color: #fff;\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n  text-align: center;\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n  font-style: normal;\n  font-weight: 400;\n  font-size: 13px;\n  /* Phone */\n  opacity: 0;\n  transform: scale(0.5);\n}\n@media only screen and (max-width: 767px) {\n  [data-tooltip]::after {\n    padding: 8px 16px;\n    font-size: 16px;\n  }\n}\nmenu [data-tooltip]::after {\n  left: 100%;\n  top: 0%;\n}\nmenu .ML__base {\n  cursor: default;\n}\n/** Don't display if we're tracking, i.e. have the pointer down */\n.tracking [data-tooltip]:hover::after {\n  /* Use visibility, not display. Display will remove the after from the DOM, and the override below will not work */\n  visibility: hidden;\n}\n/** But do display if tracking and inside a menu */\n.tracking menu li[data-tooltip]:hover::after,\n[data-tooltip]:hover::after {\n  visibility: visible;\n  opacity: 1;\n  transform: scale(1);\n  transition-property: opacity, scale;\n  transition-duration: 0.15s;\n  transition-delay: 1s;\n  transition-timing-function: cubic-bezier(0.4, 0, 1, 1);\n}\n.ML__prompt {\n  border-radius: 2px;\n}\n.ML__editablePromptBox {\n  outline: 1px solid #acacac;\n  border-radius: 2px;\n  z-index: -1;\n}\n.ML__focused .ML__focusedPromptBox {\n  outline: highlight auto 1px;\n}\n.ML__lockedPromptBox {\n  background-color: rgba(142, 142, 141, 0.4);\n  z-index: -1;\n}\n.ML__correctPromptBox {\n  outline: 1px solid var(--_correct-color);\n  box-shadow: 0 0 5px var(--_correct-color);\n}\n.ML__incorrectPromptBox {\n  outline: 1px solid var(--_incorrect-color);\n  box-shadow: 0 0 5px var(--_incorrect-color);\n}\n.variant-submenu {\n  display: flex;\n  flex-direction: column;\n  padding: 8px;\n}\n.variant-submenu [part='menu-item'].ML__xl {\n  font-size: 2rem;\n  text-align: center;\n  margin: 0;\n}\n.ML__center-menu .label {\n  text-align: center;\n}\n.insert-matrix-submenu {\n  /* Grid doesn't work on Safari */\n  --_menu-item-size: 25px;\n  width: calc(5 * var(--_menu-item-size));\n  display: flex;\n  flex-wrap: wrap;\n  padding: 8px;\n  align-content: center;\n  justify-content: center;\n}\n.insert-matrix-submenu [part='menu-item'] {\n  width: var(--_menu-item-size);\n  height: var(--_menu-item-size);\n  font-size: 21px;\n  border: none;\n  border-radius: 0;\n  line-height: 21px;\n  text-align: center;\n  padding: 0;\n  margin: 0;\n}\n.border-submenu [part='menu-item'] {\n  font-size: 2rem;\n  line-height: 1.2;\n  text-align: center;\n}\n.swatches-submenu {\n  --_swatch-size: 2rem;\n  --_columns: 4;\n  display: flex;\n  flex-flow: wrap;\n  padding: 8px;\n  max-width: calc(var(--_columns) * (var(--_swatch-size) + 18px) + 16px);\n  box-sizing: border-box;\n}\n.menu-swatch {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  box-sizing: border-box;\n  width: fit-content;\n  height: fit-content;\n  margin: 2px;\n  padding: 0;\n  background: var(--neutral-200);\n}\n.menu-swatch > .label {\n  padding: 0;\n  margin: 0;\n  line-height: 0;\n}\n.menu-swatch > .label > span {\n  display: inline-block;\n  margin: 6px;\n  min-width: var(--_swatch-size);\n  min-height: var(--_swatch-size);\n  border-radius: 50%;\n}\n.menu-swatch.active {\n  background: var(--neutral-100);\n  scale: 1.4;\n}\n.menu-swatch.active > .label > span {\n  border-radius: 2px;\n}\n.menu-swatch .ui-checkmark,\n.menu-swatch .ui-mixedmark {\n  position: absolute;\n  margin: 0;\n  padding: 0;\n  color: white;\n}\n.menu-swatch.dark-contrast .ui-checkmark,\n.menu-swatch.dark-contrast .ui-mixedmark {\n  color: #000;\n}\n.ML__insert-template {\n  font-size: 1em;\n}\n.ML__insert-label {\n  opacity: 0.5;\n  margin-left: 2ex;\n}\n`;var V0=`.ML__container {\n  min-height: auto !important;\n  --_hue: var(--hue, 212);\n  --_placeholder-color: var(--placeholder-color, hsl(var(--_hue), 40%, 49%));\n  --_placeholder-opacity: var(--placeholder-opacity, 0.4);\n  --_text-font-family: var(--text-font-family, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif);\n}\n.ML__sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  clip-path: inset(50%);\n  white-space: nowrap;\n  border: 0;\n}\n.ML__is-inline {\n  display: inline-block;\n}\n.ML__base {\n  visibility: inherit;\n  display: inline-block;\n  position: relative;\n  cursor: text;\n  padding: 0;\n  margin: 0;\n  box-sizing: content-box;\n  border: 0;\n  outline: 0;\n  vertical-align: baseline;\n  font-weight: inherit;\n  font-family: inherit;\n  font-style: inherit;\n  text-decoration: none;\n  width: min-content;\n}\n.ML__strut,\n.ML__strut--bottom {\n  display: inline-block;\n  min-height: 0.5em;\n}\n.ML__small-delim {\n  font-family: KaTeX_Main;\n}\n/* Text mode */\n.ML__text {\n  font-family: var(--_text-font-family);\n  white-space: pre;\n}\n/* Use cmr for 'math upright' */\n.ML__cmr {\n  font-family: KaTeX_Main;\n  font-style: normal;\n}\n.ML__mathit {\n  font-family: KaTeX_Math;\n  /* The KaTeX_Math font is italic by default, so the font-style below is only \n     useful when a fallback font is used\n  */\n  font-style: italic;\n}\n.ML__mathbf {\n  font-family: KaTeX_Main;\n  font-weight: bold;\n}\n/* Lowercase greek symbols should stick to math font when \\\\mathbf is applied \n   to match TeX idiosyncratic behavior */\n.lcGreek.ML__mathbf {\n  font-family: KaTeX_Math;\n}\n.ML__mathbfit {\n  font-family: KaTeX_Math;\n  font-weight: bold;\n  font-style: italic;\n}\n.ML__ams {\n  font-family: KaTeX_AMS;\n}\n/* Blackboard */\n.ML__bb {\n  font-family: KaTeX_AMS;\n}\n.ML__cal {\n  font-family: KaTeX_Caligraphic;\n}\n.ML__frak {\n  font-family: KaTeX_Fraktur;\n}\n.ML__tt {\n  font-family: KaTeX_Typewriter;\n}\n.ML__script {\n  font-family: KaTeX_Script;\n}\n.ML__sans {\n  font-family: KaTeX_SansSerif;\n}\n.ML__series_ul {\n  font-weight: 100;\n}\n.ML__series_el {\n  font-weight: 100;\n}\n.ML__series_l {\n  font-weight: 200;\n}\n.ML__series_sl {\n  font-weight: 300;\n}\n.ML__series_sb {\n  font-weight: 500;\n}\n.ML__bold {\n  font-weight: 700;\n}\n.ML__series_eb {\n  font-weight: 800;\n}\n.ML__series_ub {\n  font-weight: 900;\n}\n.ML__series_uc {\n  font-stretch: ultra-condensed;\n}\n.ML__series_ec {\n  font-stretch: extra-condensed;\n}\n.ML__series_c {\n  font-stretch: condensed;\n}\n.ML__series_sc {\n  font-stretch: semi-condensed;\n}\n.ML__series_sx {\n  font-stretch: semi-expanded;\n}\n.ML__series_x {\n  font-stretch: expanded;\n}\n.ML__series_ex {\n  font-stretch: extra-expanded;\n}\n.ML__series_ux {\n  font-stretch: ultra-expanded;\n}\n.ML__it {\n  font-style: italic;\n}\n.ML__shape_ol {\n  -webkit-text-stroke: 1px black;\n  text-stroke: 1px black;\n  color: transparent;\n}\n.ML__shape_sc {\n  font-variant: small-caps;\n}\n.ML__shape_sl {\n  font-style: oblique;\n}\n/* First level emphasis */\n.ML__emph {\n  color: #bc2612;\n}\n/* Second level emphasis */\n.ML__emph .ML__emph {\n  color: #0c7f99;\n}\n.ML__highlight {\n  color: #007cb2;\n  background: #edd1b0;\n}\n.ML__center {\n  text-align: center;\n}\n.ML__left {\n  text-align: left;\n}\n.ML__right {\n  text-align: right;\n}\n.ML__label_padding {\n  padding: 0 0.5em;\n}\n.ML__frac-line {\n  width: 100%;\n  min-height: 1px;\n}\n.ML__frac-line:after {\n  content: '';\n  display: block;\n  margin-top: max(-1px, -0.04em);\n  min-height: max(1px, 0.04em);\n  /* Ensure the line is visible when printing even if \"turn off background images\" is on*/\n  -webkit-print-color-adjust: exact;\n  print-color-adjust: exact;\n  /* There's a bug since Chrome 62 where \n      sub-pixel border lines don't draw at some zoom \n      levels (110%, 90%). \n      Setting the min-height used to work around it, but that workaround\n      broke in Chrome 84 or so.\n      Setting the background (and the min-height) seems to work for now.\n      */\n  background: currentColor;\n  box-sizing: content-box;\n  /* Vuetify sets the box-sizing to inherit \n            causes the fraction line to not draw at all sizes (see #26) */\n  /* On some versions of Firefox on Windows, the line fails to \n            draw at some zoom levels, but setting the transform triggers\n            the hardware accelerated path, which works */\n  transform: translate(0, 0);\n  forced-color-adjust: preserve-parent-color;\n}\n@media (forced-colors: active) {\n  .ML__frac-line {\n    min-height: 0px;\n  }\n}\n.ML__sqrt {\n  display: inline-block;\n}\n.ML__sqrt-sign {\n  display: inline-block;\n  position: relative;\n}\n.ML__sqrt-line {\n  display: inline-block;\n  height: max(1px, 0.04em);\n  width: 100%;\n}\n.ML__sqrt-line:before {\n  content: '';\n  display: block;\n  margin-top: min(-1px, -0.04em);\n  min-height: max(1px, 0.04em);\n  /* Ensure the line is visible when printing even if \"turn off background images\" is on*/\n  -webkit-print-color-adjust: exact;\n  print-color-adjust: exact;\n  background: currentColor;\n  /* On some versions of Firefox on Windows, the line fails to \n            draw at some zoom levels, but setting the transform triggers\n            the hardware accelerated path, which works */\n  transform: translate(0, 0);\n  forced-color-adjust: preserve-parent-color;\n}\n@media (forced-colors: active) {\n  .ML__sqrt-line:after {\n    background: white !important;\n  }\n}\n.ML__sqrt-line:after {\n  border-bottom-width: 1px;\n  content: ' ';\n  display: block;\n  margin-top: -0.1em;\n}\n.ML__sqrt-index {\n  margin-left: 0.27777778em;\n  margin-right: -0.55555556em;\n}\n.ML__delim-size1 {\n  font-family: KaTeX_Size1;\n}\n.ML__delim-size2 {\n  font-family: KaTeX_Size2;\n}\n.ML__delim-size3 {\n  font-family: KaTeX_Size3;\n}\n.ML__delim-size4 {\n  font-family: KaTeX_Size4;\n}\n.ML__delim-mult .delim-size1 > span {\n  font-family: KaTeX_Size1;\n}\n.ML__delim-mult .delim-size4 > span {\n  font-family: KaTeX_Size4;\n}\n.ML__accent-body {\n  font-family: KaTeX_Main;\n}\n.ML__accent-combining-char {\n  position: relative;\n  left: 0.24em;\n}\n/** The markup for a LaTeX formula, either in an editable mathfield or \n    in a static display.\n*/\n.ML__latex {\n  display: inline-block;\n  direction: ltr;\n  text-align: left;\n  text-indent: 0;\n  text-rendering: auto;\n  font-family: inherit;\n  font-style: normal;\n  font-size-adjust: none;\n  font-stretch: normal;\n  font-variant-caps: normal;\n  letter-spacing: normal;\n  line-height: 1.2;\n  word-wrap: normal;\n  word-spacing: normal;\n  white-space: nowrap;\n  text-shadow: none;\n  -webkit-user-select: none;\n  user-select: none;\n  width: min-content;\n  forced-color-adjust: preserve-parent-color;\n}\n.ML__latex .style-wrap {\n  position: relative;\n}\n.ML__latex .ML__mfrac {\n  display: inline-block;\n}\n.ML__latex .ML__left-right {\n  display: inline-block;\n}\n.ML__latex .ML__vlist-t {\n  display: inline-table;\n  table-layout: fixed;\n  border-collapse: collapse;\n}\n.ML__latex .ML__vlist-r {\n  display: table-row;\n}\n.ML__latex .ML__vlist {\n  display: table-cell;\n  vertical-align: bottom;\n  position: relative;\n}\n.ML__latex .ML__vlist > span {\n  display: block;\n  height: 0;\n  position: relative;\n}\n.ML__latex .ML__vlist > span > span {\n  display: inline-block;\n}\n.ML__latex .ML__vlist > span > .ML__pstrut {\n  overflow: hidden;\n  width: 0;\n}\n.ML__latex .ML__vlist-t2 {\n  margin-right: -2px;\n}\n.ML__latex .ML__vlist-s {\n  display: table-cell;\n  vertical-align: bottom;\n  font-size: 1px;\n  width: 2px;\n  min-width: 2px;\n}\n.ML__latex .ML__msubsup {\n  text-align: left;\n}\n.ML__latex .ML__negativethinspace {\n  display: inline-block;\n  margin-left: -0.16667em;\n  height: 0.71em;\n}\n.ML__latex .ML__thinspace {\n  display: inline-block;\n  width: 0.16667em;\n  height: 0.71em;\n}\n.ML__latex .ML__mediumspace {\n  display: inline-block;\n  width: 0.22222em;\n  height: 0.71em;\n}\n.ML__latex .ML__thickspace {\n  display: inline-block;\n  width: 0.27778em;\n  height: 0.71em;\n}\n.ML__latex .ML__enspace {\n  display: inline-block;\n  width: 0.5em;\n  height: 0.71em;\n}\n.ML__latex .ML__quad {\n  display: inline-block;\n  width: 1em;\n  height: 0.71em;\n}\n.ML__latex .ML__qquad {\n  display: inline-block;\n  width: 2em;\n  height: 0.71em;\n}\n.ML__latex .ML__llap,\n.ML__latex .ML__rlap {\n  width: 0;\n  position: relative;\n  display: inline-block;\n}\n.ML__latex .ML__llap > .ML__inner,\n.ML__latex .ML__rlap > .ML__inner {\n  position: absolute;\n}\n.ML__latex .ML__llap > .ML__fix,\n.ML__latex .ML__rlap > .ML__fix {\n  display: inline-block;\n}\n.ML__latex .ML__llap > .ML__inner {\n  right: 0;\n}\n.ML__latex .ML__rlap > .ML__inner {\n  left: 0;\n}\n.ML__latex .ML__rule {\n  display: inline-block;\n  border: solid 0;\n  position: relative;\n  box-sizing: border-box;\n}\n.ML__latex .overline .overline-line,\n.ML__latex .underline .underline-line {\n  width: 100%;\n}\n.ML__latex .overline .overline-line:before,\n.ML__latex .underline .underline-line:before {\n  content: '';\n  border-bottom-style: solid;\n  border-bottom-width: max(1px, 0.04em);\n  -webkit-print-color-adjust: exact;\n  print-color-adjust: exact;\n  display: block;\n}\n.ML__latex .overline .overline-line:after,\n.ML__latex .underline .underline-line:after {\n  border-bottom-style: solid;\n  border-bottom-width: max(1px, 0.04em);\n  -webkit-print-color-adjust: exact;\n  print-color-adjust: exact;\n  content: '';\n  display: block;\n  margin-top: -1px;\n}\n.ML__latex .ML__stretchy {\n  display: block;\n  position: absolute;\n  width: 100%;\n  left: 0;\n  overflow: hidden;\n}\n.ML__latex .ML__stretchy:before,\n.ML__latex .ML__stretchy:after {\n  content: '';\n}\n.ML__latex .ML__stretchy svg {\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: inherit;\n  fill: currentColor;\n  stroke: currentColor;\n  fill-rule: nonzero;\n  fill-opacity: 1;\n  stroke-width: 1;\n  stroke-linecap: butt;\n  stroke-linejoin: miter;\n  stroke-miterlimit: 4;\n  stroke-dasharray: none;\n  stroke-dashoffset: 0;\n  stroke-opacity: 1;\n}\n.ML__latex .slice-1-of-2 {\n  display: inline-flex;\n  position: absolute;\n  left: 0;\n  width: 50.2%;\n  overflow: hidden;\n}\n.ML__latex .slice-2-of-2 {\n  display: inline-flex;\n  position: absolute;\n  right: 0;\n  width: 50.2%;\n  overflow: hidden;\n}\n.ML__latex .slice-1-of-3 {\n  display: inline-flex;\n  position: absolute;\n  left: 0;\n  width: 25.1%;\n  overflow: hidden;\n}\n.ML__latex .slice-2-of-3 {\n  display: inline-flex;\n  position: absolute;\n  left: 25%;\n  width: 50%;\n  overflow: hidden;\n}\n.ML__latex .slice-3-of-3 {\n  display: inline-flex;\n  position: absolute;\n  right: 0;\n  width: 25.1%;\n  overflow: hidden;\n}\n.ML__latex .slice-1-of-1 {\n  display: inline-flex;\n  position: absolute;\n  width: 100%;\n  left: 0;\n  overflow: hidden;\n}\n.ML__latex .ML__nulldelimiter {\n  display: inline-block;\n}\n.ML__latex .ML__op-group {\n  display: inline-block;\n}\n.ML__latex .ML__op-symbol {\n  position: relative;\n}\n.ML__latex .ML__op-symbol.ML__small-op {\n  font-family: KaTeX_Size1;\n}\n.ML__latex .ML__op-symbol.ML__large-op {\n  font-family: KaTeX_Size2;\n}\n.ML__latex:has(.ML__center_environment),\n.ML__latex:has(.ML__multiline_environment),\n.ML__latex:has(.ML__align_environment),\n.ML__latex:has(.ML__eqnarray_environment),\n.ML__latex:has(.ML__gather_environment) {\n  width: 100%;\n}\n.ML__latex .ML__multiline_environment {\n  display: inline-flex;\n  width: 100%;\n}\n.ML__latex .ML__center_environment {\n  display: inline-flex;\n  width: 100%;\n  justify-content: center;\n}\n.ML__latex .ML__align_environment,\n.ML__latex .ML__eqnarray_environment,\n.ML__latex .ML__gather_environment {\n  display: inline-block;\n}\n.ML__latex .ML__mtable .ML__vertical-separator {\n  display: inline-block;\n  min-width: 1px;\n  box-sizing: border-box;\n}\n.ML__latex .ML__mtable .ML__arraycolsep {\n  display: inline-block;\n}\n.ML__latex .ML__mtable .col-align-m > .ML__vlist-t {\n  text-align: center;\n}\n.ML__latex .ML__mtable .col-align-c > .ML__vlist-t {\n  text-align: center;\n}\n.ML__latex .ML__mtable .col-align-l > .ML__vlist-t {\n  text-align: left;\n}\n.ML__latex .ML__mtable .col-align-r > .ML__vlist-t {\n  text-align: right;\n}\n[data-href] {\n  cursor: pointer;\n}\n.ML__error {\n  display: inline-block;\n  background-image: radial-gradient(ellipse at center, hsl(341, 100%, 40%), rgba(0, 0, 0, 0) 70%);\n  background-color: hsla(341, 100%, 40%, 0.1);\n  background-repeat: repeat-x;\n  background-size: 3px 3px;\n  padding-bottom: 3px;\n  background-position: 0 100%;\n}\n.ML__error > .ML__error {\n  background: transparent;\n  padding: 0;\n}\n.ML__placeholder {\n  color: var(--_placeholder-color);\n  opacity: var(--_placeholder-opacity);\n  padding-left: 0.4ex;\n  padding-right: 0.4ex;\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n}\n.ML__notation {\n  position: absolute;\n  box-sizing: border-box;\n  line-height: 0;\n}\n/* This class is used to implement the \\`\\\\mathtip\\` and \\`\\\\texttip\\` commands\n   For UI elements, see \\`[data-ML__tooltip]\\`\n*/\n.ML__tooltip-container {\n  position: relative;\n  transform: scale(0);\n}\n.ML__tooltip-container .ML__tooltip-content {\n  position: fixed;\n  display: inline-table;\n  visibility: hidden;\n  z-index: 2;\n  width: max-content;\n  max-width: 400px;\n  padding: 12px 12px;\n  border: var(--_tooltip-border);\n  border-radius: var(--_tooltip-border-radius);\n  background: var(--_tooltip-background-color);\n  --_selection-color: var(--_tooltip-color);\n  color: var(--_tooltip-color);\n  box-shadow: var(--_tooltip-box-shadow);\n  opacity: 0;\n  transition: opacity 0.15s cubic-bezier(0.4, 0, 1, 1);\n}\n.ML__tooltip-container .ML__tooltip-content .ML__text {\n  white-space: normal;\n}\n.ML__tooltip-container .ML__tooltip-content .ML__base {\n  display: contents;\n}\n.ML__tooltip-container:hover .ML__tooltip-content {\n  visibility: visible;\n  opacity: 1;\n  font-size: 0.75em;\n  transform: scale(1) translate(0, 3em);\n}\n.ML__bg {\n  background-color: transparent !important;\n}\n.ML__bg::before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background-color: var(--bg-color);\n  z-index: -1;\n  box-sizing: border-box;\n}\n`;var q0=`#mathlive-environment-popover.is-visible {\n  visibility: visible;\n}\n#mathlive-environment-popover {\n  --_environment-panel-height: var(--environment-panel-height, 70px);\n  --_accent-color: var(--accent-color, #aaa);\n  --_background: var(--environment-panel-background, #fff);\n  --_button-background: var(--environment-panel-button-background, white);\n  --_button-background-hover: var(--environment-panel-button-background-hover, #f5f5f7);\n  --_button-background-active: var(--environment-panel-button-background-active, #f5f5f7);\n  --_button-text: var(--environment-panel-button-text, #e3e4e8);\n  position: absolute;\n  width: calc(var(--_environment-panel-height) * 2);\n  height: var(--_environment-panel-height);\n  border-radius: 4px;\n  border: 1.5px solid var(--_accent-color);\n  background-color: var(--_background);\n  box-shadow: 0 0 30px 0 var(--environment-shadow, rgba(0, 0, 0, 0.4));\n  pointer-events: all;\n  visibility: hidden;\n}\n#mathlive-environment-popover .MLEP__array-buttons {\n  height: calc(var(--_environment-panel-height) * 5/4);\n  width: calc(var(--_environment-panel-height) * 5/4);\n  margin-left: calc(0px - var(--_environment-panel-height) * 0.16);\n  margin-top: calc(0px - var(--_environment-panel-height) * 0.19);\n}\n#mathlive-environment-popover .MLEP__array-buttons .font {\n  fill: white;\n}\n#mathlive-environment-popover .MLEP__array-buttons circle {\n  fill: #7f7f7f;\n  transition: fill 300ms;\n}\n#mathlive-environment-popover .MLEP__array-buttons .MLEP__array-insert-background {\n  fill-opacity: 1;\n  fill: var(--_background);\n  stroke: var(--_accent-color);\n  stroke-width: 3px;\n}\n#mathlive-environment-popover .MLEP__array-buttons line {\n  stroke: var(--_accent-color);\n  stroke-opacity: 0;\n  stroke-width: 40;\n  pointer-events: none;\n  transition: stroke-opacity 300ms;\n  stroke-linecap: round;\n}\n#mathlive-environment-popover .MLEP__array-buttons g[data-command]:hover circle {\n  fill: var(--_accent-color);\n}\n#mathlive-environment-popover .MLEP__array-buttons g[data-command]:hover line {\n  stroke-opacity: 1;\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls {\n  height: 100%;\n  width: 50%;\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options {\n  width: var(--_environment-panel-height);\n  height: var(--_environment-panel-height);\n  display: flex;\n  flex-wrap: wrap;\n  flex-direction: row;\n  justify-content: space-around;\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg {\n  pointer-events: all;\n  margin-top: 2px;\n  width: calc(var(--_environment-panel-height) / 3 * 28 / 24);\n  height: calc(var(--_environment-panel-height) / 3 - 2px);\n  border-radius: calc(var(--_environment-panel-height) / 25);\n  background-color: var(--_button-background);\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg:hover {\n  background-color: var(--_button-background-hover);\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg path,\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg line {\n  stroke: var(--_button-text);\n  stroke-width: 2;\n  stroke-linecap: round;\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg rect,\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg path {\n  fill-opacity: 0;\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg.active {\n  pointer-events: none;\n  background-color: var(--_button-background-active);\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg.active path,\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg.active line {\n  stroke: var(--_accent-color);\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg.active circle {\n  fill: var(--_accent-color);\n}\n`;var H0=`/* The element that display info while in latex mode */\n#mathlive-suggestion-popover {\n  --_suggestion-zindex: var(--suggestion-zindex, 100);\n  background-color: rgba(97, 97, 97);\n  color: #fff;\n  text-align: center;\n  border-radius: 8px;\n  position: fixed;\n  z-index: var(--_suggestion-zindex);\n  display: none;\n  flex-direction: column;\n  justify-content: center;\n  box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);\n}\n#mathlive-suggestion-popover.top-tip::after {\n  content: '';\n  position: absolute;\n  top: -15px;\n  left: calc(50% - 15px);\n  width: 0;\n  height: 0;\n  border-left: 15px solid transparent;\n  border-right: 15px solid transparent;\n  border-bottom: 15px solid rgba(97, 97, 97);\n  font-size: 1rem;\n}\n#mathlive-suggestion-popover.bottom-tip::after {\n  content: '';\n  position: absolute;\n  bottom: -15px;\n  left: calc(50% - 15px);\n  width: 0;\n  height: 0;\n  border-left: 15px solid transparent;\n  border-right: 15px solid transparent;\n  border-top: 15px solid rgba(97, 97, 97);\n  font-size: 1rem;\n}\n#mathlive-suggestion-popover.is-animated {\n  transition: all 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);\n  animation: ML__fade-in cubic-bezier(0, 0, 0.2, 1) 0.15s;\n}\n#mathlive-suggestion-popover.is-visible {\n  display: flex;\n}\n@keyframes ML__fade-in {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n/* The wrapper class for the entire content of the popover panel */\n#mathlive-suggestion-popover ul {\n  display: flex;\n  flex-flow: column;\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  align-items: flex-start;\n  max-height: 400px;\n  overflow-y: auto;\n}\n#mathlive-suggestion-popover li {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  margin: 8px;\n  padding: 8px;\n  width: calc(100% - 16px - 16px);\n  column-gap: 1em;\n  border-radius: 8px;\n  cursor: pointer;\n  /* Since the content can be clicked on, provide feedback on hover */\n}\n#mathlive-suggestion-popover li a {\n  color: #5ea6fd;\n  padding-top: 0.3em;\n  margin-top: 0.4em;\n  display: block;\n}\n#mathlive-suggestion-popover li a:hover {\n  color: #5ea6fd;\n  text-decoration: underline;\n}\n#mathlive-suggestion-popover li:hover,\n#mathlive-suggestion-popover li.is-pressed,\n#mathlive-suggestion-popover li.is-active {\n  background: rgba(255, 255, 255, 0.1);\n}\n/* The command inside a popover (inside a #mathlive-suggestion-popover) */\n.ML__popover__command {\n  font-size: 1.6rem;\n  font-family: KaTeX_Main;\n}\n.ML__popover__current {\n  background: #5ea6fd;\n  color: #fff;\n}\n.ML__popover__latex {\n  font-family: 'IBM Plex Mono', 'Source Code Pro', Consolas, 'Roboto Mono', Menlo, 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', Monaco, Courier, monospace;\n  align-self: center;\n}\n/* The keyboard shortcuts for a symbol as displayed in the popover */\n.ML__popover__keybinding {\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n  font-size: 0.8em;\n  opacity: 0.7;\n}\n/* Style for the character that joins the modifiers of a keyboard shortcut \n(usually a \"+\" sign)*/\n.ML__shortcut-join {\n  opacity: 0.5;\n}\n`;var W0=`/* The element that displays the keys as the user type them */\n#mathlive-keystroke-caption-panel {\n  visibility: hidden;\n  /*min-width: 160px;*/\n  /*background-color: rgba(97, 97, 200, .95);*/\n  background: var(--secondary, hsl(var(--_hue), 19%, 26%));\n  border-color: var(--secondary-border, hsl(0, 0%, 91%));\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n  text-align: center;\n  border-radius: 6px;\n  padding: 16px;\n  position: absolute;\n  z-index: 1;\n  display: flex;\n  flex-direction: row-reverse;\n  justify-content: center;\n  --keystroke: white;\n  --on-keystroke: #555;\n  --keystroke-border: #f7f7f7;\n}\n@media (prefers-color-scheme: dark) {\n  body:not([theme='light']) #mathlive-keystroke-caption-panel {\n    --keystroke: hsl(var(--_hue), 50%, 30%);\n    --on-keystroke: hsl(0, 0%, 98%);\n    --keystroke-border: hsl(var(--_hue), 50%, 25%);\n  }\n}\nbody[theme='dark'] #mathlive-keystroke-caption-panel {\n  --keystroke: hsl(var(--_hue), 50%, 30%);\n  --on-keystroke: hsl(0, 0%, 98%);\n  --keystroke-border: hsl(var(--_hue), 50%, 25%);\n}\n#mathlive-keystroke-caption-panel > span {\n  min-width: 14px;\n  /*height: 8px;*/\n  margin: 0 8px 0 0;\n  padding: 4px;\n  background-color: var(--keystroke);\n  color: var(--on-keystroke);\n  fill: currentColor;\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n  font-size: 1em;\n  border-radius: 6px;\n  border: 2px solid var(--keystroke-border);\n  /*box-shadow: 0 7px 14px rgba(0,0,0,0.25), 0 5px 5px rgba(0,0,0,0.22);*/\n}\n`;var U0=`.ML__keyboard {\n  --_keyboard-height: 0;\n  --_keyboard-zindex: var(--keyboard-zindex, 105);\n  --_accent-color: var(--keyboard-accent-color, #0c75d8);\n  --_background: var(--keyboard-background, #cacfd7);\n  --_border: var(--keyboard-border, #ddd);\n  --_padding-horizontal: var(--keyboard-padding-horizontal, 0px);\n  --_padding-top: var(--keyboard-padding-top, 5px);\n  --_padding-bottom: var(--keyboard-padding-bottom, 0px);\n  --_row-padding-left: var(--keyboard-row-padding-left, 0px);\n  --_row-padding-right: var(--keyboard-row-padding-right, 0px);\n  --_toolbar-text: var(--keyboard-toolbar-text, #2c2e2f);\n  --_toolbar-text-active: var(--keyboard-toolbar-text-active, var(--_accent-color));\n  --_toolbar-background: var(--keyboard-toolbar-background, transparent);\n  --_toolbar-background-hover: var(--keyboard-toolbar-background-hover, #eee);\n  --_toolbar-background-selected: var(--keyboard-toolbar-background-selected, transparent);\n  --_toolbar-font-size: var(--keyboard-toolbar-font-size, '135%');\n  --_horizontal-rule: var(--keyboard-horizontal-rule, 1px solid #fff);\n  --_keycap-background: var(--keycap-background, #f0f0f0);\n  --_keycap-background-hover: var(--keycap-background-hover, #f5f5f7);\n  --_keycap-background-active: var(--keycap-background-active, var(--_accent-color));\n  --_keycap-background-pressed: var(--keycap-background-pressed, var(--_accent-color));\n  --_keycap-border: var(--keycap-border, #e5e6e9);\n  --_keycap-border-bottom: var(--keycap-border-bottom, #8d8f92);\n  --_keycap-text: var(--keycap-text, #000);\n  --_keycap-text-active: var(--keycap-text-active, #fff);\n  --_keycap-text-hover: var(--keycap-text-hover, var(--_keycap-text));\n  --_keycap-text-pressed: var(--keycap-text-pressed, #fff);\n  --_keycap-shift-text: var(--keycap-shift-text, var(--_accent-color));\n  --_keycap-primary-background: var(--keycap-primary-background, var(--_accent-color));\n  --_keycap-primary-text: var(--keycap-primary-text, #ddd);\n  --_keycap-primary-background-hover: var(--keycap-primary-background-hover, #0d80f2);\n  --_keycap-secondary-background: var(--keycap-secondary-background, #a0a9b8);\n  --_keycap-secondary-background-hover: var(--keycap-secondary-background-hover, #7d8795);\n  --_keycap-secondary-text: var(--keycap-secondary-text, #060707);\n  --_keycap-secondary-border: var(--keycap-secondary-border, #c5c9d0);\n  --_keycap-secondary-border-bottom: var(--keycap-secondary-border-bottom, #989da6);\n  --_keycap-height: var(--keycap-height, 60px);\n  /* Keycap width (incl. margin) */\n  --_keycap-max-width: var(--keycap-max-width, 100px);\n  --_keycap-gap: var(--keycap-gap, 8px);\n  --_keycap-font-size: var(--keycap-font-size, clamp(16px, 4cqw, 24px));\n  --_keycap-small-font-size: var(--keycap-small-font-size, calc(var(--keycap-font-size) * 0.8));\n  --_keycap-extra-small-font-size: var(--keycap-extra-small-font-size, calc(var(--keycap-font-size) / 1.42));\n  --_variant-panel-background: var(--variant-panel-background, #f0f0f0);\n  --_variant-keycap-text: var(--variant-keycap-text, var(--_keycap-text));\n  --_variant-keycap-text-active: var(--variant-keycap-text-active, var(--_keycap-text-active));\n  --_variant-keycap-background-active: var(--variant-keycap-background-active, var(--_accent-color));\n  --_variant-keycap-length: var(--variant-keycap-length, 70px);\n  --_variant-keycap-font-size: var(--variant-keycap-font-size, 30px);\n  --_variant-keycap-aside-font-size: var(--variant-keycap-aside-font-size, 12px);\n  --_keycap-shift-font-size: var(--keycap-shift-font-size, 16px);\n  --_keycap-shift-color: var(--keycap-shift-color, var(--_accent-color));\n  --_box-placeholder-color: var(--box-placeholder-color, var(--_accent-color));\n  --_box-placeholder-pressed-color: var(--box-placeholder-pressed-color, var(--keycap-text-pressed));\n  --_keycap-glyph-size: var(--keycap-glyph-size, 20px);\n  --_keycap-glyph-size-lg: var(--keycap-glyph-size-lg, 24px);\n  --_keycap-glyph-size-xl: var(--keycap-glyph-size-xl, 50px);\n}\n.is-math-mode .MLK__rows .if-text-mode,\n.is-text-mode .MLK__rows .if-math-mode {\n  display: none;\n}\n.if-can-undo,\n.if-can-redo,\n.if-can-copy,\n.if-can-cut,\n.if-can-paste {\n  opacity: 0.4;\n  pointer-events: none;\n}\n.can-undo .if-can-undo,\n.can-redo .if-can-redo,\n.can-copy .if-can-copy,\n.can-cut .if-can-cut,\n.can-paste .if-can-paste {\n  opacity: 1;\n  pointer-events: all;\n}\nbody > .ML__keyboard {\n  position: fixed;\n  --_padding-bottom: calc(var(--keyboard-padding-bottom, 0px) + env(safe-area-inset-bottom, 0));\n}\nbody > .ML__keyboard.is-visible > .MLK__backdrop {\n  box-shadow: 0 -5px 6px rgba(0, 0, 0, 0.08);\n  border-top: 1px solid var(--_border);\n}\nbody > .ML__keyboard.backdrop-is-transparent.is-visible > .MLK__backdrop {\n  box-shadow: none;\n  border: none;\n}\nbody > .ML__keyboard.is-visible.animate > .MLK__backdrop {\n  transition: 0.28s cubic-bezier(0, 0, 0.2, 1);\n  transition-property: transform, opacity;\n  transition-timing-function: cubic-bezier(0.4, 0, 1, 1);\n}\n.ML__keyboard {\n  position: relative;\n  overflow: hidden;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  z-index: var(--_keyboard-zindex);\n  box-sizing: border-box;\n  outline: none;\n  border: none;\n  margin: 0;\n  padding: 0;\n  line-height: 1;\n  overflow-wrap: unset;\n  text-align: left;\n  vertical-align: baseline;\n  cursor: auto;\n  white-space: pre;\n  box-shadow: none;\n  opacity: 1;\n  transform: none;\n  pointer-events: none;\n}\n.ML__keyboard :where(div) {\n  box-sizing: border-box;\n  outline: none;\n  border: none;\n  margin: 0;\n  padding: 0;\n  line-height: 1;\n  overflow-wrap: unset;\n  text-align: left;\n  vertical-align: baseline;\n  cursor: auto;\n  white-space: pre;\n  box-shadow: none;\n  transform: none;\n}\n.MLK__backdrop {\n  position: absolute;\n  bottom: calc(-1 * var(--_keyboard-height));\n  width: 100%;\n  height: var(--_keyboard-height);\n  box-sizing: border-box;\n  padding-top: var(--_padding-top);\n  padding-bottom: var(--_padding-bottom);\n  padding-left: var(--_padding-horizontal);\n  padding-right: var(--_padding-horizontal);\n  opacity: 0;\n  visibility: hidden;\n  transform: translate(0, 0);\n  background: var(--_background);\n}\n.backdrop-is-transparent .MLK__backdrop {\n  background: transparent;\n}\n/* If a custom layout has a custom container/backdrop\n  (backdrop-is-transparent), make sure to let pointer event go through. */\n.backdrop-is-transparent .MLK__plate {\n  background: transparent;\n  pointer-events: none;\n}\n/* If a custom layout has a custom container/backdrop, make sure to \n   allow pointer events on it. */\n.backdrop-is-transparent .MLK__layer > div > div {\n  pointer-events: all;\n}\n.ML__keyboard.is-visible > .MLK__backdrop {\n  transform: translate(0, calc(-1 * var(--_keyboard-height)));\n  opacity: 1;\n  visibility: visible;\n}\n.caps-lock-indicator {\n  display: none;\n  width: 8px;\n  height: 8px;\n  background: #0cbc0c;\n  box-shadow: inset 0 0 4px 0 #13ca13, 0 0 4px 0 #a9ef48;\n  border-radius: 8px;\n  right: 8px;\n  top: 8px;\n  position: absolute;\n}\n.ML__keyboard.is-caps-lock .caps-lock-indicator {\n  display: block;\n}\n.ML__keyboard.is-caps-lock .shift {\n  background: var(--_keycap-background-active);\n  color: var(--_keycap-text-active);\n}\n.MLK__plate {\n  position: absolute;\n  top: var(--_padding-top);\n  left: var(--_padding-horizontal);\n  width: calc(100% - 2 * var(--_padding-horizontal));\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n  container-type: inline-size;\n  touch-action: none;\n  -webkit-user-select: none;\n  user-select: none;\n  pointer-events: all;\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n  font-size: 16px;\n  /* Size of toolbar labels */\n  font-weight: 400;\n  text-shadow: none;\n}\n.ML__box-placeholder {\n  color: var(--_box-placeholder-color);\n}\n.MLK__tex {\n  font-family: KaTeX_Main, KaTeX_Math, 'Cambria Math', 'Asana Math', OpenSymbol, Symbola, STIX, Times, serif !important;\n}\n.MLK__tex-math {\n  font-family: KaTeX_Math, KaTeX_Main, 'Cambria Math', 'Asana Math', OpenSymbol, Symbola, STIX, Times, serif !important;\n  font-style: italic;\n}\n.MLK__layer {\n  display: none;\n  outline: none;\n}\n.MLK__layer.is-visible {\n  display: flex;\n  flex-flow: column;\n}\n/* Keyboard layouts are made or rows of keys... */\n.MLK__rows {\n  --_keycap-width: var(--keycap-width, min(var(--_keycap-max-width), 10cqw));\n  display: flex;\n  flex-flow: column;\n  align-items: center;\n  border-collapse: separate;\n  clear: both;\n  border: 0;\n  margin: 0;\n  margin-bottom: var(--_keycap-gap);\n  gap: var(--_keycap-gap);\n  /* If the styling include, e.g., some shadows, they will be\n  cut off by the overflow. In that case, set the padding to \n  compensate. */\n  padding-left: var(--_row-padding-left);\n  padding-right: var(--_row-padding-right);\n  overflow: visible;\n  touch-action: none;\n}\n.MLK__rows > .MLK__row {\n  display: flex;\n  flex-flow: row;\n  justify-content: center;\n  width: 100%;\n  gap: var(--_keycap-gap);\n  margin: 0;\n  padding: 0;\n  /* For the alignment of the text on some modifiers (e.g. shift) */\n  /* Extra spacing between two adjacent keys */\n}\n.MLK__rows > .MLK__row .tex {\n  font-family: KaTeX_Math, KaTeX_Main, 'Cambria Math', 'Asana Math', OpenSymbol, Symbola, STIX, Times, serif !important;\n}\n.MLK__rows > .MLK__row .tex-math {\n  font-family: KaTeX_Math, 'Cambria Math', 'Asana Math', OpenSymbol, Symbola, STIX, Times, serif !important;\n}\n.MLK__rows > .MLK__row .big-op {\n  font-size: calc(1.25 * var(--_keycap-font-size));\n}\n.MLK__rows > .MLK__row .small {\n  font-size: var(--_keycap-small-font-size);\n}\n.MLK__rows > .MLK__row .bottom {\n  justify-content: flex-end;\n}\n.MLK__rows > .MLK__row .left {\n  align-items: flex-start;\n  padding-left: 12px;\n}\n.MLK__rows > .MLK__row .right {\n  align-items: flex-end;\n  padding-right: 12px;\n}\n.MLK__rows > .MLK__row .w0 {\n  width: 0;\n}\n.MLK__rows > .MLK__row .w5 {\n  width: calc(0.5 * var(--_keycap-width) - var(--_keycap-gap));\n}\n.MLK__rows > .MLK__row .w15 {\n  width: calc(1.5 * var(--_keycap-width) - var(--_keycap-gap));\n}\n.MLK__rows > .MLK__row .w20 {\n  width: calc(2 * var(--_keycap-width) - var(--_keycap-gap));\n}\n.MLK__rows > .MLK__row .w40 {\n  width: calc(4 * var(--_keycap-width) - var(--_keycap-gap));\n}\n.MLK__rows > .MLK__row .w50 {\n  width: calc(5 * var(--_keycap-width) - var(--_keycap-gap));\n}\n.MLK__rows > .MLK__row .MLK__keycap.w50 {\n  font-size: 80%;\n  padding-top: 10px;\n  font-weight: 100;\n}\n.MLK__rows > .MLK__row .separator {\n  background: transparent;\n  border: none;\n  pointer-events: none;\n}\n.MLK__rows > .MLK__row .horizontal-rule {\n  height: 6px;\n  margin-top: 3px;\n  margin-bottom: 0;\n  width: 100%;\n  border-radius: 0;\n  border-top: var(--_horizontal-rule);\n}\n.MLK__rows > .MLK__row .ghost {\n  background: var(--_toolbar-background);\n  border: none;\n  color: var(--_toolbar-text);\n}\n.MLK__rows > .MLK__row .ghost:hover {\n  background: var(--_toolbar-background-hover);\n}\n.MLK__rows > .MLK__row .bigfnbutton {\n  font-size: var(--_keycap-extra-small-font-size);\n}\n.MLK__rows > .MLK__row .shift,\n.MLK__rows > .MLK__row .action {\n  color: var(--_keycap-secondary-text);\n  background: var(--_keycap-secondary-background);\n  border-color: var(--_keycap-secondary-border);\n  border-bottom-color: var(--_keycap-secondary-border-bottom);\n  line-height: 0.8;\n  font-size: min(1rem, var(--_keycap-small-font-size));\n  font-weight: 600;\n  padding: 8px 12px 8px 12px;\n}\n.MLK__rows > .MLK__row .shift:hover,\n.MLK__rows > .MLK__row .action:hover {\n  background: var(--_keycap-secondary-background-hover);\n}\n.MLK__rows > .MLK__row .action.primary {\n  background: var(--_keycap-primary-background);\n  color: var(--_keycap-primary-text);\n}\n.MLK__rows > .MLK__row .action.primary:hover {\n  background: var(--_keycap-primary-background-hover);\n  color: var(--_keycap-primary-text);\n}\n.MLK__rows > .MLK__row .shift.selected,\n.MLK__rows > .MLK__row .action.selected {\n  color: var(--_toolbar-text-active);\n}\n.MLK__rows > .MLK__row .shift.selected.is-pressed,\n.MLK__rows > .MLK__row .action.selected.is-pressed,\n.MLK__rows > .MLK__row .shift.selected.is-active,\n.MLK__rows > .MLK__row .action.selected.is-active {\n  color: white;\n}\n.MLK__rows > .MLK__row .warning {\n  background: #cd0030;\n  color: white;\n}\n.MLK__rows > .MLK__row .warning svg.svg-glyph {\n  width: var(--_keycap-glyph-size-lg);\n  height: var(--_keycap-glyph-size-lg);\n  min-height: var(--_keycap-glyph-size-lg);\n}\n/** A regular keycap\n * Use the :where() pseudo-class to give it a very low specifity, \n * so that it can be overriden by custom style.\n */\n:where(.MLK__rows > .MLK__row div) {\n  display: flex;\n  flex-flow: column;\n  align-items: center;\n  justify-content: space-evenly;\n  width: calc(var(--_keycap-width) - var(--_keycap-gap));\n  height: var(--_keycap-height);\n  box-sizing: border-box;\n  padding: 0;\n  vertical-align: top;\n  text-align: center;\n  float: left;\n  color: var(--_keycap-text);\n  fill: currentColor;\n  font-size: var(--_keycap-font-size);\n  background: var(--_keycap-background);\n  border: 1px solid var(--_keycap-border);\n  border-bottom-color: var(--_keycap-border-bottom);\n  border-radius: 6px;\n  cursor: pointer;\n  touch-action: none;\n  /* Keys with a variants panel */\n  position: relative;\n  overflow: hidden;\n  -webkit-user-select: none;\n  user-select: none;\n  -webkit-tap-highlight-color: transparent;\n}\n:where(.MLK__rows > .MLK__row div):hover {\n  overflow: visible;\n  background: var(--_keycap-background-hover);\n  color: var(--_keycap-text-hover);\n}\n:where(.MLK__rows > .MLK__row div) .ML__latex {\n  pointer-events: none;\n  touch-action: none;\n}\n:where(.MLK__rows > .MLK__row div) svg.svg-glyph {\n  margin: 8px 0;\n  width: var(--_keycap-glyph-size);\n  height: var(--_keycap-glyph-size);\n  min-height: var(--_keycap-glyph-size);\n}\n:where(.MLK__rows > .MLK__row div) svg.svg-glyph-lg {\n  margin: 8px 0;\n  width: var(--_keycap-glyph-size-lg);\n  height: var(--_keycap-glyph-size-lg);\n  min-height: var(--_keycap-glyph-size-lg);\n}\n:where(.MLK__rows > .MLK__row div).MLK__tex-math {\n  font-size: 25px;\n}\n:where(.MLK__rows > .MLK__row div).is-pressed {\n  background: var(--_keycap-background-pressed);\n  color: var(--_keycap-text-pressed);\n  --_box-placeholder-color: var(--_box-placeholder-pressed-color);\n}\n:where(.MLK__rows > .MLK__row div).MLK__keycap.is-active,\n:where(.MLK__rows > .MLK__row div).action.is-active,\n:where(.MLK__rows > .MLK__row div).MLK__keycap.is-pressed,\n:where(.MLK__rows > .MLK__row div).action.is-pressed {\n  z-index: calc(var(--_keyboard-zindex) - 5);\n}\n:where(.MLK__rows > .MLK__row div).MLK__keycap.is-active aside,\n:where(.MLK__rows > .MLK__row div).action.is-active aside,\n:where(.MLK__rows > .MLK__row div).MLK__keycap.is-pressed aside,\n:where(.MLK__rows > .MLK__row div).action.is-pressed aside {\n  display: none;\n}\n:where(.MLK__rows > .MLK__row div).MLK__keycap.is-active .MLK__shift,\n:where(.MLK__rows > .MLK__row div).action.is-active .MLK__shift,\n:where(.MLK__rows > .MLK__row div).MLK__keycap.is-pressed .MLK__shift,\n:where(.MLK__rows > .MLK__row div).action.is-pressed .MLK__shift {\n  display: none;\n}\n:where(.MLK__rows > .MLK__row div).shift.is-pressed,\n:where(.MLK__rows > .MLK__row div).MLK__keycap.is-pressed,\n:where(.MLK__rows > .MLK__row div).action.is-pressed {\n  background: var(--_keycap-background-pressed);\n  color: var(--_keycap-text-pressed);\n}\n:where(.MLK__rows > .MLK__row div).shift.is-active,\n:where(.MLK__rows > .MLK__row div).MLK__keycap.is-active,\n:where(.MLK__rows > .MLK__row div).action.is-active {\n  background: var(--_keycap-background-active);\n  color: var(--_keycap-text-active);\n  --_box-placeholder-color: var(--_box-placeholder-pressed-color);\n}\n:where(.MLK__rows > .MLK__row div) small {\n  color: var(--_keycap-secondary-text);\n}\n:where(.MLK__rows > .MLK__row div) aside {\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n  font-size: 10px;\n  line-height: 10px;\n  color: var(--_keycap-secondary-text);\n}\n/* Add an attribute 'data-tooltip' to display a tooltip on hover.\nNote there are a different set of tooltip rules for the keyboard toggle\n(it's in a different CSS tree) */\n.ML__keyboard [data-tooltip] {\n  position: relative;\n}\n.ML__keyboard [data-tooltip]::after {\n  position: absolute;\n  display: inline-table;\n  content: attr(data-tooltip);\n  top: inherit;\n  bottom: 100%;\n  width: max-content;\n  max-width: 200px;\n  padding: 8px 8px;\n  background: #616161;\n  color: #fff;\n  text-align: center;\n  z-index: 2;\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n  border-radius: 2px;\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n  font-weight: 400;\n  font-size: 12px;\n  transition: all 0.15s cubic-bezier(0.4, 0, 1, 1) 1s;\n  opacity: 0;\n  transform: scale(0.5);\n}\n.ML__keyboard [data-tooltip]:hover {\n  position: relative;\n}\n.ML__keyboard [data-tooltip]:hover::after {\n  opacity: 1;\n  transform: scale(1);\n}\n.MLK__toolbar {\n  align-self: center;\n  display: flex;\n  flex-flow: row;\n  justify-content: space-between;\n  width: 100%;\n  max-width: 996px;\n  min-height: 32px;\n  /* Icons for undo/redo, etc. */\n}\n.MLK__toolbar svg {\n  height: 20px;\n  width: 20px;\n}\n.MLK__toolbar > .left {\n  position: relative;\n  display: flex;\n  justify-content: flex-start;\n  flex-flow: row;\n}\n.MLK__toolbar > .right {\n  display: flex;\n  justify-content: flex-end;\n  flex-flow: row;\n}\n.MLK__toolbar > div > div {\n  /* \"button\" in the toolbar */\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: var(--_toolbar-text);\n  fill: currentColor;\n  background: var(--_toolbar-background);\n  font-size: var(--_toolbar-font-size);\n  padding: 4px 15px;\n  cursor: pointer;\n  width: max-content;\n  min-width: 42px;\n  min-height: 34px;\n  border: none;\n  padding-left: 10px;\n  padding-right: 10px;\n  padding-bottom: 8px;\n  padding-top: 8px;\n  margin-top: 0;\n  margin-bottom: 4px;\n  margin-left: 4px;\n  margin-right: 4px;\n  border-radius: 8px;\n  box-shadow: none;\n  border-bottom: 2px solid transparent;\n}\n.MLK__toolbar > div > div:not(.disabled):not(.selected):hover {\n  background: var(--_toolbar-background-hover);\n}\n.MLK__toolbar > div > div.disabled svg,\n.MLK__toolbar > div > div.disabled:hover svg,\n.MLK__toolbar > div > div.disabled.is-pressed svg {\n  color: var(--_toolbar-text);\n  opacity: 0.2;\n}\n.MLK__toolbar > div > div:hover,\n.MLK__toolbar > div > div:active,\n.MLK__toolbar > div > div.is-pressed,\n.MLK__toolbar > div > div.is-active {\n  color: var(--_toolbar-text-active);\n}\n.MLK__toolbar > div > div.selected {\n  color: var(--_toolbar-text-active);\n  background: var(--_toolbar-background-selected);\n  border-radius: 0;\n  border-bottom-color: var(--_toolbar-text-active);\n  padding-bottom: 4px;\n  margin-bottom: 8px;\n}\n/* This is the element that displays variants on press+hold */\n.MLK__variant-panel {\n  visibility: hidden;\n  position: fixed;\n  display: flex;\n  flex-flow: row wrap-reverse;\n  justify-content: center;\n  align-content: center;\n  margin: 0;\n  padding: 0;\n  bottom: auto;\n  top: 0;\n  box-sizing: content-box;\n  transform: none;\n  z-index: calc(var(--_keyboard-zindex) + 1);\n  touch-action: none;\n  max-width: 350px;\n  background: var(--_variant-panel-background);\n  text-align: center;\n  border-radius: 6px;\n  padding: 6px;\n  box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);\n  transition: none;\n}\n.MLK__variant-panel.is-visible {\n  visibility: visible;\n}\n.MLK__variant-panel.compact {\n  --_variant-keycap-length: var(--variant-keycap-length, 50px);\n  --_variant-keycap-font-size: var(--variant-keycap-font-size, 24px);\n  --_variant-keycap-aside-font-size: var(--variant-keycap-aside-font-size, 10px);\n}\n.MLK__variant-panel .item {\n  display: flex;\n  flex-flow: column;\n  align-items: center;\n  justify-content: center;\n  font-size: var(--_variant-keycap-font-size);\n  height: var(--_variant-keycap-length);\n  width: var(--_variant-keycap-length);\n  margin: 0;\n  box-sizing: border-box;\n  border-radius: 5px;\n  border: 1px solid transparent;\n  background: transparent;\n  pointer-events: all;\n  cursor: pointer;\n  color: var(--_variant-keycap-text);\n  fill: currentColor;\n}\n@media (max-height: 412px) {\n  .MLK__variant-panel .item {\n    --_variant-keycap-font-size: var(--variant-keycap-font-size, 24px);\n    --_variant-keycap-length: var(--variant-keycap-length, 50px);\n  }\n}\n.MLK__variant-panel .item .ML__latex {\n  pointer-events: none;\n}\n.MLK__variant-panel .item:hover {\n  color: var(--_keycap-text-hover);\n}\n.MLK__variant-panel .item.is-active {\n  background: var(--_variant-keycap-background-active);\n  color: var(--_variant-keycap-text-active);\n  --_box-placeholder-color: var(--_box-placeholder-pressed-color);\n}\n.MLK__variant-panel .item.is-pressed {\n  background: var(--_variant-keycap-background-pressed);\n  color: var(--_variant-keycap-text-pressed);\n  --_box-placeholder-color: var(--_box-placeholder-pressed-color);\n}\n.MLK__variant-panel .item.small {\n  font-size: var(--_keycap-small-font-size);\n}\n.MLK__variant-panel .item.swatch-button {\n  box-sizing: border-box;\n  background: #fbfbfb;\n}\n.MLK__variant-panel .item.swatch-button > span {\n  display: inline-block;\n  margin: 6px;\n  width: calc(100% - 12px);\n  height: calc(100% - 12px);\n  border-radius: 50%;\n}\n.MLK__variant-panel .item.swatch-button:hover {\n  background: #f0f0f0;\n}\n.MLK__variant-panel .item.swatch-button:hover > span {\n  border-radius: 2px;\n}\n.MLK__variant-panel .item.box > div,\n.MLK__variant-panel .item.box > span {\n  border: 1px dashed rgba(0, 0, 0, 0.24);\n}\n.MLK__variant-panel .item .warning {\n  min-height: 60px;\n  min-width: 60px;\n  background: #cd0030;\n  color: white;\n  padding: 5px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 5px;\n}\n.MLK__variant-panel .item .warning.is-pressed,\n.MLK__variant-panel .item .warning.is-active {\n  background: red;\n}\n.MLK__variant-panel .item .warning svg.svg-glyph {\n  width: var(--_keycap-glyph-size-xl);\n  height: var(--_keycap-glyph-size-xl);\n}\n.MLK__variant-panel .item aside {\n  font-size: var(--_variant-keycap-aside-font-size);\n  line-height: 12px;\n  opacity: 0.78;\n  padding-top: 2px;\n  width: 100%;\n  text-align: center;\n  text-wrap: wrap;\n}\n.MLK__keycap {\n  position: relative;\n}\n.MLK__shift {\n  display: block;\n  position: absolute;\n  right: 4px;\n  top: 4px;\n  font-size: var(--_keycap-shift-font-size);\n  color: var(--_keycap-shift-color);\n}\n.hide-shift .MLK__shift {\n  display: none;\n}\n@media (max-width: 414px) {\n  .MLK__variant-panel {\n    max-width: 350px;\n    --_variant-keycap-font-size: var(--variant-keycap-font-size, 24px);\n    --_variant-keycap-length: var(--variant-keycap-length, 50px);\n  }\n}\n/* @xs breakpoint: iPhone 5 */\n@container (max-width: 414px) {\n  .MLK__rows {\n    --_keycap-gap: max(var(--_keycap-gap, 2px), 2px);\n    --_keycap-height: var(--keycap-height, 42px);\n    --_keycap-width: var(--keycap-width, min(min(var(--_keycap-max-width)), 10cqw), 62px));\n  }\n  .MLK__toolbar > div > div {\n    font-size: 100%;\n    margin-left: 2px;\n    margin-right: 2px;\n  }\n  .MLK__rows .shift,\n  .MLK__rows .action {\n    font-size: 65%;\n  }\n  .MLK__rows .warning svg.svg-glyph {\n    width: 14px;\n    height: 14px;\n    min-height: 14px;\n  }\n}\n@container (max-width: 744px) {\n  .MLK__rows {\n    --_keycap-gap: max(var(--keycap-gap, 2px), 2px);\n    --_keycap-height: var(--keycap-height, 52px);\n    --_keycap-width: var(--keycap-width, min(min(var(--_keycap-max-width), 10cqw), 62px));\n  }\n  .MLK__toolbar > div > div {\n    padding-left: 0;\n    padding-right: 0;\n  }\n  .MLK__tooltip::after {\n    padding: 8px 16px;\n    font-size: 16px;\n  }\n  .MLK__rows > .MLK__row > div.fnbutton {\n    font-size: 16px;\n  }\n  .MLK__rows > .MLK__row > div.bigfnbutton {\n    font-size: calc(var(--_keycap-extra-small-font-size) / 1.55);\n  }\n  .MLK__rows > .MLK__row > div.small {\n    font-size: 13px;\n  }\n  .MLK__rows > .MLK__row > div > aside {\n    display: none;\n  }\n  .MLK__shift {\n    display: none;\n  }\n}\n/* Medium breakpoint: larger phones */\n@container (max-width: 768px) {\n  .MLK__rows {\n    --_keycap-height: var(--keycap-height, 42px);\n  }\n  .MLK__rows > .MLK__row > div > small {\n    font-size: 14px;\n  }\n}\n@media (max-height: 768px) {\n  .MLK__rows {\n    --_keycap-height: var(--keycap-height, 42px);\n  }\n  .MLK__rows > .MLK__row > div > small {\n    font-size: 14px;\n  }\n}\n@container (max-width: 1444px) {\n  .MLK__rows .if-wide {\n    display: none;\n  }\n}\n@media (prefers-color-scheme: dark) {\n  .ML__keyboard {\n    --_accent-color: var(--keyboard-accent-color, #0b5c9c);\n    --_background: var(--keyboard-background, #151515);\n    --_border: var(--keyboard-border, transparent);\n    --_toolbar-text: var(--keyboard-toolbar-text, #e3e4e8);\n    --_toolbar-background-hover: var(--keyboard-toolbar-background-hover, #303030);\n    --keyboard-toolbar-background-hover: #303030;\n    --_horizontal-rule: var(--keyboard-horizontal-rule, 1px solid #303030);\n    --_keycap-background: var(--keycap-background, #1f2022);\n    --_keycap-background-hover: var(--keycap-background-hover, #2f3032);\n    --_keycap-border: var(--_keycap-border, transparent);\n    --_keycap-border-bottom: var(--_keycap-border-bottom, transparent);\n    --_keycap-text: var(--keycap-text, #e3e4e8);\n    --_keycap-secondary-background: var(--keycap-secondary-background, #3d4144);\n    --_keycap-secondary-background-hover: var(--keycap-secondary-background-hover, #4d5154);\n    --_keycap-secondary-text: var(--keycap-secondary-text, #e7ebee);\n    --keycap-secondary-border: transparent;\n    --keycap-secondary-border-bottom: transparent;\n    --_keycap-secondary-border: var(--keycap-secondary-border, transparent);\n    --_keycap-secondary-border-bottom: var(--keycap-secondary-border-bottom, transparent);\n    --_variant-panel-background: var(--variant-panel-background, #303030);\n    --_variant-keycap-text-active: var(--variant-keycap-text-active, #fff);\n  }\n}\n/* Same as the media query, but with a class */\n[theme='dark'] .ML__keyboard {\n  --_accent-color: var(--keyboard-accent-color, #0b5c9c);\n  --_background: var(--keyboard-background, #151515);\n  --_border: var(--keyboard-border, transparent);\n  --_toolbar-text: var(--keyboard-toolbar-text, #e3e4e8);\n  --_toolbar-background-hover: var(--keyboard-toolbar-background-hover, #303030);\n  --keyboard-toolbar-background-hover: #303030;\n  --_horizontal-rule: var(--keyboard-horizontal-rule, 1px solid #303030);\n  --_keycap-background: var(--keycap-background, #1f2022);\n  --_keycap-background-hover: var(--keycap-background-hover, #2f3032);\n  --_keycap-border: var(--_keycap-border, transparent);\n  --_keycap-border-bottom: var(--_keycap-border-bottom, transparent);\n  --_keycap-text: var(--keycap-text, #e3e4e8);\n  --_keycap-secondary-background: var(--keycap-secondary-background, #3d4144);\n  --_keycap-secondary-background-hover: var(--keycap-secondary-background-hover, #4d5154);\n  --_keycap-secondary-text: var(--keycap-secondary-text, #e7ebee);\n  --keycap-secondary-border: transparent;\n  --keycap-secondary-border-bottom: transparent;\n  --_keycap-secondary-border: var(--keycap-secondary-border, transparent);\n  --_keycap-secondary-border-bottom: var(--keycap-secondary-border-bottom, transparent);\n  --_variant-panel-background: var(--variant-panel-background, #303030);\n  --_variant-keycap-text-active: var(--variant-keycap-text-active, #fff);\n}\n[theme='light'] .ML__keyboard {\n  --_accent-color: var(--keyboard-accent-color, #0c75d8);\n  --_background: var(--keyboard-background, #cacfd7);\n  --_border: var(--keyboard-border, #ddd);\n  --_toolbar-text: var(--keyboard-toolbar-text, #2c2e2f);\n  --_toolbar-background: var(--keyboard-toolbar-background, transparent);\n  --_toolbar-background-hover: var(--keyboard-toolbar-background-hover, #eee);\n  --_toolbar-background-selected: var(--keyboard-toolbar-background-selected, transparent);\n  --_horizontal-rule: var(--keyboard-horizontal-rule, 1px solid #fff);\n  --_keycap-background: var(--keycap-background, white);\n  --_keycap-background-hover: var(--keycap-background-hover, #f5f5f7);\n  --_keycap-background-active: var(--keycap-background-active, var(--_accent-color));\n  --_keycap-background-pressed: var(--keycap-background-pressed, var(--_accent-color));\n  --_keycap-border: var(--_keycap-border, #e5e6e9);\n  --_keycap-border-bottom: var(--_keycap-border-bottom, #8d8f92);\n  --_keycap-text: var(--keycap-text, #000);\n  --_keycap-text-active: var(--keycap-text-active, #fff);\n  --_keycap-text-hover: var(--keycap-text-hover, var(--_keycap-text));\n  --_keycap-text-pressed: var(--keycap-text-pressed, #fff);\n  --_keycap-shift-text: var(--keycap-shift-text, var(--_accent-color));\n  --_keycap-secondary-background: var(--keycap-secondary-background, #a0a9b8);\n  --_keycap-secondary-background-hover: var(--keycap-secondary-background-hover, #7d8795);\n  --_keycap-secondary-text: var(--keycap-secondary-text, #060707);\n  --_keycap-secondary-border: var(--keycap-secondary-border, #c5c9d0);\n  --_keycap-secondary-border-bottom: var(--keycap-secondary-border-bottom, #989da6);\n  --_variant-panel-background: var(--variant-panel-background, #f0f0f0);\n  --_variant-keycap-text: var(--variant-keycap-textvar, var(--_keycap-text));\n  --_variant-keycap-text-active: var(--variant-keycap-text-active, var(--_keycap-text-active));\n  --_variant-keycap-background-active: var(--variant-keycap-background-active, var(--_accent-color));\n}\n`;var j0=`:host {\n  --primary-color: #5898ff;\n  --primary-color-dimmed: #c0c0f0;\n  --primary-color-dark: var(--blue-500);\n  --primary-color-light: var(--blue-100);\n  --primary-color-reverse: #ffffff;\n  --secondary-color: #ff8a65;\n  --secondary-color-dimmed: #f0d5c5;\n  --secondary-color-dark: var(--orange-500);\n  --secondary-color-light: var(--orange-100);\n  --secondary-color-reverse: #ffffff;\n  --link-color: #5898ff;\n  --link-color-dimmed: #c5c5c5;\n  --link-color-dark: #121212;\n  --link-color-light: #e2e2e2;\n  --link-color-reverse: #ffffff;\n  --semantic-blue: var(--blue-700);\n  --semantic-red: var(--red-400);\n  --semantic-orange: var(--orange-400);\n  --semantic-green: var(--green-700);\n  --neutral-100: #f5f5f5;\n  --neutral-200: #eeeeee;\n  --neutral-300: #e0e0e0;\n  --neutral-400: #bdbdbd;\n  --neutral-500: #9e9e9e;\n  --neutral-600: #757575;\n  --neutral-700: #616161;\n  --neutral-800: #424242;\n  --neutral-900: #212121;\n  --red-25: #fff8f7;\n  --red-50: #fff1ef;\n  --red-100: #ffeae6;\n  --red-200: #ffcac1;\n  --red-300: #ffa495;\n  --red-400: #ff7865;\n  --red-500: #f21c0d;\n  --red-600: #e50018;\n  --red-700: #d30024;\n  --red-800: #bd002c;\n  --red-900: #a1002f;\n  --orange-25: #fffbf8;\n  --orange-50: #fff7f1;\n  --orange-100: #fff3ea;\n  --orange-200: #ffe1c9;\n  --orange-300: #ffcca2;\n  --orange-400: #ffb677;\n  --orange-500: #fe9310;\n  --orange-600: #f58700;\n  --orange-700: #ea7c00;\n  --orange-800: #dc6d00;\n  --orange-900: #ca5b00;\n  --brown-25: #fff8ef;\n  --brown-50: #fff1df;\n  --brown-100: #ffe9ce;\n  --brown-200: #ebcca6;\n  --brown-300: #cdaf8a;\n  --brown-400: #af936f;\n  --brown-500: #856a47;\n  --brown-600: #7f5e34;\n  --brown-700: #78511f;\n  --brown-800: #6e4200;\n  --brown-900: #593200;\n  --yellow-25: #fffdf9;\n  --yellow-50: #fffcf2;\n  --yellow-100: #fffaec;\n  --yellow-200: #fff2ce;\n  --yellow-300: #ffe8ab;\n  --yellow-400: #ffdf85;\n  --yellow-500: #ffcf33;\n  --yellow-600: #f1c000;\n  --yellow-700: #dfb200;\n  --yellow-800: #c9a000;\n  --yellow-900: #ad8a00;\n  --lime-25: #f4ffee;\n  --lime-50: #e9ffdd;\n  --lime-100: #ddffca;\n  --lime-200: #a8fb6f;\n  --lime-300: #94e659;\n  --lime-400: #80d142;\n  --lime-500: #63b215;\n  --lime-600: #45a000;\n  --lime-700: #268e00;\n  --lime-800: #007417;\n  --lime-900: #005321;\n  --green-25: #f5fff5;\n  --green-50: #ebffea;\n  --green-100: #e0ffdf;\n  --green-200: #a7ffa7;\n  --green-300: #5afa65;\n  --green-400: #45e953;\n  --green-500: #17cf36;\n  --green-600: #00b944;\n  --green-700: #00a34a;\n  --green-800: #008749;\n  --green-900: #00653e;\n  --teal-25: #f3ffff;\n  --teal-50: #e6fffe;\n  --teal-100: #d9fffe;\n  --teal-200: #8dfffe;\n  --teal-300: #57f4f4;\n  --teal-400: #43e5e5;\n  --teal-500: #17cfcf;\n  --teal-600: #00c2c0;\n  --teal-700: #00b5b1;\n  --teal-800: #00a49e;\n  --teal-900: #009087;\n  --cyan-25: #f7fcff;\n  --cyan-50: #eff8ff;\n  --cyan-100: #e7f5ff;\n  --cyan-200: #c2e6ff;\n  --cyan-300: #95d5ff;\n  --cyan-400: #61c4ff;\n  --cyan-500: #13a7ec;\n  --cyan-600: #069eda;\n  --cyan-700: #0095c9;\n  --cyan-800: #0088b2;\n  --cyan-900: #0a7897;\n  --blue-25: #f7faff;\n  --blue-50: #eef5ff;\n  --blue-100: #e5f1ff;\n  --blue-200: #bfdbff;\n  --blue-300: #92c2ff;\n  --blue-400: #63a8ff;\n  --blue-500: #0d80f2;\n  --blue-600: #0077db;\n  --blue-700: #006dc4;\n  --blue-800: #0060a7;\n  --blue-900: #005086;\n  --indigo-25: #f8f7ff;\n  --indigo-50: #f1efff;\n  --indigo-100: #eae7ff;\n  --indigo-200: #ccc3ff;\n  --indigo-300: #ac99ff;\n  --indigo-400: #916aff;\n  --indigo-500: #63c;\n  --indigo-600: #5a21b2;\n  --indigo-700: #4e0b99;\n  --indigo-800: #3b0071;\n  --indigo-900: #220040;\n  --purple-25: #fbf7ff;\n  --purple-50: #f8f0ff;\n  --purple-100: #f4e8ff;\n  --purple-200: #e4c4ff;\n  --purple-300: #d49aff;\n  --purple-400: #c36aff;\n  --purple-500: #a219e6;\n  --purple-600: #9000c4;\n  --purple-700: #7c009f;\n  --purple-800: #600073;\n  --purple-900: #3d0043;\n  --magenta-25: #fff8fb;\n  --magenta-50: #fff2f6;\n  --magenta-100: #ffebf2;\n  --magenta-200: #ffcddf;\n  --magenta-300: #ffa8cb;\n  --magenta-400: #ff7fb7;\n  --magenta-500: #eb4799;\n  --magenta-600: #da3689;\n  --magenta-700: #c82179;\n  --magenta-800: #b00065;\n  --magenta-900: #8a004c;\n}\n@media (prefers-color-scheme: dark) {\n  :host {\n    --semantic-blue: var(--blue-700);\n    --semantic-red: var(--red-400);\n    --semantic-orange: var(--orange-400);\n    --semantic-green: var(--green-700);\n    --semantic-bg-blue: var(--blue-25);\n    --semantic-bg-red: var(--red-25);\n    --semantic-bg-orange: var(--orange-25);\n    --semantic-bg-green: var(--green-25);\n    --neutral-100: #121212;\n    --neutral-200: #424242;\n    --neutral-300: #616161;\n    --neutral-400: #757575;\n    --neutral-500: #9e9e9e;\n    --neutral-600: #bdbdbd;\n    --neutral-700: #e0e0e0;\n    --neutral-800: #eeeeee;\n    --neutral-900: #f5f5f5;\n  }\n}\n:host([theme='dark']) {\n  --semantic-blue: var(--blue-700);\n  --semantic-red: var(--red-400);\n  --semantic-orange: var(--orange-400);\n  --semantic-green: var(--green-700);\n  --semantic-bg-blue: var(--blue-25);\n  --semantic-bg-red: var(--red-25);\n  --semantic-bg-orange: var(--orange-25);\n  --semantic-bg-green: var(--green-25);\n  --neutral-100: #121212;\n  --neutral-200: #424242;\n  --neutral-300: #616161;\n  --neutral-400: #757575;\n  --neutral-500: #9e9e9e;\n  --neutral-600: #bdbdbd;\n  --neutral-700: #e0e0e0;\n  --neutral-800: #eeeeee;\n  --neutral-900: #f5f5f5;\n}\n/* @media (prefers-color-scheme: dark) {\n  :host {\n      --label-color: #fff;\n      --active-label-color: #000;\n      --menu-bg: #525252;\n      --active-bg: #5898ff;\n      --active-bg-dimmed: #5c5c5c;\n  }\n} */\n:host {\n  --ui-font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n  --ui-font-size: 14px;\n  --ui-line-height: 1.5;\n  --ui-letter-spacing: 0.007em;\n  --mono-font-family: 'Berkeley Mono', 'JetBrains Mono', 'IBM Plex Mono', 'Source Code Pro', Menlo, Monaco, 'Courier New', monospace;\n  --ui-layer-1: var(--neutral-100);\n  --ui-layer-2: var(--neutral-200);\n  --ui-layer-3: var(--neutral-300);\n  --ui-layer-4: var(--neutral-400);\n  --ui-layer-5: var(--neutral-500);\n  --ui-layer-6: var(--neutral-600);\n  --ui-border-color: var(--primary-color);\n  --ui-border-radius: 4px;\n  --ui-text: var(--neutral-900);\n  --ui-text-secondary: var(--neutral-700);\n  --ui-text-placeholder: var(--neutral-500);\n  --ui-text-muted: var(--neutral-300);\n  /** A field is a UI element in which a user can type data, for\n  * example an input or textarea element.\n  */\n  --ui-field-bg: var(--neutral-100);\n  --ui-field-bg-hover: var(--neutral-100);\n  --ui-field-bg-disabled: var(--neutral-300);\n  --ui-field-bg-invalid: var(--red-100);\n  --ui-field-bg-focus: var(--neutral-100);\n  --ui-field-border: 0.5px solid var(--border-color);\n  --ui-field-border-hover: 0.5px solid var(--border-color);\n  --ui-field-border-disabled: 0.5px solid var(--border-color);\n  --ui-field-border-invalid: 0.5px solid var(--border-color);\n  --ui-field-border-focus: 0.5px solid var(--border-color);\n  --ui-menu-bg: var(--neutral-100);\n  --ui-menu-text: var(--neutral-900);\n  --ui-menu-bg-hover: var(--neutral-200);\n  --ui-menu-text-hover: var(--neutral-900);\n  /** The \\`active\\` state is used for the state of menu items\n  * when they are selected.\n  */\n  --ui-menu-bg-active: var(--primary-color);\n  --ui-menu-text-active: var(--primary-color-reverse);\n  /** The \\`active-muted\\` set is used for the state of\n  * submenus when they are open.\n  */\n  --ui-menu-bg-active-muted: var(--neutral-300);\n  --ui-menu-text-active-muted: var(--neutral-900);\n  /* --ui-menu-shadow: 0 1px 2px 0 rgba(60, 64, 67, 0.302),\n0 2px 6px 2px rgba(60, 64, 67, 0.149); */\n  --ui-menu-shadow: 0 0 2px rgba(0, 0, 0, 0.5), 0 0 20px rgba(0, 0, 0, 0.2);\n  --ui-menu-divider: 0.5px solid #c7c7c7;\n  /* var(--neutral-300); */\n  --ui-menu-z-index: 10000;\n  --page-bg: var(--neutral-100);\n  --content-bg: var(--neutral-200);\n}\n@media (prefers-color-scheme: dark) {\n  :host {\n    --ui-menu-bg: var(--neutral-200);\n  }\n}\n:host([theme='dark']) {\n  --ui-menu-bg: var(--neutral-200);\n}\n/* PingFang SC is a macOS font. Microsoft Yahei is a Windows font. \n  Noto  is a Linux/Android font.\n*/\n:lang(zh-cn),\n:lang(zh-sg),\n:lang(zh-my),\n:lang(zh) {\n  --ui-font-family: -apple-system, system-ui, 'PingFang SC', 'Hiragino Sans GB', 'Noto Sans CJK SC', 'Noto Sans SC', 'Noto Sans', 'Microsoft Yahei UI', 'Microsoft YaHei New', 'Microsoft Yahei', '\\u5FAE\\u8F6F\\u96C5\\u9ED1', SimSun, '\\u5B8B\\u4F53', STXihei, '\\u534E\\u6587\\u7EC6\\u9ED1', sans-serif;\n}\n:lang(zh-tw),\n:lang(zh-hk),\n:lang(zh-mo) {\n  --ui-font-family: -apple-system, system-ui, 'Noto Sans', 'Microsoft JhengHei UI', 'Microsoft JhengHei', '\\u5FAE\\u8EDF\\u6B63\\u9ED1\\u9AD4', '\\u65B0\\u7D30\\u660E\\u9AD4', 'PMingLiU', '\\u7D30\\u660E\\u9AD4', 'MingLiU', sans-serif;\n}\n:lang(ja),\n:lang(ja-jp),\n:lang(ja-jp-mac) {\n  --ui-font-family: -apple-system, system-ui, 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Noto Sans CJK JP', 'Noto Sans JP', 'Noto Sans', '\\u6E38\\u30B4\\u30B7\\u30C3\\u30AF', '\\u6E38\\u30B4\\u30B7\\u30C3\\u30AF\\u4F53', YuGothic, 'Yu Gothic', '\\u30E1\\u30A4\\u30EA\\u30AA', Meiryo, '\\uFF2D\\uFF33 \\uFF30\\u30B4\\u30B7\\u30C3\\u30AF', 'MS PGothic', sans-serif;\n}\n:lang(ko),\n:lang(ko-kr),\n:lang(ko-kr-std) {\n  --ui-font-family: -apple-system, system-ui, 'Noto Sans CJK KR', 'Noto Sans KR', 'Noto Sans', 'Malgun Gothic', '\\uB9D1\\uC740 \\uACE0\\uB515', 'Apple SD Gothic Neo', '\\uC560\\uD50C SD \\uC0B0\\uB3CC\\uACE0\\uB515 Neo', 'Apple SD \\uC0B0\\uB3CC\\uACE0\\uB515 Neo', '\\uB3CB\\uC6C0', Dotum, sans-serif;\n}\n:lang(ko-kr-apple) {\n  --ui-font-family: -apple-system, system-ui, 'Noto Sans CJK KR', 'Noto Sans KR', 'Noto Sans', 'Apple SD Gothic Neo', '\\uC560\\uD50C SD \\uC0B0\\uB3CC\\uACE0\\uB515 Neo', 'Apple SD \\uC0B0\\uB3CC\\uACE0\\uB515 Neo', '\\uB3CB\\uC6C0', Dotum, sans-serif;\n}\n:lang(zh-cn),\n:lang(zh-sg),\n:lang(zh-my),\n:lang(zh),\n:lang(zh-tw),\n:lang(zh-hk),\n:lang(zh-mo),\n:lang(ja),\n:lang(ja-jp),\n:lang(ja-jp-mac),\n:lang(ko),\n:lang(ko-kr),\n:lang(ko-kr-std),\n:lang(ko-kr-apple) {\n  --ui-font-size: 1rem;\n  --ui-line-height: 1.7;\n  --ui-letter-spacing: 0;\n}\n:dir(rtl) {\n  --ui-line-height: auto;\n  --ui-letter-spacing: 0;\n}\n`;var J0=`.ui-menu *,\n.ui-menu ::before,\n.ui-menu ::after {\n  box-sizing: border-box;\n}\n.ui-menu {\n  display: none;\n  color-scheme: light dark;\n  -webkit-user-select: none;\n  /* Important: Safari iOS doesn't respect user-select */\n  user-select: none;\n  cursor: default;\n  -webkit-touch-callout: none;\n  -webkit-tap-highlight-color: rgba(0 0 0 0);\n  --active-label-color: #fff;\n  /* ui-menu-text-active */\n  --label-color: #121212;\n  /* ui-menu-text */\n  --menu-bg: #e2e2e2;\n  /* ui-menu-background */\n  --active-bg: #5898ff;\n  /* ui-menu-background-active */\n  --active-bg-dimmed: #c5c5c5;\n  /* ui-menu-background-active-muted */\n}\n/** Use the :where pseudo selector to make the specificity of the\n * selector 0, so that it can be overridden by the user.\n */\n:where(.ui-menu-container) {\n  position: absolute;\n  overflow: visible;\n  width: auto;\n  height: auto;\n  z-index: 10000;\n  border-radius: 8px;\n  background: var(--ui-menu-bg);\n  box-shadow: var(--ui-menu-shadow);\n  list-style: none;\n  padding: 6px 0 6px 0;\n  margin: 0;\n  user-select: none;\n  cursor: default;\n  color: var(--ui-menu-text);\n  font-weight: normal;\n  font-style: normal;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: 0;\n  outline: none;\n  opacity: 1;\n  /* The [popover] elements have a 1px solid black border. Ugh. */\n  border: none;\n  width: fit-content;\n  height: fit-content;\n}\n:where(.ui-menu-container > li) {\n  display: flex;\n  flex-flow: row;\n  align-items: center;\n  padding: 1px 7px 1px 7px;\n  margin-top: 0;\n  margin-left: 6px;\n  margin-right: 6px;\n  border-radius: 4px;\n  white-space: nowrap;\n  position: relative;\n  outline: none;\n  fill: currentColor;\n  user-select: none;\n  cursor: default;\n  text-align: left;\n  color: inherit;\n  font-family: var(--ui-font-family);\n  font-size: var(--ui-font-size);\n  line-height: var(--ui-line-height);\n  letter-spacing: var(--ui-letter-spacing);\n}\n:where(.ui-menu-container > li > .label) {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  appearance: none;\n  background: none;\n  outline: none;\n  width: 100%;\n  margin: 0;\n  padding: 1px 2px 1px 1px;\n  overflow: visible;\n  border: 1px solid transparent;\n  white-space: nowrap;\n  text-align: start;\n  align-content: center;\n}\n:where(.ui-menu-container > li:has(.heading)) {\n  margin-top: 0.5em;\n}\n:where(.ui-menu-container > li > .label.heading) {\n  font-weight: bold;\n  opacity: 0.4;\n}\n:where(.ui-menu-container > li.indent > .label) {\n  margin-inline-start: 12px;\n}\n:where(.ui-menu-container > li > .label.indent) {\n  margin-inline-start: 12px;\n}\n:where(.ui-menu-container > li[role='divider']) {\n  border-bottom: 1px solid var(--ui-menu-divider);\n  border-radius: 0;\n  padding: 0;\n  margin-left: 15px;\n  margin-right: 15px;\n  padding-top: 5px;\n  margin-bottom: 5px;\n  width: calc(100% - 30px);\n  /** 100% - (margin-left + margin-right) */\n}\n:where(.ui-menu-container > li[aria-disabled='true']) {\n  opacity: 0.5;\n}\n:where(.ui-menu-container > li.active) {\n  background: var(--ui-menu-bg-active);\n  background: -apple-system-control-accent;\n  color: var(--ui-menu-text-active);\n}\n:where(.ui-menu-container > li.active.is-submenu-open) {\n  background: var(--ui-menu-bg-active-muted);\n  color: inherit;\n}\n:where(.ui-menu-container > li[aria-haspopup='true'] > .label) {\n  padding-inline-end: 0;\n}\n:where(.ui-menu-container > li[aria-haspopup='true'].active::after) {\n  color: var(--ui-menu-text-active);\n}\n/** Keyboard shortcut */\n:where(.ui-menu-container > li > kbd) {\n  font-family: var(--ui-font-family);\n  margin-inline-start: 12px;\n  opacity: 0.4;\n}\n:where(.ui-menu-container > li.active > kbd) {\n  opacity: 0.85;\n}\n.ui-trailing-chevron {\n  display: flex;\n  margin-inline-start: 24px;\n  width: 10px;\n  height: 10px;\n  margin-bottom: 4px;\n}\n.ui-trailing-chevron:dir(rtl) {\n  transform: scaleX(-1);\n}\n.ui-checkmark {\n  display: flex;\n  margin-inline-end: -11px;\n  margin-inline-start: -4px;\n  margin-top: 2px;\n  width: 16px;\n  height: 16px;\n}\n.ui-mixedmark {\n  display: flex;\n  margin-inline-end: -11px;\n  margin-inline-start: -4px;\n  margin-top: 2px;\n  width: 16px;\n  height: 16px;\n}\n`;var Rr;function zt(t){let e=\"\";switch(t){case\"mathfield-element\":e=`\n    :host { display: inline-block; background-color: field; color: fieldtext; border-width: 1px; border-style: solid; border-color: #acacac; border-radius: 2px;}\n    :host([hidden]) { display: none; }\n    :host([disabled]), :host([disabled]:focus), :host([disabled]:focus-within) { outline: none; opacity:  .5; }\n    :host(:focus), :host(:focus-within) {\n      outline: Highlight auto 1px;    /* For Firefox */\n      outline: -webkit-focus-ring-color auto 1px;\n    }\n    :host([readonly]:focus), :host([readonly]:focus-within),\n    :host([read-only]:focus), :host([read-only]:focus-within) {\n      outline: none;\n    }`;break;case\"core\":e=V0;break;case\"mathfield\":e=$0;break;case\"environment-popover\":e=q0;break;case\"suggestion-popover\":e=H0;break;case\"keystroke-caption\":e=W0;break;case\"virtual-keyboard\":e=U0;break;case\"ui\":e=j0;break;case\"menu\":e=J0;break;default:}return e}function or(t){return Rr||(Rr={}),Rr[t]||(Rr[t]=new CSSStyleSheet,Rr[t].replaceSync(zt(t))),Rr[t]}var It;function We(t){var e;try{if(!(\"adoptedStyleSheets\"in document)){if(window.document.getElementById(`mathlive-style-${t}`))return;let r=window.document.createElement(\"style\");r.id=`mathlive-style-${t}`,r.append(window.document.createTextNode(zt(t))),window.document.head.appendChild(r);return}if(It||(It={}),((e=It[t])!=null?e:0)!==0)It[t]+=1;else{let r=or(t);document.adoptedStyleSheets=[...document.adoptedStyleSheets,r],It[t]=1}}catch(r){console.error(\"Error injecting stylesheet\",t,r)}}function nt(t){if(\"adoptedStyleSheets\"in document&&It!=null&&It[t]&&(It[t]-=1,It[t]<=0)){let e=Rr[t];document.adoptedStyleSheets=document.adoptedStyleSheets.filter(r=>r!==e)}}var Ir=class t extends y{constructor(e){var r;super(g(p({},e),{type:\"accent\",body:(r=e.body)!=null?r:void 0})),e.accentChar?this.accent=e.accentChar:this.svgAccent=e==null?void 0:e.svgAccent,this.skipBoundary=!0,this.captureSelection=!0}static fromJson(e){return new t(e)}toJson(){return g(p({},super.toJson()),{accentChar:this.accent,svgAccent:this.svgAccent})}render(e){var c;let r=new B({parent:e,mathstyle:\"cramp\"},this.style),i=(c=y.createBox(r,this.body))!=null?c:new w(\"\\u25A1\",{style:this.style}),n=0;!this.hasEmptyBranch(\"body\")&&this.body.length===2&&this.body[1].isCharacterBox()&&(n=i.skew);let o=Math.min(i.height,Je),a;if(this.svgAccent)a=Gi(this.svgAccent),o=r.metrics.bigOpSpacing1-o;else if(this.accent){let u=new w(this.accent,{fontFamily:\"Main-Regular\"});u.italic=0;let m=this.accent===8407||this.accent===8411||this.accent===8412?\" ML__accent-combining-char\":\"\";a=new w(u,{classes:\"ML__accent-body\"+m})}let s=(i.width-a.width)/2+i.left+2*n;a=new te({shift:0,children:[{box:new w(i)},-o,{box:a,marginLeft:s,classes:[\"ML__center\"]}]});let l=new w(a,{type:\"lift\"});return this.caret&&(l.caret=this.caret),this.bind(r,l.wrap(r)),this.attachSupsub(r,{base:l})}};var en={\"(\":\")\",\"{\":\"}\",\"[\":\"]\",\"|\":\"|\",\"\\\\lbrace\":\"\\\\rbrace\",\"\\\\lparen\":\"\\\\rparen\",\"\\\\{\":\"\\\\}\",\"\\\\langle\":\"\\\\rangle\",\"\\\\lfloor\":\"\\\\rfloor\",\"\\\\lceil\":\"\\\\rceil\",\"\\\\vert\":\"\\\\vert\",\"\\\\lvert\":\"\\\\rvert\",\"\\\\Vert\":\"\\\\Vert\",\"\\\\lVert\":\"\\\\rVert\",\"\\\\lbrack\":\"\\\\rbrack\",\"\\\\ulcorner\":\"\\\\urcorner\",\"\\\\llcorner\":\"\\\\lrcorner\",\"\\\\lgroup\":\"\\\\rgroup\",\"\\\\lmoustache\":\"\\\\rmoustache\"},tn=Object.fromEntries(Object.entries(en).map(([t,e])=>[e,t]));function Ha(t){var e;return(e={\"[\":91,\"]\":93,\"(\":40,\")\":41,\"\\\\mid\":8739,\"|\":8739,\"\\u2223\":8739,\"\\u2225\":8741,\"\\\\|\":8739,\"\\\\{\":123,\"\\\\}\":125,\"\\\\lbrace\":123,\"\\\\rbrace\":125,\"\\\\lparen\":40,\"\\\\rparen\":41,\"\\\\lbrack\":91,\"\\\\rbrack\":93,\"\\\\vert\":8739,\"\\\\lvert\":8739,\"\\\\mvert\":8739,\"\\\\rvert\":8739,\"\\\\Vert\":8741,\"\\\\lVert\":8741,\"\\\\mVert\":8741,\"\\\\rVert\":8741,\"\\\\parallel\":8741,\"\\\\shortparallel\":8741,\"\\\\langle\":10216,\"\\\\rangle\":10217,\"\\\\lfloor\":8970,\"\\\\rfloor\":8971,\"\\\\lceil\":8968,\"\\\\rceil\":8969,\"\\\\ulcorner\":9484,\"\\\\urcorner\":9488,\"\\\\llcorner\":9492,\"\\\\lrcorner\":9496,\"\\\\lgroup\":10222,\"\\\\rgroup\":10223,\"\\\\lmoustache\":9136,\"\\\\rmoustache\":9137,\"\\\\surd\":8730}[t])!=null?e:t.codePointAt(0)}function Pf(t,e,r,i){var a;let o=new w(Ha(t),{fontFamily:\"Main-Regular\",isSelected:i.isSelected,classes:\"ML__small-delim \"+((a=i.classes)!=null?a:\"\")}).wrap(e);return r&&o.setTop((1-e.scalingFactor)*Pe),o}function G0(t,e,r,i,n){var s,l;let o=new B({parent:i,mathstyle:\"textstyle\"},n==null?void 0:n.style),a=new w(Ha(t),{fontFamily:`Size${e}-Regular`,isSelected:n.isSelected,classes:((s=n.classes)!=null?s:\"\")+` ML__delim-size${e}`,type:(l=n.type)!=null?l:\"ignore\"}).wrap(o);return r&&a.setTop((1-o.scalingFactor)*Pe),a}function X0(t,e,r,i,n){var j;let o,a,s,l;o=s=l=Ha(t),a=null;let c=\"Size1-Regular\";t===\"\\\\vert\"||t===\"\\\\lvert\"||t===\"\\\\rvert\"||t===\"\\\\mvert\"||t===\"\\\\mid\"?s=o=l=8739:t===\"\\\\Vert\"||t===\"\\\\lVert\"||t===\"\\\\rVert\"||t===\"\\\\mVert\"||t===\"\\\\|\"?s=o=l=8741:t===\"\\\\uparrow\"?s=l=9168:t===\"\\\\Uparrow\"?s=l=8214:t===\"\\\\downarrow\"?o=s=9168:t===\"\\\\Downarrow\"?o=s=8214:t===\"\\\\updownarrow\"?(o=8593,s=9168,l=8595):t===\"\\\\Updownarrow\"?(o=8657,s=8214,l=8659):t===\"[\"||t===\"\\\\lbrack\"?(o=9121,s=9122,l=9123,c=\"Size4-Regular\"):t===\"]\"||t===\"\\\\rbrack\"?(o=9124,s=9125,l=9126,c=\"Size4-Regular\"):t===\"\\\\lfloor\"||t===\"\\u230A\"?(s=o=9122,l=9123,c=\"Size4-Regular\"):t===\"\\\\lceil\"||t===\"\\u2308\"?(o=9121,s=l=9122,c=\"Size4-Regular\"):t===\"\\\\rfloor\"||t===\"\\u230B\"?(s=o=9125,l=9126,c=\"Size4-Regular\"):t===\"\\\\rceil\"||t===\"\\u2309\"?(o=9124,s=l=9125,c=\"Size4-Regular\"):t===\"(\"||t===\"\\\\lparen\"?(o=9115,s=9116,l=9117,c=\"Size4-Regular\"):t===\")\"||t===\"\\\\rparen\"?(o=9118,s=9119,l=9120,c=\"Size4-Regular\"):t===\"\\\\{\"||t===\"\\\\lbrace\"?(o=9127,a=9128,l=9129,s=9130,c=\"Size4-Regular\"):t===\"\\\\}\"||t===\"\\\\rbrace\"?(o=9131,a=9132,l=9133,s=9130,c=\"Size4-Regular\"):t===\"\\\\lgroup\"||t===\"\\u27EE\"?(o=9127,l=9129,s=9130,c=\"Size4-Regular\"):t===\"\\\\rgroup\"||t===\"\\u27EF\"?(o=9131,l=9133,s=9130,c=\"Size4-Regular\"):t===\"\\\\lmoustache\"||t===\"\\u23B0\"?(o=9127,l=9133,s=9130,c=\"Size4-Regular\"):t===\"\\\\rmoustache\"||t===\"\\u23B1\"?(o=9131,l=9129,s=9130,c=\"Size4-Regular\"):t===\"\\\\surd\"?(o=57345,l=9143,s=57344,c=\"Size4-Regular\"):t===\"\\\\ulcorner\"?(o=9484,s=l=32):t===\"\\\\urcorner\"?(o=9488,s=l=32):t===\"\\\\llcorner\"?(l=9492,s=o=32):t===\"\\\\lrcorner\"&&(o=9496,s=o=32);let u=Cr(o,c),m=u.height+u.depth,d=Cr(s,c),h=d.height+d.depth,f=Cr(l,c),x=f.height+f.depth,v=0,b=1;if(a!==null){let T=Cr(a,c);v=T.height+T.depth,b=2}let _=m+x+v,S=Math.max(0,Math.ceil((e-_)/(b*h))),A=_+S*b*h,E=Pe;r&&(E=E*i.scalingFactor);let D=A/2-E,L=.008,K=[];K.push({box:new w(l,{fontFamily:c})}),K.push(-L);let $=new w(s,{fontFamily:c});if(a===null)for(let T=0;T<S;T++)K.push({box:$});else{for(let T=0;T<S;T++)K.push({box:$});K.push(-L),K.push({box:new w(a,{fontFamily:c})}),K.push(-L);for(let T=0;T<S;T++)K.push({box:$})}K.push(-L),K.push({box:new w(o,{fontFamily:c})});let G=\"\";c===\"Size1-Regular\"?G=\" delim-size1\":c===\"Size4-Regular\"&&(G=\" delim-size4\");let R=new te({bottom:D,children:K},{classes:G});return new w(R,g(p({},n!=null?n:{}),{classes:((j=n==null?void 0:n.classes)!=null?j:\"\")+\" ML__delim-mult\"}))}var Z0=new Set([\"(\",\")\",\"\\\\lparen\",\"\\\\rparen\",\"[\",\"]\",\"\\\\lbrack\",\"\\\\rbrack\",\"\\\\{\",\"\\\\}\",\"\\\\lbrace\",\"\\\\rbrace\",\"\\\\lfloor\",\"\\\\rfloor\",\"\\\\lceil\",\"\\\\rceil\",\"\\\\surd\",\"\\u230A\",\"\\u230B\",\"\\u2308\",\"\\u2309\"]),Rf=new Set([\"\\\\uparrow\",\"\\\\downarrow\",\"\\\\updownarrow\",\"\\\\Uparrow\",\"\\\\Downarrow\",\"\\\\Updownarrow\",\"|\",\"\\\\|\",\"\\\\vert\",\"\\\\Vert\",\"\\\\lvert\",\"\\\\rvert\",\"\\\\lVert\",\"\\\\rVert\",\"\\\\mvert\",\"\\\\mid\",\"\\\\lgroup\",\"\\\\rgroup\",\"\\\\lmoustache\",\"\\\\rmoustache\",\"\\u27EE\",\"\\u27EF\",\"\\u23B0\",\"\\u23B1\"]),Y0=new Set([\"<\",\">\",\"\\\\langle\",\"\\\\rangle\",\"/\",\"\\\\backslash\",\"\\\\lt\",\"\\\\gt\"]),If=[0,1.2,1.8,2.4,3];function Q0(t,e,r,i){return t===void 0||t===\".\"?ar(r,i.classes):(t===\"<\"||t===\"\\\\lt\"||t===\"\\u27E8\"?t=\"\\\\langle\":(t===\">\"||t===\"\\\\gt\"||t===\"\\u27E9\")&&(t=\"\\\\rangle\"),Z0.has(t)||Y0.has(t)?G0(t,e,!1,r,i):Rf.has(t)?X0(t,If[e],!1,r,i):(\"\"+t,null))}var zf=[{type:\"small\",mathstyle:\"scriptscriptstyle\"},{type:\"small\",mathstyle:\"scriptstyle\"},{type:\"small\",mathstyle:\"textstyle\"},{type:\"large\",size:1},{type:\"large\",size:2},{type:\"large\",size:3},{type:\"large\",size:4}],Nf=[{type:\"small\",mathstyle:\"scriptscriptstyle\"},{type:\"small\",mathstyle:\"scriptscriptstyle\"},{type:\"small\",mathstyle:\"textstyle\"},{type:\"stack\"}],Ff=[{type:\"small\",mathstyle:\"scriptscriptstyle\"},{type:\"small\",mathstyle:\"scriptstyle\"},{type:\"small\",mathstyle:\"textstyle\"},{type:\"large\",size:1},{type:\"large\",size:2},{type:\"large\",size:3},{type:\"large\",size:4},{type:\"stack\"}];function $f(t){return t.type===\"small\"?\"Main-Regular\":t.type===\"large\"?\"Size\"+t.size+\"-Regular\":(t.type,\"Size4-Regular\")}function Vf(t,e,r,i){let n={\"-4\":0,\"-3\":1,0:2}[i.mathstyle.sizeDelta];for(let o=n;o<r.length&&r[o].type!==\"stack\";o++){let a=Cr(t,$f(r[o]));if(a.defaultMetrics)return{type:\"small\",mathstyle:\"scriptstyle\"};let s=a.height+a.depth;if(r[o].type===\"small\"&&(r[o].mathstyle===\"scriptscriptstyle\"?s*=Math.max(Un[Math.max(1,i.size-2)],i.minFontScale):r[o].mathstyle===\"scriptstyle\"&&(s*=Math.max(Un[Math.max(1,i.size-1)],i.minFontScale))),s>e)return r[o]}return r[r.length-1]}function rn(t,e,r,i,n,o){if(!e||e.length===0||e===\".\")return ar(n);e===\"<\"||e===\"\\\\lt\"?e=\"\\\\langle\":(e===\">\"||e===\"\\\\gt\")&&(e=\"\\\\rangle\");let a;Y0.has(e)?a=zf:Z0.has(e)?a=Ff:a=Nf;let s=Vf(Ha(e),r,a,n),l=new B({parent:n,mathstyle:s.mathstyle},o==null?void 0:o.style);return s.type===\"small\"?Pf(e,l,i,g(p({},o),{type:t})):s.type===\"large\"?G0(e,s.size,i,l,g(p({},o),{type:t})):(s.type,X0(e,r,i,l,g(p({},o),{type:t})))}function ci(t,e,r,i,n,o){if(e===\".\")return ar(n,o==null?void 0:o.classes);let a=Pe*n.scalingFactor,s=901,l=5/Kt,c=Math.max(r-a,i+a),u=Math.max(c/500*s,2*c-l);return rn(t,e,u,!0,n,o)}function ar(t,e){let r=new w(null,{classes:\" ML__nulldelimiter \"+(e!=null?e:\"\"),type:\"ignore\"});return r.width=t.getRegisterAsEm(\"nulldelimiterspace\"),r.wrap(new B({parent:t,mathstyle:\"textstyle\"}))}var Le=class t extends y{constructor(e){var r;super({type:\"placeholder\",command:\"\\\\placeholder\",mode:(r=e==null?void 0:e.mode)!=null?r:\"math\",style:e==null?void 0:e.style}),this.captureSelection=!0}static fromJson(e){return new t(e)}toJson(){return super.toJson()}render(e){let r;return this.value=e.placeholderSymbol,typeof e.renderPlaceholder==\"function\"?r=e.renderPlaceholder(e):r=this.createBox(e),this.caret&&(r.classes+=\" ML__placeholder-selected\"),r}_serialize(e){return e.skipPlaceholders?\"\":\"\\\\placeholder{}\"}};var ep=[\"matrix\",\"matrix*\",\"pmatrix\",\"pmatrix*\",\"bmatrix\",\"bmatrix*\",\"Bmatrix\",\"Bmatrix*\",\"vmatrix\",\"vmatrix*\",\"Vmatrix\",\"Vmatrix*\"],ic=[\"cases\",\"dcases\",\"rcases\"],tp=[\"align\",\"align*\",\"aligned\",\"gather\",\"gather*\",\"gathered\",\"split\"],qf=[\"array\",\"subequations\",\"eqnarray\"];function rp(t){return tp.includes(t)||ic.includes(t)||ic.includes(t)||ep.includes(t)||qf.includes(t)}function Wa(t){return ep.includes(t)}function ip(t){return ic.includes(t)}function np(t){return tp.includes(t)}function Hf(t,e,r){let i=0;for(let c of r.columns)\"align\"in c&&(i+=1);i=Math.max(i,r.minColumns);let n=0,o=[];for(let c of e){n=Math.max(n,Math.min(c.length,i));let u=0;for(;u<c.length;){let m=[],d=Math.min(c.length,u+i);for(;u<d;)m.push(jf(c[u],t.mode)),u+=1;if(m.length<r.minColumns)for(;m.length<r.minColumns;)m.push([new y({type:\"first\",mode:t.mode})]);o.push(m)}}!t.isMultiline&&o.length>0&&o[o.length-1].length===1&&Jf(o[o.length-1][0])&&o.pop();let a=[];for(let c of o){if(c.length!==n)for(let u=c.length;u<n;u++)t.isMultiline?c.push([new y({type:\"first\",mode:t.mode})]):c.push([new y({type:\"first\",mode:t.mode}),new Le]);a.push(c)}let s=0,l=0;for(let c of a){l=0;for(let u of c){for(let m of u)m.parent=t,m.parentBranch=[s,l];l+=1}s+=1}return t.isDirty=!0,a}function Wf(t){return t.length>0&&t.every(e=>e.type===\"first\")}function Uf(t,e,r){let i=new w(null,{classes:\"ML__empty-line-anchor\"}),n=t[0];n&&(n.id||(n.id=e.makeID()),i.atomID=n.id),i.setStyle(\"display\",\"inline-block\"),i.setStyle(\"width\",0),i.setStyle(\"position\",\"relative\"),i.setStyle(\"height\",Math.max(0,r.height+r.depth),\"em\"),i.setStyle(\"vertical-align\",-r.depth,\"em\"),i.height=r.height,i.depth=r.depth;let o=t.find(a=>a.caret);return o!=null&&o.caret&&(i.caret=o.caret),t.some(a=>a.isSelected)&&i.selected(!0),i}function jf(t,e){return t.length===0?[new y({type:\"first\",mode:e})]:t[0].type!==\"first\"?[new y({type:\"first\",mode:e}),...t]:(t.slice(1).some(r=>r.type===\"first\"),t)}function Jf(t){return t.length===1&&t[0].type===\"first\"}var z=class t extends y{get isMultiline(){let e=this.environmentName;return[\"lines\",\"multline\",\"multline*\",\"align\",\"split\",\"gather\",\"gathered\"].includes(e)}constructor(e,r,i,n={}){var o,a,s,l;if(super({type:\"array\",isRoot:n.isRoot}),this.environmentName=e,n.columns)n.columns.length===0?this.colFormat=[{align:\"l\"}]:this.colFormat=[...n.columns];else if(n.minColumns){let c=[];for(let u=0;u<n.minColumns;u++)c.push({align:\"l\"});this.colFormat=c}else this.colFormat=[{align:\"l\"},{align:\"l\"},{align:\"l\"},{align:\"l\"},{align:\"l\"},{align:\"l\"},{align:\"l\"},{align:\"l\"},{align:\"l\"},{align:\"l\"}];this.minColumns=(o=n.minColumns)!=null?o:1,this.minRows=(a=n.minRows)!=null?a:1,this.maxRows=(s=n.maxRows)!=null?s:1/0,this._rows=Hf(this,r,{columns:this.colFormat,minColumns:this.minColumns,minRows:this.minRows,maxRows:this.maxRows}),this.rowGaps=i,n.arraycolsep!==void 0&&(this.arraycolsep=n.arraycolsep),this.colSeparationType=n.colSeparationType,n.arraystretch!==void 0&&(this.arraystretch=n.arraystretch),n.mathstyleName&&(this.mathstyleName=n.mathstyleName),n.leftDelim&&(this.leftDelim=n.leftDelim),n.rightDelim&&(this.rightDelim=n.rightDelim),this.classes=(l=n.classes)!=null?l:[]}static fromJson(e){return new t(e.environmentName,e.array,e.rowGaps,e)}toJson(){let e=g(p({},super.toJson()),{environmentName:this.environmentName,array:this._rows.map(r=>r.map(i=>i.map(n=>n.toJson()))),rowGaps:this.rowGaps,columns:this.colFormat,colSeparationType:this.colSeparationType,minColumns:this.minColumns,minRows:this.minRows,maxRows:this.maxRows});return this.arraystretch!==void 0&&(e.arraystretch=this.arraystretch),this.arraycolsep!==void 0&&(e.arraycolsep=this.arraycolsep),this.leftDelim&&(e.leftDelim=this.leftDelim),this.rightDelim&&(e.rightDelim=this.rightDelim),this.isRoot&&(e.isRoot=!0),e.minColumns=this.minColumns,e.minRows=this.minRows,e.maxRows=this.maxRows,this.mathstyleName&&(e.mathstyleName=this.mathstyleName),this.classes.length>0&&(e.classes=this.classes),e}branch(e){var r;if(Ge(e))return(r=this._rows[e[0]][e[1]])!=null?r:void 0}createBranch(e){var r;return Ge(e)?(this.isDirty=!0,(r=this.branch(e))!=null?r:[]):[]}get rowCount(){return this._rows.length}get colCount(){return this._rows[0].length}get maxColumns(){return this.colFormat.filter(e=>!!e.align).length}removeBranch(e){if(Kr(e))return super.removeBranch(e);let[r,...i]=this.branch(e);return r.type,this._rows[e[0]][e[1]]=void 0,i.forEach(n=>{n.parent=void 0,n.parentBranch=void 0}),this.isDirty=!0,i}get hasChildren(){return this.children.length>0}get children(){let e=[];for(let r of this._rows)for(let i of r)if(i)for(let n of i)e.push(...n.children),e.push(n);return[...e,...super.children]}render(e){var R,N,j,T,H,ie;let r=new B({parent:e,mathstyle:this.mathstyleName},this.style),i=r.getRegisterAsEm(\"arrayrulewidth\"),n=r.getRegisterAsEm(\"arraycolsep\"),o=r.getRegisterAsEm(\"doublerulesep\"),a=(N=(R=this.arraystretch)!=null?R:r.getRegisterAsNumber(\"arraystretch\"))!=null?N:1,s=typeof this.arraycolsep==\"number\"?this.arraycolsep:n;this.colSeparationType===\"small\"&&(s=.2778*(new B({parent:e,mathstyle:\"scriptstyle\"}).scalingFactor/e.scalingFactor));let l=a*w0,c=.7*l,u=.3*l,m=0,d=[],h=0,f=this._rows.length;for(let X=0;X<f;++X){let be=this._rows[X];h=Math.max(h,be.length);let ye=new B({parent:r,mathstyle:this.mathstyleName},this.style),Be=c/ye.scalingFactor,Lt=u/ye.scalingFactor,ue={cells:[],height:0,depth:0,pos:0};for(let Jr of be){let fr=this.isMultiline&&Jr&&Wf(Jr)?Uf(Jr,ye,{height:c/ye.scalingFactor,depth:u/ye.scalingFactor}):(j=y.createBox(ye,Jr,{type:\"ignore\"}))!=null?j:new w(null,{type:\"ignore\"});Lt=Math.max(Lt,fr.depth),Be=Math.max(Be,fr.height),ue.cells.push(fr)}let Se=(T=za(this.rowGaps[X]))!=null?T:0;Se>0&&(Se+=u,Lt=Math.max(Lt,Se),Se=0),X<f-1&&!Wa(this.environmentName)&&this.environmentName!==\"cases\"&&this.environmentName!==\"array\"&&(Lt+=r.getRegisterAsEm(\"jot\")),ue.height=Be,ue.depth=Lt,m+=Be,ue.pos=m,m+=Lt+Se,d.push(ue)}let x=this.environmentName===\"array\"&&!this.isMultiline?d[0].height:m/2+Pe,v=[];for(let X=0;X<h;X++){let be=[];for(let ye of d){let Be=ye.cells[X];Be&&(Be.depth=ye.depth,Be.height=ye.height,be.push({box:Be,shift:ye.pos-x}))}be.length>0&&v.push(new te({individualShift:be}))}let b=[],_=!1,S=!1,A=0,E=!this.leftDelim,{colFormat:D}=this;for(let X of D){if(\"align\"in X&&A>=v.length)break;if(\"align\"in X)_?b.push(ja(2*s)):(S||E)&&b.push(ja(s)),b.push(new w(v[A],{classes:\"col-align-\"+X.align})),A++,_=!0,S=!1,E=!1;else if(\"gap\"in X){if(typeof X.gap==\"number\")b.push(ja(X.gap));else{let be=Gf(e,d,x,X.gap);be&&b.push(be)}_=!1,S=!1,E=!1}else if(\"separator\"in X){let be=new w(null,{classes:\"ML__vertical-separator\"});be.height=m,be.setStyle(\"height\",m,\"em\"),be.setStyle(\"border-right\",`${i}em ${X.separator} currentColor`),be.setStyle(\"vertical-align\",-(m-x),\"em\");let ye=0;S?ye=o-i:_&&(ye=s-i),be.left=ye,b.push(be),_=!1,S=!0,E=!1}}_&&!this.rightDelim&&b.push(ja(s));let L=new w(b,{classes:[\"ML__mtable\",...this.classes].join(\" \")});if(this.environmentName===\"array\"&&!this.isMultiline&&(L.height=d[0].height,L.depth=m-d[0].height),(!this.leftDelim||this.leftDelim===\".\")&&(!this.rightDelim||this.rightDelim===\".\"))return this.caret&&(L.caret=this.caret),this.bind(e,L);let K=L.height,$=L.depth,G=this.bind(e,new w([this.bind(e,ci(\"open\",(H=this.leftDelim)!=null?H:\".\",K,$,r,{isSelected:this.isSelected})),L,this.bind(e,ci(\"close\",(ie=this.rightDelim)!=null?ie:\".\",K,$,r,{isSelected:this.isSelected}))],{type:\"ord\"}));return G?(G.setStyle(\"display\",\"inline-block\"),this.caret&&(G.caret=this.caret),this.bind(e,this.attachSupsub(e,{base:G}))):null}_serialize(e){var i;let r=[];if(this.environmentName===\"lines\"&&this._rows.length>1?r.push(\"\\\\displaylines{\"):this.environmentName!==\"lines\"&&r.push(`\\\\begin{${this.environmentName}}`),this.environmentName===\"array\"){if(r.push(\"{\"),this.colFormat!==void 0)for(let n of this.colFormat)\"align\"in n&&typeof n.align==\"string\"?r.push(n.align):\"separator\"in n&&n.separator===\"solid\"?r.push(\"|\"):\"separator\"in n&&n.separator===\"dashed\"&&r.push(\":\");r.push(\"}\")}for(let n=0;n<this._rows.length;n++){for(let o=0;o<this._rows[n].length;o++)o>0&&r.push(\" & \"),r.push(y.serialize(this._rows[n][o],e));if(n<this._rows.length-1){let o=this.rowGaps[n];o!=null&&o.dimension?r.push(`\\\\\\\\[${o.dimension} ${(i=o.unit)!=null?i:\"pt\"}] `):r.push(\"\\\\\\\\ \")}}return this.environmentName===\"lines\"&&this._rows.length>1?r.push(\"}\"):this.environmentName!==\"lines\"&&r.push(`\\\\end{${this.environmentName}}`),P(r)}forEachCell(e){for(let r=0;r<this.rowCount;r++)for(let i=0;i<this.colCount;i++)e(this._rows[r][i],r,i)}getCell(e,r){var i;return(i=this._rows[e])==null?void 0:i[r]}setCell(e,r,i){this.type===\"array\"&&Array.isArray(this._rows)&&this._rows[e][r];for(let o of this._rows[e][r])o.parent=void 0,o.parentBranch=void 0;let n=[new y({type:\"first\",mode:this.mode}),...i.filter(o=>o.type!==\"first\")];this._rows[e][r]=n,ui(this),this.isDirty=!0}addRowBefore(e){this.type===\"array\"&&Array.isArray(this._rows),this._rows.splice(e,0,Array.from({length:this.colCount},()=>Ua(this,!this.isMultiline))),ui(this),this.isDirty=!0}addRowAfter(e){this.type===\"array\"&&Array.isArray(this._rows),this._rows.splice(e+1,0,Array.from({length:this.colCount},()=>Ua(this,!this.isMultiline))),ui(this),this.isDirty=!0}removeRow(e){this.type===\"array\"&&Array.isArray(this._rows)&&this.rowCount>e;let r=this._rows.splice(e,1);for(let i of r)for(let n of i)if(n)for(let o of n)o.parent=void 0,o.parentBranch=void 0;ui(this),this.isDirty=!0}addColumnBefore(e){this.type===\"array\"&&Array.isArray(this._rows);for(let r of this._rows)r.splice(e,0,Ua(this));ui(this),this.isDirty=!0}addColumnAfter(e){this.type===\"array\"&&Array.isArray(this._rows);for(let r of this._rows)r.splice(e+1,0,Ua(this));ui(this),this.isDirty=!0}addColumn(){this.addColumnAfter(this.colCount-1)}removeColumn(e){this.type===\"array\"&&Array.isArray(this._rows)&&this.colCount>e;for(let r of this._rows){let i=r.splice(e,1);for(let n of i)if(n)for(let o of n)o.parent=void 0,o.parentBranch=void 0}ui(this),this.isDirty=!0}get cells(){let e=[];for(let r of this._rows)for(let i of r)i&&e.push(i.filter(n=>n.type!==\"first\"));return e}get rows(){return this._rows}};function Ua(t,e=!1){let r=new y({type:\"first\",mode:t.mode});r.parent=t;let i=[r];if(e){let n=new Le;n.parent=t,i.push(n)}return i}function ui(t){for(let e=0;e<t.rowCount;e++)for(let r=0;r<t.colCount;r++){let i=t.getCell(e,r);if(i)for(let n of i)n&&(n.parent=t,n.parentBranch=[e,r])}}function ja(t){let e=new w(null,{classes:\"ML__arraycolsep\"});return e.width=t,e}function Gf(t,e,r,i){if(!i)return null;let n=[];for(let o of e){let a=y.createBox(t,i,{type:\"ignore\"});a&&(a.depth=o.depth,a.height=o.height,n.push({box:a,shift:o.pos-r}))}return new te({individualShift:n}).wrap(t)}var ot=class t extends y{constructor(e){super({mode:e.mode,command:e.command,style:e.style,body:e.body,type:\"box\"}),this.framecolor=e.framecolor,this.backgroundcolor=e.backgroundcolor,this.padding=e.padding,this.offset=e.offset,this.border=e.border}static fromJson(e){return new t(e)}toJson(){return g(p({},super.toJson()),{framecolor:this.framecolor,backgroundcolor:this.backgroundcolor,padding:this.padding,offset:this.offset,border:this.border})}render(e){var l,c,u,m;let r=y.createBox(e,this.body,{type:\"lift\"});if(!r)return null;let i=e.toEm((l=this.offset)!=null?l:{dimension:0});r.depth+=i,r.setStyle(\"display\",\"inline-block\"),r.setStyle(\"position\",\"relative\"),r.setStyle(\"height\",Math.floor(100*r.height+r.depth)/100,\"em\"),r.setStyle(\"vertical-align\",-Math.floor(100*r.height)/100,\"em\");let n=new B({parent:e},this.style),o=n.toEm((c=this.padding)!=null?c:{register:\"fboxsep\"}),a=new w(null,{classes:\"ML__box\"});a.height=r.height+o,a.depth=r.depth+o,a.setStyle(\"box-sizing\",\"border-box\"),a.setStyle(\"position\",\"absolute\"),a.setStyle(\"top\",-o+.3,\"em\"),a.setStyle(\"left\",0),a.setStyle(\"height\",a.height+a.depth,\"em\"),a.setStyle(\"width\",\"100%\"),this.backgroundcolor&&a.setStyle(\"background-color\",(u=n.toBackgroundColor(this.backgroundcolor))!=null?u:\"transparent\"),this.framecolor&&a.setStyle(\"border\",`${n.getRegisterAsEm(\"fboxrule\",2)}em solid ${(m=n.toColor(this.framecolor))!=null?m:\"black\"}`),this.border&&a.setStyle(\"border\",this.border);let s=new w([a,r],{type:\"lift\"});return s.setStyle(\"display\",\"inline-block\"),s.setStyle(\"position\",\"relative\"),s.setStyle(\"line-height\",0),s.height=r.height+o+(i>0?i:0),s.depth=r.depth+o+(i<0?-i:0),s.setStyle(\"padding-left\",o,\"em\"),s.setStyle(\"padding-right\",o,\"em\"),s.setStyle(\"height\",Math.floor(100*(r.height+r.depth+2*o+Math.abs(i)))/100,\"em\"),s.setStyle(\"margin-top\",-o,\"em\"),s.setStyle(\"top\",Math.floor(100*(r.depth-r.height+2*o-i))/100,\"em\"),s.setStyle(\"vertical-align\",Math.floor(100*(r.depth+2*o))/100,\"em\"),this.caret&&(s.caret=this.caret),this.attachSupsub(e,{base:s})}_serialize(e){return e.skipStyles?P([this.bodyToLatex(e),this.supsubToLatex(e)]):super._serialize(e)}};var nn=class t extends y{constructor(e,r){var i;super({type:\"composition\",mode:(i=r==null?void 0:r.mode)!=null?i:\"math\",value:e})}static fromJson(e){return new t(e.value,e)}toJson(){return super.toJson()}render(e){let r=new w(this.value,{classes:\"ML__composition\",type:\"composition\"});return this.bind(e,r),this.caret&&(r.caret=this.caret),r}_serialize(e){return\"\"}};var ht=class t extends y{constructor(e){super({type:\"error\",value:e,command:e,mode:\"math\"}),this.verbatimLatex=e}static fromJson(e){return new t(e.command)}toJson(){return super.toJson()}render(e){let r=this.createBox(e,{classes:\"ML__error\"});return this.caret&&(r.caret=this.caret),r}};var on=class t extends y{constructor(e,r){super({type:\"group\",mode:r}),this.body=e,this.boxType=e.length>1?\"ord\":\"ignore\",this.skipBoundary=!0,this.displayContainsHighlight=!1,(e==null?void 0:e.length)===1&&e[0].command===\",\"&&(this.captureSelection=!0)}static fromJson(e){return new t(e.body,e.mode)}render(e){let r=y.createBox(e,this.body,{type:this.boxType});return r?(this.caret&&(r.caret=this.caret),this.bind(e,r)):null}_serialize(e){if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex==\"string\")return this.verbatimLatex;let r=ne(this.command,this.mode);return r!=null&&r.serialize?r.serialize(this,e):`{${this.bodyToLatex(e)}}`}};var Y=class t extends y{constructor(e,r,i){super({type:\"leftright\",style:i.style,displayContainsHighlight:!0}),this.variant=e,this.body=r,this.leftDelim=i.leftDelim,this.rightDelim=i.rightDelim}static fromJson(e){var r;return new t((r=e.variant)!=null?r:\"\",e.body,e)}toJson(){let e=super.toJson();return this.variant&&(e.variant=this.variant),this.leftDelim&&(e.leftDelim=this.leftDelim),this.rightDelim&&(e.rightDelim=this.rightDelim),e}_serialize(e){var i,n;let r=this.matchingRightDelim();return this.variant===\"left...right\"?P([\"\\\\left\",(i=this.leftDelim)!=null?i:\".\",this.bodyToLatex(e),\"\\\\right\",r]):this.variant===\"mleft...mright\"?P([\"\\\\mleft\",(n=this.leftDelim)!=null?n:\".\",this.bodyToLatex(e),\"\\\\mright\",r]):P([!this.leftDelim||this.leftDelim===\".\"?\"\":this.leftDelim,this.bodyToLatex(e),r])}matchingRightDelim(){var r,i;if(this.rightDelim&&this.rightDelim!==\"?\")return this.rightDelim;let e=(r=this.leftDelim)!=null?r:\".\";return(i=en[e])!=null?i:e}render(e){var m,d;let r=new B({parent:e},this.style);this.body;let i=new B({parent:e,mathstyle:\"textstyle\"},this.style),n=(m=y.createBox(r,this.body,{type:\"inner\"}))!=null?m:new w(null,{type:\"inner\"}),o=n.height/i.scalingFactor,a=n.depth/i.scalingFactor,s=[];if(this.leftDelim&&s.push(this.bind(i,ci(\"open\",this.leftDelim,o,a,i,{isSelected:this.isSelected,classes:\"ML__open\"+(this.containsCaret?\" ML__contains-caret\":\"\"),mode:this.mode,style:this.style}))),n&&(op(n.children,this,r,o,a),s.push(n)),this.rightDelim){let h=this.containsCaret?\" ML__contains-caret\":\"\",f=this.rightDelim;f===\"?\"&&(r.smartFence?(f=this.matchingRightDelim(),h+=\" ML__smart-fence__close\"):f=\".\"),s.push(this.bind(i,ci(\"close\",f,o,a,i,{isSelected:this.isSelected,classes:h+\" ML__close\",mode:this.mode,style:this.style})))}let l=this.variant===\"mleft...mright\",c=this.leftSibling;c&&(!l&&c.isFunction&&(l=!0),!l&&c.type===\"subsup\"&&((d=c.leftSibling)!=null&&d.isFunction)&&(l=!0));let u=new w(s,{type:l?\"close\":\"inner\",classes:\"ML__left-right\"});return u.setStyle(\"margin-top\",`${-n.depth}em`),u.setStyle(\"height\",`${n.height+n.depth}em`),this.caret&&(u.caret=this.caret),this.bind(r,u.wrap(r))}};function op(t,e,r,i,n){if(t)for(let o=0;o<t.length;o++){let a=t[o];a.type===\"middle\"?(t[o]=e.bind(r,ci(\"inner\",a.value,i,n,r,{isSelected:e.isSelected})),t[o].caret=a.caret,t[o].isSelected=a.isSelected,t[o].cssId=a.cssId,t[o].htmlData=a.htmlData,t[o].htmlStyle=a.htmlStyle,t[o].attributes=a.attributes,t[o].cssProperties=a.cssProperties):a.children&&op(a.children,e,r,i,n)}}var an=class t extends y{constructor(e,r){var i;super({type:\"macro\",command:e,style:r.style}),this.body=r.body,r.captureSelection===void 0?r.args?this.captureSelection=!1:this.captureSelection=!0:this.captureSelection=r.captureSelection,this.macroArgs=r.args,this.expand=(i=r.expand)!=null?i:!1}static fromJson(e){return new t(e.command,e)}toJson(){let e=super.toJson();return this.expand&&(e.expand=!0),this.captureSelection!==void 0&&(e.captureSelection=this.captureSelection),this.macroArgs&&(e.args=this.macroArgs),e}_serialize(e){var r;return e.expandMacro&&this.expand?this.bodyToLatex(e):this.command+((r=this.macroArgs)!=null?r:\"\")}applyStyle(e,r){let i={};e.color&&(i.color=e.color),e.backgroundColor&&(i.backgroundColor=e.backgroundColor),super.applyStyle(i,r)}render(e){let r=y.createBox(e,this.body,{type:\"lift\"});return r?(this.caret&&(r.caret=this.caret),this.bind(e,r)):null}},Ja=class t extends y{constructor(){super({type:\"macro-argument\"})}static fromJson(e){return new t}toJson(){return super.toJson()}_serialize(e){return\"\"}render(e){return null}};var sn=class t extends y{constructor(e,r,i=!1,n,o){var a;super({type:\"prompt\",mode:(a=o==null?void 0:o.mode)!=null?a:\"math\",style:o==null?void 0:o.style,command:\"\\\\placeholder\"}),this.body=n,this.correctness=r,this.placeholderId=e,this.locked=i,this.captureSelection=this.locked}static fromJson(e){return new t(e.placeholderId,e.correctness,e.locked,e.body,e)}toJson(){let e=super.toJson();return this.placeholderId&&(e.placeholderId=this.placeholderId),this.body||delete e.body,this.body&&(e.body=this.body.filter(r=>r.type!==\"first\").map(r=>r.toJson())),this.correctness&&(e.correctness=this.correctness),e.locked=this.locked,e}render(e){var E,D;let r=new B({parent:e}),i=r.getRegisterAsEm(\"fboxsep\"),n=i,o=i,a=y.createBox(e,this.body);if(!a)return null;let s=!this.body||this.body.length===0||this.body.every(L=>L.type===\"first\"),l=s?new Le({mode:this.mode,style:this.style}).render(new B({parent:e,isPhantom:!0})):null;l==null||l.height,l==null||l.depth;let c=(E=l==null?void 0:l.height)!=null?E:r.metrics.xHeight,u=(D=l==null?void 0:l.depth)!=null?D:c/2;a.height||(a.height=s?c:r.metrics.xHeight),a.depth||(a.depth=s?u:r.metrics.defaultRuleThickness);let m=s?u-c:a.depth-a.height;a.setStyle(\"vertical-align\",m,\"em\"),this.correctness===\"correct\"?a.setStyle(\"color\",\"var(--correct-color, var(--ML__correct-color))\"):this.correctness===\"incorrect\"&&a.setStyle(\"color\",\"var(--incorrect-color, var(--ML__incorrect-color))\");let d=new w(a,{type:\"ord\"});d.height=a.height,d.depth=a.depth,d.setStyle(\"display\",\"inline-block\"),d.setStyle(\"height\",a.height+a.depth,\"em\"),d.setStyle(\"vertical-align\",-o,\"em\"),d.setStyle(\"position\",\"relative\"),d.setStyle(\"z-index\",1);let h=\"ML__prompt \";this.locked?h+=\" ML__lockedPromptBox \":h+=\" ML__editablePromptBox \",this.correctness===\"correct\"?h+=\" ML__correctPromptBox \":this.correctness===\"incorrect\"&&(h+=\" ML__incorrectPromptBox \"),this.containsCaret&&(h+=\" ML__focusedPromptBox \");let f=new w(null,{classes:h,attributes:{part:\"prompt\"}});f.height=d.height+o,f.depth=d.depth+o,f.width=d.width+2*n,f.setStyle(\"position\",\"absolute\"),f.setStyle(\"z-index\",0),f.setStyle(\"display\",\"block\"),f.setStyle(\"pointer-events\",\"auto\");let x=d.height+d.depth+2*o;f.setStyle(\"height\",Math.max(x,.6),\"em\");let v=d.width+2*n;s&&(v=Math.max(v,3*n||.8)),f.setStyle(\"width\",Math.max(v,.6),\"em\"),f.setStyle(\"top\",i+o,\"em\"),s?f.setStyle(\"left\",-1.5*n,\"em\"):n!==0&&f.setStyle(\"left\",-n,\"em\");let b=\"\";this.correctness===\"incorrect\"&&(b+='<line x1=\"3%\"  y1=\"97%\" x2=\"97%\" y2=\"3%\" stroke-width=\"0.5\" stroke=\"var(--incorrect-color, var(--ML__incorrect-color))\" stroke-linecap=\"round\" />'),b&&(f.svgOverlay=b);let _=new w([f,d],{classes:\"ML__prompt-atom\"});d.setStyle(\"line-height\",1),_.setStyle(\"position\",\"relative\"),_.setStyle(\"display\",\"inline-block\"),_.setStyle(\"line-height\",0),_.height=d.height+o+.2,_.depth=d.depth+o,_.left=n,_.right=n,_.setStyle(\"height\",d.height+2*o,\"em\"),_.setStyle(\"top\",d.depth-d.height-o/2,\"em\"),_.setStyle(\"vertical-align\",d.depth+o/2,\"em\"),_.setStyle(\"margin-left\",.5,\"em\"),_.setStyle(\"margin-right\",.5,\"em\"),this.caret&&(_.caret=this.caret);let S=this.attachSupsub(e,{base:_}),A=this.bind(r,S);return A&&this.id&&(f.atomID=this.id,d.atomID=this.id,_.atomID=this.id),A}_serialize(e){var n;let r=(n=this.bodyToLatex(e))!=null?n:\"\";if(e.skipPlaceholders)return r;let i=\"\\\\placeholder\";return this.placeholderId&&(i+=`[${this.placeholderId}]`),this.correctness===\"correct\"?i+=\"[correct]\":this.correctness===\"incorrect\"&&(i+=\"[incorrect]\"),this.locked&&(i+=\"[locked]\"),W(i,r)}};var sr=class t extends y{constructor(e){super({type:\"subsup\",style:e==null?void 0:e.style}),this.subsupPlacement=\"auto\"}get children(){if(!this._children){let e=[],r=this.branch(\"subscript\");if(r)for(let n of r)e.push(...n.children),e.push(n);let i=this.branch(\"superscript\");if(i)for(let n of i)e.push(...n.children),e.push(n);this._children=e}return this._children}static fromJson(e){let r=new t(e);for(let i of Pr)e[i]&&r.setChildren(e[i],i);return r}render(e){var a;let r=new B({parent:e,isPhantom:!0}),i=this.leftSibling,n=(a=i.render(r))!=null?a:new w(null),o=new w(null);return o.height=n.height,o.depth=n.depth,this.attachSupsub(e,{base:o,isCharacterBox:i.isCharacterBox(),type:\"ignore\"})}_serialize(e){return this.supsubToLatex(e)}};function ln(t){return t?!/^(<$$>|<$>|<space>|<{>|<}>|#[0-9\\?]|\\\\.+)$/.test(t):!1}var Ga=class{constructor(e,r,i){this.errors=[];this.index=0;this.endCount=0;var n,o,a,s;i!=null||(i={}),this.tokens=e,this.context=r instanceof B&&!(i!=null&&i.parseMode)&&!i.mathstyle?r:new B({from:r,mathstyle:i.mathstyle},i.style),this.args=(n=i.args)!=null?n:void 0,this.smartFence=this.context.smartFence,this.parsingContext={parent:void 0,mathlist:[],style:(o=i.style)!=null?o:{},parseMode:(a=i.parseMode)!=null?a:\"math\",mathstyle:(s=i.mathstyle)!=null?s:\"displaystyle\",tabular:!1}}beginContext(e){var n,o,a,s,l,c;if(e!=null&&e.root){this.parsingContext={parent:this.parsingContext.parent,mathlist:[],style:{},parseMode:(n=e==null?void 0:e.mode)!=null?n:\"math\",mathstyle:(o=e==null?void 0:e.mathstyle)!=null?o:\"displaystyle\",tabular:(a=e==null?void 0:e.tabular)!=null?a:!1};return}let r=this.parsingContext,i={parent:r,mathlist:[],style:p({},r.style),parseMode:(s=e==null?void 0:e.mode)!=null?s:r.parseMode,mathstyle:(l=e==null?void 0:e.mathstyle)!=null?l:r.mathstyle,tabular:(c=e==null?void 0:e.tabular)!=null?c:!1};this.parsingContext=i}endContext(){this.parsingContext=this.parsingContext.parent}onError(e){this.errors.push(p({before:Er(this.tokens.slice(this.index,this.index+10)),after:Er(this.tokens.slice(Math.max(0,this.index-10),this.index))},e))}get mathlist(){return this.parsingContext.mathlist}set mathlist(e){this.parsingContext.mathlist=e}get parseMode(){return this.parsingContext.parseMode}set parseMode(e){this.parsingContext.parseMode=e}get tabularMode(){return this.parsingContext.tabular}get style(){let e=this.parsingContext;for(;e;){if(e.style)return p({},e.style);e=e.parent}return{}}set style(e){this.parsingContext.style=e}end(){return this.endCount++,this.index>=this.tokens.length||this.endCount>1e3}next(){this.index+=1}get(){return this.endCount=0,this.index<this.tokens.length?this.tokens[this.index++]:\"\"}peek(){return this.tokens[this.index]}expandUnicode(){if(!this.peek()||this.parseMode!==\"math\")return;let e=Lu(this.peek());e&&this.tokens.splice(this.index,1,...ji(e))}match(e){return this.tokens[this.index]===e?(this.index++,!0):!1}lastSubsupAtom(){let e;return this.mathlist.length>0&&(e=this.mathlist[this.mathlist.length-1],e.type===\"subsup\"||e.subsupPlacement!==void 0)||(e=new sr({style:this.style}),this.mathlist.push(e)),e}hasPattern(e){return e.test(this.tokens[this.index])}hasInfixCommand(){var r;let{index:e}=this;if(e<this.tokens.length&&this.tokens[e].startsWith(\"\\\\\")){let i=ne(this.tokens[e],this.parseMode);return!i||i.definitionType===\"symbol\"||i.ifMode&&!i.ifMode.includes(this.parseMode)?!1:(r=i.infix)!=null?r:!1}return!1}matchColumnSeparator(){return!this.tabularMode||this.peek()!==\"&\"?!1:(this.index++,!0)}matchRowSeparator(){if(!this.tabularMode)return!1;let e=this.peek();return e!==\"\\\\\\\\\"&&e!==\"\\\\cr\"&&e!==\"\\\\tabularnewline\"?!1:(this.index++,!0)}placeholder(){var r;let e=(r=this.args)==null?void 0:r.call(this,\"?\");return e?ge(e,{parseMode:this.parseMode,mathstyle:\"textstyle\"}):[new Le({mode:this.parseMode,style:this.style})]}skipWhitespace(){for(;this.match(\"<space>\"););}skipUntilToken(e){let r=this.tokens[this.index];for(;r&&r!==e;)r=this.tokens[++this.index];r===e&&this.index++}skipFiller(){for(;this.match(\"\\\\relax\")||this.match(\"<space>\"););}matchKeyword(e){let r=this.index,i=this.end(),n=\"\";for(;!i;){let a=this.get();ln(a)?(n+=a,i=this.end()||n.length>=e.length):i=!0}let o=e.toUpperCase()===n.toUpperCase();return o||(this.index=r),o}scanString(){let e=\"\";for(;!this.end();){let r=this.peek();if(r===\"]\")return e;if(r===\"<space>\")e+=\" \";else if(r.startsWith(\"\\\\\"))this.onError({code:\"unexpected-command-in-string\"}),e+=r.substring(1);else if(ln(r))e+=r;else return e;this.next()}return e}scanBalancedString(){let e=\"\",r=this.end(),i=1;for(;!r;){let n=this.get();n===\"<space>\"?e+=\" \":n===\"<{>\"?(e+=\"{\",i+=1):n===\"<}>\"?(i-=1,i>0?e+=\"}\":this.index-=1):n===\"<$>\"?e+=\"$\":n===\"<$$>\"?e+=\"$$\":e+=n,r=i===0||this.end()}return e}scanLiteralGroup(){var i;if(!this.match(\"<{>\"))return\"\";let e=\"\",r=1;for(;r>0&&!this.end();){let n=this.get();n===\"<}>\"?(r-=1,r>0&&(e+=\"}\")):n===\"<{>\"?(r+=1,e+=\"{\"):(/\\\\[a-zA-Z]+$/.test(e)&&/^[a-zA-Z]/.test(n)&&(e+=\" \"),e+=(i={\"<space>\":\" \",\"<$$>\":\"$$\",\"<$>\":\"$\"}[n])!=null?i:n)}return e}scanNumber(e=!0){var l,c;let r=!1,i=this.peek();for(;i===\"<space>\"||i===\"+\"||i===\"-\";)this.get(),i===\"-\"&&(r=!r),i=this.peek();e=!!e;let n=10,o=/\\d/;if(this.match(\"'\"))n=8,o=/[0-7]/,e=!0;else if(this.match('\"'))n=16,o=/[\\dA-F]/,e=!0;else if(this.match(\"x\"))n=16,o=/[\\dA-Fa-f]/,e=!0;else if(this.match(\"`\"))return i=this.get(),i?i.length===2&&i.startsWith(\"\\\\\")?{number:(r?-1:1)*((l=i.codePointAt(1))!=null?l:0),base:\"alpha\"}:{number:(r?-1:1)*((c=i.codePointAt(0))!=null?c:0),base:\"alpha\"}:null;let a=\"\";for(;this.hasPattern(o);)a+=this.get();if(!e&&(this.match(\".\")||this.match(\",\")))for(a+=\".\";this.hasPattern(o);)a+=this.get();let s=e?Number.parseInt(a,n):Number.parseFloat(a);return Number.isNaN(s)?null:{number:r?-s:s,base:n===16?\"hexadecimal\":n===8?\"octal\":\"decimal\"}}scanRegister(){var o;let e=this.index,r=this.scanNumber(!1);if(this.skipWhitespace(),this.match(\"\\\\relax\"))return r;let i=!1;if(r===null)for(;;){let a=this.peek();if(a===\"-\")i=!i;else if(a!==\"+\")break;this.next(),this.skipWhitespace()}if(this.match(\"\\\\global\")){this.skipWhitespace();let a=this.get();return a.startsWith(\"\\\\\")?r?{register:a,global:!0,factor:(i?-1:1)*r.number}:i?{register:a,global:!0,factor:-1}:{register:a,global:!0}:(this.index=e,null)}let n=this.get();return n!=null&&n.startsWith(\"\\\\\")?(n=n.substring(1),this.context.registers[n]?!i||r!==null?{register:n,factor:(i?-1:1)*((o=r==null?void 0:r.number)!=null?o:1)}:{register:n}:(this.index=e,null)):(this.index=e,null)}scanValue(){let e=this.scanRegister();if(e)return e;let r=this.index,i=this.scanGlueOrDimen();if(i&&(\"unit\"in i||\"glue\"in i&&\"unit\"in i.glue))return i;this.index=r;let n=this.scanNumber();if(n)return n;if(this.end()||!ln(this.peek()))return null;let o=this.scanString();return o.length>0?{string:o}:null}scanDimen(){let e=this.scanNumber(!1);if(e===null)return null;let r=e.number;this.skipWhitespace(),this.matchKeyword(\"true\"),this.skipWhitespace();let i;return this.matchKeyword(\"pt\")?i=\"pt\":this.matchKeyword(\"mm\")?i=\"mm\":this.matchKeyword(\"cm\")?i=\"cm\":this.matchKeyword(\"ex\")?i=\"ex\":this.matchKeyword(\"px\")?i=\"px\":this.matchKeyword(\"em\")?i=\"em\":this.matchKeyword(\"bp\")?i=\"bp\":this.matchKeyword(\"dd\")?i=\"dd\":this.matchKeyword(\"pc\")?i=\"pc\":this.matchKeyword(\"in\")?i=\"in\":this.matchKeyword(\"mu\")&&(i=\"mu\"),i?{dimension:r,unit:i}:{dimension:r}}scanGlueOrDimen(){let e=this.scanDimen();if(e===null)return null;if(this.skipWhitespace(),this.match(\"\\\\relax\"))return e;let r={glue:e};if(this.matchKeyword(\"plus\")){let i=this.scanDimen();if(i)r.grow=i;else return r}if(this.skipWhitespace(),this.match(\"\\\\relax\"))return r;if(this.skipWhitespace(),this.matchKeyword(\"minus\")){let i=this.scanDimen();if(i)r.shrink=i;else return r}return!r.grow&&!r.shrink?e:r}scanColspec(){this.skipWhitespace();let e=[];for(;!this.end()&&!(this.peek()===\"<}>\"||this.peek()===\"]\");){let r=this.get();r===\"c\"||r===\"r\"||r===\"l\"?e.push({align:r}):r===\"|\"?e.push({separator:\"solid\"}):r===\":\"?e.push({separator:\"dashed\"}):r===\"@\"&&(this.match(\"<{>\")&&(this.beginContext({mode:\"math\"}),e.push({gap:this.scan(i=>i===\"<}>\")}),this.endContext()),this.match(\"<}>\")||this.onError({code:\"unbalanced-braces\"}))}return e}scanModeSet(){let e;if(this.match(\"\\\\(\")&&(e=\"textstyle\"),!e&&this.match(\"\\\\[\")&&(e=\"displaystyle\"),!e)return null;this.beginContext({mode:\"math\",mathstyle:e});let r=this.scan(i=>i===(e===\"displaystyle\"?\"\\\\]\":\"\\\\)\"));return this.match(e===\"displaystyle\"?\"\\\\]\":\"\\\\)\")||this.onError({code:\"unbalanced-mode-shift\"}),this.endContext(),r}scanModeShift(){let e=\"\";if(this.match(\"<$>\")&&(e=\"<$>\"),!e&&this.match(\"<$$>\")&&(e=\"<$$>\"),!e)return null;this.beginContext({mode:\"math\",mathstyle:e===\"<$>\"?\"textstyle\":\"displaystyle\"});let r=this.scan(i=>i===e);return this.match(e)||this.onError({code:\"unbalanced-mode-shift\"}),this.endContext(),r}scanEnvironment(){if(!this.match(\"\\\\begin\"))return null;let e=this.scanArgument(\"string\");if(!e)return null;let r=Tu(e);if(!r)return this.onError({code:\"unknown-environment\",arg:e}),null;let i=[];if(r.params)for(let l of r.params)if(l.isOptional)i.push(this.scanOptionalArgument(l.type));else{let c=this.scanArgument(l.type);c||this.onError({code:\"missing-argument\",arg:e}),i.push(c)}this.beginContext({tabular:r.tabular,root:r.rootOnly});let n=[],o=[],a=[],s=!1;do if(this.end()&&(this.onError({code:\"unbalanced-environment\",arg:e}),s=!0),!s&&this.match(\"\\\\end\")&&(this.scanArgument(\"string\")!==e&&this.onError({code:\"unbalanced-environment\",arg:e}),s=!0),!s)if(this.matchColumnSeparator())a.push(this.mathlist),this.mathlist=[];else if(this.matchRowSeparator()){a.push(this.mathlist),this.mathlist=[];let l=null;this.skipWhitespace(),this.match(\"[\")&&(l=this.scanDimen(),this.skipWhitespace(),this.match(\"]\")),o.push(l!=null?l:{dimension:0}),n.push(a),a=[]}else this.mathlist.push(...this.scan(l=>[\"<}>\",\"&\",\"\\\\end\",\"\\\\cr\",\"\\\\\\\\\",\"\\\\tabularnewline\"].includes(l)));while(!s);return a.push(this.mathlist),a.length>0&&n.push(a),this.endContext(),r.rootOnly&&(this.index=this.tokens.length),r.createAtom(e,n,o,i,this.context.maxMatrixCols)}scanExpression(){let e=this.mathlist;if(this.mathlist=[],this.parseExpression()){let r=this.mathlist;return this.mathlist=e,r}return this.mathlist=e,null}scan(e){this.beginContext(),e||(e=s=>s===\"<}>\");let r=\"\",i=null,n=[],o=null;for(;!this.end()&&!e(this.peek());)this.hasInfixCommand()&&!r?(r=this.get(),i=ne(r,\"math\"),i&&(n=this.scanArguments(i)[1]),o=this.mathlist,this.mathlist=[]):this.parseExpression();let a;return r?(n.unshift(this.mathlist),o&&n.unshift(o),a=[i.createAtom({command:r,args:n,style:this.style,mode:this.parseMode})]):a=this.mathlist,this.endContext(),a}scanGroup(){let e=this.index;if(!this.match(\"<{>\"))return null;let r=this.scan(n=>n===\"<}>\");if(this.match(\"<}>\")||this.onError({code:\"unbalanced-braces\"}),r.length===1&&r[0].type===\"placeholder\")return r[0];let i=new on(r,this.parseMode);return i.verbatimLatex=Er(this.tokens.slice(e,this.index)),i}scanSmartFence(){if(this.skipWhitespace(),!this.match(\"(\"))return null;this.beginContext();let e=1;for(;!this.end()&&e!==0;)this.match(\"(\")&&(e+=1),this.match(\")\")&&(e-=1),e!==0&&this.parseExpression();let r=new Y(\"\",this.mathlist,{leftDelim:\"(\",rightDelim:e===0?\")\":\"?\"});return this.endContext(),r}scanDelim(){this.skipWhitespace();let e=this.peek();if(!e)return this.onError({code:\"unexpected-end-of-string\"}),null;if(!ln(e)&&!e.startsWith(\"\\\\\"))return null;this.next();let r=ne(e,\"math\");return r?r.definitionType===\"function\"&&r.ifMode&&!r.ifMode.includes(this.parseMode)?(this.onError({code:\"unexpected-delimiter\",arg:e}),null):r.definitionType===\"symbol\"&&(r.type===\"mopen\"||r.type===\"mclose\")||/^(\\.|\\?|\\||<|>|\\\\vert|\\\\Vert|\\\\\\||\\\\surd|\\\\uparrow|\\\\downarrow|\\\\Uparrow|\\\\Downarrow|\\\\updownarrow|\\\\Updownarrow|\\\\mid|\\\\mvert|\\\\mVert)$/.test(e)?e:(this.onError({code:\"unexpected-delimiter\",arg:e}),null):(this.onError({code:\"unknown-command\",arg:e}),null)}scanLeftRight(){var o;if(this.match(\"\\\\right\"))return this.onError({code:\"unbalanced-braces\"}),new ht(\"\\\\right\");if(this.match(\"\\\\mright\"))return this.onError({code:\"unbalanced-braces\"}),new ht(\"\\\\mright\");let e=\"\\\\right\";if(!this.match(\"\\\\left\")){if(!this.match(\"\\\\mleft\"))return null;e=\"\\\\mright\"}let r=this.scanDelim();if(!r)return this.onError({code:\"unexpected-delimiter\"}),new ht(e===\"\\\\right\"?\"\\\\left\":\"\\\\mleft\");for(this.beginContext();!this.end()&&!this.match(e);)this.parseExpression();let i=this.mathlist;this.endContext();let n=(o=this.scanDelim())!=null?o:\".\";return new Y(e===\"\\\\right\"?\"left...right\":\"mleft...mright\",i,{leftDelim:r,rightDelim:n,style:this.style})}parseSupSub(){if(this.parseMode!==\"math\")return!1;let e=this.peek();if(e!==\"^\"&&e!==\"_\"&&e!==\"'\")return!1;let r=this.lastSubsupAtom();for(;e===\"^\"||e===\"_\"||e===\"'\";)this.match(\"'\")?this.match(\"'\")?r.addChild(new y({type:\"mord\",command:\"\\\\doubleprime\",mode:\"math\",value:\"\\u2032\\u2032\"}),\"superscript\"):r.addChild(new y({type:\"mord\",command:\"\\\\prime\",mode:\"math\",value:\"\\u2032\"}),\"superscript\"):(this.match(\"^\")||this.match(\"_\"))&&r.addChildren(C(this.scanArgument(\"expression\")),e===\"_\"?\"subscript\":\"superscript\"),e=this.peek();return!0}parseLimits(){if(this.parseMode!==\"math\")return!1;let e=this.match(\"\\\\limits\"),r=!e&&this.match(\"\\\\nolimits\"),i=!r&&!e&&this.match(\"\\\\displaylimits\");if(!e&&!r&&!i)return!1;let n=this.mathlist.length>0?this.mathlist[this.mathlist.length-1]:null;return n===null?!1:(n.explicitSubsupPlacement=!0,e&&(n.subsupPlacement=\"over-under\"),r&&(n.subsupPlacement=\"adjacent\"),i&&(n.subsupPlacement=\"auto\"),!0)}scanArguments(e){if(!(e!=null&&e.params))return[void 0,[]];let r,i=[],n=e.infix?2:0;for(;n<e.params.length;){let o=e.params[n];o.type===\"rest\"?i.push(this.scan(a=>[\"<}>\",\"&\",\"\\\\end\",\"\\\\cr\",\"\\\\\\\\\",\"\\\\tabularnewline\",\"\\\\right\"].includes(a))):o.isOptional?i.push(this.scanOptionalArgument(o.type)):o.type.endsWith(\"*\")?r=o.type.slice(0,-1):i.push(this.scanArgument(o.type)),n+=1}return[r,i]}scanSymbolOrLiteral(){let e=this.peek();if(!e)return null;this.next();let r;if(ln(e)){let i=ve.createAtom(this.parseMode,e,p({},this.style));return i?[i]:null}if(r=this.scanMacro(e),r)return[r];if(e.startsWith(\"\\\\\")){let i=ne(e,this.parseMode);if(!i)return this.onError({code:\"unknown-command\",arg:e}),[new ht(e)];if(i.definitionType===\"symbol\"){let n=p({},this.style);i.variant&&(n.variant=i.variant),r=new y({type:i.type,command:e,style:n,value:String.fromCodePoint(i.codepoint),mode:this.parseMode,verbatimLatex:e})}else{if(i.applyMode||i.applyStyle||i.infix)return this.onError({code:\"invalid-command\",arg:e}),[new ht(e)];i.createAtom&&(r=i.createAtom({command:e,args:[],style:this.style,mode:this.parseMode}))}}return r?[r]:null}scanArgument(e){var n;this.skipFiller();let r=this.parseMode;if(e===\"auto\"&&(e=r),!this.match(\"<{>\")){if(e===\"string\")return this.scanString();if(e===\"value\")return this.scanValue();if(e===\"delim\")return(n=this.scanDelim())!=null?n:\".\";if(e===\"expression\")return this.scanExpression();if(e===\"math\"){e!==r&&this.beginContext({mode:\"math\"});let o=this.scanSymbolOrLiteral();return e!==r&&this.endContext(),o}if(e===\"text\"){e!==r&&this.beginContext({mode:\"text\"});let o=this.scanSymbolOrLiteral();return e!==r&&this.endContext(),o}return e===\"balanced-string\"?null:e===\"rest\"?this.scan(o=>[\"<}>\",\"&\",\"\\\\end\",\"\\\\cr\",\"\\\\\\\\\",\"\\\\tabularnewline\",\"\\\\right\"].includes(o)):null}if(e===\"text\"){this.beginContext({mode:\"text\"});do this.mathlist.push(...this.scan());while(!this.match(\"<}>\")&&!this.end());let o=this.mathlist;return this.endContext(),{group:o}}if(e===\"math\"){this.beginContext({mode:\"math\"});do this.mathlist.push(...this.scan());while(!this.match(\"<}>\")&&!this.end());let o=this.mathlist;return this.endContext(),{group:o}}if(e===\"rest\"){let o=this.scan();return this.match(\"<}>\")||this.onError({code:\"unbalanced-braces\"}),{group:o}}let i=null;if(e===\"expression\"){this.beginContext({mode:\"math\"});do this.mathlist.push(...this.scan());while(!this.match(\"<}>\")&&!this.end());let o=this.mathlist;return this.endContext(),{group:o}}return e===\"string\"?i=this.scanString():e===\"balanced-string\"?i=this.scanBalancedString():e===\"colspec\"?i=this.scanColspec():e===\"value\"&&(i=this.scanValue()),this.skipUntilToken(\"<}>\"),i}scanOptionalArgument(e){if(e=e===\"auto\"?this.parseMode:e,this.skipFiller(),!this.match(\"[\"))return null;let r=null;for(;!this.end()&&!this.match(\"]\");)if(e===\"string\")r=this.scanString();else if(e===\"value\")r=this.scanValue();else if(e===\"colspec\")r=this.scanColspec();else if(e===\"bbox\"){let i={},n=this.scanString().toLowerCase().trim().split(/,(?![^(]*\\)(?:(?:[^(]*\\)){2})*[^\"]*$)/);for(let o of n){let a=o.match(/^\\s*([\\d.]+)\\s*([a-z]{2})/);if(a)i.padding={dimension:Number.parseFloat(a[1]),unit:a[2]};else{let s=o.match(/^\\s*border\\s*:\\s*(.*)/);s?i.border=s[1]:i.backgroundcolor={string:o}}}r=i}else e===\"math\"&&(this.beginContext({mode:\"math\"}),r=this.mathlist.concat(this.scan(i=>i===\"]\")),this.endContext());return r}scanSymbolOrCommand(e){var o,a,s;if(e===\"\\\\placeholder\"){let l=this.scanOptionalArgument(\"string\"),c=this.scanOptionalArgument(\"math\"),u=y.serialize(c,{defaultMode:\"math\"}),m=[],d;!d&&u===\"correct\"?d=\"correct\":!d&&u===\"incorrect\"?d=\"incorrect\":u!==\"\"&&(m=c);let h=this.scanOptionalArgument(\"string\")===\"locked\",f=this.scanArgument(\"auto\"),x;return f&&Array.isArray(f)&&f.length>0?x=f:f&&typeof f==\"object\"&&\"group\"in f?x=f.group:x=m,l?[new sn(l,d,h,x!=null?x:m,{mode:this.parseMode,style:this.style})]:[new Le({mode:this.parseMode,style:this.style})]}if(e===\"\\\\renewcommand\"||e===\"\\\\newcommand\"||e===\"\\\\providecommand\"||e===\"\\\\def\"){let l=this.index,c=this.scanLiteralGroup()||this.next();if(!c)return null;if(this.context.registers[c.substring(1)]){let u=this.scanArgument(\"string\");u!==null&&(this.context.registers[c.substring(1)]=u);let m=P([e,Er(this.tokens.slice(l,this.index))]);return[new y({type:\"text\",value:\"\",verbatimLatex:m})]}}let r=this.scanMacro(e);if(r)return[r];let i=ne(e,this.parseMode);if(!i)return this.parseMode===\"text\"?(/[a-zA-Z]/.test((o=this.peek())!=null?o:\"\")&&(e+=\" \"),[...e].map(l=>new y({type:\"text\",value:l,mode:\"text\",style:this.style}))):(this.onError({code:\"unknown-command\",arg:e}),[new ht(e)]);let n=this.index;if(i.definitionType===\"symbol\"){let l=p({},this.style);i.variant&&(l.variant=i.variant),r=new y({type:i.type,command:e,style:l,value:String.fromCodePoint(i.codepoint),mode:this.parseMode})}else{if(i.ifMode&&!i.ifMode.includes(this.parseMode))return[];let l=this.parseMode;i.applyMode&&(this.parseMode=i.applyMode);let c,u=[];if(i.parse?u=i.parse(this):[c,u]=this.scanArguments(i),this.parseMode=l,i.applyMode&&!i.applyStyle&&!i.createAtom)return C(u[0]);if(i.infix)return this.onError({code:\"too-many-infix-commands\",arg:e}),null;if(typeof i.createAtom==\"function\")r=i.createAtom({command:e,args:u,style:this.style,mode:this.parseMode}),c&&(r.body=C(this.scanArgument(c)));else if(typeof i.applyStyle==\"function\"){let m=i.applyStyle(this.style,e,u,this.context),d=this.parseMode;if(i.applyMode&&(this.parseMode=i.applyMode),c){let h=this.style;this.style=m;let f=this.scanArgument(c);return this.style=h,this.parseMode=d,C(f)}this.style=m}else r=new y({type:\"mord\",command:(a=i.command)!=null?a:e,style:p({},this.style),value:e,mode:(s=i.applyMode)!=null?s:this.parseMode})}if(!r)return null;if(r instanceof y&&r.verbatimLatex===void 0&&!/^\\\\(llap|rlap|class|cssId|htmlData)$/.test(e)){let l=P([e,Er(this.tokens.slice(n,this.index))]);l&&(r.verbatimLatex=l)}if(r.verbatimLatex===null&&(r.verbatimLatex=void 0),r.isFunction&&this.smartFence){let l=this.scanSmartFence();if(l)return[r,l]}return[r]}scanSymbolCommandOrLiteral(){this.expandUnicode();let e=this.get();if(!e)return null;if(ln(e)){let r=ve.createAtom(this.parseMode,e,p({},this.style));if(!r)return null;if(r.isFunction&&this.smartFence){let i=this.scanSmartFence();if(i)return[r,i]}return[r]}return e.startsWith(\"\\\\\")?this.scanSymbolOrCommand(e):e===\"<space>\"?this.parseMode===\"text\"?[new qe(\" \",\" \",this.style)]:null:(e===\"<}>\"?this.onError({latex:\"\",code:\"unbalanced-braces\"}):this.onError({latex:\"\",code:\"unexpected-token\",arg:e}),null)}scanMacro(e){var a;let r=this.context.getMacro(e);if(!r)return null;let i=this.index,n=r.args,o={\"?\":(a=this.args)==null?void 0:a.call(this,\"?\")};for(let s=1;s<=n;s++){let l=this.scanLiteralGroup();if(!l){let c=this.index;this.scanExpression(),l=Er(this.tokens.slice(c,this.index))}o[s]=l}return new an(e,{expand:r.expand,captureSelection:r.captureSelection,args:i===this.index?null:Er(this.tokens.slice(i,this.index)),style:this.parsingContext.style,body:ge(r.def,{context:this.context,parseMode:this.parseMode,args:s=>o[s],mathstyle:this.parsingContext.mathstyle,style:this.parsingContext.style})})}parseExpression(){var r,i,n,o;let e=(o=(n=(i=(r=this.scanEnvironment())!=null?r:this.scanModeShift())!=null?i:this.scanModeSet())!=null?n:this.scanGroup())!=null?o:this.scanLeftRight();if(e===null){if(this.parseSupSub()||this.parseLimits())return!0;e=this.scanSymbolCommandOrLiteral()}return e?(ee(e)?this.mathlist.push(...e):this.mathlist.push(e),!0):!1}};function ge(t,e){var o,a,s,l;let r=(o=e==null?void 0:e.args)!=null?o:void 0,i=new Ga(ji(t,r),e==null?void 0:e.context,{args:r,mathstyle:(a=e==null?void 0:e.mathstyle)!=null?a:\"displaystyle\",parseMode:(s=e==null?void 0:e.parseMode)!=null?s:\"math\",style:(l=e==null?void 0:e.style)!=null?l:{}}),n=[];for(;!i.end();)n.push(...i.scan(()=>!1));return n}function Xa(t,e){var i;let r=new Ga(ji(t,null),e==null?void 0:e.context,{mathstyle:\"displaystyle\",parseMode:(i=e==null?void 0:e.parseMode)!=null?i:\"math\"});for(;!r.end();)r.scan();return r.errors}var Qn=class t extends y{constructor(e,r){super({type:\"chem\"},{command:e,mode:\"math\"});let i=me.go(k.go(r,e===\"\\\\pu\"?\"pu\":\"ce\"),!1);this.body=ge(i),this._verbatimLatex=e+\"{\"+r+\"}\",this.arg=r,this.captureSelection=!0}static fromJson(e){return new t(e.command,e.arg)}set verbatimLatex(e){}get verbatimLatex(){return this._verbatimLatex}toJson(){return g(p({},super.toJson()),{arg:this.arg})}render(e){let r=y.createBox(e,this.body,{type:\"inner\"});return this.caret&&(r.caret=this.caret),this.bind(e,r)}_serialize(e){return this.verbatimLatex,this.verbatimLatex}};M([\"ce\",\"pu\"],\"{chemformula:balanced-string}\",{createAtom:t=>{var e;return new Qn(t.command,(e=t.args[0])!=null?e:\"\")}});var k={go:function(t,e){if(!t)return[];e===void 0&&(e=\"ce\");var r=\"0\",i={};i.parenthesisLevel=0,t=t.replace(/\\n/g,\" \"),t=t.replace(/[\\u2212\\u2013\\u2014\\u2010]/g,\"-\"),t=t.replace(/[\\u2026]/g,\"...\");for(var n,o=10,a=[];;){n!==t?(o=10,n=t):o--;var s=k.stateMachines[e],l=s.transitions[r]||s.transitions[\"*\"];e:for(var c=0;c<l.length;c++){var u=k.patterns.match_(l[c].pattern,t);if(u){for(var m=l[c].task,d=0;d<m.action_.length;d++){var h;if(s.actions[m.action_[d].type_])h=s.actions[m.action_[d].type_](i,u.match_,m.action_[d].option);else if(k.actions[m.action_[d].type_])h=k.actions[m.action_[d].type_](i,u.match_,m.action_[d].option);else throw[\"MhchemBugA\",\"mhchem bug A. Please report. (\"+m.action_[d].type_+\")\"];k.concatArray(a,h)}if(r=m.nextState||r,t.length>0){if(m.revisit||(t=u.remainder),!m.toContinue)break e}else return a}}if(o<=0)throw[\"MhchemBugU\",\"mhchem bug U. Please report.\"]}},concatArray:function(t,e){if(e)if(Object.prototype.toString.call(e)===\"[object Array]\")for(var r=0;r<e.length;r++)t.push(e[r]);else t.push(e)},patterns:{patterns:{empty:/^$/,else:/^./,else2:/^./,space:/^\\s/,\"space A\":/^\\s(?=[A-Z\\\\$])/,space$:/^\\s$/,\"a-z\":/^[a-z]/,x:/^x/,x$:/^x$/,i$:/^i$/,letters:/^(?:[a-zA-Z\\u03B1-\\u03C9\\u0391-\\u03A9?@]|(?:\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))))+/,\"\\\\greek\":/^\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))/,\"one lowercase latin letter $\":/^(?:([a-z])(?:$|[^a-zA-Z]))$/,\"$one lowercase latin letter$ $\":/^\\$(?:([a-z])(?:$|[^a-zA-Z]))\\$$/,\"one lowercase greek letter $\":/^(?:\\$?[\\u03B1-\\u03C9]\\$?|\\$?\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\\s*\\$?)(?:\\s+|\\{\\}|(?![a-zA-Z]))$/,digits:/^[0-9]+/,\"-9.,9\":/^[+\\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))/,\"-9.,9 no missing 0\":/^[+\\-]?[0-9]+(?:[.,][0-9]+)?/,\"(-)(9.,9)(e)(99)\":function(t){var e=t.match(/^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))?(\\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))\\))?(?:(?:([eE])|\\s*(\\*|x|\\\\times|\\u00D7)\\s*10\\^)([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\}))?/);return e&&e[0]?{match_:e.slice(1),remainder:t.substr(e[0].length)}:null},\"(-)(9)^(-9)\":function(t){var e=t.match(/^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+)?)\\^([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\})/);return e&&e[0]?{match_:e.slice(1),remainder:t.substr(e[0].length)}:null},\"state of aggregation $\":function(t){var e=k.patterns.findObserveGroups(t,\"\",/^\\([a-z]{1,3}(?=[\\),])/,\")\",\"\");if(e&&e.remainder.match(/^($|[\\s,;\\)\\]\\}])/))return e;var r=t.match(/^(?:\\((?:\\\\ca\\s?)?\\$[amothc]\\$\\))/);return r?{match_:r[0],remainder:t.substr(r[0].length)}:null},\"_{(state of aggregation)}$\":/^_\\{(\\([a-z]{1,3}\\))\\}/,\"{[(\":/^(?:\\\\\\{|\\[|\\()/,\")]}\":/^(?:\\)|\\]|\\\\\\})/,\", \":/^[,;]\\s*/,\",\":/^[,;]/,\".\":/^[.]/,\". \":/^([.\\u22C5\\u00B7\\u2022])\\s*/,\"...\":/^\\.\\.\\.(?=$|[^.])/,\"* \":/^([*])\\s*/,\"^{(...)}\":function(t){return k.patterns.findObserveGroups(t,\"^{\",\"\",\"\",\"}\")},\"^($...$)\":function(t){return k.patterns.findObserveGroups(t,\"^\",\"$\",\"$\",\"\")},\"^a\":/^\\^([0-9]+|[^\\\\_])/,\"^\\\\x{}{}\":function(t){return k.patterns.findObserveGroups(t,\"^\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"^\\\\x{}\":function(t){return k.patterns.findObserveGroups(t,\"^\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"^\\\\x\":/^\\^(\\\\[a-zA-Z]+)\\s*/,\"^(-1)\":/^\\^(-?\\d+)/,\"'\":/^'/,\"_{(...)}\":function(t){return k.patterns.findObserveGroups(t,\"_{\",\"\",\"\",\"}\")},\"_($...$)\":function(t){return k.patterns.findObserveGroups(t,\"_\",\"$\",\"$\",\"\")},_9:/^_([+\\-]?[0-9]+|[^\\\\])/,\"_\\\\x{}{}\":function(t){return k.patterns.findObserveGroups(t,\"_\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"_\\\\x{}\":function(t){return k.patterns.findObserveGroups(t,\"_\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"_\\\\x\":/^_(\\\\[a-zA-Z]+)\\s*/,\"^_\":/^(?:\\^(?=_)|\\_(?=\\^)|[\\^_]$)/,\"{}\":/^\\{\\}/,\"{...}\":function(t){return k.patterns.findObserveGroups(t,\"\",\"{\",\"}\",\"\")},\"{(...)}\":function(t){return k.patterns.findObserveGroups(t,\"{\",\"\",\"\",\"}\")},\"$...$\":function(t){return k.patterns.findObserveGroups(t,\"\",\"$\",\"$\",\"\")},\"${(...)}$\":function(t){return k.patterns.findObserveGroups(t,\"${\",\"\",\"\",\"}$\")},\"$(...)$\":function(t){return k.patterns.findObserveGroups(t,\"$\",\"\",\"\",\"$\")},\"=<>\":/^[=<>]/,\"#\":/^[#\\u2261]/,\"+\":/^\\+/,\"-$\":/^-(?=[\\s_},;\\]/]|$|\\([a-z]+\\))/,\"-9\":/^-(?=[0-9])/,\"- orbital overlap\":/^-(?=(?:[spd]|sp)(?:$|[\\s,;\\)\\]\\}]))/,\"-\":/^-/,\"pm-operator\":/^(?:\\\\pm|\\$\\\\pm\\$|\\+-|\\+\\/-)/,operator:/^(?:\\+|(?:[\\-=<>]|<<|>>|\\\\approx|\\$\\\\approx\\$)(?=\\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\\(v\\)|\\^|\\(\\^\\))(?=$|[\\s,;\\)\\]\\}])/,\"\\\\bond{(...)}\":function(t){return k.patterns.findObserveGroups(t,\"\\\\bond{\",\"\",\"\",\"}\")},\"->\":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\\u2192\\u27F6\\u21CC])/,CMT:/^[CMT](?=\\[)/,\"[(...)]\":function(t){return k.patterns.findObserveGroups(t,\"[\",\"\",\"\",\"]\")},\"1st-level escape\":/^(&|\\\\\\\\|\\\\hline)\\s*/,\"\\\\,\":/^(?:\\\\[,\\ ;:])/,\"\\\\x{}{}\":function(t){return k.patterns.findObserveGroups(t,\"\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"\\\\x{}\":function(t){return k.patterns.findObserveGroups(t,\"\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"\\\\ca\":/^\\\\ca(?:\\s+|(?![a-zA-Z]))/,\"\\\\x\":/^(?:\\\\[a-zA-Z]+\\s*|\\\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\\/~|]/,\"\\\\frac{(...)}\":function(t){return k.patterns.findObserveGroups(t,\"\\\\frac{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\overset{(...)}\":function(t){return k.patterns.findObserveGroups(t,\"\\\\overset{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\underset{(...)}\":function(t){return k.patterns.findObserveGroups(t,\"\\\\underset{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\underbrace{(...)}\":function(t){return k.patterns.findObserveGroups(t,\"\\\\underbrace{\",\"\",\"\",\"}_\",\"{\",\"\",\"\",\"}\")},\"\\\\color{(...)}0\":function(t){return k.patterns.findObserveGroups(t,\"\\\\color{\",\"\",\"\",\"}\")},\"\\\\color{(...)}{(...)}1\":function(t){return k.patterns.findObserveGroups(t,\"\\\\color{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\color(...){(...)}2\":function(t){return k.patterns.findObserveGroups(t,\"\\\\color\",\"\\\\\",\"\",/^(?=\\{)/,\"{\",\"\",\"\",\"}\")},\"\\\\ce{(...)}\":function(t){return k.patterns.findObserveGroups(t,\"\\\\ce{\",\"\",\"\",\"}\")},oxidation$:/^(?:[+-][IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/,\"d-oxidation$\":/^(?:[+-]?\\s?[IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/,\"roman numeral\":/^[IVX]+/,\"1/2$\":/^[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+(?:\\$[a-z]\\$|[a-z])?$/,amount:function(t){var e;if(e=t.match(/^(?:(?:(?:\\([+\\-]?[0-9]+\\/[0-9]+\\)|[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+|[+\\-]?[0-9]+[.,][0-9]+|[+\\-]?\\.[0-9]+|[+\\-]?[0-9]+)(?:[a-z](?=\\s*[A-Z]))?)|[+\\-]?[a-z](?=\\s*[A-Z])|\\+(?!\\s))/),e)return{match_:e[0],remainder:t.substr(e[0].length)};var r=k.patterns.findObserveGroups(t,\"\",\"$\",\"$\",\"\");return r&&(e=r.match_.match(/^\\$(?:\\(?[+\\-]?(?:[0-9]*[a-z]?[+\\-])?[0-9]*[a-z](?:[+\\-][0-9]*[a-z]?)?\\)?|\\+|-)\\$$/),e)?{match_:e[0],remainder:t.substr(e[0].length)}:null},amount2:function(t){return this.amount(t)},\"(KV letters),\":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(t){if(t.match(/^\\([a-z]+\\)$/))return null;var e=t.match(/^(?:[a-z]|(?:[0-9\\ \\+\\-\\,\\.\\(\\)]+[a-z])+[0-9\\ \\+\\-\\,\\.\\(\\)]*|(?:[a-z][0-9\\ \\+\\-\\,\\.\\(\\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:t.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,\"/\":/^\\s*(\\/)\\s*/,\"//\":/^\\s*(\\/\\/)\\s*/,\"*\":/^\\s*[*.]\\s*/},findObserveGroups:function(t,e,r,i,n,o,a,s,l,c){var u=function(b,_){if(typeof _==\"string\")return b.indexOf(_)!==0?null:_;var S=b.match(_);return S?S[0]:null},m=function(b,_,S){for(var A=0;_<b.length;){var E=b.charAt(_),D=u(b.substr(_),S);if(D!==null&&A===0)return{endMatchBegin:_,endMatchEnd:_+D.length};if(E===\"{\")A++;else if(E===\"}\"){if(A===0)throw[\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"];A--}_++}return A>0,null},d=u(t,e);if(d===null||(t=t.substr(d.length),d=u(t,r),d===null))return null;var h=m(t,d.length,i||n);if(h===null)return null;var f=t.substring(0,i?h.endMatchEnd:h.endMatchBegin);if(o||a){var x=this.findObserveGroups(t.substr(h.endMatchEnd),o,a,s,l);if(x===null)return null;var v=[f,x.match_];return{match_:c?v.join(\"\"):v,remainder:x.remainder}}else return{match_:f,remainder:t.substr(h.endMatchEnd)}},match_:function(t,e){var r=k.patterns.patterns[t];if(r===void 0)throw[\"MhchemBugP\",\"mhchem bug P. Please report. (\"+t+\")\"];if(typeof r==\"function\")return k.patterns.patterns[t](e);var i=e.match(r);if(i){var n;return i[2]?n=[i[1],i[2]]:i[1]?n=i[1]:n=i[0],{match_:n,remainder:e.substr(i[0].length)}}return null}},actions:{\"a=\":function(t,e){t.a=(t.a||\"\")+e},\"b=\":function(t,e){t.b=(t.b||\"\")+e},\"p=\":function(t,e){t.p=(t.p||\"\")+e},\"o=\":function(t,e){t.o=(t.o||\"\")+e},\"q=\":function(t,e){t.q=(t.q||\"\")+e},\"d=\":function(t,e){t.d=(t.d||\"\")+e},\"rm=\":function(t,e){t.rm=(t.rm||\"\")+e},\"text=\":function(t,e){t.text_=(t.text_||\"\")+e},insert:function(t,e,r){return{type_:r}},\"insert+p1\":function(t,e,r){return{type_:r,p1:e}},\"insert+p1+p2\":function(t,e,r){return{type_:r,p1:e[0],p2:e[1]}},copy:function(t,e){return e},rm:function(t,e){return{type_:\"rm\",p1:e||\"\"}},text:function(t,e){return k.go(e,\"text\")},\"{text}\":function(t,e){var r=[\"{\"];return k.concatArray(r,k.go(e,\"text\")),r.push(\"}\"),r},\"tex-math\":function(t,e){return k.go(e,\"tex-math\")},\"tex-math tight\":function(t,e){return k.go(e,\"tex-math tight\")},bond:function(t,e,r){return{type_:\"bond\",kind_:r||e}},\"color0-output\":function(t,e){return{type_:\"color0\",color:e[0]}},ce:function(t,e){return k.go(e)},\"1/2\":function(t,e){var r=[];e.match(/^[+\\-]/)&&(r.push(e.substr(0,1)),e=e.substr(1));var i=e.match(/^([0-9]+|\\$[a-z]\\$|[a-z])\\/([0-9]+)(\\$[a-z]\\$|[a-z])?$/);return i[1]=i[1].replace(/\\$/g,\"\"),r.push({type_:\"frac\",p1:i[1],p2:i[2]}),i[3]&&(i[3]=i[3].replace(/\\$/g,\"\"),r.push({type_:\"tex-math\",p1:i[3]})),r},\"9,9\":function(t,e){return k.go(e,\"9,9\")}},createTransitions:function(t){var e,r,i,n,o={};for(e in t)for(r in t[e])for(i=r.split(\"|\"),t[e][r].stateArray=i,n=0;n<i.length;n++)o[i[n]]=[];for(e in t)for(r in t[e])for(i=t[e][r].stateArray||[],n=0;n<i.length;n++){var a=t[e][r];if(a.action_){a.action_=[].concat(a.action_);for(var s=0;s<a.action_.length;s++)typeof a.action_[s]==\"string\"&&(a.action_[s]={type_:a.action_[s]})}else a.action_=[];for(var l=e.split(\"|\"),c=0;c<l.length;c++)if(i[n]===\"*\")for(var u in o)o[u].push({pattern:l[c],task:a});else o[i[n]].push({pattern:l[c],task:a})}return o},stateMachines:{}};k.stateMachines={ce:{transitions:k.createTransitions({empty:{\"*\":{action_:\"output\"}},else:{\"0|1|2\":{action_:\"beginsWithBond=false\",revisit:!0,toContinue:!0}},oxidation$:{0:{action_:\"oxidation-output\"}},CMT:{r:{action_:\"rdt=\",nextState:\"rt\"},rd:{action_:\"rqt=\",nextState:\"rdt\"}},arrowUpDown:{\"0|1|2|as\":{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"1\"}},uprightEntities:{\"0|1|2\":{action_:[\"o=\",\"output\"],nextState:\"1\"}},orbital:{\"0|1|2|3\":{action_:\"o=\",nextState:\"o\"}},\"->\":{\"0|1|2|3\":{action_:\"r=\",nextState:\"r\"},\"a|as\":{action_:[\"output\",\"r=\"],nextState:\"r\"},\"*\":{action_:[\"output\",\"r=\"],nextState:\"r\"}},\"+\":{o:{action_:\"d= kv\",nextState:\"d\"},\"d|D\":{action_:\"d=\",nextState:\"d\"},q:{action_:\"d=\",nextState:\"qd\"},\"qd|qD\":{action_:\"d=\",nextState:\"qd\"},dq:{action_:[\"output\",\"d=\"],nextState:\"d\"},3:{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"0\"}},amount:{\"0|2\":{action_:\"a=\",nextState:\"a\"}},\"pm-operator\":{\"0|1|2|a|as\":{action_:[\"sb=false\",\"output\",{type_:\"operator\",option:\"\\\\pm\"}],nextState:\"0\"}},operator:{\"0|1|2|a|as\":{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"0\"}},\"-$\":{\"o|q\":{action_:[\"charge or bond\",\"output\"],nextState:\"qd\"},d:{action_:\"d=\",nextState:\"d\"},D:{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"},q:{action_:\"d=\",nextState:\"qd\"},qd:{action_:\"d=\",nextState:\"qd\"},\"qD|dq\":{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"}},\"-9\":{\"3|o\":{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"3\"}},\"- orbital overlap\":{o:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"},d:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"}},\"-\":{\"0|1|2\":{action_:[{type_:\"output\",option:1},\"beginsWithBond=true\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"},3:{action_:{type_:\"bond\",option:\"-\"}},a:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"},as:{action_:[{type_:\"output\",option:2},{type_:\"bond\",option:\"-\"}],nextState:\"3\"},b:{action_:\"b=\"},o:{action_:{type_:\"- after o/d\",option:!1},nextState:\"2\"},q:{action_:{type_:\"- after o/d\",option:!1},nextState:\"2\"},\"d|qd|dq\":{action_:{type_:\"- after o/d\",option:!0},nextState:\"2\"},\"D|qD|p\":{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"}},amount2:{\"1|3\":{action_:\"a=\",nextState:\"a\"}},letters:{\"0|1|2|3|a|as|b|p|bp|o\":{action_:\"o=\",nextState:\"o\"},\"q|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"},\"d|D|qd|qD\":{action_:\"o after d\",nextState:\"o\"}},digits:{o:{action_:\"q=\",nextState:\"q\"},\"d|D\":{action_:\"q=\",nextState:\"dq\"},q:{action_:[\"output\",\"o=\"],nextState:\"o\"},a:{action_:\"o=\",nextState:\"o\"}},\"space A\":{\"b|p|bp\":{}},space:{a:{nextState:\"as\"},0:{action_:\"sb=false\"},\"1|2\":{action_:\"sb=true\"},\"r|rt|rd|rdt|rdq\":{action_:\"output\",nextState:\"0\"},\"*\":{action_:[\"output\",\"sb=true\"],nextState:\"1\"}},\"1st-level escape\":{\"1|2\":{action_:[\"output\",{type_:\"insert+p1\",option:\"1st-level escape\"}]},\"*\":{action_:[\"output\",{type_:\"insert+p1\",option:\"1st-level escape\"}],nextState:\"0\"}},\"[(...)]\":{\"r|rt\":{action_:\"rd=\",nextState:\"rd\"},\"rd|rdt\":{action_:\"rq=\",nextState:\"rdq\"}},\"...\":{\"o|d|D|dq|qd|qD\":{action_:[\"output\",{type_:\"bond\",option:\"...\"}],nextState:\"3\"},\"*\":{action_:[{type_:\"output\",option:1},{type_:\"insert\",option:\"ellipsis\"}],nextState:\"1\"}},\". |* \":{\"*\":{action_:[\"output\",{type_:\"insert\",option:\"addition compound\"}],nextState:\"1\"}},\"state of aggregation $\":{\"*\":{action_:[\"output\",\"state of aggregation\"],nextState:\"1\"}},\"{[(\":{\"a|as|o\":{action_:[\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"},\"0|1|2|3\":{action_:[\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"},\"*\":{action_:[\"output\",\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"}},\")]}\":{\"0|1|2|3|b|p|bp|o\":{action_:[\"o=\",\"parenthesisLevel--\"],nextState:\"o\"},\"a|as|d|D|q|qd|qD|dq\":{action_:[\"output\",\"o=\",\"parenthesisLevel--\"],nextState:\"o\"}},\", \":{\"*\":{action_:[\"output\",\"comma\"],nextState:\"0\"}},\"^_\":{\"*\":{}},\"^{(...)}|^($...$)\":{\"0|1|2|as\":{action_:\"b=\",nextState:\"b\"},p:{action_:\"b=\",nextState:\"bp\"},\"3|o\":{action_:\"d= kv\",nextState:\"D\"},q:{action_:\"d=\",nextState:\"qD\"},\"d|D|qd|qD|dq\":{action_:[\"output\",\"d=\"],nextState:\"D\"}},\"^a|^\\\\x{}{}|^\\\\x{}|^\\\\x|'\":{\"0|1|2|as\":{action_:\"b=\",nextState:\"b\"},p:{action_:\"b=\",nextState:\"bp\"},\"3|o\":{action_:\"d= kv\",nextState:\"d\"},q:{action_:\"d=\",nextState:\"qd\"},\"d|qd|D|qD\":{action_:\"d=\"},dq:{action_:[\"output\",\"d=\"],nextState:\"d\"}},\"_{(state of aggregation)}$\":{\"d|D|q|qd|qD|dq\":{action_:[\"output\",\"q=\"],nextState:\"q\"}},\"_{(...)}|_($...$)|_9|_\\\\x{}{}|_\\\\x{}|_\\\\x\":{\"0|1|2|as\":{action_:\"p=\",nextState:\"p\"},b:{action_:\"p=\",nextState:\"bp\"},\"3|o\":{action_:\"q=\",nextState:\"q\"},\"d|D\":{action_:\"q=\",nextState:\"dq\"},\"q|qd|qD|dq\":{action_:[\"output\",\"q=\"],nextState:\"q\"}},\"=<>\":{\"0|1|2|3|a|as|o|q|d|D|qd|qD|dq\":{action_:[{type_:\"output\",option:2},\"bond\"],nextState:\"3\"}},\"#\":{\"0|1|2|3|a|as|o\":{action_:[{type_:\"output\",option:2},{type_:\"bond\",option:\"#\"}],nextState:\"3\"}},\"{}\":{\"*\":{action_:{type_:\"output\",option:1},nextState:\"1\"}},\"{...}\":{\"0|1|2|3|a|as|b|p|bp\":{action_:\"o=\",nextState:\"o\"},\"o|d|D|q|qd|qD|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"}},\"$...$\":{a:{action_:\"a=\"},\"0|1|2|3|as|b|p|bp|o\":{action_:\"o=\",nextState:\"o\"},\"as|o\":{action_:\"o=\"},\"q|d|D|qd|qD|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"}},\"\\\\bond{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"bond\"],nextState:\"3\"}},\"\\\\frac{(...)}\":{\"*\":{action_:[{type_:\"output\",option:1},\"frac-output\"],nextState:\"3\"}},\"\\\\overset{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"overset-output\"],nextState:\"3\"}},\"\\\\underset{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"underset-output\"],nextState:\"3\"}},\"\\\\underbrace{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"underbrace-output\"],nextState:\"3\"}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:[{type_:\"output\",option:2},\"color-output\"],nextState:\"3\"}},\"\\\\color{(...)}0\":{\"*\":{action_:[{type_:\"output\",option:2},\"color0-output\"]}},\"\\\\ce{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"ce\"],nextState:\"3\"}},\"\\\\,\":{\"*\":{action_:[{type_:\"output\",option:1},\"copy\"],nextState:\"1\"}},\"\\\\x{}{}|\\\\x{}|\\\\x\":{\"0|1|2|3|a|as|b|p|bp|o|c0\":{action_:[\"o=\",\"output\"],nextState:\"3\"},\"*\":{action_:[\"output\",\"o=\",\"output\"],nextState:\"3\"}},others:{\"*\":{action_:[{type_:\"output\",option:1},\"copy\"],nextState:\"3\"}},else2:{a:{action_:\"a to o\",nextState:\"o\",revisit:!0},as:{action_:[\"output\",\"sb=true\"],nextState:\"1\",revisit:!0},\"r|rt|rd|rdt|rdq\":{action_:[\"output\"],nextState:\"0\",revisit:!0},\"*\":{action_:[\"output\",\"copy\"],nextState:\"3\"}}}),actions:{\"o after d\":function(t,e){var r;if((t.d||\"\").match(/^[0-9]+$/)){var i=t.d;t.d=void 0,r=this.output(t),t.b=i}else r=this.output(t);return k.actions[\"o=\"](t,e),r},\"d= kv\":function(t,e){t.d=e,t.dType=\"kv\"},\"charge or bond\":function(t,e){if(t.beginsWithBond){var r=[];return k.concatArray(r,this.output(t)),k.concatArray(r,k.actions.bond(t,e,\"-\")),r}else t.d=e},\"- after o/d\":function(t,e,r){var i=k.patterns.match_(\"orbital\",t.o||\"\"),n=k.patterns.match_(\"one lowercase greek letter $\",t.o||\"\"),o=k.patterns.match_(\"one lowercase latin letter $\",t.o||\"\"),a=k.patterns.match_(\"$one lowercase latin letter$ $\",t.o||\"\"),s=e===\"-\"&&(i&&i.remainder===\"\"||n||o||a);s&&!t.a&&!t.b&&!t.p&&!t.d&&!t.q&&!i&&o&&(t.o=\"$\"+t.o+\"$\");var l=[];return s?(k.concatArray(l,this.output(t)),l.push({type_:\"hyphen\"})):(i=k.patterns.match_(\"digits\",t.d||\"\"),r&&i&&i.remainder===\"\"?(k.concatArray(l,k.actions[\"d=\"](t,e)),k.concatArray(l,this.output(t))):(k.concatArray(l,this.output(t)),k.concatArray(l,k.actions.bond(t,e,\"-\")))),l},\"a to o\":function(t){t.o=t.a,t.a=void 0},\"sb=true\":function(t){t.sb=!0},\"sb=false\":function(t){t.sb=!1},\"beginsWithBond=true\":function(t){t.beginsWithBond=!0},\"beginsWithBond=false\":function(t){t.beginsWithBond=!1},\"parenthesisLevel++\":function(t){t.parenthesisLevel++},\"parenthesisLevel--\":function(t){t.parenthesisLevel--},\"state of aggregation\":function(t,e){return{type_:\"state of aggregation\",p1:k.go(e,\"o\")}},comma:function(t,e){var r=e.replace(/\\s*$/,\"\"),i=r!==e;return i&&t.parenthesisLevel===0?{type_:\"comma enumeration L\",p1:r}:{type_:\"comma enumeration M\",p1:r}},output:function(t,e,r){var i;if(!t.r)i=[],!t.a&&!t.b&&!t.p&&!t.o&&!t.q&&!t.d&&!r||(t.sb&&i.push({type_:\"entitySkip\"}),!t.o&&!t.q&&!t.d&&!t.b&&!t.p&&r!==2?(t.o=t.a,t.a=void 0):!t.o&&!t.q&&!t.d&&(t.b||t.p)?(t.o=t.a,t.d=t.b,t.q=t.p,t.a=t.b=t.p=void 0):t.o&&t.dType===\"kv\"&&k.patterns.match_(\"d-oxidation$\",t.d||\"\")?t.dType=\"oxidation\":t.o&&t.dType===\"kv\"&&!t.q&&(t.dType=void 0),i.push({type_:\"chemfive\",a:k.go(t.a,\"a\"),b:k.go(t.b,\"bd\"),p:k.go(t.p,\"pq\"),o:k.go(t.o,\"o\"),q:k.go(t.q,\"pq\"),d:k.go(t.d,t.dType===\"oxidation\"?\"oxidation\":\"bd\"),dType:t.dType}));else{var n;t.rdt===\"M\"?n=k.go(t.rd,\"tex-math\"):t.rdt===\"T\"?n=[{type_:\"text\",p1:t.rd||\"\"}]:n=k.go(t.rd);var o;t.rqt===\"M\"?o=k.go(t.rq,\"tex-math\"):t.rqt===\"T\"?o=[{type_:\"text\",p1:t.rq||\"\"}]:o=k.go(t.rq),i={type_:\"arrow\",r:t.r,rd:n,rq:o}}for(var a in t)a!==\"parenthesisLevel\"&&a!==\"beginsWithBond\"&&delete t[a];return i},\"oxidation-output\":function(t,e){var r=[\"{\"];return k.concatArray(r,k.go(e,\"oxidation\")),r.push(\"}\"),r},\"frac-output\":function(t,e){return{type_:\"frac-ce\",p1:k.go(e[0]),p2:k.go(e[1])}},\"overset-output\":function(t,e){return{type_:\"overset\",p1:k.go(e[0]),p2:k.go(e[1])}},\"underset-output\":function(t,e){return{type_:\"underset\",p1:k.go(e[0]),p2:k.go(e[1])}},\"underbrace-output\":function(t,e){return{type_:\"underbrace\",p1:k.go(e[0]),p2:k.go(e[1])}},\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:k.go(e[1])}},\"r=\":function(t,e){t.r=e},\"rdt=\":function(t,e){t.rdt=e},\"rd=\":function(t,e){t.rd=e},\"rqt=\":function(t,e){t.rqt=e},\"rq=\":function(t,e){t.rq=e},operator:function(t,e,r){return{type_:\"operator\",kind_:r||e}}}},a:{transitions:k.createTransitions({empty:{\"*\":{}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"1\",revisit:!0}},\"$(...)$\":{\"*\":{action_:\"tex-math tight\",nextState:\"1\"}},\",\":{\"*\":{action_:{type_:\"insert\",option:\"commaDecimal\"}}},else2:{\"*\":{action_:\"copy\"}}}),actions:{}},o:{transitions:k.createTransitions({empty:{\"*\":{}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"1\",revisit:!0}},letters:{\"*\":{action_:\"rm\"}},\"\\\\ca\":{\"*\":{action_:{type_:\"insert\",option:\"circa\"}}},\"\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"{text}\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{}},text:{transitions:k.createTransitions({empty:{\"*\":{action_:\"output\"}},\"{...}\":{\"*\":{action_:\"text=\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"\\\\greek\":{\"*\":{action_:[\"output\",\"rm\"]}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:[\"output\",\"copy\"]}},else:{\"*\":{action_:\"text=\"}}}),actions:{output:function(t){if(t.text_){var e={type_:\"text\",p1:t.text_};for(var r in t)delete t[r];return e}}}},pq:{transitions:k.createTransitions({empty:{\"*\":{}},\"state of aggregation $\":{\"*\":{action_:\"state of aggregation\"}},i$:{0:{nextState:\"!f\",revisit:!0}},\"(KV letters),\":{0:{action_:\"rm\",nextState:\"0\"}},formula$:{0:{nextState:\"f\",revisit:!0}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"!f\",revisit:!0}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"text\"}},\"a-z\":{f:{action_:\"tex-math\"}},letters:{\"*\":{action_:\"rm\"}},\"-9.,9\":{\"*\":{action_:\"9,9\"}},\",\":{\"*\":{action_:{type_:\"insert+p1\",option:\"comma enumeration S\"}}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:\"color-output\"}},\"\\\\color{(...)}0\":{\"*\":{action_:\"color0-output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:\"ce\"}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{\"state of aggregation\":function(t,e){return{type_:\"state of aggregation subscript\",p1:k.go(e,\"o\")}},\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:k.go(e[1],\"pq\")}}}},bd:{transitions:k.createTransitions({empty:{\"*\":{}},x$:{0:{nextState:\"!f\",revisit:!0}},formula$:{0:{nextState:\"f\",revisit:!0}},else:{0:{nextState:\"!f\",revisit:!0}},\"-9.,9 no missing 0\":{\"*\":{action_:\"9,9\"}},\".\":{\"*\":{action_:{type_:\"insert\",option:\"electron dot\"}}},\"a-z\":{f:{action_:\"tex-math\"}},x:{\"*\":{action_:{type_:\"insert\",option:\"KV x\"}}},letters:{\"*\":{action_:\"rm\"}},\"'\":{\"*\":{action_:{type_:\"insert\",option:\"prime\"}}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"text\"}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:\"color-output\"}},\"\\\\color{(...)}0\":{\"*\":{action_:\"color0-output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:\"ce\"}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:k.go(e[1],\"bd\")}}}},oxidation:{transitions:k.createTransitions({empty:{\"*\":{}},\"roman numeral\":{\"*\":{action_:\"roman-numeral\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},else:{\"*\":{action_:\"copy\"}}}),actions:{\"roman-numeral\":function(t,e){return{type_:\"roman numeral\",p1:e||\"\"}}}},\"tex-math\":{transitions:k.createTransitions({empty:{\"*\":{action_:\"output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:[\"output\",\"ce\"]}},\"{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"o=\"}},else:{\"*\":{action_:\"o=\"}}}),actions:{output:function(t){if(t.o){var e={type_:\"tex-math\",p1:t.o};for(var r in t)delete t[r];return e}}}},\"tex-math tight\":{transitions:k.createTransitions({empty:{\"*\":{action_:\"output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:[\"output\",\"ce\"]}},\"{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"o=\"}},\"-|+\":{\"*\":{action_:\"tight operator\"}},else:{\"*\":{action_:\"o=\"}}}),actions:{\"tight operator\":function(t,e){t.o=(t.o||\"\")+\"{\"+e+\"}\"},output:function(t){if(t.o){var e={type_:\"tex-math\",p1:t.o};for(var r in t)delete t[r];return e}}}},\"9,9\":{transitions:k.createTransitions({empty:{\"*\":{}},\",\":{\"*\":{action_:\"comma\"}},else:{\"*\":{action_:\"copy\"}}}),actions:{comma:function(){return{type_:\"commaDecimal\"}}}},pu:{transitions:k.createTransitions({empty:{\"*\":{action_:\"output\"}},space$:{\"*\":{action_:[\"output\",\"space\"]}},\"{[(|)]}\":{\"0|a\":{action_:\"copy\"}},\"(-)(9)^(-9)\":{0:{action_:\"number^\",nextState:\"a\"}},\"(-)(9.,9)(e)(99)\":{0:{action_:\"enumber\",nextState:\"a\"}},space:{\"0|a\":{}},\"pm-operator\":{\"0|a\":{action_:{type_:\"operator\",option:\"\\\\pm\"},nextState:\"0\"}},operator:{\"0|a\":{action_:\"copy\",nextState:\"0\"}},\"//\":{d:{action_:\"o=\",nextState:\"/\"}},\"/\":{d:{action_:\"o=\",nextState:\"/\"}},\"{...}|else\":{\"0|d\":{action_:\"d=\",nextState:\"d\"},a:{action_:[\"space\",\"d=\"],nextState:\"d\"},\"/|q\":{action_:\"q=\",nextState:\"q\"}}}),actions:{enumber:function(t,e){var r=[];return e[0]===\"+-\"||e[0]===\"+/-\"?r.push(\"\\\\pm \"):e[0]&&r.push(e[0]),e[1]&&(k.concatArray(r,k.go(e[1],\"pu-9,9\")),e[2]&&(e[2].match(/[,.]/)?k.concatArray(r,k.go(e[2],\"pu-9,9\")):r.push(e[2])),(e[3]||e[4])&&(e[3]===\"e\"||e[4]===\"*\"?r.push({type_:\"cdot\"}):r.push({type_:\"times\"}))),e[5]&&r.push(\"10^{\"+e[5]+\"}\"),r},\"number^\":function(t,e){var r=[];return e[0]===\"+-\"||e[0]===\"+/-\"?r.push(\"\\\\pm \"):e[0]&&r.push(e[0]),k.concatArray(r,k.go(e[1],\"pu-9,9\")),r.push(\"^{\"+e[2]+\"}\"),r},operator:function(t,e,r){return{type_:\"operator\",kind_:r||e}},space:function(){return{type_:\"pu-space-1\"}},output:function(t){var e,r=k.patterns.match_(\"{(...)}\",t.d||\"\");r&&r.remainder===\"\"&&(t.d=r.match_);var i=k.patterns.match_(\"{(...)}\",t.q||\"\");if(i&&i.remainder===\"\"&&(t.q=i.match_),t.d&&(t.d=t.d.replace(/\\u00B0C|\\^oC|\\^{o}C/g,\"{}^{\\\\circ}C\"),t.d=t.d.replace(/\\u00B0F|\\^oF|\\^{o}F/g,\"{}^{\\\\circ}F\")),t.q){t.q=t.q.replace(/\\u00B0C|\\^oC|\\^{o}C/g,\"{}^{\\\\circ}C\"),t.q=t.q.replace(/\\u00B0F|\\^oF|\\^{o}F/g,\"{}^{\\\\circ}F\");var n={d:k.go(t.d,\"pu\"),q:k.go(t.q,\"pu\")};t.o===\"//\"?e={type_:\"pu-frac\",p1:n.d,p2:n.q}:(e=n.d,n.d.length>1||n.q.length>1?e.push({type_:\" / \"}):e.push({type_:\"/\"}),k.concatArray(e,n.q))}else e=k.go(t.d,\"pu-2\");for(var o in t)delete t[o];return e}}},\"pu-2\":{transitions:k.createTransitions({empty:{\"*\":{action_:\"output\"}},\"*\":{\"*\":{action_:[\"output\",\"cdot\"],nextState:\"0\"}},\"\\\\x\":{\"*\":{action_:\"rm=\"}},space:{\"*\":{action_:[\"output\",\"space\"],nextState:\"0\"}},\"^{(...)}|^(-1)\":{1:{action_:\"^(-1)\"}},\"-9.,9\":{0:{action_:\"rm=\",nextState:\"0\"},1:{action_:\"^(-1)\",nextState:\"0\"}},\"{...}|else\":{\"*\":{action_:\"rm=\",nextState:\"1\"}}}),actions:{cdot:function(){return{type_:\"tight cdot\"}},\"^(-1)\":function(t,e){t.rm+=\"^{\"+e+\"}\"},space:function(){return{type_:\"pu-space-2\"}},output:function(t){var e=[];if(t.rm){var r=k.patterns.match_(\"{(...)}\",t.rm||\"\");r&&r.remainder===\"\"?e=k.go(r.match_,\"pu\"):e={type_:\"rm\",p1:t.rm}}for(var i in t)delete t[i];return e}}},\"pu-9,9\":{transitions:k.createTransitions({empty:{0:{action_:\"output-0\"},o:{action_:\"output-o\"}},\",\":{0:{action_:[\"output-0\",\"comma\"],nextState:\"o\"}},\".\":{0:{action_:[\"output-0\",\"copy\"],nextState:\"o\"}},else:{\"*\":{action_:\"text=\"}}}),actions:{comma:function(){return{type_:\"commaDecimal\"}},\"output-0\":function(t){var e=[];if(t.text_=t.text_||\"\",t.text_.length>4){var r=t.text_.length%3;r===0&&(r=3);for(var i=t.text_.length-3;i>0;i-=3)e.push(t.text_.substr(i,3)),e.push({type_:\"1000 separator\"});e.push(t.text_.substr(0,r)),e.reverse()}else e.push(t.text_);for(var n in t)delete t[n];return e},\"output-o\":function(t){var e=[];if(t.text_=t.text_||\"\",t.text_.length>4){for(var r=t.text_.length-3,i=0;i<r;i+=3)e.push(t.text_.substr(i,3)),e.push({type_:\"1000 separator\"});e.push(t.text_.substr(i))}else e.push(t.text_);for(var n in t)delete t[n];return e}}}};var me={go:function(t,e){if(!t)return\"\";for(var r=\"\",i=!1,n=0;n<t.length;n++){var o=t[n];typeof o==\"string\"?r+=o:(r+=me._go2(o),o.type_===\"1st-level escape\"&&(i=!0))}return!e&&!i&&r&&(r=\"{\"+r+\"}\"),r},_goInner:function(t){return t&&me.go(t,!0)},_go2:function(t){var e;switch(t.type_){case\"chemfive\":e=\"\";var r={a:me._goInner(t.a),b:me._goInner(t.b),p:me._goInner(t.p),o:me._goInner(t.o),q:me._goInner(t.q),d:me._goInner(t.d)};r.a&&(r.a.match(/^[+\\-]/)&&(r.a=\"{\"+r.a+\"}\"),e+=r.a+\"\\\\,\"),(r.b||r.p)&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\\\\hphantom{\"+(r.b||\"\")+\"}}_{\\\\hphantom{\"+(r.p||\"\")+\"}}\",e+=\"{\\\\vphantom{X}}\",e+=\"^{\\\\smash[t]{\\\\vphantom{2}}\\\\llap{\"+(r.b||\"\")+\"}}\",e+=\"_{\\\\vphantom{2}\\\\llap{\\\\smash[t]{\"+(r.p||\"\")+\"}}}\"),r.o&&(r.o.match(/^[+\\-]/)&&(r.o=\"{\"+r.o+\"}\"),e+=r.o),t.dType===\"kv\"?((r.d||r.q)&&(e+=\"{\\\\vphantom{X}}\"),r.d&&(e+=\"^{\"+r.d+\"}\"),r.q&&(e+=\"_{\\\\smash[t]{\"+r.q+\"}}\")):t.dType===\"oxidation\"?(r.d&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\"+r.d+\"}\"),r.q&&(e+=\"{\\\\vphantom{X}}\",e+=\"_{\\\\smash[t]{\"+r.q+\"}}\")):(r.q&&(e+=\"{\\\\vphantom{X}}\",e+=\"_{\\\\smash[t]{\"+r.q+\"}}\"),r.d&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\"+r.d+\"}\"));break;case\"rm\":e=\"\\\\mathrm{\"+t.p1+\"}\";break;case\"text\":t.p1.match(/[\\^_]/)?(t.p1=t.p1.replace(\" \",\"~\").replace(\"-\",\"\\\\text{-}\"),e=\"\\\\mathrm{\"+t.p1+\"}\"):e=\"\\\\text{\"+t.p1+\"}\";break;case\"roman numeral\":e=\"\\\\mathrm{\"+t.p1+\"}\";break;case\"state of aggregation\":e=\"\\\\mskip2mu \"+me._goInner(t.p1);break;case\"state of aggregation subscript\":e=\"\\\\mskip1mu \"+me._goInner(t.p1);break;case\"bond\":if(e=me._getBond(t.kind_),!e)throw[\"MhchemErrorBond\",\"mhchem Error. Unknown bond type (\"+t.kind_+\")\"];break;case\"frac\":var i=\"\\\\frac{\"+t.p1+\"}{\"+t.p2+\"}\";e=\"\\\\mathchoice{\\\\textstyle\"+i+\"}{\"+i+\"}{\"+i+\"}{\"+i+\"}\";break;case\"pu-frac\":var n=\"\\\\frac{\"+me._goInner(t.p1)+\"}{\"+me._goInner(t.p2)+\"}\";e=\"\\\\mathchoice{\\\\textstyle\"+n+\"}{\"+n+\"}{\"+n+\"}{\"+n+\"}\";break;case\"tex-math\":e=t.p1+\" \";break;case\"frac-ce\":e=\"\\\\frac{\"+me._goInner(t.p1)+\"}{\"+me._goInner(t.p2)+\"}\";break;case\"overset\":e=\"\\\\overset{\"+me._goInner(t.p1)+\"}{\"+me._goInner(t.p2)+\"}\";break;case\"underset\":e=\"\\\\underset{\"+me._goInner(t.p1)+\"}{\"+me._goInner(t.p2)+\"}\";break;case\"underbrace\":e=\"\\\\underbrace{\"+me._goInner(t.p1)+\"}_{\"+me._goInner(t.p2)+\"}\";break;case\"color\":e=\"{\\\\color{\"+t.color1+\"}{\"+me._goInner(t.color2)+\"}}\";break;case\"color0\":e=\"\\\\color{\"+t.color+\"}\";break;case\"arrow\":var o={rd:me._goInner(t.rd),rq:me._goInner(t.rq)},a=me._getArrow(t.r);o.rd||o.rq?t.r===\"<=>\"||t.r===\"<=>>\"||t.r===\"<<=>\"||t.r===\"<-->\"?(a=\"\\\\long\"+a,o.rd&&(a=\"\\\\overset{\"+o.rd+\"}{\"+a+\"}\"),o.rq&&(t.r===\"<-->\"?a=\"\\\\underset{\\\\lower2mu{\"+o.rq+\"}}{\"+a+\"}\":a=\"\\\\underset{\\\\lower6mu{\"+o.rq+\"}}{\"+a+\"}\"),a=\" {}\\\\mathrel{\"+a+\"}{} \"):(o.rq&&(a+=\"[{\"+o.rq+\"}]\"),a+=\"{\"+o.rd+\"}\",a=\" {}\\\\mathrel{\\\\x\"+a+\"}{} \"):a=\" {}\\\\mathrel{\\\\long\"+a+\"}{} \",e=a;break;case\"operator\":e=me._getOperator(t.kind_);break;case\"1st-level escape\":e=t.p1+\" \";break;case\"space\":e=\" \";break;case\"entitySkip\":e=\"~\";break;case\"pu-space-1\":e=\"~\";break;case\"pu-space-2\":e=\"\\\\mkern3mu \";break;case\"1000 separator\":e=\"\\\\mkern2mu \";break;case\"commaDecimal\":e=\"{,}\";break;case\"comma enumeration L\":e=\"{\"+t.p1+\"}\\\\mkern6mu \";break;case\"comma enumeration M\":e=\"{\"+t.p1+\"}\\\\mkern3mu \";break;case\"comma enumeration S\":e=\"{\"+t.p1+\"}\\\\mkern1mu \";break;case\"hyphen\":e=\"\\\\text{-}\";break;case\"addition compound\":e=\"\\\\,{\\\\cdot}\\\\,\";break;case\"electron dot\":e=\"\\\\mkern1mu \\\\bullet\\\\mkern1mu \";break;case\"KV x\":e=\"{\\\\times}\";break;case\"prime\":e=\"\\\\prime \";break;case\"cdot\":e=\"\\\\cdot \";break;case\"tight cdot\":e=\"\\\\mkern1mu{\\\\cdot}\\\\mkern1mu \";break;case\"times\":e=\"\\\\times \";break;case\"circa\":e=\"{\\\\sim}\";break;case\"^\":e=\"uparrow\";break;case\"v\":e=\"downarrow\";break;case\"ellipsis\":e=\"\\\\ldots \";break;case\"/\":e=\"/\";break;case\" / \":e=\"\\\\,/\\\\,\";break;default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}return e},_getArrow:function(t){switch(t){case\"->\":return\"rightarrow\";case\"\\u2192\":return\"rightarrow\";case\"\\u27F6\":return\"rightarrow\";case\"<-\":return\"leftarrow\";case\"<->\":return\"leftrightarrow\";case\"<-->\":return\"leftrightarrows\";case\"<=>\":return\"rightleftharpoons\";case\"\\u21CC\":return\"rightleftharpoons\";case\"<=>>\":return\"Rightleftharpoons\";case\"<<=>\":return\"Leftrightharpoons\";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}},_getBond:function(t){switch(t){case\"-\":return\"{-}\";case\"1\":return\"{-}\";case\"=\":return\"{=}\";case\"2\":return\"{=}\";case\"#\":return\"{\\\\equiv}\";case\"3\":return\"{\\\\equiv}\";case\"~\":return\"{\\\\tripledash}\";case\"~-\":return\"{\\\\rlap{\\\\lower.1em{-}}\\\\raise.1em{\\\\tripledash}}\";case\"~=\":return\"{\\\\rlap{\\\\lower.2em{-}}\\\\rlap{\\\\raise.2em{\\\\tripledash}}-}\";case\"~--\":return\"{\\\\rlap{\\\\lower.2em{-}}\\\\rlap{\\\\raise.2em{\\\\tripledash}}-}\";case\"-~-\":return\"{\\\\rlap{\\\\lower.2em{-}}\\\\rlap{\\\\raise.2em{-}}\\\\tripledash}\";case\"...\":return\"{{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";case\"....\":return\"{{\\\\cdot}{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";case\"->\":return\"{\\\\rightarrow}\";case\"<-\":return\"{\\\\leftarrow}\";case\"<\":return\"{<}\";case\">\":return\"{>}\";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}},_getOperator:function(t){switch(t){case\"+\":return\" {}+{} \";case\"-\":return\" {}-{} \";case\"=\":return\" {}={} \";case\"<\":return\" {}<{} \";case\">\":return\" {}>{} \";case\"<<\":return\" {}\\\\ll{} \";case\">>\":return\" {}\\\\gg{} \";case\"\\\\pm\":return\" {}\\\\pm{} \";case\"\\\\approx\":return\" {}\\\\approx{} \";case\"$\\\\approx$\":return\" {}\\\\approx{} \";case\"v\":return\" \\\\downarrow{} \";case\"(v)\":return\" \\\\downarrow{} \";case\"^\":return\" \\\\uparrow{} \";case\"(^)\":return\" \\\\uparrow{} \";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}}};var cn=class t extends y{constructor(e){super(g(p({},e),{type:\"delim\"})),this.value=e.delim,this.size=e.size}static fromJson(e){return new t(e)}toJson(){return g(p({},super.toJson()),{delim:this.value,size:this.size})}render(e){return new w(this.value,{type:\"middle\"})}_serialize(e){if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex==\"string\")return this.verbatimLatex;let r=ne(this.command,this.mode);return r!=null&&r.serialize?r.serialize(this,e):W(this.command,this.value)}},un=class t extends y{constructor(e){super(g(p({},e),{type:\"sizeddelim\",value:e.delim})),this.delimType=e.delimType,this.size=e.size}static fromJson(e){return new t(e)}toJson(){return g(p({},super.toJson()),{delim:this.value,size:this.size,delimType:this.delimType})}render(e){let r=Q0(this.value,this.size,e,{classes:{open:\"ML__open\",close:\"ML__close\"}[this.delimType],type:this.delimType,isSelected:this.isSelected});return r?(r=this.bind(e,r),this.caret&&(r.caret=this.caret),r):null}_serialize(e){if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex==\"string\")return this.verbatimLatex;let r=ne(this.command,this.mode);return r!=null&&r.serialize?r.serialize(this,e):W(this.command,this.value)}};var lr=class t extends y{constructor(e,r,i,n){var o,a;super({type:\"enclose\",command:e,style:n.style}),this.body=r,this.backgroundcolor=n.backgroundcolor,i.updiagonalarrow&&(i.updiagonalstrike=!1),i.box&&(i.left=!1,i.right=!1,i.bottom=!1,i.top=!1),this.notation=i,this.shadow=(o=n.shadow)!=null?o:\"none\",this.strokeWidth=(a=n.strokeWidth)!=null?a:\"0.06em\",this.strokeWidth||(this.strokeWidth=\"0.06em\"),this.strokeStyle=n.strokeStyle,this.svgStrokeStyle=n.svgStrokeStyle,this.strokeColor=n.strokeColor,this.borderStyle=n.borderStyle,this.padding=n.padding,this.captureSelection=!1}static fromJson(e){return new t(e.command,e.body,e.notation,e)}toJson(){return g(p({},super.toJson()),{notation:this.notation,shadow:this.shadow,strokeWidth:this.strokeWidth,strokeStyle:this.strokeStyle,svgStrokeStyle:this.svgStrokeStyle,strokeColor:this.strokeColor,borderStyle:this.borderStyle,padding:this.padding})}_serialize(e){var n;if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex==\"string\")return this.verbatimLatex;let r=ne(this.command,this.mode);if(r!=null&&r.serialize)return r.serialize(this,e);let i=(n=this.command)!=null?n:\"\";if(this.command===\"\\\\enclose\"){i+=\"{\"+Object.keys(this.notation).join(\" \")+\"}\";let o=\"\",a=\"\";this.backgroundcolor&&this.backgroundcolor!==\"transparent\"&&(o+=a+'mathbackground=\"'+this.backgroundcolor+'\"',a=\",\"),this.shadow&&this.shadow!==\"auto\"&&(o+=a+'shadow=\"'+this.shadow+'\"',a=\",\"),this.strokeWidth||this.strokeStyle!==\"solid\"?(o+=a+this.borderStyle,a=\",\"):this.strokeColor&&this.strokeColor!==\"currentColor\"&&(o+=a+'mathcolor=\"'+this.strokeColor+'\"',a=\",\"),o&&(i+=`[${o}]`)}return W(i,this.bodyToLatex(e))}render(e){let r=new B({parent:e},this.style),i=y.createBox(r,this.body);if(!i)return null;let n=Xf(this.borderStyle),o=r.toEm(!this.padding||this.padding===\"auto\"?{register:\"fboxsep\"}:{string:this.padding});i.setStyle(\"position\",\"relative\"),i.setStyle(\"display\",\"inline-block\"),i.setStyle(\"height\",i.height+i.depth,\"em\"),i.setStyle(\"width\",i.width,\"em\");let a=new w(null,{classes:\"ML__notation\"}),s=i.height+i.depth+2*o,l=i.width+2*o,c=\"\",u=Math.min(o*.2,.05);if(this.notation.horizontalstrike){let h=2*o+i.height-Je/2;c+=this.line((o+u).toString(),h.toString(),(o+i.width-u).toString(),h.toString())}if(this.notation.verticalstrike){let h=o+i.width/2;c+=this.line(h.toString(),(o+u).toString(),h.toString(),(s-o-u).toString())}if(this.notation.updiagonalstrike&&(c+=this.line((o+u).toString(),(s-o-u).toString(),(o+i.width-u).toString(),(o+u).toString())),this.notation.downdiagonalstrike&&(c+=this.line((o+u).toString(),(o+u).toString(),(o+i.width-u).toString(),(s-o-u).toString())),this.notation.updiagonalarrow){c+=this.line(o.toString(),(2*o+i.depth+i.height).toString(),(o+i.width).toString(),o.toString());let x=.03*Math.sqrt(l*l+s*s)*1,v=i.width*x,b=(i.depth+i.height)*x,_=o+i.width,S=o;S+b-.4*v<0&&(S=.4*v-b),c+='<polygon points=\"',c+=`${_},${S} ${_-v-.4*b},${S+b-.4*v} `,c+=`${_-.7*v},${S+.7*b} ${_-v+.4*b},${S+b+.4*v} `,c+=`${_},${S}`,c+=`\" stroke='none' fill=\"${this.strokeColor}\"`,c+=\"/>\"}let m=0;if(this.notation.phasorangle){let h=ap(r),f=(i.height+i.depth+2*h+2*o).toString(),x=(i.height+i.depth)/2;c+=this.line(o.toString(),f,(o+x+i.width).toString(),f),c+=this.line(o.toString(),f,(o+x).toString(),(o-h).toString()),s+=h,m=x,i.left+=s/2-o}if(this.notation.longdiv){let h=ap(r);s+=h,c+=this.line(o.toString(),o.toString(),(o+i.width).toString(),o.toString());let f=.3;m=f+h,i.left+=f+h,i.setTop(o+h),c+='<path d=\"',c+=`M ${o} ${o}  a${f} ${(i.depth+i.height+2*h)/2}, 0, 1, 1, 0 ${i.depth+i.height+2*h} \"`,c+=` stroke-width=\"${Zf(r)}\" stroke=\"${this.strokeColor}\" fill=\"none\"`,c+=\"/>\"}if(a.width=i.width+2*o+m,a.height=i.height+2*o,a.depth=i.depth,a.setStyle(\"box-sizing\",\"border-box\"),a.setStyle(\"left\",`calc(-1 * ${n} - ${o}em)`),a.setStyle(\"height\",`calc( ${i.height+i.depth+2*o}em + ${n})`),a.setStyle(\"top\",\"0em\"),a.setStyle(\"width\",`calc(${i.width+2*o}em + ${n})`),this.backgroundcolor&&a.setStyle(\"background-color\",this.backgroundcolor),this.notation.box&&a.setStyle(\"border\",\"1px solid red\"),this.notation.actuarial&&(a.setStyle(\"border-top\",this.borderStyle),a.setStyle(\"border-right\",this.borderStyle)),this.notation.madruwb&&(a.setStyle(\"border-bottom\",this.borderStyle),a.setStyle(\"border-right\",this.borderStyle)),this.notation.roundedbox&&(a.setStyle(\"border-radius\",\"8px\"),a.setStyle(\"border\",this.borderStyle)),this.notation.circle&&(a.setStyle(\"border-radius\",\"50%\"),a.setStyle(\"border\",this.borderStyle)),this.notation.top&&a.setStyle(\"border-top\",this.borderStyle),this.notation.left&&a.setStyle(\"border-left\",this.borderStyle),this.notation.right&&a.setStyle(\"border-right\",this.borderStyle),this.notation.bottom&&a.setStyle(\"border-bottom\",this.borderStyle),c){let h=\"\";this.shadow===\"auto\"&&(h+=\"filter: drop-shadow(0 0 .5px rgba(255, 255, 255, .7)) drop-shadow(1px 1px 2px #333)\"),this.shadow!==\"none\"&&(h+=`filter: drop-shadow(${this.shadow})`),h+=` stroke-width=\"${this.strokeWidth}\" stroke=\"${this.strokeColor}\"`,h+=' stroke-linecap=\"round\"',this.svgStrokeStyle&&(h+=` stroke-dasharray=\"${this.svgStrokeStyle}\"`),a.svgStyle=h,a.svgOverlay=c}let d=new w([a,i]);return d.setStyle(\"position\",\"relative\"),d.setStyle(\"height\",`${Math.floor(100*(a.depth+a.height))/100}em`),d.setStyle(\"display\",\"inline-block\"),d.height=a.height,d.depth=a.depth,d.width=a.width-2*o,d.left=o,d.right=o,this.caret&&(d.caret=this.caret),d.wrap(r)}line(e,r,i,n){return`<line x1=\"${Za(e)}\"  y1=\"${Za(r)}\" x2=\"${Za(i)}\" y2=\"${Za(n)}\" vector-effect=\"non-scaling-stroke\"></line>`}};function Za(t){return typeof t==\"number\"?`${Math.floor(100*t)/100}%`:t}function Xf(t){if(!t)return\"1px\";let e=t.match(/([0-9][a-zA-Z\\%]+)/);return e===null?\"1px\":e[1]}function Zf(t){return(Math.floor(100*t.metrics.sqrtRuleThickness/t.scalingFactor)/100/10).toString()+\"em\"}function ap(t){let e=t.isDisplayStyle?Je:t.metrics.defaultRuleThickness;return t.metrics.defaultRuleThickness+t.scalingFactor*e/4}var dn={fractionNavigationOrder:\"numerator-denominator\"};var ft=class t extends y{constructor(e,r,i){var n,o,a;super(g(p({},i),{type:\"genfrac\",displayContainsHighlight:!0})),this.above=e,this.below=r,this.hasBarLine=(n=i==null?void 0:i.hasBarLine)!=null?n:!0,this.continuousFraction=(o=i==null?void 0:i.continuousFraction)!=null?o:!1,this.align=(a=i==null?void 0:i.align)!=null?a:\"center\",this.numerPrefix=i==null?void 0:i.numerPrefix,this.denomPrefix=i==null?void 0:i.denomPrefix,this.mathstyleName=i==null?void 0:i.mathstyleName,this.leftDelim=i==null?void 0:i.leftDelim,this.rightDelim=i==null?void 0:i.rightDelim}static fromJson(e){return new t(e.above,e.below,e)}toJson(){let e={};return this.continuousFraction&&(e.continuousFraction=!0),this.align!==\"center\"&&(e.align=this.align),this.numerPrefix&&(e.numerPrefix=this.numerPrefix),this.denomPrefix&&(e.denomPrefix=this.denomPrefix),this.leftDelim&&(e.leftDelim=this.leftDelim),this.rightDelim&&(e.rightDelim=this.rightDelim),this.hasBarLine||(e.hasBarLine=!1),this.mathstyleName&&(e.mathstyleName=this.mathstyleName),p(p({},super.toJson()),e)}get children(){if(this._children)return this._children;let e=[];if(dn.fractionNavigationOrder===\"denominator-numerator\"){for(let r of this.below)e.push(...r.children),e.push(r);for(let r of this.above)e.push(...r.children),e.push(r)}else{for(let r of this.above)e.push(...r.children),e.push(r);for(let r of this.below)e.push(...r.children),e.push(r)}return this._children=e,e}render(e){var E,D;let r=new B({parent:e,mathstyle:this.mathstyleName},this.style),i=r.metrics,n=new B({parent:r,mathstyle:this.continuousFraction?\"\":\"numerator\"},this.style),o=this.numerPrefix?new w([new w(this.numerPrefix),y.createBox(n,this.above)],{isTight:n.isTight,type:\"ignore\"}):(E=y.createBox(n,this.above,{type:\"ignore\"}))!=null?E:new w(null,{type:\"ignore\"}),a=new B({parent:r,mathstyle:this.continuousFraction?\"\":\"denominator\"},this.style),s=this.denomPrefix?new w([new w(this.denomPrefix),y.createBox(a,this.below,{type:\"ignore\"})]):(D=y.createBox(a,this.below,{type:\"ignore\"}))!=null?D:new w(null,{type:\"ignore\"}),l=this.hasBarLine?i.defaultRuleThickness:0,c,u=0,m;r.isDisplayStyle?(c=n.metrics.num1,u=l>0?3*l:7*l,m=a.metrics.denom1):(l>0?(c=n.metrics.num2,u=l):(c=n.metrics.num3,u=3*i.defaultRuleThickness),m=a.metrics.denom2);let d=[];this.isSelected&&d.push(\"ML__selected\");let h=o.depth,f=s.height,x;if(l<=0){let L=c-h-(f-m);L<u&&(c+=(u-L)/2,m+=(u-L)/2),x=new te({individualShift:[{box:o,shift:-c,classes:[...d,Ya(this.align)]},{box:s,shift:m,classes:[...d,Ya(this.align)]}]}).wrap(r)}else{let L=new w(null,{classes:\"ML__frac-line\",mode:this.mode,style:this.style});L.softWidth=Math.max(o.width,s.width),L.height=l/2,L.depth=l/2;let K=Pe+l/2;c<u+h+K&&(c=u+h+K);let $=Pe-l/2;m<u+f-$&&(m=u+f-$),x=new te({individualShift:[{box:s,shift:m,classes:[...d,Ya(this.align)]},{box:L,shift:-$,classes:d},{box:o,shift:-c,classes:[...d,Ya(this.align)]}]}).wrap(r)}let v=r.isDisplayStyle?i.delim1:i.delim2,b=this.leftDelim?this.bind(e,rn(\"open\",this.leftDelim,v,!0,e,{style:this.style,mode:this.mode,isSelected:this.isSelected})):ar(r,\"ML__open\"),_=null;this.continuousFraction?_=new w(null,{type:\"close\"}):this.rightDelim?_=this.bind(e,rn(\"close\",this.rightDelim,v,!0,e,{style:this.style,mode:this.mode,isSelected:this.isSelected})):_=ar(r,\"ML__close\");let S=new w([b,x,_],{isTight:r.isTight,type:\"inner\",classes:\"ML__mfrac\"}),A=this.bind(e,S);return this.caret&&(A.caret=this.caret),this.attachSupsub(e,{base:A})}};function Ya(t){var e;return(e={left:\"ML__left\",right:\"ML__right\",center:\"ML__center\"}[t])!=null?e:\"ML__center\"}var pe=class t extends y{constructor(e,r){var i;super({type:\"latex\",value:e,mode:\"latex\"}),this.isSuggestion=(i=r==null?void 0:r.isSuggestion)!=null?i:!1,this.isError=!1}static fromJson(e){let r=new t(e.value);return e.isSuggestion&&(r.isSuggestion=!0),e.isError&&(r.isError=!0),r}toJson(){let e={};return this.isSuggestion&&(e.isSuggestion=!0),this.isError&&(e.isError=!0),p({type:\"latex\",value:this.value},e)}render(e){let r=new w(this.value,{classes:this.isSuggestion?\"ML__suggestion\":this.isError?\"ML__error\":\"\",type:\"latex\",maxFontSize:1});return r?(this.caret&&(r.caret=this.caret),this.bind(e,r)):null}},Nt=class t extends y{constructor(e=\"\"){super({type:\"latexgroup\",mode:\"latex\"}),this.body=[...e].map(r=>new pe(r)),this.skipBoundary=!0}static fromJson(e){return new t}toJson(){return super.toJson()}render(e){let r=y.createBox(e,this.body);return r?(this.caret&&(r.caret=this.caret),this.bind(e,r)):null}_serialize(e){var r,i;return(i=(r=this.body)==null?void 0:r.map(n=>n.value).join(\"\"))!=null?i:\"\"}};var di=class t extends y{constructor(e,r){super(g(p({},r),{type:\"extensible-symbol\",isFunction:r==null?void 0:r.isFunction})),this.value=e,this.variant=r==null?void 0:r.variant,this.subsupPlacement=r==null?void 0:r.limits}static fromJson(e){return new t(e.symbol,e)}toJson(){let e=super.toJson();return this.variant&&(e.variant=this.variant),this.subsupPlacement&&(e.limits=this.subsupPlacement),this.value&&(e.symbol=this.value),e}render(e){var s;let r=e.isDisplayStyle&&this.value!==\"\\\\smallint\",i=new w(this.value,{fontFamily:r?\"Size2-Regular\":\"Size1-Regular\",classes:\"ML__op-symbol \"+(r?\"ML__large-op\":\"ML__small-op\"),type:\"op\",maxFontSize:e.scalingFactor,isSelected:this.isSelected});if(!i)return null;i.right=i.italic;let n=(i.height-i.depth)/2-Pe*e.scalingFactor,o=i.italic;i.setTop(n);let a=i;if(this.superscript||this.subscript){let l=(s=this.subsupPlacement)!=null?s:\"auto\";l===\"auto\"&&e.isDisplayStyle&&(l=\"over-under\"),a=l===\"over-under\"?this.attachLimits(e,{base:i,baseShift:n,slant:o}):this.attachSupsub(e,{base:i})}return new w(this.bind(e,a),{type:\"op\",caret:this.caret,isSelected:this.isSelected,classes:\"ML__op-group\"}).wrap(e)}_serialize(e){if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex==\"string\")return this.verbatimLatex;let r=ne(this.command,this.mode);if(r!=null&&r.serialize)return r.serialize(this,e);let i=[];return i.push(this.command),this.explicitSubsupPlacement&&(this.subsupPlacement===\"over-under\"&&i.push(\"\\\\limits\"),this.subsupPlacement===\"adjacent\"&&i.push(\"\\\\nolimits\"),this.subsupPlacement===\"auto\"&&i.push(\"\\\\displaylimits\")),i.push(this.supsubToLatex(e)),P(i)}};var gt=class t extends y{constructor(e){let r=e.body;super(g(p({},e),{type:\"overlap\",body:typeof r==\"string\"?[new y({value:r})]:r,style:e==null?void 0:e.style})),this.skipBoundary=!0,this.align=e==null?void 0:e.align,this.boxType=e==null?void 0:e.boxType}static fromJson(e){return new t(e)}toJson(){let e={};return this.align&&(e.align=this.align),this.boxType&&(e.boxType=this.boxType),p(p({},super.toJson()),e)}render(e){let r=y.createBox(e,this.body,{classes:\"ML__inner\"});return r?(this.caret&&(r.caret=this.caret),this.bind(e,new w([r,new w(null,{classes:\"ML__fix\"})],{classes:this.align===\"right\"?\"ML__rlap\":\"ML__llap\",type:this.boxType}))):null}};var Ae=class t extends y{constructor(e){var r,i,n,o;super({type:\"overunder\",command:e.command,style:e.style,mode:e.mode,body:e.body,skipBoundary:(r=e.skipBoundary)!=null?r:!0}),this.subsupPlacement=e.supsubPlacement,this.svgAbove=e.svgAbove,this.svgBelow=e.svgBelow,this.svgBody=e.svgBody,this.above=e.above,this.below=e.below,this.boxType=(i=e.boxType)!=null?i:\"ord\",this.paddedBody=(n=e.paddedBody)!=null?n:!1,this.paddedLabels=(o=e.paddedLabels)!=null?o:!1}static fromJson(e){return new t(e)}toJson(){let e=super.toJson();return this.skipBoundary||(e.skipBoundary=!1),this.subsupPlacement&&(e.subsupPlacement=this.subsupPlacement),this.svgAbove&&(e.svgAbove=this.svgAbove),this.svgBelow&&(e.svgBelow=this.svgBelow),this.svgBody&&(e.svgBody=this.svgBody),this.boxType!==\"ord\"&&(e.boxType=this.boxType),this.paddedBody&&(e.paddedBody=!0),this.paddedLabels&&(e.paddedLabels=!0),e}render(e){let r=this.svgBody?Gi(this.svgBody):y.createBox(e,this.body,{type:\"ignore\"}),i=new B({parent:e,mathstyle:\"scriptstyle\"},this.style),n=null;this.svgAbove?n=Gi(this.svgAbove):this.above&&(n=y.createBox(i,this.above,{type:\"ignore\"}));let o=null;this.svgBelow?o=Gi(this.svgBelow):this.below&&(o=y.createBox(i,this.below,{type:\"ignore\"})),this.paddedBody&&(r=new w([ar(e,\"ML__open\"),r,ar(e,\"ML__close\")],{type:\"ignore\"}));let a=Yf(e,{base:r,above:n,below:o,type:this.boxType===\"bin\"||this.boxType===\"rel\"?this.boxType:\"ord\",paddedAboveBelow:this.paddedLabels});return a?(this.subsupPlacement===\"over-under\"?a=this.attachLimits(e,{base:a,type:a.type}):a=this.attachSupsub(e,{base:a}),this.caret&&(a.caret=this.caret),this.bind(e,a)):null}};function Yf(t,e){if(!e.base)return null;if(!e.above&&!e.below){let s=new w(e.base,{type:e.type});return s.setStyle(\"position\",\"relative\"),s}let r=0;e.above&&(r=t.metrics.bigOpSpacing5);let i=null,n=e.base,o=0,a=[\"ML__center\"];if(e.paddedAboveBelow&&a.push(\"ML__label_padding\"),e.below&&e.above){let s=t.metrics.bigOpSpacing5+e.below.height+e.below.depth+n.depth+o;i=new te({bottom:s,children:[t.metrics.bigOpSpacing5,{box:e.below,classes:a},{box:n,classes:[\"ML__center\"]},r,{box:e.above,classes:a},t.metrics.bigOpSpacing5]})}else e.below?i=new te({top:n.height-o,children:[t.metrics.bigOpSpacing5,{box:e.below,classes:a},{box:n,classes:[\"ML__center\"]}]}):e.above&&(i=new te({bottom:n.depth+o,children:[{box:n,classes:[\"ML__center\"]},r,{box:e.above,classes:a},t.metrics.bigOpSpacing5]}));return new w(i,{type:e.type})}var Ft=class t extends y{constructor(e){var r,i,n,o;super(g(p({},e),{type:\"phantom\"})),this.captureSelection=!0,this.isInvisible=(r=e.isInvisible)!=null?r:!1,this.smashDepth=(i=e.smashDepth)!=null?i:!1,this.smashHeight=(n=e.smashHeight)!=null?n:!1,this.smashWidth=(o=e.smashWidth)!=null?o:!1}static fromJson(e){return new t(e)}toJson(){let e={};return this.isInvisible&&(e.isInvisible=!0),this.smashDepth&&(e.smashDepth=!0),this.smashHeight&&(e.smashHeight=!0),this.smashWidth&&(e.smashWidth=!0),p(p({},super.toJson()),e)}render(e){let r=new B({parent:e,isPhantom:!0});if(!this.smashDepth&&!this.smashHeight&&!this.smashWidth)return this.isInvisible,y.createBox(r,this.body,{classes:\"ML__inner\"});let i=y.createBox(this.isInvisible?r:e,this.body);if(!i)return null;if(this.smashWidth){let n=new w(null,{classes:\"ML__fix\"});return new w([i,n],{classes:\"ML__rlap\"}).wrap(e)}if(!this.smashHeight&&!this.smashDepth)return i;if(this.smashHeight&&(i.height=0),this.smashDepth&&(i.depth=0),i.children)for(let n of i.children)this.smashHeight&&(n.height=0),this.smashDepth&&(n.depth=0);return new te({firstBaseline:[{box:i}]},{type:i.type}).wrap(e)}};var $t=class t extends y{constructor(e){var r;super(p({type:\"spacing\"},e)),this.width=e==null?void 0:e.width,this._braced=(r=e==null?void 0:e.braced)!=null?r:!1}static fromJson(e){return new t(e)}toJson(){let e=super.toJson();return this.width!==void 0&&(e.width=this.width),this._braced&&(e.braced=!0),e}render(e){var i;if(this.command===\"space\")return new w(this.mode===\"math\"?null:\" \");let r;if(this.width!==void 0)r=new w(null,{classes:\"ML__mspace\"}),r.left=e.toEm(this.width);else{let n=(i={\"\\\\qquad\":\"ML__qquad\",\"\\\\quad\":\"ML__quad\",\"\\\\enspace\":\"ML__enspace\",\"\\\\;\":\"ML__thickspace\",\"\\\\:\":\"ML__mediumspace\",\"\\\\>\":\"ML__mediumspace\",\"\\\\,\":\"ML__thinspace\",\"\\\\!\":\"ML__negativethinspace\"}[this.command])!=null?i:\"ML__mediumspace\";r=new w(null,{classes:n})}return r=this.bind(e,r),this.caret&&(r.caret=this.caret),r}_serialize(e){var n;if(!e.expandMacro&&typeof this.verbatimLatex==\"string\")return this.verbatimLatex;let r=ne(this.command,this.mode);if(r!=null&&r.serialize)return r.serialize(this,e);let i=(n=this.command)!=null?n:\"\";return this.width===void 0?i:this._braced&&!(\"register\"in this.width)?`${i}{${_e(this.width)}}`:`${i}${_e(this.width)}`}};var mn=class t extends y{constructor(e){var r;super(g(p({},e),{type:\"surd\",mode:(r=e.mode)!=null?r:\"math\",style:e.style,displayContainsHighlight:!0,body:e.body})),this.above=e.index}static fromJson(e){return new t(g(p({},e),{index:e.above}))}_serialize(e){if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex==\"string\")return this.verbatimLatex;let r=ne(this.command,this.mode);if(r!=null&&r.serialize)return r.serialize(this,e);let i=this.command,n=this.bodyToLatex(e);return this.above&&!this.hasEmptyBranch(\"above\")?W(`${i}[${this.aboveToLatex(e)}]`,n):/^[0-9]$/.test(n)?`${i}${n}`:W(i,n)}get children(){if(this._children)return this._children;let e=[];if(this.above)for(let r of this.above)e.push(...r.children),e.push(r);if(this.body)for(let r of this.body)e.push(...r.children),e.push(r);return this._children=e,e}render(e){var _;let r=new B({parent:e,mathstyle:\"cramp\"},this.style),i=(_=y.createBox(r,this.body,{type:\"inner\"}))!=null?_:new w(null),n=r.scalingFactor,o=r.metrics.defaultRuleThickness/n,a=e.isDisplayStyle?Je:o,s=new w(null,{classes:\"ML__sqrt-line\",style:this.style});s.height=o,s.softWidth=i.width;let l=n*(o+a/4),u=Math.max(n*2*a,i.height+i.depth)+l+o,m=new B({parent:e},this.style),d=this.bind(m,new w(rn(\"inner\",\"\\\\surd\",u,!1,m,{isSelected:this.isSelected}),{isSelected:this.isSelected,classes:\"ML__sqrt-sign\",style:this.style}));if(!d)return null;let h=d.height+d.depth-o;h>i.height+i.depth+l&&(l=(l+h-(i.height+i.depth))/2),d.setTop(d.height-i.height-l);let f=this.bind(e,new te({firstBaseline:[{box:new w(i)},l-2*o,{box:s},o]})),x=y.createBox(new B({parent:e,mathstyle:\"scriptscriptstyle\"}),this.above,{type:\"ignore\"});if(!x){let S=new w([d,f],{classes:this.containsCaret?\"ML__contains-caret\":\"\",type:\"inner\"});return S.setStyle(\"display\",\"inline-block\"),S.setStyle(\"height\",S.height+S.depth,\"em\"),this.caret&&(S.caret=this.caret),this.bind(e,S)}let v=new te({shift:-.6*(Math.max(d.height,f.height)-Math.max(d.depth,f.depth)),children:[{box:x}]}),b=new w([new w(v,{classes:\"ML__sqrt-index\",type:\"ignore\"}),d,f],{type:\"inner\",classes:this.containsCaret?\"ML__contains-caret\":\"\"});return b.height=d.height,b.depth=d.depth,this.caret&&(b.caret=this.caret),this.bind(e,b)}};var nc=class extends w{constructor(e){super(null,{type:\"skip\"}),this._width=e}toMarkup(){return`<span style=\"display:inline-block;width:${Math.ceil(this.width*100)/100}em\"></span>`}};function eo(t,e){if(!t.parent)return;let r=t.parent.children,i=r.indexOf(t),n=i-1;for(;n>=0&&r[n].type===\"ignore\";)n-=1;if(n<0&&t.parent.parent&&t.parent.type===\"lift\"){eo(t.parent,e);return}i>0&&r[i-1].type===\"skip\"?r[i-1].width+=e:r.splice(i,0,new nc(e))}var Qf={ord:{op:3,bin:4,rel:5,inner:3},op:{ord:3,op:3,rel:5,inner:3},bin:{ord:4,op:4,open:4,inner:4},rel:{ord:5,op:5,open:5,inner:5},close:{op:3,bin:4,rel:5,inner:3},punct:{ord:3,op:3,rel:3,open:3,punct:3,inner:3},inner:{ord:3,op:3,bin:4,rel:5,open:3,punct:3,inner:3}},eg={ord:{op:3},op:{ord:3,op:3},close:{op:3},inner:{op:3}};function tg(t){to(t,(e,r)=>{r.type===\"bin\"&&(!e||/^(middle|bin|op|rel|open|punct)$/.test(e.type))&&(r.type=\"ord\"),(e==null?void 0:e.type)===\"bin\"&&/^(rel|close|punct)$/.test(r.type)&&(e.type=\"ord\"),r.type!==\"ignore\"&&(e=r)})}function Vt(t,e){if(!t.children)return t;let r=t.children;tg(r);let i=e.getRegisterAsEm(\"thinmuskip\"),n=e.getRegisterAsEm(\"medmuskip\"),o=e.getRegisterAsEm(\"thickmuskip\");return to(r,(a,s)=>{var m,d,h;if(!a)return;let l=a.type,c=s.isTight?(m=eg[l])!=null?m:null:(d=Qf[l])!=null?d:null,u=(h=c==null?void 0:c[s.type])!=null?h:null;u===3&&eo(s,i),u===4&&eo(s,n),u===5&&eo(s,o)}),t}function to(t,e,r=void 0){if(!t)return r;t=[...t];for(let i of t)i.type===\"lift\"?r=to(i.children,e,r):i.type===\"ignore\"?to(i.children,e):(e(r,i),to(i.children,e),r=i);return r}var mi=class t extends y{constructor(e){super({type:\"tooltip\",command:e.command,mode:e.mode,style:e.style,body:e.body,displayContainsHighlight:!0}),this.tooltip=new y({type:\"root\",mode:e.content,body:e.tooltip,style:{}}),this.skipBoundary=!0,this.captureSelection=!1}static fromJson(e){return new t(g(p({},e),{tooltip:bt(e.tooltip)}))}toJson(){var r;let e=(r=this.tooltip.body)==null?void 0:r.filter(i=>i.type!==\"first\").map(i=>i.toJson());return g(p({},super.toJson()),{tooltip:e})}render(e){let r=y.createBox(e,this.body);if(!r)return null;let i=new B({parent:e,mathstyle:\"displaystyle\"},{fontSize:Ui}),n=Tr(Vt(new w(this.tooltip.render(i),{classes:\"ML__tooltip-content\"}),i)),o=new w([n,r],{classes:\"ML__tooltip-container\"});return this.caret&&(o.caret=this.caret),this.bind(e,o)}};var yt=class t extends y{constructor(e,r){super(g(p({},r),{type:\"operator\",isFunction:r==null?void 0:r.isFunction})),this.value=e,this.variant=r==null?void 0:r.variant,this.variantStyle=r==null?void 0:r.variantStyle,this.subsupPlacement=r==null?void 0:r.limits}static fromJson(e){return new t(e.symbol,e)}toJson(){let e=super.toJson();return this.variant&&(e.variant=this.variant),this.variantStyle&&(e.variantStyle=this.variantStyle),this.subsupPlacement&&(e.limits=this.subsupPlacement),this.value&&(e.symbol=this.value),e}render(e){var n;let r=new w(this.value,{type:\"op\",mode:\"math\",maxFontSize:e.scalingFactor,style:{variant:this.variant,variantStyle:this.variantStyle},isSelected:this.isSelected,letterShapeStyle:e.letterShapeStyle}),i=r;if(this.superscript||this.subscript){let o=(n=this.subsupPlacement)!=null?n:\"auto\";i=o===\"over-under\"||o===\"auto\"&&e.isDisplayStyle?this.attachLimits(e,{base:r}):this.attachSupsub(e,{base:r})}return new w(this.bind(e,i),{type:\"op\",caret:this.caret,isSelected:this.isSelected,classes:\"ML__op-group\"}).wrap(e)}_serialize(e){if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex==\"string\")return this.verbatimLatex;let r=ne(this.command,this.mode);if(r!=null&&r.serialize)return r.serialize(this,e);let i=[this.command];return this.explicitSubsupPlacement&&(this.subsupPlacement===\"over-under\"&&i.push(\"\\\\limits\"),this.subsupPlacement===\"adjacent\"&&i.push(\"\\\\nolimits\"),this.subsupPlacement===\"auto\"&&i.push(\"\\\\displaylimits\")),i.push(this.supsubToLatex(e)),P(i)}};function bt(t){if(ee(t))return t.map(i=>bt(i));if(typeof t==\"string\")return y.fromJson(t);t=p({},t);for(let i of Pr)t[i]&&(t[i]=bt(t[i]));t.args&&(t.args=rg(t.args)),t.array&&(t.array=bt(t.array));let e=t.type,r;e===\"accent\"&&(r=Ir.fromJson(t)),e===\"array\"&&(r=z.fromJson(t)),e===\"box\"&&(r=ot.fromJson(t)),e===\"chem\"&&(r=Qn.fromJson(t)),e===\"composition\"&&(r=nn.fromJson(t)),e===\"delim\"&&(r=cn.fromJson(t)),e===\"enclose\"&&(r=lr.fromJson(t)),e===\"error\"&&(r=ht.fromJson(t)),e===\"extensible-symbol\"&&(r=di.fromJson(t)),e===\"genfrac\"&&(r=ft.fromJson(t)),e===\"group\"&&(r=on.fromJson(t)),e===\"latex\"&&(r=pe.fromJson(t)),e===\"latexgroup\"&&(r=Nt.fromJson(t)),e===\"leftright\"&&(r=Y.fromJson(t)),e===\"macro\"&&(r=an.fromJson(t)),e===\"macro-argument\"&&(r=Ja.fromJson(t)),e===\"operator\"&&(r=yt.fromJson(t)),e===\"overlap\"&&(r=gt.fromJson(t)),e===\"overunder\"&&(r=Ae.fromJson(t)),e===\"placeholder\"&&(r=Le.fromJson(t)),e===\"prompt\"&&(r=sn.fromJson(t)),e===\"phantom\"&&(r=Ft.fromJson(t)),e===\"sizeddelim\"&&(r=un.fromJson(t)),e===\"spacing\"&&(r=$t.fromJson(t)),e===\"subsup\"&&(r=sr.fromJson(t)),e===\"surd\"&&(r=mn.fromJson(t)),e===\"text\"&&(r=qe.fromJson(t)),e===\"tooltip\"&&(r=mi.fromJson(t)),r||(!e||[\"first\",\"mbin\",\"mrel\",\"mclose\",\"minner\",\"mop\",\"mopen\",\"mord\",\"mpunct\",\"root\",\"space\"].includes(e),`${e}`,r=y.fromJson(t));for(let i of Pr)t[i]&&r.setChildren(t[i],i);return t.verbatimLatex!==void 0&&(r.verbatimLatex=t.verbatimLatex),t.subsupPlacement&&(r.subsupPlacement=t.subsupPlacement),t.explicitSubsupPlacement&&(r.explicitSubsupPlacement=!0),t.isFunction&&(r.isFunction=!0),t.skipBoundary&&(r.skipBoundary=!0),t.captureSelection&&(r.captureSelection=!0),r}function rg(t){if(t){if(typeof t==\"string\")return t;if(Array.isArray(t))return t.map(e=>e===\"<null>\"?null:typeof e==\"object\"&&\"group\"in e?{group:e.group.map(r=>bt(r))}:typeof e==\"object\"&&\"atoms\"in e?e.atoms.map(r=>bt(r)):e)}}function ro(t,e){!t||!e||(ee(t)?t.forEach(r=>ro(r,e)):typeof t==\"object\"&&t.applyStyle(e,{unstyledOnly:!0}))}function io(t,e,r,i){function n(a,s){for(let l of o)if(l.style[a]!==s)return!1;return!0}if(e=t.normalizeRange(e),e[0]===e[1])return!1;let o=t.getAtoms(e,{includeChildren:!0});i.operation===\"toggle\"&&(r.color&&n(\"color\",r.color)&&(r.color=\"none\",delete r.verbatimColor),r.backgroundColor&&n(\"backgroundColor\",r.backgroundColor)&&(r.backgroundColor=\"none\",delete r.verbatimBackgroundColor),r.fontFamily&&n(\"fontFamily\",r.fontFamily)&&(r.fontFamily=\"none\"),r.fontSeries&&n(\"fontSeries\",r.fontSeries)&&(r.fontSeries=\"auto\"),r.fontShape&&n(\"fontShape\",r.fontShape)&&(r.fontShape=\"auto\"),r.fontSize&&n(\"fontSize\",r.fontSize)&&(r.fontSize=Ui),r.variant&&n(\"variant\",r.variant)&&(r.variant=\"normal\"),r.variantStyle&&n(\"variantStyle\",r.variantStyle)&&(r.variantStyle=\"\"));for(let a of o)a.applyStyle(r);return!0}function sp(t){return{up:\"italic\",bold:\"bolditalic\",italic:\"italic\",bolditalic:\"bolditalic\",\"\":\"italic\"}[t!=null?t:\"\"]}function no(t){return{up:\"up\",bold:\"bold\",italic:void 0,bolditalic:\"bold\",\"\":void 0}[t!=null?t:\"\"]}var lp={acute:714,grave:715,dot:729,ddot:168,dddot:8411,ddddot:8412,mathring:730,tilde:126,bar:713,breve:728,check:711,hat:94,vec:8407};M(Object.keys(lp),\"{body:auto}\",{createAtom:t=>new Ir(g(p({},t),{body:C(t.args[0]),accentChar:lp[t.command.slice(1)]}))});M([\"widehat\",\"widecheck\",\"widetilde\"],\"{body:auto}\",{createAtom:t=>{let e=ll(C(t.args[0]));return new Ir(g(p({},t),{body:C(t.args[0]),svgAccent:t.command.slice(1)+(e.length>5?\"4\":[\"1\",\"1\",\"2\",\"2\",\"3\",\"3\"][e.length])}))}});M([\"overarc\",\"overparen\",\"wideparen\"],\"{body:auto}\",{createAtom:t=>new Ir(g(p({},t),{body:C(t.args[0]),svgAccent:\"overarc\"}))});M([\"underarc\",\"underparen\"],\"{body:auto}\",{createAtom:t=>new Ae(g(p({},t),{body:C(t.args[0]),svgBelow:\"underarc\"}))});M(\"utilde\",\"{body:auto}\",{createAtom:t=>{let e=C(t.args[0]),r=ll(e),i=\"widetilde\"+(r.length>5?\"4\":[\"1\",\"1\",\"2\",\"2\",\"3\",\"3\"][r.length]);return new Ae(g(p({},t),{body:e,svgBelow:i,boxType:oi(e)}))}});M(\"^\",\"{:string}\",{createAtom:t=>{var e;return new y(g(p({},t),{type:\"mord\",isFunction:!1,limits:\"adjacent\",value:t.args[0]&&(e={a:\"\\xE2\",e:\"\\xEA\",i:\"\\xEE\",o:\"\\xF4\",u:\"\\xFB\",A:\"\\xC2\",E:\"\\xCA\",I:\"\\xCE\",O:\"\\xD4\",U:\"\\xDB\"}[t.args[0]])!=null?e:\"^\"}))}});M(\"`\",\"{:string}\",{createAtom:t=>{var e;return new y(g(p({},t),{type:\"mord\",isFunction:!1,limits:\"adjacent\",value:t.args[0]&&(e={a:\"\\xE0\",e:\"\\xE8\",i:\"\\xEC\",o:\"\\xF2\",u:\"\\xF9\",A:\"\\xC0\",E:\"\\xC8\",I:\"\\xCC\",O:\"\\xD2\",U:\"\\xD9\"}[t.args[0]])!=null?e:\"`\"}))}});M(\"'\",\"{:string}\",{createAtom:t=>{var e;return new y(g(p({},t),{type:\"mord\",isFunction:!1,limits:\"adjacent\",value:t.args[0]&&(e={a:\"\\xE1\",e:\"\\xE9\",i:\"\\xED\",o:\"\\xF3\",u:\"\\xFA\",A:\"\\xC1\",E:\"\\xC9\",I:\"\\xCD\",O:\"\\xD3\",U:\"\\xDA\"}[t.args[0]])!=null?e:\"'\"}))}});M('\"',\"{:string}\",{createAtom:t=>{var e,r;return new y(g(p({},t),{type:\"mord\",isFunction:!1,limits:\"adjacent\",value:(e=t.args)!=null&&e[0]?(r={a:\"\\xE4\",e:\"\\xEB\",i:\"\\xEF\",o:\"\\xF6\",u:\"\\xFC\",A:\"\\xC4\",E:\"\\xCB\",I:\"\\xCB\",O:\"\\xD6\",U:\"\\xDC\"}[t.args[0]])!=null?r:'\"'+t.args[0]:'\"'}))}});M(\".\",\"{:string}\",{createAtom:t=>{var e,r;return new y(g(p({},t),{type:\"mord\",isFunction:!1,limits:\"adjacent\",value:(e=t.args)!=null&&e[0]?(r={a:\"\\u0227\",e:\"\\u0117\",i:\"\\u0307i\",o:\"\\u022F\",u:\"\\u0307u\",A:\"\\u0226\",E:\"\\u0116\",I:\"\\u0130\",O:\"\\u022E\",U:\"\\u0307U\"}[t.args[0]])!=null?r:\".\"+t.args[0]:\".\"}))}});M(\"=\",\"{:string}\",{createAtom:t=>{var e,r;return new y(g(p({},t),{type:\"mord\",isFunction:!1,limits:\"adjacent\",value:(e=t.args)!=null&&e[0]?(r={a:\"\\u0101\",e:\"\\u0113\",i:\"\\u012B\",o:\"\\u014D\",u:\"\\u016B\",A:\"\\u0100\",E:\"\\u0112\",I:\"\\u012A\",O:\"\\u014C\",U:\"\\u016A\"}[t.args[0]])!=null?r:\"=\"+t.args[0]:\"=\"}))}});M(\"~\",\"{:string}\",{createAtom:t=>{var e;return new y(g(p({type:\"mord\"},t),{isFunction:!1,limits:\"adjacent\",value:t.args[0]&&(e={n:\"\\xF1\",N:\"\\xD1\",a:\"\\xE3\",o:\"\\xF5\",A:\"\\xC3\",O:\"\\xD5\"}[t.args[0]])!=null?e:\"\\xB4\"}))}});M(\"c\",\"{:string}\",{createAtom:t=>{var e;return new y(g(p({},t),{type:\"mord\",isFunction:!1,limits:\"adjacent\",value:t.args[0]&&(e={c:\"\\xE7\",C:\"\\xC7\"}[t.args[0]])!=null?e:\"\"}))}});M(\"enclose\",\"{notation:string}[style:string]{body:auto}\",{createAtom:t=>{var n,o;let e=t.args,r={strokeColor:\"currentColor\",strokeWidth:\"\",strokeStyle:\"solid\",backgroundcolor:\"transparent\",padding:\"auto\",shadow:\"none\",svgStrokeStyle:void 0,borderStyle:void 0,style:(n=t.style)!=null?n:{}};if(e[1]){let a=e[1].split(/,(?![^(]*\\)(?:(?:[^(]*\\)){2})*[^\"]*$)/);for(let s of a){let l=s.match(/\\s*(\\S+)\\s+(\\S+)\\s+(.*)/);if(l)r.strokeWidth=l[1],r.strokeStyle=l[2],r.strokeColor=l[3];else{let c=s.match(/\\s*([a-z]*)\\s*=\\s*\"(.*)\"/);c&&(c[1]===\"mathbackground\"?r.backgroundcolor=c[2]:c[1]===\"mathcolor\"?r.strokeColor=c[2]:c[1]===\"padding\"?r.padding=c[2]:c[1]===\"shadow\"&&(r.shadow=c[2]))}}r.strokeStyle===\"dashed\"?r.svgStrokeStyle=\"5,5\":r.strokeStyle===\"dotted\"&&(r.svgStrokeStyle=\"1,5\")}r.borderStyle=`${r.strokeWidth} ${r.strokeStyle} ${r.strokeColor}`;let i={};return((o=e[0])!=null?o:\"\").split(/[, ]/).filter(a=>a.length>0).forEach(a=>{i[a.toLowerCase()]=!0}),new lr(t.command,C(e[2]),i,r)}});M(\"cancel\",\"{body:auto}\",{createAtom:t=>{var e;return new lr(t.command,C(t.args[0]),{updiagonalstrike:!0},{strokeColor:\"currentColor\",strokeWidth:\"\",strokeStyle:\"solid\",borderStyle:\"1px solid currentColor\",backgroundcolor:\"transparent\",padding:\"auto\",shadow:\"none\",style:(e=t.style)!=null?e:{}})}});M(\"bcancel\",\"{body:auto}\",{createAtom:t=>{var e;return new lr(t.command,C(t.args[0]),{downdiagonalstrike:!0},{strokeColor:\"currentColor\",strokeWidth:\"\",strokeStyle:\"solid\",borderStyle:\"1px solid currentColor\",backgroundcolor:\"transparent\",padding:\"auto\",shadow:\"none\",style:(e=t.style)!=null?e:{}})}});M(\"xcancel\",\"{body:auto}\",{createAtom:t=>{var e;return new lr(t.command,C(t.args[0]),{updiagonalstrike:!0,downdiagonalstrike:!0},{strokeColor:\"currentColor\",strokeWidth:\"\",strokeStyle:\"solid\",borderStyle:\"1px solid currentColor\",backgroundcolor:\"transparent\",padding:\"auto\",shadow:\"none\",style:(e=t.style)!=null?e:{}})}});qo([\"math\",\"displaymath\"],Re);qo(\"center\",Re);Ct([\"multline\",\"multline*\"],\"\",Re);M(\"displaylines\",\"\",{parse:t=>{if(t.skipWhitespace(),!t.match(\"<{>\"))return[];let e=[],r=[];t.mathlist.length>0&&e.push([t.mathlist]),t.beginContext({tabular:!0,root:!0});do{if(t.end()||t.match(\"<}>\"))break;t.matchColumnSeparator()||t.matchRowSeparator()?(e.push([r]),r=[]):r.push(...t.scan(n=>[\"<}>\",\"&\",\"\\\\cr\",\"\\\\\\\\\",\"\\\\tabularnewline\"].includes(n)))}while(!0);t.endContext(),e.push([r]);let i=t.scan();return i.length>0&&e.push([i]),e},createAtom:t=>new z(\"lines\",t.args,[],{leftDelim:\".\",rightDelim:\".\",columns:[{align:\"l\"}],classes:[\"ML__multiline_environment\"],isRoot:!0,minColumns:1,maxColumns:1,minRows:1})});Ct(\"split\",\"\",Re);Ct([\"gather\",\"gather*\",\"gathered\"],\"\",Re);Ct([\"equation\",\"equation*\",\"subequations\"],\"\",Re);qo([\"align\",\"align*\",\"eqnarray\"],Re,{tabular:!0});Ct([\"aligned\"],\"\",Re);Ct(\"array\",\"{columns:colspec}\",(t,e,r,i)=>new z(t,e,r,{columns:i[0],mathstyleName:\"textstyle\"}));Ct([\"matrix\",\"pmatrix\",\"bmatrix\",\"Bmatrix\",\"vmatrix\",\"Vmatrix\",\"matrix*\",\"pmatrix*\",\"bmatrix*\",\"Bmatrix*\",\"vmatrix*\",\"Vmatrix*\"],\"[columns:colspec]\",Re);Ct([\"smallmatrix\",\"smallmatrix*\"],\"[columns:colspec]\",Re);Ct([\"cases\",\"dcases\",\"rcases\"],\"\",Re);function Re(t,e=[[[]]],r=[],i=[],n){switch(t){case\"math\":return new z(t,e,r,{mathstyleName:\"textstyle\",isRoot:!0,minColumns:1,maxColumns:1,minRows:1,maxRows:1});case\"displaymath\":return new z(t,e,r,{mathstyleName:\"textstyle\",isRoot:!0,minColumns:1,maxColumns:1,minRows:1,maxRows:1});case\"center\":return new z(t,e,r,{columns:[{align:\"c\"}],classes:[\"ML__center_environment\"],isRoot:!0,minColumns:1,maxColumns:1,minRows:1,maxRows:1});case\"multline\":case\"multline*\":return new z(t,e,r,{columns:[{align:\"m\"}],leftDelim:\".\",rightDelim:\".\",isRoot:!0,minColumns:1,maxColumns:1,minRows:1});case\"split\":return new z(t,e,r,{columns:[{align:\"r\"},{align:\"l\"}],minColumns:2,minRows:1,isRoot:!1});case\"gather\":case\"gather*\":return new z(t,e,r,{columns:[{gap:.25},{align:\"c\"},{gap:0}],minColumns:1,maxColumns:1,minRows:1,isRoot:!0,classes:[\"ML__gather_environment\"]});case\"gathered\":return new z(t,e,r,{columns:[{gap:.25},{align:\"c\"},{gap:0}],minColumns:1,maxColumns:1,minRows:1});case\"equation\":case\"equation*\":case\"subequations\":return new z(t,e,r,{columns:[{align:\"c\"}],isRoot:!0,minColumns:1,maxColumns:1,minRows:1});case\"aligned\":{let o=0;for(let l of e)o=Math.max(o,l.length);let a=[{gap:0},{align:\"r\"},{gap:.25},{align:\"l\"}],s=2;for(;s<o;)a.push({gap:1},{align:\"r\"},{gap:.25},{align:\"l\"}),s+=2;return a.push({gap:0}),new z(t,e,r,{arraycolsep:0,columns:a,minColumns:2,minRows:1,isRoot:t!==\"aligned\"})}case\"eqnarray\":return new z(t,e,r,{arraycolsep:0,columns:[{gap:0},{align:\"r\"},{align:\"c\"},{align:\"l\"}],minColumns:3,maxColumns:3,minRows:1,isRoot:!0,classes:[\"ML__eqnarray_environment\"]});case\"align\":case\"align*\":return new z(t,e,r,{arraycolsep:0,columns:[{gap:0},{align:\"r\"},{gap:.25},{align:\"l\"}],minColumns:2,maxColumns:2,minRows:1,isRoot:!0,classes:[\"ML__align_environment\"]});case\"pmatrix\":case\"pmatrix*\":return new z(t,e,r,{mathstyleName:\"textstyle\",leftDelim:\"(\",rightDelim:\")\",columns:pi(i[0],n)});case\"bmatrix\":case\"bmatrix*\":return new z(t,e,r,{mathstyleName:\"textstyle\",leftDelim:\"[\",rightDelim:\"]\",columns:pi(i[0],n)});case\"Bmatrix\":case\"Bmatrix*\":return new z(t,e,r,{mathstyleName:\"textstyle\",leftDelim:\"\\\\lbrace\",rightDelim:\"\\\\rbrace\",columns:pi(i[0],n)});case\"vmatrix\":case\"vmatrix*\":return new z(t,e,r,{mathstyleName:\"textstyle\",leftDelim:\"\\\\vert\",rightDelim:\"\\\\vert\",columns:pi(i[0],n)});case\"Vmatrix\":case\"Vmatrix*\":return new z(t,e,r,{mathstyleName:\"textstyle\",leftDelim:\"\\\\Vert\",rightDelim:\"\\\\Vert\",columns:pi(i[0],n)});case\"matrix\":case\"matrix*\":return new z(t,e,r,{mathstyleName:\"textstyle\",leftDelim:\".\",rightDelim:\".\",columns:pi(i==null?void 0:i[0],n)});case\"smallmatrix\":case\"smallmatrix*\":return new z(t,e,r,{mathstyleName:\"scriptstyle\",columns:pi(i==null?void 0:i[0],n),colSeparationType:\"small\",arraystretch:.5});case\"cases\":case\"dcases\":return new z(t,e,r,{mathstyleName:t===\"dcases\"?\"displaystyle\":\"textstyle\",arraystretch:1.2,leftDelim:\"\\\\lbrace\",rightDelim:\".\",columns:cp()});case\"rcases\":return new z(t,e,r,{arraystretch:1.2,leftDelim:\".\",rightDelim:\"\\\\rbrace\",columns:cp()});case\"lines\":return new z(t,e,r,{leftDelim:\".\",rightDelim:\".\",columns:[{align:\"l\"}],isRoot:!0,minColumns:1,maxColumns:1,minRows:1})}return new z(t,e,r,{mathstyleName:\"textstyle\"})}function pi(t,e=10){return t!=null?t:Array(e).fill({align:\"c\"})}function cp(t=10){let e=[];for(let r=0;r<t;r++)r>0&&e.push({gap:1}),e.push({align:\"l\"});return e}M([\"overrightarrow\",\"overleftarrow\",\"Overrightarrow\",\"overleftharpoon\",\"overrightharpoon\",\"overleftrightarrow\",\"overlinesegment\",\"overgroup\"],\"{:auto}\",{createAtom:t=>{var e;return new Ae(g(p({},t),{body:C((e=t.args)==null?void 0:e[0]),skipBoundary:!1,supsubPlacement:\"over-under\",paddedBody:!0,boxType:\"rel\",svgAbove:t.command.slice(1)}))}});M(\"overbrace\",\"{:auto}\",{createAtom:t=>new Ae(g(p({},t),{body:C(t.args[0]),skipBoundary:!1,supsubPlacement:\"over-under\",paddedBody:!0,boxType:\"ord\",svgAbove:t.command.slice(1)}))});M([\"underrightarrow\",\"underleftarrow\",\"underleftrightarrow\",\"underlinesegment\",\"undergroup\"],\"{:auto}\",{createAtom:t=>new Ae(g(p({},t),{body:C(t.args[0]),skipBoundary:!1,supsubPlacement:\"over-under\",paddedBody:!0,boxType:\"rel\",svgBelow:t.command.slice(1)}))});M([\"underbrace\"],\"{:auto}\",{createAtom:t=>new Ae(g(p({},t),{body:C(t.args[0]),skipBoundary:!1,supsubPlacement:\"over-under\",paddedBody:!0,boxType:\"ord\",svgBelow:t.command.slice(1)}))});M([\"xrightarrow\",\"longrightarrow\",\"xleftarrow\",\"longleftarrow\",\"xRightarrow\",\"xLeftarrow\",\"xleftharpoonup\",\"xleftharpoondown\",\"xrightharpoonup\",\"xrightharpoondown\",\"xlongequal\",\"xtwoheadleftarrow\",\"xtwoheadrightarrow\",\"xleftrightarrow\",\"longleftrightarrow\",\"xLeftrightarrow\",\"xrightleftharpoons\",\"longrightleftharpoons\",\"xleftrightharpoons\",\"xhookleftarrow\",\"xhookrightarrow\",\"xmapsto\",\"xtofrom\",\"xleftrightarrows\",\"longleftrightarrows\",\"xRightleftharpoons\",\"longRightleftharpoons\",\"xLeftrightharpoons\",\"longLeftrightharpoons\"],\"[:auto]{:auto}\",{createAtom:t=>{var e,r,i,n,o;return new Ae(g(p({},t),{svgBody:t.command.slice(1),above:((r=C((e=t.args)==null?void 0:e[1]))==null?void 0:r.length)===0?void 0:C((i=t.args)==null?void 0:i[1]),below:(o=C((n=t.args)==null?void 0:n[0]))!=null?o:null,skipBoundary:!1,supsubPlacement:\"over-under\",paddedBody:!0,paddedLabels:!0,boxType:\"rel\"}))},serialize:(t,e)=>t.command+(t.hasEmptyBranch(\"below\")?\"\":`[${t.belowToLatex(e)}]`)+`{${t.aboveToLatex(e)}}${t.supsubToLatex(e)}`});M([\"arccos\",\"arcsin\",\"arctan\",\"arctg\",\"arcctg\",\"arg\",\"ch\",\"cos\",\"cosh\",\"cot\",\"cotg\",\"coth\",\"ctg\",\"cth\",\"csc\",\"cosec\",\"deg\",\"dim\",\"exp\",\"gcd\",\"hom\",\"inf\",\"ker\",\"lb\",\"lg\",\"ln\",\"log\",\"Pr\",\"sec\",\"sh\",\"sin\",\"sinh\",\"sup\",\"tan\",\"tanh\",\"tg\",\"th\",\"arcsec\",\"arccsc\",\"arsinh\",\"arcosh\",\"artanh\",\"arcsech\",\"arccsch\"],\"\",{isFunction:!0,ifMode:\"math\",createAtom:t=>new yt(t.command.slice(1),g(p({},t),{limits:\"adjacent\",isFunction:!0,variant:\"main\",variantStyle:\"up\"}))});M([\"liminf\",\"limsup\"],\"\",{ifMode:\"math\",createAtom:t=>new yt({\"\\\\liminf\":\"lim inf\",\"\\\\limsup\":\"lim sup\"}[t.command],g(p({},t),{limits:\"over-under\",variant:\"main\"}))});M([\"lim\",\"mod\"],\"\",{ifMode:\"math\",createAtom:t=>new yt(t.command.slice(1),g(p({},t),{limits:\"over-under\",variant:\"main\"}))});M([\"det\",\"max\",\"min\"],\"\",{ifMode:\"math\",isFunction:!0,createAtom:t=>new yt(t.command.slice(1),g(p({},t),{limits:\"over-under\",isFunction:!0,variant:\"main\"}))});M(\"ang\",\"{:math}\",{ifMode:\"math\",createAtom:t=>new y(g(p({},t),{body:C(t.args[0])})),serialize:(t,e)=>`\\\\ang{${t.bodyToLatex(e)}}`,render:(t,e)=>{let r=t.createBox(e),i=r.caret;r.caret=void 0;let n=new w(\"\\xB0\",{style:g(p({},t.style),{variant:\"normal\",variantStyle:\"up\"})});return new w([r,n],{type:\"inner\",isSelected:t.isSelected,caret:i})}});M(\"sqrt\",\"[index:auto]{radicand:expression}\",{ifMode:\"math\",createAtom:t=>new mn(g(p({},t),{body:C(t.args[1]),index:t.args[0]?C(t.args[0]):void 0}))});M([\"frac\",\"dfrac\",\"tfrac\",\"binom\",\"dbinom\",\"tbinom\"],\"{:expression}{:expression}\",{ifMode:\"math\",createAtom:t=>{let e=p({},t),r=t.command,i=t.args;switch(r){case\"\\\\dfrac\":case\"\\\\frac\":case\"\\\\tfrac\":e.hasBarLine=!0;break;case\"\\\\atopfrac\":e.hasBarLine=!1;break;case\"\\\\dbinom\":case\"\\\\binom\":case\"\\\\tbinom\":e.hasBarLine=!1,e.leftDelim=\"(\",e.rightDelim=\")\";break;case\"\\\\cfrac\":e.hasBarLine=!0,e.continuousFraction=!0;break;default:}switch(r){case\"\\\\dfrac\":case\"\\\\dbinom\":e.mathstyleName=\"displaystyle\";break;case\"\\\\tfrac\":case\"\\\\tbinom\":e.mathstyleName=\"textstyle\";break;default:}return new ft(i[0]?C(i[0]):[new Le],i[1]?C(i[1]):[new Le],e)},serialize:(t,e)=>{let r=t.aboveToLatex(e),i=t.belowToLatex(e);return/^[0-9]$/.test(r)&&/^[0-9]$/.test(i)?`${t.command}${r}${i}`:W(t.command,r,i)}});M([\"cfrac\"],\"[:string]{:expression}{:expression}\",{ifMode:\"math\",createAtom:t=>{let e=p({},t),r=t.args;return e.hasBarLine=!0,e.continuousFraction=!0,r[0]===\"r\"&&(e.align=\"right\"),r[0]===\"l\"&&(e.align=\"left\"),new ft(r[1]?C(r[1]):[new Le],r[2]?C(r[2]):[new Le],e)},serialize:(t,e)=>{let r=t.aboveToLatex(e),i=t.belowToLatex(e);return W(t.command,r,i)}});M([\"brace\",\"brack\"],\"\",{infix:!0,createAtom:t=>new ft(C(t.args[0]),C(t.args[1]),g(p({},t),{hasBarLine:!1,leftDelim:t.command===\"\\\\brace\"?\"\\\\lbrace\":\"\\\\lbrack\",rightDelim:t.command===\"\\\\brace\"?\"\\\\rbrace\":\"\\\\rbrack\"})),serialize:(t,e)=>P([t.aboveToLatex(e),t.command,t.belowToLatex(e)])});M([\"over\",\"atop\",\"choose\"],\"\",{infix:!0,createAtom:t=>{let e,r,i=t.args;return t.command===\"\\\\choose\"&&(e=\"(\",r=\")\"),new ft(C(i[0]),C(i[1]),g(p({},t),{hasBarLine:t.command===\"\\\\over\",leftDelim:e,rightDelim:r}))},serialize:(t,e)=>P([t.aboveToLatex(e),t.command,t.belowToLatex(e)])});M([\"overwithdelims\",\"atopwithdelims\"],\"{numer:auto}{denom:auto}{left-delim:delim}{right-delim:delim}\",{infix:!0,createAtom:t=>{var r,i;let e=t.args;return new ft(C(e[0]),C(e[1]),g(p({},t),{leftDelim:(r=e[2])!=null?r:\".\",rightDelim:(i=e[3])!=null?i:\".\",hasBarLine:!1}))},serialize:(t,e)=>`${t.aboveToLatex(e)} ${t.command}${t.leftDelim}${t.rightDelim}${t.belowToLatex(e)}`});M(\"pdiff\",\"{numerator}{denominator}\",{ifMode:\"math\",createAtom:t=>new ft(C(t.args[0]),C(t.args[1]),g(p({},t),{hasBarLine:!0,numerPrefix:\"\\u2202\",denomPrefix:\"\\u2202\"})),serialize:(t,e)=>P([t.aboveToLatex(e),t.command,t.belowToLatex(e)])});M([\"sum\",\"prod\",\"bigcup\",\"bigcap\",\"coprod\",\"bigvee\",\"bigwedge\",\"biguplus\",\"bigotimes\",\"bigoplus\",\"bigodot\",\"bigsqcup\",\"intop\"],\"\",{ifMode:\"math\",createAtom:t=>new di({coprod:\"\\u2210\",bigvee:\"\\u22C1\",bigwedge:\"\\u22C0\",biguplus:\"\\u2A04\",bigcap:\"\\u22C2\",bigcup:\"\\u22C3\",intop:\"\\u222B\",prod:\"\\u220F\",sum:\"\\u2211\",bigotimes:\"\\u2A02\",bigoplus:\"\\u2A01\",bigodot:\"\\u2A00\",bigsqcup:\"\\u2A06\",smallint:\"\\u222B\"}[t.command.slice(1)],g(p({},t),{limits:\"auto\",variant:\"main\"}))});M(\"smallint\",\"\",{ifMode:\"math\",createAtom:t=>new yt(\"\\u222B\",g(p({},t),{limits:\"adjacent\",variant:\"main\"}))});var up={int:\"\\u222B\",iint:\"\\u222C\",iiint:\"\\u222D\",oint:\"\\u222E\",oiint:\"\\u222F\",oiiint:\"\\u2230\",intclockwise:\"\\u2231\",varointclockwise:\"\\u2232\",ointctrclockwise:\"\\u2233\",intctrclockwise:\"\\u2A11\",sqcup:\"\\u2294\",sqcap:\"\\u2293\",uplus:\"\\u228E\",wr:\"\\u2240\",amalg:\"\\u2A3F\",Cap:\"\\u22D2\",Cup:\"\\u22D3\",doublecap:\"\\u22D2\",doublecup:\"\\u22D3\"};M(Object.keys(up),\"\",{ifMode:\"math\",createAtom:t=>{let e=t.command,r=up[e.slice(1)];return new di(r,g(p({},t),{limits:\"adjacent\",variant:{\"\\u22D2\":\"ams\",\"\\u22D3\":\"ams\"}[r]}))}});M([\"Re\",\"Im\"],\"\",{ifMode:\"math\",createAtom:t=>new yt({\"\\\\Re\":\"\\u211C\",\"\\\\Im\":\"\\u2111\"}[t.command],g(p({},t),{limits:\"adjacent\",isFunction:!0,variant:\"fraktur\"}))});M(\"middle\",\"{:delim}\",{ifMode:\"math\",createAtom:t=>{var e;return new cn(g(p({},t),{delim:(e=t.args[0])!=null?e:\"|\",size:1}))}});M(\"the\",\"{:value}\",{createAtom:t=>new y(g(p({},t),{captureSelection:!0,verbatimLatex:null})),render:(t,e)=>{var o;let r=new B({parent:e},t.style),i=\"\";t.isSelected&&(i+=\" ML__selected\");let n=r.evaluate(t.args[0]);return new w(((o=_e(n))!=null?o:\"\").split(\"\").map(a=>new w(a,{type:\"ord\",classes:i,mode:t.mode,isSelected:t.isSelected,style:p({variant:\"main\"},t.style)})),{type:\"lift\",style:t.style,caret:t.caret,isSelected:t.isSelected,classes:i}).wrap(r)},serialize:t=>{var e;return`\\\\the${(e=_e(t.args[0]))!=null?e:\"\\\\relax\"}`}});M(\"mathtip\",\"{:auto}{:math}\",{createAtom:t=>new mi(g(p({},t),{body:C(t.args[0]),tooltip:C(t.args[1]),content:\"math\"})),serialize:(t,e)=>e.skipStyles?t.bodyToLatex(e):`\\\\mathtip{${t.bodyToLatex(e)}}{${y.serialize([t.tooltip],g(p({},e),{defaultMode:\"math\"}))}}`});M(\"texttip\",\"{:auto}{:text}\",{createAtom:t=>new mi(g(p({},t),{body:C(t.args[0]),tooltip:C(t.args[1]),content:\"text\"})),serialize:(t,e)=>e.skipStyles?t.bodyToLatex(e):`\\\\texttip{${t.bodyToLatex(e)}}{${y.serialize([t.tooltip],g(p({},e),{defaultMode:\"text\"}))}}`});M(\"error\",\"{:math}\",{createAtom:t=>new y(g(p({},t),{body:C(t.args[0])})),serialize:(t,e)=>`\\\\error{${t.bodyToLatex(e)}}`,render:(t,e)=>t.createBox(e,{classes:\"ML__error\"})});M(\"ensuremath\",\"{:math}\",{createAtom:t=>new y(g(p({},t),{body:C(t.args[0])})),serialize:(t,e)=>`${t.command}{${t.bodyToLatex(g(p({},e),{defaultMode:\"math\"}))}}`});M(\"color\",\"{:value}\",{applyStyle:(t,e,r,i)=>{var n,o;return g(p({},t),{verbatimColor:(n=_e(r[0]))!=null?n:void 0,color:i.toColor((o=r[0])!=null?o:{string:\"red\"})})}});M(\"textcolor\",\"{:value}{content:auto*}\",{applyStyle:(t,e,r,i)=>{var n,o;return g(p({},t),{verbatimColor:(n=_e(r[0]))!=null?n:void 0,color:i.toColor((o=r[0])!=null?o:{string:\"red\"})})}});M(\"boxed\",\"{content:math}\",{createAtom:t=>new ot(g(p({},t),{body:C(t.args[0]),framecolor:{string:\"black\"}}))});M(\"colorbox\",\"{:value}{:text*}\",{applyStyle:(t,e,r,i)=>{var n,o;return g(p({},t),{verbatimBackgroundColor:(n=_e(r[0]))!=null?n:void 0,backgroundColor:i.toBackgroundColor((o=r[0])!=null?o:{string:\"yellow\"})})}});M(\"fcolorbox\",\"{frame-color:value}{background-color:value}{content:text}\",{applyMode:\"text\",createAtom:t=>{var e,r;return new ot(g(p({},t),{body:C(t.args[2]),framecolor:(e=t.args[0])!=null?e:{string:\"blue\"},backgroundcolor:(r=t.args[1])!=null?r:{string:\"yellow\"}}))},serialize:(t,e)=>{var r,i;return e.skipStyles?t.bodyToLatex(g(p({},e),{defaultMode:\"text\"})):W(t.command,(r=_e(t.framecolor))!=null?r:\"\",(i=_e(t.backgroundcolor))!=null?i:\"\",t.bodyToLatex(g(p({},e),{defaultMode:\"text\"})))}});M(\"bbox\",\"[:bbox]{body:auto}\",{createAtom:t=>{var i;let e=t.args[0],r=C(t.args[1]);return e?new ot(g(p({},t),{body:r,padding:e.padding,border:e.border,backgroundcolor:(i=e.backgroundcolor)!=null?i:void 0})):new ot(g(p({},t),{body:r}))},serialize:(t,e)=>{var i,n;if(e.skipStyles)return t.bodyToLatex(e);let r=t.command;if(Number.isFinite(t.padding)||t.border!==void 0||t.backgroundcolor!==void 0){let o=[];t.padding&&o.push((i=_e(t.padding))!=null?i:\"\"),t.border&&o.push(`border: ${t.border}`),t.backgroundcolor&&o.push((n=_e(t.backgroundcolor))!=null?n:\"\"),r+=`[${o.join(\",\")}]`}return W(r,t.bodyToLatex(e))}});M([\"displaystyle\",\"textstyle\",\"scriptstyle\",\"scriptscriptstyle\"],\"{:rest}\",{createAtom:t=>new y(g(p({},t),{body:C(t.args[0])})),render:(t,e)=>{let r=new B({parent:e,mathstyle:t.command.slice(1)},t.style),i=y.createBox(r,t.body,{type:\"lift\"});return t.caret&&(i.caret=t.caret),t.bind(e,i)},serialize:(t,e)=>e.skipStyles?t.bodyToLatex(e):`{${P([t.command,t.bodyToLatex(e)])}}`});M([\"tiny\",\"scriptsize\",\"footnotesize\",\"small\",\"normalsize\",\"large\",\"Large\",\"LARGE\",\"huge\",\"Huge\"],\"\",{applyStyle:(t,e)=>g(p({},t),{fontSize:{\"\\\\tiny\":1,\"\\\\scriptsize\":2,\"\\\\footnotesize\":3,\"\\\\small\":4,\"\\\\normalsize\":5,\"\\\\large\":6,\"\\\\Large\":7,\"\\\\LARGE\":8,\"\\\\huge\":9,\"\\\\Huge\":10}[e]})});M(\"fontseries\",\"{:string}\",{ifMode:\"text\",applyStyle:(t,e,r)=>{var i;return g(p({},t),{fontSeries:(i=r[0])!=null?i:\"auto\"})}});M(\"fontshape\",\"{:string}\",{ifMode:\"text\",applyStyle:(t,e,r)=>{var i;return g(p({},t),{fontShape:(i=r[0])!=null?i:\"auto\"})}});M(\"fontfamily\",\"{:string}\",{ifMode:\"text\",applyStyle:(t,e,r)=>{var i;return g(p({},t),{fontFamily:(i=r[0])!=null?i:\"roman\"})}});M(\"selectfont\",\"\",{ifMode:\"text\",applyStyle:t=>t});M(\"bf\",\"{:rest*}\",{applyStyle:t=>g(p({},t),{fontSeries:\"b\",fontShape:\"n\",fontFamily:\"roman\"})});M([\"boldsymbol\",\"bm\",\"bold\"],\"{:math*}\",{applyMode:\"math\",applyStyle:t=>g(p({},t),{variantStyle:\"bold\"})});M(\"bfseries\",\"{:rest*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontSeries:\"b\"})});M(\"mdseries\",\"{:rest*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontSeries:\"m\"})});M(\"upshape\",\"{:rest*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontShape:\"n\"})});M(\"slshape\",\"{:rest*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontShape:\"sl\"})});M(\"scshape\",\"{:rest*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontShape:\"sc\"})});M(\"textbf\",\"{:text*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontSeries:\"b\"})});M(\"textmd\",\"{:text*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontSeries:\"m\"})});M(\"textup\",\"{:text*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontShape:\"n\"})});M(\"textnormal\",\"{:text*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontShape:\"n\",fontSeries:\"m\"})});M(\"textsl\",\"{:text*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontShape:\"sl\"})});M(\"textit\",\"{:text*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontShape:\"it\"})});M(\"textsc\",\"{:text*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontShape:\"sc\"})});M(\"textrm\",\"{:text*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontFamily:\"roman\"})});M(\"textsf\",\"{:text*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontFamily:\"sans-serif\"})});M(\"texttt\",\"{:text*}\",{applyMode:\"text\",applyStyle:t=>g(p({},t),{fontFamily:\"monospace\"})});M(\"mathbf\",\"{:math*}\",{applyMode:\"math\",applyStyle:t=>g(p({},t),{variant:\"normal\",variantStyle:\"bold\"})});M(\"mathit\",\"{:math*}\",{applyMode:\"math\",applyStyle:t=>g(p({},t),{variant:\"main\",variantStyle:\"italic\"})});M(\"mathnormal\",\"{:math*}\",{applyMode:\"math\",applyStyle:t=>g(p({},t),{variant:\"normal\",variantStyle:\"italic\"})});M(\"mathbfit\",\"{:math*}\",{applyMode:\"math\",applyStyle:t=>g(p({},t),{variant:\"main\",variantStyle:\"bolditalic\"})});M(\"mathrm\",\"{:math*}\",{applyMode:\"math\",applyStyle:t=>g(p({},t),{variant:\"normal\",variantStyle:\"up\"})});M(\"mathsf\",\"{:math*}\",{applyMode:\"math\",applyStyle:t=>g(p({},t),{variant:\"sans-serif\",variantStyle:\"up\"})});M(\"mathtt\",\"{:math*}\",{applyMode:\"math\",applyStyle:t=>g(p({},t),{variant:\"monospace\",variantStyle:\"up\"})});M(\"it\",\"{:rest*}\",{applyStyle:t=>g(p({},t),{fontSeries:\"m\",fontShape:\"it\",fontFamily:\"roman\",variantStyle:\"italic\"})});M(\"rmfamily\",\"{:rest*}\",{applyStyle:t=>g(p({},t),{fontFamily:\"roman\"})});M(\"sffamily\",\"{:rest*}\",{applyStyle:t=>g(p({},t),{fontFamily:\"sans-serif\"})});M(\"ttfamily\",\"{:rest*}\",{applyStyle:t=>g(p({},t),{fontFamily:\"monospace\"})});M([\"Bbb\",\"mathbb\"],\"{:math*}\",{applyStyle:t=>g(p({},t),{variant:\"double-struck\",variantStyle:no(t.variantStyle)})});M([\"frak\",\"mathfrak\"],\"{:math*}\",{applyStyle:t=>g(p({},t),{variant:\"fraktur\",variantStyle:no(t.variantStyle)})});M(\"mathcal\",\"{:math*}\",{applyStyle:t=>g(p({},t),{variant:\"calligraphic\",variantStyle:no(t.variantStyle)})});M(\"mathscr\",\"{:math*}\",{applyStyle:t=>g(p({},t),{variant:\"script\",variantStyle:no(t.variantStyle)})});M(\"mbox\",\"{:text}\",{ifMode:\"math\",createAtom:t=>new y(g(p({},t),{type:\"mord\",body:C(t.args[0]),mode:\"math\"})),serialize:(t,e)=>W(\"\\\\mbox\",t.bodyToLatex(g(p({},e),{defaultMode:\"text\"})))});M(\"text\",\"{:text}\",{ifMode:\"math\",applyMode:\"text\"});M([\"class\",\"htmlClass\"],\"{name:string}{content:auto*}\",{createAtom:t=>new y(g(p({},t),{type:\"mord\",body:C(t.args[1])})),serialize:(t,e)=>!t.args[0]||e.skipStyles?t.bodyToLatex(e):`${t.command}{${t.args[0]}}{${t.bodyToLatex(e)}}`,render:(t,e)=>{var r;return t.createBox(e,{classes:(r=t.args[0])!=null?r:\"\",boxType:\"lift\"})}});M([\"cssId\",\"htmlId\"],\"{id:string}{content:auto*}\",{createAtom:t=>new y(g(p({},t),{type:\"mord\",body:C(t.args[1])})),serialize:(t,e)=>{var r;return!((r=t.args)!=null&&r[0])||e.skipStyles?t.bodyToLatex(e):`${t.command}{${t.args[0]}}{${t.bodyToLatex(e)}}`},render:(t,e)=>{var i;let r=t.createBox(e);return r.cssId=(i=t.args[0])!=null?i:\"\",r}});M(\"htmlData\",\"{data:string}{content:auto*}\",{createAtom:t=>new y(g(p({},t),{type:\"mord\",body:C(t.args[1])})),serialize:(t,e)=>{var r;return!((r=t.args)!=null&&r[0])||e.skipStyles?t.bodyToLatex(e):`\\\\htmlData{${t.args[0]}}{${t.bodyToLatex(e)}}`},render:(t,e)=>{var i;let r=t.createBox(e);return r.htmlData=(i=t.args[0])!=null?i:\"\",r}});M([\"style\",\"htmlStyle\"],\"{data:string}{content:auto*}\",{createAtom:t=>new y(g(p({},t),{type:\"mord\",body:C(t.args[1])})),serialize:(t,e)=>{var r;return!((r=t.args)!=null&&r[0])||e.skipStyles?t.bodyToLatex(e):`${t.command}{${t.args[0]}}{${t.bodyToLatex(e)}}`},render:(t,e)=>{var i;let r=t.createBox(e);return r.htmlStyle=(i=t.args[0])!=null?i:\"\",r}});M(\"href\",\"{url:string}{content:auto*}\",{createAtom:t=>new y(g(p({},t),{type:\"mord\",body:C(t.args[1])})),render:(t,e)=>{var n;let r=t.createBox(e),i=(n=t.args[0])!=null?n:\"\";return i&&(r.htmlData=`href=${i}`),r}});M(\"em\",\"{:rest}\",{createAtom:t=>new y(g(p({},t),{body:C(t.args[0])})),serialize:(t,e)=>e.skipStyles?t.bodyToLatex(e):`{\\\\em ${t.bodyToLatex(e)}}`,render:(t,e)=>t.createBox(e,{classes:\"ML__emph\",boxType:\"lift\"})});M(\"emph\",\"{:auto}\",{createAtom:t=>new y(g(p({},t),{body:C(t.args[1])})),serialize:(t,e)=>e.skipStyles?t.bodyToLatex(e):`\\\\emph{${t.bodyToLatex(e)}}`,render:(t,e)=>t.createBox(e,{classes:\"ML__emph\",boxType:\"lift\"})});var dp={\"\\\\bigl\":{mclass:\"mopen\",size:1},\"\\\\Bigl\":{mclass:\"mopen\",size:2},\"\\\\biggl\":{mclass:\"mopen\",size:3},\"\\\\Biggl\":{mclass:\"mopen\",size:4},\"\\\\bigr\":{mclass:\"mclose\",size:1},\"\\\\Bigr\":{mclass:\"mclose\",size:2},\"\\\\biggr\":{mclass:\"mclose\",size:3},\"\\\\Biggr\":{mclass:\"mclose\",size:4},\"\\\\bigm\":{mclass:\"mrel\",size:1},\"\\\\Bigm\":{mclass:\"mrel\",size:2},\"\\\\biggm\":{mclass:\"mrel\",size:3},\"\\\\Biggm\":{mclass:\"mrel\",size:4},\"\\\\big\":{mclass:\"mord\",size:1},\"\\\\Big\":{mclass:\"mord\",size:2},\"\\\\bigg\":{mclass:\"mord\",size:3},\"\\\\Bigg\":{mclass:\"mord\",size:4}};M([\"bigl\",\"Bigl\",\"biggl\",\"Biggl\",\"bigr\",\"Bigr\",\"biggr\",\"Biggr\",\"bigm\",\"Bigm\",\"biggm\",\"Biggm\",\"big\",\"Big\",\"bigg\",\"Bigg\"],\"{:delim}\",{createAtom:t=>{var e;return new un(g(p({},t),{delim:(e=t.args[0])!=null?e:\".\",size:dp[t.command].size,delimType:dp[t.command].mclass}))},serialize:(t,e)=>P([t.command,/^[a-zA-Z]/.test(t.value)?`{${t.value}}`:t.value])});M([\"hspace\",\"hspace*\"],\"{width:value}\",{createAtom:t=>{var e;return new $t(g(p({},t),{width:(e=t.args[0])!=null?e:{dimension:0}}))}});M([\"mkern\",\"kern\",\"mskip\",\"hskip\",\"mspace\"],\"{width:value}\",{createAtom:t=>{var e;return new $t(g(p({},t),{width:(e=t.args[0])!=null?e:{dimension:0}}))}});M(\"mathchoice\",\"{:math}{:math}{:math}{:math}\",{createAtom:t=>new y(t),render:(t,e)=>{let r=0,i=e.mathstyle.id;(i===Xn||i===Or)&&(r=1),(i===ai||i===Ve)&&(r=2),(i===Br||i===Ee)&&(r=3);let n=C(t.args[r]);return y.createBox(e,n)},serialize:(t,e)=>`\\\\mathchoice{${y.serialize(t.args[0],e)}}{${y.serialize(t.args[1],e)}}{${y.serialize(t.args[2],e)}}{${y.serialize(t.args[3],e)}}`});M(\"mathop\",\"{:auto}\",{createAtom:t=>new y(g(p({},t),{type:\"mop\",body:C(t.args[0]),limits:\"over-under\",isFunction:!0,captureSelection:!0})),render:(t,e)=>{var i;let r=y.createBox(e,t.body);if(t.superscript||t.subscript){let n=(i=t.subsupPlacement)!=null?i:\"auto\";r=n===\"over-under\"||n===\"auto\"&&e.isDisplayStyle?t.attachLimits(e,{base:r}):t.attachSupsub(e,{base:r})}return t.caret&&(r.caret=t.caret),new w(t.bind(e,r),{type:\"op\",isSelected:t.isSelected,classes:\"ML__op-group\"})},serialize:(t,e)=>{let r=[W(t.command,t.bodyToLatex(e))];return t.explicitSubsupPlacement&&(t.subsupPlacement===\"over-under\"&&r.push(\"\\\\limits\"),t.subsupPlacement===\"adjacent\"&&r.push(\"\\\\nolimits\"),t.subsupPlacement===\"auto\"&&r.push(\"\\\\displaylimits\")),r.push(t.supsubToLatex(e)),P(r)}});M([\"mathbin\",\"mathrel\",\"mathopen\",\"mathclose\",\"mathpunct\",\"mathord\",\"mathinner\"],\"{:auto}\",{createAtom:t=>new y(g(p({},t),{type:{\"\\\\mathbin\":\"mbin\",\"\\\\mathrel\":\"mrel\",\"\\\\mathopen\":\"mopen\",\"\\\\mathclose\":\"mclose\",\"\\\\mathpunct\":\"mpunct\",\"\\\\mathord\":\"mord\",\"\\\\mathinner\":\"minner\"}[t.command],body:C(t.args[0])}))});M([\"operatorname\",\"operatorname*\"],\"{operator:math}\",{createAtom:t=>{let e=C(t.args[0]).map(r=>{var i;return r.type!==\"first\"&&(r.type=\"mord\",r.value=(i={\"\\u2217\":\"*\",\"\\u2212\":\"-\"}[r.value])!=null?i:r.value,r.isFunction=!1,!r.style.variant&&!r.style.variantStyle&&(r.style.variant=\"main\",r.style.variantStyle=\"up\")),r});return new y(g(p({},t),{type:\"mop\",body:e,isFunction:!0,limits:t.command===\"\\\\operatorname\"?\"adjacent\":\"over-under\"}))},render:(t,e)=>{var i;let r=y.createBox(e,t.body);if(t.superscript||t.subscript){let n=(i=t.subsupPlacement)!=null?i:\"auto\";r=n===\"over-under\"||n===\"auto\"&&e.isDisplayStyle?t.attachLimits(e,{base:r}):t.attachSupsub(e,{base:r})}return t.caret&&(r.caret=t.caret),new w(t.bind(e,r),{type:\"op\",isSelected:t.isSelected,classes:\"ML__op-group\"})},serialize:(t,e)=>{let r=[W(t.command,t.bodyToLatex(e))];return t.explicitSubsupPlacement&&(t.subsupPlacement===\"over-under\"&&r.push(\"\\\\limits\"),t.subsupPlacement===\"adjacent\"&&r.push(\"\\\\nolimits\"),t.subsupPlacement===\"auto\"&&r.push(\"\\\\displaylimits\")),r.push(t.supsubToLatex(e)),P(r)}});M([\"char\",\"unicode\"],\"{charcode:value}\",{createAtom:t=>new y(g(p({},t),{type:t.mode===\"text\"?\"text\":\"mord\"})),serialize:t=>{var e;return`${t.command}${_e((e=t.args[0])!=null?e:{number:10067,base:\"hexadecimal\"})}`},render:(t,e)=>{let r=e.evaluate(t.args[0]);return(!r||!(\"number\"in r))&&(r={number:10067,base:\"hexadecimal\"}),t.value=String.fromCodePoint(r.number),t.createBox(e)}});M(\"rule\",\"[raise:value]{width:value}{thickness:value}\",{createAtom:t=>new y(t),render:(t,e)=>{var s,l,c;let r=new B({parent:e,mathstyle:\"textstyle\"},t.style),i=r.toEm((s=t.args[0])!=null?s:{dimension:0}),n=r.toEm((l=t.args[1])!=null?l:{dimension:10}),o=r.toEm((c=t.args[2])!=null?c:{dimension:10}),a=new w(null,{classes:\"ML__rule\",type:\"ord\"});return a.width=n,a.height=o+i,a.depth=-i,a.setStyle(\"border-right-width\",n,\"em\"),a.setStyle(\"border-top-width\",o,\"em\"),a.setStyle(\"border-color\",t.style.color),a.setStyle(\"vertical-align\",i,\"em\"),t.isSelected&&a.setStyle(\"opacity\",\"50%\"),t.bind(r,a),t.caret&&(a.caret=t.caret),a.wrap(e)},serialize:t=>`\\\\rule${t.args[0]?`[${_e(t.args[0])}]`:\"\"}{${_e(t.args[1])}}{${_e(t.args[2])}}`});M([\"overline\",\"underline\"],\"{:auto}\",{createAtom:t=>new y(g(p({},t),{body:C(t.args[0])})),render:(t,e)=>{let r=t.command.substring(1),i=new B({parent:e,mathstyle:\"cramp\"},t.style),n=y.createBox(i,t.body);if(!n)return null;let o=i.metrics.defaultRuleThickness/i.scalingFactor,a=new w(null,{classes:r+\"-line\"});a.height=o,a.maxFontSize=o*1.125*i.scalingFactor;let s;return r===\"overline\"?s=new te({shift:0,children:[{box:n},3*o,{box:a},o]}):s=new te({top:n.height,children:[o,{box:a},3*o,{box:n}]}),t.caret&&(s.caret=t.caret),new w(s,{classes:r,type:\"ignore\"})}});M(\"overset\",\"{:auto}{base:auto}\",{createAtom:t=>{let e=C(t.args[1]);return new Ae(g(p({},t),{above:C(t.args[0]),body:e,skipBoundary:!1,boxType:oi(e)}))},serialize:(t,e)=>W(t.command,t.aboveToLatex(e),t.bodyToLatex(e))});M(\"underset\",\"{:auto}{base:auto}\",{createAtom:t=>{let e=C(t.args[1]);return new Ae(g(p({},t),{below:C(t.args[0]),body:e,skipBoundary:!1,boxType:oi(e)}))},serialize:(t,e)=>W(t.command,t.belowToLatex(e),t.bodyToLatex(e))});M(\"overunderset\",\"{above:auto}{below:auto}{base:auto}\",{createAtom:t=>{let e=C(t.args[2]);return new Ae(g(p({},t),{above:C(t.args[0]),below:C(t.args[1]),body:e,skipBoundary:!1,boxType:oi(e)}))},serialize:(t,e)=>W(t.command,t.belowToLatex(e),t.bodyToLatex(e))});M([\"stackrel\",\"stackbin\"],\"[below:auto]{above:auto}{base:auto}\",{createAtom:t=>new Ae(g(p({},t),{body:C(t.args[2]),above:C(t.args[1]),below:C(t.args[0]),skipBoundary:!1,boxType:t.command===\"\\\\stackrel\"?\"rel\":\"bin\"})),serialize:(t,e)=>W(t.command,t.aboveToLatex(e),t.bodyToLatex(e))});M(\"smash\",\"[:string]{:auto}\",{createAtom:t=>{var e,r,i,n;return new Ft(g(p({},t),{body:C(t.args[1]),smashHeight:(r=(e=t.args[0])==null?void 0:e.includes(\"t\"))!=null?r:!0,smashDepth:(n=(i=t.args[0])==null?void 0:i.includes(\"b\"))!=null?n:!0}))}});M(\"vphantom\",\"{:auto}\",{createAtom:t=>new Ft(g(p({},t),{body:C(t.args[0]),isInvisible:!0,smashWidth:!0}))});M(\"hphantom\",\"{:auto}\",{createAtom:t=>new Ft(g(p({},t),{body:C(t.args[0]),isInvisible:!0,smashHeight:!0,smashDepth:!0}))});M(\"phantom\",\"{:auto}\",{createAtom:t=>new Ft(g(p({},t),{body:C(t.args[0]),isInvisible:!0}))});M(\"mathstrut\",\"\",{createAtom:t=>new Ft(g(p({},t),{body:[new y({value:\"(\"})],isInvisible:!0}))});M(\"not\",\"{:math}\",{createAtom:t=>{let e=C(t.args[0]);return e.length===0?new y(g(p({},t),{type:\"mrel\",value:\"\\uE020\"})):new y(g(p({},t),{body:[new gt(g(p({},t),{body:\"\\uE020\",align:\"right\"})),...e],captureSelection:!0}))},serialize:(t,e)=>{let r=t.args[0],i=r&&typeof r==\"object\"&&\"group\"in r;return t.value!==\"\\uE020\"?i?`\\\\not{${y.serialize(r.group,e)}}`:`\\\\not${y.serialize(r,e)}`:i?\"\\\\not{}\":\"\\\\not\"},render:(t,e)=>{if(t.value)return t.createBox(e);let i=t.args[0]&&typeof t.args[0]==\"object\"&&\"group\"in t.args[0]?\"ord\":oi(C(t.args[0])),n=y.createBox(e,t.body,{type:i});return t.caret&&(n.caret=t.caret),t.bind(e,n)}});M([\"ne\",\"neq\"],\"\",{createAtom:t=>new y(g(p({},t),{type:\"mrel\",body:[new gt(g(p({},t),{body:\"\\uE020\",align:\"right\",boxType:\"rel\"})),new y(g(p({},t),{value:\"=\"}))],captureSelection:!0})),serialize:t=>t.command});M(\"rlap\",\"{:auto}\",{createAtom:t=>new gt(g(p({},t),{body:C(t.args[0]),align:\"right\"}))});M(\"llap\",\"{:auto}\",{createAtom:t=>new gt(g(p({},t),{body:C(t.args[0]),align:\"left\"}))});M(\"mathrlap\",\"{:math}\",{createAtom:t=>new gt(g(p({},t),{body:C(t.args[0]),align:\"right\"}))});M(\"mathllap\",\"{:math}\",{createAtom:t=>new gt(g(p({},t),{body:C(t.args[0]),align:\"left\"}))});M(\"raisebox\",\"{:value}{:text}\",{createAtom:t=>{var e;return new ot(g(p({},t),{body:C(t.args[1]),padding:{dimension:0},offset:(e=t.args[0])!=null?e:{dimension:0}}))},serialize:(t,e)=>{var r;return W(\"\\\\raisebox\",(r=_e(t.offset))!=null?r:\"0pt\",t.bodyToLatex(e))}});M(\"raise\",\"{:value}{:auto}\",{createAtom:t=>{var e;return new ot(g(p({},t),{body:C(t.args[1]),padding:{dimension:0},offset:(e=t.args[0])!=null?e:{dimension:0}}))},serialize:(t,e)=>{var r;return W(\"\\\\raise\",(r=_e(t.offset))!=null?r:\"0pt\",t.bodyToLatex(e))}});M(\"lower\",\"{:value}{:auto}\",{createAtom:t=>{var e;return new ot(g(p({},t),{body:C(t.args[1]),padding:{dimension:0},offset:(e=pt(t.args[0],-1))!=null?e:{dimension:0}}))},serialize:(t,e)=>{var r,i;return W(\"\\\\lower\",(i=_e(pt((r=t.offset)!=null?r:{dimension:0},-1)))!=null?i:\"0pt\",t.bodyToLatex(e))}});Me(\"0123456789/@.?!\");sl(65,90);sl(97,122);Me([[\"\\\\forall\",8704],[\"\\\\exists\",8707],[\"\\\\nexists\",8708,\"mord\",\"ams\"],[\"\\\\mid\",8739,\"mrel\"],[\"\\\\top\",8868],[\"\\\\bot\",8869]]);Me([[\"\\\\#\",35],[\"\\\\&\",38],[\"\\\\parallelogram\",9649],[\"\\\\spadesuit\",9824],[\"\\\\heartsuit\",9825],[\"\\\\diamondsuit\",9826],[\"\\\\clubsuit\",9827],[\"\\\\flat\",9837],[\"\\\\natural\",9838],[\"\\\\sharp\",9839]]);Me([[\"\\\\backslash\",92],[\"\\\\nabla\",8711],[\"\\\\partial\",8706],[\"\\\\ell\",8467],[\"\\\\hbar\",8463],[\"\\\\pounds\",163],[\"\\\\euro\",8364]]);Me([[\"\\\\rightarrow\",8594],[\"\\\\to\",8594],[\"\\\\leftarrow\",8592],[\"\\\\gets\",8592],[\"\\\\Rightarrow\",8658],[\"\\\\Leftarrow\",8656],[\"\\\\longrightarrow\",10230],[\"\\\\longleftarrow\",10229],[\"\\\\Longrightarrow\",10233],[\"\\\\implies\",10233],[\"\\\\Longleftarrow\",10232],[\"\\\\impliedby\",10232],[\"\\\\longleftrightarrow\",10231],[\"\\\\biconditional\",10231],[\"\\\\Longleftrightarrow\",10234],[\"\\\\mapsto\",8614],[\"\\\\longmapsto\",10236],[\"\\\\uparrow\",8593],[\"\\\\downarrow\",8595],[\"\\\\Uparrow\",8657],[\"\\\\Downarrow\",8659],[\"\\\\updownarrow\",8597],[\"\\\\Updownarrow\",8661],[\"\\\\hookrightarrow\",8618],[\"\\\\hookleftarrow\",8617],[\"\\\\rightharpoonup\",8640],[\"\\\\leftharpoonup\",8636],[\"\\\\rightharpoondown\",8641],[\"\\\\leftharpoondown\",8637],[\"\\\\searrow\",8600],[\"\\\\nearrow\",8599],[\"\\\\swarrow\",8601],[\"\\\\nwarrow\",8598],[\"\\\\originalof\",8886],[\"\\\\laplace\",8886],[\"\\\\imageof\",8887],[\"\\\\Laplace\",8887]],\"mrel\");Me([[\"\\\\mapsfrom\",8612,\"mrel\"],[\"\\\\Mapsfrom\",10502,\"mrel\"],[\"\\\\MapsTo\",10503,\"mrel\"],[\"\\\\Yup\",8516,\"mord\"],[\"\\\\lightning\",8623,\"mrel\"],[\"\\\\leftarrowtriangle\",8701,\"mrel\"],[\"\\\\rightarrowtriangle\",8702,\"mrel\"],[\"\\\\leftrightarrowtriangle\",8703,\"mrel\"],[\"\\\\boxdot\",8865,\"mbin\"],[\"\\\\bigtriangleup\",9651,\"mbin\"],[\"\\\\bigtriangledown\",9661,\"mbin\"],[\"\\\\boxbar\",9707,\"mbin\"],[\"\\\\Lbag\",10181,\"mopen\"],[\"\\\\Rbag\",10182,\"mclose\"],[\"\\\\llbracket\",10214,\"mopen\"],[\"\\\\rrbracket\",10215,\"mclose\"],[\"\\\\longmapsfrom\",10235,\"mrel\"],[\"\\\\Longmapsfrom\",10237,\"mrel\"],[\"\\\\Longmapsto\",10238,\"mrel\"],[\"\\\\boxslash\",10692,\"mbin\"],[\"\\\\boxbslash\",10693,\"mbin\"],[\"\\\\boxast\",10694,\"mbin\"],[\"\\\\boxcircle\",10695,\"mbin\"],[\"\\\\boxbox\",10696,\"mbin\"],[\"\\\\fatsemi\",10783,\"mop\"],[\"\\\\leftslice\",10918,\"mrel\"],[\"\\\\rightslice\",10919,\"mrel\"],[\"\\\\interleave\",10996,\"mbin\"],[\"\\\\biginterleave\",11004,\"mop\"],[\"\\\\sslash\",11005,\"mbin\"],[\"\\\\talloblong\",11006,\"mbin\"]]);Me([[\"\\\\lbrace\",123,\"mopen\"],[\"\\\\rbrace\",125,\"mclose\"],[\"\\\\lparen\",40,\"mopen\"],[\"\\\\rparen\",41,\"mclose\"],[\"\\\\langle\",10216,\"mopen\"],[\"\\\\rangle\",10217,\"mclose\"],[\"\\\\lfloor\",8970,\"mopen\"],[\"\\\\rfloor\",8971,\"mclose\"],[\"\\\\lceil\",8968,\"mopen\"],[\"\\\\rceil\",8969,\"mclose\"],[\"\\\\vert\",8739],[\"\\\\lvert\",8739,\"mopen\"],[\"\\\\rvert\",8739,\"mclose\"],[\"\\\\|\",8741],[\"\\\\Vert\",8741],[\"\\\\mVert\",8741],[\"\\\\lVert\",8741,\"mopen\"],[\"\\\\rVert\",8741,\"mclose\"],[\"\\\\lbrack\",91,\"mopen\"],[\"\\\\rbrack\",93,\"mclose\"],[\"\\\\{\",123,\"mopen\"],[\"\\\\}\",125,\"mclose\"],[\"(\",40,\"mopen\"],[\")\",41,\"mclose\"],[\"[\",91,\"mopen\"],[\"]\",93,\"mclose\"],[\"\\\\ulcorner\",9484,\"mopen\",\"ams\"],[\"\\\\urcorner\",9488,\"mclose\",\"ams\"],[\"\\\\llcorner\",9492,\"mopen\",\"ams\"],[\"\\\\lrcorner\",9496,\"mclose\",\"ams\"],[\"\\\\lgroup\",10222,\"mopen\"],[\"\\\\rgroup\",10223,\"mclose\"],[\"\\\\lmoustache\",9136,\"mopen\"],[\"\\\\rmoustache\",9137,\"mclose\"]]);Me([[\"\\\\dashrightarrow\",8674],[\"\\\\dashleftarrow\",8672],[\"\\\\Rrightarrow\",8667],[\"\\\\Lleftarrow\",8666],[\"\\\\leftrightarrows\",8646],[\"\\\\rightleftarrows\",8644],[\"\\\\curvearrowright\",8631],[\"\\\\curvearrowleft\",8630],[\"\\\\rightrightarrows\",8649],[\"\\\\leftleftarrows\",8647],[\"\\\\upuparrows\",8648],[\"\\\\downdownarrows\",8650],[\"\\\\vartriangle\",9651],[\"\\\\triangleq\",8796],[\"\\\\vartriangleleft\",8882],[\"\\\\trianglelefteq\",8884],[\"\\\\ntriangleleft\",8938],[\"\\\\ntrianglelefteq\",8940],[\"\\\\vartriangleright\",8883],[\"\\\\trianglerighteq\",8885],[\"\\\\ntriangleright\",8939],[\"\\\\ntrianglerighteq\",8941],[\"\\\\blacktriangleleft\",9664],[\"\\\\blacktriangleright\",9654],[\"\\\\leftarrowtail\",8610],[\"\\\\rightarrowtail\",8611],[\"\\\\looparrowright\",8620],[\"\\\\looparrowleft\",8619],[\"\\\\twoheadleftarrow\",8606],[\"\\\\twoheadrightarrow\",8608],[\"\\\\twoheadrightarrowtail\",10518],[\"\\\\rightleftharpoons\",8652],[\"\\\\leftrightharpoons\",8651],[\"\\\\Rsh\",8625],[\"\\\\Lsh\",8624],[\"\\\\circlearrowright\",8635],[\"\\\\circlearrowleft\",8634],[\"\\\\restriction\",8638],[\"\\\\upharpoonright\",8638],[\"\\\\upharpoonleft\",8639],[\"\\\\downharpoonright\",8642],[\"\\\\downharpoonleft\",8643],[\"\\\\rightsquigarrow\",8669],[\"\\\\leadsto\",8669],[\"\\\\leftrightsquigarrow\",8621],[\"\\\\multimap\",8888],[\"\\\\nleftarrow\",8602],[\"\\\\nrightarrow\",8603],[\"\\\\nRightarrow\",8655],[\"\\\\nLeftarrow\",8653],[\"\\\\nleftrightarrow\",8622],[\"\\\\nLeftrightarrow\",8654],[\"\\\\nvrightarrow\",8696],[\"\\\\nvtwoheadrightarrow\",10496],[\"\\\\nvrightarrowtail\",10516],[\"\\\\nvtwoheadrightarrowtail\",10519],[\"\\\\shortparallel\",8741],[\"\\\\nless\",8814],[\"\\\\nleqslant\",57360],[\"\\\\lneq\",10887],[\"\\\\lneqq\",8808],[\"\\\\nleqq\",57361],[\"\\\\lvertneqq\",57356],[\"\\\\lnsim\",8934],[\"\\\\lnapprox\",10889],[\"\\\\nprec\",8832],[\"\\\\npreceq\",8928],[\"\\\\precnsim\",8936],[\"\\\\precnapprox\",10937],[\"\\\\nsim\",8769],[\"\\\\nshortmid\",57350],[\"\\\\nmid\",8740],[\"\\\\nvdash\",8876],[\"\\\\nvDash\",8877],[\"\\\\ngtr\",8815],[\"\\\\ngeqslant\",57359],[\"\\\\ngeqq\",57358],[\"\\\\gneq\",10888],[\"\\\\gneqq\",8809],[\"\\\\gvertneqq\",57357],[\"\\\\gnsim\",8935],[\"\\\\gnapprox\",10890],[\"\\\\nsucc\",8833],[\"\\\\nsucceq\",8929],[\"\\\\succnsim\",8937],[\"\\\\succnapprox\",10938],[\"\\\\ncong\",8774],[\"\\\\nshortparallel\",57351],[\"\\\\nparallel\",8742],[\"\\\\nVDash\",8879],[\"\\\\nsupseteqq\",57368],[\"\\\\supsetneq\",8843],[\"\\\\varsupsetneq\",57371],[\"\\\\supsetneqq\",10956],[\"\\\\varsupsetneqq\",57369],[\"\\\\nVdash\",8878],[\"\\\\precneqq\",10933],[\"\\\\succneqq\",10934],[\"\\\\nsubseteqq\",57366],[\"\\\\leqslant\",10877],[\"\\\\geqslant\",10878],[\"\\\\gtrsim\",8819],[\"\\\\approxeq\",8778],[\"\\\\thickapprox\",8776],[\"\\\\lessapprox\",10885],[\"\\\\gtrapprox\",10886],[\"\\\\precapprox\",10935],[\"\\\\succapprox\",10936],[\"\\\\thicksim\",8764],[\"\\\\succsim\",8831],[\"\\\\precsim\",8830],[\"\\\\backsim\",8765],[\"\\\\eqsim\",8770],[\"\\\\backsimeq\",8909],[\"\\\\lesssim\",8818],[\"\\\\nleq\",8816],[\"\\\\ngeq\",8817],[\"\\\\smallsmile\",8995],[\"\\\\smallfrown\",8994],[\"\\\\leqq\",8806],[\"\\\\eqslantless\",10901],[\"\\\\lll\",8920],[\"\\\\lessgtr\",8822],[\"\\\\lesseqgtr\",8922],[\"\\\\lesseqqgtr\",10891],[\"\\\\risingdotseq\",8787],[\"\\\\fallingdotseq\",8786],[\"\\\\subseteqq\",10949],[\"\\\\Subset\",8912],[\"\\\\sqsubset\",8847],[\"\\\\preccurlyeq\",8828],[\"\\\\curlyeqprec\",8926],[\"\\\\vDash\",8872],[\"\\\\Vvdash\",8874],[\"\\\\bumpeq\",8783],[\"\\\\Bumpeq\",8782],[\"\\\\geqq\",8807],[\"\\\\eqslantgtr\",10902],[\"\\\\ggg\",8921],[\"\\\\gtrless\",8823],[\"\\\\gtreqless\",8923],[\"\\\\gtreqqless\",10892],[\"\\\\supseteqq\",10950],[\"\\\\Supset\",8913],[\"\\\\sqsupset\",8848],[\"\\\\succcurlyeq\",8829],[\"\\\\curlyeqsucc\",8927],[\"\\\\Vdash\",8873],[\"\\\\shortmid\",8739],[\"\\\\between\",8812],[\"\\\\pitchfork\",8916],[\"\\\\varpropto\",8733],[\"\\\\backepsilon\",8717],[\"\\\\llless\",8920],[\"\\\\gggtr\",8921],[\"\\\\doteqdot\",8785],[\"\\\\Doteq\",8785],[\"\\\\eqcirc\",8790],[\"\\\\circeq\",8791],[\"\\\\therefore\",8756],[\"\\\\because\",8757]],\"mrel\",\"ams\");Me([[\"+\",43],[\"-\",8722],[\"\\u2212\",8722],[\"\\\\pm\",177],[\"\\\\mp\",8723],[\"*\",8727],[\"\\\\times\",215],[\"\\\\div\",247],[\"\\\\divides\",8739],[\"\\\\cdot\",8901],[\"\\\\cap\",8745],[\"\\\\cup\",8746],[\"\\\\setminus\",8726],[\"\\\\land\",8743],[\"\\\\wedge\",8743],[\"\\\\lor\",8744],[\"\\\\vee\",8744],[\"\\\\circ\",8728],[\"\\\\bigcirc\",9711],[\"\\\\bullet\",8729],[\"\\\\oplus\",8853],[\"\\\\ominus\",8854],[\"\\\\otimes\",8855],[\"\\\\odot\",8857],[\"\\\\oslash\",8856],[\"\\\\bigtriangleup\",9651],[\"\\\\bigtriangledown\",9661],[\"\\\\triangleleft\",9667],[\"\\\\triangleright\",9657],[\"\\\\And\",38],[\"\\\\dagger\",8224],[\"\\\\dag\",8224],[\"\\\\ddag\",8225],[\"\\\\ddagger\",8225],[\"\\\\ast\",8727],[\"\\\\star\",8902],[\"\\\\bigstar\",9733],[\"\\\\diamond\",8900]],\"mbin\");Me([[\"\\\\lhd\",8882],[\"\\\\rhd\",8883],[\"\\\\lessdot\",8918],[\"\\\\gtrdot\",8919],[\"\\\\ltimes\",8905],[\"\\\\rtimes\",8906],[\"\\\\leftthreetimes\",8907],[\"\\\\rightthreetimes\",8908],[\"\\\\intercal\",8890],[\"\\\\dotplus\",8724],[\"\\\\doublebarwedge\",10846],[\"\\\\divideontimes\",8903],[\"\\\\centerdot\",8901],[\"\\\\smallsetminus\",8726],[\"\\\\barwedge\",8892],[\"\\\\veebar\",8891],[\"\\\\nor\",8891],[\"\\\\curlywedge\",8911],[\"\\\\curlyvee\",8910],[\"\\\\boxminus\",8863],[\"\\\\boxplus\",8862],[\"\\\\boxtimes\",8864],[\"\\\\boxdot\",8865],[\"\\\\circleddash\",8861],[\"\\\\circledast\",8859],[\"\\\\circledcirc\",8858],[\"\\\\unlhd\",8884],[\"\\\\unrhd\",8885]],\"mbin\",\"ams\");Me([[\"\\\\surd\",8730],[\"\\\\S\",167],[\"\\\\infty\",8734],[\"\\\\prime\",8242],[\"\\\\doubleprime\",8243],[\"\\\\angle\",8736],[\"`\",8216],[\"\\\\$\",36],[\"\\\\%\",37],[\"\\\\_\",95],[\"\\\\alpha\",945],[\"\\\\beta\",946],[\"\\\\gamma\",947],[\"\\\\delta\",948],[\"\\\\epsilon\",1013],[\"\\\\varepsilon\",949],[\"\\\\zeta\",950],[\"\\\\eta\",951],[\"\\\\theta\",952],[\"\\\\vartheta\",977],[\"\\\\iota\",953],[\"\\\\kappa\",954],[\"\\\\varkappa\",1008,\"mord\",\"ams\"],[\"\\\\lambda\",955],[\"\\\\mu\",956],[\"\\\\nu\",957],[\"\\\\xi\",958],[\"\\\\omicron\",111],[\"\\\\pi\",960],[\"\\\\varpi\",982],[\"\\\\rho\",961],[\"\\\\varrho\",1009],[\"\\\\sigma\",963],[\"\\\\varsigma\",962],[\"\\\\tau\",964],[\"\\\\phi\",981],[\"\\\\varphi\",966],[\"\\\\upsilon\",965],[\"\\\\chi\",967],[\"\\\\psi\",968],[\"\\\\omega\",969],[\"\\\\Gamma\",915],[\"\\\\Delta\",916],[\"\\\\Theta\",920],[\"\\\\Lambda\",923],[\"\\\\Xi\",926],[\"\\\\Pi\",928],[\"\\\\Sigma\",931],[\"\\\\Upsilon\",933],[\"\\\\Phi\",934],[\"\\\\Psi\",936],[\"\\\\Omega\",937],[\"\\\\digamma\",989,\"mord\",\"ams\"],[\"\\\\varkappa\",1008,\"mord\",\"ams\"],[\"\\\\coppa\",985,\"mord\",\"ams\"],[\"\\\\koppa\",985,\"mord\",\"ams\"],[\"\\\\Coppa\",984,\"mord\",\"ams\"],[\"\\\\Koppa\",984,\"mord\",\"ams\"],[\"\\\\sampi\",993,\"mord\",\"ams\"],[\"\\\\Sampi\",992,\"mord\",\"ams\"],[\"\\\\emptyset\",8709]]);Me([[\"=\",61],[\"<\",60],[\"\\\\lt\",60],[\">\",62],[\"\\\\gt\",62],[\"\\\\le\",8804],[\"\\\\leq\",8804],[\"\\\\ge\",8805],[\"\\\\geq\",8805],[\"\\\\ll\",8810],[\"\\\\gg\",8811],[\"\\\\coloneq\",8788],[\"\\\\coloneqq\",8788],[\"\\\\colonequals\",8788],[\"\\\\measeq\",8797],[\"\\\\eqdef\",8798],[\"\\\\questeq\",8799],[\":\",58],[\"\\\\cong\",8773],[\"\\\\equiv\",8801],[\"\\\\prec\",8826],[\"\\\\preceq\",10927],[\"\\\\succ\",8827],[\"\\\\succeq\",10928],[\"\\\\perp\",10178],[\"\\\\propto\",8733],[\"\\\\Colon\",8759],[\"\\\\smile\",8995],[\"\\\\frown\",8994],[\"\\\\sim\",8764],[\"\\\\doteq\",8784],[\"\\\\bowtie\",8904],[\"\\\\Join\",8904],[\"\\\\asymp\",8781],[\"\\\\sqsubseteq\",8849],[\"\\\\sqsupseteq\",8850],[\"\\\\approx\",8776],[\"\\\\~\",126],[\"\\\\leftrightarrow\",8596],[\"\\\\Leftrightarrow\",8660],[\"\\\\models\",8872],[\"\\\\vdash\",8866],[\"\\\\dashv\",8867],[\"\\\\roundimplies\",10608],[\"\\\\in\",8712],[\"\\\\notin\",8713],[\"\\\\ni\",8715],[\"\\\\owns\",8715],[\"\\\\subset\",8834],[\"\\\\supset\",8835],[\"\\\\subseteq\",8838],[\"\\\\supseteq\",8839],[\"\\\\differencedelta\",8710],[\"\\\\mvert\",8739],[\"\\\\parallel\",8741],[\"\\\\simeq\",8771]],\"mrel\");Me([[\"\\\\lnot\",172],[\"\\\\neg\",172],[\"\\\\triangle\",9651],[\"\\\\subsetneq\",8842],[\"\\\\varsubsetneq\",57370],[\"\\\\subsetneqq\",10955],[\"\\\\varsubsetneqq\",57367],[\"\\\\nsubset\",8836],[\"\\\\nsupset\",8837],[\"\\\\nsubseteq\",8840],[\"\\\\nsupseteq\",8841]],\"mrel\",\"ams\");Me([[\"\\\\wp\",8472],[\"\\\\aleph\",8501]]);Me([[\"\\\\blacktriangle\",9650],[\"\\\\hslash\",8463],[\"\\\\Finv\",8498],[\"\\\\Game\",8513],[\"\\\\eth\",240],[\"\\\\mho\",8487],[\"\\\\Bbbk\",107],[\"\\\\yen\",165],[\"\\\\square\",9633],[\"\\\\Box\",9633],[\"\\\\blacksquare\",9632],[\"\\\\circledS\",9416],[\"\\\\circledR\",174],[\"\\\\triangledown\",9661],[\"\\\\blacktriangledown\",9660],[\"\\\\checkmark\",10003],[\"\\\\diagup\",9585],[\"\\\\measuredangle\",8737],[\"\\\\sphericalangle\",8738],[\"\\\\backprime\",8245],[\"\\\\backdoubleprime\",8246],[\"\\\\Diamond\",9674],[\"\\\\lozenge\",9674],[\"\\\\blacklozenge\",10731],[\"\\\\varnothing\",8709],[\"\\\\complement\",8705],[\"\\\\maltese\",10016],[\"\\\\beth\",8502],[\"\\\\daleth\",8504],[\"\\\\gimel\",8503]],\"mord\",\"ams\");Me([[\"\\\\ \",160],[\"~\",160]],\"space\");M([\"!\",\",\",\":\",\";\",\">\",\"enskip\",\"enspace\",\"quad\",\"qquad\"],\"\",{createAtom:t=>new $t(t)});M(\"space\",\"\",{createAtom:t=>new $t(t)});Me([[\"\\\\colon\",58],[\"\\\\cdotp\",8901],[\"\\\\vdots\",8942,\"mord\"],[\"\\\\ldotp\",46],[\",\",44],[\";\",59]],\"mpunct\");Me([[\"\\\\cdots\",8943],[\"\\\\ddots\",8945],[\"\\\\ldots\",8230],[\"\\\\mathellipsis\",8230]],\"minner\");Me([[\"\\\\/\",47],[\"|\",8739,\"mord\"],[\"\\\\imath\",305],[\"\\\\jmath\",567],[\"\\\\degree\",176],[\"'\",8242],['\"',8221]]);var Qa={main:[\"Main-Regular\",\"ML__cmr\"],\"main-italic\":[\"Main-Italic\",\"ML__cmr ML__it\"],\"main-bold\":[\"Main-Bold\",\"ML__cmr ML__bold\"],\"main-bolditalic\":[\"Main-BoldItalic\",\"ML__cmr ML__bold ML__it\"],normal:[\"Main-Regular\",\"ML__cmr\"],\"normal-bold\":[\"Main-Bold\",\"ML__mathbf\"],\"normal-italic\":[\"Math-Italic\",\"ML__mathit\"],\"normal-bolditalic\":[\"Math-BoldItalic\",\"ML__mathbfit\"],roman:[\"Main-Regular\",\"ML__cmr\"],\"roman-bold\":[\"Main-Bold\",\"ML__mathbf\"],\"roman-italic\":[\"Math-Italic\",\"ML__mathit\"],\"roman-bolditalic\":[\"Math-BoldItalic\",\"ML__mathbfit\"],ams:[\"AMS-Regular\",\"ML__ams\"],\"ams-bold\":[\"AMS-Regular\",\"ML__ams ML__bold\"],\"ams-italic\":[\"AMS-Regular\",\"ML__ams ML__it\"],\"ams-bolditalic\":[\"AMS-Regular\",\"ML__ams ML__bold ML__it\"],\"sans-serif\":[\"SansSerif-Regular\",\"ML__sans\"],\"sans-serif-bold\":[\"SansSerif-Regular\",\"ML__sans ML__bold\"],\"sans-serif-italic\":[\"SansSerif-Regular\",\"ML__sans ML__it\"],\"sans-serif-bolditalic\":[\"SansSerif-Regular\",\"ML__sans ML__bold ML__it\"],calligraphic:[\"Caligraphic-Regular\",\"ML__cal\"],\"calligraphic-bold\":[\"Caligraphic-Regular\",\"ML__cal ML__bold\"],\"calligraphic-italic\":[\"Caligraphic-Regular\",\"ML__cal ML__it\"],\"calligraphic-bolditalic\":[\"Caligraphic-Regular\",\"ML__cal ML__bold ML__it\"],script:[\"Script-Regular\",\"ML__script\"],\"script-bold\":[\"Script-Regular\",\"ML__script ML__bold\"],\"script-italic\":[\"Script-Regular\",\"ML__script ML__it\"],\"script-bolditalic\":[\"Script-Regular\",\"ML__script ML__bold ML__it\"],fraktur:[\"Fraktur-Regular\",\"ML__frak\"],\"fraktur-bold\":[\"Fraktur-Regular\",\"ML__frak ML__bold\"],\"fraktur-italic\":[\"Fraktur-Regular\",\"ML__frak ML__it\"],\"fraktur-bolditalic\":[\"Fraktur-Regular\",\"ML__frak ML__bold ML__it\"],monospace:[\"Typewriter-Regular\",\"ML__tt\"],\"monospace-bold\":[\"Typewriter-Regular\",\"ML__tt ML__bold\"],\"monospace-italic\":[\"Typewriter-Regular\",\"ML__tt ML__it\"],\"monospace-bolditalic\":[\"Typewriter-Regular\",\"ML__tt ML__bold ML__it\"],\"double-struck\":[\"AMS-Regular\",\"ML__bb\"],\"double-struck-bold\":[\"AMS-Regular\",\"ML__bb ML__bold\"],\"double-struck-italic\":[\"AMS-Regular\",\"ML__bb ML_italic\"],\"double-struck-bolditalic\":[\"AMS-Regular\",\"ML__bb ML_bolditalic\"]},ts={\"double-struck\":/^[A-Z ]$/,script:/^[A-Z ]$/,calligraphic:/^[\\dA-Z ]$/,fraktur:/^[\\dA-Za-z ]$|^[!\"#$%&'()*+,\\-./:;=?[]^’‘]$/,monospace:/^[\\dA-Za-z ]$|^[!\"&'()*+,\\-./:;=?@[\\]^_~\\u0131\\u0237\\u0393\\u0394\\u0398\\u039B\\u039E\\u03A0\\u03A3\\u03A5\\u03A8\\u03A9]$/,\"sans-serif\":/^[\\dA-Za-z ]$|^[!\"&'()*+,\\-./:;=?@[\\]^_~\\u0131\\u0237\\u0393\\u0394\\u0398\\u039B\\u039E\\u03A0\\u03A3\\u03A5\\u03A8\\u03A9]$/},mp=/^[\\u03B1-\\u03C9]|\\u03D1|\\u03D5|\\u03D6|\\u03F1|\\u03F5]$/,ig=/^[\\u0393|\\u0394\\u0398\\u039B\\u039E\\u03A0\\u03A3\\u03A5\\u03A6\\u03A8\\u03A9]$/,ng=[/^[a-z]$/,/^[A-Z]$/,mp,ig],og={iso:[\"it\",\"it\",\"it\",\"it\"],tex:[\"it\",\"it\",\"it\",\"up\"],french:[\"it\",\"up\",\"up\",\"up\"],upright:[\"up\",\"up\",\"up\",\"up\"]},oc=class extends ve{constructor(){super(\"math\")}createAtom(e,r,i){var a,s,l,c,u,m;if(r===null)return new y({type:\"mord\",mode:\"math\",command:e,value:e,style:i});let n;try{n=(l=(s=globalThis.MathfieldElement)==null?void 0:s.isFunction((a=r.command)!=null?a:e))!=null?l:!1}catch(d){n=!1}if(r.definitionType===\"symbol\"){let d=new y({type:(c=r.type)!=null?c:\"mord\",mode:\"math\",command:(u=r.command)!=null?u:e,value:String.fromCodePoint(r.codepoint),isFunction:n,style:i});return e.startsWith(\"\\\\\")&&(d.verbatimLatex=e),d}let o=new y({type:\"mord\",mode:\"math\",command:(m=r.command)!=null?m:e,value:e,isFunction:n,style:i});return e.startsWith(\"\\\\\")&&(o.verbatimLatex=e),o}serialize(e,r){let i=ag(e,g(p({},r),{defaultMode:\"math\"}));return i.length===0||r.defaultMode!==\"text\"?i:[\"$ \",...i,\" $\"]}getFont(e,r){var l,c,u;if(r.variant,r.fontFamily){let m=r.fontFamily;r.fontSeries===\"b\"&&r.fontShape===\"it\"?m+=\"-bolditalic\":r.fontSeries===\"b\"?m+=\"-bold\":r.fontShape===\"it\"&&(m+=\"-italic\");let d=(l=Qa[m])!=null?l:Qa[r.fontFamily];if(!d)return console.error(`Unknown font family variant: ${m}`),null;let[h,f]=d;return f&&(e.classes+=\" \"+f),h}let{variant:i}=r,{variantStyle:n}=r;if(i===\"normal\"&&!n&&/[\\u00A3\\u0131\\u0237]/.test(e.value)&&(i=\"main\",n=\"italic\"),i===\"normal\"&&!n&&e.value.length===1){let m=!1;ng.forEach((d,h)=>{var f;d.test(e.value)&&og[(f=r.letterShapeStyle)!=null?f:\"tex\"][h]===\"it\"&&(m=!0)}),m&&(n=sp(n))}n===\"up\"&&(n=void 0);let o=n?i+\"-\"+n:i;Qa[o];let[a,s]=Qa[o];if(ts[i]&&!ts[i].test(e.value)){let m=Dn(e.value,i,n);return m||(m=(c=Dn(e.value,i))!=null?c:e.value,e.classes+=(u={bold:\" ML__bold\",italic:\" ML__it\",\"bold-italic\":\" ML__bold ML__it\"}[n!=null?n:\"\"])!=null?u:\"\"),e.value=m,null}return mp.test(e.value)&&(e.classes+=\" lcGreek\"),s&&(e.classes+=\" \"+s),a}};function ag(t,e){return dt(t,\"bold\").map(r=>{if(Ka(r[0])!==\"bold\")return P(es(r,e));if(Ka(r[0].parent)===\"bold\")return P(es(r,e));let n=P(r.map(o=>{var a;return(a=o.value)!=null?a:\"\"}));return/^[a-zA-Z0-9]+$/.test(n)?W(\"\\\\mathbf\",P(es(r,e))):W(\"\\\\bm\",P(es(r,e)))})}function es(t,e){let{parent:r}=t[0],i=Pa(r);return dt(t,\"variant\").map(n=>{let o=Pa(n[0]),a=\"\";o&&o!==i&&(a={calligraphic:\"\\\\mathcal\",\"calligraphic-uo\":\"\\\\mathcal\",fraktur:\"\\\\mathfrak\",\"fraktur-uo\":\"\\\\mathfrak\",\"double-struck\":\"\\\\mathbb\",\"double-struck-uo\":\"\\\\mathbb\",script:\"\\\\mathscr\",\"script-uo\":\"\\\\mathscr\",monospace:\"\\\\mathtt\",\"monospace-uo\":\"\\\\mathtt\",\"sans-serif\":\"\\\\mathsf\",\"sans-serif-uo\":\"\\\\mathsf\",normal:\"\",\"normal-up\":\"\\\\mathrm\",\"normal-italic\":\"\\\\mathnormal\",\"normal-bold\":\"\",\"normal-bolditalic\":\"\\\\mathbfit\",ams:\"\",\"ams-up\":\"\\\\mathrm\",\"ams-italic\":\"\\\\mathit\",\"ams-bold\":\"\",\"ams-bolditalic\":\"\\\\mathbfit\",main:\"\",\"main-up\":\"\\\\mathrm\",\"main-italic\":\"\\\\mathit\",\"main-bold\":\"\",\"main-bolditalic\":\"\\\\mathbfit\"}[o]);let s=\"\",l=n[n.length-1],c=a&&n.length>0&&(l.branch(\"subscript\")!==void 0||l.branch(\"superscript\")!==void 0);c&&(s=l.supsubToLatex(e));let u=P(n.map((m,d)=>{if(c&&d===n.length-1){let h=ne(m.command,m.mode);return h!=null&&h.serialize?h.serialize(m,e):m.body&&m.command?W(m.command,m.bodyToLatex(e)):m.body?m.bodyToLatex(e):!m.value||m.value===\"\\u200B\"?\"\":m.command||m.value}return m._serialize(e)}));return a?W(a,u)+s:u})}new oc;function sg(t,e){return t.map(r=>r._serialize(e))}function lg(t,e){return dt(t,\"fontShape\").map(r=>{let i=sg(r,e),{fontShape:n}=r[0].style,o=\"\";return n===\"it\"&&(o=\"\\\\textit\"),n===\"sl\"&&(o=\"\\\\textsl\"),n===\"sc\"&&(o=\"\\\\textsc\"),n===\"n\"&&(o=\"\\\\textup\"),!o&&n?`{${W(\"\\\\fontshape\",n)}${P(i)}}`:o?W(o,P(i)):P(i)})}function cg(t,e){return dt(t,\"fontSeries\").map(r=>{let i=lg(r,e),{fontSeries:n}=r[0].style,o=\"\";return n===\"b\"&&(o=\"\\\\textbf\"),n===\"l\"&&(o=\"\\\\textlf\"),n===\"m\"&&(o=\"\\\\textmd\"),n&&!o?`{${W(\"\\\\fontseries\",n)}${P(i)}}`:o?W(o,P(i)):P(i)})}function ug(t,e){return dt(t,\"fontSize\").map(r=>{var o,a;let i=cg(r,e),n=(a=[\"\",\"\\\\tiny\",\"\\\\scriptsize\",\"\\\\footnotesize\",\"\\\\small\",\"\\\\normalsize\",\"\\\\large\",\"\\\\Large\",\"\\\\LARGE\",\"\\\\huge\",\"\\\\Huge\"][(o=r[0].style.fontSize)!=null?o:\"\"])!=null?a:\"\";return n?`${n} ${P(i)}`:P(i)})}function dg(t,e,r){return dt(t,\"fontFamily\").map(i=>{var s;r=r&&!i.every(l=>l.style.fontFamily||l.style.fontShape||l.style.fontSeries||l.style.fontSize);let n=ug(i,e),{fontFamily:o}=i[0].style,a=(s={roman:\"textrm\",monospace:\"texttt\",\"sans-serif\":\"textsf\"}[o!=null?o:\"\"])!=null?s:\"\";return a?`\\\\${a}{${P(n)}}`:o?`{\\\\fontfamily{${i[0].style.fontFamily}} ${P(n)}}`:r?`\\\\text{${P(n)}}`:P(n)})}var pp={roman:\"\",\"sans-serif\":\"ML__sans\",monospace:\"ML__tt\"},ac=class extends ve{constructor(){super(\"text\")}createAtom(e,r,i){return r&&r.definitionType===\"symbol\"?new qe(e,String.fromCodePoint(r.codepoint),i!=null?i:{}):null}serialize(e,r){return dg(e,g(p({},r),{defaultMode:\"text\"}),r.defaultMode!==\"text\")}getFont(e,r){var n,o,a,s,l;let{fontFamily:i}=r;if(pp[i]?e.classes+=\" \"+pp[i]:i&&e.setStyle(\"font-family\",i),r.fontShape&&(e.classes+=\" \",e.classes+=(n={it:\"ML__it\",sl:\"ML__shape_sl\",sc:\"ML__shape_sc\",ol:\"ML__shape_ol\"}[r.fontShape])!=null?n:\"\"),r.fontSeries){let c=r.fontSeries.match(/(.?[lbm])?(.?[cx])?/);c&&(e.classes+=\" \",e.classes+=(a={ul:\"ML__series_ul\",el:\"ML__series_el\",l:\"ML__series_l\",sl:\"ML__series_sl\",m:\"\",sb:\"ML__series_sb\",b:\"ML__bold\",eb:\"ML__series_eb\",ub:\"ML__series_ub\"}[(o=c[1])!=null?o:\"\"])!=null?a:\"\",e.classes+=\" \",e.classes+=(l={uc:\"ML__series_uc\",ec:\"ML__series_ec\",c:\"ML__series_c\",sc:\"ML__series_sc\",n:\"\",sx:\"ML__series_sx\",x:\"ML__series_x\",ex:\"ML__series_ex\",ux:\"ML__series_ux\"}[(s=c[2])!=null?s:\"\"])!=null?l:\"\")}return\"Main-Regular\"}};new ac;var sc=class extends ve{constructor(){super(\"latex\")}createAtom(e){return new pe(e)}serialize(e,r){return e.filter(i=>i instanceof pe&&!i.isSuggestion).map(i=>i.value)}getFont(){return null}};new sc;function pn(t){var n;let e=/macos|ios/.test(At()),r=t.split(\"+\"),i=\"\";for(let o of r)i&&(i+=e?\"\\u2009\":'<span class=\"ML__shortcut-join\">+</span>'),o.startsWith(\"[Key\")?i+=o.slice(4,5):o.startsWith(\"Key\")?i+=o.slice(3,4):o.startsWith(\"[Digit\")?i+=o.slice(6,7):o.startsWith(\"Digit\")?i+=o.slice(5,6):i+=(n={cmd:\"\\u2318\",meta:e?\"\\u2318\":\"Ctrl\",shift:e?\"\\u21E7\":\"Shift\",alt:e?\"\\u2325\":\"Alt\",ctrl:e?\"\\u2303\":\"Ctrl\",\"\\n\":e?\"\\u23CE\":\"Return\",\"[return]\":e?\"\\u23CE\":\"Return\",\"[enter]\":e?\"\\u2324\":\"Enter\",\"[tab]\":e?\"\\u21E5\":\"Tab\",\"[escape]\":\"Esc\",\"[backspace]\":e?\"\\u232B\":\"Backspace\",\"[delete]\":e?\"\\u2326\":\"Del\",\"[pageup]\":e?\"\\u21DE\":\"Page Up\",\"[pagedown]\":e?\"\\u21DF\":\"Page Down\",\"[home]\":e?\"\\u2912\":\"Home\",\"[end]\":e?\"\\u2913\":\"End\",\"[space]\":\"Space\",\"[equal]\":\"=\",\"[minus]\":\"-\",\"[comma]\":\",\",\"[slash]\":\"/\",\"[backslash]\":\"\\\\\",\"[bracketleft]\":\"[\",\"[bracketright]\":\"]\",semicolon:\";\",period:\".\",comma:\",\",minus:\"-\",equal:\"=\",quote:\"'\",backslash:\"\\\\\",intlbackslash:\"\\\\\",backquote:\"`\",slash:\"/\",numpadmultiply:\"* &#128290;\",numpaddivide:\"/ &#128290;\",numpadsubtract:\"- &#128290;\",numpadadd:\"+ &#128290;\",numpaddecimal:\". &#128290;\",numpadcomma:\", &#128290;\",help:\"help\",left:\"\\u21E0\",up:\"\\u21E1\",right:\"\\u21E2\",down:\"\\u21E3\",\"[arrowleft]\":\"\\u21E0\",\"[arrowup]\":\"\\u21E1\",\"[arrowright]\":\"\\u21E2\",\"[arrowdown]\":\"\\u21E3\"}[o.toLowerCase()])!=null?n:o.toUpperCase();return i}function hn(t){if(t instanceof MouseEvent||t instanceof PointerEvent)return{x:t.clientX,y:t.clientY};if(typeof TouchEvent!=\"undefined\"&&t instanceof TouchEvent){let e=[...t.touches].reduce((i,n)=>({x:i.x+n.clientX,y:i.y+n.clientY}),{x:0,y:0}),r=t.touches.length;return{x:e.x/r,y:e.y/r}}}function qt(t){let e={alt:!1,control:!1,shift:!1,meta:!1};return(t instanceof MouseEvent||t instanceof PointerEvent||typeof TouchEvent!=\"undefined\"&&t instanceof TouchEvent||t instanceof KeyboardEvent)&&(t.altKey&&(e.alt=!0),t.ctrlKey&&(e.control=!0),t.metaKey&&(e.meta=!0),t.shiftKey&&(e.shift=!0)),e}function hp(t,e){return!t&&e||t&&!e?!1:!t||!e?!0:t.alt===e.alt&&t.control===e.control&&t.shift===e.shift&&t.meta===e.meta}var mg=new Set([\"Backquote\",\"Digit0\",\"Digit1\",\"Digit2\",\"Digit3\",\"Digit4\",\"Digit5\",\"Digit6\",\"Digit7\",\"Digit8\",\"Digit9\",\"Minus\",\"Equal\",\"IntlYen\",\"KeyQ\",\"KeyW\",\"KeyE\",\"KeyR\",\"KeyT\",\"KeyY\",\"KeyU\",\"KeyI\",\"KeyO\",\"KeyP\",\"BracketLeft\",\"BracketRight\",\"Backslash\",\"KeyA\",\"KeyS\",\"KeyD\",\"KeyF\",\"KeyG\",\"KeyH\",\"KeyJ\",\"KeyK\",\"KeyL\",\"Semicolon\",\"Quote\",\"IntlBackslash\",\"KeyZ\",\"KeyX\",\"KeyC\",\"KeyV\",\"KeyB\",\"KeyN\",\"KeyM\",\"Comma\",\"Period\",\"Slash\",\"IntlRo\",\"Space\",\"Numpad0\",\"Numpad1\",\"Numpad2\",\"Numpad3\",\"Numpad4\",\"Numpad5\",\"Numpad6\",\"Numpad7\",\"Numpad8\",\"Numpad9\",\"NumpadAdd\",\"NumpadComma\",\"NumpadDecimal\",\"NumpadDivide\",\"NumpadEqual\",\"NumpadHash\",\"NumpadMultiply\",\"NumpadParenLeft\",\"NumpadParenRight\",\"NumpadStar\",\"NumpadSubstract\"]);function cr(t){return t.ctrlKey||t.metaKey||[\"Dead\",\"Process\"].includes(t.key)?!1:t.code===\"\"?!0:mg.has(t.code)}function hi(){var e;let t=document.activeElement;for(;(e=t==null?void 0:t.shadowRoot)!=null&&e.activeElement;)t=t.shadowRoot.activeElement;return t}var Te=class t{static get scrim(){return t._scrim||(t._scrim=new t),t._scrim}static open(e){t.scrim.open(e)}static close(){t.scrim.close()}static get state(){return t.scrim.state}static get element(){return t.scrim.element}constructor(e){var r,i;this.lightDismiss=(r=e==null?void 0:e.lightDismiss)!=null?r:!0,this.translucent=(i=e==null?void 0:e.translucent)!=null?i:!1,this.state=\"closed\"}get element(){if(this._element)return this._element;let e=document.createElement(\"div\");return e.setAttribute(\"role\",\"presentation\"),e.style.position=\"fixed\",e.style.contain=\"content\",e.style.top=\"0\",e.style.left=\"0\",e.style.right=\"0\",e.style.bottom=\"0\",e.style.zIndex=\"var(--scrim-zindex, 10099)\",e.style.outline=\"none\",this.translucent?(e.style.background=\"rgba(255, 255, 255, .2)\",e.style.backdropFilter=\"contrast(40%)\"):e.style.background=\"transparent\",this._element=e,e}open(e){var a;if(this.state!==\"closed\")return;this.state=\"opening\",this.onDismiss=e==null?void 0:e.onDismiss,this.savedActiveElement=hi();let{element:r}=this;((a=e==null?void 0:e.root)!=null?a:document.body).appendChild(r),r.addEventListener(\"click\",this),document.addEventListener(\"touchmove\",this,!1),document.addEventListener(\"scroll\",this,!1);let i=window.innerWidth-document.documentElement.clientWidth;this.savedMarginRight=document.body.style.marginRight,this.savedOverflow=document.body.style.overflow,document.body.style.overflow=\"hidden\";let n=Number.parseFloat(getComputedStyle(document.body).marginRight);document.body.style.marginRight=`${n+i}px`;let o=document.querySelector(\".MLK__plate\");if(o instanceof HTMLElement){this.savedMlkPaddingRight=o.style.paddingRight;let s=Number.parseFloat(getComputedStyle(o).paddingRight);o.style.paddingRight=`${s+i}px`}e!=null&&e.child&&r.append(e.child),this.state=\"open\"}close(){var i,n,o,a,s;if(this.state!==\"open\"){this.element.parentElement;return}this.state=\"closing\",typeof this.onDismiss==\"function\"&&this.onDismiss(),this.onDismiss=void 0;let{element:e}=this;e.removeEventListener(\"click\",this),document.removeEventListener(\"touchmove\",this,!1),document.removeEventListener(\"scroll\",this,!1),e.remove(),document.body.style.overflow=(i=this.savedOverflow)!=null?i:\"\",document.body.style.marginRight=(n=this.savedMarginRight)!=null?n:\"\";let r=document.querySelector(\".MLK__plate\");r instanceof HTMLElement&&(r.style.paddingRight=(o=this.savedMlkPaddingRight)!=null?o:\"\"),hi()!==this.savedActiveElement&&((s=(a=this.savedActiveElement)==null?void 0:a.focus)==null||s.call(a)),e.innerHTML=\"\",this.state=\"closed\"}handleEvent(e){this.lightDismiss&&(e.target===this._element&&e.type===\"click\"?(this.close(),e.preventDefault(),e.stopPropagation()):e.target===document&&(e.type===\"touchmove\"||e.type===\"scroll\")&&(this.close(),e.preventDefault(),e.stopPropagation()))}};function fp(t,e,r){let i=null,n=null,o=!1,a=!1,s=!1,l=new AbortController,c=l.signal;return t.addEventListener(\"keydown\",u=>{if(o||u.key===\"Process\"||u.code===\"CapsLock\"||/(Control|Meta|Alt|Shift)(Left|Right)/.test(u.code)){i=null;return}i=u,n=null,r.onKeystroke(u)?t.textContent=\"\":i=null},{capture:!0,signal:c}),t.addEventListener(\"keypress\",u=>{o||(i&&n&&r.onKeystroke(i),n=u)},{capture:!0,signal:c}),t.addEventListener(\"compositionstart\",u=>{t.textContent=\"\",o=!0,r.onCompositionStart(u.data)},{capture:!0,signal:c}),t.addEventListener(\"compositionupdate\",u=>{o&&r.onCompositionUpdate(u.data)},{capture:!0,signal:c}),t.addEventListener(\"compositionend\",u=>{t.textContent=\"\",o&&(o=!1,r.onCompositionEnd(u.data))},{capture:!0,signal:c}),t.addEventListener(\"beforeinput\",u=>u.stopImmediatePropagation(),{signal:c}),t.addEventListener(\"input\",u=>{var m;if(!o&&(t.textContent=\"\",u.inputType!==\"insertCompositionText\")){if(u.inputType===\"insertFromPaste\"){u.preventDefault(),u.stopPropagation();return}r.onInput((m=u.data)!=null?m:\"\"),u.preventDefault(),u.stopPropagation()}},{signal:c}),t.addEventListener(\"paste\",u=>{t.focus({preventScroll:!0}),t.textContent=\"\",r.onPaste(u)||u.preventDefault(),u.stopImmediatePropagation()},{signal:c}),t.addEventListener(\"cut\",u=>r.onCut(u),{capture:!0,signal:c}),t.addEventListener(\"copy\",u=>r.onCopy(u),{capture:!0,signal:c}),t.addEventListener(\"blur\",u=>{var f,x;if(((x=(f=u.relatedTarget)==null?void 0:f._mathfield)==null?void 0:x.element)===e){t.focus({preventScroll:!0}),u.preventDefault(),u.stopPropagation();return}let m=!1,d=u.relatedTarget;for(;d;){if(d.classList.contains(\"ML__keyboard\")){m=!0;break}d=d.parentElement}if(m){t.focus({preventScroll:!0}),u.preventDefault(),u.stopPropagation();return}let h=Te.state;if(h===\"open\"||h===\"opening\"){u.preventDefault(),u.stopPropagation();return}if(u.relatedTarget===u.target.getRootNode().host){u.preventDefault(),u.stopPropagation();return}s||a||(s=!0,i=null,n=null,r.onBlur(),s=!1)},{capture:!0,signal:c}),t.addEventListener(\"focus\",u=>{s||a||(a=!0,r.onFocus(),a=!1)},{capture:!0,signal:c}),{dispose:()=>l.abort(),cancelComposition:()=>{o&&(typeof t.blur==\"function\"&&t.blur(),requestAnimationFrame(()=>t.focus({preventScroll:!0})))},blur:()=>{typeof t.blur==\"function\"&&(s=!0,t.blur(),s=!1)},focus:()=>{!a&&typeof t.focus==\"function\"&&(a=!0,t.focus({preventScroll:!0}),a=!1)},hasFocus:()=>hi()===t,setAriaLabel:u=>t.setAttribute(\"aria-label\",u),setValue:u=>{var m;t.textContent!==u&&(t.textContent=u,t.style.left=\"-1000px\",(m=window.getSelection())==null||m.selectAllChildren(t))},moveTo:(u,m)=>{t.style.top=`${m}px`,t.style.left=`${u}px`}}}function zr(t){var r;if(!t||!cr(t))return\"\";let e;return t.key===\"Unidentified\"&&t.target&&(e=t.target.value),e=(r=e!=null?e:t.key)!=null?r:t.code,/^(Dead|Return|Enter|Tab|Escape|Delete|PageUp|PageDown|Home|End|Help|ArrowLeft|ArrowRight|ArrowUp|ArrowDown)$/.test(e)&&(e=\"\"),e}function rs(t){t=yu(t);let e=[];return t.ctrlKey&&e.push(\"ctrl\"),t.metaKey&&e.push(\"meta\"),t.altKey&&e.push(\"alt\"),t.shiftKey&&e.push(\"shift\"),e.length===0?`[${t.code}]`:(e.push(`[${t.code}]`),e.join(\"+\"))}function pg(t){if(ke()){let e=At(),r=t.startsWith(\"!\"),i=t.endsWith(e);if(r&&!i||!r&&i)return!0}return t===\"!other\"?!1:t===\"other\"}function bp(t,e,r){if(t.length===0)return\"\";let i=Gr(Qs(rs(r))),n=Gr({key:r.key,shift:r.shiftKey,alt:r.altKey,ctrl:r.ctrlKey,meta:r.metaKey||r.ctrlKey&&/macos|ios/.test(At()),cmd:!1,win:!1});for(let o=t.length-1;o>=0;o--)if((t[o].key===i||t[o].key===n)&&(!t[o].ifMode||t[o].ifMode===e))return t[o].command;return\"\"}function gp(t){let e=t;return ee(e)&&(e=e.length>0?e[0]+\"(\"+e.slice(1).join(\"\")+\")\":\"\"),e}function yp(t,e){let r=[];if(typeof e==\"string\"){let o=z0[e];ee(o)?r=o.slice():o&&r.push(o)}let i=gp(e),n=new RegExp(\"^\"+i.replace(\"\\\\\",\"\\\\\\\\\").replace(\"|\",\"\\\\|\").replace(\"*\",\"\\\\*\").replace(\"$\",\"\\\\$\").replace(\"^\",\"\\\\^\")+\"([^*a-zA-Z]|$)\");for(let o of t)n.test(gp(o.command))&&r.push(o.key);return r.map(pn)}function hg(t,e){if(t.ifPlatform&&!/^!?(macos|windows|android|ios|chromeos|other)$/.test(t.ifPlatform))throw new Error(`Unexpected platform \"${t.ifPlatform}\" for keybinding ${t.key}`);if(t.ifLayout!==void 0&&(e.score===0||!t.ifLayout.includes(e.id)))return;let r=Qs(t.key),i=t.ifPlatform;if(r.cmd){if(i&&i!==\"macos\"&&i!==\"ios\")throw new Error('Unexpected \"cmd\" modifier with platform \"'+i+`\"\n\"cmd\" modifier can only be used with macOS or iOS platform.`);i||(i=At()===\"ios\"?\"ios\":\"macos\"),r.win=!1,r.cmd=!1,r.meta=!0}if(r.win){if(i&&i!==\"windows\")throw new Error('Unexpected \"win\" modifier with platform \"'+i+`\"\n\"win\" modifier can only be used with Windows platform.`);i=\"windows\",r.win=!1,r.cmd=!1,r.meta=!0}if(i&&!pg(i))return;if(/^\\[.+\\]$/.test(r.key))return g(p({},t),{key:Gr(r)});let n=bu(r.key,e);if(!n)return g(p({},t),{key:Gr(r)});if(n.shift&&r.shift||n.alt&&r.alt)throw new Error(`The keybinding ${t.key} (${lc(t.command)}) is conflicting with the key combination ${Gr(n)} using the ${e.displayName} keyboard layout`);return n.shift=n.shift||r.shift,n.alt=n.alt||r.alt,n.meta=r.meta,n.ctrl=r.ctrl,g(p({},t),{key:Gr(n)})}function lc(t){if(Array.isArray(t)){let e=[...t];return e.shift()+\"(\"+e.map(r=>typeof r==\"string\"?`\"${r}\"`:r.toString()).join(\", \")+\")\"}return t}function xp(t,e){let r=[],i=[];for(let n of t)try{let o=hg(n,e);if(!o)continue;let a=i.find(s=>s.key===o.key&&s.ifMode===o.ifMode);if(a)throw new Error(`Ambiguous key binding ${n.key} (${lc(n.command)}) matches ${a.key} (${lc(a.command)}) with the ${e.displayName} keyboard layout`);i.push(o)}catch(o){o instanceof Error&&r.push(o.message)}return[i,r]}var cc=class extends q{constructor(){super(\"latex\")}createAtom(e){return new pe(e)}onPaste(e,r){if(!r)return!1;let i=typeof r==\"string\"?r:r.getData(\"application/x-latex\")||r.getData(\"text/plain\");return i&&e.model.contentWillChange({inputType:\"insertFromPaste\",data:i})?(e.stopCoalescingUndo(),e.stopRecording(),this.insert(e.model,i)&&(e.startRecording(),e.snapshot(\"paste\"),e.model.contentDidChange({inputType:\"insertFromPaste\"}),J(e)),e.startRecording(),!0):!1}insert(e,r,i){if(!e.contentWillChange({data:r,inputType:\"insertText\"}))return!1;i||(i={}),i.insertionMode||(i.insertionMode=\"replaceSelection\"),i.selectionMode||(i.selectionMode=\"placeholder\");let{silenceNotifications:n}=e;i.silenceNotifications&&(e.silenceNotifications=!0);let o=e.silenceNotifications;e.silenceNotifications=!0,i.insertionMode===\"replaceSelection\"&&!e.selectionIsCollapsed?e.deleteAtoms(de(e.selection)):i.insertionMode===\"replaceAll\"?(e.root.setChildren([],\"body\"),e.position=0):i.insertionMode===\"insertBefore\"?e.collapseSelection(\"backward\"):i.insertionMode===\"insertAfter\"&&e.collapseSelection(\"forward\");let a=[];for(let c of r)Eu.test(c)&&a.push(new pe(c));let s=e.at(e.position);if(s instanceof Nt&&(s=s.lastChild),!(s.parent instanceof Nt)){let c=new Nt;s.parent.addChildAfter(c,s),s=c.firstChild}let l=s.parent.addChildrenAfter(a,s);return e.silenceNotifications=o,i.selectionMode===\"before\"||(i.selectionMode===\"item\"?e.setSelection(e.anchor,e.offsetOf(l)):l&&(e.position=e.offsetOf(l))),e.contentDidChange({data:r,inputType:\"insertText\"}),e.silenceNotifications=n,!0}};function oo(t){return t.atoms.find(e=>e.type===\"latexgroup\")}function fi(t){var r,i;let e=oo(t);return(i=(r=e==null?void 0:e.body)==null?void 0:r.filter(n=>n.type===\"latex\"))!=null?i:[]}function is(t,e){var s;let r=0,i=!1,n=Number.isFinite(e==null?void 0:e.before)?(s=e==null?void 0:e.before)!=null?s:0:t.lastOffset;for(;r<=n&&!i;){let l=t.at(r);i=l instanceof pe&&l.isSuggestion,i||r++}if(!i)return[void 0,void 0];let o=r,a=!1;for(;o<=n&&!a;){let l=t.at(o);a=!(l instanceof pe&&l.isSuggestion),a||o++}return[r-1,o-1]}new cc;function fg(t,e){t.flushInlineShortcutBuffer(),t.stopCoalescingUndo();let r=ns(t,e),{model:i}=t;return i.selectionIsCollapsed?(t.defaultStyle.fontSeries&&r.fontSeries===t.defaultStyle.fontSeries&&(r.fontSeries=\"auto\"),r.fontShape&&r.fontShape===t.defaultStyle.fontShape&&(r.fontShape=\"auto\"),r.color&&r.color===t.defaultStyle.color&&(r.color=\"none\"),r.backgroundColor&&r.backgroundColor===t.defaultStyle.backgroundColor&&(r.backgroundColor=\"none\"),r.fontSize&&r.fontSize===t.defaultStyle.fontSize&&(r.fontSize=\"auto\"),t.defaultStyle=p(p({},t.defaultStyle),r)):t.model.deferNotifications({content:!0,type:\"insertText\"},()=>{i.selection.ranges.forEach(n=>io(i,n,r,{operation:\"toggle\"})),t.snapshot(\"style-change\")}),!0}fe({applyStyle:fg},{target:\"mathfield\",canUndo:!0,changeContent:!0});function ns(t,e){var n,o,a,s,l,c,u,m,d,h;let r={};if(typeof e.color==\"string\"){let f=(o=t.colorMap((n=e.color)!=null?n:e.verbatimColor))!=null?o:\"none\";f!==e.color&&(r.verbatimColor=(a=e.verbatimColor)!=null?a:e.color),r.color=f}if(typeof e.backgroundColor==\"string\"){let f=(l=t.backgroundColorMap((s=e.backgroundColor)!=null?s:e.verbatimBackgroundColor))!=null?l:\"none\";f!==e.backgroundColor&&(r.verbatimBackgroundColor=(c=e.verbatimBackgroundColor)!=null?c:e.backgroundColor),r.backgroundColor=f}typeof e.fontFamily==\"string\"&&(r.fontFamily=e.fontFamily),typeof e.series==\"string\"&&(r.fontSeries=e.series),typeof e.fontSeries==\"string\"&&(r.fontSeries=e.fontSeries.toLowerCase()),r.fontSeries&&(r.fontSeries=(u={bold:\"b\",medium:\"m\",normal:\"m\"}[r.fontSeries])!=null?u:r.fontSeries),typeof e.shape==\"string\"&&(r.fontShape=e.shape),typeof e.fontShape==\"string\"&&(r.fontShape=e.fontShape.toLowerCase()),r.fontShape&&(r.fontShape=(m={italic:\"it\",up:\"n\",upright:\"n\",normal:\"n\"}[r.fontShape])!=null?m:r.fontShape),e.variant&&(r.variant=e.variant.toLowerCase()),e.variantStyle!==void 0&&(r.variantStyle=typeof e.variantStyle==\"string\"&&e.variantStyle!==\"\"?e.variantStyle.toLowerCase():e.variantStyle);let i=(d=e.size)!=null?d:e.fontSize;return typeof i==\"number\"?r.fontSize=Math.max(1,Math.min(10,i)):typeof i==\"string\"&&(r.fontSize=(h={size1:1,size2:2,size3:3,size4:4,size5:5,size6:6,size7:7,size8:8,size9:9,size10:10}[i.toLowerCase()])!=null?h:{tiny:1,scriptsize:2,footnotesize:3,small:4,normal:5,normalsize:5,large:6,Large:7,LARGE:8,huge:9,Huge:10}[i]),r}function ao(t,e,r){var o,a;let i=t.model;if(i.mode===\"latex\")return{};let n=t.styleBias;if(n===\"none\")return t.defaultStyle;if(i.mode===\"text\")return(a=(o=i.at(n===\"right\"?r.after:r.before))==null?void 0:o.style)!=null?a:t.defaultStyle;if(i.mode===\"math\"){let s=i.at(n===\"right\"?r.after:r.before);return s?p(g(p({},s.style),{variant:\"normal\"}),t.defaultStyle):t.defaultStyle}return{}}function Ht(t){let e=t.options.onInsertStyle;if(e===null)return{};e===void 0&&(e=ao);let r=t.model,i=t.styleBias,n=r.at(r.position),o=vp(r,n,i),a=vp(r,n.rightSibling,i);return e(t,r.position,{before:o,after:a})}function vp(t,e,r){var i;return!e||e.type===\"first\"&&r!==\"right\"?-1:e.type!==\"group\"?t.offsetOf(e):!e.body||e.body.length<2?-1:((i=e.body)==null?void 0:i.length)===1||r!==\"right\"?t.offsetOf(e.body[0]):t.offsetOf(e.body[e.body.length-1])}function gi(t){let e=fi(t.model).filter(r=>r.isSuggestion);if(e.length!==0){t.model.position=t.model.offsetOf(e[0].leftSibling);for(let r of e)r.parent.removeChild(r)}}function Fr(t,e){var c;let{model:r}=t;gi(t);for(let u of fi(r))u.isError=!1;if(!r.selectionIsCollapsed||t.options.popoverPolicy===\"off\"){Nr(t);return}let i=[],n=r.at(r.position);for(;n&&n instanceof pe&&/^[a-zA-Z\\*]$/.test(n.value);)n=n.leftSibling;if(n&&n instanceof pe&&n.value===\"\\\\\")for(i.push(n),n=n.rightSibling;n&&n instanceof pe&&/^[a-zA-Z\\*]$/.test(n.value);)i.push(n),n=n.rightSibling;let o=i.map(u=>u.value).join(\"\"),a=Du(t,o);if(a.length===0){if(/^\\\\[a-zA-Z\\*]+$/.test(o))for(let u of i)u.isError=!0;Nr(t);return}let s=(c=e==null?void 0:e.atIndex)!=null?c:0;t.suggestionIndex=s<0?a.length-1:s%a.length;let l=a[t.suggestionIndex];if(l!==o){let u=i[i.length-1];u.parent.addChildrenAfter([...l.slice(o.length-l.length)].map(m=>new pe(m,{isSuggestion:!0})),u),xt(t,{interactive:!0})}_p(t,a)}function os(t){let[e,r]=is(t,{before:t.position});if(e===void 0||r===void 0)return!1;let i=!1;return t.getAtoms([e,r]).forEach(n=>{n.isSuggestion&&(n.isSuggestion=!1,i=!0)}),i}function Xe(t,e=\"accept\",r){var l,c;Nr(t);let i=oo(t.model);if(!i)return!1;if(e===\"accept-suggestion\"||e===\"accept-all\"){let u=fi(t.model).filter(m=>m.isSuggestion);if(u.length!==0){for(let m of u)m.isSuggestion=!1;t.model.position=t.model.offsetOf(u[u.length-1])}if(e===\"accept-suggestion\")return u.length!==0}let o=fi(t.model).filter(u=>!u.isSuggestion).map(u=>u.value).join(\"\"),a=i.leftSibling;if(i.parent.removeChild(i),t.model.position=t.model.offsetOf(a),t.switchMode((l=r==null?void 0:r.mode)!=null?l:\"math\"),e===\"reject\")return!0;let s=p({},Ht(t));return!/^[a-zA-Z0-9]$/.test(o)&&t.styleBias!==\"none\"&&(s.variant=\"normal\",s.variantStyle=void 0),q.insert(t.model,o,{selectionMode:(c=r==null?void 0:r.selectItem)!=null&&c?\"item\":\"placeholder\",format:\"latex\",mode:\"math\",style:s}),t.snapshot(),t.model.announce(\"replacement\"),t.switchMode(\"math\"),!0}function bi(t){var r;let e=document.getElementById(t);return e?e.dataset.refcount=Number(Number.parseInt((r=e.dataset.refcount)!=null?r:\"0\")+1).toString():(e=document.createElement(\"div\"),e.setAttribute(\"aria-hidden\",\"true\"),e.dataset.refcount=\"1\",e.id=t,document.body.append(e)),e}function $r(t){var i;let e=document.getElementById(t);if(!e)return;let r=Number.parseInt((i=e.getAttribute(\"data-refcount\"))!=null?i:\"0\");r<=1?e.remove():e.dataset.refcount=Number(r-1).toString()}function gg(t,e){let r=new B({from:t.context}),i=new y({mode:\"math\",type:\"root\",body:ge(e,{context:r})}),n=Tr(Vt(new w(i.render(r),{classes:\"ML__base\"}),r));return Dr(n,{classes:\"ML__latex\"}).toMarkup()}function _p(t,e){var n;if(e.length===0){Nr(t);return}let r=\"\";for(let[o,a]of e.entries()){let s=a,l=gg(t,a),c=yp(t.keybindings,s).join(\"<br>\");r+=`<li role=\"button\" data-command=\"${s}\" ${o===t.suggestionIndex?\"class=ML__popover__current\":\"\"}><span class=\"ML__popover__latex\">${s}</span><span class=\"ML__popover__command\">${l}</span>`,c&&(r+=`<span class=\"ML__popover__keybinding\">${c}</span>`),r+=\"</li>\"}let i=bg(t,`<ul>${r}</ul>`);uc()&&((n=i.querySelector(\".ML__popover__current\"))==null||n.scrollIntoView({block:\"nearest\",inline:\"nearest\"})),setTimeout(()=>{var o;i&&!uc()&&(i.classList.add(\"is-visible\"),fn(t),(o=i.querySelector(\".ML__popover__current\"))==null||o.scrollIntoView({block:\"nearest\",inline:\"nearest\"}))},32)}function uc(){let t=document.getElementById(\"mathlive-suggestion-popover\");return t?t.classList.contains(\"is-visible\"):!1}function fn(t,e){var m,d,h;if(!t.element||t.element.mathfield!==t||!uc())return;if(((m=t.model.at(t.model.position))==null?void 0:m.type)!==\"latex\"){Nr(t);return}if(e!=null&&e.deferred){setTimeout(()=>fn(t),32);return}let r=Yi(t.field);if(!r)return;let i=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,n=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,o=window.innerWidth-document.documentElement.clientWidth,a=window.innerHeight-document.documentElement.clientHeight,s=(h=(d=window.mathVirtualKeyboard)==null?void 0:d.boundingRect.height)!=null?h:0,l=document.getElementById(\"mathlive-suggestion-popover\");r.x+l.offsetWidth/2>n-o?l.style.left=`${n-l.offsetWidth-o}px`:r.x-l.offsetWidth/2<0?l.style.left=\"0\":l.style.left=`${r.x-l.offsetWidth/2}px`;let c=r.y-r.height;i-a-s-r.y<c?(l.classList.add(\"ML__popover--reverse-direction\"),l.classList.remove(\"top-tip\"),l.classList.add(\"bottom-tip\"),l.style.top=`${r.y-r.height-l.offsetHeight-15}px`):(l.classList.remove(\"ML__popover--reverse-direction\"),l.classList.add(\"top-tip\"),l.classList.remove(\"bottom-tip\"),l.style.top=`${r.y+15}px`)}function Nr(t){t.suggestionIndex=0,document.getElementById(\"mathlive-suggestion-popover\")&&$r(\"mathlive-suggestion-popover\")}function bg(t,e){let r=document.getElementById(\"mathlive-suggestion-popover\");return r?$r(\"mathlive-suggestion-popover\"):(We(\"suggestion-popover\"),We(\"core\")),r=bi(\"mathlive-suggestion-popover\"),r.addEventListener(\"pointerdown\",i=>i.preventDefault()),r.addEventListener(\"click\",i=>{let n=i.target;for(;n&&!n.dataset.command;)n=n.parentElement;n&&(Xe(t,\"reject\"),q.insert(t.model,n.dataset.command,{selectionMode:\"placeholder\",format:\"latex\",mode:\"math\"}),t.dirty=!0,t.focus())}),r.innerHTML=globalThis.MathfieldElement.createHTML(e),r}function Mp(){document.getElementById(\"mathlive-suggestion-popover\")&&($r(\"mathlive-suggestion-popover\"),nt(\"suggestion-popover\"),nt(\"core\"))}function yg(){let t=String(new Error().stack).replace(/^Error.*\\n/,\"\").split(`\n`);if(t.length===0)return console.error(`Can't use relative paths to specify assets location because the sourcefile location could not be determined (unexpected stack trace format \"${new Error().stack}\").`),\"\";let e=t[1],r=e.match(/http.*\\.ts[\\?:]/);return r&&(e=t[2]),r=e.match(/(https?:.*):[0-9]+:[0-9]+/),r||(r=e.match(/at (.*(\\.ts))[\\?:]/),r||(r=e.match(/at (.*(\\.mjs|\\.js))[\\?:]/))),r?r[1]:(console.error(t),console.error(`Can't use relative paths to specify assets location because the source file location could not be determined (unexpected location \"${e}\").`),\"\")}var ur=null,wp,Sp,dc=((Sp=(wp=globalThis==null?void 0:globalThis.document)==null?void 0:wp.currentScript)==null?void 0:Sp.src)||yg();async function as(t){if(/^(?:[a-z+]+:)?\\/\\//i.test(t)){try{return new URL(t).href}catch(e){}if(t.startsWith(\"//\"))try{return new URL(`${window.location.protocol}${t}`).href}catch(e){}return t}if(ur===null)try{let e=await fetch(dc,{method:\"HEAD\"});e.status===200&&(ur=e.url,ur=ur.replace(/\\/\\+esm$/,\"/\"),ur.includes(\"jsdelivr.net/\")&&(ur+=\"/\"))}catch(e){console.error(`Invalid URL \"${t}\" (relative to \"${dc}\")`)}return new URL(t,ur!=null?ur:dc).href}function xg(t,e,r={}){return new FontFace(t,`url(${e}.woff2) format('woff2')`,r)}var Ie=\"not-loaded\";async function kp(){return Ie=\"not-loaded\",dr()}async function dr(){var e;if(Ie!==\"not-loaded\")return;if(Ie=\"loading\",(e=getComputedStyle(document.documentElement).getPropertyValue(\"--ML__static-fonts\"))!=null?e:!1){Ie=\"ready\";return}if(document.body.classList.remove(\"ML__fonts-did-not-load\"),\"fonts\"in document){let r=[\"KaTeX_Main\",\"KaTeX_Math\",\"KaTeX_AMS\",\"KaTeX_Caligraphic\",\"KaTeX_Fraktur\",\"KaTeX_SansSerif\",\"KaTeX_Script\",\"KaTeX_Typewriter\",\"KaTeX_Size1\",\"KaTeX_Size2\",\"KaTeX_Size3\",\"KaTeX_Size4\"],i=Array.from(document.fonts).map(a=>a.family);if(r.every(a=>i.includes(a))){Ie=\"ready\";return}if(!globalThis.MathfieldElement.fontsDirectory){Ie=\"not-loaded\";return}let n=await as(globalThis.MathfieldElement.fontsDirectory);if(!n){document.body.classList.add(\"ML__fonts-did-not-load\"),Ie=\"error\";return}n.endsWith(\"/\")&&(n=n.slice(0,-1));let o=[[\"KaTeX_Main-Regular\"],[\"KaTeX_Main-BoldItalic\",{style:\"italic\",weight:\"bold\"}],[\"KaTeX_Main-Bold\",{weight:\"bold\"}],[\"KaTeX_Main-Italic\",{style:\"italic\"}],[\"KaTeX_Math-Italic\",{style:\"italic\"}],[\"KaTeX_Math-BoldItalic\",{style:\"italic\",weight:\"bold\"}],[\"KaTeX_AMS-Regular\"],[\"KaTeX_Caligraphic-Regular\"],[\"KaTeX_Caligraphic-Bold\",{weight:\"bold\"}],[\"KaTeX_Fraktur-Regular\"],[\"KaTeX_Fraktur-Bold\",{weight:\"bold\"}],[\"KaTeX_SansSerif-Regular\"],[\"KaTeX_SansSerif-Bold\",{weight:\"bold\"}],[\"KaTeX_SansSerif-Italic\",{style:\"italic\"}],[\"KaTeX_Script-Regular\"],[\"KaTeX_Typewriter-Regular\"],[\"KaTeX_Size1-Regular\"],[\"KaTeX_Size2-Regular\"],[\"KaTeX_Size3-Regular\"],[\"KaTeX_Size4-Regular\"]].map(a=>xg(a[0].replace(/-[a-zA-Z]+$/,\"\"),`${n}/${a[0]}`,a[1]));try{(await Promise.all(o.map(s=>{try{return s.load()}catch(l){}}))).forEach(s=>document.fonts.add(s)),Ie=\"ready\";return}catch(a){console.error(`MathLive 0.108.2: The math fonts could not be loaded from \"${n}\"`,{cause:a}),document.body.classList.add(\"ML__fonts-did-not-load\")}Ie=\"error\"}}function Lp(t,e=0){let r=3735928559^e,i=1103547991^e;for(let n=0;n<t.length;n++){let o=t.charCodeAt(n);r=Math.imul(r^o,2654435761),i=Math.imul(i^o,1597334677)}return r=Math.imul(r^r>>>16,2246822507),r^=Math.imul(i^i>>>13,3266489909),i=Math.imul(i^i>>>16,2246822507),i^=Math.imul(r^r>>>13,3266489909),4294967296*(2097151&i)+(r>>>0)}function J(t,e){!t||t.dirty||!t.field||(t.resizeObserver.unobserve(t.field),t.dirty=!0,requestAnimationFrame(()=>{it(t)&&t.dirty&&(t.atomBoundsCache=new Map,xt(t,e),t.resizeObserver.observe(t.field),t.resizeObserverStarted=!0)}))}function vg(t,e){var o;e=e!=null?e:{};let r=new B({from:g(p({},t.context),{atomIdsSettings:{seed:e.forHighlighting?Lp(y.serialize([t.model.root],{expandMacro:!1,defaultMode:t.options.defaultMode})):\"random\",groupNumbers:(o=e.forHighlighting)!=null?o:!1},letterShapeStyle:t.options.letterShapeStyle}),mathstyle:t.options.defaultMode===\"inline-math\"?\"textstyle\":\"displaystyle\"}),i=t.model.root.render(r);return Dr(Vt(i,r),{classes:t.hasEditablePrompts?\"ML__latex ML__prompting\":\"ML__latex\",attributes:{translate:\"no\",\"aria-hidden\":\"true\"}})}function mc(t,e){try{let{model:r}=t;r.root.caret=void 0,r.root.isSelected=!1,r.root.containsCaret=!0;for(let n of r.atoms)n.caret=void 0,n.isSelected=!1,n.containsCaret=!1;if(r.selectionIsCollapsed){let n=r.at(r.position);n.caret=t.model.mode;let o=n.parent;for(;o;)o.containsCaret=!0,o=o.parent}else{let n=r.getAtoms(r.selection,{includeChildren:!0,includeFirstAtoms:!0});for(let o of n)o.isSelected=!0}return vg(t,e).toMarkup()}catch(r){return console.error(r),'<span class=\"ML__latex\" translate=\"no\" aria-hidden=\"true\">\\u{1F6AB}</span>'}}function xt(t,e){if(!it(t))return;e!=null||(e={});let r=t.element.querySelector(\"[part=virtual-keyboard-toggle]\");r&&(r.style.display=t.hasEditableContent?\"\":\"none\");let i=t.field;if(!i)return;let n=t.isSelectionEditable&&t.hasFocus(),o=i.classList.contains(\"ML__focused\");o&&!n?i.classList.remove(\"ML__focused\"):!o&&n&&i.classList.add(\"ML__focused\");let a=mc(t,e),s=t.element.querySelector(\"[part=menu-toggle]\");if(s){let l=!1;(t.disabled||t.readOnly&&!t.hasEditableContent||t.userSelect===\"none\")&&(l=!0),!l&&t.element.offsetWidth<50&&(l=!0),s.style.display=l?\"none\":\"\"}if(t.model.atoms.length<=1){let l=t.options.contentPlaceholder;l&&(a+=`<span part=placeholder class=\"ML__content-placeholder\">${he(l)}</span>`)}i.innerHTML=globalThis.MathfieldElement.createHTML(a),so(t,e.interactive),t.updateToggleLayout(),t.dirty=!1}function so(t,e){var l;let r=t.field;if(!r)return;for(let c of r.querySelectorAll(\".ML__selection, .ML__contains-highlight\"))c.remove();if(!(e!=null&&e)&&Ie!==\"error\"&&Ie!==\"ready\"){setTimeout(()=>{Ie===\"ready\"?so(t):setTimeout(()=>so(t),128)},32);return}let i=t.model;(l=t.atomBoundsCache)==null||l.clear();let n,o=()=>{if(n!==void 0)return n;let c=r.offsetWidth,u=r.getBoundingClientRect().width;return n=Math.floor(u)/c,isNaN(n)&&(n=1),n};if(i.selectionIsCollapsed){fn(t,{deferred:!0});let c=i.at(i.position);for(;c&&c.type!==\"prompt\"&&!(c.containsCaret&&c.displayContainsHighlight);)c=c.parent;if(c!=null&&c.containsCaret&&c.displayContainsHighlight){let u=o(),m=tc(t,nr(t,c),u);if(m){m.left/=u,m.right/=u,m.top/=u,m.bottom/=u;let d=document.createElement(\"div\");d.classList.add(\"ML__contains-highlight\"),d.style.position=\"absolute\",d.style.left=`${m.left+1}px`,d.style.top=`${Math.ceil(m.top)}px`,d.style.width=`${Math.ceil(m.right-m.left)}px`,d.style.height=`${Math.ceil(m.bottom-m.top)}px`,r.insertBefore(d,r.childNodes[0])}}return}let a=o(),s=_g(Va(t,{excludeAtomsWithBackground:!0}));for(let c of s){c.left/=a,c.right/=a,c.top/=a,c.bottom/=a;let u=document.createElement(\"div\");u.classList.add(\"ML__selection\"),u.style.position=\"absolute\",u.style.left=`${c.left}px`,u.style.top=`${c.top}px`,u.style.width=`${Math.ceil(c.right-c.left)}px`,u.style.height=`${Math.max(1,Math.ceil(c.bottom-c.top-1))}px`,r.insertBefore(u,r.childNodes[0])}}function _g(t){let e=[];for(let r of t){let i=!1;for(let n of e)if(r.left===n.left&&r.right===n.right&&r.top===n.top&&r.bottom===n.bottom){i=!0;break}i||e.push(r)}t=e,e=[];for(let r of t){let i=0;for(let n of t)if(r.left>=n.left&&r.right<=n.right&&r.top>=n.top&&r.bottom<=n.bottom&&(i+=1,i>1))break;i===1&&e.push(r)}return e}function pc(t){if(!t)return;let e=t.model,r=e.selection,i=y.serialize([e.root],{expandMacro:!1,defaultMode:t.options.defaultMode});q.insert(e,i,{insertionMode:\"replaceAll\",selectionMode:\"after\",format:\"latex\",silenceNotifications:!0,mode:\"math\"});let n=e.silenceNotifications;e.silenceNotifications=!0,e.selection=r,e.silenceNotifications=n,J(t)}function hc(){for(let t of document.querySelectorAll(\".ML__mathfield\"))\"_mathfield\"in t&&pc(t._mathfield)}var fc=3,vt;function fe(t,e){e=p({target:\"mathfield\",canUndo:!1,audioFeedback:void 0,changeContent:!1,changeSelection:!1},e!=null?e:{}),vt||(vt={});for(let r of Object.keys(t))vt[r],vt[r]=g(p({},e),{fn:t[r]})}function gc(t){let e;if(Array.isArray(t)){if(t[0]===\"performWithFeedback\")return gc(t[1]);e=t[0]}else e=t;return vt[e]}function mr(t){var e;return(e=gc(t))==null?void 0:e.target}function Ap(t,e){var l,c;if(e=yi(e),!e)return!1;let r,i=[],n=!1,o=!1;ee(e)?(r=e[0],i=e.slice(1)):r=e;let a=vt[r],s=a==null?void 0:a.target;if(s===\"model\"){if(!t.isSelectionEditable&&(a!=null&&a.changeContent))return t.model.announce(\"plonk\"),!1;/^(delete|add)/.test(r)&&(r!==\"deleteBackward\"&&t.flushInlineShortcutBuffer(),t.snapshot(r)),/^complete/.test(r)||gi(t),vt[r].fn(t.model,...i),Fr(t),o=!0,n=!0}else if(s===\"virtual-keyboard\")o=(c=(l=window.mathVirtualKeyboard)==null?void 0:l.executeCommand(e))!=null?c:!1,n=!0;else if(vt[r]){if(!t.isSelectionEditable&&(a!=null&&a.changeContent))return t.model.announce(\"plonk\"),!1;/^(undo|redo)/.test(r)&&t.flushInlineShortcutBuffer(),o=vt[r].fn(t,...i),n=!0}else throw new Error(`Unknown command \"${r}\"`);return s!==\"virtual-keyboard\"&&(!t.model.selectionIsCollapsed||a!=null&&a.changeSelection&&r!==\"deleteBackward\")&&(t.flushInlineShortcutBuffer(),a!=null&&a.changeContent||t.stopCoalescingUndo(),t.defaultStyle={}),o&&(a!=null&&a.changeSelection&&n?(t.dirty=!0,t.scrollIntoView()):J(t)),n}function Mg(t,e){var n;if(!t)return!1;t.focus(),gn.keypressVibration&&Ro()&&navigator.vibrate(fc);let r=gc(e);globalThis.MathfieldElement.playSound((n=r==null?void 0:r.audioFeedback)!=null?n:\"keypress\");let i=t.executeCommand(e);return t.scrollIntoView(),i}fe({performWithFeedback:(t,e)=>Mg(t,e)});function wg(t){return Fr(t,{atIndex:t.suggestionIndex+1}),!1}function Sg(t){return Fr(t,{atIndex:t.suggestionIndex-1}),!1}fe({complete:Xe},{target:\"mathfield\",audioFeedback:\"return\",canUndo:!0,changeContent:!0,changeSelection:!0});fe({dispatchEvent:(t,e,r)=>{var i,n;return(n=(i=t.host)==null?void 0:i.dispatchEvent(new CustomEvent(e,{detail:r})))!=null?n:!1}},{target:\"mathfield\"});fe({nextSuggestion:wg,previousSuggestion:Sg},{target:\"mathfield\",audioFeedback:\"keypress\",changeSelection:!0});function yi(t){if(!t)return;if(ee(t)&&t.length>0){let i=t[0];return i=i.replace(/-\\w/g,n=>n[1].toUpperCase()),i===\"performWithFeedback\"&&t.length===2?[i,yi(t[1])]:[i,...t.slice(1)]}if(typeof t!=\"string\")return;let e=t.trim().match(/^([a-zA-Z0-9-]+)\\((.*)\\)$/);if(e){let i=e[1].replace(/-\\w/g,o=>o[1].toUpperCase()),n=e[2].split(\",\").map(o=>o.trim());return[i,...n.map(o=>{if(/\"[^\"]*\"/.test(o)||/'[^']*'/.test(o))return o.slice(1,-1);if(/^true$/.test(o))return!0;if(/^false$/.test(o))return!1;if(/^[-]?\\d+$/.test(o))return parseInt(o,10);if(/^\\{.*\\}$/.test(o))try{return JSON.parse(o)}catch(a){return console.error(\"Invalid argument:\",o),o}return yi(o)})]}return t.replace(/-\\w/g,i=>i[1].toUpperCase())}var co=\"mathlive#virtual-keyboard-message\";function uo(t){var r;return t.type!==\"message\"?!1:((r=t.data)==null?void 0:r.type)===co}var lo=class t{constructor(){this.targetOrigin=window.origin;this.originValidator=\"none\";this.targetWindow=window.top;this._boundingRect=new DOMRect(0,0,0,0);this._isShifted=!1;window.addEventListener(\"message\",this),this.sendMessage(\"proxy-created\"),this.listeners={}}static get singleton(){return this._singleton||(this._singleton=new t),this._singleton}getKeycap(e){}setKeycap(e,r){this.sendMessage(\"update-setting\",{setKeycap:{keycap:e,value:r}})}set alphabeticLayout(e){this.sendMessage(\"update-setting\",{alphabeticLayout:e})}set layouts(e){this.sendMessage(\"update-setting\",{layouts:e})}get normalizedLayouts(){return[]}set editToolbar(e){this.sendMessage(\"update-setting\",{editToolbar:e})}set container(e){throw new Error(\"Container inside an iframe cannot be changed\")}show(e){this.dispatchEvent(new CustomEvent(\"before-virtual-keyboard-toggle\",{detail:{visible:!0},bubbles:!0,cancelable:!0,composed:!0}))&&(this.sendMessage(\"show\",e),this.dispatchEvent(new Event(\"virtual-keyboard-toggle\")))}hide(e){this.dispatchEvent(new CustomEvent(\"before-virtual-keyboard-toggle\",{detail:{visible:!1},bubbles:!0,cancelable:!0,composed:!0}))&&(this.sendMessage(\"hide\",e),this.dispatchEvent(new Event(\"virtual-keyboard-toggle\")))}get isShifted(){return this._isShifted}get visible(){return this._boundingRect.height>0}set visible(e){e?this.show():this.hide()}get boundingRect(){return this._boundingRect}executeCommand(e){return this.sendMessage(\"execute-command\",{command:e}),!0}updateToolbar(e){this.sendMessage(\"update-toolbar\",e)}update(e){this.sendMessage(\"update-setting\",e)}connect(){this.sendMessage(\"connect\")}disconnect(){this.sendMessage(\"disconnect\")}addEventListener(e,r,i){this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].has(r)||this.listeners[e].add(r)}dispatchEvent(e){return!this.listeners[e.type]||this.listeners[e.type].size===0?!0:(this.listeners[e.type].forEach(r=>{typeof r==\"function\"?r(e):r==null||r.handleEvent(e)}),!e.defaultPrevented)}removeEventListener(e,r,i){this.listeners[e]&&this.listeners[e].delete(r)}handleEvent(e){if(uo(e)){if(!Qi(e.origin,this.originValidator))throw new DOMException(`Message from unknown origin (${e.origin}) cannot be handled`,\"SecurityError\");this.handleMessage(e.data)}}handleMessage(e){let{action:r}=e;if(r===\"execute-command\"){let{command:i}=e;mr(i)===\"virtual-keyboard\"&&this.executeCommand(i);return}if(r===\"synchronize-proxy\"){this._boundingRect=e.boundingRect,this._isShifted=e.isShifted;return}if(r===\"geometry-changed\"){this._boundingRect=e.boundingRect,this.dispatchEvent(new Event(\"geometrychange\"));return}}sendMessage(e,r={}){if(!this.targetWindow)throw new DOMException(\"A frame does not have access to the top window and can't communicate with the keyboard.\",\"SecurityError\");this.targetWindow.postMessage(p({type:co,action:e},r),this.targetOrigin)}};var bc={numeric:{label:\"123\",labelClass:\"MLK__tex-math\",tooltip:\"keyboard.tooltip.numeric\",rows:[[{latex:\"x\",shift:\"y\",variants:[\"y\",\"z\",\"t\",\"r\",\"x^2\",\"x^n\",\"x^{#?}\",\"x_n\",\"x_i\",\"x_{#?}\",{latex:\"f(#?)\",class:\"small\"},{latex:\"g(#?)\",class:\"small\"}]},{latex:\"n\",shift:\"a\",variants:[\"i\",\"j\",\"p\",\"k\",\"a\",\"u\"]},\"[separator-5]\",\"[7]\",\"[8]\",\"[9]\",\"[/]\",\"[separator-5]\",{latex:\"\\\\exponentialE\",shift:\"\\\\ln\",variants:[\"\\\\exp\",\"\\\\times 10^{#?}\",\"\\\\ln\",\"\\\\log_{10}\",\"\\\\log\",\"\\\\lg\",\"\\\\operatorname{lb}\"]},{latex:\"\\\\imaginaryI\",variants:[\"\\\\Re\",\"\\\\Im\",\"\\\\imaginaryJ\",\"\\\\Vert #0 \\\\Vert\"]},{latex:\"\\\\pi\",shift:\"\\\\sin\",variants:[\"\\\\prod\",{latex:\"\\\\theta\",aside:\"theta\"},{latex:\"\\\\rho\",aside:\"rho\"},{latex:\"\\\\tau\",aside:\"tau\"},\"\\\\sin\",\"\\\\cos\",\"\\\\tan\"]}],[{label:\"<\",latex:\"<\",class:\"hide-shift\",shift:{latex:\"\\\\le\",label:\"\\u2264\"}},{label:\">\",latex:\">\",class:\"hide-shift\",shift:{latex:\"\\\\ge\",label:\"\\u2265\"}},\"[separator-5]\",\"[4]\",\"[5]\",\"[6]\",\"[*]\",\"[separator-5]\",{class:\"hide-shift\",latex:\"#@^2}\",shift:\"#@^{\\\\prime}}\"},{latex:\"#@^{#0}}\",class:\"hide-shift\",shift:\"#@_{#?}\"},{class:\"hide-shift\",latex:\"\\\\sqrt{#0}\",shift:{latex:\"\\\\sqrt[#0]{#?}}\"}}],[\"[(]\",\"[)]\",\"[separator-5]\",\"[1]\",\"[2]\",\"[3]\",\"[-]\",\"[separator-5]\",{latex:\"\\\\int^{\\\\infty}_{0}\\\\!#?\\\\,\\\\mathrm{d}x\",class:\"small hide-shift\",shift:\"\\\\int\",variants:[{latex:\"\\\\int_{#?}^{#?}\",class:\"small\"},{latex:\"\\\\int\",class:\"small\"},{latex:\"\\\\iint\",class:\"small\"},{latex:\"\\\\iiint\",class:\"small\"},{latex:\"\\\\oint\",class:\"small\"},\"\\\\mathrm{d}x\",{latex:\"\\\\dfrac{\\\\mathrm{d}}{\\\\mathrm{d} x}\",class:\"small\"},{latex:\"\\\\frac{\\\\partial}{\\\\partial x}\",class:\"small\"},\"\\\\partial\"]},{class:\"hide-shift\",latex:\"\\\\forall\",shift:\"\\\\exists\"},{label:\"[backspace]\",width:1}],[{label:\"[shift]\",width:2},\"[separator-5]\",\"[0]\",\"[.]\",\"[=]\",\"[+]\",\"[separator-5]\",\"[left]\",\"[right]\",{label:\"[action]\",width:1}]]},greek:{label:\"&alpha;&beta;&gamma;\",labelClass:\"MLK__tex-math\",tooltip:\"keyboard.tooltip.greek\",rows:[[{label:\"<i>&#x03c6;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\varphi\",aside:\"phi var.\",shift:\"\\\\Phi\"},{label:\"<i>&#x03c2;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\varsigma\",aside:\"sigma var.\",shift:\"\\\\Sigma\"},{label:\"<i>&#x03f5;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\epsilon\",aside:\"epsilon\",shift:'\\\\char\"0190'},{label:\"<i>&rho;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\rho\",aside:\"rho\",shift:'\\\\char\"3A1'},{label:\"<i>&tau;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\tau\",aside:\"tau\",shift:'\\\\char\"3A4'},{label:\"<i>&upsilon;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\upsilon\",aside:\"upsilon\",shift:\"\\\\Upsilon\"},{label:\"<i>&theta;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\theta\",aside:\"theta\",shift:\"\\\\Theta\"},{label:\"<i>&iota;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\iota\",aside:\"iota\",shift:'\\\\char\"399'},{label:\"<i>&omicron;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\omicron\",aside:\"omicron\",shift:'\\\\char\"39F'},{label:\"<i>&pi;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\pi\",aside:\"pi\",shift:\"\\\\Pi\"}],[\"[separator-5]\",{label:\"<i>&alpha;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\alpha\",aside:\"alpha\",shift:'\\\\char\"391'},{label:\"<i>&sigma;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\sigma\",aside:\"sigma\",shift:\"\\\\Sigma\"},{label:\"<i>&delta;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\delta\",aside:\"delta\",shift:\"\\\\Delta\"},{latex:\"\\\\phi\",class:\"MLK__tex hide-shift\",insert:\"\\\\phi\",aside:\"phi\",shift:\"\\\\Phi\"},{label:\"<i>&gamma;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\gamma\",aside:\"gamma\",shift:\"\\\\Gamma\"},{label:\"<i>&eta;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\eta\",aside:\"eta\",shift:'\\\\char\"397'},{label:\"<i>&xi;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\xi\",aside:\"xi\",shift:\"\\\\Xi\"},{label:\"<i>&kappa;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\kappa\",aside:\"kappa\",shift:\"\\\\Kappa\"},{label:\"<i>&lambda;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\lambda\",aside:\"lambda\",shift:\"\\\\Lambda\"},\"[separator-5]\"],[\"[shift]\",{label:\"<i>&zeta;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\zeta\",aside:\"zeta\",shift:'\\\\char\"396'},{label:\"<i>&chi;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\chi\",aside:\"chi\",shift:'\\\\char\"3A7'},{label:\"<i>&psi;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\psi\",aside:\"psi\",shift:\"\\\\Psi\"},{label:\"<i>&omega;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\omega\",aside:\"omega\",shift:\"\\\\Omega\"},{label:\"<i>&beta;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\beta\",aside:\"beta\",shift:'\\\\char\"392'},{label:\"<i>&nu;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\nu\",aside:\"nu\",shift:'\\\\char\"39D'},{label:\"<i>&mu;</i>\",class:\"MLK__tex hide-shift\",insert:\"\\\\mu\",aside:\"mu\",shift:'\\\\char\"39C'},\"[backspace]\"],[\"[separator]\",{label:\"<i>&#x03b5;</i>\",class:\"MLK__tex\",insert:\"\\\\varepsilon\",aside:\"epsilon var.\"},{label:\"<i>&#x03d1;</i>\",class:\"MLK__tex\",insert:\"\\\\vartheta\",aside:\"theta var.\"},{label:\"<i>&#x3f0;</i>\",class:\"MLK__tex\",insert:\"\\\\varkappa\",aside:\"kappa var.\"},{label:\"<i>&#x03d6;</i>\",class:\"MLK__tex\",insert:\"\\\\varpi\",aside:\"pi var.\"},{label:\"<i>&#x03f1;</i>\",class:\"MLK__tex\",insert:\"\\\\varrho\",aside:\"rho var.\"},\"[left]\",\"[right]\",\"[action]\"]]},symbols:{label:\"&infin;\\u2260\\u2208\",labelClass:\"MLK__tex\",tooltip:\"keyboard.tooltip.symbols\",rows:[[{latex:\"\\\\sin\",shift:\"\\\\sin^{-1}\",variants:[{class:\"small\",latex:\"\\\\sinh\"},{class:\"small\",latex:\"\\\\sin^{-1}\"},{class:\"small\",latex:\"\\\\operatorname{arsinh}\"}]},\"\\\\ln\",{latex:\"\\\\mathrm{abs}\",insert:\"\\\\mathrm{abs}\\\\left(#0\\\\right)\"},{latex:\"\\\\rightarrow\",shift:\"\\\\Rightarrow\",variants:[{latex:\"\\\\implies\",aside:\"implies\"},{latex:\"\\\\to\",aside:\"to\"},\"\\\\dashv\",{latex:\"\\\\roundimplies\",aside:\"round implies\"}]},{latex:\"\\\\exists\",variants:[\"\\\\nexists\"],shift:\"\\\\nexists\"},{latex:\"\\\\in\",shift:\"\\\\notin\",variants:[\"\\\\notin\",\"\\\\owns\"]},\"\\\\cup\",{latex:\"\\\\overrightarrow{#@}\",shift:\"\\\\overleftarrow{#@}\",variants:[\"\\\\overleftarrow{#@}\",\"\\\\bar{#@}\",\"\\\\vec{#@}\",\"\\\\hat{#@}\",\"\\\\check{#@}\",\"\\\\dot{#@}\",\"\\\\ddot{#@}\",\"\\\\mathring{#@}\",\"\\\\breve{#@}\",\"\\\\acute{#@}\",\"\\\\tilde{#@}\",\"\\\\grave{#@}\"]},{class:\"small hide-shift\",latex:\"\\\\lim_{#?}\",shift:\"\\\\lim_{x\\\\to\\\\infty}\",variants:[{class:\"small\",latex:\"\\\\liminf_{#?}\"},{class:\"small\",latex:\"\\\\limsup_{#?}\"}]},\"\\\\exponentialE\"],[{latex:\"\\\\cos\",shift:\"\\\\cos^{-1}\",variants:[{class:\"small\",latex:\"\\\\cosh\"},{class:\"small\",latex:\"\\\\cos^{-1}\"},{class:\"small\",latex:\"\\\\operatorname{arcosh}\"}]},{latex:\"\\\\log\",shift:\"\\\\log_{10}\",variants:[\"\\\\log_{#0}\",\"\\\\log_{10}\"]},\"\\\\left\\\\vert#0\\\\right\\\\vert\",{latex:\"\\\\larr\",shift:\"\\\\lArr\",variants:[{latex:\"\\\\impliedby\",aside:\"implied by\"},{latex:\"\\\\gets\",aside:\"gets\"},\"\\\\lArr\",\"\\\\vdash\",{latex:\"\\\\models\",aside:\"models\"}]},{latex:\"\\\\forall\",shift:\"\\\\lnot\",variants:[{latex:\"\\\\land\",aside:\"and\"},{latex:\"\\\\lor\",aside:\"or\"},{latex:\"\\\\oplus\",aside:\"xor\"},{latex:\"\\\\lnot\",aside:\"not\"},{latex:\"\\\\downarrow\",aside:\"nor\"},{latex:\"\\\\uparrow\",aside:\"nand\"},{latex:\"\\\\curlywedge\",aside:\"nor\"},{latex:\"\\\\bar\\\\curlywedge\",aside:\"nand\"}]},{latex:\"\\\\ni\",shift:\"\\\\not\\\\owns\"},\"\\\\cap\",{latex:\"\\\\overline{#@}\",shift:\"\\\\underline{#@}\",variants:[\"\\\\overbrace{#@}\",\"\\\\overlinesegment{#@}\",\"\\\\overleftrightarrow{#@}\",\"\\\\overrightarrow{#@}\",\"\\\\overleftarrow{#@}\",\"\\\\overgroup{#@}\",\"\\\\underbrace{#@}\",\"\\\\underlinesegment{#@}\",\"\\\\underleftrightarrow{#@}\",\"\\\\underrightarrow{#@}\",\"\\\\underleftarrow{#@}\",\"\\\\undergroup{#@}\"]},{class:\"hide-shift small\",latex:\"\\\\int\",shift:\"\\\\iint\",variants:[{latex:\"\\\\int_{#?}^{#?}\",class:\"small\"},{latex:\"\\\\int\",class:\"small\"},{latex:\"\\\\smallint\",class:\"small\"},{latex:\"\\\\iint\",class:\"small\"},{latex:\"\\\\iiint\",class:\"small\"},{latex:\"\\\\oint\",class:\"small\"},\"\\\\intop\",\"\\\\iiint\",\"\\\\oiint\",\"\\\\oiiint\",\"\\\\intclockwise\",\"\\\\varointclockwise\",\"\\\\ointctrclockwise\",\"\\\\intctrclockwise\"]},{latex:\"\\\\pi\",shift:\"\\\\tau\",variants:[\"\\\\tau\"]}],[{latex:\"\\\\tan\",shift:\"\\\\tan^{-1}\",variants:[{class:\"small\",latex:\"\\\\tanh\"},{class:\"small\",latex:\"\\\\tan^{-1}\"},{class:\"small\",latex:\"\\\\operatorname{artanh}\"},{class:\"small\",latex:\"\\\\arctan\"},{class:\"small\",latex:\"\\\\operatorname{arctg}\"},{class:\"small\",latex:\"\\\\operatorname{tg}\"}]},{latex:\"\\\\exp\",insert:\"\\\\exp\\\\left(#0\\\\right)\",variants:[\"\\\\exponentialE^{#0}\"]},\"\\\\left\\\\Vert#0\\\\right\\\\Vert\",{latex:\"\\\\lrArr\",shift:\"\\\\leftrightarrow\",variants:[{latex:\"\\\\iff\",aside:\"if and only if\"},\"\\\\leftrightarrow\",\"\\\\leftrightarrows\",\"\\\\Leftrightarrow\",{latex:\"^\\\\biconditional\",aside:\"biconditional\"}]},{latex:\"\\\\vert\",shift:\"!\"},{latex:\"#@^{\\\\complement}\",aside:\"complement\",variants:[{latex:\"\\\\setminus\",aside:\"set minus\"},{latex:\"\\\\smallsetminus\",aside:\"small set minus\"}]},{latex:\"\\\\subset\",shift:\"\\\\subseteq\",variants:[\"\\\\subset\",\"\\\\subseteq\",\"\\\\subsetneq\",\"\\\\varsubsetneq\",\"\\\\subsetneqq\",\"\\\\nsubset\",\"\\\\nsubseteq\",\"\\\\supset\",\"\\\\supseteq\",\"\\\\supsetneq\",\"\\\\supsetneqq\",\"\\\\nsupset\",\"\\\\nsupseteq\"]},{latex:\"#@^{\\\\prime}\",shift:\"#@^{\\\\doubleprime}\",variants:[\"#@^{\\\\doubleprime}\",\"#@\\\\degree\"]},{latex:\"\\\\mathrm{d}\",shift:\"\\\\partial\",variants:[\"\\\\mathrm{d}x\",{latex:\"\\\\dfrac{\\\\mathrm{d}}{\\\\mathrm{d} x}\",class:\"small\"},{latex:\"\\\\frac{\\\\partial}{\\\\partial x}\",class:\"small\"},\"\\\\partial\"]},{latex:\"\\\\infty\",variants:[\"\\\\aleph_0\",\"\\\\aleph_1\",\"\\\\omega\",\"\\\\mathfrak{m}\"]}],[{label:\"[shift]\",width:2},{class:\"box\",latex:\",\",shift:\";\",variants:[\";\",\"?\"]},{class:\"box\",latex:\"\\\\colon\",shift:\"\\\\Colon\",variants:[{latex:\"\\\\Colon\",aside:\"such that\",class:\"box\"},{latex:\":\",aside:\"ratio\",class:\"box\"},{latex:\"\\\\vdots\",aside:\"\",class:\"box\"},{latex:\"\\\\ddots\",aside:\"\",class:\"box\"},{latex:\"\\\\ldotp\",aside:\"low dot\",class:\"box\"},{latex:\"\\\\cdotp\",aside:\"center dot\",class:\"box\"},{latex:\"\\\\ldots\",aside:\"low ellipsis\",class:\"box\"},{latex:\"\\\\cdots\",aside:\"center ellipsis\",class:\"box\"},{latex:\"\\\\therefore\",aside:\"therefore\",class:\"box\"},{latex:\"\\\\because\",aside:\"because\",class:\"box\"}]},{class:\"box\",latex:\"\\\\cdot\",aside:\"centered dot\",shift:\"\\\\ast\",variants:[\"\\\\circ\",\"\\\\bigcirc\",\"\\\\bullet\",\"\\\\odot\",\"\\\\oslash\",\"\\\\circledcirc\",\"\\\\ast\",\"\\\\star\",\"\\\\times\",\"\\\\doteq\",\"\\\\doteqdot\"]},\"[separator]\",\"[left]\",\"[right]\",{label:\"[backspace]\",width:1,class:\"action hide-shift\"},{label:\"[action]\",width:1}]]},compact:{label:\"compact\",rows:[[\"[+]\",\"[-]\",\"[*]\",\"[/]\",\"[=]\",\"[.]\",\"[(]\",\"[)]\",\"\\\\sqrt{#0}\",\"#@^{#?}\"],[\"[1]\",\"[2]\",\"[3]\",\"[4]\",\"[5]\",\"[6]\",\"[7]\",\"[8]\",\"[9]\",\"[0]\"],[\"[hr]\"],[\"[undo]\",\"[redo]\",\"[separator]\",\"[separator]\",\"[separator]\",\"[left]\",\"[right]\",{label:\"[backspace]\",class:\"action hide-shift\"},\"[hide-keyboard]\"]]},minimalist:{label:\"minimalist\",layers:[{style:`\n          div.minimalist-backdrop {\n            display: flex;\n            justify-content: center;\n          }          \n          div.minimalist-container {\n            --keycap-height: 40px;\n            --keycap-max-width: 53px;\n            --keycap-small-font-size: 12px;\n            background: var(--keyboard-background);\n            padding: 20px 20px 0px 20px;\n            border-top-left-radius: 8px;\n            border-top-right-radius: 8px;\n            border: 1px solid var(--keyboard-border);\n            box-shadow: 0 0 32px rgb(0 0 0 / 30%);\n          }        \n        `,backdrop:\"minimalist-backdrop\",container:\"minimalist-container\",rows:[[\"+\",\"-\",\"\\\\times\",{latex:\"\\\\frac{#@}{#0}\",class:\"small\"},\"=\",\"[.]\",\"(\",\")\",{latex:\"\\\\sqrt{#0}\",class:\"small\"},{latex:\"#@^{#?}\",class:\"small\"}],[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"0\"],[\"[hr]\"],[\"[undo]\",\"[redo]\",\"[separator]\",\"[separator]\",\"[separator]\",\"[left]\",\"[right]\",{label:\"[backspace]\",class:\"action hide-shift\"},\"[hide-keyboard]\"]]}]},\"numeric-only\":{label:\"123\",labelClass:\"MLK__tex-math\",tooltip:\"keyboard.tooltip.numeric\",id:\"numeric-only\",rows:[[\"7\",\"8\",\"9\",\"[separator]\",{label:\"[backspace]\",width:2}],[\"4\",\"5\",\"6\",\"[separator]\",\"[separator]\",\"[separator]\"],[\"1\",\"2\",\"3\",\"[separator]\",\"[separator]\",\"[separator]\"],[\"0\",{label:\"[.]\",variants:[]},\"-\",\"[separator]\",\"[left]\",\"[right]\"]]}};var ss={0:[\"\\\\varnothing\",\"\\\\infty\"],1:[\"\\\\frac{1}{#@}\",\"#@^{-1}\",\"\\\\times 10^{#?}\",\"\\\\phi\",\"\\\\imaginaryI\"],2:[\"\\\\frac{1}{2}\",\"#@^2\",\"\\\\sqrt2\",\"\\\\exponentialE\"],3:[\"\\\\frac{1}{3}\",\"#@^3\",\"\\\\sqrt3\",\"\\\\pi\"],4:[\"\\\\frac{1}{4}\",\"#@^4\"],5:[\"\\\\frac{1}{5}\",\"#@^5\",\"\\\\sqrt5\"],6:[\"\\\\frac{1}{6}\",\"#@^6\"],7:[\"\\\\frac{1}{7}\",\"#@^7\"],8:[\"\\\\frac{1}{8}\",\"#@^8\"],9:[\"\\\\frac{1}{9}\",\"#@^9\"],\".\":[\".\",\",\",\";\",\"\\\\colon\"],\",\":[\"{,}\",\".\",\";\",\"\\\\colon\"],a:[{latex:\"\\\\aleph\",aside:\"aleph\"},{latex:\"\\\\forall\",aside:\"for all\"},\"\\xE5\",\"\\xE0\",\"\\xE1\",\"\\xE2\",\"\\xE4\",\"\\xE6\"],A:[{latex:\"\\\\aleph\",aside:\"aleph\"},{latex:\"\\\\forall\",aside:\"for all\"},\"\\xC5\",\"\\xC0\",\"\\xC1\",\"\\xC2\",\"\\xC4\",\"\\xC6\"],b:[{latex:\"\\\\beth\",aside:\"beth\"}],c:[{latex:\"\\\\C\",aside:\"set of complex numbers\"},\"\\xE7\"],d:[{latex:\"\\\\daleth\",aside:\"daleth\"}],e:[{latex:\"\\\\exponentialE\",aside:\"exponential e\"},{latex:\"\\\\exists\",aside:\"there is\"},{latex:\"\\\\nexists\",aside:\"there isn\\u2019t\"},\"\\xE8\",\"\\xE9\",\"\\xEA\",\"\\xEB\"],E:[{latex:\"\\\\exponentialE\",aside:\"exponential e\"},{latex:\"\\\\exists\",aside:\"there is\"},{latex:\"\\\\nexists\",aside:\"there isn\\u2019t\"},\"\\xC8\",\"\\xC9\",\"\\xCA\",\"\\xCB\"],g:[{latex:\"\\\\gimel\",aside:\"gimel\"}],h:[{latex:\"\\\\hbar\",aside:\"h bar\"},{latex:\"\\\\hslash\",aside:\"h slash\"}],i:[{latex:\"\\\\imaginaryI\",aside:\"imaginary i\"},\"\\xEC\",\"\\xED\",\"\\xEE\",\"\\xEF\"],I:[{latex:\"\\\\imaginaryI\",aside:\"imaginary i\"},\"\\xCC\",\"\\xCD\",\"\\xCE\",\"\\xCF\"],j:[{latex:\"\\\\imaginaryJ\",aside:\"imaginary j\"}],l:[{latex:\"\\\\ell\",aside:\"ell\"}],n:[{latex:\"\\\\mathbb{N}\",aside:\"set of natural numbers\"},\"\\xF1\"],o:[\"\\xF8\",\"\\u0153\",\"\\xF2\",\"\\xF3\",\"\\xF4\",\"\\xF6\"],O:[\"\\xF8\",\"\\u0152\",\"\\xD2\",\"\\xD3\",\"\\xD4\",\"\\xD6\"],p:[{latex:\"\\\\mathbb{P}\",aside:\"set of primes\"}],q:[{latex:\"\\\\mathbb{Q}\",aside:\"set of rational numbers\"}],r:[{latex:\"\\\\mathbb{R}\",aside:\"set of real numbers\"}],u:[\"\\xF9\",\"\\xFA\",\"\\xFB\",\"\\xFC\"],U:[\"\\xD9\",\"\\xDA\",\"\\xDB\",\"\\xDC\"],z:[{latex:\"\\\\mathbb{Z}\",aside:\"set of integers\"}],y:[\"\\xFD\",\"\\xFF\"],Y:[\"\\u0178\"],space:[{latex:'\\\\char\"203A\\\\!\\\\char\"2039',insert:\"\\\\!\",aside:\"negative thin space<br>\\u207B\\xB3\\u29F8\\u2081\\u2088 em\"},{latex:'\\\\char\"203A\\\\,\\\\char\"2039',insert:\"\\\\,\",aside:\"thin space<br>\\xB3\\u29F8\\u2081\\u2088 em\"},{latex:'\\\\char\"203A\\\\:\\\\char\"2039',insert:\"\\\\:\",aside:\"medium space<br>\\u2074\\u29F8\\u2081\\u2088 em\"},{latex:'\\\\char\"203A\\\\;\\\\char\"2039',insert:\"\\\\;\",aside:\"thick space<br>\\u2075\\u29F8\\u2081\\u2088 em\"},{latex:'\\\\char\"203A\\\\ \\\\char\"2039',insert:\"\\\\ \",aside:\"\\u2153 em\"},{latex:'\\\\char\"203A\\\\enspace\\\\char\"2039',insert:\"\\\\enspace\",aside:\"\\xBD em\"},{latex:'\\\\char\"203A\\\\quad\\\\char\"2039',insert:\"\\\\quad\",aside:\"1 em\"},{latex:'\\\\char\"203A\\\\qquad\\\\char\"2039',insert:\"\\\\qquad\",aside:\"2 em\"}]},bn;function ls(t,e){var d,h,f,x,v;let r=ze.singleton;if(!r)return;let i=xi(t),n=\"\";if(window.mathVirtualKeyboard.isShifted){let b=(d=r.getKeycap(i==null?void 0:i.id))==null?void 0:d.shift;typeof b==\"object\"&&\"variants\"in b&&(n=(h=b.variants)!=null?h:\"\")}else n=(x=(f=r.getKeycap(i==null?void 0:i.id))==null?void 0:f.variants)!=null?x:\"\";if(typeof n==\"string\"&&!cs(n)||Array.isArray(n)&&n.length===0){e==null||e();return}let o={},a=\"\";for(let b of Lg(n)){let _=mo(b),S=Date.now().toString(36).slice(-2)+Math.floor(Math.random()*1e5).toString(36);o[S]=_;let[A,E]=yn(_);a+=`<div id=${S} class=\"item ${E}\">${A}</div>`}let s=document.createElement(\"div\");s.setAttribute(\"aria-hidden\",\"true\"),s.className=\"MLK__variant-panel\",s.style.height=\"auto\";let l=Object.keys(o).length,c=5;l===1?c=1:l===2||l===4?c=2:l===3||l===5||l===6?c=3:l>=7&&l<14&&(c=4),s.style.width=`calc(var(--variant-keycap-length) * ${c} + 12px)`,s.innerHTML=gn.createHTML(a),Te.open({root:(v=r==null?void 0:r.container)==null?void 0:v.querySelector(\".ML__keyboard\"),child:s}),bn=new AbortController;let{signal:u}=bn,m=t==null?void 0:t.getBoundingClientRect();if(m){m.top-s.clientHeight<0&&(s.style.width=\"auto\",l<=6?s.style.height=\"56px\":l<=12?s.style.height=\"108px\":l<=18?s.style.height=\"205px\":s.classList.add(\"compact\"));let b=Math.max(0,Math.min(window.innerWidth-s.offsetWidth,(m.left+m.right-s.offsetWidth)/2)),_=m.top-s.clientHeight+5;s.style.left=`${b}px`,s.style.top=`${_}px`,s.classList.add(\"is-visible\"),requestAnimationFrame(()=>{var S;s.addEventListener(\"pointerup\",A=>{let E=xi(A.target);!(E!=null&&E.id)||!o[E.id]||(us(o[E.id]),Vr(),e==null||e(),A.preventDefault())},{capture:!0,passive:!1,signal:u}),s.addEventListener(\"pointerenter\",A=>{let E=xi(A.target);!(E!=null&&E.id)||!o[E.id]||E.classList.add(\"is-active\")},{capture:!0,signal:u}),s.addEventListener(\"pointerleave\",A=>{let E=xi(A.target);A.target&&\"tagName\"in A.target&&typeof A.target.tagName==\"string\"&&A.target.tagName.toUpperCase()===\"ASIDE\"||!(E!=null&&E.id)||!o[E.id]||E.classList.remove(\"is-active\")},{capture:!0,signal:u}),(S=r.getKeycap(i==null?void 0:i.id))!=null&&S.stickyVariantPanel?window.addEventListener(\"pointerdown\",A=>{if(!(A.target instanceof Node))return;let E=s.contains(A.target);A.target===s||E||(Vr(),e==null||e())},{signal:u}):(window.addEventListener(\"pointercancel\",()=>{Vr(),e==null||e()},{signal:u}),window.addEventListener(\"pointerup\",()=>{Vr(),e==null||e()},{signal:u}))})}}function Vr(){bn==null||bn.abort(),bn=null,Te.state===\"open\"&&Te.close()}function kg(t){if(t===\"foreground-color\"){let e=[];for(let r of Object.keys(Yt))e.push({class:\"swatch-button\",label:'<span style=\"border: 3px solid '+Yt[r]+'\"></span>',command:[\"applyStyle\",{color:r}]});return e}if(t===\"background-color\"){let e=[];for(let r of Object.keys(Zt))e.push({class:\"swatch-button\",label:'<span style=\"background:'+Zt[r]+'\"></span>',command:[\"applyStyle\",{backgroundColor:r}]});return e}}function cs(t){return ss[t]!==void 0}function Lg(t){var e;return typeof t!=\"string\"?t:(ss[t]||(ss[t]=(e=kg(t))!=null?e:[]),ss[t])}function Ag(t){return typeof t==\"string\"?t:Object.entries(t).map(([e,r])=>`${e}:${r} !important`).join(\";\")}function Cg(t){return Object.keys(t).map(e=>`${e} {${Ag(t[e])}}`).join(\"\")}function po(t){if(!t)return\"\";let e=new B,r=new y({mode:\"math\",type:\"root\",body:ge(t,{context:e,args:n=>n===\"@\"?\"{\\\\class{ML__box-placeholder}{\\\\blacksquare}}\":\"\\\\placeholder{}\"})}),i=Tr(Vt(new w(r.render(e),{classes:\"ML__base\"}),e));return Dr(i,{classes:\"ML__latex\"}).toMarkup()}function ds(t){return t.replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")}function Eg(t){return t.replace(/<\\/?[^>]+(>|$)/g,\" \")}function Tg(t){var i,n,o,a;let e=(a=(o=(n=(i=t.tooltip)!=null?i:typeof t.label==\"string\"?Eg(t.label):void 0)!=null?n:t.insert)!=null?o:t.latex)!=null?a:t.key;return e&&e.replace(/\\s+/g,\" \").trim()||null}function Dg(t){if(typeof t==\"undefined\"||t===null)return null;try{return JSON.stringify(t)}catch(e){return null}}function Og(t){var r,i;let e=(i=(r=t.insert)!=null?r:t.latex)!=null?i:t.key;return e!=null?e:null}function ho(t){var r;if(Array.isArray(t))return t.map(i=>ho(i)).flat();let e=typeof t==\"string\"?{markup:t}:t;return\"rows\"in e&&Array.isArray(e.rows)&&(e.rows=e.rows.map(i=>i.map(n=>mo(n)))),(r=e.id)!=null||(e.id=\"ML__layer_\"+Date.now().toString(36).slice(-2)+Math.floor(Math.random()*1e5).toString(36)),[e]}function Bg(){var o,a;let e=window.mathVirtualKeyboard.alphabeticLayout;if(e===\"auto\"){let s=gr();s&&(e=s.virtualLayout),(!e||e===\"auto\")&&(e=(o={fr:\"azerty\",be:\"azerty\",al:\"qwertz\",ba:\"qwertz\",cz:\"qwertz\",de:\"qwertz\",hu:\"qwertz\",sk:\"qwertz\",ch:\"qwertz\"}[F.locale.slice(0,2)])!=null?o:\"qwerty\")}let r={qwerty:[\"qwertyuiop\",\" asdfghjkl \",\"^zxcvbnm~\"],azerty:[\"azertyuiop\",\"qsdfghjklm\",\"^ wxcvbn ~\"],qwertz:[\"qwertzuiop\",\" asdfghjkl \",\"^yxcvbnm~\"],dvorak:[\"^  pyfgcrl \",\"aoeuidhtns\",\"qjkxbmwvz~\"],colemak:[\" qwfpgjluy \",\"arstdhneio\",\"^zxcvbkm~\"]},i=(a=r[e])!=null?a:r.qwerty,n=e===\"azerty\"?[[{label:\"1\",variants:\"1\"},{label:\"2\",shift:{latex:\"\\xE9\"},variants:\"2\"},{label:\"3\",shift:{latex:\"\\xF9\"},variants:\"3\"},{label:\"4\",variants:\"4\"},{label:\"5\",shift:{label:\"(\",latex:\"(\"},variants:\"5\"},{label:\"6\",shift:{label:\")\",latex:\")\"},variants:\"6\"},{label:\"7\",shift:{latex:\"\\xE8\"},variants:\"7\"},{label:\"8\",shift:{latex:\"\\xEA\"},variants:\"8\"},{label:\"9\",shift:{latex:\"\\xE7\"},variants:\"9\"},{label:\"0\",shift:{latex:\"\\xE0\"},variants:\"0\"}]]:[[{label:\"1\",variants:\"1\"},{label:\"2\",variants:\"2\"},{label:\"3\",variants:\"3\"},{label:\"4\",variants:\"4\"},{label:\"5\",shift:{latex:\"\\\\frac{#@}{#?}\"},variants:\"5\"},{label:\"6\",shift:{latex:\"#@^#?\"},variants:\"6\"},{label:\"7\",variants:\"7\"},{label:\"8\",shift:{latex:\"\\\\times\"},variants:\"8\"},{label:\"9\",shift:{label:\"(\",latex:\"(\"},variants:\"9\"},{label:\"0\",shift:{label:\")\",latex:\")\"},variants:\"0\"}]];for(let s of i){let l=[];for(let c of s)/[a-z]/.test(c)?l.push({label:c,class:\"hide-shift\",shift:{label:c.toUpperCase(),variants:cs(c.toUpperCase())?c.toUpperCase():void 0},variants:cs(c)?c:void 0}):c===\"~\"?e!==\"dvorak\"?l.push(\"[backspace]\"):l.push({label:\"[backspace]\",width:1}):c===\"^\"?l.push(\"[shift]\"):c===\" \"&&l.push(\"[separator-5]\");n.push(l)}return n.push([\"[-]\",\"[+]\",\"[=]\",{label:\" \",width:1.5},{label:\",\",shift:\";\",variants:\".\",class:\"hide-shift\"},\"[.]\",\"[left]\",\"[right]\",{label:\"[action]\",width:1.5}]),{label:\"abc\",labelClass:\"MLK__tex-math\",tooltip:\"keyboard.tooltip.alphabetic\",layers:ho({rows:n})}}function yc(t){if(t===\"alphabetic\")return Bg();if(typeof t==\"string\")return bc[t],`${t}`,yc(bc[t]);let e;if(\"rows\"in t&&Array.isArray(t.rows)){\"layers\"in t||\"markup\"in t;let n=t,{rows:a}=n,s=Ai(n,[\"rows\"]);e=g(p({},s),{layers:ho({rows:t.rows})})}else if(\"markup\"in t&&typeof t.markup==\"string\"){let o=t,{markup:a}=o,s=Ai(o,[\"markup\"]);e=g(p({},s),{layers:ho(t.markup)})}else e=p({},t),\"layers\"in t?e.layers=ho(t.layers):console.error('MathLive 0.108.2: provide either a \"rows\", \"markup\" or \"layers\" property');let r=!1,i=!1;for(let a of e.layers)if(a.rows)for(let s of a.rows.flat()){xn(s)&&(r=!0);let l=s.command;typeof l==\"string\"&&[\"undo\",\"redo\",\"cut\",\"copy\",\"paste\"].includes(l)&&(i=!0)}return(!(\"displayShiftedKeycaps\"in t)||t.displayShiftedKeycaps===void 0)&&(e.displayShiftedKeycaps=r),(!(\"displayEditToolbar\"in t)||t.displayEditToolbar===void 0)&&(e.displayEditToolbar=!i),e}function Kg(t,e){var i,n;let r='<div class=\"left\">';if(t.normalizedLayouts.length>1)for(let[o,a]of t.normalizedLayouts.entries()){let s=a,l=[o===e?\"selected\":\"layer-switch\"];s.tooltip&&l.push(\"MLK__tooltip\"),s.labelClass&&l.push(...s.labelClass.split(\" \")),r+=`<div class=\"${l.join(\" \")}\"`,s.tooltip&&(r+=\" data-tooltip='\"+((i=I(s.tooltip))!=null?i:s.tooltip)+\"' \"),o!==e&&(r+=`data-layer=\"${s.layers[0].id}\"`),r+=`>${(n=s.label)!=null?n:\"untitled\"}</div>`}return r+=\"</div>\",r}function Cp(t,e){let r=\"\";if(t.editToolbar===\"none\")return\"\";let n=[];e.selectionIsCollapsed?n.push(\"undo\",\"redo\",\"pasteFromClipboard\"):n.push(\"cutToClipboard\",\"copyToClipboard\",\"pasteFromClipboard\");let o={undo:`<div class='action ${e.canUndo===!1?\"disabled\":\"\"}'\n          data-command='\"undo\"'\n          data-tooltip='${I(\"tooltip.undo\")}'>\n          <svg><use xlink:href='#svg-undo' /></svg>\n      </div>`,redo:`<div class='action ${e.canRedo===!1?\"disabled\":\"\"}'\n          data-command='\"redo\"'\n          data-tooltip='${I(\"tooltip.redo\")}'>\n          <svg><use xlink:href='#svg-redo' /></svg>\n      </div>`,cutToClipboard:`\n        <div class='action'\n            data-command='\"cutToClipboard\"'\n            data-tooltip='${I(\"tooltip.cut to clipboard\")}'>\n            <svg><use xlink:href='#svg-cut' /></svg>\n        </div>\n    `,copyToClipboard:`\n        <div class='action'\n            data-command='\"copyToClipboard\"'\n            data-tooltip='${I(\"tooltip.copy to clipboard\")}'>\n            <svg><use xlink:href='#svg-copy' /></svg>\n        </div>\n    `,pasteFromClipboard:`\n        <div class='action'\n            data-command='\"pasteFromClipboard\"'\n            data-tooltip='${I(\"tooltip.paste from clipboard\")}'>\n            <svg><use xlink:href='#svg-paste' /></svg>\n        </div>\n    `};return r+=n.map(a=>o[a]).join(\"\"),r}function Pg(t){for(let e of t)Rg(e)}function Rg(t){let e=ze.singleton;if(!e)return;let r={};if(!t.id){if(t.hasAttribute(\"data-label\")&&(r.label=t.dataset.label),t.hasAttribute(\"data-latex\")&&(r.latex=t.dataset.latex),t.hasAttribute(\"data-key\")&&(r.key=t.dataset.key),t.hasAttribute(\"data-insert\")&&(r.insert=t.dataset.insert),t.hasAttribute(\"data-variants\")&&(r.variants=t.dataset.variants),t.hasAttribute(\"data-aside\")&&(r.aside=t.dataset.aside),t.className&&(r.class=t.className),!r.label&&!r.latex&&!r.key&&!r.insert&&(r.latex=t.innerText,r.label=t.innerHTML),t.hasAttribute(\"data-command\"))try{r.command=JSON.parse(t.dataset.command)}catch(i){console.warn(\"Invalid JSON in data-command attribute\",i)}t.id=e.registerKeycap(r)}if(!t.innerHTML){let[i,n]=yn(r);t.innerHTML=globalThis.MathfieldElement.createHTML(i)}}function Ig(){We(\"virtual-keyboard\"),We(\"core\"),dr()}function Ep(){nt(\"core\"),nt(\"virtual-keyboard\")}var zg=`<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\">\n\n<symbol id=\"svg-delete-backward\" viewBox=\"0 0 576 512\">\n  <path d=\"M432.1 208.1L385.9 256L432.1 303C442.3 312.4 442.3 327.6 432.1 336.1C423.6 346.3 408.4 346.3 399 336.1L352 289.9L304.1 336.1C295.6 346.3 280.4 346.3 271 336.1C261.7 327.6 261.7 312.4 271 303L318.1 256L271 208.1C261.7 199.6 261.7 184.4 271 175C280.4 165.7 295.6 165.7 304.1 175L352 222.1L399 175C408.4 165.7 423.6 165.7 432.1 175C442.3 184.4 442.3 199.6 432.1 208.1V208.1zM512 64C547.3 64 576 92.65 576 128V384C576 419.3 547.3 448 512 448H205.3C188.3 448 172 441.3 160 429.3L9.372 278.6C3.371 272.6 0 264.5 0 256C0 247.5 3.372 239.4 9.372 233.4L160 82.75C172 70.74 188.3 64 205.3 64L512 64zM528 128C528 119.2 520.8 112 512 112H205.3C201 112 196.9 113.7 193.9 116.7L54.63 256L193.9 395.3C196.9 398.3 201 400 205.3 400H512C520.8 400 528 392.8 528 384V128z\"/>\n</symbol>\n\n<symbol id=\"svg-shift\" viewBox=\"0 0 384 512\">\n  <path d=\"M2.438 252.3C7.391 264.2 19.06 272 32 272h80v160c0 26.51 21.49 48 48 48h64C250.5 480 272 458.5 272 432v-160H352c12.94 0 24.61-7.797 29.56-19.75c4.953-11.97 2.219-25.72-6.938-34.88l-160-176C208.4 35.13 200.2 32 192 32S175.6 35.13 169.4 41.38l-160 176C.2188 226.5-2.516 240.3 2.438 252.3zM192 86.63L313.4 224H224v208H160V224H70.63L192 86.63z\"/>\n</symbol>\n\n<symbol id=\"svg-commit\" viewBox=\"0 0 512 512\">\n  <path d=\"M135 432.1l-128-128C2.344 300.3 0 294.2 0 288s2.344-12.28 7.031-16.97l128-128c9.375-9.375 24.56-9.375 33.94 0s9.375 24.56 0 33.94L81.94 264H464v-208C464 42.75 474.8 32 488 32S512 42.75 512 56V288c0 13.25-10.75 24-24 24H81.94l87.03 87.03c9.375 9.375 9.375 24.56 0 33.94S144.4 442.3 135 432.1z\"/>\n</symbol>\n\n\n<symbol id=\"circle-plus\" viewBox=\"0 0 512 512\"><path d=\"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM232 344c0 13.3 10.7 24 24 24s24-10.7 24-24V280h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H280V168c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H168c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z\"/></symbol>\n\n<symbol id=\"svg-command\" viewBox=\"0 0 640 512\">\n  <path d=\"M34.495 36.465l211.051 211.05c4.686 4.686 4.686 12.284 0 16.971L34.495 475.535c-4.686 4.686-12.284 4.686-16.97 0l-7.071-7.07c-4.686-4.686-4.686-12.284 0-16.971L205.947 256 10.454 60.506c-4.686-4.686-4.686-12.284 0-16.971l7.071-7.07c4.686-4.687 12.284-4.687 16.97 0zM640 468v-10c0-6.627-5.373-12-12-12H300c-6.627 0-12 5.373-12 12v10c0 6.627 5.373 12 12 12h328c6.627 0 12-5.373 12-12z\"/>\n</symbol>\n\n<symbol id=\"svg-undo\" viewBox=\"0 0 512 512\">\n  <path d=\"M20 8h10c6.627 0 12 5.373 12 12v110.625C85.196 57.047 165.239 7.715 256.793 8.001 393.18 8.428 504.213 120.009 504 256.396 503.786 393.181 392.834 504 256 504c-63.926 0-122.202-24.187-166.178-63.908-5.113-4.618-5.354-12.561-.482-17.433l7.069-7.069c4.503-4.503 11.749-4.714 16.482-.454C150.782 449.238 200.935 470 256 470c117.744 0 214-95.331 214-214 0-117.744-95.331-214-214-214-82.862 0-154.737 47.077-190.289 116H180c6.627 0 12 5.373 12 12v10c0 6.627-5.373 12-12 12H20c-6.627 0-12-5.373-12-12V20c0-6.627 5.373-12 12-12z\"/>\n</symbol>\n<symbol id=\"svg-redo\" viewBox=\"0 0 512 512\">\n  <path d=\"M492 8h-10c-6.627 0-12 5.373-12 12v110.625C426.804 57.047 346.761 7.715 255.207 8.001 118.82 8.428 7.787 120.009 8 256.396 8.214 393.181 119.166 504 256 504c63.926 0 122.202-24.187 166.178-63.908 5.113-4.618 5.354-12.561.482-17.433l-7.069-7.069c-4.503-4.503-11.749-4.714-16.482-.454C361.218 449.238 311.065 470 256 470c-117.744 0-214-95.331-214-214 0-117.744 95.331-214 214-214 82.862 0 154.737 47.077 190.289 116H332c-6.627 0-12 5.373-12 12v10c0 6.627 5.373 12 12 12h160c6.627 0 12-5.373 12-12V20c0-6.627-5.373-12-12-12z\"/>\n</symbol>\n<symbol id=\"svg-arrow-left\" viewBox=\"0 0 320 512\">\n  <path d=\"M206.7 464.6l-183.1-191.1C18.22 267.1 16 261.1 16 256s2.219-11.97 6.688-16.59l183.1-191.1c9.152-9.594 24.34-9.906 33.9-.7187c9.625 9.125 9.938 24.37 .7187 33.91L73.24 256l168 175.4c9.219 9.5 8.906 24.78-.7187 33.91C231 474.5 215.8 474.2 206.7 464.6z\"/>\n</symbol>\n<symbol id=\"svg-arrow-right\" viewBox=\"0 0 320 512\">\n  <path d=\"M113.3 47.41l183.1 191.1c4.469 4.625 6.688 10.62 6.688 16.59s-2.219 11.97-6.688 16.59l-183.1 191.1c-9.152 9.594-24.34 9.906-33.9 .7187c-9.625-9.125-9.938-24.38-.7187-33.91l168-175.4L78.71 80.6c-9.219-9.5-8.906-24.78 .7187-33.91C88.99 37.5 104.2 37.82 113.3 47.41z\"/>\n</symbol>\n<symbol id=\"svg-tab\" viewBox=\"0 0 448 512\">\n  <path d=\"M32 217.1c0-8.8 7.2-16 16-16h144v-93.9c0-7.1 8.6-10.7 13.6-5.7l143.5 143.1c6.3 6.3 6.3 16.4 0 22.7L205.6 410.4c-5 5-13.6 1.5-13.6-5.7v-93.9H48c-8.8 0-16-7.2-16-16v-77.7m-32 0v77.7c0 26.5 21.5 48 48 48h112v61.9c0 35.5 43 53.5 68.2 28.3l143.6-143c18.8-18.8 18.8-49.2 0-68L228.2 78.9c-25.1-25.1-68.2-7.3-68.2 28.3v61.9H48c-26.5 0-48 21.6-48 48zM436 64h-8c-6.6 0-12 5.4-12 12v360c0 6.6 5.4 12 12 12h8c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12z\"/>\n</symbol>\n<symbol id=\"svg-paste\" viewBox=\"0 0 512 512\"><path d=\"M160 32c11.6 0 21.3 8.2 23.5 19.2C185 58.6 191.6 64 199.2 64H208c8.8 0 16 7.2 16 16V96H96V80c0-8.8 7.2-16 16-16h8.8c7.6 0 14.2-5.4 15.7-12.8C138.7 40.2 148.4 32 160 32zM64 64h2.7C65 69 64 74.4 64 80V96c0 17.7 14.3 32 32 32H224c17.7 0 32-14.3 32-32V80c0-5.6-1-11-2.7-16H256c17.7 0 32 14.3 32 32h32c0-35.3-28.7-64-64-64H210.6c-9-18.9-28.3-32-50.6-32s-41.6 13.1-50.6 32H64C28.7 32 0 60.7 0 96V384c0 35.3 28.7 64 64 64H192V416H64c-17.7 0-32-14.3-32-32V96c0-17.7 14.3-32 32-32zM288 480c-17.7 0-32-14.3-32-32V192c0-17.7 14.3-32 32-32h96v56c0 22.1 17.9 40 40 40h56V448c0 17.7-14.3 32-32 32H288zM416 165.3L474.7 224H424c-4.4 0-8-3.6-8-8V165.3zM448 512c35.3 0 64-28.7 64-64V235.9c0-12.7-5.1-24.9-14.1-33.9l-59.9-59.9c-9-9-21.2-14.1-33.9-14.1H288c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H448z\"/></symbol>\n<symbol id=\"svg-cut\" viewBox=\"0 0 512 512\"><path d=\"M485.6 444.2L333.6 314.9C326.9 309.2 326.1 299.1 331.8 292.4C337.5 285.6 347.6 284.8 354.4 290.5L506.4 419.8C513.1 425.5 513.9 435.6 508.2 442.4C502.5 449.1 492.4 449.9 485.6 444.2zM485.7 67.76C492.5 62.07 502.5 62.94 508.2 69.69C513.9 76.45 513.1 86.55 506.3 92.24L208.5 343.1C218.3 359.7 224 379.2 224 400C224 461.9 173.9 512 112 512C50.14 512 0 461.9 0 400C0 338.1 50.14 288 112 288C141.5 288 168.4 299.4 188.4 318.1L262.2 256L188.4 193.9C168.4 212.6 141.5 224 112 224C50.14 224 0 173.9 0 112C0 50.14 50.14 0 112 0C173.9 0 224 50.14 224 112C224 132.8 218.3 152.3 208.5 168.9L287 235.1L485.7 67.76zM32 112C32 156.2 67.82 192 112 192C156.2 192 192 156.2 192 112C192 67.82 156.2 32 112 32C67.82 32 32 67.82 32 112zM112 480C156.2 480 192 444.2 192 400C192 355.8 156.2 320 112 320C67.82 320 32 355.8 32 400C32 444.2 67.82 480 112 480z\"/></symbol>\n<symbol id=\"svg-copy\" viewBox=\"0 0 512 512\"><path d=\"M272 416C263.2 416 256 423.2 256 432V448c0 17.67-14.33 32-32 32H64c-17.67 0-32-14.33-32-32V192c0-17.67 14.33-32 32-32h112C184.8 160 192 152.8 192 144C192 135.2 184.8 128 176 128H63.99c-35.35 0-64 28.65-64 64l.0098 256C0 483.3 28.65 512 64 512h160c35.35 0 64-28.65 64-64v-16C288 423.2 280.8 416 272 416zM502.6 86.63l-77.25-77.25C419.4 3.371 411.2 0 402.7 0H288C252.7 0 224 28.65 224 64v256c0 35.35 28.65 64 64 64h160c35.35 0 64-28.65 64-64V109.3C512 100.8 508.6 92.63 502.6 86.63zM416 45.25L466.7 96H416V45.25zM480 320c0 17.67-14.33 32-32 32h-160c-17.67 0-32-14.33-32-32V64c0-17.67 14.33-32 32-32h96l.0026 64c0 17.67 14.33 32 32 32H480V320z\"/>\n</symbol>\n<symbol id=\"svg-angle-double-right\" viewBox=\"0 0 512 512\"><path d=\"M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\"/>\n</symbol>\n<symbol id=\"svg-angle-double-left\" viewBox=\"0 0 512 512\"><path d=\"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z\"/>\n</symbol>\n<symbol id=\"svg-trash\" viewBox=\"0 0 448 512\">\n  <path d=\"M336 64l-33.6-44.8C293.3 7.1 279.1 0 264 0h-80c-15.1 0-29.3 7.1-38.4 19.2L112 64H24C10.7 64 0 74.7 0 88v2c0 3.3 2.7 6 6 6h26v368c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V96h26c3.3 0 6-2.7 6-6v-2c0-13.3-10.7-24-24-24h-88zM184 32h80c5 0 9.8 2.4 12.8 6.4L296 64H152l19.2-25.6c3-4 7.8-6.4 12.8-6.4zm200 432c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V96h320v368zm-176-44V156c0-6.6 5.4-12 12-12h8c6.6 0 12 5.4 12 12v264c0 6.6-5.4 12-12 12h-8c-6.6 0-12-5.4-12-12zm-80 0V156c0-6.6 5.4-12 12-12h8c6.6 0 12 5.4 12 12v264c0 6.6-5.4 12-12 12h-8c-6.6 0-12-5.4-12-12zm160 0V156c0-6.6 5.4-12 12-12h8c6.6 0 12 5.4 12 12v264c0 6.6-5.4 12-12 12h-8c-6.6 0-12-5.4-12-12z\"/>\n</symbol>\n<symbol id=\"svg-keyboard-down\" viewBox=\"0 0 576 512\"><path d=\"M64 48c-8.8 0-16 7.2-16 16V240c0 8.8 7.2 16 16 16H512c8.8 0 16-7.2 16-16V64c0-8.8-7.2-16-16-16H64zM0 64C0 28.7 28.7 0 64 0H512c35.3 0 64 28.7 64 64V240c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM159 359c9.4-9.4 24.6-9.4 33.9 0l95 95 95-95c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L305 505c-4.5 4.5-10.6 7-17 7s-12.5-2.5-17-7L159 393c-9.4-9.4-9.4-24.6 0-33.9zm1-167c0-8.8 7.2-16 16-16H400c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V192zM120 88h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H120c-8.8 0-16-7.2-16-16V104c0-8.8 7.2-16 16-16zm64 16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H200c-8.8 0-16-7.2-16-16V104zm96-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H280c-8.8 0-16-7.2-16-16V104c0-8.8 7.2-16 16-16zm64 16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H360c-8.8 0-16-7.2-16-16V104zm96-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H440c-8.8 0-16-7.2-16-16V104c0-8.8 7.2-16 16-16z\"/></symbol>\n</svg>`;function Tp(t){t.resetKeycapRegistry(),Ig();let e=document.createElement(\"div\");e.className=\"ML__keyboard\";let r=document.createElement(\"div\");r.className=\"MLK__plate\",r.innerHTML=globalThis.MathfieldElement.createHTML(zg+t.normalizedLayouts.map((a,s)=>Ng(t,a,s)).join(\"\"));let i=document.createElement(\"div\");i.className=\"MLK__backdrop\",i.appendChild(r),e.appendChild(i),e.addEventListener(\"pointerdown\",$g,{passive:!1});let n=e.querySelectorAll(\".ML__edit-toolbar\");if(n)for(let a of n)a.addEventListener(\"click\",s=>{var u,m;let l=s.target,c=\"\";for(;l&&!c;)c=(u=l==null?void 0:l.getAttribute(\"data-command\"))!=null?u:\"\",l=(m=l==null?void 0:l.parentElement)!=null?m:null;c&&t.executeCommand(JSON.parse(c))});Pg(e.querySelectorAll(\".MLK__keycap, .action, .fnbutton, .bigfnbutton\"));let o=e.querySelectorAll(\".MLK__layer\");o.length>0;for(let a of o)a.addEventListener(\"pointerdown\",s=>s.preventDefault());return t.currentLayer=t.latentLayer,e}function Ng(t,e,r){var n;let i=[];if(!(\"layers\"in e))return\"\";for(let o of e.layers)i.push(`<div tabindex=\"-1\" class=\"MLK__layer\" id=\"${o.id}\">`),(t.normalizedLayouts.length>1||e.displayEditToolbar)&&(i.push(\"<div class='MLK__toolbar' role='toolbar'>\"),i.push(Kg(t,r)),((n=e.displayEditToolbar)==null||n)&&i.push('<div class=\"ML__edit-toolbar right\"></div>'),i.push(\"</div>\")),i.push(Fg(t,o)),i.push(\"</div>\");return i.join(\"\")}function Fg(t,e){if(typeof e==\"string\")return e;let r=\"\";if(typeof e.style==\"string\"?r+=`<style>${e.style}</style>`:typeof e.style==\"object\"&&(r+=`<style>${Cg(e.style)}</style>`),e.backdrop&&(r+=`<div class='${e.backdrop}'>`),e.container&&(r+=`<div class='${e.container}'>`),e.rows){r+=\"<div class=MLK__rows>\";for(let i of e.rows){r+='<div dir=\"ltr\" class=MLK__row>';for(let n of i)if(n){let o=t.registerKeycap(n),[a,s]=yn(n);/(^|\\s)separator/.test(s)?r+=`<div class=\"${s}\"`:r+=`<div tabindex=\"-1\" id=\"${o}\" class=\"${s}\"`,n.tooltip&&(r+=` data-tooltip=\"${ds(n.tooltip)}\"`);let l=Tg(n);l&&(r+=` aria-label=\"${ds(l)}\"`);let c=Dg(n.command);c&&(r+=` data-command=\"${ds(c)}\"`);let u=Og(n);u&&(r+=` data-keycap-value=\"${ds(u)}\"`),r+=`>${a}</div>`}r+=\"</div>\"}r+=\"</div>\"}else e.markup&&(r+=e.markup);return e.container&&(r+=\"</div>\"),e.backdrop&&(r+=\"</div>\"),r}function yn(t,e={shifted:!1}){var n,o,a,s,l,c,u;let r=\"\",i=(n=t.class)!=null?n:\"\";if(e.shifted&&xn(t)&&(i+=\" is-active\"),e.shifted&&\"shift\"in t)typeof t.shift==\"string\"?r=po(t.shift):typeof t.shift==\"object\"&&(r=t.shift.label?t.shift.label:(o=po(t.shift.latex||t.shift.insert||\"\")||t.shift.key)!=null?o:\"\"),typeof t.shift==\"object\"&&(i=(s=(a=t.shift.class)!=null?a:t.class)!=null?s:\"\");else{if(r=t.label?t.label:(l=po(t.latex||t.insert||\"\")||t.key)!=null?l:\"\",t.shift){let m;typeof t.shift==\"string\"?m=po(t.shift):t.shift.label?m=t.shift.label:m=(c=po(t.shift.latex||t.shift.insert||\"\")||t.shift.key)!=null?c:\"\",r+=`<span class=\"MLK__shift\">${m}</span>`}t.aside&&(r+=`<aside>${t.aside}</aside>`)}return t.layer&&!/layer-switch/.test(i)&&(i+=\" layer-switch\"),/(^|\\s)(separator|action|shift|fnbutton|bigfnbutton)($|\\s)/.test(i)||(i+=\" MLK__keycap\"),!/\\bw[0-9]+\\b/.test(i)&&t.width&&(i+=(u={0:\" w0\",.5:\" w5\",1.5:\" w15\",2:\" w20\",5:\" w50\"}[t.width])!=null?u:\"\"),[r,i||\"MLK__keycap\"]}var Wt={\"[left]\":{class:\"action hide-shift\",label:\"<svg class=svg-glyph><use xlink:href=#svg-arrow-left /></svg>\",command:\"performWithFeedback(moveToPreviousChar)\",shift:{label:\"<svg class=svg-glyph><use xlink:href=#svg-angle-double-left /></svg>\",command:\"performWithFeedback(extendSelectionBackward)\"}},\"[right]\":{class:\"action hide-shift\",label:\"<svg class=svg-glyph><use xlink:href=#svg-arrow-right /></svg>\",command:\"performWithFeedback(moveToNextChar)\",shift:{label:\"<svg class=svg-glyph><use xlink:href=#svg-angle-double-right /></svg>\",command:\"performWithFeedback(extendSelectionForward)\"}},\"[up]\":{class:\"action hide-shift\",label:\"\\u2191\",command:\"performWithFeedback(moveUp)\",shift:{label:\"\\u219F\",command:\"performWithFeedback(extendSelectionUpward)\"}},\"[down]\":{class:\"action hide-shift\",label:\"\\u2193\",command:\"performWithFeedback(moveDown)\",shift:{label:\"\\u21A1\",command:\"performWithFeedback(extendSelectionDownward)\"}},\"[return]\":{class:\"action hide-shift\",command:\"performWithFeedback(commit)\",shift:{command:\"performWithFeedback(addRowAfter)\"},width:1.5,label:\"<svg class=svg-glyph><use xlink:href=#svg-commit /></svg>\"},\"[action]\":{class:\"action hide-shift\",command:\"performWithFeedback(commit)\",shift:{label:\"<svg class=svg-glyph><use xlink:href=#circle-plus /></svg>\",command:\"performWithFeedback(addRowAfter)\"},width:1.5,label:\"<svg class=svg-glyph><use xlink:href=#svg-commit /></svg>\"},\"[hr]\":{class:\"separator horizontal-rule\"},\"[hide-keyboard]\":{class:\"action\",command:[\"hideVirtualKeyboard\"],width:1.5,label:\"<svg class=svg-glyph-lg><use xlink:href=#svg-keyboard-down /></svg>\"},\"[.]\":{variants:\".\",command:\"performWithFeedback(insertDecimalSeparator)\",shift:\",\",class:\"big-op hide-shift\",label:\".\"},\"[,]\":{variants:\",\",command:\"performWithFeedback(insertDecimalSeparator)\",shift:\".\",class:\"big-op hide-shift\",label:\",\"},\"[+]\":{variants:[{latex:\"\\\\sum_{#0}^{#0}\",class:\"small\"},\"\\\\oplus\"],latex:\"+\",label:\"+\",class:\"big-op hide-shift\",shift:{latex:\"\\\\sum\",insert:\"\\\\sum\",class:\"small\"}},\"[-]\":{variants:[\"\\\\pm\",\"\\\\ominus\"],latex:\"-\",label:\"&#x2212;\",shift:\"\\\\pm\",class:\"big-op hide-shift\"},\"[/]\":{class:\"big-op hide-shift\",shift:{class:\"\",latex:\"\\\\frac{1}{#@}\"},variants:[\"/\",\"\\\\div\",\"\\\\%\",\"\\\\oslash\"],latex:\"\\\\frac{#@}{#?}\",label:\"&divide;\"},\"[*]\":{variants:[{latex:\"\\\\prod_{#0}^{#0}\",class:\"small\"},\"\\\\otimes\",\"\\\\cdot\"],latex:\"\\\\cdot\",label:\"&times;\",shift:{latex:\"\\\\times\"},class:\"big-op hide-shift\"},\"[=]\":{variants:[\"\\\\neq\",\"\\\\equiv\",\"\\\\varpropto\",\"\\\\thickapprox\",\"\\\\lt\",\"\\\\gt\",\"\\\\le\",\"\\\\ge\"],latex:\"=\",label:\"=\",shift:{label:\"\\u2260\",latex:\"\\\\ne\"},class:\"big-op hide-shift\"},\"[backspace]\":{class:\"action bottom right hide-shift\",width:1.5,command:\"performWithFeedback(deleteBackward)\",label:\"<svg class=svg-glyph><use xlink:href=#svg-delete-backward /></svg>\",shift:{class:\"action warning\",label:\"<svg class=svg-glyph><use xlink:href=#svg-trash /></svg>\",command:\"deleteAll\"}},\"[undo]\":{class:\"ghost if-can-undo\",command:\"undo\",label:\"<svg class=svg-glyph><use xlink:href=#svg-undo /></svg>\",tooltip:\"tooltip.undo\"},\"[redo]\":{class:\"ghost  if-can-redo\",command:\"redo\",label:\"<svg class=svg-glyph><use xlink:href=#svg-redo /></svg>\",tooltip:\"tooltip.redo\"},\"[(]\":{variants:[{latex:\"\\\\lbrack\",key:\"[\"},\"\\\\langle\",\"\\\\lfloor\",\"\\\\lceil\",{latex:\"\\\\lbrace\",key:\"{\"}],key:\"(\",label:\"(\",shift:{label:\"[\",key:\"[\"},class:\"hide-shift\"},\"[)]\":{variants:[{latex:\"\\\\rbrack\",key:\"]\"},\"\\\\rangle\",\"\\\\rfloor\",\"\\\\rceil\",{latex:\"\\\\rbrace\",key:\"}\"}],key:\")\",label:\")\",shift:{label:\"]\",latex:\"\\\\rbrack\"},class:\"hide-shift\"},\"[0]\":{variants:\"0\",latex:\"0\",label:\"0\",shift:\"\\\\infty\",class:\"hide-shift\"},\"[1]\":{variants:\"1\",latex:\"1\",label:\"1\",shift:\"#@^{-1}\",class:\"hide-shift\"},\"[2]\":{variants:\"2\",latex:\"2\",label:\"2\",shift:\"#@^2\",class:\"hide-shift\"},\"[3]\":{variants:\"3\",latex:\"3\",label:\"3\",shift:\"#@^3\",class:\"hide-shift\"},\"[4]\":{variants:\"4\",latex:\"4\",label:\"4\",shift:\"#@^4\",class:\"hide-shift\"},\"[5]\":{variants:\"5\",latex:\"5\",label:\"5\",shift:\"#@^5\",class:\"hide-shift\"},\"[6]\":{variants:\"6\",latex:\"6\",label:\"6\",shift:\"#@^6\",class:\"hide-shift\"},\"[7]\":{variants:\"7\",latex:\"7\",label:\"7\",shift:\"#@^7\",class:\"hide-shift\"},\"[8]\":{variants:\"8\",latex:\"8\",label:\"8\",shift:\"#@^8\",class:\"hide-shift\"},\"[9]\":{variants:\"9\",latex:\"9\",label:\"9\",shift:\"#@^9\",class:\"hide-shift\"},\"[separator-5]\":{class:\"separator\",width:.5},\"[separator]\":{class:\"separator\"},\"[separator-10]\":{class:\"separator\"},\"[separator-15]\":{class:\"separator\",width:1.5},\"[separator-20]\":{class:\"separator\",width:2},\"[separator-50]\":{class:\"separator\",width:5},\"[shift]\":{class:\"shift bottom left\",width:1.5,label:\"<span class=caps-lock-indicator></span><svg class=svg-glyph><use xlink:href=#svg-shift /></svg>\"},\"[foreground-color]\":{variants:\"foreground-color\",command:[\"applyStyle\",{color:\"red\"}],label:\"<span style='border-radius: 50%;width:22px;height:22px; border: 3px solid #cc2428; box-sizing: border-box'>\"},\"[background-color]\":{variants:\"background-color\",command:[\"applyStyle\",{backgroundColor:\"yellow\"}],label:\"<span style='border-radius: 50%;width:22px;height:22px; background:#fff590; box-sizing: border-box'></span>\"}};function mo(t){var r;if(typeof t==\"string\"){if(t===\"[.]\"&&globalThis.MathfieldElement.decimalSeparator===\",\"&&(t=\"[,]\"),!Wt[t])return{latex:t};t={label:t}}let e;return\"label\"in t&&t.label&&Wt[t.label]&&(e=g(p(p({},Wt[t.label]),t),{label:Wt[t.label].label})),\"key\"in t&&t.key&&Wt[t.key]&&(e=g(p(p({},Wt[t.key]),t),{key:Wt[t.key].key})),e?(e.command===\"insertDecimalSeparator\"&&(e.label=(r=globalThis.MathfieldElement.decimalSeparator)!=null?r:\".\"),(e.tooltip===void 0||e.tooltip===null||e.tooltip===!1)&&delete e.tooltip,(e.tooltip===void 0||e.tooltip===null||e.tooltip===!1)&&delete e.tooltip,(e.aside===void 0||e.aside===null||e.aside===!1)&&delete e.aside,(e.variants===void 0||e.variants===null||e.variants===!1)&&delete e.variants,(e.shift===void 0||e.shift===null||e.shift===!1)&&delete e.shift,e):t}var fo;function $g(t){var l,c,u,m;if(t.button!==0)return;let e=ze.singleton;if(!e)return;let r=t.target;for(;r&&!r.getAttribute(\"data-layer\");)r=r.parentElement;if(r){e.currentLayer=(l=r.getAttribute(\"data-layer\"))!=null?l:\"\",t.preventDefault();return}let i=xi(t.target);if(!(i!=null&&i.id))return;let n=e.getKeycap(i.id);if(!n)return;t.type;let o=e;if(!o.connectedMathfieldWindow){let d=(c=window.focusedMathfield)==null?void 0:c.call(window);if(d){let h=(m=(u=d.element)==null?void 0:u.ownerDocument)==null?void 0:m.defaultView;h&&h!==window&&(o.connectedMathfieldWindow=h)}}let a=new AbortController,s=a.signal;i.classList.add(\"is-pressed\"),i.addEventListener(\"pointerenter\",ms(a),{capture:!0,signal:s}),i.addEventListener(\"pointerleave\",ms(a),{capture:!0,signal:s}),i.addEventListener(\"pointercancel\",ms(a),{signal:s}),i.addEventListener(\"pointerup\",ms(a),{signal:s}),xn(n)&&(i.classList.add(\"is-active\"),e.shiftPressCount++),n.variants&&(fo&&clearTimeout(fo),fo=setTimeout(()=>{i.classList.contains(\"is-pressed\")&&(i.classList.remove(\"is-pressed\"),i.classList.add(\"is-active\"),t.target&&\"releasePointerCapture\"in t.target&&t.target.releasePointerCapture(t.pointerId),ls(i,()=>{a.abort(),i==null||i.classList.remove(\"is-active\")}))},n.stickyVariantPanel?0:300)),t.preventDefault()}function ms(t){return e=>{let r=xi(e.target);if(!(r!=null&&r.id))return;let i=ze.singleton;if(!i)return;let n=i.getKeycap(r.id);if(n){if(e.type===\"pointerenter\"&&e.target===r&&e.isPrimary&&r.classList.add(\"is-pressed\"),e.type===\"pointercancel\"){r.classList.remove(\"is-pressed\"),xn(n)&&(i.shiftPressCount--,r.classList.toggle(\"is-active\",i.isShifted)),t.abort();return}if(e.type===\"pointerleave\"&&e.target===r){r.classList.remove(\"is-pressed\"),xn(n)&&(i.shiftPressCount--,r.classList.toggle(\"is-active\",i.isShifted));return}if(e.type===\"pointerup\"){fo&&clearTimeout(fo),xn(n)?r.classList.toggle(\"is-active\",i.isShifted):r.classList.contains(\"is-pressed\")&&(r.classList.remove(\"is-pressed\"),i.isShifted&&n.shift?typeof n.shift==\"string\"?i.executeCommand([\"insert\",n.shift,{focus:!0,feedback:!0,scrollIntoView:!0,mode:\"math\",format:\"latex\"}]):us(n.shift):us(n),i.shiftPressCount===1&&!e.shiftKey&&(i.shiftPressCount=0)),t.abort(),e.preventDefault();return}}}}function us(t){let e=t.command;!e&&t.insert&&(e=[\"insert\",t.insert,{focus:!0,feedback:!0,scrollIntoView:!0,mode:\"math\",format:\"latex\"}]),!e&&t.key&&(e=[\"typedText\",t.key,{focus:!0,feedback:!0,simulateKeystroke:!0}]),!e&&t.latex&&(e=[\"insert\",t.latex,{focus:!0,feedback:!0,scrollIntoView:!0,mode:\"math\",format:\"latex\"}]),e||(e=[\"typedText\",t.label,{focus:!0,feedback:!0,simulateKeystroke:!0}]),ze.singleton&&ze.singleton.executeCommand(e)}function Vg(t){if(t.nodeType!==1)return!1;let e=t.classList;return e.contains(\"MLK__keycap\")||e.contains(\"shift\")||e.contains(\"action\")||e.contains(\"fnbutton\")||e.contains(\"bigfnbutton\")}function xi(t){if(!t)return;let e=t;for(;e&&!Vg(e);)e=e.parentElement;return e!=null?e:void 0}function xn(t){return!!t.class&&/(^|\\s)shift($|\\s)/.test(t.class)}var ze=class t{constructor(){this.originalContainerBottomPadding=null;this.keycapRegistry={};this._shiftPressCount=0;this.isSandbox=!1;var e;this.targetOrigin=window.origin,this.originValidator=\"none\",this._alphabeticLayout=\"auto\",this._layouts=Object.freeze([\"default\"]),this._editToolbar=\"default\",this._container=void 0,this._visible=!1,this._rebuilding=!1,this.observer=new ResizeObserver(r=>{this.adjustBoundingRect(),this.dispatchEvent(new Event(\"geometrychange\")),this.sendMessage(\"geometry-changed\",{boundingRect:this.boundingRect})}),this.listeners={};try{(e=window.top)==null||e.addEventListener(\"message\",this)}catch(r){window.addEventListener(\"message\",this)}Po()&&document.addEventListener(\"focusin\",r=>{let i=r.target;i!=null&&i.isConnected&&setTimeout(()=>{let n=Dp();n&&n.mathVirtualKeyboardPolicy===\"auto\"&&n.hasEditableContent&&this.show({animate:!0})},300)}),document.addEventListener(\"focusout\",r=>{r.target instanceof _t&&r.target.mathVirtualKeyboardPolicy!==\"manual\"&&setTimeout(()=>{Dp()||this.hide()},300)})}get currentLayer(){var e,r,i;return(i=(r=(e=this._element)==null?void 0:e.querySelector(\".MLK__layer.is-visible\"))==null?void 0:r.id)!=null?i:\"\"}set currentLayer(e){var i;if(!this._element){this.latentLayer=e;return}let r=e?this._element.querySelector(`#${e}.MLK__layer`):null;r||(r=this._element.querySelector(\".MLK__layer\")),r&&((i=this._element.querySelector(\".MLK__layer.is-visible\"))==null||i.classList.remove(\"is-visible\"),r.classList.add(\"is-visible\")),this.render()}get shiftPressCount(){return this._shiftPressCount}set shiftPressCount(e){var r;this._shiftPressCount=e>2||e<0?0:e,(r=this._element)==null||r.classList.toggle(\"is-caps-lock\",this.shiftPressCount===2),this.render()}get isShifted(){return this._shiftPressCount>0}resetKeycapRegistry(){this.keycapRegistry={}}registerKeycap(e){let r=\"ML__k\"+Date.now().toString(36).slice(-2)+Math.floor(Math.random()*1e5).toString(36);return this.keycapRegistry[r]=e,r}setKeycap(e,r){Wt[e]=mo(r),this.rebuild()}getKeycap(e){var r;return e?(r=Wt[e])!=null?r:this.keycapRegistry[e]:void 0}getLayer(e){let r=this.normalizedLayouts;for(let i of r)for(let n of i.layers)if(n.id===e)return n}get alphabeticLayout(){return this._alphabeticLayout}set alphabeticLayout(e){this._alphabeticLayout=e,this._normalizedLayouts=void 0,this.rebuild()}get layouts(){return this._layouts}set layouts(e){this.updateNormalizedLayouts(e),this.rebuild()}updateNormalizedLayouts(e){let r=Array.isArray(e)?[...e]:[e],i=r.findIndex(n=>n===\"default\");i>=0&&r.splice(i,1,\"numeric\",\"symbols\",\"alphabetic\",\"greek\"),this._layouts=Object.freeze(r),this._normalizedLayouts=r.map(n=>yc(n))}get normalizedLayouts(){return this._normalizedLayouts||this.updateNormalizedLayouts(this._layouts),this._normalizedLayouts}get editToolbar(){return this._editToolbar}set editToolbar(e){this._editToolbar=e,this.rebuild()}get container(){return this._container===void 0?window.document.body:this._container}set container(e){this._container=e,this.rebuild()}static get singleton(){if(this._singleton===void 0)try{this._singleton=new t}catch(e){this._singleton=null}return this._singleton}get style(){return this._style}addEventListener(e,r,i){this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].has(r)||this.listeners[e].add(r)}dispatchEvent(e){return!this.listeners[e.type]||this.listeners[e.type].size===0?!0:(this.listeners[e.type].forEach(r=>{typeof r==\"function\"?r(e):r==null||r.handleEvent(e)}),!e.defaultPrevented)}removeEventListener(e,r,i){this.listeners[e]&&this.listeners[e].delete(r)}get element(){return this._element}set element(e){var r;this._element!==e&&((r=this._element)==null||r.remove(),this._element=e)}get visible(){return this._visible}set visible(e){e?this.show():this.hide()}get boundingRect(){var r;if(!this._visible)return new DOMRect;let e=(r=this._element)==null?void 0:r.getElementsByClassName(\"MLK__plate\")[0];return e?e.getBoundingClientRect():new DOMRect}adjustBoundingRect(){if(!this._element)return;let e=this.boundingRect.height;if(this.container===document.body){this._element.style.setProperty(\"--_keyboard-height\",`calc(${e}px + var(--_padding-top) + var(--_padding-bottom) + env(safe-area-inset-bottom, 0))`);let r=e-1;this.container.style.paddingBottom=this.originalContainerBottomPadding?`calc(${this.originalContainerBottomPadding} + ${r}px)`:`${r}px`}else this._element.style.setProperty(\"--_keyboard-height\",`${e}px`)}rebuild(){if(this._rebuilding||!this._element)return;this._rebuilding=!0;let e=this.currentLayer;requestAnimationFrame(()=>{this._rebuilding=!1,this._element&&(this._element.remove(),this._element=void 0),this.visible&&(this.buildAndAttachElement(),this.currentLayer=e,this.render(),this.adjustBoundingRect(),this._element.classList.add(\"is-visible\"))})}render(){var n;if(!this._element)return;let e=this.getLayer(this.currentLayer);this._element.classList.toggle(\"backdrop-is-transparent\",!!(e&&(e.backdrop||e.container)));let r=this._element.querySelectorAll(\".MLK__layer.is-visible .MLK__keycap, .MLK__layer.is-visible .action, .fnbutton, .MLK__layer.is-visible .bigfnbutton, .MLK__layer.is-visible .shift\");if(!r)return;let i=this.isShifted;for(let o of r){let a=this.getKeycap(o.id);if(a){let[s,l]=yn(a,{shifted:i});o.innerHTML=globalThis.MathfieldElement.createHTML(s),o.className=l,i&&typeof a.shift==\"object\"&&((n=a.shift)!=null&&n.tooltip)?o.dataset.tooltip=a.shift.tooltip:!i&&a.tooltip&&(o.dataset.tooltip=a.tooltip)}}}show(e){var i;if(this._visible)return;let r=this.container;if(r&&window.mathVirtualKeyboard&&this.stateWillChange(!0)){if(this._element||(this.buildAndAttachElement(),this.adjustBoundingRect()),!this._visible){let n=this._element.getElementsByClassName(\"MLK__plate\")[0];if(n&&this.observer.observe(n),r===window.document.body){let o=r.style.paddingBottom;this.originalContainerBottomPadding=o;let a=n.offsetHeight-1;r.style.paddingBottom=o?`calc(${o} + ${a}px)`:`${a}px`}window.addEventListener(\"mouseup\",this),window.addEventListener(\"blur\",this),window.addEventListener(\"keydown\",this,{capture:!0}),window.addEventListener(\"keyup\",this,{capture:!0}),(i=this._element)==null||i.classList.toggle(\"is-caps-lock\",this.shiftPressCount===2),this.currentLayer=this.latentLayer}this._visible=!0,e!=null&&e.animate?requestAnimationFrame(()=>{this._element&&(this._element.classList.add(\"animate\"),this._element.addEventListener(\"transitionend\",()=>{var n;return(n=this._element)==null?void 0:n.classList.remove(\"animate\")},{once:!0}),this._element.classList.add(\"is-visible\"),this.stateChanged())}):(this._element.classList.add(\"is-visible\"),this.stateChanged())}}hide(e){var i;let r=this.container;if(r&&this._visible&&this.stateWillChange(!1)){if(this._visible=!1,this._element){this.latentLayer=this.currentLayer;let n=this._element.getElementsByClassName(\"MLK__plate\")[0];n&&this.observer.unobserve(n),window.removeEventListener(\"mouseup\",this),window.removeEventListener(\"blur\",this),window.removeEventListener(\"keydown\",this,{capture:!0}),window.removeEventListener(\"keyup\",this,{capture:!0}),window.removeEventListener(\"contextmenu\",this,{capture:!0}),Vr(),Ep(),(i=this._element)==null||i.remove(),this._element=void 0,this.originalContainerBottomPadding!==null&&(r.style.paddingBottom=this.originalContainerBottomPadding)}this.stateChanged()}}get height(){var e,r;return(r=(e=this.element)==null?void 0:e.offsetHeight)!=null?r:0}buildAndAttachElement(){var e;this.element,this.element=Tp(this),window.addEventListener(\"contextmenu\",this,{capture:!0}),this.element.addEventListener(\"contextmenu\",r=>{r.shiftKey||((r.ctrlKey||r.button===2)&&ls(r.target),r.preventDefault(),r.stopPropagation())},{capture:!0}),(e=this.container)==null||e.appendChild(this.element)}handleEvent(e){if(uo(e)){if(!Qi(e.origin,this.originValidator))throw new DOMException(`Message from unknown origin (${e.origin}) cannot be handled`,\"SecurityError\");if(e.data.action===\"disconnect\"){if(this._visible)return;this.connectedMathfieldWindow=void 0}else e.data.action!==\"update-setting\"&&e.data.action!==\"proxy-created\"&&e.data.action!==\"execute-command\"&&(e.source,this.connectedMathfieldWindow=e.source);this.handleMessage(e.data,e.source)}if(this._element)switch(e.type){case\"mouseup\":case\"blur\":document.body.style.userSelect=\"\",this.shiftPressCount=0;break;case\"contextmenu\":e.button!==2&&e.preventDefault();break;case\"keydown\":{e.key===\"Shift\"&&!e.repeat&&(this.shiftPressCount=1);break}case\"keyup\":{(e.key===\"Shift\"||!e.getModifierState(\"Shift\")&&this.shiftPressCount!==2)&&(this.shiftPressCount=0);break}}}handleMessage(e,r){let{action:i}=e;if(i===\"execute-command\"){let{command:n}=e,o=mr(n);if(window===window.top&&r!==window||window===window.top&&o!==\"virtual-keyboard\")return;this.executeCommand(n);return}if((i===\"connect\"||i===\"show\")&&this.sendMessage(\"synchronize-proxy\",{boundingRect:this.boundingRect,alphabeticLayout:this._alphabeticLayout,layouts:this._layouts,editToolbar:this._editToolbar},r),i!==\"disconnect\"&&!this.isSandbox){if(i===\"show\"){typeof e.animate!=\"undefined\"?this.show({animate:e.animate}):this.show();return}if(i===\"hide\"){typeof e.animate!=\"undefined\"?this.hide({animate:e.animate}):this.hide();return}if(i===\"update-setting\"){if(e.alphabeticLayout&&(this.alphabeticLayout=e.alphabeticLayout),e.layouts&&(this.layouts=e.layouts),e.editToolbar&&(this.editToolbar=e.editToolbar),e.setKeycap){let{keycap:n,value:o}=e.setKeycap;this.setKeycap(n,o),this.render()}return}if(i===\"proxy-created\"){this.sendMessage(\"synchronize-proxy\",{boundingRect:this.boundingRect,alphabeticLayout:this._alphabeticLayout,layouts:this._layouts,editToolbar:this._editToolbar},r);return}}}sendMessage(e,r,i){if(r.command&&this.dispatchEvent(new CustomEvent(\"math-virtual-keyboard-command\",{detail:r.command})),i||(i=this.connectedMathfieldWindow),this.targetOrigin===null||this.targetOrigin===\"null\"||i===window){window.dispatchEvent(new MessageEvent(\"message\",{source:window,origin:window.origin,data:p({type:co,action:e},r)}));return}if(i)i.postMessage(p({type:co,action:e},r),{targetOrigin:this.targetOrigin});else if(e===\"execute-command\"&&Array.isArray(r.command)&&r.command[0]===\"insert\"){let n=r.command[1].split(\"\");for(let o of n)this.dispatchEvent(new KeyboardEvent(\"keydown\",{key:o,bubbles:!0})),this.dispatchEvent(new KeyboardEvent(\"keyup\",{key:o,bubbles:!0}))}}stateWillChange(e){return this.dispatchEvent(new CustomEvent(\"before-virtual-keyboard-toggle\",{detail:{visible:e},bubbles:!0,cancelable:!0,composed:!0}))}stateChanged(){this.dispatchEvent(new Event(\"virtual-keyboard-toggle\")),this._visible||(this.dispatchEvent(new Event(\"geometrychange\")),this.sendMessage(\"geometry-changed\",{boundingRect:this.boundingRect}))}focus(){this.sendMessage(\"focus\",{})}blur(){this.sendMessage(\"blur\",{})}updateToolbar(e){let r=this._element;if(!r)return;r.classList.toggle(\"is-math-mode\",e.mode===\"math\"),r.classList.toggle(\"is-text-mode\",e.mode===\"text\"),r.classList.toggle(\"can-undo\",e.canUndo),r.classList.toggle(\"can-redo\",e.canRedo),r.classList.toggle(\"can-copy\",!e.selectionIsCollapsed),r.classList.toggle(\"can-cut\",!e.selectionIsCollapsed),r.classList.toggle(\"can-paste\",!0);let i=r.querySelectorAll(\".ML__edit-toolbar\");if(i)for(let n of i)n.innerHTML=Cp(this,e)}update(e){this._style=e.style,this.updateToolbar(e)}connect(){this.connectedMathfieldWindow=window}disconnect(){this._visible||(this.connectedMathfieldWindow=void 0)}executeCommand(e){if(e=yi(e),!e)return!1;let r,i=[],n=mr(e);return ee(e)?(r=e[0],r===\"performWithFeedback\"&&(n=mr(e.slice(1))),i=e.slice(1)):r=e,n===\"virtual-keyboard\"?vt[r].fn(void 0,...i):(this.sendMessage(\"execute-command\",{command:e}),!1)}dispose(){window.removeEventListener(\"mouseup\",this),window.removeEventListener(\"blur\",this),window.removeEventListener(\"message\",this)}};function Dp(){let t=hi(),e=null;for(;t;){if(\"host\"in t&&t.host instanceof _t){e=t.host;break}t=t.parentNode}return e}ke()&&!(\"mathVirtualKeyboard\"in window)&&(window===window.top?ps():Object.defineProperty(window,\"mathVirtualKeyboard\",{get:()=>lo.singleton,configurable:!0}));function ps(){let t=ze.singleton;return window.mathVirtualKeyboard!==t&&Object.defineProperty(window,\"mathVirtualKeyboard\",{get:()=>t}),t}function vn(t){let e={};for(let r of Object.keys(t))switch(r){case\"scriptDepth\":let i=t.scriptDepth;if(ee(i))e.scriptDepth=[i[0],i[1]];else if(typeof i==\"number\")e.scriptDepth=[i,i];else if(typeof i==\"string\"){let[o,a]=i.split(\",\").map(s=>parseInt(s.trim()));e.scriptDepth=[o,a]}else throw new TypeError(\"Unexpected value for scriptDepth\");break;case\"mathVirtualKeyboardPolicy\":let n=t.mathVirtualKeyboardPolicy.toLowerCase();if(n===\"sandboxed\"){let o=ps();o&&(o.isSandbox=!0),n=\"manual\"}e.mathVirtualKeyboardPolicy=n;break;case\"letterShapeStyle\":t.letterShapeStyle===\"auto\"?F.locale.startsWith(\"fr\")?e.letterShapeStyle=\"french\":e.letterShapeStyle=\"tex\":e.letterShapeStyle=t.letterShapeStyle;break;case\"defaultMode\":[\"text\",\"math\",\"inline-math\"].includes(t.defaultMode)?e.defaultMode=t.defaultMode:(console.error('MathLive 0.108.2:  valid values for defaultMode are \"text\", \"math\" or \"inline-math\"'),e.defaultMode=\"math\");break;case\"macros\":e.macros=Oi(t.macros);break;default:ee(t[r])?e[r]=[...t[r]]:typeof t[r]==\"object\"&&!(t[r]instanceof Element)&&r!==\"computeEngine\"?e[r]=p({},t[r]):e[r]=t[r]}return e}function pr(t,e){let r;typeof e==\"string\"?r=[e]:e===void 0?r=Object.keys(t):r=e;let i={};for(let n of r)t[n]===null?i[n]=null:ee(t[n])?i[n]=[...t[n]]:typeof t[n]==\"object\"&&!(t[n]instanceof Element)&&n!==\"computeEngine\"?i[n]=p({},t[n]):i[n]=t[n];return typeof e==\"string\"?i[e]:i}function _n(){return{readOnly:!1,defaultMode:\"math\",macros:{},registers:{},colorMap:Xr,backgroundColorMap:Ei,letterShapeStyle:F.locale.startsWith(\"fr\")?\"french\":\"tex\",minFontScale:0,maxMatrixCols:10,smartMode:!1,smartFence:!0,smartSuperscript:!0,scriptDepth:[1/0,1/0],removeExtraneousParentheses:!0,isImplicitFunction:t=>[\"\\\\sin\",\"\\\\cos\",\"\\\\tan\",\"\\\\arcsin\",\"\\\\arccos\",\"\\\\arctan\",\"\\\\arcsec\",\"\\\\arccsc\",\"\\\\arsinh\",\"\\\\arcosh\",\"\\\\artanh\",\"\\\\arcsech\",\"\\\\arccsch\",\"\\\\arg\",\"\\\\ch\",\"\\\\cosec\",\"\\\\cosh\",\"\\\\cot\",\"\\\\cotg\",\"\\\\coth\",\"\\\\csc\",\"\\\\ctg\",\"\\\\cth\",\"\\\\sec\",\"\\\\sinh\",\"\\\\sh\",\"\\\\tanh\",\"\\\\tg\",\"\\\\th\",\"\\\\lg\",\"\\\\lb\",\"\\\\log\",\"\\\\ln\"].includes(t),mathModeSpace:\"\",placeholderSymbol:\"\\u25A2\",contentPlaceholder:\"\",popoverPolicy:\"auto\",environmentPopoverPolicy:\"off\",keybindings:I0,inlineShortcuts:Fa,inlineShortcutTimeout:0,mathVirtualKeyboardPolicy:\"auto\",originValidator:\"none\",onInsertStyle:ao,onInlineShortcut:()=>\"\",onScrollIntoView:null,onExport:R0,value:\"\"}}function xc(t){return t.defaultMode===\"inline-math\"?\"math\":t.defaultMode}function Op(t,e){let r=t.at(t.position);if(r.type===\"composition\")r.value=e;else{let{caret:i}=r;r.caret=void 0;let n=new nn(e,{mode:r.mode});n.caret=i,r.parent.addChildAfter(n,r),t.position+=1}}function Bp(t){let e=t.at(t.position);e.type===\"composition\"&&(e.parent.removeChild(e),t.position-=1)}function qg(t){let e=t.at(t.position);for(;e&&!Ge(e.parentBranch);)e=e.parent;return[e.firstSibling,e.lastSibling]}function Hg(t,e){let r=t.at(t.position);for(;r&&!(r.parent instanceof z);)r=r.parent;if((r==null?void 0:r.type)===\"array\"&&r.environmentName,!r||!(r.parent instanceof z)){let i=t.at(t.position);if(r=i,!r.parent.parent){let n=t.extractAtoms([t.position,t.lastOffset]),o=t.extractAtoms([0,t.position]),a;return e.endsWith(\"column\")?(o.length===0&&(o=fs()),n.length===0&&(n=fs()),a=Re(\"split\",[[o,n]]),t.root=a,go(a,0,0)?Mn(t,a,0,0):go(a,0,1)?Mn(t,a,0,1):t.position=t.offsetOf(i)):(a=Re(\"lines\",[[o],[n]]),t.root=a,Mn(t,a,1,0)),[void 0,[0,0]]}if(r.parent instanceof Y){let n=r.parent,o=t.extractAtoms([t.position,t.offsetOf(n.lastChild)]),a=t.extractAtoms([t.offsetOf(n.firstChild),t.position]);a.length===0&&(a=fs()),o.length===0&&(o=fs());let s=\"pmatrix\",l=n.leftDelim,c=n.rightDelim;l===\"(\"&&(c===\")\"||c===\"?\")?s=\"pmatrix\":(l===\"[\"||l===\"\\\\lbrack\")&&(c===\"]\"||c===\"\\\\rbrack\"||c===\"?\")?s=\"bmatrix\":l===\"\\\\vert\"&&c===\"\\\\vert\"?s=\"vmatrix\":l===\"\\\\Vert\"&&c===\"\\\\Vert\"?s=\"Vmatrix\":(l===\"{\"||l===\"\\\\lbrace\")&&(c===\".\"||c===\"?\")&&(s=\"cases\");let u=Re(s,e.endsWith(\"column\")?[[a,o]]:[[a],[o]]);return n.parent.addChildBefore(u,n),n.parent.removeChild(n),go(u,0,0)?Mn(t,u,0,0):e.endsWith(\"column\")?go(u,0,1)?Mn(t,u,0,1):t.position=t.offsetOf(r):go(u,1,0)?Mn(t,u,1,0):t.position=t.offsetOf(r),[void 0,[0,0]]}}return r&&r.parent instanceof z?[r.parent,r.parentBranch]:[void 0,[0,0]]}function go(t,e,r){let i=t.getCell(e,r);return(i==null?void 0:i.length)!==2?!1:i[1].type===\"placeholder\"}function Wg(t,e,r,i){let n=e.getCell(r,i);return n?[t.offsetOf(n[0]),t.offsetOf(n[n.length-1])]:-1}function Mn(t,e,r,i){let n=Wg(t,e,r,i);typeof n!=\"number\"&&t.setSelection(n)}function hs(t,e,r,i,n){let o=e.getCell(r,i);o&&t.setPositionHandlingPlaceholder(t.offsetOf(o[n===\"start\"?0:o.length-1]))}function bo(t,e){let[r,[i,n]]=Hg(t,e);if(r)switch(e){case\"after row\":r.addRowAfter(i),hs(t,r,i+1,0,\"end\");break;case\"after column\":if(r.maxColumns<=r.colCount){t.announce(\"plonk\");return}r.addColumnAfter(n),hs(t,r,i,n+1,\"end\");break;case\"before row\":r.addRowBefore(i),hs(t,r,i,0,\"start\");break;case\"before column\":if(r.maxColumns<=r.colCount){t.announce(\"plonk\");return}r.addColumnBefore(n),hs(t,r,i,n,\"start\");break}}function vc(t){var r;let e=t.at(t.position);if(!Ge(e.parentBranch)&&e.parent!==t.root&&t.root.type!==\"root\")return t.announce(\"plonk\"),!1;if(!t.contentWillChange({inputType:\"insertText\"}))return!1;if((r=t.parentEnvironment)!=null&&r.isMultiline){t.selectionIsCollapsed||t.deleteAtoms(de(t.selection));let[i,n]=qg(t),o=t.extractAtoms([t.position,t.offsetOf(n)]),a=t.extractAtoms([t.offsetOf(i),t.position]),s=i.parent,[l,c]=i.parentBranch;return s.setCell(l,c,a),bo(t,\"after row\"),s.setCell(l+1,c,o),t.position=t.offsetOf(s.getCell(l+1,c)[0]),t.contentDidChange({inputType:\"insertText\"}),!0}return bo(t,\"after row\"),t.contentDidChange({inputType:\"insertText\"}),!0}function Ug(t){return t.contentWillChange({inputType:\"insertText\"})?(bo(t,\"before row\"),t.contentDidChange({inputType:\"insertText\"}),!0):!1}function _c(t){return t.contentWillChange({inputType:\"insertText\"})?(bo(t,\"after column\"),t.contentDidChange({inputType:\"insertText\"}),!0):!1}function jg(t){return t.contentWillChange({inputType:\"insertText\"})?(bo(t,\"before column\"),t.contentDidChange({inputType:\"insertText\"}),!0):!1}function Mc(t,e){if(!t.contentWillChange({}))return!1;t.mathfield.snapshot();let r=\".\",i=\".\";switch(e){case\"pmatrix\":case\"pmatrix*\":r=\"(\",i=\")\";break;case\"bmatrix\":case\"bmatrix*\":r=\"[\",i=\"]\";break;case\"Bmatrix\":case\"Bmatrix*\":r=\"\\\\lbrace\",i=\"\\\\rbrace\";break;case\"vmatrix\":case\"vmatrix*\":r=\"\\\\vert\",i=\"\\\\vert\";break;case\"Vmatrix\":case\"Vmatrix*\":r=\"\\\\Vert\",i=\"\\\\Vert\";break;case\"matrix\":case\"matrix*\":r=\".\",i=\".\";break;case\"cases\":case\"dcases\":r=\"\\\\lbrace\";break;case\"rcases\":i=\"\\\\rbrace\";break}let n=t.at(t.position),o=n.type===\"array\"?n:t.parentEnvironment;return o.environmentName=e,o.leftDelim=r,o.rightDelim=i,t.contentDidChange({}),!0}function Kp(t,e){let r=t.at(t.position);for(;r&&!(Array.isArray(r.parentBranch)&&r.parent instanceof z);)r=r.parent;if(Array.isArray(r==null?void 0:r.parentBranch)&&(r==null?void 0:r.parent)instanceof z){let i=r.parent,n=r.parentBranch,o;switch(e){case\"row\":if(i.rowCount>1){i.removeRow(n[0]);let a=i.getCell(Math.max(0,n[0]-1),n[1]);o=t.offsetOf(a[a.length-1])}break;case\"column\":if(i.colCount>i.minColumns){i.removeColumn(n[1]);let a=i.getCell(n[0],Math.max(0,n[1]-1));o=t.offsetOf(a[a.length-1])}break}o!==void 0&&t.setPositionHandlingPlaceholder(o)}}function Jg(t){return t.contentWillChange({inputType:\"deleteContent\"})?(Kp(t,\"row\"),t.contentDidChange({inputType:\"deleteContent\"}),!0):!1}function Gg(t){return t.contentWillChange({inputType:\"deleteContent\"})?(Kp(t,\"column\"),t.contentDidChange({inputType:\"deleteContent\"}),!0):!1}fe({addRowAfter:vc,addColumnAfter:_c,addRowBefore:Ug,addColumnBefore:jg,removeRow:Jg,removeColumn:Gg,setEnvironment:Mc},{target:\"model\",canUndo:!0,changeContent:!0,changeSelection:!0});function fs(){return[new Le]}var bs=class bs{constructor(e){this.recording=!1;this.model=e,this.reset()}reset(){this.stack=[],this.index=-1,this.lastOp=\"\"}startRecording(){this.recording=!0}stopRecording(){this.recording=!1}canUndo(){return this.index-1>=0}canRedo(){return this.stack.length-1>this.index}stopCoalescing(e){e&&this.index>=0&&(this.stack[this.index].selection=e),this.lastOp=\"\"}undo(){if(!this.canUndo())return!1;let e=this.stack[this.index-1];return this.index-=1,this.lastOp=\"\",this.model.setState(e,{silenceNotifications:!1,type:\"undo\"}),!0}redo(){if(!this.canRedo())return!1;let e=this.stack[this.index+1];return this.index+=1,this.lastOp=\"\",this.model.setState(e,{silenceNotifications:!1,type:\"redo\"}),!0}pop(){this.canUndo()&&(this.stack.splice(this.index,this.stack.length-this.index),this.index-=1)}snapshot(e){return this.recording?(e&&e===this.lastOp&&this.pop(),this.stack.splice(this.index+1,this.stack.length-this.index-1),this.stack.push(this.model.getState()),this.index+=1,this.stack.length>bs.maximumDepth&&(this.stack.shift(),this.index-=1),this.lastOp=e!=null?e:\"\",!0):!1}};bs.maximumDepth=1e3;var gs=bs;function yo(t,e,r,i){var o,a,s,l,c,u;let n=r.parent;if(Ge(i)&&r instanceof z&&r.isMultiline&&Xg(t,r,i[0],e))return!0;if(n&&r instanceof Y){let m=!i&&e===\"forward\"||i===\"body\"&&e===\"backward\",d=m?t.offsetOf(r.firstChild):t.offsetOf(r.lastChild);return m?r.rightDelim!==\"?\"&&r.rightDelim!==\".\"?(r.leftDelim=\".\",r.isDirty=!0):(n.addChildrenAfter(r.removeBranch(\"body\"),r),n.removeChild(r),d--):r.leftDelim!==\"?\"&&r.leftDelim!==\".\"?(r.rightDelim=\".\",r.isDirty=!0):(n.addChildrenAfter(r.removeBranch(\"body\"),r),n.removeChild(r),d--),t.position=d,!0}if(n&&r.type===\"surd\"){if(e===\"forward\"&&!i||e===\"backward\"&&i===\"body\"){let m=r.leftSibling;r.hasChildren&&n.addChildrenAfter(r.removeBranch(\"body\"),r),n.removeChild(r),t.position=t.offsetOf(m)}else e===\"forward\"&&i===\"body\"?t.position=t.offsetOf(r):!i&&e===\"backward\"?r.hasChildren?t.position=t.offsetOf(r.lastChild):(t.position=Math.max(0,t.offsetOf(r)-1),n.removeChild(r)):i===\"above\"&&(r.hasEmptyBranch(\"above\")&&r.removeBranch(\"above\"),e===\"backward\"?t.position=t.offsetOf(r.leftSibling):t.position=t.offsetOf(r.body[0]));return!0}if(n&&(r.type===\"box\"||r.type===\"enclose\")){let m=i&&e===\"backward\"||!i&&e===\"forward\"?r.leftSibling:r.lastChild;return n.addChildrenAfter(r.removeBranch(\"body\"),r),n.removeChild(r),t.position=t.offsetOf(m),!0}if(r.type===\"genfrac\"||r.type===\"overunder\"){if(!i)return r.type===\"overunder\"&&r.hasEmptyBranch(\"body\")||r.type===\"genfrac\"&&r.hasEmptyBranch(\"below\")&&r.hasEmptyBranch(\"above\")?!1:(t.position=t.offsetOf(e===\"forward\"?r.firstChild:r.lastChild),!0);let m=_t.fractionNavigationOrder===\"numerator-denominator\"?\"above\":\"below\",d=m===\"above\"?\"below\":\"above\";if(n&&(e===\"forward\"&&i===m||e===\"backward\"&&i===d)){let h=r.removeBranch(m),f=r.removeBranch(d);return n.addChildrenAfter([...h,...f],r),n.removeChild(r),t.position=t.offsetOf(h.length>0?h[h.length-1]:f[0]),!0}return e===\"backward\"?t.position=t.offsetOf(r.leftSibling):t.position=t.offsetOf(r),!0}if(r.type===\"extensible-symbol\"||r.type===\"subsup\"||r.type===\"operator\"){if(!i&&e===\"forward\")return!1;if(!i){if(r.subscript||r.superscript){let m=e===\"forward\"?(s=(o=r.superscript)==null?void 0:o[0])!=null?s:(a=r.subscript)==null?void 0:a[0]:(u=(l=r.subscript)==null?void 0:l[0].lastSibling)!=null?u:(c=r.superscript)==null?void 0:c[0].lastSibling;return m&&(t.position=t.offsetOf(m)),!0}return!1}if(!r.hasChildren&&r.type===\"subsup\"){let m=e===\"forward\"?t.offsetOf(r):Math.max(0,t.offsetOf(r)-1);return r.parent.removeChild(r),t.position=m,!0}if(i&&r.hasEmptyBranch(i)){if(r.removeBranch(i),r.type===\"subsup\"&&!r.subscript&&!r.superscript){let m=e===\"forward\"?t.offsetOf(r):Math.max(0,t.offsetOf(r)-1);return r.parent.removeChild(r),t.position=m,!0}return i===\"superscript\"&&e===\"backward\"?t.position=t.offsetOf(r.firstChild)-1:i===\"subscript\"&&e===\"backward\"?r.superscript?t.position=t.offsetOf(r.superscript[0].lastSibling):t.position=t.offsetOf(r.firstChild)-1:t.position=t.offsetOf(r),!0}if(i===\"superscript\")if(e===\"backward\"){let m=t.offsetOf(r.firstChild)-1;m>=0,t.position=m}else r.subscript?t.position=t.offsetOf(r.subscript[0]):t.position=t.offsetOf(r);else i===\"subscript\"&&(e===\"backward\"&&r.superscript?t.position=t.offsetOf(r.superscript[0].lastSibling):e===\"backward\"?t.position=t.offsetOf(r.firstChild)-1:t.position=t.offsetOf(r));return!0}if((n==null?void 0:n.type)===\"genfrac\"&&!i&&r.type!==\"first\"){let m=t.offsetOf(r.leftSibling);return n.removeChild(r),n.hasEmptyBranch(\"above\")&&n.hasEmptyBranch(\"below\")?(m=t.offsetOf(n.leftSibling),n.parent.removeChild(n),t.announce(\"delete\",void 0,[n]),t.position=m,!0):(t.announce(\"delete\",void 0,[r]),t.position=m,!0)}if(e===\"backward\"&&((n==null?void 0:n.command)===\"\\\\ln\"||(n==null?void 0:n.command)===\"\\\\log\")&&r.parentBranch!==\"body\"){let m=t.offsetOf(n.leftSibling);return n.parent.removeChild(n),t.announce(\"delete\",void 0,[n]),t.position=m,!0}return!1}function Pp(t){return!t.mathfield.isSelectionEditable||!t.contentWillChange({inputType:\"deleteContentBackward\"})?!1:t.selectionIsCollapsed?t.deferNotifications({content:!0,selection:!0,type:\"deleteContentBackward\"},()=>{let e=t.at(t.position);if(!(e&&yo(t,\"backward\",e))){if(e!=null&&e.isFirstSibling){if(yo(t,\"backward\",e.parent,e.parentBranch))return;e=null}if(!e){t.announce(\"plonk\");return}t.position=t.offsetOf(e.leftSibling),e.parent.removeChild(e),t.announce(\"delete\",void 0,[e]),t.root.hasEmptyBranch(\"body\")&&t.mathfield.flushInlineShortcutBuffer()}}):at(t,de(t.selection),\"deleteContentBackward\")}function Rp(t){return!t.mathfield.isSelectionEditable||!t.contentWillChange({inputType:\"deleteContentForward\"})?!1:t.selectionIsCollapsed?t.deferNotifications({content:!0,selection:!0,type:\"deleteContentForward\"},()=>{var i,n;let e=t.at(t.position).rightSibling;if(e&&yo(t,\"forward\",e))return;if(e){if(t.at(t.position).isLastSibling&&yo(t,\"forward\",e.parent,e.parentBranch))return}else{if(e=t.at(t.position),e.isLastSibling&&yo(t,\"forward\",e.parent,e.parentBranch))return;e=void 0}if(t.position===t.lastOffset||!e){t.announce(\"plonk\");return}e.parent.removeChild(e);let r=(i=t.at(t.position))==null?void 0:i.rightSibling;for(;(r==null?void 0:r.type)===\"subsup\";)r.parent.removeChild(r),r=(n=t.at(t.position))==null?void 0:n.rightSibling;t.announce(\"delete\",void 0,[e]),t.root.hasEmptyBranch(\"body\")&&t.mathfield.flushInlineShortcutBuffer()}):at(t,de(t.selection),\"deleteContentForward\")}function at(t,e,r){let i=t.getAtoms(e);if(i.length>0&&i[0].parent){let n=i[0];for(;n&&!(n instanceof z);)n=n.parent;let o=i[i.length-1];for(;o&&!(o instanceof z);)o=o.parent;if(n&&n instanceof z){let u=n;if(u&&o===u&&u.isMultiline){let[m,d]=[Math.min(t.position,t.anchor),Math.max(t.position,t.anchor)],[h,f]=t.at(m).parentBranch,[x,v]=t.at(d).parentBranch;if(x-h+1>=2)return t.deferNotifications({content:!0,selection:!0,type:r},()=>{var L;let _=u.getCell(h,f),S=u.getCell(x,v);if(!_||!S)return;t.extractAtoms([m,d]);let A=u.getCell(h,f),E=u.getCell(x,v);for(let K=x-1;K>h;K--)u.removeRow(K);if(h!==x){let K=u.getCell(h+1,f);if(A&&K){let $=[...A.filter(G=>G.type!==\"first\"),...K.filter(G=>G.type!==\"first\")];u.setCell(h,f,$),u.removeRow(h+1)}}let D=u.getCell(h,f);if(D){let K=A?A.filter($=>$.type!==\"first\").length:0;t.position=t.offsetOf((L=D[K])!=null?L:D[0])}else t.position=m;u.isDirty=!0})}}let a=i[0].parent.firstChild;a.type===\"first\"&&(a=a.rightSibling);let s=i[i.length-1].parent.lastChild,l=i[0];l.type===\"first\"&&(l=l.rightSibling);let c=i[i.length-1];if(l===a&&c===s){let u=i[0].parent;u.parent&&u.type!==\"prompt\"&&(e=[t.offsetOf(u.leftSibling),t.offsetOf(u)])}if(i.length===1&&i[0].type===\"placeholder\"&&i[0].parent.type===\"genfrac\"){let u=i[0].parent,m=i[0].parentBranch===\"below\"?\"above\":\"below\",d=t.offsetOf(u.leftSibling);return t.deferNotifications({content:!0,selection:!0,type:r},()=>{var f,x;let h=u.removeBranch(m);if(h.length===1&&h[0].type===\"placeholder\")(x=u.parent)==null||x.removeChild(u),t.position=Math.max(0,d);else{let v=u.parent.addChildrenAfter(h,u);(f=u.parent)==null||f.removeChild(u),t.position=t.offsetOf(v)}})}}return t.deferNotifications({content:!0,selection:!0,type:r},()=>{let n=new Map;if(i.length>0){let a=i[0],s=i[i.length-1],l=new Set,c=a.parent;for(;c;)(c.type===\"surd\"||c.type===\"box\"||c.type===\"enclose\"||c.type===\"leftright\"||c.type===\"genfrac\"||c.type===\"overunder\")&&c.parent&&l.add(c),c=c.parent;let u=new Set;for(c=s.parent;c;)(c.type===\"surd\"||c.type===\"box\"||c.type===\"enclose\"||c.type===\"leftright\"||c.type===\"genfrac\"||c.type===\"overunder\")&&c.parent&&u.add(c),c=c.parent;for(let m of i)for(c=m.parent;c;){if((c.type===\"surd\"||c.type===\"box\"||c.type===\"enclose\"||c.type===\"leftright\"||c.type===\"genfrac\"||c.type===\"overunder\")&&c.parent){n.has(c)||n.set(c,{containsStart:l.has(c),containsEnd:u.has(c)});break}c=c.parent}}let o=Math.min(...e);t.deleteAtoms(e);for(let[a,s]of n){if(!a.parent)continue;let l=s.containsStart!==s.containsEnd;if(a.type===\"surd\"||a.type===\"box\"||a.type===\"enclose\"||a.type===\"leftright\"){let c=a.branch(\"body\");if(!c||c.length===0||c.length===1&&c[0].type===\"placeholder\"){let m=t.offsetOf(a.leftSibling);a.parent.removeChild(a),t.position=Math.max(0,m)}else if(l&&!s.containsStart&&s.containsEnd){let m=t.offsetOf(a.leftSibling),d=a.removeBranch(\"body\");d&&d.length>0&&a.parent.addChildrenAfter(d,a),a.parent.removeChild(a),t.position=Math.max(0,m)}}if(a.type===\"genfrac\"){let c=a.branch(\"above\"),u=a.branch(\"below\"),m=!c||c.length===0||c.length===1&&c[0].type===\"placeholder\",d=!u||u.length===0||u.length===1&&u[0].type===\"placeholder\";if(m&&d){let h=t.offsetOf(a.leftSibling);a.parent.removeChild(a),t.position=Math.max(0,h)}else if(m&&!d){let h=t.offsetOf(a.leftSibling),f=a.removeBranch(\"below\");f&&f.length>0&&a.parent.addChildrenAfter(f,a),a.parent.removeChild(a),t.position=Math.max(0,h)}else if(!m&&d){let h=t.offsetOf(a.leftSibling),f=a.removeBranch(\"above\");f&&f.length>0&&a.parent.addChildrenAfter(f,a),a.parent.removeChild(a),t.position=Math.max(0,h)}else if(l&&!s.containsStart&&s.containsEnd&&!m&&!d){let h=t.offsetOf(a.leftSibling),f=a.removeBranch(\"above\");f&&f.length>0&&a.parent.addChildrenAfter(f,a),a.parent.removeChild(a),t.position=Math.max(0,h)}}}n.size===0&&(t.position=o),t.root.hasEmptyBranch(\"body\")&&t.mathfield.flushInlineShortcutBuffer()})}function Xg(t,e,r,i){if(!(e instanceof z)||!e.isMultiline||e.rows.length===1||e.rows[r].length>1)return!1;let n=e.getCell(r,0);if(!n)return!1;if(e.removeRow(r),i===\"backward\"){let o=e.getCell(r-1,0);if(!o)return t.position=t.offsetOf(e),!0;o.length>0?t.position=t.offsetOf(o[o.length-1]):t.position=t.offsetOf(e),e.setCell(r-1,0,[...o,...n])}else{let o=e.getCell(r,0);if(!o)return t.position=t.offsetOf(e),!0;o.length>0?t.position=t.offsetOf(o[0]):t.position=t.offsetOf(e),e.setCell(r,0,[...n,...o])}return!0}function Zg(t,e,r){var o,a;if(t.at(e).mode!==\"text\")return e;let i=r===\"backward\"?-1:1,n;if(Zr.test(t.at(e).value)){let s=e,l;do l=t.at(s).mode===\"text\"&&Zr.test(t.at(s).value),s+=i;while(t.at(s)&&l);n=t.at(s)?s-2*i:s-i}else if(/\\s/.test(t.at(e).value)){let s=e;for(;((o=t.at(s))==null?void 0:o.mode)===\"text\"&&/\\s/.test(t.at(s).value);)s+=i;if(!t.at(s))n=s-i;else{let l=!0;do l=t.at(s).mode===\"text\"&&!/\\s/.test(t.at(s).value),s+=i;while(t.at(s)&&l);n=t.at(s)?s-2*i:s-i}}else{let s=e;for(;((a=t.at(s))==null?void 0:a.mode)===\"text\"&&!/\\s/.test(t.at(s).value);)s+=i;n=t.at(s)?s:s-i;let l=!0;for(;t.at(s)&&l;)l=t.at(s).mode===\"text\"&&/\\s/.test(t.at(s).value),l&&(n=s),s+=i;n=t.at(s)?s-2*i:s-i}return n-(i>0?0:1)}function Mt(t,e,r){var a,s,l,c,u,m,d,h;let i=t.position;(a=r==null?void 0:r.extend)!=null&&a||t.collapseSelection(e);let n=t.at(t.position);if(e===\"forward\"&&(n.type===\"subsup\"?(n=n.rightSibling,n||(n=t.at(t.position+1))):n=t.at(t.position+1)),!n)return t.announce(\"plonk\"),!1;let o=t.offsetOf(n);if(n instanceof qe)o=Zg(t,o,e);else if(n instanceof pe)if(n.isSuggestion)for(;n&&n instanceof pe;)n.isSuggestion=!1,o=t.offsetOf(n),n=n.rightSibling;else if(e===\"forward\"){if(n=n.rightSibling,!n||!(n instanceof pe))return t.announce(\"plonk\"),!1;for(;n&&n instanceof pe&&/[a-zA-Z\\*]/.test(n.value);)o=t.offsetOf(n),n=n.rightSibling}else{if(n=n.leftSibling,!n||!(n instanceof pe))return t.announce(\"plonk\"),!1;for(;n&&n instanceof pe&&/[a-zA-Z\\*]/.test(n.value);)o=t.offsetOf(n),n=n.leftSibling}else if(e===\"forward\"&&n.type===\"mopen\"){let f=0;do n.type===\"mopen\"?f+=1:n.type===\"mclose\"&&(f-=1),n=n.rightSibling;while(!n.isLastSibling&&f!==0);o=t.offsetOf(n.leftSibling)}else if(e===\"backward\"&&n.type===\"mclose\"){let f=0;do n.type===\"mopen\"?f+=1:n.type===\"mclose\"&&(f-=1),n=n.leftSibling;while(!n.isFirstSibling&&f!==0);o=t.offsetOf(n)}else if(e===\"backward\")if(n.type===\"first\")for(;o>0&&n.type===\"first\";)o-=1,n=t.at(o);else{let f=n.type;n.type===\"subsup\"&&(o=t.offsetOf(t.at(o).leftSibling)),o-=1;let x=(s=t.at(o))==null?void 0:s.type;for(;o>=0&&x===f;)((l=t.at(o))==null?void 0:l.type)===\"subsup\"?o=t.offsetOf(t.at(o).leftSibling):o-=1,x=t.at(o).type}else{let{type:f}=n,x=(c=t.at(o))==null?void 0:c.type,{lastOffset:v}=t;for(;o<=v&&(x===f||x===\"subsup\");){for(;((u=t.at(o).rightSibling)==null?void 0:u.type)===\"subsup\";)o=t.offsetOf(t.at(o).rightSibling);o+=1,x=(m=t.at(o))==null?void 0:m.type}o-=1}if((d=r==null?void 0:r.extend)!=null&&d){if(!t.setSelection(t.anchor,o))return t.announce(\"plonk\"),!1;t.announce(\"move\",i)}else{if(o===t.position)return t.announce(\"plonk\"),!1;(h=r==null?void 0:r.delete)!=null&&h?e===\"forward\"?at(t,[i,o],\"deleteWordForward\"):(at(t,[i,o],\"deleteWordBackward\"),t.position=o):(t.position=o,t.announce(\"move\",i))}return t.mathfield.stopCoalescingUndo(),!0}function st(t,e,r){var o,a;if(r=r!=null?r:{extend:!1},t.mathfield.styleBias=e===\"backward\"?\"right\":\"left\",e!==\"forward\"){let[s,l]=is(t);s!==void 0&&l!==void 0&&t.deleteAtoms([s,l])}if(e===\"upward\")return Qg(t,r);if(e===\"downward\")return eb(t,r);if(r.extend){let s=ys(t,t.position,e);s<0&&(s=0),s>t.lastOffset&&(s=t.lastOffset);let l=t.setSelection(t.anchor,s);return t.mathfield.stopCoalescingUndo(),l}if(t.selectionIsPlaceholder){t.collapseSelection(e);let s=st(t,e);return t.mathfield.stopCoalescingUndo(),s}let i=t.position,n=i;if(t.collapseSelection(e)?(i=t.position,Ip(t,i)||(i=ys(t,i,e))):i=ys(t,i,e),i<0||i>t.lastOffset){let s=!0;return t.silenceNotifications||(s=(a=(o=t.mathfield.host)==null?void 0:o.dispatchEvent(new CustomEvent(\"move-out\",{detail:{direction:e},cancelable:!0,bubbles:!0,composed:!0})))!=null?a:!0),s&&t.announce(\"plonk\"),s}return t.setPositionHandlingPlaceholder(i),t.mathfield.stopCoalescingUndo(),t.announce(\"move\",n),!0}function ys(t,e,r){return e=e+(r===\"forward\"?1:-1),e<0||e>t.lastOffset||Ip(t,e)?e:ys(t,e,r)}function Ip(t,e){var n;let r=t.at(e),i=r.parent;for(;i&&!i.inCaptureSelection;)i=i.parent;return!(i!=null&&i.inCaptureSelection||(n=r.parent)!=null&&n.skipBoundary&&(!r.isFirstSibling&&r.isLastSibling||r.type===\"first\")||t.mathfield.hasEditablePrompts&&!r.parentPrompt)}function Yg(t,e,r){let i=1/0,n=0;for(;n<e.length;n++){let o=e[n],a=t.getHTMLElement(o);if(!a)continue;let s=rc(a).right,l=Math.abs(r-s);if(l<=i)i=l;else break}return e[n-1]}function xs(t,e,r,i,n){let o=t.mathfield.hasEditablePrompts,a=o?r.filter(c=>c.type===\"prompt\"&&!c.captureSelection):r,s=rc(t.mathfield.getHTMLElement(e)).right,l=t.offsetOf(Yg(t.mathfield,a,s))-(o?1:0);if(i){let[c,u]=t.selection.ranges[0],m;l<(n===\"up\"?c:u)?m={ranges:[[l,u]],direction:\"backward\"}:m={ranges:[[c,l]],direction:\"forward\"},t.setSelection(m)}else t.setPositionHandlingPlaceholder(l);t.announce(`move ${n}`)}function Qg(t,e){var a,s;let r=(a=e==null?void 0:e.extend)!=null?a:!1;r||t.collapseSelection(\"backward\");let i=()=>{var c,u;let l=!0;return t.silenceNotifications||(l=(u=(c=t.mathfield.host)==null?void 0:c.dispatchEvent(new CustomEvent(\"move-out\",{detail:{direction:\"upward\"},cancelable:!0,bubbles:!0,composed:!0})))!=null?u:!0),t.announce(l?\"line\":\"plonk\"),l},n=t.at(t.position),o=n;for(;o&&o.parentBranch!==\"below\"&&!(Array.isArray(o.parentBranch)&&o.parent instanceof z);)o=o.parent;if(Array.isArray(o==null?void 0:o.parentBranch)&&o.parent instanceof z){let l=o.parent;if(o.parentBranch[0]<1)return i();let c=o.parentBranch[0]-1,u=l.getCell(c,o.parentBranch[1]);if(!u.some(d=>d.type===\"prompt\"&&!d.captureSelection)&&t.mathfield.hasEditablePrompts)return i();xs(t,n,u,r,\"up\")}else if(o){let l=(s=o.parent.branch(\"above\"))!=null?s:o.parent.createBranch(\"above\");if(!l.some(u=>u.type===\"prompt\"&&u.placeholderId)&&t.mathfield.hasEditablePrompts)return i();xs(t,n,l,r,\"up\")}else return i();return t.mathfield.stopCoalescingUndo(),!0}function eb(t,e){var a,s;let r=(a=e==null?void 0:e.extend)!=null?a:!1;r||t.collapseSelection(\"forward\");let i=()=>{var c,u;let l=!0;return t.silenceNotifications||(l=(u=(c=t.mathfield.host)==null?void 0:c.dispatchEvent(new CustomEvent(\"move-out\",{detail:{direction:\"downward\"},cancelable:!0,bubbles:!0,composed:!0})))!=null?u:!0),t.announce(l?\"line\":\"plonk\"),l},n=t.at(t.position),o=n;for(;o&&o.parentBranch!==\"above\"&&!(Ge(o.parentBranch)&&o.parent instanceof z);)o=o.parent;if(Ge(o==null?void 0:o.parentBranch)&&o.parent instanceof z){let l=o.parent;if(o.parentBranch[0]+1>l.rows.length-1)return i();let c=o.parentBranch[0]+1,u=l.getCell(c,o.parentBranch[1]);if(!u.some(d=>d.type===\"prompt\"&&!d.captureSelection)&&t.mathfield.hasEditablePrompts)return i();xs(t,n,u,r,\"down\")}else if(o){let l=(s=o.parent.branch(\"below\"))!=null?s:o.parent.createBranch(\"below\");if(!l.some(u=>u.type===\"prompt\")&&t.mathfield.hasEditablePrompts)return i();xs(t,n,l,r,\"down\")}else return i();return!0}function Sc(t){let e=t.position,r=t.at(e).parent;return r!=null&&r.parent?(t.position=t.offsetOf(r),t.mathfield.stopCoalescingUndo(),t.announce(\"move\",e),!0):(t.announce(\"plonk\"),!1)}function tb(t){let e=0,r=t.at(t.position),i=!1;for(;r;)r.hasEmptyBranch(\"superscript\")?r.hasEmptyBranch(\"subscript\")||(i=!1):(e+=1,i=!0),r=r.parent;return i?e:0}function rb(t){let e=0,r=t.at(t.position),i=!1;for(;r;)r.hasEmptyBranch(\"subscript\")?r.hasEmptyBranch(\"superscript\")||(i=!1):(e+=1,i=!0),r=r.parent;return i?e:0}function zp(t){if(t.collapseSelection(),tb(t)>=t.mathfield.options.scriptDepth[1])return t.announce(\"plonk\"),!1;let e=t.at(t.position);if(e.subsupPlacement===void 0){let r=e.rightSibling;(r==null?void 0:r.type)!==\"subsup\"&&(r=new sr({style:e.style}),e.parent.addChildAfter(r,e)),e=r}return e.createBranch(\"superscript\"),t.setSelection(t.getSiblingsRange(t.offsetOf(e.superscript[0]))),!0}function Np(t){if(t.collapseSelection(),rb(t)>=t.mathfield.options.scriptDepth[0])return t.announce(\"plonk\"),!1;let e=t.at(t.position);if(e.subsupPlacement===void 0){let r=e.rightSibling;(r==null?void 0:r.type)!==\"subsup\"&&(r=new sr({style:e.style}),e.parent.addChildAfter(r,e)),e=r}return e.createBranch(\"subscript\"),t.setSelection(t.getSiblingsRange(t.offsetOf(e.subscript[0]))),!0}function ib(){function t(l){let c=[],u=[];return[...l.querySelectorAll(`input, select, textarea, a[href], button,\n        [tabindex], audio[controls], video[controls],\n        [contenteditable]:not([contenteditable=\"false\"]), details>summary`)].filter(e).forEach((d,h)=>{let f=i(d);f===0?c.push(d):u.push({documentOrder:h,tabIndex:f,node:d})}),u.sort((d,h)=>d.tabIndex===h.tabIndex?d.documentOrder-h.documentOrder:d.tabIndex-h.tabIndex).map(d=>d.node).concat(c)}function e(l){return!(!r(l)||n(l)||i(l)<0)}function r(l){return!(l.disabled||l.type===\"hidden\"&&l.tagName.toUpperCase()===\"INPUT\"||s(l))}function i(l){var u;let c=Number.parseInt((u=l.getAttribute(\"tabindex\"))!=null?u:\"NaN\",10);return Number.isNaN(c)?l.contentEditable===\"true\"||(l.nodeName===\"AUDIO\"||l.nodeName===\"VIDEO\")&&l.getAttribute(\"tabindex\")===null?0:l.tabIndex:c}function n(l){return l.tagName.toUpperCase()===\"INPUT\"&&l.type===\"radio\"&&!a(l)}function o(l,c){for(let u of l)if(u.checked&&u.form===c)return u;return null}function a(l){var d;if(!l.name)return!0;let u=((d=l.form)!=null?d:l.ownerDocument).querySelectorAll('input[type=\"radio\"][name=\"'+l.name+'\"]'),m=o(u,l.form);return!m||m===l}function s(l){if(!ke()||l===document.activeElement||l.contains(document.activeElement))return!1;if(getComputedStyle(l).visibility===\"hidden\")return!0;let c=l.getBoundingClientRect();if(c.width===0||c.height===0)return!0;for(;l;){if(getComputedStyle(l).display===\"none\")return!0;l=l.parentElement}return!1}return ke()?t(document.body):[]}function Oe(t,e,r=\"forward\"){let i=t.position;if(ee(e)){let n=t.offsetOf(e[0]),o=t.offsetOf(e[e.length-1]);return r===\"forward\"?t.setSelection(n,o):t.setSelection(o,n),t.announce(\"move\",i),t.mathfield.stopCoalescingUndo(),!0}return r===\"forward\"?Oe(t,[e.leftSibling,e]):Oe(t,[e,e.leftSibling])}function wt(t,e){let r=t.position;if(typeof e==\"number\"&&(e=t.at(e)),e.type===\"prompt\")t.setSelection(t.offsetOf(e.firstChild),t.offsetOf(e.lastChild));else{let i=t.offsetOf(e);e.type===\"placeholder\"?t.setSelection(i-1,i):t.position=i}return t.announce(\"move\",r),t.mathfield.stopCoalescingUndo(),!0}function wn(t,e){var a,s;let r=e===\"forward\"?1:-1;t.at(t.anchor).type===\"placeholder\"&&st(t,e);let i,n=t.at(t.anchor).parentPrompt;n?e===\"forward\"?i=t.offsetOf(n)+1:i=t.offsetOf(n.leftSibling):i=Math.max(t.position+r,0);let o=wc(t,i,e);if(!o||e===\"forward\"&&t.offsetOf(o)<i||e===\"backward\"&&t.offsetOf(o)>i){if(!((s=(a=t.mathfield.host)==null?void 0:a.dispatchEvent(new CustomEvent(\"move-out\",{detail:{direction:e},cancelable:!0,bubbles:!0,composed:!0})))!=null?s:!0))return t.announce(\"plonk\"),!1;let c=ib();if(!document.activeElement||c.length<=1)return t.announce(\"plonk\"),!1;let u=c.indexOf(document.activeElement)+r;return u<0&&(u=c.length-1),u>=c.length&&(u=0),c[u].focus(),t.mathfield.stopCoalescingUndo(),!0}return wt(t,o),!0}function wc(t,e=0,r=\"forward\"){return t.findAtom(i=>i.type===\"placeholder\"||i.type===\"prompt\"||!t.mathfield.readOnly&&i.treeDepth>2&&i.isFirstSibling&&i.isLastSibling,e,r)}fe({moveToOpposite:t=>{let e={superscript:\"subscript\",subscript:\"superscript\",above:\"below\",below:\"above\"},r=t.at(t.position),{parent:i}=r;if(!i)return t.announce(\"plonk\"),!1;let n=r.parentBranch,o;if(typeof n==\"string\"&&(o=e[n]),!o){let s=r.subsupPlacement?Np(t):zp(t);return t.mathfield.stopCoalescingUndo(),s}i.branch(o)||i.createBranch(o);let a=t.setSelection(t.getBranchRange(t.offsetOf(i),o));return t.mathfield.stopCoalescingUndo(),a},moveBeforeParent:t=>{let{parent:e}=t.at(t.position);return e?(t.position=t.offsetOf(e),t.mathfield.stopCoalescingUndo(),!0):(t.announce(\"plonk\"),!1)},moveAfterParent:t=>Sc(t),moveToNextChar:t=>st(t,\"forward\"),moveToPreviousChar:t=>st(t,\"backward\"),moveUp:t=>st(t,\"upward\"),moveDown:t=>st(t,\"downward\"),moveToNextWord:t=>Mt(t,\"forward\"),moveToPreviousWord:t=>Mt(t,\"backward\"),moveToGroupStart:t=>{let e=t.offsetOf(t.at(t.position).firstSibling);return e===t.position?(t.announce(\"plonk\"),!1):(t.position=e,t.mathfield.stopCoalescingUndo(),!0)},moveToGroupEnd:t=>{let e=t.offsetOf(t.at(t.position).lastSibling);return e===t.position?(t.announce(\"plonk\"),!1):(t.position=e,t.mathfield.stopCoalescingUndo(),!0)},moveToNextGroup:t=>{var l,c,u,m;if(t.position===t.lastOffset&&t.anchor===t.lastOffset)return wn(t,\"forward\");let e=t.at(t.position);if(e.mode===\"text\"){if(t.selectionIsCollapsed){let d=e;for(;(d==null?void 0:d.mode)===\"text\";)d=d.leftSibling;let h=e;for(;((l=h.rightSibling)==null?void 0:l.mode)===\"text\";)h=h.rightSibling;if(d&&h)return Oe(t,[d,h])}if(e.rightSibling.mode===\"text\"){let d=e;for(;(d==null?void 0:d.mode)===\"text\";)d=d.rightSibling;return d?(wt(t,(c=d.leftSibling)!=null?c:d),t.mathfield.switchMode(\"math\"),!0):wt(t,t.lastOffset)}}let i=t.at(t.anchor).parentPrompt,n=i?t.offsetOf(i)+1:Math.max(t.position+1,0),o=wc(t,n,\"forward\");if(o&&t.offsetOf(o)<n)return wn(t,\"forward\");if(o)return wt(t,o);let a=Fp(t,e,d=>d.type===\"leftright\"||d.type===\"text\",\"forward\");if(a){if(a.mode===\"text\"){let d=a;for(;(d==null?void 0:d.mode)===\"text\";)d=d.rightSibling;return Oe(t,[(u=a.leftSibling)!=null?u:a,(m=d.leftSibling)!=null?m:d])}return Oe(t,a)}let s=e.parent;if(s){if(s.type===\"leftright\"||s.type===\"surd\")return Oe(t,s);if(e.parentBranch===\"superscript\"&&s.subscript)return Oe(t,s.subscript);if(e.parentBranch===\"above\"&&s.below)return Oe(t,s.below);if(e.parentBranch===\"superscript\"||e.parentBranch===\"subscript\")return wt(t,s);if(e.parentBranch===\"above\"||e.parentBranch===\"below\")return Oe(t,s)}return wt(t,t.lastOffset)},moveToPreviousGroup:t=>{var a;if(t.position===0&&t.anchor===0)return wn(t,\"backward\");let e=t.at(t.position),r=e.mode;if(r===\"text\"){if(t.selectionIsCollapsed){let s=e;for(;(s==null?void 0:s.mode)===\"text\";)s=s.leftSibling;let l=e;for(;((a=l.rightSibling)==null?void 0:a.mode)===\"text\";)l=l.rightSibling;if(s&&l)return Oe(t,[s,l])}for(;(e==null?void 0:e.mode)===\"text\";)e=e.leftSibling;return e?wt(t,e):wt(t,0)}let i=t.at(t.anchor).parentPrompt,n=i?t.offsetOf(i.leftSibling):Math.max(t.position-1,0),o=wc(t,n,\"backward\");if(o&&t.offsetOf(o)>n)return wn(t,\"backward\");if(o)return wt(t,o);if(r===\"math\"){let s=Fp(t,e,c=>c.type===\"leftright\"||c.type===\"text\",\"backward\");if(s){if(s.mode===\"text\"){let c=s;for(;(c==null?void 0:c.mode)===\"text\";)c=c.leftSibling;return Oe(t,[s,c])}return Oe(t,s)}let l=e.parent;if(l){if(l.type===\"leftright\"||l.type===\"surd\")return Oe(t,l);if(e.parentBranch===\"subscript\"&&l.superscript)return Oe(t,l.superscript);if(e.parentBranch===\"below\"&&l.above)return Oe(t,l.above);if(e.parentBranch===\"superscript\"||e.parentBranch===\"subscript\")return wt(t,l);if(e.parentBranch===\"above\"||e.parentBranch===\"below\")return Oe(t,l)}return wt(t,0)}return!1},moveToMathfieldStart:t=>t.selectionIsCollapsed&&t.position===0?(t.announce(\"plonk\"),!1):(t.position=0,t.mathfield.stopCoalescingUndo(),!0),moveToMathfieldEnd:t=>t.selectionIsCollapsed&&t.position===t.lastOffset?(t.announce(\"plonk\"),!1):(t.position=t.lastOffset,t.mathfield.stopCoalescingUndo(),!0),moveToSuperscript:zp,moveToSubscript:Np},{target:\"model\",changeSelection:!0});fe({moveToNextPlaceholder:t=>wn(t,\"forward\"),moveToPreviousPlaceholder:t=>wn(t,\"backward\")},{target:\"model\",changeSelection:!0,audioFeedback:\"return\"});function Fp(t,e,r,i){if(i===\"forward\"){let o=e.rightSibling;for(;o&&!r(o);)o=o.rightSibling;return o}let n=e.leftSibling;for(;n&&!r(n);)n=n.leftSibling;return n}function vs(t,e,r){typeof e==\"function\"&&(r=e,e=1/0),e===void 0&&(e=1/0);let i=t.position,n=!1,o=\"\";for(;!n;){let a=t.at(i);n=e===0||a===void 0||a.type===\"first\"||a.mode!==\"math\"||!(a.type&&/mord|mpunct|operator/.test(a.type)||a.type===\"mop\"&&/[a-zA-Z ]+/.test(a.value))||!a.hasEmptyBranch(\"superscript\")||!a.hasEmptyBranch(\"subscript\")||typeof r==\"function\"&&!r(a),n||(a.mode=\"text\",a.command=a.value,a.verbatimLatex=void 0,o+=a.value),i-=1,e-=1}t.contentDidChange({data:o,inputType:\"insertText\"})}function vi(t,e,r){typeof e==\"function\"&&(r=e,e=1/0),e===void 0&&(e=1/0);let i=t.position,n=!1,o=[];for(;!n;){let a=t.at(i);n=e===0||!a||a.type===\"first\"||a.isFirstSibling||a.mode!==\"text\"||a.value===\" \"||typeof r==\"function\"&&!r(a),n||(o.push(y.serialize([a],{defaultMode:\"math\"})),a.mode=\"math\"),i-=1,e-=1}_s(t),t.contentDidChange({data:P(o),inputType:\"insertText\"})}function _s(t){var r;let e=t.position-1;for(;e>=0&&((r=t.at(e))==null?void 0:r.mode)===\"math\";)e-=1;if(!(e<0)&&t.at(e).mode===\"text\"&&t.at(e).value===\" \"&&t.at(e-1).mode===\"math\"){t.at(e-1).parent.removeChild(t.at(e-1));let i=t.silenceNotifications;t.silenceNotifications=!0,t.position-=1,t.silenceNotifications=i,t.contentDidChange({inputType:\"deleteContent\"})}}function nb(t){let e=\"\",r=t.position,i=!1;for(;!i;){let n=t.at(r);i=!(n&&(n.mode===\"text\"||n.mode===\"math\"&&n.type&&/mord|mpunct/.test(n.type))),i||(e=n.value+e),r-=1}return e}function $p(t,e,r){let{model:i}=t;if(i.mode===\"latex\"||!i.at(i.position).isLastSibling||!r||!cr(r))return!1;let n=zr(r);if(!i.selectionIsCollapsed)return!!(t.model.mode===\"text\"&&/[/_^]/.test(n));let o=nb(i)+n;if(t.model.mode===\"text\"){if(e===\"Esc\"||/[/\\\\]/.test(n))return!0;if(/[\\^_]/.test(n))return/(^|\\s)[a-zA-Z][^_]$/.test(o)&&vi(i,1),!0;let a={\")\":\"(\",\"}\":\"{\",\"]\":\"[\"}[n],{parent:s}=i.at(i.position);if(a&&s instanceof Y&&s.leftDelim===a)return!0;if(/(^|[^a-zA-Z])(a|I) $/.test(o))return!1;if(/[$€£₤₺¥¤฿¢₡₧₨₹₩₱]/u.test(n))return!0;if(/(^|[^a-zA-Z'’])[a-zA-Z] $/.test(o))return vi(i,1),!1;if(/\\D\\.[^\\d\\s]$/.test(o)){vi(i,1);let l=i.at(i.position);return l.value=\"\\u22C5\",l.style.variant=\"normal\",l.command=\"\\\\cdot\",l.verbatimLatex=void 0,i.contentDidChange({data:\"\\\\cdot\",inputType:\"insertText\"}),!0}if(/(^|\\s)[a-zA-Z][^a-zA-Z]$/.test(o)||/\\.\\d$/.test(o)||/\\([\\d+\\-.]$/.test(o))return vi(i,1),!0;if(/\\([a-z][,;]$/.test(o))return vi(i,2),!0;if(/[\\d+\\-=><*|]$/.test(n))return _s(i),!0}else{if(e===\"[Space]\")return vs(i,void 0,a=>/[a-z][:,;.]$/.test(a.value)),!0;if(/[a-zA-Z]{3,}$/.test(o)&&!/(dxd|abc|xyz|uvw)$/.test(o))return vs(i,void 0,a=>/[a-zA-Z]/.test(a.value)),!0;if(/(^|\\W)(if)$/i.test(o))return vs(i,1),!0;if(/(\\u0393|\\u0394|\\u0398|\\u039B|\\u039E|\\u03A0|\\u03A3|\\u03A5|\\u03A6|\\u03A8|\\u03A9|[\\u03B1-\\u03C9]|\\u03D1|\\u03D5|\\u03D6|\\u03F1|\\u03F5){3,}$/u.test(o)&&!/(αβγ)$/.test(o))return vs(i,void 0,a=>/(:|,|;|.|\\u0393|\\u0394|\\u0398|\\u039B|\\u039E|\\u03A0|\\u03A3|\\u03A5|\\u03A6|\\u03A8|\\u03A9|[\\u03B1-\\u03C9]|\\u03D1|\\u03D5|\\u03D6|\\u03F1|\\u03F5)/u.test(a.value)),!0;if(n===\"?\"||n===\".\"&&!/[\\d-+]\\.$/.test(o))return!0}return!1}function Vp(t,e){if(!t.isSelectionEditable||!t.keystrokeCaptionVisible)return;let r=Hp(),i=t.element.getBoundingClientRect();r.style.left=`${i.left}px`,r.style.top=`${i.top-64}px`,r.innerHTML=globalThis.MathfieldElement.createHTML(\"<span>\"+(pn(e)||e)+\"</span>\"+r.innerHTML),r.style.visibility=\"visible\",setTimeout(()=>{r.childNodes.length>0&&r.childNodes[r.childNodes.length-1].remove(),r.childNodes.length===0&&(r.style.visibility=\"hidden\")},3e3)}function qp(t){if(t.keystrokeCaptionVisible=!t.keystrokeCaptionVisible,t.keystrokeCaptionVisible){let e=Hp();e.innerHTML=\"\"}else{let e=bi(\"mathlive-keystroke-caption-panel\");e.style.visibility=\"hidden\"}return!1}function Hp(){let t=document.getElementById(\"mathlive-keystroke-caption-panel\");return t||(We(\"keystroke-caption\"),We(\"core\"),bi(\"mathlive-keystroke-caption-panel\"))}function Wp(){document.getElementById(\"mathlive-keystroke-caption-panel\")&&($r(\"mathlive-keystroke-caption-panel\"),nt(\"core\"),nt(\"keystroke-caption\"))}function Ac(t,e){var d,h,f,x;let{model:r}=t,i=rs(e);if(e.isTrusted){xu(e);let v=gr();t.keyboardLayout!==v.id&&(t.keyboardLayout=v.id,t._keybindings=void 0)}if(clearTimeout(t.inlineShortcutBufferFlushTimer),t.inlineShortcutBufferFlushTimer=0,Vp(t,i),e.isTrusted&&e.defaultPrevented)return t.flushInlineShortcutBuffer(),!1;let n,o=0,a=\"\",s=0,l=t.inlineShortcutBuffer,c=!1;if(t.isSelectionEditable&&r.selectionIsPlaceholder&&cr(e)&&(t.flushInlineShortcutBuffer(),r.deleteAtoms(de(r.selection)),t.snapshot(\"delete\"),c=!0),t.isSelectionEditable){if(r.mode===\"math\"&&(!r.selectionIsPlaceholder||c))if(i===\"[Backspace]\")t.undoManager.lastOp===\"insert-shortcut\"?a=\"undo\":l.pop();else if(!cr(e))t.flushInlineShortcutBuffer();else{let v=zr(e),b=[...(h=(d=l[l.length-1])==null?void 0:d.keystrokes)!=null?h:[],v];l.push({state:r.getState(),keystrokes:b,leftSiblings:sb(t)}),o=0;let _=\"\";for(;!n&&o<b.length;)s=l.length-(b.length-o),_=b.slice(o).join(\"\"),n=Yn(l[s].leftSiblings,_,t.options.inlineShortcuts),!n&&/^[a-zA-Z][a-zA-Z0-9]+?([_\\^][a-zA-Z0-9\\*\\+\\-]+?)?$/.test(_)&&(n=t.options.onInlineShortcut(t,_)),o+=1;t.flushInlineShortcutBuffer({defer:!0})}t.options.smartMode&&(n?t.switchMode(\"math\"):$p(t,i,e)&&(t.switchMode({math:\"text\",text:\"math\"}[r.mode]),a=\"\"))}if(!n){if(a||(a=bp(t.keybindings,r.mode,e)),!a&&(i===\"[Enter]\"||i===\"[Return]\")){let v=!0;return r.contentWillChange({inputType:\"insertLineBreak\"})&&(t.host&&(v=t.host.dispatchEvent(new Event(\"change\",{bubbles:!0,composed:!0}))),!v&&e.preventDefault?(e.preventDefault(),e.stopPropagation()):((f=r.parentEnvironment)!=null&&f.isMultiline&&t.executeCommand(\"addRowAfter\"),r.contentDidChange({inputType:\"insertLineBreak\"}))),v}if(i===\"[Space]\"&&r.mode===\"latex\"&&Xe(t,\"accept-all\"))return t.dirty=!0,t.scrollIntoView(),e.preventDefault&&(e.preventDefault(),e.stopPropagation()),!1;if((!a||i===\"[Space]\")&&r.mode===\"math\"){if(i===\"[Space]\"){if(t.styleBias=\"none\",t.flushInlineShortcutBuffer(),t.options.mathModeSpace)return q.insert(r,t.options.mathModeSpace,{format:\"latex\",mode:\"math\"}),t.snapshot(\"insert-space\"),a=\"\",t.dirty=!0,t.scrollIntoView(),e.preventDefault&&(e.preventDefault(),e.stopPropagation()),!1;let v=r.at(r.position+1),b=r.at(r.position-1);if((v==null?void 0:v.mode)===\"text\"||(b==null?void 0:b.mode)===\"text\")return q.insert(r,\" \",{mode:\"text\"}),t.snapshot(\"insert-space\"),t.dirty=!0,t.scrollIntoView(),!1}(x=r.at(r.position))!=null&&x.isDigit()&&globalThis.MathfieldElement.decimalSeparator===\",\"&&zr(e)===\",\"&&(a=\"insertDecimalSeparator\")}}if(!n&&!a){if(r.mathfield.smartFence){if(Lc(r,zr(e),Ht(t)))return t.dirty=!0,t.scrollIntoView(),e.preventDefault&&e.preventDefault(),!1}else{let{parent:v}=r.at(r.position);if(v instanceof Y&&v.rightDelim===\"?\"&&r.at(r.position).isLastSibling&&/^[)}\\]|]$/.test(i))return t.snapshot(),v.isDirty=!0,v.rightDelim=i,r.position+=1,r.selectionDidChange(),r.contentDidChange({data:zr(e),inputType:\"insertText\"}),t.snapshot(\"insert-fence\"),t.dirty=!0,t.scrollIntoView(),e.preventDefault&&e.preventDefault(),!1;if(!r.selectionIsCollapsed){let b=zr(e);if(b===\"(\"||b===\"{\"||b===\"[\"){let _={\"(\":\"(\",\"{\":\"\\\\lbrace\",\"[\":\"\\\\lbrack\"}[b],S={\"(\":\")\",\"{\":\"\\\\rbrace\",\"[\":\"\\\\rbrack\"}[b],[A,E]=de(r.selection);return t.snapshot(),r.position=E,q.insert(r,S,{format:\"latex\"}),r.position=A,q.insert(r,_,{format:\"latex\"}),r.setSelection(A+1,E+1),r.contentDidChange({data:b,inputType:\"insertText\"}),t.snapshot(\"insert-fence\"),t.dirty=!0,t.scrollIntoView(),e.preventDefault&&e.preventDefault(),!1}}}return!0}let u=r.at(Math.max(r.position,r.anchor)),{parent:m}=u;if(a===\"moveAfterParent\"&&(m==null?void 0:m.type)===\"leftright\"&&u.isLastSibling&&t.options.smartFence&&Lc(r,\".\",t.defaultStyle)&&(a=\"\",J(t)),t.keyboardDelegate.cancelComposition(),a)t.executeCommand(a);else if(n){let v=Ht(t);r.setState(l[s].state);let b=l[l.length-1].keystrokes;b=b.slice(o-1);for(let _ of b)q.insert(r,_,{silenceNotifications:!0,style:v});t.snapshot(\"insert-shortcut\"),r.setState(l[s].state),r.deferNotifications({content:!0,selection:!0,data:n,type:\"insertText\"},()=>(q.insert(r,n,{format:\"latex\",style:v}),_s(t.model),n.endsWith(\" \")&&(t.switchMode(\"text\"),q.insert(r,\" \",{style:v,mode:\"text\"})),t.snapshot(),r.selectionIsCollapsed||t.flushInlineShortcutBuffer(),!0)),t.dirty=!0,r.announce(\"replacement\")}return t.scrollIntoView(),e.preventDefault&&e.preventDefault(),!1}function ob(t){var h,f;let{position:e}=t,r=e,i=[];for(;r>0;){let x=t.at(r),v=x.value;if(x.type===\"mord\"||x.type===\"mbin\"&&(v===\"+\"||v===\"-\"||v===\"\\u2212\"))i.unshift(x),r--;else break}if(i.length===0)return null;let n=i.map(x=>x.value).join(\"\"),a=((f=(h=globalThis.MathfieldElement)==null?void 0:h.decimalSeparator)!=null?f:\".\")===\".\"?\"\\\\.\":\",\",s=new RegExp(`^(\\\\d+(?:${a}\\\\d*)?)[eE]([+\\\\-\\u2212]?)(\\\\d+)$`),l=n.match(s);if(!l)return null;let c=l[1],u=l[2],m=l[3],d=u+m;return{startOffset:r,endOffset:e,significand:c,exponent:d}}function ab(t,e){var n;let r=(n=globalThis.MathfieldElement)==null?void 0:n.scientificNotationTemplate;if(!r||r===\"\"||!r.includes(\"#1\")||!r.includes(\"#2\"))return null;let i=r.replace(\"#1\",t);return i=i.replace(\"#2\",e),i}function Up(t){let{model:e}=t;if(e.mode!==\"math\")return!1;let r=ob(e);if(!r)return!1;let i=ab(r.significand,r.exponent);return i?(e.deferNotifications({content:!0,selection:!0,type:\"insertText\"},()=>{e.selection={ranges:[[r.startOffset,r.endOffset]],direction:\"forward\"},q.insert(e,i,{insertionMode:\"replaceSelection\",selectionMode:\"after\"})}),t.snapshot(\"format-scientific-notation\"),t.dirty=!0,t.scrollIntoView(),!0):!1}function xo(t,e,r){let{model:i}=t;if(!t.isSelectionEditable){i.announce(\"plonk\");return}r!=null||(r={}),r.focus&&t.focus(),r.feedback&&globalThis.MathfieldElement.playSound(\"keypress\"),typeof r.mode==\"string\"&&(t.switchMode(r.mode),t.snapshot());let n=Ba(e),o=window.mathVirtualKeyboard;if(o!=null&&o.isShifted&&(n=typeof n==\"string\"?n.toUpperCase():n.map(a=>a.toUpperCase())),r.simulateKeystroke){let a=!0;for(let s of n)Ac(t,new KeyboardEvent(\"keypress\",{key:s}))&&(a=!1);if(a)return}if(i.mode===\"latex\"){if(i.deferNotifications({content:!0,selection:!0,data:e,type:\"insertText\"},()=>{gi(t);for(let a of n)q.insert(i,a,{insertionMode:\"replaceSelection\"});t.snapshot(\"insert-latex\"),Fr(t)}),e===\"}\"){let s=fi(i).map(c=>c.value).join(\"\"),l=s.match(/^\\\\([a-zA-Z]+)/);if(l){let c=\"\\\\\"+l[1],u=ne(c,\"math\");if((u==null?void 0:u.definitionType)===\"function\"){let m=u.params.filter(d=>!d.isOptional).length;if(m>0){let d=0,h=0,f=!0;for(let x=0;x<s.length;x++){let v=s[x];if(f){if(v===\"\\\\\"||/[a-zA-Z]/.test(v))continue;f=!1}v===\"{\"?d++:v===\"}\"&&(d--,d===0&&h++)}if(d===0&&h===m&&Xe(t,\"accept-all\")){t.dirty=!0,t.scrollIntoView();return}}}}}}else if(i.mode===\"text\"){let a=p(p({},cb(i)),t.defaultStyle);for(let s of n)q.insert(i,s,{style:a,insertionMode:\"replaceSelection\"});t.snapshot(\"insert-text\")}else if(i.mode===\"math\")for(let a of n)lb(t,a);t.dirty=!0,t.scrollIntoView()}function sb(t){let e=t.model,r=[],i=e.at(Math.min(e.position,e.anchor));for(;i.type!==\"first\";)r.push(i),i=i.leftSibling;return r}function lb(t,e){let r=t.model;/\\d/.test(e)||Up(t);let i={\"^\":\"moveToSuperscript\",_:\"moveToSubscript\",\" \":t.options.mathModeSpace?[\"insert\",t.options.mathModeSpace]:\"moveAfterParent\"}[e];if(i){t.executeCommand(i);return}let n=p({},Ht(t));!/[a-zA-Z0-9]/.test(e)&&t.styleBias!==\"none\"&&(n.variant=\"normal\",n.variantStyle=void 0);let o=r.at(r.position),a=r.selectionIsPlaceholder;if(/\\d/.test(e)&&t.options.smartSuperscript&&o.parentBranch===\"superscript\"&&o.parent.type!==\"mop\"&&o.parent.type!==\"operator\"&&o.parent.type!==\"extensible-symbol\"&&o.hasNoSiblings){if(!q.insert(r,e,{style:n,insertionMode:\"replaceSelection\",selectionMode:a?\"after\":\"placeholder\"})){t.undoManager.pop();return}t.snapshot(\"insert-mord\"),Sc(r);return}let s=e;if(s===\"{\"?s=\"\\\\lbrace\":s===\"}\"?s=\"\\\\rbrace\":s===\"&\"?s=\"\\\\&\":s===\"#\"?s=\"\\\\#\":s===\"$\"?s=\"\\\\$\":s===\"%\"?s=\"\\\\%\":s===\"~\"?s=\"\\\\~\":s===\"\\\\\"&&(s=\"\\\\backslash\"),!!q.insert(r,s,{style:n,insertionMode:\"replaceSelection\",selectionMode:a?\"after\":\"placeholder\"})&&(t.snapshot(`insert-${r.at(r.position).type}`),/\\d/.test(e))){let l=t.options.inlineShortcutTimeout>0?t.options.inlineShortcutTimeout:1e3;clearTimeout(t.scientificNotationTimer),t.scientificNotationTimer=setTimeout(()=>{Up(t)},l)}}function cb(t){var r,i,n,o;if(t.selectionIsCollapsed)return(i=(r=t.at(t.position))==null?void 0:r.style)!=null?i:{};let e=de(t.selection)[0];return(o=(n=t.at(e+1))==null?void 0:n.style)!=null?o:{}}function Lc(t,e,r){var l;if(!e||t.mode!==\"math\")return!1;let i=t.at(t.position),{parent:n}=i,o={\"(\":\"(\",\")\":\")\",\"{\":\"\\\\lbrace\",\"}\":\"\\\\rbrace\",\"[\":\"\\\\lbrack\",\"]\":\"\\\\rbrack\",\"|\":\"|\"}[e];if(!o)return!1;let a=tn[o],s=en[o];if(!t.selectionIsCollapsed){t.mathfield.snapshot();let[c,u]=de(t.selection),m=t.extractAtoms([c,u]),d=n.addChildrenAfter([new Y(\"left...right\",m,{leftDelim:o,rightDelim:s})],t.at(c));return t.setSelection(t.offsetOf(d.firstChild),t.offsetOf(d.lastChild)),t.mathfield.snapshot(\"insert-fence\"),t.contentDidChange({data:o,inputType:\"insertText\"}),!0}if(o===\"|\"){let c=n instanceof Y?n.leftDelim+n.rightDelim:\"\";if(c===\"\\\\lbrace\\\\rbrace\"||c===\"\\\\{\\\\}\"||c===\"\\\\lbrace?\")return t.mathfield.snapshot(),q.insert(t,\"\\\\,\\\\middle\\\\vert\\\\,\",{format:\"latex\",style:r}),t.mathfield.snapshot(\"insert-fence\"),t.contentDidChange({data:o,inputType:\"insertText\"}),!0}if(s){if(n instanceof Y&&n.firstChild===i&&(n.leftDelim===\"?\"||n.leftDelim===\".\"))return n.leftDelim=o,n.isDirty=!0,t.mathfield.snapshot(),t.contentDidChange({data:o,inputType:\"insertText\"}),t.mathfield.snapshot(\"insert-fence\"),!0;if(!(n instanceof Y)){let d=i;for(;d&&!(d.type===\"mclose\"&&d.value===s);)d=d.rightSibling;if(d){t.mathfield.snapshot();let h=t.extractAtoms([t.offsetOf(i),t.offsetOf(d)]);h.pop();let f=new Y(\"left...right\",h,{leftDelim:o,rightDelim:s});return n.addChildrenAfter([f],i),t.position=t.offsetOf(f.firstChild),t.contentDidChange({data:o,inputType:\"insertText\"}),t.mathfield.snapshot(\"insert-fence\"),!0}}let c=t.offsetOf(i.lastSibling),u;for(u=t.position;u<=c;u++){let d=t.at(u);if(d instanceof Y&&(d.leftDelim===\"?\"||d.leftDelim===\".\")&&jp(o,d.rightDelim))break}let m=t.at(u);if(u<=c&&m instanceof Y){m.leftDelim=o,t.mathfield.snapshot();let d=t.extractAtoms([t.position,u-1]);return d=d.filter(h=>h.type!==\"first\"),m.addChildren(d,m.parentBranch),t.position+=1,t.contentDidChange({data:o,inputType:\"insertText\"}),t.mathfield.snapshot(\"insert-fence\"),!0}if(n instanceof Y&&(n.leftDelim===\"?\"||n.leftDelim===\".\")&&jp(o,n.rightDelim)){n.isDirty=!0,n.leftDelim=o,t.mathfield.snapshot();let d=t.extractAtoms([t.offsetOf(i.firstSibling),t.position]);for(let h of d)n.parent.addChildBefore(h,n);return t.contentDidChange({data:o,inputType:\"insertText\"}),t.mathfield.snapshot(\"insert-fence\"),!0}if(!(n instanceof Y&&n.leftDelim===\"|\")){if(o===\"(\"){let d=t.position-1,h=!1;for(;d>=0;){let f=t.at(d);if(f.type===\"first\")break;if(f.type===\"mord\"&&f.value&&/^[\\d]$/.test(f.value)){d-=1;continue}if(f.type===\"group\"&&((l=f.body)==null?void 0:l.length)===2&&f.body[0].type===\"first\"&&f.body[1].value===\",\"){h=!0;break}if(f.type===\"mord\"&&(f.value===\",\"||f.value===\".\")){h=!0;break}break}if(h)return!1}if(t.mathfield.snapshot(),q.insert(t,`\\\\left${o}\\\\right?`,{format:\"latex\",style:r}),i.lastSibling.type!==\"first\"){let d=t.offsetOf(i.lastSibling),h=t.extractAtoms([t.position,d]);t.at(t.position).body=h,t.position-=1}return t.mathfield.snapshot(\"insert-fence\"),!0}}if(a){if(o===\")\"){let f=t.position-1,x=!1;for(;f>=0;){let v=t.at(f);if(v.type===\"first\")break;if(v.type===\"mord\"&&v.value&&/^[\\d]$/.test(v.value)){x=!0,f-=1;continue}break}if(x&&t.at(f).type===\"mopen\"&&t.at(f).value===\"(\")return!1}let c=i;for(;c;){if(c.type===\"mopen\"&&c.value===a){t.mathfield.snapshot();let f=c.leftSibling,x=t.extractAtoms([t.offsetOf(c.leftSibling),t.offsetOf(i)]);[,...x]=x;let v=new Y(\"left...right\",x,{leftDelim:a,rightDelim:o});return n.addChildrenAfter([v],f),t.position=t.offsetOf(v),t.contentDidChange({data:o,inputType:\"insertText\"}),t.mathfield.snapshot(\"insert-fence\"),!0}c=c.leftSibling}if(n instanceof Y&&i.isLastSibling&&kc(n.leftDelim,o))return t.mathfield.snapshot(),n.isDirty=!0,n.rightDelim=o,t.position+=1,t.contentDidChange({data:o,inputType:\"insertText\"}),t.mathfield.snapshot(\"insert-fence\"),!0;let u=t.offsetOf(i.firstSibling),m;for(m=t.position;m>=u;m--){let f=t.at(m);if(f instanceof Y&&(f.rightDelim===\"?\"||f.rightDelim===\".\")&&kc(f.leftDelim,o))break}let d=t.at(m);if(m>=u&&d instanceof Y)return t.mathfield.snapshot(),d.rightDelim=o,d.addChildren(t.extractAtoms([m,t.position]),d.parentBranch),t.contentDidChange({data:o,inputType:\"insertText\"}),t.mathfield.snapshot(\"insert-fence\"),!0;if(n instanceof Y&&(n.rightDelim===\"?\"||n.rightDelim===\".\")&&kc(n.leftDelim,o))return t.mathfield.snapshot(),n.isDirty=!0,n.rightDelim=o,n.parent.addChildren(t.extractAtoms([t.position,t.offsetOf(i.lastSibling)]),n.parentBranch),t.position=t.offsetOf(n),t.contentDidChange({data:o,inputType:\"insertText\"}),t.mathfield.snapshot(\"insert-fence\"),!0;let h=n.parent;return h instanceof Y&&(h.rightDelim===\"?\"||h.rightDelim===\".\")&&t.at(t.position).isLastSibling?(t.position=t.offsetOf(h),Lc(t,o,r)):!1}return!1}function kc(t,e){return t?[\"(\",\"\\\\lparen\",\"{\",\"\\\\{\",\"\\\\lbrace\",\"[\",\"\\\\lbrack\"].includes(t)?[\")\",\"\\\\rparen\",\"}\",\"\\\\}\",\"\\\\rbrace\",\"]\",\"\\\\rbrack\"].includes(e):en[t]===e:!0}function jp(t,e){return e?[\")\",\"\\\\rparen\",\"}\",\"\\\\}\",\"\\\\rbrace\",\"]\",\"\\\\rbrack\"].includes(e)?[\"(\",\"\\\\lparen\",\"{\",\"\\\\{\",\"\\\\lbrace\",\"[\",\"\\\\lbrack\"].includes(t):tn[e]===t:!0}fe({scrollIntoView:t=>(t.scrollIntoView(),!0),scrollToStart:t=>(t.field.scroll(0,0),!0),scrollToEnd:t=>{let e=t.field.getBoundingClientRect();return t.field.scroll(e.left-window.scrollX,0),!0},toggleKeystrokeCaption:qp,toggleContextMenu:t=>{let e=t.toggleContextMenu();return e||t.model.announce(\"plonk\"),e},plonk:t=>(t.model.announce(\"plonk\"),!0),switchMode:(t,e,r,i)=>(t.switchMode(e,r,i),!0)});fe({undo:t=>(t.undo(),!0),redo:t=>(t.redo(),!0)},{target:\"mathfield\",changeContent:!0});fe({insert:(t,e,r)=>t.insert(e,r),typedText:(t,e,r)=>(xo(t,e,r),!0),insertDecimalSeparator:t=>{let e=t.model;return e.mode===\"math\"&&globalThis.MathfieldElement.decimalSeparator===\",\"&&e.at(Math.max(e.position,e.anchor)).isDigit()?(t.insert(\"{,}\",{format:\"latex\"}),t.snapshot(\"insert-mord\"),!0):(t.insert(\".\"),!0)},commit:t=>{var r,i;let e=t.model;return e.contentWillChange({inputType:\"insertLineBreak\"})&&((r=t.host)==null||r.dispatchEvent(new Event(\"change\",{bubbles:!0,composed:!0})),(i=e.parentEnvironment)!=null&&i.isMultiline&&t.executeCommand(\"addRowAfter\"),e.contentDidChange({inputType:\"insertLineBreak\"})),!0},insertPrompt:(t,e,r)=>{let i=t.getPrompts(),n=\"prompt-\"+Date.now().toString(36).slice(-2)+Math.floor(Math.random()*1e5).toString(36),o=0;for(;i.includes(n)&&o<100;){if(o===99)return console.error(\"could not find a unique ID after 100 tries\"),!1;n=\"prompt-\"+Date.now().toString(36).slice(-2)+Math.floor(Math.random()*1e5).toString(36),o++}return t.insert(`\\\\placeholder[${e!=null?e:n}]{}`,r),!0}},{target:\"mathfield\",canUndo:!0,changeContent:!0,changeSelection:!0});fe({copyToClipboard:t=>(t.focus(),t.model.selectionIsCollapsed&&t.select(),\"queryCommandSupported\"in document&&document.queryCommandSupported(\"copy\")&&document.execCommand(\"copy\")||t.element.querySelector(\".ML__keyboard-sink\").dispatchEvent(new ClipboardEvent(\"copy\",{bubbles:!0,composed:!0})),!1)},{target:\"mathfield\"});fe({cutToClipboard:t=>(t.focus(),\"queryCommandSupported\"in document&&document.queryCommandSupported(\"cut\")&&document.execCommand(\"cut\")||t.element.querySelector(\".ML__keyboard-sink\").dispatchEvent(new ClipboardEvent(\"cut\",{bubbles:!0,composed:!0})),!0),pasteFromClipboard:t=>(t.focus(),\"queryCommandSupported\"in document&&document.queryCommandSupported(\"paste\")?(document.execCommand(\"paste\"),!0):(navigator.clipboard.readText().then(e=>{e&&t.model.contentWillChange({inputType:\"insertFromPaste\",data:e})?(t.stopCoalescingUndo(),t.stopRecording(),t.insert(e,{mode:t.model.mode})&&(Fr(t),t.startRecording(),t.snapshot(\"paste\"),t.model.contentDidChange({inputType:\"insertFromPaste\"}),J(t))):t.model.announce(\"plonk\"),t.startRecording()}).catch(()=>{t.model.announce(\"plonk\"),t.startRecording()}),!0))},{target:\"mathfield\",canUndo:!0,changeContent:!0,changeSelection:!0});function Ms(t){let[e,r]=de(t.selection);if(e=Jp(t,e,\"backward\"),r=Jp(t,r,\"forward\"),e===r){let i=t.at(e);if(i.type===\"leftright\")return t.setSelection(t.offsetOf(i.firstChild)-1,r);if(i.type===\"first\"&&(i.parent.type===\"leftright\"||i.parent.type===\"surd\"))return t.setSelection(e-1,t.offsetOf(i.parent.lastChild)+1);t.setSelection(e-1,r)}else t.setSelection(e,r);return!0}function Jp(t,e,r){var o;let i=t.at(e);if(!i)return e;let n=r===\"forward\"?1:-1;if(i.mode===\"text\"){for(;i&&!(i.mode!==\"text\"||!Zr.test(i.value));)e+=n,i=t.at(e);return r===\"backward\"?e-1:e}if(i.mode===\"latex\"){if(/[a-zA-Z\\\\*]/.test(i.value))if(r===\"backward\")for(;(i==null?void 0:i.mode)===\"latex\"&&i.value!==\"\\\\\"&&/[a-zA-Z]/.test(i.value);)e+=n,i=t.at(e);else for(;(i==null?void 0:i.mode)===\"latex\"&&/[a-zA-Z\\\\*]/.test(i.value);)e+=n,i=t.at(e);else if(i.value===\"{\"){if(r===\"forward\"){for(;(i==null?void 0:i.mode)===\"latex\"&&i.value!==\"}\";)e+=n,i=t.at(e);return e}return e-1}else if(i.value===\"}\"){if(r===\"backward\"){for(;(i==null?void 0:i.mode)===\"latex\"&&i.value!==\"{\";)e+=n,i=t.at(e);return e-1}return e}return e-1}if(i.mode===\"math\"){if(i.isDigit()){for(;(o=t.at(e+n))!=null&&o.isDigit();)e+=n;return r===\"backward\"?e-1:e}if(i.style.variant||i.style.variantStyle){let a=i.style.variant,s=i.style.variantStyle;for(;;){let l=t.at(e+n);if(!l||l.style.variant!==a||l.style.variantStyle!==s)break;e+=n}return r===\"backward\"?e-1:e}return e}return e}fe({selectGroup:t=>{let e=Ms(t);return e||t.announce(\"plonk\"),e},selectAll:t=>t.setSelection(0,t.lastOffset),extendSelectionForward:t=>st(t,\"forward\",{extend:!0}),extendSelectionBackward:t=>st(t,\"backward\",{extend:!0}),extendToNextWord:t=>Mt(t,\"forward\",{extend:!0}),extendToPreviousWord:t=>Mt(t,\"backward\",{extend:!0}),extendSelectionUpward:t=>st(t,\"upward\",{extend:!0}),extendSelectionDownward:t=>st(t,\"downward\",{extend:!0}),extendToNextBoundary:t=>Mt(t,\"forward\",{extend:!0}),extendToPreviousBoundary:t=>Mt(t,\"backward\",{extend:!0}),extendToGroupStart:t=>{let e=t.setSelection(t.anchor,t.offsetOf(t.at(t.position).firstSibling));return e||t.announce(\"plonk\"),e},extendToGroupEnd:t=>{let e=t.setSelection(t.anchor,t.offsetOf(t.at(t.position).lastSibling));return e||t.announce(\"plonk\"),e},extendToMathFieldStart:t=>{let e=t.setSelection(t.anchor,0);return e||t.announce(\"plonk\"),e},extendToMathFieldEnd:t=>{let e=t.setSelection(t.anchor,t.lastOffset);return e||t.announce(\"plonk\"),e}},{target:\"model\",changeSelection:!0});var _i=null,vo=0,Mi=class t{static start(e,r,i,n){var a;t.element=e,(a=t.controller)==null||a.abort(),t.controller=new AbortController;let o={signal:t.controller.signal};\"PointerEvent\"in window?(e.addEventListener(\"pointermove\",i,o),e.addEventListener(\"pointerup\",n,o),e.addEventListener(\"pointercancel\",n,o),Ec(r)&&(t.pointerId=r.pointerId,e.setPointerCapture(r.pointerId))):(window.addEventListener(\"mousemove\",i,o),window.addEventListener(\"blur\",n,o),window.addEventListener(\"mouseup\",n,o))}static stop(){var e;(e=t.controller)==null||e.abort(),t.controller=void 0,typeof t.pointerId==\"number\"&&(t.element.releasePointerCapture(t.pointerId),t.pointerId=void 0)}};function Ec(t){return t!==null&&globalThis.PointerEvent!==void 0&&t instanceof PointerEvent}function Cc(t,e,r){return t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom}function Gp(t,e,r){return t<e?e:t>r?r:t}function Tc(t,e){var K,$,G,R,N,j;if(e.buttons>1)return;t.atomBoundsCache?t.atomBoundsCache.clear():t.atomBoundsCache=new Map;let r=t,i,n=!1,o=!1,a=\"none\",s=!1,l=!1,c=e.clientX,u=e.clientY,m=Date.now(),d=r.field,h=setInterval(()=>{s?d.scroll({top:0,left:d.scrollLeft-16}):l&&d.scroll({top:0,left:d.scrollLeft+16})},32);function f(){Mi.stop(),n=!1,clearInterval(h),t.element.classList.remove(\"tracking\"),e&&e.preventDefault()}function x(T){if(!r.hasFocus()){f();return}let H=T.clientX,ie=T.clientY,X=Ec(T)&&T.pointerType===\"touch\"?20:5;if(Date.now()<m+500&&Math.abs(c-H)<X&&Math.abs(u-ie)<X){T.preventDefault(),T.stopPropagation();return}let be=d.getBoundingClientRect();l=H>be.right,s=H<be.left;let ye=i;Ec(T)&&(T.isPrimary||(ye=Mo(r,T.clientX,T.clientY,{bias:0})));let Be=Mo(r,H,ie,{bias:H<=c?H===c?0:-1:1});ye>=0&&Be>=0&&(r.model.extendSelectionTo(ye,Be),J(t)),o&&Ms(r.model)}_i&&Math.abs(_i.x-c)<5&&Math.abs(_i.y-u)<5&&Date.now()<_i.time+500?(vo+=1,_i.time=m):(_i={x:c,y:u,time:m},vo=1);let v=d.getBoundingClientRect(),b=($=(K=t.container)==null?void 0:K.getBoundingClientRect())!=null?$:t.element.getBoundingClientRect(),_=(R=(G=t.element)==null?void 0:G.getBoundingClientRect())!=null?R:b,S=Cc(c,u,v),A=!S&&b?Cc(c,u,b):!1,E=!S&&!A&&_?Cc(c,u,_):!1,D=S?c:A||E?Gp(c,v.left,v.right):c,L=S?u:A||E?Gp(u,v.top,v.bottom):u;if(S||A||E){if(t.flushInlineShortcutBuffer(),i=Mo(t,D,L,{bias:0}),i!==t.model.anchor){let T=t.defaultStyle.variantStyle;t.defaultStyle=T!==void 0?{variantStyle:T}:{},t.styleBias=\"left\"}if(i>=0){if(t.element.classList.add(\"tracking\"),e.shiftKey){let T=t.model.selectionIsCollapsed;t.model.extendSelectionTo(t.model.anchor,i),os(t.model)||T?a=\"all\":a=\"selection\"}else if(t.model.at(i).type===\"placeholder\"||t.model.at(i).type===\"prompt\"){let T=t.model.at(i);T.hasChildren&&T.firstChild?t.model.position=t.model.offsetOf(T.firstChild):t.model.setSelection(i-1,i),a=\"selection\"}else if(((N=t.model.at(i).rightSibling)==null?void 0:N.type)===\"placeholder\"||((j=t.model.at(i).rightSibling)==null?void 0:j.type)===\"prompt\"){let T=t.model.at(i).rightSibling;T.hasChildren&&T.firstChild?t.model.position=t.model.offsetOf(T.firstChild):t.model.setSelection(i,i+1),a=\"selection\"}else{let T=t.model.at(i);if(T.captureSelection&&T.hasChildren&&T.body&&T.body.length>0){let H=T.body.find(ie=>ie.type!==\"first\");H&&(H.type===\"placeholder\"||H.type===\"prompt\")&&H.hasChildren&&H.firstChild?(t.model.position=t.model.offsetOf(H.firstChild),a=\"selection\"):(t.model.position=i,os(t.model)?a=\"all\":a=\"selection\")}else t.model.position=i,os(t.model)?a=\"all\":a=\"selection\"}e.detail===3||vo>2?(f(),(e.detail===3||vo===3)&&(t.model.selection={ranges:[[0,t.model.lastOffset]]},a=\"all\")):n||(n=!0,Mi.start(d,e,x,f),(e.detail===2||vo===2)&&(o=!0,Ms(t.model),a=\"all\"))}t.hasFocus()||(a=\"none\",t.onFocus(),t.model.announce(\"line\"))}else _i=null;t.stopCoalescingUndo(),a!==\"none\"&&(t.model.selectionIsCollapsed&&(a=\"all\"),J(t)),e.preventDefault()}function ub(t,e,r){if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)return 0;let i=t-(r.left+r.right)/2,n=e-(r.top+r.bottom)/2;return i*i+n*n}function _o(t,e,r,i,n){if(!r.id)return[1/0,null];if(e.has(r.id))return e.get(r.id);let o=nr(t,r);if(!o)return[1/0,null];let a=[1/0,null],s=t.model;if(r instanceof z){let l=-1,c=1/0;for(let m=0;m<r.rows.length;m++){let d=r.rows[m];if(!d||d.length===0)continue;let h=1/0,f=-1/0;for(let x of d)if(x)for(let v of x){let b=nr(t,v);b&&(h=Math.min(h,b.top),f=Math.max(f,b.bottom))}if(h!==1/0&&f!==-1/0){let x;n<h?x=h-n:n>f?x=n-f:x=0,x<c&&(c=x,l=m)}}let u=l>=0?[r.rows[l]]:r.rows;for(let m of u)for(let d of m)if(d)for(let h of d){let f=_o(t,e,h,i,n);f[0]<=a[0]&&(a=f)}if(!r.isMultiline)for(let m of r.children){let d=_o(t,e,m,i,n);d[0]<=a[0]&&(a=d)}}else if(r.hasChildren&&!r.captureSelection&&i>=o.left&&i<=o.right){let l=r.children;for(let c of l){let u=_o(t,e,c,i,n);u[0]<=a[0]&&(a=u)}for(let c of r.branches){let u=r.branch(c);if(!u||u.length===0)continue;let m=[s.offsetOf(u[0]),s.offsetOf(u[u.length-1])],d=N0(t,m);if(n>=d.top&&n<=d.bottom)for(let h of u){let f=_o(t,e,h,i,n);f[0]<=a[0]&&(a=f)}}}return a[1]||(a=[ub(i,n,o),r]),e.set(r.id,a),a}function db(t,e,r){let[,i]=_o(t,new Map,t.model.root,e,r);return i}function Mo(t,e,r,i){var c;let n=t.field.querySelector(\".ML__latex\").getBoundingClientRect();if(!n)return 0;if(e>n.right||r>n.bottom+8)return t.model.lastOffset;if(e<n.left||r<n.top-8)return 0;i=i!=null?i:{},i.bias=(c=i.bias)!=null?c:0;let o=db(t,e,r),a=[],s=o;for(;s;)a.unshift(s),s=s.parent;for(let u of a)if(u.captureSelection){o=u;break}let l=t.model.offsetOf(o);if(l<0)return-1;if(o.leftSibling){let u=o.type===\"placeholder\"||o.type===\"prompt\";if(i.bias===0&&!u){let m=nr(t,o);m&&e<(m.left+m.right)/2&&(l=t.model.offsetOf(o.leftSibling))}else i.bias<0&&(l=t.model.offsetOf(o.leftSibling))}return l}var Dc=class extends q{constructor(){super(\"math\")}onPaste(e,r){if(!r||!e.model.contentWillChange({data:typeof r==\"string\"?r:null,dataTransfer:typeof r==\"string\"?null:r,inputType:\"insertFromPaste\"}))return!1;let i=\"\",n=\"auto\",o=typeof r!=\"string\"?r.getData(\"application/json+mathlive\"):\"\";if(o)try{let a=JSON.parse(o);if(a&&Array.isArray(a)){e.snapshot();let s=bt(a),{model:l}=e;l.selectionIsCollapsed||l.deleteAtoms(de(l.selection));let c=l.at(l.position);if(c.parent instanceof z){c.parentBranch;let u=[],m=[];s[0].type===\"first\"&&s.shift(),s[s.length-1].type===\"first\"&&s.pop();for(let x of s)x.type===\"first\"&&m.length>0?(u.push(m),m=[x]):m.push(x);m.length>0&&u.push(m);let d=Number(c.parentBranch[0]),h=Number(c.parentBranch[1]),f=c.parent.maxColumns;for(;c.parent.colCount-h<u.length&&c.parent.colCount<f;)c.parent.addColumn();c.parent.addChildrenAfter(u[0],c);for(let x=1;x<u.length;x++)h++,h>=f&&(h=0,c.parent.addRowAfter(d),d++),c.parent.setCell(d,h,u[x])}else c.parent.addChildrenAfter(s.filter(u=>u.type!==\"first\"),c);return l.position=l.offsetOf(s[s.length-1]),l.contentDidChange({inputType:\"insertFromPaste\"}),J(e),!0}}catch(a){}if(o=typeof r!=\"string\"?r.getData(\"application/json\"):\"\",o&&globalThis.MathfieldElement.computeEngine)try{let a=JSON.parse(o);if(typeof a==\"object\"&&\"latex\"in a&&a.latex&&(i=a.latex),!i){let s=globalThis.MathfieldElement.computeEngine.box(a);s&&!s.has(\"Error\")&&(i=s.latex)}i||(n=\"latex\")}catch(a){}if(!i&&typeof r!=\"string\"&&(i=r.getData(\"application/x-latex\"),i&&(n=\"latex\")),i||(i=typeof r==\"string\"?r:r.getData(\"text/plain\")),i){let a;return[a,i]=$a(i),n===\"auto\"&&a&&(n=\"latex\"),e.stopCoalescingUndo(),e.stopRecording(),this.insert(e.model,i,{format:n})&&(e.startRecording(),e.snapshot(\"paste\"),J(e)),e.startRecording(),!0}return!1}insert(e,r,i){var x,v;let n=typeof r==\"string\"?r:(v=(x=globalThis.MathfieldElement.computeEngine)==null?void 0:x.box(r).latex)!=null?v:\"\";if(!i.silenceNotifications&&!e.contentWillChange({data:n,inputType:\"insertText\"}))return!1;i.insertionMode||(i.insertionMode=\"replaceSelection\"),i.selectionMode||(i.selectionMode=\"placeholder\"),i.format||(i.format=\"auto\");let{silenceNotifications:o}=e;i.silenceNotifications&&(e.silenceNotifications=!0);let a=e.silenceNotifications;e.silenceNotifications=!0;let s={\"?\":\"\\\\placeholder{}\",\"@\":\"\\\\placeholder{}\"};s[0]=i.insertionMode===\"replaceAll\"?\"\":e.getValue(e.selection,\"latex-unstyled\"),i.insertionMode===\"replaceSelection\"?e.deleteAtoms(de(e.selection)):i.insertionMode===\"replaceAll\"?e.deleteAtoms():i.insertionMode===\"insertBefore\"?e.collapseSelection(\"backward\"):i.insertionMode===\"insertAfter\"&&e.collapseSelection(\"forward\"),!e.at(e.position).isLastSibling&&e.at(e.position+1).type===\"placeholder\"?e.deleteAtoms([e.position,e.position+1]):e.at(e.position).type===\"placeholder\"&&e.deleteAtoms([e.position-1,e.position]);let l=-1;s[0]?s[\"@\"]=s[0]:typeof r==\"string\"&&/(^|[^\\\\])#@/.test(r)&&(l=mb(e),l>=0&&(s[\"@\"]=e.getValue(l,e.position,\"latex\"))),s[0]||(s[0]=s[\"?\"]);let c=!1,u=b=>(c=!0,s[b]),[m,d]=Xp(e,r,u,i);if(!d)return!1;let h=d.length===1&&d[0].type===\"genfrac\";if(h&&l>=0&&typeof e.mathfield.options.isImplicitFunction==\"function\"&&e.mathfield.options.isImplicitFunction(e.at(e.position).command)?(s[\"@\"]=s[\"?\"],c=!1,[m,d]=Xp(e,r,u,i)):l>=0&&e.deleteAtoms([l,e.position]),d.length===1&&d[0].isRoot)e.root=d[0];else{let{parent:b}=e.at(e.position),_=b.hasEmptyBranch(\"body\");if(h&&m!==\"latex\"&&e.mathfield.options.removeExtraneousParentheses&&b instanceof Y&&b.leftDelim===\"(\"&&_){let A=b.parent,E=b.parentBranch;A.removeChild(b),A.setChildren(d,E)}let S=e.at(e.position);S.parent.addChildrenAfter(d,S),m===\"latex\"&&typeof r==\"string\"&&(b==null?void 0:b.type)===\"root\"&&_&&!c&&(b.verbatimLatex=r)}e.silenceNotifications=a;let f=d[d.length-1];if(i.selectionMode===\"placeholder\"){let b;if(d.length===1&&d[0].type===\"genfrac\"){let _=d[0].branch(\"above\");if(b=_==null?void 0:_.find(S=>S.type===\"placeholder\"),!b){let S=d[0].branch(\"below\");b=S==null?void 0:S.find(A=>A.type===\"placeholder\")}}if(b||(b=d.flatMap(_=>[_,..._.children]).find(_=>_.type===\"placeholder\")),b){let _=e.offsetOf(b);e.setSelection(_-1,_),e.announce(\"move\")}else if(f){let _=f.body,S=f.hasEmptyBranch(\"body\");_&&S?e.setSelection(e.offsetOf(_[0]),e.offsetOf(_[_.length-1])+1):e.position=e.offsetOf(f)}}else i.selectionMode===\"before\"||(i.selectionMode===\"after\"?f&&(e.position=e.offsetOf(f)):i.selectionMode===\"item\"&&e.setSelection(e.anchor,e.offsetOf(f)));return e.contentDidChange({data:n,inputType:\"insertText\"}),e.silenceNotifications=o,!0}};function Xp(t,e,r,i){var a;let n,o=[];if(typeof e!=\"string\"||i.format===\"math-json\"){let s=globalThis.MathfieldElement.computeEngine;if(!s)return[\"math-json\",[]];[n,e]=[\"latex\",s.box(e).latex],o=ge(e,{context:t.mathfield.context})}else typeof e==\"string\"&&i.format===\"ascii-math\"?([n,e]=ir(e,{format:\"ascii-math\",inlineShortcuts:t.mathfield.options.inlineShortcuts}),o=ge(e,{context:t.mathfield.context}),n!==\"latex\"&&t.mathfield.options.removeExtraneousParentheses&&(o=o.map(s=>ws(s)))):(i.format===\"auto\"||(a=i.format)!=null&&a.startsWith(\"latex\"))&&(i.format===\"auto\"&&([n,e]=ir(e,{format:\"auto\",inlineShortcuts:t.mathfield.options.inlineShortcuts})),i.format===\"latex\"&&([,e]=$a(e)),o=ge(e,{context:t.mathfield.context,args:r}),i.format!==\"latex\"&&t.mathfield.options.removeExtraneousParentheses&&(o=o.map(s=>ws(s))));return ro(o,i.style),[n!=null?n:\"latex\",o]}function ws(t){var e;if(t instanceof Y&&t.leftDelim!==\"(\"&&t.rightDelim===\")\"){let r=(e=t.body)==null?void 0:e.filter(i=>i.type!==\"first\");if((r==null?void 0:r.length)===1&&r[0].type===\"genfrac\")return r[0]}for(let r of t.branches)t.hasEmptyBranch(r)||t.setChildren(t.branch(r).map(i=>ws(i)),r);return t instanceof z&&t.forEachCell((r,i,n)=>{t.setCell(i,n,r.map(o=>ws(o)))}),t}function mb(t){let e=t.at(t.position);if(e.mode===\"text\"){for(;!e.isFirstSibling&&e.mode===\"text\";)e=e.leftSibling;return t.offsetOf(e)}let r=e,i=!1;if(e.type===\"mclose\"){let n=tn[e.value];for(;!e.isFirstSibling&&!(e.type===\"mopen\"&&e.value===n);)e=e.leftSibling;e.isFirstSibling||(e=e.leftSibling),i=!0}else e.type===\"leftright\"&&(e=e.leftSibling,i=!0);if(i)for(;!e.isFirstSibling&&(e.isFunction||Zp(e));)e=e.leftSibling;else{let n=[];for(;!e.isFirstSibling&&(Zp(e)||n.length>0);)e.type===\"mclose\"&&n.unshift(e.value),e.type===\"mopen\"&&n.length>0&&e.value===tn[n[0]]&&n.shift(),e=e.leftSibling}return r===e?-1:t.offsetOf(e)}function pb(t){if(t.type===\"mord\"&&t.value===\"e\"){let e=t.leftSibling;if(e&&e.isDigit())return!0}if(t.type===\"mbin\"&&(t.value===\"+\"||t.value===\"-\"||t.value===\"\\u2212\")){let e=t.leftSibling,r=t.rightSibling;if((e==null?void 0:e.type)===\"mord\"&&e.value===\"e\"&&r&&r.isDigit()){let i=e.leftSibling;if(i&&i.isDigit())return!0}}if(t.type===\"subsup\"){let e=t.leftSibling;if(e&&e.isDigit()&&e.value===\"0\"){let r=e.leftSibling;if(r&&r.isDigit()&&r.value===\"1\"){let i=r.leftSibling;if((i==null?void 0:i.type)===\"mbin\"&&(i.value===\"\\xD7\"||i.value===\"\\\\times\")){let n=i.leftSibling;if(n&&n.isDigit())return!0}}}}if(t.isDigit()&&t.value===\"0\"){let e=t.leftSibling,r=t.rightSibling;if(e&&e.isDigit()&&e.value===\"1\"&&(r==null?void 0:r.type)===\"subsup\"){let i=e.leftSibling;if((i==null?void 0:i.type)===\"mbin\"&&(i.value===\"\\xD7\"||i.value===\"\\\\times\")){let n=i.leftSibling;if(n&&n.isDigit())return!0}}}if(t.isDigit()&&t.value===\"1\"){let e=t.rightSibling;if(e&&e.isDigit()&&e.value===\"0\"){let r=e.rightSibling;if((r==null?void 0:r.type)===\"subsup\"){let i=t.leftSibling;if((i==null?void 0:i.type)===\"mbin\"&&(i.value===\"\\xD7\"||i.value===\"\\\\times\")){let n=i.leftSibling;if(n&&n.isDigit())return!0}}}}if(t.type===\"mbin\"&&(t.value===\"\\xD7\"||t.value===\"\\\\times\")){let e=t.leftSibling,r=t.rightSibling;if(e&&e.isDigit()&&r&&r.isDigit()&&r.value===\"1\"){let i=r.rightSibling;if(i&&i.isDigit()&&i.value===\"0\"){let n=i.rightSibling;if((n==null?void 0:n.type)===\"subsup\")return!0}}}return!1}function Zp(t){return t.isDigit()||pb(t)?!0:t.type&&/^(mord|surd|subsup|leftright|mop|mclose)$/.test(t.type)?t.type!==\"extensible-symbol\":!1}new Dc;var Oc=class extends q{constructor(){super(\"text\")}onPaste(e,r){if(!r)return!1;let i=typeof r==\"string\"?r:r.getData(\"text/plain\");return i&&e.model.contentWillChange({inputType:\"insertFromPaste\",data:i})?(e.stopCoalescingUndo(),e.stopRecording(),this.insert(e.model,i)&&(e.model.contentDidChange({inputType:\"insertFromPaste\"}),e.startRecording(),e.snapshot(\"paste\"),J(e)),e.startRecording(),!0):!1}insert(e,r,i={}){if(!e.contentWillChange({data:r,inputType:\"insertText\"}))return!1;i.insertionMode||(i.insertionMode=\"replaceSelection\"),i.selectionMode||(i.selectionMode=\"placeholder\"),i.format||(i.format=\"auto\");let{silenceNotifications:n}=e;i.silenceNotifications&&(e.silenceNotifications=!0);let o=e.silenceNotifications;e.silenceNotifications=!0,i.insertionMode===\"replaceSelection\"&&!e.selectionIsCollapsed?e.deleteAtoms(de(e.selection)):i.insertionMode===\"replaceAll\"?(e.root.setChildren([],\"body\"),e.position=0):i.insertionMode===\"insertBefore\"?e.collapseSelection(\"backward\"):i.insertionMode===\"insertAfter\"&&e.collapseSelection(\"forward\");let a=hb(r,e.mathfield.context);if(ro(a,i.style),!a)return!1;let s=e.at(e.position),l=s.parent.addChildrenAfter(a,s);return e.silenceNotifications=o,i.selectionMode===\"before\"||(i.selectionMode===\"item\"?e.setSelection(e.anchor,e.offsetOf(l)):l&&(e.position=e.offsetOf(l))),e.contentDidChange({data:r,inputType:\"insertText\"}),e.silenceNotifications=n,!0}};function hb(t,e){if(t.includes(\"$\")){let r=[],i=0,n=!1,o=\"\";for(;i<t.length;)t[i]===\"$\"?i+1<t.length&&t[i+1]===\"$\"?(!n&&o?(r.push(Ss(o)),o=\"\"):n&&o&&(r.push(o),o=\"\"),r.push(\"$$\"),n=!n,i+=2):(!n&&o?(r.push(Ss(o)),o=\"\"):n&&o&&(r.push(o),o=\"\"),r.push(\"$\"),n=!n,i+=1):(o+=t[i],i+=1);return o&&(n?r.push(o):r.push(Ss(o))),ge(r.join(\"\"),{context:e,parseMode:\"text\"})}return ge(Ss(t),{context:e,parseMode:\"text\"})}function Ss(t){return t=t.replace(/\\\\/g,\"\\\\textbackslash \"),t=t.replace(/#/g,\"\\\\#\"),t=t.replace(/%/g,\"\\\\%\"),t=t.replace(/&/g,\"\\\\&\"),t=t.replace(/_/g,\"\\\\_\"),t=t.replace(/{/g,\"\\\\textbraceleft \"),t=t.replace(/}/g,\"\\\\textbraceright \"),t=t.replace(/lbrace/g,\"\\\\textbraceleft \"),t=t.replace(/rbrace/g,\"\\\\textbraceright \"),t=t.replace(/\\^/g,\"\\\\textasciicircum \"),t=t.replace(/~/g,\"\\\\textasciitilde \"),t=t.replace(/£/g,\"\\\\textsterling \"),t}new Oc;function Ut(t){return{value:t.model.getValue(),selectionIsCollapsed:t.model.selectionIsCollapsed,canUndo:t.canUndo(),canRedo:t.canRedo(),style:fb(t.model),mode:t.model.mode}}function fb(t){var i;if(t.selectionIsCollapsed)return(i=t.at(t.position))==null?void 0:i.style;let e=t.getAtoms(t.selection);if(e.length===0)return{};let r=p({},e[0].style);for(let n of e)for(let[o,a]of Object.entries(n.style))r[o]!==a&&delete r[o];return r}var le=4,Ne=20,xe=2*(Ne+le),ks=(t,e)=>`\n  <line x1=\"${t+Ne}\" y1=\"${e+Ne}\" \n    x2=\"${t>e?t+Ne:7*Ne+10*le}\" \n    y2=\"${t<e?e+Ne:7*Ne+10*le}\"/>\n  <svg id=\"plus\" viewBox=\"0 0 40 40\" x=\"${t}\" y=\"${e}\" width=\"40\" height=\"40\">\n    <circle class=\"cls-2\" cx=\"20\" cy=\"20\" r=\"20\"/>\n    <path class=\"font\" d=\"m33.33,20c0,1.84-1.49,3.34-3.33,3.34h-6.67v6.66c0,1.84-1.49,3.34-3.33,3.34s-3.34-1.5-3.34-3.34v-6.66h-6.66c-1.84,0-3.34-1.5-3.34-3.34s1.5-3.33,3.34-3.33h6.66v-6.67c0-1.84,1.5-3.33,3.34-3.33s3.33,1.49,3.33,3.33v6.67h6.67c1.84,0,3.33,1.49,3.33,3.33Z\"/>\n  </svg>`,Yp=(t,e)=>`\n  <line x1=\"${t+Ne}\" y1=\"${e+Ne}\" \n    x2=\"${t>e?t+Ne:7*Ne+10*le}\" \n    y2=\"${t<e?e+Ne:7*Ne+10*le}\"/>\n  <svg id=\"minus\" viewBox=\"0 0 40 40\" x=\"${t}\" y=\"${e}\" width=\"40\" height=\"40\">\n    <circle class=\"cls-2\" cx=\"20\" cy=\"20\" r=\"20\"/>\n    <path class=\"font\" d=\"m33.33,20c0,1.84-1.49,3.33-3.33,3.33H10c-1.84,0-3.34-1.49-3.34-3.33s1.5-3.34,3.34-3.34h20c1.84,0,3.33,1.5,3.33,3.34Z\"/>\n  </svg>`,Ls=(t,e,r)=>`\n  <svg id=\"arrow\" viewBox=\"0 0 40 40\" x=\"${t}\" y=\"${e}\" width=\"40\" height=\"40\">\n    <circle class=\"cls-2\" cx=\"20\" cy=\"20\" r=\"20\"/>\n    <g transform=\"rotate(${r})\" transform-origin=\"20 20\">\n      <path class=\"font\" d=\"m17.7,7.23h4.6c.52,0,.94.42.94.94v13.82c0,.52.42.94.94.94h3.39c.83,0,1.25,1.01.66,1.6l-7.56,7.56c-.37.37-.96.37-1.32,0l-7.56-7.56c-.59-.59-.17-1.6.66-1.6h3.39c.52,0,.94-.42.94-.94v-13.82c0-.52.42-.94.94-.94Z\"/>\n    </g>  \n  </svg>`,gb=`\n<svg class=\"MLEP__array-buttons\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" \nviewBox=\n\"-2 -2 ${8*Ne+10*le+5} ${8*Ne+10*le+5}\">\n  <rect \n      class=\"MLEP__array-insert-background rows\"\n      x=\"0\" \n      y=\"${xe+le}\" \n      height=\"${3*xe}\" \n      width=\"${xe}\" \n      rx=\"${xe/2}\"/>\n      <rect \n      class=\"MLEP__array-insert-background columns\"\n      x=\"${xe+le}\" \n      y=\"0\" \n      height=\"${xe}\" \n      width=\"${3*xe}\" \n      rx=\"${xe/2}\"/>\n  <g data-command='\"moveDown\"'>\n  ${Ls(2*(le+xe),2*le+3*xe,0)}\n  </g>\n  <g data-command='\"moveUp\"'>\n  ${Ls(2*(le+xe),2*le+xe,180)}\n  </g>\n  <g data-command='\"moveToNextWord\"'>\n  ${Ls(2*le+3*xe,2*(le+xe),-90)}\n  </g>\n  <g data-command='\"moveToPreviousWord\"'>\n  ${Ls(2*le+xe,2*(le+xe),90)}\n  </g>\n  <g>\n\n  <g data-command='\"addColumnBefore\"'>\n  ${ks(2*le+xe,le)}\n  </g>\n  <g data-command='\"removeColumn\"'>\n  ${Yp(2*le+2*xe,le)}\n  </g>\n  <g data-command='\"addColumnAfter\"'>\n  ${ks(2*le+3*xe,le)}\n  </g>\n  <g data-command='\"addRowBefore\"'>\n  ${ks(le,2*le+xe)}\n  </g>\n  <g data-command='\"removeRow\"'>\n  ${Yp(le,2*le+2*xe)}\n  </g>\n  <g data-command='\"addRowAfter\"'>\n    ${ks(le,2*le+3*xe)}\n  </g>\n</svg>`,bb=t=>`\n<svg id=\"matrix\" class=\"${t}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 24\" \n  data-command='[\"setEnvironment\",\"matrix\"]'>\n  <rect class=\"cls-1\" width=\"28\" height=\"24\"/>\n  <circle cx=\"10\" cy=\"8\" r=\"1\"/>\n  <circle cx=\"14\" cy=\"12\" r=\"1\"/>\n  <circle cx=\"18\" cy=\"16\" r=\"1\"/></svg>`,yb=t=>`\n<svg id=\"pmatrix\" class=\"${t}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 24\" \ndata-command='[\"setEnvironment\",\"pmatrix\"]'>\n  <rect class=\"cls-1\" width=\"28\" height=\"24\"/>\n  <path class=\"cls-2\" d=\"m6,4c-3.96,4.6-3.96,11.4,0,16\"/>\n  <path class=\"cls-2\" d=\"m22,4c3.96,4.6,3.96,11.4,0,16\"/>\n  <circle cx=\"10\" cy=\"8\" r=\"1\"/>\n  <circle cx=\"14\" cy=\"12\" r=\"1\"/>\n  <circle cx=\"18\" cy=\"16\" r=\"1\"/></svg>`,Qp=t=>`\n<svg id=\"Bmatrix\" class=\"${t}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 24\" \n  data-command='[\"setEnvironment\",\"Bmatrix\"]'>\n  <rect class=\"cls-1\" width=\"28\" height=\"24\"/>\n  <path class=\"cls-2\" d=\"m6,4c-1.1,0-2,.9-2,2v3c0,1.66-.9,3-2,3,1.1,0,2,1.34,2,3v3c0,1.1.9,2,2,2\"/>\n  <path class=\"cls-2\" d=\"m22,4c1.1,0,2,.9,2,2v3c0,1.66.9,3,2,3-1.1,0-2,1.34-2,3v3c0,1.1-.9,2-2,2\"/>\n  <circle cx=\"10\" cy=\"8\" r=\"1\"/>\n  <circle cx=\"14\" cy=\"12\" r=\"1\"/>\n  <circle cx=\"18\" cy=\"16\" r=\"1\"/>\n</svg>`,xb=t=>`\n<svg id=\"bmatrix\" class=\"${t}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 24\" \n  data-command='[\"setEnvironment\",\"bmatrix\"]'>\n  <rect class=\"cls-1\" width=\"28\" height=\"24\"/>\n  <path class=\"cls-2\" d=\"m6,4h-3v16h3\"/>\n  <path class=\"cls-2\" d=\"m22,4h3v16h-3\"/>\n  <circle cx=\"10\" cy=\"8\" r=\"1\"/>\n  <circle cx=\"14\" cy=\"12\" r=\"1\"/>\n  <circle cx=\"18\" cy=\"16\" r=\"1\"/>\n</svg>`,vb=t=>`\n<svg id=\"vmatrix\" class=\"${t}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 24\" \n  data-command='[\"setEnvironment\",\"vmatrix\"]'>\n  <rect class=\"cls-1\" width=\"28\" height=\"24\"/>\n  <circle cx=\"10\" cy=\"8\" r=\"1\"/>\n  <circle cx=\"14\" cy=\"12\" r=\"1\"/>\n  <circle cx=\"18\" cy=\"16\" r=\"1\"/>\n  <line class=\"cls-2\" x1=\"4\" y1=\"4\" x2=\"4\" y2=\"20\"/>\n  <line class=\"cls-2\" x1=\"24\" y1=\"4\" x2=\"24\" y2=\"20\"/>\n</svg>`,_b=t=>`\n<svg id=\"Vmatrix\" class=\"${t}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-3.5 -3 35 30\" \n  data-command='[\"setEnvironment\",\"Vmatrix\"]'>\n  <rect class=\"cls-1\" width=\"28\" height=\"24\"/>\n  <circle cx=\"10\" cy=\"8\" r=\"1\"/>\n  <circle cx=\"14\" cy=\"12\" r=\"1\"/>\n  <circle cx=\"18\" cy=\"16\" r=\"1\"/>\n  <line class=\"cls-2\" x1=\"6\" y1=\"4\" x2=\"6\" y2=\"20\"/>\n  <line class=\"cls-2\" x1=\"22\" y1=\"4\" x2=\"22\" y2=\"20\"/>\n  <line class=\"cls-2\" x1=\"2\" y1=\"4\" x2=\"2\" y2=\"20\"/>\n  <line class=\"cls-2\" x1=\"26\" y1=\"4\" x2=\"26\" y2=\"20\"/>\n</svg>`,Mb=t=>`\n<svg id=\"cases\" class=\"${t}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 24\" \n  data-command='[\"setEnvironment\",\"cases\"]'>\n  <rect class=\"cls-1\" width=\"28\" height=\"24\"/>\n  <path class=\"cls-2\" d=\"m10,4c-1.1,0-2,.9-2,2v3c0,1.66-.9,3-2,3,1.1,0,2,1.34,2,3v3c0,1.1.9,2,2,2\"/>\n  <circle cx=\"13\" cy=\"8\" r=\"1\"/>\n  <circle cx=\"13\" cy=\"16\" r=\"1\"/>\n  <circle cx=\"21\" cy=\"8\" r=\"1\"/>\n  <circle cx=\"21\" cy=\"16\" r=\"1\"/>\n</svg>`,wb=t=>`\n<svg id=\"rcases\" class=\"${t}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 24\" \n  data-command='[\"setEnvironment\",\"rcases\"]'>\n  <rect class=\"cls-1\" width=\"28\" height=\"24\"/>\n  <path class=\"cls-2\" d=\"m18,20c1.1,0,2-.9,2-2v-3c0-1.66.9-3,2-3-1.1,0-2-1.34-2-3v-3c0-1.1-.9-2-2-2\"/>\n  <circle cx=\"15\" cy=\"8\" r=\"1\"/>\n  <circle cx=\"15\" cy=\"16\" r=\"1\"/>\n  <circle cx=\"7\" cy=\"8\" r=\"1\"/>\n  <circle cx=\"7\" cy=\"16\" r=\"1\"/>\n</svg>`,Bc={matrix:bb,pmatrix:yb,bmatrix:xb,Bmatrix:Qp,vmatrix:vb,Vmatrix:_b},Kc={cases:Mb,rcases:wb,Bmatrix:Qp};function Sb(t){var d,x;let e=(d=t.model.parentEnvironment)==null?void 0:d.rows;if(!e)return;let r=0;e.forEach(v=>{(!r||v.length>r)&&(r=v.length)});let i=document.getElementById(\"mathlive-environment-popover\");i||(i=bi(\"mathlive-environment-popover\"),We(\"environment-popover\"),We(\"core\"),i.setAttribute(\"aria-hidden\",\"true\"));let n,o=i.querySelector(\".MLEP__environment-controls\");o?n=o:(n=document.createElement(\"div\"),i.innerHTML=\"\",i.appendChild(n)),n.className=\"MLEP__environment-controls\",n.style.display=\"flex\",n.style.width=\"100%\",n.style.height=\"100%\",n.style.boxSizing=\"border-box\",n.innerHTML=gb;let a=[],s=\"\",l=t.model.parentEnvironment.environmentName;if(Wa(l)){let v=kb(l);s=Bc[v](\"active\");let h=Bc,{[v]:b}=h,_=Ai(h,[Gs(v)]);a=Object.values(_).map(S=>S(\"inactive\"))}else if(ip(l)){let v=Lb(l);s=Kc[v](\"active\");let f=Kc,{[v]:b}=f,_=Ai(f,[Gs(v)]);a=Object.values(_).map(S=>S(\"inactive\"))}else np(l)&&(s=Bc.matrix(\"active\"),a=Object.values(Kc).map(v=>v(\"inactive\")));let c=document.createElement(\"div\");c.className=\"MLEP__environment-delimiter-controls\",c.style.display=\"flex\",c.style.flexDirection=\"column\",c.innerHTML=`\n  <div class='MLEP__array-delimiter-options'>\n  ${s}\n  ${a.join(\"\")}\n  </div>`,s&&n.appendChild(c),n.querySelectorAll(\"[data-command]\").forEach(v=>{let b=v.dataset.command,_=b;try{_=JSON.parse(b)}catch(S){}v.addEventListener(\"mousedown\",S=>S.preventDefault()),_&&v.addEventListener(\"click\",()=>t.executeCommand(_))});let m=(x=t.field)==null?void 0:x.getBoundingClientRect();m&&(i.style.top=`${window.scrollY+(m.top-i.clientHeight-15)}px`,i.style.left=`${m.left+20}px`,i.classList.add(\"is-visible\"))}function As(){let t=document.getElementById(\"mathlive-environment-popover\");t==null||t.classList.remove(\"is-visible\")}function eh(){document.getElementById(\"mathlive-environment-popover\")&&($r(\"mathlive-environment-popover\"),nt(\"environment-popover\"),nt(\"core\"))}function wo(t){if(!t.hasFocus())return;let e=!1;if(t.model.mode===\"math\"){let r=t.model.parentEnvironment;if(r!=null&&r.rows&&rp(r.environmentName)){let i=t.options.environmentPopoverPolicy;e=i===\"auto\"||i===\"on\"}}e?Sb(t):As()}function kb(t){return t.replace(\"*\",\"\")}function Lb(t){return t===\"dcases\"?\"cases\":t}function Cs(t){let e=getComputedStyle(t).direction;return e===\"ltr\"||e===\"rtl\"?e:\"ltr\"}function Rc(t,e,r){return e===\"left\"||e===\"leading\"&&r===\"ltr\"||e===\"trailing\"&&r===\"rtl\"?t.left:t.right}function Pc(t,e,r,i){return r===\"middle\"?t-e/2:r===\"start\"&&i===\"rtl\"||r===\"end\"&&i===\"ltr\"||r===\"top\"||r===\"right\"?Math.max(0,t-e):t}function Ab(t,e,r,i){return r===\"middle\"?t-e/2:r===\"start\"&&i===\"ltr\"||r===\"end\"&&i===\"rtl\"||r===\"top\"||r===\"right\"?t:t-e}function th(t,e){var u,m,d;let r=(u=Cs(t))!=null?u:\"ltr\";t.style.position=\"fixed\",t.style.left=\"\",t.style.top=\"\",t.style.right=\"\",t.style.bottom=\"\",t.style.height=\"\",t.style.width=\"\";let i=t.getBoundingClientRect(),n=Number.isFinite(e.maxHeight)?Math.min(e.maxHeight,window.innerHeight):window.innerHeight,o=Math.min(n,(m=e.height)!=null?m:i.height),a=Pc(e.location.y,o,e.verticalPos,r);a+o>window.innerHeight-8&&(e.alternateLocation?(a=Pc(e.alternateLocation.y,o,e.verticalPos,r),a+o>window.innerHeight-8&&(a=void 0)):a=void 0),Number.isFinite(a)||(a=Math.max(8,window.innerHeight-8-o),8+o>window.innerHeight-8&&(t.style.bottom=\"8px\")),o=Math.min(a+o,window.innerHeight-8)-a;let s=Number.isFinite(e.maxWidth)?Math.min(e.maxWidth,window.innerWidth):window.innerWidth,l=Math.min(s,(d=e.width)!=null?d:i.width),c=Pc(e.location.x,l,e.horizontalPos,r);c+l>window.innerWidth-8&&(e.alternateLocation?(c=Ab(e.alternateLocation.x,l,e.verticalPos,r),c+l>window.innerWidth-8&&(c=void 0)):c=void 0),Number.isFinite(c)||(c=Math.max(8,window.innerWidth-8-l),8+l>window.innerWidth-8&&(t.style.right=\"8px\")),l=Math.min(c+l,window.innerWidth-8)-c,r===\"rtl\"?t.style.right=`${Math.ceil(window.innerWidth-c-l).toString()}px`:t.style.left=`${Math.ceil(c).toString()}px`,t.style.top=`${Math.ceil(a).toString()}px`,o!==i.height&&(t.style.height=`${Math.ceil(o).toString()}px`),l!==i.width&&(t.style.width=`${Math.ceil(l).toString()}px`)}function rh(t,e){return Math.hypot(e.x-t.x,e.y-t.y)}function qr(t){return\"submenu\"in t}function St(t){return\"type\"in t&&t.type===\"command\"||\"onMenuSelect\"in t||\"id\"in t}function So(t){return\"type\"in t&&t.type===\"divider\"}function Es(t){return\"type\"in t&&t.type===\"heading\"}var ih={};function Ts(t){let e=ih[t];if(!e){let r;switch(t){case\"checkmark\":r=`<span aria-hidden=\"true\" class=\"ui-checkmark\"><svg  xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z\"></path></svg>\n      </span>`;break;case\"trailing-chevron\":r='<span aria-hidden=\"true\" class=\"ui-trailing-chevron\"><svg focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"><path fill=\"currentColor\" d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"></path></svg></span>';break;case\"mixedmark\":r='<span aria-hidden=\"true\" class=\"ui-mixedmark\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M0 256c0-13.3 10.7-24 24-24H488c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24z\"/></svg></span>'}if(r){let i=document.createElement(\"template\");i.innerHTML=r,ih[t]=i,e=i}}if(e){if(\"content\"in e)return e.content.cloneNode(!0);let r=document.createElement(\"svg\");return r.innerHTML=e.innerHTML,r}}var nh=80,Sn=class{constructor(e,r){this._className=\"\";this._element=null;var i;this.parentMenu=r,this._declaration=e,Object.freeze(this._declaration),qr(e)?(this.type=\"submenu\",this.submenu=new kn(e.submenu,{parentMenu:r,submenuClass:e.submenuClass,columnCount:e.columnCount})):this.type=(i=e.type)!=null?i:\"command\",this.hasCheck=St(e)&&e.checked!==void 0}get rootMenu(){return this.parentMenu.rootMenu}get abortController(){return this._abortController||(this._abortController=new AbortController),this._abortController}dispose(){var e,r;(e=this._abortController)==null||e.abort(),this._abortController=void 0,(r=this._element)==null||r.remove(),this._element=null,this.submenu&&this.submenu.dispose(),this.submenu=void 0}get menuItem(){return this._declaration}get label(){var e;return(e=this._label)!=null?e:\"\"}set label(e){e===void 0&&(e=\"\"),e!==this._label&&(this._label=e,this.dirty=!0)}get visible(){return this._visible}set visible(e){e!==this._visible&&(this._visible=e,this.dirty=!0)}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this.element&&(e?this.element.removeAttribute(\"aria-disabled\"):this.element.setAttribute(\"aria-disabled\",\"true\")),this.dirty=!0}get checked(){return this._checked}set checked(e){this._checked=e,this.dirty=!0}get tooltip(){return this._tooltip}set tooltip(e){e!==this._tooltip&&(this._tooltip=e,this.dirty=!0)}get ariaLabel(){return this._ariaLabel}set ariaLabel(e){e!==this._ariaLabel&&(this._ariaLabel=e,this.dirty=!0)}get active(){var e,r;return(r=(e=this.element)==null?void 0:e.classList.contains(\"active\"))!=null?r:!1}set active(e){this.element&&this.element.classList.toggle(\"active\",e)}updateState(e){var i,n,o;let r=this._declaration;if(So(r)){this.enabled=!1,this.checked=!1;return}Es(r)&&(this.enabled=!1,this.checked=!1,this.visible=!0),St(r)&&(this.checked=(i=wi(r.checked,e))!=null?i:!1),(St(r)||qr(r))&&(this.enabled=(n=wi(r.enabled,e))!=null?n:!0,this.visible=(o=wi(r.visible,e))!=null?o:!0,this.visible&&this.enabled&&this.submenu&&(this.submenu.updateState(e),this.submenu.visible||(this.visible=!1))),(St(r)||Es(r)||qr(r))&&(this.label=wi(r.label,e),this._className=wi(r.class,e),this.tooltip=wi(r.tooltip,e),this.ariaLabel=wi(r.ariaLabel,e)),this._element&&this.updateElement()}set dirty(e){e&&this.parentMenu&&(this.parentMenu.dirty=!0)}updateElement(){var i;if(!this.visible||!this.element)return;let e=this.element;e.textContent=\"\",e.className=\"\",e.className=(i=this._className)!=null?i:\"\",this.enabled?e.removeAttribute(\"aria-disabled\"):e.setAttribute(\"aria-disabled\",\"true\"),this.checked===!0?(e.setAttribute(\"aria-checked\",\"true\"),e.append(Ts(\"checkmark\"))):this.checked===\"mixed\"?(e.setAttribute(\"aria-checked\",\"mixed\"),e.append(Ts(\"mixedmark\"))):e.removeAttribute(\"aria-checked\"),this.ariaLabel&&e.setAttribute(\"aria-label\",this.ariaLabel);let r=document.createElement(\"span\");if(r.className=this.parentMenu.hasCheck?\"label indent\":\"label\",this.type===\"heading\"&&r.classList.add(\"heading\"),r.innerHTML=this.label,e.append(r),this._tooltip&&e.setAttribute(\"data-tooltip\",this._tooltip),St(this._declaration)&&this._declaration.keyboardShortcut){let n=document.createElement(\"kbd\");n.innerHTML=pn(this._declaration.keyboardShortcut),e.append(n)}this.type===\"submenu\"&&e.append(Ts(\"trailing-chevron\"))}get element(){if(this._element)return this._element;if(So(this._declaration)){let i=document.createElement(\"li\");return i.setAttribute(\"part\",\"menu-divider\"),i.setAttribute(\"role\",\"divider\"),this._element=i,i}let e=document.createElement(\"li\");this._element=e,(St(this._declaration)||Es(this._declaration)||qr(this._declaration))&&e.setAttribute(\"part\",\"menu-item\"),e.setAttribute(\"tabindex\",\"-1\"),this.hasCheck?e.setAttribute(\"role\",\"menuitemcheckbox\"):e.setAttribute(\"role\",\"menuitem\"),this.type===\"submenu\"&&(e.setAttribute(\"aria-haspopup\",\"true\"),e.setAttribute(\"aria-expanded\",\"false\"));let r=this.abortController.signal;return e.addEventListener(\"pointerenter\",this,{signal:r}),e.addEventListener(\"pointerleave\",this,{signal:r}),e.addEventListener(\"pointerup\",this,{signal:r}),e.addEventListener(\"click\",this,{signal:r}),this._element}dispatchSelect(){var i;if(!St(this._declaration))return;let e=new CustomEvent(\"menu-select\",{cancelable:!0,bubbles:!0,detail:{modifiers:this.rootMenu.modifiers,id:this._declaration.id,data:this._declaration.data}});this.parentMenu.dispatchEvent(e)&&typeof this._declaration.onMenuSelect==\"function\"&&this._declaration.onMenuSelect({target:(i=this.parentMenu.host)!=null?i:void 0,modifiers:this.rootMenu.modifiers,id:this._declaration.id,data:this._declaration.data})}handleEvent(e){var r;if(!(!this.visible||!this.enabled)){if(e.type===\"click\"){this.rootMenu.state===\"modal\"&&this.select(),e.stopPropagation(),e.preventDefault();return}if(e.type===\"pointerenter\"){let i=e;this.rootMenu.cancelDelayedOperation(),this.parentMenu.isSubmenuOpen&&((r=this.parentMenu.activeMenuItem)!=null&&r.movingTowardSubmenu(i))?this.rootMenu.scheduleOperation(()=>{this.parentMenu.activeMenuItem=this,this.openSubmenu()}):(this.parentMenu.activeMenuItem=this,this.openSubmenu({withDelay:!0}));return}if(e.type===\"pointerleave\"){this.rootMenu.activeSubmenu===this.parentMenu&&(this.parentMenu.activeMenuItem=null);return}if(e.type===\"pointerup\"){this.rootMenu.state!==\"modal\"&&this.select(),e.stopPropagation(),e.preventDefault();return}}}select(){if(this.rootMenu.cancelDelayedOperation(),this.type===\"submenu\"){this.openSubmenu();return}this.active=!1,setTimeout(()=>{this.active=!0,setTimeout(()=>{this.active=!1,this.rootMenu.hide(),this.dispatchSelect()},nh)},nh)}openSubmenu(e){var n;if(this.type!==\"submenu\"||!this.element)return;if((n=e==null?void 0:e.withDelay)!=null&&n){this.rootMenu.scheduleOperation(()=>this.openSubmenu());return}let r=this.element.getBoundingClientRect(),i=Cs(this.element);this.submenu.show({container:this.rootMenu.element.parentNode,location:{x:Rc(r,\"trailing\",i),y:r.top-4},alternateLocation:{x:Rc(r,\"leading\",i),y:r.top-4}})}movingTowardSubmenu(e){if(!this.element||this.type!==\"submenu\")return!1;let r=this.rootMenu.lastMoveEvent;if(!r)return!1;let i=e.timeStamp-r.timeStamp;if(i>500)return!1;let n=e.clientX-r.clientX;if(Cb(n,r.clientY-e.clientY,i)<=.2)return!1;let a=\"right\";if(this.submenu.element){let s=this.submenu.element.getBoundingClientRect(),l=this.element.getBoundingClientRect();s.left<l.left+l.width/2&&(a=\"left\")}return a===\"right\"?n>0:n<0}};function Cb(t,e,r){return Math.hypot(t,e)/r}function wi(t,e){return t===void 0||typeof t!=\"function\"?t:(e!=null||(e={alt:!1,control:!1,shift:!1,meta:!1}),t(e))}var kn=class t{constructor(e,r){this._element=null;this._activeMenuItem=null;this._dirty=!0;var i,n;this.parentMenu=(i=r==null?void 0:r.parentMenu)!=null?i:null,this._submenuClass=r==null?void 0:r.submenuClass,this.columnCount=(n=r==null?void 0:r.columnCount)!=null?n:1,this.isSubmenuOpen=!1,this.menuItems=e}get children(){return Object.freeze([...this._menuItems])}set menuItems(e){let r=this.parentMenu;this.dispose(),this.parentMenu=r,e=[...e],this._menuItems=e.map(i=>i.onCreate?i.onCreate(i,this):new Sn(i,this)),this.hasCheck=void 0,this.dirty=!0}dispose(){var e;this.hide(),this._element&&this._element.remove(),this._abortController&&this._abortController.abort(),(e=this._menuItems)==null||e.forEach(r=>r.dispose()),this._menuItems=[],this._activeMenuItem=null,this.parentMenu=null}handleEvent(e){if(e.type===\"wheel\"&&this._element){let r=e;this._element.scrollBy(0,r.deltaY),e.stopPropagation()}}dispatchEvent(e){return this.rootMenu.dispatchEvent(e)}get host(){return this.rootMenu.host}get rootMenu(){return this.parentMenu.rootMenu}updateState(e){var a,s,l;this._menuItems.forEach(c=>c.updateState(e));let r=this.hasCheck;this.hasCheck=this._menuItems.some(c=>c.visible&&c.hasCheck),this.hasCheck!==r&&this._menuItems.forEach(c=>c.updateState(e));let i,n=0;for(let c of this._menuItems)c.type===\"heading\"?(i&&n===0&&(i.visible=!1),i=c,n=0):c.type===\"divider\"&&i?(i.visible=n>0,i=void 0,n=0):i&&c.visible&&(n+=1);i&&(i.visible=n>0);let o=!0;for(let c of this._menuItems)c.type===\"divider\"?(c.visible=!o,o=!0):c.visible&&(o=!1);(a=this.activeMenuItem)!=null&&a.visible||(this.activeMenuItem=null),!((s=this.activeMenuItem)!=null&&s.enabled)&&((l=this.activeMenuItem)==null?void 0:l.type)===\"submenu\"&&this._activeMenuItem.submenu.hide(),this._dirty=!1}get enabled(){return this.updateIfDirty(),this._menuItems.some(e=>e.type!==\"divider\"&&e.visible&&e.enabled)}get visible(){return this.updateIfDirty(),this._menuItems.some(e=>e.type!==\"divider\"&&e.visible)}set dirty(e){this._dirty!==e&&e&&this.parentMenu&&(this._dirty=!0,this.parentMenu.dirty=!0)}updateIfDirty(){this._dirty&&this.updateState(this.rootMenu.modifiers)}updateElement(){var e;if(this._element){this._element.textContent=\"\";for(let{element:r,visible:i}of this._menuItems)r&&i&&this._element.append(r);(e=this._element.querySelector(\"li:first-of-type\"))==null||e.setAttribute(\"tabindex\",\"0\")}}get element(){if(this._element)return this._element;let e=document.createElement(\"menu\");e.setAttribute(\"role\",\"menu\"),e.setAttribute(\"tabindex\",\"-1\"),e.setAttribute(\"aria-orientation\",\"vertical\"),e.setAttribute(\"part\",\"ui-menu-container\"),this._submenuClass&&e.classList.add(this._submenuClass),e.classList.add(\"ui-menu-container\"),this._abortController||(this._abortController=new AbortController);let r=this._abortController.signal;return e.addEventListener(\"focus\",this,{signal:r}),e.addEventListener(\"wheel\",this,{passive:!0,signal:r}),this._element=e,this.updateElement(),e}get activeMenuItem(){return this._activeMenuItem}set activeMenuItem(e){var r,i,n,o;if(this.rootMenu.cancelDelayedOperation(),e!==this._activeMenuItem){if(this.activeMenuItem){let a=this.activeMenuItem;a.active=!1,(r=a.submenu)==null||r.hide()}if(!((i=e==null?void 0:e.visible)==null||i)){this._activeMenuItem=null;return}this._activeMenuItem=e,e&&(e.active=!0)}e?(n=e.element)==null||n.focus({preventScroll:!0}):(o=this._element)==null||o.focus({preventScroll:!0})}get firstMenuItem(){this.updateIfDirty();let e=0,r=!1,i=this._menuItems;for(;!r&&e<=i.length-1;){let n=i[e];r=n.type!==\"divider\"&&n.visible&&n.enabled,e+=1}return r?i[e-1]:null}get lastMenuItem(){this.updateIfDirty();let e=this._menuItems,r=e.length-1,i=!1;for(;!i&&r>=0;){let n=e[r];i=n.type!==\"divider\"&&n.visible&&n.enabled,r-=1}return i?e[r+1]:null}nextMenuItem(e){if(e===0)return this._activeMenuItem;if(!this._activeMenuItem)return e>0?this.firstMenuItem:this.lastMenuItem;if(!this.firstMenuItem||!this.lastMenuItem||!this._activeMenuItem)return null;this.updateIfDirty();let r=this._menuItems.indexOf(this.firstMenuItem),i=this._menuItems.indexOf(this.lastMenuItem),n=this._menuItems.indexOf(this._activeMenuItem),o=1;for(;n>=r&&n<=i;){n+=e>0?1:-1;let a=this._menuItems[n];if(!a)break;if(a.visible&&a.enabled){if(o===Math.abs(e))return this._menuItems[n];o+=1}}return e>0?this.lastMenuItem:this.firstMenuItem}getMenuItemColumn(e){this.updateIfDirty();let i=this._menuItems.filter(n=>n.visible&&n.enabled).indexOf(e);return i<0?-1:i%this.columnCount}static get collator(){return t._collator||(t._collator=new Intl.Collator(void 0,{usage:\"search\",sensitivity:\"base\"})),t._collator}findMenuItem(e){var a;this.updateIfDirty();let r=this._menuItems.filter(s=>s.type!==\"divider\"&&s.visible&&s.enabled);if(r.length===0)return null;let i=Math.max(...r.map(s=>s.label.length))-e.length;if(i<0)return null;let n=null,o=0;for(;o<i&&!n;)n=(a=r.find(s=>t.collator.compare(e,s.label.substring(o,e.length))===0))!=null?a:null,o++;return n}show(e){return!this.visible||!e.container?!1:(this.updateElement(),e.container.appendChild(this.element),Xs()&&(this.element.popover=\"manual\",this.element.showPopover()),e.location&&th(this.element,{location:e.location,alternateLocation:e.alternateLocation,verticalPos:\"bottom\",horizontalPos:\"start\"}),oh(),this.element.focus({preventScroll:!0}),ah(),this.parentMenu&&(this.parentMenu.openSubmenu=this),!0)}hide(){var e,r,i,n,o,a;this.openSubmenu=null,this.activeMenuItem=null,this.parentMenu&&(this.parentMenu.openSubmenu=null),!(!((e=this._element)!=null&&e.isConnected)||!this._element.parentElement)&&(Xs()&&((r=this._element)!=null&&r.popover)&&this._element.hidePopover(),oh(),(n=(i=this.parentMenu)==null?void 0:i.element)==null||n.focus(),(a=(o=this._element)==null?void 0:o.parentNode)==null||a.removeChild(this._element),ah())}set openSubmenu(e){var i,n,o,a;let r=e!==null;((i=this.activeMenuItem)==null?void 0:i.type)===\"submenu\"&&((n=this.activeMenuItem.element)==null||n.setAttribute(\"aria-expanded\",r.toString())),(a=(o=this.activeMenuItem)==null?void 0:o.element)==null||a.classList.toggle(\"is-submenu-open\",r),this.isSubmenuOpen=r}};function oh(){document.addEventListener(\"focusin\",Hr,!0),document.addEventListener(\"focusout\",Hr,!0),document.addEventListener(\"focus\",Hr,!0),document.addEventListener(\"blur\",Hr,!0)}function Hr(t){t.stopImmediatePropagation(),t.preventDefault()}function ah(){document.removeEventListener(\"focusin\",Hr,!0),document.removeEventListener(\"focusout\",Hr,!0),document.removeEventListener(\"focus\",Hr,!0),document.removeEventListener(\"blur\",Hr,!0)}var Ds=class Ds extends kn{constructor(r,i){var n;super(r);this.state=\"closed\";this.typingBufferResetTimer=0;this.hysteresisTimer=0;this._updating=!1;this._host=(n=i==null?void 0:i.host)!=null?n:null,this.isDynamic=r.some(sh),this._modifiers={shift:!1,control:!1,alt:!1,meta:!1},this.typingBuffer=\"\",this.state=\"closed\"}get modifiers(){return this._modifiers}set modifiers(r){hp(this._modifiers,r)||(this._modifiers=r,this.dirty=!0)}get activeSubmenu(){let r=this;for(;r.isSubmenuOpen;)r=r.activeMenuItem.submenu;return r}set dirty(r){this._updating||this._dirty!==r&&(this._dirty=!0,r&&setTimeout(()=>{this.updateState(this.modifiers),this.updateElement()}))}updateState(r){this._updating=!0,this.modifiers=r!=null?r:this.modifiers,super.updateState(this.modifiers),this._updating=!1}handleKeyupEvent(r){this.isDynamic&&(this.modifiers=qt(r)),r.stopImmediatePropagation()}handleKeydownEvent(r){var a,s,l;if(r.key===\"Tab\"||r.key===\"Escape\"){this.hide();return}this.isDynamic&&(this.modifiers=qt(r));let i=!0,n=this.activeSubmenu,o=n.activeMenuItem;switch(r.key){case\" \":case\"Space\":case\"Return\":case\"Enter\":o==null||o.select(qt(r));break;case\"ArrowRight\":if((o==null?void 0:o.type)===\"submenu\")o.select(qt(r)),this.activeSubmenu.activeMenuItem=this.activeSubmenu.firstMenuItem;else if(!o)n.activeMenuItem=n.firstMenuItem;else{let c=(a=n.getMenuItemColumn(o))!=null?a:-1;if(c>=0&&c<((s=n.columnCount)!=null?s:1)-1){let u=n.nextMenuItem(1);u&&(n.activeMenuItem=u)}}break;case\"ArrowLeft\":if(n===this.rootMenu)o||(n.activeMenuItem=n.firstMenuItem);else if((o&&(l=n.getMenuItemColumn(o))!=null?l:-1)<=0||!o){n.hide();let u=n.parentMenu.activeMenuItem;if(u){let{element:m}=u;m==null||m.focus(),m==null||m.classList.remove(\"is-submenu-open\")}}else{let u=n.nextMenuItem(-1);u&&(n.activeMenuItem=u)}break;case\"ArrowDown\":n.activeMenuItem=n.nextMenuItem(n.columnCount);break;case\"ArrowUp\":n.activeMenuItem=n.nextMenuItem(-n.columnCount);break;case\"Home\":case\"PageUp\":n.activeMenuItem=n.firstMenuItem;break;case\"End\":case\"PageDown\":n.activeMenuItem=n.lastMenuItem;break;case\"Backspace\":if(this.typingBuffer&&(this.typingBuffer=this.typingBuffer.slice(0,-1),this.typingBuffer)){clearTimeout(this.typingBufferResetTimer);let c=n.findMenuItem(this.typingBuffer);c&&(n.activeMenuItem=c),this.typingBufferResetTimer=setTimeout(()=>{this.typingBuffer=\"\"},500)}break;default:if(cr(r)){isFinite(this.typingBufferResetTimer)&&clearTimeout(this.typingBufferResetTimer),this.typingBuffer+=r.key;let c=n.findMenuItem(this.typingBuffer);c&&(n.activeMenuItem=c),this.typingBufferResetTimer=setTimeout(()=>{this.typingBuffer=\"\"},500)}else i=!1}i&&(r.preventDefault(),r.stopPropagation())}handleEvent(r){if(r.type===\"keydown\")this.handleKeydownEvent(r);else if(r.type===\"keyup\")this.handleKeyupEvent(r);else if(r.type===\"pointermove\")this.lastMoveEvent=r;else if(r.type===\"pointerup\")Number.isFinite(this.rootMenu._openTimestamp)&&Date.now()-this.rootMenu._openTimestamp<120?this.state=\"modal\":this.state===\"modal\"&&r.target===this.scrim&&this.hide();else if(r.type===\"contextmenu\"){r.preventDefault(),r.stopPropagation();return}super.handleEvent(r)}dispatchEvent(r){return this._host?this._host.dispatchEvent(r):!0}get host(){return this._host}get scrim(){return Te.element}connectScrim(r){let i=this.scrim;i.addEventListener(\"pointerup\",this,!0),i.addEventListener(\"contextmenu\",this),i.addEventListener(\"keydown\",this),i.addEventListener(\"keyup\",this),i.addEventListener(\"pointermove\",this),Te.open({root:r,onDismiss:()=>this.hide()})}disconnectScrim(){let r=this.scrim;r.removeEventListener(\"pointerup\",this,!0),r.removeEventListener(\"contextmenu\",this),r.removeEventListener(\"keydown\",this),r.removeEventListener(\"keyup\",this),r.removeEventListener(\"pointermove\",this),Te.state===\"open\"&&Te.scrim.close()}get rootMenu(){return this}show(r){return this._onDismiss=r==null?void 0:r.onDismiss,r!=null&&r.modifiers&&(this.modifiers=r.modifiers),this.updateState(),this.connectScrim(r==null?void 0:r.target),super.show(g(p({},r),{container:this.scrim}))?(this._openTimestamp=Date.now(),this.state=\"open\",!0):(this.disconnectScrim(),!1)}hide(){this.cancelDelayedOperation(),this.state!==void 0&&(this.state!==\"closed\"&&(this.activeMenuItem=null,Te.element.parentElement.focus(),super.hide(),this.state=\"closed\",this.disconnectScrim()),this._onDismiss&&(this._onDismiss(),this._onDismiss=void 0))}scheduleOperation(r){this.cancelDelayedOperation();let i=Ds.SUBMENU_DELAY;if(i<=0){r();return}this.hysteresisTimer=setTimeout(()=>{this.hysteresisTimer=0,r()},i)}cancelDelayedOperation(){this.hysteresisTimer&&(clearTimeout(this.hysteresisTimer),this.hysteresisTimer=0)}};Ds.SUBMENU_DELAY=120;var ko=Ds;function sh(t){return So(t)?!1:typeof t.label==\"function\"||typeof t.ariaLabel==\"function\"||typeof t.tooltip==\"function\"||(St(t)||qr(t))&&(typeof t.enabled==\"function\"||typeof t.visible==\"function\")||St(t)&&typeof t.checked==\"function\"?!0:qr(t)?t.submenu.some(sh):!1}var Ln=class{};Ln.DELAY=300,Ln.MAX_DISTANCE=10;function lh(t){return new Promise((e,r)=>{let i=hn(t);i||e(!1);let n=i,o=setTimeout(()=>{a.abort(),e(rh(n,i)<Ln.MAX_DISTANCE)},Ln.DELAY),a=new AbortController,s=a.signal;for(let l of[\"pointermove\",\"pointerup\",\"pointercancel\"])window.addEventListener(l,c=>{if(c.type===\"pointerup\"||c.type===\"pointercancel\")clearTimeout(o),a.abort(),e(!1);else if(c.type===\"pointermove\"){let u=hn(c);u&&(n=u)}},{passive:!0,signal:s})})}async function Ic(t,e,r){if(t.defaultPrevented)return!1;if(t.type===\"contextmenu\"){let i=t;if(t.preventDefault(),t.stopPropagation(),r.show({target:e,location:hn(i),modifiers:qt(i)}))return!0}if(t.type===\"keydown\"){let i=t;if(i.code===\"ContextMenu\"||i.code===\"F10\"&&i.shiftKey){let n=e==null?void 0:e.getBoundingClientRect();if(ch(e)&&n&&r.show({target:e,location:{x:Math.ceil(n.left+n.width/2),y:Math.ceil(n.top+n.height/2)},modifiers:qt(i)}))return t.preventDefault(),t.stopPropagation(),!0}}if(t.type===\"pointerdown\"&&t.pointerType!==\"mouse\"&&t.button===0){let i=t.target;for(;i&&e!==i;)i=i.parentNode;if(!i||!r.visible)return!1;let n=hn(t);if(await lh(t))return r.state!==\"closed\"||!ch(e)?!1:(r.show({target:e,location:n}),!0)}return!1}function ch(t){return t.dispatchEvent(new Event(\"contextmenu\",{cancelable:!0}))}var uh=\"<mo>&#x2061;</mo>\",Bs=\"<mo>&#8290;</mo>\";function Os(t){return t.replace(/\"/g,\"&quot;\").replace(/'/g,\"&#39;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")}function re(t,e){return!t||!e.generateID?\"\":` extid=\"${t}\"`}function Eb(t,e,r){var m,d,h,f,x,v,b,_;let i=!1;e=e!=null?e:t.atoms.length;let n=\"\",o=\"\",a=t.atoms[t.index],s=(m=a.style)==null?void 0:m.variant,l=(d=a.style)==null?void 0:d.variantStyle,c=\"\";if(a.value&&(s||l)){let S=(h=Dn(a.value,s,l))!=null?h:a.value;if(S!==a.value)return t.index+=1,n=`<mi${re(a.id,r)}>${S}</mi>`,jt(n,t,r)||(t.mathML+=n,t.lastType=\"mi\"),!0;c=(f={upnormal:\"normal\",boldnormal:\"bold\",italicmain:\"italic\",bolditalicmain:\"bold-italic\",\"updouble-struck\":\"double-struck\",\"double-struck\":\"double-struck\",boldfraktur:\"bold-fraktur\",calligraphic:\"script\",upcalligraphic:\"script\",script:\"script\",boldscript:\"bold-script\",boldcalligraphic:\"bold-script\",fraktur:\"fraktur\",\"upsans-serif\":\"sans-serif\",\"boldsans-serif\":\"bold-sans-serif\",\"italicsans-serif\":\"sans-serif-italic\",\"bolditalicsans-serif\":\"sans-serif-bold-italic\",monospace:\"monospace\"}[(l!=null?l:\"\")+(s!=null?s:\"\")])!=null?f:\"\",c&&(c=` mathvariant=\"${c}\"`)}let u={\"\\\\exponentialE\":\"&#x02147;\",\"\\\\imaginaryI\":\"&#x2148;\",\"\\\\differentialD\":\"&#x2146;\",\"\\\\capitalDifferentialD\":\"&#x2145;\",\"\\\\alpha\":\"&#x03b1;\",\"\\\\pi\":\"&#x03c0;\",\"\\\\infty\":\"&#x221e;\",\"\\\\forall\":\"&#x2200;\",\"\\\\nexists\":\"&#x2204;\",\"\\\\exists\":\"&#x2203;\",\"\\\\hbar\":\"\\u210F\",\"\\\\cdotp\":\"\\u22C5\",\"\\\\ldots\":\"\\u2026\",\"\\\\cdots\":\"\\u22EF\",\"\\\\ddots\":\"\\u22F1\",\"\\\\vdots\":\"\\u22EE\",\"\\\\ldotp\":\".\"};if(a.command===\"!\")return t.index+=1,n=\"<mo>!</mo>\",jt(n,t,r)||(t.mathML+=n,t.lastType=\"mo\"),!0;if(u[a.command]){t.index+=1;let S=`<mi${re(a.id,r)}${c}>${u[a.command]}</mi>`;return(t.lastType===\"mi\"||t.lastType===\"mn\"||t.lastType===\"mtext\"||t.lastType===\"fence\")&&(S=Bs+S),jt(S,t,r)||(t.mathML+=S,t.lastType=\"mi\"),!0}if(a.command===\"\\\\operatorname\")o=An(a.body),t.index+=1;else if(s||l)for(;t.index<e&&(a.type===\"mord\"||a.type===\"macro\")&&!a.isDigit()&&s===((v=(x=a.style)==null?void 0:x.variant)!=null?v:\"\")&&l===((_=(b=a.style)==null?void 0:b.variantStyle)!=null?_:\"\");)o+=An([a]),t.index+=1,a=t.atoms[t.index];else(a.type===\"mord\"||a.type===\"macro\")&&!a.isDigit()&&(o+=An([a]),t.index+=1);if(o.length>0){i=!0,n=`<mi${c}>${o}</mi>`;let S=t.lastType;n.endsWith(\">f</mi>\")||n.endsWith(\">g</mi>\")?(n+=uh,t.lastType=\"applyfunction\"):t.lastType=/^<mo>(.*)<\\/mo>$/.test(n)?\"mo\":\"mi\",jt(n,t,r)||((S===\"mi\"||S===\"mn\"||S===\"mtext\"||S===\"fence\")&&(n=Bs+n),t.mathML+=n)}return i}function dh(t){return t.index<t.atoms.length&&t.atoms[t.index].superscript&&t.atoms[t.index].type===\"subsup\"}function mh(t){let e=-1,r=t.index,i=!1,n=!1;for(;r<t.atoms.length&&!i&&!n;){let o=t.atoms[r];i=!o.isDigit(),n=!i&&o.superscript!==void 0,r++}return n&&(e=r-1),e}function jt(t,e,r){var l;let i=e.atoms[e.index-1];if(!i)return!1;if(!i.superscript&&!i.subscript)if(((l=e.atoms[e.index])==null?void 0:l.type)===\"subsup\")i=e.atoms[e.index],e.index+=1;else return!1;let n=e.lastType;e.lastType=\"\";let o=U(i.superscript,r);e.lastType=\"\";let a=U(i.subscript,r);if(e.lastType=n,!o&&!a)return!1;let s=\"\";return o&&a?s=`<msubsup>${t}${a}${o}</msubsup>`:o?s=`<msup>${t}${o}</msup>`:a&&(s=`<msub>${t}${a}</msub>`),e.mathML+=s,e.lastType=\"\",!0}function Tb(t,e,r){e=e!=null?e:t.atoms.length;let i=t.index,n=\"\",o=mh(t);for(o>=0&&o<e&&(e=o);t.index<e&&t.atoms[t.index].mode===\"text\";)n+=t.atoms[t.index].value?t.atoms[t.index].value:\" \",t.index+=1;return n.length>0?(n=`<mtext ${re(t.atoms[i].id,r)}>${n}</mtext>`,o<0&&dh(t)&&(o=t.index,t.index+=1),jt(n,t,r)||(t.mathML+=n,t.lastType=\"mtext\"),!0):!1}function Db(t,e,r){e=e!=null?e:t.atoms.length;let i=t.index,n=\"\",o=mh(t);for(o>=0&&o<e&&(e=o);t.index<e&&t.atoms[t.index].isDigit();)n+=t.atoms[t.index].asDigit(),t.index+=1;return n.length<=0?!1:(n=\"<mn\"+re(t.atoms[i].id,r)+\">\"+n+\"</mn>\",o<0&&dh(t)&&(o=t.index,t.index+=1),jt(n,t,r)||(t.mathML+=n,t.lastType=\"mn\"),!0)}function Ob(t,e,r){let i=!1;e=e!=null?e:t.atoms.length;let n=\"\",o=\"\";if(t.index<e&&t.atoms[t.index].type===\"mopen\"){let a=!1,s=0,l=t.index,c=-1,u=l+1;for(;u<e&&!a;)t.atoms[u].type===\"mopen\"?s+=1:t.atoms[u].type===\"mclose\"&&(s-=1),s===-1&&(a=!0,c=u),u+=1;a&&(n=\"<mrow>\",n+=Si(t.atoms[l],r),n+=U(t.atoms,r,l+1,c),n+=Si(t.atoms[c],r),n+=\"</mrow>\",t.index=c+1,(t.lastType===\"mi\"||t.lastType===\"mn\"||t.lastType===\"mfrac\"||t.lastType===\"fence\")&&(t.mathML+=Bs),jt(n,t,r)&&(i=!0,t.lastType=\"\",n=\"\"),o=\"fence\")}return n.length>0&&(i=!0,t.mathML+=n,t.lastType=o),i}function Bb(t,e,r){let i=!1;e=e!=null?e:t.atoms.length;let n=\"\",o=\"\",a=t.atoms[t.index];if(!a)return!1;let s={\"\\\\ne\":\"&ne;\",\"\\\\neq\":\"&ne;\",\"\\\\pm\":\"&#177;\",\"\\\\times\":\"&#215;\",\"\\\\colon\":\":\",\"\\\\vert\":\"|\",\"\\\\Vert\":\"\\u2225\",\"\\\\mid\":\"\\u2223\",\"\\\\{\":\"{\",\"\\\\}\":\"}\",\"\\\\lbrace\":\"{\",\"\\\\rbrace\":\"}\",\"\\\\lbrack\":\"[\",\"\\\\rbrack\":\"]\",\"\\\\lparen\":\"(\",\"\\\\rparen\":\")\",\"\\\\langle\":\"\\u27E8\",\"\\\\rangle\":\"\\u27E9\",\"\\\\lfloor\":\"\\u230A\",\"\\\\rfloor\":\"\\u230B\",\"\\\\lceil\":\"\\u2308\",\"\\\\rceil\":\"\\u2309\"};if(s[a.command]){t.index+=1;let l=`<mo${re(a.id,r)}>${s[a.command]}</mo>`;return jt(l,t,r)||(t.mathML+=l,t.lastType=\"mo\"),!0}if(t.index<e&&(a.type===\"mbin\"||a.type===\"mrel\"))n+=zc(t.atoms[t.index],r),t.index+=1,o=\"mo\";else if(t.index<e&&(a.type===\"mop\"||a.type===\"operator\"||a.type===\"extensible-symbol\")){if(a.subsupPlacement===\"over-under\"&&(a.superscript||a.subscript)){let l=Si(a,r);return a.superscript&&a.subscript?(n+=\"<munderover>\"+l,n+=U(a.subscript,r),n+=U(a.superscript,r),n+=\"</munderover>\"):a.superscript?(n+=\"<mover>\"+l,n+=U(a.superscript,r),n+=\"</mover>\"):a.subscript&&(n+=\"<munder>\"+l,n+=U(a.subscript,r),n+=\"</munder>\"),t.mathML+=n,t.lastType=\"mo\",t.index+=1,!0}{let l=t.atoms[t.index],c=l.value===\"\\\\operatorname\",u=c?'<mi class=\"MathML-Unit\"'+re(l.id,r)+\">\"+An(l.value)+\"</mi>\":Si(l,r);n+=u,!c&&!/^<mo>(.*)<\\/mo>$/.test(u)?(n+=uh,o=\"applyfunction\"):o=c?\"mi\":\"mo\"}(t.lastType===\"mi\"||t.lastType===\"mn\")&&!/^<mo>(.*)<\\/mo>$/.test(n)&&(n=Bs+n),t.index+=1}return n.length>0&&(i=!0,jt(n,t,r)||(t.mathML+=n,t.lastType=o)),i}function U(t,e,r,i){e!=null||(e={});let n={atoms:[],index:r!=null?r:0,mathML:\"\",lastType:\"\"};if(typeof t==\"number\"||typeof t==\"boolean\")n.mathML=t.toString();else if(typeof t==\"string\")n.mathML=t;else if(t instanceof y)n.mathML=zc(t,e);else if(Array.isArray(t)){n.atoms=t;let o=0;for(i=i||(t?t.length:0);n.index<i;)if(Tb(n,i,e)||Db(n,i,e)||Eb(n,i,e)||Bb(n,i,e)||Ob(n,i,e))o+=1;else if(n.index<i){let a=zc(n.atoms[n.index],e);n.lastType===\"mn\"&&a.length>0&&n.atoms[n.index].type===\"genfrac\"&&(a=\"<mo>&#x2064;</mo>\"+a),n.atoms[n.index].type===\"genfrac\"?n.lastType=\"mfrac\":n.lastType=\"\",n.index+=1,jt(a,n,e)?o+=1:a.length>0&&(n.mathML+=a,o+=1)}o>1&&(n.mathML=\"<mrow>\"+n.mathML+\"</mrow>\")}return n.mathML}function Si(t,e){let r=\"\",i=An(t.value);return i&&(r=\"<mo\"+re(t.id,e)+\">\"+i+\"</mo>\"),r}function An(t){if(!t)return\"\";if(typeof t==\"string\")return Os(t);if(!Array.isArray(t)&&typeof t.body==\"string\")return Os(t.body);let e=\"\";for(let r of t)typeof r.value==\"string\"&&(e+=r.value);return Os(e)}function zc(t,e){var x,v,b,_,S,A,E,D,L,K,$,G,R,N,j,T,H,ie,X,be,ye,Be,Lt;if(t.mode===\"text\")return`<mi${re(t.id,e)}>${t.value}</mi>`;let r={widehat:\"^\",widecheck:\"\\u02C7\",widetilde:\"~\",utilde:\"~\",overleftarrow:\"\\u2190\",underleftarrow:\"\\u2190\",xleftarrow:\"\\u2190\",longleftarrow:\"\\u2190\",overrightarrow:\"\\u2192\",underrightarrow:\"\\u2192\",xrightarrow:\"\\u2192\",longrightarrow:\"\\u2192\",underbrace:\"\\u23DF\",overbrace:\"\\u23DE\",overgroup:\"\\u23E0\",undergroup:\"\\u23E1\",overleftrightarrow:\"\\u2194\",underleftrightarrow:\"\\u2194\",xleftrightarrow:\"\\u2194\",Overrightarrow:\"\\u21D2\",xRightarrow:\"\\u21D2\",overleftharpoon:\"\\u21BC\",xleftharpoonup:\"\\u21BC\",overrightharpoon:\"\\u21C0\",xrightharpoonup:\"\\u21C0\",xLeftarrow:\"\\u21D0\",xLeftrightarrow:\"\\u21D4\",xhookleftarrow:\"\\u21A9\",xhookrightarrow:\"\\u21AA\",xmapsto:\"\\u21A6\",xrightharpoondown:\"\\u21C1\",xleftharpoondown:\"\\u21BD\",xrightleftharpoons:\"\\u21CC\",longrightleftharpoons:\"\\u21CC\",xleftrightharpoons:\"\\u21CB\",xtwoheadleftarrow:\"\\u219E\",xtwoheadrightarrow:\"\\u21A0\",xlongequal:\"=\",xtofrom:\"\\u21C4\",xleftrightarrows:\"\\u21C4\",xRightleftharpoons:\"\\u21CC\",longRightleftharpoons:\"\\u21CC\",xLeftrightharpoons:\"\\u21CB\",longLeftrightharpoons:\"\\u21CB\"},i={\"\\\\!\":-3/18,\"\\\\ \":6/18,\"\\\\,\":3/18,\"\\\\:\":4/18,\"\\\\>\":4/18,\"\\\\;\":5/18,\"\\\\enspace\":.5,\"\\\\quad\":1,\"\\\\qquad\":2,\"\\\\enskip\":.5},n=\"\",o=\"\",a,s,l,c,u,m,{command:d}=t;if(t.command===\"\\\\error\")return`<merror${re(t.id,e)}>${U(t.body,e)}</merror>`;let h={\"\\\\vert\":\"|\",\"\\\\Vert\":\"\\u2225\",\"\\\\mid\":\"\\u2223\",\"\\\\lbrack\":\"[\",\"\\\\rbrack\":\"]\",\"\\\\{\":\"{\",\"\\\\}\":\"}\",\"\\\\lbrace\":\"{\",\"\\\\rbrace\":\"}\",\"\\\\lparen\":\"(\",\"\\\\rparen\":\")\",\"\\\\langle\":\"\\u27E8\",\"\\\\rangle\":\"\\u27E9\",\"\\\\lfloor\":\"\\u230A\",\"\\\\rfloor\":\"\\u230B\",\"\\\\lceil\":\"\\u2308\",\"\\\\rceil\":\"\\u2309\"},f={\"\\\\vec\":\"&#x20d7;\",\"\\\\acute\":\"&#x00b4;\",\"\\\\grave\":\"&#x0060;\",\"\\\\dot\":\"&#x02d9;\",\"\\\\ddot\":\"&#x00a8;\",\"\\\\tilde\":\"&#x007e;\",\"\\\\bar\":\"&#x00af;\",\"\\\\breve\":\"&#x02d8;\",\"\\\\check\":\"&#x02c7;\",\"\\\\hat\":\"&#x005e;\"};switch(t.type){case\"first\":break;case\"error\":if(t.command===\"\\\\\\\\\")break;n=`<merror${re(t.id,e)}>${U(t.body,e)}</merror>`;break;case\"group\":case\"root\":n=U(t.body,e);break;case\"array\":let ue=t;if((ue.leftDelim&&ue.leftDelim!==\".\"||ue.rightDelim&&ue.rightDelim!==\".\")&&(n+=\"<mrow>\",ue.leftDelim&&ue.leftDelim!==\".\"&&(n+=`<mo>${h[ue.leftDelim]||ue.leftDelim}</mo>`)),n+=\"<mtable\",ue.colFormat){for(n+=' columnalign=\"',l=0;l<ue.colFormat.length;l++){let Ye=ue.colFormat[l];\"align\"in Ye&&(n+={l:\"left\",c:\"center\",r:\"right\"}[Ye.align]+\" \")}n+='\"'}for(n+=\">\",s=0;s<ue.rows.length;s++){for(n+=\"<mtr>\",a=0;a<ue.rows[s].length;a++)n+=\"<mtd>\"+U(ue.rows[s][a],e)+\"</mtd>\";n+=\"</mtr>\"}n+=\"</mtable>\",(ue.leftDelim&&ue.leftDelim!==\".\"||ue.rightDelim&&ue.rightDelim!==\".\")&&(ue.rightDelim&&ue.rightDelim!==\".\"&&(n+=`<mo>${h[ue.rightDelim]||ue.rightDelim}</mo>`),n+=\"</mrow>\");break;case\"genfrac\":let Se=t;(Se.leftDelim||Se.rightDelim)&&(n+=\"<mrow>\"),Se.leftDelim&&Se.leftDelim!==\".\"&&(n+=\"<mo\"+re(t.id,e)+\">\"+(h[Se.leftDelim]||Se.leftDelim)+\"</mo>\"),Se.hasBarLine?(n+=\"<mfrac>\",n+=U(t.above,e)||\"<mi>&nbsp;</mi>\",n+=U(t.below,e)||\"<mi>&nbsp;</mi>\",n+=\"</mfrac>\"):(n+=\"<mtable\"+re(t.id,e)+\">\",n+=\"<mtr>\"+U(t.above,e)+\"</mtr>\",n+=\"<mtr>\"+U(t.below,e)+\"</mtr>\",n+=\"</mtable>\"),Se.rightDelim&&Se.rightDelim!==\".\"&&(n+=\"<mo\"+re(t.id,e)+\">\"+(h[Se.rightDelim]||Se.rightDelim)+\"</mo>\"),(Se.leftDelim||Se.rightDelim)&&(n+=\"</mrow>\");break;case\"surd\":t.hasEmptyBranch(\"above\")?(n+=\"<msqrt\"+re(t.id,e)+\">\",n+=U(t.body,e),n+=\"</msqrt>\"):(n+=\"<mroot\"+re(t.id,e)+\">\",n+=U(t.body,e),n+=U(t.above,e),n+=\"</mroot>\");break;case\"leftright\":let Jr=t,fr=Jr.leftDelim;n=\"<mrow>\",fr&&fr!==\".\"&&(n+=`<mo${re(t.id,e)}>${(x=h[fr])!=null?x:fr}</mo>`),t.body&&(n+=U(t.body,e));let Bo=Jr.matchingRightDelim();Bo&&Bo!==\".\"&&(n+=`<mo${re(t.id,e)}>${(v=h[Bo])!=null?v:Bo}</mo>`),n+=\"</mrow>\";break;case\"sizeddelim\":case\"delim\":n+=`<mo${re(t.id,e)}>${h[t.value]||t.value}</mo>`;break;case\"accent\":let zh=t;n+='<mover accent=\"true\"'+re(t.id,e)+\">\",n+=U(t.body,e),n+=\"<mo>\"+(f[d]||zh.accent)+\"</mo>\",n+=\"</mover>\";break;case\"line\":case\"overlap\":break;case\"overunder\":let Ue=t;u=t.above,c=t.below,(Ue.svgAbove||u)&&(Ue.svgBelow||c)?m=t.body:u&&u.length>0?(m=t.body,(_=(b=t.body)==null?void 0:b[0])!=null&&_.below?(c=t.body[0].below,m=t.body[0].body):((A=(S=t.body)==null?void 0:S[0])==null?void 0:A.type)===\"first\"&&((D=(E=t.body)==null?void 0:E[1])!=null&&D.below)&&(c=t.body[1].below,m=t.body[1].body)):c&&c.length>0&&(m=t.body,(K=(L=t.body)==null?void 0:L[0])!=null&&K.above?(u=t.body[0].above,m=t.body[0].body):((G=($=t.body)==null?void 0:$[0])==null?void 0:G.type)===\"first\"&&((N=(R=t.body)==null?void 0:R[1])!=null&&N.above)&&(u=t.body[1].above,m=t.body[1].body)),(Ue.svgAbove||u)&&(Ue.svgBelow||c)?(n+=`<munderover ${re(t.id,e)}>`,n+=(j=r[Ue.svgBody])!=null?j:U(m,e),n+=(T=r[Ue.svgBelow])!=null?T:U(c,e),n+=(H=r[Ue.svgAbove])!=null?H:U(u,e),n+=\"</munderover>\"):Ue.svgAbove||u?(n+=`<mover ${re(t.id,e)}>`+((ie=r[Ue.svgBody])!=null?ie:U(m,e)),n+=(X=r[Ue.svgAbove])!=null?X:U(u,e),n+=\"</mover>\"):(Ue.svgBelow||c)&&(n+=`<munder ${re(t.id,e)}>`+((be=r[Ue.svgBody])!=null?be:U(m,e)),n+=(ye=r[Ue.svgBelow])!=null?ye:U(c,e),n+=\"</munder>\");break;case\"placeholder\":n+=\"?\";break;case\"mord\":{if(n=typeof t.value==\"string\"?t.value:d,n.length>0&&n.startsWith(\"\\\\\"))typeof t.value==\"string\"&&t.value.charCodeAt(0)>255?n=\"&#x\"+(\"000000\"+t.value.charCodeAt(0).toString(16)).slice(-4)+\";\":typeof t.value==\"string\"&&(n=t.value.charAt(0));else if(t.command===\"\\\\char\"){let Js=(Be=t.args)==null?void 0:Be[0];if(Js!==void 0&&\"number\"in Js){let tu=Js.number;typeof tu==\"number\"&&(n=\"&#x\"+(\"000000\"+tu.toString(16)).slice(-4)+\";\")}}else typeof t.value==\"string\"?n=t.value:(console.error(\"Did not expect this\"),n=\"\");let Ye=/\\d/.test(n)?\"mn\":\"mi\";n=`<${Ye}${re(t.id,e)}>${Os(n)}</${Ye}>`;break}case\"mbin\":case\"mrel\":case\"minner\":n=Si(t,e);break;case\"mpunct\":n='<mo separator=\"true\"'+re(t.id,e)+\">\"+d+\"</mo>\";break;case\"mop\":case\"operator\":case\"extensible-symbol\":t.value!==\"\\u200B\"&&(n=\"<mo\"+re(t.id,e)+\">\",n+=d===\"\\\\operatorname\"?t.body:d||t.body,n+=\"</mo>\");break;case\"box\":let eu=t;n='<menclose notation=\"box\"',eu.backgroundcolor&&(n+=' mathbackground=\"'+eu.backgroundcolor+'\"'),n+=re(t.id,e)+\">\"+U(t.body,e)+\"</menclose>\";break;case\"spacing\":n+='<mspace width=\"'+((Lt=i[d])!=null?Lt:0)+'em\"/>';break;case\"enclose\":let js=t;n='<menclose notation=\"';for(let Ye in js.notation)Object.prototype.hasOwnProperty.call(js.notation,Ye)&&js.notation[Ye]&&(n+=o+Ye,o=\" \");n+=re(t.id,e)+'\">'+U(t.body,e)+\"</menclose>\";break;case\"prompt\":n='<menclose notation=\"roundexbox\"\"\">'+U(t.body,e)+\"</menclose>\";break;case\"space\":n+=\"&nbsp;\";break;case\"subsup\":break;case\"phantom\":break;case\"composition\":break;case\"rule\":break;case\"chem\":break;case\"mopen\":n+=Si(t,e);break;case\"mclose\":n+=Si(t,e);break;case\"macro\":{let Ye=t.command+An(t.macroArgs);Ye&&(n+=`<mo ${re(t.id,e)}>${Ye}</mo>`)}break;case\"latexgroup\":n+=U(t.body,e);break;case\"latex\":n+=\"<mtext\"+re(t.id,e)+\">\"+t.value+\"</mtext>\";break;case\"tooltip\":n+=U(t.body,e);break;case\"text\":n+=`<mtext ${re(t.id,e)}x>${t.value}</mtext>`;break;default:if(t.command===\"\\\\displaystyle\")return`<mrow ${re(t.id,e)} displaystyle=\"true\">${U(t.body,e)}</mrow>`;if(t.command===\"\\\\textstyle\")return`<mrow ${re(t.id,e)} displaystyle=\"false\">${U(t.body,e)}</mrow>`;console.info(\"Unexpected element in conversion to MathML:\",t)}return n}var Cn={\"\\\\alpha\":\"alpha \",\"\\\\mu\":\"mew \",\"\\\\sigma\":\"sigma \",\"\\\\pi\":\"pie \",\"\\\\imaginaryI\":\"imaginary eye \",\"\\\\imaginaryJ\":\"imaginary jay \",\"\\\\sum\":\"Summation \",\"\\\\prod\":\"Product \",\"+\":\"plus \",\"-\":\"minus \",\";\":'<break time=\"150ms\"/> semi-colon <break time=\"150ms\"/>',\",\":'<break time=\"150ms\"/> comma  <break time=\"150ms\"/>',\"|\":'<break time=\"150ms\"/>Vertical bar<break time=\"150ms\"/>',\"(\":'<break time=\"150ms\"/>Open paren. <break time=\"150ms\"/>',\")\":'<break time=\"150ms\"/> Close paren. <break time=\"150ms\"/>',\"=\":\"equals \",\"<\":\"is less than \",\"\\\\lt\":\"is less than \",\"<=\":\"is less than or equal to \",\"\\\\le\":\"is less than or equal to \",\"\\\\gt\":\"is greater than \",\">\":\"is greater than \",\"\\\\pm\":\"plus or minus\",\"\\\\mp\":\"minus or plus\",\"\\\\ge\":\"is greater than or equal to \",\"\\\\geq\":\"is greater than or equal to \",\"\\\\leq\":\"is less than or equal to \",\"\\\\ne\":\"is not equal to \",\"\\\\neq\":\"is not equal to \",\"!\":\"factorial \",\"\\\\sin\":\"sine \",\"\\\\cos\":\"cosine \",\"\\u200B\":\"\",\"\\u2212\":\"minus \",\":\":'<break time=\"150ms\"/> such that <break time=\"200ms\"/> ',\"\\\\colon\":'<break time=\"150ms\"/> such that <break time=\"200ms\"/> ',\"\\\\hbar\":\"etch bar \",\"\\\\iff\":'<break time=\"200ms\"/>if, and only if, <break time=\"200ms\"/>',\"\\\\Longleftrightarrow\":'<break time=\"200ms\"/>if, and only if, <break time=\"200ms\"/>',\"\\\\land\":\"and \",\"\\\\lor\":\"or \",\"\\\\neg\":\"not \",\"\\\\div\":\"divided by \",\"\\\\forall\":\"for all \",\"\\\\exists\":\"there exists \",\"\\\\nexists\":\"there does not exists \",\"\\\\in\":\"element of \",\"\\\\N\":'the set <break time=\"150ms\"/><say-as interpret-as=\"character\">n</say-as>',\"\\\\C\":'the set <break time=\"150ms\"/><say-as interpret-as=\"character\">c</say-as>',\"\\\\Z\":'the set <break time=\"150ms\"/><say-as interpret-as=\"character\">z</say-as>',\"\\\\Q\":'the set <break time=\"150ms\"/><say-as interpret-as=\"character\">q</say-as>',\"\\\\infty\":\"infinity \",\"\\\\nabla\":\"nabla \",\"\\\\partial\":\"partial derivative of \",\"\\\\cdot\":\"times \",\"\\\\cdots\":\"dot dot dot \",\"\\\\Rightarrow\":\"implies \",\"\\\\lparen\":'<break time=\"150ms\"/>open paren<break time=\"150ms\"/>',\"\\\\rparen\":'<break time=\"150ms\"/>close paren<break time=\"150ms\"/>',\"\\\\lbrace\":'<break time=\"150ms\"/>open brace<break time=\"150ms\"/>',\"\\\\{\":'<break time=\"150ms\"/>open brace<break time=\"150ms\"/>',\"\\\\rbrace\":'<break time=\"150ms\"/>close brace<break time=\"150ms\"/>',\"\\\\}\":'<break time=\"150ms\"/>close brace<break time=\"150ms\"/>',\"\\\\langle\":'<break time=\"150ms\"/>left angle bracket<break time=\"150ms\"/>',\"\\\\rangle\":'<break time=\"150ms\"/>right angle bracket<break time=\"150ms\"/>',\"\\\\lfloor\":'<break time=\"150ms\"/>open floor<break time=\"150ms\"/>',\"\\\\rfloor\":'<break time=\"150ms\"/>close floor<break time=\"150ms\"/>',\"\\\\lceil\":'<break time=\"150ms\"/>open ceiling<break time=\"150ms\"/>',\"\\\\rceil\":'<break time=\"150ms\"/>close ceiling<break time=\"150ms\"/>',\"\\\\vert\":'<break time=\"150ms\"/>vertical bar<break time=\"150ms\"/>',\"\\\\mvert\":'<break time=\"150ms\"/>divides<break time=\"150ms\"/>',\"\\\\lvert\":'<break time=\"150ms\"/>left vertical bar<break time=\"150ms\"/>',\"\\\\rvert\":'<break time=\"150ms\"/>right vertical bar<break time=\"150ms\"/>',\"\\\\lbrack\":'<break time=\"150ms\"/> open square bracket <break time=\"150ms\"/>',\"\\\\rbrack\":'<break time=\"150ms\"/> close square bracket <break time=\"150ms\"/>',mm:\"millimeters\",cm:\"centimeters\",km:\"kilometers\",kg:\"kilograms\"},Nc={array:\"array\",matrix:\"matrix\",pmatrix:\"parenthesis matrix\",bmatrix:\"square brackets matrix\",Bmatrix:\"braces matrix\",vmatrix:\"bars matrix\",Vmatrix:\"double bars matrix\",\"matrix*\":\"matrix\",smallmatrix:\"small matrix\"};function Kb(t){let e=\"\";return t.startsWith(\"\\\\\")&&(e=\" \"+t.replace(\"\\\\\",\"\")+\" \"),e}function Lo(t){let e=0;if(ee(t))for(let r of t)r.type!==\"first\"&&(e+=1);return e===1}function Pb(t){if(ee(t)){for(let e of t)if(e.type!==\"first\"&&e.id)return e.id.toString()}return\"\"}function ph(t){let e=\"\";if(ee(t))for(let r of t)r.type!==\"first\"&&typeof r.value==\"string\"&&(e+=r.value);return e}function Rb(t){return t?t.map(e=>e.value).join(\"\"):\"\"}function Ks(t){if(t&&!t.some(e=>e.type!==\"first\"&&e.value===void 0))return t.map(e=>e.value).join(\"\")}function Fc(t){return`<emphasis>${t}</emphasis>`}function Ib(t,e){var o;let r=\"\",i=!1,n=!1;for(let a=0;a<e.length;a++)e[a].type!==\"first\"&&(e[a].mode!==\"text\"&&(n=!1),a<e.length-2&&e[a].type===\"mopen\"&&e[a+2].type===\"mclose\"&&e[a+1].type===\"mord\"?(r+=\" of \",r+=Fc(V(t,e[a+1])),a+=2):e[a].mode===\"text\"?n?r+=(o=e[a].value)!=null?o:\" \":(n=!0,r+=V(\"text\",e[a])):e[a].isDigit()?i?r+=e[a].asDigit():(i=!0,r+=V(t,e[a])):(i=!1,r+=V(t,e[a])));return r}function V(t,e){var c,u,m,d,h,f,x,v;function r(b){return globalThis.MathfieldElement.textToSpeechMarkup?/[a-z]/.test(b)?` <say-as interpret-as=\"character\">${b}</say-as>`:/[A-Z]/.test(b)?`capital <say-as interpret-as=\"character\">${b.toLowerCase()}</say-as>`:b:/[a-z]/.test(b)?\" '\"+b.toUpperCase()+\"'\":/[A-Z]/.test(b)?\" 'capital \"+b.toUpperCase()+\"'\":b}if(!e)return\"\";if(ee(e))return Ib(t,e);let i=\"\";if(e.id&&t===\"math\"&&(i+='<mark name=\"'+e.id.toString()+'\"/>'),e.mode===\"text\")return i+e.value;let n=\"\",o=\"\",a=\"\",s=!1,{command:l}=e;switch(l){case\"\\\\vec\":return\"vector \"+V(t,e.body);case\"\\\\acute\":return V(t,e.body)+\" acute\";case\"\\\\grave\":return V(t,e.body)+\" grave\";case\"\\\\dot\":return\"dot over\"+V(t,e.body);case\"\\\\ddot\":return\"double dot over\"+V(t,e.body);case\"\\\\mathring\":return\"ring over\"+V(t,e.body);case\"\\\\tilde\":case\"\\\\widetilde\":return\"tilde over\"+V(t,e.body);case\"\\\\bar\":return V(t,e.body)+\" bar\";case\"\\\\breve\":return V(t,e.body)+\" breve\";case\"\\\\check\":case\"\\\\widecheck\":return\"check over \"+V(t,e.body);case\"\\\\hat\":case\"\\\\widehat\":return\"hat over\"+V(t,e.body);case\"\\\\overarc\":case\"\\\\overparen\":case\"\\\\wideparen\":return\"arc over \"+V(t,e.body);case\"\\\\underarc\":case\"\\\\underparen\":return\"arc under \"+V(t,e.body);case\"\\\\mathop\":return(c=Ks(e.body))!=null?c:V(t,e.body);case\"\\\\mathit\":return(u=Ks(e.body))!=null?u:V(t,e.body);case\"\\\\mathrm\":return(m=Ks(e.body))!=null?m:V(t,e.body);case\"\\\\mathbb\":return\"blackboard\"+((d=Ks(e.body))!=null?d:V(t,e.body))}switch(e.type){case\"prompt\":let b=e.body.length>1?'start input . <break time=\"500ms\"/> '+V(t,e.body)+'. <break time=\"500ms\"/> end input':\"blank\";i+=' <break time=\"300ms\"/> '+b+'. <break time=\"700ms\"/>'+((h=e.correctness)!=null?h:\"\")+' . <break time=\"700ms\"/> ';break;case\"array\":let _=e.rows,S=e.environmentName;if(Object.keys(Nc).includes(S)){i+=` begin ${Nc[S]} `;for(let D=0;D<_.length;D++){D>0&&(i+=\",\"),i+=` row ${D+1} `;for(let L=0;L<_[D].length;L++)L>0&&(i+=\",\"),i+=` column ${L+1}: `,i+=V(\"math\",_[D][L])}i+=` end ${Nc[S]} `}break;case\"group\":l===\"\\\\ne\"?i+=\" not equal \":(l===\"\\\\not\"&&(i+=\" not \"),i+=V(\"math\",e.body));break;case\"root\":i+=V(\"math\",e.body);break;case\"genfrac\":if(n=V(\"math\",e.above),o=V(\"math\",e.below),Lo(e.above)&&Lo(e.below)){let L={\"1/2\":\" half \",\"1/3\":\" one third \",\"2/3\":\" two third\",\"1/4\":\" one quarter \",\"3/4\":\" three quarter \",\"1/5\":\" one fifth \",\"2/5\":\" two fifths \",\"3/5\":\" three fifths \",\"4/5\":\" four fifths \",\"1/6\":\" one sixth \",\"5/6\":\" five sixths \",\"1/8\":\" one eight \",\"3/8\":\" three eights \",\"5/8\":\" five eights \",\"7/8\":\" seven eights \",\"1/9\":\" one ninth \",\"2/9\":\" two ninths \",\"4/9\":\" four ninths \",\"5/9\":\" five ninths \",\"7/9\":\" seven ninths \",\"8/9\":\" eight ninths \"}[ph(e.above)+\"/\"+ph(e.below)];L?i=L:i+=n+\" over \"+o}else i+=' the fraction <break time=\"150ms\"/>'+n+' over <break time=\"150ms\"/>'+o+'.<break time=\"150ms\"/> End fraction.<break time=\"150ms\"/>';break;case\"surd\":if(a=V(\"math\",e.body),e.hasEmptyBranch(\"above\"))i+=Lo(e.body)?\" the square root of \"+a+\" , \":' the square root of <break time=\"200ms\"/>'+a+'. <break time=\"200ms\"/> End square root';else{let D=V(\"math\",e.above);D=D.trim();let L=D.replace(/<mark([^/]*)\\/>/g,\"\");L===\"3\"?i+=' the cube root of <break time=\"200ms\"/>'+a+'. <break time=\"200ms\"/> End cube root':L===\"n\"?i+=' the nth root of <break time=\"200ms\"/>'+a+'. <break time=\"200ms\"/> End root':i+=' the root with index: <break time=\"200ms\"/>'+D+', of <break time=\"200ms\"/>'+a+'. <break time=\"200ms\"/> End root'}break;case\"leftright\":{let D=e;i+=(f=D.leftDelim?Cn[D.leftDelim]:void 0)!=null?f:D.leftDelim,i+=V(\"math\",e.body),i+=(x=D.rightDelim?Cn[D.rightDelim]:void 0)!=null?x:D.rightDelim}break;case\"rule\":break;case\"overunder\":break;case\"overlap\":break;case\"macro\":let A=l.replace(/^\\\\/g,\"\"),E=Bi()[A];E!=null&&E.expand?i+=V(\"math\",e.body):i+=`${A} `;break;case\"placeholder\":i+=\"placeholder \";break;case\"delim\":case\"sizeddelim\":case\"mord\":case\"minner\":case\"mbin\":case\"mrel\":case\"mpunct\":case\"mopen\":case\"mclose\":{if(l===\"\\\\mathbin\"||l===\"\\\\mathrel\"||l===\"\\\\mathopen\"||l===\"\\\\mathclose\"||l===\"\\\\mathpunct\"||l===\"\\\\mathord\"||l===\"\\\\mathinner\"){i=V(t,e.body);break}let D=e.isDigit()?e.asDigit():e.value,L=e.command;if((e.type===\"delim\"||e.type===\"sizeddelim\")&&(L=e.value,D=L),t===\"text\")i+=D;else{if(e.type===\"mbin\"&&(i+='<break time=\"150ms\"/>'),D){let K=Cn[D]||(L?Cn[L.trim()]:\"\");if(K)i+=\" \"+K;else{let $=L?Kb(L.trim()):\"\";i+=$||r(D)}}else i+=V(\"math\",e.body);e.type===\"mbin\"&&(i+='<break time=\"150ms\"/>')}break}case\"mop\":case\"operator\":case\"extensible-symbol\":if(e.value!==\"\\u200B\"){let D=e.command;if(D===\"\\\\sum\")if(!e.hasEmptyBranch(\"superscript\")&&!e.hasEmptyBranch(\"subscript\")){let L=V(\"math\",e.superscript);L=L.trim();let K=V(\"math\",e.subscript);K=K.trim(),i+=' the summation from <break time=\"200ms\"/>'+K+'<break time=\"200ms\"/> to  <break time=\"200ms\"/>'+L+'<break time=\"200ms\"/> of <break time=\"150ms\"/>',s=!0}else if(e.hasEmptyBranch(\"subscript\"))i+=\" the summation of\";else{let L=V(\"math\",e.subscript);L=L.trim(),i+=' the summation from <break time=\"200ms\"/>'+L+'<break time=\"200ms\"/> of <break time=\"150ms\"/>',s=!0}else if(D===\"\\\\prod\")if(!e.hasEmptyBranch(\"superscript\")&&!e.hasEmptyBranch(\"subscript\")){let L=V(\"math\",e.superscript);L=L.trim();let K=V(\"math\",e.subscript);K=K.trim(),i+=' the product from <break time=\"200ms\"/>'+K+'<break time=\"200ms\"/> to <break time=\"200ms\"/>'+L+'<break time=\"200ms\"/> of <break time=\"150ms\"/>',s=!0}else if(e.hasEmptyBranch(\"subscript\"))i+=\" the product  of \";else{let L=V(\"math\",e.subscript);L=L.trim(),i+=' the product from <break time=\"200ms\"/>'+L+'<break time=\"200ms\"/> of <break time=\"150ms\"/>',s=!0}else if(D===\"\\\\int\")if(!e.hasEmptyBranch(\"superscript\")&&!e.hasEmptyBranch(\"subscript\")){let L=V(\"math\",e.superscript);L=L.trim();let K=V(\"math\",e.subscript);K=K.trim(),i+=' the integral from <break time=\"200ms\"/>'+Fc(K)+'<break time=\"200ms\"/> to <break time=\"200ms\"/>'+Fc(L)+' <break time=\"200ms\"/> of ',s=!0}else i+=' the integral of <break time=\"200ms\"/> ';else if(D===\"\\\\operatorname\"||D===\"\\\\operatorname*\")i+=Rb(e.body)+\" \";else if(typeof e.value==\"string\"){let L=(v=Cn[e.value])!=null?v:e.command?Cn[e.command]:void 0;i+=L||\" \"+e.value}else e.command&&(e.command===\"\\\\mathop\"?i+=V(\"math\",e.body):i+=e.command.startsWith(\"\\\\\")?\" \"+e.command.slice(1):\" \"+e.command)}break;case\"enclose\":a=V(\"math\",e.body),i+=\" crossed out \"+a+\". End crossed out.\";break;case\"space\":case\"spacing\":break}if(!s&&!e.hasEmptyBranch(\"superscript\")){let b=V(t,e.superscript);b=b.trim();let _=b.replace(/<[^>]*>/g,\"\");if(Lo(e.superscript)){if(t===\"math\"){let S=Pb(e.superscript);S&&(i+='<mark name=\"'+S+'\"/>')}_===\"\\u2032\"?i+=\" prime \":_===\"2\"?i+=\" squared \":_===\"3\"?i+=\" cubed \":Number.isNaN(Number.parseInt(_))?i+=\" to the \"+b+\"; \":i+=' to the <say-as interpret-as=\"ordinal\">'+_+\"</say-as> power; \"}else Number.isNaN(Number.parseInt(_))?i+=\" raised to the \"+b+\"; \":i+=' raised to the <say-as interpret-as=\"ordinal\">'+_+\"</say-as> power; \"}if(!s&&!e.hasEmptyBranch(\"subscript\")){let b=V(\"math\",e.subscript);b=b.trim(),i+=Lo(e.subscript)?\" sub \"+b:\" subscript \"+b+\". End subscript. \"}return i}function kt(t){var i,n;let e=globalThis.MathfieldElement;if(e.textToSpeechRules===\"sre\"&&(\"sre\"in window||\"SRE\"in window)){let o=U(t);if(o){e.textToSpeechMarkup&&(e.textToSpeechRulesOptions=(i=e.textToSpeechRulesOptions)!=null?i:{},e.textToSpeechRulesOptions=g(p({},e.textToSpeechRulesOptions),{markup:e.textToSpeechMarkup}),e.textToSpeechRulesOptions.markup===\"ssml\"&&(e.textToSpeechRulesOptions=g(p({},e.textToSpeechRulesOptions),{markup:\"ssml_step\"})),e.textToSpeechRulesOptions=g(p({},e.textToSpeechRulesOptions),{rate:e.speechEngineRate}));let a=(n=window.SRE)!=null?n:globalThis.sre.System.getInstance();e.textToSpeechRulesOptions&&a.setupEngine(e.textToSpeechRulesOptions);let s=\"\";try{s=a.toSpeech(o)}catch(l){console.error(\"MathLive 0.108.2: `SRE.toSpeech()` runtime error\",l)}return s}return\"\"}let r=V(\"math\",t);if(e.textToSpeechMarkup===\"ssml\"){let o=\"\";e.speechEngineRate&&(o='<prosody rate=\"'+e.speechEngineRate+'\">'),r='<?xml version=\"1.0\"?><speak version=\"1.1\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xml:lang=\"en-US\"><amazon:auto-breaths>'+o+\"<p><s>\"+r+\"</s></p>\"+(o?\"</prosody>\":\"\")+\"</amazon:auto-breaths></speak>\"}else e.textToSpeechMarkup===\"mac\"&&At()===\"macos\"?r=r.replace(/<mark([^/]*)\\/>/g,\"\").replace(/<emphasis>/g,\"[[emph+]]\").replace(/<\\/emphasis>/g,\"\").replace(/<break time=\"(\\d*)ms\"\\/>/g,\"[[slc $1]]\").replace(/<say-as[^>]*>/g,\"\").replace(/<\\/say-as>/g,\"\"):r=r.replace(/<[^>]*>/g,\"\").replace(/\\s{2,}/g,\" \");return r}var Jt={\"\\\\ne\":\"\\u2260\",\"\\\\neq\":\"\\u2260\",\"\\u2212\":\"-\",\"-\":\"-\",\"\\\\alpha\":\"alpha\",\"\\\\beta\":\"beta\",\"\\\\gamma\":\"gamma\",\"\\\\delta\":\"delta\",\"\\\\epsilon\":\"epsilon\",\"\\\\varepsilon\":\"varepsilon\",\"\\\\zeta\":\"zeta\",\"\\\\eta\":\"eta\",\"\\\\theta\":\"theta\",\"\\\\vartheta\":\"vartheta\",\"\\\\iota\":\"iota\",\"\\\\kappa\":\"kappa\",\"\\\\lambda\":\"lambda\",\"\\\\mu\":\"mu\",\"\\\\nu\":\"nu\",\"\\\\xi\":\"xi\",\"\\\\pi\":\"pi\",\"\\\\rho\":\"rho\",\"\\\\sigma\":\"sigma\",\"\\\\tau\":\"tau\",\"\\\\upsilon\":\"upsilon\",\"\\\\phi\":\"phi\",\"\\\\varphi\":\"varphi\",\"\\\\chi\":\"chi\",\"\\\\psi\":\"psi\",\"\\\\omega\":\"omega\",\"\\\\Gamma\":\"Gamma\",\"\\\\Delta\":\"Delta\",\"\\\\Theta\":\"Theta\",\"\\\\Lambda\":\"Lambda\",\"\\\\Xi\":\"Xi\",\"\\\\Pi\":\"Pi\",\"\\\\Sigma\":\"Sigma\",\"\\\\Phi\":\"Phi\",\"\\\\Psi\":\"Psi\",\"\\\\Omega\":\"Omega\",\"\\\\exponentialE\":\"e\",\"\\\\imaginaryI\":\"i\",\"\\\\imaginaryJ\":\"j\",\"\\\\!\":\" \",\"\\\\,\":\" \",\"\\\\:\":\" \",\"\\\\>\":\" \",\"\\\\;\":\" \",\"\\\\enskip\":\" \",\"\\\\enspace\":\" \",\"\\\\qquad\":\" \",\"\\\\quad\":\" \",\"\\\\infty\":\"oo\",\"\\\\R\":\"RR\",\"\\\\mathbb{R}\":\"RR\",\"\\\\N\":\"NN\",\"\\\\mathbb{N}\":\"NN\",\"\\\\Z\":\"ZZ\",\"\\\\mathbb{Z}\":\"ZZ\",\"\\\\Q\":\"QQ\",\"\\\\mathbb{Q}\":\"QQ\",\"\\\\C\":\"CC\",\"\\\\mathbb{C}\":\"CC\",\"\\\\emptyset\":\"O/\",\"\\\\varnothing\":\"O/\",\"\\\\varDelta\":\"Delta\",\"\\\\varTheta\":\"Theta\",\"\\\\varLambda\":\"Lambda\",\"\\\\varXi\":\"Xi\",\"\\\\varPi\":\"Pi\",\"\\\\varSigma\":\"Sigma\",\"\\\\varUpsilon\":\"Upsilon\",\"\\\\varPhi\":\"Phi\",\"\\\\varPsi\":\"Psi\",\"\\\\varOmega\":\"Omega\"},Ao={\"\\\\pm\":\"+-\",\"\\\\colon\":\" : \",\"\\\\sum\":\" sum \",\"\\\\prod\":\" prod \",\"\\\\bigcap\":\" nnn \",\"\\\\bigcup\":\" uuu \",\"\\\\int\":\" int \",\"\\\\oint\":\" oint \",\"\\\\ge\":\">=\",\"\\\\le\":\"<=\",\"\\\\ne\":\"!=\",\"\\\\neq\":\"!=\",\"\\\\lt\":\"<\",\"\\\\gt\":\">\",\"\\\\gets\":\"<-\",\"\\\\to\":\"->\",\"\\\\land\":\" and \",\"\\\\lor\":\" or \",\"\\\\lnot\":\" not \",\"\\\\forall\":\" AA \",\"\\\\exists\":\" EE \",\"\\\\in\":\" in \",\"\\\\notin\":\" !in \",\"\\\\mapsto\":\"|->\",\"\\\\implies\":\"=>\",\"\\\\iff\":\"<=>\",\"\\\\cdot\":\" * \",\"\\\\ast\":\" ** \",\"\\\\star\":\" *** \",\"\\\\times\":\" * \",\"\\\\div\":\" -: \",\"\\\\ltimes\":\" |>< \",\"\\\\rtimes\":\" ><| \",\"\\\\bowtie\":\" |><| \",\"\\\\circ\":\"@\"},Ps={\"\\\\vert\":\"|\",\"\\\\Vert\":\"||\",\"\\\\mid\":\"|\",\"\\\\lbrack\":\"[\",\"\\\\rbrack\":\"]\",\"\\\\lbrace\":\"{\",\"\\\\rbrace\":\"}\",\"\\\\lparen\":\"(\",\"\\\\rparen\":\")\",\"\\\\langle\":\"(:\",\"\\\\rangle\":\":)\"};function zb(t){let e=\"\";for(let r of t){let i=e[e.length-1];i!==void 0&&(/\\d$/.test(i)&&/^\\d/.test(r)||/[a-zA-Z]$/.test(i)&&/^[a-zA-Z]/.test(r))&&(e+=\" \"),e+=r}return e}function ce(t,e){var a,s,l,c,u,m,d,h,f,x,v,b,_,S,A,E,D,L,K;if(!t)return\"\";if(ee(t)){if(t.length===0)return\"\";if(t[0].mode===\"latex\")return t.map(R=>ce(R)).join(\"\");if(t[0].mode===\"text\"){let R=0,N=\"\";for(;((a=t[R])==null?void 0:a.mode)===\"text\";)N+=t[R].body?ce(t[R].body,e):t[R].value,R++;return e!=null&&e.plain?N+ce(t.slice(R),e):`\"${N}\" ${ce(t.slice(R))}`}let $=0,G=[];for(;((s=t[$])==null?void 0:s.mode)===\"math\";){let R=\"\";for(;((l=t[$])==null?void 0:l.type)===\"mord\"&&/\\d/.test(t[$].value);)R+=t[$++].value;R?G.push(R):G.push(ce(t[$++],e))}return G.push(ce(t.slice($),e)),zb(G)}if(t.mode===\"text\")return e!=null&&e.plain?t.value:`\"${t.value}\"`;let r=\"\",{command:i}=t,n;if(i===\"\\\\placeholder\")return`(${ce(t.body,e)})`;let o=y.serialize([t],{expandMacro:!1,defaultMode:\"math\"});switch(t.type){case\"accent\":let $={\"\\\\vec\":\"vec\",\"\\\\dot\":\"dot\",\"\\\\ddot\":\"ddot\",\"\\\\bar\":\"bar\",\"\\\\hat\":\"hat\",\"\\\\acute\":\"acute;\",\"\\\\grave\":\"grave\",\"\\\\tilde\":\"tilde\",\"\\\\breve\":\"breave\",\"\\\\check\":\"check\"}[i];r=`${$!=null?$:\"\"} ${ce(t.body,e)} `;break;case\"first\":return\"\";case\"latexgroup\":return t.body.map(R=>R.value).join(\"\");case\"group\":case\"root\":r=(c=Jt[i])!=null?c:ce(t.body,e);break;case\"genfrac\":{let R=t;(R.leftDelim||R.rightDelim)&&(r=R.leftDelim===\".\"||!R.leftDelim?\"{:\":R.leftDelim),R.hasBarLine?(r+=\"(\",r+=ce(R.above,e),r+=\")/(\",r+=ce(R.below,e),r+=\")\"):(r+=\"((\",r+=ce(R.above,e),r+=\") choose (\",r+=ce(R.below,e),r+=\"))\"),(R.leftDelim||R.rightDelim)&&(r+=R.rightDelim===\".\"||!R.rightDelim?\"{:\":R.rightDelim)}break;case\"surd\":t.hasEmptyBranch(\"above\")?r+=`sqrt(${ce(t.body,e)})`:r+=`root(${ce(t.above,e)})(${ce(t.body,e)})`;break;case\"latex\":r=t.value;break;case\"leftright\":{let R=t,N=R.leftDelim;N&&Ps[N]&&(N=Ps[N]),r+=N===\".\"||!N?\"{:\":N,r+=ce(R.body,e);let j=R.matchingRightDelim();j&&Ps[j]&&(j=Ps[j]),r+=j===\".\"||!j?\":}\":j}break;case\"sizeddelim\":case\"delim\":r=t.value;break;case\"overlap\":break;case\"overunder\":break;case\"mord\":if(Jt[o])return Jt[o];r=(d=(m=(u=Jt[i])!=null?u:i)!=null?m:i)!=null?d:typeof t.value==\"string\"?t.value:\"\",r.startsWith(\"\\\\\")&&(r+=\" \"),n=i?i.match(/{?\\\\char\"([\\dabcdefABCDEF]+)}?/):null,n?r=String.fromCodePoint(Number.parseInt(\"0x\"+n[1])):r.length>0&&r.startsWith(\"\\\\\")&&(r=typeof t.value==\"string\"?t.value.charAt(0):t.command),r=Nb(r,t.style);break;case\"mbin\":case\"mrel\":case\"minner\":r=(x=(f=(h=Jt[o])!=null?h:Jt[i])!=null?f:Ao[i])!=null?x:t.value;break;case\"mopen\":case\"mclose\":r=t.value;break;case\"mpunct\":r=(v=Ao[i])!=null?v:i;break;case\"mop\":case\"operator\":case\"extensible-symbol\":t.value!==\"\\u200B\"&&(Ao[i]?r=Ao[i]:r=i===\"\\\\operatorname\"?ce(t.body,e):(b=t.value)!=null?b:i,r+=\" \");break;case\"array\":let G=t.environmentName;if(t.isMultiline)r=t.rows.map(N=>N.map(j=>ce(j,e)).join(\"\")).join(`\n`);else{let R=(_={bmatrix:[\"[\",\"]\"],\"bmatrix*\":[\"[\",\"]\"]}[G])!=null?_:[\"(\",\")\"],N=[],j=t.rows;for(let H of j){let ie=[];for(let X of H)ie.push(ce(X,e));N.push(R[0]+ie.join(\",\")+R[1])}let T=(S={bmatrix:[\"[\",\"]\"],\"bmatrix*\":[\"[\",\"]\"],cases:[\"{\",\":}\"]}[G])!=null?S:[\"(\",\")\"];r=T[0]+N.join(\",\")+T[1]}break;case\"box\":break;case\"spacing\":r=(E=(A=Jt[o])!=null?A:Jt[i])!=null?E:\" \";break;case\"enclose\":r=\"(\"+ce(t.body,e)+\")\";break;case\"space\":r=\" \";break;case\"subsup\":r=\"\";break;case\"macro\":r=(K=(L=(D=Jt[o])!=null?D:Jt[i])!=null?L:Ao[i])!=null?K:ce(t.body,e);break}if(!t.hasEmptyBranch(\"subscript\")){r+=\"_\";let $=ce(t.subscript,e);r+=$.length!==1?`(${$})`:$}if(!t.hasEmptyBranch(\"superscript\")){r+=\"^\";let $=ce(t.superscript,e);r+=$.length!==1?`(${$})`:$}return r}function Nb(t,e){if(!e)return t;let r=t;return e.variant===\"double-struck\"&&(r=`bbb \"${r}\"`),e.variant===\"script\"&&(r=`cc \"${r}\"`),e.variant===\"fraktur\"&&(r=`fr \"${r}\"`),e.variant===\"sans-serif\"&&(r=`sf \"${r}\"`),e.variant===\"monospace\"&&(r=`tt \"${r}\"`),e.variantStyle===\"bold\"&&(r=`bb \"${r}\"`),e.color?`color({${e.color}})(${r})`:r}function he(t,e){var u;let r=g(p({},Zn()),{renderPlaceholder:()=>new w(160,{maxFontSize:1})});if(e!=null&&e.letterShapeStyle&&(e==null?void 0:e.letterShapeStyle)!==\"auto\"&&(r.letterShapeStyle=e.letterShapeStyle),e!=null&&e.macros){let m=Oi(e==null?void 0:e.macros);r.getMacro=d=>Ki(d,m)}e!=null&&e.registers&&(r.registers=p(p({},r.registers),e.registers));let i=(u=e==null?void 0:e.defaultMode)!=null?u:\"math\",n=\"math\",o=\"displaystyle\";i===\"inline-math\"?o=\"textstyle\":i===\"math\"?o=\"displaystyle\":i===\"text\"&&(o=\"textstyle\",n=\"text\");let a=new B({from:r}),l=new y({type:\"root\",mode:n,body:ge(t,{context:a,parseMode:n,mathstyle:o})}).render(a);return l?(Tr(Vt(l,a)),Dr(l,{classes:\"ML__latex\"}).toMarkup()):\"\"}function O7(t){return Xa(t,{context:Zn()})}function Rs(t,e={}){return U(ge(t,{parseMode:\"math\",args:()=>\"\",mathstyle:\"displaystyle\"}),e)}function Is(t){let e=ge(t,{parseMode:\"math\",mathstyle:\"displaystyle\"});return kt(e)}var Co;function zs(t){var e,r;if(!Co){let i=(e=globalThis[Symbol.for(\"io.cortexjs.compute-engine\")])==null?void 0:e.ComputeEngine;i?Co=new i:console.error(`MathLive 0.108.2: The CortexJS Compute Engine library is not available.\n        \n        Load the library, for example with:\n        \n        import \"https://esm.run/@cortex-js/compute-engine\"`)}return(r=Co==null?void 0:Co.box(t).latex)!=null?r:\"\"}function B7(t,e=\"math\"){return ce(new y({type:\"root\",body:ge(t,{parseMode:e})}))}function hh(t){return ir(t,{format:\"ascii-math\"})[1]}function Eo(t){if(typeof t==\"string\"){let e=Fb(t);if(!e)throw new Error(`Invalid color: ${t}`);return e}return\"C\"in t?Vb(t):\"a\"in t?fh(t):t}function ki(t){return t<0?0:t>255?255:Math.round(t)}function Fb(t){if(!t||t[0]!==\"#\")return;t=t.slice(1);let e;return t.length<=4?(e={r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16)},t.length===4&&(e.a=parseInt(t[3]+t[3],16)/255)):(e={r:parseInt(t[0]+t[1],16),g:parseInt(t[2]+t[3],16),b:parseInt(t[4]+t[5],16)},t.length===8&&(e.a=parseInt(t[6]+t[7],16)/255)),typeof(e==null?void 0:e.a)==\"undefined\"&&(e.a=1),e}function Hc(t){let[e,r,i]=[t.L,t.C,t.H],n=i*Math.PI/180,o={L:e,a:r*Math.cos(n),b:r*Math.sin(n)};return t.alpha!==void 0&&(o.alpha=t.alpha),o}function $b(t){let[e,r,i]=[t.L,t.a,t.b],n=Math.sqrt(r*r+i*i),a=Math.atan2(i,r)*180/Math.PI,s={L:e,C:n,H:a};return t.alpha!==void 0&&(s.alpha=t.alpha),s}function $c(t){let[e,r,i]=[t.L,t.a,t.b],n=Math.pow(.9999999984505198*e+.39633779217376786*r+.2158037580607588*i,3),o=Math.pow(1.00000000888176*e-.10556134232365635*r-.0638541747717059*i,3),a=Math.pow(e*1.000000054672411-.0894841820949657*r-1.2914855378640917*i,3),s=4.076741661347994*n-3.307711590408193*o+.230969928729428*a,l=-1.2684380040921763*n+2.6097574006633715*o-.3413193963102197*a,c=-.004196086541837188*n-.7034186144594493*o+1.7076147009309444*a,u=m=>{let d=Math.abs(m);return d<=.0031308?m*12.92:(Math.sign(m)||1)*(1.055*Math.pow(d,1/2.4)-.055)};return[u(s),u(l),u(c)]}function Vc(t){let[e,r,i]=t;return e>=0&&e<=1&&r>=0&&r<=1&&i>=0&&i<=1}function qc(t,e){let[r,i,n]=t;return r=ki(r*255),i=ki(i*255),n=ki(n*255),e!==void 0?{r,g:i,b:n,alpha:e}:{r,g:i,b:n}}function fh(t){let[e,r,i]=$c(t);if(Vc([e,r,i]))return qc([e,r,i],t.alpha);let n=$b(t);if(n.C=0,[e,r,i]=$c(Hc(n)),!Vc([e,r,i]))return qc([e,r,i],t.alpha);let o=0,a=t.L,s=(o+a)/2;n.C=s;let l=.36/Math.pow(2,12);for(;a-o>l;)s=(o+a)/2,n.C=s,[e,r,i]=$c(Hc(n)),Vc([e,r,i])?o=s:a=s;return qc([e,r,i],t.alpha)}function Vb(t){return fh(Hc(t))}function gh(t,e){let r=Eo(t),i=Eo(e),n=.56,o=.57,a=.62,s=.65,l=.022,c=1.414,u=.1,m=5e-4,d=1.14,h=.027,f=1.14,x=.027;function v(L){return L>=l?L:L+(l-L)**c}function b(L){return(L<0?-1:1)*Math.pow(Math.abs(L),2.4)}let _=v(b(i.r/255)*.2126729+b(i.g/255)*.7151522+b(i.b/255)*.072175),S=v(b(r.r/255)*.2126729+b(r.g/255)*.7151522+b(r.b/255)*.072175),A,E,D;return Math.abs(S-_)<m?E=0:S>_?(A=S**n-_**o,E=A*d):(A=S**s-_**a,E=A*f),Math.abs(E)<u?D=0:E>0?D=E-x:D=E+h,D*100}function Wc(t,e,r){r!=null||(r=\"#fff\"),e!=null||(e=\"#000\");let i=gh(t,r),n=gh(t,e);return Math.abs(i)>Math.abs(n)?r:e}function bh(t){let e=Eo(t),r=((1<<24)+(ki(e.r)<<16)+(ki(e.g)<<8)+ki(e.b)).toString(16).slice(1);return e.alpha!==void 0&&e.alpha<1&&(r+=(\"00\"+Math.round(e.alpha*255).toString(16)).slice(-2)),r[0]===r[1]&&r[2]===r[3]&&r[4]===r[5]&&r[6]===r[7]&&(r=r[0]+r[2]+r[4]+(e.alpha!==void 0&&e.alpha<1?r[6]:\"\")),\"#\"+r}function oe(t){let e=yh(t),r=\"\";for(let i of e){if(typeof i.value!=\"string\")return\"\";r+=i.value}return r}function yh(t){let r=t.model.selection.ranges;if(r.length!==1)return[];let i=t.model.getAtoms(r[0]);return i.length===1&&i[0].isRoot&&(i=i[0].children),i.filter(n=>n.type!==\"first\")}function qb(t,e){let r=yh(t);if(r.length!==1)return!1;let i=ts[e];return i?!!i.test(r[0].value):!1}function Hb(t){return[jc(t,\"double-struck\",\"mathbb\",\"tooltip.blackboard\"),jc(t,\"fraktur\",\"mathfrak\",\"tooltip.fraktur\"),jc(t,\"calligraphic\",\"mathcal\",\"tooltip.caligraphic\"),Jc(t,\"up\",\"mathrm\",\"tooltip.roman-upright\"),Jc(t,\"bold\",\"bm\",\"tooltip.bold\"),Jc(t,\"italic\",\"mathit\",\"tooltip.italic\")]}function Wb(t){return[{id:\"accent-vec\",class:\"ML__center-menu\",label:()=>he(`\\\\vec{${oe(t)}}`),visible:()=>oe(t).length===1,onMenuSelect:()=>t.insert(\"\\\\vec{#@}\",{selectionMode:\"item\"})},{id:\"accent-overrightarrow\",class:\"ML__center-menu\",label:()=>he(`\\\\overrightarrow{${oe(t)}}`),visible:()=>oe(t).length>0,onMenuSelect:()=>t.insert(\"\\\\overrightarrow{#@}\",{selectionMode:\"item\"})},{id:\"accent-overleftarrow\",class:\"ML__center-menu\",label:()=>he(`\\\\overleftarrow{${oe(t)}}`),visible:()=>oe(t).length>0,onMenuSelect:()=>t.insert(\"\\\\overleftarrow{#@}\",{selectionMode:\"item\"})},{id:\"accent-dot\",class:\"ML__center-menu\",label:()=>he(`\\\\dot{${oe(t)}}`),visible:()=>oe(t).length===1,onMenuSelect:()=>t.insert(\"\\\\dot{#@}\",{selectionMode:\"item\"})},{id:\"accent-ddot\",class:\"ML__center-menu\",label:()=>he(`\\\\ddot{${oe(t)}}`),visible:()=>oe(t).length===1,onMenuSelect:()=>t.insert(\"\\\\ddot{#@}\",{selectionMode:\"item\"})},{id:\"accent-bar\",class:\"ML__center-menu\",label:()=>he(`\\\\bar{${oe(t)}}`),visible:()=>oe(t).length===1,onMenuSelect:()=>t.insert(\"\\\\bar{#@}\",{selectionMode:\"item\"})},{id:\"accent-overline\",class:\"ML__center-menu\",label:()=>he(`\\\\overline{${oe(t)}}`),visible:()=>oe(t).length>0,onMenuSelect:()=>t.insert(\"\\\\overline{#@}\",{selectionMode:\"item\"})},{id:\"accent-overgroup\",class:\"ML__center-menu\",label:()=>he(`\\\\overgroup{${oe(t)}}`),visible:()=>oe(t).length>0,onMenuSelect:()=>t.insert(\"\\\\overgroup{#@}\",{selectionMode:\"item\"})},{id:\"accent-overbrace\",class:\"ML__center-menu\",label:()=>he(`\\\\overbrace{${oe(t)}}`),visible:()=>oe(t).length>0,onMenuSelect:()=>t.insert(\"\\\\overbrace{#@}\",{selectionMode:\"item\"})},{id:\"accent-underline\",class:\"ML__center-menu\",label:()=>he(`\\\\underline{${oe(t)}}`),visible:()=>oe(t).length>0,onMenuSelect:()=>t.insert(\"\\\\underline{#@}\",{selectionMode:\"item\"})},{id:\"accent-undergroup\",class:\"ML__center-menu\",label:()=>he(`\\\\undergroup{${oe(t)}}`),visible:()=>oe(t).length>0,onMenuSelect:()=>t.insert(\"\\\\undergroup{#@}\",{selectionMode:\"item\"})},{id:\"accent-underbrace\",class:\"ML__center-menu\",label:()=>he(`\\\\underbrace{${oe(t)}}`),visible:()=>oe(t).length>0,onMenuSelect:()=>t.insert(\"\\\\underbrace{#@}\",{selectionMode:\"item\"})}]}function Ub(t){return[{id:\"decoration-boxed\",label:()=>he(`\\\\boxed{${t.getValue(t.model.selection)}}}`),onMenuSelect:()=>t.insert(\"\\\\boxed{#@}\",{selectionMode:\"item\"})},{id:\"decoration-red-box\",label:()=>he(`\\\\bbox[5px, border: 2px solid red]{${t.getValue(t.model.selection)}}`),onMenuSelect:()=>t.insert(\"\\\\bbox[5px, border: 2px solid red]{#@}\",{selectionMode:\"item\"})},{id:\"decoration-dashed-black-box\",label:()=>he(`\\\\bbox[5px, border: 2px dashed black]{${t.getValue(t.model.selection)}}`),onMenuSelect:()=>t.insert(\"\\\\bbox[5px, border: 2px dashed black]{#@}\",{selectionMode:\"item\"})}]}function jb(t){let e=[];for(let r of Object.keys(Zt))e.push({id:`background-color-${r}`,class:(bh(Wc(Zt[r]))===\"#000\"?\"dark-contrast\":\"light-contrast\")+\" menu-swatch\",label:`<span style=\"background:${Zt[r]} \"></span>`,ariaLabel:()=>{var i;return(i=I(r))!=null?i:r},checked:()=>{var i;return(i={some:\"mixed\",all:!0}[t.queryStyle({backgroundColor:r})])!=null?i:!1},onMenuSelect:()=>t.applyStyle({backgroundColor:r},{operation:\"toggle\"})});return e}function Jb(t){let e=[];for(let r of Object.keys(Yt))e.push({id:`color-${r}`,class:(Wc(Yt[r])===\"#000\"?\"dark-contrast\":\"light-contrast\")+\" menu-swatch\",label:`<span style=\"background:${Yt[r]} \"></span>`,ariaLabel:()=>{var i;return(i=I(r))!=null?i:r},checked:()=>{var i;return(i={some:\"mixed\",all:!0}[t.queryStyle({color:r})])!=null?i:!1},onMenuSelect:()=>t.applyStyle({color:r},{operation:\"toggle\"})});return e}var Gc=class extends Sn{constructor(e,r,i,n){super(e,r),this.row=i,this.col=n}set active(e){let r=this.parentMenu.children;if(e)for(let i of r)i.element.classList.toggle(\"active\",i.row<=this.row&&i.col<=this.col);else for(let i of r)i.element.classList.remove(\"active\")}};function Gb(t){let e=[];for(let r=1;r<=5;r++)for(let i=1;i<=5;i++)e.push({id:`insert-matrix-${r}x${i}`,onCreate:(n,o)=>new Gc(n,o,r,i),label:\"\\u2610\",tooltip:()=>I(\"tooltip.row-by-col\",r,i),data:{row:r,col:i},onMenuSelect:()=>{t.insert(`\\\\begin{pmatrix}${Array(r).fill(Array(i).fill(\"#?\").join(\" & \")).join(\"\\\\\\\\\")}\\\\end{pmatrix}`,{selectionMode:\"item\"})}});return e}function xh(t){return[{label:()=>I(\"menu.array.add row above\"),id:\"add-row-above\",onMenuSelect:()=>t.executeCommand(\"addRowBefore\"),keyboardShortcut:\"shift+alt+[Return]\",visible:()=>{if(!t.isSelectionEditable||!Li(t))return!1;let[e,r]=Wr(t),[i,n]=En(t);return e!==i}},{label:()=>I(\"menu.array.add row below\"),id:\"add-row-below\",onMenuSelect:()=>t.executeCommand(\"addRowAfter\"),keyboardShortcut:\"alt+[Return]\",visible:()=>{if(!t.isSelectionEditable||!Li(t))return!1;let[e,r]=Wr(t),[i,n]=En(t);return e!==i}},{label:()=>I(\"menu.array.add column before\"),id:\"add-column-before\",onMenuSelect:()=>t.executeCommand(\"addColumnBefore\"),visible:()=>{if(!t.isSelectionEditable||!Li(t))return!1;let[e,r]=Wr(t),[i,n]=En(t);return r!==n},keyboardShortcut:\"shift+alt+[Tab]\",enabled:()=>{let e=t.model.parentEnvironment;if(!e)return!1;let[r,i]=Uc(t);return r<e.maxColumns}},{label:()=>I(\"menu.array.add column after\"),id:\"add-column-after\",onMenuSelect:()=>t.executeCommand(\"addColumnAfter\"),keyboardShortcut:\"alt+[Tab]\",visible:()=>{if(!t.isSelectionEditable||!Li(t))return!1;let[e,r]=Wr(t),[i,n]=En(t);return r!==n}},{type:\"divider\"},{label:()=>I(\"menu.array.delete row\"),id:\"delete-row\",onMenuSelect:()=>t.executeCommand(\"removeRow\"),enabled:()=>{let[e,r]=Wr(t),[i,n]=Uc(t);return i>e},visible:()=>{if(!t.isSelectionEditable||!Li(t))return!1;let[e,r]=Wr(t),[i,n]=En(t);return e!==i}},{label:()=>I(\"menu.array.delete column\"),id:\"delete-column\",onMenuSelect:()=>t.executeCommand(\"removeColumn\"),enabled:()=>{let[e,r]=Wr(t),[i,n]=Uc(t);return n>r},visible:()=>{if(!t.isSelectionEditable||!Li(t))return!1;let[e,r]=Wr(t),[i,n]=En(t);return r!==n}},{type:\"divider\"},{label:()=>I(\"menu.borders\"),visible:()=>(Xb(t)||Li(t))&&t.isSelectionEditable,submenu:[{label:\" \\u22F1 \",id:\"environment-no-border\",onMenuSelect:()=>To(t,\"matrix\")},{label:\"(\\u22F1)\",id:\"environment-parentheses\",onMenuSelect:()=>To(t,\"pmatrix\")},{label:\"[\\u22F1]\",id:\"environment-brackets\",onMenuSelect:()=>To(t,\"bmatrix\")},{label:\"|\\u22F1|\",id:\"environment-bar\",onMenuSelect:()=>To(t,\"vmatrix\")},{label:\"{\\u22F1}\",id:\"environment-braces\",onMenuSelect:()=>To(t,\"Bmatrix\")}],submenuClass:\"border-submenu\"},{type:\"divider\"},{label:()=>I(\"menu.insert matrix\"),id:\"insert-matrix\",visible:()=>t.isSelectionEditable,submenu:Gb(t),submenuClass:\"insert-matrix-submenu\",columnCount:5},{type:\"divider\"},{label:()=>I(\"menu.insert\"),id:\"insert\",submenu:Yb(t)},{type:\"divider\"},{label:()=>I(\"menu.mode\"),id:\"mode\",visible:()=>t.isSelectionEditable&&t.model.selectionIsCollapsed,submenu:[{label:()=>I(\"menu.mode-math\"),id:\"mode-math\",onMenuSelect:()=>{Xe(t,\"accept-all\"),t.executeCommand([\"switchMode\",\"math\"])},checked:()=>t.model.mode===\"math\"},{label:()=>I(\"menu.mode-text\"),id:\"mode-text\",onMenuSelect:()=>{Xe(t,\"accept-all\"),t.executeCommand([\"switchMode\",\"text\"])},checked:()=>t.model.mode===\"text\"},{label:()=>I(\"menu.mode-latex\"),id:\"mode-latex\",onMenuSelect:()=>t.executeCommand([\"switchMode\",\"latex\"]),checked:()=>t.model.mode===\"latex\"}]},{type:\"divider\"},{label:()=>I(\"menu.font-style\"),id:\"variant\",visible:()=>t.isSelectionEditable,submenu:Hb(t),submenuClass:\"variant-submenu\"},{label:()=>I(\"menu.color\"),id:\"color\",visible:()=>t.isSelectionEditable,submenu:Jb(t),columnCount:4,submenuClass:\"swatches-submenu\"},{label:()=>I(\"menu.background-color\"),id:\"background-color\",visible:()=>t.isSelectionEditable,submenu:jb(t),columnCount:4,submenuClass:\"swatches-submenu\"},{label:()=>I(\"menu.accent\"),id:\"accent\",visible:()=>t.isSelectionEditable,submenu:Wb(t),submenuClass:\"variant-submenu\"},{label:()=>I(\"menu.decoration\"),id:\"decoration\",visible:()=>t.isSelectionEditable&&oe(t).length>0,submenu:Ub(t),submenuClass:\"variant-submenu\"},{type:\"divider\"},{label:()=>I(\"menu.evaluate\"),id:\"ce-evaluate\",visible:()=>t.isSelectionEditable&&globalThis.MathfieldElement.computeEngine!==null,onMenuSelect:()=>{let e=Zb(t);if(!e){t.model.announce(\"plonk\");return}t.model.selectionIsCollapsed?(t.model.position=t.model.lastOffset,t.insert(`=${e}`,{insertionMode:\"insertAfter\",selectionMode:\"item\"})):t.insert(e,{insertionMode:\"replaceSelection\",selectionMode:\"item\"})}},{label:()=>I(\"menu.simplify\"),id:\"ce-simplify\",visible:()=>t.isSelectionEditable&&globalThis.MathfieldElement.computeEngine!==null,onMenuSelect:()=>{var e,r;if(t.model.selectionIsCollapsed){let i=(e=t.expression)==null?void 0:e.simplify();if(t.model.position=t.model.lastOffset,!i){t.model.announce(\"plonk\");return}t.insert(`=${i.latex}`,{insertionMode:\"insertAfter\",selectionMode:\"item\"})}else{let i=(r=globalThis.MathfieldElement.computeEngine)==null?void 0:r.parse(t.getValue(t.model.selection)).simplify();if(!i){t.model.announce(\"plonk\");return}t.insert(i.latex,{insertionMode:\"replaceSelection\",selectionMode:\"item\"})}}},{label:()=>{var i;let e=globalThis.MathfieldElement.computeEngine;if(e===null)return\"\";let r=(i=t.expression)==null?void 0:i.unknowns[0];if(r){let n=e.box(r).latex;return I(\"menu.solve-for\",he(n))}return I(\"menu.solve\")},id:\"ce-solve\",visible:()=>{var e;return t.isSelectionEditable&&globalThis.MathfieldElement.computeEngine!==null&&((e=t.expression)==null?void 0:e.unknowns.length)===1&&t.expression.unknowns[0]!==\"Nothing\"},onMenuSelect:()=>{var n;let e=t.expression,r=e==null?void 0:e.unknowns[0],i=(n=e.solve(r))==null?void 0:n.map(o=>{var a;return(a=o.simplify().latex)!=null?a:\"\"});if(!i){t.model.announce(\"plonk\");return}t.insert(`${r}=${i.length===1?i[0]:\"\\\\left\\\\lbrace\"+(i==null?void 0:i.join(\", \"))+\"\\\\right\\\\rbrace\"}`,{insertionMode:\"replaceAll\",selectionMode:\"item\"})}},{type:\"divider\"},{label:()=>I(\"menu.cut\"),id:\"cut\",onMenuSelect:()=>t.executeCommand(\"cutToClipboard\"),visible:()=>!t.options.readOnly&&t.isSelectionEditable,keyboardShortcut:\"meta+X\"},{label:()=>I(\"menu.copy\"),id:\"copy\",submenu:[{label:()=>I(\"menu.copy-as-latex\"),id:\"copy-latex\",onMenuSelect:()=>q.copyToClipboard(t,\"latex\"),keyboardShortcut:\"meta+C\"},{label:()=>I(\"menu.copy-as-typst\"),id:\"copy-latex\",onMenuSelect:()=>q.copyToClipboard(t,\"typst\")},{label:()=>I(\"menu.copy-as-ascii-math\"),id:\"copy-ascii-math\",onMenuSelect:()=>q.copyToClipboard(t,\"ascii-math\")},{label:()=>I(\"menu.copy-as-mathml\"),id:\"copy-math-ml\",onMenuSelect:()=>q.copyToClipboard(t,\"math-ml\")}]},{label:()=>I(\"menu.paste\"),id:\"paste\",onMenuSelect:()=>t.executeCommand(\"pasteFromClipboard\"),visible:()=>t.hasEditableContent,keyboardShortcut:\"meta+V\"},{label:()=>I(\"menu.select-all\"),id:\"select-all\",keyboardShortcut:\"meta+A\",onMenuSelect:()=>t.executeCommand(\"selectAll\")}]}function Li(t){var r,i;let e=(i=(r=t.model.parentEnvironment)==null?void 0:r.environmentName)!=null?i:\"\";return[\"array\",\"matrix\",\"pmatrix\",\"bmatrix\",\"vmatrix\",\"Bmatrix\",\"cases\",\"dcases\",\"rcases\"].includes(e)}function Xb(t){let e=t.model.at(t.model.position);if(e.type!==\"array\")return!1;let r=e.environmentName;return[\"matrix\",\"pmatrix\",\"bmatrix\",\"vmatrix\",\"Bmatrix\"].includes(r)}function Uc(t){var r;let e=(r=t.model.parentEnvironment)==null?void 0:r.rows;return e?[e.length,e.reduce((i,n)=>Math.max(i,n.length),0)]:[0,0]}function Wr(t){let e=t.model.parentEnvironment;return e?[e.minRows,e.minColumns]:[0,0]}function En(t){let e=t.model.parentEnvironment;return e?[e.maxRows,e.maxColumns]:[0,0]}function To(t,e){gi(t),t.flushInlineShortcutBuffer(),Mc(t.model,e),J(t)}function Zb(t){var i,n;let e;if(t.model.selectionIsCollapsed?e=(i=globalThis.MathfieldElement.computeEngine)==null?void 0:i.parse(t.getValue(),{canonical:!1}):e=(n=globalThis.MathfieldElement.computeEngine)==null?void 0:n.parse(t.getValue(t.model.selection),{canonical:!1}),!e)return\"\";let r=e.evaluate();return r.isSame(e)&&(r=e.N()),r.latex}function jc(t,e,r,i){return{id:`variant-${e}`,label:()=>{var o;return oe(t).length<12?he(`\\\\${r}{${oe(t)}}`):(o=I(i))!=null?o:i},class:\"ML__xl\",tooltip:()=>{var n;return(n=I(i))!=null?n:i},visible:()=>qb(t,e),checked:()=>{var n;return(n={some:\"mixed\",all:!0}[t.queryStyle({variant:e})])!=null?n:!1},onMenuSelect:()=>t.applyStyle({variant:e},{operation:\"toggle\"})}}function Jc(t,e,r,i){return{id:`variant-style-${e}`,label:()=>{var o;let n=oe(t);return n.length>0&&n.length<12?he(`\\\\${r}{${oe(t)}}`):(o=I(i))!=null?o:i},class:()=>{let n=oe(t);return n.length>0&&n.length<12?\"ML__xl\":\"\"},tooltip:()=>{var n;return(n=I(i))!=null?n:i},visible:!0,checked:()=>{var n;return(n={some:\"mixed\",all:!0}[t.queryStyle({variantStyle:e})])!=null?n:!1},onMenuSelect:()=>t.applyStyle({variantStyle:e},{operation:\"toggle\"})}}function Yb(t){return[{label:()=>Ze(\"abs\"),id:\"insert-abs\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"|#?|\")},{label:()=>Ze(\"nth-root\"),id:\"insert-nth-root\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"\\\\sqrt[#?]{#?}\")},{label:()=>Ze(\"log-base\"),id:\"insert-log-base\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"\\\\log_{#?}{#?}\")},{type:\"heading\",label:()=>I(\"menu.insert.heading-calculus\")},{label:()=>Ze(\"derivative\"),id:\"insert-derivative\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"\\\\dfrac{\\\\mathrm{d}}{\\\\mathrm{d}x}#?\\\\bigm|_{x=#?}\")},{label:()=>Ze(\"nth-derivative\"),id:\"insert-nth-derivative\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"\\\\dfrac{\\\\mathrm{d}^#?}{\\\\mathrm{d}x^#?}#?\\\\bigm|_{x=#?}\")},{label:()=>Ze(\"integral\"),id:\"insert-integral\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"\\\\int_#?^#?#?\\\\,\\\\mathrm{d}#?\")},{label:()=>Ze(\"sum\"),id:\"insert-sum\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"\\\\sum_#?^#?#?\")},{label:()=>Ze(\"product\"),id:\"insert-product\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"\\\\prod_#?^#?#?\")},{type:\"heading\",label:()=>I(\"menu.insert.heading-complex-numbers\")},{label:()=>Ze(\"modulus\"),id:\"insert-modulus\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"\\\\lvert#?\\\\rvert\")},{label:()=>Ze(\"argument\"),id:\"insert-argument\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"\\\\arg(#?)\")},{label:()=>Ze(\"real-part\"),id:\"insert-real-part\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"\\\\Re(#?)\")},{label:()=>Ze(\"imaginary-part\"),id:\"insert-imaginary-part\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"\\\\Im(#?)\")},{label:()=>Ze(\"conjugate\"),id:\"insert-conjugate\",visible:()=>t.isSelectionEditable,onMenuSelect:()=>t.insert(\"\\\\overline{#?}\")}]}function Ze(t){return`<span class='ML__insert-template'> ${he(I(`menu.insert.${t}-template`))}</span><span class=\"ML__insert-label\">${I(`menu.insert.${t}`)}</span>`}var Fe={\"\\\\ne\":\"!=\",\"\\\\neq\":\"!=\",\"\\u2212\":\"-\",\"-\":\"-\",\"\\\\alpha\":\"alpha\",\"\\\\beta\":\"beta\",\"\\\\gamma\":\"gamma\",\"\\\\delta\":\"delta\",\"\\\\epsilon\":\"epsilon.alt\",\"\\\\varepsilon\":\"epsilon\",\"\\\\zeta\":\"zeta\",\"\\\\eta\":\"eta\",\"\\\\theta\":\"theta.alt\",\"\\\\vartheta\":\"theta\",\"\\\\iota\":\"iota\",\"\\\\kappa\":\"kappa\",\"\\\\lambda\":\"lambda\",\"\\\\mu\":\"mu\",\"\\\\nu\":\"nu\",\"\\\\xi\":\"xi\",\"\\\\pi\":\"pi\",\"\\\\rho\":\"rho\",\"\\\\sigma\":\"sigma\",\"\\\\tau\":\"tau\",\"\\\\upsilon\":\"upsilon\",\"\\\\phi\":\"phi.alt\",\"\\\\varphi\":\"phi\",\"\\\\chi\":\"chi\",\"\\\\psi\":\"psi\",\"\\\\omega\":\"omega\",\"\\\\Gamma\":\"Gamma\",\"\\\\Delta\":\"Delta\",\"\\\\Theta\":\"Theta\",\"\\\\Lambda\":\"Lambda\",\"\\\\Xi\":\"Xi\",\"\\\\Pi\":\"Pi\",\"\\\\Sigma\":\"Sigma\",\"\\\\Phi\":\"Phi\",\"\\\\Psi\":\"Psi\",\"\\\\Omega\":\"Omega\",\"\\\\exponentialE\":\"e\",\"\\\\imaginaryI\":\"i\",\"\\\\imaginaryJ\":\"j\",\"\\\\!\":\" #h(-1em/6) \",\"\\\\,\":\" thin \",\"\\\\:\":\" med \",\"\\\\>\":\" med \",\"\\\\;\":\" thick \",\"\\\\enskip\":\"space.en\",\"\\\\enspace\":\"space.en\",\"\\\\qquad\":\"space.quad space.quad\",\"\\\\quad\":\"space.quad\",\"\\\\infty\":\"infinity\",\"\\\\R\":\"RR\",\"\\\\mathbb{R}\":\"RR\",\"\\\\N\":\"NN\",\"\\\\mathbb{N}\":\"NN\",\"\\\\Z\":\"ZZ\",\"\\\\mathbb{Z}\":\"ZZ\",\"\\\\Q\":\"QQ\",\"\\\\mathbb{Q}\":\"QQ\",\"\\\\C\":\"CC\",\"\\\\mathbb{C}\":\"CC\",\"\\\\emptyset\":\"emptyset\",\"\\\\varnothing\":\"nothing\",\"\\\\varDelta\":\"Delta\",\"\\\\varTheta\":\"Theta\",\"\\\\varLambda\":\"Lambda\",\"\\\\varXi\":\"Xi\",\"\\\\varPi\":\"Pi\",\"\\\\varSigma\":\"Sigma\",\"\\\\varUpsilon\":\"Upsilon\",\"\\\\varPhi\":\"Phi\",\"\\\\varPsi\":\"Psi\",\"\\\\varOmega\":\"Omega\",\"\\\\vert\":\" | \",\"\\\\Vert\":\" || \",\"\\\\mid\":\" divides \",\"\\\\lbrack\":\" bracket.l \",\"\\\\rbrack\":\" bracket.r \",\"\\\\lbrace\":\" brace.l \",\"\\\\rbrace\":\" brace.r \",\"\\\\lparen\":\" paren.l \",\"\\\\rparen\":\" paren.r \",\"\\\\langle\":\" angle.l \",\"\\\\rangle\":\" angle.r \",\"\\\\differentialD\":\" dif \",\"\\\\diamond\":\" diamond.stroked.small \",\"\\\\square\":\" square.stroked.small \",\"\\\\lceil\":\" ceil.l \",\"\\\\rceil\":\" ceil.r \",\"\\\\lfloor\":\" floor.l \",\"\\\\rfloor\":\" floor.r \",\"\\\\aleph\":\" aleph \",\"\\\\bet\":\" bet \",\"\\\\gimel\":\" gimel \",\"\\\\dalet\":\" dalet \",\"\\\\mod\":\" mod \",\"\\\\equiv\":\" equiv \",\"\\\\subset\":\" subset \",\"\\\\supset\":\" supset \",\"\\\\subseteq\":\" subset.eq \",\"\\\\supseteq\":\" supset.eq \",\"\\\\subsetneq\":\" subset.neq \",\"\\\\supsetneq\":\" supset.neq \",\"\\\\supsetneqq\":\" supset.neq \",\"\\\\nsubset\":\" subset.not \",\"\\\\nsupset\":\" supset.not \",\"\\\\nsubseteq\":\" subset.eq.not \",\"\\\\nsupseteq\":\" supset.eq.not \",\"\\\\approx\":\" approx \",\"\\\\uparrow\":\" arrow.t \",\"\\\\downarrow\":\" arrow.b \",\"\\\\rightarrow\":\" arrow.r \",\"\\\\leftarrow\":\" arrow.l \",\"\\\\longmapsto\":\" mapsto.long \",\"\\\\longmapsfrom\":\" arrow.l.bar.long \",\"/\":\"\\\\/\",\"&\":\"&\"},vh={\"[\":\" bracket.l \",\"]\":\" bracket.r \",\"{\":\" brace.l \",\"}\":\" brace.r \",\"(\":\" paren.l \",\")\":\" paren.r \",\"<\":\" angle.l \",\">\":\" angle.r \",\".\":\"\"},_h={\" bracket.l \":\"[\",\" bracket.r \":\"]\",\" brace.l \":\"{\",\" brace.r \":\"}\",\" paren.l \":\"(\",\" paren.r \":\")\",\" angle.l \":\" angle.l \",\" angle.r \":\" angle.r \"},Do={\"\\\\pm\":\"plus.minus\",\"\\\\colon\":\" : \",\"\\\\sum\":\" sum \",\"\\\\prod\":\" product \",\"\\\\bigcap\":\" inter.big \",\"\\\\bigcup\":\" union.big \",\"\\\\int\":\" integral \",\"\\\\iint\":\" integral.double \",\"\\\\iiint\":\" integral.triple \",\"\\\\intop\":\" integral \",\"\\\\oint\":\" integral.cont \",\"\\\\oiint\":\" integral.surf \",\"\\\\oiiint\":\" integral.vol \",\"\\\\setminus\":\" without \",\"\\\\vdots\":\" without \",\"\\\\ddots\":\" dots.down \",\"\\\\ge\":\">=\",\"\\\\le\":\"<=\",\"\\\\ne\":\"!=\",\"\\\\neq\":\"!=\",\"\\\\lt\":\"<\",\"\\\\gt\":\">\",\"\\\\gets\":\"<-\",\"\\\\to\":\"->\",\"\\\\land\":\" and \",\"\\\\lor\":\" or \",\"\\\\lnot\":\" not \",\"\\\\forall\":\" forall \",\"\\\\exists\":\" exists \",\"\\\\in\":\" in \",\"\\\\notin\":\" in.not \",\"\\\\mapsto\":\"|->\",\"\\\\implies\":\"==>\",\"\\\\iff\":\"<==>\",\"\\\\cdot\":\" dot.op \",\"\\\\ast\":\" * \",\"\\\\star\":\" star.op \",\"\\\\times\":\" times \",\"\\\\div\":\" div \",\"\\\\ltimes\":\" times.l \",\"\\\\rtimes\":\" times.r \",\"\\\\bowtie\":\" \\u22C8 \",\"\\\\circ\":\" circle.stroked.small \"},Qb={underarc:\"underparen\",underparen:\"underparen\",underbrace:\"underbrace\",underline:\"underline\",overarc:\"overparen\",overparen:\"overparen\",overbrace:\"overbrace\",overline:\"overline\",cancel:\"cancel\",displaystyle:\"display\",textstyle:\"inline\"},ey={longrightarrow:t=>`arrow.r.long^(${ae(t.above)})`,longleftarrow:t=>`arrow.l.long^(${ae(t.above)})`};function ty(t){let e=\"\";for(let r of t){let i=e[e.length-1];i!==void 0&&(/\\d$/.test(i)&&/^\\d/.test(r)||/[a-zA-Z]$/.test(i)&&/^[a-zA-Z]/.test(r))&&(e+=\" \"),e+=r}return e}function ae(t){var o,a,s,l,c,u,m,d,h,f,x,v,b,_,S,A,E,D,L,K,$,G,R;if(!t)return\"\";if(ee(t)){if(t.length===0)return\"\";if(t[0].mode===\"latex\")return t.map(T=>ae(T)).join(\"\");if(t[0].mode===\"text\"){let T=0,H=\"\";for(;((o=t[T])==null?void 0:o.mode)===\"text\";)H+=t[T].body?ae(t[T].body):t[T].value,T++;return` \"${H}\" ${ae(t.slice(T))}`}let N=0,j=[];for(;((a=t[N])==null?void 0:a.mode)===\"math\";){let T=\"\";for(;((s=t[N])==null?void 0:s.type)===\"mord\"&&/\\d/.test(t[N].value);)T+=t[N++].value;T?j.push(T):j.push(ae(t[N++]))}return j.push(ae(t.slice(N))),ty(j)}if(t.mode===\"text\")return`\"${t.value}\"`;let e=\"\",{command:r}=t,i;if(r===\"\\\\placeholder\")return`\"${ae(t.body)}\"`;let n=y.serialize([t],{expandMacro:!0,defaultMode:\"math\"});switch(t.type){case\"accent\":let N={\"\\\\vec\":\"arrow\",\"\\\\dot\":\"dot\",\"\\\\ddot\":\"dot.double\",\"\\\\bar\":\"overline\",\"\\\\hat\":\"hat\",\"\\\\acute\":\"acute\",\"\\\\grave\":\"grave\",\"\\\\tilde\":\"tilde\",\"\\\\breve\":\"breve\",\"\\\\check\":\"caron\"}[r];e=`${N!=null?N:\"\"}(${ae(t.body)}) `;break;case\"first\":return\"\";case\"latexgroup\":return t.body.map(T=>T.value).join(\"\");case\"group\":case\"root\":e=(l=Fe[r])!=null?l:ae(t.body);break;case\"genfrac\":{let T=t;T.hasBarLine?(e+=\"(\",e+=ae(T.above),e+=\")/(\",e+=ae(T.below),e+=\")\"):e+=`binom(${ae(T.above)}, ${ae(T.below)})`}break;case\"surd\":t.hasEmptyBranch(\"above\")?e+=`sqrt(${ae(t.body)})`:e+=`root(${ae(t.above)}, ${ae(t.body)})`;break;case\"latex\":e=t.value;break;case\"leftright\":{let T=t,H=T.leftDelim;H&&Fe[H]&&(H=Fe[H]);let ie=T.matchingRightDelim();ie&&Fe[ie]&&(ie=Fe[ie]),H&&(H=(c=vh[H])!=null?c:H),ie&&(ie=(u=vh[ie])!=null?u:ie),H&&ie?e=`lr(${(m=_h[H])!=null?m:H}${ae(T.body)}${(d=_h[ie])!=null?d:ie})`:e=`lr(${H}${ae(T.body)}${ie})`}break;case\"sizeddelim\":case\"delim\":e=t.value;break;case\"overlap\":break;case\"mord\":if(Fe[n])return Fe[n];e=(x=(f=(h=Fe[r])!=null?h:r)!=null?f:r)!=null?x:typeof t.value==\"string\"?t.value:\"\",e.startsWith(\"\\\\\")&&(e+=\" \"),i=r?r.match(/{?\\\\char\"([\\dabcdefABCDEF]+)}?/):null,i?e=String.fromCodePoint(Number.parseInt(\"0x\"+i[1])):e.length>0&&e.startsWith(\"\\\\\")&&(e=typeof t.value==\"string\"?t.value.charAt(0):t.command),e=ry(e,t.style),e=` ${e} `;break;case\"mbin\":case\"mrel\":case\"minner\":e=(_=(b=(v=Fe[n])!=null?v:Fe[r])!=null?b:Do[r])!=null?_:t.value;break;case\"mopen\":case\"mclose\":e=(S=Fe[n])!=null?S:t.value;break;case\"mpunct\":e=(A=Do[r])!=null?A:r;break;case\"mop\":case\"operator\":case\"extensible-symbol\":t.value!==\"\\u200B\"&&(Do[r]?e=Do[r]:e=r===\"\\\\operatorname\"?ae(t.body):(E=t.value)!=null?E:r,e+=\" \");break;case\"array\":let j=t.environmentName;if(t.isMultiline)e=t.rows.map(H=>H.map(ie=>ae(ie)).join(\"\")).join(`\n`);else{let T=t.rows,H=T.map(X=>X.map(ae).join(\", \")),ie={pmatrix:'\"(\"',bmatrix:'\"[\"',\"bmatrix*\":'\"[\"',Bmatrix:'\"{\"',vmatrix:'\"|\"',matrix:\"#none\"}[j];ie?e=`mat(delim: ${ie}, ${H.join(\" ; \")})`:j===\"cases\"||j===\"rcases\"?e=`cases(reverse: #${j===\"rcases\"}, ${H.join(\", \")})`:j===\"aligned\"?e=T.map(X=>X.map(ae).join(\" & \")).join(\" \\\\ \"):e=T.map(X=>X.map(ae).join(\"\")).join(\"\")}break;case\"box\":break;case\"spacing\":e=(L=(D=Fe[n])!=null?D:Fe[r])!=null?L:\" \";break;case\"space\":e=\" \";break;case\"subsup\":e=(K=t.leftSibling)!=null&&K.value?\"\":'\"\"';break;case\"macro\":e=(R=(G=($=Fe[n])!=null?$:Fe[r])!=null?G:Do[r])!=null?R:ae(t.body);break;case\"overunder\":break}if(!e){let N=Qb[t.command.slice(1)];N&&(e=`${N}(${ae(t.body)})`)}if(!e){let N=ey[t.command.slice(1)];N&&(e=N(t))}if(!t.hasEmptyBranch(\"subscript\")){e+=\"_\";let N=ae(t.subscript);e+=N.length!==1?`(${N})`:N}if(!t.hasEmptyBranch(\"superscript\")){e+=\"^\";let N=ae(t.superscript);e+=N.length!==1?`(${N})`:N}return e}function ry(t,e){if(!e)return t;let r=t;return e.variant===\"double-struck\"&&(r=`bb(${r})`),e.variant===\"script\"&&(r=`cal(${r})`),e.variant===\"fraktur\"&&(r=`frak(${r})`),e.variant===\"sans-serif\"&&(r=`sans(${r})`),e.variant===\"monospace\"&&(r=`mono(${r})`),e.variantStyle===\"bold\"&&(r=`bold(${r})`),r}function Ur(t,e){return typeof t==\"string\"?t+kt(e):kt(t)}function Xc(t){var r;let e;if(t.parent.type===\"prompt\")t.parentBranch===\"body\"&&(e=\"prompt\");else if(t.parentBranch===\"body\"){if(t.type===\"first\"&&(t.parent.type===\"root\"?e=\"mathfield\":t.parent.type===\"surd\"?e=\"radicand\":t.parent.type===\"genfrac\"?e=\"fraction\":t.parent.type===\"sizeddelim\"&&(e=\"delimiter\"),e))return e;t.type===\"subsup\"?t.superscript&&t.subscript?e=\"superscript and subscript\":t.superscript?e=\"superscript\":t.subscript&&(e=\"subscript\"):t.type&&(e=(r={accent:\"accented\",array:\"array\",box:\"box\",chem:\"chemical formula\",delim:\"delimiter\",enclose:\"cross out\",\"extensible-symbol\":\"extensible symbol\",error:\"error\",first:\"first\",genfrac:\"fraction\",group:\"group\",latex:\"LaTeX\",leftright:\"delimiter\",line:\"line\",subsup:\"subscript-superscript\",operator:\"operator\",overunder:\"over-under\",placeholder:\"placeholder\",rule:\"rule\",sizeddelim:\"delimiter\",space:\"space\",spacing:\"spacing\",surd:\"square root\",text:\"text\",prompt:\"prompt\",root:\"math field\",mop:\"operator\"}[t.type])!=null?r:\"parent\")}else if(t.parent.type===\"genfrac\"){if(t.parentBranch===\"above\")return\"numerator\";if(t.parentBranch===\"below\")return\"denominator\"}else t.parent.type===\"surd\"?t.parentBranch===\"above\"&&(e=\"index\"):t.parentBranch===\"superscript\"?e=\"superscript\":t.parentBranch===\"subscript\"&&(e=\"subscript\");return e!=null?e:\"parent\"}function Mh(t,e,r,i){let n=\"\";if(e===\"plonk\"){globalThis.MathfieldElement.playSound(\"plonk\"),t.flushInlineShortcutBuffer();return}if(e===\"delete\")n=Ur(\"deleted: \",i);else if(e===\"focus\"||e.includes(\"move\"))n=iy(t.model,r),n+=ny(t.model);else if(e===\"replacement\")n=Ur(t.model.at(t.model.position));else if(e===\"line\"){let o=Ur(t.model.root);t.keyboardDelegate.setAriaLabel(o)}else n=i?Ur(e+\" \",i):e;if(n){let o=t.ariaLiveText.textContent.includes(\"\\xA0\")?\" \\u202F \":\" \\xA0 \";t.ariaLiveText.textContent=n+o}}function iy(t,e){if(Number.isNaN(e))return\"\";let r=t.at(e);if(!r||r.treeDepth<=t.at(t.position).treeDepth)return\"\";let i=\"\",n=r.parent,o=t.at(t.position).parent;for(;n!==t.root&&n!==o;)i+=`out of ${Xc(n)};`,n=n.parent;return i}function ny(t){if(!t.selectionIsCollapsed)return`selected: ${Ur(t.getAtoms(t.selection))}`;let e=\"\",r=t.at(t.position);if(r.isFirstSibling&&(e=`start of ${Xc(r)}: `),r.isLastSibling){if(!r.isFirstSibling){if(!r.parent.parent)return`${Ur(r)}; end of mathfield`;e=`${Ur(r)}; end of ${Xc(r)}`}}else e+=Ur(r);return e}var Fs=class{constructor(e,r,i){this.mathfield=e,this.mode=r,this.silenceNotifications=!1,this._selection={ranges:[[0,0]],direction:\"none\"},this._anchor=0,this._position=0,this.root=i}dispose(){this.mathfield=void 0}getState(){let e={ranges:[...this._selection.ranges]};return this.selection.direction&&this.selection.direction!==\"none\"&&(e.direction=this.selection.direction),{content:this.root.toJson(),selection:e,mode:this.mode}}setState(e,r){var o;let i=this.silenceNotifications;this.silenceNotifications=(o=r==null?void 0:r.silenceNotifications)!=null?o:!0;let n={};if((r==null?void 0:r.type)===\"undo\"&&(n={inputType:\"historyUndo\"}),(r==null?void 0:r.type)===\"redo\"&&(n={inputType:\"historyRedo\"}),this.contentWillChange(n)){let a=this.silenceNotifications;this.silenceNotifications=!0,this.mode=e.mode,this.root=bt(e.content),this.selection=e.selection,this.silenceNotifications=a,this.contentDidChange(n),this.selectionDidChange()}this.silenceNotifications=i}get atoms(){return this.root.children}get selection(){return this._selection}set selection(e){this.setSelection(e)}setSelection(e,r){return!this.mathfield.contentEditable&&this.mathfield.userSelect===\"none\"?!1:this.deferNotifications({selection:!0,content:!0},()=>{var c,u,m,d;let i=this.normalizeSelection(e,r);if(i===void 0)throw new TypeError(\"Invalid selection\");if(i.ranges.length===1&&i.ranges[0][0]===i.ranges[0][1]){let h=i.ranges[0][0];if(!this.mathfield.dirty&&!((c=this.at(h))!=null&&c.parentPrompt)&&this.mathfield.hasEditablePrompts){if((u=this.at(h-1))!=null&&u.parentPrompt){this._anchor=this.normalizeOffset(h-1),this._position=this._anchor,this._selection=this.normalizeSelection(this._anchor);return}if((m=this.at(h+1))!=null&&m.parentPrompt){this._anchor=this.normalizeOffset(h+1),this._position=this._anchor,this._selection=this.normalizeSelection(this._anchor);return}this._anchor=0,this._position=0,this._selection={ranges:[[0,0]]};return}this._anchor=h,this._position=h,this._selection=i;return}let n=de(i);n=oy(this,n),i.direction===\"backward\"?[this._position,this._anchor]=n:[this._anchor,this._position]=n;let o=n[0]+1;for(;o<=this.lastOffset&&((d=this.at(o))==null?void 0:d.type)===\"first\"&&o<n[1];)o+=1;let a=o<=this.lastOffset?this.at(o):this.at(n[1]),s=this.at(n[1]),l=y.commonAncestor(a,s);(l==null?void 0:l.type)===\"array\"&&a.parent===l&&s.parent===l?this._selection={ranges:[n],direction:i.direction}:this._selection={ranges:[n],direction:i.direction},this._position>=0&&this._position<=this.lastOffset})}setPositionHandlingPlaceholder(e){var i;let r=this.at(e);(r==null?void 0:r.type)===\"placeholder\"?this.setSelection(e-1,e):((i=r==null?void 0:r.rightSibling)==null?void 0:i.type)===\"placeholder\"?this.setSelection(e,e+1):this.position=e,r instanceof pe&&r.isSuggestion&&(r.isSuggestion=!1),this.mathfield.stopCoalescingUndo()}get position(){return this._position}set position(e){this.setSelection(e,e)}get anchor(){return this._anchor}get selectionIsCollapsed(){return this._anchor===this._position}get selectionIsPlaceholder(){return Math.abs(this._anchor-this._position)===1?this.at(Math.max(this._anchor,this._position)).type===\"placeholder\":!1}collapseSelection(e=\"forward\"){return this._anchor===this._position?!1:(e===\"backward\"?this.position=Math.min(this._anchor,this._position):this.position=Math.max(this._anchor,this._position),!0)}get lastOffset(){return this.atoms.length-1}at(e){return this.atoms[e]}offsetOf(e){return this.atoms.indexOf(e)}getSiblingsRange(e){let r=this.at(e),{parent:i}=r;if(!i)return[0,this.lastOffset];let n=r.parent.branch(r.parentBranch);return[this.offsetOf(n[0]),this.offsetOf(n[n.length-1])]}getBranchRange(e,r){let i=this.at(e).branch(r);return[this.offsetOf(i[0]),this.offsetOf(i[i.length-1])]}getCellRange(e){var n,o;let r=this.getParentCell(e),i=this.at(e);if(i){for(;i&&((n=i.parent)==null?void 0:n.type)!==\"array\";)i=i.parent;if(((o=i==null?void 0:i.parent)==null?void 0:o.type)===\"array\")return[this.offsetOf(i.firstSibling),this.offsetOf(i.lastSibling)]}}getAtoms(e,r,i){let n=i!=null?i:{};if(Xi(e)){if(n=r!=null?r:{},e.ranges.length>1)return e.ranges.reduce((d,h)=>[...d,...this.getAtoms(h,n)],[]);e=e.ranges[0]}let o,a;if(Rt(e)){if(o=e,!Rt(r))return[];a=r}else[o,a]=e,Object.keys(n).length===0&&(n=r!=null?r:{});if(!Number.isFinite(o))return[];n.includeChildren===void 0&&(n.includeChildren=!1),o<0&&(o=this.lastOffset-o+1),a<0&&(a=this.lastOffset+a+1);let s=Math.min(o,a),l=Math.max(o,a),c=s===0?0:s+1,u=l;if(!n.includeChildren&&c===1&&u===this.lastOffset)return[this.root];let m=[];for(let d=c;d<=u;d++){let h=this.atoms[d];wh(this,h,c,u,n.includeFirstAtoms)&&m.push(h)}return n.includeChildren||(m=m.filter(d=>{let h=!1,{parent:f}=d;for(;f&&!h;)h=wh(this,f,c,u,n.includeFirstAtoms),f=f.parent;return!h})),m}findAtom(e,r=0,i=\"forward\"){let n,o=this.lastOffset;if(i===\"forward\"){for(let a=r;a<=o;a++)if(n=this.atoms[a],e(n))return n;for(let a=0;a<r;a++)if(n=this.atoms[a],e(n))return n;return}for(let a=r;a>=0;a--)if(n=this.atoms[a],e(n))return n;for(let a=o;a>r;a--)if(n=this.atoms[a],e(n))return n}extractAtoms(e){var i;let r=this.getAtoms(e);r.length===1&&!r[0].parent&&r[0].isRoot&&(r[0]instanceof z?r=r[0].rows.flatMap(n=>n.flatMap(o=>o)):r=[...(i=r[0].body)!=null?i:r[0].children],r=r.filter(n=>n.type!==\"first\"));for(let n of r)n.parent.removeChild(n);return r}deleteAtoms(e){if(e!=null||(e=[0,-1]),this.extractAtoms(e),e[0]===0&&e[1]===-1&&this.root instanceof z)for(;this.root.rowCount>1;)this.root.removeRow(1);this.position=e[0]}atomToString(e,r){let i=r!=null?r:\"latex\";if(i.startsWith(\"latex\"))return y.serialize([e],{expandMacro:i===\"latex-expanded\",skipStyles:i===\"latex-unstyled\",skipPlaceholders:i===\"latex-without-placeholders\",defaultMode:this.mathfield.options.defaultMode});if(i===\"math-ml\")return U(e);if(i===\"spoken\")return kt(e);if(i===\"spoken-text\"){let n=globalThis.MathfieldElement.textToSpeechMarkup;globalThis.MathfieldElement.textToSpeechMarkup=\"\";let o=kt(e);return globalThis.MathfieldElement.textToSpeechMarkup=n,o}if(i===\"spoken-ssml\"||i===\"spoken-ssml-with-highlighting\"){let n=globalThis.MathfieldElement.textToSpeechMarkup;globalThis.MathfieldElement.textToSpeechMarkup=\"ssml\";let o=kt(e);return globalThis.MathfieldElement.textToSpeechMarkup=n,o}return i===\"typst\"?ae(e):i===\"plain-text\"?ce(e,{plain:!0}):i===\"ascii-math\"?ce(e):(console.error(`MathLive 0.108.2: Unexpected format \"${i}`),\"\")}getValue(e,r,i){if(e===void 0)return this.atomToString(this.root,\"latex\");if(typeof e==\"string\"&&e!==\"math-json\")return this.atomToString(this.root,e);let n,o;if(Rt(e)&&Rt(r)?(n=[this.normalizeRange([e,r])],o=i):si(e)?(n=[this.normalizeRange(e)],o=r):Xi(e)?(n=e.ranges,o=r):(n=[this.normalizeRange([0,-1])],o=e),o!=null||(o=\"latex\"),o===\"math-json\"){if(!globalThis.MathfieldElement.computeEngine)return window[Symbol.for(\"io.cortexjs.compute-engine\")]||console.error(`The CortexJS Compute Engine library is not available.\nLoad the library, for example with:\nimport \"https://esm.run/@cortex-js/compute-engine\"`),'[\"Error\", \"compute-engine-not-available\"]';let a=this.getValue({ranges:n},\"latex-unstyled\");try{let s=globalThis.MathfieldElement.computeEngine.parse(a);return JSON.stringify(s.json)}catch(s){return JSON.stringify([\"Error\",`'${s.toString()}'`])}}if(o.startsWith(\"latex\")){let a={expandMacro:o===\"latex-expanded\",skipStyles:o===\"latex-unstyled\",skipPlaceholders:o===\"latex-without-placeholders\",defaultMode:this.mathfield.options.defaultMode};return P(n.map(s=>y.serialize(this.getAtoms(s),a)))}return n.map(a=>this.getAtoms(a).map(s=>this.atomToString(s,o)).join(\"\")).join(\"\")}extendSelectionTo(e,r){return!this.mathfield.contentEditable&&this.mathfield.userSelect===\"none\"?!1:this.deferNotifications({selection:!0},()=>{let i=this.normalizeRange([e,r]),[n,o]=i,a=new Set([\"genfrac\",\"subsup\",\"accent\",\"box\",\"overlap\",\"overunder\"]),{parent:s}=this.at(o);if(s!=null&&s.type&&a.has(s.type))for(;s!=null&&s.type&&a.has(s.type)&&Ns(this,s,[n,o]);)o=this.offsetOf(s),s=s.parent;for(s=this.at(n).parent;s!=null&&s.type&&a.has(s.type)&&Ns(this,s,[n,o]);)n=this.offsetOf(s.leftSibling),s=s.parent;if(s=this.at(o).parent,s!=null&&s.type&&a.has(s.type))for(;s!=null&&s.type&&a.has(s.type)&&Ns(this,s,[n,o]);)o=this.offsetOf(s),o>=0,s=s.parent;this._position=this.normalizeOffset(r),this._selection={ranges:[[n,o]],direction:\"none\"}})}announce(e,r,i=[]){var o,a;((a=(o=this.mathfield.host)==null?void 0:o.dispatchEvent(new CustomEvent(\"announce\",{detail:{command:e,previousPosition:r,atoms:i},cancelable:!0,bubbles:!0,composed:!0})))!=null?a:!0)&&Mh(this.mathfield,e,r,i)}deferNotifications(e,r){let i=this._selection,n=this._anchor,o=this._position,a=this.silenceNotifications;this.silenceNotifications=!0;let s=this.root.changeCounter;r(),this.silenceNotifications=a;let l=n!==this._anchor||o!==this._position||O0(this._selection,i)===\"different\";e.selection&&l&&this.selectionDidChange();let c=this.root.changeCounter!==s;return e.content&&c&&this.contentDidChange({inputType:e.type}),c||l}normalizeOffset(e){return e>0?e=Math.min(e,this.lastOffset):e<0&&(e=this.lastOffset+e+1),e}normalizeRange(e){let[r,i]=e;return r=this.normalizeOffset(r),i=this.normalizeOffset(i),r<i?[r,i]:[i,r]}normalizeSelection(e,r){var n;let i;if(Rt(e)){let o=this.normalizeOffset(e);if(Rt(r)){let a=this.normalizeOffset(r);i=o<=a?{ranges:[[o,a]],direction:\"none\"}:{ranges:[[a,o]],direction:\"backward\"}}else i={ranges:[[o,o]],direction:\"none\"}}else if(si(e)){let o=this.normalizeOffset(e[0]),a=this.normalizeOffset(e[1]);i=o<=a?{ranges:[[o,a]],direction:\"none\"}:{ranges:[[a,o]],direction:\"backward\"}}else Xi(e)&&(i={ranges:e.ranges.map(o=>this.normalizeRange(o)),direction:(n=e.direction)!=null?n:\"none\"});return i}get parentEnvironment(){let e=this.at(this.position).parent;if(e){for(;e.parent&&e.type!==\"array\";)e=e.parent;if(e.type===\"array\")return e}}get parentCell(){return this.getParentCell(this.position)}getParentCell(e){var i,n;let r=this.at(e);if(r){for(;r&&((i=r.parent)==null?void 0:i.type)!==\"array\";)r=r.parent;if(((n=r==null?void 0:r.parent)==null?void 0:n.type)===\"array\")return r.parentBranch}}contentWillChange(e={}){if(this.silenceNotifications||!this.mathfield)return!0;let r=this.silenceNotifications;this.silenceNotifications=!0;let i=this.mathfield.onContentWillChange(e);return this.silenceNotifications=r,i}contentDidChange(e){var i;if(window.mathVirtualKeyboard.visible&&window.mathVirtualKeyboard.update(Ut(this.mathfield)),this.silenceNotifications||!((i=this.mathfield)!=null&&i.host))return;let r=this.silenceNotifications;this.silenceNotifications=!0,setTimeout(()=>{var n;!this.mathfield||!it(this.mathfield)||!this.mathfield.host||this.mathfield.host.dispatchEvent(new InputEvent(\"input\",g(p({},e),{data:e.data?e.data:(n=e.inputType)!=null?n:\"\",bubbles:!0,composed:!0})))},0),this.silenceNotifications=r}selectionDidChange(){if(!this.mathfield)return;let e=this.silenceNotifications;e||(this.silenceNotifications=!0,this.mathfield.onSelectionDidChange()),this.silenceNotifications=e}};function wh(t,e,r,i,n){let o=t.offsetOf(e);if(o<r||o>i)return!1;if(!e.hasChildren)return!0;let a=n?e.firstChild:Sh(e);if(!a)return!1;let s=n?e.lastChild:kh(e);if(!s)return!1;let l=t.offsetOf(a);if(l>=r&&l<=i){let c=t.offsetOf(s);if(c>=r&&c<=i)return!0}return!1}function Ns(t,e,r){if(!(e!=null&&e.hasChildren))return!1;let[i,n]=r,o=Sh(e);if(!o)return!1;let a=kh(e);if(!a)return!1;let s=t.offsetOf(o),l=t.offsetOf(a);return s>=i&&s<=n&&l>=s&&l<=n}function oy(t,e){let[r,i]=e,n=i+1;if(n>t.lastOffset)return e;let o=t.at(n);return ay(t,o,r,i)&&(i=t.offsetOf(o)),[r,i]}function ay(t,e,r,i){if((e==null?void 0:e.type)!==\"subsup\"||!Ns(t,e,[r,i]))return!1;let n=e.leftSibling;if(!n)return!1;let o=t.offsetOf(n);return o>r&&o<=i}function Sh(t){for(let e of t.children)if(e.type!==\"first\")return e}function kh(t){let{children:e}=t;for(let r=e.length-1;r>=0;r--)if(e[r].type!==\"first\")return e[r]}fe({deleteAll:t=>t.contentWillChange({inputType:\"deleteContent\"})&&at(t,[0,-1],\"deleteContent\"),deleteForward:t=>Rp(t),deleteBackward:t=>Pp(t),deleteNextWord:t=>t.contentWillChange({inputType:\"deleteWordForward\"})&&Mt(t,\"forward\",{delete:!0}),deletePreviousWord:t=>t.contentWillChange({inputType:\"deleteWordBackward\"})&&Mt(t,\"backward\",{delete:!0}),deleteToGroupStart:t=>{if(!t.contentWillChange({inputType:\"deleteSoftLineBackward\"}))return!1;let e=t.offsetOf(t.at(t.position).firstSibling);return e===t.position?(t.announce(\"plonk\"),!1):(t.deferNotifications({content:!0,selection:!0,type:\"deleteSoftLineBackward\"},()=>t.deleteAtoms([t.anchor,e])),t.position=e,!0)},deleteToGroupEnd:t=>{if(!t.contentWillChange({inputType:\"deleteSoftLineForward\"}))return!1;let e=t.offsetOf(t.at(t.position).lastSibling);return e===t.position?(t.announce(\"plonk\"),!1):(t.deferNotifications({content:!0,selection:!0,type:\"deleteSoftLineForward\"},()=>t.deleteAtoms([t.anchor,e])),!0)},deleteToMathFieldStart:t=>t.contentWillChange({inputType:\"deleteHardLineBackward\"})&&at(t,[t.anchor,0],\"deleteHardLineBackward\"),deleteToMathFieldEnd:t=>t.contentWillChange({inputType:\"deleteHardLineForward\"})&&at(t,[t.anchor,-1],\"deleteHardLineForward\")},{target:\"model\",audioFeedback:\"delete\",canUndo:!0,changeContent:!0,changeSelection:!0});var sy=`<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"width: 21px;\"  viewBox=\"0 0 576 512\" role=\"img\" aria-label=\"${I(\"tooltip.toggle virtual keyboard\")}\"><path d=\"M528 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm16 336c0 8.823-7.177 16-16 16H48c-8.823 0-16-7.177-16-16V112c0-8.823 7.177-16 16-16h480c8.823 0 16 7.177 16 16v288zM168 268v-24c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12zm96 0v-24c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12zm96 0v-24c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12zm96 0v-24c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12zm-336 80v-24c0-6.627-5.373-12-12-12H84c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12zm384 0v-24c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12zM120 188v-24c0-6.627-5.373-12-12-12H84c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12zm96 0v-24c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12zm96 0v-24c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12zm96 0v-24c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12zm96 0v-24c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12zm-96 152v-8c0-6.627-5.373-12-12-12H180c-6.627 0-12 5.373-12 12v8c0 6.627 5.373 12 12 12h216c6.627 0 12-5.373 12-12z\"/></svg>`,ly=`<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"height: 18px;\" viewBox=\"0 0 448 512\" role=\"img\" aria-label=\"${I(\"tooltip.menu\")}\"><path d=\"M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z\"/></svg>`,$s=class t{constructor(e,r){this.focusBlurInProgress=!1;this.programmaticFocusInProgress=!1;this.connectedToVirtualKeyboard=!1;var d,h;this.options=p(g(p({},_n()),{macros:Bi(),registers:Na()}),vn(r)),this.eventController=new AbortController;let i=this.eventController.signal;r.eventSink&&(this.host=r.eventSink),this.element=e,e.mathfield=this,this.blurred=!0,this.keystrokeCaptionVisible=!1,this.suggestionIndex=0,this.inlineShortcutBuffer=[],this.inlineShortcutBufferFlushTimer=0,this.scientificNotationTimer=0,this.defaultStyle={},this.styleBias=\"left\",this.options.defaultMode===\"inline-math\"?this.element.classList.add(\"ML__is-inline\"):this.element.classList.remove(\"ML__is-inline\"),this.dirty=!1;let n=(h=(d=r.value)!=null?d:this.element.textContent)!=null?h:\"\";n=n.trim();let o=xc(this.options),a=ge(n,{context:this.context}),s;a.length===1&&a[0].isRoot?s=a[0]:s=new y({type:\"root\",mode:o,body:a}),this.model=new Fs(this,o,s),this.undoManager=new gs(this.model);let l=[];if(l.push(\"<span contenteditable=true role=textbox aria-autocomplete=none aria-multiline=false part=keyboard-sink class=ML__keyboard-sink autocapitalize=off autocomplete=off autocorrect=off spellcheck=false inputmode=none tabindex=0></span>\"),l.push('<span part=container class=ML__container  style=\"visibility:hidden\">'),l.push(\"<span part=content class=ML__content>\"),l.push(mc(this)),l.push(\"</span>\"),l.push(\"<div class=ML__toggles>\"),window.mathVirtualKeyboard&&(l.push(`<div part=virtual-keyboard-toggle class=ML__virtual-keyboard-toggle role=button ${this.hasEditableContent?\"\":'style=\"display:none;\"'} data-l10n-tooltip=\"tooltip.toggle virtual keyboard\">`),l.push(sy),l.push(\"</div>\")),l.push('<div part=menu-toggle class=ML__menu-toggle role=button data-l10n-tooltip=\"tooltip.menu\">'),l.push(ly),l.push(\"</div>\"),l.push(\"</div>\"),l.push(\"</span>\"),l.push(\"<span class=ML__sr-only>\"),l.push(\"<span role=status aria-live=assertive aria-atomic=true></span>\"),l.push(\"</span>\"),this.element.innerHTML=globalThis.MathfieldElement.createHTML(l.join(\"\")),!this.element.children){console.error(\"%cMathLive 0.108.2: Something went wrong and the mathfield could not be created.%c\\nIf you are using Vue, this may be because you are using the runtime-only build of Vue. Make sure to include `runtimeCompiler: true` in your Vue configuration. There may a warning from Vue in the log above.\",\"color:red;font-family:system-ui;font-size:1.2rem;font-weight:bold\",\"color:inherit;font-family:system-ui;font-size:inherit;font-weight:inherit\");return}this._l10Subscription=F.subscribe(()=>F.update(this.element)),F.update(this.element),this.container=this.element.querySelector(\"[part=container]\"),this.field=this.container.querySelector(\"[part=content]\"),this.field.addEventListener(\"click\",f=>f.stopImmediatePropagation(),{capture:!1,signal:i}),this.field.addEventListener(\"wheel\",this,{passive:!1,signal:i});let c=this.element;if(\"PointerEvent\"in window?c.addEventListener(\"pointerdown\",this,{signal:i}):c.addEventListener(\"mousedown\",this,{signal:i}),this.host){let f=x=>{x.target===this.host&&this.handleEvent(x)};\"PointerEvent\"in window?this.host.addEventListener(\"pointerdown\",f,{signal:i}):this.host.addEventListener(\"mousedown\",f,{signal:i})}let u=this.element.querySelector(\"[part=virtual-keyboard-toggle]\");u==null||u.addEventListener(\"pointerdown\",f=>{f.currentTarget===u&&(window.mathVirtualKeyboard.visible?window.mathVirtualKeyboard.hide():(window.mathVirtualKeyboard.show({animate:!0}),window.mathVirtualKeyboard.update(Ut(this))),f.preventDefault(),f.stopPropagation())},{signal:i}),this.field.addEventListener(\"contextmenu\",this,{signal:i});let m=this.element.querySelector(\"[part=menu-toggle]\");m==null||m.addEventListener(\"pointerdown\",f=>{if(f.currentTarget!==m)return;let x=this.menu;if(x.state!==\"closed\")return;this.element.classList.add(\"tracking\");let v=m.getBoundingClientRect();x.modifiers=qt(f),x.show({target:m,location:{x:v.left,y:v.bottom},onDismiss:()=>this.element.classList.remove(\"tracking\")}),f.preventDefault(),f.stopPropagation()},{signal:i}),(this.disabled||this.readOnly&&!this.hasEditableContent||this.userSelect===\"none\")&&(m.style.display=\"none\"),this.ariaLiveText=this.element.querySelector(\"[role=status]\"),this.keyboardDelegate=fp(this.element.querySelector(\".ML__keyboard-sink\"),this.element,this),window.addEventListener(\"resize\",this,{signal:i}),document.addEventListener(\"scroll\",this,{signal:i}),this.resizeObserver=new ResizeObserver(f=>{if(this.resizeObserverStarted){this.resizeObserverStarted=!1;return}this.updateToggleLayout(),J(this)}),this.resizeObserverStarted=!0,this.resizeObserver.observe(this.field),this.resizeObserver.observe(this.container),setTimeout(()=>this.updateToggleLayout(),100),window.mathVirtualKeyboard.addEventListener(\"virtual-keyboard-toggle\",this,{signal:i}),Xt&&!F.locale.startsWith(Xt.locale)&&zo(F.locale),Ie!==\"ready\"&&document.fonts.ready.then(()=>so(this)),e.querySelector(\"[part=container]\").style.removeProperty(\"visibility\"),this.undoManager.startRecording(),this.undoManager.snapshot(\"set-value\"),J(this)}connectToVirtualKeyboard(){this.connectedToVirtualKeyboard||(this.connectedToVirtualKeyboard=!0,window.addEventListener(\"message\",this,{signal:this.eventController.signal}),window.mathVirtualKeyboard.connect(),window.mathVirtualKeyboard.visible&&window.mathVirtualKeyboard.update(Ut(this)),wo(this))}disconnectFromVirtualKeyboard(){this.connectedToVirtualKeyboard&&(window.removeEventListener(\"message\",this),window.mathVirtualKeyboard.disconnect(),this.connectedToVirtualKeyboard=!1,As())}showMenu(e){var o,a;let r=(a=(o=e==null?void 0:e.location)!=null?o:Yi(this.field))!=null?a:void 0,i=e==null?void 0:e.modifiers,n=this.element.querySelector(\"[part=container]\");return this._menu.show({target:n,location:r,modifiers:i})}get colorMap(){return e=>{var r,i,n;return(n=(i=(r=this.options).colorMap)==null?void 0:i.call(r,e))!=null?n:Xr(e)}}get backgroundColorMap(){return e=>{var r,i,n,o,a,s;return(s=(a=(i=(r=this.options).backgroundColorMap)==null?void 0:i.call(r,e))!=null?a:(o=(n=this.options).colorMap)==null?void 0:o.call(n,e))!=null?s:Ei(e)}}get smartFence(){var e;return(e=this.options.smartFence)!=null?e:!1}get readOnly(){var e;return(e=this.options.readOnly)!=null?e:!1}get disabled(){var e,r;return(r=(e=this.host)==null?void 0:e.disabled)!=null?r:!1}get contentEditable(){return this.host?this.host.getAttribute(\"contenteditable\")!==\"false\":!1}get userSelect(){if(!this.host)return\"\";let e=getComputedStyle(this.host);return e.getPropertyValue(\"user-select\")||e.getPropertyValue(\"-webkit-user-select\")}get hasEditableContent(){return this.disabled||!this.contentEditable?!1:!this.readOnly||this.hasEditablePrompts}get hasEditablePrompts(){return this.readOnly&&!this.disabled&&this.contentEditable&&this.model.findAtom(e=>e.type===\"prompt\"&&!e.locked)!==void 0}get isSelectionEditable(){if(this.disabled||!this.contentEditable)return!1;if(!this.readOnly)return!0;let e=this.model.at(this.model.anchor),r=this.model.at(this.model.position),i=y.commonAncestor(e,r);return!!((i==null?void 0:i.type)===\"prompt\"||i!=null&&i.parentPrompt)}get letterShapeStyle(){var e;return(e=this.options.letterShapeStyle)!=null?e:\"tex\"}get minFontScale(){return this.options.minFontScale}get maxMatrixCols(){return this.options.maxMatrixCols}queryStyle(e){let r=ns(this,e);\"verbatimColor\"in r&&delete r.verbatimColor,\"verbatimBackgroundColor\"in r&&delete r.verbatimBackgroundColor;let i=Object.keys(r).length;if(i===0)return\"all\";if(i>1){for(let c of Object.keys(r)){let u=this.queryStyle({[c]:r[c]});if(u===\"none\")return\"none\";if(u===\"some\")return\"some\"}return\"all\"}let n=Object.keys(r)[0],o=r[n];if(this.model.selectionIsCollapsed)return Ht(this)[n]===o?\"all\":\"none\";let a=this.model.getAtoms(this.model.selection,{includeChildren:!0}),s=a.length;if(s===0)return\"none\";let l=0;for(let c of a){if(c.type===\"first\"){s-=1;continue}c.style[n]===o&&(l+=1)}return l===0?\"none\":l===s?\"all\":\"some\"}get keybindings(){var i,n;if(this._keybindings)return this._keybindings;let[e,r]=xp(this.options.keybindings,(i=gr())!=null?i:_u());return((n=gr())==null?void 0:n.score)>0&&(this._keybindings=e,r.length>0&&console.error(\"MathLive 0.108.2: Invalid keybindings for current keyboard layout\",r)),e}get menu(){var e;return(e=this._menu)!=null||(this._menu=new ko(xh(this),{host:this.host})),this._menu}set menuItems(e){this._menu?this._menu.menuItems=e:this._menu=new ko(e,{host:this.host})}setOptions(e){var n;this.options=p(p({},this.options),vn(e)),this._keybindings=void 0,this.options.defaultMode===\"inline-math\"?this.element.classList.add(\"ML__is-inline\"):this.element.classList.remove(\"ML__is-inline\");let r=this.options.defaultMode;r===\"inline-math\"&&(r=\"math\"),((n=this.model.root.firstChild)==null?void 0:n.mode)!==r&&(this.model.root.firstChild.mode=r),this.options.readOnly&&this.hasFocus()&&window.mathVirtualKeyboard.visible&&this.executeCommand(\"hideVirtualKeyboard\");let i=y.serialize([this.model.root],{expandMacro:!1,defaultMode:this.options.defaultMode});(\"macros\"in e||this.model.getValue()!==i)&&pc(this),(\"value\"in e||\"registers\"in e||\"colorMap\"in e||\"backgroundColorMap\"in e||\"letterShapeStyle\"in e||\"minFontScale\"in e||\"maxMatrixCols\"in e||\"readOnly\"in e||\"contentPlaceholder\"in e||\"placeholderSymbol\"in e)&&J(this)}getOptions(e){return pr(this.options,e)}getOption(e){return pr(this.options,e)}async handleEvent(e){var r,i,n;if(it(this)){if(uo(e)){if(!Qi(e.origin,(r=this.options.originValidator)!=null?r:\"none\"))throw new DOMException(`Message from unknown origin (${e.origin}) cannot be handled`,\"SecurityError\");let{action:o}=e.data;if(o===\"execute-command\"){let a=yi(e.data.command);if(!a||mr(a)===\"virtual-keyboard\")return;this.executeCommand(a)}else o===\"update-state\"||(o===\"focus\"?this.focus({preventScroll:!0}):o===\"blur\"&&this.blur());return}switch(e.type){case\"focus\":this.programmaticFocusInProgress||this.onFocus({suppressEvents:!0});break;case\"blur\":this.onBlur({dispatchEvents:!1});break;case\"mousedown\":this.userSelect!==\"none\"&&!((i=e.target)!=null&&i.closest(\"[part=virtual-keyboard-toggle],[part=menu-toggle]\"))&&Tc(this,e);break;case\"pointerdown\":!e.defaultPrevented&&this.userSelect!==\"none\"&&!((n=e.target)!=null&&n.closest(\"[part=virtual-keyboard-toggle],[part=menu-toggle]\"))&&(Tc(this,e),e.shiftKey===!1&&await Ic(e,this.container,this.menu)&&Mi.stop());break;case\"contextmenu\":this.userSelect!==\"none\"&&e.shiftKey===!1&&await Ic(e,this.container,this.menu)&&Mi.stop();break;case\"virtual-keyboard-toggle\":this.hasFocus()&&wo(this),this.hasFocus()&&this.options.mathVirtualKeyboardPolicy!==\"manual\"&&(this.keyboardDelegate.blur(),this.keyboardDelegate.focus());break;case\"resize\":this.geometryChangeTimer&&cancelAnimationFrame(this.geometryChangeTimer),this.geometryChangeTimer=requestAnimationFrame(()=>it(this)&&this.onGeometryChange());break;case\"scroll\":this.geometryChangeTimer&&cancelAnimationFrame(this.geometryChangeTimer),this.geometryChangeTimer=requestAnimationFrame(()=>it(this)&&this.onGeometryChange());break;case\"wheel\":this.onWheel(e);break;case\"message\":break;default:console.warn(\"Unexpected event type\",e.type)}}}updateToggleLayout(){if(!this.element||!this.host)return;let e=this.element.querySelector(\".ML__toggles\");if(!e)return;let r=this.host.offsetHeight,i=e.classList.contains(\"ML__toggles--vertical\");r>=100&&!i?e.classList.add(\"ML__toggles--vertical\"):r<100&&i&&e.classList.remove(\"ML__toggles--vertical\")}dispose(){if(!it(this))return;F.unsubscribe(this._l10Subscription),this.keyboardDelegate.dispose(),this.keyboardDelegate=void 0,this.eventController.abort(),this.eventController=void 0,this.resizeObserver.disconnect(),window.mathVirtualKeyboard.removeEventListener(\"virtual-keyboard-toggle\",this),this.disconnectFromVirtualKeyboard(),this.model.dispose();let e=this.element;delete e.mathfield,this.element=void 0,this.host=void 0,this.field=void 0,this.ariaLiveText=void 0,Wp(),Mp(),eh()}flushInlineShortcutBuffer(e){if(e!=null||(e={defer:!1}),!e.defer){this.inlineShortcutBuffer.length=0,clearTimeout(this.inlineShortcutBufferFlushTimer),this.inlineShortcutBufferFlushTimer=0;return}this.options.inlineShortcutTimeout>0&&(clearTimeout(this.inlineShortcutBufferFlushTimer),this.inlineShortcutBufferFlushTimer=setTimeout(()=>this.flushInlineShortcutBuffer(),this.options.inlineShortcutTimeout))}executeCommand(e){return mr(e)===\"virtual-keyboard\"?(this.focus({preventScroll:!0}),window.mathVirtualKeyboard.executeCommand(e),requestAnimationFrame(()=>window.mathVirtualKeyboard.update(Ut(this))),!1):Ap(this,e)}get errors(){return Xa(this.model.getValue(),{context:this.context})}getValue(e,r,i){return this.model.getValue(e,r,i)}setValue(e,r){var n;r=r!=null?r:{mode:\"math\"},r.insertionMode===void 0&&(r.insertionMode=\"replaceAll\"),(r.format===void 0||r.format===\"auto\")&&(r.format=\"latex\"),(r.mode===void 0||r.mode===\"auto\")&&(r.mode=(n=B0(this.model,this.model.position))!=null?n:\"math\");let i=this.undoManager.canUndo();q.insert(this.model,e,r)&&(J(this),i||this.undoManager.reset(),this.undoManager.snapshot(\"set-value\"))}get expression(){let e=globalThis.MathfieldElement.computeEngine;return e?e.box(e.parse(this.model.getValue(\"latex-unstyled\"))):(console.error(\"MathLive 0.108.2:  no compute engine available. Make sure the Compute Engine library is loaded.\"),null)}scrollIntoView(){var i;if(!this.element)return;if(this.host){if(this.options.onScrollIntoView)this.options.onScrollIntoView(this);else if(this.host.scrollIntoView({block:\"nearest\",inline:\"nearest\"}),window.mathVirtualKeyboard.visible&&window.mathVirtualKeyboard.container===window.document.body){let n=window.mathVirtualKeyboard.boundingRect,o=this.host.getBoundingClientRect();o.bottom>n.top&&((i=window.document.scrollingElement)==null||i.scrollBy(0,o.bottom-n.top+8))}}this.dirty&&xt(this,{interactive:!0});let e=this.field.getBoundingClientRect(),r=null;if(this.model.selectionIsCollapsed)r=Yi(this.field);else{let n=Va(this);if(n.length>0){let o=-1/0,a=1/0,s=-1/0;for(let c of n)c.right>o&&(o=c.right),c.top<a&&(a=c.top),c.bottom>s&&(s=c.bottom);let l=s-a;r={x:o+e.left-this.field.scrollLeft,y:a+e.top-this.field.scrollTop,height:l}}}if(this.host&&r){let n=this.host.getBoundingClientRect(),o=20,a=r.y,s=r.y+r.height,l=this.host.scrollTop;a<n.top+o?l=a-n.top+this.host.scrollTop-o:s>n.bottom-o&&(l=s-n.bottom+this.host.scrollTop+o),l!==this.host.scrollTop&&this.host.scroll({top:l,behavior:\"auto\"})}if(r){let n=r.x-window.scrollX,o=this.field.scrollLeft;n<e.left?o=n-e.left+this.field.scrollLeft-20:n>e.right&&(o=n-e.right+this.field.scrollLeft+20),this.field.scroll({top:this.field.scrollTop,left:o})}}insert(e,r){if(typeof e!=\"string\"||e.length===0&&((r==null?void 0:r.insertionMode)===\"insertBefore\"||(r==null?void 0:r.insertionMode)===\"insertAfter\")||e.length===0&&this.model.selectionIsCollapsed)return!1;if(this.flushInlineShortcutBuffer(),r=r!=null?r:{mode:\"math\"},r.focus&&this.focus(),r.feedback&&(globalThis.MathfieldElement.keypressVibration&&Ro()&&navigator.vibrate(fc),globalThis.MathfieldElement.playSound(\"keypress\")),e===\"\\\\\\\\\")vc(this.model);else if(e===\"&\")_c(this.model);else if(this.model.selectionIsCollapsed){let i=p({},Ht(this));!/^[a-zA-Z0-9]$/.test(e)&&this.styleBias!==\"none\"&&(i.variant=\"normal\",i.variantStyle=void 0),q.insert(this.model,e,p({style:i},r))}else q.insert(this.model,e,r);return this.snapshot(`insert-${this.model.at(this.model.position).type}`),J(this),r.scrollIntoView&&this.scrollIntoView(),!0}switchMode(e,r=\"\",i=\"\"){if(this.model.mode===e||!this.hasEditableContent||!this.contentEditable||this.disabled)return;let{model:n}=this,o=n.mode;if(n.mode=e,this.host&&!this.host.dispatchEvent(new Event(\"mode-change\",{bubbles:!0,composed:!0,cancelable:!0}))){n.mode=o;return}n.mode=o,n.deferNotifications({content:!!i||!!r,selection:!0,type:\"insertText\"},()=>{let a=n.at(n.position),s=(m,d)=>{if(!m)return;let h=n.mode===\"math\"?ge(ir(m,{format:\"ascii-math\"})[1],{context:this.context}):[...m].map(f=>new qe(f,f,{}));if(d.select){let f=a.parent.addChildrenAfter(h,a);n.setSelection(n.offsetOf(h[0].leftSibling),n.offsetOf(f))}else n.position=n.offsetOf(a.parent.addChildrenAfter(h,a));u=!0},l=(m,d)=>{let h=new Nt(m);a.parent.addChildAfter(h,a),d.select?n.setSelection(n.offsetOf(h.firstChild),n.offsetOf(h.lastChild)):n.position=n.offsetOf(h.lastChild),u=!0},c=()=>{let m=e===\"latex\"?\"latex\":e===\"math\"?\"plain-text\":\"ascii-math\",d=de(n.selection),h=this.model.getValue(d,m),f=this.model.extractAtoms(d);return f.length===1&&f[0].type===\"placeholder\"&&(h=i),a=n.at(d[0]),h},u=!1;if(this.flushInlineShortcutBuffer(),this.stopCoalescingUndo(),Xe(this,\"accept\"),n.selectionIsCollapsed)s(r,{select:!1}),n.mode=e,e===\"latex\"?l(i,{select:!1}):s(i,{select:!1});else{let m=c();n.mode=e,e===\"latex\"?l(m,{select:!0}):s(m,{select:!0})}return J(this),this.undoManager.snapshot(e===\"latex\"?\"insert-latex\":\"insert\"),u}),n.mode=e,window.mathVirtualKeyboard.update(Ut(this))}hasFocus(){return!this.blurred}focus(e){var r;this.disabled||this.focusBlurInProgress||(this.hasFocus()||(this.programmaticFocusInProgress=!0,this.onFocus(),this.model.announce(\"line\")),(r=e==null?void 0:e.preventScroll)!=null&&r||this.scrollIntoView())}blur(){this.disconnectFromVirtualKeyboard(),this.hasFocus()&&this.keyboardDelegate.blur()}select(){this.model.selection={ranges:[[0,this.model.lastOffset]]},this.focus()}applyStyle(e,r={}){var s;let i,n=\"set\",o=!1;si(r)?i=r:(r.operation===\"toggle\"&&(n=\"toggle\"),i=r.range,o=(s=r.silenceNotifications)!=null?s:!1),i&&(i=this.model.normalizeRange(i)),i&&i[0]===i[1]&&(i=void 0);let a=ns(this,e);if(i===void 0&&this.model.selectionIsCollapsed){if(n===\"set\"){let u=p({},this.defaultStyle);\"color\"in a&&delete u.verbatimColor,\"backgroundColor\"in a&&delete u.verbatimBackgroundColor,this.defaultStyle=p(p({},u),a),this.styleBias=\"none\";return}let l=Ht(this),c=p({},this.defaultStyle);for(let u of Object.keys(a))l[u]===a[u]?(u===\"color\"&&delete c.verbatimColor,u===\"backgroundColor\"&&delete c.verbatimBackgroundColor,delete c[u]):c[u]=a[u];this.defaultStyle=c,this.styleBias=\"none\";return}this.model.deferNotifications({content:!o,type:\"insertText\"},()=>{if(i===void 0)for(let l of this.model.selection.ranges)io(this.model,l,a,{operation:n});else io(this.model,i,a,{operation:n})}),J(this)}toggleContextMenu(){var n;let e=this.menu;if(!e.visible)return!1;if(e.state===\"open\")return e.hide(),!0;let r=(n=qa(this,this.model.position))==null?void 0:n.bounds;if(!r)return!1;let i={x:r.right,y:r.bottom};return e.show({target:this.element.querySelector(\"[part=container]\"),location:i,onDismiss:()=>{var o;return(o=this.element)==null?void 0:o.focus()}}),!0}getPrompt(e){let r=this.model.findAtom(i=>i.type===\"prompt\"&&i.placeholderId===e);return r}getPromptValue(e,r){let i=this.getPrompt(e);if(!i)return\"\";let n=this.model.offsetOf(i.firstChild),o=this.model.offsetOf(i.lastChild);return this.model.getValue(n,o,r)}getPrompts(e){return this.model.atoms.filter(r=>r.type!==\"prompt\"?!1:e?!(e.id&&r.placeholderId!==e.id||e.locked&&r.locked!==e.locked||e.correctness===\"undefined\"&&r.correctness||e.correctness&&r.correctness!==e.correctness):!0).map(r=>r.placeholderId)}setPromptValue(e,r,i){if(r!==void 0){let n=this.getPrompt(e);if(!n){console.error(`MathLive 0.108.2: unknown prompt ${e}`);return}let o=this.model.getBranchRange(this.model.offsetOf(n),\"body\");this.model.setSelection(o),this.insert(r,g(p({},i),{insertionMode:\"replaceSelection\"}))}i!=null&&i.silenceNotifications&&(this.valueOnFocus=this.getValue()),J(this)}setPromptState(e,r,i){let n=this.getPrompt(e);if(!n){console.error(`MathLive 0.108.2: unknown prompt ${e}`);return}r===\"undefined\"?n.correctness=void 0:typeof r==\"string\"&&(n.correctness=r),typeof i==\"boolean\"&&(n.locked=i,n.captureSelection=i),J(this)}getPromptState(e){let r=this.getPrompt(e);return r?[r.correctness,r.locked]:(console.error(`MathLive 0.108.2: unknown prompt ${e}`),[void 0,!0])}getPromptRange(e){let r=this.getPrompt(e);return r?this.model.getBranchRange(this.model.offsetOf(r),\"body\"):(console.error(`MathLive 0.108.2: unknown prompt ${e}`),[0,0])}canUndo(){return this.undoManager.canUndo()}canRedo(){return this.undoManager.canRedo()}popUndoStack(){this.undoManager.pop(),window.mathVirtualKeyboard.visible&&window.mathVirtualKeyboard.update(Ut(this))}snapshot(e){var r;this.undoManager.snapshot(e)&&(window.mathVirtualKeyboard.visible&&window.mathVirtualKeyboard.update(Ut(this)),(r=this.host)==null||r.dispatchEvent(new CustomEvent(\"undo-state-change\",{bubbles:!0,composed:!0,detail:{type:\"snapshot\"}})))}stopCoalescingUndo(){this.undoManager.stopCoalescing(this.model.selection)}stopRecording(){this.undoManager.stopRecording()}startRecording(){this.undoManager.startRecording()}undo(){var e;this.undoManager.undo()&&((e=this.host)==null||e.dispatchEvent(new CustomEvent(\"undo-state-change\",{bubbles:!0,composed:!0,detail:{type:\"undo\"}})))}redo(){var e;this.undoManager.redo()&&((e=this.host)==null||e.dispatchEvent(new CustomEvent(\"undo-state-change\",{bubbles:!0,composed:!0,detail:{type:\"redo\"}})))}resetUndo(){var e;(e=this.undoManager)==null||e.reset()}onSelectionDidChange(){var r,i;let e=this.model;if(e.mathfield.hasFocus()&&this.keyboardDelegate.setValue(e.getValue(e.selection,\"latex-expanded\")),e.selectionIsCollapsed){let n=oo(e),o=e.position,a=e.at(o),s=(r=a.mode)!=null?r:xc(this.options);if(n&&(o<e.offsetOf(n.firstChild)-1||o>e.offsetOf(n.lastChild)+1))Xe(this,\"accept\",{mode:s}),e.position=e.offsetOf(a);else{let l=e.at(o+1);(l==null?void 0:l.type)===\"first\"&&l.mode===\"latex\"?e.position=o+1:n&&(l==null?void 0:l.mode)!==\"latex\"?e.position=o-1:this.switchMode(s)}}(i=this.host)==null||i.dispatchEvent(new Event(\"selection-change\",{bubbles:!0,composed:!0})),window.mathVirtualKeyboard.visible&&window.mathVirtualKeyboard.update(Ut(this)),wo(this)}onContentWillChange(e){var r,i,n;return(n=(i=this.host)==null?void 0:i.dispatchEvent(new InputEvent(\"beforeinput\",g(p({},e),{data:e.data?e.data:(r=e.inputType)!=null?r:\"\",cancelable:!0,bubbles:!0,composed:!0}))))!=null?n:!0}onFocus(e){if(this.disabled||this.focusBlurInProgress||!this.blurred)return;let r=t._globallyFocusedMathfield;r&&r!==this&&!r.disabled&&r.hasFocus()&&r.onBlur({dispatchEvents:!0}),this.focusBlurInProgress=!0,this.blurred=!1,t._globallyFocusedMathfield=this,this.stopCoalescingUndo(),this.valueOnFocus=this.model.getValue(),this.hasEditablePrompts&&!this.model.at(this.model.anchor).parentPrompt&&this.executeCommand(\"moveToNextPlaceholder\"),xt(this,{interactive:!0}),setTimeout(()=>{var n,o;if(!it(this))return;if((n=e==null?void 0:e.suppressEvents)!=null?n:!1){let a=new AbortController,s=a.signal,l=c=>{c.preventDefault(),c.stopPropagation()};for(let c of[\"focus\",\"focusin\"])(o=this.host)==null||o.addEventListener(c,l,{capture:!0,signal:s});this.focusBlurInProgress=!1,this.keyboardDelegate.focus(),this.connectToVirtualKeyboard(),setTimeout(()=>a.abort(),0)}else this.focusBlurInProgress=!1,this.keyboardDelegate.focus(),this.connectToVirtualKeyboard(),setTimeout(()=>{this.programmaticFocusInProgress=!1},0)},60)}onBlur(e){var i,n,o,a;if(this.focusBlurInProgress||this.blurred)return;if(this.focusBlurInProgress=!0,this.stopCoalescingUndo(),this.blurred=!0,t._globallyFocusedMathfield===this&&(t._globallyFocusedMathfield=void 0),this.ariaLiveText.textContent=\"\",Nr(this),this.model.getValue()!==this.valueOnFocus&&((i=this.host)==null||i.dispatchEvent(new Event(\"change\",{bubbles:!0,composed:!0}))),this.disconnectFromVirtualKeyboard(),((n=e==null?void 0:e.dispatchEvents)!=null?n:!0)&&((o=this.host)==null||o.dispatchEvent(new Event(\"blur\",{bubbles:!1,composed:!0})),(a=this.host)==null||a.dispatchEvent(new UIEvent(\"focusout\",{bubbles:!0,composed:!0}))),J(this),this.focusBlurInProgress=!1,As(),gn.restoreFocusWhenDocumentFocused){let s=new AbortController,l=s.signal;window.addEventListener(\"blur\",()=>{window.addEventListener(\"focus\",()=>{it(this)&&this.focus({preventScroll:!0})},{once:!0,signal:l})},{once:!0,signal:l}),document.addEventListener(\"focusin\",()=>s.abort(),{once:!0}),document.addEventListener(\"click\",()=>s.abort(),{once:!0})}}onInput(e){xo(this,e)}onKeystroke(e){return Ac(this,e)}onCompositionStart(e){at(this.model,de(this.model.selection),\"insertText\");let r=Yi(this.field);r&&requestAnimationFrame(()=>{xt(this),this.keyboardDelegate.moveTo(r.x,r.y-r.height)})}onCompositionUpdate(e){Op(this.model,e),J(this)}onCompositionEnd(e){Bp(this.model),xo(this,e,{simulateKeystroke:!0})}onCut(e){if(!this.isSelectionEditable){this.model.announce(\"plonk\");return}this.model.contentWillChange({inputType:\"deleteByCut\"})&&(this.stopCoalescingUndo(),e.clipboardData?q.onCopy(this,e):q.copyToClipboard(this,\"latex\"),at(this.model,de(this.model.selection),\"deleteByCut\"),this.snapshot(\"cut\"),J(this))}onCopy(e){e.clipboardData?q.onCopy(this,e):q.copyToClipboard(this,\"latex\")}onPaste(e){let r=this.isSelectionEditable;return r&&(r=q.onPaste(this.model.at(this.model.position).mode,this,e.clipboardData)),r||this.model.announce(\"plonk\"),e.preventDefault(),e.stopPropagation(),r}onGeometryChange(){var e;(e=this._menu)==null||e.hide(),fn(this),wo(this)}onWheel(e){let r=5*e.deltaX;if(!Number.isFinite(r)||r===0)return;let i=this.field;r<0&&i.scrollLeft===0||r>0&&i.offsetWidth+i.scrollLeft>=i.scrollWidth||(i.scrollBy({top:0,left:r}),e.preventDefault(),e.stopPropagation())}getHTMLElement(e){let r=e;for(;!r.id&&r.hasChildren;)r=e.children[0];return this.field.querySelector(`[data-atom-id=\"${r.id}\"]`)}get context(){var e,r;return{registers:(e=this.options.registers)!=null?e:{},smartFence:this.smartFence,letterShapeStyle:this.letterShapeStyle,minFontScale:this.minFontScale,maxMatrixCols:this.maxMatrixCols,placeholderSymbol:(r=this.options.placeholderSymbol)!=null?r:\"\\u25A2\",colorMap:i=>this.colorMap(i),backgroundColorMap:i=>this.backgroundColorMap(i),getMacro:i=>Ki(i,this.options.macros),atomIdsSettings:{seed:\"random\",groupNumbers:!1}}}};fe({speak:(t,e,r)=>cy(t,e,r)},{target:\"mathfield\"});function cy(t,e,r){var c;r=r!=null?r:{withHighlighting:!1};let{model:i}=t;function n(u){let m=null;switch(u){case\"all\":m=i.root;break;case\"selection\":m=i.getAtoms(i.selection);break;case\"left\":{m=i.getAtoms(i.offsetOf(i.at(i.position).leftSibling),i.position);break}case\"right\":{m=i.getAtoms(i.position,i.offsetOf(i.at(i.position).rightSibling));break}case\"group\":m=i.getAtoms(i.getSiblingsRange(i.position));break;case\"parent\":{let{parent:d}=i.at(i.position);d!=null&&d.parent?m=d:m=i.root;break}default:m=i.root}return m}function o(u){let m=\"\";switch(u){case\"all\":console.error(\"Internal failure: speak all failed\");break;case\"selection\":m=\"no selection\";break;case\"left\":m=\"at start\";break;case\"right\":m=\"at end\";break;case\"group\":console.error(\"Internal failure: speak group failed\");break;case\"parent\":m=\"no parent\";break;default:console.error('unknown speak_ param value: \"'+u+'\"');break}return m}let a=globalThis.MathfieldElement,s=n(e);if(s===null)return(c=a.speakHook)==null||c.call(a,o(e)),!1;(r.withHighlighting||a.speechEngine===\"amazon\")&&(a.textToSpeechMarkup=globalThis.sre&&a.textToSpeechRules===\"sre\"?\"ssml_step\":\"ssml\");let l=kt(s);return ke()&&r.withHighlighting?(Gt().readAloudMathfield=t,xt(t,{forHighlighting:!0}),a.readAloudHook&&a.readAloudHook(t.field,l)):a.speakHook&&a.speakHook(l),!1}function Lh(t){var r,i;if(!ke())return;let e=globalThis.MathfieldElement;if(!e.speechEngine||e.speechEngine===\"local\"){let n=new SpeechSynthesisUtterance(t);globalThis.speechSynthesis.speak(n)}else if(e.speechEngine===\"amazon\")if(!(\"AWS\"in window))console.error(\"MathLive 0.108.2: AWS SDK not loaded. See https://www.npmjs.com/package/aws-sdk\");else{let n=new globalThis.AWS.Polly({apiVersion:\"2016-06-10\"}),o={OutputFormat:\"mp3\",VoiceId:(r=e.speechEngineVoice)!=null?r:\"Joanna\",Engine:[\"Amy\",\"Emma\",\"Brian\",\"Ivy\",\"Joanna\",\"Kendra\",\"Kimberly\",\"Salli\",\"Joey\",\"Justin\",\"Matthew\"].includes((i=e.speechEngineVoice)!=null?i:\"Joanna\")?\"neural\":\"standard\",Text:t,TextType:\"ssml\"};n.synthesizeSpeech(o,(a,s)=>{if(a)console.trace(`MathLive 0.108.2: \\`polly.synthesizeSpeech()\\` error: ${a}`);else if(s!=null&&s.AudioStream){let l=new Uint8Array(s.AudioStream),c=new Blob([l.buffer],{type:\"audio/mpeg\"}),u=URL.createObjectURL(c);new Audio(u).play().catch(d=>console.error(d))}})}else e.speechEngine===\"google\"&&console.error(\"MathLive 0.108.2: The Google speech engine is not supported yet. Please come again.\")}function Ah(t){if(t&&(t.classList.remove(\"ML__highlight\"),t.children))for(let e of t.children)Ah(e)}function Zc(t,e){var r;t&&(!e||((r=t.dataset)==null?void 0:r.atomId)===e?(t.classList.add(\"ML__highlight\"),t.children&&t.children.length>0&&[...t.children].forEach(i=>{i instanceof HTMLElement&&Zc(i)})):(t.classList.remove(\"ML__highlight\"),t.children&&t.children.length>0&&[...t.children].forEach(i=>{i instanceof HTMLElement&&Zc(i,e)})))}function Ch(t,e){var n;if(!ke())return;if(globalThis.MathfieldElement.speechEngine!==\"amazon\"){console.error(\"MathLive 0.108.2: Use Amazon TTS Engine for synchronized highlighting\"),typeof globalThis.MathfieldElement.speakHook==\"function\"&&globalThis.MathfieldElement.speakHook(e);return}if(!globalThis.AWS){console.error(\"MathLive 0.108.2: AWS SDK not loaded. See https://www.npmjs.com/package/aws-sdk\");return}let r=new globalThis.AWS.Polly({apiVersion:\"2016-06-10\"}),i={OutputFormat:\"json\",VoiceId:(n=globalThis.MathfieldElement.speechEngineVoice)!=null?n:\"Joanna\",Engine:\"standard\",Text:e,TextType:\"ssml\",SpeechMarkTypes:[\"ssml\"]};Gt().readAloudElement=t,r.synthesizeSpeech(i,(o,a)=>{if(o){console.trace(`MathLive 0.108.2: \\`polly.synthesizeSpeech()\\` error: ${o}`);return}if(!(a!=null&&a.AudioStream))return;let s=new TextDecoder(\"utf-8\").decode(new Uint8Array(a.AudioStream));Gt().readAloudMarks=s.split(`\n`).map(l=>l?JSON.parse(l):{}),Gt().readAloudTokens=[];for(let l of Gt().readAloudMarks)l.value&&Gt().readAloudTokens.push(l.value);Gt().readAloudCurrentMark=\"\",i.OutputFormat=\"mp3\",i.SpeechMarkTypes=[],r.synthesizeSpeech(i,(l,c)=>{if(l){console.trace(`MathLive 0.108.2: \\`polly.synthesizeSpeech(\"${e}\") error:${l}`);return}if(!(c!=null&&c.AudioStream))return;let u=new Uint8Array(c.AudioStream),m=new Blob([u.buffer],{type:\"audio/mpeg\"}),d=URL.createObjectURL(m),h=Gt();h.readAloudAudio?h.readAloudAudio.pause():(h.readAloudAudio=new Audio,h.readAloudAudio.addEventListener(\"ended\",()=>{let f=h.readAloudMathfield;h.readAloudStatus=\"ended\",document.body.dispatchEvent(new Event(\"read-aloud-status-change\",{bubbles:!0,composed:!0})),f?(xt(f),h.readAloudElement=null,h.readAloudMathfield=null,h.readAloudTokens=[],h.readAloudMarks=[],h.readAloudCurrentMark=\"\"):Ah(h.readAloudElement)}),h.readAloudAudio.addEventListener(\"timeupdate\",()=>{let f=\"\",x=h.readAloudAudio.currentTime*1e3+100;for(let v of h.readAloudMarks)v.time<x&&(f=v.value);h.readAloudCurrentMark!==f&&(h.readAloudCurrentToken=f,f&&f===h.readAloudFinalToken?h.readAloudAudio.pause():(h.readAloudCurrentMark=f,Zc(h.readAloudElement,h.readAloudCurrentMark)))})),h.readAloudAudio.src=d,h.readAloudStatus=\"playing\",document.body.dispatchEvent(new Event(\"read-aloud-status-change\",{bubbles:!0,composed:!0})),h.readAloudAudio.play()})})}ke()||console.error('MathLive 0.108.2: this version of the MathLive library is for use in the browser. A subset of the API is available on the server side in the \"mathlive-ssr\" library. If using server side rendering (with React for example) you may want to do a dynamic import of the MathLive library inside a `useEffect()` call.');var Q=new WeakMap,uy=.5,jr={letterShapeStyle:\"mf.letterShapeStyle = ...\",horizontalSpacingScale:'Removed. Use `\"thinmuskip\"`, `\"medmuskip\"`, and `\"thickmuskip\"` registers ',macros:\"mf.macros = ...\",registers:\"mf.registers = ...\",backgroundColorMap:\"mf.backgroundColorMap = ...\",colorMap:\"mf.colorMap = ...\",enablePopover:\"mf.popoverPolicy = ...\",mathModeSpace:\"mf.mathModeSpace = ...\",placeholderSymbol:\"mf.placeholderSymbol = ...\",readOnly:\"mf.readOnly = ...\",removeExtraneousParentheses:\"mf.removeExtraneousParentheses = ...\",scriptDepth:\"mf.scriptDepth = ...\",smartFence:\"mf.smartFence = ...\",smartMode:\"mf.smartMode = ...\",smartSuperscript:\"mf.smartSuperscript = ...\",inlineShortcutTimeout:\"mf.inlineShortcutTimeout = ...\",inlineShortcuts:\"mf.inlineShortcuts = ...\",keybindings:\"mf.keybindings = ...\",virtualKeyboardMode:\"mf.mathVirtualKeyboardPolicy = ...\",customVirtualKeyboardLayers:\"mathVirtualKeyboard.layers = ...\",customVirtualKeyboards:\"mathVirtualKeyboard.layouts = ...\",keypressSound:\"mathVirtualKeyboard.keypressSound = ...\",keypressVibration:\"mathVirtualKeyboard.keypressVibration = ...\",plonkSound:\"mathVirtualKeyboard.plonkSound = ...\",virtualKeyboardContainer:\"mathVirtualKeyboard.container = ...\",virtualKeyboardLayout:\"mathVirtualKeyboard.alphabeticLayout = ...\",virtualKeyboardTheme:\"No longer supported\",virtualKeyboardToggleGlyph:\"No longer supported\",virtualKeyboardToolbar:\"mathVirtualKeyboard.editToolbar = ...\",virtualKeyboards:\"Use `mathVirtualKeyboard.layouts`\",speechEngine:\"`MathfieldElement.speechEngine`\",speechEngineRate:\"`MathfieldElement.speechEngineRate`\",speechEngineVoice:\"`MathfieldElement.speechEngineVoice`\",textToSpeechMarkup:\"`MathfieldElement.textToSpeechMarkup`\",textToSpeechRules:\"`MathfieldElement.textToSpeechRules`\",textToSpeechRulesOptions:\"`MathfieldElement.textToSpeechRulesOptions`\",readAloudHook:\"`MathfieldElement.readAloudHook`\",speakHook:\"`MathfieldElement.speakHook`\",computeEngine:\"`MathfieldElement.computeEngine`\",fontsDirectory:\"`MathfieldElement.fontsDirectory`\",soundsDirectory:\"`MathfieldElement.soundsDirectory`\",createHTML:\"`MathfieldElement.createHTML`\",onExport:\"`mf.onExport`\",onInlineShortcut:\"`mf.onInlineShortcut`\",onScrollIntoView:\"`mf.onScrollIntoView`\",locale:\"MathfieldElement.locale = ...\",strings:\"MathfieldElement.strings = ...\",decimalSeparator:\"MathfieldElement.decimalSeparator = ...\",fractionNavigationOrder:\"MathfieldElement.fractionNavigationOrder = ...\"},se=class se extends HTMLElement{constructor(r){super();this._observer=null;if(r){let i=[];for(let n of Object.keys(r))if(jr[n])if(jr[n].startsWith(\"mf.\"))if(jr[n].startsWith(`mf.${n}`))i.push(`Option \\`${n}\\` cannot be used as a constructor option. Use ${jr[n]}`);else{let o=jr[n].match(/([a-zA-Z]+) =/);i.push(`Option \\`${n}\\` has been renamed \\`${o[1]}\\``)}else i.push(`Option \\`${n}\\` cannot be used as a constructor option. Use ${jr[n]}`);if(i.length>0){console.group(\"%cMathLive 0.108.2: %cInvalid Options\",\"color:#12b; font-size: 1.1rem\",\"color:#db1111; font-size: 1.1rem\"),console.warn(\"Some of the options passed to `new MathfieldElement(...)` are invalid. \\n          See mathfield/changelog/ for details.\");for(let n of i)console.warn(n);console.groupEnd()}}if(Tn()&&(this._internals=this.attachInternals(),this._internals.role=\"math\",this._internals.ariaLabel=\"math input field\",this._internals.ariaMultiLine=\"false\"),this.attachShadow({mode:\"open\",delegatesFocus:!0}),this.shadowRoot&&\"adoptedStyleSheets\"in this.shadowRoot){this.shadowRoot.adoptedStyleSheets=[or(\"core\"),or(\"mathfield\"),or(\"mathfield-element\"),or(\"ui\"),or(\"menu\")],this.shadowRoot.appendChild(document.createElement(\"span\"));let i=document.createElement(\"slot\");i.style.display=\"none\",this.shadowRoot.appendChild(i)}else this.shadowRoot.innerHTML=\"<style>\"+zt(\"core\")+zt(\"mathfield\")+zt(\"mathfield-element\")+zt(\"ui\")+zt(\"menu\")+'</style><span></span><slot style=\"display:none\"></slot>';r&&this._setOptions(r)}static get formAssociated(){return Tn()}static get optionsAttributes(){return{\"default-mode\":\"string\",\"letter-shape-style\":\"string\",\"min-font-scale\":\"number\",\"max-matrix-cols\":\"number\",\"popover-policy\":\"string\",\"math-mode-space\":\"string\",\"read-only\":\"boolean\",\"remove-extraneous-parentheses\":\"on/off\",\"smart-fence\":\"on/off\",\"smart-mode\":\"on/off\",\"smart-superscript\":\"on/off\",\"inline-shortcut-timeout\":\"string\",\"script-depth\":\"string\",placeholder:\"string\",\"virtual-keyboard-target-origin\":\"string\",\"math-virtual-keyboard-policy\":\"string\"}}static get observedAttributes(){return[...Object.keys(this.optionsAttributes),\"contenteditable\",\"disabled\",\"readonly\",\"read-only\"]}static get fontsDirectory(){return this._fontsDirectory}static set fontsDirectory(r){r!==this._fontsDirectory&&(this._fontsDirectory=r,kp())}get fontsDirectory(){throw new Error(\"Use MathfieldElement.fontsDirectory instead\")}set fontsDirectory(r){throw new Error(\"Use MathfieldElement.fontsDirectory instead\")}static get soundsDirectory(){return this._soundsDirectory}static set soundsDirectory(r){this._soundsDirectory=r,this.audioBuffers={}}get soundsDirectory(){throw new Error(\"Use MathfieldElement.soundsDirectory instead\")}set soundsDirectory(r){throw new Error(\"Use MathfieldElement.soundsDirectory instead\")}static get keypressSound(){return this._keypressSound}static set keypressSound(r){var i,n,o;this.audioBuffers={},r===null?this._keypressSound={spacebar:null,return:null,delete:null,default:null}:typeof r==\"string\"?this._keypressSound={spacebar:r,return:r,delete:r,default:r}:typeof r==\"object\"&&\"default\"in r&&(this._keypressSound={spacebar:(i=r.spacebar)!=null?i:r.default,return:(n=r.return)!=null?n:r.default,delete:(o=r.delete)!=null?o:r.default,default:r.default})}static get plonkSound(){return this._plonkSound}static set plonkSound(r){this.audioBuffers={},this._plonkSound=r}static get audioContext(){return this._audioContext||(this._audioContext=new AudioContext),this._audioContext}static get speechEngine(){return this._speechEngine}static set speechEngine(r){this._speechEngine=r}static get speechEngineRate(){return this._speechEngineRate}static set speechEngineRate(r){this._speechEngineRate=r}static get speechEngineVoice(){return this._speechEngineVoice}static set speechEngineVoice(r){this._speechEngineVoice=r}static get textToSpeechMarkup(){return this._textToSpeechMarkup}static set textToSpeechMarkup(r){this._textToSpeechMarkup=r}static get textToSpeechRules(){return this._textToSpeechRules}static set textToSpeechRules(r){this._textToSpeechRules=r}static get textToSpeechRulesOptions(){return this._textToSpeechRulesOptions}static set textToSpeechRulesOptions(r){this._textToSpeechRulesOptions=r}static get locale(){return F.locale}static set locale(r){r===\"auto\"&&(r=navigator.language.slice(0,5)),F.locale=r}get locale(){throw new Error(\"Use MathfieldElement.locale instead\")}set locale(r){throw new Error(\"Use MathfieldElement.locale instead\")}static get strings(){return F.strings}static set strings(r){F.merge(r)}get strings(){throw new Error(\"Use MathfieldElement.strings instead\")}set strings(r){throw new Error(\"Use MathfieldElement.strings instead\")}static get decimalSeparator(){return this._decimalSeparator}static set decimalSeparator(r){this._decimalSeparator=r,this._computeEngine&&(this._computeEngine.decimalSeparator=this.decimalSeparator===\",\"?\"{,}\":\".\")}get decimalSeparator(){throw new Error(\"Use MathfieldElement.decimalSeparator instead\")}set decimalSeparator(r){throw new Error(\"Use MathfieldElement.decimalSeparator instead\")}static set scientificNotationTemplate(r){this._scientificNotationTemplate=r}static get scientificNotationTemplate(){return this._scientificNotationTemplate}static get fractionNavigationOrder(){return dn.fractionNavigationOrder}static set fractionNavigationOrder(r){if(r!==\"numerator-denominator\"&&r!==\"denominator-numerator\")throw new Error(\"Invalid value\");dn.fractionNavigationOrder!==r&&(dn.fractionNavigationOrder=r,hc())}static get computeEngine(){var r,i;if(this._computeEngine===void 0){let n=(r=window[Symbol.for(\"io.cortexjs.compute-engine\")])==null?void 0:r.ComputeEngine;if(!n)return null;this._computeEngine=new n,this._computeEngine&&this.decimalSeparator===\",\"&&(this._computeEngine.decimalSeparator=\"{,}\")}return(i=this._computeEngine)!=null?i:null}static set computeEngine(r){this._computeEngine=r}get computeEngine(){throw new Error(\"Use MathfieldElement.computeEngine instead\")}set computeEngine(r){throw new Error(\"Use MathfieldElement.computeEngine instead\")}static get isFunction(){return typeof this._isFunction!=\"function\"?()=>!1:this._isFunction}static set isFunction(r){this._isFunction=r,hc()}static async loadSound(r){delete this.audioBuffers[r];let i=\"\";switch(r){case\"keypress\":i=this._keypressSound.default;break;case\"return\":i=this._keypressSound.return;break;case\"spacebar\":i=this._keypressSound.spacebar;break;case\"delete\":i=this._keypressSound.delete;break;case\"plonk\":i=this.plonkSound;break}if(typeof i!=\"string\")return;i=i.trim();let n=this.soundsDirectory;if(!(n==null||n===\"null\"||i===\"none\"||i===\"null\"))try{let a=await(await fetch(await as(`${n}/${i}`))).arrayBuffer(),s=await this.audioContext.decodeAudioData(a);this.audioBuffers[r]=s}catch(o){}}static async playSound(r){if((this.audioContext.state===\"suspended\"||this.audioContext.state===\"interrupted\")&&await this.audioContext.resume(),this.audioBuffers[r]||await this.loadSound(r),!this.audioBuffers[r])return;let i=this.audioContext.createBufferSource();i.buffer=this.audioBuffers[r];let n=this.audioContext.createGain();n.gain.value=uy,i.connect(n).connect(this.audioContext.destination),i.start()}showMenu(r){var i,n;return(n=(i=this._mathfield)==null?void 0:i.showMenu(r))!=null?n:!1}get mathVirtualKeyboard(){throw new Error(\"The `mathVirtualKeyboard` property is not available on the MathfieldElement. Use `window.mathVirtualKeyboard` instead.\")}onPointerDown(){window.addEventListener(\"pointerup\",r=>{let i=this._mathfield;if(i&&r.target===this&&!i.disabled){this.dispatchEvent(new MouseEvent(\"click\",{altKey:r.altKey,button:r.button,buttons:r.buttons,clientX:r.clientX,clientY:r.clientY,ctrlKey:r.ctrlKey,metaKey:r.metaKey,movementX:r.movementX,movementY:r.movementY,relatedTarget:r.relatedTarget,screenX:r.screenX,screenY:r.screenY,shiftKey:r.shiftKey}));let n=this.getOffsetFromPoint(r.clientX,r.clientY);n>=0&&se.openUrl(F0(i,n)),r.pointerType===\"touch\"&&this.selectionIsCollapsed&&(this.position=n)}},{once:!0})}getPromptValue(r,i){var n,o;return(o=(n=this._mathfield)==null?void 0:n.getPromptValue(r,i))!=null?o:\"\"}setPromptValue(r,i,n){var o;(o=this._mathfield)==null||o.setPromptValue(r,i,n)}getPromptRange(r){var i,n;return(n=(i=this._mathfield)==null?void 0:i.getPromptRange(r))!=null?n:null}getPrompts(r){var i,n;return(n=(i=this._mathfield)==null?void 0:i.getPrompts(r))!=null?n:[]}get hasEditableContent(){var r,i;return(i=(r=this._mathfield)==null?void 0:r.hasEditableContent)!=null?i:!1}get form(){var r;return(r=this._internals)==null?void 0:r.form}get name(){var r;return(r=this.getAttribute(\"name\"))!=null?r:\"\"}get type(){return this.localName}get mode(){var r,i;return(i=(r=this._mathfield)==null?void 0:r.model.mode)!=null?i:this.defaultMode===\"text\"?\"text\":\"math\"}set mode(r){var i;(i=this._mathfield)==null||i.switchMode(r)}get expression(){if(this._mathfield)return window[Symbol.for(\"io.cortexjs.compute-engine\")]?this._mathfield.expression:(console.error(`MathLive 0.108.2: The CortexJS Compute Engine library is not available.\n        \n        Load the library, for example with:\n        \n        import \"https://esm.run/@cortex-js/compute-engine\"`),null)}set expression(r){var n,o;if(!this._mathfield)return;let i=(o=(n=se.computeEngine)==null?void 0:n.box(r).latex)!=null?o:null;i!==null&&this._mathfield.setValue(i),window[Symbol.for(\"io.cortexjs.compute-engine\")]||console.error(`MathLive 0.108.2: The Compute Engine library is not available.\n        \n        Load the library, for example with:\n        \n        import \"https://esm.run/@cortex-js/compute-engine\"`)}get errors(){var r,i;return(i=(r=this._mathfield)==null?void 0:r.errors)!=null?i:[]}_getOptions(r){return this._mathfield?pr(this._mathfield.options,r):Q.has(this)?p({},pr(p(p({},_n()),vn(Q.get(this).options)),r)):null}getOptions(r){return console.warn(\"%cMathLive 0.108.2: %cDeprecated Usage%c\\n      `mf.getOptions()` is deprecated. Read the property directly on the mathfield instead.\\n      See mathfield/changelog/ for details.\",\"color:#12b; font-size: 1.1rem\",\"color:#db1111; font-size: 1.1rem\",\"color: inherit, font-size: 1rem\"),this._mathfield?pr(this._mathfield.options,r):Q.has(this)?pr(p(p({},_n()),vn(Q.get(this).options)),r):null}reflectAttributes(){let r=_n(),i=this._getOptions();Object.keys(se.optionsAttributes).forEach(n=>{let o=n===\"placeholder\"?\"contentPlaceholder\":hr(n);se.optionsAttributes[n]===\"on/off\"?r[o]!==i[o]?this.setAttribute(n,i[o]?\"on\":\"off\"):this.removeAttribute(n):r[o]!==i[o]&&(se.optionsAttributes[n]===\"boolean\"?i[o]?this.setAttribute(n,\"\"):this.removeAttribute(n):(typeof i[o]==\"string\"||typeof i[o]==\"number\")&&this.setAttribute(n,i[o].toString()))})}getOption(r){return console.warn(\"%cMathLive 0.108.2: %cDeprecated Usage%c\\n      `mf.getOption()` is deprecated. Read the property directly on the mathfield instead.\\n      See mathfield/changelog/ for details.\",\"color:#12b; font-size: 1.1rem\",\"color:#db1111; font-size: 1.1rem\",\"color: inherit, font-size: 1rem\"),this._getOptions([r])[r]}_getOption(r){return this._getOptions([r])[r]}_setOptions(r){if(this._mathfield)this._mathfield.setOptions(r);else if(Q.has(this)){let i=p(p({},Q.get(this).options),r);Q.set(this,g(p({},Q.get(this)),{selection:{ranges:i.readOnly?[[0,0]]:[[0,-1]]},options:i}))}else Q.set(this,{value:void 0,selection:{ranges:[[0,0]]},options:r,menuItems:void 0});this.reflectAttributes()}setOptions(r){console.group(\"%cMathLive 0.108.2: %cDeprecated Usage\",\"color:#12b; font-size: 1.1rem\",\"color:#db1111; font-size: 1.1rem\"),console.warn(\" `mf.setOptions()` is deprecated. Set the property directly on the mathfield instead.\\n      See mathfield/changelog/ for details.\");for(let i of Object.keys(r))jr[i]&&console.warn(`\\`mf.setOptions({${i}:...})\\` -> ${jr[i]}`);console.groupEnd(),this._setOptions(r)}executeCommand(...r){var n,o;let i;if(r.length===1?i=r[0]:i=[r[0],...r.slice(1)],i)return(o=(n=this._mathfield)==null?void 0:n.executeCommand(i))!=null?o:!1;throw new Error(\"Invalid selector\")}getValue(r,i,n){var o,a;if(this._mathfield)return this._mathfield.model.getValue(r,i,n);if(Q.has(this)){let s,l,c;if(Xi(r)?([s,l]=r.ranges[0],c=i):si(r)?([s,l]=r,c=i):Rt(r)&&Rt(i)?(s=r,l=i,c=n):(s=0,l=-1,c=r),(c===void 0||c===\"latex\")&&s===0&&l===-1)return(a=(o=Q.get(this).value)!=null?o:this.textContent)!=null?a:\"\"}return\"\"}setValue(r,i){if(this._mathfield&&r!==void 0){if(this._mathfield.model.getValue()===r)return;i!=null||(i={silenceNotifications:!0,mode:\"math\"}),this._mathfield.setValue(r,i);return}if(Q.has(this)){let o=Q.get(this).options;Q.set(this,{value:r,selection:{ranges:[[-1,-1]],direction:\"forward\"},options:o,menuItems:void 0});return}let n=Vs(this);Q.set(this,{value:r,selection:{ranges:[[-1,-1]],direction:\"forward\"},options:n,menuItems:void 0})}hasFocus(){var r,i;return(i=(r=this._mathfield)==null?void 0:r.hasFocus())!=null?i:!1}focus(){var r;this.disabled||(r=this._mathfield)==null||r.focus()}blur(){var r;(r=this._mathfield)==null||r.blur()}select(){var r;(r=this._mathfield)==null||r.select()}insert(r,i){var n,o;return(o=(n=this._mathfield)==null?void 0:n.insert(r,i))!=null?o:!1}applyStyle(r,i){var n;return(n=this._mathfield)==null?void 0:n.applyStyle(r,i)}queryStyle(r){var i,n;return(n=(i=this._mathfield)==null?void 0:i.queryStyle(r))!=null?n:\"none\"}getOffsetFromPoint(r,i,n){return this._mathfield?Mo(this._mathfield,r,i,n):-1}getElementInfo(r){return qa(this._mathfield,r)}resetUndo(){var r;(r=this._mathfield)==null||r.resetUndo()}canUndo(){return this._mathfield?this._mathfield.canUndo():!1}canRedo(){return this._mathfield?this._mathfield.canRedo():!1}handleEvent(r){var n,o,a,s,l;if(Te.state!==\"closed\"||((o=(n=this._mathfield)==null?void 0:n.menu)==null?void 0:o.state)!==\"closed\"||(r.type===\"pointerdown\"&&this.onPointerDown(),r.type===\"focus\")||r.type!==\"blur\")return;let i=Po();i&&((a=window==null?void 0:window.mathVirtualKeyboard)!=null&&a.visible)||((s=Te.scrim)==null?void 0:s.state)!==\"closed\"||i&&ou()||(l=this._mathfield)==null||l.onBlur({dispatchEvents:!1})}connectedCallback(){var l,c,u,m;let r=this.shadowRoot,i=r.host,o=window.getComputedStyle(this).userSelect!==\"none\";if(o)i.addEventListener(\"pointerdown\",this,!0);else{let d=r.querySelector(\"span\");d.style.pointerEvents=\"none\"}i.addEventListener(\"focus\",this,!0),i.addEventListener(\"blur\",this,!0),this._observer=new MutationObserver(()=>{var d;this.value=(d=this.textContent)!=null?d:\"\"}),this._observer.observe(this,{childList:!0,characterData:!0,subtree:!0}),Tn()||(this.hasAttribute(\"role\")||this.setAttribute(\"role\",\"math\"),this.hasAttribute(\"aria-label\")||this.setAttribute(\"aria-label\",\"math input field\"),this.setAttribute(\"aria-multiline\",\"false\")),o&&!this.hasAttribute(\"contenteditable\")&&this.setAttribute(\"contenteditable\",\"true\"),this.hasAttribute(\"tabindex\")||this.setAttribute(\"tabindex\",\"0\");let a=r.querySelector(\"slot:not([name])\");if(a)try{this._style=a.assignedElements().filter(d=>d.tagName.toLowerCase()===\"style\").map(d=>d.textContent).join(\"\")}catch(d){console.error(d)}if(this._style){let d=document.createElement(\"style\");d.textContent=this._style,r.appendChild(d)}let s=\"\";if(this.hasAttribute(\"value\")?s=this.getAttribute(\"value\"):s=(l=a==null?void 0:a.assignedNodes().map(d=>d.nodeType===3?d.textContent:\"\").join(\"\").trim())!=null?l:\"\",this._mathfield=new $s(r.querySelector(\":host > span\"),g(p({},(u=(c=Q.get(this))==null?void 0:c.options)!=null?u:Vs(this)),{eventSink:this,value:s})),!Q.has(this)){this.upgradeProperty(\"disabled\"),this.upgradeProperty(\"readonly\");for(let d of Object.keys(se.optionsAttributes))this.upgradeProperty(hr(d))}if(!((m=this._mathfield)!=null&&m.model)){this._mathfield=null;return}if(Q.has(this)){let d=this._mathfield,h=Q.get(this),f=h.menuItems;d.model.deferNotifications({content:!1,selection:!1},()=>{let x=h.value;x!==void 0&&d.setValue(x),d.model.selection=h.selection,Q.delete(this)}),f&&(this.menuItems=f)}window.queueMicrotask(()=>{this.isConnected&&this.dispatchEvent(new Event(\"mount\",{cancelable:!1,bubbles:!0,composed:!0}))}),dr()}disconnectedCallback(){var i,n,o;if(this.shadowRoot.host.removeEventListener(\"pointerdown\",this,!0),!this._mathfield)return;(i=this._observer)==null||i.disconnect(),this._observer=null,window.queueMicrotask(()=>this.dispatchEvent(new Event(\"unmount\",{cancelable:!1,bubbles:!0,composed:!0})));let r=pr(this._mathfield.options,Object.keys(se.optionsAttributes).map(a=>hr(a)));Q.set(this,{value:this._mathfield.getValue(),selection:this._mathfield.model.selection,menuItems:(o=(n=this._mathfield.menu)==null?void 0:n.menuItems)!=null?o:void 0,options:r}),this._mathfield.dispose(),this._mathfield=null}upgradeProperty(r){if(this.hasOwnProperty(r)){let i=this[r];delete this[r],(r===\"readonly\"||r===\"read-only\")&&(r=\"readOnly\"),this[r]=i}}attributeChangedCallback(r,i,n){if(i===n)return;let o=n!==null;switch(r){case\"contenteditable\":J(this._mathfield);break;case\"placeholder\":n===!1&&(n=\"\"),this.placeholder=n;break;case\"disabled\":this.disabled=o;break;case\"read-only\":case\"readonly\":this.readOnly=o;break;default:}}get readonly(){return this.hasAttribute(\"readonly\")||this.hasAttribute(\"read-only\")}set readonly(r){let i=!!r;i?(this.setAttribute(\"readonly\",\"\"),Tn()?this._internals.ariaReadOnly=\"true\":this.setAttribute(\"aria-readonly\",\"true\"),this.setAttribute(\"aria-readonly\",\"true\")):(Tn()?this._internals.ariaReadOnly=\"false\":this.removeAttribute(\"aria-readonly\"),this.removeAttribute(\"readonly\"),this.removeAttribute(\"read-only\")),this._setOptions({readOnly:i})}get disabled(){return this.hasAttribute(\"disabled\")}set disabled(r){var n;let i=!!r;i?this.setAttribute(\"disabled\",\"\"):this.removeAttribute(\"disabled\"),Tn()?this._internals.ariaDisabled=i?\"true\":\"false\":this.setAttribute(\"aria-disabled\",i?\"true\":\"false\"),i&&((n=this._mathfield)!=null&&n.hasFocus)&&window.mathVirtualKeyboard.visible&&this._mathfield.executeCommand(\"hideVirtualKeyboard\")}get value(){return this.getValue()}set value(r){this.setValue(r)}get defaultMode(){return this._getOption(\"defaultMode\")}set defaultMode(r){this._setOptions({defaultMode:r})}get macros(){if(!this._mathfield)throw new Error(\"Mathfield not mounted\");return this._getOption(\"macros\")}set macros(r){this._setOptions({macros:r})}get registers(){if(!this._mathfield)throw new Error(\"Mathfield not mounted\");let r=this;return new Proxy({},{get:(i,n)=>{if(typeof n==\"string\")return r._getOption(\"registers\")[n]},set(i,n,o){return typeof n!=\"string\"?!1:(r._setOptions({registers:g(p({},r._getOption(\"registers\")),{[n]:o})}),!0)},ownKeys:()=>Reflect.ownKeys(r._getOption(\"registers\")),getOwnPropertyDescriptor:(i,n)=>{let o=r._getOption(\"registers\")[n];if(o!==void 0)return{configurable:!0,enumerable:!0,value:o,writable:!0}}})}set registers(r){this._setOptions({registers:r})}get colorMap(){return this._getOption(\"colorMap\")}set colorMap(r){this._setOptions({colorMap:r})}get backgroundColorMap(){return this._getOption(\"backgroundColorMap\")}set backgroundColorMap(r){this._setOptions({backgroundColorMap:r})}get letterShapeStyle(){return this._getOption(\"letterShapeStyle\")}set letterShapeStyle(r){this._setOptions({letterShapeStyle:r})}get minFontScale(){return this._getOption(\"minFontScale\")}set minFontScale(r){this._setOptions({minFontScale:r})}get maxMatrixCols(){return this._getOption(\"maxMatrixCols\")}set maxMatrixCols(r){this._setOptions({maxMatrixCols:r})}get smartMode(){return this._getOption(\"smartMode\")}set smartMode(r){this._setOptions({smartMode:r})}get smartFence(){return this._getOption(\"smartFence\")}set smartFence(r){this._setOptions({smartFence:r})}get smartSuperscript(){return this._getOption(\"smartSuperscript\")}set smartSuperscript(r){this._setOptions({smartSuperscript:r})}get scriptDepth(){return this._getOption(\"scriptDepth\")}set scriptDepth(r){this._setOptions({scriptDepth:r})}get removeExtraneousParentheses(){return this._getOption(\"removeExtraneousParentheses\")}set removeExtraneousParentheses(r){this._setOptions({removeExtraneousParentheses:r})}get mathModeSpace(){return this._getOption(\"mathModeSpace\")}set mathModeSpace(r){this._setOptions({mathModeSpace:r})}get placeholderSymbol(){return this._getOption(\"placeholderSymbol\")}set placeholderSymbol(r){this._setOptions({placeholderSymbol:r})}get placeholder(){return this._getOption(\"contentPlaceholder\")}set placeholder(r){this._setOptions({contentPlaceholder:r})}get popoverPolicy(){return this._getOption(\"popoverPolicy\")}set popoverPolicy(r){this._setOptions({popoverPolicy:r})}get environmentPopoverPolicy(){return this._getOption(\"environmentPopoverPolicy\")}set environmentPopoverPolicy(r){this._setOptions({environmentPopoverPolicy:r})}get menuItems(){var r;if(!this._mathfield)throw new Error(\"Mathfield not mounted\");return(r=this._mathfield.menu._menuItems.map(i=>i.menuItem))!=null?r:[]}set menuItems(r){var i;if(!this._mathfield)throw new Error(\"Mathfield not mounted\");if(this._mathfield){let n=(i=this._mathfield.element)==null?void 0:i.querySelector(\"[part=menu-toggle]\");n&&(n.style.display=r.length===0?\"none\":\"\"),this._mathfield.menu.menuItems=r}}get mathVirtualKeyboardPolicy(){return this._getOption(\"mathVirtualKeyboardPolicy\")}set mathVirtualKeyboardPolicy(r){this._setOptions({mathVirtualKeyboardPolicy:r})}get inlineShortcuts(){if(!this._mathfield)throw new Error(\"Mathfield not mounted\");return this._getOption(\"inlineShortcuts\")}set inlineShortcuts(r){if(!this._mathfield)throw new Error(\"Mathfield not mounted\");this._setOptions({inlineShortcuts:r})}get inlineShortcutTimeout(){return this._getOption(\"inlineShortcutTimeout\")}set inlineShortcutTimeout(r){this._setOptions({inlineShortcutTimeout:r})}get keybindings(){if(!this._mathfield)throw new Error(\"Mathfield not mounted\");return this._getOption(\"keybindings\")}set keybindings(r){if(!this._mathfield)throw new Error(\"Mathfield not mounted\");this._setOptions({keybindings:r})}get onInsertStyle(){let r=this._getOption(\"onInsertStyle\");return r===void 0?ao:r}set onInsertStyle(r){this._setOptions({onInsertStyle:r})}get onInlineShortcut(){return this._getOption(\"onInlineShortcut\")}set onInlineShortcut(r){this._setOptions({onInlineShortcut:r})}get onScrollIntoView(){return this._getOption(\"onScrollIntoView\")}set onScrollIntoView(r){this._setOptions({onScrollIntoView:r})}get onExport(){return this._getOption(\"onExport\")}set onExport(r){this._setOptions({onExport:r})}get readOnly(){return this._getOption(\"readOnly\")}set readOnly(r){this._setOptions({readOnly:r})}get isSelectionEditable(){var r,i;return(i=(r=this._mathfield)==null?void 0:r.isSelectionEditable)!=null?i:!1}setPromptState(r,i,n){var o;(o=this._mathfield)==null||o.setPromptState(r,i,n)}getPromptState(r){var i,n;return(n=(i=this._mathfield)==null?void 0:i.getPromptState(r))!=null?n:[void 0,!0]}get selection(){return this._mathfield?this._mathfield.model.selection:Q.has(this)?Q.get(this).selection:{ranges:[[0,0]],direction:\"forward\"}}set selection(r){if(typeof r==\"number\"&&(r={ranges:[[r,r]]}),this._mathfield){this._mathfield.model.selection=r,J(this._mathfield);return}if(Q.has(this)){Q.set(this,g(p({},Q.get(this)),{selection:r}));return}Q.set(this,{value:void 0,selection:r,options:Vs(this),menuItems:void 0})}get selectionIsCollapsed(){let r=this.selection;return r.ranges.length===1&&r.ranges[0][0]===r.ranges[0][1]}get position(){return this._mathfield?this._mathfield.model.position:Q.has(this)?Q.get(this).selection.ranges[0][0]:0}set position(r){if(this._mathfield&&(this._mathfield.model.position=r,J(this._mathfield)),Q.has(this)){Q.set(this,g(p({},Q.get(this)),{selection:{ranges:[[r,r]]}}));return}Q.set(this,{value:void 0,selection:{ranges:[[r,r]]},options:Vs(this),menuItems:void 0})}get lastOffset(){var r,i;return(i=(r=this._mathfield)==null?void 0:r.model.lastOffset)!=null?i:-1}};se.version=\"0.108.2\",se.openUrl=r=>{if(!r)return;let i=new URL(r);if(![\"http:\",\"https:\",\"file:\"].includes(i.protocol.toLowerCase())){se.playSound(\"plonk\");return}window.open(i,\"_blank\")},se._fontsDirectory=\"./fonts/\",se._soundsDirectory=\"./sounds\",se.keypressVibration=!0,se._keypressSound={spacebar:\"keypress-spacebar.wav\",return:\"keypress-return.wav\",delete:\"keypress-delete.wav\",default:\"keypress-standard.wav\"},se._plonkSound=\"plonk.wav\",se.audioBuffers={},se.createHTML=r=>r,se._speechEngineRate=\"100%\",se._speechEngineVoice=\"Joanna\",se._textToSpeechMarkup=\"\",se._textToSpeechRules=\"mathlive\",se._textToSpeechRulesOptions={},se.speakHook=Lh,se.readAloudHook=Ch,se.restoreFocusWhenDocumentFocused=!0,se._decimalSeparator=\".\",se._scientificNotationTemplate=\"#1\\\\times10^{#2}\",se._isFunction=r=>{var n,o;let i=globalThis.MathfieldElement.computeEngine;return(o=(n=i==null?void 0:i.parse(r).domain)==null?void 0:n.isFunction)!=null?o:!1};var _t=se;function hr(t){return t.replace(/[^a-zA-Z\\d]+(.)/g,(e,r)=>r.toUpperCase())}function Vs(t){let e={readOnly:!1},r=_t.optionsAttributes;return Object.keys(r).forEach(i=>{var n;if(t.hasAttribute(i)){let o=t.getAttribute(i);i===\"placeholder\"?e.contentPlaceholder=o!=null?o:\"\":r[i]===\"boolean\"?e[hr(i)]=!0:r[i]===\"on/off\"?(o=(n=o==null?void 0:o.toLowerCase())!=null?n:\"\",o===\"on\"||o===\"true\"?e[hr(i)]=!0:o===\"off\"||o===\"false\"?e[hr(i)]=!1:e[hr(i)]=void 0):r[i]===\"number\"?e[hr(i)]=Number.parseFloat(o!=null?o:\"0\"):e[hr(i)]=o}}),e}function Tn(){return!(!(\"ElementInternals\"in window)||!HTMLElement.prototype.attachInternals||!(\"role\"in window.ElementInternals.prototype))}var gn=_t,Eh,Th,Dh,Oh;if(ke()&&!((Eh=window.customElements)!=null&&Eh.get(\"math-field\"))){(Dh=window[Th=Symbol.for(\"io.cortexjs.mathlive\")])!=null||(window[Th]={});let t=window[Symbol.for(\"io.cortexjs.mathlive\")];t.version=\"0.108.2\",globalThis.MathfieldElement=_t,(Oh=window.customElements)==null||Oh.define(\"math-field\",_t)}function dy(t,e,r){let i=r,n=0,o=t.length;for(;i<e.length;){let a=e[i];if(n<=0&&e.slice(i,i+o)===t)return i;a===\"\\\\\"?i++:a===\"{\"?n++:a===\"}\"&&n--,i++}return-1}function qs(t,e,r,i,n=\"latex\"){let o=[];for(let a of t)if(a.type===\"text\"){let s=a.data,l=!0,c=0,u;u=s.indexOf(e),u!==-1&&(c=u,c>0&&o.push({type:\"text\",data:s.slice(0,c)}),l=!1);let m=!1;for(;!m;){if(l){if(u=s.indexOf(e,c),u===-1){m=!0;break}c!==u&&o.push({type:\"text\",data:s.slice(c,u)}),c=u}else{if(u=dy(r,s,c+e.length),u===-1){m=!0;break}let d=s.slice(c+e.length,u);n===\"ascii-math\"&&([,d]=ir(d,{format:\"ascii-math\"})),o.push({type:\"math\",data:d,mathstyle:i}),c=u+r.length}l=!l}c<s.length&&o.push({type:\"text\",data:s.slice(c)})}else o.push(a);return o}function Bh(t,e){var i,n,o,a,s,l,c,u;let r=[{type:\"text\",data:t}];return(n=(i=e.TeX)==null?void 0:i.delimiters)!=null&&n.display&&e.TeX.delimiters.display.forEach(([m,d])=>{r=qs(r,m,d,\"displaystyle\")}),(a=(o=e.TeX)==null?void 0:o.delimiters)!=null&&a.inline&&e.TeX.delimiters.inline.forEach(([m,d])=>{r=qs(r,m,d,\"textstyle\")}),(l=(s=e.asciiMath)==null?void 0:s.delimiters)!=null&&l.inline&&e.asciiMath.delimiters.inline.forEach(([m,d])=>{r=qs(r,m,d,\"textstyle\",\"ascii-math\")}),(u=(c=e.asciiMath)==null?void 0:c.delimiters)!=null&&u.display&&e.asciiMath.delimiters.display.forEach(([m,d])=>{r=qs(r,m,d,\"displaystyle\",\"ascii-math\")}),r}function my(t,e){let r=document.createElement(\"span\");r.setAttribute(\"translate\",\"no\");try{let i=\"<math xmlns='http://www.w3.org/1998/Math/MathML'>\"+e.renderToMathML(t)+\"</math>\";r.innerHTML=globalThis.MathfieldElement.createHTML(i)}catch(i){console.error(`MathLive 0.108.2:  Could not convert \"${t}\"' to MathML with ${i}`),r.textContent=t}return r.className=\"ML__sr-only\",r}function py(t,e,r){try{let i=e.renderToMarkup(t,g(p({},e),{defaultMode:r===\"displaystyle\"?\"math\":\"inline-math\"})),n=document.createElement(\"span\");return n.dataset.latex=t,n.style.display=r===\"displaystyle\"?\"flex\":\"inline-flex\",n.setAttribute(\"aria-hidden\",\"true\"),n.setAttribute(\"translate\",\"no\"),n.innerHTML=globalThis.MathfieldElement.createHTML(i),n}catch(i){return console.error(\"Could not parse'\"+t+\"' with \",i),document.createTextNode(t)}}function Oo(t,e,r){var o;let i=py(t,r,e||\"textstyle\"),n=(o=r.renderAccessibleContent)!=null?o:\"\";if(/\\b(mathml|speakable-text)\\b/i.test(n)){let a=document.createElement(\"span\");if(/\\bmathml\\b/i.test(n)&&r.renderToMathML&&a.append(my(t,r)),/\\bspeakable-text\\b/i.test(n)&&r.renderToSpeakableText){let s=document.createElement(\"span\");s.setAttribute(\"translate\",\"no\");let l=r.renderToSpeakableText(t);s.innerHTML=globalThis.MathfieldElement.createHTML(l),s.className=\"ML__sr-only\",a.append(s)}return a.append(i),a}return i}function hy(t,e){var n;if(/^\\s*$/.test(t))return null;if((n=e.TeX)!=null&&n.processEnvironments&&/^\\s*\\\\begin/.test(t))return[Oo(t,\"\",e)];let r=Bh(t,e);if(r.length===1&&r[0].type===\"text\")return null;let i=[];for(let o of r)o.type===\"text\"?i.push(o.data):i.push(Oo(o.data,o.mathstyle===\"textstyle\"?\"textstyle\":\"displaystyle\",e));return i}function Kh(t,e){var i,n,o,a,s,l,c,u,m,d,h,f,x,v,b,_,S,A;if(t.childNodes.length===1&&t.childNodes[0].nodeType===3){let E=(i=t.childNodes[0].textContent)!=null?i:\"\";if((n=e.TeX)!=null&&n.processEnvironments&&/^\\s*\\\\begin/.test(E)){t.textContent=\"\",t.append(Oo(E,\"\",e));return}let D=Bh(E,e);if(D.length===1){let L=D[0];if(L.type===\"text\")return;t.textContent=\"\",t.append(Oo(L.data,L.mathstyle===\"textstyle\"?\"textstyle\":\"displaystyle\",e));return}}let r=[...t.childNodes];for(let E of r)if(E.nodeType===3){let D=hy((o=E.textContent)!=null?o:\"\",e);D&&E.replaceWith(...D)}else if(E.nodeType===1){let D=E.nodeName.toLowerCase();if(D===\"script\"){let L=E,K=L.type.toLowerCase();if(K===\"module\"||K===\"javascript\")continue;let $;if((a=e.processScriptTypePattern)!=null&&a.test(K))$=(s=L.textContent)!=null?s:\"\";else if((l=e.processMathJSONScriptTypePattern)!=null&&l.test(K))try{$=(u=e.serializeToLatex)==null?void 0:u.call(e,JSON.parse((c=L.textContent)!=null?c:\"\"))}catch(G){console.error(G)}if($){let G=\"textstyle\";for(let R of K.split(\";\")){let[N,j]=R.split(\"=\");N.trim()===\"mode\"&&(G=j.trim()===\"display\"?\"displaystyle\":\"textstyle\")}Yc(L,$,G,e)}}else{let L=E;if((m=e.texClassDisplayPattern)!=null&&m.test(L.className)){Yc(L,(d=L.textContent)!=null?d:\"\",\"displaystyle\",e);continue}if((h=e.texClassInlinePattern)!=null&&h.test(L.className)){Yc(L,(f=L.textContent)!=null?f:\"\",\"textstyle\",e);continue}(((v=(x=e.processClassPattern)==null?void 0:x.test(L.className))!=null?v:!1)||!((_=(b=e.skipTags)==null?void 0:b.includes(D))!=null&&_||(A=(S=e.ignoreClassPattern)==null?void 0:S.test(L.className))!=null&&A))&&Kh(L,e)}}}var fy={skipTags:[\"math-field\",\"noscript\",\"style\",\"textarea\",\"pre\",\"code\",\"annotation\",\"annotation-xml\"],processScriptType:\"math/tex\",processMathJSONScriptType:\"math/json\",ignoreClass:\"^(tex2jax_ignore|ML__latex)$\",processClass:\"tex2jax_process\",renderAccessibleContent:\"mathml\",asciiMath:{delimiters:{inline:[[\"`\",\"`\"]]}},TeX:{processEnvironments:!0,delimiters:{inline:[[\"\\\\(\",\"\\\\)\"]],display:[[\"$$\",\"$$\"],[\"\\\\[\",\"\\\\]\"]]}}};function Ph(t,e){var r,i,n,o,a,s,l,c;try{let u=p(p({},fy),e);u.ignoreClassPattern=new RegExp((r=u.ignoreClass)!=null?r:\"\"),u.processClassPattern=new RegExp((i=u.processClass)!=null?i:\"\"),u.processScriptTypePattern=new RegExp((n=u.processScriptType)!=null?n:\"\"),u.processMathJSONScriptTypePattern=new RegExp((o=u.processMathJSONScriptType)!=null?o:\"\"),(s=(a=u.TeX)==null?void 0:a.className)!=null&&s.display&&(u.texClassDisplayPattern=new RegExp(u.TeX.className.display)),(c=(l=u.TeX)==null?void 0:l.className)!=null&&c.inline&&(u.texClassInlinePattern=new RegExp(u.TeX.className.inline)),dr(),We(\"core\"),Kh(t,u)}catch(u){u instanceof Error?console.error(\"renderMathInElement(): \"+u.message):console.error(\"renderMathInElement(): Could not render math for element\",t)}}function Yc(t,e,r,i){t.parentNode.replaceChild(Oo(e,r,i),t)}function gy(t,e){let r=ze.singleton;return r?(r.show(),Vr(),r.currentLayer=e,r.render(),r.focus(),!0):!1}function by(){let t=window.mathVirtualKeyboard;return t.visible?t.hide({animate:!0}):t.show({animate:!0}),!1}fe({switchKeyboardLayer:gy,toggleVirtualKeyboard:by,hideVirtualKeyboard:()=>(window.mathVirtualKeyboard.hide({animate:!0}),!1),showVirtualKeyboard:()=>(window.mathVirtualKeyboard.show({animate:!0}),!1)},{target:\"virtual-keyboard\"});var Rh=!1,Ih=null;function yy(){Rh||Ih||(Ih=dr().then(()=>{Rh=!0}))}var Hs=class extends HTMLElement{constructor(){super();this._hasRendered=!1;if(this._shadowRoot=this.attachShadow({mode:\"open\"}),\"adoptedStyleSheets\"in this._shadowRoot)this._shadowRoot.adoptedStyleSheets=[or(\"core\")];else{let r=document.createElement(\"style\");r.textContent=zt(\"core\"),this._shadowRoot.appendChild(r)}this._contentSlot=document.createElement(\"div\"),this._contentSlot.style.display=\"none\",this._contentSlot.setAttribute(\"part\",\"content\"),this._renderContainer=document.createElement(\"div\"),this._renderContainer.setAttribute(\"part\",\"render\"),this._renderContainer.setAttribute(\"aria-hidden\",\"true\"),this._errorFallback=document.createElement(\"div\"),this._errorFallback.style.display=\"none\",this._errorFallback.setAttribute(\"part\",\"error\"),this._shadowRoot.appendChild(this._contentSlot),this._shadowRoot.appendChild(this._renderContainer),this._shadowRoot.appendChild(this._errorFallback),this.addEventListener(\"keydown\",this._handleKeydown.bind(this))}static get observedAttributes(){return[\"mode\",\"format\",\"macros\",\"letter-shape-style\",\"min-font-scale\",\"max-matrix-cols\"]}connectedCallback(){yy(),\"IntersectionObserver\"in window&&!this._hasRendered?(this._observer=new IntersectionObserver(r=>{var i;r[0].isIntersecting&&!this._hasRendered&&(this.render(),(i=this._observer)==null||i.disconnect())},{rootMargin:\"50px\"}),this._observer.observe(this)):this.render()}disconnectedCallback(){var r;(r=this._observer)==null||r.disconnect()}attributeChangedCallback(r,i,n){i!==n&&this._hasRendered&&this.render()}_handleKeydown(r){if(this.getAttribute(\"tabindex\")!==null&&(r.key===\" \"||r.key===\"Enter\")){r.preventDefault();let n=this.getAttribute(\"aria-label\");if(n&&\"speechSynthesis\"in window){let o=new SpeechSynthesisUtterance(n);speechSynthesis.speak(o)}}}get mode(){let r=this.getAttribute(\"mode\");return r===\"textstyle\"||r===\"displaystyle\"?r:this.getDefaultMathstyle()}set mode(r){this.setAttribute(\"mode\",r)}get format(){let r=this.getAttribute(\"format\");return r===\"latex\"||r===\"ascii-math\"||r===\"math-json\"?r:\"latex\"}set format(r){this.setAttribute(\"format\",r)}get letterShapeStyle(){let r=this.getAttribute(\"letter-shape-style\");if(r===\"auto\"||r===\"tex\"||r===\"iso\"||r===\"french\"||r===\"upright\")return r}set letterShapeStyle(r){r===void 0?this.removeAttribute(\"letter-shape-style\"):this.setAttribute(\"letter-shape-style\",r)}get macros(){var r;return(r=this.getAttribute(\"macros\"))!=null?r:void 0}set macros(r){r===void 0?this.removeAttribute(\"macros\"):this.setAttribute(\"macros\",r)}get minFontScale(){let r=this.getAttribute(\"min-font-scale\");return r?parseFloat(r):void 0}set minFontScale(r){r===void 0?this.removeAttribute(\"min-font-scale\"):this.setAttribute(\"min-font-scale\",String(r))}get maxMatrixCols(){let r=this.getAttribute(\"max-matrix-cols\");return r?parseInt(r,10):void 0}set maxMatrixCols(r){r===void 0?this.removeAttribute(\"max-matrix-cols\"):this.setAttribute(\"max-matrix-cols\",String(r))}render(){var r,i,n;try{let o=(i=(r=this.textContent)==null?void 0:r.trim())!=null?i:\"\";if(!o){this._renderContainer.innerHTML=\"\",this._errorFallback.style.display=\"none\",this._renderContainer.style.display=\"none\",this._removeMathML();return}this._contentSlot.textContent=o;let a,s=this.format;if(s===\"ascii-math\")a=hh(o);else if(s===\"math-json\"){let u=JSON.parse(o);a=zs(u)}else a=o;let l={defaultMode:this.mode===\"displaystyle\"?\"math\":\"inline-math\"};if(this.letterShapeStyle&&(l.letterShapeStyle=this.letterShapeStyle),this.macros)try{l.macros=JSON.parse(this.macros)}catch(u){console.warn(\"Invalid macros JSON:\",u)}this.minFontScale!==void 0&&(l.minFontScale=this.minFontScale),this.maxMatrixCols!==void 0&&(l.maxMatrixCols=this.maxMatrixCols);let c=he(a,l);this._renderContainer.innerHTML=c,this._renderContainer.style.display=this.getDefaultDisplay(),this._errorFallback.style.display=\"none\",this._updateAccessibility(a),this._hasRendered=!0,this.dispatchEvent(new CustomEvent(\"render\",{bubbles:!0,composed:!0,detail:{format:s,content:a}}))}catch(o){console.error(\"MathLive static element render error:\",o),this._renderContainer.style.display=\"none\",this._errorFallback.textContent=(n=this.textContent)!=null?n:\"\",this._errorFallback.style.display=\"block\",this._removeMathML(),this.dispatchEvent(new CustomEvent(\"render-error\",{bubbles:!0,composed:!0,detail:{error:o,content:this.textContent}}))}}_updateAccessibility(r){if(!this.hasAttribute(\"aria-label\"))try{let i=Is(r);this.setAttribute(\"aria-label\",i)}catch(i){console.warn(\"Could not generate speakable text:\",i)}this.hasAttribute(\"role\")||this.setAttribute(\"role\",\"img\"),this._addMathML(r)}_addMathML(r){try{let i=Rs(r);this._mathMLContainer||(this._mathMLContainer=document.createElement(\"div\"),this._mathMLContainer.style.position=\"absolute\",this._mathMLContainer.style.width=\"1px\",this._mathMLContainer.style.height=\"1px\",this._mathMLContainer.style.overflow=\"hidden\",this._mathMLContainer.style.clip=\"rect(0, 0, 0, 0)\",this._mathMLContainer.setAttribute(\"aria-hidden\",\"false\"),this._shadowRoot.appendChild(this._mathMLContainer)),this._mathMLContainer.innerHTML=i}catch(i){console.warn(\"Could not generate MathML:\",i)}}_removeMathML(){this._mathMLContainer&&(this._mathMLContainer.remove(),this._mathMLContainer=void 0)}},Ws=class extends Hs{getDefaultMathstyle(){return\"textstyle\"}getDefaultDisplay(){return\"inline-flex\"}},Us=class extends Hs{getDefaultMathstyle(){return\"displaystyle\"}getDefaultDisplay(){return\"flex\"}};function xy(){var t,e,r,i;typeof window!=\"undefined\"&&((t=window.customElements)!=null&&t.get(\"math-span\")||(e=window.customElements)==null||e.define(\"math-span\",Ws),(r=window.customElements)!=null&&r.get(\"math-div\")||(i=window.customElements)==null||i.define(\"math-div\",Us))}xy();function Gt(){var t,e;return(e=globalThis[t=Symbol.for(\"io.cortexjs.mathlive\")])!=null||(globalThis[t]={}),globalThis[Symbol.for(\"io.cortexjs.mathlive\")]}function Ek(t){document.readyState===\"loading\"?document.addEventListener(\"DOMContentLoaded\",()=>Qc(document.body,t)):Qc(document.body,t)}function vy(t){if(typeof t==\"string\"){let e=document.getElementById(t);if(e===null)throw new Error(`The element with ID \"${t}\" could not be found.`);return e}return t}function Qc(t,e){var n,o,a,s;if(document.readyState===\"loading\"){document.addEventListener(\"DOMContentLoaded\",()=>Qc(t,e));return}let r=vy(t);if(!r)return;let i=e!=null?e:{};(n=i.renderToMarkup)!=null||(i.renderToMarkup=he),(o=i.renderToMathML)!=null||(i.renderToMathML=Rs),(a=i.renderToSpeakableText)!=null||(i.renderToSpeakableText=Is),(s=i.serializeToLatex)!=null||(i.serializeToLatex=zs),Ph(r,i)}var Tk={mathlive:\"0.108.2\"};export{Us as MathDivElement,Ws as MathSpanElement,_t as MathfieldElement,Ph as _renderMathInElement,hh as convertAsciiMathToLatex,B7 as convertLatexToAsciiMath,he as convertLatexToMarkup,Rs as convertLatexToMathMl,Is as convertLatexToSpeakableText,zs as convertMathJsonToLatex,Gt as globalMathLive,ps as initVirtualKeyboardInCurrentBrowsingContext,Ek as renderMathInDocument,Qc as renderMathInElement,qh as setKeyboardLayout,Hh as setKeyboardLayoutLocale,O7 as validateLatex,Tk as version};\n","/**\n * Lexing or parsing positional information for error reporting.\n * This object is immutable.\n */\nclass SourceLocation {\n  // The + prefix indicates that these fields aren't writeable\n  // Lexer holding the input string.\n  // Start offset, zero-based inclusive.\n  // End offset, zero-based exclusive.\n  constructor(lexer, start, end) {\n    this.lexer = void 0;\n    this.start = void 0;\n    this.end = void 0;\n    this.lexer = lexer;\n    this.start = start;\n    this.end = end;\n  }\n  /**\n   * Merges two `SourceLocation`s from location providers, given they are\n   * provided in order of appearance.\n   * - Returns the first one's location if only the first is provided.\n   * - Returns a merged range of the first and the last if both are provided\n   *   and their lexers match.\n   * - Otherwise, returns null.\n   */\n\n\n  static range(first, second) {\n    if (!second) {\n      return first && first.loc;\n    } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {\n      return null;\n    } else {\n      return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);\n    }\n  }\n\n}\n\n/**\n * Interface required to break circular dependency between Token, Lexer, and\n * ParseError.\n */\n\n/**\n * The resulting token returned from `lex`.\n *\n * It consists of the token text plus some position information.\n * The position information is essentially a range in an input string,\n * but instead of referencing the bare input string, we refer to the lexer.\n * That way it is possible to attach extra metadata to the input string,\n * like for example a file name or similar.\n *\n * The position information is optional, so it is OK to construct synthetic\n * tokens if appropriate. Not providing available position information may\n * lead to degraded error reporting, though.\n */\nclass Token {\n  // don't expand the token\n  // used in \\noexpand\n  constructor(text, // the text of this token\n  loc) {\n    this.text = void 0;\n    this.loc = void 0;\n    this.noexpand = void 0;\n    this.treatAsRelax = void 0;\n    this.text = text;\n    this.loc = loc;\n  }\n  /**\n   * Given a pair of tokens (this and endToken), compute a `Token` encompassing\n   * the whole input range enclosed by these two.\n   */\n\n\n  range(endToken, // last token of the range, inclusive\n  text // the text of the newly constructed token\n  ) {\n    return new Token(text, SourceLocation.range(this, endToken));\n  }\n\n}\n\n/**\n * This is the ParseError class, which is the main error thrown by KaTeX\n * functions when something has gone wrong. This is used to distinguish internal\n * errors from errors in the expression that the user provided.\n *\n * If possible, a caller should provide a Token or ParseNode with information\n * about where in the source string the problem occurred.\n */\nclass ParseError {\n  // Error start position based on passed-in Token or ParseNode.\n  // Length of affected text based on passed-in Token or ParseNode.\n  // The underlying error message without any context added.\n  constructor(message, // The error message\n  token // An object providing position information\n  ) {\n    this.name = void 0;\n    this.position = void 0;\n    this.length = void 0;\n    this.rawMessage = void 0;\n    var error = \"KaTeX parse error: \" + message;\n    var start;\n    var end;\n    var loc = token && token.loc;\n\n    if (loc && loc.start <= loc.end) {\n      // If we have the input and a position, make the error a bit fancier\n      // Get the input\n      var input = loc.lexer.input; // Prepend some information\n\n      start = loc.start;\n      end = loc.end;\n\n      if (start === input.length) {\n        error += \" at end of input: \";\n      } else {\n        error += \" at position \" + (start + 1) + \": \";\n      } // Underline token in question using combining underscores\n\n\n      var underlined = input.slice(start, end).replace(/[^]/g, \"$&\\u0332\"); // Extract some context from the input and add it to the error\n\n      var left;\n\n      if (start > 15) {\n        left = \"…\" + input.slice(start - 15, start);\n      } else {\n        left = input.slice(0, start);\n      }\n\n      var right;\n\n      if (end + 15 < input.length) {\n        right = input.slice(end, end + 15) + \"…\";\n      } else {\n        right = input.slice(end);\n      }\n\n      error += left + underlined + right;\n    } // Some hackery to make ParseError a prototype of Error\n    // See http://stackoverflow.com/a/8460753\n    // $FlowFixMe\n\n\n    var self = new Error(error);\n    self.name = \"ParseError\"; // $FlowFixMe\n\n    self.__proto__ = ParseError.prototype;\n    self.position = start;\n\n    if (start != null && end != null) {\n      self.length = end - start;\n    }\n\n    self.rawMessage = message;\n    return self;\n  }\n\n} // $FlowFixMe More hackery\n\n\nParseError.prototype.__proto__ = Error.prototype;\n\n/**\n * This file contains a list of utility functions which are useful in other\n * files.\n */\n\n/**\n * Provide a default value if a setting is undefined\n * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022.\n */\nvar deflt = function deflt(setting, defaultIfUndefined) {\n  return setting === undefined ? defaultIfUndefined : setting;\n}; // hyphenate and escape adapted from Facebook's React under Apache 2 license\n\n\nvar uppercase = /([A-Z])/g;\n\nvar hyphenate = function hyphenate(str) {\n  return str.replace(uppercase, \"-$1\").toLowerCase();\n};\n\nvar ESCAPE_LOOKUP = {\n  \"&\": \"&amp;\",\n  \">\": \"&gt;\",\n  \"<\": \"&lt;\",\n  \"\\\"\": \"&quot;\",\n  \"'\": \"&#x27;\"\n};\nvar ESCAPE_REGEX = /[&><\"']/g;\n/**\n * Escapes text to prevent scripting attacks.\n */\n\nfunction escape(text) {\n  return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]);\n}\n/**\n * Sometimes we want to pull out the innermost element of a group. In most\n * cases, this will just be the group itself, but when ordgroups and colors have\n * a single element, we want to pull that out.\n */\n\n\nvar getBaseElem = function getBaseElem(group) {\n  if (group.type === \"ordgroup\") {\n    if (group.body.length === 1) {\n      return getBaseElem(group.body[0]);\n    } else {\n      return group;\n    }\n  } else if (group.type === \"color\") {\n    if (group.body.length === 1) {\n      return getBaseElem(group.body[0]);\n    } else {\n      return group;\n    }\n  } else if (group.type === \"font\") {\n    return getBaseElem(group.body);\n  } else {\n    return group;\n  }\n};\n/**\n * TeXbook algorithms often reference \"character boxes\", which are simply groups\n * with a single character in them. To decide if something is a character box,\n * we find its innermost group, and see if it is a single character.\n */\n\n\nvar isCharacterBox = function isCharacterBox(group) {\n  var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters\n\n  return baseElem.type === \"mathord\" || baseElem.type === \"textord\" || baseElem.type === \"atom\";\n};\n\nvar assert = function assert(value) {\n  if (!value) {\n    throw new Error('Expected non-null, but got ' + String(value));\n  }\n\n  return value;\n};\n/**\n * Return the protocol of a URL, or \"_relative\" if the URL does not specify a\n * protocol (and thus is relative), or `null` if URL has invalid protocol\n * (so should be outright rejected).\n */\n\nvar protocolFromUrl = function protocolFromUrl(url) {\n  // Check for possible leading protocol.\n  // https://url.spec.whatwg.org/#url-parsing strips leading whitespace\n  // (U+20) or C0 control (U+00-U+1F) characters.\n  // eslint-disable-next-line no-control-regex\n  var protocol = /^[\\x00-\\x20]*([^\\\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(url);\n\n  if (!protocol) {\n    return \"_relative\";\n  } // Reject weird colons\n\n\n  if (protocol[2] !== \":\") {\n    return null;\n  } // Reject invalid characters in scheme according to\n  // https://datatracker.ietf.org/doc/html/rfc3986#section-3.1\n\n\n  if (!/^[a-zA-Z][a-zA-Z0-9+\\-.]*$/.test(protocol[1])) {\n    return null;\n  } // Lowercase the protocol\n\n\n  return protocol[1].toLowerCase();\n};\nvar utils = {\n  deflt,\n  escape,\n  hyphenate,\n  getBaseElem,\n  isCharacterBox,\n  protocolFromUrl\n};\n\n/* eslint no-console:0 */\n// TODO: automatically generate documentation\n// TODO: check all properties on Settings exist\n// TODO: check the type of a property on Settings matches\nvar SETTINGS_SCHEMA = {\n  displayMode: {\n    type: \"boolean\",\n    description: \"Render math in display mode, which puts the math in \" + \"display style (so \\\\int and \\\\sum are large, for example), and \" + \"centers the math on the page on its own line.\",\n    cli: \"-d, --display-mode\"\n  },\n  output: {\n    type: {\n      enum: [\"htmlAndMathml\", \"html\", \"mathml\"]\n    },\n    description: \"Determines the markup language of the output.\",\n    cli: \"-F, --format <type>\"\n  },\n  leqno: {\n    type: \"boolean\",\n    description: \"Render display math in leqno style (left-justified tags).\"\n  },\n  fleqn: {\n    type: \"boolean\",\n    description: \"Render display math flush left.\"\n  },\n  throwOnError: {\n    type: \"boolean\",\n    default: true,\n    cli: \"-t, --no-throw-on-error\",\n    cliDescription: \"Render errors (in the color given by --error-color) ins\" + \"tead of throwing a ParseError exception when encountering an error.\"\n  },\n  errorColor: {\n    type: \"string\",\n    default: \"#cc0000\",\n    cli: \"-c, --error-color <color>\",\n    cliDescription: \"A color string given in the format 'rgb' or 'rrggbb' \" + \"(no #). This option determines the color of errors rendered by the \" + \"-t option.\",\n    cliProcessor: color => \"#\" + color\n  },\n  macros: {\n    type: \"object\",\n    cli: \"-m, --macro <def>\",\n    cliDescription: \"Define custom macro of the form '\\\\foo:expansion' (use \" + \"multiple -m arguments for multiple macros).\",\n    cliDefault: [],\n    cliProcessor: (def, defs) => {\n      defs.push(def);\n      return defs;\n    }\n  },\n  minRuleThickness: {\n    type: \"number\",\n    description: \"Specifies a minimum thickness, in ems, for fraction lines,\" + \" `\\\\sqrt` top lines, `{array}` vertical lines, `\\\\hline`, \" + \"`\\\\hdashline`, `\\\\underline`, `\\\\overline`, and the borders of \" + \"`\\\\fbox`, `\\\\boxed`, and `\\\\fcolorbox`.\",\n    processor: t => Math.max(0, t),\n    cli: \"--min-rule-thickness <size>\",\n    cliProcessor: parseFloat\n  },\n  colorIsTextColor: {\n    type: \"boolean\",\n    description: \"Makes \\\\color behave like LaTeX's 2-argument \\\\textcolor, \" + \"instead of LaTeX's one-argument \\\\color mode change.\",\n    cli: \"-b, --color-is-text-color\"\n  },\n  strict: {\n    type: [{\n      enum: [\"warn\", \"ignore\", \"error\"]\n    }, \"boolean\", \"function\"],\n    description: \"Turn on strict / LaTeX faithfulness mode, which throws an \" + \"error if the input uses features that are not supported by LaTeX.\",\n    cli: \"-S, --strict\",\n    cliDefault: false\n  },\n  trust: {\n    type: [\"boolean\", \"function\"],\n    description: \"Trust the input, enabling all HTML features such as \\\\url.\",\n    cli: \"-T, --trust\"\n  },\n  maxSize: {\n    type: \"number\",\n    default: Infinity,\n    description: \"If non-zero, all user-specified sizes, e.g. in \" + \"\\\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, \" + \"elements and spaces can be arbitrarily large\",\n    processor: s => Math.max(0, s),\n    cli: \"-s, --max-size <n>\",\n    cliProcessor: parseInt\n  },\n  maxExpand: {\n    type: \"number\",\n    default: 1000,\n    description: \"Limit the number of macro expansions to the specified \" + \"number, to prevent e.g. infinite macro loops. If set to Infinity, \" + \"the macro expander will try to fully expand as in LaTeX.\",\n    processor: n => Math.max(0, n),\n    cli: \"-e, --max-expand <n>\",\n    cliProcessor: n => n === \"Infinity\" ? Infinity : parseInt(n)\n  },\n  globalGroup: {\n    type: \"boolean\",\n    cli: false\n  }\n};\n\nfunction getDefaultValue(schema) {\n  if (schema.default) {\n    return schema.default;\n  }\n\n  var type = schema.type;\n  var defaultType = Array.isArray(type) ? type[0] : type;\n\n  if (typeof defaultType !== 'string') {\n    return defaultType.enum[0];\n  }\n\n  switch (defaultType) {\n    case 'boolean':\n      return false;\n\n    case 'string':\n      return '';\n\n    case 'number':\n      return 0;\n\n    case 'object':\n      return {};\n  }\n}\n/**\n * The main Settings object\n *\n * The current options stored are:\n *  - displayMode: Whether the expression should be typeset as inline math\n *                 (false, the default), meaning that the math starts in\n *                 \\textstyle and is placed in an inline-block); or as display\n *                 math (true), meaning that the math starts in \\displaystyle\n *                 and is placed in a block with vertical margin.\n */\n\n\nclass Settings {\n  constructor(options) {\n    this.displayMode = void 0;\n    this.output = void 0;\n    this.leqno = void 0;\n    this.fleqn = void 0;\n    this.throwOnError = void 0;\n    this.errorColor = void 0;\n    this.macros = void 0;\n    this.minRuleThickness = void 0;\n    this.colorIsTextColor = void 0;\n    this.strict = void 0;\n    this.trust = void 0;\n    this.maxSize = void 0;\n    this.maxExpand = void 0;\n    this.globalGroup = void 0;\n    // allow null options\n    options = options || {};\n\n    for (var prop in SETTINGS_SCHEMA) {\n      if (SETTINGS_SCHEMA.hasOwnProperty(prop)) {\n        // $FlowFixMe\n        var schema = SETTINGS_SCHEMA[prop]; // TODO: validate options\n        // $FlowFixMe\n\n        this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema);\n      }\n    }\n  }\n  /**\n   * Report nonstrict (non-LaTeX-compatible) input.\n   * Can safely not be called if `this.strict` is false in JavaScript.\n   */\n\n\n  reportNonstrict(errorCode, errorMsg, token) {\n    var strict = this.strict;\n\n    if (typeof strict === \"function\") {\n      // Allow return value of strict function to be boolean or string\n      // (or null/undefined, meaning no further processing).\n      strict = strict(errorCode, errorMsg, token);\n    }\n\n    if (!strict || strict === \"ignore\") {\n      return;\n    } else if (strict === true || strict === \"error\") {\n      throw new ParseError(\"LaTeX-incompatible input and strict mode is set to 'error': \" + (errorMsg + \" [\" + errorCode + \"]\"), token);\n    } else if (strict === \"warn\") {\n      typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n    } else {\n      // won't happen in type-safe code\n      typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n    }\n  }\n  /**\n   * Check whether to apply strict (LaTeX-adhering) behavior for unusual\n   * input (like `\\\\`).  Unlike `nonstrict`, will not throw an error;\n   * instead, \"error\" translates to a return value of `true`, while \"ignore\"\n   * translates to a return value of `false`.  May still print a warning:\n   * \"warn\" prints a warning and returns `false`.\n   * This is for the second category of `errorCode`s listed in the README.\n   */\n\n\n  useStrictBehavior(errorCode, errorMsg, token) {\n    var strict = this.strict;\n\n    if (typeof strict === \"function\") {\n      // Allow return value of strict function to be boolean or string\n      // (or null/undefined, meaning no further processing).\n      // But catch any exceptions thrown by function, treating them\n      // like \"error\".\n      try {\n        strict = strict(errorCode, errorMsg, token);\n      } catch (error) {\n        strict = \"error\";\n      }\n    }\n\n    if (!strict || strict === \"ignore\") {\n      return false;\n    } else if (strict === true || strict === \"error\") {\n      return true;\n    } else if (strict === \"warn\") {\n      typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n      return false;\n    } else {\n      // won't happen in type-safe code\n      typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n      return false;\n    }\n  }\n  /**\n   * Check whether to test potentially dangerous input, and return\n   * `true` (trusted) or `false` (untrusted).  The sole argument `context`\n   * should be an object with `command` field specifying the relevant LaTeX\n   * command (as a string starting with `\\`), and any other arguments, etc.\n   * If `context` has a `url` field, a `protocol` field will automatically\n   * get added by this function (changing the specified object).\n   */\n\n\n  isTrusted(context) {\n    if (context.url && !context.protocol) {\n      var protocol = utils.protocolFromUrl(context.url);\n\n      if (protocol == null) {\n        return false;\n      }\n\n      context.protocol = protocol;\n    }\n\n    var trust = typeof this.trust === \"function\" ? this.trust(context) : this.trust;\n    return Boolean(trust);\n  }\n\n}\n\n/**\n * This file contains information and classes for the various kinds of styles\n * used in TeX. It provides a generic `Style` class, which holds information\n * about a specific style. It then provides instances of all the different kinds\n * of styles possible, and provides functions to move between them and get\n * information about them.\n */\n\n/**\n * The main style class. Contains a unique id for the style, a size (which is\n * the same for cramped and uncramped version of a style), and a cramped flag.\n */\nclass Style {\n  constructor(id, size, cramped) {\n    this.id = void 0;\n    this.size = void 0;\n    this.cramped = void 0;\n    this.id = id;\n    this.size = size;\n    this.cramped = cramped;\n  }\n  /**\n   * Get the style of a superscript given a base in the current style.\n   */\n\n\n  sup() {\n    return styles[sup[this.id]];\n  }\n  /**\n   * Get the style of a subscript given a base in the current style.\n   */\n\n\n  sub() {\n    return styles[sub[this.id]];\n  }\n  /**\n   * Get the style of a fraction numerator given the fraction in the current\n   * style.\n   */\n\n\n  fracNum() {\n    return styles[fracNum[this.id]];\n  }\n  /**\n   * Get the style of a fraction denominator given the fraction in the current\n   * style.\n   */\n\n\n  fracDen() {\n    return styles[fracDen[this.id]];\n  }\n  /**\n   * Get the cramped version of a style (in particular, cramping a cramped style\n   * doesn't change the style).\n   */\n\n\n  cramp() {\n    return styles[cramp[this.id]];\n  }\n  /**\n   * Get a text or display version of this style.\n   */\n\n\n  text() {\n    return styles[text$1[this.id]];\n  }\n  /**\n   * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)\n   */\n\n\n  isTight() {\n    return this.size >= 2;\n  }\n\n} // Export an interface for type checking, but don't expose the implementation.\n// This way, no more styles can be generated.\n\n\n// IDs of the different styles\nvar D = 0;\nvar Dc = 1;\nvar T = 2;\nvar Tc = 3;\nvar S = 4;\nvar Sc = 5;\nvar SS = 6;\nvar SSc = 7; // Instances of the different styles\n\nvar styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another\n\nvar sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];\nvar sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];\nvar fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];\nvar text$1 = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles.\n\nvar Style$1 = {\n  DISPLAY: styles[D],\n  TEXT: styles[T],\n  SCRIPT: styles[S],\n  SCRIPTSCRIPT: styles[SS]\n};\n\n/*\n * This file defines the Unicode scripts and script families that we\n * support. To add new scripts or families, just add a new entry to the\n * scriptData array below. Adding scripts to the scriptData array allows\n * characters from that script to appear in \\text{} environments.\n */\n\n/**\n * Each script or script family has a name and an array of blocks.\n * Each block is an array of two numbers which specify the start and\n * end points (inclusive) of a block of Unicode codepoints.\n */\n\n/**\n * Unicode block data for the families of scripts we support in \\text{}.\n * Scripts only need to appear here if they do not have font metrics.\n */\nvar scriptData = [{\n  // Latin characters beyond the Latin-1 characters we have metrics for.\n  // Needed for Czech, Hungarian and Turkish text, for example.\n  name: 'latin',\n  blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B\n  [0x0300, 0x036f] // Combining Diacritical marks\n  ]\n}, {\n  // The Cyrillic script used by Russian and related languages.\n  // A Cyrillic subset used to be supported as explicitly defined\n  // symbols in symbols.js\n  name: 'cyrillic',\n  blocks: [[0x0400, 0x04ff]]\n}, {\n  // Armenian\n  name: 'armenian',\n  blocks: [[0x0530, 0x058F]]\n}, {\n  // The Brahmic scripts of South and Southeast Asia\n  // Devanagari (0900–097F)\n  // Bengali (0980–09FF)\n  // Gurmukhi (0A00–0A7F)\n  // Gujarati (0A80–0AFF)\n  // Oriya (0B00–0B7F)\n  // Tamil (0B80–0BFF)\n  // Telugu (0C00–0C7F)\n  // Kannada (0C80–0CFF)\n  // Malayalam (0D00–0D7F)\n  // Sinhala (0D80–0DFF)\n  // Thai (0E00–0E7F)\n  // Lao (0E80–0EFF)\n  // Tibetan (0F00–0FFF)\n  // Myanmar (1000–109F)\n  name: 'brahmic',\n  blocks: [[0x0900, 0x109F]]\n}, {\n  name: 'georgian',\n  blocks: [[0x10A0, 0x10ff]]\n}, {\n  // Chinese and Japanese.\n  // The \"k\" in cjk is for Korean, but we've separated Korean out\n  name: \"cjk\",\n  blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana\n  [0x4E00, 0x9FAF], // CJK ideograms\n  [0xFF00, 0xFF60] // Fullwidth punctuation\n  // TODO: add halfwidth Katakana and Romanji glyphs\n  ]\n}, {\n  // Korean\n  name: 'hangul',\n  blocks: [[0xAC00, 0xD7AF]]\n}];\n/**\n * Given a codepoint, return the name of the script or script family\n * it is from, or null if it is not part of a known block\n */\n\nfunction scriptFromCodepoint(codepoint) {\n  for (var i = 0; i < scriptData.length; i++) {\n    var script = scriptData[i];\n\n    for (var _i = 0; _i < script.blocks.length; _i++) {\n      var block = script.blocks[_i];\n\n      if (codepoint >= block[0] && codepoint <= block[1]) {\n        return script.name;\n      }\n    }\n  }\n\n  return null;\n}\n/**\n * A flattened version of all the supported blocks in a single array.\n * This is an optimization to make supportedCodepoint() fast.\n */\n\nvar allBlocks = [];\nscriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b)));\n/**\n * Given a codepoint, return true if it falls within one of the\n * scripts or script families defined above and false otherwise.\n *\n * Micro benchmarks shows that this is faster than\n * /[\\u3000-\\u30FF\\u4E00-\\u9FAF\\uFF00-\\uFF60\\uAC00-\\uD7AF\\u0900-\\u109F]/.test()\n * in Firefox, Chrome and Node.\n */\n\nfunction supportedCodepoint(codepoint) {\n  for (var i = 0; i < allBlocks.length; i += 2) {\n    if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * This file provides support to domTree.js and delimiter.js.\n * It's a storehouse of path geometry for SVG images.\n */\n// In all paths below, the viewBox-to-em scale is 1000:1.\nvar hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping.\n// The vinculum of a \\sqrt can be made thicker by a KaTeX rendering option.\n// Think of variable extraVinculum as two detours in the SVG path.\n// The detour begins at the lower left of the area labeled extraVinculum below.\n// The detour proceeds one extraVinculum distance up and slightly to the right,\n// displacing the radiused corner between surd and vinculum. The radius is\n// traversed as usual, then the detour resumes. It goes right, to the end of\n// the very long vinculum, then down one extraVinculum distance,\n// after which it resumes regular path geometry for the radical.\n\n/*                                                  vinculum\n                                                   /\n         /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraVinculum\n        / █████████████████████←0.04em (40 unit) std vinculum thickness\n       / /\n      / /\n     / /\\\n    / / surd\n*/\n\nvar sqrtMain = function sqrtMain(extraVinculum, hLinePad) {\n  // sqrtMain path geometry is from glyph U221A in the font KaTeX Main\n  return \"M95,\" + (622 + extraVinculum + hLinePad) + \"\\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\\nc69,-144,104.5,-217.7,106.5,-221\\nl\" + extraVinculum / 2.075 + \" -\" + extraVinculum + \"\\nc5.3,-9.3,12,-14,20,-14\\nH400000v\" + (40 + extraVinculum) + \"H845.2724\\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\\nM\" + (834 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize1 = function sqrtSize1(extraVinculum, hLinePad) {\n  // size1 is from glyph U221A in the font KaTeX_Size1-Regular\n  return \"M263,\" + (601 + extraVinculum + hLinePad) + \"c0.7,0,18,39.7,52,119\\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\\nc340,-704.7,510.7,-1060.3,512,-1067\\nl\" + extraVinculum / 2.084 + \" -\" + extraVinculum + \"\\nc4.7,-7.3,11,-11,19,-11\\nH40000v\" + (40 + extraVinculum) + \"H1012.3\\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize2 = function sqrtSize2(extraVinculum, hLinePad) {\n  // size2 is from glyph U221A in the font KaTeX_Size2-Regular\n  return \"M983 \" + (10 + extraVinculum + hLinePad) + \"\\nl\" + extraVinculum / 3.13 + \" -\" + extraVinculum + \"\\nc4,-6.7,10,-10,18,-10 H400000v\" + (40 + extraVinculum) + \"\\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize3 = function sqrtSize3(extraVinculum, hLinePad) {\n  // size3 is from glyph U221A in the font KaTeX_Size3-Regular\n  return \"M424,\" + (2398 + extraVinculum + hLinePad) + \"\\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\\nl\" + extraVinculum / 4.223 + \" -\" + extraVinculum + \"c4,-6.7,10,-10,18,-10 H400000\\nv\" + (40 + extraVinculum) + \"H1014.6\\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\\nc-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2z M\" + (1001 + extraVinculum) + \" \" + hLinePad + \"\\nh400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize4 = function sqrtSize4(extraVinculum, hLinePad) {\n  // size4 is from glyph U221A in the font KaTeX_Size4-Regular\n  return \"M473,\" + (2713 + extraVinculum + hLinePad) + \"\\nc339.3,-1799.3,509.3,-2700,510,-2702 l\" + extraVinculum / 5.298 + \" -\" + extraVinculum + \"\\nc3.3,-7.3,9.3,-11,18,-11 H400000v\" + (40 + extraVinculum) + \"H1017.7\\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\\n606zM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"H1017.7z\";\n};\n\nvar phasePath = function phasePath(y) {\n  var x = y / 2; // x coordinate at top of angle\n\n  return \"M400000 \" + y + \" H0 L\" + x + \" 0 l65 45 L145 \" + (y - 80) + \" H400000z\";\n};\n\nvar sqrtTall = function sqrtTall(extraVinculum, hLinePad, viewBoxHeight) {\n  // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular\n  // One path edge has a variable length. It runs vertically from the vinculum\n  // to a point near (14 units) the bottom of the surd. The vinculum\n  // is normally 40 units thick. So the length of the line in question is:\n  var vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum;\n  return \"M702 \" + (extraVinculum + hLinePad) + \"H400000\" + (40 + extraVinculum) + \"\\nH742v\" + vertSegment + \"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\\n219 661 l218 661zM702 \" + hLinePad + \"H400000v\" + (40 + extraVinculum) + \"H742z\";\n};\n\nvar sqrtPath = function sqrtPath(size, extraVinculum, viewBoxHeight) {\n  extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox.\n\n  var path = \"\";\n\n  switch (size) {\n    case \"sqrtMain\":\n      path = sqrtMain(extraVinculum, hLinePad);\n      break;\n\n    case \"sqrtSize1\":\n      path = sqrtSize1(extraVinculum, hLinePad);\n      break;\n\n    case \"sqrtSize2\":\n      path = sqrtSize2(extraVinculum, hLinePad);\n      break;\n\n    case \"sqrtSize3\":\n      path = sqrtSize3(extraVinculum, hLinePad);\n      break;\n\n    case \"sqrtSize4\":\n      path = sqrtSize4(extraVinculum, hLinePad);\n      break;\n\n    case \"sqrtTall\":\n      path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight);\n  }\n\n  return path;\n};\nvar innerPath = function innerPath(name, height) {\n  // The inner part of stretchy tall delimiters\n  switch (name) {\n    case \"\\u239c\":\n      return \"M291 0 H417 V\" + height + \" H291z M291 0 H417 V\" + height + \" H291z\";\n\n    case \"\\u2223\":\n      return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\";\n\n    case \"\\u2225\":\n      return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\" + (\"M367 0 H410 V\" + height + \" H367z M367 0 H410 V\" + height + \" H367z\");\n\n    case \"\\u239f\":\n      return \"M457 0 H583 V\" + height + \" H457z M457 0 H583 V\" + height + \" H457z\";\n\n    case \"\\u23a2\":\n      return \"M319 0 H403 V\" + height + \" H319z M319 0 H403 V\" + height + \" H319z\";\n\n    case \"\\u23a5\":\n      return \"M263 0 H347 V\" + height + \" H263z M263 0 H347 V\" + height + \" H263z\";\n\n    case \"\\u23aa\":\n      return \"M384 0 H504 V\" + height + \" H384z M384 0 H504 V\" + height + \" H384z\";\n\n    case \"\\u23d0\":\n      return \"M312 0 H355 V\" + height + \" H312z M312 0 H355 V\" + height + \" H312z\";\n\n    case \"\\u2016\":\n      return \"M257 0 H300 V\" + height + \" H257z M257 0 H300 V\" + height + \" H257z\" + (\"M478 0 H521 V\" + height + \" H478z M478 0 H521 V\" + height + \" H478z\");\n\n    default:\n      return \"\";\n  }\n};\nvar path = {\n  // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main\n  doubleleftarrow: \"M262 157\\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\\nm8 0v40h399730v-40zm0 194v40h399730v-40z\",\n  // doublerightarrow is from glyph U+21D2 in font KaTeX Main\n  doublerightarrow: \"M399738 392l\\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z\",\n  // leftarrow is from glyph U+2190 in font KaTeX Main\n  leftarrow: \"M400000 241H110l3-3c68.7-52.7 113.7-120\\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\\n l-3-3h399890zM100 241v40h399900v-40z\",\n  // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular\n  leftbrace: \"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z\",\n  leftbraceunder: \"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z\",\n  // overgroup is from the MnSymbol package (public domain)\n  leftgroup: \"M400000 80\\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\\n 435 0h399565z\",\n  leftgroupunder: \"M400000 262\\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\\n 435 219h399565z\",\n  // Harpoons are from glyph U+21BD in font KaTeX Main\n  leftharpoon: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z\",\n  leftharpoonplus: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\\nm0 0v40h400000v-40z\",\n  leftharpoondown: \"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z\",\n  leftharpoondownplus: \"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z\",\n  // hook is from glyph U+21A9 in font KaTeX Main\n  lefthook: \"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\\n 71.5 23h399859zM103 281v-40h399897v40z\",\n  leftlinesegment: \"M40 281 V428 H0 V94 H40 V241 H400000 v40z\\nM40 281 V428 H0 V94 H40 V241 H400000 v40z\",\n  leftmapsto: \"M40 281 V448H0V74H40V241H400000v40z\\nM40 281 V448H0V74H40V241H400000v40z\",\n  // tofrom is from glyph U+21C4 in font KaTeX AMS Regular\n  leftToFrom: \"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z\",\n  longequal: \"M0 50 h400000 v40H0z m0 194h40000v40H0z\\nM0 50 h400000 v40H0z m0 194h40000v40H0z\",\n  midbrace: \"M200428 334\\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z\",\n  midbraceunder: \"M199572 214\\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z\",\n  oiintSize1: \"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z\",\n  oiintSize2: \"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\\nc0 110 84 276 504 276s502.4-166 502.4-276z\",\n  oiiintSize1: \"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z\",\n  oiiintSize2: \"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z\",\n  rightarrow: \"M0 241v40h399891c-47.3 35.3-84 78-110 128\\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n 151.7 139 205zm0 0v40h399900v-40z\",\n  rightbrace: \"M400000 542l\\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z\",\n  rightbraceunder: \"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z\",\n  rightgroup: \"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\\n 3-1 3-3v-38c-76-158-257-219-435-219H0z\",\n  rightgroupunder: \"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z\",\n  rightharpoon: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\\n 69.2 92 94.5zm0 0v40h399900v-40z\",\n  rightharpoonplus: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z\",\n  rightharpoondown: \"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z\",\n  rightharpoondownplus: \"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\\nm0-194v40h400000v-40zm0 0v40h400000v-40z\",\n  righthook: \"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z\",\n  rightlinesegment: \"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z\",\n  rightToFrom: \"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z\",\n  // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular\n  twoheadleftarrow: \"M0 167c68 40\\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z\",\n  twoheadrightarrow: \"M400000 167\\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z\",\n  // tilde1 is a modified version of a glyph from the MnSymbol package\n  tilde1: \"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\\n-68.267.847-113-73.952-191-73.952z\",\n  // ditto tilde2, tilde3, & tilde4\n  tilde2: \"M344 55.266c-142 0-300.638 81.316-311.5 86.418\\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z\",\n  tilde3: \"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\\n -338 0-409-156.573-744-156.573z\",\n  tilde4: \"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\\n -175.236-744-175.236z\",\n  // vec is from glyph U+20D7 in font KaTeX Main\n  vec: \"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\\nc-16-25.333-24-45-24-59z\",\n  // widehat1 is a modified version of a glyph from the MnSymbol package\n  widehat1: \"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z\",\n  // ditto widehat2, widehat3, & widehat4\n  widehat2: \"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n  widehat3: \"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n  widehat4: \"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n  // widecheck paths are all inverted versions of widehat\n  widecheck1: \"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z\",\n  widecheck2: \"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n  widecheck3: \"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n  widecheck4: \"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n  // The next ten paths support reaction arrows from the mhchem package.\n  // Arrows for \\ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX\n  // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main\n  baraboveleftarrow: \"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z\",\n  // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main\n  rightarrowabovebar: \"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z\",\n  // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.\n  // Ref from mhchem.sty: \\rlap{\\raisebox{-.22ex}{$\\kern0.5em\n  baraboveshortleftharpoon: \"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z\",\n  rightharpoonaboveshortbar: \"M0,241 l0,40c399126,0,399993,0,399993,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z\",\n  shortbaraboveleftharpoon: \"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z\",\n  shortrightharpoonabovebar: \"M53,241l0,40c398570,0,399437,0,399437,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z\"\n};\nvar tallDelim = function tallDelim(label, midHeight) {\n  switch (label) {\n    case \"lbrack\":\n      return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v1759 h347 v-84\\nH403z M403 1759 V0 H319 V1759 v\" + midHeight + \" v1759 h84z\";\n\n    case \"rbrack\":\n      return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v1759 H0 v84 H347z\\nM347 1759 V0 H263 V1759 v\" + midHeight + \" v1759 h84z\";\n\n    case \"vert\":\n      return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\";\n\n    case \"doublevert\":\n      return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\\nM367 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v\" + midHeight + \" v585 h43z\";\n\n    case \"lfloor\":\n      return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1715 h263 v84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n\n    case \"rfloor\":\n      return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1799 H0 v-84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n\n    case \"lceil\":\n      return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v602 h84z\\nM403 1759 V0 H319 V1759 v\" + midHeight + \" v602 h84z\";\n\n    case \"rceil\":\n      return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v602 h84z\\nM347 1759 V0 h-84 V1759 v\" + midHeight + \" v602 h84z\";\n\n    case \"lparen\":\n      return \"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\\n-36,557 l0,\" + (midHeight + 84) + \"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\\nl0,-\" + (midHeight + 92) + \"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z\";\n\n    case \"rparen\":\n      return \"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,\" + (midHeight + 9) + \"\\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\\nl0,-\" + (midHeight + 144) + \"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z\";\n\n    default:\n      // We should not ever get here.\n      throw new Error(\"Unknown stretchy delimiter.\");\n  }\n};\n\n// To ensure that all nodes have compatible signatures for these methods.\n\n/**\n * This node represents a document fragment, which contains elements, but when\n * placed into the DOM doesn't have any representation itself. It only contains\n * children and doesn't have any DOM node properties.\n */\nclass DocumentFragment {\n  // Never used; needed for satisfying interface.\n  constructor(children) {\n    this.children = void 0;\n    this.classes = void 0;\n    this.height = void 0;\n    this.depth = void 0;\n    this.maxFontSize = void 0;\n    this.style = void 0;\n    this.children = children;\n    this.classes = [];\n    this.height = 0;\n    this.depth = 0;\n    this.maxFontSize = 0;\n    this.style = {};\n  }\n\n  hasClass(className) {\n    return this.classes.includes(className);\n  }\n  /** Convert the fragment into a node. */\n\n\n  toNode() {\n    var frag = document.createDocumentFragment();\n\n    for (var i = 0; i < this.children.length; i++) {\n      frag.appendChild(this.children[i].toNode());\n    }\n\n    return frag;\n  }\n  /** Convert the fragment into HTML markup. */\n\n\n  toMarkup() {\n    var markup = \"\"; // Simply concatenate the markup for the children together.\n\n    for (var i = 0; i < this.children.length; i++) {\n      markup += this.children[i].toMarkup();\n    }\n\n    return markup;\n  }\n  /**\n   * Converts the math node into a string, similar to innerText. Applies to\n   * MathDomNode's only.\n   */\n\n\n  toText() {\n    // To avoid this, we would subclass documentFragment separately for\n    // MathML, but polyfills for subclassing is expensive per PR 1469.\n    // $FlowFixMe: Only works for ChildType = MathDomNode.\n    var toText = child => child.toText();\n\n    return this.children.map(toText).join(\"\");\n  }\n\n}\n\n// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.\nvar fontMetricsData = {\n  \"AMS-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"65\": [0, 0.68889, 0, 0, 0.72222],\n    \"66\": [0, 0.68889, 0, 0, 0.66667],\n    \"67\": [0, 0.68889, 0, 0, 0.72222],\n    \"68\": [0, 0.68889, 0, 0, 0.72222],\n    \"69\": [0, 0.68889, 0, 0, 0.66667],\n    \"70\": [0, 0.68889, 0, 0, 0.61111],\n    \"71\": [0, 0.68889, 0, 0, 0.77778],\n    \"72\": [0, 0.68889, 0, 0, 0.77778],\n    \"73\": [0, 0.68889, 0, 0, 0.38889],\n    \"74\": [0.16667, 0.68889, 0, 0, 0.5],\n    \"75\": [0, 0.68889, 0, 0, 0.77778],\n    \"76\": [0, 0.68889, 0, 0, 0.66667],\n    \"77\": [0, 0.68889, 0, 0, 0.94445],\n    \"78\": [0, 0.68889, 0, 0, 0.72222],\n    \"79\": [0.16667, 0.68889, 0, 0, 0.77778],\n    \"80\": [0, 0.68889, 0, 0, 0.61111],\n    \"81\": [0.16667, 0.68889, 0, 0, 0.77778],\n    \"82\": [0, 0.68889, 0, 0, 0.72222],\n    \"83\": [0, 0.68889, 0, 0, 0.55556],\n    \"84\": [0, 0.68889, 0, 0, 0.66667],\n    \"85\": [0, 0.68889, 0, 0, 0.72222],\n    \"86\": [0, 0.68889, 0, 0, 0.72222],\n    \"87\": [0, 0.68889, 0, 0, 1.0],\n    \"88\": [0, 0.68889, 0, 0, 0.72222],\n    \"89\": [0, 0.68889, 0, 0, 0.72222],\n    \"90\": [0, 0.68889, 0, 0, 0.66667],\n    \"107\": [0, 0.68889, 0, 0, 0.55556],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"165\": [0, 0.675, 0.025, 0, 0.75],\n    \"174\": [0.15559, 0.69224, 0, 0, 0.94666],\n    \"240\": [0, 0.68889, 0, 0, 0.55556],\n    \"295\": [0, 0.68889, 0, 0, 0.54028],\n    \"710\": [0, 0.825, 0, 0, 2.33334],\n    \"732\": [0, 0.9, 0, 0, 2.33334],\n    \"770\": [0, 0.825, 0, 0, 2.33334],\n    \"771\": [0, 0.9, 0, 0, 2.33334],\n    \"989\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"1008\": [0, 0.43056, 0.04028, 0, 0.66667],\n    \"8245\": [0, 0.54986, 0, 0, 0.275],\n    \"8463\": [0, 0.68889, 0, 0, 0.54028],\n    \"8487\": [0, 0.68889, 0, 0, 0.72222],\n    \"8498\": [0, 0.68889, 0, 0, 0.55556],\n    \"8502\": [0, 0.68889, 0, 0, 0.66667],\n    \"8503\": [0, 0.68889, 0, 0, 0.44445],\n    \"8504\": [0, 0.68889, 0, 0, 0.66667],\n    \"8513\": [0, 0.68889, 0, 0, 0.63889],\n    \"8592\": [-0.03598, 0.46402, 0, 0, 0.5],\n    \"8594\": [-0.03598, 0.46402, 0, 0, 0.5],\n    \"8602\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8603\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8606\": [0.01354, 0.52239, 0, 0, 1.0],\n    \"8608\": [0.01354, 0.52239, 0, 0, 1.0],\n    \"8610\": [0.01354, 0.52239, 0, 0, 1.11111],\n    \"8611\": [0.01354, 0.52239, 0, 0, 1.11111],\n    \"8619\": [0, 0.54986, 0, 0, 1.0],\n    \"8620\": [0, 0.54986, 0, 0, 1.0],\n    \"8621\": [-0.13313, 0.37788, 0, 0, 1.38889],\n    \"8622\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8624\": [0, 0.69224, 0, 0, 0.5],\n    \"8625\": [0, 0.69224, 0, 0, 0.5],\n    \"8630\": [0, 0.43056, 0, 0, 1.0],\n    \"8631\": [0, 0.43056, 0, 0, 1.0],\n    \"8634\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8635\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8638\": [0.19444, 0.69224, 0, 0, 0.41667],\n    \"8639\": [0.19444, 0.69224, 0, 0, 0.41667],\n    \"8642\": [0.19444, 0.69224, 0, 0, 0.41667],\n    \"8643\": [0.19444, 0.69224, 0, 0, 0.41667],\n    \"8644\": [0.1808, 0.675, 0, 0, 1.0],\n    \"8646\": [0.1808, 0.675, 0, 0, 1.0],\n    \"8647\": [0.1808, 0.675, 0, 0, 1.0],\n    \"8648\": [0.19444, 0.69224, 0, 0, 0.83334],\n    \"8649\": [0.1808, 0.675, 0, 0, 1.0],\n    \"8650\": [0.19444, 0.69224, 0, 0, 0.83334],\n    \"8651\": [0.01354, 0.52239, 0, 0, 1.0],\n    \"8652\": [0.01354, 0.52239, 0, 0, 1.0],\n    \"8653\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8654\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8655\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8666\": [0.13667, 0.63667, 0, 0, 1.0],\n    \"8667\": [0.13667, 0.63667, 0, 0, 1.0],\n    \"8669\": [-0.13313, 0.37788, 0, 0, 1.0],\n    \"8672\": [-0.064, 0.437, 0, 0, 1.334],\n    \"8674\": [-0.064, 0.437, 0, 0, 1.334],\n    \"8705\": [0, 0.825, 0, 0, 0.5],\n    \"8708\": [0, 0.68889, 0, 0, 0.55556],\n    \"8709\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8717\": [0, 0.43056, 0, 0, 0.42917],\n    \"8722\": [-0.03598, 0.46402, 0, 0, 0.5],\n    \"8724\": [0.08198, 0.69224, 0, 0, 0.77778],\n    \"8726\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8733\": [0, 0.69224, 0, 0, 0.77778],\n    \"8736\": [0, 0.69224, 0, 0, 0.72222],\n    \"8737\": [0, 0.69224, 0, 0, 0.72222],\n    \"8738\": [0.03517, 0.52239, 0, 0, 0.72222],\n    \"8739\": [0.08167, 0.58167, 0, 0, 0.22222],\n    \"8740\": [0.25142, 0.74111, 0, 0, 0.27778],\n    \"8741\": [0.08167, 0.58167, 0, 0, 0.38889],\n    \"8742\": [0.25142, 0.74111, 0, 0, 0.5],\n    \"8756\": [0, 0.69224, 0, 0, 0.66667],\n    \"8757\": [0, 0.69224, 0, 0, 0.66667],\n    \"8764\": [-0.13313, 0.36687, 0, 0, 0.77778],\n    \"8765\": [-0.13313, 0.37788, 0, 0, 0.77778],\n    \"8769\": [-0.13313, 0.36687, 0, 0, 0.77778],\n    \"8770\": [-0.03625, 0.46375, 0, 0, 0.77778],\n    \"8774\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8776\": [-0.01688, 0.48312, 0, 0, 0.77778],\n    \"8778\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8782\": [0.06062, 0.54986, 0, 0, 0.77778],\n    \"8783\": [0.06062, 0.54986, 0, 0, 0.77778],\n    \"8785\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8786\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8787\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8790\": [0, 0.69224, 0, 0, 0.77778],\n    \"8791\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8796\": [0.08198, 0.91667, 0, 0, 0.77778],\n    \"8806\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"8807\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"8808\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"8809\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"8812\": [0.25583, 0.75583, 0, 0, 0.5],\n    \"8814\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8815\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8816\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8817\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8818\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8819\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8822\": [0.1808, 0.675, 0, 0, 0.77778],\n    \"8823\": [0.1808, 0.675, 0, 0, 0.77778],\n    \"8828\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8829\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8830\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8831\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8832\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8833\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8840\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8841\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8842\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8843\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8847\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8848\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8858\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8859\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8861\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8862\": [0, 0.675, 0, 0, 0.77778],\n    \"8863\": [0, 0.675, 0, 0, 0.77778],\n    \"8864\": [0, 0.675, 0, 0, 0.77778],\n    \"8865\": [0, 0.675, 0, 0, 0.77778],\n    \"8872\": [0, 0.69224, 0, 0, 0.61111],\n    \"8873\": [0, 0.69224, 0, 0, 0.72222],\n    \"8874\": [0, 0.69224, 0, 0, 0.88889],\n    \"8876\": [0, 0.68889, 0, 0, 0.61111],\n    \"8877\": [0, 0.68889, 0, 0, 0.61111],\n    \"8878\": [0, 0.68889, 0, 0, 0.72222],\n    \"8879\": [0, 0.68889, 0, 0, 0.72222],\n    \"8882\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8883\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8884\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8885\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8888\": [0, 0.54986, 0, 0, 1.11111],\n    \"8890\": [0.19444, 0.43056, 0, 0, 0.55556],\n    \"8891\": [0.19444, 0.69224, 0, 0, 0.61111],\n    \"8892\": [0.19444, 0.69224, 0, 0, 0.61111],\n    \"8901\": [0, 0.54986, 0, 0, 0.27778],\n    \"8903\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8905\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8906\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8907\": [0, 0.69224, 0, 0, 0.77778],\n    \"8908\": [0, 0.69224, 0, 0, 0.77778],\n    \"8909\": [-0.03598, 0.46402, 0, 0, 0.77778],\n    \"8910\": [0, 0.54986, 0, 0, 0.76042],\n    \"8911\": [0, 0.54986, 0, 0, 0.76042],\n    \"8912\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8913\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8914\": [0, 0.54986, 0, 0, 0.66667],\n    \"8915\": [0, 0.54986, 0, 0, 0.66667],\n    \"8916\": [0, 0.69224, 0, 0, 0.66667],\n    \"8918\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8919\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8920\": [0.03517, 0.54986, 0, 0, 1.33334],\n    \"8921\": [0.03517, 0.54986, 0, 0, 1.33334],\n    \"8922\": [0.38569, 0.88569, 0, 0, 0.77778],\n    \"8923\": [0.38569, 0.88569, 0, 0, 0.77778],\n    \"8926\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8927\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8928\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8929\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8934\": [0.23222, 0.74111, 0, 0, 0.77778],\n    \"8935\": [0.23222, 0.74111, 0, 0, 0.77778],\n    \"8936\": [0.23222, 0.74111, 0, 0, 0.77778],\n    \"8937\": [0.23222, 0.74111, 0, 0, 0.77778],\n    \"8938\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8939\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8940\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8941\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8994\": [0.19444, 0.69224, 0, 0, 0.77778],\n    \"8995\": [0.19444, 0.69224, 0, 0, 0.77778],\n    \"9416\": [0.15559, 0.69224, 0, 0, 0.90222],\n    \"9484\": [0, 0.69224, 0, 0, 0.5],\n    \"9488\": [0, 0.69224, 0, 0, 0.5],\n    \"9492\": [0, 0.37788, 0, 0, 0.5],\n    \"9496\": [0, 0.37788, 0, 0, 0.5],\n    \"9585\": [0.19444, 0.68889, 0, 0, 0.88889],\n    \"9586\": [0.19444, 0.74111, 0, 0, 0.88889],\n    \"9632\": [0, 0.675, 0, 0, 0.77778],\n    \"9633\": [0, 0.675, 0, 0, 0.77778],\n    \"9650\": [0, 0.54986, 0, 0, 0.72222],\n    \"9651\": [0, 0.54986, 0, 0, 0.72222],\n    \"9654\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"9660\": [0, 0.54986, 0, 0, 0.72222],\n    \"9661\": [0, 0.54986, 0, 0, 0.72222],\n    \"9664\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"9674\": [0.11111, 0.69224, 0, 0, 0.66667],\n    \"9733\": [0.19444, 0.69224, 0, 0, 0.94445],\n    \"10003\": [0, 0.69224, 0, 0, 0.83334],\n    \"10016\": [0, 0.69224, 0, 0, 0.83334],\n    \"10731\": [0.11111, 0.69224, 0, 0, 0.66667],\n    \"10846\": [0.19444, 0.75583, 0, 0, 0.61111],\n    \"10877\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"10878\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"10885\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"10886\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"10887\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"10888\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"10889\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10890\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10891\": [0.48256, 0.98256, 0, 0, 0.77778],\n    \"10892\": [0.48256, 0.98256, 0, 0, 0.77778],\n    \"10901\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"10902\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"10933\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"10934\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"10935\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10936\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10937\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10938\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10949\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"10950\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"10955\": [0.28481, 0.79383, 0, 0, 0.77778],\n    \"10956\": [0.28481, 0.79383, 0, 0, 0.77778],\n    \"57350\": [0.08167, 0.58167, 0, 0, 0.22222],\n    \"57351\": [0.08167, 0.58167, 0, 0, 0.38889],\n    \"57352\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"57353\": [0, 0.43056, 0.04028, 0, 0.66667],\n    \"57356\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57357\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57358\": [0.41951, 0.91951, 0, 0, 0.77778],\n    \"57359\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"57360\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"57361\": [0.41951, 0.91951, 0, 0, 0.77778],\n    \"57366\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57367\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57368\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57369\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57370\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"57371\": [0.13597, 0.63597, 0, 0, 0.77778]\n  },\n  \"Caligraphic-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"65\": [0, 0.68333, 0, 0.19445, 0.79847],\n    \"66\": [0, 0.68333, 0.03041, 0.13889, 0.65681],\n    \"67\": [0, 0.68333, 0.05834, 0.13889, 0.52653],\n    \"68\": [0, 0.68333, 0.02778, 0.08334, 0.77139],\n    \"69\": [0, 0.68333, 0.08944, 0.11111, 0.52778],\n    \"70\": [0, 0.68333, 0.09931, 0.11111, 0.71875],\n    \"71\": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],\n    \"72\": [0, 0.68333, 0.00965, 0.11111, 0.84452],\n    \"73\": [0, 0.68333, 0.07382, 0, 0.54452],\n    \"74\": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],\n    \"75\": [0, 0.68333, 0.01445, 0.05556, 0.76195],\n    \"76\": [0, 0.68333, 0, 0.13889, 0.68972],\n    \"77\": [0, 0.68333, 0, 0.13889, 1.2009],\n    \"78\": [0, 0.68333, 0.14736, 0.08334, 0.82049],\n    \"79\": [0, 0.68333, 0.02778, 0.11111, 0.79611],\n    \"80\": [0, 0.68333, 0.08222, 0.08334, 0.69556],\n    \"81\": [0.09722, 0.68333, 0, 0.11111, 0.81667],\n    \"82\": [0, 0.68333, 0, 0.08334, 0.8475],\n    \"83\": [0, 0.68333, 0.075, 0.13889, 0.60556],\n    \"84\": [0, 0.68333, 0.25417, 0, 0.54464],\n    \"85\": [0, 0.68333, 0.09931, 0.08334, 0.62583],\n    \"86\": [0, 0.68333, 0.08222, 0, 0.61278],\n    \"87\": [0, 0.68333, 0.08222, 0.08334, 0.98778],\n    \"88\": [0, 0.68333, 0.14643, 0.13889, 0.7133],\n    \"89\": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],\n    \"90\": [0, 0.68333, 0.07944, 0.13889, 0.72473],\n    \"160\": [0, 0, 0, 0, 0.25]\n  },\n  \"Fraktur-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69141, 0, 0, 0.29574],\n    \"34\": [0, 0.69141, 0, 0, 0.21471],\n    \"38\": [0, 0.69141, 0, 0, 0.73786],\n    \"39\": [0, 0.69141, 0, 0, 0.21201],\n    \"40\": [0.24982, 0.74947, 0, 0, 0.38865],\n    \"41\": [0.24982, 0.74947, 0, 0, 0.38865],\n    \"42\": [0, 0.62119, 0, 0, 0.27764],\n    \"43\": [0.08319, 0.58283, 0, 0, 0.75623],\n    \"44\": [0, 0.10803, 0, 0, 0.27764],\n    \"45\": [0.08319, 0.58283, 0, 0, 0.75623],\n    \"46\": [0, 0.10803, 0, 0, 0.27764],\n    \"47\": [0.24982, 0.74947, 0, 0, 0.50181],\n    \"48\": [0, 0.47534, 0, 0, 0.50181],\n    \"49\": [0, 0.47534, 0, 0, 0.50181],\n    \"50\": [0, 0.47534, 0, 0, 0.50181],\n    \"51\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"52\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"53\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"54\": [0, 0.69141, 0, 0, 0.50181],\n    \"55\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"56\": [0, 0.69141, 0, 0, 0.50181],\n    \"57\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"58\": [0, 0.47534, 0, 0, 0.21606],\n    \"59\": [0.12604, 0.47534, 0, 0, 0.21606],\n    \"61\": [-0.13099, 0.36866, 0, 0, 0.75623],\n    \"63\": [0, 0.69141, 0, 0, 0.36245],\n    \"65\": [0, 0.69141, 0, 0, 0.7176],\n    \"66\": [0, 0.69141, 0, 0, 0.88397],\n    \"67\": [0, 0.69141, 0, 0, 0.61254],\n    \"68\": [0, 0.69141, 0, 0, 0.83158],\n    \"69\": [0, 0.69141, 0, 0, 0.66278],\n    \"70\": [0.12604, 0.69141, 0, 0, 0.61119],\n    \"71\": [0, 0.69141, 0, 0, 0.78539],\n    \"72\": [0.06302, 0.69141, 0, 0, 0.7203],\n    \"73\": [0, 0.69141, 0, 0, 0.55448],\n    \"74\": [0.12604, 0.69141, 0, 0, 0.55231],\n    \"75\": [0, 0.69141, 0, 0, 0.66845],\n    \"76\": [0, 0.69141, 0, 0, 0.66602],\n    \"77\": [0, 0.69141, 0, 0, 1.04953],\n    \"78\": [0, 0.69141, 0, 0, 0.83212],\n    \"79\": [0, 0.69141, 0, 0, 0.82699],\n    \"80\": [0.18906, 0.69141, 0, 0, 0.82753],\n    \"81\": [0.03781, 0.69141, 0, 0, 0.82699],\n    \"82\": [0, 0.69141, 0, 0, 0.82807],\n    \"83\": [0, 0.69141, 0, 0, 0.82861],\n    \"84\": [0, 0.69141, 0, 0, 0.66899],\n    \"85\": [0, 0.69141, 0, 0, 0.64576],\n    \"86\": [0, 0.69141, 0, 0, 0.83131],\n    \"87\": [0, 0.69141, 0, 0, 1.04602],\n    \"88\": [0, 0.69141, 0, 0, 0.71922],\n    \"89\": [0.18906, 0.69141, 0, 0, 0.83293],\n    \"90\": [0.12604, 0.69141, 0, 0, 0.60201],\n    \"91\": [0.24982, 0.74947, 0, 0, 0.27764],\n    \"93\": [0.24982, 0.74947, 0, 0, 0.27764],\n    \"94\": [0, 0.69141, 0, 0, 0.49965],\n    \"97\": [0, 0.47534, 0, 0, 0.50046],\n    \"98\": [0, 0.69141, 0, 0, 0.51315],\n    \"99\": [0, 0.47534, 0, 0, 0.38946],\n    \"100\": [0, 0.62119, 0, 0, 0.49857],\n    \"101\": [0, 0.47534, 0, 0, 0.40053],\n    \"102\": [0.18906, 0.69141, 0, 0, 0.32626],\n    \"103\": [0.18906, 0.47534, 0, 0, 0.5037],\n    \"104\": [0.18906, 0.69141, 0, 0, 0.52126],\n    \"105\": [0, 0.69141, 0, 0, 0.27899],\n    \"106\": [0, 0.69141, 0, 0, 0.28088],\n    \"107\": [0, 0.69141, 0, 0, 0.38946],\n    \"108\": [0, 0.69141, 0, 0, 0.27953],\n    \"109\": [0, 0.47534, 0, 0, 0.76676],\n    \"110\": [0, 0.47534, 0, 0, 0.52666],\n    \"111\": [0, 0.47534, 0, 0, 0.48885],\n    \"112\": [0.18906, 0.52396, 0, 0, 0.50046],\n    \"113\": [0.18906, 0.47534, 0, 0, 0.48912],\n    \"114\": [0, 0.47534, 0, 0, 0.38919],\n    \"115\": [0, 0.47534, 0, 0, 0.44266],\n    \"116\": [0, 0.62119, 0, 0, 0.33301],\n    \"117\": [0, 0.47534, 0, 0, 0.5172],\n    \"118\": [0, 0.52396, 0, 0, 0.5118],\n    \"119\": [0, 0.52396, 0, 0, 0.77351],\n    \"120\": [0.18906, 0.47534, 0, 0, 0.38865],\n    \"121\": [0.18906, 0.47534, 0, 0, 0.49884],\n    \"122\": [0.18906, 0.47534, 0, 0, 0.39054],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"8216\": [0, 0.69141, 0, 0, 0.21471],\n    \"8217\": [0, 0.69141, 0, 0, 0.21471],\n    \"58112\": [0, 0.62119, 0, 0, 0.49749],\n    \"58113\": [0, 0.62119, 0, 0, 0.4983],\n    \"58114\": [0.18906, 0.69141, 0, 0, 0.33328],\n    \"58115\": [0.18906, 0.69141, 0, 0, 0.32923],\n    \"58116\": [0.18906, 0.47534, 0, 0, 0.50343],\n    \"58117\": [0, 0.69141, 0, 0, 0.33301],\n    \"58118\": [0, 0.62119, 0, 0, 0.33409],\n    \"58119\": [0, 0.47534, 0, 0, 0.50073]\n  },\n  \"Main-Bold\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0, 0, 0.35],\n    \"34\": [0, 0.69444, 0, 0, 0.60278],\n    \"35\": [0.19444, 0.69444, 0, 0, 0.95833],\n    \"36\": [0.05556, 0.75, 0, 0, 0.575],\n    \"37\": [0.05556, 0.75, 0, 0, 0.95833],\n    \"38\": [0, 0.69444, 0, 0, 0.89444],\n    \"39\": [0, 0.69444, 0, 0, 0.31944],\n    \"40\": [0.25, 0.75, 0, 0, 0.44722],\n    \"41\": [0.25, 0.75, 0, 0, 0.44722],\n    \"42\": [0, 0.75, 0, 0, 0.575],\n    \"43\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"44\": [0.19444, 0.15556, 0, 0, 0.31944],\n    \"45\": [0, 0.44444, 0, 0, 0.38333],\n    \"46\": [0, 0.15556, 0, 0, 0.31944],\n    \"47\": [0.25, 0.75, 0, 0, 0.575],\n    \"48\": [0, 0.64444, 0, 0, 0.575],\n    \"49\": [0, 0.64444, 0, 0, 0.575],\n    \"50\": [0, 0.64444, 0, 0, 0.575],\n    \"51\": [0, 0.64444, 0, 0, 0.575],\n    \"52\": [0, 0.64444, 0, 0, 0.575],\n    \"53\": [0, 0.64444, 0, 0, 0.575],\n    \"54\": [0, 0.64444, 0, 0, 0.575],\n    \"55\": [0, 0.64444, 0, 0, 0.575],\n    \"56\": [0, 0.64444, 0, 0, 0.575],\n    \"57\": [0, 0.64444, 0, 0, 0.575],\n    \"58\": [0, 0.44444, 0, 0, 0.31944],\n    \"59\": [0.19444, 0.44444, 0, 0, 0.31944],\n    \"60\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"61\": [-0.10889, 0.39111, 0, 0, 0.89444],\n    \"62\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"63\": [0, 0.69444, 0, 0, 0.54305],\n    \"64\": [0, 0.69444, 0, 0, 0.89444],\n    \"65\": [0, 0.68611, 0, 0, 0.86944],\n    \"66\": [0, 0.68611, 0, 0, 0.81805],\n    \"67\": [0, 0.68611, 0, 0, 0.83055],\n    \"68\": [0, 0.68611, 0, 0, 0.88194],\n    \"69\": [0, 0.68611, 0, 0, 0.75555],\n    \"70\": [0, 0.68611, 0, 0, 0.72361],\n    \"71\": [0, 0.68611, 0, 0, 0.90416],\n    \"72\": [0, 0.68611, 0, 0, 0.9],\n    \"73\": [0, 0.68611, 0, 0, 0.43611],\n    \"74\": [0, 0.68611, 0, 0, 0.59444],\n    \"75\": [0, 0.68611, 0, 0, 0.90138],\n    \"76\": [0, 0.68611, 0, 0, 0.69166],\n    \"77\": [0, 0.68611, 0, 0, 1.09166],\n    \"78\": [0, 0.68611, 0, 0, 0.9],\n    \"79\": [0, 0.68611, 0, 0, 0.86388],\n    \"80\": [0, 0.68611, 0, 0, 0.78611],\n    \"81\": [0.19444, 0.68611, 0, 0, 0.86388],\n    \"82\": [0, 0.68611, 0, 0, 0.8625],\n    \"83\": [0, 0.68611, 0, 0, 0.63889],\n    \"84\": [0, 0.68611, 0, 0, 0.8],\n    \"85\": [0, 0.68611, 0, 0, 0.88472],\n    \"86\": [0, 0.68611, 0.01597, 0, 0.86944],\n    \"87\": [0, 0.68611, 0.01597, 0, 1.18888],\n    \"88\": [0, 0.68611, 0, 0, 0.86944],\n    \"89\": [0, 0.68611, 0.02875, 0, 0.86944],\n    \"90\": [0, 0.68611, 0, 0, 0.70277],\n    \"91\": [0.25, 0.75, 0, 0, 0.31944],\n    \"92\": [0.25, 0.75, 0, 0, 0.575],\n    \"93\": [0.25, 0.75, 0, 0, 0.31944],\n    \"94\": [0, 0.69444, 0, 0, 0.575],\n    \"95\": [0.31, 0.13444, 0.03194, 0, 0.575],\n    \"97\": [0, 0.44444, 0, 0, 0.55902],\n    \"98\": [0, 0.69444, 0, 0, 0.63889],\n    \"99\": [0, 0.44444, 0, 0, 0.51111],\n    \"100\": [0, 0.69444, 0, 0, 0.63889],\n    \"101\": [0, 0.44444, 0, 0, 0.52708],\n    \"102\": [0, 0.69444, 0.10903, 0, 0.35139],\n    \"103\": [0.19444, 0.44444, 0.01597, 0, 0.575],\n    \"104\": [0, 0.69444, 0, 0, 0.63889],\n    \"105\": [0, 0.69444, 0, 0, 0.31944],\n    \"106\": [0.19444, 0.69444, 0, 0, 0.35139],\n    \"107\": [0, 0.69444, 0, 0, 0.60694],\n    \"108\": [0, 0.69444, 0, 0, 0.31944],\n    \"109\": [0, 0.44444, 0, 0, 0.95833],\n    \"110\": [0, 0.44444, 0, 0, 0.63889],\n    \"111\": [0, 0.44444, 0, 0, 0.575],\n    \"112\": [0.19444, 0.44444, 0, 0, 0.63889],\n    \"113\": [0.19444, 0.44444, 0, 0, 0.60694],\n    \"114\": [0, 0.44444, 0, 0, 0.47361],\n    \"115\": [0, 0.44444, 0, 0, 0.45361],\n    \"116\": [0, 0.63492, 0, 0, 0.44722],\n    \"117\": [0, 0.44444, 0, 0, 0.63889],\n    \"118\": [0, 0.44444, 0.01597, 0, 0.60694],\n    \"119\": [0, 0.44444, 0.01597, 0, 0.83055],\n    \"120\": [0, 0.44444, 0, 0, 0.60694],\n    \"121\": [0.19444, 0.44444, 0.01597, 0, 0.60694],\n    \"122\": [0, 0.44444, 0, 0, 0.51111],\n    \"123\": [0.25, 0.75, 0, 0, 0.575],\n    \"124\": [0.25, 0.75, 0, 0, 0.31944],\n    \"125\": [0.25, 0.75, 0, 0, 0.575],\n    \"126\": [0.35, 0.34444, 0, 0, 0.575],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"163\": [0, 0.69444, 0, 0, 0.86853],\n    \"168\": [0, 0.69444, 0, 0, 0.575],\n    \"172\": [0, 0.44444, 0, 0, 0.76666],\n    \"176\": [0, 0.69444, 0, 0, 0.86944],\n    \"177\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"184\": [0.17014, 0, 0, 0, 0.51111],\n    \"198\": [0, 0.68611, 0, 0, 1.04166],\n    \"215\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"216\": [0.04861, 0.73472, 0, 0, 0.89444],\n    \"223\": [0, 0.69444, 0, 0, 0.59722],\n    \"230\": [0, 0.44444, 0, 0, 0.83055],\n    \"247\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"248\": [0.09722, 0.54167, 0, 0, 0.575],\n    \"305\": [0, 0.44444, 0, 0, 0.31944],\n    \"338\": [0, 0.68611, 0, 0, 1.16944],\n    \"339\": [0, 0.44444, 0, 0, 0.89444],\n    \"567\": [0.19444, 0.44444, 0, 0, 0.35139],\n    \"710\": [0, 0.69444, 0, 0, 0.575],\n    \"711\": [0, 0.63194, 0, 0, 0.575],\n    \"713\": [0, 0.59611, 0, 0, 0.575],\n    \"714\": [0, 0.69444, 0, 0, 0.575],\n    \"715\": [0, 0.69444, 0, 0, 0.575],\n    \"728\": [0, 0.69444, 0, 0, 0.575],\n    \"729\": [0, 0.69444, 0, 0, 0.31944],\n    \"730\": [0, 0.69444, 0, 0, 0.86944],\n    \"732\": [0, 0.69444, 0, 0, 0.575],\n    \"733\": [0, 0.69444, 0, 0, 0.575],\n    \"915\": [0, 0.68611, 0, 0, 0.69166],\n    \"916\": [0, 0.68611, 0, 0, 0.95833],\n    \"920\": [0, 0.68611, 0, 0, 0.89444],\n    \"923\": [0, 0.68611, 0, 0, 0.80555],\n    \"926\": [0, 0.68611, 0, 0, 0.76666],\n    \"928\": [0, 0.68611, 0, 0, 0.9],\n    \"931\": [0, 0.68611, 0, 0, 0.83055],\n    \"933\": [0, 0.68611, 0, 0, 0.89444],\n    \"934\": [0, 0.68611, 0, 0, 0.83055],\n    \"936\": [0, 0.68611, 0, 0, 0.89444],\n    \"937\": [0, 0.68611, 0, 0, 0.83055],\n    \"8211\": [0, 0.44444, 0.03194, 0, 0.575],\n    \"8212\": [0, 0.44444, 0.03194, 0, 1.14999],\n    \"8216\": [0, 0.69444, 0, 0, 0.31944],\n    \"8217\": [0, 0.69444, 0, 0, 0.31944],\n    \"8220\": [0, 0.69444, 0, 0, 0.60278],\n    \"8221\": [0, 0.69444, 0, 0, 0.60278],\n    \"8224\": [0.19444, 0.69444, 0, 0, 0.51111],\n    \"8225\": [0.19444, 0.69444, 0, 0, 0.51111],\n    \"8242\": [0, 0.55556, 0, 0, 0.34444],\n    \"8407\": [0, 0.72444, 0.15486, 0, 0.575],\n    \"8463\": [0, 0.69444, 0, 0, 0.66759],\n    \"8465\": [0, 0.69444, 0, 0, 0.83055],\n    \"8467\": [0, 0.69444, 0, 0, 0.47361],\n    \"8472\": [0.19444, 0.44444, 0, 0, 0.74027],\n    \"8476\": [0, 0.69444, 0, 0, 0.83055],\n    \"8501\": [0, 0.69444, 0, 0, 0.70277],\n    \"8592\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8593\": [0.19444, 0.69444, 0, 0, 0.575],\n    \"8594\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8595\": [0.19444, 0.69444, 0, 0, 0.575],\n    \"8596\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8597\": [0.25, 0.75, 0, 0, 0.575],\n    \"8598\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"8599\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"8600\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"8601\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"8636\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8637\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8640\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8641\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8656\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8657\": [0.19444, 0.69444, 0, 0, 0.70277],\n    \"8658\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8659\": [0.19444, 0.69444, 0, 0, 0.70277],\n    \"8660\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8661\": [0.25, 0.75, 0, 0, 0.70277],\n    \"8704\": [0, 0.69444, 0, 0, 0.63889],\n    \"8706\": [0, 0.69444, 0.06389, 0, 0.62847],\n    \"8707\": [0, 0.69444, 0, 0, 0.63889],\n    \"8709\": [0.05556, 0.75, 0, 0, 0.575],\n    \"8711\": [0, 0.68611, 0, 0, 0.95833],\n    \"8712\": [0.08556, 0.58556, 0, 0, 0.76666],\n    \"8715\": [0.08556, 0.58556, 0, 0, 0.76666],\n    \"8722\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8723\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8725\": [0.25, 0.75, 0, 0, 0.575],\n    \"8726\": [0.25, 0.75, 0, 0, 0.575],\n    \"8727\": [-0.02778, 0.47222, 0, 0, 0.575],\n    \"8728\": [-0.02639, 0.47361, 0, 0, 0.575],\n    \"8729\": [-0.02639, 0.47361, 0, 0, 0.575],\n    \"8730\": [0.18, 0.82, 0, 0, 0.95833],\n    \"8733\": [0, 0.44444, 0, 0, 0.89444],\n    \"8734\": [0, 0.44444, 0, 0, 1.14999],\n    \"8736\": [0, 0.69224, 0, 0, 0.72222],\n    \"8739\": [0.25, 0.75, 0, 0, 0.31944],\n    \"8741\": [0.25, 0.75, 0, 0, 0.575],\n    \"8743\": [0, 0.55556, 0, 0, 0.76666],\n    \"8744\": [0, 0.55556, 0, 0, 0.76666],\n    \"8745\": [0, 0.55556, 0, 0, 0.76666],\n    \"8746\": [0, 0.55556, 0, 0, 0.76666],\n    \"8747\": [0.19444, 0.69444, 0.12778, 0, 0.56875],\n    \"8764\": [-0.10889, 0.39111, 0, 0, 0.89444],\n    \"8768\": [0.19444, 0.69444, 0, 0, 0.31944],\n    \"8771\": [0.00222, 0.50222, 0, 0, 0.89444],\n    \"8773\": [0.027, 0.638, 0, 0, 0.894],\n    \"8776\": [0.02444, 0.52444, 0, 0, 0.89444],\n    \"8781\": [0.00222, 0.50222, 0, 0, 0.89444],\n    \"8801\": [0.00222, 0.50222, 0, 0, 0.89444],\n    \"8804\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8805\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8810\": [0.08556, 0.58556, 0, 0, 1.14999],\n    \"8811\": [0.08556, 0.58556, 0, 0, 1.14999],\n    \"8826\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"8827\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"8834\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"8835\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"8838\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8839\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8846\": [0, 0.55556, 0, 0, 0.76666],\n    \"8849\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8850\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8851\": [0, 0.55556, 0, 0, 0.76666],\n    \"8852\": [0, 0.55556, 0, 0, 0.76666],\n    \"8853\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8854\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8855\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8856\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8857\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8866\": [0, 0.69444, 0, 0, 0.70277],\n    \"8867\": [0, 0.69444, 0, 0, 0.70277],\n    \"8868\": [0, 0.69444, 0, 0, 0.89444],\n    \"8869\": [0, 0.69444, 0, 0, 0.89444],\n    \"8900\": [-0.02639, 0.47361, 0, 0, 0.575],\n    \"8901\": [-0.02639, 0.47361, 0, 0, 0.31944],\n    \"8902\": [-0.02778, 0.47222, 0, 0, 0.575],\n    \"8968\": [0.25, 0.75, 0, 0, 0.51111],\n    \"8969\": [0.25, 0.75, 0, 0, 0.51111],\n    \"8970\": [0.25, 0.75, 0, 0, 0.51111],\n    \"8971\": [0.25, 0.75, 0, 0, 0.51111],\n    \"8994\": [-0.13889, 0.36111, 0, 0, 1.14999],\n    \"8995\": [-0.13889, 0.36111, 0, 0, 1.14999],\n    \"9651\": [0.19444, 0.69444, 0, 0, 1.02222],\n    \"9657\": [-0.02778, 0.47222, 0, 0, 0.575],\n    \"9661\": [0.19444, 0.69444, 0, 0, 1.02222],\n    \"9667\": [-0.02778, 0.47222, 0, 0, 0.575],\n    \"9711\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"9824\": [0.12963, 0.69444, 0, 0, 0.89444],\n    \"9825\": [0.12963, 0.69444, 0, 0, 0.89444],\n    \"9826\": [0.12963, 0.69444, 0, 0, 0.89444],\n    \"9827\": [0.12963, 0.69444, 0, 0, 0.89444],\n    \"9837\": [0, 0.75, 0, 0, 0.44722],\n    \"9838\": [0.19444, 0.69444, 0, 0, 0.44722],\n    \"9839\": [0.19444, 0.69444, 0, 0, 0.44722],\n    \"10216\": [0.25, 0.75, 0, 0, 0.44722],\n    \"10217\": [0.25, 0.75, 0, 0, 0.44722],\n    \"10815\": [0, 0.68611, 0, 0, 0.9],\n    \"10927\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"10928\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"57376\": [0.19444, 0.69444, 0, 0, 0]\n  },\n  \"Main-BoldItalic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0.11417, 0, 0.38611],\n    \"34\": [0, 0.69444, 0.07939, 0, 0.62055],\n    \"35\": [0.19444, 0.69444, 0.06833, 0, 0.94444],\n    \"37\": [0.05556, 0.75, 0.12861, 0, 0.94444],\n    \"38\": [0, 0.69444, 0.08528, 0, 0.88555],\n    \"39\": [0, 0.69444, 0.12945, 0, 0.35555],\n    \"40\": [0.25, 0.75, 0.15806, 0, 0.47333],\n    \"41\": [0.25, 0.75, 0.03306, 0, 0.47333],\n    \"42\": [0, 0.75, 0.14333, 0, 0.59111],\n    \"43\": [0.10333, 0.60333, 0.03306, 0, 0.88555],\n    \"44\": [0.19444, 0.14722, 0, 0, 0.35555],\n    \"45\": [0, 0.44444, 0.02611, 0, 0.41444],\n    \"46\": [0, 0.14722, 0, 0, 0.35555],\n    \"47\": [0.25, 0.75, 0.15806, 0, 0.59111],\n    \"48\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"49\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"50\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"51\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"52\": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n    \"53\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"54\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"55\": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n    \"56\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"57\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"58\": [0, 0.44444, 0.06695, 0, 0.35555],\n    \"59\": [0.19444, 0.44444, 0.06695, 0, 0.35555],\n    \"61\": [-0.10889, 0.39111, 0.06833, 0, 0.88555],\n    \"63\": [0, 0.69444, 0.11472, 0, 0.59111],\n    \"64\": [0, 0.69444, 0.09208, 0, 0.88555],\n    \"65\": [0, 0.68611, 0, 0, 0.86555],\n    \"66\": [0, 0.68611, 0.0992, 0, 0.81666],\n    \"67\": [0, 0.68611, 0.14208, 0, 0.82666],\n    \"68\": [0, 0.68611, 0.09062, 0, 0.87555],\n    \"69\": [0, 0.68611, 0.11431, 0, 0.75666],\n    \"70\": [0, 0.68611, 0.12903, 0, 0.72722],\n    \"71\": [0, 0.68611, 0.07347, 0, 0.89527],\n    \"72\": [0, 0.68611, 0.17208, 0, 0.8961],\n    \"73\": [0, 0.68611, 0.15681, 0, 0.47166],\n    \"74\": [0, 0.68611, 0.145, 0, 0.61055],\n    \"75\": [0, 0.68611, 0.14208, 0, 0.89499],\n    \"76\": [0, 0.68611, 0, 0, 0.69777],\n    \"77\": [0, 0.68611, 0.17208, 0, 1.07277],\n    \"78\": [0, 0.68611, 0.17208, 0, 0.8961],\n    \"79\": [0, 0.68611, 0.09062, 0, 0.85499],\n    \"80\": [0, 0.68611, 0.0992, 0, 0.78721],\n    \"81\": [0.19444, 0.68611, 0.09062, 0, 0.85499],\n    \"82\": [0, 0.68611, 0.02559, 0, 0.85944],\n    \"83\": [0, 0.68611, 0.11264, 0, 0.64999],\n    \"84\": [0, 0.68611, 0.12903, 0, 0.7961],\n    \"85\": [0, 0.68611, 0.17208, 0, 0.88083],\n    \"86\": [0, 0.68611, 0.18625, 0, 0.86555],\n    \"87\": [0, 0.68611, 0.18625, 0, 1.15999],\n    \"88\": [0, 0.68611, 0.15681, 0, 0.86555],\n    \"89\": [0, 0.68611, 0.19803, 0, 0.86555],\n    \"90\": [0, 0.68611, 0.14208, 0, 0.70888],\n    \"91\": [0.25, 0.75, 0.1875, 0, 0.35611],\n    \"93\": [0.25, 0.75, 0.09972, 0, 0.35611],\n    \"94\": [0, 0.69444, 0.06709, 0, 0.59111],\n    \"95\": [0.31, 0.13444, 0.09811, 0, 0.59111],\n    \"97\": [0, 0.44444, 0.09426, 0, 0.59111],\n    \"98\": [0, 0.69444, 0.07861, 0, 0.53222],\n    \"99\": [0, 0.44444, 0.05222, 0, 0.53222],\n    \"100\": [0, 0.69444, 0.10861, 0, 0.59111],\n    \"101\": [0, 0.44444, 0.085, 0, 0.53222],\n    \"102\": [0.19444, 0.69444, 0.21778, 0, 0.4],\n    \"103\": [0.19444, 0.44444, 0.105, 0, 0.53222],\n    \"104\": [0, 0.69444, 0.09426, 0, 0.59111],\n    \"105\": [0, 0.69326, 0.11387, 0, 0.35555],\n    \"106\": [0.19444, 0.69326, 0.1672, 0, 0.35555],\n    \"107\": [0, 0.69444, 0.11111, 0, 0.53222],\n    \"108\": [0, 0.69444, 0.10861, 0, 0.29666],\n    \"109\": [0, 0.44444, 0.09426, 0, 0.94444],\n    \"110\": [0, 0.44444, 0.09426, 0, 0.64999],\n    \"111\": [0, 0.44444, 0.07861, 0, 0.59111],\n    \"112\": [0.19444, 0.44444, 0.07861, 0, 0.59111],\n    \"113\": [0.19444, 0.44444, 0.105, 0, 0.53222],\n    \"114\": [0, 0.44444, 0.11111, 0, 0.50167],\n    \"115\": [0, 0.44444, 0.08167, 0, 0.48694],\n    \"116\": [0, 0.63492, 0.09639, 0, 0.385],\n    \"117\": [0, 0.44444, 0.09426, 0, 0.62055],\n    \"118\": [0, 0.44444, 0.11111, 0, 0.53222],\n    \"119\": [0, 0.44444, 0.11111, 0, 0.76777],\n    \"120\": [0, 0.44444, 0.12583, 0, 0.56055],\n    \"121\": [0.19444, 0.44444, 0.105, 0, 0.56166],\n    \"122\": [0, 0.44444, 0.13889, 0, 0.49055],\n    \"126\": [0.35, 0.34444, 0.11472, 0, 0.59111],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.69444, 0.11473, 0, 0.59111],\n    \"176\": [0, 0.69444, 0, 0, 0.94888],\n    \"184\": [0.17014, 0, 0, 0, 0.53222],\n    \"198\": [0, 0.68611, 0.11431, 0, 1.02277],\n    \"216\": [0.04861, 0.73472, 0.09062, 0, 0.88555],\n    \"223\": [0.19444, 0.69444, 0.09736, 0, 0.665],\n    \"230\": [0, 0.44444, 0.085, 0, 0.82666],\n    \"248\": [0.09722, 0.54167, 0.09458, 0, 0.59111],\n    \"305\": [0, 0.44444, 0.09426, 0, 0.35555],\n    \"338\": [0, 0.68611, 0.11431, 0, 1.14054],\n    \"339\": [0, 0.44444, 0.085, 0, 0.82666],\n    \"567\": [0.19444, 0.44444, 0.04611, 0, 0.385],\n    \"710\": [0, 0.69444, 0.06709, 0, 0.59111],\n    \"711\": [0, 0.63194, 0.08271, 0, 0.59111],\n    \"713\": [0, 0.59444, 0.10444, 0, 0.59111],\n    \"714\": [0, 0.69444, 0.08528, 0, 0.59111],\n    \"715\": [0, 0.69444, 0, 0, 0.59111],\n    \"728\": [0, 0.69444, 0.10333, 0, 0.59111],\n    \"729\": [0, 0.69444, 0.12945, 0, 0.35555],\n    \"730\": [0, 0.69444, 0, 0, 0.94888],\n    \"732\": [0, 0.69444, 0.11472, 0, 0.59111],\n    \"733\": [0, 0.69444, 0.11472, 0, 0.59111],\n    \"915\": [0, 0.68611, 0.12903, 0, 0.69777],\n    \"916\": [0, 0.68611, 0, 0, 0.94444],\n    \"920\": [0, 0.68611, 0.09062, 0, 0.88555],\n    \"923\": [0, 0.68611, 0, 0, 0.80666],\n    \"926\": [0, 0.68611, 0.15092, 0, 0.76777],\n    \"928\": [0, 0.68611, 0.17208, 0, 0.8961],\n    \"931\": [0, 0.68611, 0.11431, 0, 0.82666],\n    \"933\": [0, 0.68611, 0.10778, 0, 0.88555],\n    \"934\": [0, 0.68611, 0.05632, 0, 0.82666],\n    \"936\": [0, 0.68611, 0.10778, 0, 0.88555],\n    \"937\": [0, 0.68611, 0.0992, 0, 0.82666],\n    \"8211\": [0, 0.44444, 0.09811, 0, 0.59111],\n    \"8212\": [0, 0.44444, 0.09811, 0, 1.18221],\n    \"8216\": [0, 0.69444, 0.12945, 0, 0.35555],\n    \"8217\": [0, 0.69444, 0.12945, 0, 0.35555],\n    \"8220\": [0, 0.69444, 0.16772, 0, 0.62055],\n    \"8221\": [0, 0.69444, 0.07939, 0, 0.62055]\n  },\n  \"Main-Italic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0.12417, 0, 0.30667],\n    \"34\": [0, 0.69444, 0.06961, 0, 0.51444],\n    \"35\": [0.19444, 0.69444, 0.06616, 0, 0.81777],\n    \"37\": [0.05556, 0.75, 0.13639, 0, 0.81777],\n    \"38\": [0, 0.69444, 0.09694, 0, 0.76666],\n    \"39\": [0, 0.69444, 0.12417, 0, 0.30667],\n    \"40\": [0.25, 0.75, 0.16194, 0, 0.40889],\n    \"41\": [0.25, 0.75, 0.03694, 0, 0.40889],\n    \"42\": [0, 0.75, 0.14917, 0, 0.51111],\n    \"43\": [0.05667, 0.56167, 0.03694, 0, 0.76666],\n    \"44\": [0.19444, 0.10556, 0, 0, 0.30667],\n    \"45\": [0, 0.43056, 0.02826, 0, 0.35778],\n    \"46\": [0, 0.10556, 0, 0, 0.30667],\n    \"47\": [0.25, 0.75, 0.16194, 0, 0.51111],\n    \"48\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"49\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"50\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"51\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"52\": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n    \"53\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"54\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"55\": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n    \"56\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"57\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"58\": [0, 0.43056, 0.0582, 0, 0.30667],\n    \"59\": [0.19444, 0.43056, 0.0582, 0, 0.30667],\n    \"61\": [-0.13313, 0.36687, 0.06616, 0, 0.76666],\n    \"63\": [0, 0.69444, 0.1225, 0, 0.51111],\n    \"64\": [0, 0.69444, 0.09597, 0, 0.76666],\n    \"65\": [0, 0.68333, 0, 0, 0.74333],\n    \"66\": [0, 0.68333, 0.10257, 0, 0.70389],\n    \"67\": [0, 0.68333, 0.14528, 0, 0.71555],\n    \"68\": [0, 0.68333, 0.09403, 0, 0.755],\n    \"69\": [0, 0.68333, 0.12028, 0, 0.67833],\n    \"70\": [0, 0.68333, 0.13305, 0, 0.65277],\n    \"71\": [0, 0.68333, 0.08722, 0, 0.77361],\n    \"72\": [0, 0.68333, 0.16389, 0, 0.74333],\n    \"73\": [0, 0.68333, 0.15806, 0, 0.38555],\n    \"74\": [0, 0.68333, 0.14028, 0, 0.525],\n    \"75\": [0, 0.68333, 0.14528, 0, 0.76888],\n    \"76\": [0, 0.68333, 0, 0, 0.62722],\n    \"77\": [0, 0.68333, 0.16389, 0, 0.89666],\n    \"78\": [0, 0.68333, 0.16389, 0, 0.74333],\n    \"79\": [0, 0.68333, 0.09403, 0, 0.76666],\n    \"80\": [0, 0.68333, 0.10257, 0, 0.67833],\n    \"81\": [0.19444, 0.68333, 0.09403, 0, 0.76666],\n    \"82\": [0, 0.68333, 0.03868, 0, 0.72944],\n    \"83\": [0, 0.68333, 0.11972, 0, 0.56222],\n    \"84\": [0, 0.68333, 0.13305, 0, 0.71555],\n    \"85\": [0, 0.68333, 0.16389, 0, 0.74333],\n    \"86\": [0, 0.68333, 0.18361, 0, 0.74333],\n    \"87\": [0, 0.68333, 0.18361, 0, 0.99888],\n    \"88\": [0, 0.68333, 0.15806, 0, 0.74333],\n    \"89\": [0, 0.68333, 0.19383, 0, 0.74333],\n    \"90\": [0, 0.68333, 0.14528, 0, 0.61333],\n    \"91\": [0.25, 0.75, 0.1875, 0, 0.30667],\n    \"93\": [0.25, 0.75, 0.10528, 0, 0.30667],\n    \"94\": [0, 0.69444, 0.06646, 0, 0.51111],\n    \"95\": [0.31, 0.12056, 0.09208, 0, 0.51111],\n    \"97\": [0, 0.43056, 0.07671, 0, 0.51111],\n    \"98\": [0, 0.69444, 0.06312, 0, 0.46],\n    \"99\": [0, 0.43056, 0.05653, 0, 0.46],\n    \"100\": [0, 0.69444, 0.10333, 0, 0.51111],\n    \"101\": [0, 0.43056, 0.07514, 0, 0.46],\n    \"102\": [0.19444, 0.69444, 0.21194, 0, 0.30667],\n    \"103\": [0.19444, 0.43056, 0.08847, 0, 0.46],\n    \"104\": [0, 0.69444, 0.07671, 0, 0.51111],\n    \"105\": [0, 0.65536, 0.1019, 0, 0.30667],\n    \"106\": [0.19444, 0.65536, 0.14467, 0, 0.30667],\n    \"107\": [0, 0.69444, 0.10764, 0, 0.46],\n    \"108\": [0, 0.69444, 0.10333, 0, 0.25555],\n    \"109\": [0, 0.43056, 0.07671, 0, 0.81777],\n    \"110\": [0, 0.43056, 0.07671, 0, 0.56222],\n    \"111\": [0, 0.43056, 0.06312, 0, 0.51111],\n    \"112\": [0.19444, 0.43056, 0.06312, 0, 0.51111],\n    \"113\": [0.19444, 0.43056, 0.08847, 0, 0.46],\n    \"114\": [0, 0.43056, 0.10764, 0, 0.42166],\n    \"115\": [0, 0.43056, 0.08208, 0, 0.40889],\n    \"116\": [0, 0.61508, 0.09486, 0, 0.33222],\n    \"117\": [0, 0.43056, 0.07671, 0, 0.53666],\n    \"118\": [0, 0.43056, 0.10764, 0, 0.46],\n    \"119\": [0, 0.43056, 0.10764, 0, 0.66444],\n    \"120\": [0, 0.43056, 0.12042, 0, 0.46389],\n    \"121\": [0.19444, 0.43056, 0.08847, 0, 0.48555],\n    \"122\": [0, 0.43056, 0.12292, 0, 0.40889],\n    \"126\": [0.35, 0.31786, 0.11585, 0, 0.51111],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.66786, 0.10474, 0, 0.51111],\n    \"176\": [0, 0.69444, 0, 0, 0.83129],\n    \"184\": [0.17014, 0, 0, 0, 0.46],\n    \"198\": [0, 0.68333, 0.12028, 0, 0.88277],\n    \"216\": [0.04861, 0.73194, 0.09403, 0, 0.76666],\n    \"223\": [0.19444, 0.69444, 0.10514, 0, 0.53666],\n    \"230\": [0, 0.43056, 0.07514, 0, 0.71555],\n    \"248\": [0.09722, 0.52778, 0.09194, 0, 0.51111],\n    \"338\": [0, 0.68333, 0.12028, 0, 0.98499],\n    \"339\": [0, 0.43056, 0.07514, 0, 0.71555],\n    \"710\": [0, 0.69444, 0.06646, 0, 0.51111],\n    \"711\": [0, 0.62847, 0.08295, 0, 0.51111],\n    \"713\": [0, 0.56167, 0.10333, 0, 0.51111],\n    \"714\": [0, 0.69444, 0.09694, 0, 0.51111],\n    \"715\": [0, 0.69444, 0, 0, 0.51111],\n    \"728\": [0, 0.69444, 0.10806, 0, 0.51111],\n    \"729\": [0, 0.66786, 0.11752, 0, 0.30667],\n    \"730\": [0, 0.69444, 0, 0, 0.83129],\n    \"732\": [0, 0.66786, 0.11585, 0, 0.51111],\n    \"733\": [0, 0.69444, 0.1225, 0, 0.51111],\n    \"915\": [0, 0.68333, 0.13305, 0, 0.62722],\n    \"916\": [0, 0.68333, 0, 0, 0.81777],\n    \"920\": [0, 0.68333, 0.09403, 0, 0.76666],\n    \"923\": [0, 0.68333, 0, 0, 0.69222],\n    \"926\": [0, 0.68333, 0.15294, 0, 0.66444],\n    \"928\": [0, 0.68333, 0.16389, 0, 0.74333],\n    \"931\": [0, 0.68333, 0.12028, 0, 0.71555],\n    \"933\": [0, 0.68333, 0.11111, 0, 0.76666],\n    \"934\": [0, 0.68333, 0.05986, 0, 0.71555],\n    \"936\": [0, 0.68333, 0.11111, 0, 0.76666],\n    \"937\": [0, 0.68333, 0.10257, 0, 0.71555],\n    \"8211\": [0, 0.43056, 0.09208, 0, 0.51111],\n    \"8212\": [0, 0.43056, 0.09208, 0, 1.02222],\n    \"8216\": [0, 0.69444, 0.12417, 0, 0.30667],\n    \"8217\": [0, 0.69444, 0.12417, 0, 0.30667],\n    \"8220\": [0, 0.69444, 0.1685, 0, 0.51444],\n    \"8221\": [0, 0.69444, 0.06961, 0, 0.51444],\n    \"8463\": [0, 0.68889, 0, 0, 0.54028]\n  },\n  \"Main-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0, 0, 0.27778],\n    \"34\": [0, 0.69444, 0, 0, 0.5],\n    \"35\": [0.19444, 0.69444, 0, 0, 0.83334],\n    \"36\": [0.05556, 0.75, 0, 0, 0.5],\n    \"37\": [0.05556, 0.75, 0, 0, 0.83334],\n    \"38\": [0, 0.69444, 0, 0, 0.77778],\n    \"39\": [0, 0.69444, 0, 0, 0.27778],\n    \"40\": [0.25, 0.75, 0, 0, 0.38889],\n    \"41\": [0.25, 0.75, 0, 0, 0.38889],\n    \"42\": [0, 0.75, 0, 0, 0.5],\n    \"43\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"44\": [0.19444, 0.10556, 0, 0, 0.27778],\n    \"45\": [0, 0.43056, 0, 0, 0.33333],\n    \"46\": [0, 0.10556, 0, 0, 0.27778],\n    \"47\": [0.25, 0.75, 0, 0, 0.5],\n    \"48\": [0, 0.64444, 0, 0, 0.5],\n    \"49\": [0, 0.64444, 0, 0, 0.5],\n    \"50\": [0, 0.64444, 0, 0, 0.5],\n    \"51\": [0, 0.64444, 0, 0, 0.5],\n    \"52\": [0, 0.64444, 0, 0, 0.5],\n    \"53\": [0, 0.64444, 0, 0, 0.5],\n    \"54\": [0, 0.64444, 0, 0, 0.5],\n    \"55\": [0, 0.64444, 0, 0, 0.5],\n    \"56\": [0, 0.64444, 0, 0, 0.5],\n    \"57\": [0, 0.64444, 0, 0, 0.5],\n    \"58\": [0, 0.43056, 0, 0, 0.27778],\n    \"59\": [0.19444, 0.43056, 0, 0, 0.27778],\n    \"60\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"61\": [-0.13313, 0.36687, 0, 0, 0.77778],\n    \"62\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"63\": [0, 0.69444, 0, 0, 0.47222],\n    \"64\": [0, 0.69444, 0, 0, 0.77778],\n    \"65\": [0, 0.68333, 0, 0, 0.75],\n    \"66\": [0, 0.68333, 0, 0, 0.70834],\n    \"67\": [0, 0.68333, 0, 0, 0.72222],\n    \"68\": [0, 0.68333, 0, 0, 0.76389],\n    \"69\": [0, 0.68333, 0, 0, 0.68056],\n    \"70\": [0, 0.68333, 0, 0, 0.65278],\n    \"71\": [0, 0.68333, 0, 0, 0.78472],\n    \"72\": [0, 0.68333, 0, 0, 0.75],\n    \"73\": [0, 0.68333, 0, 0, 0.36111],\n    \"74\": [0, 0.68333, 0, 0, 0.51389],\n    \"75\": [0, 0.68333, 0, 0, 0.77778],\n    \"76\": [0, 0.68333, 0, 0, 0.625],\n    \"77\": [0, 0.68333, 0, 0, 0.91667],\n    \"78\": [0, 0.68333, 0, 0, 0.75],\n    \"79\": [0, 0.68333, 0, 0, 0.77778],\n    \"80\": [0, 0.68333, 0, 0, 0.68056],\n    \"81\": [0.19444, 0.68333, 0, 0, 0.77778],\n    \"82\": [0, 0.68333, 0, 0, 0.73611],\n    \"83\": [0, 0.68333, 0, 0, 0.55556],\n    \"84\": [0, 0.68333, 0, 0, 0.72222],\n    \"85\": [0, 0.68333, 0, 0, 0.75],\n    \"86\": [0, 0.68333, 0.01389, 0, 0.75],\n    \"87\": [0, 0.68333, 0.01389, 0, 1.02778],\n    \"88\": [0, 0.68333, 0, 0, 0.75],\n    \"89\": [0, 0.68333, 0.025, 0, 0.75],\n    \"90\": [0, 0.68333, 0, 0, 0.61111],\n    \"91\": [0.25, 0.75, 0, 0, 0.27778],\n    \"92\": [0.25, 0.75, 0, 0, 0.5],\n    \"93\": [0.25, 0.75, 0, 0, 0.27778],\n    \"94\": [0, 0.69444, 0, 0, 0.5],\n    \"95\": [0.31, 0.12056, 0.02778, 0, 0.5],\n    \"97\": [0, 0.43056, 0, 0, 0.5],\n    \"98\": [0, 0.69444, 0, 0, 0.55556],\n    \"99\": [0, 0.43056, 0, 0, 0.44445],\n    \"100\": [0, 0.69444, 0, 0, 0.55556],\n    \"101\": [0, 0.43056, 0, 0, 0.44445],\n    \"102\": [0, 0.69444, 0.07778, 0, 0.30556],\n    \"103\": [0.19444, 0.43056, 0.01389, 0, 0.5],\n    \"104\": [0, 0.69444, 0, 0, 0.55556],\n    \"105\": [0, 0.66786, 0, 0, 0.27778],\n    \"106\": [0.19444, 0.66786, 0, 0, 0.30556],\n    \"107\": [0, 0.69444, 0, 0, 0.52778],\n    \"108\": [0, 0.69444, 0, 0, 0.27778],\n    \"109\": [0, 0.43056, 0, 0, 0.83334],\n    \"110\": [0, 0.43056, 0, 0, 0.55556],\n    \"111\": [0, 0.43056, 0, 0, 0.5],\n    \"112\": [0.19444, 0.43056, 0, 0, 0.55556],\n    \"113\": [0.19444, 0.43056, 0, 0, 0.52778],\n    \"114\": [0, 0.43056, 0, 0, 0.39167],\n    \"115\": [0, 0.43056, 0, 0, 0.39445],\n    \"116\": [0, 0.61508, 0, 0, 0.38889],\n    \"117\": [0, 0.43056, 0, 0, 0.55556],\n    \"118\": [0, 0.43056, 0.01389, 0, 0.52778],\n    \"119\": [0, 0.43056, 0.01389, 0, 0.72222],\n    \"120\": [0, 0.43056, 0, 0, 0.52778],\n    \"121\": [0.19444, 0.43056, 0.01389, 0, 0.52778],\n    \"122\": [0, 0.43056, 0, 0, 0.44445],\n    \"123\": [0.25, 0.75, 0, 0, 0.5],\n    \"124\": [0.25, 0.75, 0, 0, 0.27778],\n    \"125\": [0.25, 0.75, 0, 0, 0.5],\n    \"126\": [0.35, 0.31786, 0, 0, 0.5],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"163\": [0, 0.69444, 0, 0, 0.76909],\n    \"167\": [0.19444, 0.69444, 0, 0, 0.44445],\n    \"168\": [0, 0.66786, 0, 0, 0.5],\n    \"172\": [0, 0.43056, 0, 0, 0.66667],\n    \"176\": [0, 0.69444, 0, 0, 0.75],\n    \"177\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"182\": [0.19444, 0.69444, 0, 0, 0.61111],\n    \"184\": [0.17014, 0, 0, 0, 0.44445],\n    \"198\": [0, 0.68333, 0, 0, 0.90278],\n    \"215\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"216\": [0.04861, 0.73194, 0, 0, 0.77778],\n    \"223\": [0, 0.69444, 0, 0, 0.5],\n    \"230\": [0, 0.43056, 0, 0, 0.72222],\n    \"247\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"248\": [0.09722, 0.52778, 0, 0, 0.5],\n    \"305\": [0, 0.43056, 0, 0, 0.27778],\n    \"338\": [0, 0.68333, 0, 0, 1.01389],\n    \"339\": [0, 0.43056, 0, 0, 0.77778],\n    \"567\": [0.19444, 0.43056, 0, 0, 0.30556],\n    \"710\": [0, 0.69444, 0, 0, 0.5],\n    \"711\": [0, 0.62847, 0, 0, 0.5],\n    \"713\": [0, 0.56778, 0, 0, 0.5],\n    \"714\": [0, 0.69444, 0, 0, 0.5],\n    \"715\": [0, 0.69444, 0, 0, 0.5],\n    \"728\": [0, 0.69444, 0, 0, 0.5],\n    \"729\": [0, 0.66786, 0, 0, 0.27778],\n    \"730\": [0, 0.69444, 0, 0, 0.75],\n    \"732\": [0, 0.66786, 0, 0, 0.5],\n    \"733\": [0, 0.69444, 0, 0, 0.5],\n    \"915\": [0, 0.68333, 0, 0, 0.625],\n    \"916\": [0, 0.68333, 0, 0, 0.83334],\n    \"920\": [0, 0.68333, 0, 0, 0.77778],\n    \"923\": [0, 0.68333, 0, 0, 0.69445],\n    \"926\": [0, 0.68333, 0, 0, 0.66667],\n    \"928\": [0, 0.68333, 0, 0, 0.75],\n    \"931\": [0, 0.68333, 0, 0, 0.72222],\n    \"933\": [0, 0.68333, 0, 0, 0.77778],\n    \"934\": [0, 0.68333, 0, 0, 0.72222],\n    \"936\": [0, 0.68333, 0, 0, 0.77778],\n    \"937\": [0, 0.68333, 0, 0, 0.72222],\n    \"8211\": [0, 0.43056, 0.02778, 0, 0.5],\n    \"8212\": [0, 0.43056, 0.02778, 0, 1.0],\n    \"8216\": [0, 0.69444, 0, 0, 0.27778],\n    \"8217\": [0, 0.69444, 0, 0, 0.27778],\n    \"8220\": [0, 0.69444, 0, 0, 0.5],\n    \"8221\": [0, 0.69444, 0, 0, 0.5],\n    \"8224\": [0.19444, 0.69444, 0, 0, 0.44445],\n    \"8225\": [0.19444, 0.69444, 0, 0, 0.44445],\n    \"8230\": [0, 0.123, 0, 0, 1.172],\n    \"8242\": [0, 0.55556, 0, 0, 0.275],\n    \"8407\": [0, 0.71444, 0.15382, 0, 0.5],\n    \"8463\": [0, 0.68889, 0, 0, 0.54028],\n    \"8465\": [0, 0.69444, 0, 0, 0.72222],\n    \"8467\": [0, 0.69444, 0, 0.11111, 0.41667],\n    \"8472\": [0.19444, 0.43056, 0, 0.11111, 0.63646],\n    \"8476\": [0, 0.69444, 0, 0, 0.72222],\n    \"8501\": [0, 0.69444, 0, 0, 0.61111],\n    \"8592\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8593\": [0.19444, 0.69444, 0, 0, 0.5],\n    \"8594\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8595\": [0.19444, 0.69444, 0, 0, 0.5],\n    \"8596\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8597\": [0.25, 0.75, 0, 0, 0.5],\n    \"8598\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"8599\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"8600\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"8601\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"8614\": [0.011, 0.511, 0, 0, 1.0],\n    \"8617\": [0.011, 0.511, 0, 0, 1.126],\n    \"8618\": [0.011, 0.511, 0, 0, 1.126],\n    \"8636\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8637\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8640\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8641\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8652\": [0.011, 0.671, 0, 0, 1.0],\n    \"8656\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8657\": [0.19444, 0.69444, 0, 0, 0.61111],\n    \"8658\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8659\": [0.19444, 0.69444, 0, 0, 0.61111],\n    \"8660\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8661\": [0.25, 0.75, 0, 0, 0.61111],\n    \"8704\": [0, 0.69444, 0, 0, 0.55556],\n    \"8706\": [0, 0.69444, 0.05556, 0.08334, 0.5309],\n    \"8707\": [0, 0.69444, 0, 0, 0.55556],\n    \"8709\": [0.05556, 0.75, 0, 0, 0.5],\n    \"8711\": [0, 0.68333, 0, 0, 0.83334],\n    \"8712\": [0.0391, 0.5391, 0, 0, 0.66667],\n    \"8715\": [0.0391, 0.5391, 0, 0, 0.66667],\n    \"8722\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8723\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8725\": [0.25, 0.75, 0, 0, 0.5],\n    \"8726\": [0.25, 0.75, 0, 0, 0.5],\n    \"8727\": [-0.03472, 0.46528, 0, 0, 0.5],\n    \"8728\": [-0.05555, 0.44445, 0, 0, 0.5],\n    \"8729\": [-0.05555, 0.44445, 0, 0, 0.5],\n    \"8730\": [0.2, 0.8, 0, 0, 0.83334],\n    \"8733\": [0, 0.43056, 0, 0, 0.77778],\n    \"8734\": [0, 0.43056, 0, 0, 1.0],\n    \"8736\": [0, 0.69224, 0, 0, 0.72222],\n    \"8739\": [0.25, 0.75, 0, 0, 0.27778],\n    \"8741\": [0.25, 0.75, 0, 0, 0.5],\n    \"8743\": [0, 0.55556, 0, 0, 0.66667],\n    \"8744\": [0, 0.55556, 0, 0, 0.66667],\n    \"8745\": [0, 0.55556, 0, 0, 0.66667],\n    \"8746\": [0, 0.55556, 0, 0, 0.66667],\n    \"8747\": [0.19444, 0.69444, 0.11111, 0, 0.41667],\n    \"8764\": [-0.13313, 0.36687, 0, 0, 0.77778],\n    \"8768\": [0.19444, 0.69444, 0, 0, 0.27778],\n    \"8771\": [-0.03625, 0.46375, 0, 0, 0.77778],\n    \"8773\": [-0.022, 0.589, 0, 0, 0.778],\n    \"8776\": [-0.01688, 0.48312, 0, 0, 0.77778],\n    \"8781\": [-0.03625, 0.46375, 0, 0, 0.77778],\n    \"8784\": [-0.133, 0.673, 0, 0, 0.778],\n    \"8801\": [-0.03625, 0.46375, 0, 0, 0.77778],\n    \"8804\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8805\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8810\": [0.0391, 0.5391, 0, 0, 1.0],\n    \"8811\": [0.0391, 0.5391, 0, 0, 1.0],\n    \"8826\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8827\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8834\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8835\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8838\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8839\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8846\": [0, 0.55556, 0, 0, 0.66667],\n    \"8849\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8850\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8851\": [0, 0.55556, 0, 0, 0.66667],\n    \"8852\": [0, 0.55556, 0, 0, 0.66667],\n    \"8853\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8854\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8855\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8856\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8857\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8866\": [0, 0.69444, 0, 0, 0.61111],\n    \"8867\": [0, 0.69444, 0, 0, 0.61111],\n    \"8868\": [0, 0.69444, 0, 0, 0.77778],\n    \"8869\": [0, 0.69444, 0, 0, 0.77778],\n    \"8872\": [0.249, 0.75, 0, 0, 0.867],\n    \"8900\": [-0.05555, 0.44445, 0, 0, 0.5],\n    \"8901\": [-0.05555, 0.44445, 0, 0, 0.27778],\n    \"8902\": [-0.03472, 0.46528, 0, 0, 0.5],\n    \"8904\": [0.005, 0.505, 0, 0, 0.9],\n    \"8942\": [0.03, 0.903, 0, 0, 0.278],\n    \"8943\": [-0.19, 0.313, 0, 0, 1.172],\n    \"8945\": [-0.1, 0.823, 0, 0, 1.282],\n    \"8968\": [0.25, 0.75, 0, 0, 0.44445],\n    \"8969\": [0.25, 0.75, 0, 0, 0.44445],\n    \"8970\": [0.25, 0.75, 0, 0, 0.44445],\n    \"8971\": [0.25, 0.75, 0, 0, 0.44445],\n    \"8994\": [-0.14236, 0.35764, 0, 0, 1.0],\n    \"8995\": [-0.14236, 0.35764, 0, 0, 1.0],\n    \"9136\": [0.244, 0.744, 0, 0, 0.412],\n    \"9137\": [0.244, 0.745, 0, 0, 0.412],\n    \"9651\": [0.19444, 0.69444, 0, 0, 0.88889],\n    \"9657\": [-0.03472, 0.46528, 0, 0, 0.5],\n    \"9661\": [0.19444, 0.69444, 0, 0, 0.88889],\n    \"9667\": [-0.03472, 0.46528, 0, 0, 0.5],\n    \"9711\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"9824\": [0.12963, 0.69444, 0, 0, 0.77778],\n    \"9825\": [0.12963, 0.69444, 0, 0, 0.77778],\n    \"9826\": [0.12963, 0.69444, 0, 0, 0.77778],\n    \"9827\": [0.12963, 0.69444, 0, 0, 0.77778],\n    \"9837\": [0, 0.75, 0, 0, 0.38889],\n    \"9838\": [0.19444, 0.69444, 0, 0, 0.38889],\n    \"9839\": [0.19444, 0.69444, 0, 0, 0.38889],\n    \"10216\": [0.25, 0.75, 0, 0, 0.38889],\n    \"10217\": [0.25, 0.75, 0, 0, 0.38889],\n    \"10222\": [0.244, 0.744, 0, 0, 0.412],\n    \"10223\": [0.244, 0.745, 0, 0, 0.412],\n    \"10229\": [0.011, 0.511, 0, 0, 1.609],\n    \"10230\": [0.011, 0.511, 0, 0, 1.638],\n    \"10231\": [0.011, 0.511, 0, 0, 1.859],\n    \"10232\": [0.024, 0.525, 0, 0, 1.609],\n    \"10233\": [0.024, 0.525, 0, 0, 1.638],\n    \"10234\": [0.024, 0.525, 0, 0, 1.858],\n    \"10236\": [0.011, 0.511, 0, 0, 1.638],\n    \"10815\": [0, 0.68333, 0, 0, 0.75],\n    \"10927\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"10928\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"57376\": [0.19444, 0.69444, 0, 0, 0]\n  },\n  \"Math-BoldItalic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"48\": [0, 0.44444, 0, 0, 0.575],\n    \"49\": [0, 0.44444, 0, 0, 0.575],\n    \"50\": [0, 0.44444, 0, 0, 0.575],\n    \"51\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"52\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"53\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"54\": [0, 0.64444, 0, 0, 0.575],\n    \"55\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"56\": [0, 0.64444, 0, 0, 0.575],\n    \"57\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"65\": [0, 0.68611, 0, 0, 0.86944],\n    \"66\": [0, 0.68611, 0.04835, 0, 0.8664],\n    \"67\": [0, 0.68611, 0.06979, 0, 0.81694],\n    \"68\": [0, 0.68611, 0.03194, 0, 0.93812],\n    \"69\": [0, 0.68611, 0.05451, 0, 0.81007],\n    \"70\": [0, 0.68611, 0.15972, 0, 0.68889],\n    \"71\": [0, 0.68611, 0, 0, 0.88673],\n    \"72\": [0, 0.68611, 0.08229, 0, 0.98229],\n    \"73\": [0, 0.68611, 0.07778, 0, 0.51111],\n    \"74\": [0, 0.68611, 0.10069, 0, 0.63125],\n    \"75\": [0, 0.68611, 0.06979, 0, 0.97118],\n    \"76\": [0, 0.68611, 0, 0, 0.75555],\n    \"77\": [0, 0.68611, 0.11424, 0, 1.14201],\n    \"78\": [0, 0.68611, 0.11424, 0, 0.95034],\n    \"79\": [0, 0.68611, 0.03194, 0, 0.83666],\n    \"80\": [0, 0.68611, 0.15972, 0, 0.72309],\n    \"81\": [0.19444, 0.68611, 0, 0, 0.86861],\n    \"82\": [0, 0.68611, 0.00421, 0, 0.87235],\n    \"83\": [0, 0.68611, 0.05382, 0, 0.69271],\n    \"84\": [0, 0.68611, 0.15972, 0, 0.63663],\n    \"85\": [0, 0.68611, 0.11424, 0, 0.80027],\n    \"86\": [0, 0.68611, 0.25555, 0, 0.67778],\n    \"87\": [0, 0.68611, 0.15972, 0, 1.09305],\n    \"88\": [0, 0.68611, 0.07778, 0, 0.94722],\n    \"89\": [0, 0.68611, 0.25555, 0, 0.67458],\n    \"90\": [0, 0.68611, 0.06979, 0, 0.77257],\n    \"97\": [0, 0.44444, 0, 0, 0.63287],\n    \"98\": [0, 0.69444, 0, 0, 0.52083],\n    \"99\": [0, 0.44444, 0, 0, 0.51342],\n    \"100\": [0, 0.69444, 0, 0, 0.60972],\n    \"101\": [0, 0.44444, 0, 0, 0.55361],\n    \"102\": [0.19444, 0.69444, 0.11042, 0, 0.56806],\n    \"103\": [0.19444, 0.44444, 0.03704, 0, 0.5449],\n    \"104\": [0, 0.69444, 0, 0, 0.66759],\n    \"105\": [0, 0.69326, 0, 0, 0.4048],\n    \"106\": [0.19444, 0.69326, 0.0622, 0, 0.47083],\n    \"107\": [0, 0.69444, 0.01852, 0, 0.6037],\n    \"108\": [0, 0.69444, 0.0088, 0, 0.34815],\n    \"109\": [0, 0.44444, 0, 0, 1.0324],\n    \"110\": [0, 0.44444, 0, 0, 0.71296],\n    \"111\": [0, 0.44444, 0, 0, 0.58472],\n    \"112\": [0.19444, 0.44444, 0, 0, 0.60092],\n    \"113\": [0.19444, 0.44444, 0.03704, 0, 0.54213],\n    \"114\": [0, 0.44444, 0.03194, 0, 0.5287],\n    \"115\": [0, 0.44444, 0, 0, 0.53125],\n    \"116\": [0, 0.63492, 0, 0, 0.41528],\n    \"117\": [0, 0.44444, 0, 0, 0.68102],\n    \"118\": [0, 0.44444, 0.03704, 0, 0.56666],\n    \"119\": [0, 0.44444, 0.02778, 0, 0.83148],\n    \"120\": [0, 0.44444, 0, 0, 0.65903],\n    \"121\": [0.19444, 0.44444, 0.03704, 0, 0.59028],\n    \"122\": [0, 0.44444, 0.04213, 0, 0.55509],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"915\": [0, 0.68611, 0.15972, 0, 0.65694],\n    \"916\": [0, 0.68611, 0, 0, 0.95833],\n    \"920\": [0, 0.68611, 0.03194, 0, 0.86722],\n    \"923\": [0, 0.68611, 0, 0, 0.80555],\n    \"926\": [0, 0.68611, 0.07458, 0, 0.84125],\n    \"928\": [0, 0.68611, 0.08229, 0, 0.98229],\n    \"931\": [0, 0.68611, 0.05451, 0, 0.88507],\n    \"933\": [0, 0.68611, 0.15972, 0, 0.67083],\n    \"934\": [0, 0.68611, 0, 0, 0.76666],\n    \"936\": [0, 0.68611, 0.11653, 0, 0.71402],\n    \"937\": [0, 0.68611, 0.04835, 0, 0.8789],\n    \"945\": [0, 0.44444, 0, 0, 0.76064],\n    \"946\": [0.19444, 0.69444, 0.03403, 0, 0.65972],\n    \"947\": [0.19444, 0.44444, 0.06389, 0, 0.59003],\n    \"948\": [0, 0.69444, 0.03819, 0, 0.52222],\n    \"949\": [0, 0.44444, 0, 0, 0.52882],\n    \"950\": [0.19444, 0.69444, 0.06215, 0, 0.50833],\n    \"951\": [0.19444, 0.44444, 0.03704, 0, 0.6],\n    \"952\": [0, 0.69444, 0.03194, 0, 0.5618],\n    \"953\": [0, 0.44444, 0, 0, 0.41204],\n    \"954\": [0, 0.44444, 0, 0, 0.66759],\n    \"955\": [0, 0.69444, 0, 0, 0.67083],\n    \"956\": [0.19444, 0.44444, 0, 0, 0.70787],\n    \"957\": [0, 0.44444, 0.06898, 0, 0.57685],\n    \"958\": [0.19444, 0.69444, 0.03021, 0, 0.50833],\n    \"959\": [0, 0.44444, 0, 0, 0.58472],\n    \"960\": [0, 0.44444, 0.03704, 0, 0.68241],\n    \"961\": [0.19444, 0.44444, 0, 0, 0.6118],\n    \"962\": [0.09722, 0.44444, 0.07917, 0, 0.42361],\n    \"963\": [0, 0.44444, 0.03704, 0, 0.68588],\n    \"964\": [0, 0.44444, 0.13472, 0, 0.52083],\n    \"965\": [0, 0.44444, 0.03704, 0, 0.63055],\n    \"966\": [0.19444, 0.44444, 0, 0, 0.74722],\n    \"967\": [0.19444, 0.44444, 0, 0, 0.71805],\n    \"968\": [0.19444, 0.69444, 0.03704, 0, 0.75833],\n    \"969\": [0, 0.44444, 0.03704, 0, 0.71782],\n    \"977\": [0, 0.69444, 0, 0, 0.69155],\n    \"981\": [0.19444, 0.69444, 0, 0, 0.7125],\n    \"982\": [0, 0.44444, 0.03194, 0, 0.975],\n    \"1009\": [0.19444, 0.44444, 0, 0, 0.6118],\n    \"1013\": [0, 0.44444, 0, 0, 0.48333],\n    \"57649\": [0, 0.44444, 0, 0, 0.39352],\n    \"57911\": [0.19444, 0.44444, 0, 0, 0.43889]\n  },\n  \"Math-Italic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"48\": [0, 0.43056, 0, 0, 0.5],\n    \"49\": [0, 0.43056, 0, 0, 0.5],\n    \"50\": [0, 0.43056, 0, 0, 0.5],\n    \"51\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"52\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"53\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"54\": [0, 0.64444, 0, 0, 0.5],\n    \"55\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"56\": [0, 0.64444, 0, 0, 0.5],\n    \"57\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"65\": [0, 0.68333, 0, 0.13889, 0.75],\n    \"66\": [0, 0.68333, 0.05017, 0.08334, 0.75851],\n    \"67\": [0, 0.68333, 0.07153, 0.08334, 0.71472],\n    \"68\": [0, 0.68333, 0.02778, 0.05556, 0.82792],\n    \"69\": [0, 0.68333, 0.05764, 0.08334, 0.7382],\n    \"70\": [0, 0.68333, 0.13889, 0.08334, 0.64306],\n    \"71\": [0, 0.68333, 0, 0.08334, 0.78625],\n    \"72\": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n    \"73\": [0, 0.68333, 0.07847, 0.11111, 0.43958],\n    \"74\": [0, 0.68333, 0.09618, 0.16667, 0.55451],\n    \"75\": [0, 0.68333, 0.07153, 0.05556, 0.84931],\n    \"76\": [0, 0.68333, 0, 0.02778, 0.68056],\n    \"77\": [0, 0.68333, 0.10903, 0.08334, 0.97014],\n    \"78\": [0, 0.68333, 0.10903, 0.08334, 0.80347],\n    \"79\": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n    \"80\": [0, 0.68333, 0.13889, 0.08334, 0.64201],\n    \"81\": [0.19444, 0.68333, 0, 0.08334, 0.79056],\n    \"82\": [0, 0.68333, 0.00773, 0.08334, 0.75929],\n    \"83\": [0, 0.68333, 0.05764, 0.08334, 0.6132],\n    \"84\": [0, 0.68333, 0.13889, 0.08334, 0.58438],\n    \"85\": [0, 0.68333, 0.10903, 0.02778, 0.68278],\n    \"86\": [0, 0.68333, 0.22222, 0, 0.58333],\n    \"87\": [0, 0.68333, 0.13889, 0, 0.94445],\n    \"88\": [0, 0.68333, 0.07847, 0.08334, 0.82847],\n    \"89\": [0, 0.68333, 0.22222, 0, 0.58056],\n    \"90\": [0, 0.68333, 0.07153, 0.08334, 0.68264],\n    \"97\": [0, 0.43056, 0, 0, 0.52859],\n    \"98\": [0, 0.69444, 0, 0, 0.42917],\n    \"99\": [0, 0.43056, 0, 0.05556, 0.43276],\n    \"100\": [0, 0.69444, 0, 0.16667, 0.52049],\n    \"101\": [0, 0.43056, 0, 0.05556, 0.46563],\n    \"102\": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],\n    \"103\": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],\n    \"104\": [0, 0.69444, 0, 0, 0.57616],\n    \"105\": [0, 0.65952, 0, 0, 0.34451],\n    \"106\": [0.19444, 0.65952, 0.05724, 0, 0.41181],\n    \"107\": [0, 0.69444, 0.03148, 0, 0.5206],\n    \"108\": [0, 0.69444, 0.01968, 0.08334, 0.29838],\n    \"109\": [0, 0.43056, 0, 0, 0.87801],\n    \"110\": [0, 0.43056, 0, 0, 0.60023],\n    \"111\": [0, 0.43056, 0, 0.05556, 0.48472],\n    \"112\": [0.19444, 0.43056, 0, 0.08334, 0.50313],\n    \"113\": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],\n    \"114\": [0, 0.43056, 0.02778, 0.05556, 0.45116],\n    \"115\": [0, 0.43056, 0, 0.05556, 0.46875],\n    \"116\": [0, 0.61508, 0, 0.08334, 0.36111],\n    \"117\": [0, 0.43056, 0, 0.02778, 0.57246],\n    \"118\": [0, 0.43056, 0.03588, 0.02778, 0.48472],\n    \"119\": [0, 0.43056, 0.02691, 0.08334, 0.71592],\n    \"120\": [0, 0.43056, 0, 0.02778, 0.57153],\n    \"121\": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],\n    \"122\": [0, 0.43056, 0.04398, 0.05556, 0.46505],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"915\": [0, 0.68333, 0.13889, 0.08334, 0.61528],\n    \"916\": [0, 0.68333, 0, 0.16667, 0.83334],\n    \"920\": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n    \"923\": [0, 0.68333, 0, 0.16667, 0.69445],\n    \"926\": [0, 0.68333, 0.07569, 0.08334, 0.74236],\n    \"928\": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n    \"931\": [0, 0.68333, 0.05764, 0.08334, 0.77986],\n    \"933\": [0, 0.68333, 0.13889, 0.05556, 0.58333],\n    \"934\": [0, 0.68333, 0, 0.08334, 0.66667],\n    \"936\": [0, 0.68333, 0.11, 0.05556, 0.61222],\n    \"937\": [0, 0.68333, 0.05017, 0.08334, 0.7724],\n    \"945\": [0, 0.43056, 0.0037, 0.02778, 0.6397],\n    \"946\": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],\n    \"947\": [0.19444, 0.43056, 0.05556, 0, 0.51773],\n    \"948\": [0, 0.69444, 0.03785, 0.05556, 0.44444],\n    \"949\": [0, 0.43056, 0, 0.08334, 0.46632],\n    \"950\": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],\n    \"951\": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],\n    \"952\": [0, 0.69444, 0.02778, 0.08334, 0.46944],\n    \"953\": [0, 0.43056, 0, 0.05556, 0.35394],\n    \"954\": [0, 0.43056, 0, 0, 0.57616],\n    \"955\": [0, 0.69444, 0, 0, 0.58334],\n    \"956\": [0.19444, 0.43056, 0, 0.02778, 0.60255],\n    \"957\": [0, 0.43056, 0.06366, 0.02778, 0.49398],\n    \"958\": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],\n    \"959\": [0, 0.43056, 0, 0.05556, 0.48472],\n    \"960\": [0, 0.43056, 0.03588, 0, 0.57003],\n    \"961\": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n    \"962\": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],\n    \"963\": [0, 0.43056, 0.03588, 0, 0.57141],\n    \"964\": [0, 0.43056, 0.1132, 0.02778, 0.43715],\n    \"965\": [0, 0.43056, 0.03588, 0.02778, 0.54028],\n    \"966\": [0.19444, 0.43056, 0, 0.08334, 0.65417],\n    \"967\": [0.19444, 0.43056, 0, 0.05556, 0.62569],\n    \"968\": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],\n    \"969\": [0, 0.43056, 0.03588, 0, 0.62245],\n    \"977\": [0, 0.69444, 0, 0.08334, 0.59144],\n    \"981\": [0.19444, 0.69444, 0, 0.08334, 0.59583],\n    \"982\": [0, 0.43056, 0.02778, 0, 0.82813],\n    \"1009\": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n    \"1013\": [0, 0.43056, 0, 0.05556, 0.4059],\n    \"57649\": [0, 0.43056, 0, 0.02778, 0.32246],\n    \"57911\": [0.19444, 0.43056, 0, 0.08334, 0.38403]\n  },\n  \"SansSerif-Bold\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0, 0, 0.36667],\n    \"34\": [0, 0.69444, 0, 0, 0.55834],\n    \"35\": [0.19444, 0.69444, 0, 0, 0.91667],\n    \"36\": [0.05556, 0.75, 0, 0, 0.55],\n    \"37\": [0.05556, 0.75, 0, 0, 1.02912],\n    \"38\": [0, 0.69444, 0, 0, 0.83056],\n    \"39\": [0, 0.69444, 0, 0, 0.30556],\n    \"40\": [0.25, 0.75, 0, 0, 0.42778],\n    \"41\": [0.25, 0.75, 0, 0, 0.42778],\n    \"42\": [0, 0.75, 0, 0, 0.55],\n    \"43\": [0.11667, 0.61667, 0, 0, 0.85556],\n    \"44\": [0.10556, 0.13056, 0, 0, 0.30556],\n    \"45\": [0, 0.45833, 0, 0, 0.36667],\n    \"46\": [0, 0.13056, 0, 0, 0.30556],\n    \"47\": [0.25, 0.75, 0, 0, 0.55],\n    \"48\": [0, 0.69444, 0, 0, 0.55],\n    \"49\": [0, 0.69444, 0, 0, 0.55],\n    \"50\": [0, 0.69444, 0, 0, 0.55],\n    \"51\": [0, 0.69444, 0, 0, 0.55],\n    \"52\": [0, 0.69444, 0, 0, 0.55],\n    \"53\": [0, 0.69444, 0, 0, 0.55],\n    \"54\": [0, 0.69444, 0, 0, 0.55],\n    \"55\": [0, 0.69444, 0, 0, 0.55],\n    \"56\": [0, 0.69444, 0, 0, 0.55],\n    \"57\": [0, 0.69444, 0, 0, 0.55],\n    \"58\": [0, 0.45833, 0, 0, 0.30556],\n    \"59\": [0.10556, 0.45833, 0, 0, 0.30556],\n    \"61\": [-0.09375, 0.40625, 0, 0, 0.85556],\n    \"63\": [0, 0.69444, 0, 0, 0.51945],\n    \"64\": [0, 0.69444, 0, 0, 0.73334],\n    \"65\": [0, 0.69444, 0, 0, 0.73334],\n    \"66\": [0, 0.69444, 0, 0, 0.73334],\n    \"67\": [0, 0.69444, 0, 0, 0.70278],\n    \"68\": [0, 0.69444, 0, 0, 0.79445],\n    \"69\": [0, 0.69444, 0, 0, 0.64167],\n    \"70\": [0, 0.69444, 0, 0, 0.61111],\n    \"71\": [0, 0.69444, 0, 0, 0.73334],\n    \"72\": [0, 0.69444, 0, 0, 0.79445],\n    \"73\": [0, 0.69444, 0, 0, 0.33056],\n    \"74\": [0, 0.69444, 0, 0, 0.51945],\n    \"75\": [0, 0.69444, 0, 0, 0.76389],\n    \"76\": [0, 0.69444, 0, 0, 0.58056],\n    \"77\": [0, 0.69444, 0, 0, 0.97778],\n    \"78\": [0, 0.69444, 0, 0, 0.79445],\n    \"79\": [0, 0.69444, 0, 0, 0.79445],\n    \"80\": [0, 0.69444, 0, 0, 0.70278],\n    \"81\": [0.10556, 0.69444, 0, 0, 0.79445],\n    \"82\": [0, 0.69444, 0, 0, 0.70278],\n    \"83\": [0, 0.69444, 0, 0, 0.61111],\n    \"84\": [0, 0.69444, 0, 0, 0.73334],\n    \"85\": [0, 0.69444, 0, 0, 0.76389],\n    \"86\": [0, 0.69444, 0.01528, 0, 0.73334],\n    \"87\": [0, 0.69444, 0.01528, 0, 1.03889],\n    \"88\": [0, 0.69444, 0, 0, 0.73334],\n    \"89\": [0, 0.69444, 0.0275, 0, 0.73334],\n    \"90\": [0, 0.69444, 0, 0, 0.67223],\n    \"91\": [0.25, 0.75, 0, 0, 0.34306],\n    \"93\": [0.25, 0.75, 0, 0, 0.34306],\n    \"94\": [0, 0.69444, 0, 0, 0.55],\n    \"95\": [0.35, 0.10833, 0.03056, 0, 0.55],\n    \"97\": [0, 0.45833, 0, 0, 0.525],\n    \"98\": [0, 0.69444, 0, 0, 0.56111],\n    \"99\": [0, 0.45833, 0, 0, 0.48889],\n    \"100\": [0, 0.69444, 0, 0, 0.56111],\n    \"101\": [0, 0.45833, 0, 0, 0.51111],\n    \"102\": [0, 0.69444, 0.07639, 0, 0.33611],\n    \"103\": [0.19444, 0.45833, 0.01528, 0, 0.55],\n    \"104\": [0, 0.69444, 0, 0, 0.56111],\n    \"105\": [0, 0.69444, 0, 0, 0.25556],\n    \"106\": [0.19444, 0.69444, 0, 0, 0.28611],\n    \"107\": [0, 0.69444, 0, 0, 0.53056],\n    \"108\": [0, 0.69444, 0, 0, 0.25556],\n    \"109\": [0, 0.45833, 0, 0, 0.86667],\n    \"110\": [0, 0.45833, 0, 0, 0.56111],\n    \"111\": [0, 0.45833, 0, 0, 0.55],\n    \"112\": [0.19444, 0.45833, 0, 0, 0.56111],\n    \"113\": [0.19444, 0.45833, 0, 0, 0.56111],\n    \"114\": [0, 0.45833, 0.01528, 0, 0.37222],\n    \"115\": [0, 0.45833, 0, 0, 0.42167],\n    \"116\": [0, 0.58929, 0, 0, 0.40417],\n    \"117\": [0, 0.45833, 0, 0, 0.56111],\n    \"118\": [0, 0.45833, 0.01528, 0, 0.5],\n    \"119\": [0, 0.45833, 0.01528, 0, 0.74445],\n    \"120\": [0, 0.45833, 0, 0, 0.5],\n    \"121\": [0.19444, 0.45833, 0.01528, 0, 0.5],\n    \"122\": [0, 0.45833, 0, 0, 0.47639],\n    \"126\": [0.35, 0.34444, 0, 0, 0.55],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.69444, 0, 0, 0.55],\n    \"176\": [0, 0.69444, 0, 0, 0.73334],\n    \"180\": [0, 0.69444, 0, 0, 0.55],\n    \"184\": [0.17014, 0, 0, 0, 0.48889],\n    \"305\": [0, 0.45833, 0, 0, 0.25556],\n    \"567\": [0.19444, 0.45833, 0, 0, 0.28611],\n    \"710\": [0, 0.69444, 0, 0, 0.55],\n    \"711\": [0, 0.63542, 0, 0, 0.55],\n    \"713\": [0, 0.63778, 0, 0, 0.55],\n    \"728\": [0, 0.69444, 0, 0, 0.55],\n    \"729\": [0, 0.69444, 0, 0, 0.30556],\n    \"730\": [0, 0.69444, 0, 0, 0.73334],\n    \"732\": [0, 0.69444, 0, 0, 0.55],\n    \"733\": [0, 0.69444, 0, 0, 0.55],\n    \"915\": [0, 0.69444, 0, 0, 0.58056],\n    \"916\": [0, 0.69444, 0, 0, 0.91667],\n    \"920\": [0, 0.69444, 0, 0, 0.85556],\n    \"923\": [0, 0.69444, 0, 0, 0.67223],\n    \"926\": [0, 0.69444, 0, 0, 0.73334],\n    \"928\": [0, 0.69444, 0, 0, 0.79445],\n    \"931\": [0, 0.69444, 0, 0, 0.79445],\n    \"933\": [0, 0.69444, 0, 0, 0.85556],\n    \"934\": [0, 0.69444, 0, 0, 0.79445],\n    \"936\": [0, 0.69444, 0, 0, 0.85556],\n    \"937\": [0, 0.69444, 0, 0, 0.79445],\n    \"8211\": [0, 0.45833, 0.03056, 0, 0.55],\n    \"8212\": [0, 0.45833, 0.03056, 0, 1.10001],\n    \"8216\": [0, 0.69444, 0, 0, 0.30556],\n    \"8217\": [0, 0.69444, 0, 0, 0.30556],\n    \"8220\": [0, 0.69444, 0, 0, 0.55834],\n    \"8221\": [0, 0.69444, 0, 0, 0.55834]\n  },\n  \"SansSerif-Italic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0.05733, 0, 0.31945],\n    \"34\": [0, 0.69444, 0.00316, 0, 0.5],\n    \"35\": [0.19444, 0.69444, 0.05087, 0, 0.83334],\n    \"36\": [0.05556, 0.75, 0.11156, 0, 0.5],\n    \"37\": [0.05556, 0.75, 0.03126, 0, 0.83334],\n    \"38\": [0, 0.69444, 0.03058, 0, 0.75834],\n    \"39\": [0, 0.69444, 0.07816, 0, 0.27778],\n    \"40\": [0.25, 0.75, 0.13164, 0, 0.38889],\n    \"41\": [0.25, 0.75, 0.02536, 0, 0.38889],\n    \"42\": [0, 0.75, 0.11775, 0, 0.5],\n    \"43\": [0.08333, 0.58333, 0.02536, 0, 0.77778],\n    \"44\": [0.125, 0.08333, 0, 0, 0.27778],\n    \"45\": [0, 0.44444, 0.01946, 0, 0.33333],\n    \"46\": [0, 0.08333, 0, 0, 0.27778],\n    \"47\": [0.25, 0.75, 0.13164, 0, 0.5],\n    \"48\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"49\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"50\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"51\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"52\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"53\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"54\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"55\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"56\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"57\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"58\": [0, 0.44444, 0.02502, 0, 0.27778],\n    \"59\": [0.125, 0.44444, 0.02502, 0, 0.27778],\n    \"61\": [-0.13, 0.37, 0.05087, 0, 0.77778],\n    \"63\": [0, 0.69444, 0.11809, 0, 0.47222],\n    \"64\": [0, 0.69444, 0.07555, 0, 0.66667],\n    \"65\": [0, 0.69444, 0, 0, 0.66667],\n    \"66\": [0, 0.69444, 0.08293, 0, 0.66667],\n    \"67\": [0, 0.69444, 0.11983, 0, 0.63889],\n    \"68\": [0, 0.69444, 0.07555, 0, 0.72223],\n    \"69\": [0, 0.69444, 0.11983, 0, 0.59722],\n    \"70\": [0, 0.69444, 0.13372, 0, 0.56945],\n    \"71\": [0, 0.69444, 0.11983, 0, 0.66667],\n    \"72\": [0, 0.69444, 0.08094, 0, 0.70834],\n    \"73\": [0, 0.69444, 0.13372, 0, 0.27778],\n    \"74\": [0, 0.69444, 0.08094, 0, 0.47222],\n    \"75\": [0, 0.69444, 0.11983, 0, 0.69445],\n    \"76\": [0, 0.69444, 0, 0, 0.54167],\n    \"77\": [0, 0.69444, 0.08094, 0, 0.875],\n    \"78\": [0, 0.69444, 0.08094, 0, 0.70834],\n    \"79\": [0, 0.69444, 0.07555, 0, 0.73611],\n    \"80\": [0, 0.69444, 0.08293, 0, 0.63889],\n    \"81\": [0.125, 0.69444, 0.07555, 0, 0.73611],\n    \"82\": [0, 0.69444, 0.08293, 0, 0.64584],\n    \"83\": [0, 0.69444, 0.09205, 0, 0.55556],\n    \"84\": [0, 0.69444, 0.13372, 0, 0.68056],\n    \"85\": [0, 0.69444, 0.08094, 0, 0.6875],\n    \"86\": [0, 0.69444, 0.1615, 0, 0.66667],\n    \"87\": [0, 0.69444, 0.1615, 0, 0.94445],\n    \"88\": [0, 0.69444, 0.13372, 0, 0.66667],\n    \"89\": [0, 0.69444, 0.17261, 0, 0.66667],\n    \"90\": [0, 0.69444, 0.11983, 0, 0.61111],\n    \"91\": [0.25, 0.75, 0.15942, 0, 0.28889],\n    \"93\": [0.25, 0.75, 0.08719, 0, 0.28889],\n    \"94\": [0, 0.69444, 0.0799, 0, 0.5],\n    \"95\": [0.35, 0.09444, 0.08616, 0, 0.5],\n    \"97\": [0, 0.44444, 0.00981, 0, 0.48056],\n    \"98\": [0, 0.69444, 0.03057, 0, 0.51667],\n    \"99\": [0, 0.44444, 0.08336, 0, 0.44445],\n    \"100\": [0, 0.69444, 0.09483, 0, 0.51667],\n    \"101\": [0, 0.44444, 0.06778, 0, 0.44445],\n    \"102\": [0, 0.69444, 0.21705, 0, 0.30556],\n    \"103\": [0.19444, 0.44444, 0.10836, 0, 0.5],\n    \"104\": [0, 0.69444, 0.01778, 0, 0.51667],\n    \"105\": [0, 0.67937, 0.09718, 0, 0.23889],\n    \"106\": [0.19444, 0.67937, 0.09162, 0, 0.26667],\n    \"107\": [0, 0.69444, 0.08336, 0, 0.48889],\n    \"108\": [0, 0.69444, 0.09483, 0, 0.23889],\n    \"109\": [0, 0.44444, 0.01778, 0, 0.79445],\n    \"110\": [0, 0.44444, 0.01778, 0, 0.51667],\n    \"111\": [0, 0.44444, 0.06613, 0, 0.5],\n    \"112\": [0.19444, 0.44444, 0.0389, 0, 0.51667],\n    \"113\": [0.19444, 0.44444, 0.04169, 0, 0.51667],\n    \"114\": [0, 0.44444, 0.10836, 0, 0.34167],\n    \"115\": [0, 0.44444, 0.0778, 0, 0.38333],\n    \"116\": [0, 0.57143, 0.07225, 0, 0.36111],\n    \"117\": [0, 0.44444, 0.04169, 0, 0.51667],\n    \"118\": [0, 0.44444, 0.10836, 0, 0.46111],\n    \"119\": [0, 0.44444, 0.10836, 0, 0.68334],\n    \"120\": [0, 0.44444, 0.09169, 0, 0.46111],\n    \"121\": [0.19444, 0.44444, 0.10836, 0, 0.46111],\n    \"122\": [0, 0.44444, 0.08752, 0, 0.43472],\n    \"126\": [0.35, 0.32659, 0.08826, 0, 0.5],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.67937, 0.06385, 0, 0.5],\n    \"176\": [0, 0.69444, 0, 0, 0.73752],\n    \"184\": [0.17014, 0, 0, 0, 0.44445],\n    \"305\": [0, 0.44444, 0.04169, 0, 0.23889],\n    \"567\": [0.19444, 0.44444, 0.04169, 0, 0.26667],\n    \"710\": [0, 0.69444, 0.0799, 0, 0.5],\n    \"711\": [0, 0.63194, 0.08432, 0, 0.5],\n    \"713\": [0, 0.60889, 0.08776, 0, 0.5],\n    \"714\": [0, 0.69444, 0.09205, 0, 0.5],\n    \"715\": [0, 0.69444, 0, 0, 0.5],\n    \"728\": [0, 0.69444, 0.09483, 0, 0.5],\n    \"729\": [0, 0.67937, 0.07774, 0, 0.27778],\n    \"730\": [0, 0.69444, 0, 0, 0.73752],\n    \"732\": [0, 0.67659, 0.08826, 0, 0.5],\n    \"733\": [0, 0.69444, 0.09205, 0, 0.5],\n    \"915\": [0, 0.69444, 0.13372, 0, 0.54167],\n    \"916\": [0, 0.69444, 0, 0, 0.83334],\n    \"920\": [0, 0.69444, 0.07555, 0, 0.77778],\n    \"923\": [0, 0.69444, 0, 0, 0.61111],\n    \"926\": [0, 0.69444, 0.12816, 0, 0.66667],\n    \"928\": [0, 0.69444, 0.08094, 0, 0.70834],\n    \"931\": [0, 0.69444, 0.11983, 0, 0.72222],\n    \"933\": [0, 0.69444, 0.09031, 0, 0.77778],\n    \"934\": [0, 0.69444, 0.04603, 0, 0.72222],\n    \"936\": [0, 0.69444, 0.09031, 0, 0.77778],\n    \"937\": [0, 0.69444, 0.08293, 0, 0.72222],\n    \"8211\": [0, 0.44444, 0.08616, 0, 0.5],\n    \"8212\": [0, 0.44444, 0.08616, 0, 1.0],\n    \"8216\": [0, 0.69444, 0.07816, 0, 0.27778],\n    \"8217\": [0, 0.69444, 0.07816, 0, 0.27778],\n    \"8220\": [0, 0.69444, 0.14205, 0, 0.5],\n    \"8221\": [0, 0.69444, 0.00316, 0, 0.5]\n  },\n  \"SansSerif-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0, 0, 0.31945],\n    \"34\": [0, 0.69444, 0, 0, 0.5],\n    \"35\": [0.19444, 0.69444, 0, 0, 0.83334],\n    \"36\": [0.05556, 0.75, 0, 0, 0.5],\n    \"37\": [0.05556, 0.75, 0, 0, 0.83334],\n    \"38\": [0, 0.69444, 0, 0, 0.75834],\n    \"39\": [0, 0.69444, 0, 0, 0.27778],\n    \"40\": [0.25, 0.75, 0, 0, 0.38889],\n    \"41\": [0.25, 0.75, 0, 0, 0.38889],\n    \"42\": [0, 0.75, 0, 0, 0.5],\n    \"43\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"44\": [0.125, 0.08333, 0, 0, 0.27778],\n    \"45\": [0, 0.44444, 0, 0, 0.33333],\n    \"46\": [0, 0.08333, 0, 0, 0.27778],\n    \"47\": [0.25, 0.75, 0, 0, 0.5],\n    \"48\": [0, 0.65556, 0, 0, 0.5],\n    \"49\": [0, 0.65556, 0, 0, 0.5],\n    \"50\": [0, 0.65556, 0, 0, 0.5],\n    \"51\": [0, 0.65556, 0, 0, 0.5],\n    \"52\": [0, 0.65556, 0, 0, 0.5],\n    \"53\": [0, 0.65556, 0, 0, 0.5],\n    \"54\": [0, 0.65556, 0, 0, 0.5],\n    \"55\": [0, 0.65556, 0, 0, 0.5],\n    \"56\": [0, 0.65556, 0, 0, 0.5],\n    \"57\": [0, 0.65556, 0, 0, 0.5],\n    \"58\": [0, 0.44444, 0, 0, 0.27778],\n    \"59\": [0.125, 0.44444, 0, 0, 0.27778],\n    \"61\": [-0.13, 0.37, 0, 0, 0.77778],\n    \"63\": [0, 0.69444, 0, 0, 0.47222],\n    \"64\": [0, 0.69444, 0, 0, 0.66667],\n    \"65\": [0, 0.69444, 0, 0, 0.66667],\n    \"66\": [0, 0.69444, 0, 0, 0.66667],\n    \"67\": [0, 0.69444, 0, 0, 0.63889],\n    \"68\": [0, 0.69444, 0, 0, 0.72223],\n    \"69\": [0, 0.69444, 0, 0, 0.59722],\n    \"70\": [0, 0.69444, 0, 0, 0.56945],\n    \"71\": [0, 0.69444, 0, 0, 0.66667],\n    \"72\": [0, 0.69444, 0, 0, 0.70834],\n    \"73\": [0, 0.69444, 0, 0, 0.27778],\n    \"74\": [0, 0.69444, 0, 0, 0.47222],\n    \"75\": [0, 0.69444, 0, 0, 0.69445],\n    \"76\": [0, 0.69444, 0, 0, 0.54167],\n    \"77\": [0, 0.69444, 0, 0, 0.875],\n    \"78\": [0, 0.69444, 0, 0, 0.70834],\n    \"79\": [0, 0.69444, 0, 0, 0.73611],\n    \"80\": [0, 0.69444, 0, 0, 0.63889],\n    \"81\": [0.125, 0.69444, 0, 0, 0.73611],\n    \"82\": [0, 0.69444, 0, 0, 0.64584],\n    \"83\": [0, 0.69444, 0, 0, 0.55556],\n    \"84\": [0, 0.69444, 0, 0, 0.68056],\n    \"85\": [0, 0.69444, 0, 0, 0.6875],\n    \"86\": [0, 0.69444, 0.01389, 0, 0.66667],\n    \"87\": [0, 0.69444, 0.01389, 0, 0.94445],\n    \"88\": [0, 0.69444, 0, 0, 0.66667],\n    \"89\": [0, 0.69444, 0.025, 0, 0.66667],\n    \"90\": [0, 0.69444, 0, 0, 0.61111],\n    \"91\": [0.25, 0.75, 0, 0, 0.28889],\n    \"93\": [0.25, 0.75, 0, 0, 0.28889],\n    \"94\": [0, 0.69444, 0, 0, 0.5],\n    \"95\": [0.35, 0.09444, 0.02778, 0, 0.5],\n    \"97\": [0, 0.44444, 0, 0, 0.48056],\n    \"98\": [0, 0.69444, 0, 0, 0.51667],\n    \"99\": [0, 0.44444, 0, 0, 0.44445],\n    \"100\": [0, 0.69444, 0, 0, 0.51667],\n    \"101\": [0, 0.44444, 0, 0, 0.44445],\n    \"102\": [0, 0.69444, 0.06944, 0, 0.30556],\n    \"103\": [0.19444, 0.44444, 0.01389, 0, 0.5],\n    \"104\": [0, 0.69444, 0, 0, 0.51667],\n    \"105\": [0, 0.67937, 0, 0, 0.23889],\n    \"106\": [0.19444, 0.67937, 0, 0, 0.26667],\n    \"107\": [0, 0.69444, 0, 0, 0.48889],\n    \"108\": [0, 0.69444, 0, 0, 0.23889],\n    \"109\": [0, 0.44444, 0, 0, 0.79445],\n    \"110\": [0, 0.44444, 0, 0, 0.51667],\n    \"111\": [0, 0.44444, 0, 0, 0.5],\n    \"112\": [0.19444, 0.44444, 0, 0, 0.51667],\n    \"113\": [0.19444, 0.44444, 0, 0, 0.51667],\n    \"114\": [0, 0.44444, 0.01389, 0, 0.34167],\n    \"115\": [0, 0.44444, 0, 0, 0.38333],\n    \"116\": [0, 0.57143, 0, 0, 0.36111],\n    \"117\": [0, 0.44444, 0, 0, 0.51667],\n    \"118\": [0, 0.44444, 0.01389, 0, 0.46111],\n    \"119\": [0, 0.44444, 0.01389, 0, 0.68334],\n    \"120\": [0, 0.44444, 0, 0, 0.46111],\n    \"121\": [0.19444, 0.44444, 0.01389, 0, 0.46111],\n    \"122\": [0, 0.44444, 0, 0, 0.43472],\n    \"126\": [0.35, 0.32659, 0, 0, 0.5],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.67937, 0, 0, 0.5],\n    \"176\": [0, 0.69444, 0, 0, 0.66667],\n    \"184\": [0.17014, 0, 0, 0, 0.44445],\n    \"305\": [0, 0.44444, 0, 0, 0.23889],\n    \"567\": [0.19444, 0.44444, 0, 0, 0.26667],\n    \"710\": [0, 0.69444, 0, 0, 0.5],\n    \"711\": [0, 0.63194, 0, 0, 0.5],\n    \"713\": [0, 0.60889, 0, 0, 0.5],\n    \"714\": [0, 0.69444, 0, 0, 0.5],\n    \"715\": [0, 0.69444, 0, 0, 0.5],\n    \"728\": [0, 0.69444, 0, 0, 0.5],\n    \"729\": [0, 0.67937, 0, 0, 0.27778],\n    \"730\": [0, 0.69444, 0, 0, 0.66667],\n    \"732\": [0, 0.67659, 0, 0, 0.5],\n    \"733\": [0, 0.69444, 0, 0, 0.5],\n    \"915\": [0, 0.69444, 0, 0, 0.54167],\n    \"916\": [0, 0.69444, 0, 0, 0.83334],\n    \"920\": [0, 0.69444, 0, 0, 0.77778],\n    \"923\": [0, 0.69444, 0, 0, 0.61111],\n    \"926\": [0, 0.69444, 0, 0, 0.66667],\n    \"928\": [0, 0.69444, 0, 0, 0.70834],\n    \"931\": [0, 0.69444, 0, 0, 0.72222],\n    \"933\": [0, 0.69444, 0, 0, 0.77778],\n    \"934\": [0, 0.69444, 0, 0, 0.72222],\n    \"936\": [0, 0.69444, 0, 0, 0.77778],\n    \"937\": [0, 0.69444, 0, 0, 0.72222],\n    \"8211\": [0, 0.44444, 0.02778, 0, 0.5],\n    \"8212\": [0, 0.44444, 0.02778, 0, 1.0],\n    \"8216\": [0, 0.69444, 0, 0, 0.27778],\n    \"8217\": [0, 0.69444, 0, 0, 0.27778],\n    \"8220\": [0, 0.69444, 0, 0, 0.5],\n    \"8221\": [0, 0.69444, 0, 0, 0.5]\n  },\n  \"Script-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"65\": [0, 0.7, 0.22925, 0, 0.80253],\n    \"66\": [0, 0.7, 0.04087, 0, 0.90757],\n    \"67\": [0, 0.7, 0.1689, 0, 0.66619],\n    \"68\": [0, 0.7, 0.09371, 0, 0.77443],\n    \"69\": [0, 0.7, 0.18583, 0, 0.56162],\n    \"70\": [0, 0.7, 0.13634, 0, 0.89544],\n    \"71\": [0, 0.7, 0.17322, 0, 0.60961],\n    \"72\": [0, 0.7, 0.29694, 0, 0.96919],\n    \"73\": [0, 0.7, 0.19189, 0, 0.80907],\n    \"74\": [0.27778, 0.7, 0.19189, 0, 1.05159],\n    \"75\": [0, 0.7, 0.31259, 0, 0.91364],\n    \"76\": [0, 0.7, 0.19189, 0, 0.87373],\n    \"77\": [0, 0.7, 0.15981, 0, 1.08031],\n    \"78\": [0, 0.7, 0.3525, 0, 0.9015],\n    \"79\": [0, 0.7, 0.08078, 0, 0.73787],\n    \"80\": [0, 0.7, 0.08078, 0, 1.01262],\n    \"81\": [0, 0.7, 0.03305, 0, 0.88282],\n    \"82\": [0, 0.7, 0.06259, 0, 0.85],\n    \"83\": [0, 0.7, 0.19189, 0, 0.86767],\n    \"84\": [0, 0.7, 0.29087, 0, 0.74697],\n    \"85\": [0, 0.7, 0.25815, 0, 0.79996],\n    \"86\": [0, 0.7, 0.27523, 0, 0.62204],\n    \"87\": [0, 0.7, 0.27523, 0, 0.80532],\n    \"88\": [0, 0.7, 0.26006, 0, 0.94445],\n    \"89\": [0, 0.7, 0.2939, 0, 0.70961],\n    \"90\": [0, 0.7, 0.24037, 0, 0.8212],\n    \"160\": [0, 0, 0, 0, 0.25]\n  },\n  \"Size1-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"40\": [0.35001, 0.85, 0, 0, 0.45834],\n    \"41\": [0.35001, 0.85, 0, 0, 0.45834],\n    \"47\": [0.35001, 0.85, 0, 0, 0.57778],\n    \"91\": [0.35001, 0.85, 0, 0, 0.41667],\n    \"92\": [0.35001, 0.85, 0, 0, 0.57778],\n    \"93\": [0.35001, 0.85, 0, 0, 0.41667],\n    \"123\": [0.35001, 0.85, 0, 0, 0.58334],\n    \"125\": [0.35001, 0.85, 0, 0, 0.58334],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"710\": [0, 0.72222, 0, 0, 0.55556],\n    \"732\": [0, 0.72222, 0, 0, 0.55556],\n    \"770\": [0, 0.72222, 0, 0, 0.55556],\n    \"771\": [0, 0.72222, 0, 0, 0.55556],\n    \"8214\": [-0.00099, 0.601, 0, 0, 0.77778],\n    \"8593\": [1e-05, 0.6, 0, 0, 0.66667],\n    \"8595\": [1e-05, 0.6, 0, 0, 0.66667],\n    \"8657\": [1e-05, 0.6, 0, 0, 0.77778],\n    \"8659\": [1e-05, 0.6, 0, 0, 0.77778],\n    \"8719\": [0.25001, 0.75, 0, 0, 0.94445],\n    \"8720\": [0.25001, 0.75, 0, 0, 0.94445],\n    \"8721\": [0.25001, 0.75, 0, 0, 1.05556],\n    \"8730\": [0.35001, 0.85, 0, 0, 1.0],\n    \"8739\": [-0.00599, 0.606, 0, 0, 0.33333],\n    \"8741\": [-0.00599, 0.606, 0, 0, 0.55556],\n    \"8747\": [0.30612, 0.805, 0.19445, 0, 0.47222],\n    \"8748\": [0.306, 0.805, 0.19445, 0, 0.47222],\n    \"8749\": [0.306, 0.805, 0.19445, 0, 0.47222],\n    \"8750\": [0.30612, 0.805, 0.19445, 0, 0.47222],\n    \"8896\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"8897\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"8898\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"8899\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"8968\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"8969\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"8970\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"8971\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"9168\": [-0.00099, 0.601, 0, 0, 0.66667],\n    \"10216\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"10217\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"10752\": [0.25001, 0.75, 0, 0, 1.11111],\n    \"10753\": [0.25001, 0.75, 0, 0, 1.11111],\n    \"10754\": [0.25001, 0.75, 0, 0, 1.11111],\n    \"10756\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"10758\": [0.25001, 0.75, 0, 0, 0.83334]\n  },\n  \"Size2-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"40\": [0.65002, 1.15, 0, 0, 0.59722],\n    \"41\": [0.65002, 1.15, 0, 0, 0.59722],\n    \"47\": [0.65002, 1.15, 0, 0, 0.81111],\n    \"91\": [0.65002, 1.15, 0, 0, 0.47222],\n    \"92\": [0.65002, 1.15, 0, 0, 0.81111],\n    \"93\": [0.65002, 1.15, 0, 0, 0.47222],\n    \"123\": [0.65002, 1.15, 0, 0, 0.66667],\n    \"125\": [0.65002, 1.15, 0, 0, 0.66667],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"710\": [0, 0.75, 0, 0, 1.0],\n    \"732\": [0, 0.75, 0, 0, 1.0],\n    \"770\": [0, 0.75, 0, 0, 1.0],\n    \"771\": [0, 0.75, 0, 0, 1.0],\n    \"8719\": [0.55001, 1.05, 0, 0, 1.27778],\n    \"8720\": [0.55001, 1.05, 0, 0, 1.27778],\n    \"8721\": [0.55001, 1.05, 0, 0, 1.44445],\n    \"8730\": [0.65002, 1.15, 0, 0, 1.0],\n    \"8747\": [0.86225, 1.36, 0.44445, 0, 0.55556],\n    \"8748\": [0.862, 1.36, 0.44445, 0, 0.55556],\n    \"8749\": [0.862, 1.36, 0.44445, 0, 0.55556],\n    \"8750\": [0.86225, 1.36, 0.44445, 0, 0.55556],\n    \"8896\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"8897\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"8898\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"8899\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"8968\": [0.65002, 1.15, 0, 0, 0.52778],\n    \"8969\": [0.65002, 1.15, 0, 0, 0.52778],\n    \"8970\": [0.65002, 1.15, 0, 0, 0.52778],\n    \"8971\": [0.65002, 1.15, 0, 0, 0.52778],\n    \"10216\": [0.65002, 1.15, 0, 0, 0.61111],\n    \"10217\": [0.65002, 1.15, 0, 0, 0.61111],\n    \"10752\": [0.55001, 1.05, 0, 0, 1.51112],\n    \"10753\": [0.55001, 1.05, 0, 0, 1.51112],\n    \"10754\": [0.55001, 1.05, 0, 0, 1.51112],\n    \"10756\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"10758\": [0.55001, 1.05, 0, 0, 1.11111]\n  },\n  \"Size3-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"40\": [0.95003, 1.45, 0, 0, 0.73611],\n    \"41\": [0.95003, 1.45, 0, 0, 0.73611],\n    \"47\": [0.95003, 1.45, 0, 0, 1.04445],\n    \"91\": [0.95003, 1.45, 0, 0, 0.52778],\n    \"92\": [0.95003, 1.45, 0, 0, 1.04445],\n    \"93\": [0.95003, 1.45, 0, 0, 0.52778],\n    \"123\": [0.95003, 1.45, 0, 0, 0.75],\n    \"125\": [0.95003, 1.45, 0, 0, 0.75],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"710\": [0, 0.75, 0, 0, 1.44445],\n    \"732\": [0, 0.75, 0, 0, 1.44445],\n    \"770\": [0, 0.75, 0, 0, 1.44445],\n    \"771\": [0, 0.75, 0, 0, 1.44445],\n    \"8730\": [0.95003, 1.45, 0, 0, 1.0],\n    \"8968\": [0.95003, 1.45, 0, 0, 0.58334],\n    \"8969\": [0.95003, 1.45, 0, 0, 0.58334],\n    \"8970\": [0.95003, 1.45, 0, 0, 0.58334],\n    \"8971\": [0.95003, 1.45, 0, 0, 0.58334],\n    \"10216\": [0.95003, 1.45, 0, 0, 0.75],\n    \"10217\": [0.95003, 1.45, 0, 0, 0.75]\n  },\n  \"Size4-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"40\": [1.25003, 1.75, 0, 0, 0.79167],\n    \"41\": [1.25003, 1.75, 0, 0, 0.79167],\n    \"47\": [1.25003, 1.75, 0, 0, 1.27778],\n    \"91\": [1.25003, 1.75, 0, 0, 0.58334],\n    \"92\": [1.25003, 1.75, 0, 0, 1.27778],\n    \"93\": [1.25003, 1.75, 0, 0, 0.58334],\n    \"123\": [1.25003, 1.75, 0, 0, 0.80556],\n    \"125\": [1.25003, 1.75, 0, 0, 0.80556],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"710\": [0, 0.825, 0, 0, 1.8889],\n    \"732\": [0, 0.825, 0, 0, 1.8889],\n    \"770\": [0, 0.825, 0, 0, 1.8889],\n    \"771\": [0, 0.825, 0, 0, 1.8889],\n    \"8730\": [1.25003, 1.75, 0, 0, 1.0],\n    \"8968\": [1.25003, 1.75, 0, 0, 0.63889],\n    \"8969\": [1.25003, 1.75, 0, 0, 0.63889],\n    \"8970\": [1.25003, 1.75, 0, 0, 0.63889],\n    \"8971\": [1.25003, 1.75, 0, 0, 0.63889],\n    \"9115\": [0.64502, 1.155, 0, 0, 0.875],\n    \"9116\": [1e-05, 0.6, 0, 0, 0.875],\n    \"9117\": [0.64502, 1.155, 0, 0, 0.875],\n    \"9118\": [0.64502, 1.155, 0, 0, 0.875],\n    \"9119\": [1e-05, 0.6, 0, 0, 0.875],\n    \"9120\": [0.64502, 1.155, 0, 0, 0.875],\n    \"9121\": [0.64502, 1.155, 0, 0, 0.66667],\n    \"9122\": [-0.00099, 0.601, 0, 0, 0.66667],\n    \"9123\": [0.64502, 1.155, 0, 0, 0.66667],\n    \"9124\": [0.64502, 1.155, 0, 0, 0.66667],\n    \"9125\": [-0.00099, 0.601, 0, 0, 0.66667],\n    \"9126\": [0.64502, 1.155, 0, 0, 0.66667],\n    \"9127\": [1e-05, 0.9, 0, 0, 0.88889],\n    \"9128\": [0.65002, 1.15, 0, 0, 0.88889],\n    \"9129\": [0.90001, 0, 0, 0, 0.88889],\n    \"9130\": [0, 0.3, 0, 0, 0.88889],\n    \"9131\": [1e-05, 0.9, 0, 0, 0.88889],\n    \"9132\": [0.65002, 1.15, 0, 0, 0.88889],\n    \"9133\": [0.90001, 0, 0, 0, 0.88889],\n    \"9143\": [0.88502, 0.915, 0, 0, 1.05556],\n    \"10216\": [1.25003, 1.75, 0, 0, 0.80556],\n    \"10217\": [1.25003, 1.75, 0, 0, 0.80556],\n    \"57344\": [-0.00499, 0.605, 0, 0, 1.05556],\n    \"57345\": [-0.00499, 0.605, 0, 0, 1.05556],\n    \"57680\": [0, 0.12, 0, 0, 0.45],\n    \"57681\": [0, 0.12, 0, 0, 0.45],\n    \"57682\": [0, 0.12, 0, 0, 0.45],\n    \"57683\": [0, 0.12, 0, 0, 0.45]\n  },\n  \"Typewriter-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.525],\n    \"33\": [0, 0.61111, 0, 0, 0.525],\n    \"34\": [0, 0.61111, 0, 0, 0.525],\n    \"35\": [0, 0.61111, 0, 0, 0.525],\n    \"36\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"37\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"38\": [0, 0.61111, 0, 0, 0.525],\n    \"39\": [0, 0.61111, 0, 0, 0.525],\n    \"40\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"41\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"42\": [0, 0.52083, 0, 0, 0.525],\n    \"43\": [-0.08056, 0.53055, 0, 0, 0.525],\n    \"44\": [0.13889, 0.125, 0, 0, 0.525],\n    \"45\": [-0.08056, 0.53055, 0, 0, 0.525],\n    \"46\": [0, 0.125, 0, 0, 0.525],\n    \"47\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"48\": [0, 0.61111, 0, 0, 0.525],\n    \"49\": [0, 0.61111, 0, 0, 0.525],\n    \"50\": [0, 0.61111, 0, 0, 0.525],\n    \"51\": [0, 0.61111, 0, 0, 0.525],\n    \"52\": [0, 0.61111, 0, 0, 0.525],\n    \"53\": [0, 0.61111, 0, 0, 0.525],\n    \"54\": [0, 0.61111, 0, 0, 0.525],\n    \"55\": [0, 0.61111, 0, 0, 0.525],\n    \"56\": [0, 0.61111, 0, 0, 0.525],\n    \"57\": [0, 0.61111, 0, 0, 0.525],\n    \"58\": [0, 0.43056, 0, 0, 0.525],\n    \"59\": [0.13889, 0.43056, 0, 0, 0.525],\n    \"60\": [-0.05556, 0.55556, 0, 0, 0.525],\n    \"61\": [-0.19549, 0.41562, 0, 0, 0.525],\n    \"62\": [-0.05556, 0.55556, 0, 0, 0.525],\n    \"63\": [0, 0.61111, 0, 0, 0.525],\n    \"64\": [0, 0.61111, 0, 0, 0.525],\n    \"65\": [0, 0.61111, 0, 0, 0.525],\n    \"66\": [0, 0.61111, 0, 0, 0.525],\n    \"67\": [0, 0.61111, 0, 0, 0.525],\n    \"68\": [0, 0.61111, 0, 0, 0.525],\n    \"69\": [0, 0.61111, 0, 0, 0.525],\n    \"70\": [0, 0.61111, 0, 0, 0.525],\n    \"71\": [0, 0.61111, 0, 0, 0.525],\n    \"72\": [0, 0.61111, 0, 0, 0.525],\n    \"73\": [0, 0.61111, 0, 0, 0.525],\n    \"74\": [0, 0.61111, 0, 0, 0.525],\n    \"75\": [0, 0.61111, 0, 0, 0.525],\n    \"76\": [0, 0.61111, 0, 0, 0.525],\n    \"77\": [0, 0.61111, 0, 0, 0.525],\n    \"78\": [0, 0.61111, 0, 0, 0.525],\n    \"79\": [0, 0.61111, 0, 0, 0.525],\n    \"80\": [0, 0.61111, 0, 0, 0.525],\n    \"81\": [0.13889, 0.61111, 0, 0, 0.525],\n    \"82\": [0, 0.61111, 0, 0, 0.525],\n    \"83\": [0, 0.61111, 0, 0, 0.525],\n    \"84\": [0, 0.61111, 0, 0, 0.525],\n    \"85\": [0, 0.61111, 0, 0, 0.525],\n    \"86\": [0, 0.61111, 0, 0, 0.525],\n    \"87\": [0, 0.61111, 0, 0, 0.525],\n    \"88\": [0, 0.61111, 0, 0, 0.525],\n    \"89\": [0, 0.61111, 0, 0, 0.525],\n    \"90\": [0, 0.61111, 0, 0, 0.525],\n    \"91\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"92\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"93\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"94\": [0, 0.61111, 0, 0, 0.525],\n    \"95\": [0.09514, 0, 0, 0, 0.525],\n    \"96\": [0, 0.61111, 0, 0, 0.525],\n    \"97\": [0, 0.43056, 0, 0, 0.525],\n    \"98\": [0, 0.61111, 0, 0, 0.525],\n    \"99\": [0, 0.43056, 0, 0, 0.525],\n    \"100\": [0, 0.61111, 0, 0, 0.525],\n    \"101\": [0, 0.43056, 0, 0, 0.525],\n    \"102\": [0, 0.61111, 0, 0, 0.525],\n    \"103\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"104\": [0, 0.61111, 0, 0, 0.525],\n    \"105\": [0, 0.61111, 0, 0, 0.525],\n    \"106\": [0.22222, 0.61111, 0, 0, 0.525],\n    \"107\": [0, 0.61111, 0, 0, 0.525],\n    \"108\": [0, 0.61111, 0, 0, 0.525],\n    \"109\": [0, 0.43056, 0, 0, 0.525],\n    \"110\": [0, 0.43056, 0, 0, 0.525],\n    \"111\": [0, 0.43056, 0, 0, 0.525],\n    \"112\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"113\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"114\": [0, 0.43056, 0, 0, 0.525],\n    \"115\": [0, 0.43056, 0, 0, 0.525],\n    \"116\": [0, 0.55358, 0, 0, 0.525],\n    \"117\": [0, 0.43056, 0, 0, 0.525],\n    \"118\": [0, 0.43056, 0, 0, 0.525],\n    \"119\": [0, 0.43056, 0, 0, 0.525],\n    \"120\": [0, 0.43056, 0, 0, 0.525],\n    \"121\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"122\": [0, 0.43056, 0, 0, 0.525],\n    \"123\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"124\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"125\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"126\": [0, 0.61111, 0, 0, 0.525],\n    \"127\": [0, 0.61111, 0, 0, 0.525],\n    \"160\": [0, 0, 0, 0, 0.525],\n    \"176\": [0, 0.61111, 0, 0, 0.525],\n    \"184\": [0.19445, 0, 0, 0, 0.525],\n    \"305\": [0, 0.43056, 0, 0, 0.525],\n    \"567\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"711\": [0, 0.56597, 0, 0, 0.525],\n    \"713\": [0, 0.56555, 0, 0, 0.525],\n    \"714\": [0, 0.61111, 0, 0, 0.525],\n    \"715\": [0, 0.61111, 0, 0, 0.525],\n    \"728\": [0, 0.61111, 0, 0, 0.525],\n    \"730\": [0, 0.61111, 0, 0, 0.525],\n    \"770\": [0, 0.61111, 0, 0, 0.525],\n    \"771\": [0, 0.61111, 0, 0, 0.525],\n    \"776\": [0, 0.61111, 0, 0, 0.525],\n    \"915\": [0, 0.61111, 0, 0, 0.525],\n    \"916\": [0, 0.61111, 0, 0, 0.525],\n    \"920\": [0, 0.61111, 0, 0, 0.525],\n    \"923\": [0, 0.61111, 0, 0, 0.525],\n    \"926\": [0, 0.61111, 0, 0, 0.525],\n    \"928\": [0, 0.61111, 0, 0, 0.525],\n    \"931\": [0, 0.61111, 0, 0, 0.525],\n    \"933\": [0, 0.61111, 0, 0, 0.525],\n    \"934\": [0, 0.61111, 0, 0, 0.525],\n    \"936\": [0, 0.61111, 0, 0, 0.525],\n    \"937\": [0, 0.61111, 0, 0, 0.525],\n    \"8216\": [0, 0.61111, 0, 0, 0.525],\n    \"8217\": [0, 0.61111, 0, 0, 0.525],\n    \"8242\": [0, 0.61111, 0, 0, 0.525],\n    \"9251\": [0.11111, 0.21944, 0, 0, 0.525]\n  }\n};\n\n/**\n * This file contains metrics regarding fonts and individual symbols. The sigma\n * and xi variables, as well as the metricMap map contain data extracted from\n * TeX, TeX font metrics, and the TTF files. These data are then exposed via the\n * `metrics` variable and the getCharacterMetrics function.\n */\n// In TeX, there are actually three sets of dimensions, one for each of\n// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:\n// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt).  These are\n// provided in the arrays below, in that order.\n//\n// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively.\n// This was determined by running the following script:\n//\n//     latex -interaction=nonstopmode \\\n//     '\\documentclass{article}\\usepackage{amsmath}\\begin{document}' \\\n//     '$a$ \\expandafter\\show\\the\\textfont2' \\\n//     '\\expandafter\\show\\the\\scriptfont2' \\\n//     '\\expandafter\\show\\the\\scriptscriptfont2' \\\n//     '\\stop'\n//\n// The metrics themselves were retrieved using the following commands:\n//\n//     tftopl cmsy10\n//     tftopl cmsy7\n//     tftopl cmsy5\n//\n// The output of each of these commands is quite lengthy.  The only part we\n// care about is the FONTDIMEN section. Each value is measured in EMs.\nvar sigmasAndXis = {\n  slant: [0.250, 0.250, 0.250],\n  // sigma1\n  space: [0.000, 0.000, 0.000],\n  // sigma2\n  stretch: [0.000, 0.000, 0.000],\n  // sigma3\n  shrink: [0.000, 0.000, 0.000],\n  // sigma4\n  xHeight: [0.431, 0.431, 0.431],\n  // sigma5\n  quad: [1.000, 1.171, 1.472],\n  // sigma6\n  extraSpace: [0.000, 0.000, 0.000],\n  // sigma7\n  num1: [0.677, 0.732, 0.925],\n  // sigma8\n  num2: [0.394, 0.384, 0.387],\n  // sigma9\n  num3: [0.444, 0.471, 0.504],\n  // sigma10\n  denom1: [0.686, 0.752, 1.025],\n  // sigma11\n  denom2: [0.345, 0.344, 0.532],\n  // sigma12\n  sup1: [0.413, 0.503, 0.504],\n  // sigma13\n  sup2: [0.363, 0.431, 0.404],\n  // sigma14\n  sup3: [0.289, 0.286, 0.294],\n  // sigma15\n  sub1: [0.150, 0.143, 0.200],\n  // sigma16\n  sub2: [0.247, 0.286, 0.400],\n  // sigma17\n  supDrop: [0.386, 0.353, 0.494],\n  // sigma18\n  subDrop: [0.050, 0.071, 0.100],\n  // sigma19\n  delim1: [2.390, 1.700, 1.980],\n  // sigma20\n  delim2: [1.010, 1.157, 1.420],\n  // sigma21\n  axisHeight: [0.250, 0.250, 0.250],\n  // sigma22\n  // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;\n  // they correspond to the font parameters of the extension fonts (family 3).\n  // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to\n  // match cmex7, we'd use cmex7.tfm values for script and scriptscript\n  // values.\n  defaultRuleThickness: [0.04, 0.049, 0.049],\n  // xi8; cmex7: 0.049\n  bigOpSpacing1: [0.111, 0.111, 0.111],\n  // xi9\n  bigOpSpacing2: [0.166, 0.166, 0.166],\n  // xi10\n  bigOpSpacing3: [0.2, 0.2, 0.2],\n  // xi11\n  bigOpSpacing4: [0.6, 0.611, 0.611],\n  // xi12; cmex7: 0.611\n  bigOpSpacing5: [0.1, 0.143, 0.143],\n  // xi13; cmex7: 0.143\n  // The \\sqrt rule width is taken from the height of the surd character.\n  // Since we use the same font at all sizes, this thickness doesn't scale.\n  sqrtRuleThickness: [0.04, 0.04, 0.04],\n  // This value determines how large a pt is, for metrics which are defined\n  // in terms of pts.\n  // This value is also used in katex.scss; if you change it make sure the\n  // values match.\n  ptPerEm: [10.0, 10.0, 10.0],\n  // The space between adjacent `|` columns in an array definition. From\n  // `\\showthe\\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.\n  doubleRuleSep: [0.2, 0.2, 0.2],\n  // The width of separator lines in {array} environments. From\n  // `\\showthe\\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.\n  arrayRuleWidth: [0.04, 0.04, 0.04],\n  // Two values from LaTeX source2e:\n  fboxsep: [0.3, 0.3, 0.3],\n  //        3 pt / ptPerEm\n  fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm\n\n}; // This map contains a mapping from font name and character code to character\n// should have Latin-1 and Cyrillic characters, but may not depending on the\n// operating system.  The metrics do not account for extra height from the\n// accents.  In the case of Cyrillic characters which have both ascenders and\n// descenders we prefer approximations with ascenders, primarily to prevent\n// the fraction bar or root line from intersecting the glyph.\n// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.\n\nvar extraCharacterMap = {\n  // Latin-1\n  'Å': 'A',\n  'Ð': 'D',\n  'Þ': 'o',\n  'å': 'a',\n  'ð': 'd',\n  'þ': 'o',\n  // Cyrillic\n  'А': 'A',\n  'Б': 'B',\n  'В': 'B',\n  'Г': 'F',\n  'Д': 'A',\n  'Е': 'E',\n  'Ж': 'K',\n  'З': '3',\n  'И': 'N',\n  'Й': 'N',\n  'К': 'K',\n  'Л': 'N',\n  'М': 'M',\n  'Н': 'H',\n  'О': 'O',\n  'П': 'N',\n  'Р': 'P',\n  'С': 'C',\n  'Т': 'T',\n  'У': 'y',\n  'Ф': 'O',\n  'Х': 'X',\n  'Ц': 'U',\n  'Ч': 'h',\n  'Ш': 'W',\n  'Щ': 'W',\n  'Ъ': 'B',\n  'Ы': 'X',\n  'Ь': 'B',\n  'Э': '3',\n  'Ю': 'X',\n  'Я': 'R',\n  'а': 'a',\n  'б': 'b',\n  'в': 'a',\n  'г': 'r',\n  'д': 'y',\n  'е': 'e',\n  'ж': 'm',\n  'з': 'e',\n  'и': 'n',\n  'й': 'n',\n  'к': 'n',\n  'л': 'n',\n  'м': 'm',\n  'н': 'n',\n  'о': 'o',\n  'п': 'n',\n  'р': 'p',\n  'с': 'c',\n  'т': 'o',\n  'у': 'y',\n  'ф': 'b',\n  'х': 'x',\n  'ц': 'n',\n  'ч': 'n',\n  'ш': 'w',\n  'щ': 'w',\n  'ъ': 'a',\n  'ы': 'm',\n  'ь': 'a',\n  'э': 'e',\n  'ю': 'm',\n  'я': 'r'\n};\n\n/**\n * This function adds new font metrics to default metricMap\n * It can also override existing metrics\n */\nfunction setFontMetrics(fontName, metrics) {\n  fontMetricsData[fontName] = metrics;\n}\n/**\n * This function is a convenience function for looking up information in the\n * metricMap table. It takes a character as a string, and a font.\n *\n * Note: the `width` property may be undefined if fontMetricsData.js wasn't\n * built using `Make extended_metrics`.\n */\n\nfunction getCharacterMetrics(character, font, mode) {\n  if (!fontMetricsData[font]) {\n    throw new Error(\"Font metrics not found for font: \" + font + \".\");\n  }\n\n  var ch = character.charCodeAt(0);\n  var metrics = fontMetricsData[font][ch];\n\n  if (!metrics && character[0] in extraCharacterMap) {\n    ch = extraCharacterMap[character[0]].charCodeAt(0);\n    metrics = fontMetricsData[font][ch];\n  }\n\n  if (!metrics && mode === 'text') {\n    // We don't typically have font metrics for Asian scripts.\n    // But since we support them in text mode, we need to return\n    // some sort of metrics.\n    // So if the character is in a script we support but we\n    // don't have metrics for it, just use the metrics for\n    // the Latin capital letter M. This is close enough because\n    // we (currently) only care about the height of the glyph\n    // not its width.\n    if (supportedCodepoint(ch)) {\n      metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M'\n    }\n  }\n\n  if (metrics) {\n    return {\n      depth: metrics[0],\n      height: metrics[1],\n      italic: metrics[2],\n      skew: metrics[3],\n      width: metrics[4]\n    };\n  }\n}\nvar fontMetricsBySizeIndex = {};\n/**\n * Get the font metrics for a given size.\n */\n\nfunction getGlobalMetrics(size) {\n  var sizeIndex;\n\n  if (size >= 5) {\n    sizeIndex = 0;\n  } else if (size >= 3) {\n    sizeIndex = 1;\n  } else {\n    sizeIndex = 2;\n  }\n\n  if (!fontMetricsBySizeIndex[sizeIndex]) {\n    var metrics = fontMetricsBySizeIndex[sizeIndex] = {\n      cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18\n    };\n\n    for (var key in sigmasAndXis) {\n      if (sigmasAndXis.hasOwnProperty(key)) {\n        metrics[key] = sigmasAndXis[key][sizeIndex];\n      }\n    }\n  }\n\n  return fontMetricsBySizeIndex[sizeIndex];\n}\n\n/**\n * This file contains information about the options that the Parser carries\n * around with it while parsing. Data is held in an `Options` object, and when\n * recursing, a new `Options` object can be created with the `.with*` and\n * `.reset` functions.\n */\nvar sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize].\n// The size mappings are taken from TeX with \\normalsize=10pt.\n[1, 1, 1], // size1: [5, 5, 5]              \\tiny\n[2, 1, 1], // size2: [6, 5, 5]\n[3, 1, 1], // size3: [7, 5, 5]              \\scriptsize\n[4, 2, 1], // size4: [8, 6, 5]              \\footnotesize\n[5, 2, 1], // size5: [9, 6, 5]              \\small\n[6, 3, 1], // size6: [10, 7, 5]             \\normalsize\n[7, 4, 2], // size7: [12, 8, 6]             \\large\n[8, 6, 3], // size8: [14.4, 10, 7]          \\Large\n[9, 7, 6], // size9: [17.28, 12, 10]        \\LARGE\n[10, 8, 7], // size10: [20.74, 14.4, 12]     \\huge\n[11, 10, 9] // size11: [24.88, 20.74, 17.28] \\HUGE\n];\nvar sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if\n// you change size indexes, change that function.\n0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488];\n\nvar sizeAtStyle = function sizeAtStyle(size, style) {\n  return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];\n}; // In these types, \"\" (empty string) means \"no change\".\n\n\n/**\n * This is the main options class. It contains the current style, size, color,\n * and font.\n *\n * Options objects should not be modified. To create a new Options with\n * different properties, call a `.having*` method.\n */\nclass Options {\n  // A font family applies to a group of fonts (i.e. SansSerif), while a font\n  // represents a specific font (i.e. SansSerif Bold).\n  // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm\n\n  /**\n   * The base size index.\n   */\n  constructor(data) {\n    this.style = void 0;\n    this.color = void 0;\n    this.size = void 0;\n    this.textSize = void 0;\n    this.phantom = void 0;\n    this.font = void 0;\n    this.fontFamily = void 0;\n    this.fontWeight = void 0;\n    this.fontShape = void 0;\n    this.sizeMultiplier = void 0;\n    this.maxSize = void 0;\n    this.minRuleThickness = void 0;\n    this._fontMetrics = void 0;\n    this.style = data.style;\n    this.color = data.color;\n    this.size = data.size || Options.BASESIZE;\n    this.textSize = data.textSize || this.size;\n    this.phantom = !!data.phantom;\n    this.font = data.font || \"\";\n    this.fontFamily = data.fontFamily || \"\";\n    this.fontWeight = data.fontWeight || '';\n    this.fontShape = data.fontShape || '';\n    this.sizeMultiplier = sizeMultipliers[this.size - 1];\n    this.maxSize = data.maxSize;\n    this.minRuleThickness = data.minRuleThickness;\n    this._fontMetrics = undefined;\n  }\n  /**\n   * Returns a new options object with the same properties as \"this\".  Properties\n   * from \"extension\" will be copied to the new options object.\n   */\n\n\n  extend(extension) {\n    var data = {\n      style: this.style,\n      size: this.size,\n      textSize: this.textSize,\n      color: this.color,\n      phantom: this.phantom,\n      font: this.font,\n      fontFamily: this.fontFamily,\n      fontWeight: this.fontWeight,\n      fontShape: this.fontShape,\n      maxSize: this.maxSize,\n      minRuleThickness: this.minRuleThickness\n    };\n\n    for (var key in extension) {\n      if (extension.hasOwnProperty(key)) {\n        data[key] = extension[key];\n      }\n    }\n\n    return new Options(data);\n  }\n  /**\n   * Return an options object with the given style. If `this.style === style`,\n   * returns `this`.\n   */\n\n\n  havingStyle(style) {\n    if (this.style === style) {\n      return this;\n    } else {\n      return this.extend({\n        style: style,\n        size: sizeAtStyle(this.textSize, style)\n      });\n    }\n  }\n  /**\n   * Return an options object with a cramped version of the current style. If\n   * the current style is cramped, returns `this`.\n   */\n\n\n  havingCrampedStyle() {\n    return this.havingStyle(this.style.cramp());\n  }\n  /**\n   * Return an options object with the given size and in at least `\\textstyle`.\n   * Returns `this` if appropriate.\n   */\n\n\n  havingSize(size) {\n    if (this.size === size && this.textSize === size) {\n      return this;\n    } else {\n      return this.extend({\n        style: this.style.text(),\n        size: size,\n        textSize: size,\n        sizeMultiplier: sizeMultipliers[size - 1]\n      });\n    }\n  }\n  /**\n   * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,\n   * changes to at least `\\textstyle`.\n   */\n\n\n  havingBaseStyle(style) {\n    style = style || this.style.text();\n    var wantSize = sizeAtStyle(Options.BASESIZE, style);\n\n    if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {\n      return this;\n    } else {\n      return this.extend({\n        style: style,\n        size: wantSize\n      });\n    }\n  }\n  /**\n   * Remove the effect of sizing changes such as \\Huge.\n   * Keep the effect of the current style, such as \\scriptstyle.\n   */\n\n\n  havingBaseSizing() {\n    var size;\n\n    switch (this.style.id) {\n      case 4:\n      case 5:\n        size = 3; // normalsize in scriptstyle\n\n        break;\n\n      case 6:\n      case 7:\n        size = 1; // normalsize in scriptscriptstyle\n\n        break;\n\n      default:\n        size = 6;\n      // normalsize in textstyle or displaystyle\n    }\n\n    return this.extend({\n      style: this.style.text(),\n      size: size\n    });\n  }\n  /**\n   * Create a new options object with the given color.\n   */\n\n\n  withColor(color) {\n    return this.extend({\n      color: color\n    });\n  }\n  /**\n   * Create a new options object with \"phantom\" set to true.\n   */\n\n\n  withPhantom() {\n    return this.extend({\n      phantom: true\n    });\n  }\n  /**\n   * Creates a new options object with the given math font or old text font.\n   * @type {[type]}\n   */\n\n\n  withFont(font) {\n    return this.extend({\n      font\n    });\n  }\n  /**\n   * Create a new options objects with the given fontFamily.\n   */\n\n\n  withTextFontFamily(fontFamily) {\n    return this.extend({\n      fontFamily,\n      font: \"\"\n    });\n  }\n  /**\n   * Creates a new options object with the given font weight\n   */\n\n\n  withTextFontWeight(fontWeight) {\n    return this.extend({\n      fontWeight,\n      font: \"\"\n    });\n  }\n  /**\n   * Creates a new options object with the given font weight\n   */\n\n\n  withTextFontShape(fontShape) {\n    return this.extend({\n      fontShape,\n      font: \"\"\n    });\n  }\n  /**\n   * Return the CSS sizing classes required to switch from enclosing options\n   * `oldOptions` to `this`. Returns an array of classes.\n   */\n\n\n  sizingClasses(oldOptions) {\n    if (oldOptions.size !== this.size) {\n      return [\"sizing\", \"reset-size\" + oldOptions.size, \"size\" + this.size];\n    } else {\n      return [];\n    }\n  }\n  /**\n   * Return the CSS sizing classes required to switch to the base size. Like\n   * `this.havingSize(BASESIZE).sizingClasses(this)`.\n   */\n\n\n  baseSizingClasses() {\n    if (this.size !== Options.BASESIZE) {\n      return [\"sizing\", \"reset-size\" + this.size, \"size\" + Options.BASESIZE];\n    } else {\n      return [];\n    }\n  }\n  /**\n   * Return the font metrics for this size.\n   */\n\n\n  fontMetrics() {\n    if (!this._fontMetrics) {\n      this._fontMetrics = getGlobalMetrics(this.size);\n    }\n\n    return this._fontMetrics;\n  }\n  /**\n   * Gets the CSS color of the current options object\n   */\n\n\n  getColor() {\n    if (this.phantom) {\n      return \"transparent\";\n    } else {\n      return this.color;\n    }\n  }\n\n}\n\nOptions.BASESIZE = 6;\n\n/**\n * This file does conversion between units.  In particular, it provides\n * calculateSize to convert other units into ems.\n */\n// Thus, multiplying a length by this number converts the length from units\n// into pts.  Dividing the result by ptPerEm gives the number of ems\n// *assuming* a font size of ptPerEm (normal size, normal style).\n\nvar ptPerUnit = {\n  // https://en.wikibooks.org/wiki/LaTeX/Lengths and\n  // https://tex.stackexchange.com/a/8263\n  \"pt\": 1,\n  // TeX point\n  \"mm\": 7227 / 2540,\n  // millimeter\n  \"cm\": 7227 / 254,\n  // centimeter\n  \"in\": 72.27,\n  // inch\n  \"bp\": 803 / 800,\n  // big (PostScript) points\n  \"pc\": 12,\n  // pica\n  \"dd\": 1238 / 1157,\n  // didot\n  \"cc\": 14856 / 1157,\n  // cicero (12 didot)\n  \"nd\": 685 / 642,\n  // new didot\n  \"nc\": 1370 / 107,\n  // new cicero (12 new didot)\n  \"sp\": 1 / 65536,\n  // scaled point (TeX's internal smallest unit)\n  // https://tex.stackexchange.com/a/41371\n  \"px\": 803 / 800 // \\pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX\n\n}; // Dictionary of relative units, for fast validity testing.\n\nvar relativeUnit = {\n  \"ex\": true,\n  \"em\": true,\n  \"mu\": true\n};\n\n/**\n * Determine whether the specified unit (either a string defining the unit\n * or a \"size\" parse node containing a unit field) is valid.\n */\nvar validUnit = function validUnit(unit) {\n  if (typeof unit !== \"string\") {\n    unit = unit.unit;\n  }\n\n  return unit in ptPerUnit || unit in relativeUnit || unit === \"ex\";\n};\n/*\n * Convert a \"size\" parse node (with numeric \"number\" and string \"unit\" fields,\n * as parsed by functions.js argType \"size\") into a CSS em value for the\n * current style/scale.  `options` gives the current options.\n */\n\nvar calculateSize = function calculateSize(sizeValue, options) {\n  var scale;\n\n  if (sizeValue.unit in ptPerUnit) {\n    // Absolute units\n    scale = ptPerUnit[sizeValue.unit] // Convert unit to pt\n    / options.fontMetrics().ptPerEm // Convert pt to CSS em\n    / options.sizeMultiplier; // Unscale to make absolute units\n  } else if (sizeValue.unit === \"mu\") {\n    // `mu` units scale with scriptstyle/scriptscriptstyle.\n    scale = options.fontMetrics().cssEmPerMu;\n  } else {\n    // Other relative units always refer to the *textstyle* font\n    // in the current size.\n    var unitOptions;\n\n    if (options.style.isTight()) {\n      // isTight() means current style is script/scriptscript.\n      unitOptions = options.havingStyle(options.style.text());\n    } else {\n      unitOptions = options;\n    } // TODO: In TeX these units are relative to the quad of the current\n    // *text* font, e.g. cmr10. KaTeX instead uses values from the\n    // comparably-sized *Computer Modern symbol* font. At 10pt, these\n    // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;\n    // cmr5=1.361133, cmsy5=1.472241. Consider $\\scriptsize a\\kern1emb$.\n    // TeX \\showlists shows a kern of 1.13889 * fontsize;\n    // KaTeX shows a kern of 1.171 * fontsize.\n\n\n    if (sizeValue.unit === \"ex\") {\n      scale = unitOptions.fontMetrics().xHeight;\n    } else if (sizeValue.unit === \"em\") {\n      scale = unitOptions.fontMetrics().quad;\n    } else {\n      throw new ParseError(\"Invalid unit: '\" + sizeValue.unit + \"'\");\n    }\n\n    if (unitOptions !== options) {\n      scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;\n    }\n  }\n\n  return Math.min(sizeValue.number * scale, options.maxSize);\n};\n/**\n * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See\n * https://github.com/KaTeX/KaTeX/pull/2460.\n */\n\nvar makeEm = function makeEm(n) {\n  return +n.toFixed(4) + \"em\";\n};\n\n/**\n * These objects store the data about the DOM nodes we create, as well as some\n * extra data. They can then be transformed into real DOM nodes with the\n * `toNode` function or HTML markup using `toMarkup`. They are useful for both\n * storing extra properties on the nodes, as well as providing a way to easily\n * work with the DOM.\n *\n * Similar functions for working with MathML nodes exist in mathMLTree.js.\n *\n * TODO: refactor `span` and `anchor` into common superclass when\n * target environments support class inheritance\n */\n\n/**\n * Create an HTML className based on a list of classes. In addition to joining\n * with spaces, we also remove empty classes.\n */\nvar createClass = function createClass(classes) {\n  return classes.filter(cls => cls).join(\" \");\n};\n\nvar initNode = function initNode(classes, options, style) {\n  this.classes = classes || [];\n  this.attributes = {};\n  this.height = 0;\n  this.depth = 0;\n  this.maxFontSize = 0;\n  this.style = style || {};\n\n  if (options) {\n    if (options.style.isTight()) {\n      this.classes.push(\"mtight\");\n    }\n\n    var color = options.getColor();\n\n    if (color) {\n      this.style.color = color;\n    }\n  }\n};\n/**\n * Convert into an HTML node\n */\n\n\nvar toNode = function toNode(tagName) {\n  var node = document.createElement(tagName); // Apply the class\n\n  node.className = createClass(this.classes); // Apply inline styles\n\n  for (var style in this.style) {\n    if (this.style.hasOwnProperty(style)) {\n      // $FlowFixMe Flow doesn't seem to understand span.style's type.\n      node.style[style] = this.style[style];\n    }\n  } // Apply attributes\n\n\n  for (var attr in this.attributes) {\n    if (this.attributes.hasOwnProperty(attr)) {\n      node.setAttribute(attr, this.attributes[attr]);\n    }\n  } // Append the children, also as HTML nodes\n\n\n  for (var i = 0; i < this.children.length; i++) {\n    node.appendChild(this.children[i].toNode());\n  }\n\n  return node;\n};\n/**\n * https://w3c.github.io/html-reference/syntax.html#syntax-attributes\n *\n * > Attribute Names must consist of one or more characters\n * other than the space characters, U+0000 NULL,\n * '\"', \"'\", \">\", \"/\", \"=\", the control characters,\n * and any characters that are not defined by Unicode.\n */\n\n\nvar invalidAttributeNameRegex = /[\\s\"'>/=\\x00-\\x1f]/;\n/**\n * Convert into an HTML markup string\n */\n\nvar toMarkup = function toMarkup(tagName) {\n  var markup = \"<\" + tagName; // Add the class\n\n  if (this.classes.length) {\n    markup += \" class=\\\"\" + utils.escape(createClass(this.classes)) + \"\\\"\";\n  }\n\n  var styles = \"\"; // Add the styles, after hyphenation\n\n  for (var style in this.style) {\n    if (this.style.hasOwnProperty(style)) {\n      styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n    }\n  }\n\n  if (styles) {\n    markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n  } // Add the attributes\n\n\n  for (var attr in this.attributes) {\n    if (this.attributes.hasOwnProperty(attr)) {\n      if (invalidAttributeNameRegex.test(attr)) {\n        throw new ParseError(\"Invalid attribute name '\" + attr + \"'\");\n      }\n\n      markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n    }\n  }\n\n  markup += \">\"; // Add the markup of the children, also as markup\n\n  for (var i = 0; i < this.children.length; i++) {\n    markup += this.children[i].toMarkup();\n  }\n\n  markup += \"</\" + tagName + \">\";\n  return markup;\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n// This type does not include all CSS properties. Additional properties should\n// be added as needed.\n\n\n/**\n * This node represents a span node, with a className, a list of children, and\n * an inline style. It also contains information about its height, depth, and\n * maxFontSize.\n *\n * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan\n * otherwise. This typesafety is important when HTML builders access a span's\n * children.\n */\nclass Span {\n  constructor(classes, children, options, style) {\n    this.children = void 0;\n    this.attributes = void 0;\n    this.classes = void 0;\n    this.height = void 0;\n    this.depth = void 0;\n    this.width = void 0;\n    this.maxFontSize = void 0;\n    this.style = void 0;\n    initNode.call(this, classes, options, style);\n    this.children = children || [];\n  }\n  /**\n   * Sets an arbitrary attribute on the span. Warning: use this wisely. Not\n   * all browsers support attributes the same, and having too many custom\n   * attributes is probably bad.\n   */\n\n\n  setAttribute(attribute, value) {\n    this.attributes[attribute] = value;\n  }\n\n  hasClass(className) {\n    return this.classes.includes(className);\n  }\n\n  toNode() {\n    return toNode.call(this, \"span\");\n  }\n\n  toMarkup() {\n    return toMarkup.call(this, \"span\");\n  }\n\n}\n/**\n * This node represents an anchor (<a>) element with a hyperlink.  See `span`\n * for further details.\n */\n\nclass Anchor {\n  constructor(href, classes, children, options) {\n    this.children = void 0;\n    this.attributes = void 0;\n    this.classes = void 0;\n    this.height = void 0;\n    this.depth = void 0;\n    this.maxFontSize = void 0;\n    this.style = void 0;\n    initNode.call(this, classes, options);\n    this.children = children || [];\n    this.setAttribute('href', href);\n  }\n\n  setAttribute(attribute, value) {\n    this.attributes[attribute] = value;\n  }\n\n  hasClass(className) {\n    return this.classes.includes(className);\n  }\n\n  toNode() {\n    return toNode.call(this, \"a\");\n  }\n\n  toMarkup() {\n    return toMarkup.call(this, \"a\");\n  }\n\n}\n/**\n * This node represents an image embed (<img>) element.\n */\n\nclass Img {\n  constructor(src, alt, style) {\n    this.src = void 0;\n    this.alt = void 0;\n    this.classes = void 0;\n    this.height = void 0;\n    this.depth = void 0;\n    this.maxFontSize = void 0;\n    this.style = void 0;\n    this.alt = alt;\n    this.src = src;\n    this.classes = [\"mord\"];\n    this.style = style;\n  }\n\n  hasClass(className) {\n    return this.classes.includes(className);\n  }\n\n  toNode() {\n    var node = document.createElement(\"img\");\n    node.src = this.src;\n    node.alt = this.alt;\n    node.className = \"mord\"; // Apply inline styles\n\n    for (var style in this.style) {\n      if (this.style.hasOwnProperty(style)) {\n        // $FlowFixMe\n        node.style[style] = this.style[style];\n      }\n    }\n\n    return node;\n  }\n\n  toMarkup() {\n    var markup = \"<img src=\\\"\" + utils.escape(this.src) + \"\\\"\" + (\" alt=\\\"\" + utils.escape(this.alt) + \"\\\"\"); // Add the styles, after hyphenation\n\n    var styles = \"\";\n\n    for (var style in this.style) {\n      if (this.style.hasOwnProperty(style)) {\n        styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n      }\n    }\n\n    if (styles) {\n      markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n    }\n\n    markup += \"'/>\";\n    return markup;\n  }\n\n}\nvar iCombinations = {\n  'î': '\\u0131\\u0302',\n  'ï': '\\u0131\\u0308',\n  'í': '\\u0131\\u0301',\n  // 'ī': '\\u0131\\u0304', // enable when we add Extended Latin\n  'ì': '\\u0131\\u0300'\n};\n/**\n * A symbol node contains information about a single symbol. It either renders\n * to a single text node, or a span with a single text node in it, depending on\n * whether it has CSS classes, styles, or needs italic correction.\n */\n\nclass SymbolNode {\n  constructor(text, height, depth, italic, skew, width, classes, style) {\n    this.text = void 0;\n    this.height = void 0;\n    this.depth = void 0;\n    this.italic = void 0;\n    this.skew = void 0;\n    this.width = void 0;\n    this.maxFontSize = void 0;\n    this.classes = void 0;\n    this.style = void 0;\n    this.text = text;\n    this.height = height || 0;\n    this.depth = depth || 0;\n    this.italic = italic || 0;\n    this.skew = skew || 0;\n    this.width = width || 0;\n    this.classes = classes || [];\n    this.style = style || {};\n    this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we\n    // can specify which fonts to use.  This allows us to render these\n    // characters with a serif font in situations where the browser would\n    // either default to a sans serif or render a placeholder character.\n    // We use CSS class names like cjk_fallback, hangul_fallback and\n    // brahmic_fallback. See ./unicodeScripts.js for the set of possible\n    // script names\n\n    var script = scriptFromCodepoint(this.text.charCodeAt(0));\n\n    if (script) {\n      this.classes.push(script + \"_fallback\");\n    }\n\n    if (/[îïíì]/.test(this.text)) {\n      // add ī when we add Extended Latin\n      this.text = iCombinations[this.text];\n    }\n  }\n\n  hasClass(className) {\n    return this.classes.includes(className);\n  }\n  /**\n   * Creates a text node or span from a symbol node. Note that a span is only\n   * created if it is needed.\n   */\n\n\n  toNode() {\n    var node = document.createTextNode(this.text);\n    var span = null;\n\n    if (this.italic > 0) {\n      span = document.createElement(\"span\");\n      span.style.marginRight = makeEm(this.italic);\n    }\n\n    if (this.classes.length > 0) {\n      span = span || document.createElement(\"span\");\n      span.className = createClass(this.classes);\n    }\n\n    for (var style in this.style) {\n      if (this.style.hasOwnProperty(style)) {\n        span = span || document.createElement(\"span\"); // $FlowFixMe Flow doesn't seem to understand span.style's type.\n\n        span.style[style] = this.style[style];\n      }\n    }\n\n    if (span) {\n      span.appendChild(node);\n      return span;\n    } else {\n      return node;\n    }\n  }\n  /**\n   * Creates markup for a symbol node.\n   */\n\n\n  toMarkup() {\n    // TODO(alpert): More duplication than I'd like from\n    // span.prototype.toMarkup and symbolNode.prototype.toNode...\n    var needsSpan = false;\n    var markup = \"<span\";\n\n    if (this.classes.length) {\n      needsSpan = true;\n      markup += \" class=\\\"\";\n      markup += utils.escape(createClass(this.classes));\n      markup += \"\\\"\";\n    }\n\n    var styles = \"\";\n\n    if (this.italic > 0) {\n      styles += \"margin-right:\" + this.italic + \"em;\";\n    }\n\n    for (var style in this.style) {\n      if (this.style.hasOwnProperty(style)) {\n        styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n      }\n    }\n\n    if (styles) {\n      needsSpan = true;\n      markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n    }\n\n    var escaped = utils.escape(this.text);\n\n    if (needsSpan) {\n      markup += \">\";\n      markup += escaped;\n      markup += \"</span>\";\n      return markup;\n    } else {\n      return escaped;\n    }\n  }\n\n}\n/**\n * SVG nodes are used to render stretchy wide elements.\n */\n\nclass SvgNode {\n  constructor(children, attributes) {\n    this.children = void 0;\n    this.attributes = void 0;\n    this.children = children || [];\n    this.attributes = attributes || {};\n  }\n\n  toNode() {\n    var svgNS = \"http://www.w3.org/2000/svg\";\n    var node = document.createElementNS(svgNS, \"svg\"); // Apply attributes\n\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        node.setAttribute(attr, this.attributes[attr]);\n      }\n    }\n\n    for (var i = 0; i < this.children.length; i++) {\n      node.appendChild(this.children[i].toNode());\n    }\n\n    return node;\n  }\n\n  toMarkup() {\n    var markup = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\"; // Apply attributes\n\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n      }\n    }\n\n    markup += \">\";\n\n    for (var i = 0; i < this.children.length; i++) {\n      markup += this.children[i].toMarkup();\n    }\n\n    markup += \"</svg>\";\n    return markup;\n  }\n\n}\nclass PathNode {\n  constructor(pathName, alternate) {\n    this.pathName = void 0;\n    this.alternate = void 0;\n    this.pathName = pathName;\n    this.alternate = alternate; // Used only for \\sqrt, \\phase, & tall delims\n  }\n\n  toNode() {\n    var svgNS = \"http://www.w3.org/2000/svg\";\n    var node = document.createElementNS(svgNS, \"path\");\n\n    if (this.alternate) {\n      node.setAttribute(\"d\", this.alternate);\n    } else {\n      node.setAttribute(\"d\", path[this.pathName]);\n    }\n\n    return node;\n  }\n\n  toMarkup() {\n    if (this.alternate) {\n      return \"<path d=\\\"\" + utils.escape(this.alternate) + \"\\\"/>\";\n    } else {\n      return \"<path d=\\\"\" + utils.escape(path[this.pathName]) + \"\\\"/>\";\n    }\n  }\n\n}\nclass LineNode {\n  constructor(attributes) {\n    this.attributes = void 0;\n    this.attributes = attributes || {};\n  }\n\n  toNode() {\n    var svgNS = \"http://www.w3.org/2000/svg\";\n    var node = document.createElementNS(svgNS, \"line\"); // Apply attributes\n\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        node.setAttribute(attr, this.attributes[attr]);\n      }\n    }\n\n    return node;\n  }\n\n  toMarkup() {\n    var markup = \"<line\";\n\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n      }\n    }\n\n    markup += \"/>\";\n    return markup;\n  }\n\n}\nfunction assertSymbolDomNode(group) {\n  if (group instanceof SymbolNode) {\n    return group;\n  } else {\n    throw new Error(\"Expected symbolNode but got \" + String(group) + \".\");\n  }\n}\nfunction assertSpan(group) {\n  if (group instanceof Span) {\n    return group;\n  } else {\n    throw new Error(\"Expected span<HtmlDomNode> but got \" + String(group) + \".\");\n  }\n}\n\n/**\n * This file holds a list of all no-argument functions and single-character\n * symbols (like 'a' or ';').\n *\n * For each of the symbols, there are three properties they can have:\n * - font (required): the font to be used for this symbol. Either \"main\" (the\n     normal font), or \"ams\" (the ams fonts).\n * - group (required): the ParseNode group type the symbol should have (i.e.\n     \"textord\", \"mathord\", etc).\n     See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types\n * - replace: the character that this symbol or function should be\n *   replaced with (i.e. \"\\phi\" has a replace value of \"\\u03d5\", the phi\n *   character in the main font).\n *\n * The outermost map in the table indicates what mode the symbols should be\n * accepted in (e.g. \"math\" or \"text\").\n */\n// Some of these have a \"-token\" suffix since these are also used as `ParseNode`\n// types for raw text tokens, and we want to avoid conflicts with higher-level\n// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by\n// looking up the `symbols` map.\nvar ATOMS = {\n  \"bin\": 1,\n  \"close\": 1,\n  \"inner\": 1,\n  \"open\": 1,\n  \"punct\": 1,\n  \"rel\": 1\n};\nvar NON_ATOMS = {\n  \"accent-token\": 1,\n  \"mathord\": 1,\n  \"op-token\": 1,\n  \"spacing\": 1,\n  \"textord\": 1\n};\nvar symbols = {\n  \"math\": {},\n  \"text\": {}\n};\n/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */\n\nfunction defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {\n  symbols[mode][name] = {\n    font,\n    group,\n    replace\n  };\n\n  if (acceptUnicodeChar && replace) {\n    symbols[mode][replace] = symbols[mode][name];\n  }\n} // Some abbreviations for commonly used strings.\n// This helps minify the code, and also spotting typos using jshint.\n// modes:\n\nvar math = \"math\";\nvar text = \"text\"; // fonts:\n\nvar main = \"main\";\nvar ams = \"ams\"; // groups:\n\nvar accent = \"accent-token\";\nvar bin = \"bin\";\nvar close = \"close\";\nvar inner = \"inner\";\nvar mathord = \"mathord\";\nvar op = \"op-token\";\nvar open = \"open\";\nvar punct = \"punct\";\nvar rel = \"rel\";\nvar spacing = \"spacing\";\nvar textord = \"textord\"; // Now comes the symbol table\n// Relation Symbols\n\ndefineSymbol(math, main, rel, \"\\u2261\", \"\\\\equiv\", true);\ndefineSymbol(math, main, rel, \"\\u227a\", \"\\\\prec\", true);\ndefineSymbol(math, main, rel, \"\\u227b\", \"\\\\succ\", true);\ndefineSymbol(math, main, rel, \"\\u223c\", \"\\\\sim\", true);\ndefineSymbol(math, main, rel, \"\\u22a5\", \"\\\\perp\");\ndefineSymbol(math, main, rel, \"\\u2aaf\", \"\\\\preceq\", true);\ndefineSymbol(math, main, rel, \"\\u2ab0\", \"\\\\succeq\", true);\ndefineSymbol(math, main, rel, \"\\u2243\", \"\\\\simeq\", true);\ndefineSymbol(math, main, rel, \"\\u2223\", \"\\\\mid\", true);\ndefineSymbol(math, main, rel, \"\\u226a\", \"\\\\ll\", true);\ndefineSymbol(math, main, rel, \"\\u226b\", \"\\\\gg\", true);\ndefineSymbol(math, main, rel, \"\\u224d\", \"\\\\asymp\", true);\ndefineSymbol(math, main, rel, \"\\u2225\", \"\\\\parallel\");\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\bowtie\", true);\ndefineSymbol(math, main, rel, \"\\u2323\", \"\\\\smile\", true);\ndefineSymbol(math, main, rel, \"\\u2291\", \"\\\\sqsubseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2292\", \"\\\\sqsupseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2250\", \"\\\\doteq\", true);\ndefineSymbol(math, main, rel, \"\\u2322\", \"\\\\frown\", true);\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\ni\", true);\ndefineSymbol(math, main, rel, \"\\u221d\", \"\\\\propto\", true);\ndefineSymbol(math, main, rel, \"\\u22a2\", \"\\\\vdash\", true);\ndefineSymbol(math, main, rel, \"\\u22a3\", \"\\\\dashv\", true);\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\owns\"); // Punctuation\n\ndefineSymbol(math, main, punct, \"\\u002e\", \"\\\\ldotp\");\ndefineSymbol(math, main, punct, \"\\u22c5\", \"\\\\cdotp\"); // Misc Symbols\n\ndefineSymbol(math, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(text, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(math, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(text, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(math, main, textord, \"\\u2135\", \"\\\\aleph\", true);\ndefineSymbol(math, main, textord, \"\\u2200\", \"\\\\forall\", true);\ndefineSymbol(math, main, textord, \"\\u210f\", \"\\\\hbar\", true);\ndefineSymbol(math, main, textord, \"\\u2203\", \"\\\\exists\", true);\ndefineSymbol(math, main, textord, \"\\u2207\", \"\\\\nabla\", true);\ndefineSymbol(math, main, textord, \"\\u266d\", \"\\\\flat\", true);\ndefineSymbol(math, main, textord, \"\\u2113\", \"\\\\ell\", true);\ndefineSymbol(math, main, textord, \"\\u266e\", \"\\\\natural\", true);\ndefineSymbol(math, main, textord, \"\\u2663\", \"\\\\clubsuit\", true);\ndefineSymbol(math, main, textord, \"\\u2118\", \"\\\\wp\", true);\ndefineSymbol(math, main, textord, \"\\u266f\", \"\\\\sharp\", true);\ndefineSymbol(math, main, textord, \"\\u2662\", \"\\\\diamondsuit\", true);\ndefineSymbol(math, main, textord, \"\\u211c\", \"\\\\Re\", true);\ndefineSymbol(math, main, textord, \"\\u2661\", \"\\\\heartsuit\", true);\ndefineSymbol(math, main, textord, \"\\u2111\", \"\\\\Im\", true);\ndefineSymbol(math, main, textord, \"\\u2660\", \"\\\\spadesuit\", true);\ndefineSymbol(math, main, textord, \"\\u00a7\", \"\\\\S\", true);\ndefineSymbol(text, main, textord, \"\\u00a7\", \"\\\\S\");\ndefineSymbol(math, main, textord, \"\\u00b6\", \"\\\\P\", true);\ndefineSymbol(text, main, textord, \"\\u00b6\", \"\\\\P\"); // Math and Text\n\ndefineSymbol(math, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"\\u2020\", \"\\\\textdagger\");\ndefineSymbol(math, main, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"\\u2021\", \"\\\\textdaggerdbl\"); // Large Delimiters\n\ndefineSymbol(math, main, close, \"\\u23b1\", \"\\\\rmoustache\", true);\ndefineSymbol(math, main, open, \"\\u23b0\", \"\\\\lmoustache\", true);\ndefineSymbol(math, main, close, \"\\u27ef\", \"\\\\rgroup\", true);\ndefineSymbol(math, main, open, \"\\u27ee\", \"\\\\lgroup\", true); // Binary Operators\n\ndefineSymbol(math, main, bin, \"\\u2213\", \"\\\\mp\", true);\ndefineSymbol(math, main, bin, \"\\u2296\", \"\\\\ominus\", true);\ndefineSymbol(math, main, bin, \"\\u228e\", \"\\\\uplus\", true);\ndefineSymbol(math, main, bin, \"\\u2293\", \"\\\\sqcap\", true);\ndefineSymbol(math, main, bin, \"\\u2217\", \"\\\\ast\");\ndefineSymbol(math, main, bin, \"\\u2294\", \"\\\\sqcup\", true);\ndefineSymbol(math, main, bin, \"\\u25ef\", \"\\\\bigcirc\", true);\ndefineSymbol(math, main, bin, \"\\u2219\", \"\\\\bullet\", true);\ndefineSymbol(math, main, bin, \"\\u2021\", \"\\\\ddagger\");\ndefineSymbol(math, main, bin, \"\\u2240\", \"\\\\wr\", true);\ndefineSymbol(math, main, bin, \"\\u2a3f\", \"\\\\amalg\");\ndefineSymbol(math, main, bin, \"\\u0026\", \"\\\\And\"); // from amsmath\n// Arrow Symbols\n\ndefineSymbol(math, main, rel, \"\\u27f5\", \"\\\\longleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d0\", \"\\\\Leftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f8\", \"\\\\Longleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f6\", \"\\\\longrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d2\", \"\\\\Rightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f9\", \"\\\\Longrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2194\", \"\\\\leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f7\", \"\\\\longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d4\", \"\\\\Leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27fa\", \"\\\\Longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21a6\", \"\\\\mapsto\", true);\ndefineSymbol(math, main, rel, \"\\u27fc\", \"\\\\longmapsto\", true);\ndefineSymbol(math, main, rel, \"\\u2197\", \"\\\\nearrow\", true);\ndefineSymbol(math, main, rel, \"\\u21a9\", \"\\\\hookleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21aa\", \"\\\\hookrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2198\", \"\\\\searrow\", true);\ndefineSymbol(math, main, rel, \"\\u21bc\", \"\\\\leftharpoonup\", true);\ndefineSymbol(math, main, rel, \"\\u21c0\", \"\\\\rightharpoonup\", true);\ndefineSymbol(math, main, rel, \"\\u2199\", \"\\\\swarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21bd\", \"\\\\leftharpoondown\", true);\ndefineSymbol(math, main, rel, \"\\u21c1\", \"\\\\rightharpoondown\", true);\ndefineSymbol(math, main, rel, \"\\u2196\", \"\\\\nwarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21cc\", \"\\\\rightleftharpoons\", true); // AMS Negated Binary Relations\n\ndefineSymbol(math, ams, rel, \"\\u226e\", \"\\\\nless\", true); // Symbol names preceded by \"@\" each have a corresponding macro.\n\ndefineSymbol(math, ams, rel, \"\\ue010\", \"\\\\@nleqslant\");\ndefineSymbol(math, ams, rel, \"\\ue011\", \"\\\\@nleqq\");\ndefineSymbol(math, ams, rel, \"\\u2a87\", \"\\\\lneq\", true);\ndefineSymbol(math, ams, rel, \"\\u2268\", \"\\\\lneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue00c\", \"\\\\@lvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e6\", \"\\\\lnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a89\", \"\\\\lnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2280\", \"\\\\nprec\", true); // unicode-math maps \\u22e0 to \\npreccurlyeq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u22e0\", \"\\\\npreceq\", true);\ndefineSymbol(math, ams, rel, \"\\u22e8\", \"\\\\precnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab9\", \"\\\\precnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2241\", \"\\\\nsim\", true);\ndefineSymbol(math, ams, rel, \"\\ue006\", \"\\\\@nshortmid\");\ndefineSymbol(math, ams, rel, \"\\u2224\", \"\\\\nmid\", true);\ndefineSymbol(math, ams, rel, \"\\u22ac\", \"\\\\nvdash\", true);\ndefineSymbol(math, ams, rel, \"\\u22ad\", \"\\\\nvDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22ea\", \"\\\\ntriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22ec\", \"\\\\ntrianglelefteq\", true);\ndefineSymbol(math, ams, rel, \"\\u228a\", \"\\\\subsetneq\", true);\ndefineSymbol(math, ams, rel, \"\\ue01a\", \"\\\\@varsubsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acb\", \"\\\\subsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue017\", \"\\\\@varsubsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u226f\", \"\\\\ngtr\", true);\ndefineSymbol(math, ams, rel, \"\\ue00f\", \"\\\\@ngeqslant\");\ndefineSymbol(math, ams, rel, \"\\ue00e\", \"\\\\@ngeqq\");\ndefineSymbol(math, ams, rel, \"\\u2a88\", \"\\\\gneq\", true);\ndefineSymbol(math, ams, rel, \"\\u2269\", \"\\\\gneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue00d\", \"\\\\@gvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e7\", \"\\\\gnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8a\", \"\\\\gnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2281\", \"\\\\nsucc\", true); // unicode-math maps \\u22e1 to \\nsucccurlyeq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u22e1\", \"\\\\nsucceq\", true);\ndefineSymbol(math, ams, rel, \"\\u22e9\", \"\\\\succnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2aba\", \"\\\\succnapprox\", true); // unicode-math maps \\u2246 to \\simneqq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u2246\", \"\\\\ncong\", true);\ndefineSymbol(math, ams, rel, \"\\ue007\", \"\\\\@nshortparallel\");\ndefineSymbol(math, ams, rel, \"\\u2226\", \"\\\\nparallel\", true);\ndefineSymbol(math, ams, rel, \"\\u22af\", \"\\\\nVDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22eb\", \"\\\\ntriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22ed\", \"\\\\ntrianglerighteq\", true);\ndefineSymbol(math, ams, rel, \"\\ue018\", \"\\\\@nsupseteqq\");\ndefineSymbol(math, ams, rel, \"\\u228b\", \"\\\\supsetneq\", true);\ndefineSymbol(math, ams, rel, \"\\ue01b\", \"\\\\@varsupsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acc\", \"\\\\supsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue019\", \"\\\\@varsupsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u22ae\", \"\\\\nVdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab5\", \"\\\\precneqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab6\", \"\\\\succneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue016\", \"\\\\@nsubseteqq\");\ndefineSymbol(math, ams, bin, \"\\u22b4\", \"\\\\unlhd\");\ndefineSymbol(math, ams, bin, \"\\u22b5\", \"\\\\unrhd\"); // AMS Negated Arrows\n\ndefineSymbol(math, ams, rel, \"\\u219a\", \"\\\\nleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u219b\", \"\\\\nrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21cd\", \"\\\\nLeftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21cf\", \"\\\\nRightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21ae\", \"\\\\nleftrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21ce\", \"\\\\nLeftrightarrow\", true); // AMS Misc\n\ndefineSymbol(math, ams, rel, \"\\u25b3\", \"\\\\vartriangle\");\ndefineSymbol(math, ams, textord, \"\\u210f\", \"\\\\hslash\");\ndefineSymbol(math, ams, textord, \"\\u25bd\", \"\\\\triangledown\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\lozenge\");\ndefineSymbol(math, ams, textord, \"\\u24c8\", \"\\\\circledS\");\ndefineSymbol(math, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(text, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(math, ams, textord, \"\\u2221\", \"\\\\measuredangle\", true);\ndefineSymbol(math, ams, textord, \"\\u2204\", \"\\\\nexists\");\ndefineSymbol(math, ams, textord, \"\\u2127\", \"\\\\mho\");\ndefineSymbol(math, ams, textord, \"\\u2132\", \"\\\\Finv\", true);\ndefineSymbol(math, ams, textord, \"\\u2141\", \"\\\\Game\", true);\ndefineSymbol(math, ams, textord, \"\\u2035\", \"\\\\backprime\");\ndefineSymbol(math, ams, textord, \"\\u25b2\", \"\\\\blacktriangle\");\ndefineSymbol(math, ams, textord, \"\\u25bc\", \"\\\\blacktriangledown\");\ndefineSymbol(math, ams, textord, \"\\u25a0\", \"\\\\blacksquare\");\ndefineSymbol(math, ams, textord, \"\\u29eb\", \"\\\\blacklozenge\");\ndefineSymbol(math, ams, textord, \"\\u2605\", \"\\\\bigstar\");\ndefineSymbol(math, ams, textord, \"\\u2222\", \"\\\\sphericalangle\", true);\ndefineSymbol(math, ams, textord, \"\\u2201\", \"\\\\complement\", true); // unicode-math maps U+F0 to \\matheth. We map to AMS function \\eth\n\ndefineSymbol(math, ams, textord, \"\\u00f0\", \"\\\\eth\", true);\ndefineSymbol(text, main, textord, \"\\u00f0\", \"\\u00f0\");\ndefineSymbol(math, ams, textord, \"\\u2571\", \"\\\\diagup\");\ndefineSymbol(math, ams, textord, \"\\u2572\", \"\\\\diagdown\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\square\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\Box\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\Diamond\"); // unicode-math maps U+A5 to \\mathyen. We map to AMS function \\yen\n\ndefineSymbol(math, ams, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(text, ams, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(math, ams, textord, \"\\u2713\", \"\\\\checkmark\", true);\ndefineSymbol(text, ams, textord, \"\\u2713\", \"\\\\checkmark\"); // AMS Hebrew\n\ndefineSymbol(math, ams, textord, \"\\u2136\", \"\\\\beth\", true);\ndefineSymbol(math, ams, textord, \"\\u2138\", \"\\\\daleth\", true);\ndefineSymbol(math, ams, textord, \"\\u2137\", \"\\\\gimel\", true); // AMS Greek\n\ndefineSymbol(math, ams, textord, \"\\u03dd\", \"\\\\digamma\", true);\ndefineSymbol(math, ams, textord, \"\\u03f0\", \"\\\\varkappa\"); // AMS Delimiters\n\ndefineSymbol(math, ams, open, \"\\u250c\", \"\\\\@ulcorner\", true);\ndefineSymbol(math, ams, close, \"\\u2510\", \"\\\\@urcorner\", true);\ndefineSymbol(math, ams, open, \"\\u2514\", \"\\\\@llcorner\", true);\ndefineSymbol(math, ams, close, \"\\u2518\", \"\\\\@lrcorner\", true); // AMS Binary Relations\n\ndefineSymbol(math, ams, rel, \"\\u2266\", \"\\\\leqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2a7d\", \"\\\\leqslant\", true);\ndefineSymbol(math, ams, rel, \"\\u2a95\", \"\\\\eqslantless\", true);\ndefineSymbol(math, ams, rel, \"\\u2272\", \"\\\\lesssim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a85\", \"\\\\lessapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u224a\", \"\\\\approxeq\", true);\ndefineSymbol(math, ams, bin, \"\\u22d6\", \"\\\\lessdot\");\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\lll\", true);\ndefineSymbol(math, ams, rel, \"\\u2276\", \"\\\\lessgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u22da\", \"\\\\lesseqgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8b\", \"\\\\lesseqqgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\doteqdot\");\ndefineSymbol(math, ams, rel, \"\\u2253\", \"\\\\risingdotseq\", true);\ndefineSymbol(math, ams, rel, \"\\u2252\", \"\\\\fallingdotseq\", true);\ndefineSymbol(math, ams, rel, \"\\u223d\", \"\\\\backsim\", true);\ndefineSymbol(math, ams, rel, \"\\u22cd\", \"\\\\backsimeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2ac5\", \"\\\\subseteqq\", true);\ndefineSymbol(math, ams, rel, \"\\u22d0\", \"\\\\Subset\", true);\ndefineSymbol(math, ams, rel, \"\\u228f\", \"\\\\sqsubset\", true);\ndefineSymbol(math, ams, rel, \"\\u227c\", \"\\\\preccurlyeq\", true);\ndefineSymbol(math, ams, rel, \"\\u22de\", \"\\\\curlyeqprec\", true);\ndefineSymbol(math, ams, rel, \"\\u227e\", \"\\\\precsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab7\", \"\\\\precapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u22b2\", \"\\\\vartriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22b4\", \"\\\\trianglelefteq\");\ndefineSymbol(math, ams, rel, \"\\u22a8\", \"\\\\vDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22aa\", \"\\\\Vvdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2323\", \"\\\\smallsmile\");\ndefineSymbol(math, ams, rel, \"\\u2322\", \"\\\\smallfrown\");\ndefineSymbol(math, ams, rel, \"\\u224f\", \"\\\\bumpeq\", true);\ndefineSymbol(math, ams, rel, \"\\u224e\", \"\\\\Bumpeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2267\", \"\\\\geqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2a7e\", \"\\\\geqslant\", true);\ndefineSymbol(math, ams, rel, \"\\u2a96\", \"\\\\eqslantgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2273\", \"\\\\gtrsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a86\", \"\\\\gtrapprox\", true);\ndefineSymbol(math, ams, bin, \"\\u22d7\", \"\\\\gtrdot\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\ggg\", true);\ndefineSymbol(math, ams, rel, \"\\u2277\", \"\\\\gtrless\", true);\ndefineSymbol(math, ams, rel, \"\\u22db\", \"\\\\gtreqless\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8c\", \"\\\\gtreqqless\", true);\ndefineSymbol(math, ams, rel, \"\\u2256\", \"\\\\eqcirc\", true);\ndefineSymbol(math, ams, rel, \"\\u2257\", \"\\\\circeq\", true);\ndefineSymbol(math, ams, rel, \"\\u225c\", \"\\\\triangleq\", true);\ndefineSymbol(math, ams, rel, \"\\u223c\", \"\\\\thicksim\");\ndefineSymbol(math, ams, rel, \"\\u2248\", \"\\\\thickapprox\");\ndefineSymbol(math, ams, rel, \"\\u2ac6\", \"\\\\supseteqq\", true);\ndefineSymbol(math, ams, rel, \"\\u22d1\", \"\\\\Supset\", true);\ndefineSymbol(math, ams, rel, \"\\u2290\", \"\\\\sqsupset\", true);\ndefineSymbol(math, ams, rel, \"\\u227d\", \"\\\\succcurlyeq\", true);\ndefineSymbol(math, ams, rel, \"\\u22df\", \"\\\\curlyeqsucc\", true);\ndefineSymbol(math, ams, rel, \"\\u227f\", \"\\\\succsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab8\", \"\\\\succapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u22b3\", \"\\\\vartriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22b5\", \"\\\\trianglerighteq\");\ndefineSymbol(math, ams, rel, \"\\u22a9\", \"\\\\Vdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2223\", \"\\\\shortmid\");\ndefineSymbol(math, ams, rel, \"\\u2225\", \"\\\\shortparallel\");\ndefineSymbol(math, ams, rel, \"\\u226c\", \"\\\\between\", true);\ndefineSymbol(math, ams, rel, \"\\u22d4\", \"\\\\pitchfork\", true);\ndefineSymbol(math, ams, rel, \"\\u221d\", \"\\\\varpropto\");\ndefineSymbol(math, ams, rel, \"\\u25c0\", \"\\\\blacktriangleleft\"); // unicode-math says that \\therefore is a mathord atom.\n// We kept the amssymb atom type, which is rel.\n\ndefineSymbol(math, ams, rel, \"\\u2234\", \"\\\\therefore\", true);\ndefineSymbol(math, ams, rel, \"\\u220d\", \"\\\\backepsilon\");\ndefineSymbol(math, ams, rel, \"\\u25b6\", \"\\\\blacktriangleright\"); // unicode-math says that \\because is a mathord atom.\n// We kept the amssymb atom type, which is rel.\n\ndefineSymbol(math, ams, rel, \"\\u2235\", \"\\\\because\", true);\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\llless\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\gggtr\");\ndefineSymbol(math, ams, bin, \"\\u22b2\", \"\\\\lhd\");\ndefineSymbol(math, ams, bin, \"\\u22b3\", \"\\\\rhd\");\ndefineSymbol(math, ams, rel, \"\\u2242\", \"\\\\eqsim\", true);\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\Join\");\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\Doteq\", true); // AMS Binary Operators\n\ndefineSymbol(math, ams, bin, \"\\u2214\", \"\\\\dotplus\", true);\ndefineSymbol(math, ams, bin, \"\\u2216\", \"\\\\smallsetminus\");\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\Cap\", true);\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\Cup\", true);\ndefineSymbol(math, ams, bin, \"\\u2a5e\", \"\\\\doublebarwedge\", true);\ndefineSymbol(math, ams, bin, \"\\u229f\", \"\\\\boxminus\", true);\ndefineSymbol(math, ams, bin, \"\\u229e\", \"\\\\boxplus\", true);\ndefineSymbol(math, ams, bin, \"\\u22c7\", \"\\\\divideontimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22c9\", \"\\\\ltimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22ca\", \"\\\\rtimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cb\", \"\\\\leftthreetimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cc\", \"\\\\rightthreetimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cf\", \"\\\\curlywedge\", true);\ndefineSymbol(math, ams, bin, \"\\u22ce\", \"\\\\curlyvee\", true);\ndefineSymbol(math, ams, bin, \"\\u229d\", \"\\\\circleddash\", true);\ndefineSymbol(math, ams, bin, \"\\u229b\", \"\\\\circledast\", true);\ndefineSymbol(math, ams, bin, \"\\u22c5\", \"\\\\centerdot\");\ndefineSymbol(math, ams, bin, \"\\u22ba\", \"\\\\intercal\", true);\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\doublecap\");\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\doublecup\");\ndefineSymbol(math, ams, bin, \"\\u22a0\", \"\\\\boxtimes\", true); // AMS Arrows\n// Note: unicode-math maps \\u21e2 to their own function \\rightdasharrow.\n// We'll map it to AMS function \\dashrightarrow. It produces the same atom.\n\ndefineSymbol(math, ams, rel, \"\\u21e2\", \"\\\\dashrightarrow\", true); // unicode-math maps \\u21e0 to \\leftdasharrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21e0\", \"\\\\dashleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21c7\", \"\\\\leftleftarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21c6\", \"\\\\leftrightarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21da\", \"\\\\Lleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u219e\", \"\\\\twoheadleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21a2\", \"\\\\leftarrowtail\", true);\ndefineSymbol(math, ams, rel, \"\\u21ab\", \"\\\\looparrowleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21cb\", \"\\\\leftrightharpoons\", true);\ndefineSymbol(math, ams, rel, \"\\u21b6\", \"\\\\curvearrowleft\", true); // unicode-math maps \\u21ba to \\acwopencirclearrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21ba\", \"\\\\circlearrowleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21b0\", \"\\\\Lsh\", true);\ndefineSymbol(math, ams, rel, \"\\u21c8\", \"\\\\upuparrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21bf\", \"\\\\upharpoonleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21c3\", \"\\\\downharpoonleft\", true);\ndefineSymbol(math, main, rel, \"\\u22b6\", \"\\\\origof\", true); // not in font\n\ndefineSymbol(math, main, rel, \"\\u22b7\", \"\\\\imageof\", true); // not in font\n\ndefineSymbol(math, ams, rel, \"\\u22b8\", \"\\\\multimap\", true);\ndefineSymbol(math, ams, rel, \"\\u21ad\", \"\\\\leftrightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21c9\", \"\\\\rightrightarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21c4\", \"\\\\rightleftarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21a0\", \"\\\\twoheadrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21a3\", \"\\\\rightarrowtail\", true);\ndefineSymbol(math, ams, rel, \"\\u21ac\", \"\\\\looparrowright\", true);\ndefineSymbol(math, ams, rel, \"\\u21b7\", \"\\\\curvearrowright\", true); // unicode-math maps \\u21bb to \\cwopencirclearrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21bb\", \"\\\\circlearrowright\", true);\ndefineSymbol(math, ams, rel, \"\\u21b1\", \"\\\\Rsh\", true);\ndefineSymbol(math, ams, rel, \"\\u21ca\", \"\\\\downdownarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\upharpoonright\", true);\ndefineSymbol(math, ams, rel, \"\\u21c2\", \"\\\\downharpoonright\", true);\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\rightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\leadsto\");\ndefineSymbol(math, ams, rel, \"\\u21db\", \"\\\\Rrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\restriction\");\ndefineSymbol(math, main, textord, \"\\u2018\", \"`\");\ndefineSymbol(math, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\textdollar\");\ndefineSymbol(math, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(text, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(math, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\textunderscore\");\ndefineSymbol(math, main, textord, \"\\u2220\", \"\\\\angle\", true);\ndefineSymbol(math, main, textord, \"\\u221e\", \"\\\\infty\", true);\ndefineSymbol(math, main, textord, \"\\u2032\", \"\\\\prime\");\ndefineSymbol(math, main, textord, \"\\u25b3\", \"\\\\triangle\");\ndefineSymbol(math, main, textord, \"\\u0393\", \"\\\\Gamma\", true);\ndefineSymbol(math, main, textord, \"\\u0394\", \"\\\\Delta\", true);\ndefineSymbol(math, main, textord, \"\\u0398\", \"\\\\Theta\", true);\ndefineSymbol(math, main, textord, \"\\u039b\", \"\\\\Lambda\", true);\ndefineSymbol(math, main, textord, \"\\u039e\", \"\\\\Xi\", true);\ndefineSymbol(math, main, textord, \"\\u03a0\", \"\\\\Pi\", true);\ndefineSymbol(math, main, textord, \"\\u03a3\", \"\\\\Sigma\", true);\ndefineSymbol(math, main, textord, \"\\u03a5\", \"\\\\Upsilon\", true);\ndefineSymbol(math, main, textord, \"\\u03a6\", \"\\\\Phi\", true);\ndefineSymbol(math, main, textord, \"\\u03a8\", \"\\\\Psi\", true);\ndefineSymbol(math, main, textord, \"\\u03a9\", \"\\\\Omega\", true);\ndefineSymbol(math, main, textord, \"A\", \"\\u0391\");\ndefineSymbol(math, main, textord, \"B\", \"\\u0392\");\ndefineSymbol(math, main, textord, \"E\", \"\\u0395\");\ndefineSymbol(math, main, textord, \"Z\", \"\\u0396\");\ndefineSymbol(math, main, textord, \"H\", \"\\u0397\");\ndefineSymbol(math, main, textord, \"I\", \"\\u0399\");\ndefineSymbol(math, main, textord, \"K\", \"\\u039A\");\ndefineSymbol(math, main, textord, \"M\", \"\\u039C\");\ndefineSymbol(math, main, textord, \"N\", \"\\u039D\");\ndefineSymbol(math, main, textord, \"O\", \"\\u039F\");\ndefineSymbol(math, main, textord, \"P\", \"\\u03A1\");\ndefineSymbol(math, main, textord, \"T\", \"\\u03A4\");\ndefineSymbol(math, main, textord, \"X\", \"\\u03A7\");\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\neg\", true);\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\lnot\");\ndefineSymbol(math, main, textord, \"\\u22a4\", \"\\\\top\");\ndefineSymbol(math, main, textord, \"\\u22a5\", \"\\\\bot\");\ndefineSymbol(math, main, textord, \"\\u2205\", \"\\\\emptyset\");\ndefineSymbol(math, ams, textord, \"\\u2205\", \"\\\\varnothing\");\ndefineSymbol(math, main, mathord, \"\\u03b1\", \"\\\\alpha\", true);\ndefineSymbol(math, main, mathord, \"\\u03b2\", \"\\\\beta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b3\", \"\\\\gamma\", true);\ndefineSymbol(math, main, mathord, \"\\u03b4\", \"\\\\delta\", true);\ndefineSymbol(math, main, mathord, \"\\u03f5\", \"\\\\epsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03b6\", \"\\\\zeta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b7\", \"\\\\eta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b8\", \"\\\\theta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b9\", \"\\\\iota\", true);\ndefineSymbol(math, main, mathord, \"\\u03ba\", \"\\\\kappa\", true);\ndefineSymbol(math, main, mathord, \"\\u03bb\", \"\\\\lambda\", true);\ndefineSymbol(math, main, mathord, \"\\u03bc\", \"\\\\mu\", true);\ndefineSymbol(math, main, mathord, \"\\u03bd\", \"\\\\nu\", true);\ndefineSymbol(math, main, mathord, \"\\u03be\", \"\\\\xi\", true);\ndefineSymbol(math, main, mathord, \"\\u03bf\", \"\\\\omicron\", true);\ndefineSymbol(math, main, mathord, \"\\u03c0\", \"\\\\pi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c1\", \"\\\\rho\", true);\ndefineSymbol(math, main, mathord, \"\\u03c3\", \"\\\\sigma\", true);\ndefineSymbol(math, main, mathord, \"\\u03c4\", \"\\\\tau\", true);\ndefineSymbol(math, main, mathord, \"\\u03c5\", \"\\\\upsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03d5\", \"\\\\phi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c7\", \"\\\\chi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c8\", \"\\\\psi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c9\", \"\\\\omega\", true);\ndefineSymbol(math, main, mathord, \"\\u03b5\", \"\\\\varepsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03d1\", \"\\\\vartheta\", true);\ndefineSymbol(math, main, mathord, \"\\u03d6\", \"\\\\varpi\", true);\ndefineSymbol(math, main, mathord, \"\\u03f1\", \"\\\\varrho\", true);\ndefineSymbol(math, main, mathord, \"\\u03c2\", \"\\\\varsigma\", true);\ndefineSymbol(math, main, mathord, \"\\u03c6\", \"\\\\varphi\", true);\ndefineSymbol(math, main, bin, \"\\u2217\", \"*\", true);\ndefineSymbol(math, main, bin, \"+\", \"+\");\ndefineSymbol(math, main, bin, \"\\u2212\", \"-\", true);\ndefineSymbol(math, main, bin, \"\\u22c5\", \"\\\\cdot\", true);\ndefineSymbol(math, main, bin, \"\\u2218\", \"\\\\circ\", true);\ndefineSymbol(math, main, bin, \"\\u00f7\", \"\\\\div\", true);\ndefineSymbol(math, main, bin, \"\\u00b1\", \"\\\\pm\", true);\ndefineSymbol(math, main, bin, \"\\u00d7\", \"\\\\times\", true);\ndefineSymbol(math, main, bin, \"\\u2229\", \"\\\\cap\", true);\ndefineSymbol(math, main, bin, \"\\u222a\", \"\\\\cup\", true);\ndefineSymbol(math, main, bin, \"\\u2216\", \"\\\\setminus\", true);\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\land\");\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\lor\");\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\wedge\", true);\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\vee\", true);\ndefineSymbol(math, main, textord, \"\\u221a\", \"\\\\surd\");\ndefineSymbol(math, main, open, \"\\u27e8\", \"\\\\langle\", true);\ndefineSymbol(math, main, open, \"\\u2223\", \"\\\\lvert\");\ndefineSymbol(math, main, open, \"\\u2225\", \"\\\\lVert\");\ndefineSymbol(math, main, close, \"?\", \"?\");\ndefineSymbol(math, main, close, \"!\", \"!\");\ndefineSymbol(math, main, close, \"\\u27e9\", \"\\\\rangle\", true);\ndefineSymbol(math, main, close, \"\\u2223\", \"\\\\rvert\");\ndefineSymbol(math, main, close, \"\\u2225\", \"\\\\rVert\");\ndefineSymbol(math, main, rel, \"=\", \"=\");\ndefineSymbol(math, main, rel, \":\", \":\");\ndefineSymbol(math, main, rel, \"\\u2248\", \"\\\\approx\", true);\ndefineSymbol(math, main, rel, \"\\u2245\", \"\\\\cong\", true);\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\ge\");\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\geq\", true);\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\gets\");\ndefineSymbol(math, main, rel, \">\", \"\\\\gt\", true);\ndefineSymbol(math, main, rel, \"\\u2208\", \"\\\\in\", true);\ndefineSymbol(math, main, rel, \"\\ue020\", \"\\\\@not\");\ndefineSymbol(math, main, rel, \"\\u2282\", \"\\\\subset\", true);\ndefineSymbol(math, main, rel, \"\\u2283\", \"\\\\supset\", true);\ndefineSymbol(math, main, rel, \"\\u2286\", \"\\\\subseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2287\", \"\\\\supseteq\", true);\ndefineSymbol(math, ams, rel, \"\\u2288\", \"\\\\nsubseteq\", true);\ndefineSymbol(math, ams, rel, \"\\u2289\", \"\\\\nsupseteq\", true);\ndefineSymbol(math, main, rel, \"\\u22a8\", \"\\\\models\");\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\leftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\le\");\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\leq\", true);\ndefineSymbol(math, main, rel, \"<\", \"\\\\lt\", true);\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\rightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\to\");\ndefineSymbol(math, ams, rel, \"\\u2271\", \"\\\\ngeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2270\", \"\\\\nleq\", true);\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\space\"); // Ref: LaTeX Source 2e: \\DeclareRobustCommand{\\nobreakspace}{%\n\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \" \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\space\");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(math, main, spacing, null, \"\\\\nobreak\");\ndefineSymbol(math, main, spacing, null, \"\\\\allowbreak\");\ndefineSymbol(math, main, punct, \",\", \",\");\ndefineSymbol(math, main, punct, \";\", \";\");\ndefineSymbol(math, ams, bin, \"\\u22bc\", \"\\\\barwedge\", true);\ndefineSymbol(math, ams, bin, \"\\u22bb\", \"\\\\veebar\", true);\ndefineSymbol(math, main, bin, \"\\u2299\", \"\\\\odot\", true);\ndefineSymbol(math, main, bin, \"\\u2295\", \"\\\\oplus\", true);\ndefineSymbol(math, main, bin, \"\\u2297\", \"\\\\otimes\", true);\ndefineSymbol(math, main, textord, \"\\u2202\", \"\\\\partial\", true);\ndefineSymbol(math, main, bin, \"\\u2298\", \"\\\\oslash\", true);\ndefineSymbol(math, ams, bin, \"\\u229a\", \"\\\\circledcirc\", true);\ndefineSymbol(math, ams, bin, \"\\u22a1\", \"\\\\boxdot\", true);\ndefineSymbol(math, main, bin, \"\\u25b3\", \"\\\\bigtriangleup\");\ndefineSymbol(math, main, bin, \"\\u25bd\", \"\\\\bigtriangledown\");\ndefineSymbol(math, main, bin, \"\\u2020\", \"\\\\dagger\");\ndefineSymbol(math, main, bin, \"\\u22c4\", \"\\\\diamond\");\ndefineSymbol(math, main, bin, \"\\u22c6\", \"\\\\star\");\ndefineSymbol(math, main, bin, \"\\u25c3\", \"\\\\triangleleft\");\ndefineSymbol(math, main, bin, \"\\u25b9\", \"\\\\triangleright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\textbraceleft\");\ndefineSymbol(math, main, close, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\textbraceright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\lbrace\");\ndefineSymbol(math, main, close, \"}\", \"\\\\rbrace\");\ndefineSymbol(math, main, open, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(text, main, textord, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(math, main, close, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(text, main, textord, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(math, main, open, \"(\", \"\\\\lparen\", true);\ndefineSymbol(math, main, close, \")\", \"\\\\rparen\", true);\ndefineSymbol(text, main, textord, \"<\", \"\\\\textless\", true); // in T1 fontenc\n\ndefineSymbol(text, main, textord, \">\", \"\\\\textgreater\", true); // in T1 fontenc\n\ndefineSymbol(math, main, open, \"\\u230a\", \"\\\\lfloor\", true);\ndefineSymbol(math, main, close, \"\\u230b\", \"\\\\rfloor\", true);\ndefineSymbol(math, main, open, \"\\u2308\", \"\\\\lceil\", true);\ndefineSymbol(math, main, close, \"\\u2309\", \"\\\\rceil\", true);\ndefineSymbol(math, main, textord, \"\\\\\", \"\\\\backslash\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"|\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"\\\\vert\");\ndefineSymbol(text, main, textord, \"|\", \"\\\\textbar\", true); // in T1 fontenc\n\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\|\");\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\Vert\");\ndefineSymbol(text, main, textord, \"\\u2225\", \"\\\\textbardbl\");\ndefineSymbol(text, main, textord, \"~\", \"\\\\textasciitilde\");\ndefineSymbol(text, main, textord, \"\\\\\", \"\\\\textbackslash\");\ndefineSymbol(text, main, textord, \"^\", \"\\\\textasciicircum\");\ndefineSymbol(math, main, rel, \"\\u2191\", \"\\\\uparrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d1\", \"\\\\Uparrow\", true);\ndefineSymbol(math, main, rel, \"\\u2193\", \"\\\\downarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d3\", \"\\\\Downarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2195\", \"\\\\updownarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d5\", \"\\\\Updownarrow\", true);\ndefineSymbol(math, main, op, \"\\u2210\", \"\\\\coprod\");\ndefineSymbol(math, main, op, \"\\u22c1\", \"\\\\bigvee\");\ndefineSymbol(math, main, op, \"\\u22c0\", \"\\\\bigwedge\");\ndefineSymbol(math, main, op, \"\\u2a04\", \"\\\\biguplus\");\ndefineSymbol(math, main, op, \"\\u22c2\", \"\\\\bigcap\");\ndefineSymbol(math, main, op, \"\\u22c3\", \"\\\\bigcup\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\int\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\intop\");\ndefineSymbol(math, main, op, \"\\u222c\", \"\\\\iint\");\ndefineSymbol(math, main, op, \"\\u222d\", \"\\\\iiint\");\ndefineSymbol(math, main, op, \"\\u220f\", \"\\\\prod\");\ndefineSymbol(math, main, op, \"\\u2211\", \"\\\\sum\");\ndefineSymbol(math, main, op, \"\\u2a02\", \"\\\\bigotimes\");\ndefineSymbol(math, main, op, \"\\u2a01\", \"\\\\bigoplus\");\ndefineSymbol(math, main, op, \"\\u2a00\", \"\\\\bigodot\");\ndefineSymbol(math, main, op, \"\\u222e\", \"\\\\oint\");\ndefineSymbol(math, main, op, \"\\u222f\", \"\\\\oiint\");\ndefineSymbol(math, main, op, \"\\u2230\", \"\\\\oiiint\");\ndefineSymbol(math, main, op, \"\\u2a06\", \"\\\\bigsqcup\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\smallint\");\ndefineSymbol(text, main, inner, \"\\u2026\", \"\\\\textellipsis\");\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\mathellipsis\");\ndefineSymbol(text, main, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"\\u22ef\", \"\\\\@cdots\", true);\ndefineSymbol(math, main, inner, \"\\u22f1\", \"\\\\ddots\", true); // \\vdots is a macro that uses one of these two symbols (with made-up names):\n\ndefineSymbol(math, main, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(text, main, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(math, main, accent, \"\\u02ca\", \"\\\\acute\");\ndefineSymbol(math, main, accent, \"\\u02cb\", \"\\\\grave\");\ndefineSymbol(math, main, accent, \"\\u00a8\", \"\\\\ddot\");\ndefineSymbol(math, main, accent, \"\\u007e\", \"\\\\tilde\");\ndefineSymbol(math, main, accent, \"\\u02c9\", \"\\\\bar\");\ndefineSymbol(math, main, accent, \"\\u02d8\", \"\\\\breve\");\ndefineSymbol(math, main, accent, \"\\u02c7\", \"\\\\check\");\ndefineSymbol(math, main, accent, \"\\u005e\", \"\\\\hat\");\ndefineSymbol(math, main, accent, \"\\u20d7\", \"\\\\vec\");\ndefineSymbol(math, main, accent, \"\\u02d9\", \"\\\\dot\");\ndefineSymbol(math, main, accent, \"\\u02da\", \"\\\\mathring\"); // \\imath and \\jmath should be invariant to \\mathrm, \\mathbf, etc., so use PUA\n\ndefineSymbol(math, main, mathord, \"\\ue131\", \"\\\\@imath\");\ndefineSymbol(math, main, mathord, \"\\ue237\", \"\\\\@jmath\");\ndefineSymbol(math, main, textord, \"\\u0131\", \"\\u0131\");\ndefineSymbol(math, main, textord, \"\\u0237\", \"\\u0237\");\ndefineSymbol(text, main, textord, \"\\u0131\", \"\\\\i\", true);\ndefineSymbol(text, main, textord, \"\\u0237\", \"\\\\j\", true);\ndefineSymbol(text, main, textord, \"\\u00df\", \"\\\\ss\", true);\ndefineSymbol(text, main, textord, \"\\u00e6\", \"\\\\ae\", true);\ndefineSymbol(text, main, textord, \"\\u0153\", \"\\\\oe\", true);\ndefineSymbol(text, main, textord, \"\\u00f8\", \"\\\\o\", true);\ndefineSymbol(text, main, textord, \"\\u00c6\", \"\\\\AE\", true);\ndefineSymbol(text, main, textord, \"\\u0152\", \"\\\\OE\", true);\ndefineSymbol(text, main, textord, \"\\u00d8\", \"\\\\O\", true);\ndefineSymbol(text, main, accent, \"\\u02ca\", \"\\\\'\"); // acute\n\ndefineSymbol(text, main, accent, \"\\u02cb\", \"\\\\`\"); // grave\n\ndefineSymbol(text, main, accent, \"\\u02c6\", \"\\\\^\"); // circumflex\n\ndefineSymbol(text, main, accent, \"\\u02dc\", \"\\\\~\"); // tilde\n\ndefineSymbol(text, main, accent, \"\\u02c9\", \"\\\\=\"); // macron\n\ndefineSymbol(text, main, accent, \"\\u02d8\", \"\\\\u\"); // breve\n\ndefineSymbol(text, main, accent, \"\\u02d9\", \"\\\\.\"); // dot above\n\ndefineSymbol(text, main, accent, \"\\u00b8\", \"\\\\c\"); // cedilla\n\ndefineSymbol(text, main, accent, \"\\u02da\", \"\\\\r\"); // ring above\n\ndefineSymbol(text, main, accent, \"\\u02c7\", \"\\\\v\"); // caron\n\ndefineSymbol(text, main, accent, \"\\u00a8\", '\\\\\"'); // diaeresis\n\ndefineSymbol(text, main, accent, \"\\u02dd\", \"\\\\H\"); // double acute\n\ndefineSymbol(text, main, accent, \"\\u25ef\", \"\\\\textcircled\"); // \\bigcirc glyph\n// These ligatures are detected and created in Parser.js's `formLigatures`.\n\nvar ligatures = {\n  \"--\": true,\n  \"---\": true,\n  \"``\": true,\n  \"''\": true\n};\ndefineSymbol(text, main, textord, \"\\u2013\", \"--\", true);\ndefineSymbol(text, main, textord, \"\\u2013\", \"\\\\textendash\");\ndefineSymbol(text, main, textord, \"\\u2014\", \"---\", true);\ndefineSymbol(text, main, textord, \"\\u2014\", \"\\\\textemdash\");\ndefineSymbol(text, main, textord, \"\\u2018\", \"`\", true);\ndefineSymbol(text, main, textord, \"\\u2018\", \"\\\\textquoteleft\");\ndefineSymbol(text, main, textord, \"\\u2019\", \"'\", true);\ndefineSymbol(text, main, textord, \"\\u2019\", \"\\\\textquoteright\");\ndefineSymbol(text, main, textord, \"\\u201c\", \"``\", true);\ndefineSymbol(text, main, textord, \"\\u201c\", \"\\\\textquotedblleft\");\ndefineSymbol(text, main, textord, \"\\u201d\", \"''\", true);\ndefineSymbol(text, main, textord, \"\\u201d\", \"\\\\textquotedblright\"); //  \\degree from gensymb package\n\ndefineSymbol(math, main, textord, \"\\u00b0\", \"\\\\degree\", true);\ndefineSymbol(text, main, textord, \"\\u00b0\", \"\\\\degree\"); // \\textdegree from inputenc package\n\ndefineSymbol(text, main, textord, \"\\u00b0\", \"\\\\textdegree\", true); // TODO: In LaTeX, \\pounds can generate a different character in text and math\n// mode, but among our fonts, only Main-Regular defines this character \"163\".\n\ndefineSymbol(math, main, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(math, main, textord, \"\\u00a3\", \"\\\\mathsterling\", true);\ndefineSymbol(text, main, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(text, main, textord, \"\\u00a3\", \"\\\\textsterling\", true);\ndefineSymbol(math, ams, textord, \"\\u2720\", \"\\\\maltese\");\ndefineSymbol(text, ams, textord, \"\\u2720\", \"\\\\maltese\"); // There are lots of symbols which are the same, so we add them in afterwards.\n// All of these are textords in math mode\n\nvar mathTextSymbols = \"0123456789/@.\\\"\";\n\nfor (var i = 0; i < mathTextSymbols.length; i++) {\n  var ch = mathTextSymbols.charAt(i);\n  defineSymbol(math, main, textord, ch, ch);\n} // All of these are textords in text mode\n\n\nvar textSymbols = \"0123456789!@*()-=+\\\";:?/.,\";\n\nfor (var _i = 0; _i < textSymbols.length; _i++) {\n  var _ch = textSymbols.charAt(_i);\n\n  defineSymbol(text, main, textord, _ch, _ch);\n} // All of these are textords in text mode, and mathords in math mode\n\n\nvar letters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\nfor (var _i2 = 0; _i2 < letters.length; _i2++) {\n  var _ch2 = letters.charAt(_i2);\n\n  defineSymbol(math, main, mathord, _ch2, _ch2);\n  defineSymbol(text, main, textord, _ch2, _ch2);\n} // Blackboard bold and script letters in Unicode range\n\n\ndefineSymbol(math, ams, textord, \"C\", \"\\u2102\"); // blackboard bold\n\ndefineSymbol(text, ams, textord, \"C\", \"\\u2102\");\ndefineSymbol(math, ams, textord, \"H\", \"\\u210D\");\ndefineSymbol(text, ams, textord, \"H\", \"\\u210D\");\ndefineSymbol(math, ams, textord, \"N\", \"\\u2115\");\ndefineSymbol(text, ams, textord, \"N\", \"\\u2115\");\ndefineSymbol(math, ams, textord, \"P\", \"\\u2119\");\ndefineSymbol(text, ams, textord, \"P\", \"\\u2119\");\ndefineSymbol(math, ams, textord, \"Q\", \"\\u211A\");\ndefineSymbol(text, ams, textord, \"Q\", \"\\u211A\");\ndefineSymbol(math, ams, textord, \"R\", \"\\u211D\");\ndefineSymbol(text, ams, textord, \"R\", \"\\u211D\");\ndefineSymbol(math, ams, textord, \"Z\", \"\\u2124\");\ndefineSymbol(text, ams, textord, \"Z\", \"\\u2124\");\ndefineSymbol(math, main, mathord, \"h\", \"\\u210E\"); // italic h, Planck constant\n\ndefineSymbol(text, main, mathord, \"h\", \"\\u210E\"); // The next loop loads wide (surrogate pair) characters.\n// We support some letters in the Unicode range U+1D400 to U+1D7FF,\n// Mathematical Alphanumeric Symbols.\n// Some editors do not deal well with wide characters. So don't write the\n// string into this file. Instead, create the string from the surrogate pair.\n\nvar wideChar = \"\";\n\nfor (var _i3 = 0; _i3 < letters.length; _i3++) {\n  var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair.\n  // 0xD835 is the high surrogate for all letters in the range we support.\n  // 0xDC00 is the low surrogate for bold A.\n\n\n  wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fraktur\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDD6C + _i3); // A-Z a-z bold Fraktur\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n\n  if (_i3 < 26) {\n    // KaTeX fonts have only capital letters for blackboard bold and script.\n    // See exception for k below.\n    wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck\n\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script\n\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n  } // TODO: Add bold script when it is supported by a KaTeX font.\n\n} // \"k\" is the only double struck lower case letter in the KaTeX fonts.\n\n\nwideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck\n\ndefineSymbol(math, main, mathord, \"k\", wideChar);\ndefineSymbol(text, main, textord, \"k\", wideChar); // Next, some wide character numerals\n\nfor (var _i4 = 0; _i4 < 10; _i4++) {\n  var _ch4 = _i4.toString();\n\n  wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold\n\n  defineSymbol(math, main, mathord, _ch4, wideChar);\n  defineSymbol(text, main, textord, _ch4, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif\n\n  defineSymbol(math, main, mathord, _ch4, wideChar);\n  defineSymbol(text, main, textord, _ch4, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans\n\n  defineSymbol(math, main, mathord, _ch4, wideChar);\n  defineSymbol(text, main, textord, _ch4, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace\n\n  defineSymbol(math, main, mathord, _ch4, wideChar);\n  defineSymbol(text, main, textord, _ch4, wideChar);\n} // We add these Latin-1 letters as symbols for backwards-compatibility,\n// but they are not actually in the font, nor are they supported by the\n// Unicode accent mechanism, so they fall back to Times font and look ugly.\n// TODO(edemaine): Fix this.\n\n\nvar extraLatin = \"\\u00d0\\u00de\\u00fe\";\n\nfor (var _i5 = 0; _i5 < extraLatin.length; _i5++) {\n  var _ch5 = extraLatin.charAt(_i5);\n\n  defineSymbol(math, main, mathord, _ch5, _ch5);\n  defineSymbol(text, main, textord, _ch5, _ch5);\n}\n\n/**\n * This file provides support for Unicode range U+1D400 to U+1D7FF,\n * Mathematical Alphanumeric Symbols.\n *\n * Function wideCharacterFont takes a wide character as input and returns\n * the font information necessary to render it properly.\n */\n/**\n * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf\n * That document sorts characters into groups by font type, say bold or italic.\n *\n * In the arrays below, each subarray consists three elements:\n *      * The CSS class of that group when in math mode.\n *      * The CSS class of that group when in text mode.\n *      * The font name, so that KaTeX can get font metrics.\n */\n\nvar wideLatinLetterData = [[\"mathbf\", \"textbf\", \"Main-Bold\"], // A-Z bold upright\n[\"mathbf\", \"textbf\", \"Main-Bold\"], // a-z bold upright\n[\"mathnormal\", \"textit\", \"Math-Italic\"], // A-Z italic\n[\"mathnormal\", \"textit\", \"Math-Italic\"], // a-z italic\n[\"boldsymbol\", \"boldsymbol\", \"Main-BoldItalic\"], // A-Z bold italic\n[\"boldsymbol\", \"boldsymbol\", \"Main-BoldItalic\"], // a-z bold italic\n// Map fancy A-Z letters to script, not calligraphic.\n// This aligns with unicode-math and math fonts (except Cambria Math).\n[\"mathscr\", \"textscr\", \"Script-Regular\"], // A-Z script\n[\"\", \"\", \"\"], // a-z script.  No font\n[\"\", \"\", \"\"], // A-Z bold script. No font\n[\"\", \"\", \"\"], // a-z bold script. No font\n[\"mathfrak\", \"textfrak\", \"Fraktur-Regular\"], // A-Z Fraktur\n[\"mathfrak\", \"textfrak\", \"Fraktur-Regular\"], // a-z Fraktur\n[\"mathbb\", \"textbb\", \"AMS-Regular\"], // A-Z double-struck\n[\"mathbb\", \"textbb\", \"AMS-Regular\"], // k double-struck\n// Note that we are using a bold font, but font metrics for regular Fraktur.\n[\"mathboldfrak\", \"textboldfrak\", \"Fraktur-Regular\"], // A-Z bold Fraktur\n[\"mathboldfrak\", \"textboldfrak\", \"Fraktur-Regular\"], // a-z bold Fraktur\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // A-Z sans-serif\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // a-z sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // A-Z bold sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // a-z bold sans-serif\n[\"mathitsf\", \"textitsf\", \"SansSerif-Italic\"], // A-Z italic sans-serif\n[\"mathitsf\", \"textitsf\", \"SansSerif-Italic\"], // a-z italic sans-serif\n[\"\", \"\", \"\"], // A-Z bold italic sans. No font\n[\"\", \"\", \"\"], // a-z bold italic sans. No font\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"], // A-Z monospace\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"] // a-z monospace\n];\nvar wideNumeralData = [[\"mathbf\", \"textbf\", \"Main-Bold\"], // 0-9 bold\n[\"\", \"\", \"\"], // 0-9 double-struck. No KaTeX font.\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // 0-9 sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // 0-9 bold sans-serif\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"] // 0-9 monospace\n];\nvar wideCharacterFont = function wideCharacterFont(wideChar, mode) {\n  // IE doesn't support codePointAt(). So work with the surrogate pair.\n  var H = wideChar.charCodeAt(0); // high surrogate\n\n  var L = wideChar.charCodeAt(1); // low surrogate\n\n  var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;\n  var j = mode === \"math\" ? 0 : 1; // column index for CSS class.\n\n  if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {\n    // wideLatinLetterData contains exactly 26 chars on each row.\n    // So we can calculate the relevant row. No traverse necessary.\n    var i = Math.floor((codePoint - 0x1D400) / 26);\n    return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]];\n  } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {\n    // Numerals, ten per row.\n    var _i = Math.floor((codePoint - 0x1D7CE) / 10);\n\n    return [wideNumeralData[_i][2], wideNumeralData[_i][j]];\n  } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {\n    // dotless i or j\n    return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]];\n  } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {\n    // Greek letters. Not supported, yet.\n    return [\"\", \"\"];\n  } else {\n    // We don't support any wide characters outside 1D400–1D7FF.\n    throw new ParseError(\"Unsupported character: \" + wideChar);\n  }\n};\n\n/* eslint no-console:0 */\n\n/**\n * Looks up the given symbol in fontMetrics, after applying any symbol\n * replacements defined in symbol.js\n */\nvar lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this.\nfontName, mode) {\n  // Replace the value with its replaced value from symbol.js\n  if (symbols[mode][value] && symbols[mode][value].replace) {\n    value = symbols[mode][value].replace;\n  }\n\n  return {\n    value: value,\n    metrics: getCharacterMetrics(value, fontName, mode)\n  };\n};\n/**\n * Makes a symbolNode after translation via the list of symbols in symbols.js.\n * Correctly pulls out metrics for the character, and optionally takes a list of\n * classes to be attached to the node.\n *\n * TODO: make argument order closer to makeSpan\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n * TODO(#953): Make `options` mandatory and always pass it in.\n */\n\n\nvar makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {\n  var lookup = lookupSymbol(value, fontName, mode);\n  var metrics = lookup.metrics;\n  value = lookup.value;\n  var symbolNode;\n\n  if (metrics) {\n    var italic = metrics.italic;\n\n    if (mode === \"text\" || options && options.font === \"mathit\") {\n      italic = 0;\n    }\n\n    symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);\n  } else {\n    // TODO(emily): Figure out a good way to only print this in development\n    typeof console !== \"undefined\" && console.warn(\"No character metrics \" + (\"for '\" + value + \"' in style '\" + fontName + \"' and mode '\" + mode + \"'\"));\n    symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes);\n  }\n\n  if (options) {\n    symbolNode.maxFontSize = options.sizeMultiplier;\n\n    if (options.style.isTight()) {\n      symbolNode.classes.push(\"mtight\");\n    }\n\n    var color = options.getColor();\n\n    if (color) {\n      symbolNode.style.color = color;\n    }\n  }\n\n  return symbolNode;\n};\n/**\n * Makes a symbol in Main-Regular or AMS-Regular.\n * Used for rel, bin, open, close, inner, and punct.\n */\n\n\nvar mathsym = function mathsym(value, mode, options, classes) {\n  if (classes === void 0) {\n    classes = [];\n  }\n\n  // Decide what font to render the symbol in by its entry in the symbols\n  // table.\n  // Have a special case for when the value = \\ because the \\ is used as a\n  // textord in unsupported command errors but cannot be parsed as a regular\n  // text ordinal and is therefore not present as a symbol in the symbols\n  // table for text, as well as a special case for boldsymbol because it\n  // can be used for bold + and -\n  if (options.font === \"boldsymbol\" && lookupSymbol(value, \"Main-Bold\", mode).metrics) {\n    return makeSymbol(value, \"Main-Bold\", mode, options, classes.concat([\"mathbf\"]));\n  } else if (value === \"\\\\\" || symbols[mode][value].font === \"main\") {\n    return makeSymbol(value, \"Main-Regular\", mode, options, classes);\n  } else {\n    return makeSymbol(value, \"AMS-Regular\", mode, options, classes.concat([\"amsrm\"]));\n  }\n};\n/**\n * Determines which of the two font names (Main-Bold and Math-BoldItalic) and\n * corresponding style tags (mathbf or boldsymbol) to use for font \"boldsymbol\",\n * depending on the symbol.  Use this function instead of fontMap for font\n * \"boldsymbol\".\n */\n\n\nvar boldsymbol = function boldsymbol(value, mode, options, classes, type) {\n  if (type !== \"textord\" && lookupSymbol(value, \"Math-BoldItalic\", mode).metrics) {\n    return {\n      fontName: \"Math-BoldItalic\",\n      fontClass: \"boldsymbol\"\n    };\n  } else {\n    // Some glyphs do not exist in Math-BoldItalic so we need to use\n    // Main-Bold instead.\n    return {\n      fontName: \"Main-Bold\",\n      fontClass: \"mathbf\"\n    };\n  }\n};\n/**\n * Makes either a mathord or textord in the correct font and color.\n */\n\n\nvar makeOrd = function makeOrd(group, options, type) {\n  var mode = group.mode;\n  var text = group.text;\n  var classes = [\"mord\"]; // Math mode or Old font (i.e. \\rm)\n\n  var isFont = mode === \"math\" || mode === \"text\" && options.font;\n  var fontOrFamily = isFont ? options.font : options.fontFamily;\n  var wideFontName = \"\";\n  var wideFontClass = \"\";\n\n  if (text.charCodeAt(0) === 0xD835) {\n    [wideFontName, wideFontClass] = wideCharacterFont(text, mode);\n  }\n\n  if (wideFontName.length > 0) {\n    // surrogate pairs get special treatment\n    return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));\n  } else if (fontOrFamily) {\n    var fontName;\n    var fontClasses;\n\n    if (fontOrFamily === \"boldsymbol\") {\n      var fontData = boldsymbol(text, mode, options, classes, type);\n      fontName = fontData.fontName;\n      fontClasses = [fontData.fontClass];\n    } else if (isFont) {\n      fontName = fontMap[fontOrFamily].fontName;\n      fontClasses = [fontOrFamily];\n    } else {\n      fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);\n      fontClasses = [fontOrFamily, options.fontWeight, options.fontShape];\n    }\n\n    if (lookupSymbol(text, fontName, mode).metrics) {\n      return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));\n    } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === \"Typewriter\") {\n      // Deconstruct ligatures in monospace fonts (\\texttt, \\tt).\n      var parts = [];\n\n      for (var i = 0; i < text.length; i++) {\n        parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));\n      }\n\n      return makeFragment(parts);\n    }\n  } // Makes a symbol in the default font for mathords and textords.\n\n\n  if (type === \"mathord\") {\n    return makeSymbol(text, \"Math-Italic\", mode, options, classes.concat([\"mathnormal\"]));\n  } else if (type === \"textord\") {\n    var font = symbols[mode][text] && symbols[mode][text].font;\n\n    if (font === \"ams\") {\n      var _fontName = retrieveTextFontName(\"amsrm\", options.fontWeight, options.fontShape);\n\n      return makeSymbol(text, _fontName, mode, options, classes.concat(\"amsrm\", options.fontWeight, options.fontShape));\n    } else if (font === \"main\" || !font) {\n      var _fontName2 = retrieveTextFontName(\"textrm\", options.fontWeight, options.fontShape);\n\n      return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape));\n    } else {\n      // fonts added by plugins\n      var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class\n\n\n      return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape));\n    }\n  } else {\n    throw new Error(\"unexpected type: \" + type + \" in makeOrd\");\n  }\n};\n/**\n * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,\n * and styles.\n */\n\n\nvar canCombine = (prev, next) => {\n  if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {\n    return false;\n  } // If prev and next both are just \"mbin\"s or \"mord\"s we don't combine them\n  // so that the proper spacing can be preserved.\n\n\n  if (prev.classes.length === 1) {\n    var cls = prev.classes[0];\n\n    if (cls === \"mbin\" || cls === \"mord\") {\n      return false;\n    }\n  }\n\n  for (var style in prev.style) {\n    if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {\n      return false;\n    }\n  }\n\n  for (var _style in next.style) {\n    if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) {\n      return false;\n    }\n  }\n\n  return true;\n};\n/**\n * Combine consecutive domTree.symbolNodes into a single symbolNode.\n * Note: this function mutates the argument.\n */\n\n\nvar tryCombineChars = chars => {\n  for (var i = 0; i < chars.length - 1; i++) {\n    var prev = chars[i];\n    var next = chars[i + 1];\n\n    if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) {\n      prev.text += next.text;\n      prev.height = Math.max(prev.height, next.height);\n      prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use\n      // it to add padding to the right of the span created from\n      // the combined characters.\n\n      prev.italic = next.italic;\n      chars.splice(i + 1, 1);\n      i--;\n    }\n  }\n\n  return chars;\n};\n/**\n * Calculate the height, depth, and maxFontSize of an element based on its\n * children.\n */\n\n\nvar sizeElementFromChildren = function sizeElementFromChildren(elem) {\n  var height = 0;\n  var depth = 0;\n  var maxFontSize = 0;\n\n  for (var i = 0; i < elem.children.length; i++) {\n    var child = elem.children[i];\n\n    if (child.height > height) {\n      height = child.height;\n    }\n\n    if (child.depth > depth) {\n      depth = child.depth;\n    }\n\n    if (child.maxFontSize > maxFontSize) {\n      maxFontSize = child.maxFontSize;\n    }\n  }\n\n  elem.height = height;\n  elem.depth = depth;\n  elem.maxFontSize = maxFontSize;\n};\n/**\n * Makes a span with the given list of classes, list of children, and options.\n *\n * TODO(#953): Ensure that `options` is always provided (currently some call\n * sites don't pass it) and make the type below mandatory.\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n */\n\n\nvar makeSpan$2 = function makeSpan(classes, children, options, style) {\n  var span = new Span(classes, children, options, style);\n  sizeElementFromChildren(span);\n  return span;\n}; // SVG one is simpler -- doesn't require height, depth, max-font setting.\n// This is also a separate method for typesafety.\n\n\nvar makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style);\n\nvar makeLineSpan = function makeLineSpan(className, options, thickness) {\n  var line = makeSpan$2([className], [], options);\n  line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n  line.style.borderBottomWidth = makeEm(line.height);\n  line.maxFontSize = 1.0;\n  return line;\n};\n/**\n * Makes an anchor with the given href, list of classes, list of children,\n * and options.\n */\n\n\nvar makeAnchor = function makeAnchor(href, classes, children, options) {\n  var anchor = new Anchor(href, classes, children, options);\n  sizeElementFromChildren(anchor);\n  return anchor;\n};\n/**\n * Makes a document fragment with the given list of children.\n */\n\n\nvar makeFragment = function makeFragment(children) {\n  var fragment = new DocumentFragment(children);\n  sizeElementFromChildren(fragment);\n  return fragment;\n};\n/**\n * Wraps group in a span if it's a document fragment, allowing to apply classes\n * and styles\n */\n\n\nvar wrapFragment = function wrapFragment(group, options) {\n  if (group instanceof DocumentFragment) {\n    return makeSpan$2([], [group], options);\n  }\n\n  return group;\n}; // These are exact object types to catch typos in the names of the optional fields.\n\n\n// Computes the updated `children` list and the overall depth.\n//\n// This helper function for makeVList makes it easier to enforce type safety by\n// allowing early exits (returns) in the logic.\nvar getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {\n  if (params.positionType === \"individualShift\") {\n    var oldChildren = params.children;\n    var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be\n    // shifted to the correct specified shift\n\n    var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth;\n\n    var currPos = _depth;\n\n    for (var i = 1; i < oldChildren.length; i++) {\n      var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;\n      var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);\n      currPos = currPos + diff;\n      children.push({\n        type: \"kern\",\n        size\n      });\n      children.push(oldChildren[i]);\n    }\n\n    return {\n      children,\n      depth: _depth\n    };\n  }\n\n  var depth;\n\n  if (params.positionType === \"top\") {\n    // We always start at the bottom, so calculate the bottom by adding up\n    // all the sizes\n    var bottom = params.positionData;\n\n    for (var _i = 0; _i < params.children.length; _i++) {\n      var child = params.children[_i];\n      bottom -= child.type === \"kern\" ? child.size : child.elem.height + child.elem.depth;\n    }\n\n    depth = bottom;\n  } else if (params.positionType === \"bottom\") {\n    depth = -params.positionData;\n  } else {\n    var firstChild = params.children[0];\n\n    if (firstChild.type !== \"elem\") {\n      throw new Error('First child must have type \"elem\".');\n    }\n\n    if (params.positionType === \"shift\") {\n      depth = -firstChild.elem.depth - params.positionData;\n    } else if (params.positionType === \"firstBaseline\") {\n      depth = -firstChild.elem.depth;\n    } else {\n      throw new Error(\"Invalid positionType \" + params.positionType + \".\");\n    }\n  }\n\n  return {\n    children: params.children,\n    depth\n  };\n};\n/**\n * Makes a vertical list by stacking elements and kerns on top of each other.\n * Allows for many different ways of specifying the positioning method.\n *\n * See VListParam documentation above.\n */\n\n\nvar makeVList = function makeVList(params, options) {\n  var {\n    children,\n    depth\n  } = getVListChildrenAndDepth(params); // Create a strut that is taller than any list item. The strut is added to\n  // each item, where it will determine the item's baseline. Since it has\n  // `overflow:hidden`, the strut's top edge will sit on the item's line box's\n  // top edge and the strut's bottom edge will sit on the item's baseline,\n  // with no additional line-height spacing. This allows the item baseline to\n  // be positioned precisely without worrying about font ascent and\n  // line-height.\n\n  var pstrutSize = 0;\n\n  for (var i = 0; i < children.length; i++) {\n    var child = children[i];\n\n    if (child.type === \"elem\") {\n      var elem = child.elem;\n      pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);\n    }\n  }\n\n  pstrutSize += 2;\n  var pstrut = makeSpan$2([\"pstrut\"], []);\n  pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets\n\n  var realChildren = [];\n  var minPos = depth;\n  var maxPos = depth;\n  var currPos = depth;\n\n  for (var _i2 = 0; _i2 < children.length; _i2++) {\n    var _child = children[_i2];\n\n    if (_child.type === \"kern\") {\n      currPos += _child.size;\n    } else {\n      var _elem = _child.elem;\n      var classes = _child.wrapperClasses || [];\n      var style = _child.wrapperStyle || {};\n      var childWrap = makeSpan$2(classes, [pstrut, _elem], undefined, style);\n      childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth);\n\n      if (_child.marginLeft) {\n        childWrap.style.marginLeft = _child.marginLeft;\n      }\n\n      if (_child.marginRight) {\n        childWrap.style.marginRight = _child.marginRight;\n      }\n\n      realChildren.push(childWrap);\n      currPos += _elem.height + _elem.depth;\n    }\n\n    minPos = Math.min(minPos, currPos);\n    maxPos = Math.max(maxPos, currPos);\n  } // The vlist contents go in a table-cell with `vertical-align:bottom`.\n  // This cell's bottom edge will determine the containing table's baseline\n  // without overly expanding the containing line-box.\n\n\n  var vlist = makeSpan$2([\"vlist\"], realChildren);\n  vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist's depth.\n\n  var rows;\n\n  if (minPos < 0) {\n    // We will define depth in an empty span with display: table-cell.\n    // It should render with the height that we define. But Chrome, in\n    // contenteditable mode only, treats that span as if it contains some\n    // text content. And that min-height over-rides our desired height.\n    // So we put another empty span inside the depth strut span.\n    var emptySpan = makeSpan$2([], []);\n    var depthStrut = makeSpan$2([\"vlist\"], [emptySpan]);\n    depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it\n    // puts the bottom of the *second* row on the baseline.\n\n    var topStrut = makeSpan$2([\"vlist-s\"], [new SymbolNode(\"\\u200b\")]);\n    rows = [makeSpan$2([\"vlist-r\"], [vlist, topStrut]), makeSpan$2([\"vlist-r\"], [depthStrut])];\n  } else {\n    rows = [makeSpan$2([\"vlist-r\"], [vlist])];\n  }\n\n  var vtable = makeSpan$2([\"vlist-t\"], rows);\n\n  if (rows.length === 2) {\n    vtable.classes.push(\"vlist-t2\");\n  }\n\n  vtable.height = maxPos;\n  vtable.depth = -minPos;\n  return vtable;\n}; // Glue is a concept from TeX which is a flexible space between elements in\n// either a vertical or horizontal list. In KaTeX, at least for now, it's\n// static space between elements in a horizontal layout.\n\n\nvar makeGlue = (measurement, options) => {\n  // Make an empty span for the space\n  var rule = makeSpan$2([\"mspace\"], [], options);\n  var size = calculateSize(measurement, options);\n  rule.style.marginRight = makeEm(size);\n  return rule;\n}; // Takes font options, and returns the appropriate fontLookup name\n\n\nvar retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {\n  var baseFontName = \"\";\n\n  switch (fontFamily) {\n    case \"amsrm\":\n      baseFontName = \"AMS\";\n      break;\n\n    case \"textrm\":\n      baseFontName = \"Main\";\n      break;\n\n    case \"textsf\":\n      baseFontName = \"SansSerif\";\n      break;\n\n    case \"texttt\":\n      baseFontName = \"Typewriter\";\n      break;\n\n    default:\n      baseFontName = fontFamily;\n    // use fonts added by a plugin\n  }\n\n  var fontStylesName;\n\n  if (fontWeight === \"textbf\" && fontShape === \"textit\") {\n    fontStylesName = \"BoldItalic\";\n  } else if (fontWeight === \"textbf\") {\n    fontStylesName = \"Bold\";\n  } else if (fontWeight === \"textit\") {\n    fontStylesName = \"Italic\";\n  } else {\n    fontStylesName = \"Regular\";\n  }\n\n  return baseFontName + \"-\" + fontStylesName;\n};\n/**\n * Maps TeX font commands to objects containing:\n * - variant: string used for \"mathvariant\" attribute in buildMathML.js\n * - fontName: the \"style\" parameter to fontMetrics.getCharacterMetrics\n */\n// A map between tex font commands an MathML mathvariant attribute values\n\n\nvar fontMap = {\n  // styles\n  \"mathbf\": {\n    variant: \"bold\",\n    fontName: \"Main-Bold\"\n  },\n  \"mathrm\": {\n    variant: \"normal\",\n    fontName: \"Main-Regular\"\n  },\n  \"textit\": {\n    variant: \"italic\",\n    fontName: \"Main-Italic\"\n  },\n  \"mathit\": {\n    variant: \"italic\",\n    fontName: \"Main-Italic\"\n  },\n  \"mathnormal\": {\n    variant: \"italic\",\n    fontName: \"Math-Italic\"\n  },\n  \"mathsfit\": {\n    variant: \"sans-serif-italic\",\n    fontName: \"SansSerif-Italic\"\n  },\n  // \"boldsymbol\" is missing because they require the use of multiple fonts:\n  // Math-BoldItalic and Main-Bold.  This is handled by a special case in\n  // makeOrd which ends up calling boldsymbol.\n  // families\n  \"mathbb\": {\n    variant: \"double-struck\",\n    fontName: \"AMS-Regular\"\n  },\n  \"mathcal\": {\n    variant: \"script\",\n    fontName: \"Caligraphic-Regular\"\n  },\n  \"mathfrak\": {\n    variant: \"fraktur\",\n    fontName: \"Fraktur-Regular\"\n  },\n  \"mathscr\": {\n    variant: \"script\",\n    fontName: \"Script-Regular\"\n  },\n  \"mathsf\": {\n    variant: \"sans-serif\",\n    fontName: \"SansSerif-Regular\"\n  },\n  \"mathtt\": {\n    variant: \"monospace\",\n    fontName: \"Typewriter-Regular\"\n  }\n};\nvar svgData = {\n  //   path, width, height\n  vec: [\"vec\", 0.471, 0.714],\n  // values from the font glyph\n  oiintSize1: [\"oiintSize1\", 0.957, 0.499],\n  // oval to overlay the integrand\n  oiintSize2: [\"oiintSize2\", 1.472, 0.659],\n  oiiintSize1: [\"oiiintSize1\", 1.304, 0.499],\n  oiiintSize2: [\"oiiintSize2\", 1.98, 0.659]\n};\n\nvar staticSvg = function staticSvg(value, options) {\n  // Create a span with inline SVG for the element.\n  var [pathName, width, height] = svgData[value];\n  var path = new PathNode(pathName);\n  var svgNode = new SvgNode([path], {\n    \"width\": makeEm(width),\n    \"height\": makeEm(height),\n    // Override CSS rule `.katex svg { width: 100% }`\n    \"style\": \"width:\" + makeEm(width),\n    \"viewBox\": \"0 0 \" + 1000 * width + \" \" + 1000 * height,\n    \"preserveAspectRatio\": \"xMinYMin\"\n  });\n  var span = makeSvgSpan([\"overlay\"], [svgNode], options);\n  span.height = height;\n  span.style.height = makeEm(height);\n  span.style.width = makeEm(width);\n  return span;\n};\n\nvar buildCommon = {\n  fontMap,\n  makeSymbol,\n  mathsym,\n  makeSpan: makeSpan$2,\n  makeSvgSpan,\n  makeLineSpan,\n  makeAnchor,\n  makeFragment,\n  wrapFragment,\n  makeVList,\n  makeOrd,\n  makeGlue,\n  staticSvg,\n  svgData,\n  tryCombineChars\n};\n\n/**\n * Describes spaces between different classes of atoms.\n */\nvar thinspace = {\n  number: 3,\n  unit: \"mu\"\n};\nvar mediumspace = {\n  number: 4,\n  unit: \"mu\"\n};\nvar thickspace = {\n  number: 5,\n  unit: \"mu\"\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n\n// Spacing relationships for display and text styles\nvar spacings = {\n  mord: {\n    mop: thinspace,\n    mbin: mediumspace,\n    mrel: thickspace,\n    minner: thinspace\n  },\n  mop: {\n    mord: thinspace,\n    mop: thinspace,\n    mrel: thickspace,\n    minner: thinspace\n  },\n  mbin: {\n    mord: mediumspace,\n    mop: mediumspace,\n    mopen: mediumspace,\n    minner: mediumspace\n  },\n  mrel: {\n    mord: thickspace,\n    mop: thickspace,\n    mopen: thickspace,\n    minner: thickspace\n  },\n  mopen: {},\n  mclose: {\n    mop: thinspace,\n    mbin: mediumspace,\n    mrel: thickspace,\n    minner: thinspace\n  },\n  mpunct: {\n    mord: thinspace,\n    mop: thinspace,\n    mrel: thickspace,\n    mopen: thinspace,\n    mclose: thinspace,\n    mpunct: thinspace,\n    minner: thinspace\n  },\n  minner: {\n    mord: thinspace,\n    mop: thinspace,\n    mbin: mediumspace,\n    mrel: thickspace,\n    mopen: thinspace,\n    mpunct: thinspace,\n    minner: thinspace\n  }\n}; // Spacing relationships for script and scriptscript styles\n\nvar tightSpacings = {\n  mord: {\n    mop: thinspace\n  },\n  mop: {\n    mord: thinspace,\n    mop: thinspace\n  },\n  mbin: {},\n  mrel: {},\n  mopen: {},\n  mclose: {\n    mop: thinspace\n  },\n  mpunct: {},\n  minner: {\n    mop: thinspace\n  }\n};\n\n/** Context provided to function handlers for error messages. */\n// Note: reverse the order of the return type union will cause a flow error.\n// See https://github.com/facebook/flow/issues/3663.\n// More general version of `HtmlBuilder` for nodes (e.g. \\sum, accent types)\n// whose presence impacts super/subscripting. In this case, ParseNode<\"supsub\">\n// delegates its HTML building to the HtmlBuilder corresponding to these nodes.\n\n/**\n * Final function spec for use at parse time.\n * This is almost identical to `FunctionPropSpec`, except it\n * 1. includes the function handler, and\n * 2. requires all arguments except argTypes.\n * It is generated by `defineFunction()` below.\n */\n\n/**\n * All registered functions.\n * `functions.js` just exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary.\n */\nvar _functions = {};\n/**\n * All HTML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\n\nvar _htmlGroupBuilders = {};\n/**\n * All MathML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\n\nvar _mathmlGroupBuilders = {};\nfunction defineFunction(_ref) {\n  var {\n    type,\n    names,\n    props,\n    handler,\n    htmlBuilder,\n    mathmlBuilder\n  } = _ref;\n  // Set default values of functions\n  var data = {\n    type,\n    numArgs: props.numArgs,\n    argTypes: props.argTypes,\n    allowedInArgument: !!props.allowedInArgument,\n    allowedInText: !!props.allowedInText,\n    allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,\n    numOptionalArgs: props.numOptionalArgs || 0,\n    infix: !!props.infix,\n    primitive: !!props.primitive,\n    handler: handler\n  };\n\n  for (var i = 0; i < names.length; ++i) {\n    _functions[names[i]] = data;\n  }\n\n  if (type) {\n    if (htmlBuilder) {\n      _htmlGroupBuilders[type] = htmlBuilder;\n    }\n\n    if (mathmlBuilder) {\n      _mathmlGroupBuilders[type] = mathmlBuilder;\n    }\n  }\n}\n/**\n * Use this to register only the HTML and MathML builders for a function (e.g.\n * if the function's ParseNode is generated in Parser.js rather than via a\n * stand-alone handler provided to `defineFunction`).\n */\n\nfunction defineFunctionBuilders(_ref2) {\n  var {\n    type,\n    htmlBuilder,\n    mathmlBuilder\n  } = _ref2;\n  defineFunction({\n    type,\n    names: [],\n    props: {\n      numArgs: 0\n    },\n\n    handler() {\n      throw new Error('Should never be called.');\n    },\n\n    htmlBuilder,\n    mathmlBuilder\n  });\n}\nvar normalizeArgument = function normalizeArgument(arg) {\n  return arg.type === \"ordgroup\" && arg.body.length === 1 ? arg.body[0] : arg;\n}; // Since the corresponding buildHTML/buildMathML function expects a\n// list of elements, we normalize for different kinds of arguments\n\nvar ordargument = function ordargument(arg) {\n  return arg.type === \"ordgroup\" ? arg.body : [arg];\n};\n\n/**\n * This file does the main work of building a domTree structure from a parse\n * tree. The entry point is the `buildHTML` function, which takes a parse tree.\n * Then, the buildExpression, buildGroup, and various groupBuilders functions\n * are called, to produce a final HTML tree.\n */\nvar makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)\n// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,\n// and the text before Rule 19.\n\nvar binLeftCanceller = [\"leftmost\", \"mbin\", \"mopen\", \"mrel\", \"mop\", \"mpunct\"];\nvar binRightCanceller = [\"rightmost\", \"mrel\", \"mclose\", \"mpunct\"];\nvar styleMap$1 = {\n  \"display\": Style$1.DISPLAY,\n  \"text\": Style$1.TEXT,\n  \"script\": Style$1.SCRIPT,\n  \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\nvar DomEnum = {\n  mord: \"mord\",\n  mop: \"mop\",\n  mbin: \"mbin\",\n  mrel: \"mrel\",\n  mopen: \"mopen\",\n  mclose: \"mclose\",\n  mpunct: \"mpunct\",\n  minner: \"minner\"\n};\n\n/**\n * Take a list of nodes, build them in order, and return a list of the built\n * nodes. documentFragments are flattened into their contents, so the\n * returned list contains no fragments. `isRealGroup` is true if `expression`\n * is a real group (no atoms will be added on either side), as opposed to\n * a partial group (e.g. one created by \\color). `surrounding` is an array\n * consisting type of nodes that will be added to the left and right.\n */\nvar buildExpression$1 = function buildExpression(expression, options, isRealGroup, surrounding) {\n  if (surrounding === void 0) {\n    surrounding = [null, null];\n  }\n\n  // Parse expressions into `groups`.\n  var groups = [];\n\n  for (var i = 0; i < expression.length; i++) {\n    var output = buildGroup$1(expression[i], options);\n\n    if (output instanceof DocumentFragment) {\n      var children = output.children;\n      groups.push(...children);\n    } else {\n      groups.push(output);\n    }\n  } // Combine consecutive domTree.symbolNodes into a single symbolNode.\n\n\n  buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings\n  // to avoid processing groups multiple times.\n\n  if (!isRealGroup) {\n    return groups;\n  }\n\n  var glueOptions = options;\n\n  if (expression.length === 1) {\n    var node = expression[0];\n\n    if (node.type === \"sizing\") {\n      glueOptions = options.havingSize(node.size);\n    } else if (node.type === \"styling\") {\n      glueOptions = options.havingStyle(styleMap$1[node.style]);\n    }\n  } // Dummy spans for determining spacings between surrounding atoms.\n  // If `expression` has no atoms on the left or right, class \"leftmost\"\n  // or \"rightmost\", respectively, is used to indicate it.\n\n\n  var dummyPrev = makeSpan$1([surrounding[0] || \"leftmost\"], [], options);\n  var dummyNext = makeSpan$1([surrounding[1] || \"rightmost\"], [], options); // TODO: These code assumes that a node's math class is the first element\n  // of its `classes` array. A later cleanup should ensure this, for\n  // instance by changing the signature of `makeSpan`.\n  // Before determining what spaces to insert, perform bin cancellation.\n  // Binary operators change to ordinary symbols in some contexts.\n\n  var isRoot = isRealGroup === \"root\";\n  traverseNonSpaceNodes(groups, (node, prev) => {\n    var prevType = prev.classes[0];\n    var type = node.classes[0];\n\n    if (prevType === \"mbin\" && binRightCanceller.includes(type)) {\n      prev.classes[0] = \"mord\";\n    } else if (type === \"mbin\" && binLeftCanceller.includes(prevType)) {\n      node.classes[0] = \"mord\";\n    }\n  }, {\n    node: dummyPrev\n  }, dummyNext, isRoot);\n  traverseNonSpaceNodes(groups, (node, prev) => {\n    var prevType = getTypeOfDomTree(prev);\n    var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style.\n\n    var space = prevType && type ? node.hasClass(\"mtight\") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;\n\n    if (space) {\n      // Insert glue (spacing) after the `prev`.\n      return buildCommon.makeGlue(space, glueOptions);\n    }\n  }, {\n    node: dummyPrev\n  }, dummyNext, isRoot);\n  return groups;\n}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and\n// previous node as arguments, optionally returning a node to insert after the\n// previous node. `prev` is an object with the previous node and `insertAfter`\n// function to insert after it. `next` is a node that will be added to the right.\n// Used for bin cancellation and inserting spacings.\n\nvar traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) {\n  if (next) {\n    // temporarily append the right node, if exists\n    nodes.push(next);\n  }\n\n  var i = 0;\n\n  for (; i < nodes.length; i++) {\n    var node = nodes[i];\n    var partialGroup = checkPartialGroup(node);\n\n    if (partialGroup) {\n      // Recursive DFS\n      // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array\n      traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot);\n      continue;\n    } // Ignore explicit spaces (e.g., \\;, \\,) when determining what implicit\n    // spacing should go between atoms of different classes\n\n\n    var nonspace = !node.hasClass(\"mspace\");\n\n    if (nonspace) {\n      var result = callback(node, prev.node);\n\n      if (result) {\n        if (prev.insertAfter) {\n          prev.insertAfter(result);\n        } else {\n          // insert at front\n          nodes.unshift(result);\n          i++;\n        }\n      }\n    }\n\n    if (nonspace) {\n      prev.node = node;\n    } else if (isRoot && node.hasClass(\"newline\")) {\n      prev.node = makeSpan$1([\"leftmost\"]); // treat like beginning of line\n    }\n\n    prev.insertAfter = (index => n => {\n      nodes.splice(index + 1, 0, n);\n      i++;\n    })(i);\n  }\n\n  if (next) {\n    nodes.pop();\n  }\n}; // Check if given node is a partial group, i.e., does not affect spacing around.\n\n\nvar checkPartialGroup = function checkPartialGroup(node) {\n  if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass(\"enclosing\")) {\n    return node;\n  }\n\n  return null;\n}; // Return the outermost node of a domTree.\n\n\nvar getOutermostNode = function getOutermostNode(node, side) {\n  var partialGroup = checkPartialGroup(node);\n\n  if (partialGroup) {\n    var children = partialGroup.children;\n\n    if (children.length) {\n      if (side === \"right\") {\n        return getOutermostNode(children[children.length - 1], \"right\");\n      } else if (side === \"left\") {\n        return getOutermostNode(children[0], \"left\");\n      }\n    }\n  }\n\n  return node;\n}; // Return math atom class (mclass) of a domTree.\n// If `side` is given, it will get the type of the outermost node at given side.\n\n\nvar getTypeOfDomTree = function getTypeOfDomTree(node, side) {\n  if (!node) {\n    return null;\n  }\n\n  if (side) {\n    node = getOutermostNode(node, side);\n  } // This makes a lot of assumptions as to where the type of atom\n  // appears.  We should do a better job of enforcing this.\n\n\n  return DomEnum[node.classes[0]] || null;\n};\nvar makeNullDelimiter = function makeNullDelimiter(options, classes) {\n  var moreClasses = [\"nulldelimiter\"].concat(options.baseSizingClasses());\n  return makeSpan$1(classes.concat(moreClasses));\n};\n/**\n * buildGroup is the function that takes a group and calls the correct groupType\n * function for it. It also handles the interaction of size and style changes\n * between parents and children.\n */\n\nvar buildGroup$1 = function buildGroup(group, options, baseOptions) {\n  if (!group) {\n    return makeSpan$1();\n  }\n\n  if (_htmlGroupBuilders[group.type]) {\n    // Call the groupBuilders function\n    // $FlowFixMe\n    var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account\n    // for that size difference.\n\n    if (baseOptions && options.size !== baseOptions.size) {\n      groupNode = makeSpan$1(options.sizingClasses(baseOptions), [groupNode], options);\n      var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;\n      groupNode.height *= multiplier;\n      groupNode.depth *= multiplier;\n    }\n\n    return groupNode;\n  } else {\n    throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n  }\n};\n/**\n * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)\n * into an unbreakable HTML node of class .base, with proper struts to\n * guarantee correct vertical extent.  `buildHTML` calls this repeatedly to\n * make up the entire expression as a sequence of unbreakable units.\n */\n\nfunction buildHTMLUnbreakable(children, options) {\n  // Compute height and depth of this chunk.\n  var body = makeSpan$1([\"base\"], children, options); // Add strut, which ensures that the top of the HTML element falls at\n  // the height of the expression, and the bottom of the HTML element\n  // falls at the depth of the expression.\n\n  var strut = makeSpan$1([\"strut\"]);\n  strut.style.height = makeEm(body.height + body.depth);\n\n  if (body.depth) {\n    strut.style.verticalAlign = makeEm(-body.depth);\n  }\n\n  body.children.unshift(strut);\n  return body;\n}\n/**\n * Take an entire parse tree, and build it into an appropriate set of HTML\n * nodes.\n */\n\n\nfunction buildHTML(tree, options) {\n  // Strip off outer tag wrapper for processing below.\n  var tag = null;\n\n  if (tree.length === 1 && tree[0].type === \"tag\") {\n    tag = tree[0].tag;\n    tree = tree[0].body;\n  } // Build the expression contained in the tree\n\n\n  var expression = buildExpression$1(tree, options, \"root\");\n  var eqnNum;\n\n  if (expression.length === 2 && expression[1].hasClass(\"tag\")) {\n    // An environment with automatic equation numbers, e.g. {gather}.\n    eqnNum = expression.pop();\n  }\n\n  var children = []; // Create one base node for each chunk between potential line breaks.\n  // The TeXBook [p.173] says \"A formula will be broken only after a\n  // relation symbol like $=$ or $<$ or $\\rightarrow$, or after a binary\n  // operation symbol like $+$ or $-$ or $\\times$, where the relation or\n  // binary operation is on the ``outer level'' of the formula (i.e., not\n  // enclosed in {...} and not part of an \\over construction).\"\n\n  var parts = [];\n\n  for (var i = 0; i < expression.length; i++) {\n    parts.push(expression[i]);\n\n    if (expression[i].hasClass(\"mbin\") || expression[i].hasClass(\"mrel\") || expression[i].hasClass(\"allowbreak\")) {\n      // Put any post-operator glue on same line as operator.\n      // Watch for \\nobreak along the way, and stop at \\newline.\n      var nobreak = false;\n\n      while (i < expression.length - 1 && expression[i + 1].hasClass(\"mspace\") && !expression[i + 1].hasClass(\"newline\")) {\n        i++;\n        parts.push(expression[i]);\n\n        if (expression[i].hasClass(\"nobreak\")) {\n          nobreak = true;\n        }\n      } // Don't allow break if \\nobreak among the post-operator glue.\n\n\n      if (!nobreak) {\n        children.push(buildHTMLUnbreakable(parts, options));\n        parts = [];\n      }\n    } else if (expression[i].hasClass(\"newline\")) {\n      // Write the line except the newline\n      parts.pop();\n\n      if (parts.length > 0) {\n        children.push(buildHTMLUnbreakable(parts, options));\n        parts = [];\n      } // Put the newline at the top level\n\n\n      children.push(expression[i]);\n    }\n  }\n\n  if (parts.length > 0) {\n    children.push(buildHTMLUnbreakable(parts, options));\n  } // Now, if there was a tag, build it too and append it as a final child.\n\n\n  var tagChild;\n\n  if (tag) {\n    tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options, true));\n    tagChild.classes = [\"tag\"];\n    children.push(tagChild);\n  } else if (eqnNum) {\n    children.push(eqnNum);\n  }\n\n  var htmlNode = makeSpan$1([\"katex-html\"], children);\n  htmlNode.setAttribute(\"aria-hidden\", \"true\"); // Adjust the strut of the tag to be the maximum height of all children\n  // (the height of the enclosing htmlNode) for proper vertical alignment.\n\n  if (tagChild) {\n    var strut = tagChild.children[0];\n    strut.style.height = makeEm(htmlNode.height + htmlNode.depth);\n\n    if (htmlNode.depth) {\n      strut.style.verticalAlign = makeEm(-htmlNode.depth);\n    }\n  }\n\n  return htmlNode;\n}\n\n/**\n * These objects store data about MathML nodes. This is the MathML equivalent\n * of the types in domTree.js. Since MathML handles its own rendering, and\n * since we're mainly using MathML to improve accessibility, we don't manage\n * any of the styling state that the plain DOM nodes do.\n *\n * The `toNode` and `toMarkup` functions work similarly to how they do in\n * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.\n */\nfunction newDocumentFragment(children) {\n  return new DocumentFragment(children);\n}\n/**\n * This node represents a general purpose MathML node of any type. The\n * constructor requires the type of node to create (for example, `\"mo\"` or\n * `\"mspace\"`, corresponding to `<mo>` and `<mspace>` tags).\n */\n\nclass MathNode {\n  constructor(type, children, classes) {\n    this.type = void 0;\n    this.attributes = void 0;\n    this.children = void 0;\n    this.classes = void 0;\n    this.type = type;\n    this.attributes = {};\n    this.children = children || [];\n    this.classes = classes || [];\n  }\n  /**\n   * Sets an attribute on a MathML node. MathML depends on attributes to convey a\n   * semantic content, so this is used heavily.\n   */\n\n\n  setAttribute(name, value) {\n    this.attributes[name] = value;\n  }\n  /**\n   * Gets an attribute on a MathML node.\n   */\n\n\n  getAttribute(name) {\n    return this.attributes[name];\n  }\n  /**\n   * Converts the math node into a MathML-namespaced DOM element.\n   */\n\n\n  toNode() {\n    var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", this.type);\n\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        node.setAttribute(attr, this.attributes[attr]);\n      }\n    }\n\n    if (this.classes.length > 0) {\n      node.className = createClass(this.classes);\n    }\n\n    for (var i = 0; i < this.children.length; i++) {\n      // Combine multiple TextNodes into one TextNode, to prevent\n      // screen readers from reading each as a separate word [#3995]\n      if (this.children[i] instanceof TextNode && this.children[i + 1] instanceof TextNode) {\n        var text = this.children[i].toText() + this.children[++i].toText();\n\n        while (this.children[i + 1] instanceof TextNode) {\n          text += this.children[++i].toText();\n        }\n\n        node.appendChild(new TextNode(text).toNode());\n      } else {\n        node.appendChild(this.children[i].toNode());\n      }\n    }\n\n    return node;\n  }\n  /**\n   * Converts the math node into an HTML markup string.\n   */\n\n\n  toMarkup() {\n    var markup = \"<\" + this.type; // Add the attributes\n\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        markup += \" \" + attr + \"=\\\"\";\n        markup += utils.escape(this.attributes[attr]);\n        markup += \"\\\"\";\n      }\n    }\n\n    if (this.classes.length > 0) {\n      markup += \" class =\\\"\" + utils.escape(createClass(this.classes)) + \"\\\"\";\n    }\n\n    markup += \">\";\n\n    for (var i = 0; i < this.children.length; i++) {\n      markup += this.children[i].toMarkup();\n    }\n\n    markup += \"</\" + this.type + \">\";\n    return markup;\n  }\n  /**\n   * Converts the math node into a string, similar to innerText, but escaped.\n   */\n\n\n  toText() {\n    return this.children.map(child => child.toText()).join(\"\");\n  }\n\n}\n/**\n * This node represents a piece of text.\n */\n\nclass TextNode {\n  constructor(text) {\n    this.text = void 0;\n    this.text = text;\n  }\n  /**\n   * Converts the text node into a DOM text node.\n   */\n\n\n  toNode() {\n    return document.createTextNode(this.text);\n  }\n  /**\n   * Converts the text node into escaped HTML markup\n   * (representing the text itself).\n   */\n\n\n  toMarkup() {\n    return utils.escape(this.toText());\n  }\n  /**\n   * Converts the text node into a string\n   * (representing the text itself).\n   */\n\n\n  toText() {\n    return this.text;\n  }\n\n}\n/**\n * This node represents a space, but may render as <mspace.../> or as text,\n * depending on the width.\n */\n\nclass SpaceNode {\n  /**\n   * Create a Space node with width given in CSS ems.\n   */\n  constructor(width) {\n    this.width = void 0;\n    this.character = void 0;\n    this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html\n    // for a table of space-like characters.  We use Unicode\n    // representations instead of &LongNames; as it's not clear how to\n    // make the latter via document.createTextNode.\n\n    if (width >= 0.05555 && width <= 0.05556) {\n      this.character = \"\\u200a\"; // &VeryThinSpace;\n    } else if (width >= 0.1666 && width <= 0.1667) {\n      this.character = \"\\u2009\"; // &ThinSpace;\n    } else if (width >= 0.2222 && width <= 0.2223) {\n      this.character = \"\\u2005\"; // &MediumSpace;\n    } else if (width >= 0.2777 && width <= 0.2778) {\n      this.character = \"\\u2005\\u200a\"; // &ThickSpace;\n    } else if (width >= -0.05556 && width <= -0.05555) {\n      this.character = \"\\u200a\\u2063\"; // &NegativeVeryThinSpace;\n    } else if (width >= -0.1667 && width <= -0.1666) {\n      this.character = \"\\u2009\\u2063\"; // &NegativeThinSpace;\n    } else if (width >= -0.2223 && width <= -0.2222) {\n      this.character = \"\\u205f\\u2063\"; // &NegativeMediumSpace;\n    } else if (width >= -0.2778 && width <= -0.2777) {\n      this.character = \"\\u2005\\u2063\"; // &NegativeThickSpace;\n    } else {\n      this.character = null;\n    }\n  }\n  /**\n   * Converts the math node into a MathML-namespaced DOM element.\n   */\n\n\n  toNode() {\n    if (this.character) {\n      return document.createTextNode(this.character);\n    } else {\n      var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"mspace\");\n      node.setAttribute(\"width\", makeEm(this.width));\n      return node;\n    }\n  }\n  /**\n   * Converts the math node into an HTML markup string.\n   */\n\n\n  toMarkup() {\n    if (this.character) {\n      return \"<mtext>\" + this.character + \"</mtext>\";\n    } else {\n      return \"<mspace width=\\\"\" + makeEm(this.width) + \"\\\"/>\";\n    }\n  }\n  /**\n   * Converts the math node into a string, similar to innerText.\n   */\n\n\n  toText() {\n    if (this.character) {\n      return this.character;\n    } else {\n      return \" \";\n    }\n  }\n\n}\n\nvar mathMLTree = {\n  MathNode,\n  TextNode,\n  SpaceNode,\n  newDocumentFragment\n};\n\n/**\n * This file converts a parse tree into a corresponding MathML tree. The main\n * entry point is the `buildMathML` function, which takes a parse tree from the\n * parser.\n */\n\n/**\n * Takes a symbol and converts it into a MathML text node after performing\n * optional replacement from symbols.js.\n */\nvar makeText = function makeText(text, mode, options) {\n  if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === \"tt\" || options.font && options.font.slice(4, 6) === \"tt\"))) {\n    text = symbols[mode][text].replace;\n  }\n\n  return new mathMLTree.TextNode(text);\n};\n/**\n * Wrap the given array of nodes in an <mrow> node if needed, i.e.,\n * unless the array has length 1.  Always returns a single node.\n */\n\nvar makeRow = function makeRow(body) {\n  if (body.length === 1) {\n    return body[0];\n  } else {\n    return new mathMLTree.MathNode(\"mrow\", body);\n  }\n};\n/**\n * Returns the math variant as a string or null if none is required.\n */\n\nvar getVariant = function getVariant(group, options) {\n  // Handle \\text... font specifiers as best we can.\n  // MathML has a limited list of allowable mathvariant specifiers; see\n  // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt\n  if (options.fontFamily === \"texttt\") {\n    return \"monospace\";\n  } else if (options.fontFamily === \"textsf\") {\n    if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n      return \"sans-serif-bold-italic\";\n    } else if (options.fontShape === \"textit\") {\n      return \"sans-serif-italic\";\n    } else if (options.fontWeight === \"textbf\") {\n      return \"bold-sans-serif\";\n    } else {\n      return \"sans-serif\";\n    }\n  } else if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n    return \"bold-italic\";\n  } else if (options.fontShape === \"textit\") {\n    return \"italic\";\n  } else if (options.fontWeight === \"textbf\") {\n    return \"bold\";\n  }\n\n  var font = options.font;\n\n  if (!font || font === \"mathnormal\") {\n    return null;\n  }\n\n  var mode = group.mode;\n\n  if (font === \"mathit\") {\n    return \"italic\";\n  } else if (font === \"boldsymbol\") {\n    return group.type === \"textord\" ? \"bold\" : \"bold-italic\";\n  } else if (font === \"mathbf\") {\n    return \"bold\";\n  } else if (font === \"mathbb\") {\n    return \"double-struck\";\n  } else if (font === \"mathsfit\") {\n    return \"sans-serif-italic\";\n  } else if (font === \"mathfrak\") {\n    return \"fraktur\";\n  } else if (font === \"mathscr\" || font === \"mathcal\") {\n    // MathML makes no distinction between script and calligraphic\n    return \"script\";\n  } else if (font === \"mathsf\") {\n    return \"sans-serif\";\n  } else if (font === \"mathtt\") {\n    return \"monospace\";\n  }\n\n  var text = group.text;\n\n  if ([\"\\\\imath\", \"\\\\jmath\"].includes(text)) {\n    return null;\n  }\n\n  if (symbols[mode][text] && symbols[mode][text].replace) {\n    text = symbols[mode][text].replace;\n  }\n\n  var fontName = buildCommon.fontMap[font].fontName;\n\n  if (getCharacterMetrics(text, fontName, mode)) {\n    return buildCommon.fontMap[font].variant;\n  }\n\n  return null;\n};\n/**\n * Check for <mi>.</mi> which is how a dot renders in MathML,\n * or <mo separator=\"true\" lspace=\"0em\" rspace=\"0em\">,</mo>\n * which is how a braced comma {,} renders in MathML\n */\n\nfunction isNumberPunctuation(group) {\n  if (!group) {\n    return false;\n  }\n\n  if (group.type === 'mi' && group.children.length === 1) {\n    var child = group.children[0];\n    return child instanceof TextNode && child.text === '.';\n  } else if (group.type === 'mo' && group.children.length === 1 && group.getAttribute('separator') === 'true' && group.getAttribute('lspace') === '0em' && group.getAttribute('rspace') === '0em') {\n    var _child = group.children[0];\n    return _child instanceof TextNode && _child.text === ',';\n  } else {\n    return false;\n  }\n}\n/**\n * Takes a list of nodes, builds them, and returns a list of the generated\n * MathML nodes.  Also combine consecutive <mtext> outputs into a single\n * <mtext> tag.\n */\n\n\nvar buildExpression = function buildExpression(expression, options, isOrdgroup) {\n  if (expression.length === 1) {\n    var group = buildGroup(expression[0], options);\n\n    if (isOrdgroup && group instanceof MathNode && group.type === \"mo\") {\n      // When TeX writers want to suppress spacing on an operator,\n      // they often put the operator by itself inside braces.\n      group.setAttribute(\"lspace\", \"0em\");\n      group.setAttribute(\"rspace\", \"0em\");\n    }\n\n    return [group];\n  }\n\n  var groups = [];\n  var lastGroup;\n\n  for (var i = 0; i < expression.length; i++) {\n    var _group = buildGroup(expression[i], options);\n\n    if (_group instanceof MathNode && lastGroup instanceof MathNode) {\n      // Concatenate adjacent <mtext>s\n      if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) {\n        lastGroup.children.push(..._group.children);\n        continue; // Concatenate adjacent <mn>s\n      } else if (_group.type === 'mn' && lastGroup.type === 'mn') {\n        lastGroup.children.push(..._group.children);\n        continue; // Concatenate <mn>...</mn> followed by <mi>.</mi>\n      } else if (isNumberPunctuation(_group) && lastGroup.type === 'mn') {\n        lastGroup.children.push(..._group.children);\n        continue; // Concatenate <mi>.</mi> followed by <mn>...</mn>\n      } else if (_group.type === 'mn' && isNumberPunctuation(lastGroup)) {\n        _group.children = [...lastGroup.children, ..._group.children];\n        groups.pop(); // Put preceding <mn>...</mn> or <mi>.</mi> inside base of\n        // <msup><mn>...base...</mn>...exponent...</msup> (or <msub>)\n      } else if ((_group.type === 'msup' || _group.type === 'msub') && _group.children.length >= 1 && (lastGroup.type === 'mn' || isNumberPunctuation(lastGroup))) {\n        var base = _group.children[0];\n\n        if (base instanceof MathNode && base.type === 'mn') {\n          base.children = [...lastGroup.children, ...base.children];\n          groups.pop();\n        } // \\not\n\n      } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {\n        var lastChild = lastGroup.children[0];\n\n        if (lastChild instanceof TextNode && lastChild.text === '\\u0338' && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) {\n          var child = _group.children[0];\n\n          if (child instanceof TextNode && child.text.length > 0) {\n            // Overlay with combining character long solidus\n            child.text = child.text.slice(0, 1) + \"\\u0338\" + child.text.slice(1);\n            groups.pop();\n          }\n        }\n      }\n    }\n\n    groups.push(_group);\n    lastGroup = _group;\n  }\n\n  return groups;\n};\n/**\n * Equivalent to buildExpression, but wraps the elements in an <mrow>\n * if there's more than one.  Returns a single node instead of an array.\n */\n\nvar buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {\n  return makeRow(buildExpression(expression, options, isOrdgroup));\n};\n/**\n * Takes a group from the parser and calls the appropriate groupBuilders function\n * on it to produce a MathML node.\n */\n\nvar buildGroup = function buildGroup(group, options) {\n  if (!group) {\n    return new mathMLTree.MathNode(\"mrow\");\n  }\n\n  if (_mathmlGroupBuilders[group.type]) {\n    // Call the groupBuilders function\n    // $FlowFixMe\n    var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe\n\n    return result;\n  } else {\n    throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n  }\n};\n/**\n * Takes a full parse tree and settings and builds a MathML representation of\n * it. In particular, we put the elements from building the parse tree into a\n * <semantics> tag so we can also include that TeX source as an annotation.\n *\n * Note that we actually return a domTree element with a `<math>` inside it so\n * we can do appropriate styling.\n */\n\nfunction buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) {\n  var expression = buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes\n  // and add spacing nodes. This is necessary only adjacent to math operators\n  // like \\sin or \\lim or to subsup elements that contain math operators.\n  // MathML takes care of the other spacing issues.\n  // Wrap up the expression in an mrow so it is presented in the semantics\n  // tag correctly, unless it's a single <mrow> or <mtable>.\n\n  var wrapper;\n\n  if (expression.length === 1 && expression[0] instanceof MathNode && [\"mrow\", \"mtable\"].includes(expression[0].type)) {\n    wrapper = expression[0];\n  } else {\n    wrapper = new mathMLTree.MathNode(\"mrow\", expression);\n  } // Build a TeX annotation of the source\n\n\n  var annotation = new mathMLTree.MathNode(\"annotation\", [new mathMLTree.TextNode(texExpression)]);\n  annotation.setAttribute(\"encoding\", \"application/x-tex\");\n  var semantics = new mathMLTree.MathNode(\"semantics\", [wrapper, annotation]);\n  var math = new mathMLTree.MathNode(\"math\", [semantics]);\n  math.setAttribute(\"xmlns\", \"http://www.w3.org/1998/Math/MathML\");\n\n  if (isDisplayMode) {\n    math.setAttribute(\"display\", \"block\");\n  } // You can't style <math> nodes, so we wrap the node in a span.\n  // NOTE: The span class is not typed to have <math> nodes as children, and\n  // we don't want to make the children type more generic since the children\n  // of span are expected to have more fields in `buildHtml` contexts.\n\n\n  var wrapperClass = forMathmlOnly ? \"katex\" : \"katex-mathml\"; // $FlowFixMe\n\n  return buildCommon.makeSpan([wrapperClass], [math]);\n}\n\nvar optionsFromSettings = function optionsFromSettings(settings) {\n  return new Options({\n    style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT,\n    maxSize: settings.maxSize,\n    minRuleThickness: settings.minRuleThickness\n  });\n};\n\nvar displayWrap = function displayWrap(node, settings) {\n  if (settings.displayMode) {\n    var classes = [\"katex-display\"];\n\n    if (settings.leqno) {\n      classes.push(\"leqno\");\n    }\n\n    if (settings.fleqn) {\n      classes.push(\"fleqn\");\n    }\n\n    node = buildCommon.makeSpan(classes, [node]);\n  }\n\n  return node;\n};\n\nvar buildTree = function buildTree(tree, expression, settings) {\n  var options = optionsFromSettings(settings);\n  var katexNode;\n\n  if (settings.output === \"mathml\") {\n    return buildMathML(tree, expression, options, settings.displayMode, true);\n  } else if (settings.output === \"html\") {\n    var htmlNode = buildHTML(tree, options);\n    katexNode = buildCommon.makeSpan([\"katex\"], [htmlNode]);\n  } else {\n    var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false);\n\n    var _htmlNode = buildHTML(tree, options);\n\n    katexNode = buildCommon.makeSpan([\"katex\"], [mathMLNode, _htmlNode]);\n  }\n\n  return displayWrap(katexNode, settings);\n};\nvar buildHTMLTree = function buildHTMLTree(tree, expression, settings) {\n  var options = optionsFromSettings(settings);\n  var htmlNode = buildHTML(tree, options);\n  var katexNode = buildCommon.makeSpan([\"katex\"], [htmlNode]);\n  return displayWrap(katexNode, settings);\n};\n\n/**\n * This file provides support to buildMathML.js and buildHTML.js\n * for stretchy wide elements rendered from SVG files\n * and other CSS trickery.\n */\nvar stretchyCodePoint = {\n  widehat: \"^\",\n  widecheck: \"ˇ\",\n  widetilde: \"~\",\n  utilde: \"~\",\n  overleftarrow: \"\\u2190\",\n  underleftarrow: \"\\u2190\",\n  xleftarrow: \"\\u2190\",\n  overrightarrow: \"\\u2192\",\n  underrightarrow: \"\\u2192\",\n  xrightarrow: \"\\u2192\",\n  underbrace: \"\\u23df\",\n  overbrace: \"\\u23de\",\n  overgroup: \"\\u23e0\",\n  undergroup: \"\\u23e1\",\n  overleftrightarrow: \"\\u2194\",\n  underleftrightarrow: \"\\u2194\",\n  xleftrightarrow: \"\\u2194\",\n  Overrightarrow: \"\\u21d2\",\n  xRightarrow: \"\\u21d2\",\n  overleftharpoon: \"\\u21bc\",\n  xleftharpoonup: \"\\u21bc\",\n  overrightharpoon: \"\\u21c0\",\n  xrightharpoonup: \"\\u21c0\",\n  xLeftarrow: \"\\u21d0\",\n  xLeftrightarrow: \"\\u21d4\",\n  xhookleftarrow: \"\\u21a9\",\n  xhookrightarrow: \"\\u21aa\",\n  xmapsto: \"\\u21a6\",\n  xrightharpoondown: \"\\u21c1\",\n  xleftharpoondown: \"\\u21bd\",\n  xrightleftharpoons: \"\\u21cc\",\n  xleftrightharpoons: \"\\u21cb\",\n  xtwoheadleftarrow: \"\\u219e\",\n  xtwoheadrightarrow: \"\\u21a0\",\n  xlongequal: \"=\",\n  xtofrom: \"\\u21c4\",\n  xrightleftarrows: \"\\u21c4\",\n  xrightequilibrium: \"\\u21cc\",\n  // Not a perfect match.\n  xleftequilibrium: \"\\u21cb\",\n  // None better available.\n  \"\\\\cdrightarrow\": \"\\u2192\",\n  \"\\\\cdleftarrow\": \"\\u2190\",\n  \"\\\\cdlongequal\": \"=\"\n};\n\nvar mathMLnode = function mathMLnode(label) {\n  var node = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\\\/, '')])]);\n  node.setAttribute(\"stretchy\", \"true\");\n  return node;\n}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.\n// Copyright (c) 2009-2010, Design Science, Inc. (<www.mathjax.org>)\n// Copyright (c) 2014-2017 Khan Academy (<www.khanacademy.org>)\n// Licensed under the SIL Open Font License, Version 1.1.\n// See \\nhttp://scripts.sil.org/OFL\n// Very Long SVGs\n//    Many of the KaTeX stretchy wide elements use a long SVG image and an\n//    overflow: hidden tactic to achieve a stretchy image while avoiding\n//    distortion of arrowheads or brace corners.\n//    The SVG typically contains a very long (400 em) arrow.\n//    The SVG is in a container span that has overflow: hidden, so the span\n//    acts like a window that exposes only part of the  SVG.\n//    The SVG always has a longer, thinner aspect ratio than the container span.\n//    After the SVG fills 100% of the height of the container span,\n//    there is a long arrow shaft left over. That left-over shaft is not shown.\n//    Instead, it is sliced off because the span's CSS has overflow: hidden.\n//    Thus, the reader sees an arrow that matches the subject matter width\n//    without distortion.\n//    Some functions, such as \\cancel, need to vary their aspect ratio. These\n//    functions do not get the overflow SVG treatment.\n// Second Brush Stroke\n//    Low resolution monitors struggle to display images in fine detail.\n//    So browsers apply anti-aliasing. A long straight arrow shaft therefore\n//    will sometimes appear as if it has a blurred edge.\n//    To mitigate this, these SVG files contain a second \"brush-stroke\" on the\n//    arrow shafts. That is, a second long thin rectangular SVG path has been\n//    written directly on top of each arrow shaft. This reinforcement causes\n//    some of the screen pixels to display as black instead of the anti-aliased\n//    gray pixel that a  single path would generate. So we get arrow shafts\n//    whose edges appear to be sharper.\n// In the katexImagesData object just below, the dimensions all\n// correspond to path geometry inside the relevant SVG.\n// For example, \\overrightarrow uses the same arrowhead as glyph U+2192\n// from the KaTeX Main font. The scaling factor is 1000.\n// That is, inside the font, that arrowhead is 522 units tall, which\n// corresponds to 0.522 em inside the document.\n\n\nvar katexImagesData = {\n  //   path(s), minWidth, height, align\n  overrightarrow: [[\"rightarrow\"], 0.888, 522, \"xMaxYMin\"],\n  overleftarrow: [[\"leftarrow\"], 0.888, 522, \"xMinYMin\"],\n  underrightarrow: [[\"rightarrow\"], 0.888, 522, \"xMaxYMin\"],\n  underleftarrow: [[\"leftarrow\"], 0.888, 522, \"xMinYMin\"],\n  xrightarrow: [[\"rightarrow\"], 1.469, 522, \"xMaxYMin\"],\n  \"\\\\cdrightarrow\": [[\"rightarrow\"], 3.0, 522, \"xMaxYMin\"],\n  // CD minwwidth2.5pc\n  xleftarrow: [[\"leftarrow\"], 1.469, 522, \"xMinYMin\"],\n  \"\\\\cdleftarrow\": [[\"leftarrow\"], 3.0, 522, \"xMinYMin\"],\n  Overrightarrow: [[\"doublerightarrow\"], 0.888, 560, \"xMaxYMin\"],\n  xRightarrow: [[\"doublerightarrow\"], 1.526, 560, \"xMaxYMin\"],\n  xLeftarrow: [[\"doubleleftarrow\"], 1.526, 560, \"xMinYMin\"],\n  overleftharpoon: [[\"leftharpoon\"], 0.888, 522, \"xMinYMin\"],\n  xleftharpoonup: [[\"leftharpoon\"], 0.888, 522, \"xMinYMin\"],\n  xleftharpoondown: [[\"leftharpoondown\"], 0.888, 522, \"xMinYMin\"],\n  overrightharpoon: [[\"rightharpoon\"], 0.888, 522, \"xMaxYMin\"],\n  xrightharpoonup: [[\"rightharpoon\"], 0.888, 522, \"xMaxYMin\"],\n  xrightharpoondown: [[\"rightharpoondown\"], 0.888, 522, \"xMaxYMin\"],\n  xlongequal: [[\"longequal\"], 0.888, 334, \"xMinYMin\"],\n  \"\\\\cdlongequal\": [[\"longequal\"], 3.0, 334, \"xMinYMin\"],\n  xtwoheadleftarrow: [[\"twoheadleftarrow\"], 0.888, 334, \"xMinYMin\"],\n  xtwoheadrightarrow: [[\"twoheadrightarrow\"], 0.888, 334, \"xMaxYMin\"],\n  overleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 0.888, 522],\n  overbrace: [[\"leftbrace\", \"midbrace\", \"rightbrace\"], 1.6, 548],\n  underbrace: [[\"leftbraceunder\", \"midbraceunder\", \"rightbraceunder\"], 1.6, 548],\n  underleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 0.888, 522],\n  xleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 1.75, 522],\n  xLeftrightarrow: [[\"doubleleftarrow\", \"doublerightarrow\"], 1.75, 560],\n  xrightleftharpoons: [[\"leftharpoondownplus\", \"rightharpoonplus\"], 1.75, 716],\n  xleftrightharpoons: [[\"leftharpoonplus\", \"rightharpoondownplus\"], 1.75, 716],\n  xhookleftarrow: [[\"leftarrow\", \"righthook\"], 1.08, 522],\n  xhookrightarrow: [[\"lefthook\", \"rightarrow\"], 1.08, 522],\n  overlinesegment: [[\"leftlinesegment\", \"rightlinesegment\"], 0.888, 522],\n  underlinesegment: [[\"leftlinesegment\", \"rightlinesegment\"], 0.888, 522],\n  overgroup: [[\"leftgroup\", \"rightgroup\"], 0.888, 342],\n  undergroup: [[\"leftgroupunder\", \"rightgroupunder\"], 0.888, 342],\n  xmapsto: [[\"leftmapsto\", \"rightarrow\"], 1.5, 522],\n  xtofrom: [[\"leftToFrom\", \"rightToFrom\"], 1.75, 528],\n  // The next three arrows are from the mhchem package.\n  // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the\n  // document as \\xrightarrow or \\xrightleftharpoons. Those have\n  // min-length = 1.75em, so we set min-length on these next three to match.\n  xrightleftarrows: [[\"baraboveleftarrow\", \"rightarrowabovebar\"], 1.75, 901],\n  xrightequilibrium: [[\"baraboveshortleftharpoon\", \"rightharpoonaboveshortbar\"], 1.75, 716],\n  xleftequilibrium: [[\"shortbaraboveleftharpoon\", \"shortrightharpoonabovebar\"], 1.75, 716]\n};\n\nvar groupLength = function groupLength(arg) {\n  if (arg.type === \"ordgroup\") {\n    return arg.body.length;\n  } else {\n    return 1;\n  }\n};\n\nvar svgSpan = function svgSpan(group, options) {\n  // Create a span with inline SVG for the element.\n  function buildSvgSpan_() {\n    var viewBoxWidth = 400000; // default\n\n    var label = group.label.slice(1);\n\n    if ([\"widehat\", \"widecheck\", \"widetilde\", \"utilde\"].includes(label)) {\n      // Each type in the `if` statement corresponds to one of the ParseNode\n      // types below. This narrowing is required to access `grp.base`.\n      // $FlowFixMe\n      var grp = group; // There are four SVG images available for each function.\n      // Choose a taller image when there are more characters.\n\n      var numChars = groupLength(grp.base);\n      var viewBoxHeight;\n      var pathName;\n\n      var _height;\n\n      if (numChars > 5) {\n        if (label === \"widehat\" || label === \"widecheck\") {\n          viewBoxHeight = 420;\n          viewBoxWidth = 2364;\n          _height = 0.42;\n          pathName = label + \"4\";\n        } else {\n          viewBoxHeight = 312;\n          viewBoxWidth = 2340;\n          _height = 0.34;\n          pathName = \"tilde4\";\n        }\n      } else {\n        var imgIndex = [1, 1, 2, 2, 3, 3][numChars];\n\n        if (label === \"widehat\" || label === \"widecheck\") {\n          viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex];\n          viewBoxHeight = [0, 239, 300, 360, 420][imgIndex];\n          _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex];\n          pathName = label + imgIndex;\n        } else {\n          viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex];\n          viewBoxHeight = [0, 260, 286, 306, 312][imgIndex];\n          _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex];\n          pathName = \"tilde\" + imgIndex;\n        }\n      }\n\n      var path = new PathNode(pathName);\n      var svgNode = new SvgNode([path], {\n        \"width\": \"100%\",\n        \"height\": makeEm(_height),\n        \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight,\n        \"preserveAspectRatio\": \"none\"\n      });\n      return {\n        span: buildCommon.makeSvgSpan([], [svgNode], options),\n        minWidth: 0,\n        height: _height\n      };\n    } else {\n      var spans = [];\n      var data = katexImagesData[label];\n      var [paths, _minWidth, _viewBoxHeight] = data;\n\n      var _height2 = _viewBoxHeight / 1000;\n\n      var numSvgChildren = paths.length;\n      var widthClasses;\n      var aligns;\n\n      if (numSvgChildren === 1) {\n        // $FlowFixMe: All these cases must be of the 4-tuple type.\n        var align1 = data[3];\n        widthClasses = [\"hide-tail\"];\n        aligns = [align1];\n      } else if (numSvgChildren === 2) {\n        widthClasses = [\"halfarrow-left\", \"halfarrow-right\"];\n        aligns = [\"xMinYMin\", \"xMaxYMin\"];\n      } else if (numSvgChildren === 3) {\n        widthClasses = [\"brace-left\", \"brace-center\", \"brace-right\"];\n        aligns = [\"xMinYMin\", \"xMidYMin\", \"xMaxYMin\"];\n      } else {\n        throw new Error(\"Correct katexImagesData or update code here to support\\n                    \" + numSvgChildren + \" children.\");\n      }\n\n      for (var i = 0; i < numSvgChildren; i++) {\n        var _path = new PathNode(paths[i]);\n\n        var _svgNode = new SvgNode([_path], {\n          \"width\": \"400em\",\n          \"height\": makeEm(_height2),\n          \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + _viewBoxHeight,\n          \"preserveAspectRatio\": aligns[i] + \" slice\"\n        });\n\n        var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options);\n\n        if (numSvgChildren === 1) {\n          return {\n            span: _span,\n            minWidth: _minWidth,\n            height: _height2\n          };\n        } else {\n          _span.style.height = makeEm(_height2);\n          spans.push(_span);\n        }\n      }\n\n      return {\n        span: buildCommon.makeSpan([\"stretchy\"], spans, options),\n        minWidth: _minWidth,\n        height: _height2\n      };\n    }\n  } // buildSvgSpan_()\n\n\n  var {\n    span,\n    minWidth,\n    height\n  } = buildSvgSpan_(); // Note that we are returning span.depth = 0.\n  // Any adjustments relative to the baseline must be done in buildHTML.\n\n  span.height = height;\n  span.style.height = makeEm(height);\n\n  if (minWidth > 0) {\n    span.style.minWidth = makeEm(minWidth);\n  }\n\n  return span;\n};\n\nvar encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) {\n  // Return an image span for \\cancel, \\bcancel, \\xcancel, \\fbox, or \\angl\n  var img;\n  var totalHeight = inner.height + inner.depth + topPad + bottomPad;\n\n  if (/fbox|color|angl/.test(label)) {\n    img = buildCommon.makeSpan([\"stretchy\", label], [], options);\n\n    if (label === \"fbox\") {\n      var color = options.color && options.getColor();\n\n      if (color) {\n        img.style.borderColor = color;\n      }\n    }\n  } else {\n    // \\cancel, \\bcancel, or \\xcancel\n    // Since \\cancel's SVG is inline and it omits the viewBox attribute,\n    // its stroke-width will not vary with span area.\n    var lines = [];\n\n    if (/^[bx]cancel$/.test(label)) {\n      lines.push(new LineNode({\n        \"x1\": \"0\",\n        \"y1\": \"0\",\n        \"x2\": \"100%\",\n        \"y2\": \"100%\",\n        \"stroke-width\": \"0.046em\"\n      }));\n    }\n\n    if (/^x?cancel$/.test(label)) {\n      lines.push(new LineNode({\n        \"x1\": \"0\",\n        \"y1\": \"100%\",\n        \"x2\": \"100%\",\n        \"y2\": \"0\",\n        \"stroke-width\": \"0.046em\"\n      }));\n    }\n\n    var svgNode = new SvgNode(lines, {\n      \"width\": \"100%\",\n      \"height\": makeEm(totalHeight)\n    });\n    img = buildCommon.makeSvgSpan([], [svgNode], options);\n  }\n\n  img.height = totalHeight;\n  img.style.height = makeEm(totalHeight);\n  return img;\n};\n\nvar stretchy = {\n  encloseSpan,\n  mathMLnode,\n  svgSpan\n};\n\n/**\n * Asserts that the node is of the given type and returns it with stricter\n * typing. Throws if the node's type does not match.\n */\nfunction assertNodeType(node, type) {\n  if (!node || node.type !== type) {\n    throw new Error(\"Expected node of type \" + type + \", but got \" + (node ? \"node of type \" + node.type : String(node)));\n  } // $FlowFixMe, >=0.125\n\n\n  return node;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\n\nfunction assertSymbolNodeType(node) {\n  var typedNode = checkSymbolNodeType(node);\n\n  if (!typedNode) {\n    throw new Error(\"Expected node of symbol group type, but got \" + (node ? \"node of type \" + node.type : String(node)));\n  }\n\n  return typedNode;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\n\nfunction checkSymbolNodeType(node) {\n  if (node && (node.type === \"atom\" || NON_ATOMS.hasOwnProperty(node.type))) {\n    // $FlowFixMe\n    return node;\n  }\n\n  return null;\n}\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"accent\", but\n// also \"supsub\" since an accent can affect super/subscripting.\nvar htmlBuilder$a = (grp, options) => {\n  // Accents are handled in the TeXbook pg. 443, rule 12.\n  var base;\n  var group;\n  var supSubGroup;\n\n  if (grp && grp.type === \"supsub\") {\n    // If our base is a character box, and we have superscripts and\n    // subscripts, the supsub will defer to us. In particular, we want\n    // to attach the superscripts and subscripts to the inner body (so\n    // that the position of the superscripts and subscripts won't be\n    // affected by the height of the accent). We accomplish this by\n    // sticking the base of the accent into the base of the supsub, and\n    // rendering that, while keeping track of where the accent is.\n    // The real accent group is the base of the supsub group\n    group = assertNodeType(grp.base, \"accent\"); // The character box is the base of the accent group\n\n    base = group.base; // Stick the character box into the base of the supsub group\n\n    grp.base = base; // Rerender the supsub group with its new base, and store that\n    // result.\n\n    supSubGroup = assertSpan(buildGroup$1(grp, options)); // reset original base\n\n    grp.base = group;\n  } else {\n    group = assertNodeType(grp, \"accent\");\n    base = group.base;\n  } // Build the base group\n\n\n  var body = buildGroup$1(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character?\n\n  var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line \"If the\n  // nucleus is not a single character, let s = 0; otherwise set s to the\n  // kern amount for the nucleus followed by the \\skewchar of its font.\"\n  // Note that our skew metrics are just the kern between each character\n  // and the skewchar.\n\n  var skew = 0;\n\n  if (mustShift) {\n    // If the base is a character box, then we want the skew of the\n    // innermost character. To do that, we find the innermost character:\n    var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it\n\n    var baseGroup = buildGroup$1(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol.\n\n    skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we\n    // removed with getBaseElem might contain things like \\color which\n    // we can't get rid of.\n    // TODO(emily): Find a better way to get the skew\n  }\n\n  var accentBelow = group.label === \"\\\\c\"; // calculate the amount of space between the body and the accent\n\n  var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent\n\n  var accentBody;\n\n  if (!group.isStretchy) {\n    var accent;\n    var width;\n\n    if (group.label === \"\\\\vec\") {\n      // Before version 0.9, \\vec used the combining font glyph U+20D7.\n      // But browsers, especially Safari, are not consistent in how they\n      // render combining characters when not preceded by a character.\n      // So now we use an SVG.\n      // If Safari reforms, we should consider reverting to the glyph.\n      accent = buildCommon.staticSvg(\"vec\", options);\n      width = buildCommon.svgData.vec[1];\n    } else {\n      accent = buildCommon.makeOrd({\n        mode: group.mode,\n        text: group.label\n      }, options, \"textord\");\n      accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to\n      // shift the accent over to a place we don't want.\n\n      accent.italic = 0;\n      width = accent.width;\n\n      if (accentBelow) {\n        clearance += accent.depth;\n      }\n    }\n\n    accentBody = buildCommon.makeSpan([\"accent-body\"], [accent]); // \"Full\" accents expand the width of the resulting symbol to be\n    // at least the width of the accent, and overlap directly onto the\n    // character without any vertical offset.\n\n    var accentFull = group.label === \"\\\\textcircled\";\n\n    if (accentFull) {\n      accentBody.classes.push('accent-full');\n      clearance = body.height;\n    } // Shift the accent over by the skew.\n\n\n    var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`\n    // so that the accent doesn't contribute to the bounding box.\n    // We need to shift the character by its width (effectively half\n    // its width) to compensate.\n\n    if (!accentFull) {\n      left -= width / 2;\n    }\n\n    accentBody.style.left = makeEm(left); // \\textcircled uses the \\bigcirc glyph, so it needs some\n    // vertical adjustment to match LaTeX.\n\n    if (group.label === \"\\\\textcircled\") {\n      accentBody.style.top = \".2em\";\n    }\n\n    accentBody = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: body\n      }, {\n        type: \"kern\",\n        size: -clearance\n      }, {\n        type: \"elem\",\n        elem: accentBody\n      }]\n    }, options);\n  } else {\n    accentBody = stretchy.svgSpan(group, options);\n    accentBody = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: body\n      }, {\n        type: \"elem\",\n        elem: accentBody,\n        wrapperClasses: [\"svg-align\"],\n        wrapperStyle: skew > 0 ? {\n          width: \"calc(100% - \" + makeEm(2 * skew) + \")\",\n          marginLeft: makeEm(2 * skew)\n        } : undefined\n      }]\n    }, options);\n  }\n\n  var accentWrap = buildCommon.makeSpan([\"mord\", \"accent\"], [accentBody], options);\n\n  if (supSubGroup) {\n    // Here, we replace the \"base\" child of the supsub with our newly\n    // generated accent.\n    supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the\n    // accent, we manually recalculate height.\n\n    supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not.\n\n    supSubGroup.classes[0] = \"mord\";\n    return supSubGroup;\n  } else {\n    return accentWrap;\n  }\n};\n\nvar mathmlBuilder$9 = (group, options) => {\n  var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode(\"mo\", [makeText(group.label, group.mode)]);\n  var node = new mathMLTree.MathNode(\"mover\", [buildGroup(group.base, options), accentNode]);\n  node.setAttribute(\"accent\", \"true\");\n  return node;\n};\n\nvar NON_STRETCHY_ACCENT_REGEX = new RegExp([\"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\", \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\", \"\\\\mathring\"].map(accent => \"\\\\\" + accent).join(\"|\")); // Accents\n\ndefineFunction({\n  type: \"accent\",\n  names: [\"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\", \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\", \"\\\\mathring\", \"\\\\widecheck\", \"\\\\widehat\", \"\\\\widetilde\", \"\\\\overrightarrow\", \"\\\\overleftarrow\", \"\\\\Overrightarrow\", \"\\\\overleftrightarrow\", \"\\\\overgroup\", \"\\\\overlinesegment\", \"\\\\overleftharpoon\", \"\\\\overrightharpoon\"],\n  props: {\n    numArgs: 1\n  },\n  handler: (context, args) => {\n    var base = normalizeArgument(args[0]);\n    var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);\n    var isShifty = !isStretchy || context.funcName === \"\\\\widehat\" || context.funcName === \"\\\\widetilde\" || context.funcName === \"\\\\widecheck\";\n    return {\n      type: \"accent\",\n      mode: context.parser.mode,\n      label: context.funcName,\n      isStretchy: isStretchy,\n      isShifty: isShifty,\n      base: base\n    };\n  },\n  htmlBuilder: htmlBuilder$a,\n  mathmlBuilder: mathmlBuilder$9\n}); // Text-mode accents\n\ndefineFunction({\n  type: \"accent\",\n  names: [\"\\\\'\", \"\\\\`\", \"\\\\^\", \"\\\\~\", \"\\\\=\", \"\\\\u\", \"\\\\.\", '\\\\\"', \"\\\\c\", \"\\\\r\", \"\\\\H\", \"\\\\v\", \"\\\\textcircled\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true,\n    allowedInMath: true,\n    // unless in strict mode\n    argTypes: [\"primitive\"]\n  },\n  handler: (context, args) => {\n    var base = args[0];\n    var mode = context.parser.mode;\n\n    if (mode === \"math\") {\n      context.parser.settings.reportNonstrict(\"mathVsTextAccents\", \"LaTeX's accent \" + context.funcName + \" works only in text mode\");\n      mode = \"text\";\n    }\n\n    return {\n      type: \"accent\",\n      mode: mode,\n      label: context.funcName,\n      isStretchy: false,\n      isShifty: true,\n      base: base\n    };\n  },\n  htmlBuilder: htmlBuilder$a,\n  mathmlBuilder: mathmlBuilder$9\n});\n\n// Horizontal overlap functions\ndefineFunction({\n  type: \"accentUnder\",\n  names: [\"\\\\underleftarrow\", \"\\\\underrightarrow\", \"\\\\underleftrightarrow\", \"\\\\undergroup\", \"\\\\underlinesegment\", \"\\\\utilde\"],\n  props: {\n    numArgs: 1\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var base = args[0];\n    return {\n      type: \"accentUnder\",\n      mode: parser.mode,\n      label: funcName,\n      base: base\n    };\n  },\n  htmlBuilder: (group, options) => {\n    // Treat under accents much like underlines.\n    var innerGroup = buildGroup$1(group.base, options);\n    var accentBody = stretchy.svgSpan(group, options);\n    var kern = group.label === \"\\\\utilde\" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns\n\n    var vlist = buildCommon.makeVList({\n      positionType: \"top\",\n      positionData: innerGroup.height,\n      children: [{\n        type: \"elem\",\n        elem: accentBody,\n        wrapperClasses: [\"svg-align\"]\n      }, {\n        type: \"kern\",\n        size: kern\n      }, {\n        type: \"elem\",\n        elem: innerGroup\n      }]\n    }, options);\n    return buildCommon.makeSpan([\"mord\", \"accentunder\"], [vlist], options);\n  },\n  mathmlBuilder: (group, options) => {\n    var accentNode = stretchy.mathMLnode(group.label);\n    var node = new mathMLTree.MathNode(\"munder\", [buildGroup(group.base, options), accentNode]);\n    node.setAttribute(\"accentunder\", \"true\");\n    return node;\n  }\n});\n\n// Helper function\nvar paddedNode = group => {\n  var node = new mathMLTree.MathNode(\"mpadded\", group ? [group] : []);\n  node.setAttribute(\"width\", \"+0.6em\");\n  node.setAttribute(\"lspace\", \"0.3em\");\n  return node;\n}; // Stretchy arrows with an optional argument\n\n\ndefineFunction({\n  type: \"xArrow\",\n  names: [\"\\\\xleftarrow\", \"\\\\xrightarrow\", \"\\\\xLeftarrow\", \"\\\\xRightarrow\", \"\\\\xleftrightarrow\", \"\\\\xLeftrightarrow\", \"\\\\xhookleftarrow\", \"\\\\xhookrightarrow\", \"\\\\xmapsto\", \"\\\\xrightharpoondown\", \"\\\\xrightharpoonup\", \"\\\\xleftharpoondown\", \"\\\\xleftharpoonup\", \"\\\\xrightleftharpoons\", \"\\\\xleftrightharpoons\", \"\\\\xlongequal\", \"\\\\xtwoheadrightarrow\", \"\\\\xtwoheadleftarrow\", \"\\\\xtofrom\", // The next 3 functions are here to support the mhchem extension.\n  // Direct use of these functions is discouraged and may break someday.\n  \"\\\\xrightleftarrows\", \"\\\\xrightequilibrium\", \"\\\\xleftequilibrium\", // The next 3 functions are here only to support the {CD} environment.\n  \"\\\\\\\\cdrightarrow\", \"\\\\\\\\cdleftarrow\", \"\\\\\\\\cdlongequal\"],\n  props: {\n    numArgs: 1,\n    numOptionalArgs: 1\n  },\n\n  handler(_ref, args, optArgs) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    return {\n      type: \"xArrow\",\n      mode: parser.mode,\n      label: funcName,\n      body: args[0],\n      below: optArgs[0]\n    };\n  },\n\n  // Flow is unable to correctly infer the type of `group`, even though it's\n  // unambiguously determined from the passed-in `type` above.\n  htmlBuilder(group, options) {\n    var style = options.style; // Build the argument groups in the appropriate style.\n    // Ref: amsmath.dtx:   \\hbox{$\\scriptstyle\\mkern#3mu{#6}\\mkern#4mu$}%\n    // Some groups can return document fragments.  Handle those by wrapping\n    // them in a span.\n\n    var newOptions = options.havingStyle(style.sup());\n    var upperGroup = buildCommon.wrapFragment(buildGroup$1(group.body, newOptions, options), options);\n    var arrowPrefix = group.label.slice(0, 2) === \"\\\\x\" ? \"x\" : \"cd\";\n    upperGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n    var lowerGroup;\n\n    if (group.below) {\n      // Build the lower group\n      newOptions = options.havingStyle(style.sub());\n      lowerGroup = buildCommon.wrapFragment(buildGroup$1(group.below, newOptions, options), options);\n      lowerGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n    }\n\n    var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0.\n    // The point we want on the math axis is at 0.5 * arrowBody.height.\n\n    var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\\if0#2\\else\\mkern#2mu\\fi\n\n    var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu\n\n    if (upperGroup.depth > 0.25 || group.label === \"\\\\xleftequilibrium\") {\n      upperShift -= upperGroup.depth; // shift up if depth encroaches\n    } // Generate the vlist\n\n\n    var vlist;\n\n    if (lowerGroup) {\n      var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;\n      vlist = buildCommon.makeVList({\n        positionType: \"individualShift\",\n        children: [{\n          type: \"elem\",\n          elem: upperGroup,\n          shift: upperShift\n        }, {\n          type: \"elem\",\n          elem: arrowBody,\n          shift: arrowShift\n        }, {\n          type: \"elem\",\n          elem: lowerGroup,\n          shift: lowerShift\n        }]\n      }, options);\n    } else {\n      vlist = buildCommon.makeVList({\n        positionType: \"individualShift\",\n        children: [{\n          type: \"elem\",\n          elem: upperGroup,\n          shift: upperShift\n        }, {\n          type: \"elem\",\n          elem: arrowBody,\n          shift: arrowShift\n        }]\n      }, options);\n    } // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n\n    vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n    return buildCommon.makeSpan([\"mrel\", \"x-arrow\"], [vlist], options);\n  },\n\n  mathmlBuilder(group, options) {\n    var arrowNode = stretchy.mathMLnode(group.label);\n    arrowNode.setAttribute(\"minsize\", group.label.charAt(0) === \"x\" ? \"1.75em\" : \"3.0em\");\n    var node;\n\n    if (group.body) {\n      var upperNode = paddedNode(buildGroup(group.body, options));\n\n      if (group.below) {\n        var lowerNode = paddedNode(buildGroup(group.below, options));\n        node = new mathMLTree.MathNode(\"munderover\", [arrowNode, lowerNode, upperNode]);\n      } else {\n        node = new mathMLTree.MathNode(\"mover\", [arrowNode, upperNode]);\n      }\n    } else if (group.below) {\n      var _lowerNode = paddedNode(buildGroup(group.below, options));\n\n      node = new mathMLTree.MathNode(\"munder\", [arrowNode, _lowerNode]);\n    } else {\n      // This should never happen.\n      // Parser.js throws an error if there is no argument.\n      node = paddedNode();\n      node = new mathMLTree.MathNode(\"mover\", [arrowNode, node]);\n    }\n\n    return node;\n  }\n\n});\n\nvar makeSpan = buildCommon.makeSpan;\n\nfunction htmlBuilder$9(group, options) {\n  var elements = buildExpression$1(group.body, options, true);\n  return makeSpan([group.mclass], elements, options);\n}\n\nfunction mathmlBuilder$8(group, options) {\n  var node;\n  var inner = buildExpression(group.body, options);\n\n  if (group.mclass === \"minner\") {\n    node = new mathMLTree.MathNode(\"mpadded\", inner);\n  } else if (group.mclass === \"mord\") {\n    if (group.isCharacterBox) {\n      node = inner[0];\n      node.type = \"mi\";\n    } else {\n      node = new mathMLTree.MathNode(\"mi\", inner);\n    }\n  } else {\n    if (group.isCharacterBox) {\n      node = inner[0];\n      node.type = \"mo\";\n    } else {\n      node = new mathMLTree.MathNode(\"mo\", inner);\n    } // Set spacing based on what is the most likely adjacent atom type.\n    // See TeXbook p170.\n\n\n    if (group.mclass === \"mbin\") {\n      node.attributes.lspace = \"0.22em\"; // medium space\n\n      node.attributes.rspace = \"0.22em\";\n    } else if (group.mclass === \"mpunct\") {\n      node.attributes.lspace = \"0em\";\n      node.attributes.rspace = \"0.17em\"; // thinspace\n    } else if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n      node.attributes.lspace = \"0em\";\n      node.attributes.rspace = \"0em\";\n    } else if (group.mclass === \"minner\") {\n      node.attributes.lspace = \"0.0556em\"; // 1 mu is the most likely option\n\n      node.attributes.width = \"+0.1111em\";\n    } // MathML <mo> default space is 5/18 em, so <mrel> needs no action.\n    // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo\n\n  }\n\n  return node;\n} // Math class commands except \\mathop\n\n\ndefineFunction({\n  type: \"mclass\",\n  names: [\"\\\\mathord\", \"\\\\mathbin\", \"\\\\mathrel\", \"\\\\mathopen\", \"\\\\mathclose\", \"\\\\mathpunct\", \"\\\\mathinner\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"mclass\",\n      mode: parser.mode,\n      mclass: \"m\" + funcName.slice(5),\n      // TODO(kevinb): don't prefix with 'm'\n      body: ordargument(body),\n      isCharacterBox: utils.isCharacterBox(body)\n    };\n  },\n\n  htmlBuilder: htmlBuilder$9,\n  mathmlBuilder: mathmlBuilder$8\n});\nvar binrelClass = arg => {\n  // \\binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.\n  // (by rendering separately and with {}s before and after, and measuring\n  // the change in spacing).  We'll do roughly the same by detecting the\n  // atom type directly.\n  var atom = arg.type === \"ordgroup\" && arg.body.length ? arg.body[0] : arg;\n\n  if (atom.type === \"atom\" && (atom.family === \"bin\" || atom.family === \"rel\")) {\n    return \"m\" + atom.family;\n  } else {\n    return \"mord\";\n  }\n}; // \\@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.\n// This is equivalent to \\binrel@{x}\\binrel@@{y} in AMSTeX.\n\ndefineFunction({\n  type: \"mclass\",\n  names: [\"\\\\@binrel\"],\n  props: {\n    numArgs: 2\n  },\n\n  handler(_ref2, args) {\n    var {\n      parser\n    } = _ref2;\n    return {\n      type: \"mclass\",\n      mode: parser.mode,\n      mclass: binrelClass(args[0]),\n      body: ordargument(args[1]),\n      isCharacterBox: utils.isCharacterBox(args[1])\n    };\n  }\n\n}); // Build a relation or stacked op by placing one symbol on top of another\n\ndefineFunction({\n  type: \"mclass\",\n  names: [\"\\\\stackrel\", \"\\\\overset\", \"\\\\underset\"],\n  props: {\n    numArgs: 2\n  },\n\n  handler(_ref3, args) {\n    var {\n      parser,\n      funcName\n    } = _ref3;\n    var baseArg = args[1];\n    var shiftedArg = args[0];\n    var mclass;\n\n    if (funcName !== \"\\\\stackrel\") {\n      // LaTeX applies \\binrel spacing to \\overset and \\underset.\n      mclass = binrelClass(baseArg);\n    } else {\n      mclass = \"mrel\"; // for \\stackrel\n    }\n\n    var baseOp = {\n      type: \"op\",\n      mode: baseArg.mode,\n      limits: true,\n      alwaysHandleSupSub: true,\n      parentIsSupSub: false,\n      symbol: false,\n      suppressBaseShift: funcName !== \"\\\\stackrel\",\n      body: ordargument(baseArg)\n    };\n    var supsub = {\n      type: \"supsub\",\n      mode: shiftedArg.mode,\n      base: baseOp,\n      sup: funcName === \"\\\\underset\" ? null : shiftedArg,\n      sub: funcName === \"\\\\underset\" ? shiftedArg : null\n    };\n    return {\n      type: \"mclass\",\n      mode: parser.mode,\n      mclass,\n      body: [supsub],\n      isCharacterBox: utils.isCharacterBox(supsub)\n    };\n  },\n\n  htmlBuilder: htmlBuilder$9,\n  mathmlBuilder: mathmlBuilder$8\n});\n\n// \\pmb is a simulation of bold font.\n// The version of \\pmb in ambsy.sty works by typesetting three copies\n// with small offsets. We use CSS text-shadow.\n// It's a hack. Not as good as a real bold font. Better than nothing.\ndefineFunction({\n  type: \"pmb\",\n  names: [\"\\\\pmb\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"pmb\",\n      mode: parser.mode,\n      mclass: binrelClass(args[0]),\n      body: ordargument(args[0])\n    };\n  },\n\n  htmlBuilder(group, options) {\n    var elements = buildExpression$1(group.body, options, true);\n    var node = buildCommon.makeSpan([group.mclass], elements, options);\n    node.style.textShadow = \"0.02em 0.01em 0.04px\";\n    return node;\n  },\n\n  mathmlBuilder(group, style) {\n    var inner = buildExpression(group.body, style); // Wrap with an <mstyle> element.\n\n    var node = new mathMLTree.MathNode(\"mstyle\", inner);\n    node.setAttribute(\"style\", \"text-shadow: 0.02em 0.01em 0.04px\");\n    return node;\n  }\n\n});\n\nvar cdArrowFunctionName = {\n  \">\": \"\\\\\\\\cdrightarrow\",\n  \"<\": \"\\\\\\\\cdleftarrow\",\n  \"=\": \"\\\\\\\\cdlongequal\",\n  \"A\": \"\\\\uparrow\",\n  \"V\": \"\\\\downarrow\",\n  \"|\": \"\\\\Vert\",\n  \".\": \"no arrow\"\n};\n\nvar newCell = () => {\n  // Create an empty cell, to be filled below with parse nodes.\n  // The parseTree from this module must be constructed like the\n  // one created by parseArray(), so an empty CD cell must\n  // be a ParseNode<\"styling\">. And CD is always displaystyle.\n  // So these values are fixed and flow can do implicit typing.\n  return {\n    type: \"styling\",\n    body: [],\n    mode: \"math\",\n    style: \"display\"\n  };\n};\n\nvar isStartOfArrow = node => {\n  return node.type === \"textord\" && node.text === \"@\";\n};\n\nvar isLabelEnd = (node, endChar) => {\n  return (node.type === \"mathord\" || node.type === \"atom\") && node.text === endChar;\n};\n\nfunction cdArrow(arrowChar, labels, parser) {\n  // Return a parse tree of an arrow and its labels.\n  // This acts in a way similar to a macro expansion.\n  var funcName = cdArrowFunctionName[arrowChar];\n\n  switch (funcName) {\n    case \"\\\\\\\\cdrightarrow\":\n    case \"\\\\\\\\cdleftarrow\":\n      return parser.callFunction(funcName, [labels[0]], [labels[1]]);\n\n    case \"\\\\uparrow\":\n    case \"\\\\downarrow\":\n      {\n        var leftLabel = parser.callFunction(\"\\\\\\\\cdleft\", [labels[0]], []);\n        var bareArrow = {\n          type: \"atom\",\n          text: funcName,\n          mode: \"math\",\n          family: \"rel\"\n        };\n        var sizedArrow = parser.callFunction(\"\\\\Big\", [bareArrow], []);\n        var rightLabel = parser.callFunction(\"\\\\\\\\cdright\", [labels[1]], []);\n        var arrowGroup = {\n          type: \"ordgroup\",\n          mode: \"math\",\n          body: [leftLabel, sizedArrow, rightLabel]\n        };\n        return parser.callFunction(\"\\\\\\\\cdparent\", [arrowGroup], []);\n      }\n\n    case \"\\\\\\\\cdlongequal\":\n      return parser.callFunction(\"\\\\\\\\cdlongequal\", [], []);\n\n    case \"\\\\Vert\":\n      {\n        var arrow = {\n          type: \"textord\",\n          text: \"\\\\Vert\",\n          mode: \"math\"\n        };\n        return parser.callFunction(\"\\\\Big\", [arrow], []);\n      }\n\n    default:\n      return {\n        type: \"textord\",\n        text: \" \",\n        mode: \"math\"\n      };\n  }\n}\n\nfunction parseCD(parser) {\n  // Get the array's parse nodes with \\\\ temporarily mapped to \\cr.\n  var parsedRows = [];\n  parser.gullet.beginGroup();\n  parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n  parser.gullet.beginGroup();\n\n  while (true) {\n    // eslint-disable-line no-constant-condition\n    // Get the parse nodes for the next row.\n    parsedRows.push(parser.parseExpression(false, \"\\\\\\\\\"));\n    parser.gullet.endGroup();\n    parser.gullet.beginGroup();\n    var next = parser.fetch().text;\n\n    if (next === \"&\" || next === \"\\\\\\\\\") {\n      parser.consume();\n    } else if (next === \"\\\\end\") {\n      if (parsedRows[parsedRows.length - 1].length === 0) {\n        parsedRows.pop(); // final row ended in \\\\\n      }\n\n      break;\n    } else {\n      throw new ParseError(\"Expected \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n    }\n  }\n\n  var row = [];\n  var body = [row]; // Loop thru the parse nodes. Collect them into cells and arrows.\n\n  for (var i = 0; i < parsedRows.length; i++) {\n    // Start a new row.\n    var rowNodes = parsedRows[i]; // Create the first cell.\n\n    var cell = newCell();\n\n    for (var j = 0; j < rowNodes.length; j++) {\n      if (!isStartOfArrow(rowNodes[j])) {\n        // If a parseNode is not an arrow, it goes into a cell.\n        cell.body.push(rowNodes[j]);\n      } else {\n        // Parse node j is an \"@\", the start of an arrow.\n        // Before starting on the arrow, push the cell into `row`.\n        row.push(cell); // Now collect parseNodes into an arrow.\n        // The character after \"@\" defines the arrow type.\n\n        j += 1;\n        var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them.\n\n        var labels = new Array(2);\n        labels[0] = {\n          type: \"ordgroup\",\n          mode: \"math\",\n          body: []\n        };\n        labels[1] = {\n          type: \"ordgroup\",\n          mode: \"math\",\n          body: []\n        }; // Process the arrow.\n\n        if (\"=|.\".indexOf(arrowChar) > -1) ; else if (\"<>AV\".indexOf(arrowChar) > -1) {\n          // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take\n          // two optional labels. E.g. the right-point arrow syntax is\n          // really:  @>{optional label}>{optional label}>\n          // Collect parseNodes into labels.\n          for (var labelNum = 0; labelNum < 2; labelNum++) {\n            var inLabel = true;\n\n            for (var k = j + 1; k < rowNodes.length; k++) {\n              if (isLabelEnd(rowNodes[k], arrowChar)) {\n                inLabel = false;\n                j = k;\n                break;\n              }\n\n              if (isStartOfArrow(rowNodes[k])) {\n                throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[k]);\n              }\n\n              labels[labelNum].body.push(rowNodes[k]);\n            }\n\n            if (inLabel) {\n              // isLabelEnd never returned a true.\n              throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[j]);\n            }\n          }\n        } else {\n          throw new ParseError(\"Expected one of \\\"<>AV=|.\\\" after @\", rowNodes[j]);\n        } // Now join the arrow to its labels.\n\n\n        var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in  ParseNode<\"styling\">.\n        // This is done to match parseArray() behavior.\n\n        var wrappedArrow = {\n          type: \"styling\",\n          body: [arrow],\n          mode: \"math\",\n          style: \"display\" // CD is always displaystyle.\n\n        };\n        row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that\n        // is not an arrow gets collected into a cell. So create an empty\n        // cell now. It will collect upcoming parseNodes.\n\n        cell = newCell();\n      }\n    }\n\n    if (i % 2 === 0) {\n      // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell\n      // The last cell is not yet pushed into `row`, so:\n      row.push(cell);\n    } else {\n      // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow\n      // Remove the empty cell that was placed at the beginning of `row`.\n      row.shift();\n    }\n\n    row = [];\n    body.push(row);\n  } // End row group\n\n\n  parser.gullet.endGroup(); // End array group defining \\\\\n\n  parser.gullet.endGroup(); // define column separation.\n\n  var cols = new Array(body[0].length).fill({\n    type: \"align\",\n    align: \"c\",\n    pregap: 0.25,\n    // CD package sets \\enskip between columns.\n    postgap: 0.25 // So pre and post each get half an \\enskip, i.e. 0.25em.\n\n  });\n  return {\n    type: \"array\",\n    mode: \"math\",\n    body,\n    arraystretch: 1,\n    addJot: true,\n    rowGaps: [null],\n    cols,\n    colSeparationType: \"CD\",\n    hLinesBeforeRow: new Array(body.length + 1).fill([])\n  };\n} // The functions below are not available for general use.\n// They are here only for internal use by the {CD} environment in placing labels\n// next to vertical arrows.\n// We don't need any such functions for horizontal arrows because we can reuse\n// the functionality that already exists for extensible arrows.\n\ndefineFunction({\n  type: \"cdlabel\",\n  names: [\"\\\\\\\\cdleft\", \"\\\\\\\\cdright\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    return {\n      type: \"cdlabel\",\n      mode: parser.mode,\n      side: funcName.slice(4),\n      label: args[0]\n    };\n  },\n\n  htmlBuilder(group, options) {\n    var newOptions = options.havingStyle(options.style.sup());\n    var label = buildCommon.wrapFragment(buildGroup$1(group.label, newOptions, options), options);\n    label.classes.push(\"cd-label-\" + group.side);\n    label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set\n    // by the arrow height, not by the label.\n\n    label.height = 0;\n    label.depth = 0;\n    return label;\n  },\n\n  mathmlBuilder(group, options) {\n    var label = new mathMLTree.MathNode(\"mrow\", [buildGroup(group.label, options)]);\n    label = new mathMLTree.MathNode(\"mpadded\", [label]);\n    label.setAttribute(\"width\", \"0\");\n\n    if (group.side === \"left\") {\n      label.setAttribute(\"lspace\", \"-1width\");\n    } // We have to guess at vertical alignment. We know the arrow is 1.8em tall,\n    // But we don't know the height or depth of the label.\n\n\n    label.setAttribute(\"voffset\", \"0.7em\");\n    label = new mathMLTree.MathNode(\"mstyle\", [label]);\n    label.setAttribute(\"displaystyle\", \"false\");\n    label.setAttribute(\"scriptlevel\", \"1\");\n    return label;\n  }\n\n});\ndefineFunction({\n  type: \"cdlabelparent\",\n  names: [\"\\\\\\\\cdparent\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(_ref2, args) {\n    var {\n      parser\n    } = _ref2;\n    return {\n      type: \"cdlabelparent\",\n      mode: parser.mode,\n      fragment: args[0]\n    };\n  },\n\n  htmlBuilder(group, options) {\n    // Wrap the vertical arrow and its labels.\n    // The parent gets position: relative. The child gets position: absolute.\n    // So CSS can locate the label correctly.\n    var parent = buildCommon.wrapFragment(buildGroup$1(group.fragment, options), options);\n    parent.classes.push(\"cd-vert-arrow\");\n    return parent;\n  },\n\n  mathmlBuilder(group, options) {\n    return new mathMLTree.MathNode(\"mrow\", [buildGroup(group.fragment, options)]);\n  }\n\n});\n\n// {123} and converts into symbol with code 123.  It is used by the *macro*\n// \\char defined in macros.js.\n\ndefineFunction({\n  type: \"textord\",\n  names: [\"\\\\@char\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    var arg = assertNodeType(args[0], \"ordgroup\");\n    var group = arg.body;\n    var number = \"\";\n\n    for (var i = 0; i < group.length; i++) {\n      var node = assertNodeType(group[i], \"textord\");\n      number += node.text;\n    }\n\n    var code = parseInt(number);\n    var text;\n\n    if (isNaN(code)) {\n      throw new ParseError(\"\\\\@char has non-numeric argument \" + number); // If we drop IE support, the following code could be replaced with\n      // text = String.fromCodePoint(code)\n    } else if (code < 0 || code >= 0x10ffff) {\n      throw new ParseError(\"\\\\@char with invalid code point \" + number);\n    } else if (code <= 0xffff) {\n      text = String.fromCharCode(code);\n    } else {\n      // Astral code point; split into surrogate halves\n      code -= 0x10000;\n      text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00);\n    }\n\n    return {\n      type: \"textord\",\n      mode: parser.mode,\n      text: text\n    };\n  }\n\n});\n\nvar htmlBuilder$8 = (group, options) => {\n  var elements = buildExpression$1(group.body, options.withColor(group.color), false); // \\color isn't supposed to affect the type of the elements it contains.\n  // To accomplish this, we wrap the results in a fragment, so the inner\n  // elements will be able to directly interact with their neighbors. For\n  // example, `\\color{red}{2 +} 3` has the same spacing as `2 + 3`\n\n  return buildCommon.makeFragment(elements);\n};\n\nvar mathmlBuilder$7 = (group, options) => {\n  var inner = buildExpression(group.body, options.withColor(group.color));\n  var node = new mathMLTree.MathNode(\"mstyle\", inner);\n  node.setAttribute(\"mathcolor\", group.color);\n  return node;\n};\n\ndefineFunction({\n  type: \"color\",\n  names: [\"\\\\textcolor\"],\n  props: {\n    numArgs: 2,\n    allowedInText: true,\n    argTypes: [\"color\", \"original\"]\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    var color = assertNodeType(args[0], \"color-token\").color;\n    var body = args[1];\n    return {\n      type: \"color\",\n      mode: parser.mode,\n      color,\n      body: ordargument(body)\n    };\n  },\n\n  htmlBuilder: htmlBuilder$8,\n  mathmlBuilder: mathmlBuilder$7\n});\ndefineFunction({\n  type: \"color\",\n  names: [\"\\\\color\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true,\n    argTypes: [\"color\"]\n  },\n\n  handler(_ref2, args) {\n    var {\n      parser,\n      breakOnTokenText\n    } = _ref2;\n    var color = assertNodeType(args[0], \"color-token\").color; // Set macro \\current@color in current namespace to store the current\n    // color, mimicking the behavior of color.sty.\n    // This is currently used just to correctly color a \\right\n    // that follows a \\color command.\n\n    parser.gullet.macros.set(\"\\\\current@color\", color); // Parse out the implicit body that should be colored.\n\n    var body = parser.parseExpression(true, breakOnTokenText);\n    return {\n      type: \"color\",\n      mode: parser.mode,\n      color,\n      body\n    };\n  },\n\n  htmlBuilder: htmlBuilder$8,\n  mathmlBuilder: mathmlBuilder$7\n});\n\n// Row breaks within tabular environments, and line breaks at top level\n\ndefineFunction({\n  type: \"cr\",\n  names: [\"\\\\\\\\\"],\n  props: {\n    numArgs: 0,\n    numOptionalArgs: 0,\n    allowedInText: true\n  },\n\n  handler(_ref, args, optArgs) {\n    var {\n      parser\n    } = _ref;\n    var size = parser.gullet.future().text === \"[\" ? parser.parseSizeGroup(true) : null;\n    var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior(\"newLineInDisplayMode\", \"In LaTeX, \\\\\\\\ or \\\\newline \" + \"does nothing in display mode\");\n    return {\n      type: \"cr\",\n      mode: parser.mode,\n      newLine,\n      size: size && assertNodeType(size, \"size\").value\n    };\n  },\n\n  // The following builders are called only at the top level,\n  // not within tabular/array environments.\n  htmlBuilder(group, options) {\n    var span = buildCommon.makeSpan([\"mspace\"], [], options);\n\n    if (group.newLine) {\n      span.classes.push(\"newline\");\n\n      if (group.size) {\n        span.style.marginTop = makeEm(calculateSize(group.size, options));\n      }\n    }\n\n    return span;\n  },\n\n  mathmlBuilder(group, options) {\n    var node = new mathMLTree.MathNode(\"mspace\");\n\n    if (group.newLine) {\n      node.setAttribute(\"linebreak\", \"newline\");\n\n      if (group.size) {\n        node.setAttribute(\"height\", makeEm(calculateSize(group.size, options)));\n      }\n    }\n\n    return node;\n  }\n\n});\n\nvar globalMap = {\n  \"\\\\global\": \"\\\\global\",\n  \"\\\\long\": \"\\\\\\\\globallong\",\n  \"\\\\\\\\globallong\": \"\\\\\\\\globallong\",\n  \"\\\\def\": \"\\\\gdef\",\n  \"\\\\gdef\": \"\\\\gdef\",\n  \"\\\\edef\": \"\\\\xdef\",\n  \"\\\\xdef\": \"\\\\xdef\",\n  \"\\\\let\": \"\\\\\\\\globallet\",\n  \"\\\\futurelet\": \"\\\\\\\\globalfuture\"\n};\n\nvar checkControlSequence = tok => {\n  var name = tok.text;\n\n  if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n    throw new ParseError(\"Expected a control sequence\", tok);\n  }\n\n  return name;\n};\n\nvar getRHS = parser => {\n  var tok = parser.gullet.popToken();\n\n  if (tok.text === \"=\") {\n    // consume optional equals\n    tok = parser.gullet.popToken();\n\n    if (tok.text === \" \") {\n      // consume one optional space\n      tok = parser.gullet.popToken();\n    }\n  }\n\n  return tok;\n};\n\nvar letCommand = (parser, name, tok, global) => {\n  var macro = parser.gullet.macros.get(tok.text);\n\n  if (macro == null) {\n    // don't expand it later even if a macro with the same name is defined\n    // e.g., \\let\\foo=\\frac \\def\\frac{\\relax} \\frac12\n    tok.noexpand = true;\n    macro = {\n      tokens: [tok],\n      numArgs: 0,\n      // reproduce the same behavior in expansion\n      unexpandable: !parser.gullet.isExpandable(tok.text)\n    };\n  }\n\n  parser.gullet.macros.set(name, macro, global);\n}; // <assignment> -> <non-macro assignment>|<macro assignment>\n// <non-macro assignment> -> <simple assignment>|\\global<non-macro assignment>\n// <macro assignment> -> <definition>|<prefix><macro assignment>\n// <prefix> -> \\global|\\long|\\outer\n\n\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\global\", \"\\\\long\", \"\\\\\\\\globallong\" // can’t be entered directly\n  ],\n  props: {\n    numArgs: 0,\n    allowedInText: true\n  },\n\n  handler(_ref) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    parser.consumeSpaces();\n    var token = parser.fetch();\n\n    if (globalMap[token.text]) {\n      // KaTeX doesn't have \\par, so ignore \\long\n      if (funcName === \"\\\\global\" || funcName === \"\\\\\\\\globallong\") {\n        token.text = globalMap[token.text];\n      }\n\n      return assertNodeType(parser.parseFunction(), \"internal\");\n    }\n\n    throw new ParseError(\"Invalid token after macro prefix\", token);\n  }\n\n}); // Basic support for macro definitions: \\def, \\gdef, \\edef, \\xdef\n// <definition> -> <def><control sequence><definition text>\n// <def> -> \\def|\\gdef|\\edef|\\xdef\n// <definition text> -> <parameter text><left brace><balanced text><right brace>\n\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\def\", \"\\\\gdef\", \"\\\\edef\", \"\\\\xdef\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    primitive: true\n  },\n\n  handler(_ref2) {\n    var {\n      parser,\n      funcName\n    } = _ref2;\n    var tok = parser.gullet.popToken();\n    var name = tok.text;\n\n    if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n      throw new ParseError(\"Expected a control sequence\", tok);\n    }\n\n    var numArgs = 0;\n    var insert;\n    var delimiters = [[]]; // <parameter text> contains no braces\n\n    while (parser.gullet.future().text !== \"{\") {\n      tok = parser.gullet.popToken();\n\n      if (tok.text === \"#\") {\n        // If the very last character of the <parameter text> is #, so that\n        // this # is immediately followed by {, TeX will behave as if the {\n        // had been inserted at the right end of both the parameter text\n        // and the replacement text.\n        if (parser.gullet.future().text === \"{\") {\n          insert = parser.gullet.future();\n          delimiters[numArgs].push(\"{\");\n          break;\n        } // A parameter, the first appearance of # must be followed by 1,\n        // the next by 2, and so on; up to nine #’s are allowed\n\n\n        tok = parser.gullet.popToken();\n\n        if (!/^[1-9]$/.test(tok.text)) {\n          throw new ParseError(\"Invalid argument number \\\"\" + tok.text + \"\\\"\");\n        }\n\n        if (parseInt(tok.text) !== numArgs + 1) {\n          throw new ParseError(\"Argument number \\\"\" + tok.text + \"\\\" out of order\");\n        }\n\n        numArgs++;\n        delimiters.push([]);\n      } else if (tok.text === \"EOF\") {\n        throw new ParseError(\"Expected a macro definition\");\n      } else {\n        delimiters[numArgs].push(tok.text);\n      }\n    } // replacement text, enclosed in '{' and '}' and properly nested\n\n\n    var {\n      tokens\n    } = parser.gullet.consumeArg();\n\n    if (insert) {\n      tokens.unshift(insert);\n    }\n\n    if (funcName === \"\\\\edef\" || funcName === \"\\\\xdef\") {\n      tokens = parser.gullet.expandTokens(tokens);\n      tokens.reverse(); // to fit in with stack order\n    } // Final arg is the expansion of the macro\n\n\n    parser.gullet.macros.set(name, {\n      tokens,\n      numArgs,\n      delimiters\n    }, funcName === globalMap[funcName]);\n    return {\n      type: \"internal\",\n      mode: parser.mode\n    };\n  }\n\n}); // <simple assignment> -> <let assignment>\n// <let assignment> -> \\futurelet<control sequence><token><token>\n//     | \\let<control sequence><equals><one optional space><token>\n// <equals> -> <optional spaces>|<optional spaces>=\n\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\let\", \"\\\\\\\\globallet\" // can’t be entered directly\n  ],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    primitive: true\n  },\n\n  handler(_ref3) {\n    var {\n      parser,\n      funcName\n    } = _ref3;\n    var name = checkControlSequence(parser.gullet.popToken());\n    parser.gullet.consumeSpaces();\n    var tok = getRHS(parser);\n    letCommand(parser, name, tok, funcName === \"\\\\\\\\globallet\");\n    return {\n      type: \"internal\",\n      mode: parser.mode\n    };\n  }\n\n}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf\n\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\futurelet\", \"\\\\\\\\globalfuture\" // can’t be entered directly\n  ],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    primitive: true\n  },\n\n  handler(_ref4) {\n    var {\n      parser,\n      funcName\n    } = _ref4;\n    var name = checkControlSequence(parser.gullet.popToken());\n    var middle = parser.gullet.popToken();\n    var tok = parser.gullet.popToken();\n    letCommand(parser, name, tok, funcName === \"\\\\\\\\globalfuture\");\n    parser.gullet.pushToken(tok);\n    parser.gullet.pushToken(middle);\n    return {\n      type: \"internal\",\n      mode: parser.mode\n    };\n  }\n\n});\n\n/**\n * This file deals with creating delimiters of various sizes. The TeXbook\n * discusses these routines on page 441-442, in the \"Another subroutine sets box\n * x to a specified variable delimiter\" paragraph.\n *\n * There are three main routines here. `makeSmallDelim` makes a delimiter in the\n * normal font, but in either text, script, or scriptscript style.\n * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,\n * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of\n * smaller pieces that are stacked on top of one another.\n *\n * The functions take a parameter `center`, which determines if the delimiter\n * should be centered around the axis.\n *\n * Then, there are three exposed functions. `sizedDelim` makes a delimiter in\n * one of the given sizes. This is used for things like `\\bigl`.\n * `customSizedDelim` makes a delimiter with a given total height+depth. It is\n * called in places like `\\sqrt`. `leftRightDelim` makes an appropriate\n * delimiter which surrounds an expression of a given height an depth. It is\n * used in `\\left` and `\\right`.\n */\n\n/**\n * Get the metrics for a given symbol and font, after transformation (i.e.\n * after following replacement from symbols.js)\n */\nvar getMetrics = function getMetrics(symbol, font, mode) {\n  var replace = symbols.math[symbol] && symbols.math[symbol].replace;\n  var metrics = getCharacterMetrics(replace || symbol, font, mode);\n\n  if (!metrics) {\n    throw new Error(\"Unsupported symbol \" + symbol + \" and font size \" + font + \".\");\n  }\n\n  return metrics;\n};\n/**\n * Puts a delimiter span in a given style, and adds appropriate height, depth,\n * and maxFontSizes.\n */\n\n\nvar styleWrap = function styleWrap(delim, toStyle, options, classes) {\n  var newOptions = options.havingBaseStyle(toStyle);\n  var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options);\n  var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;\n  span.height *= delimSizeMultiplier;\n  span.depth *= delimSizeMultiplier;\n  span.maxFontSize = newOptions.sizeMultiplier;\n  return span;\n};\n\nvar centerSpan = function centerSpan(span, options, style) {\n  var newOptions = options.havingBaseStyle(style);\n  var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;\n  span.classes.push(\"delimcenter\");\n  span.style.top = makeEm(shift);\n  span.height -= shift;\n  span.depth += shift;\n};\n/**\n * Makes a small delimiter. This is a delimiter that comes in the Main-Regular\n * font, but is restyled to either be in textstyle, scriptstyle, or\n * scriptscriptstyle.\n */\n\n\nvar makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {\n  var text = buildCommon.makeSymbol(delim, \"Main-Regular\", mode, options);\n  var span = styleWrap(text, style, options, classes);\n\n  if (center) {\n    centerSpan(span, options, style);\n  }\n\n  return span;\n};\n/**\n * Builds a symbol in the given font size (note size is an integer)\n */\n\n\nvar mathrmSize = function mathrmSize(value, size, mode, options) {\n  return buildCommon.makeSymbol(value, \"Size\" + size + \"-Regular\", mode, options);\n};\n/**\n * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,\n * Size3, or Size4 fonts. It is always rendered in textstyle.\n */\n\n\nvar makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {\n  var inner = mathrmSize(delim, size, mode, options);\n  var span = styleWrap(buildCommon.makeSpan([\"delimsizing\", \"size\" + size], [inner], options), Style$1.TEXT, options, classes);\n\n  if (center) {\n    centerSpan(span, options, Style$1.TEXT);\n  }\n\n  return span;\n};\n/**\n * Make a span from a font glyph with the given offset and in the given font.\n * This is used in makeStackedDelim to make the stacking pieces for the delimiter.\n */\n\n\nvar makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) {\n  var sizeClass; // Apply the correct CSS class to choose the right font.\n\n  if (font === \"Size1-Regular\") {\n    sizeClass = \"delim-size1\";\n  } else\n    /* if (font === \"Size4-Regular\") */\n    {\n      sizeClass = \"delim-size4\";\n    }\n\n  var corner = buildCommon.makeSpan([\"delimsizinginner\", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element\n  // in the appropriate tag that VList uses.\n\n  return {\n    type: \"elem\",\n    elem: corner\n  };\n};\n\nvar makeInner = function makeInner(ch, height, options) {\n  // Create a span with inline SVG for the inner part of a tall stacked delimiter.\n  var width = fontMetricsData['Size4-Regular'][ch.charCodeAt(0)] ? fontMetricsData['Size4-Regular'][ch.charCodeAt(0)][4] : fontMetricsData['Size1-Regular'][ch.charCodeAt(0)][4];\n  var path = new PathNode(\"inner\", innerPath(ch, Math.round(1000 * height)));\n  var svgNode = new SvgNode([path], {\n    \"width\": makeEm(width),\n    \"height\": makeEm(height),\n    // Override CSS rule `.katex svg { width: 100% }`\n    \"style\": \"width:\" + makeEm(width),\n    \"viewBox\": \"0 0 \" + 1000 * width + \" \" + Math.round(1000 * height),\n    \"preserveAspectRatio\": \"xMinYMin\"\n  });\n  var span = buildCommon.makeSvgSpan([], [svgNode], options);\n  span.height = height;\n  span.style.height = makeEm(height);\n  span.style.width = makeEm(width);\n  return {\n    type: \"elem\",\n    elem: span\n  };\n}; // Helpers for makeStackedDelim\n\n\nvar lapInEms = 0.008;\nvar lap = {\n  type: \"kern\",\n  size: -1 * lapInEms\n};\nvar verts = [\"|\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\vert\"];\nvar doubleVerts = [\"\\\\|\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\Vert\"];\n/**\n * Make a stacked delimiter out of a given delimiter, with the total height at\n * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.\n */\n\nvar makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {\n  // There are four parts, the top, an optional middle, a repeated part, and a\n  // bottom.\n  var top;\n  var middle;\n  var repeat;\n  var bottom;\n  var svgLabel = \"\";\n  var viewBoxWidth = 0;\n  top = repeat = bottom = delim;\n  middle = null; // Also keep track of what font the delimiters are in\n\n  var font = \"Size1-Regular\"; // We set the parts and font based on the symbol. Note that we use\n  // '\\u23d0' instead of '|' and '\\u2016' instead of '\\\\|' for the\n  // repeats of the arrows\n\n  if (delim === \"\\\\uparrow\") {\n    repeat = bottom = \"\\u23d0\";\n  } else if (delim === \"\\\\Uparrow\") {\n    repeat = bottom = \"\\u2016\";\n  } else if (delim === \"\\\\downarrow\") {\n    top = repeat = \"\\u23d0\";\n  } else if (delim === \"\\\\Downarrow\") {\n    top = repeat = \"\\u2016\";\n  } else if (delim === \"\\\\updownarrow\") {\n    top = \"\\\\uparrow\";\n    repeat = \"\\u23d0\";\n    bottom = \"\\\\downarrow\";\n  } else if (delim === \"\\\\Updownarrow\") {\n    top = \"\\\\Uparrow\";\n    repeat = \"\\u2016\";\n    bottom = \"\\\\Downarrow\";\n  } else if (verts.includes(delim)) {\n    repeat = \"\\u2223\";\n    svgLabel = \"vert\";\n    viewBoxWidth = 333;\n  } else if (doubleVerts.includes(delim)) {\n    repeat = \"\\u2225\";\n    svgLabel = \"doublevert\";\n    viewBoxWidth = 556;\n  } else if (delim === \"[\" || delim === \"\\\\lbrack\") {\n    top = \"\\u23a1\";\n    repeat = \"\\u23a2\";\n    bottom = \"\\u23a3\";\n    font = \"Size4-Regular\";\n    svgLabel = \"lbrack\";\n    viewBoxWidth = 667;\n  } else if (delim === \"]\" || delim === \"\\\\rbrack\") {\n    top = \"\\u23a4\";\n    repeat = \"\\u23a5\";\n    bottom = \"\\u23a6\";\n    font = \"Size4-Regular\";\n    svgLabel = \"rbrack\";\n    viewBoxWidth = 667;\n  } else if (delim === \"\\\\lfloor\" || delim === \"\\u230a\") {\n    repeat = top = \"\\u23a2\";\n    bottom = \"\\u23a3\";\n    font = \"Size4-Regular\";\n    svgLabel = \"lfloor\";\n    viewBoxWidth = 667;\n  } else if (delim === \"\\\\lceil\" || delim === \"\\u2308\") {\n    top = \"\\u23a1\";\n    repeat = bottom = \"\\u23a2\";\n    font = \"Size4-Regular\";\n    svgLabel = \"lceil\";\n    viewBoxWidth = 667;\n  } else if (delim === \"\\\\rfloor\" || delim === \"\\u230b\") {\n    repeat = top = \"\\u23a5\";\n    bottom = \"\\u23a6\";\n    font = \"Size4-Regular\";\n    svgLabel = \"rfloor\";\n    viewBoxWidth = 667;\n  } else if (delim === \"\\\\rceil\" || delim === \"\\u2309\") {\n    top = \"\\u23a4\";\n    repeat = bottom = \"\\u23a5\";\n    font = \"Size4-Regular\";\n    svgLabel = \"rceil\";\n    viewBoxWidth = 667;\n  } else if (delim === \"(\" || delim === \"\\\\lparen\") {\n    top = \"\\u239b\";\n    repeat = \"\\u239c\";\n    bottom = \"\\u239d\";\n    font = \"Size4-Regular\";\n    svgLabel = \"lparen\";\n    viewBoxWidth = 875;\n  } else if (delim === \")\" || delim === \"\\\\rparen\") {\n    top = \"\\u239e\";\n    repeat = \"\\u239f\";\n    bottom = \"\\u23a0\";\n    font = \"Size4-Regular\";\n    svgLabel = \"rparen\";\n    viewBoxWidth = 875;\n  } else if (delim === \"\\\\{\" || delim === \"\\\\lbrace\") {\n    top = \"\\u23a7\";\n    middle = \"\\u23a8\";\n    bottom = \"\\u23a9\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\}\" || delim === \"\\\\rbrace\") {\n    top = \"\\u23ab\";\n    middle = \"\\u23ac\";\n    bottom = \"\\u23ad\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\lgroup\" || delim === \"\\u27ee\") {\n    top = \"\\u23a7\";\n    bottom = \"\\u23a9\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\rgroup\" || delim === \"\\u27ef\") {\n    top = \"\\u23ab\";\n    bottom = \"\\u23ad\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\lmoustache\" || delim === \"\\u23b0\") {\n    top = \"\\u23a7\";\n    bottom = \"\\u23ad\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\rmoustache\" || delim === \"\\u23b1\") {\n    top = \"\\u23ab\";\n    bottom = \"\\u23a9\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } // Get the metrics of the four sections\n\n\n  var topMetrics = getMetrics(top, font, mode);\n  var topHeightTotal = topMetrics.height + topMetrics.depth;\n  var repeatMetrics = getMetrics(repeat, font, mode);\n  var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;\n  var bottomMetrics = getMetrics(bottom, font, mode);\n  var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;\n  var middleHeightTotal = 0;\n  var middleFactor = 1;\n\n  if (middle !== null) {\n    var middleMetrics = getMetrics(middle, font, mode);\n    middleHeightTotal = middleMetrics.height + middleMetrics.depth;\n    middleFactor = 2; // repeat symmetrically above and below middle\n  } // Calculate the minimal height that the delimiter can have.\n  // It is at least the size of the top, bottom, and optional middle combined.\n\n\n  var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need\n\n  var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols\n\n  var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note\n  // that in this context, \"center\" means that the delimiter should be\n  // centered around the axis in the current style, while normally it is\n  // centered around the axis in textstyle.\n\n  var axisHeight = options.fontMetrics().axisHeight;\n\n  if (center) {\n    axisHeight *= options.sizeMultiplier;\n  } // Calculate the depth\n\n\n  var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist\n  // Keep a list of the pieces of the stacked delimiter\n\n  var stack = [];\n\n  if (svgLabel.length > 0) {\n    // Instead of stacking glyphs, create a single SVG.\n    // This evades browser problems with imprecise positioning of spans.\n    var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal;\n    var viewBoxHeight = Math.round(realHeightTotal * 1000);\n    var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000));\n    var path = new PathNode(svgLabel, pathStr);\n    var width = (viewBoxWidth / 1000).toFixed(3) + \"em\";\n    var height = (viewBoxHeight / 1000).toFixed(3) + \"em\";\n    var svg = new SvgNode([path], {\n      \"width\": width,\n      \"height\": height,\n      \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight\n    });\n    var wrapper = buildCommon.makeSvgSpan([], [svg], options);\n    wrapper.height = viewBoxHeight / 1000;\n    wrapper.style.width = width;\n    wrapper.style.height = height;\n    stack.push({\n      type: \"elem\",\n      elem: wrapper\n    });\n  } else {\n    // Stack glyphs\n    // Start by adding the bottom symbol\n    stack.push(makeGlyphSpan(bottom, font, mode));\n    stack.push(lap); // overlap\n\n    if (middle === null) {\n      // The middle section will be an SVG. Make it an extra 0.016em tall.\n      // We'll overlap by 0.008em at top and bottom.\n      var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms;\n      stack.push(makeInner(repeat, innerHeight, options));\n    } else {\n      // When there is a middle bit, we need the middle part and two repeated\n      // sections\n      var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms;\n\n      stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace.\n\n      stack.push(lap);\n      stack.push(makeGlyphSpan(middle, font, mode));\n      stack.push(lap);\n      stack.push(makeInner(repeat, _innerHeight, options));\n    } // Add the top symbol\n\n\n    stack.push(lap);\n    stack.push(makeGlyphSpan(top, font, mode));\n  } // Finally, build the vlist\n\n\n  var newOptions = options.havingBaseStyle(Style$1.TEXT);\n  var inner = buildCommon.makeVList({\n    positionType: \"bottom\",\n    positionData: depth,\n    children: stack\n  }, newOptions);\n  return styleWrap(buildCommon.makeSpan([\"delimsizing\", \"mult\"], [inner], newOptions), Style$1.TEXT, options, classes);\n}; // All surds have 0.08em padding above the vinculum inside the SVG.\n// That keeps browser span height rounding error from pinching the line.\n\n\nvar vbPad = 80; // padding above the surd, measured inside the viewBox.\n\nvar emPad = 0.08; // padding, in ems, measured in the document.\n\nvar sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraVinculum, options) {\n  var path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight);\n  var pathNode = new PathNode(sqrtName, path);\n  var svg = new SvgNode([pathNode], {\n    // Note: 1000:1 ratio of viewBox to document em width.\n    \"width\": \"400em\",\n    \"height\": makeEm(height),\n    \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n    \"preserveAspectRatio\": \"xMinYMin slice\"\n  });\n  return buildCommon.makeSvgSpan([\"hide-tail\"], [svg], options);\n};\n/**\n * Make a sqrt image of the given height,\n */\n\n\nvar makeSqrtImage = function makeSqrtImage(height, options) {\n  // Define a newOptions that removes the effect of size changes such as \\Huge.\n  // We don't pick different a height surd for \\Huge. For it, we scale up.\n  var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds.\n\n  var delim = traverseSequence(\"\\\\surd\", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);\n  var sizeMultiplier = newOptions.sizeMultiplier; // default\n  // The standard sqrt SVGs each have a 0.04em thick vinculum.\n  // If Settings.minRuleThickness is larger than that, we add extraVinculum.\n\n  var extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.\n\n  var span;\n  var spanHeight = 0;\n  var texHeight = 0;\n  var viewBoxHeight = 0;\n  var advanceWidth; // We create viewBoxes with 80 units of \"padding\" above each surd.\n  // Then browser rounding error on the parent span height will not\n  // encroach on the ink of the vinculum. But that padding is not\n  // included in the TeX-like `height` used for calculation of\n  // vertical alignment. So texHeight = span.height < span.style.height.\n\n  if (delim.type === \"small\") {\n    // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.\n    // 1000 unit normal glyph height.\n    viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad;\n\n    if (height < 1.0) {\n      sizeMultiplier = 1.0; // mimic a \\textfont radical\n    } else if (height < 1.4) {\n      sizeMultiplier = 0.7; // mimic a \\scriptfont radical\n    }\n\n    spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier;\n    texHeight = (1.00 + extraVinculum) / sizeMultiplier;\n    span = sqrtSvg(\"sqrtMain\", spanHeight, viewBoxHeight, extraVinculum, options);\n    span.style.minWidth = \"0.853em\";\n    advanceWidth = 0.833 / sizeMultiplier; // from the font.\n  } else if (delim.type === \"large\") {\n    // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.\n    viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];\n    texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier;\n    spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier;\n    span = sqrtSvg(\"sqrtSize\" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options);\n    span.style.minWidth = \"1.02em\";\n    advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.\n  } else {\n    // Tall sqrt. In TeX, this would be stacked using multiple glyphs.\n    // We'll use a single SVG to accomplish the same thing.\n    spanHeight = height + extraVinculum + emPad;\n    texHeight = height + extraVinculum;\n    viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad;\n    span = sqrtSvg(\"sqrtTall\", spanHeight, viewBoxHeight, extraVinculum, options);\n    span.style.minWidth = \"0.742em\";\n    advanceWidth = 1.056;\n  }\n\n  span.height = texHeight;\n  span.style.height = makeEm(spanHeight);\n  return {\n    span,\n    advanceWidth,\n    // Calculate the actual line width.\n    // This actually should depend on the chosen font -- e.g. \\boldmath\n    // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and\n    // have thicker rules.\n    ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier\n  };\n}; // There are three kinds of delimiters, delimiters that stack when they become\n// too large\n\n\nvar stackLargeDelimiters = [\"(\", \"\\\\lparen\", \")\", \"\\\\rparen\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\", \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\", \"\\\\lfloor\", \"\\\\rfloor\", \"\\u230a\", \"\\u230b\", \"\\\\lceil\", \"\\\\rceil\", \"\\u2308\", \"\\u2309\", \"\\\\surd\"]; // delimiters that always stack\n\nvar stackAlwaysDelimiters = [\"\\\\uparrow\", \"\\\\downarrow\", \"\\\\updownarrow\", \"\\\\Uparrow\", \"\\\\Downarrow\", \"\\\\Updownarrow\", \"|\", \"\\\\|\", \"\\\\vert\", \"\\\\Vert\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\lgroup\", \"\\\\rgroup\", \"\\u27ee\", \"\\u27ef\", \"\\\\lmoustache\", \"\\\\rmoustache\", \"\\u23b0\", \"\\u23b1\"]; // and delimiters that never stack\n\nvar stackNeverDelimiters = [\"<\", \">\", \"\\\\langle\", \"\\\\rangle\", \"/\", \"\\\\backslash\", \"\\\\lt\", \"\\\\gt\"]; // Metrics of the different sizes. Found by looking at TeX's output of\n// $\\bigl| // \\Bigl| \\biggl| \\Biggl| \\showlists$\n// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.\n\nvar sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];\n/**\n * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.\n */\n\nvar makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) {\n  // < and > turn into \\langle and \\rangle in delimiters\n  if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"\\u27e8\") {\n    delim = \"\\\\langle\";\n  } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"\\u27e9\") {\n    delim = \"\\\\rangle\";\n  } // Sized delimiters are never centered.\n\n\n  if (stackLargeDelimiters.includes(delim) || stackNeverDelimiters.includes(delim)) {\n    return makeLargeDelim(delim, size, false, options, mode, classes);\n  } else if (stackAlwaysDelimiters.includes(delim)) {\n    return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);\n  } else {\n    throw new ParseError(\"Illegal delimiter: '\" + delim + \"'\");\n  }\n};\n/**\n * There are three different sequences of delimiter sizes that the delimiters\n * follow depending on the kind of delimiter. This is used when creating custom\n * sized delimiters to decide whether to create a small, large, or stacked\n * delimiter.\n *\n * In real TeX, these sequences aren't explicitly defined, but are instead\n * defined inside the font metrics. Since there are only three sequences that\n * are possible for the delimiters that TeX defines, it is easier to just encode\n * them explicitly here.\n */\n\n\n// Delimiters that never stack try small delimiters and large delimiters only\nvar stackNeverDelimiterSequence = [{\n  type: \"small\",\n  style: Style$1.SCRIPTSCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.SCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.TEXT\n}, {\n  type: \"large\",\n  size: 1\n}, {\n  type: \"large\",\n  size: 2\n}, {\n  type: \"large\",\n  size: 3\n}, {\n  type: \"large\",\n  size: 4\n}]; // Delimiters that always stack try the small delimiters first, then stack\n\nvar stackAlwaysDelimiterSequence = [{\n  type: \"small\",\n  style: Style$1.SCRIPTSCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.SCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.TEXT\n}, {\n  type: \"stack\"\n}]; // Delimiters that stack when large try the small and then large delimiters, and\n// stack afterwards\n\nvar stackLargeDelimiterSequence = [{\n  type: \"small\",\n  style: Style$1.SCRIPTSCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.SCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.TEXT\n}, {\n  type: \"large\",\n  size: 1\n}, {\n  type: \"large\",\n  size: 2\n}, {\n  type: \"large\",\n  size: 3\n}, {\n  type: \"large\",\n  size: 4\n}, {\n  type: \"stack\"\n}];\n/**\n * Get the font used in a delimiter based on what kind of delimiter it is.\n * TODO(#963) Use more specific font family return type once that is introduced.\n */\n\nvar delimTypeToFont = function delimTypeToFont(type) {\n  if (type.type === \"small\") {\n    return \"Main-Regular\";\n  } else if (type.type === \"large\") {\n    return \"Size\" + type.size + \"-Regular\";\n  } else if (type.type === \"stack\") {\n    return \"Size4-Regular\";\n  } else {\n    throw new Error(\"Add support for delim type '\" + type.type + \"' here.\");\n  }\n};\n/**\n * Traverse a sequence of types of delimiters to decide what kind of delimiter\n * should be used to create a delimiter of the given height+depth.\n */\n\n\nvar traverseSequence = function traverseSequence(delim, height, sequence, options) {\n  // Here, we choose the index we should start at in the sequences. In smaller\n  // sizes (which correspond to larger numbers in style.size) we start earlier\n  // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts\n  // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2\n  var start = Math.min(2, 3 - options.style.size);\n\n  for (var i = start; i < sequence.length; i++) {\n    if (sequence[i].type === \"stack\") {\n      // This is always the last delimiter, so we just break the loop now.\n      break;\n    }\n\n    var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), \"math\");\n    var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we\n    // account for the style change size.\n\n    if (sequence[i].type === \"small\") {\n      var newOptions = options.havingBaseStyle(sequence[i].style);\n      heightDepth *= newOptions.sizeMultiplier;\n    } // Check if the delimiter at this size works for the given height.\n\n\n    if (heightDepth > height) {\n      return sequence[i];\n    }\n  } // If we reached the end of the sequence, return the last sequence element.\n\n\n  return sequence[sequence.length - 1];\n};\n/**\n * Make a delimiter of a given height+depth, with optional centering. Here, we\n * traverse the sequences, and create a delimiter that the sequence tells us to.\n */\n\n\nvar makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {\n  if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"\\u27e8\") {\n    delim = \"\\\\langle\";\n  } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"\\u27e9\") {\n    delim = \"\\\\rangle\";\n  } // Decide what sequence to use\n\n\n  var sequence;\n\n  if (stackNeverDelimiters.includes(delim)) {\n    sequence = stackNeverDelimiterSequence;\n  } else if (stackLargeDelimiters.includes(delim)) {\n    sequence = stackLargeDelimiterSequence;\n  } else {\n    sequence = stackAlwaysDelimiterSequence;\n  } // Look through the sequence\n\n\n  var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs.\n  // Depending on the sequence element we decided on, call the\n  // appropriate function.\n\n  if (delimType.type === \"small\") {\n    return makeSmallDelim(delim, delimType.style, center, options, mode, classes);\n  } else if (delimType.type === \"large\") {\n    return makeLargeDelim(delim, delimType.size, center, options, mode, classes);\n  } else\n    /* if (delimType.type === \"stack\") */\n    {\n      return makeStackedDelim(delim, height, center, options, mode, classes);\n    }\n};\n/**\n * Make a delimiter for use with `\\left` and `\\right`, given a height and depth\n * of an expression that the delimiters surround.\n */\n\n\nvar makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {\n  // We always center \\left/\\right delimiters, so the axis is always shifted\n  var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right\n\n  var delimiterFactor = 901;\n  var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;\n  var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);\n  var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are\n  // 65536 per pt, or 655360 per em. So, the division here truncates in\n  // TeX but doesn't here, producing different results. If we wanted to\n  // exactly match TeX's calculation, we could do\n  //   Math.floor(655360 * maxDistFromAxis / 500) *\n  //    delimiterFactor / 655360\n  // (To see the difference, compare\n  //    x^{x^{\\left(\\rule{0.1em}{0.68em}\\right)}}\n  // in TeX and KaTeX)\n  maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total\n  // height\n\n  return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);\n};\n\nvar delimiter = {\n  sqrtImage: makeSqrtImage,\n  sizedDelim: makeSizedDelim,\n  sizeToMaxHeight: sizeToMaxHeight,\n  customSizedDelim: makeCustomSizedDelim,\n  leftRightDelim: makeLeftRightDelim\n};\n\n// Extra data needed for the delimiter handler down below\nvar delimiterSizes = {\n  \"\\\\bigl\": {\n    mclass: \"mopen\",\n    size: 1\n  },\n  \"\\\\Bigl\": {\n    mclass: \"mopen\",\n    size: 2\n  },\n  \"\\\\biggl\": {\n    mclass: \"mopen\",\n    size: 3\n  },\n  \"\\\\Biggl\": {\n    mclass: \"mopen\",\n    size: 4\n  },\n  \"\\\\bigr\": {\n    mclass: \"mclose\",\n    size: 1\n  },\n  \"\\\\Bigr\": {\n    mclass: \"mclose\",\n    size: 2\n  },\n  \"\\\\biggr\": {\n    mclass: \"mclose\",\n    size: 3\n  },\n  \"\\\\Biggr\": {\n    mclass: \"mclose\",\n    size: 4\n  },\n  \"\\\\bigm\": {\n    mclass: \"mrel\",\n    size: 1\n  },\n  \"\\\\Bigm\": {\n    mclass: \"mrel\",\n    size: 2\n  },\n  \"\\\\biggm\": {\n    mclass: \"mrel\",\n    size: 3\n  },\n  \"\\\\Biggm\": {\n    mclass: \"mrel\",\n    size: 4\n  },\n  \"\\\\big\": {\n    mclass: \"mord\",\n    size: 1\n  },\n  \"\\\\Big\": {\n    mclass: \"mord\",\n    size: 2\n  },\n  \"\\\\bigg\": {\n    mclass: \"mord\",\n    size: 3\n  },\n  \"\\\\Bigg\": {\n    mclass: \"mord\",\n    size: 4\n  }\n};\nvar delimiters = [\"(\", \"\\\\lparen\", \")\", \"\\\\rparen\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\", \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\", \"\\\\lfloor\", \"\\\\rfloor\", \"\\u230a\", \"\\u230b\", \"\\\\lceil\", \"\\\\rceil\", \"\\u2308\", \"\\u2309\", \"<\", \">\", \"\\\\langle\", \"\\u27e8\", \"\\\\rangle\", \"\\u27e9\", \"\\\\lt\", \"\\\\gt\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\lgroup\", \"\\\\rgroup\", \"\\u27ee\", \"\\u27ef\", \"\\\\lmoustache\", \"\\\\rmoustache\", \"\\u23b0\", \"\\u23b1\", \"/\", \"\\\\backslash\", \"|\", \"\\\\vert\", \"\\\\|\", \"\\\\Vert\", \"\\\\uparrow\", \"\\\\Uparrow\", \"\\\\downarrow\", \"\\\\Downarrow\", \"\\\\updownarrow\", \"\\\\Updownarrow\", \".\"];\n\n// Delimiter functions\nfunction checkDelimiter(delim, context) {\n  var symDelim = checkSymbolNodeType(delim);\n\n  if (symDelim && delimiters.includes(symDelim.text)) {\n    return symDelim;\n  } else if (symDelim) {\n    throw new ParseError(\"Invalid delimiter '\" + symDelim.text + \"' after '\" + context.funcName + \"'\", delim);\n  } else {\n    throw new ParseError(\"Invalid delimiter type '\" + delim.type + \"'\", delim);\n  }\n}\n\ndefineFunction({\n  type: \"delimsizing\",\n  names: [\"\\\\bigl\", \"\\\\Bigl\", \"\\\\biggl\", \"\\\\Biggl\", \"\\\\bigr\", \"\\\\Bigr\", \"\\\\biggr\", \"\\\\Biggr\", \"\\\\bigm\", \"\\\\Bigm\", \"\\\\biggm\", \"\\\\Biggm\", \"\\\\big\", \"\\\\Big\", \"\\\\bigg\", \"\\\\Bigg\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"primitive\"]\n  },\n  handler: (context, args) => {\n    var delim = checkDelimiter(args[0], context);\n    return {\n      type: \"delimsizing\",\n      mode: context.parser.mode,\n      size: delimiterSizes[context.funcName].size,\n      mclass: delimiterSizes[context.funcName].mclass,\n      delim: delim.text\n    };\n  },\n  htmlBuilder: (group, options) => {\n    if (group.delim === \".\") {\n      // Empty delimiters still count as elements, even though they don't\n      // show anything.\n      return buildCommon.makeSpan([group.mclass]);\n    } // Use delimiter.sizedDelim to generate the delimiter.\n\n\n    return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]);\n  },\n  mathmlBuilder: group => {\n    var children = [];\n\n    if (group.delim !== \".\") {\n      children.push(makeText(group.delim, group.mode));\n    }\n\n    var node = new mathMLTree.MathNode(\"mo\", children);\n\n    if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n      // Only some of the delimsizing functions act as fences, and they\n      // return \"mopen\" or \"mclose\" mclass.\n      node.setAttribute(\"fence\", \"true\");\n    } else {\n      // Explicitly disable fencing if it's not a fence, to override the\n      // defaults.\n      node.setAttribute(\"fence\", \"false\");\n    }\n\n    node.setAttribute(\"stretchy\", \"true\");\n    var size = makeEm(delimiter.sizeToMaxHeight[group.size]);\n    node.setAttribute(\"minsize\", size);\n    node.setAttribute(\"maxsize\", size);\n    return node;\n  }\n});\n\nfunction assertParsed(group) {\n  if (!group.body) {\n    throw new Error(\"Bug: The leftright ParseNode wasn't fully parsed.\");\n  }\n}\n\ndefineFunction({\n  type: \"leftright-right\",\n  names: [\"\\\\right\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler: (context, args) => {\n    // \\left case below triggers parsing of \\right in\n    //   `const right = parser.parseFunction();`\n    // uses this return value.\n    var color = context.parser.gullet.macros.get(\"\\\\current@color\");\n\n    if (color && typeof color !== \"string\") {\n      throw new ParseError(\"\\\\current@color set to non-string in \\\\right\");\n    }\n\n    return {\n      type: \"leftright-right\",\n      mode: context.parser.mode,\n      delim: checkDelimiter(args[0], context).text,\n      color // undefined if not set via \\color\n\n    };\n  }\n});\ndefineFunction({\n  type: \"leftright\",\n  names: [\"\\\\left\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler: (context, args) => {\n    var delim = checkDelimiter(args[0], context);\n    var parser = context.parser; // Parse out the implicit body\n\n    ++parser.leftrightDepth; // parseExpression stops before '\\\\right'\n\n    var body = parser.parseExpression(false);\n    --parser.leftrightDepth; // Check the next token\n\n    parser.expect(\"\\\\right\", false);\n    var right = assertNodeType(parser.parseFunction(), \"leftright-right\");\n    return {\n      type: \"leftright\",\n      mode: parser.mode,\n      body,\n      left: delim.text,\n      right: right.delim,\n      rightColor: right.color\n    };\n  },\n  htmlBuilder: (group, options) => {\n    assertParsed(group); // Build the inner expression\n\n    var inner = buildExpression$1(group.body, options, true, [\"mopen\", \"mclose\"]);\n    var innerHeight = 0;\n    var innerDepth = 0;\n    var hadMiddle = false; // Calculate its height and depth\n\n    for (var i = 0; i < inner.length; i++) {\n      // Property `isMiddle` not defined on `span`. See comment in\n      // \"middle\"'s htmlBuilder.\n      // $FlowFixMe\n      if (inner[i].isMiddle) {\n        hadMiddle = true;\n      } else {\n        innerHeight = Math.max(inner[i].height, innerHeight);\n        innerDepth = Math.max(inner[i].depth, innerDepth);\n      }\n    } // The size of delimiters is the same, regardless of what style we are\n    // in. Thus, to correctly calculate the size of delimiter we need around\n    // a group, we scale down the inner size based on the size.\n\n\n    innerHeight *= options.sizeMultiplier;\n    innerDepth *= options.sizeMultiplier;\n    var leftDelim;\n\n    if (group.left === \".\") {\n      // Empty delimiters in \\left and \\right make null delimiter spaces.\n      leftDelim = makeNullDelimiter(options, [\"mopen\"]);\n    } else {\n      // Otherwise, use leftRightDelim to generate the correct sized\n      // delimiter.\n      leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, [\"mopen\"]);\n    } // Add it to the beginning of the expression\n\n\n    inner.unshift(leftDelim); // Handle middle delimiters\n\n    if (hadMiddle) {\n      for (var _i = 1; _i < inner.length; _i++) {\n        var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in\n        // \"middle\"'s htmlBuilder.\n        // $FlowFixMe\n\n        var isMiddle = middleDelim.isMiddle;\n\n        if (isMiddle) {\n          // Apply the options that were active when \\middle was called\n          inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);\n        }\n      }\n    }\n\n    var rightDelim; // Same for the right delimiter, but using color specified by \\color\n\n    if (group.right === \".\") {\n      rightDelim = makeNullDelimiter(options, [\"mclose\"]);\n    } else {\n      var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;\n      rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, [\"mclose\"]);\n    } // Add it to the end of the expression.\n\n\n    inner.push(rightDelim);\n    return buildCommon.makeSpan([\"minner\"], inner, options);\n  },\n  mathmlBuilder: (group, options) => {\n    assertParsed(group);\n    var inner = buildExpression(group.body, options);\n\n    if (group.left !== \".\") {\n      var leftNode = new mathMLTree.MathNode(\"mo\", [makeText(group.left, group.mode)]);\n      leftNode.setAttribute(\"fence\", \"true\");\n      inner.unshift(leftNode);\n    }\n\n    if (group.right !== \".\") {\n      var rightNode = new mathMLTree.MathNode(\"mo\", [makeText(group.right, group.mode)]);\n      rightNode.setAttribute(\"fence\", \"true\");\n\n      if (group.rightColor) {\n        rightNode.setAttribute(\"mathcolor\", group.rightColor);\n      }\n\n      inner.push(rightNode);\n    }\n\n    return makeRow(inner);\n  }\n});\ndefineFunction({\n  type: \"middle\",\n  names: [\"\\\\middle\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler: (context, args) => {\n    var delim = checkDelimiter(args[0], context);\n\n    if (!context.parser.leftrightDepth) {\n      throw new ParseError(\"\\\\middle without preceding \\\\left\", delim);\n    }\n\n    return {\n      type: \"middle\",\n      mode: context.parser.mode,\n      delim: delim.text\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var middleDelim;\n\n    if (group.delim === \".\") {\n      middleDelim = makeNullDelimiter(options, []);\n    } else {\n      middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []);\n      var isMiddle = {\n        delim: group.delim,\n        options\n      }; // Property `isMiddle` not defined on `span`. It is only used in\n      // this file above.\n      // TODO: Fix this violation of the `span` type and possibly rename\n      // things since `isMiddle` sounds like a boolean, but is a struct.\n      // $FlowFixMe\n\n      middleDelim.isMiddle = isMiddle;\n    }\n\n    return middleDelim;\n  },\n  mathmlBuilder: (group, options) => {\n    // A Firefox \\middle will stretch a character vertically only if it\n    // is in the fence part of the operator dictionary at:\n    // https://www.w3.org/TR/MathML3/appendixc.html.\n    // So we need to avoid U+2223 and use plain \"|\" instead.\n    var textNode = group.delim === \"\\\\vert\" || group.delim === \"|\" ? makeText(\"|\", \"text\") : makeText(group.delim, group.mode);\n    var middleNode = new mathMLTree.MathNode(\"mo\", [textNode]);\n    middleNode.setAttribute(\"fence\", \"true\"); // MathML gives 5/18em spacing to each <mo> element.\n    // \\middle should get delimiter spacing instead.\n\n    middleNode.setAttribute(\"lspace\", \"0.05em\");\n    middleNode.setAttribute(\"rspace\", \"0.05em\");\n    return middleNode;\n  }\n});\n\nvar htmlBuilder$7 = (group, options) => {\n  // \\cancel, \\bcancel, \\xcancel, \\sout, \\fbox, \\colorbox, \\fcolorbox, \\phase\n  // Some groups can return document fragments.  Handle those by wrapping\n  // them in a span.\n  var inner = buildCommon.wrapFragment(buildGroup$1(group.body, options), options);\n  var label = group.label.slice(1);\n  var scale = options.sizeMultiplier;\n  var img;\n  var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different\n  // depending on whether the subject is wider than it is tall, or vice versa.\n  // We don't know the width of a group, so as a proxy, we test if\n  // the subject is a single character. This captures most of the\n  // subjects that should get the \"tall\" treatment.\n\n  var isSingleChar = utils.isCharacterBox(group.body);\n\n  if (label === \"sout\") {\n    img = buildCommon.makeSpan([\"stretchy\", \"sout\"]);\n    img.height = options.fontMetrics().defaultRuleThickness / scale;\n    imgShift = -0.5 * options.fontMetrics().xHeight;\n  } else if (label === \"phase\") {\n    // Set a couple of dimensions from the steinmetz package.\n    var lineWeight = calculateSize({\n      number: 0.6,\n      unit: \"pt\"\n    }, options);\n    var clearance = calculateSize({\n      number: 0.35,\n      unit: \"ex\"\n    }, options); // Prevent size changes like \\Huge from affecting line thickness\n\n    var newOptions = options.havingBaseSizing();\n    scale = scale / newOptions.sizeMultiplier;\n    var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle.\n\n    inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG\n\n    var viewBoxHeight = Math.floor(1000 * angleHeight * scale);\n    var path = phasePath(viewBoxHeight);\n    var svgNode = new SvgNode([new PathNode(\"phase\", path)], {\n      \"width\": \"400em\",\n      \"height\": makeEm(viewBoxHeight / 1000),\n      \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n      \"preserveAspectRatio\": \"xMinYMin slice\"\n    }); // Wrap it in a span with overflow: hidden.\n\n    img = buildCommon.makeSvgSpan([\"hide-tail\"], [svgNode], options);\n    img.style.height = makeEm(angleHeight);\n    imgShift = inner.depth + lineWeight + clearance;\n  } else {\n    // Add horizontal padding\n    if (/cancel/.test(label)) {\n      if (!isSingleChar) {\n        inner.classes.push(\"cancel-pad\");\n      }\n    } else if (label === \"angl\") {\n      inner.classes.push(\"anglpad\");\n    } else {\n      inner.classes.push(\"boxpad\");\n    } // Add vertical padding\n\n\n    var topPad = 0;\n    var bottomPad = 0;\n    var ruleThickness = 0; // ref: cancel package: \\advance\\totalheight2\\p@ % \"+2\"\n\n    if (/box/.test(label)) {\n      ruleThickness = Math.max(options.fontMetrics().fboxrule, // default\n      options.minRuleThickness // User override.\n      );\n      topPad = options.fontMetrics().fboxsep + (label === \"colorbox\" ? 0 : ruleThickness);\n      bottomPad = topPad;\n    } else if (label === \"angl\") {\n      ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n      topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself.\n\n      bottomPad = Math.max(0, 0.25 - inner.depth);\n    } else {\n      topPad = isSingleChar ? 0.2 : 0;\n      bottomPad = topPad;\n    }\n\n    img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options);\n\n    if (/fbox|boxed|fcolorbox/.test(label)) {\n      img.style.borderStyle = \"solid\";\n      img.style.borderWidth = makeEm(ruleThickness);\n    } else if (label === \"angl\" && ruleThickness !== 0.049) {\n      img.style.borderTopWidth = makeEm(ruleThickness);\n      img.style.borderRightWidth = makeEm(ruleThickness);\n    }\n\n    imgShift = inner.depth + bottomPad;\n\n    if (group.backgroundColor) {\n      img.style.backgroundColor = group.backgroundColor;\n\n      if (group.borderColor) {\n        img.style.borderColor = group.borderColor;\n      }\n    }\n  }\n\n  var vlist;\n\n  if (group.backgroundColor) {\n    vlist = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: [// Put the color background behind inner;\n      {\n        type: \"elem\",\n        elem: img,\n        shift: imgShift\n      }, {\n        type: \"elem\",\n        elem: inner,\n        shift: 0\n      }]\n    }, options);\n  } else {\n    var classes = /cancel|phase/.test(label) ? [\"svg-align\"] : [];\n    vlist = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: [// Write the \\cancel stroke on top of inner.\n      {\n        type: \"elem\",\n        elem: inner,\n        shift: 0\n      }, {\n        type: \"elem\",\n        elem: img,\n        shift: imgShift,\n        wrapperClasses: classes\n      }]\n    }, options);\n  }\n\n  if (/cancel/.test(label)) {\n    // The cancel package documentation says that cancel lines add their height\n    // to the expression, but tests show that isn't how it actually works.\n    vlist.height = inner.height;\n    vlist.depth = inner.depth;\n  }\n\n  if (/cancel/.test(label) && !isSingleChar) {\n    // cancel does not create horiz space for its line extension.\n    return buildCommon.makeSpan([\"mord\", \"cancel-lap\"], [vlist], options);\n  } else {\n    return buildCommon.makeSpan([\"mord\"], [vlist], options);\n  }\n};\n\nvar mathmlBuilder$6 = (group, options) => {\n  var fboxsep = 0;\n  var node = new mathMLTree.MathNode(group.label.indexOf(\"colorbox\") > -1 ? \"mpadded\" : \"menclose\", [buildGroup(group.body, options)]);\n\n  switch (group.label) {\n    case \"\\\\cancel\":\n      node.setAttribute(\"notation\", \"updiagonalstrike\");\n      break;\n\n    case \"\\\\bcancel\":\n      node.setAttribute(\"notation\", \"downdiagonalstrike\");\n      break;\n\n    case \"\\\\phase\":\n      node.setAttribute(\"notation\", \"phasorangle\");\n      break;\n\n    case \"\\\\sout\":\n      node.setAttribute(\"notation\", \"horizontalstrike\");\n      break;\n\n    case \"\\\\fbox\":\n      node.setAttribute(\"notation\", \"box\");\n      break;\n\n    case \"\\\\angl\":\n      node.setAttribute(\"notation\", \"actuarial\");\n      break;\n\n    case \"\\\\fcolorbox\":\n    case \"\\\\colorbox\":\n      // <menclose> doesn't have a good notation option. So use <mpadded>\n      // instead. Set some attributes that come included with <menclose>.\n      fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;\n      node.setAttribute(\"width\", \"+\" + 2 * fboxsep + \"pt\");\n      node.setAttribute(\"height\", \"+\" + 2 * fboxsep + \"pt\");\n      node.setAttribute(\"lspace\", fboxsep + \"pt\"); //\n\n      node.setAttribute(\"voffset\", fboxsep + \"pt\");\n\n      if (group.label === \"\\\\fcolorbox\") {\n        var thk = Math.max(options.fontMetrics().fboxrule, // default\n        options.minRuleThickness // user override\n        );\n        node.setAttribute(\"style\", \"border: \" + thk + \"em solid \" + String(group.borderColor));\n      }\n\n      break;\n\n    case \"\\\\xcancel\":\n      node.setAttribute(\"notation\", \"updiagonalstrike downdiagonalstrike\");\n      break;\n  }\n\n  if (group.backgroundColor) {\n    node.setAttribute(\"mathbackground\", group.backgroundColor);\n  }\n\n  return node;\n};\n\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\colorbox\"],\n  props: {\n    numArgs: 2,\n    allowedInText: true,\n    argTypes: [\"color\", \"text\"]\n  },\n\n  handler(_ref, args, optArgs) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var color = assertNodeType(args[0], \"color-token\").color;\n    var body = args[1];\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: funcName,\n      backgroundColor: color,\n      body\n    };\n  },\n\n  htmlBuilder: htmlBuilder$7,\n  mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\fcolorbox\"],\n  props: {\n    numArgs: 3,\n    allowedInText: true,\n    argTypes: [\"color\", \"color\", \"text\"]\n  },\n\n  handler(_ref2, args, optArgs) {\n    var {\n      parser,\n      funcName\n    } = _ref2;\n    var borderColor = assertNodeType(args[0], \"color-token\").color;\n    var backgroundColor = assertNodeType(args[1], \"color-token\").color;\n    var body = args[2];\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: funcName,\n      backgroundColor,\n      borderColor,\n      body\n    };\n  },\n\n  htmlBuilder: htmlBuilder$7,\n  mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\fbox\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"hbox\"],\n    allowedInText: true\n  },\n\n  handler(_ref3, args) {\n    var {\n      parser\n    } = _ref3;\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: \"\\\\fbox\",\n      body: args[0]\n    };\n  }\n\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\cancel\", \"\\\\bcancel\", \"\\\\xcancel\", \"\\\\sout\", \"\\\\phase\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(_ref4, args) {\n    var {\n      parser,\n      funcName\n    } = _ref4;\n    var body = args[0];\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: funcName,\n      body\n    };\n  },\n\n  htmlBuilder: htmlBuilder$7,\n  mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\angl\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"hbox\"],\n    allowedInText: false\n  },\n\n  handler(_ref5, args) {\n    var {\n      parser\n    } = _ref5;\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: \"\\\\angl\",\n      body: args[0]\n    };\n  }\n\n});\n\n/**\n * All registered environments.\n * `environments.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `environments.js`.\n */\nvar _environments = {};\nfunction defineEnvironment(_ref) {\n  var {\n    type,\n    names,\n    props,\n    handler,\n    htmlBuilder,\n    mathmlBuilder\n  } = _ref;\n  // Set default values of environments.\n  var data = {\n    type,\n    numArgs: props.numArgs || 0,\n    allowedInText: false,\n    numOptionalArgs: 0,\n    handler\n  };\n\n  for (var i = 0; i < names.length; ++i) {\n    // TODO: The value type of _environments should be a type union of all\n    // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is\n    // an existential type.\n    _environments[names[i]] = data;\n  }\n\n  if (htmlBuilder) {\n    _htmlGroupBuilders[type] = htmlBuilder;\n  }\n\n  if (mathmlBuilder) {\n    _mathmlGroupBuilders[type] = mathmlBuilder;\n  }\n}\n\n/**\n * All registered global/built-in macros.\n * `macros.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `macros.js`.\n */\nvar _macros = {}; // This function might one day accept an additional argument and do more things.\n\nfunction defineMacro(name, body) {\n  _macros[name] = body;\n}\n\n// Helper functions\nfunction getHLines(parser) {\n  // Return an array. The array length = number of hlines.\n  // Each element in the array tells if the line is dashed.\n  var hlineInfo = [];\n  parser.consumeSpaces();\n  var nxt = parser.fetch().text;\n\n  if (nxt === \"\\\\relax\") {\n    // \\relax is an artifact of the \\cr macro below\n    parser.consume();\n    parser.consumeSpaces();\n    nxt = parser.fetch().text;\n  }\n\n  while (nxt === \"\\\\hline\" || nxt === \"\\\\hdashline\") {\n    parser.consume();\n    hlineInfo.push(nxt === \"\\\\hdashline\");\n    parser.consumeSpaces();\n    nxt = parser.fetch().text;\n  }\n\n  return hlineInfo;\n}\n\nvar validateAmsEnvironmentContext = context => {\n  var settings = context.parser.settings;\n\n  if (!settings.displayMode) {\n    throw new ParseError(\"{\" + context.envName + \"} can be used only in\" + \" display mode.\");\n  }\n}; // autoTag (an argument to parseArray) can be one of three values:\n// * undefined: Regular (not-top-level) array; no tags on each row\n// * true: Automatic equation numbering, overridable by \\tag\n// * false: Tags allowed on each row, but no automatic numbering\n// This function *doesn't* work with the \"split\" environment name.\n\n\nfunction getAutoTag(name) {\n  if (name.indexOf(\"ed\") === -1) {\n    return name.indexOf(\"*\") === -1;\n  } // return undefined;\n\n}\n/**\n * Parse the body of the environment, with rows delimited by \\\\ and\n * columns delimited by &, and create a nested list in row-major order\n * with one group per cell.  If given an optional argument style\n * (\"text\", \"display\", etc.), then each cell is cast into that style.\n */\n\n\nfunction parseArray(parser, _ref, style) {\n  var {\n    hskipBeforeAndAfter,\n    addJot,\n    cols,\n    arraystretch,\n    colSeparationType,\n    autoTag,\n    singleRow,\n    emptySingleRow,\n    maxNumCols,\n    leqno\n  } = _ref;\n  parser.gullet.beginGroup();\n\n  if (!singleRow) {\n    // \\cr is equivalent to \\\\ without the optional size argument (see below)\n    // TODO: provide helpful error when \\cr is used outside array environment\n    parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n  } // Get current arraystretch if it's not set by the environment\n\n\n  if (!arraystretch) {\n    var stretch = parser.gullet.expandMacroAsText(\"\\\\arraystretch\");\n\n    if (stretch == null) {\n      // Default \\arraystretch from lttab.dtx\n      arraystretch = 1;\n    } else {\n      arraystretch = parseFloat(stretch);\n\n      if (!arraystretch || arraystretch < 0) {\n        throw new ParseError(\"Invalid \\\\arraystretch: \" + stretch);\n      }\n    }\n  } // Start group for first cell\n\n\n  parser.gullet.beginGroup();\n  var row = [];\n  var body = [row];\n  var rowGaps = [];\n  var hLinesBeforeRow = [];\n  var tags = autoTag != null ? [] : undefined; // amsmath uses \\global\\@eqnswtrue and \\global\\@eqnswfalse to represent\n  // whether this row should have an equation number.  Simulate this with\n  // a \\@eqnsw macro set to 1 or 0.\n\n  function beginRow() {\n    if (autoTag) {\n      parser.gullet.macros.set(\"\\\\@eqnsw\", \"1\", true);\n    }\n  }\n\n  function endRow() {\n    if (tags) {\n      if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n        tags.push(parser.subparse([new Token(\"\\\\df@tag\")]));\n        parser.gullet.macros.set(\"\\\\df@tag\", undefined, true);\n      } else {\n        tags.push(Boolean(autoTag) && parser.gullet.macros.get(\"\\\\@eqnsw\") === \"1\");\n      }\n    }\n  }\n\n  beginRow(); // Test for \\hline at the top of the array.\n\n  hLinesBeforeRow.push(getHLines(parser));\n\n  while (true) {\n    // eslint-disable-line no-constant-condition\n    // Parse each cell in its own group (namespace)\n    var cell = parser.parseExpression(false, singleRow ? \"\\\\end\" : \"\\\\\\\\\");\n    parser.gullet.endGroup();\n    parser.gullet.beginGroup();\n    cell = {\n      type: \"ordgroup\",\n      mode: parser.mode,\n      body: cell\n    };\n\n    if (style) {\n      cell = {\n        type: \"styling\",\n        mode: parser.mode,\n        style,\n        body: [cell]\n      };\n    }\n\n    row.push(cell);\n    var next = parser.fetch().text;\n\n    if (next === \"&\") {\n      if (maxNumCols && row.length === maxNumCols) {\n        if (singleRow || colSeparationType) {\n          // {equation} or {split}\n          throw new ParseError(\"Too many tab characters: &\", parser.nextToken);\n        } else {\n          // {array} environment\n          parser.settings.reportNonstrict(\"textEnv\", \"Too few columns \" + \"specified in the {array} column argument.\");\n        }\n      }\n\n      parser.consume();\n    } else if (next === \"\\\\end\") {\n      endRow(); // Arrays terminate newlines with `\\crcr` which consumes a `\\cr` if\n      // the last line is empty.  However, AMS environments keep the\n      // empty row if it's the only one.\n      // NOTE: Currently, `cell` is the last item added into `row`.\n\n      if (row.length === 1 && cell.type === \"styling\" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) {\n        body.pop();\n      }\n\n      if (hLinesBeforeRow.length < body.length + 1) {\n        hLinesBeforeRow.push([]);\n      }\n\n      break;\n    } else if (next === \"\\\\\\\\\") {\n      parser.consume();\n      var size = void 0; // \\def\\Let@{\\let\\\\\\math@cr}\n      // \\def\\math@cr{...\\math@cr@}\n      // \\def\\math@cr@{\\new@ifnextchar[\\math@cr@@{\\math@cr@@[\\z@]}}\n      // \\def\\math@cr@@[#1]{...\\math@cr@@@...}\n      // \\def\\math@cr@@@{\\cr}\n\n      if (parser.gullet.future().text !== \" \") {\n        size = parser.parseSizeGroup(true);\n      }\n\n      rowGaps.push(size ? size.value : null);\n      endRow(); // check for \\hline(s) following the row separator\n\n      hLinesBeforeRow.push(getHLines(parser));\n      row = [];\n      body.push(row);\n      beginRow();\n    } else {\n      throw new ParseError(\"Expected & or \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n    }\n  } // End cell group\n\n\n  parser.gullet.endGroup(); // End array group defining \\cr\n\n  parser.gullet.endGroup();\n  return {\n    type: \"array\",\n    mode: parser.mode,\n    addJot,\n    arraystretch,\n    body,\n    cols,\n    rowGaps,\n    hskipBeforeAndAfter,\n    hLinesBeforeRow,\n    colSeparationType,\n    tags,\n    leqno\n  };\n} // Decides on a style for cells in an array according to whether the given\n// environment name starts with the letter 'd'.\n\n\nfunction dCellStyle(envName) {\n  if (envName.slice(0, 1) === \"d\") {\n    return \"display\";\n  } else {\n    return \"text\";\n  }\n}\n\nvar htmlBuilder$6 = function htmlBuilder(group, options) {\n  var r;\n  var c;\n  var nr = group.body.length;\n  var hLinesBeforeRow = group.hLinesBeforeRow;\n  var nc = 0;\n  var body = new Array(nr);\n  var hlines = [];\n  var ruleThickness = Math.max( // From LaTeX \\showthe\\arrayrulewidth. Equals 0.04 em.\n  options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.\n  ); // Horizontal spacing\n\n  var pt = 1 / options.fontMetrics().ptPerEm;\n  var arraycolsep = 5 * pt; // default value, i.e. \\arraycolsep in article.cls\n\n  if (group.colSeparationType && group.colSeparationType === \"small\") {\n    // We're in a {smallmatrix}. Default column space is \\thickspace,\n    // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.\n    // But that needs adjustment because LaTeX applies \\scriptstyle to the\n    // entire array, including the colspace, but this function applies\n    // \\scriptstyle only inside each element.\n    var localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier;\n    arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);\n  } // Vertical spacing\n\n\n  var baselineskip = group.colSeparationType === \"CD\" ? calculateSize({\n    number: 3,\n    unit: \"ex\"\n  }, options) : 12 * pt; // see size10.clo\n  // Default \\jot from ltmath.dtx\n  // TODO(edemaine): allow overriding \\jot via \\setlength (#687)\n\n  var jot = 3 * pt;\n  var arrayskip = group.arraystretch * baselineskip;\n  var arstrutHeight = 0.7 * arrayskip; // \\strutbox in ltfsstrc.dtx and\n\n  var arstrutDepth = 0.3 * arrayskip; // \\@arstrutbox in lttab.dtx\n\n  var totalHeight = 0; // Set a position for \\hline(s) at the top of the array, if any.\n\n  function setHLinePos(hlinesInGap) {\n    for (var i = 0; i < hlinesInGap.length; ++i) {\n      if (i > 0) {\n        totalHeight += 0.25;\n      }\n\n      hlines.push({\n        pos: totalHeight,\n        isDashed: hlinesInGap[i]\n      });\n    }\n  }\n\n  setHLinePos(hLinesBeforeRow[0]);\n\n  for (r = 0; r < group.body.length; ++r) {\n    var inrow = group.body[r];\n    var height = arstrutHeight; // \\@array adds an \\@arstrut\n\n    var depth = arstrutDepth; // to each tow (via the template)\n\n    if (nc < inrow.length) {\n      nc = inrow.length;\n    }\n\n    var outrow = new Array(inrow.length);\n\n    for (c = 0; c < inrow.length; ++c) {\n      var elt = buildGroup$1(inrow[c], options);\n\n      if (depth < elt.depth) {\n        depth = elt.depth;\n      }\n\n      if (height < elt.height) {\n        height = elt.height;\n      }\n\n      outrow[c] = elt;\n    }\n\n    var rowGap = group.rowGaps[r];\n    var gap = 0;\n\n    if (rowGap) {\n      gap = calculateSize(rowGap, options);\n\n      if (gap > 0) {\n        // \\@argarraycr\n        gap += arstrutDepth;\n\n        if (depth < gap) {\n          depth = gap; // \\@xargarraycr\n        }\n\n        gap = 0;\n      }\n    } // In AMS multiline environments such as aligned and gathered, rows\n    // correspond to lines that have additional \\jot added to the\n    // \\baselineskip via \\openup.\n\n\n    if (group.addJot) {\n      depth += jot;\n    }\n\n    outrow.height = height;\n    outrow.depth = depth;\n    totalHeight += height;\n    outrow.pos = totalHeight;\n    totalHeight += depth + gap; // \\@yargarraycr\n\n    body[r] = outrow; // Set a position for \\hline(s), if any.\n\n    setHLinePos(hLinesBeforeRow[r + 1]);\n  }\n\n  var offset = totalHeight / 2 + options.fontMetrics().axisHeight;\n  var colDescriptions = group.cols || [];\n  var cols = [];\n  var colSep;\n  var colDescrNum;\n  var tagSpans = [];\n\n  if (group.tags && group.tags.some(tag => tag)) {\n    // An environment with manual tags and/or automatic equation numbers.\n    // Create node(s), the latter of which trigger CSS counter increment.\n    for (r = 0; r < nr; ++r) {\n      var rw = body[r];\n      var shift = rw.pos - offset;\n      var tag = group.tags[r];\n      var tagSpan = void 0;\n\n      if (tag === true) {\n        // automatic numbering\n        tagSpan = buildCommon.makeSpan([\"eqn-num\"], [], options);\n      } else if (tag === false) {\n        // \\nonumber/\\notag or starred environment\n        tagSpan = buildCommon.makeSpan([], [], options);\n      } else {\n        // manual \\tag\n        tagSpan = buildCommon.makeSpan([], buildExpression$1(tag, options, true), options);\n      }\n\n      tagSpan.depth = rw.depth;\n      tagSpan.height = rw.height;\n      tagSpans.push({\n        type: \"elem\",\n        elem: tagSpan,\n        shift\n      });\n    }\n  }\n\n  for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column\n  // descriptions, so trailing separators don't get lost.\n  c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) {\n    var colDescr = colDescriptions[colDescrNum] || {};\n    var firstSeparator = true;\n\n    while (colDescr.type === \"separator\") {\n      // If there is more than one separator in a row, add a space\n      // between them.\n      if (!firstSeparator) {\n        colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n        colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep);\n        cols.push(colSep);\n      }\n\n      if (colDescr.separator === \"|\" || colDescr.separator === \":\") {\n        var lineType = colDescr.separator === \"|\" ? \"solid\" : \"dashed\";\n        var separator = buildCommon.makeSpan([\"vertical-separator\"], [], options);\n        separator.style.height = makeEm(totalHeight);\n        separator.style.borderRightWidth = makeEm(ruleThickness);\n        separator.style.borderRightStyle = lineType;\n        separator.style.margin = \"0 \" + makeEm(-ruleThickness / 2);\n\n        var _shift = totalHeight - offset;\n\n        if (_shift) {\n          separator.style.verticalAlign = makeEm(-_shift);\n        }\n\n        cols.push(separator);\n      } else {\n        throw new ParseError(\"Invalid separator type: \" + colDescr.separator);\n      }\n\n      colDescrNum++;\n      colDescr = colDescriptions[colDescrNum] || {};\n      firstSeparator = false;\n    }\n\n    if (c >= nc) {\n      continue;\n    }\n\n    var sepwidth = void 0;\n\n    if (c > 0 || group.hskipBeforeAndAfter) {\n      sepwidth = utils.deflt(colDescr.pregap, arraycolsep);\n\n      if (sepwidth !== 0) {\n        colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n        colSep.style.width = makeEm(sepwidth);\n        cols.push(colSep);\n      }\n    }\n\n    var col = [];\n\n    for (r = 0; r < nr; ++r) {\n      var row = body[r];\n      var elem = row[c];\n\n      if (!elem) {\n        continue;\n      }\n\n      var _shift2 = row.pos - offset;\n\n      elem.depth = row.depth;\n      elem.height = row.height;\n      col.push({\n        type: \"elem\",\n        elem: elem,\n        shift: _shift2\n      });\n    }\n\n    col = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: col\n    }, options);\n    col = buildCommon.makeSpan([\"col-align-\" + (colDescr.align || \"c\")], [col]);\n    cols.push(col);\n\n    if (c < nc - 1 || group.hskipBeforeAndAfter) {\n      sepwidth = utils.deflt(colDescr.postgap, arraycolsep);\n\n      if (sepwidth !== 0) {\n        colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n        colSep.style.width = makeEm(sepwidth);\n        cols.push(colSep);\n      }\n    }\n  }\n\n  body = buildCommon.makeSpan([\"mtable\"], cols); // Add \\hline(s), if any.\n\n  if (hlines.length > 0) {\n    var line = buildCommon.makeLineSpan(\"hline\", options, ruleThickness);\n    var dashes = buildCommon.makeLineSpan(\"hdashline\", options, ruleThickness);\n    var vListElems = [{\n      type: \"elem\",\n      elem: body,\n      shift: 0\n    }];\n\n    while (hlines.length > 0) {\n      var hline = hlines.pop();\n      var lineShift = hline.pos - offset;\n\n      if (hline.isDashed) {\n        vListElems.push({\n          type: \"elem\",\n          elem: dashes,\n          shift: lineShift\n        });\n      } else {\n        vListElems.push({\n          type: \"elem\",\n          elem: line,\n          shift: lineShift\n        });\n      }\n    }\n\n    body = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: vListElems\n    }, options);\n  }\n\n  if (tagSpans.length === 0) {\n    return buildCommon.makeSpan([\"mord\"], [body], options);\n  } else {\n    var eqnNumCol = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: tagSpans\n    }, options);\n    eqnNumCol = buildCommon.makeSpan([\"tag\"], [eqnNumCol], options);\n    return buildCommon.makeFragment([body, eqnNumCol]);\n  }\n};\n\nvar alignMap = {\n  c: \"center \",\n  l: \"left \",\n  r: \"right \"\n};\n\nvar mathmlBuilder$5 = function mathmlBuilder(group, options) {\n  var tbl = [];\n  var glue = new mathMLTree.MathNode(\"mtd\", [], [\"mtr-glue\"]);\n  var tag = new mathMLTree.MathNode(\"mtd\", [], [\"mml-eqn-num\"]);\n\n  for (var i = 0; i < group.body.length; i++) {\n    var rw = group.body[i];\n    var row = [];\n\n    for (var j = 0; j < rw.length; j++) {\n      row.push(new mathMLTree.MathNode(\"mtd\", [buildGroup(rw[j], options)]));\n    }\n\n    if (group.tags && group.tags[i]) {\n      row.unshift(glue);\n      row.push(glue);\n\n      if (group.leqno) {\n        row.unshift(tag);\n      } else {\n        row.push(tag);\n      }\n    }\n\n    tbl.push(new mathMLTree.MathNode(\"mtr\", row));\n  }\n\n  var table = new mathMLTree.MathNode(\"mtable\", tbl); // Set column alignment, row spacing, column spacing, and\n  // array lines by setting attributes on the table element.\n  // Set the row spacing. In MathML, we specify a gap distance.\n  // We do not use rowGap[] because MathML automatically increases\n  // cell height with the height/depth of the element content.\n  // LaTeX \\arraystretch multiplies the row baseline-to-baseline distance.\n  // We simulate this by adding (arraystretch - 1)em to the gap. This\n  // does a reasonable job of adjusting arrays containing 1 em tall content.\n  // The 0.16 and 0.09 values are found empirically. They produce an array\n  // similar to LaTeX and in which content does not interfere with \\hlines.\n\n  var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}\n  : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);\n  table.setAttribute(\"rowspacing\", makeEm(gap)); // MathML table lines go only between cells.\n  // To place a line on an edge we'll use <menclose>, if necessary.\n\n  var menclose = \"\";\n  var align = \"\";\n\n  if (group.cols && group.cols.length > 0) {\n    // Find column alignment, column spacing, and  vertical lines.\n    var cols = group.cols;\n    var columnLines = \"\";\n    var prevTypeWasAlign = false;\n    var iStart = 0;\n    var iEnd = cols.length;\n\n    if (cols[0].type === \"separator\") {\n      menclose += \"top \";\n      iStart = 1;\n    }\n\n    if (cols[cols.length - 1].type === \"separator\") {\n      menclose += \"bottom \";\n      iEnd -= 1;\n    }\n\n    for (var _i = iStart; _i < iEnd; _i++) {\n      if (cols[_i].type === \"align\") {\n        align += alignMap[cols[_i].align];\n\n        if (prevTypeWasAlign) {\n          columnLines += \"none \";\n        }\n\n        prevTypeWasAlign = true;\n      } else if (cols[_i].type === \"separator\") {\n        // MathML accepts only single lines between cells.\n        // So we read only the first of consecutive separators.\n        if (prevTypeWasAlign) {\n          columnLines += cols[_i].separator === \"|\" ? \"solid \" : \"dashed \";\n          prevTypeWasAlign = false;\n        }\n      }\n    }\n\n    table.setAttribute(\"columnalign\", align.trim());\n\n    if (/[sd]/.test(columnLines)) {\n      table.setAttribute(\"columnlines\", columnLines.trim());\n    }\n  } // Set column spacing.\n\n\n  if (group.colSeparationType === \"align\") {\n    var _cols = group.cols || [];\n\n    var spacing = \"\";\n\n    for (var _i2 = 1; _i2 < _cols.length; _i2++) {\n      spacing += _i2 % 2 ? \"0em \" : \"1em \";\n    }\n\n    table.setAttribute(\"columnspacing\", spacing.trim());\n  } else if (group.colSeparationType === \"alignat\" || group.colSeparationType === \"gather\") {\n    table.setAttribute(\"columnspacing\", \"0em\");\n  } else if (group.colSeparationType === \"small\") {\n    table.setAttribute(\"columnspacing\", \"0.2778em\");\n  } else if (group.colSeparationType === \"CD\") {\n    table.setAttribute(\"columnspacing\", \"0.5em\");\n  } else {\n    table.setAttribute(\"columnspacing\", \"1em\");\n  } // Address \\hline and \\hdashline\n\n\n  var rowLines = \"\";\n  var hlines = group.hLinesBeforeRow;\n  menclose += hlines[0].length > 0 ? \"left \" : \"\";\n  menclose += hlines[hlines.length - 1].length > 0 ? \"right \" : \"\";\n\n  for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) {\n    rowLines += hlines[_i3].length === 0 ? \"none \" // MathML accepts only a single line between rows. Read one element.\n    : hlines[_i3][0] ? \"dashed \" : \"solid \";\n  }\n\n  if (/[sd]/.test(rowLines)) {\n    table.setAttribute(\"rowlines\", rowLines.trim());\n  }\n\n  if (menclose !== \"\") {\n    table = new mathMLTree.MathNode(\"menclose\", [table]);\n    table.setAttribute(\"notation\", menclose.trim());\n  }\n\n  if (group.arraystretch && group.arraystretch < 1) {\n    // A small array. Wrap in scriptstyle so row gap is not too large.\n    table = new mathMLTree.MathNode(\"mstyle\", [table]);\n    table.setAttribute(\"scriptlevel\", \"1\");\n  }\n\n  return table;\n}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat.\n\n\nvar alignedHandler = function alignedHandler(context, args) {\n  if (context.envName.indexOf(\"ed\") === -1) {\n    validateAmsEnvironmentContext(context);\n  }\n\n  var cols = [];\n  var separationType = context.envName.indexOf(\"at\") > -1 ? \"alignat\" : \"align\";\n  var isSplit = context.envName === \"split\";\n  var res = parseArray(context.parser, {\n    cols,\n    addJot: true,\n    autoTag: isSplit ? undefined : getAutoTag(context.envName),\n    emptySingleRow: true,\n    colSeparationType: separationType,\n    maxNumCols: isSplit ? 2 : undefined,\n    leqno: context.parser.settings.leqno\n  }, \"display\"); // Determining number of columns.\n  // 1. If the first argument is given, we use it as a number of columns,\n  //    and makes sure that each row doesn't exceed that number.\n  // 2. Otherwise, just count number of columns = maximum number\n  //    of cells in each row (\"aligned\" mode -- isAligned will be true).\n  //\n  // At the same time, prepend empty group {} at beginning of every second\n  // cell in each row (starting with second cell) so that operators become\n  // binary.  This behavior is implemented in amsmath's \\start@aligned.\n\n  var numMaths;\n  var numCols = 0;\n  var emptyGroup = {\n    type: \"ordgroup\",\n    mode: context.mode,\n    body: []\n  };\n\n  if (args[0] && args[0].type === \"ordgroup\") {\n    var arg0 = \"\";\n\n    for (var i = 0; i < args[0].body.length; i++) {\n      var textord = assertNodeType(args[0].body[i], \"textord\");\n      arg0 += textord.text;\n    }\n\n    numMaths = Number(arg0);\n    numCols = numMaths * 2;\n  }\n\n  var isAligned = !numCols;\n  res.body.forEach(function (row) {\n    for (var _i4 = 1; _i4 < row.length; _i4 += 2) {\n      // Modify ordgroup node within styling node\n      var styling = assertNodeType(row[_i4], \"styling\");\n      var ordgroup = assertNodeType(styling.body[0], \"ordgroup\");\n      ordgroup.body.unshift(emptyGroup);\n    }\n\n    if (!isAligned) {\n      // Case 1\n      var curMaths = row.length / 2;\n\n      if (numMaths < curMaths) {\n        throw new ParseError(\"Too many math in a row: \" + (\"expected \" + numMaths + \", but got \" + curMaths), row[0]);\n      }\n    } else if (numCols < row.length) {\n      // Case 2\n      numCols = row.length;\n    }\n  }); // Adjusting alignment.\n  // In aligned mode, we add one \\qquad between columns;\n  // otherwise we add nothing.\n\n  for (var _i5 = 0; _i5 < numCols; ++_i5) {\n    var align = \"r\";\n    var pregap = 0;\n\n    if (_i5 % 2 === 1) {\n      align = \"l\";\n    } else if (_i5 > 0 && isAligned) {\n      // \"aligned\" mode.\n      pregap = 1; // add one \\quad\n    }\n\n    cols[_i5] = {\n      type: \"align\",\n      align: align,\n      pregap: pregap,\n      postgap: 0\n    };\n  }\n\n  res.colSeparationType = isAligned ? \"align\" : \"alignat\";\n  return res;\n}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation\n// is part of the source2e.pdf file of LaTeX2e source documentation.\n// {darray} is an {array} environment where cells are set in \\displaystyle,\n// as defined in nccmath.sty.\n\n\ndefineEnvironment({\n  type: \"array\",\n  names: [\"array\", \"darray\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(context, args) {\n    // Since no types are specified above, the two possibilities are\n    // - The argument is wrapped in {} or [], in which case Parser's\n    //   parseGroup() returns an \"ordgroup\" wrapping some symbol node.\n    // - The argument is a bare symbol node.\n    var symNode = checkSymbolNodeType(args[0]);\n    var colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n    var cols = colalign.map(function (nde) {\n      var node = assertSymbolNodeType(nde);\n      var ca = node.text;\n\n      if (\"lcr\".indexOf(ca) !== -1) {\n        return {\n          type: \"align\",\n          align: ca\n        };\n      } else if (ca === \"|\") {\n        return {\n          type: \"separator\",\n          separator: \"|\"\n        };\n      } else if (ca === \":\") {\n        return {\n          type: \"separator\",\n          separator: \":\"\n        };\n      }\n\n      throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n    });\n    var res = {\n      cols,\n      hskipBeforeAndAfter: true,\n      // \\@preamble in lttab.dtx\n      maxNumCols: cols.length\n    };\n    return parseArray(context.parser, res, dCellStyle(context.envName));\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n}); // The matrix environments of amsmath builds on the array environment\n// of LaTeX, which is discussed above.\n// The mathtools package adds starred versions of the same environments.\n// These have an optional argument to choose left|center|right justification.\n\ndefineEnvironment({\n  type: \"array\",\n  names: [\"matrix\", \"pmatrix\", \"bmatrix\", \"Bmatrix\", \"vmatrix\", \"Vmatrix\", \"matrix*\", \"pmatrix*\", \"bmatrix*\", \"Bmatrix*\", \"vmatrix*\", \"Vmatrix*\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(context) {\n    var delimiters = {\n      \"matrix\": null,\n      \"pmatrix\": [\"(\", \")\"],\n      \"bmatrix\": [\"[\", \"]\"],\n      \"Bmatrix\": [\"\\\\{\", \"\\\\}\"],\n      \"vmatrix\": [\"|\", \"|\"],\n      \"Vmatrix\": [\"\\\\Vert\", \"\\\\Vert\"]\n    }[context.envName.replace(\"*\", \"\")]; // \\hskip -\\arraycolsep in amsmath\n\n    var colAlign = \"c\";\n    var payload = {\n      hskipBeforeAndAfter: false,\n      cols: [{\n        type: \"align\",\n        align: colAlign\n      }]\n    };\n\n    if (context.envName.charAt(context.envName.length - 1) === \"*\") {\n      // It's one of the mathtools starred functions.\n      // Parse the optional alignment argument.\n      var parser = context.parser;\n      parser.consumeSpaces();\n\n      if (parser.fetch().text === \"[\") {\n        parser.consume();\n        parser.consumeSpaces();\n        colAlign = parser.fetch().text;\n\n        if (\"lcr\".indexOf(colAlign) === -1) {\n          throw new ParseError(\"Expected l or c or r\", parser.nextToken);\n        }\n\n        parser.consume();\n        parser.consumeSpaces();\n        parser.expect(\"]\");\n        parser.consume();\n        payload.cols = [{\n          type: \"align\",\n          align: colAlign\n        }];\n      }\n    }\n\n    var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs.\n\n    var numCols = Math.max(0, ...res.body.map(row => row.length));\n    res.cols = new Array(numCols).fill({\n      type: \"align\",\n      align: colAlign\n    });\n    return delimiters ? {\n      type: \"leftright\",\n      mode: context.mode,\n      body: [res],\n      left: delimiters[0],\n      right: delimiters[1],\n      rightColor: undefined // \\right uninfluenced by \\color in array\n\n    } : res;\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n  type: \"array\",\n  names: [\"smallmatrix\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(context) {\n    var payload = {\n      arraystretch: 0.5\n    };\n    var res = parseArray(context.parser, payload, \"script\");\n    res.colSeparationType = \"small\";\n    return res;\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n  type: \"array\",\n  names: [\"subarray\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(context, args) {\n    // Parsing of {subarray} is similar to {array}\n    var symNode = checkSymbolNodeType(args[0]);\n    var colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n    var cols = colalign.map(function (nde) {\n      var node = assertSymbolNodeType(nde);\n      var ca = node.text; // {subarray} only recognizes \"l\" & \"c\"\n\n      if (\"lc\".indexOf(ca) !== -1) {\n        return {\n          type: \"align\",\n          align: ca\n        };\n      }\n\n      throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n    });\n\n    if (cols.length > 1) {\n      throw new ParseError(\"{subarray} can contain only one column\");\n    }\n\n    var res = {\n      cols,\n      hskipBeforeAndAfter: false,\n      arraystretch: 0.5\n    };\n    res = parseArray(context.parser, res, \"script\");\n\n    if (res.body.length > 0 && res.body[0].length > 1) {\n      throw new ParseError(\"{subarray} can contain only one column\");\n    }\n\n    return res;\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n}); // A cases environment (in amsmath.sty) is almost equivalent to\n// \\def\\arraystretch{1.2}%\n// \\left\\{\\begin{array}{@{}l@{\\quad}l@{}} … \\end{array}\\right.\n// {dcases} is a {cases} environment where cells are set in \\displaystyle,\n// as defined in mathtools.sty.\n// {rcases} is another mathtools environment. It's brace is on the right side.\n\ndefineEnvironment({\n  type: \"array\",\n  names: [\"cases\", \"dcases\", \"rcases\", \"drcases\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(context) {\n    var payload = {\n      arraystretch: 1.2,\n      cols: [{\n        type: \"align\",\n        align: \"l\",\n        pregap: 0,\n        // TODO(kevinb) get the current style.\n        // For now we use the metrics for TEXT style which is what we were\n        // doing before.  Before attempting to get the current style we\n        // should look at TeX's behavior especially for \\over and matrices.\n        postgap: 1.0\n        /* 1em quad */\n\n      }, {\n        type: \"align\",\n        align: \"l\",\n        pregap: 0,\n        postgap: 0\n      }]\n    };\n    var res = parseArray(context.parser, payload, dCellStyle(context.envName));\n    return {\n      type: \"leftright\",\n      mode: context.mode,\n      body: [res],\n      left: context.envName.indexOf(\"r\") > -1 ? \".\" : \"\\\\{\",\n      right: context.envName.indexOf(\"r\") > -1 ? \"\\\\}\" : \".\",\n      rightColor: undefined\n    };\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n}); // In the align environment, one uses ampersands, &, to specify number of\n// columns in each row, and to locate spacing between each column.\n// align gets automatic numbering. align* and aligned do not.\n// The alignedat environment can be used in math mode.\n// Note that we assume \\nomallineskiplimit to be zero,\n// so that \\strut@ is the same as \\strut.\n\ndefineEnvironment({\n  type: \"array\",\n  names: [\"align\", \"align*\", \"aligned\", \"split\"],\n  props: {\n    numArgs: 0\n  },\n  handler: alignedHandler,\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n}); // A gathered environment is like an array environment with one centered\n// column, but where rows are considered lines so get \\jot line spacing\n// and contents are set in \\displaystyle.\n\ndefineEnvironment({\n  type: \"array\",\n  names: [\"gathered\", \"gather\", \"gather*\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(context) {\n    if ([\"gather\", \"gather*\"].includes(context.envName)) {\n      validateAmsEnvironmentContext(context);\n    }\n\n    var res = {\n      cols: [{\n        type: \"align\",\n        align: \"c\"\n      }],\n      addJot: true,\n      colSeparationType: \"gather\",\n      autoTag: getAutoTag(context.envName),\n      emptySingleRow: true,\n      leqno: context.parser.settings.leqno\n    };\n    return parseArray(context.parser, res, \"display\");\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n}); // alignat environment is like an align environment, but one must explicitly\n// specify maximum number of columns in each row, and can adjust spacing between\n// each columns.\n\ndefineEnvironment({\n  type: \"array\",\n  names: [\"alignat\", \"alignat*\", \"alignedat\"],\n  props: {\n    numArgs: 1\n  },\n  handler: alignedHandler,\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n  type: \"array\",\n  names: [\"equation\", \"equation*\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(context) {\n    validateAmsEnvironmentContext(context);\n    var res = {\n      autoTag: getAutoTag(context.envName),\n      emptySingleRow: true,\n      singleRow: true,\n      maxNumCols: 1,\n      leqno: context.parser.settings.leqno\n    };\n    return parseArray(context.parser, res, \"display\");\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n  type: \"array\",\n  names: [\"CD\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(context) {\n    validateAmsEnvironmentContext(context);\n    return parseCD(context.parser);\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineMacro(\"\\\\nonumber\", \"\\\\gdef\\\\@eqnsw{0}\");\ndefineMacro(\"\\\\notag\", \"\\\\nonumber\"); // Catch \\hline outside array environment\n\ndefineFunction({\n  type: \"text\",\n  // Doesn't matter what this is.\n  names: [\"\\\\hline\", \"\\\\hdashline\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    allowedInMath: true\n  },\n\n  handler(context, args) {\n    throw new ParseError(context.funcName + \" valid only within array environment\");\n  }\n\n});\n\nvar environments = _environments;\n\n// defineEnvironment definitions.\n\ndefineFunction({\n  type: \"environment\",\n  names: [\"\\\\begin\", \"\\\\end\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"text\"]\n  },\n\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var nameGroup = args[0];\n\n    if (nameGroup.type !== \"ordgroup\") {\n      throw new ParseError(\"Invalid environment name\", nameGroup);\n    }\n\n    var envName = \"\";\n\n    for (var i = 0; i < nameGroup.body.length; ++i) {\n      envName += assertNodeType(nameGroup.body[i], \"textord\").text;\n    }\n\n    if (funcName === \"\\\\begin\") {\n      // begin...end is similar to left...right\n      if (!environments.hasOwnProperty(envName)) {\n        throw new ParseError(\"No such environment: \" + envName, nameGroup);\n      } // Build the environment object. Arguments and other information will\n      // be made available to the begin and end methods using properties.\n\n\n      var env = environments[envName];\n      var {\n        args: _args,\n        optArgs\n      } = parser.parseArguments(\"\\\\begin{\" + envName + \"}\", env);\n      var context = {\n        mode: parser.mode,\n        envName,\n        parser\n      };\n      var result = env.handler(context, _args, optArgs);\n      parser.expect(\"\\\\end\", false);\n      var endNameToken = parser.nextToken;\n      var end = assertNodeType(parser.parseFunction(), \"environment\");\n\n      if (end.name !== envName) {\n        throw new ParseError(\"Mismatch: \\\\begin{\" + envName + \"} matched by \\\\end{\" + end.name + \"}\", endNameToken);\n      } // $FlowFixMe, \"environment\" handler returns an environment ParseNode\n\n\n      return result;\n    }\n\n    return {\n      type: \"environment\",\n      mode: parser.mode,\n      name: envName,\n      nameGroup\n    };\n  }\n\n});\n\n// TODO(kevinb): implement \\\\sl and \\\\sc\n\nvar htmlBuilder$5 = (group, options) => {\n  var font = group.font;\n  var newOptions = options.withFont(font);\n  return buildGroup$1(group.body, newOptions);\n};\n\nvar mathmlBuilder$4 = (group, options) => {\n  var font = group.font;\n  var newOptions = options.withFont(font);\n  return buildGroup(group.body, newOptions);\n};\n\nvar fontAliases = {\n  \"\\\\Bbb\": \"\\\\mathbb\",\n  \"\\\\bold\": \"\\\\mathbf\",\n  \"\\\\frak\": \"\\\\mathfrak\",\n  \"\\\\bm\": \"\\\\boldsymbol\"\n};\ndefineFunction({\n  type: \"font\",\n  names: [// styles, except \\boldsymbol defined below\n  \"\\\\mathrm\", \"\\\\mathit\", \"\\\\mathbf\", \"\\\\mathnormal\", \"\\\\mathsfit\", // families\n  \"\\\\mathbb\", \"\\\\mathcal\", \"\\\\mathfrak\", \"\\\\mathscr\", \"\\\\mathsf\", \"\\\\mathtt\", // aliases, except \\bm defined below\n  \"\\\\Bbb\", \"\\\\bold\", \"\\\\frak\"],\n  props: {\n    numArgs: 1,\n    allowedInArgument: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = normalizeArgument(args[0]);\n    var func = funcName;\n\n    if (func in fontAliases) {\n      func = fontAliases[func];\n    }\n\n    return {\n      type: \"font\",\n      mode: parser.mode,\n      font: func.slice(1),\n      body\n    };\n  },\n  htmlBuilder: htmlBuilder$5,\n  mathmlBuilder: mathmlBuilder$4\n});\ndefineFunction({\n  type: \"mclass\",\n  names: [\"\\\\boldsymbol\", \"\\\\bm\"],\n  props: {\n    numArgs: 1\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser\n    } = _ref2;\n    var body = args[0];\n    var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \\boldsymbol uses \\binrel spacing to inherit the\n    // argument's bin|rel|ord status\n\n    return {\n      type: \"mclass\",\n      mode: parser.mode,\n      mclass: binrelClass(body),\n      body: [{\n        type: \"font\",\n        mode: parser.mode,\n        font: \"boldsymbol\",\n        body\n      }],\n      isCharacterBox: isCharacterBox\n    };\n  }\n}); // Old font changing functions\n\ndefineFunction({\n  type: \"font\",\n  names: [\"\\\\rm\", \"\\\\sf\", \"\\\\tt\", \"\\\\bf\", \"\\\\it\", \"\\\\cal\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true\n  },\n  handler: (_ref3, args) => {\n    var {\n      parser,\n      funcName,\n      breakOnTokenText\n    } = _ref3;\n    var {\n      mode\n    } = parser;\n    var body = parser.parseExpression(true, breakOnTokenText);\n    var style = \"math\" + funcName.slice(1);\n    return {\n      type: \"font\",\n      mode: mode,\n      font: style,\n      body: {\n        type: \"ordgroup\",\n        mode: parser.mode,\n        body\n      }\n    };\n  },\n  htmlBuilder: htmlBuilder$5,\n  mathmlBuilder: mathmlBuilder$4\n});\n\nvar adjustStyle = (size, originalStyle) => {\n  // Figure out what style this fraction should be in based on the\n  // function used\n  var style = originalStyle;\n\n  if (size === \"display\") {\n    // Get display style as a default.\n    // If incoming style is sub/sup, use style.text() to get correct size.\n    style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY;\n  } else if (size === \"text\" && style.size === Style$1.DISPLAY.size) {\n    // We're in a \\tfrac but incoming style is displaystyle, so:\n    style = Style$1.TEXT;\n  } else if (size === \"script\") {\n    style = Style$1.SCRIPT;\n  } else if (size === \"scriptscript\") {\n    style = Style$1.SCRIPTSCRIPT;\n  }\n\n  return style;\n};\n\nvar htmlBuilder$4 = (group, options) => {\n  // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).\n  var style = adjustStyle(group.size, options.style);\n  var nstyle = style.fracNum();\n  var dstyle = style.fracDen();\n  var newOptions;\n  newOptions = options.havingStyle(nstyle);\n  var numerm = buildGroup$1(group.numer, newOptions, options);\n\n  if (group.continued) {\n    // \\cfrac inserts a \\strut into the numerator.\n    // Get \\strut dimensions from TeXbook page 353.\n    var hStrut = 8.5 / options.fontMetrics().ptPerEm;\n    var dStrut = 3.5 / options.fontMetrics().ptPerEm;\n    numerm.height = numerm.height < hStrut ? hStrut : numerm.height;\n    numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;\n  }\n\n  newOptions = options.havingStyle(dstyle);\n  var denomm = buildGroup$1(group.denom, newOptions, options);\n  var rule;\n  var ruleWidth;\n  var ruleSpacing;\n\n  if (group.hasBarLine) {\n    if (group.barSize) {\n      ruleWidth = calculateSize(group.barSize, options);\n      rule = buildCommon.makeLineSpan(\"frac-line\", options, ruleWidth);\n    } else {\n      rule = buildCommon.makeLineSpan(\"frac-line\", options);\n    }\n\n    ruleWidth = rule.height;\n    ruleSpacing = rule.height;\n  } else {\n    rule = null;\n    ruleWidth = 0;\n    ruleSpacing = options.fontMetrics().defaultRuleThickness;\n  } // Rule 15b\n\n\n  var numShift;\n  var clearance;\n  var denomShift;\n\n  if (style.size === Style$1.DISPLAY.size || group.size === \"display\") {\n    numShift = options.fontMetrics().num1;\n\n    if (ruleWidth > 0) {\n      clearance = 3 * ruleSpacing;\n    } else {\n      clearance = 7 * ruleSpacing;\n    }\n\n    denomShift = options.fontMetrics().denom1;\n  } else {\n    if (ruleWidth > 0) {\n      numShift = options.fontMetrics().num2;\n      clearance = ruleSpacing;\n    } else {\n      numShift = options.fontMetrics().num3;\n      clearance = 3 * ruleSpacing;\n    }\n\n    denomShift = options.fontMetrics().denom2;\n  }\n\n  var frac;\n\n  if (!rule) {\n    // Rule 15c\n    var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);\n\n    if (candidateClearance < clearance) {\n      numShift += 0.5 * (clearance - candidateClearance);\n      denomShift += 0.5 * (clearance - candidateClearance);\n    }\n\n    frac = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: [{\n        type: \"elem\",\n        elem: denomm,\n        shift: denomShift\n      }, {\n        type: \"elem\",\n        elem: numerm,\n        shift: -numShift\n      }]\n    }, options);\n  } else {\n    // Rule 15d\n    var axisHeight = options.fontMetrics().axisHeight;\n\n    if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {\n      numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));\n    }\n\n    if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {\n      denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));\n    }\n\n    var midShift = -(axisHeight - 0.5 * ruleWidth);\n    frac = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: [{\n        type: \"elem\",\n        elem: denomm,\n        shift: denomShift\n      }, {\n        type: \"elem\",\n        elem: rule,\n        shift: midShift\n      }, {\n        type: \"elem\",\n        elem: numerm,\n        shift: -numShift\n      }]\n    }, options);\n  } // Since we manually change the style sometimes (with \\dfrac or \\tfrac),\n  // account for the possible size change here.\n\n\n  newOptions = options.havingStyle(style);\n  frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;\n  frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e\n\n  var delimSize;\n\n  if (style.size === Style$1.DISPLAY.size) {\n    delimSize = options.fontMetrics().delim1;\n  } else if (style.size === Style$1.SCRIPTSCRIPT.size) {\n    delimSize = options.havingStyle(Style$1.SCRIPT).fontMetrics().delim2;\n  } else {\n    delimSize = options.fontMetrics().delim2;\n  }\n\n  var leftDelim;\n  var rightDelim;\n\n  if (group.leftDelim == null) {\n    leftDelim = makeNullDelimiter(options, [\"mopen\"]);\n  } else {\n    leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, [\"mopen\"]);\n  }\n\n  if (group.continued) {\n    rightDelim = buildCommon.makeSpan([]); // zero width for \\cfrac\n  } else if (group.rightDelim == null) {\n    rightDelim = makeNullDelimiter(options, [\"mclose\"]);\n  } else {\n    rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, [\"mclose\"]);\n  }\n\n  return buildCommon.makeSpan([\"mord\"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan([\"mfrac\"], [frac]), rightDelim], options);\n};\n\nvar mathmlBuilder$3 = (group, options) => {\n  var node = new mathMLTree.MathNode(\"mfrac\", [buildGroup(group.numer, options), buildGroup(group.denom, options)]);\n\n  if (!group.hasBarLine) {\n    node.setAttribute(\"linethickness\", \"0px\");\n  } else if (group.barSize) {\n    var ruleWidth = calculateSize(group.barSize, options);\n    node.setAttribute(\"linethickness\", makeEm(ruleWidth));\n  }\n\n  var style = adjustStyle(group.size, options.style);\n\n  if (style.size !== options.style.size) {\n    node = new mathMLTree.MathNode(\"mstyle\", [node]);\n    var isDisplay = style.size === Style$1.DISPLAY.size ? \"true\" : \"false\";\n    node.setAttribute(\"displaystyle\", isDisplay);\n    node.setAttribute(\"scriptlevel\", \"0\");\n  }\n\n  if (group.leftDelim != null || group.rightDelim != null) {\n    var withDelims = [];\n\n    if (group.leftDelim != null) {\n      var leftOp = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(group.leftDelim.replace(\"\\\\\", \"\"))]);\n      leftOp.setAttribute(\"fence\", \"true\");\n      withDelims.push(leftOp);\n    }\n\n    withDelims.push(node);\n\n    if (group.rightDelim != null) {\n      var rightOp = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(group.rightDelim.replace(\"\\\\\", \"\"))]);\n      rightOp.setAttribute(\"fence\", \"true\");\n      withDelims.push(rightOp);\n    }\n\n    return makeRow(withDelims);\n  }\n\n  return node;\n};\n\ndefineFunction({\n  type: \"genfrac\",\n  names: [\"\\\\dfrac\", \"\\\\frac\", \"\\\\tfrac\", \"\\\\dbinom\", \"\\\\binom\", \"\\\\tbinom\", \"\\\\\\\\atopfrac\", // can’t be entered directly\n  \"\\\\\\\\bracefrac\", \"\\\\\\\\brackfrac\" // ditto\n  ],\n  props: {\n    numArgs: 2,\n    allowedInArgument: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var numer = args[0];\n    var denom = args[1];\n    var hasBarLine;\n    var leftDelim = null;\n    var rightDelim = null;\n    var size = \"auto\";\n\n    switch (funcName) {\n      case \"\\\\dfrac\":\n      case \"\\\\frac\":\n      case \"\\\\tfrac\":\n        hasBarLine = true;\n        break;\n\n      case \"\\\\\\\\atopfrac\":\n        hasBarLine = false;\n        break;\n\n      case \"\\\\dbinom\":\n      case \"\\\\binom\":\n      case \"\\\\tbinom\":\n        hasBarLine = false;\n        leftDelim = \"(\";\n        rightDelim = \")\";\n        break;\n\n      case \"\\\\\\\\bracefrac\":\n        hasBarLine = false;\n        leftDelim = \"\\\\{\";\n        rightDelim = \"\\\\}\";\n        break;\n\n      case \"\\\\\\\\brackfrac\":\n        hasBarLine = false;\n        leftDelim = \"[\";\n        rightDelim = \"]\";\n        break;\n\n      default:\n        throw new Error(\"Unrecognized genfrac command\");\n    }\n\n    switch (funcName) {\n      case \"\\\\dfrac\":\n      case \"\\\\dbinom\":\n        size = \"display\";\n        break;\n\n      case \"\\\\tfrac\":\n      case \"\\\\tbinom\":\n        size = \"text\";\n        break;\n    }\n\n    return {\n      type: \"genfrac\",\n      mode: parser.mode,\n      continued: false,\n      numer,\n      denom,\n      hasBarLine,\n      leftDelim,\n      rightDelim,\n      size,\n      barSize: null\n    };\n  },\n  htmlBuilder: htmlBuilder$4,\n  mathmlBuilder: mathmlBuilder$3\n});\ndefineFunction({\n  type: \"genfrac\",\n  names: [\"\\\\cfrac\"],\n  props: {\n    numArgs: 2\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref2;\n    var numer = args[0];\n    var denom = args[1];\n    return {\n      type: \"genfrac\",\n      mode: parser.mode,\n      continued: true,\n      numer,\n      denom,\n      hasBarLine: true,\n      leftDelim: null,\n      rightDelim: null,\n      size: \"display\",\n      barSize: null\n    };\n  }\n}); // Infix generalized fractions -- these are not rendered directly, but replaced\n// immediately by one of the variants above.\n\ndefineFunction({\n  type: \"infix\",\n  names: [\"\\\\over\", \"\\\\choose\", \"\\\\atop\", \"\\\\brace\", \"\\\\brack\"],\n  props: {\n    numArgs: 0,\n    infix: true\n  },\n\n  handler(_ref3) {\n    var {\n      parser,\n      funcName,\n      token\n    } = _ref3;\n    var replaceWith;\n\n    switch (funcName) {\n      case \"\\\\over\":\n        replaceWith = \"\\\\frac\";\n        break;\n\n      case \"\\\\choose\":\n        replaceWith = \"\\\\binom\";\n        break;\n\n      case \"\\\\atop\":\n        replaceWith = \"\\\\\\\\atopfrac\";\n        break;\n\n      case \"\\\\brace\":\n        replaceWith = \"\\\\\\\\bracefrac\";\n        break;\n\n      case \"\\\\brack\":\n        replaceWith = \"\\\\\\\\brackfrac\";\n        break;\n\n      default:\n        throw new Error(\"Unrecognized infix genfrac command\");\n    }\n\n    return {\n      type: \"infix\",\n      mode: parser.mode,\n      replaceWith,\n      token\n    };\n  }\n\n});\nvar stylArray = [\"display\", \"text\", \"script\", \"scriptscript\"];\n\nvar delimFromValue = function delimFromValue(delimString) {\n  var delim = null;\n\n  if (delimString.length > 0) {\n    delim = delimString;\n    delim = delim === \".\" ? null : delim;\n  }\n\n  return delim;\n};\n\ndefineFunction({\n  type: \"genfrac\",\n  names: [\"\\\\genfrac\"],\n  props: {\n    numArgs: 6,\n    allowedInArgument: true,\n    argTypes: [\"math\", \"math\", \"size\", \"text\", \"math\", \"math\"]\n  },\n\n  handler(_ref4, args) {\n    var {\n      parser\n    } = _ref4;\n    var numer = args[4];\n    var denom = args[5]; // Look into the parse nodes to get the desired delimiters.\n\n    var leftNode = normalizeArgument(args[0]);\n    var leftDelim = leftNode.type === \"atom\" && leftNode.family === \"open\" ? delimFromValue(leftNode.text) : null;\n    var rightNode = normalizeArgument(args[1]);\n    var rightDelim = rightNode.type === \"atom\" && rightNode.family === \"close\" ? delimFromValue(rightNode.text) : null;\n    var barNode = assertNodeType(args[2], \"size\");\n    var hasBarLine;\n    var barSize = null;\n\n    if (barNode.isBlank) {\n      // \\genfrac acts differently than \\above.\n      // \\genfrac treats an empty size group as a signal to use a\n      // standard bar size. \\above would see size = 0 and omit the bar.\n      hasBarLine = true;\n    } else {\n      barSize = barNode.value;\n      hasBarLine = barSize.number > 0;\n    } // Find out if we want displaystyle, textstyle, etc.\n\n\n    var size = \"auto\";\n    var styl = args[3];\n\n    if (styl.type === \"ordgroup\") {\n      if (styl.body.length > 0) {\n        var textOrd = assertNodeType(styl.body[0], \"textord\");\n        size = stylArray[Number(textOrd.text)];\n      }\n    } else {\n      styl = assertNodeType(styl, \"textord\");\n      size = stylArray[Number(styl.text)];\n    }\n\n    return {\n      type: \"genfrac\",\n      mode: parser.mode,\n      numer,\n      denom,\n      continued: false,\n      hasBarLine,\n      barSize,\n      leftDelim,\n      rightDelim,\n      size\n    };\n  },\n\n  htmlBuilder: htmlBuilder$4,\n  mathmlBuilder: mathmlBuilder$3\n}); // \\above is an infix fraction that also defines a fraction bar size.\n\ndefineFunction({\n  type: \"infix\",\n  names: [\"\\\\above\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"size\"],\n    infix: true\n  },\n\n  handler(_ref5, args) {\n    var {\n      parser,\n      funcName,\n      token\n    } = _ref5;\n    return {\n      type: \"infix\",\n      mode: parser.mode,\n      replaceWith: \"\\\\\\\\abovefrac\",\n      size: assertNodeType(args[0], \"size\").value,\n      token\n    };\n  }\n\n});\ndefineFunction({\n  type: \"genfrac\",\n  names: [\"\\\\\\\\abovefrac\"],\n  props: {\n    numArgs: 3,\n    argTypes: [\"math\", \"size\", \"math\"]\n  },\n  handler: (_ref6, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref6;\n    var numer = args[0];\n    var barSize = assert(assertNodeType(args[1], \"infix\").size);\n    var denom = args[2];\n    var hasBarLine = barSize.number > 0;\n    return {\n      type: \"genfrac\",\n      mode: parser.mode,\n      numer,\n      denom,\n      continued: false,\n      hasBarLine,\n      barSize,\n      leftDelim: null,\n      rightDelim: null,\n      size: \"auto\"\n    };\n  },\n  htmlBuilder: htmlBuilder$4,\n  mathmlBuilder: mathmlBuilder$3\n});\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"horizBrace\", but\n// also \"supsub\" since an over/underbrace can affect super/subscripting.\nvar htmlBuilder$3 = (grp, options) => {\n  var style = options.style; // Pull out the `ParseNode<\"horizBrace\">` if `grp` is a \"supsub\" node.\n\n  var supSubGroup;\n  var group;\n\n  if (grp.type === \"supsub\") {\n    // Ref: LaTeX source2e: }}}}\\limits}\n    // i.e. LaTeX treats the brace similar to an op and passes it\n    // with \\limits, so we need to assign supsub style.\n    supSubGroup = grp.sup ? buildGroup$1(grp.sup, options.havingStyle(style.sup()), options) : buildGroup$1(grp.sub, options.havingStyle(style.sub()), options);\n    group = assertNodeType(grp.base, \"horizBrace\");\n  } else {\n    group = assertNodeType(grp, \"horizBrace\");\n  } // Build the base group\n\n\n  var body = buildGroup$1(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element\n\n  var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns        ┏━━━━━━━━┓\n  // This first vlist contains the content and the brace:   equation\n\n  var vlist;\n\n  if (group.isOver) {\n    vlist = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: body\n      }, {\n        type: \"kern\",\n        size: 0.1\n      }, {\n        type: \"elem\",\n        elem: braceBody\n      }]\n    }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n    vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n  } else {\n    vlist = buildCommon.makeVList({\n      positionType: \"bottom\",\n      positionData: body.depth + 0.1 + braceBody.height,\n      children: [{\n        type: \"elem\",\n        elem: braceBody\n      }, {\n        type: \"kern\",\n        size: 0.1\n      }, {\n        type: \"elem\",\n        elem: body\n      }]\n    }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n    vlist.children[0].children[0].children[0].classes.push(\"svg-align\");\n  }\n\n  if (supSubGroup) {\n    // To write the supsub, wrap the first vlist in another vlist:\n    // They can't all go in the same vlist, because the note might be\n    // wider than the equation. We want the equation to control the\n    // brace width.\n    //      note          long note           long note\n    //   ┏━━━━━━━━┓   or    ┏━━━┓     not    ┏━━━━━━━━━┓\n    //    equation           eqn                 eqn\n    var vSpan = buildCommon.makeSpan([\"mord\", group.isOver ? \"mover\" : \"munder\"], [vlist], options);\n\n    if (group.isOver) {\n      vlist = buildCommon.makeVList({\n        positionType: \"firstBaseline\",\n        children: [{\n          type: \"elem\",\n          elem: vSpan\n        }, {\n          type: \"kern\",\n          size: 0.2\n        }, {\n          type: \"elem\",\n          elem: supSubGroup\n        }]\n      }, options);\n    } else {\n      vlist = buildCommon.makeVList({\n        positionType: \"bottom\",\n        positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,\n        children: [{\n          type: \"elem\",\n          elem: supSubGroup\n        }, {\n          type: \"kern\",\n          size: 0.2\n        }, {\n          type: \"elem\",\n          elem: vSpan\n        }]\n      }, options);\n    }\n  }\n\n  return buildCommon.makeSpan([\"mord\", group.isOver ? \"mover\" : \"munder\"], [vlist], options);\n};\n\nvar mathmlBuilder$2 = (group, options) => {\n  var accentNode = stretchy.mathMLnode(group.label);\n  return new mathMLTree.MathNode(group.isOver ? \"mover\" : \"munder\", [buildGroup(group.base, options), accentNode]);\n}; // Horizontal stretchy braces\n\n\ndefineFunction({\n  type: \"horizBrace\",\n  names: [\"\\\\overbrace\", \"\\\\underbrace\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    return {\n      type: \"horizBrace\",\n      mode: parser.mode,\n      label: funcName,\n      isOver: /^\\\\over/.test(funcName),\n      base: args[0]\n    };\n  },\n\n  htmlBuilder: htmlBuilder$3,\n  mathmlBuilder: mathmlBuilder$2\n});\n\ndefineFunction({\n  type: \"href\",\n  names: [\"\\\\href\"],\n  props: {\n    numArgs: 2,\n    argTypes: [\"url\", \"original\"],\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser\n    } = _ref;\n    var body = args[1];\n    var href = assertNodeType(args[0], \"url\").url;\n\n    if (!parser.settings.isTrusted({\n      command: \"\\\\href\",\n      url: href\n    })) {\n      return parser.formatUnsupportedCmd(\"\\\\href\");\n    }\n\n    return {\n      type: \"href\",\n      mode: parser.mode,\n      href,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var elements = buildExpression$1(group.body, options, false);\n    return buildCommon.makeAnchor(group.href, [], elements, options);\n  },\n  mathmlBuilder: (group, options) => {\n    var math = buildExpressionRow(group.body, options);\n\n    if (!(math instanceof MathNode)) {\n      math = new MathNode(\"mrow\", [math]);\n    }\n\n    math.setAttribute(\"href\", group.href);\n    return math;\n  }\n});\ndefineFunction({\n  type: \"href\",\n  names: [\"\\\\url\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"url\"],\n    allowedInText: true\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser\n    } = _ref2;\n    var href = assertNodeType(args[0], \"url\").url;\n\n    if (!parser.settings.isTrusted({\n      command: \"\\\\url\",\n      url: href\n    })) {\n      return parser.formatUnsupportedCmd(\"\\\\url\");\n    }\n\n    var chars = [];\n\n    for (var i = 0; i < href.length; i++) {\n      var c = href[i];\n\n      if (c === \"~\") {\n        c = \"\\\\textasciitilde\";\n      }\n\n      chars.push({\n        type: \"textord\",\n        mode: \"text\",\n        text: c\n      });\n    }\n\n    var body = {\n      type: \"text\",\n      mode: parser.mode,\n      font: \"\\\\texttt\",\n      body: chars\n    };\n    return {\n      type: \"href\",\n      mode: parser.mode,\n      href,\n      body: ordargument(body)\n    };\n  }\n});\n\n// In LaTeX, \\vcenter can act only on a box, as in\n// \\vcenter{\\hbox{$\\frac{a+b}{\\dfrac{c}{d}}$}}\n// This function by itself doesn't do anything but prevent a soft line break.\n\ndefineFunction({\n  type: \"hbox\",\n  names: [\"\\\\hbox\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"text\"],\n    allowedInText: true,\n    primitive: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"hbox\",\n      mode: parser.mode,\n      body: ordargument(args[0])\n    };\n  },\n\n  htmlBuilder(group, options) {\n    var elements = buildExpression$1(group.body, options, false);\n    return buildCommon.makeFragment(elements);\n  },\n\n  mathmlBuilder(group, options) {\n    return new mathMLTree.MathNode(\"mrow\", buildExpression(group.body, options));\n  }\n\n});\n\ndefineFunction({\n  type: \"html\",\n  names: [\"\\\\htmlClass\", \"\\\\htmlId\", \"\\\\htmlStyle\", \"\\\\htmlData\"],\n  props: {\n    numArgs: 2,\n    argTypes: [\"raw\", \"original\"],\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName,\n      token\n    } = _ref;\n    var value = assertNodeType(args[0], \"raw\").string;\n    var body = args[1];\n\n    if (parser.settings.strict) {\n      parser.settings.reportNonstrict(\"htmlExtension\", \"HTML extension is disabled on strict mode\");\n    }\n\n    var trustContext;\n    var attributes = {};\n\n    switch (funcName) {\n      case \"\\\\htmlClass\":\n        attributes.class = value;\n        trustContext = {\n          command: \"\\\\htmlClass\",\n          class: value\n        };\n        break;\n\n      case \"\\\\htmlId\":\n        attributes.id = value;\n        trustContext = {\n          command: \"\\\\htmlId\",\n          id: value\n        };\n        break;\n\n      case \"\\\\htmlStyle\":\n        attributes.style = value;\n        trustContext = {\n          command: \"\\\\htmlStyle\",\n          style: value\n        };\n        break;\n\n      case \"\\\\htmlData\":\n        {\n          var data = value.split(\",\");\n\n          for (var i = 0; i < data.length; i++) {\n            var keyVal = data[i].split(\"=\");\n\n            if (keyVal.length !== 2) {\n              throw new ParseError(\"Error parsing key-value for \\\\htmlData\");\n            }\n\n            attributes[\"data-\" + keyVal[0].trim()] = keyVal[1].trim();\n          }\n\n          trustContext = {\n            command: \"\\\\htmlData\",\n            attributes\n          };\n          break;\n        }\n\n      default:\n        throw new Error(\"Unrecognized html command\");\n    }\n\n    if (!parser.settings.isTrusted(trustContext)) {\n      return parser.formatUnsupportedCmd(funcName);\n    }\n\n    return {\n      type: \"html\",\n      mode: parser.mode,\n      attributes,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var elements = buildExpression$1(group.body, options, false);\n    var classes = [\"enclosing\"];\n\n    if (group.attributes.class) {\n      classes.push(...group.attributes.class.trim().split(/\\s+/));\n    }\n\n    var span = buildCommon.makeSpan(classes, elements, options);\n\n    for (var attr in group.attributes) {\n      if (attr !== \"class\" && group.attributes.hasOwnProperty(attr)) {\n        span.setAttribute(attr, group.attributes[attr]);\n      }\n    }\n\n    return span;\n  },\n  mathmlBuilder: (group, options) => {\n    return buildExpressionRow(group.body, options);\n  }\n});\n\ndefineFunction({\n  type: \"htmlmathml\",\n  names: [\"\\\\html@mathml\"],\n  props: {\n    numArgs: 2,\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"htmlmathml\",\n      mode: parser.mode,\n      html: ordargument(args[0]),\n      mathml: ordargument(args[1])\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var elements = buildExpression$1(group.html, options, false);\n    return buildCommon.makeFragment(elements);\n  },\n  mathmlBuilder: (group, options) => {\n    return buildExpressionRow(group.mathml, options);\n  }\n});\n\nvar sizeData = function sizeData(str) {\n  if (/^[-+]? *(\\d+(\\.\\d*)?|\\.\\d+)$/.test(str)) {\n    // str is a number with no unit specified.\n    // default unit is bp, per graphix package.\n    return {\n      number: +str,\n      unit: \"bp\"\n    };\n  } else {\n    var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(str);\n\n    if (!match) {\n      throw new ParseError(\"Invalid size: '\" + str + \"' in \\\\includegraphics\");\n    }\n\n    var data = {\n      number: +(match[1] + match[2]),\n      // sign + magnitude, cast to number\n      unit: match[3]\n    };\n\n    if (!validUnit(data)) {\n      throw new ParseError(\"Invalid unit: '\" + data.unit + \"' in \\\\includegraphics.\");\n    }\n\n    return data;\n  }\n};\n\ndefineFunction({\n  type: \"includegraphics\",\n  names: [\"\\\\includegraphics\"],\n  props: {\n    numArgs: 1,\n    numOptionalArgs: 1,\n    argTypes: [\"raw\", \"url\"],\n    allowedInText: false\n  },\n  handler: (_ref, args, optArgs) => {\n    var {\n      parser\n    } = _ref;\n    var width = {\n      number: 0,\n      unit: \"em\"\n    };\n    var height = {\n      number: 0.9,\n      unit: \"em\"\n    }; // sorta character sized.\n\n    var totalheight = {\n      number: 0,\n      unit: \"em\"\n    };\n    var alt = \"\";\n\n    if (optArgs[0]) {\n      var attributeStr = assertNodeType(optArgs[0], \"raw\").string; // Parser.js does not parse key/value pairs. We get a string.\n\n      var attributes = attributeStr.split(\",\");\n\n      for (var i = 0; i < attributes.length; i++) {\n        var keyVal = attributes[i].split(\"=\");\n\n        if (keyVal.length === 2) {\n          var str = keyVal[1].trim();\n\n          switch (keyVal[0].trim()) {\n            case \"alt\":\n              alt = str;\n              break;\n\n            case \"width\":\n              width = sizeData(str);\n              break;\n\n            case \"height\":\n              height = sizeData(str);\n              break;\n\n            case \"totalheight\":\n              totalheight = sizeData(str);\n              break;\n\n            default:\n              throw new ParseError(\"Invalid key: '\" + keyVal[0] + \"' in \\\\includegraphics.\");\n          }\n        }\n      }\n    }\n\n    var src = assertNodeType(args[0], \"url\").url;\n\n    if (alt === \"\") {\n      // No alt given. Use the file name. Strip away the path.\n      alt = src;\n      alt = alt.replace(/^.*[\\\\/]/, '');\n      alt = alt.substring(0, alt.lastIndexOf('.'));\n    }\n\n    if (!parser.settings.isTrusted({\n      command: \"\\\\includegraphics\",\n      url: src\n    })) {\n      return parser.formatUnsupportedCmd(\"\\\\includegraphics\");\n    }\n\n    return {\n      type: \"includegraphics\",\n      mode: parser.mode,\n      alt: alt,\n      width: width,\n      height: height,\n      totalheight: totalheight,\n      src: src\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var height = calculateSize(group.height, options);\n    var depth = 0;\n\n    if (group.totalheight.number > 0) {\n      depth = calculateSize(group.totalheight, options) - height;\n    }\n\n    var width = 0;\n\n    if (group.width.number > 0) {\n      width = calculateSize(group.width, options);\n    }\n\n    var style = {\n      height: makeEm(height + depth)\n    };\n\n    if (width > 0) {\n      style.width = makeEm(width);\n    }\n\n    if (depth > 0) {\n      style.verticalAlign = makeEm(-depth);\n    }\n\n    var node = new Img(group.src, group.alt, style);\n    node.height = height;\n    node.depth = depth;\n    return node;\n  },\n  mathmlBuilder: (group, options) => {\n    var node = new mathMLTree.MathNode(\"mglyph\", []);\n    node.setAttribute(\"alt\", group.alt);\n    var height = calculateSize(group.height, options);\n    var depth = 0;\n\n    if (group.totalheight.number > 0) {\n      depth = calculateSize(group.totalheight, options) - height;\n      node.setAttribute(\"valign\", makeEm(-depth));\n    }\n\n    node.setAttribute(\"height\", makeEm(height + depth));\n\n    if (group.width.number > 0) {\n      var width = calculateSize(group.width, options);\n      node.setAttribute(\"width\", makeEm(width));\n    }\n\n    node.setAttribute(\"src\", group.src);\n    return node;\n  }\n});\n\n// Horizontal spacing commands\n\ndefineFunction({\n  type: \"kern\",\n  names: [\"\\\\kern\", \"\\\\mkern\", \"\\\\hskip\", \"\\\\mskip\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"size\"],\n    primitive: true,\n    allowedInText: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var size = assertNodeType(args[0], \"size\");\n\n    if (parser.settings.strict) {\n      var mathFunction = funcName[1] === 'm'; // \\mkern, \\mskip\n\n      var muUnit = size.value.unit === 'mu';\n\n      if (mathFunction) {\n        if (!muUnit) {\n          parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" supports only mu units, \" + (\"not \" + size.value.unit + \" units\"));\n        }\n\n        if (parser.mode !== \"math\") {\n          parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" works only in math mode\");\n        }\n      } else {\n        // !mathFunction\n        if (muUnit) {\n          parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" doesn't support mu units\");\n        }\n      }\n    }\n\n    return {\n      type: \"kern\",\n      mode: parser.mode,\n      dimension: size.value\n    };\n  },\n\n  htmlBuilder(group, options) {\n    return buildCommon.makeGlue(group.dimension, options);\n  },\n\n  mathmlBuilder(group, options) {\n    var dimension = calculateSize(group.dimension, options);\n    return new mathMLTree.SpaceNode(dimension);\n  }\n\n});\n\n// Horizontal overlap functions\ndefineFunction({\n  type: \"lap\",\n  names: [\"\\\\mathllap\", \"\\\\mathrlap\", \"\\\\mathclap\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"lap\",\n      mode: parser.mode,\n      alignment: funcName.slice(5),\n      body\n    };\n  },\n  htmlBuilder: (group, options) => {\n    // mathllap, mathrlap, mathclap\n    var inner;\n\n    if (group.alignment === \"clap\") {\n      // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/\n      inner = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span\n\n      inner = buildCommon.makeSpan([\"inner\"], [inner], options);\n    } else {\n      inner = buildCommon.makeSpan([\"inner\"], [buildGroup$1(group.body, options)]);\n    }\n\n    var fix = buildCommon.makeSpan([\"fix\"], []);\n    var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the\n    // two items involved in the lap.\n    // Next, use a strut to set the height of the HTML bounding box.\n    // Otherwise, a tall argument may be misplaced.\n    // This code resolved issue #1153\n\n    var strut = buildCommon.makeSpan([\"strut\"]);\n    strut.style.height = makeEm(node.height + node.depth);\n\n    if (node.depth) {\n      strut.style.verticalAlign = makeEm(-node.depth);\n    }\n\n    node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall.\n    // This code resolves issue #1234\n\n    node = buildCommon.makeSpan([\"thinbox\"], [node], options);\n    return buildCommon.makeSpan([\"mord\", \"vbox\"], [node], options);\n  },\n  mathmlBuilder: (group, options) => {\n    // mathllap, mathrlap, mathclap\n    var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n\n    if (group.alignment !== \"rlap\") {\n      var offset = group.alignment === \"llap\" ? \"-1\" : \"-0.5\";\n      node.setAttribute(\"lspace\", offset + \"width\");\n    }\n\n    node.setAttribute(\"width\", \"0px\");\n    return node;\n  }\n});\n\ndefineFunction({\n  type: \"styling\",\n  names: [\"\\\\(\", \"$\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    allowedInMath: false\n  },\n\n  handler(_ref, args) {\n    var {\n      funcName,\n      parser\n    } = _ref;\n    var outerMode = parser.mode;\n    parser.switchMode(\"math\");\n    var close = funcName === \"\\\\(\" ? \"\\\\)\" : \"$\";\n    var body = parser.parseExpression(false, close);\n    parser.expect(close);\n    parser.switchMode(outerMode);\n    return {\n      type: \"styling\",\n      mode: parser.mode,\n      style: \"text\",\n      body\n    };\n  }\n\n}); // Check for extra closing math delimiters\n\ndefineFunction({\n  type: \"text\",\n  // Doesn't matter what this is.\n  names: [\"\\\\)\", \"\\\\]\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    allowedInMath: false\n  },\n\n  handler(context, args) {\n    throw new ParseError(\"Mismatched \" + context.funcName);\n  }\n\n});\n\nvar chooseMathStyle = (group, options) => {\n  switch (options.style.size) {\n    case Style$1.DISPLAY.size:\n      return group.display;\n\n    case Style$1.TEXT.size:\n      return group.text;\n\n    case Style$1.SCRIPT.size:\n      return group.script;\n\n    case Style$1.SCRIPTSCRIPT.size:\n      return group.scriptscript;\n\n    default:\n      return group.text;\n  }\n};\n\ndefineFunction({\n  type: \"mathchoice\",\n  names: [\"\\\\mathchoice\"],\n  props: {\n    numArgs: 4,\n    primitive: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"mathchoice\",\n      mode: parser.mode,\n      display: ordargument(args[0]),\n      text: ordargument(args[1]),\n      script: ordargument(args[2]),\n      scriptscript: ordargument(args[3])\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var body = chooseMathStyle(group, options);\n    var elements = buildExpression$1(body, options, false);\n    return buildCommon.makeFragment(elements);\n  },\n  mathmlBuilder: (group, options) => {\n    var body = chooseMathStyle(group, options);\n    return buildExpressionRow(body, options);\n  }\n});\n\nvar assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => {\n  base = buildCommon.makeSpan([], [base]);\n  var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup);\n  var sub;\n  var sup; // We manually have to handle the superscripts and subscripts. This,\n  // aside from the kern calculations, is copied from supsub.\n\n  if (supGroup) {\n    var elem = buildGroup$1(supGroup, options.havingStyle(style.sup()), options);\n    sup = {\n      elem,\n      kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)\n    };\n  }\n\n  if (subGroup) {\n    var _elem = buildGroup$1(subGroup, options.havingStyle(style.sub()), options);\n\n    sub = {\n      elem: _elem,\n      kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height)\n    };\n  } // Build the final group as a vlist of the possible subscript, base,\n  // and possible superscript.\n\n\n  var finalGroup;\n\n  if (sup && sub) {\n    var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;\n    finalGroup = buildCommon.makeVList({\n      positionType: \"bottom\",\n      positionData: bottom,\n      children: [{\n        type: \"kern\",\n        size: options.fontMetrics().bigOpSpacing5\n      }, {\n        type: \"elem\",\n        elem: sub.elem,\n        marginLeft: makeEm(-slant)\n      }, {\n        type: \"kern\",\n        size: sub.kern\n      }, {\n        type: \"elem\",\n        elem: base\n      }, {\n        type: \"kern\",\n        size: sup.kern\n      }, {\n        type: \"elem\",\n        elem: sup.elem,\n        marginLeft: makeEm(slant)\n      }, {\n        type: \"kern\",\n        size: options.fontMetrics().bigOpSpacing5\n      }]\n    }, options);\n  } else if (sub) {\n    var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note\n    // that we are supposed to shift the limits by 1/2 of the slant,\n    // but since we are centering the limits adding a full slant of\n    // margin will shift by 1/2 that.\n\n    finalGroup = buildCommon.makeVList({\n      positionType: \"top\",\n      positionData: top,\n      children: [{\n        type: \"kern\",\n        size: options.fontMetrics().bigOpSpacing5\n      }, {\n        type: \"elem\",\n        elem: sub.elem,\n        marginLeft: makeEm(-slant)\n      }, {\n        type: \"kern\",\n        size: sub.kern\n      }, {\n        type: \"elem\",\n        elem: base\n      }]\n    }, options);\n  } else if (sup) {\n    var _bottom = base.depth + baseShift;\n\n    finalGroup = buildCommon.makeVList({\n      positionType: \"bottom\",\n      positionData: _bottom,\n      children: [{\n        type: \"elem\",\n        elem: base\n      }, {\n        type: \"kern\",\n        size: sup.kern\n      }, {\n        type: \"elem\",\n        elem: sup.elem,\n        marginLeft: makeEm(slant)\n      }, {\n        type: \"kern\",\n        size: options.fontMetrics().bigOpSpacing5\n      }]\n    }, options);\n  } else {\n    // This case probably shouldn't occur (this would mean the\n    // supsub was sending us a group with no superscript or\n    // subscript) but be safe.\n    return base;\n  }\n\n  var parts = [finalGroup];\n\n  if (sub && slant !== 0 && !subIsSingleCharacter) {\n    // A negative margin-left was applied to the lower limit.\n    // Avoid an overlap by placing a spacer on the left on the group.\n    var spacer = buildCommon.makeSpan([\"mspace\"], [], options);\n    spacer.style.marginRight = makeEm(slant);\n    parts.unshift(spacer);\n  }\n\n  return buildCommon.makeSpan([\"mop\", \"op-limits\"], parts, options);\n};\n\n// Limits, symbols\n// Most operators have a large successor symbol, but these don't.\nvar noSuccessor = [\"\\\\smallint\"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only \"op\", but also\n// \"supsub\" since some of them (like \\int) can affect super/subscripting.\n\nvar htmlBuilder$2 = (grp, options) => {\n  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n  var supGroup;\n  var subGroup;\n  var hasLimits = false;\n  var group;\n\n  if (grp.type === \"supsub\") {\n    // If we have limits, supsub will pass us its group to handle. Pull\n    // out the superscript and subscript and set the group to the op in\n    // its base.\n    supGroup = grp.sup;\n    subGroup = grp.sub;\n    group = assertNodeType(grp.base, \"op\");\n    hasLimits = true;\n  } else {\n    group = assertNodeType(grp, \"op\");\n  }\n\n  var style = options.style;\n  var large = false;\n\n  if (style.size === Style$1.DISPLAY.size && group.symbol && !noSuccessor.includes(group.name)) {\n    // Most symbol operators get larger in displaystyle (rule 13)\n    large = true;\n  }\n\n  var base;\n\n  if (group.symbol) {\n    // If this is a symbol, create the symbol.\n    var fontName = large ? \"Size2-Regular\" : \"Size1-Regular\";\n    var stash = \"\";\n\n    if (group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") {\n      // No font glyphs yet, so use a glyph w/o the oval.\n      // TODO: When font glyphs are available, delete this code.\n      stash = group.name.slice(1);\n      group.name = stash === \"oiint\" ? \"\\\\iint\" : \"\\\\iiint\";\n    }\n\n    base = buildCommon.makeSymbol(group.name, fontName, \"math\", options, [\"mop\", \"op-symbol\", large ? \"large-op\" : \"small-op\"]);\n\n    if (stash.length > 0) {\n      // We're in \\oiint or \\oiiint. Overlay the oval.\n      // TODO: When font glyphs are available, delete this code.\n      var italic = base.italic;\n      var oval = buildCommon.staticSvg(stash + \"Size\" + (large ? \"2\" : \"1\"), options);\n      base = buildCommon.makeVList({\n        positionType: \"individualShift\",\n        children: [{\n          type: \"elem\",\n          elem: base,\n          shift: 0\n        }, {\n          type: \"elem\",\n          elem: oval,\n          shift: large ? 0.08 : 0\n        }]\n      }, options);\n      group.name = \"\\\\\" + stash;\n      base.classes.unshift(\"mop\"); // $FlowFixMe\n\n      base.italic = italic;\n    }\n  } else if (group.body) {\n    // If this is a list, compose that list.\n    var inner = buildExpression$1(group.body, options, true);\n\n    if (inner.length === 1 && inner[0] instanceof SymbolNode) {\n      base = inner[0];\n      base.classes[0] = \"mop\"; // replace old mclass\n    } else {\n      base = buildCommon.makeSpan([\"mop\"], inner, options);\n    }\n  } else {\n    // Otherwise, this is a text operator. Build the text from the\n    // operator's name.\n    var output = [];\n\n    for (var i = 1; i < group.name.length; i++) {\n      output.push(buildCommon.mathsym(group.name[i], group.mode, options));\n    }\n\n    base = buildCommon.makeSpan([\"mop\"], output, options);\n  } // If content of op is a single symbol, shift it vertically.\n\n\n  var baseShift = 0;\n  var slant = 0;\n\n  if ((base instanceof SymbolNode || group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") && !group.suppressBaseShift) {\n    // We suppress the shift of the base of \\overset and \\underset. Otherwise,\n    // shift the symbol so its center lies on the axis (rule 13). It\n    // appears that our fonts have the centers of the symbols already\n    // almost on the axis, so these numbers are very small. Note we\n    // don't actually apply this here, but instead it is used either in\n    // the vlist creation or separately when there are no limits.\n    baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction.\n    // $FlowFixMe\n\n    slant = base.italic;\n  }\n\n  if (hasLimits) {\n    return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);\n  } else {\n    if (baseShift) {\n      base.style.position = \"relative\";\n      base.style.top = makeEm(baseShift);\n    }\n\n    return base;\n  }\n};\n\nvar mathmlBuilder$1 = (group, options) => {\n  var node;\n\n  if (group.symbol) {\n    // This is a symbol. Just add the symbol.\n    node = new MathNode(\"mo\", [makeText(group.name, group.mode)]);\n\n    if (noSuccessor.includes(group.name)) {\n      node.setAttribute(\"largeop\", \"false\");\n    }\n  } else if (group.body) {\n    // This is an operator with children. Add them.\n    node = new MathNode(\"mo\", buildExpression(group.body, options));\n  } else {\n    // This is a text operator. Add all of the characters from the\n    // operator's name.\n    node = new MathNode(\"mi\", [new TextNode(group.name.slice(1))]); // Append an <mo>&ApplyFunction;</mo>.\n    // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4\n\n    var operator = new MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n\n    if (group.parentIsSupSub) {\n      node = new MathNode(\"mrow\", [node, operator]);\n    } else {\n      node = newDocumentFragment([node, operator]);\n    }\n  }\n\n  return node;\n};\n\nvar singleCharBigOps = {\n  \"\\u220F\": \"\\\\prod\",\n  \"\\u2210\": \"\\\\coprod\",\n  \"\\u2211\": \"\\\\sum\",\n  \"\\u22c0\": \"\\\\bigwedge\",\n  \"\\u22c1\": \"\\\\bigvee\",\n  \"\\u22c2\": \"\\\\bigcap\",\n  \"\\u22c3\": \"\\\\bigcup\",\n  \"\\u2a00\": \"\\\\bigodot\",\n  \"\\u2a01\": \"\\\\bigoplus\",\n  \"\\u2a02\": \"\\\\bigotimes\",\n  \"\\u2a04\": \"\\\\biguplus\",\n  \"\\u2a06\": \"\\\\bigsqcup\"\n};\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\coprod\", \"\\\\bigvee\", \"\\\\bigwedge\", \"\\\\biguplus\", \"\\\\bigcap\", \"\\\\bigcup\", \"\\\\intop\", \"\\\\prod\", \"\\\\sum\", \"\\\\bigotimes\", \"\\\\bigoplus\", \"\\\\bigodot\", \"\\\\bigsqcup\", \"\\\\smallint\", \"\\u220F\", \"\\u2210\", \"\\u2211\", \"\\u22c0\", \"\\u22c1\", \"\\u22c2\", \"\\u22c3\", \"\\u2a00\", \"\\u2a01\", \"\\u2a02\", \"\\u2a04\", \"\\u2a06\"],\n  props: {\n    numArgs: 0\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var fName = funcName;\n\n    if (fName.length === 1) {\n      fName = singleCharBigOps[fName];\n    }\n\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: true,\n      parentIsSupSub: false,\n      symbol: true,\n      name: fName\n    };\n  },\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n}); // Note: calling defineFunction with a type that's already been defined only\n// works because the same htmlBuilder and mathmlBuilder are being used.\n\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\mathop\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser\n    } = _ref2;\n    var body = args[0];\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: false,\n      parentIsSupSub: false,\n      symbol: false,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n}); // There are 2 flags for operators; whether they produce limits in\n// displaystyle, and whether they are symbols and should grow in\n// displaystyle. These four groups cover the four possible choices.\n\nvar singleCharIntegrals = {\n  \"\\u222b\": \"\\\\int\",\n  \"\\u222c\": \"\\\\iint\",\n  \"\\u222d\": \"\\\\iiint\",\n  \"\\u222e\": \"\\\\oint\",\n  \"\\u222f\": \"\\\\oiint\",\n  \"\\u2230\": \"\\\\oiiint\"\n}; // No limits, not symbols\n\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\arcsin\", \"\\\\arccos\", \"\\\\arctan\", \"\\\\arctg\", \"\\\\arcctg\", \"\\\\arg\", \"\\\\ch\", \"\\\\cos\", \"\\\\cosec\", \"\\\\cosh\", \"\\\\cot\", \"\\\\cotg\", \"\\\\coth\", \"\\\\csc\", \"\\\\ctg\", \"\\\\cth\", \"\\\\deg\", \"\\\\dim\", \"\\\\exp\", \"\\\\hom\", \"\\\\ker\", \"\\\\lg\", \"\\\\ln\", \"\\\\log\", \"\\\\sec\", \"\\\\sin\", \"\\\\sinh\", \"\\\\sh\", \"\\\\tan\", \"\\\\tanh\", \"\\\\tg\", \"\\\\th\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(_ref3) {\n    var {\n      parser,\n      funcName\n    } = _ref3;\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: false,\n      parentIsSupSub: false,\n      symbol: false,\n      name: funcName\n    };\n  },\n\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n}); // Limits, not symbols\n\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\det\", \"\\\\gcd\", \"\\\\inf\", \"\\\\lim\", \"\\\\max\", \"\\\\min\", \"\\\\Pr\", \"\\\\sup\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(_ref4) {\n    var {\n      parser,\n      funcName\n    } = _ref4;\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: true,\n      parentIsSupSub: false,\n      symbol: false,\n      name: funcName\n    };\n  },\n\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n}); // No limits, symbols\n\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\int\", \"\\\\iint\", \"\\\\iiint\", \"\\\\oint\", \"\\\\oiint\", \"\\\\oiiint\", \"\\u222b\", \"\\u222c\", \"\\u222d\", \"\\u222e\", \"\\u222f\", \"\\u2230\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(_ref5) {\n    var {\n      parser,\n      funcName\n    } = _ref5;\n    var fName = funcName;\n\n    if (fName.length === 1) {\n      fName = singleCharIntegrals[fName];\n    }\n\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: false,\n      parentIsSupSub: false,\n      symbol: true,\n      name: fName\n    };\n  },\n\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n});\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only\n// \"operatorname\", but also  \"supsub\" since \\operatorname* can\n// affect super/subscripting.\nvar htmlBuilder$1 = (grp, options) => {\n  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n  var supGroup;\n  var subGroup;\n  var hasLimits = false;\n  var group;\n\n  if (grp.type === \"supsub\") {\n    // If we have limits, supsub will pass us its group to handle. Pull\n    // out the superscript and subscript and set the group to the op in\n    // its base.\n    supGroup = grp.sup;\n    subGroup = grp.sub;\n    group = assertNodeType(grp.base, \"operatorname\");\n    hasLimits = true;\n  } else {\n    group = assertNodeType(grp, \"operatorname\");\n  }\n\n  var base;\n\n  if (group.body.length > 0) {\n    var body = group.body.map(child => {\n      // $FlowFixMe: Check if the node has a string `text` property.\n      var childText = child.text;\n\n      if (typeof childText === \"string\") {\n        return {\n          type: \"textord\",\n          mode: child.mode,\n          text: childText\n        };\n      } else {\n        return child;\n      }\n    }); // Consolidate function names into symbol characters.\n\n    var expression = buildExpression$1(body, options.withFont(\"mathrm\"), true);\n\n    for (var i = 0; i < expression.length; i++) {\n      var child = expression[i];\n\n      if (child instanceof SymbolNode) {\n        // Per amsopn package,\n        // change minus to hyphen and \\ast to asterisk\n        child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n      }\n    }\n\n    base = buildCommon.makeSpan([\"mop\"], expression, options);\n  } else {\n    base = buildCommon.makeSpan([\"mop\"], [], options);\n  }\n\n  if (hasLimits) {\n    return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);\n  } else {\n    return base;\n  }\n};\n\nvar mathmlBuilder = (group, options) => {\n  // The steps taken here are similar to the html version.\n  var expression = buildExpression(group.body, options.withFont(\"mathrm\")); // Is expression a string or has it something like a fraction?\n\n  var isAllString = true; // default\n\n  for (var i = 0; i < expression.length; i++) {\n    var node = expression[i];\n\n    if (node instanceof mathMLTree.SpaceNode) ; else if (node instanceof mathMLTree.MathNode) {\n      switch (node.type) {\n        case \"mi\":\n        case \"mn\":\n        case \"ms\":\n        case \"mspace\":\n        case \"mtext\":\n          break;\n        // Do nothing yet.\n\n        case \"mo\":\n          {\n            var child = node.children[0];\n\n            if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {\n              child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n            } else {\n              isAllString = false;\n            }\n\n            break;\n          }\n\n        default:\n          isAllString = false;\n      }\n    } else {\n      isAllString = false;\n    }\n  }\n\n  if (isAllString) {\n    // Write a single TextNode instead of multiple nested tags.\n    var word = expression.map(node => node.toText()).join(\"\");\n    expression = [new mathMLTree.TextNode(word)];\n  }\n\n  var identifier = new mathMLTree.MathNode(\"mi\", expression);\n  identifier.setAttribute(\"mathvariant\", \"normal\"); // \\u2061 is the same as &ApplyFunction;\n  // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp\n\n  var operator = new mathMLTree.MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n\n  if (group.parentIsSupSub) {\n    return new mathMLTree.MathNode(\"mrow\", [identifier, operator]);\n  } else {\n    return mathMLTree.newDocumentFragment([identifier, operator]);\n  }\n}; // \\operatorname\n// amsopn.dtx: \\mathop{#1\\kern\\z@\\operator@font#3}\\newmcodes@\n\n\ndefineFunction({\n  type: \"operatorname\",\n  names: [\"\\\\operatorname@\", \"\\\\operatornamewithlimits\"],\n  props: {\n    numArgs: 1\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"operatorname\",\n      mode: parser.mode,\n      body: ordargument(body),\n      alwaysHandleSupSub: funcName === \"\\\\operatornamewithlimits\",\n      limits: false,\n      parentIsSupSub: false\n    };\n  },\n  htmlBuilder: htmlBuilder$1,\n  mathmlBuilder\n});\ndefineMacro(\"\\\\operatorname\", \"\\\\@ifstar\\\\operatornamewithlimits\\\\operatorname@\");\n\ndefineFunctionBuilders({\n  type: \"ordgroup\",\n\n  htmlBuilder(group, options) {\n    if (group.semisimple) {\n      return buildCommon.makeFragment(buildExpression$1(group.body, options, false));\n    }\n\n    return buildCommon.makeSpan([\"mord\"], buildExpression$1(group.body, options, true), options);\n  },\n\n  mathmlBuilder(group, options) {\n    return buildExpressionRow(group.body, options, true);\n  }\n\n});\n\ndefineFunction({\n  type: \"overline\",\n  names: [\"\\\\overline\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"overline\",\n      mode: parser.mode,\n      body\n    };\n  },\n\n  htmlBuilder(group, options) {\n    // Overlines are handled in the TeXbook pg 443, Rule 9.\n    // Build the inner group in the cramped style.\n    var innerGroup = buildGroup$1(group.body, options.havingCrampedStyle()); // Create the line above the body\n\n    var line = buildCommon.makeLineSpan(\"overline-line\", options); // Generate the vlist, with the appropriate kerns\n\n    var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n    var vlist = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: innerGroup\n      }, {\n        type: \"kern\",\n        size: 3 * defaultRuleThickness\n      }, {\n        type: \"elem\",\n        elem: line\n      }, {\n        type: \"kern\",\n        size: defaultRuleThickness\n      }]\n    }, options);\n    return buildCommon.makeSpan([\"mord\", \"overline\"], [vlist], options);\n  },\n\n  mathmlBuilder(group, options) {\n    var operator = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(\"\\u203e\")]);\n    operator.setAttribute(\"stretchy\", \"true\");\n    var node = new mathMLTree.MathNode(\"mover\", [buildGroup(group.body, options), operator]);\n    node.setAttribute(\"accent\", \"true\");\n    return node;\n  }\n\n});\n\ndefineFunction({\n  type: \"phantom\",\n  names: [\"\\\\phantom\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"phantom\",\n      mode: parser.mode,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var elements = buildExpression$1(group.body, options.withPhantom(), false); // \\phantom isn't supposed to affect the elements it contains.\n    // See \"color\" for more details.\n\n    return buildCommon.makeFragment(elements);\n  },\n  mathmlBuilder: (group, options) => {\n    var inner = buildExpression(group.body, options);\n    return new mathMLTree.MathNode(\"mphantom\", inner);\n  }\n});\ndefineFunction({\n  type: \"hphantom\",\n  names: [\"\\\\hphantom\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser\n    } = _ref2;\n    var body = args[0];\n    return {\n      type: \"hphantom\",\n      mode: parser.mode,\n      body\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options.withPhantom())]);\n    node.height = 0;\n    node.depth = 0;\n\n    if (node.children) {\n      for (var i = 0; i < node.children.length; i++) {\n        node.children[i].height = 0;\n        node.children[i].depth = 0;\n      }\n    } // See smash for comment re: use of makeVList\n\n\n    node = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: node\n      }]\n    }, options); // For spacing, TeX treats \\smash as a math group (same spacing as ord).\n\n    return buildCommon.makeSpan([\"mord\"], [node], options);\n  },\n  mathmlBuilder: (group, options) => {\n    var inner = buildExpression(ordargument(group.body), options);\n    var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n    var node = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n    node.setAttribute(\"height\", \"0px\");\n    node.setAttribute(\"depth\", \"0px\");\n    return node;\n  }\n});\ndefineFunction({\n  type: \"vphantom\",\n  names: [\"\\\\vphantom\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref3, args) => {\n    var {\n      parser\n    } = _ref3;\n    var body = args[0];\n    return {\n      type: \"vphantom\",\n      mode: parser.mode,\n      body\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var inner = buildCommon.makeSpan([\"inner\"], [buildGroup$1(group.body, options.withPhantom())]);\n    var fix = buildCommon.makeSpan([\"fix\"], []);\n    return buildCommon.makeSpan([\"mord\", \"rlap\"], [inner, fix], options);\n  },\n  mathmlBuilder: (group, options) => {\n    var inner = buildExpression(ordargument(group.body), options);\n    var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n    var node = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n    node.setAttribute(\"width\", \"0px\");\n    return node;\n  }\n});\n\ndefineFunction({\n  type: \"raisebox\",\n  names: [\"\\\\raisebox\"],\n  props: {\n    numArgs: 2,\n    argTypes: [\"size\", \"hbox\"],\n    allowedInText: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    var amount = assertNodeType(args[0], \"size\").value;\n    var body = args[1];\n    return {\n      type: \"raisebox\",\n      mode: parser.mode,\n      dy: amount,\n      body\n    };\n  },\n\n  htmlBuilder(group, options) {\n    var body = buildGroup$1(group.body, options);\n    var dy = calculateSize(group.dy, options);\n    return buildCommon.makeVList({\n      positionType: \"shift\",\n      positionData: -dy,\n      children: [{\n        type: \"elem\",\n        elem: body\n      }]\n    }, options);\n  },\n\n  mathmlBuilder(group, options) {\n    var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n    var dy = group.dy.number + group.dy.unit;\n    node.setAttribute(\"voffset\", dy);\n    return node;\n  }\n\n});\n\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\relax\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    allowedInArgument: true\n  },\n\n  handler(_ref) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"internal\",\n      mode: parser.mode\n    };\n  }\n\n});\n\ndefineFunction({\n  type: \"rule\",\n  names: [\"\\\\rule\"],\n  props: {\n    numArgs: 2,\n    numOptionalArgs: 1,\n    allowedInText: true,\n    allowedInMath: true,\n    argTypes: [\"size\", \"size\", \"size\"]\n  },\n\n  handler(_ref, args, optArgs) {\n    var {\n      parser\n    } = _ref;\n    var shift = optArgs[0];\n    var width = assertNodeType(args[0], \"size\");\n    var height = assertNodeType(args[1], \"size\");\n    return {\n      type: \"rule\",\n      mode: parser.mode,\n      shift: shift && assertNodeType(shift, \"size\").value,\n      width: width.value,\n      height: height.value\n    };\n  },\n\n  htmlBuilder(group, options) {\n    // Make an empty span for the rule\n    var rule = buildCommon.makeSpan([\"mord\", \"rule\"], [], options); // Calculate the shift, width, and height of the rule, and account for units\n\n    var width = calculateSize(group.width, options);\n    var height = calculateSize(group.height, options);\n    var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size\n\n    rule.style.borderRightWidth = makeEm(width);\n    rule.style.borderTopWidth = makeEm(height);\n    rule.style.bottom = makeEm(shift); // Record the height and width\n\n    rule.width = width;\n    rule.height = height + shift;\n    rule.depth = -shift; // Font size is the number large enough that the browser will\n    // reserve at least `absHeight` space above the baseline.\n    // The 1.125 factor was empirically determined\n\n    rule.maxFontSize = height * 1.125 * options.sizeMultiplier;\n    return rule;\n  },\n\n  mathmlBuilder(group, options) {\n    var width = calculateSize(group.width, options);\n    var height = calculateSize(group.height, options);\n    var shift = group.shift ? calculateSize(group.shift, options) : 0;\n    var color = options.color && options.getColor() || \"black\";\n    var rule = new mathMLTree.MathNode(\"mspace\");\n    rule.setAttribute(\"mathbackground\", color);\n    rule.setAttribute(\"width\", makeEm(width));\n    rule.setAttribute(\"height\", makeEm(height));\n    var wrapper = new mathMLTree.MathNode(\"mpadded\", [rule]);\n\n    if (shift >= 0) {\n      wrapper.setAttribute(\"height\", makeEm(shift));\n    } else {\n      wrapper.setAttribute(\"height\", makeEm(shift));\n      wrapper.setAttribute(\"depth\", makeEm(-shift));\n    }\n\n    wrapper.setAttribute(\"voffset\", makeEm(shift));\n    return wrapper;\n  }\n\n});\n\nfunction sizingGroup(value, options, baseOptions) {\n  var inner = buildExpression$1(value, options, false);\n  var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize\n  // manually. Handle nested size changes.\n\n  for (var i = 0; i < inner.length; i++) {\n    var pos = inner[i].classes.indexOf(\"sizing\");\n\n    if (pos < 0) {\n      Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));\n    } else if (inner[i].classes[pos + 1] === \"reset-size\" + options.size) {\n      // This is a nested size change: e.g., inner[i] is the \"b\" in\n      // `\\Huge a \\small b`. Override the old size (the `reset-` class)\n      // but not the new size.\n      inner[i].classes[pos + 1] = \"reset-size\" + baseOptions.size;\n    }\n\n    inner[i].height *= multiplier;\n    inner[i].depth *= multiplier;\n  }\n\n  return buildCommon.makeFragment(inner);\n}\nvar sizeFuncs = [\"\\\\tiny\", \"\\\\sixptsize\", \"\\\\scriptsize\", \"\\\\footnotesize\", \"\\\\small\", \"\\\\normalsize\", \"\\\\large\", \"\\\\Large\", \"\\\\LARGE\", \"\\\\huge\", \"\\\\Huge\"];\nvar htmlBuilder = (group, options) => {\n  // Handle sizing operators like \\Huge. Real TeX doesn't actually allow\n  // these functions inside of math expressions, so we do some special\n  // handling.\n  var newOptions = options.havingSize(group.size);\n  return sizingGroup(group.body, newOptions, options);\n};\ndefineFunction({\n  type: \"sizing\",\n  names: sizeFuncs,\n  props: {\n    numArgs: 0,\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      breakOnTokenText,\n      funcName,\n      parser\n    } = _ref;\n    var body = parser.parseExpression(false, breakOnTokenText);\n    return {\n      type: \"sizing\",\n      mode: parser.mode,\n      // Figure out what size to use based on the list of functions above\n      size: sizeFuncs.indexOf(funcName) + 1,\n      body\n    };\n  },\n  htmlBuilder,\n  mathmlBuilder: (group, options) => {\n    var newOptions = options.havingSize(group.size);\n    var inner = buildExpression(group.body, newOptions);\n    var node = new mathMLTree.MathNode(\"mstyle\", inner); // TODO(emily): This doesn't produce the correct size for nested size\n    // changes, because we don't keep state of what style we're currently\n    // in, so we can't reset the size to normal before changing it.  Now\n    // that we're passing an options parameter we should be able to fix\n    // this.\n\n    node.setAttribute(\"mathsize\", makeEm(newOptions.sizeMultiplier));\n    return node;\n  }\n});\n\n// smash, with optional [tb], as in AMS\ndefineFunction({\n  type: \"smash\",\n  names: [\"\\\\smash\"],\n  props: {\n    numArgs: 1,\n    numOptionalArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref, args, optArgs) => {\n    var {\n      parser\n    } = _ref;\n    var smashHeight = false;\n    var smashDepth = false;\n    var tbArg = optArgs[0] && assertNodeType(optArgs[0], \"ordgroup\");\n\n    if (tbArg) {\n      // Optional [tb] argument is engaged.\n      // ref: amsmath: \\renewcommand{\\smash}[1][tb]{%\n      //               def\\mb@t{\\ht}\\def\\mb@b{\\dp}\\def\\mb@tb{\\ht\\z@\\z@\\dp}%\n      var letter = \"\";\n\n      for (var i = 0; i < tbArg.body.length; ++i) {\n        var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property.\n\n        letter = node.text;\n\n        if (letter === \"t\") {\n          smashHeight = true;\n        } else if (letter === \"b\") {\n          smashDepth = true;\n        } else {\n          smashHeight = false;\n          smashDepth = false;\n          break;\n        }\n      }\n    } else {\n      smashHeight = true;\n      smashDepth = true;\n    }\n\n    var body = args[0];\n    return {\n      type: \"smash\",\n      mode: parser.mode,\n      body,\n      smashHeight,\n      smashDepth\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]);\n\n    if (!group.smashHeight && !group.smashDepth) {\n      return node;\n    }\n\n    if (group.smashHeight) {\n      node.height = 0; // In order to influence makeVList, we have to reset the children.\n\n      if (node.children) {\n        for (var i = 0; i < node.children.length; i++) {\n          node.children[i].height = 0;\n        }\n      }\n    }\n\n    if (group.smashDepth) {\n      node.depth = 0;\n\n      if (node.children) {\n        for (var _i = 0; _i < node.children.length; _i++) {\n          node.children[_i].depth = 0;\n        }\n      }\n    } // At this point, we've reset the TeX-like height and depth values.\n    // But the span still has an HTML line height.\n    // makeVList applies \"display: table-cell\", which prevents the browser\n    // from acting on that line height. So we'll call makeVList now.\n\n\n    var smashedNode = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: node\n      }]\n    }, options); // For spacing, TeX treats \\hphantom as a math group (same spacing as ord).\n\n    return buildCommon.makeSpan([\"mord\"], [smashedNode], options);\n  },\n  mathmlBuilder: (group, options) => {\n    var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n\n    if (group.smashHeight) {\n      node.setAttribute(\"height\", \"0px\");\n    }\n\n    if (group.smashDepth) {\n      node.setAttribute(\"depth\", \"0px\");\n    }\n\n    return node;\n  }\n});\n\ndefineFunction({\n  type: \"sqrt\",\n  names: [\"\\\\sqrt\"],\n  props: {\n    numArgs: 1,\n    numOptionalArgs: 1\n  },\n\n  handler(_ref, args, optArgs) {\n    var {\n      parser\n    } = _ref;\n    var index = optArgs[0];\n    var body = args[0];\n    return {\n      type: \"sqrt\",\n      mode: parser.mode,\n      body,\n      index\n    };\n  },\n\n  htmlBuilder(group, options) {\n    // Square roots are handled in the TeXbook pg. 443, Rule 11.\n    // First, we do the same steps as in overline to build the inner group\n    // and line\n    var inner = buildGroup$1(group.body, options.havingCrampedStyle());\n\n    if (inner.height === 0) {\n      // Render a small surd.\n      inner.height = options.fontMetrics().xHeight;\n    } // Some groups can return document fragments.  Handle those by wrapping\n    // them in a span.\n\n\n    inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \\surd delimiter\n\n    var metrics = options.fontMetrics();\n    var theta = metrics.defaultRuleThickness;\n    var phi = theta;\n\n    if (options.style.id < Style$1.TEXT.id) {\n      phi = options.fontMetrics().xHeight;\n    } // Calculate the clearance between the body and line\n\n\n    var lineClearance = theta + phi / 4;\n    var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size\n\n    var {\n      span: img,\n      ruleWidth,\n      advanceWidth\n    } = delimiter.sqrtImage(minDelimiterHeight, options);\n    var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size\n\n    if (delimDepth > inner.height + inner.depth + lineClearance) {\n      lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;\n    } // Shift the sqrt image\n\n\n    var imgShift = img.height - inner.height - lineClearance - ruleWidth;\n    inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument.\n\n    var body = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: inner,\n        wrapperClasses: [\"svg-align\"]\n      }, {\n        type: \"kern\",\n        size: -(inner.height + imgShift)\n      }, {\n        type: \"elem\",\n        elem: img\n      }, {\n        type: \"kern\",\n        size: ruleWidth\n      }]\n    }, options);\n\n    if (!group.index) {\n      return buildCommon.makeSpan([\"mord\", \"sqrt\"], [body], options);\n    } else {\n      // Handle the optional root index\n      // The index is always in scriptscript style\n      var newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT);\n      var rootm = buildGroup$1(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX\n      // source, in the definition of `\\r@@t`.\n\n      var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly\n\n      var rootVList = buildCommon.makeVList({\n        positionType: \"shift\",\n        positionData: -toShift,\n        children: [{\n          type: \"elem\",\n          elem: rootm\n        }]\n      }, options); // Add a class surrounding it so we can add on the appropriate\n      // kerning\n\n      var rootVListWrap = buildCommon.makeSpan([\"root\"], [rootVList]);\n      return buildCommon.makeSpan([\"mord\", \"sqrt\"], [rootVListWrap, body], options);\n    }\n  },\n\n  mathmlBuilder(group, options) {\n    var {\n      body,\n      index\n    } = group;\n    return index ? new mathMLTree.MathNode(\"mroot\", [buildGroup(body, options), buildGroup(index, options)]) : new mathMLTree.MathNode(\"msqrt\", [buildGroup(body, options)]);\n  }\n\n});\n\nvar styleMap = {\n  \"display\": Style$1.DISPLAY,\n  \"text\": Style$1.TEXT,\n  \"script\": Style$1.SCRIPT,\n  \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\ndefineFunction({\n  type: \"styling\",\n  names: [\"\\\\displaystyle\", \"\\\\textstyle\", \"\\\\scriptstyle\", \"\\\\scriptscriptstyle\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    primitive: true\n  },\n\n  handler(_ref, args) {\n    var {\n      breakOnTokenText,\n      funcName,\n      parser\n    } = _ref;\n    // parse out the implicit body\n    var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.\n    // here and in buildHTML and de-dupe the enumeration of all the styles).\n    // $FlowFixMe: The names above exactly match the styles.\n\n    var style = funcName.slice(1, funcName.length - 5);\n    return {\n      type: \"styling\",\n      mode: parser.mode,\n      // Figure out what style to use by pulling out the style from\n      // the function name\n      style,\n      body\n    };\n  },\n\n  htmlBuilder(group, options) {\n    // Style changes are handled in the TeXbook on pg. 442, Rule 3.\n    var newStyle = styleMap[group.style];\n    var newOptions = options.havingStyle(newStyle).withFont('');\n    return sizingGroup(group.body, newOptions, options);\n  },\n\n  mathmlBuilder(group, options) {\n    // Figure out what style we're changing to.\n    var newStyle = styleMap[group.style];\n    var newOptions = options.havingStyle(newStyle);\n    var inner = buildExpression(group.body, newOptions);\n    var node = new mathMLTree.MathNode(\"mstyle\", inner);\n    var styleAttributes = {\n      \"display\": [\"0\", \"true\"],\n      \"text\": [\"0\", \"false\"],\n      \"script\": [\"1\", \"false\"],\n      \"scriptscript\": [\"2\", \"false\"]\n    };\n    var attr = styleAttributes[group.style];\n    node.setAttribute(\"scriptlevel\", attr[0]);\n    node.setAttribute(\"displaystyle\", attr[1]);\n    return node;\n  }\n\n});\n\n/**\n * Sometimes, groups perform special rules when they have superscripts or\n * subscripts attached to them. This function lets the `supsub` group know that\n * Sometimes, groups perform special rules when they have superscripts or\n * its inner element should handle the superscripts and subscripts instead of\n * handling them itself.\n */\nvar htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {\n  var base = group.base;\n\n  if (!base) {\n    return null;\n  } else if (base.type === \"op\") {\n    // Operators handle supsubs differently when they have limits\n    // (e.g. `\\displaystyle\\sum_2^3`)\n    var delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub);\n    return delegate ? htmlBuilder$2 : null;\n  } else if (base.type === \"operatorname\") {\n    var _delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits);\n\n    return _delegate ? htmlBuilder$1 : null;\n  } else if (base.type === \"accent\") {\n    return utils.isCharacterBox(base.base) ? htmlBuilder$a : null;\n  } else if (base.type === \"horizBrace\") {\n    var isSup = !group.sub;\n    return isSup === base.isOver ? htmlBuilder$3 : null;\n  } else {\n    return null;\n  }\n}; // Super scripts and subscripts, whose precise placement can depend on other\n// functions that precede them.\n\n\ndefineFunctionBuilders({\n  type: \"supsub\",\n\n  htmlBuilder(group, options) {\n    // Superscript and subscripts are handled in the TeXbook on page\n    // 445-446, rules 18(a-f).\n    // Here is where we defer to the inner group if it should handle\n    // superscripts and subscripts itself.\n    var builderDelegate = htmlBuilderDelegate(group, options);\n\n    if (builderDelegate) {\n      return builderDelegate(group, options);\n    }\n\n    var {\n      base: valueBase,\n      sup: valueSup,\n      sub: valueSub\n    } = group;\n    var base = buildGroup$1(valueBase, options);\n    var supm;\n    var subm;\n    var metrics = options.fontMetrics(); // Rule 18a\n\n    var supShift = 0;\n    var subShift = 0;\n    var isCharacterBox = valueBase && utils.isCharacterBox(valueBase);\n\n    if (valueSup) {\n      var newOptions = options.havingStyle(options.style.sup());\n      supm = buildGroup$1(valueSup, newOptions, options);\n\n      if (!isCharacterBox) {\n        supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;\n      }\n    }\n\n    if (valueSub) {\n      var _newOptions = options.havingStyle(options.style.sub());\n\n      subm = buildGroup$1(valueSub, _newOptions, options);\n\n      if (!isCharacterBox) {\n        subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier;\n      }\n    } // Rule 18c\n\n\n    var minSupShift;\n\n    if (options.style === Style$1.DISPLAY) {\n      minSupShift = metrics.sup1;\n    } else if (options.style.cramped) {\n      minSupShift = metrics.sup3;\n    } else {\n      minSupShift = metrics.sup2;\n    } // scriptspace is a font-size-independent size, so scale it\n    // appropriately for use as the marginRight.\n\n\n    var multiplier = options.sizeMultiplier;\n    var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier);\n    var marginLeft = null;\n\n    if (subm) {\n      // Subscripts shouldn't be shifted by the base's italic correction.\n      // Account for that by shifting the subscript back the appropriate\n      // amount. Note we only do this when the base is a single symbol.\n      var isOiint = group.base && group.base.type === \"op\" && group.base.name && (group.base.name === \"\\\\oiint\" || group.base.name === \"\\\\oiiint\");\n\n      if (base instanceof SymbolNode || isOiint) {\n        // $FlowFixMe\n        marginLeft = makeEm(-base.italic);\n      }\n    }\n\n    var supsub;\n\n    if (supm && subm) {\n      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n      subShift = Math.max(subShift, metrics.sub2);\n      var ruleWidth = metrics.defaultRuleThickness; // Rule 18e\n\n      var maxWidth = 4 * ruleWidth;\n\n      if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {\n        subShift = maxWidth - (supShift - supm.depth) + subm.height;\n        var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);\n\n        if (psi > 0) {\n          supShift += psi;\n          subShift -= psi;\n        }\n      }\n\n      var vlistElem = [{\n        type: \"elem\",\n        elem: subm,\n        shift: subShift,\n        marginRight,\n        marginLeft\n      }, {\n        type: \"elem\",\n        elem: supm,\n        shift: -supShift,\n        marginRight\n      }];\n      supsub = buildCommon.makeVList({\n        positionType: \"individualShift\",\n        children: vlistElem\n      }, options);\n    } else if (subm) {\n      // Rule 18b\n      subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);\n      var _vlistElem = [{\n        type: \"elem\",\n        elem: subm,\n        marginLeft,\n        marginRight\n      }];\n      supsub = buildCommon.makeVList({\n        positionType: \"shift\",\n        positionData: subShift,\n        children: _vlistElem\n      }, options);\n    } else if (supm) {\n      // Rule 18c, d\n      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n      supsub = buildCommon.makeVList({\n        positionType: \"shift\",\n        positionData: -supShift,\n        children: [{\n          type: \"elem\",\n          elem: supm,\n          marginRight\n        }]\n      }, options);\n    } else {\n      throw new Error(\"supsub must have either sup or sub.\");\n    } // Wrap the supsub vlist in a span.msupsub to reset text-align.\n\n\n    var mclass = getTypeOfDomTree(base, \"right\") || \"mord\";\n    return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan([\"msupsub\"], [supsub])], options);\n  },\n\n  mathmlBuilder(group, options) {\n    // Is the inner group a relevant horizontal brace?\n    var isBrace = false;\n    var isOver;\n    var isSup;\n\n    if (group.base && group.base.type === \"horizBrace\") {\n      isSup = !!group.sup;\n\n      if (isSup === group.base.isOver) {\n        isBrace = true;\n        isOver = group.base.isOver;\n      }\n    }\n\n    if (group.base && (group.base.type === \"op\" || group.base.type === \"operatorname\")) {\n      group.base.parentIsSupSub = true;\n    }\n\n    var children = [buildGroup(group.base, options)];\n\n    if (group.sub) {\n      children.push(buildGroup(group.sub, options));\n    }\n\n    if (group.sup) {\n      children.push(buildGroup(group.sup, options));\n    }\n\n    var nodeType;\n\n    if (isBrace) {\n      nodeType = isOver ? \"mover\" : \"munder\";\n    } else if (!group.sub) {\n      var base = group.base;\n\n      if (base && base.type === \"op\" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {\n        nodeType = \"mover\";\n      } else if (base && base.type === \"operatorname\" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) {\n        nodeType = \"mover\";\n      } else {\n        nodeType = \"msup\";\n      }\n    } else if (!group.sup) {\n      var _base = group.base;\n\n      if (_base && _base.type === \"op\" && _base.limits && (options.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) {\n        nodeType = \"munder\";\n      } else if (_base && _base.type === \"operatorname\" && _base.alwaysHandleSupSub && (_base.limits || options.style === Style$1.DISPLAY)) {\n        nodeType = \"munder\";\n      } else {\n        nodeType = \"msub\";\n      }\n    } else {\n      var _base2 = group.base;\n\n      if (_base2 && _base2.type === \"op\" && _base2.limits && options.style === Style$1.DISPLAY) {\n        nodeType = \"munderover\";\n      } else if (_base2 && _base2.type === \"operatorname\" && _base2.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || _base2.limits)) {\n        nodeType = \"munderover\";\n      } else {\n        nodeType = \"msubsup\";\n      }\n    }\n\n    return new mathMLTree.MathNode(nodeType, children);\n  }\n\n});\n\ndefineFunctionBuilders({\n  type: \"atom\",\n\n  htmlBuilder(group, options) {\n    return buildCommon.mathsym(group.text, group.mode, options, [\"m\" + group.family]);\n  },\n\n  mathmlBuilder(group, options) {\n    var node = new mathMLTree.MathNode(\"mo\", [makeText(group.text, group.mode)]);\n\n    if (group.family === \"bin\") {\n      var variant = getVariant(group, options);\n\n      if (variant === \"bold-italic\") {\n        node.setAttribute(\"mathvariant\", variant);\n      }\n    } else if (group.family === \"punct\") {\n      node.setAttribute(\"separator\", \"true\");\n    } else if (group.family === \"open\" || group.family === \"close\") {\n      // Delims built here should not stretch vertically.\n      // See delimsizing.js for stretchy delims.\n      node.setAttribute(\"stretchy\", \"false\");\n    }\n\n    return node;\n  }\n\n});\n\n// \"mathord\" and \"textord\" ParseNodes created in Parser.js from symbol Groups in\n// src/symbols.js.\nvar defaultVariant = {\n  \"mi\": \"italic\",\n  \"mn\": \"normal\",\n  \"mtext\": \"normal\"\n};\ndefineFunctionBuilders({\n  type: \"mathord\",\n\n  htmlBuilder(group, options) {\n    return buildCommon.makeOrd(group, options, \"mathord\");\n  },\n\n  mathmlBuilder(group, options) {\n    var node = new mathMLTree.MathNode(\"mi\", [makeText(group.text, group.mode, options)]);\n    var variant = getVariant(group, options) || \"italic\";\n\n    if (variant !== defaultVariant[node.type]) {\n      node.setAttribute(\"mathvariant\", variant);\n    }\n\n    return node;\n  }\n\n});\ndefineFunctionBuilders({\n  type: \"textord\",\n\n  htmlBuilder(group, options) {\n    return buildCommon.makeOrd(group, options, \"textord\");\n  },\n\n  mathmlBuilder(group, options) {\n    var text = makeText(group.text, group.mode, options);\n    var variant = getVariant(group, options) || \"normal\";\n    var node;\n\n    if (group.mode === 'text') {\n      node = new mathMLTree.MathNode(\"mtext\", [text]);\n    } else if (/[0-9]/.test(group.text)) {\n      node = new mathMLTree.MathNode(\"mn\", [text]);\n    } else if (group.text === \"\\\\prime\") {\n      node = new mathMLTree.MathNode(\"mo\", [text]);\n    } else {\n      node = new mathMLTree.MathNode(\"mi\", [text]);\n    }\n\n    if (variant !== defaultVariant[node.type]) {\n      node.setAttribute(\"mathvariant\", variant);\n    }\n\n    return node;\n  }\n\n});\n\nvar cssSpace = {\n  \"\\\\nobreak\": \"nobreak\",\n  \"\\\\allowbreak\": \"allowbreak\"\n}; // A lookup table to determine whether a spacing function/symbol should be\n// treated like a regular space character.  If a symbol or command is a key\n// in this table, then it should be a regular space character.  Furthermore,\n// the associated value may have a `className` specifying an extra CSS class\n// to add to the created `span`.\n\nvar regularSpace = {\n  \" \": {},\n  \"\\\\ \": {},\n  \"~\": {\n    className: \"nobreak\"\n  },\n  \"\\\\space\": {},\n  \"\\\\nobreakspace\": {\n    className: \"nobreak\"\n  }\n}; // ParseNode<\"spacing\"> created in Parser.js from the \"spacing\" symbol Groups in\n// src/symbols.js.\n\ndefineFunctionBuilders({\n  type: \"spacing\",\n\n  htmlBuilder(group, options) {\n    if (regularSpace.hasOwnProperty(group.text)) {\n      var className = regularSpace[group.text].className || \"\"; // Spaces are generated by adding an actual space. Each of these\n      // things has an entry in the symbols table, so these will be turned\n      // into appropriate outputs.\n\n      if (group.mode === \"text\") {\n        var ord = buildCommon.makeOrd(group, options, \"textord\");\n        ord.classes.push(className);\n        return ord;\n      } else {\n        return buildCommon.makeSpan([\"mspace\", className], [buildCommon.mathsym(group.text, group.mode, options)], options);\n      }\n    } else if (cssSpace.hasOwnProperty(group.text)) {\n      // Spaces based on just a CSS class.\n      return buildCommon.makeSpan([\"mspace\", cssSpace[group.text]], [], options);\n    } else {\n      throw new ParseError(\"Unknown type of space \\\"\" + group.text + \"\\\"\");\n    }\n  },\n\n  mathmlBuilder(group, options) {\n    var node;\n\n    if (regularSpace.hasOwnProperty(group.text)) {\n      node = new mathMLTree.MathNode(\"mtext\", [new mathMLTree.TextNode(\"\\u00a0\")]);\n    } else if (cssSpace.hasOwnProperty(group.text)) {\n      // CSS-based MathML spaces (\\nobreak, \\allowbreak) are ignored\n      return new mathMLTree.MathNode(\"mspace\");\n    } else {\n      throw new ParseError(\"Unknown type of space \\\"\" + group.text + \"\\\"\");\n    }\n\n    return node;\n  }\n\n});\n\nvar pad = () => {\n  var padNode = new mathMLTree.MathNode(\"mtd\", []);\n  padNode.setAttribute(\"width\", \"50%\");\n  return padNode;\n};\n\ndefineFunctionBuilders({\n  type: \"tag\",\n\n  mathmlBuilder(group, options) {\n    var table = new mathMLTree.MathNode(\"mtable\", [new mathMLTree.MathNode(\"mtr\", [pad(), new mathMLTree.MathNode(\"mtd\", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode(\"mtd\", [buildExpressionRow(group.tag, options)])])]);\n    table.setAttribute(\"width\", \"100%\");\n    return table; // TODO: Left-aligned tags.\n    // Currently, the group and options passed here do not contain\n    // enough info to set tag alignment. `leqno` is in Settings but it is\n    // not passed to Options. On the HTML side, leqno is\n    // set by a CSS class applied in buildTree.js. That would have worked\n    // in MathML if browsers supported <mlabeledtr>. Since they don't, we\n    // need to rewrite the way this function is called.\n  }\n\n});\n\nvar textFontFamilies = {\n  \"\\\\text\": undefined,\n  \"\\\\textrm\": \"textrm\",\n  \"\\\\textsf\": \"textsf\",\n  \"\\\\texttt\": \"texttt\",\n  \"\\\\textnormal\": \"textrm\"\n};\nvar textFontWeights = {\n  \"\\\\textbf\": \"textbf\",\n  \"\\\\textmd\": \"textmd\"\n};\nvar textFontShapes = {\n  \"\\\\textit\": \"textit\",\n  \"\\\\textup\": \"textup\"\n};\n\nvar optionsWithFont = (group, options) => {\n  var font = group.font; // Checks if the argument is a font family or a font style.\n\n  if (!font) {\n    return options;\n  } else if (textFontFamilies[font]) {\n    return options.withTextFontFamily(textFontFamilies[font]);\n  } else if (textFontWeights[font]) {\n    return options.withTextFontWeight(textFontWeights[font]);\n  } else if (font === \"\\\\emph\") {\n    return options.fontShape === \"textit\" ? options.withTextFontShape(\"textup\") : options.withTextFontShape(\"textit\");\n  }\n\n  return options.withTextFontShape(textFontShapes[font]);\n};\n\ndefineFunction({\n  type: \"text\",\n  names: [// Font families\n  \"\\\\text\", \"\\\\textrm\", \"\\\\textsf\", \"\\\\texttt\", \"\\\\textnormal\", // Font weights\n  \"\\\\textbf\", \"\\\\textmd\", // Font Shapes\n  \"\\\\textit\", \"\\\\textup\", \"\\\\emph\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"text\"],\n    allowedInArgument: true,\n    allowedInText: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"text\",\n      mode: parser.mode,\n      body: ordargument(body),\n      font: funcName\n    };\n  },\n\n  htmlBuilder(group, options) {\n    var newOptions = optionsWithFont(group, options);\n    var inner = buildExpression$1(group.body, newOptions, true);\n    return buildCommon.makeSpan([\"mord\", \"text\"], inner, newOptions);\n  },\n\n  mathmlBuilder(group, options) {\n    var newOptions = optionsWithFont(group, options);\n    return buildExpressionRow(group.body, newOptions);\n  }\n\n});\n\ndefineFunction({\n  type: \"underline\",\n  names: [\"\\\\underline\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"underline\",\n      mode: parser.mode,\n      body: args[0]\n    };\n  },\n\n  htmlBuilder(group, options) {\n    // Underlines are handled in the TeXbook pg 443, Rule 10.\n    // Build the inner group.\n    var innerGroup = buildGroup$1(group.body, options); // Create the line to go below the body\n\n    var line = buildCommon.makeLineSpan(\"underline-line\", options); // Generate the vlist, with the appropriate kerns\n\n    var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n    var vlist = buildCommon.makeVList({\n      positionType: \"top\",\n      positionData: innerGroup.height,\n      children: [{\n        type: \"kern\",\n        size: defaultRuleThickness\n      }, {\n        type: \"elem\",\n        elem: line\n      }, {\n        type: \"kern\",\n        size: 3 * defaultRuleThickness\n      }, {\n        type: \"elem\",\n        elem: innerGroup\n      }]\n    }, options);\n    return buildCommon.makeSpan([\"mord\", \"underline\"], [vlist], options);\n  },\n\n  mathmlBuilder(group, options) {\n    var operator = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(\"\\u203e\")]);\n    operator.setAttribute(\"stretchy\", \"true\");\n    var node = new mathMLTree.MathNode(\"munder\", [buildGroup(group.body, options), operator]);\n    node.setAttribute(\"accentunder\", \"true\");\n    return node;\n  }\n\n});\n\ndefineFunction({\n  type: \"vcenter\",\n  names: [\"\\\\vcenter\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"original\"],\n    // In LaTeX, \\vcenter can act only on a box.\n    allowedInText: false\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"vcenter\",\n      mode: parser.mode,\n      body: args[0]\n    };\n  },\n\n  htmlBuilder(group, options) {\n    var body = buildGroup$1(group.body, options);\n    var axisHeight = options.fontMetrics().axisHeight;\n    var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight));\n    return buildCommon.makeVList({\n      positionType: \"shift\",\n      positionData: dy,\n      children: [{\n        type: \"elem\",\n        elem: body\n      }]\n    }, options);\n  },\n\n  mathmlBuilder(group, options) {\n    // There is no way to do this in MathML.\n    // Write a class as a breadcrumb in case some post-processor wants\n    // to perform a vcenter adjustment.\n    return new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)], [\"vcenter\"]);\n  }\n\n});\n\ndefineFunction({\n  type: \"verb\",\n  names: [\"\\\\verb\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true\n  },\n\n  handler(context, args, optArgs) {\n    // \\verb and \\verb* are dealt with directly in Parser.js.\n    // If we end up here, it's because of a failure to match the two delimiters\n    // in the regex in Lexer.js.  LaTeX raises the following error when \\verb is\n    // terminated by end of line (or file).\n    throw new ParseError(\"\\\\verb ended by end of line instead of matching delimiter\");\n  },\n\n  htmlBuilder(group, options) {\n    var text = makeVerb(group);\n    var body = []; // \\verb enters text mode and therefore is sized like \\textstyle\n\n    var newOptions = options.havingStyle(options.style.text());\n\n    for (var i = 0; i < text.length; i++) {\n      var c = text[i];\n\n      if (c === '~') {\n        c = '\\\\textasciitilde';\n      }\n\n      body.push(buildCommon.makeSymbol(c, \"Typewriter-Regular\", group.mode, newOptions, [\"mord\", \"texttt\"]));\n    }\n\n    return buildCommon.makeSpan([\"mord\", \"text\"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions);\n  },\n\n  mathmlBuilder(group, options) {\n    var text = new mathMLTree.TextNode(makeVerb(group));\n    var node = new mathMLTree.MathNode(\"mtext\", [text]);\n    node.setAttribute(\"mathvariant\", \"monospace\");\n    return node;\n  }\n\n});\n/**\n * Converts verb group into body string.\n *\n * \\verb* replaces each space with an open box \\u2423\n * \\verb replaces each space with a no-break space \\xA0\n */\n\nvar makeVerb = group => group.body.replace(/ /g, group.star ? '\\u2423' : '\\xA0');\n\n/** Include this to ensure that all functions are defined. */\nvar functions = _functions;\n\n/**\n * The Lexer class handles tokenizing the input in various ways. Since our\n * parser expects us to be able to backtrack, the lexer allows lexing from any\n * given starting point.\n *\n * Its main exposed function is the `lex` function, which takes a position to\n * lex from and a type of token to lex. It defers to the appropriate `_innerLex`\n * function.\n *\n * The various `_innerLex` functions perform the actual lexing of different\n * kinds.\n */\n\n/* The following tokenRegex\n * - matches typical whitespace (but not NBSP etc.) using its first group\n * - does not match any control character \\x00-\\x1f except whitespace\n * - does not match a bare backslash\n * - matches any ASCII character except those just mentioned\n * - does not match the BMP private use area \\uE000-\\uF8FF\n * - does not match bare surrogate code units\n * - matches any BMP character except for those just described\n * - matches any valid Unicode surrogate pair\n * - matches a backslash followed by one or more whitespace characters\n * - matches a backslash followed by one or more letters then whitespace\n * - matches a backslash followed by any BMP character\n * Capturing groups:\n *   [1] regular whitespace\n *   [2] backslash followed by whitespace\n *   [3] anything else, which may include:\n *     [4] left character of \\verb*\n *     [5] left character of \\verb\n *     [6] backslash followed by word, excluding any trailing whitespace\n * Just because the Lexer matches something doesn't mean it's valid input:\n * If there is no matching function or symbol definition, the Parser will\n * still reject the input.\n */\nvar spaceRegexString = \"[ \\r\\n\\t]\";\nvar controlWordRegexString = \"\\\\\\\\[a-zA-Z@]+\";\nvar controlSymbolRegexString = \"\\\\\\\\[^\\uD800-\\uDFFF]\";\nvar controlWordWhitespaceRegexString = \"(\" + controlWordRegexString + \")\" + spaceRegexString + \"*\";\nvar controlSpaceRegexString = \"\\\\\\\\(\\n|[ \\r\\t]+\\n?)[ \\r\\t]*\";\nvar combiningDiacriticalMarkString = \"[\\u0300-\\u036f]\";\nvar combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + \"+$\");\nvar tokenRegexString = \"(\" + spaceRegexString + \"+)|\" + ( // whitespace\ncontrolSpaceRegexString + \"|\") + // \\whitespace\n\"([!-\\\\[\\\\]-\\u2027\\u202A-\\uD7FF\\uF900-\\uFFFF]\" + ( // single codepoint\ncombiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]\" + ( // surrogate pair\ncombiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|\\\\\\\\verb\\\\*([^]).*?\\\\4\" + // \\verb*\n\"|\\\\\\\\verb([^*a-zA-Z]).*?\\\\5\" + ( // \\verb unstarred\n\"|\" + controlWordWhitespaceRegexString) + ( // \\macroName + spaces\n\"|\" + controlSymbolRegexString + \")\"); // \\\\, \\', etc.\n\n/** Main Lexer class */\n\nclass Lexer {\n  // Category codes. The lexer only supports comment characters (14) for now.\n  // MacroExpander additionally distinguishes active (13).\n  constructor(input, settings) {\n    this.input = void 0;\n    this.settings = void 0;\n    this.tokenRegex = void 0;\n    this.catcodes = void 0;\n    // Separate accents from characters\n    this.input = input;\n    this.settings = settings;\n    this.tokenRegex = new RegExp(tokenRegexString, 'g');\n    this.catcodes = {\n      \"%\": 14,\n      // comment character\n      \"~\": 13 // active character\n\n    };\n  }\n\n  setCatcode(char, code) {\n    this.catcodes[char] = code;\n  }\n  /**\n   * This function lexes a single token.\n   */\n\n\n  lex() {\n    var input = this.input;\n    var pos = this.tokenRegex.lastIndex;\n\n    if (pos === input.length) {\n      return new Token(\"EOF\", new SourceLocation(this, pos, pos));\n    }\n\n    var match = this.tokenRegex.exec(input);\n\n    if (match === null || match.index !== pos) {\n      throw new ParseError(\"Unexpected character: '\" + input[pos] + \"'\", new Token(input[pos], new SourceLocation(this, pos, pos + 1)));\n    }\n\n    var text = match[6] || match[3] || (match[2] ? \"\\\\ \" : \" \");\n\n    if (this.catcodes[text] === 14) {\n      // comment character\n      var nlIndex = input.indexOf('\\n', this.tokenRegex.lastIndex);\n\n      if (nlIndex === -1) {\n        this.tokenRegex.lastIndex = input.length; // EOF\n\n        this.settings.reportNonstrict(\"commentAtEnd\", \"% comment has no terminating newline; LaTeX would \" + \"fail because of commenting the end of math mode (e.g. $)\");\n      } else {\n        this.tokenRegex.lastIndex = nlIndex + 1;\n      }\n\n      return this.lex();\n    }\n\n    return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));\n  }\n\n}\n\n/**\n * A `Namespace` refers to a space of nameable things like macros or lengths,\n * which can be `set` either globally or local to a nested group, using an\n * undo stack similar to how TeX implements this functionality.\n * Performance-wise, `get` and local `set` take constant time, while global\n * `set` takes time proportional to the depth of group nesting.\n */\nclass Namespace {\n  /**\n   * Both arguments are optional.  The first argument is an object of\n   * built-in mappings which never change.  The second argument is an object\n   * of initial (global-level) mappings, which will constantly change\n   * according to any global/top-level `set`s done.\n   */\n  constructor(builtins, globalMacros) {\n    if (builtins === void 0) {\n      builtins = {};\n    }\n\n    if (globalMacros === void 0) {\n      globalMacros = {};\n    }\n\n    this.current = void 0;\n    this.builtins = void 0;\n    this.undefStack = void 0;\n    this.current = globalMacros;\n    this.builtins = builtins;\n    this.undefStack = [];\n  }\n  /**\n   * Start a new nested group, affecting future local `set`s.\n   */\n\n\n  beginGroup() {\n    this.undefStack.push({});\n  }\n  /**\n   * End current nested group, restoring values before the group began.\n   */\n\n\n  endGroup() {\n    if (this.undefStack.length === 0) {\n      throw new ParseError(\"Unbalanced namespace destruction: attempt \" + \"to pop global namespace; please report this as a bug\");\n    }\n\n    var undefs = this.undefStack.pop();\n\n    for (var undef in undefs) {\n      if (undefs.hasOwnProperty(undef)) {\n        if (undefs[undef] == null) {\n          delete this.current[undef];\n        } else {\n          this.current[undef] = undefs[undef];\n        }\n      }\n    }\n  }\n  /**\n   * Ends all currently nested groups (if any), restoring values before the\n   * groups began.  Useful in case of an error in the middle of parsing.\n   */\n\n\n  endGroups() {\n    while (this.undefStack.length > 0) {\n      this.endGroup();\n    }\n  }\n  /**\n   * Detect whether `name` has a definition.  Equivalent to\n   * `get(name) != null`.\n   */\n\n\n  has(name) {\n    return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);\n  }\n  /**\n   * Get the current value of a name, or `undefined` if there is no value.\n   *\n   * Note: Do not use `if (namespace.get(...))` to detect whether a macro\n   * is defined, as the definition may be the empty string which evaluates\n   * to `false` in JavaScript.  Use `if (namespace.get(...) != null)` or\n   * `if (namespace.has(...))`.\n   */\n\n\n  get(name) {\n    if (this.current.hasOwnProperty(name)) {\n      return this.current[name];\n    } else {\n      return this.builtins[name];\n    }\n  }\n  /**\n   * Set the current value of a name, and optionally set it globally too.\n   * Local set() sets the current value and (when appropriate) adds an undo\n   * operation to the undo stack.  Global set() may change the undo\n   * operation at every level, so takes time linear in their number.\n   * A value of undefined means to delete existing definitions.\n   */\n\n\n  set(name, value, global) {\n    if (global === void 0) {\n      global = false;\n    }\n\n    if (global) {\n      // Global set is equivalent to setting in all groups.  Simulate this\n      // by destroying any undos currently scheduled for this name,\n      // and adding an undo with the *new* value (in case it later gets\n      // locally reset within this environment).\n      for (var i = 0; i < this.undefStack.length; i++) {\n        delete this.undefStack[i][name];\n      }\n\n      if (this.undefStack.length > 0) {\n        this.undefStack[this.undefStack.length - 1][name] = value;\n      }\n    } else {\n      // Undo this set at end of this group (possibly to `undefined`),\n      // unless an undo is already in place, in which case that older\n      // value is the correct one.\n      var top = this.undefStack[this.undefStack.length - 1];\n\n      if (top && !top.hasOwnProperty(name)) {\n        top[name] = this.current[name];\n      }\n    }\n\n    if (value == null) {\n      delete this.current[name];\n    } else {\n      this.current[name] = value;\n    }\n  }\n\n}\n\n/**\n * Predefined macros for KaTeX.\n * This can be used to define some commands in terms of others.\n */\nvar macros = _macros;\n// macro tools\n\ndefineMacro(\"\\\\noexpand\", function (context) {\n  // The expansion is the token itself; but that token is interpreted\n  // as if its meaning were ‘\\relax’ if it is a control sequence that\n  // would ordinarily be expanded by TeX’s expansion rules.\n  var t = context.popToken();\n\n  if (context.isExpandable(t.text)) {\n    t.noexpand = true;\n    t.treatAsRelax = true;\n  }\n\n  return {\n    tokens: [t],\n    numArgs: 0\n  };\n});\ndefineMacro(\"\\\\expandafter\", function (context) {\n  // TeX first reads the token that comes immediately after \\expandafter,\n  // without expanding it; let’s call this token t. Then TeX reads the\n  // token that comes after t (and possibly more tokens, if that token\n  // has an argument), replacing it by its expansion. Finally TeX puts\n  // t back in front of that expansion.\n  var t = context.popToken();\n  context.expandOnce(true); // expand only an expandable token\n\n  return {\n    tokens: [t],\n    numArgs: 0\n  };\n}); // LaTeX's \\@firstoftwo{#1}{#2} expands to #1, skipping #2\n// TeX source: \\long\\def\\@firstoftwo#1#2{#1}\n\ndefineMacro(\"\\\\@firstoftwo\", function (context) {\n  var args = context.consumeArgs(2);\n  return {\n    tokens: args[0],\n    numArgs: 0\n  };\n}); // LaTeX's \\@secondoftwo{#1}{#2} expands to #2, skipping #1\n// TeX source: \\long\\def\\@secondoftwo#1#2{#2}\n\ndefineMacro(\"\\\\@secondoftwo\", function (context) {\n  var args = context.consumeArgs(2);\n  return {\n    tokens: args[1],\n    numArgs: 0\n  };\n}); // LaTeX's \\@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)\n// symbol that isn't a space, consuming any spaces but not consuming the\n// first nonspace character.  If that nonspace character matches #1, then\n// the macro expands to #2; otherwise, it expands to #3.\n\ndefineMacro(\"\\\\@ifnextchar\", function (context) {\n  var args = context.consumeArgs(3); // symbol, if, else\n\n  context.consumeSpaces();\n  var nextToken = context.future();\n\n  if (args[0].length === 1 && args[0][0].text === nextToken.text) {\n    return {\n      tokens: args[1],\n      numArgs: 0\n    };\n  } else {\n    return {\n      tokens: args[2],\n      numArgs: 0\n    };\n  }\n}); // LaTeX's \\@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.\n// If it is `*`, then it consumes the symbol, and the macro expands to #1;\n// otherwise, the macro expands to #2 (without consuming the symbol).\n// TeX source: \\def\\@ifstar#1{\\@ifnextchar *{\\@firstoftwo{#1}}}\n\ndefineMacro(\"\\\\@ifstar\", \"\\\\@ifnextchar *{\\\\@firstoftwo{#1}}\"); // LaTeX's \\TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode\n\ndefineMacro(\"\\\\TextOrMath\", function (context) {\n  var args = context.consumeArgs(2);\n\n  if (context.mode === 'text') {\n    return {\n      tokens: args[0],\n      numArgs: 0\n    };\n  } else {\n    return {\n      tokens: args[1],\n      numArgs: 0\n    };\n  }\n}); // Lookup table for parsing numbers in base 8 through 16\n\nvar digitToNumber = {\n  \"0\": 0,\n  \"1\": 1,\n  \"2\": 2,\n  \"3\": 3,\n  \"4\": 4,\n  \"5\": 5,\n  \"6\": 6,\n  \"7\": 7,\n  \"8\": 8,\n  \"9\": 9,\n  \"a\": 10,\n  \"A\": 10,\n  \"b\": 11,\n  \"B\": 11,\n  \"c\": 12,\n  \"C\": 12,\n  \"d\": 13,\n  \"D\": 13,\n  \"e\": 14,\n  \"E\": 14,\n  \"f\": 15,\n  \"F\": 15\n}; // TeX \\char makes a literal character (catcode 12) using the following forms:\n// (see The TeXBook, p. 43)\n//   \\char123  -- decimal\n//   \\char'123 -- octal\n//   \\char\"123 -- hex\n//   \\char`x   -- character that can be written (i.e. isn't active)\n//   \\char`\\x  -- character that cannot be written (e.g. %)\n// These all refer to characters from the font, so we turn them into special\n// calls to a function \\@char dealt with in the Parser.\n\ndefineMacro(\"\\\\char\", function (context) {\n  var token = context.popToken();\n  var base;\n  var number = '';\n\n  if (token.text === \"'\") {\n    base = 8;\n    token = context.popToken();\n  } else if (token.text === '\"') {\n    base = 16;\n    token = context.popToken();\n  } else if (token.text === \"`\") {\n    token = context.popToken();\n\n    if (token.text[0] === \"\\\\\") {\n      number = token.text.charCodeAt(1);\n    } else if (token.text === \"EOF\") {\n      throw new ParseError(\"\\\\char` missing argument\");\n    } else {\n      number = token.text.charCodeAt(0);\n    }\n  } else {\n    base = 10;\n  }\n\n  if (base) {\n    // Parse a number in the given base, starting with first `token`.\n    number = digitToNumber[token.text];\n\n    if (number == null || number >= base) {\n      throw new ParseError(\"Invalid base-\" + base + \" digit \" + token.text);\n    }\n\n    var digit;\n\n    while ((digit = digitToNumber[context.future().text]) != null && digit < base) {\n      number *= base;\n      number += digit;\n      context.popToken();\n    }\n  }\n\n  return \"\\\\@char{\" + number + \"}\";\n}); // \\newcommand{\\macro}[args]{definition}\n// \\renewcommand{\\macro}[args]{definition}\n// TODO: Optional arguments: \\newcommand{\\macro}[args][default]{definition}\n\nvar newcommand = (context, existsOK, nonexistsOK, skipIfExists) => {\n  var arg = context.consumeArg().tokens;\n\n  if (arg.length !== 1) {\n    throw new ParseError(\"\\\\newcommand's first argument must be a macro name\");\n  }\n\n  var name = arg[0].text;\n  var exists = context.isDefined(name);\n\n  if (exists && !existsOK) {\n    throw new ParseError(\"\\\\newcommand{\" + name + \"} attempting to redefine \" + (name + \"; use \\\\renewcommand\"));\n  }\n\n  if (!exists && !nonexistsOK) {\n    throw new ParseError(\"\\\\renewcommand{\" + name + \"} when command \" + name + \" \" + \"does not yet exist; use \\\\newcommand\");\n  }\n\n  var numArgs = 0;\n  arg = context.consumeArg().tokens;\n\n  if (arg.length === 1 && arg[0].text === \"[\") {\n    var argText = '';\n    var token = context.expandNextToken();\n\n    while (token.text !== \"]\" && token.text !== \"EOF\") {\n      // TODO: Should properly expand arg, e.g., ignore {}s\n      argText += token.text;\n      token = context.expandNextToken();\n    }\n\n    if (!argText.match(/^\\s*[0-9]+\\s*$/)) {\n      throw new ParseError(\"Invalid number of arguments: \" + argText);\n    }\n\n    numArgs = parseInt(argText);\n    arg = context.consumeArg().tokens;\n  }\n\n  if (!(exists && skipIfExists)) {\n    // Final arg is the expansion of the macro\n    context.macros.set(name, {\n      tokens: arg,\n      numArgs\n    });\n  }\n\n  return '';\n};\n\ndefineMacro(\"\\\\newcommand\", context => newcommand(context, false, true, false));\ndefineMacro(\"\\\\renewcommand\", context => newcommand(context, true, false, false));\ndefineMacro(\"\\\\providecommand\", context => newcommand(context, true, true, true)); // terminal (console) tools\n\ndefineMacro(\"\\\\message\", context => {\n  var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n\n  console.log(arg.reverse().map(token => token.text).join(\"\"));\n  return '';\n});\ndefineMacro(\"\\\\errmessage\", context => {\n  var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n\n  console.error(arg.reverse().map(token => token.text).join(\"\"));\n  return '';\n});\ndefineMacro(\"\\\\show\", context => {\n  var tok = context.popToken();\n  var name = tok.text; // eslint-disable-next-line no-console\n\n  console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]);\n  return '';\n}); //////////////////////////////////////////////////////////////////////\n// Grouping\n// \\let\\bgroup={ \\let\\egroup=}\n\ndefineMacro(\"\\\\bgroup\", \"{\");\ndefineMacro(\"\\\\egroup\", \"}\"); // Symbols from latex.ltx:\n// \\def~{\\nobreakspace{}}\n// \\def\\lq{`}\n// \\def\\rq{'}\n// \\def \\aa {\\r a}\n// \\def \\AA {\\r A}\n\ndefineMacro(\"~\", \"\\\\nobreakspace\");\ndefineMacro(\"\\\\lq\", \"`\");\ndefineMacro(\"\\\\rq\", \"'\");\ndefineMacro(\"\\\\aa\", \"\\\\r a\");\ndefineMacro(\"\\\\AA\", \"\\\\r A\"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML.\n// \\DeclareTextCommandDefault{\\textcopyright}{\\textcircled{c}}\n// \\DeclareTextCommandDefault{\\textregistered}{\\textcircled{%\n//      \\check@mathfonts\\fontsize\\sf@size\\z@\\math@fontsfalse\\selectfont R}}\n// \\DeclareRobustCommand{\\copyright}{%\n//    \\ifmmode{\\nfss@text{\\textcopyright}}\\else\\textcopyright\\fi}\n\ndefineMacro(\"\\\\textcopyright\", \"\\\\html@mathml{\\\\textcircled{c}}{\\\\char`©}\");\ndefineMacro(\"\\\\copyright\", \"\\\\TextOrMath{\\\\textcopyright}{\\\\text{\\\\textcopyright}}\");\ndefineMacro(\"\\\\textregistered\", \"\\\\html@mathml{\\\\textcircled{\\\\scriptsize R}}{\\\\char`®}\"); // Characters omitted from Unicode range 1D400–1D7FF\n\ndefineMacro(\"\\u212C\", \"\\\\mathscr{B}\"); // script\n\ndefineMacro(\"\\u2130\", \"\\\\mathscr{E}\");\ndefineMacro(\"\\u2131\", \"\\\\mathscr{F}\");\ndefineMacro(\"\\u210B\", \"\\\\mathscr{H}\");\ndefineMacro(\"\\u2110\", \"\\\\mathscr{I}\");\ndefineMacro(\"\\u2112\", \"\\\\mathscr{L}\");\ndefineMacro(\"\\u2133\", \"\\\\mathscr{M}\");\ndefineMacro(\"\\u211B\", \"\\\\mathscr{R}\");\ndefineMacro(\"\\u212D\", \"\\\\mathfrak{C}\"); // Fraktur\n\ndefineMacro(\"\\u210C\", \"\\\\mathfrak{H}\");\ndefineMacro(\"\\u2128\", \"\\\\mathfrak{Z}\"); // Define \\Bbbk with a macro that works in both HTML and MathML.\n\ndefineMacro(\"\\\\Bbbk\", \"\\\\Bbb{k}\"); // Unicode middle dot\n// The KaTeX fonts do not contain U+00B7. Instead, \\cdotp displays\n// the dot at U+22C5 and gives it punct spacing.\n\ndefineMacro(\"\\u00b7\", \"\\\\cdotp\"); // \\llap and \\rlap render their contents in text mode\n\ndefineMacro(\"\\\\llap\", \"\\\\mathllap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\rlap\", \"\\\\mathrlap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\clap\", \"\\\\mathclap{\\\\textrm{#1}}\"); // \\mathstrut from the TeXbook, p 360\n\ndefineMacro(\"\\\\mathstrut\", \"\\\\vphantom{(}\"); // \\underbar from TeXbook p 353\n\ndefineMacro(\"\\\\underbar\", \"\\\\underline{\\\\text{#1}}\"); // \\not is defined by base/fontmath.ltx via\n// \\DeclareMathSymbol{\\not}{\\mathrel}{symbols}{\"36}\n// It's thus treated like a \\mathrel, but defined by a symbol that has zero\n// width but extends to the right.  We use \\rlap to get that spacing.\n// For MathML we write U+0338 here. buildMathML.js will then do the overlay.\n\ndefineMacro(\"\\\\not\", '\\\\html@mathml{\\\\mathrel{\\\\mathrlap\\\\@not}}{\\\\char\"338}'); // Negated symbols from base/fontmath.ltx:\n// \\def\\neq{\\not=} \\let\\ne=\\neq\n// \\DeclareRobustCommand\n//   \\notin{\\mathrel{\\m@th\\mathpalette\\c@ncel\\in}}\n// \\def\\c@ncel#1#2{\\m@th\\ooalign{$\\hfil#1\\mkern1mu/\\hfil$\\crcr$#1#2$}}\n\ndefineMacro(\"\\\\neq\", \"\\\\html@mathml{\\\\mathrel{\\\\not=}}{\\\\mathrel{\\\\char`≠}}\");\ndefineMacro(\"\\\\ne\", \"\\\\neq\");\ndefineMacro(\"\\u2260\", \"\\\\neq\");\ndefineMacro(\"\\\\notin\", \"\\\\html@mathml{\\\\mathrel{{\\\\in}\\\\mathllap{/\\\\mskip1mu}}}\" + \"{\\\\mathrel{\\\\char`∉}}\");\ndefineMacro(\"\\u2209\", \"\\\\notin\"); // Unicode stacked relations\n\ndefineMacro(\"\\u2258\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\kern{-1em}\\\\raisebox{0.4em}{$\\\\scriptsize\\\\frown$}}\" + \"}{\\\\mathrel{\\\\char`\\u2258}}\");\ndefineMacro(\"\\u2259\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\wedge}{=}}{\\\\mathrel{\\\\char`\\u2258}}\");\ndefineMacro(\"\\u225A\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\vee}{=}}{\\\\mathrel{\\\\char`\\u225A}}\");\ndefineMacro(\"\\u225B\", \"\\\\html@mathml{\\\\stackrel{\\\\scriptsize\\\\star}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225B}}\");\ndefineMacro(\"\\u225D\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{def}}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225D}}\");\ndefineMacro(\"\\u225E\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{m}}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225E}}\");\ndefineMacro(\"\\u225F\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny?}{=}}{\\\\mathrel{\\\\char`\\u225F}}\"); // Misc Unicode\n\ndefineMacro(\"\\u27C2\", \"\\\\perp\");\ndefineMacro(\"\\u203C\", \"\\\\mathclose{!\\\\mkern-0.8mu!}\");\ndefineMacro(\"\\u220C\", \"\\\\notni\");\ndefineMacro(\"\\u231C\", \"\\\\ulcorner\");\ndefineMacro(\"\\u231D\", \"\\\\urcorner\");\ndefineMacro(\"\\u231E\", \"\\\\llcorner\");\ndefineMacro(\"\\u231F\", \"\\\\lrcorner\");\ndefineMacro(\"\\u00A9\", \"\\\\copyright\");\ndefineMacro(\"\\u00AE\", \"\\\\textregistered\");\ndefineMacro(\"\\uFE0F\", \"\\\\textregistered\"); // The KaTeX fonts have corners at codepoints that don't match Unicode.\n// For MathML purposes, use the Unicode code point.\n\ndefineMacro(\"\\\\ulcorner\", \"\\\\html@mathml{\\\\@ulcorner}{\\\\mathop{\\\\char\\\"231c}}\");\ndefineMacro(\"\\\\urcorner\", \"\\\\html@mathml{\\\\@urcorner}{\\\\mathop{\\\\char\\\"231d}}\");\ndefineMacro(\"\\\\llcorner\", \"\\\\html@mathml{\\\\@llcorner}{\\\\mathop{\\\\char\\\"231e}}\");\ndefineMacro(\"\\\\lrcorner\", \"\\\\html@mathml{\\\\@lrcorner}{\\\\mathop{\\\\char\\\"231f}}\"); //////////////////////////////////////////////////////////////////////\n// LaTeX_2ε\n// \\vdots{\\vbox{\\baselineskip4\\p@  \\lineskiplimit\\z@\n// \\kern6\\p@\\hbox{.}\\hbox{.}\\hbox{.}}}\n// We'll call \\varvdots, which gets a glyph from symbols.js.\n// The zero-width rule gets us an equivalent to the vertical 6pt kern.\n\ndefineMacro(\"\\\\vdots\", \"{\\\\varvdots\\\\rule{0pt}{15pt}}\");\ndefineMacro(\"\\u22ee\", \"\\\\vdots\"); //////////////////////////////////////////////////////////////////////\n// amsmath.sty\n// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf\n// Italic Greek capital letters.  AMS defines these with \\DeclareMathSymbol,\n// but they are equivalent to \\mathit{\\Letter}.\n\ndefineMacro(\"\\\\varGamma\", \"\\\\mathit{\\\\Gamma}\");\ndefineMacro(\"\\\\varDelta\", \"\\\\mathit{\\\\Delta}\");\ndefineMacro(\"\\\\varTheta\", \"\\\\mathit{\\\\Theta}\");\ndefineMacro(\"\\\\varLambda\", \"\\\\mathit{\\\\Lambda}\");\ndefineMacro(\"\\\\varXi\", \"\\\\mathit{\\\\Xi}\");\ndefineMacro(\"\\\\varPi\", \"\\\\mathit{\\\\Pi}\");\ndefineMacro(\"\\\\varSigma\", \"\\\\mathit{\\\\Sigma}\");\ndefineMacro(\"\\\\varUpsilon\", \"\\\\mathit{\\\\Upsilon}\");\ndefineMacro(\"\\\\varPhi\", \"\\\\mathit{\\\\Phi}\");\ndefineMacro(\"\\\\varPsi\", \"\\\\mathit{\\\\Psi}\");\ndefineMacro(\"\\\\varOmega\", \"\\\\mathit{\\\\Omega}\"); //\\newcommand{\\substack}[1]{\\subarray{c}#1\\endsubarray}\n\ndefineMacro(\"\\\\substack\", \"\\\\begin{subarray}{c}#1\\\\end{subarray}\"); // \\renewcommand{\\colon}{\\nobreak\\mskip2mu\\mathpunct{}\\nonscript\n// \\mkern-\\thinmuskip{:}\\mskip6muplus1mu\\relax}\n\ndefineMacro(\"\\\\colon\", \"\\\\nobreak\\\\mskip2mu\\\\mathpunct{}\" + \"\\\\mathchoice{\\\\mkern-3mu}{\\\\mkern-3mu}{}{}{:}\\\\mskip6mu\\\\relax\"); // \\newcommand{\\boxed}[1]{\\fbox{\\m@th$\\displaystyle#1$}}\n\ndefineMacro(\"\\\\boxed\", \"\\\\fbox{$\\\\displaystyle{#1}$}\"); // \\def\\iff{\\DOTSB\\;\\Longleftrightarrow\\;}\n// \\def\\implies{\\DOTSB\\;\\Longrightarrow\\;}\n// \\def\\impliedby{\\DOTSB\\;\\Longleftarrow\\;}\n\ndefineMacro(\"\\\\iff\", \"\\\\DOTSB\\\\;\\\\Longleftrightarrow\\\\;\");\ndefineMacro(\"\\\\implies\", \"\\\\DOTSB\\\\;\\\\Longrightarrow\\\\;\");\ndefineMacro(\"\\\\impliedby\", \"\\\\DOTSB\\\\;\\\\Longleftarrow\\\\;\"); // \\def\\dddot#1{{\\mathop{#1}\\limits^{\\vbox to-1.4\\ex@{\\kern-\\tw@\\ex@\n//  \\hbox{\\normalfont ...}\\vss}}}}\n// We use \\overset which avoids the vertical shift of \\mathop.\n\ndefineMacro(\"\\\\dddot\", \"{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ...}}{#1}}\");\ndefineMacro(\"\\\\ddddot\", \"{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ....}}{#1}}\"); // AMSMath's automatic \\dots, based on \\mdots@@ macro.\n\nvar dotsByToken = {\n  ',': '\\\\dotsc',\n  '\\\\not': '\\\\dotsb',\n  // \\keybin@ checks for the following:\n  '+': '\\\\dotsb',\n  '=': '\\\\dotsb',\n  '<': '\\\\dotsb',\n  '>': '\\\\dotsb',\n  '-': '\\\\dotsb',\n  '*': '\\\\dotsb',\n  ':': '\\\\dotsb',\n  // Symbols whose definition starts with \\DOTSB:\n  '\\\\DOTSB': '\\\\dotsb',\n  '\\\\coprod': '\\\\dotsb',\n  '\\\\bigvee': '\\\\dotsb',\n  '\\\\bigwedge': '\\\\dotsb',\n  '\\\\biguplus': '\\\\dotsb',\n  '\\\\bigcap': '\\\\dotsb',\n  '\\\\bigcup': '\\\\dotsb',\n  '\\\\prod': '\\\\dotsb',\n  '\\\\sum': '\\\\dotsb',\n  '\\\\bigotimes': '\\\\dotsb',\n  '\\\\bigoplus': '\\\\dotsb',\n  '\\\\bigodot': '\\\\dotsb',\n  '\\\\bigsqcup': '\\\\dotsb',\n  '\\\\And': '\\\\dotsb',\n  '\\\\longrightarrow': '\\\\dotsb',\n  '\\\\Longrightarrow': '\\\\dotsb',\n  '\\\\longleftarrow': '\\\\dotsb',\n  '\\\\Longleftarrow': '\\\\dotsb',\n  '\\\\longleftrightarrow': '\\\\dotsb',\n  '\\\\Longleftrightarrow': '\\\\dotsb',\n  '\\\\mapsto': '\\\\dotsb',\n  '\\\\longmapsto': '\\\\dotsb',\n  '\\\\hookrightarrow': '\\\\dotsb',\n  '\\\\doteq': '\\\\dotsb',\n  // Symbols whose definition starts with \\mathbin:\n  '\\\\mathbin': '\\\\dotsb',\n  // Symbols whose definition starts with \\mathrel:\n  '\\\\mathrel': '\\\\dotsb',\n  '\\\\relbar': '\\\\dotsb',\n  '\\\\Relbar': '\\\\dotsb',\n  '\\\\xrightarrow': '\\\\dotsb',\n  '\\\\xleftarrow': '\\\\dotsb',\n  // Symbols whose definition starts with \\DOTSI:\n  '\\\\DOTSI': '\\\\dotsi',\n  '\\\\int': '\\\\dotsi',\n  '\\\\oint': '\\\\dotsi',\n  '\\\\iint': '\\\\dotsi',\n  '\\\\iiint': '\\\\dotsi',\n  '\\\\iiiint': '\\\\dotsi',\n  '\\\\idotsint': '\\\\dotsi',\n  // Symbols whose definition starts with \\DOTSX:\n  '\\\\DOTSX': '\\\\dotsx'\n};\ndefineMacro(\"\\\\dots\", function (context) {\n  // TODO: If used in text mode, should expand to \\textellipsis.\n  // However, in KaTeX, \\textellipsis and \\ldots behave the same\n  // (in text mode), and it's unlikely we'd see any of the math commands\n  // that affect the behavior of \\dots when in text mode.  So fine for now\n  // (until we support \\ifmmode ... \\else ... \\fi).\n  var thedots = '\\\\dotso';\n  var next = context.expandAfterFuture().text;\n\n  if (next in dotsByToken) {\n    thedots = dotsByToken[next];\n  } else if (next.slice(0, 4) === '\\\\not') {\n    thedots = '\\\\dotsb';\n  } else if (next in symbols.math) {\n    if (['bin', 'rel'].includes(symbols.math[next].group)) {\n      thedots = '\\\\dotsb';\n    }\n  }\n\n  return thedots;\n});\nvar spaceAfterDots = {\n  // \\rightdelim@ checks for the following:\n  ')': true,\n  ']': true,\n  '\\\\rbrack': true,\n  '\\\\}': true,\n  '\\\\rbrace': true,\n  '\\\\rangle': true,\n  '\\\\rceil': true,\n  '\\\\rfloor': true,\n  '\\\\rgroup': true,\n  '\\\\rmoustache': true,\n  '\\\\right': true,\n  '\\\\bigr': true,\n  '\\\\biggr': true,\n  '\\\\Bigr': true,\n  '\\\\Biggr': true,\n  // \\extra@ also tests for the following:\n  '$': true,\n  // \\extrap@ checks for the following:\n  ';': true,\n  '.': true,\n  ',': true\n};\ndefineMacro(\"\\\\dotso\", function (context) {\n  var next = context.future().text;\n\n  if (next in spaceAfterDots) {\n    return \"\\\\ldots\\\\,\";\n  } else {\n    return \"\\\\ldots\";\n  }\n});\ndefineMacro(\"\\\\dotsc\", function (context) {\n  var next = context.future().text; // \\dotsc uses \\extra@ but not \\extrap@, instead specially checking for\n  // ';' and '.', but doesn't check for ','.\n\n  if (next in spaceAfterDots && next !== ',') {\n    return \"\\\\ldots\\\\,\";\n  } else {\n    return \"\\\\ldots\";\n  }\n});\ndefineMacro(\"\\\\cdots\", function (context) {\n  var next = context.future().text;\n\n  if (next in spaceAfterDots) {\n    return \"\\\\@cdots\\\\,\";\n  } else {\n    return \"\\\\@cdots\";\n  }\n});\ndefineMacro(\"\\\\dotsb\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsm\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsi\", \"\\\\!\\\\cdots\"); // amsmath doesn't actually define \\dotsx, but \\dots followed by a macro\n// starting with \\DOTSX implies \\dotso, and then \\extra@ detects this case\n// and forces the added `\\,`.\n\ndefineMacro(\"\\\\dotsx\", \"\\\\ldots\\\\,\"); // \\let\\DOTSI\\relax\n// \\let\\DOTSB\\relax\n// \\let\\DOTSX\\relax\n\ndefineMacro(\"\\\\DOTSI\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSB\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSX\", \"\\\\relax\"); // Spacing, based on amsmath.sty's override of LaTeX defaults\n// \\DeclareRobustCommand{\\tmspace}[3]{%\n//   \\ifmmode\\mskip#1#2\\else\\kern#1#3\\fi\\relax}\n\ndefineMacro(\"\\\\tmspace\", \"\\\\TextOrMath{\\\\kern#1#3}{\\\\mskip#1#2}\\\\relax\"); // \\renewcommand{\\,}{\\tmspace+\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\n\ndefineMacro(\"\\\\,\", \"\\\\tmspace+{3mu}{.1667em}\"); // \\let\\thinspace\\,\n\ndefineMacro(\"\\\\thinspace\", \"\\\\,\"); // \\def\\>{\\mskip\\medmuskip}\n// \\renewcommand{\\:}{\\tmspace+\\medmuskip{.2222em}}\n// TODO: \\> and math mode of \\: should use \\medmuskip = 4mu plus 2mu minus 4mu\n\ndefineMacro(\"\\\\>\", \"\\\\mskip{4mu}\");\ndefineMacro(\"\\\\:\", \"\\\\tmspace+{4mu}{.2222em}\"); // \\let\\medspace\\:\n\ndefineMacro(\"\\\\medspace\", \"\\\\:\"); // \\renewcommand{\\;}{\\tmspace+\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip = 5mu plus 5mu\n\ndefineMacro(\"\\\\;\", \"\\\\tmspace+{5mu}{.2777em}\"); // \\let\\thickspace\\;\n\ndefineMacro(\"\\\\thickspace\", \"\\\\;\"); // \\renewcommand{\\!}{\\tmspace-\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\n\ndefineMacro(\"\\\\!\", \"\\\\tmspace-{3mu}{.1667em}\"); // \\let\\negthinspace\\!\n\ndefineMacro(\"\\\\negthinspace\", \"\\\\!\"); // \\newcommand{\\negmedspace}{\\tmspace-\\medmuskip{.2222em}}\n// TODO: math mode should use \\medmuskip\n\ndefineMacro(\"\\\\negmedspace\", \"\\\\tmspace-{4mu}{.2222em}\"); // \\newcommand{\\negthickspace}{\\tmspace-\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip\n\ndefineMacro(\"\\\\negthickspace\", \"\\\\tmspace-{5mu}{.277em}\"); // \\def\\enspace{\\kern.5em }\n\ndefineMacro(\"\\\\enspace\", \"\\\\kern.5em \"); // \\def\\enskip{\\hskip.5em\\relax}\n\ndefineMacro(\"\\\\enskip\", \"\\\\hskip.5em\\\\relax\"); // \\def\\quad{\\hskip1em\\relax}\n\ndefineMacro(\"\\\\quad\", \"\\\\hskip1em\\\\relax\"); // \\def\\qquad{\\hskip2em\\relax}\n\ndefineMacro(\"\\\\qquad\", \"\\\\hskip2em\\\\relax\"); // \\tag@in@display form of \\tag\n\ndefineMacro(\"\\\\tag\", \"\\\\@ifstar\\\\tag@literal\\\\tag@paren\");\ndefineMacro(\"\\\\tag@paren\", \"\\\\tag@literal{({#1})}\");\ndefineMacro(\"\\\\tag@literal\", context => {\n  if (context.macros.get(\"\\\\df@tag\")) {\n    throw new ParseError(\"Multiple \\\\tag\");\n  }\n\n  return \"\\\\gdef\\\\df@tag{\\\\text{#1}}\";\n}); // \\renewcommand{\\bmod}{\\nonscript\\mskip-\\medmuskip\\mkern5mu\\mathbin\n//   {\\operator@font mod}\\penalty900\n//   \\mkern5mu\\nonscript\\mskip-\\medmuskip}\n// \\newcommand{\\pod}[1]{\\allowbreak\n//   \\if@display\\mkern18mu\\else\\mkern8mu\\fi(#1)}\n// \\renewcommand{\\pmod}[1]{\\pod{{\\operator@font mod}\\mkern6mu#1}}\n// \\newcommand{\\mod}[1]{\\allowbreak\\if@display\\mkern18mu\n//   \\else\\mkern12mu\\fi{\\operator@font mod}\\,\\,#1}\n// TODO: math mode should use \\medmuskip = 4mu plus 2mu minus 4mu\n\ndefineMacro(\"\\\\bmod\", \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\" + \"\\\\mathbin{\\\\rm mod}\" + \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\");\ndefineMacro(\"\\\\pod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern8mu}{\\\\mkern8mu}{\\\\mkern8mu}(#1)\");\ndefineMacro(\"\\\\pmod\", \"\\\\pod{{\\\\rm mod}\\\\mkern6mu#1}\");\ndefineMacro(\"\\\\mod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern12mu}{\\\\mkern12mu}{\\\\mkern12mu}\" + \"{\\\\rm mod}\\\\,\\\\,#1\"); //////////////////////////////////////////////////////////////////////\n// LaTeX source2e\n// \\expandafter\\let\\expandafter\\@normalcr\n//     \\csname\\expandafter\\@gobble\\string\\\\ \\endcsname\n// \\DeclareRobustCommand\\newline{\\@normalcr\\relax}\n\ndefineMacro(\"\\\\newline\", \"\\\\\\\\\\\\relax\"); // \\def\\TeX{T\\kern-.1667em\\lower.5ex\\hbox{E}\\kern-.125emX\\@}\n// TODO: Doesn't normally work in math mode because \\@ fails.  KaTeX doesn't\n// support \\@ yet, so that's omitted, and we add \\text so that the result\n// doesn't look funny in math mode.\n\ndefineMacro(\"\\\\TeX\", \"\\\\textrm{\\\\html@mathml{\" + \"T\\\\kern-.1667em\\\\raisebox{-.5ex}{E}\\\\kern-.125emX\" + \"}{TeX}}\"); // \\DeclareRobustCommand{\\LaTeX}{L\\kern-.36em%\n//         {\\sbox\\z@ T%\n//          \\vbox to\\ht\\z@{\\hbox{\\check@mathfonts\n//                               \\fontsize\\sf@size\\z@\n//                               \\math@fontsfalse\\selectfont\n//                               A}%\n//                         \\vss}%\n//         }%\n//         \\kern-.15em%\n//         \\TeX}\n// This code aligns the top of the A with the T (from the perspective of TeX's\n// boxes, though visually the A appears to extend above slightly).\n// We compute the corresponding \\raisebox when A is rendered in \\normalsize\n// \\scriptstyle, which has a scale factor of 0.7 (see Options.js).\n\nvar latexRaiseA = makeEm(fontMetricsData['Main-Regular'][\"T\".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular'][\"A\".charCodeAt(0)][1]);\ndefineMacro(\"\\\\LaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"L\\\\kern-.36em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{LaTeX}}\"); // New KaTeX logo based on tweaking LaTeX logo\n\ndefineMacro(\"\\\\KaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"K\\\\kern-.17em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{KaTeX}}\"); // \\DeclareRobustCommand\\hspace{\\@ifstar\\@hspacer\\@hspace}\n// \\def\\@hspace#1{\\hskip  #1\\relax}\n// \\def\\@hspacer#1{\\vrule \\@width\\z@\\nobreak\n//                 \\hskip #1\\hskip \\z@skip}\n\ndefineMacro(\"\\\\hspace\", \"\\\\@ifstar\\\\@hspacer\\\\@hspace\");\ndefineMacro(\"\\\\@hspace\", \"\\\\hskip #1\\\\relax\");\ndefineMacro(\"\\\\@hspacer\", \"\\\\rule{0pt}{0pt}\\\\hskip #1\\\\relax\"); //////////////////////////////////////////////////////////////////////\n// mathtools.sty\n//\\providecommand\\ordinarycolon{:}\n\ndefineMacro(\"\\\\ordinarycolon\", \":\"); //\\def\\vcentcolon{\\mathrel{\\mathop\\ordinarycolon}}\n//TODO(edemaine): Not yet centered. Fix via \\raisebox or #726\n\ndefineMacro(\"\\\\vcentcolon\", \"\\\\mathrel{\\\\mathop\\\\ordinarycolon}\"); // \\providecommand*\\dblcolon{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}\n\ndefineMacro(\"\\\\dblcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-.9mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2237}}\"); // \\providecommand*\\coloneqq{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}\n\ndefineMacro(\"\\\\coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + \"{\\\\mathop{\\\\char\\\"2254}}\"); // ≔\n// \\providecommand*\\Coloneqq{\\dblcolon\\mathrel{\\mkern-1.2mu}=}\n\ndefineMacro(\"\\\\Coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"3d}}\"); // \\providecommand*\\coloneq{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\n\ndefineMacro(\"\\\\coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"2212}}\"); // \\providecommand*\\Coloneq{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\n\ndefineMacro(\"\\\\Coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"2212}}\"); // \\providecommand*\\eqqcolon{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}\n\ndefineMacro(\"\\\\eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2255}}\"); // ≕\n// \\providecommand*\\Eqqcolon{=\\mathrel{\\mkern-1.2mu}\\dblcolon}\n\ndefineMacro(\"\\\\Eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + \"{\\\\mathop{\\\\char\\\"3d\\\\char\\\"2237}}\"); // \\providecommand*\\eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}\n\ndefineMacro(\"\\\\eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2239}}\"); // \\providecommand*\\Eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}\n\ndefineMacro(\"\\\\Eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + \"{\\\\mathop{\\\\char\\\"2212\\\\char\\\"2237}}\"); // \\providecommand*\\colonapprox{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}\n\ndefineMacro(\"\\\\colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"2248}}\"); // \\providecommand*\\Colonapprox{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}\n\ndefineMacro(\"\\\\Colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"2248}}\"); // \\providecommand*\\colonsim{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}\n\ndefineMacro(\"\\\\colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"223c}}\"); // \\providecommand*\\Colonsim{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}\n\ndefineMacro(\"\\\\Colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"223c}}\"); // Some Unicode characters are implemented with macros to mathtools functions.\n\ndefineMacro(\"\\u2237\", \"\\\\dblcolon\"); // ::\n\ndefineMacro(\"\\u2239\", \"\\\\eqcolon\"); // -:\n\ndefineMacro(\"\\u2254\", \"\\\\coloneqq\"); // :=\n\ndefineMacro(\"\\u2255\", \"\\\\eqqcolon\"); // =:\n\ndefineMacro(\"\\u2A74\", \"\\\\Coloneqq\"); // ::=\n//////////////////////////////////////////////////////////////////////\n// colonequals.sty\n// Alternate names for mathtools's macros:\n\ndefineMacro(\"\\\\ratio\", \"\\\\vcentcolon\");\ndefineMacro(\"\\\\coloncolon\", \"\\\\dblcolon\");\ndefineMacro(\"\\\\colonequals\", \"\\\\coloneqq\");\ndefineMacro(\"\\\\coloncolonequals\", \"\\\\Coloneqq\");\ndefineMacro(\"\\\\equalscolon\", \"\\\\eqqcolon\");\ndefineMacro(\"\\\\equalscoloncolon\", \"\\\\Eqqcolon\");\ndefineMacro(\"\\\\colonminus\", \"\\\\coloneq\");\ndefineMacro(\"\\\\coloncolonminus\", \"\\\\Coloneq\");\ndefineMacro(\"\\\\minuscolon\", \"\\\\eqcolon\");\ndefineMacro(\"\\\\minuscoloncolon\", \"\\\\Eqcolon\"); // \\colonapprox name is same in mathtools and colonequals.\n\ndefineMacro(\"\\\\coloncolonapprox\", \"\\\\Colonapprox\"); // \\colonsim name is same in mathtools and colonequals.\n\ndefineMacro(\"\\\\coloncolonsim\", \"\\\\Colonsim\"); // Additional macros, implemented by analogy with mathtools definitions:\n\ndefineMacro(\"\\\\simcolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\simcoloncolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\");\ndefineMacro(\"\\\\approxcolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\approxcoloncolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\"); // Present in newtxmath, pxfonts and txfonts\n\ndefineMacro(\"\\\\notni\", \"\\\\html@mathml{\\\\not\\\\ni}{\\\\mathrel{\\\\char`\\u220C}}\");\ndefineMacro(\"\\\\limsup\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,sup}\");\ndefineMacro(\"\\\\liminf\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,inf}\"); //////////////////////////////////////////////////////////////////////\n// From amsopn.sty\n\ndefineMacro(\"\\\\injlim\", \"\\\\DOTSB\\\\operatorname*{inj\\\\,lim}\");\ndefineMacro(\"\\\\projlim\", \"\\\\DOTSB\\\\operatorname*{proj\\\\,lim}\");\ndefineMacro(\"\\\\varlimsup\", \"\\\\DOTSB\\\\operatorname*{\\\\overline{lim}}\");\ndefineMacro(\"\\\\varliminf\", \"\\\\DOTSB\\\\operatorname*{\\\\underline{lim}}\");\ndefineMacro(\"\\\\varinjlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underrightarrow{lim}}\");\ndefineMacro(\"\\\\varprojlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underleftarrow{lim}}\"); //////////////////////////////////////////////////////////////////////\n// MathML alternates for KaTeX glyphs in the Unicode private area\n\ndefineMacro(\"\\\\gvertneqq\", \"\\\\html@mathml{\\\\@gvertneqq}{\\u2269}\");\ndefineMacro(\"\\\\lvertneqq\", \"\\\\html@mathml{\\\\@lvertneqq}{\\u2268}\");\ndefineMacro(\"\\\\ngeqq\", \"\\\\html@mathml{\\\\@ngeqq}{\\u2271}\");\ndefineMacro(\"\\\\ngeqslant\", \"\\\\html@mathml{\\\\@ngeqslant}{\\u2271}\");\ndefineMacro(\"\\\\nleqq\", \"\\\\html@mathml{\\\\@nleqq}{\\u2270}\");\ndefineMacro(\"\\\\nleqslant\", \"\\\\html@mathml{\\\\@nleqslant}{\\u2270}\");\ndefineMacro(\"\\\\nshortmid\", \"\\\\html@mathml{\\\\@nshortmid}{∤}\");\ndefineMacro(\"\\\\nshortparallel\", \"\\\\html@mathml{\\\\@nshortparallel}{∦}\");\ndefineMacro(\"\\\\nsubseteqq\", \"\\\\html@mathml{\\\\@nsubseteqq}{\\u2288}\");\ndefineMacro(\"\\\\nsupseteqq\", \"\\\\html@mathml{\\\\@nsupseteqq}{\\u2289}\");\ndefineMacro(\"\\\\varsubsetneq\", \"\\\\html@mathml{\\\\@varsubsetneq}{⊊}\");\ndefineMacro(\"\\\\varsubsetneqq\", \"\\\\html@mathml{\\\\@varsubsetneqq}{⫋}\");\ndefineMacro(\"\\\\varsupsetneq\", \"\\\\html@mathml{\\\\@varsupsetneq}{⊋}\");\ndefineMacro(\"\\\\varsupsetneqq\", \"\\\\html@mathml{\\\\@varsupsetneqq}{⫌}\");\ndefineMacro(\"\\\\imath\", \"\\\\html@mathml{\\\\@imath}{\\u0131}\");\ndefineMacro(\"\\\\jmath\", \"\\\\html@mathml{\\\\@jmath}{\\u0237}\"); //////////////////////////////////////////////////////////////////////\n// stmaryrd and semantic\n// The stmaryrd and semantic packages render the next four items by calling a\n// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.\n\ndefineMacro(\"\\\\llbracket\", \"\\\\html@mathml{\" + \"\\\\mathopen{[\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`\\u27e6}}\");\ndefineMacro(\"\\\\rrbracket\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu]}}\" + \"{\\\\mathclose{\\\\char`\\u27e7}}\");\ndefineMacro(\"\\u27e6\", \"\\\\llbracket\"); // blackboard bold [\n\ndefineMacro(\"\\u27e7\", \"\\\\rrbracket\"); // blackboard bold ]\n\ndefineMacro(\"\\\\lBrace\", \"\\\\html@mathml{\" + \"\\\\mathopen{\\\\{\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`\\u2983}}\");\ndefineMacro(\"\\\\rBrace\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu\\\\}}}\" + \"{\\\\mathclose{\\\\char`\\u2984}}\");\ndefineMacro(\"\\u2983\", \"\\\\lBrace\"); // blackboard bold {\n\ndefineMacro(\"\\u2984\", \"\\\\rBrace\"); // blackboard bold }\n// TODO: Create variable sized versions of the last two items. I believe that\n// will require new font glyphs.\n// The stmaryrd function `\\minuso` provides a \"Plimsoll\" symbol that\n// superimposes the characters \\circ and \\mathminus. Used in chemistry.\n\ndefineMacro(\"\\\\minuso\", \"\\\\mathbin{\\\\html@mathml{\" + \"{\\\\mathrlap{\\\\mathchoice{\\\\kern{0.145em}}{\\\\kern{0.145em}}\" + \"{\\\\kern{0.1015em}}{\\\\kern{0.0725em}}\\\\circ}{-}}}\" + \"{\\\\char`⦵}}\");\ndefineMacro(\"⦵\", \"\\\\minuso\"); //////////////////////////////////////////////////////////////////////\n// texvc.sty\n// The texvc package contains macros available in mediawiki pages.\n// We omit the functions deprecated at\n// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax\n// We also omit texvc's \\O, which conflicts with \\text{\\O}\n\ndefineMacro(\"\\\\darr\", \"\\\\downarrow\");\ndefineMacro(\"\\\\dArr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\Darr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\lang\", \"\\\\langle\");\ndefineMacro(\"\\\\rang\", \"\\\\rangle\");\ndefineMacro(\"\\\\uarr\", \"\\\\uparrow\");\ndefineMacro(\"\\\\uArr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\Uarr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\N\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\R\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Z\", \"\\\\mathbb{Z}\");\ndefineMacro(\"\\\\alef\", \"\\\\aleph\");\ndefineMacro(\"\\\\alefsym\", \"\\\\aleph\");\ndefineMacro(\"\\\\Alpha\", \"\\\\mathrm{A}\");\ndefineMacro(\"\\\\Beta\", \"\\\\mathrm{B}\");\ndefineMacro(\"\\\\bull\", \"\\\\bullet\");\ndefineMacro(\"\\\\Chi\", \"\\\\mathrm{X}\");\ndefineMacro(\"\\\\clubs\", \"\\\\clubsuit\");\ndefineMacro(\"\\\\cnums\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Complex\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Dagger\", \"\\\\ddagger\");\ndefineMacro(\"\\\\diamonds\", \"\\\\diamondsuit\");\ndefineMacro(\"\\\\empty\", \"\\\\emptyset\");\ndefineMacro(\"\\\\Epsilon\", \"\\\\mathrm{E}\");\ndefineMacro(\"\\\\Eta\", \"\\\\mathrm{H}\");\ndefineMacro(\"\\\\exist\", \"\\\\exists\");\ndefineMacro(\"\\\\harr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\hArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Harr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\hearts\", \"\\\\heartsuit\");\ndefineMacro(\"\\\\image\", \"\\\\Im\");\ndefineMacro(\"\\\\infin\", \"\\\\infty\");\ndefineMacro(\"\\\\Iota\", \"\\\\mathrm{I}\");\ndefineMacro(\"\\\\isin\", \"\\\\in\");\ndefineMacro(\"\\\\Kappa\", \"\\\\mathrm{K}\");\ndefineMacro(\"\\\\larr\", \"\\\\leftarrow\");\ndefineMacro(\"\\\\lArr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\Larr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\lrarr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\lrArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Lrarr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Mu\", \"\\\\mathrm{M}\");\ndefineMacro(\"\\\\natnums\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\Nu\", \"\\\\mathrm{N}\");\ndefineMacro(\"\\\\Omicron\", \"\\\\mathrm{O}\");\ndefineMacro(\"\\\\plusmn\", \"\\\\pm\");\ndefineMacro(\"\\\\rarr\", \"\\\\rightarrow\");\ndefineMacro(\"\\\\rArr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\Rarr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\real\", \"\\\\Re\");\ndefineMacro(\"\\\\reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Rho\", \"\\\\mathrm{P}\");\ndefineMacro(\"\\\\sdot\", \"\\\\cdot\");\ndefineMacro(\"\\\\sect\", \"\\\\S\");\ndefineMacro(\"\\\\spades\", \"\\\\spadesuit\");\ndefineMacro(\"\\\\sub\", \"\\\\subset\");\ndefineMacro(\"\\\\sube\", \"\\\\subseteq\");\ndefineMacro(\"\\\\supe\", \"\\\\supseteq\");\ndefineMacro(\"\\\\Tau\", \"\\\\mathrm{T}\");\ndefineMacro(\"\\\\thetasym\", \"\\\\vartheta\"); // TODO: defineMacro(\"\\\\varcoppa\", \"\\\\\\mbox{\\\\coppa}\");\n\ndefineMacro(\"\\\\weierp\", \"\\\\wp\");\ndefineMacro(\"\\\\Zeta\", \"\\\\mathrm{Z}\"); //////////////////////////////////////////////////////////////////////\n// statmath.sty\n// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf\n\ndefineMacro(\"\\\\argmin\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,min}\");\ndefineMacro(\"\\\\argmax\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,max}\");\ndefineMacro(\"\\\\plim\", \"\\\\DOTSB\\\\mathop{\\\\operatorname{plim}}\\\\limits\"); //////////////////////////////////////////////////////////////////////\n// braket.sty\n// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf\n\ndefineMacro(\"\\\\bra\", \"\\\\mathinner{\\\\langle{#1}|}\");\ndefineMacro(\"\\\\ket\", \"\\\\mathinner{|{#1}\\\\rangle}\");\ndefineMacro(\"\\\\braket\", \"\\\\mathinner{\\\\langle{#1}\\\\rangle}\");\ndefineMacro(\"\\\\Bra\", \"\\\\left\\\\langle#1\\\\right|\");\ndefineMacro(\"\\\\Ket\", \"\\\\left|#1\\\\right\\\\rangle\");\n\nvar braketHelper = one => context => {\n  var left = context.consumeArg().tokens;\n  var middle = context.consumeArg().tokens;\n  var middleDouble = context.consumeArg().tokens;\n  var right = context.consumeArg().tokens;\n  var oldMiddle = context.macros.get(\"|\");\n  var oldMiddleDouble = context.macros.get(\"\\\\|\");\n  context.macros.beginGroup();\n\n  var midMacro = double => context => {\n    if (one) {\n      // Only modify the first instance of | or \\|\n      context.macros.set(\"|\", oldMiddle);\n\n      if (middleDouble.length) {\n        context.macros.set(\"\\\\|\", oldMiddleDouble);\n      }\n    }\n\n    var doubled = double;\n\n    if (!double && middleDouble.length) {\n      // Mimic \\@ifnextchar\n      var nextToken = context.future();\n\n      if (nextToken.text === \"|\") {\n        context.popToken();\n        doubled = true;\n      }\n    }\n\n    return {\n      tokens: doubled ? middleDouble : middle,\n      numArgs: 0\n    };\n  };\n\n  context.macros.set(\"|\", midMacro(false));\n\n  if (middleDouble.length) {\n    context.macros.set(\"\\\\|\", midMacro(true));\n  }\n\n  var arg = context.consumeArg().tokens;\n  var expanded = context.expandTokens([...right, ...arg, ...left // reversed\n  ]);\n  context.macros.endGroup();\n  return {\n    tokens: expanded.reverse(),\n    numArgs: 0\n  };\n};\n\ndefineMacro(\"\\\\bra@ket\", braketHelper(false));\ndefineMacro(\"\\\\bra@set\", braketHelper(true));\ndefineMacro(\"\\\\Braket\", \"\\\\bra@ket{\\\\left\\\\langle}\" + \"{\\\\,\\\\middle\\\\vert\\\\,}{\\\\,\\\\middle\\\\vert\\\\,}{\\\\right\\\\rangle}\");\ndefineMacro(\"\\\\Set\", \"\\\\bra@set{\\\\left\\\\{\\\\:}\" + \"{\\\\;\\\\middle\\\\vert\\\\;}{\\\\;\\\\middle\\\\Vert\\\\;}{\\\\:\\\\right\\\\}}\");\ndefineMacro(\"\\\\set\", \"\\\\bra@set{\\\\{\\\\,}{\\\\mid}{}{\\\\,\\\\}}\"); // has no support for special || or \\|\n//////////////////////////////////////////////////////////////////////\n// actuarialangle.dtx\n\ndefineMacro(\"\\\\angln\", \"{\\\\angl n}\"); // Custom Khan Academy colors, should be moved to an optional package\n\ndefineMacro(\"\\\\blue\", \"\\\\textcolor{##6495ed}{#1}\");\ndefineMacro(\"\\\\orange\", \"\\\\textcolor{##ffa500}{#1}\");\ndefineMacro(\"\\\\pink\", \"\\\\textcolor{##ff00af}{#1}\");\ndefineMacro(\"\\\\red\", \"\\\\textcolor{##df0030}{#1}\");\ndefineMacro(\"\\\\green\", \"\\\\textcolor{##28ae7b}{#1}\");\ndefineMacro(\"\\\\gray\", \"\\\\textcolor{gray}{#1}\");\ndefineMacro(\"\\\\purple\", \"\\\\textcolor{##9d38bd}{#1}\");\ndefineMacro(\"\\\\blueA\", \"\\\\textcolor{##ccfaff}{#1}\");\ndefineMacro(\"\\\\blueB\", \"\\\\textcolor{##80f6ff}{#1}\");\ndefineMacro(\"\\\\blueC\", \"\\\\textcolor{##63d9ea}{#1}\");\ndefineMacro(\"\\\\blueD\", \"\\\\textcolor{##11accd}{#1}\");\ndefineMacro(\"\\\\blueE\", \"\\\\textcolor{##0c7f99}{#1}\");\ndefineMacro(\"\\\\tealA\", \"\\\\textcolor{##94fff5}{#1}\");\ndefineMacro(\"\\\\tealB\", \"\\\\textcolor{##26edd5}{#1}\");\ndefineMacro(\"\\\\tealC\", \"\\\\textcolor{##01d1c1}{#1}\");\ndefineMacro(\"\\\\tealD\", \"\\\\textcolor{##01a995}{#1}\");\ndefineMacro(\"\\\\tealE\", \"\\\\textcolor{##208170}{#1}\");\ndefineMacro(\"\\\\greenA\", \"\\\\textcolor{##b6ffb0}{#1}\");\ndefineMacro(\"\\\\greenB\", \"\\\\textcolor{##8af281}{#1}\");\ndefineMacro(\"\\\\greenC\", \"\\\\textcolor{##74cf70}{#1}\");\ndefineMacro(\"\\\\greenD\", \"\\\\textcolor{##1fab54}{#1}\");\ndefineMacro(\"\\\\greenE\", \"\\\\textcolor{##0d923f}{#1}\");\ndefineMacro(\"\\\\goldA\", \"\\\\textcolor{##ffd0a9}{#1}\");\ndefineMacro(\"\\\\goldB\", \"\\\\textcolor{##ffbb71}{#1}\");\ndefineMacro(\"\\\\goldC\", \"\\\\textcolor{##ff9c39}{#1}\");\ndefineMacro(\"\\\\goldD\", \"\\\\textcolor{##e07d10}{#1}\");\ndefineMacro(\"\\\\goldE\", \"\\\\textcolor{##a75a05}{#1}\");\ndefineMacro(\"\\\\redA\", \"\\\\textcolor{##fca9a9}{#1}\");\ndefineMacro(\"\\\\redB\", \"\\\\textcolor{##ff8482}{#1}\");\ndefineMacro(\"\\\\redC\", \"\\\\textcolor{##f9685d}{#1}\");\ndefineMacro(\"\\\\redD\", \"\\\\textcolor{##e84d39}{#1}\");\ndefineMacro(\"\\\\redE\", \"\\\\textcolor{##bc2612}{#1}\");\ndefineMacro(\"\\\\maroonA\", \"\\\\textcolor{##ffbde0}{#1}\");\ndefineMacro(\"\\\\maroonB\", \"\\\\textcolor{##ff92c6}{#1}\");\ndefineMacro(\"\\\\maroonC\", \"\\\\textcolor{##ed5fa6}{#1}\");\ndefineMacro(\"\\\\maroonD\", \"\\\\textcolor{##ca337c}{#1}\");\ndefineMacro(\"\\\\maroonE\", \"\\\\textcolor{##9e034e}{#1}\");\ndefineMacro(\"\\\\purpleA\", \"\\\\textcolor{##ddd7ff}{#1}\");\ndefineMacro(\"\\\\purpleB\", \"\\\\textcolor{##c6b9fc}{#1}\");\ndefineMacro(\"\\\\purpleC\", \"\\\\textcolor{##aa87ff}{#1}\");\ndefineMacro(\"\\\\purpleD\", \"\\\\textcolor{##7854ab}{#1}\");\ndefineMacro(\"\\\\purpleE\", \"\\\\textcolor{##543b78}{#1}\");\ndefineMacro(\"\\\\mintA\", \"\\\\textcolor{##f5f9e8}{#1}\");\ndefineMacro(\"\\\\mintB\", \"\\\\textcolor{##edf2df}{#1}\");\ndefineMacro(\"\\\\mintC\", \"\\\\textcolor{##e0e5cc}{#1}\");\ndefineMacro(\"\\\\grayA\", \"\\\\textcolor{##f6f7f7}{#1}\");\ndefineMacro(\"\\\\grayB\", \"\\\\textcolor{##f0f1f2}{#1}\");\ndefineMacro(\"\\\\grayC\", \"\\\\textcolor{##e3e5e6}{#1}\");\ndefineMacro(\"\\\\grayD\", \"\\\\textcolor{##d6d8da}{#1}\");\ndefineMacro(\"\\\\grayE\", \"\\\\textcolor{##babec2}{#1}\");\ndefineMacro(\"\\\\grayF\", \"\\\\textcolor{##888d93}{#1}\");\ndefineMacro(\"\\\\grayG\", \"\\\\textcolor{##626569}{#1}\");\ndefineMacro(\"\\\\grayH\", \"\\\\textcolor{##3b3e40}{#1}\");\ndefineMacro(\"\\\\grayI\", \"\\\\textcolor{##21242c}{#1}\");\ndefineMacro(\"\\\\kaBlue\", \"\\\\textcolor{##314453}{#1}\");\ndefineMacro(\"\\\\kaGreen\", \"\\\\textcolor{##71B307}{#1}\");\n\n/**\n * This file contains the “gullet” where macros are expanded\n * until only non-macro tokens remain.\n */\n// List of commands that act like macros but aren't defined as a macro,\n// function, or symbol.  Used in `isDefined`.\nvar implicitCommands = {\n  \"^\": true,\n  // Parser.js\n  \"_\": true,\n  // Parser.js\n  \"\\\\limits\": true,\n  // Parser.js\n  \"\\\\nolimits\": true // Parser.js\n\n};\nclass MacroExpander {\n  constructor(input, settings, mode) {\n    this.settings = void 0;\n    this.expansionCount = void 0;\n    this.lexer = void 0;\n    this.macros = void 0;\n    this.stack = void 0;\n    this.mode = void 0;\n    this.settings = settings;\n    this.expansionCount = 0;\n    this.feed(input); // Make new global namespace\n\n    this.macros = new Namespace(macros, settings.macros);\n    this.mode = mode;\n    this.stack = []; // contains tokens in REVERSE order\n  }\n  /**\n   * Feed a new input string to the same MacroExpander\n   * (with existing macros etc.).\n   */\n\n\n  feed(input) {\n    this.lexer = new Lexer(input, this.settings);\n  }\n  /**\n   * Switches between \"text\" and \"math\" modes.\n   */\n\n\n  switchMode(newMode) {\n    this.mode = newMode;\n  }\n  /**\n   * Start a new group nesting within all namespaces.\n   */\n\n\n  beginGroup() {\n    this.macros.beginGroup();\n  }\n  /**\n   * End current group nesting within all namespaces.\n   */\n\n\n  endGroup() {\n    this.macros.endGroup();\n  }\n  /**\n   * Ends all currently nested groups (if any), restoring values before the\n   * groups began.  Useful in case of an error in the middle of parsing.\n   */\n\n\n  endGroups() {\n    this.macros.endGroups();\n  }\n  /**\n   * Returns the topmost token on the stack, without expanding it.\n   * Similar in behavior to TeX's `\\futurelet`.\n   */\n\n\n  future() {\n    if (this.stack.length === 0) {\n      this.pushToken(this.lexer.lex());\n    }\n\n    return this.stack[this.stack.length - 1];\n  }\n  /**\n   * Remove and return the next unexpanded token.\n   */\n\n\n  popToken() {\n    this.future(); // ensure non-empty stack\n\n    return this.stack.pop();\n  }\n  /**\n   * Add a given token to the token stack.  In particular, this get be used\n   * to put back a token returned from one of the other methods.\n   */\n\n\n  pushToken(token) {\n    this.stack.push(token);\n  }\n  /**\n   * Append an array of tokens to the token stack.\n   */\n\n\n  pushTokens(tokens) {\n    this.stack.push(...tokens);\n  }\n  /**\n   * Find an macro argument without expanding tokens and append the array of\n   * tokens to the token stack. Uses Token as a container for the result.\n   */\n\n\n  scanArgument(isOptional) {\n    var start;\n    var end;\n    var tokens;\n\n    if (isOptional) {\n      this.consumeSpaces(); // \\@ifnextchar gobbles any space following it\n\n      if (this.future().text !== \"[\") {\n        return null;\n      }\n\n      start = this.popToken(); // don't include [ in tokens\n\n      ({\n        tokens,\n        end\n      } = this.consumeArg([\"]\"]));\n    } else {\n      ({\n        tokens,\n        start,\n        end\n      } = this.consumeArg());\n    } // indicate the end of an argument\n\n\n    this.pushToken(new Token(\"EOF\", end.loc));\n    this.pushTokens(tokens);\n    return new Token(\"\", SourceLocation.range(start, end));\n  }\n  /**\n   * Consume all following space tokens, without expansion.\n   */\n\n\n  consumeSpaces() {\n    for (;;) {\n      var token = this.future();\n\n      if (token.text === \" \") {\n        this.stack.pop();\n      } else {\n        break;\n      }\n    }\n  }\n  /**\n   * Consume an argument from the token stream, and return the resulting array\n   * of tokens and start/end token.\n   */\n\n\n  consumeArg(delims) {\n    // The argument for a delimited parameter is the shortest (possibly\n    // empty) sequence of tokens with properly nested {...} groups that is\n    // followed ... by this particular list of non-parameter tokens.\n    // The argument for an undelimited parameter is the next nonblank\n    // token, unless that token is ‘{’, when the argument will be the\n    // entire {...} group that follows.\n    var tokens = [];\n    var isDelimited = delims && delims.length > 0;\n\n    if (!isDelimited) {\n      // Ignore spaces between arguments.  As the TeXbook says:\n      // \"After you have said ‘\\def\\row#1#2{...}’, you are allowed to\n      //  put spaces between the arguments (e.g., ‘\\row x n’), because\n      //  TeX doesn’t use single spaces as undelimited arguments.\"\n      this.consumeSpaces();\n    }\n\n    var start = this.future();\n    var tok;\n    var depth = 0;\n    var match = 0;\n\n    do {\n      tok = this.popToken();\n      tokens.push(tok);\n\n      if (tok.text === \"{\") {\n        ++depth;\n      } else if (tok.text === \"}\") {\n        --depth;\n\n        if (depth === -1) {\n          throw new ParseError(\"Extra }\", tok);\n        }\n      } else if (tok.text === \"EOF\") {\n        throw new ParseError(\"Unexpected end of input in a macro argument\" + \", expected '\" + (delims && isDelimited ? delims[match] : \"}\") + \"'\", tok);\n      }\n\n      if (delims && isDelimited) {\n        if ((depth === 0 || depth === 1 && delims[match] === \"{\") && tok.text === delims[match]) {\n          ++match;\n\n          if (match === delims.length) {\n            // don't include delims in tokens\n            tokens.splice(-match, match);\n            break;\n          }\n        } else {\n          match = 0;\n        }\n      }\n    } while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{<nested tokens>}’,\n    // ... the outermost braces enclosing the argument are removed\n\n\n    if (start.text === \"{\" && tokens[tokens.length - 1].text === \"}\") {\n      tokens.pop();\n      tokens.shift();\n    }\n\n    tokens.reverse(); // to fit in with stack order\n\n    return {\n      tokens,\n      start,\n      end: tok\n    };\n  }\n  /**\n   * Consume the specified number of (delimited) arguments from the token\n   * stream and return the resulting array of arguments.\n   */\n\n\n  consumeArgs(numArgs, delimiters) {\n    if (delimiters) {\n      if (delimiters.length !== numArgs + 1) {\n        throw new ParseError(\"The length of delimiters doesn't match the number of args!\");\n      }\n\n      var delims = delimiters[0];\n\n      for (var i = 0; i < delims.length; i++) {\n        var tok = this.popToken();\n\n        if (delims[i] !== tok.text) {\n          throw new ParseError(\"Use of the macro doesn't match its definition\", tok);\n        }\n      }\n    }\n\n    var args = [];\n\n    for (var _i = 0; _i < numArgs; _i++) {\n      args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens);\n    }\n\n    return args;\n  }\n  /**\n   * Increment `expansionCount` by the specified amount.\n   * Throw an error if it exceeds `maxExpand`.\n   */\n\n\n  countExpansion(amount) {\n    this.expansionCount += amount;\n\n    if (this.expansionCount > this.settings.maxExpand) {\n      throw new ParseError(\"Too many expansions: infinite loop or \" + \"need to increase maxExpand setting\");\n    }\n  }\n  /**\n   * Expand the next token only once if possible.\n   *\n   * If the token is expanded, the resulting tokens will be pushed onto\n   * the stack in reverse order, and the number of such tokens will be\n   * returned.  This number might be zero or positive.\n   *\n   * If not, the return value is `false`, and the next token remains at the\n   * top of the stack.\n   *\n   * In either case, the next token will be on the top of the stack,\n   * or the stack will be empty (in case of empty expansion\n   * and no other tokens).\n   *\n   * Used to implement `expandAfterFuture` and `expandNextToken`.\n   *\n   * If expandableOnly, only expandable tokens are expanded and\n   * an undefined control sequence results in an error.\n   */\n\n\n  expandOnce(expandableOnly) {\n    var topToken = this.popToken();\n    var name = topToken.text;\n    var expansion = !topToken.noexpand ? this._getExpansion(name) : null;\n\n    if (expansion == null || expandableOnly && expansion.unexpandable) {\n      if (expandableOnly && expansion == null && name[0] === \"\\\\\" && !this.isDefined(name)) {\n        throw new ParseError(\"Undefined control sequence: \" + name);\n      }\n\n      this.pushToken(topToken);\n      return false;\n    }\n\n    this.countExpansion(1);\n    var tokens = expansion.tokens;\n    var args = this.consumeArgs(expansion.numArgs, expansion.delimiters);\n\n    if (expansion.numArgs) {\n      // paste arguments in place of the placeholders\n      tokens = tokens.slice(); // make a shallow copy\n\n      for (var i = tokens.length - 1; i >= 0; --i) {\n        var tok = tokens[i];\n\n        if (tok.text === \"#\") {\n          if (i === 0) {\n            throw new ParseError(\"Incomplete placeholder at end of macro body\", tok);\n          }\n\n          tok = tokens[--i]; // next token on stack\n\n          if (tok.text === \"#\") {\n            // ## → #\n            tokens.splice(i + 1, 1); // drop first #\n          } else if (/^[1-9]$/.test(tok.text)) {\n            // replace the placeholder with the indicated argument\n            tokens.splice(i, 2, ...args[+tok.text - 1]);\n          } else {\n            throw new ParseError(\"Not a valid argument number\", tok);\n          }\n        }\n      }\n    } // Concatenate expansion onto top of stack.\n\n\n    this.pushTokens(tokens);\n    return tokens.length;\n  }\n  /**\n   * Expand the next token only once (if possible), and return the resulting\n   * top token on the stack (without removing anything from the stack).\n   * Similar in behavior to TeX's `\\expandafter\\futurelet`.\n   * Equivalent to expandOnce() followed by future().\n   */\n\n\n  expandAfterFuture() {\n    this.expandOnce();\n    return this.future();\n  }\n  /**\n   * Recursively expand first token, then return first non-expandable token.\n   */\n\n\n  expandNextToken() {\n    for (;;) {\n      if (this.expandOnce() === false) {\n        // fully expanded\n        var token = this.stack.pop(); // the token after \\noexpand is interpreted as if its meaning\n        // were ‘\\relax’\n\n        if (token.treatAsRelax) {\n          token.text = \"\\\\relax\";\n        }\n\n        return token;\n      }\n    } // Flow unable to figure out that this pathway is impossible.\n    // https://github.com/facebook/flow/issues/4808\n\n\n    throw new Error(); // eslint-disable-line no-unreachable\n  }\n  /**\n   * Fully expand the given macro name and return the resulting list of\n   * tokens, or return `undefined` if no such macro is defined.\n   */\n\n\n  expandMacro(name) {\n    return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined;\n  }\n  /**\n   * Fully expand the given token stream and return the resulting list of\n   * tokens.  Note that the input tokens are in reverse order, but the\n   * output tokens are in forward order.\n   */\n\n\n  expandTokens(tokens) {\n    var output = [];\n    var oldStackLength = this.stack.length;\n    this.pushTokens(tokens);\n\n    while (this.stack.length > oldStackLength) {\n      // Expand only expandable tokens\n      if (this.expandOnce(true) === false) {\n        // fully expanded\n        var token = this.stack.pop();\n\n        if (token.treatAsRelax) {\n          // the expansion of \\noexpand is the token itself\n          token.noexpand = false;\n          token.treatAsRelax = false;\n        }\n\n        output.push(token);\n      }\n    } // Count all of these tokens as additional expansions, to prevent\n    // exponential blowup from linearly many \\edef's.\n\n\n    this.countExpansion(output.length);\n    return output;\n  }\n  /**\n   * Fully expand the given macro name and return the result as a string,\n   * or return `undefined` if no such macro is defined.\n   */\n\n\n  expandMacroAsText(name) {\n    var tokens = this.expandMacro(name);\n\n    if (tokens) {\n      return tokens.map(token => token.text).join(\"\");\n    } else {\n      return tokens;\n    }\n  }\n  /**\n   * Returns the expanded macro as a reversed array of tokens and a macro\n   * argument count.  Or returns `null` if no such macro.\n   */\n\n\n  _getExpansion(name) {\n    var definition = this.macros.get(name);\n\n    if (definition == null) {\n      // mainly checking for undefined here\n      return definition;\n    } // If a single character has an associated catcode other than 13\n    // (active character), then don't expand it.\n\n\n    if (name.length === 1) {\n      var catcode = this.lexer.catcodes[name];\n\n      if (catcode != null && catcode !== 13) {\n        return;\n      }\n    }\n\n    var expansion = typeof definition === \"function\" ? definition(this) : definition;\n\n    if (typeof expansion === \"string\") {\n      var numArgs = 0;\n\n      if (expansion.indexOf(\"#\") !== -1) {\n        var stripped = expansion.replace(/##/g, \"\");\n\n        while (stripped.indexOf(\"#\" + (numArgs + 1)) !== -1) {\n          ++numArgs;\n        }\n      }\n\n      var bodyLexer = new Lexer(expansion, this.settings);\n      var tokens = [];\n      var tok = bodyLexer.lex();\n\n      while (tok.text !== \"EOF\") {\n        tokens.push(tok);\n        tok = bodyLexer.lex();\n      }\n\n      tokens.reverse(); // to fit in with stack using push and pop\n\n      var expanded = {\n        tokens,\n        numArgs\n      };\n      return expanded;\n    }\n\n    return expansion;\n  }\n  /**\n   * Determine whether a command is currently \"defined\" (has some\n   * functionality), meaning that it's a macro (in the current group),\n   * a function, a symbol, or one of the special commands listed in\n   * `implicitCommands`.\n   */\n\n\n  isDefined(name) {\n    return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);\n  }\n  /**\n   * Determine whether a command is expandable.\n   */\n\n\n  isExpandable(name) {\n    var macro = this.macros.get(name);\n    return macro != null ? typeof macro === \"string\" || typeof macro === \"function\" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive;\n  }\n\n}\n\n// Helpers for Parser.js handling of Unicode (sub|super)script characters.\nvar unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/;\nvar uSubsAndSups = Object.freeze({\n  '₊': '+',\n  '₋': '-',\n  '₌': '=',\n  '₍': '(',\n  '₎': ')',\n  '₀': '0',\n  '₁': '1',\n  '₂': '2',\n  '₃': '3',\n  '₄': '4',\n  '₅': '5',\n  '₆': '6',\n  '₇': '7',\n  '₈': '8',\n  '₉': '9',\n  '\\u2090': 'a',\n  '\\u2091': 'e',\n  '\\u2095': 'h',\n  '\\u1D62': 'i',\n  '\\u2C7C': 'j',\n  '\\u2096': 'k',\n  '\\u2097': 'l',\n  '\\u2098': 'm',\n  '\\u2099': 'n',\n  '\\u2092': 'o',\n  '\\u209A': 'p',\n  '\\u1D63': 'r',\n  '\\u209B': 's',\n  '\\u209C': 't',\n  '\\u1D64': 'u',\n  '\\u1D65': 'v',\n  '\\u2093': 'x',\n  '\\u1D66': 'β',\n  '\\u1D67': 'γ',\n  '\\u1D68': 'ρ',\n  '\\u1D69': '\\u03d5',\n  '\\u1D6A': 'χ',\n  '⁺': '+',\n  '⁻': '-',\n  '⁼': '=',\n  '⁽': '(',\n  '⁾': ')',\n  '⁰': '0',\n  '¹': '1',\n  '²': '2',\n  '³': '3',\n  '⁴': '4',\n  '⁵': '5',\n  '⁶': '6',\n  '⁷': '7',\n  '⁸': '8',\n  '⁹': '9',\n  '\\u1D2C': 'A',\n  '\\u1D2E': 'B',\n  '\\u1D30': 'D',\n  '\\u1D31': 'E',\n  '\\u1D33': 'G',\n  '\\u1D34': 'H',\n  '\\u1D35': 'I',\n  '\\u1D36': 'J',\n  '\\u1D37': 'K',\n  '\\u1D38': 'L',\n  '\\u1D39': 'M',\n  '\\u1D3A': 'N',\n  '\\u1D3C': 'O',\n  '\\u1D3E': 'P',\n  '\\u1D3F': 'R',\n  '\\u1D40': 'T',\n  '\\u1D41': 'U',\n  '\\u2C7D': 'V',\n  '\\u1D42': 'W',\n  '\\u1D43': 'a',\n  '\\u1D47': 'b',\n  '\\u1D9C': 'c',\n  '\\u1D48': 'd',\n  '\\u1D49': 'e',\n  '\\u1DA0': 'f',\n  '\\u1D4D': 'g',\n  '\\u02B0': 'h',\n  '\\u2071': 'i',\n  '\\u02B2': 'j',\n  '\\u1D4F': 'k',\n  '\\u02E1': 'l',\n  '\\u1D50': 'm',\n  '\\u207F': 'n',\n  '\\u1D52': 'o',\n  '\\u1D56': 'p',\n  '\\u02B3': 'r',\n  '\\u02E2': 's',\n  '\\u1D57': 't',\n  '\\u1D58': 'u',\n  '\\u1D5B': 'v',\n  '\\u02B7': 'w',\n  '\\u02E3': 'x',\n  '\\u02B8': 'y',\n  '\\u1DBB': 'z',\n  '\\u1D5D': 'β',\n  '\\u1D5E': 'γ',\n  '\\u1D5F': 'δ',\n  '\\u1D60': '\\u03d5',\n  '\\u1D61': 'χ',\n  '\\u1DBF': 'θ'\n});\n\n/* eslint no-constant-condition:0 */\n\nvar unicodeAccents = {\n  \"́\": {\n    \"text\": \"\\\\'\",\n    \"math\": \"\\\\acute\"\n  },\n  \"̀\": {\n    \"text\": \"\\\\`\",\n    \"math\": \"\\\\grave\"\n  },\n  \"̈\": {\n    \"text\": \"\\\\\\\"\",\n    \"math\": \"\\\\ddot\"\n  },\n  \"̃\": {\n    \"text\": \"\\\\~\",\n    \"math\": \"\\\\tilde\"\n  },\n  \"̄\": {\n    \"text\": \"\\\\=\",\n    \"math\": \"\\\\bar\"\n  },\n  \"̆\": {\n    \"text\": \"\\\\u\",\n    \"math\": \"\\\\breve\"\n  },\n  \"̌\": {\n    \"text\": \"\\\\v\",\n    \"math\": \"\\\\check\"\n  },\n  \"̂\": {\n    \"text\": \"\\\\^\",\n    \"math\": \"\\\\hat\"\n  },\n  \"̇\": {\n    \"text\": \"\\\\.\",\n    \"math\": \"\\\\dot\"\n  },\n  \"̊\": {\n    \"text\": \"\\\\r\",\n    \"math\": \"\\\\mathring\"\n  },\n  \"̋\": {\n    \"text\": \"\\\\H\"\n  },\n  \"̧\": {\n    \"text\": \"\\\\c\"\n  }\n};\nvar unicodeSymbols = {\n  \"á\": \"á\",\n  \"à\": \"à\",\n  \"ä\": \"ä\",\n  \"ǟ\": \"ǟ\",\n  \"ã\": \"ã\",\n  \"ā\": \"ā\",\n  \"ă\": \"ă\",\n  \"ắ\": \"ắ\",\n  \"ằ\": \"ằ\",\n  \"ẵ\": \"ẵ\",\n  \"ǎ\": \"ǎ\",\n  \"â\": \"â\",\n  \"ấ\": \"ấ\",\n  \"ầ\": \"ầ\",\n  \"ẫ\": \"ẫ\",\n  \"ȧ\": \"ȧ\",\n  \"ǡ\": \"ǡ\",\n  \"å\": \"å\",\n  \"ǻ\": \"ǻ\",\n  \"ḃ\": \"ḃ\",\n  \"ć\": \"ć\",\n  \"ḉ\": \"ḉ\",\n  \"č\": \"č\",\n  \"ĉ\": \"ĉ\",\n  \"ċ\": \"ċ\",\n  \"ç\": \"ç\",\n  \"ď\": \"ď\",\n  \"ḋ\": \"ḋ\",\n  \"ḑ\": \"ḑ\",\n  \"é\": \"é\",\n  \"è\": \"è\",\n  \"ë\": \"ë\",\n  \"ẽ\": \"ẽ\",\n  \"ē\": \"ē\",\n  \"ḗ\": \"ḗ\",\n  \"ḕ\": \"ḕ\",\n  \"ĕ\": \"ĕ\",\n  \"ḝ\": \"ḝ\",\n  \"ě\": \"ě\",\n  \"ê\": \"ê\",\n  \"ế\": \"ế\",\n  \"ề\": \"ề\",\n  \"ễ\": \"ễ\",\n  \"ė\": \"ė\",\n  \"ȩ\": \"ȩ\",\n  \"ḟ\": \"ḟ\",\n  \"ǵ\": \"ǵ\",\n  \"ḡ\": \"ḡ\",\n  \"ğ\": \"ğ\",\n  \"ǧ\": \"ǧ\",\n  \"ĝ\": \"ĝ\",\n  \"ġ\": \"ġ\",\n  \"ģ\": \"ģ\",\n  \"ḧ\": \"ḧ\",\n  \"ȟ\": \"ȟ\",\n  \"ĥ\": \"ĥ\",\n  \"ḣ\": \"ḣ\",\n  \"ḩ\": \"ḩ\",\n  \"í\": \"í\",\n  \"ì\": \"ì\",\n  \"ï\": \"ï\",\n  \"ḯ\": \"ḯ\",\n  \"ĩ\": \"ĩ\",\n  \"ī\": \"ī\",\n  \"ĭ\": \"ĭ\",\n  \"ǐ\": \"ǐ\",\n  \"î\": \"î\",\n  \"ǰ\": \"ǰ\",\n  \"ĵ\": \"ĵ\",\n  \"ḱ\": \"ḱ\",\n  \"ǩ\": \"ǩ\",\n  \"ķ\": \"ķ\",\n  \"ĺ\": \"ĺ\",\n  \"ľ\": \"ľ\",\n  \"ļ\": \"ļ\",\n  \"ḿ\": \"ḿ\",\n  \"ṁ\": \"ṁ\",\n  \"ń\": \"ń\",\n  \"ǹ\": \"ǹ\",\n  \"ñ\": \"ñ\",\n  \"ň\": \"ň\",\n  \"ṅ\": \"ṅ\",\n  \"ņ\": \"ņ\",\n  \"ó\": \"ó\",\n  \"ò\": \"ò\",\n  \"ö\": \"ö\",\n  \"ȫ\": \"ȫ\",\n  \"õ\": \"õ\",\n  \"ṍ\": \"ṍ\",\n  \"ṏ\": \"ṏ\",\n  \"ȭ\": \"ȭ\",\n  \"ō\": \"ō\",\n  \"ṓ\": \"ṓ\",\n  \"ṑ\": \"ṑ\",\n  \"ŏ\": \"ŏ\",\n  \"ǒ\": \"ǒ\",\n  \"ô\": \"ô\",\n  \"ố\": \"ố\",\n  \"ồ\": \"ồ\",\n  \"ỗ\": \"ỗ\",\n  \"ȯ\": \"ȯ\",\n  \"ȱ\": \"ȱ\",\n  \"ő\": \"ő\",\n  \"ṕ\": \"ṕ\",\n  \"ṗ\": \"ṗ\",\n  \"ŕ\": \"ŕ\",\n  \"ř\": \"ř\",\n  \"ṙ\": \"ṙ\",\n  \"ŗ\": \"ŗ\",\n  \"ś\": \"ś\",\n  \"ṥ\": \"ṥ\",\n  \"š\": \"š\",\n  \"ṧ\": \"ṧ\",\n  \"ŝ\": \"ŝ\",\n  \"ṡ\": \"ṡ\",\n  \"ş\": \"ş\",\n  \"ẗ\": \"ẗ\",\n  \"ť\": \"ť\",\n  \"ṫ\": \"ṫ\",\n  \"ţ\": \"ţ\",\n  \"ú\": \"ú\",\n  \"ù\": \"ù\",\n  \"ü\": \"ü\",\n  \"ǘ\": \"ǘ\",\n  \"ǜ\": \"ǜ\",\n  \"ǖ\": \"ǖ\",\n  \"ǚ\": \"ǚ\",\n  \"ũ\": \"ũ\",\n  \"ṹ\": \"ṹ\",\n  \"ū\": \"ū\",\n  \"ṻ\": \"ṻ\",\n  \"ŭ\": \"ŭ\",\n  \"ǔ\": \"ǔ\",\n  \"û\": \"û\",\n  \"ů\": \"ů\",\n  \"ű\": \"ű\",\n  \"ṽ\": \"ṽ\",\n  \"ẃ\": \"ẃ\",\n  \"ẁ\": \"ẁ\",\n  \"ẅ\": \"ẅ\",\n  \"ŵ\": \"ŵ\",\n  \"ẇ\": \"ẇ\",\n  \"ẘ\": \"ẘ\",\n  \"ẍ\": \"ẍ\",\n  \"ẋ\": \"ẋ\",\n  \"ý\": \"ý\",\n  \"ỳ\": \"ỳ\",\n  \"ÿ\": \"ÿ\",\n  \"ỹ\": \"ỹ\",\n  \"ȳ\": \"ȳ\",\n  \"ŷ\": \"ŷ\",\n  \"ẏ\": \"ẏ\",\n  \"ẙ\": \"ẙ\",\n  \"ź\": \"ź\",\n  \"ž\": \"ž\",\n  \"ẑ\": \"ẑ\",\n  \"ż\": \"ż\",\n  \"Á\": \"Á\",\n  \"À\": \"À\",\n  \"Ä\": \"Ä\",\n  \"Ǟ\": \"Ǟ\",\n  \"Ã\": \"Ã\",\n  \"Ā\": \"Ā\",\n  \"Ă\": \"Ă\",\n  \"Ắ\": \"Ắ\",\n  \"Ằ\": \"Ằ\",\n  \"Ẵ\": \"Ẵ\",\n  \"Ǎ\": \"Ǎ\",\n  \"Â\": \"Â\",\n  \"Ấ\": \"Ấ\",\n  \"Ầ\": \"Ầ\",\n  \"Ẫ\": \"Ẫ\",\n  \"Ȧ\": \"Ȧ\",\n  \"Ǡ\": \"Ǡ\",\n  \"Å\": \"Å\",\n  \"Ǻ\": \"Ǻ\",\n  \"Ḃ\": \"Ḃ\",\n  \"Ć\": \"Ć\",\n  \"Ḉ\": \"Ḉ\",\n  \"Č\": \"Č\",\n  \"Ĉ\": \"Ĉ\",\n  \"Ċ\": \"Ċ\",\n  \"Ç\": \"Ç\",\n  \"Ď\": \"Ď\",\n  \"Ḋ\": \"Ḋ\",\n  \"Ḑ\": \"Ḑ\",\n  \"É\": \"É\",\n  \"È\": \"È\",\n  \"Ë\": \"Ë\",\n  \"Ẽ\": \"Ẽ\",\n  \"Ē\": \"Ē\",\n  \"Ḗ\": \"Ḗ\",\n  \"Ḕ\": \"Ḕ\",\n  \"Ĕ\": \"Ĕ\",\n  \"Ḝ\": \"Ḝ\",\n  \"Ě\": \"Ě\",\n  \"Ê\": \"Ê\",\n  \"Ế\": \"Ế\",\n  \"Ề\": \"Ề\",\n  \"Ễ\": \"Ễ\",\n  \"Ė\": \"Ė\",\n  \"Ȩ\": \"Ȩ\",\n  \"Ḟ\": \"Ḟ\",\n  \"Ǵ\": \"Ǵ\",\n  \"Ḡ\": \"Ḡ\",\n  \"Ğ\": \"Ğ\",\n  \"Ǧ\": \"Ǧ\",\n  \"Ĝ\": \"Ĝ\",\n  \"Ġ\": \"Ġ\",\n  \"Ģ\": \"Ģ\",\n  \"Ḧ\": \"Ḧ\",\n  \"Ȟ\": \"Ȟ\",\n  \"Ĥ\": \"Ĥ\",\n  \"Ḣ\": \"Ḣ\",\n  \"Ḩ\": \"Ḩ\",\n  \"Í\": \"Í\",\n  \"Ì\": \"Ì\",\n  \"Ï\": \"Ï\",\n  \"Ḯ\": \"Ḯ\",\n  \"Ĩ\": \"Ĩ\",\n  \"Ī\": \"Ī\",\n  \"Ĭ\": \"Ĭ\",\n  \"Ǐ\": \"Ǐ\",\n  \"Î\": \"Î\",\n  \"İ\": \"İ\",\n  \"Ĵ\": \"Ĵ\",\n  \"Ḱ\": \"Ḱ\",\n  \"Ǩ\": \"Ǩ\",\n  \"Ķ\": \"Ķ\",\n  \"Ĺ\": \"Ĺ\",\n  \"Ľ\": \"Ľ\",\n  \"Ļ\": \"Ļ\",\n  \"Ḿ\": \"Ḿ\",\n  \"Ṁ\": \"Ṁ\",\n  \"Ń\": \"Ń\",\n  \"Ǹ\": \"Ǹ\",\n  \"Ñ\": \"Ñ\",\n  \"Ň\": \"Ň\",\n  \"Ṅ\": \"Ṅ\",\n  \"Ņ\": \"Ņ\",\n  \"Ó\": \"Ó\",\n  \"Ò\": \"Ò\",\n  \"Ö\": \"Ö\",\n  \"Ȫ\": \"Ȫ\",\n  \"Õ\": \"Õ\",\n  \"Ṍ\": \"Ṍ\",\n  \"Ṏ\": \"Ṏ\",\n  \"Ȭ\": \"Ȭ\",\n  \"Ō\": \"Ō\",\n  \"Ṓ\": \"Ṓ\",\n  \"Ṑ\": \"Ṑ\",\n  \"Ŏ\": \"Ŏ\",\n  \"Ǒ\": \"Ǒ\",\n  \"Ô\": \"Ô\",\n  \"Ố\": \"Ố\",\n  \"Ồ\": \"Ồ\",\n  \"Ỗ\": \"Ỗ\",\n  \"Ȯ\": \"Ȯ\",\n  \"Ȱ\": \"Ȱ\",\n  \"Ő\": \"Ő\",\n  \"Ṕ\": \"Ṕ\",\n  \"Ṗ\": \"Ṗ\",\n  \"Ŕ\": \"Ŕ\",\n  \"Ř\": \"Ř\",\n  \"Ṙ\": \"Ṙ\",\n  \"Ŗ\": \"Ŗ\",\n  \"Ś\": \"Ś\",\n  \"Ṥ\": \"Ṥ\",\n  \"Š\": \"Š\",\n  \"Ṧ\": \"Ṧ\",\n  \"Ŝ\": \"Ŝ\",\n  \"Ṡ\": \"Ṡ\",\n  \"Ş\": \"Ş\",\n  \"Ť\": \"Ť\",\n  \"Ṫ\": \"Ṫ\",\n  \"Ţ\": \"Ţ\",\n  \"Ú\": \"Ú\",\n  \"Ù\": \"Ù\",\n  \"Ü\": \"Ü\",\n  \"Ǘ\": \"Ǘ\",\n  \"Ǜ\": \"Ǜ\",\n  \"Ǖ\": \"Ǖ\",\n  \"Ǚ\": \"Ǚ\",\n  \"Ũ\": \"Ũ\",\n  \"Ṹ\": \"Ṹ\",\n  \"Ū\": \"Ū\",\n  \"Ṻ\": \"Ṻ\",\n  \"Ŭ\": \"Ŭ\",\n  \"Ǔ\": \"Ǔ\",\n  \"Û\": \"Û\",\n  \"Ů\": \"Ů\",\n  \"Ű\": \"Ű\",\n  \"Ṽ\": \"Ṽ\",\n  \"Ẃ\": \"Ẃ\",\n  \"Ẁ\": \"Ẁ\",\n  \"Ẅ\": \"Ẅ\",\n  \"Ŵ\": \"Ŵ\",\n  \"Ẇ\": \"Ẇ\",\n  \"Ẍ\": \"Ẍ\",\n  \"Ẋ\": \"Ẋ\",\n  \"Ý\": \"Ý\",\n  \"Ỳ\": \"Ỳ\",\n  \"Ÿ\": \"Ÿ\",\n  \"Ỹ\": \"Ỹ\",\n  \"Ȳ\": \"Ȳ\",\n  \"Ŷ\": \"Ŷ\",\n  \"Ẏ\": \"Ẏ\",\n  \"Ź\": \"Ź\",\n  \"Ž\": \"Ž\",\n  \"Ẑ\": \"Ẑ\",\n  \"Ż\": \"Ż\",\n  \"ά\": \"ά\",\n  \"ὰ\": \"ὰ\",\n  \"ᾱ\": \"ᾱ\",\n  \"ᾰ\": \"ᾰ\",\n  \"έ\": \"έ\",\n  \"ὲ\": \"ὲ\",\n  \"ή\": \"ή\",\n  \"ὴ\": \"ὴ\",\n  \"ί\": \"ί\",\n  \"ὶ\": \"ὶ\",\n  \"ϊ\": \"ϊ\",\n  \"ΐ\": \"ΐ\",\n  \"ῒ\": \"ῒ\",\n  \"ῑ\": \"ῑ\",\n  \"ῐ\": \"ῐ\",\n  \"ό\": \"ό\",\n  \"ὸ\": \"ὸ\",\n  \"ύ\": \"ύ\",\n  \"ὺ\": \"ὺ\",\n  \"ϋ\": \"ϋ\",\n  \"ΰ\": \"ΰ\",\n  \"ῢ\": \"ῢ\",\n  \"ῡ\": \"ῡ\",\n  \"ῠ\": \"ῠ\",\n  \"ώ\": \"ώ\",\n  \"ὼ\": \"ὼ\",\n  \"Ύ\": \"Ύ\",\n  \"Ὺ\": \"Ὺ\",\n  \"Ϋ\": \"Ϋ\",\n  \"Ῡ\": \"Ῡ\",\n  \"Ῠ\": \"Ῠ\",\n  \"Ώ\": \"Ώ\",\n  \"Ὼ\": \"Ὼ\"\n};\n\n/**\n * This file contains the parser used to parse out a TeX expression from the\n * input. Since TeX isn't context-free, standard parsers don't work particularly\n * well.\n *\n * The strategy of this parser is as such:\n *\n * The main functions (the `.parse...` ones) take a position in the current\n * parse string to parse tokens from. The lexer (found in Lexer.js, stored at\n * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When\n * individual tokens are needed at a position, the lexer is called to pull out a\n * token, which is then used.\n *\n * The parser has a property called \"mode\" indicating the mode that\n * the parser is currently in. Currently it has to be one of \"math\" or\n * \"text\", which denotes whether the current environment is a math-y\n * one or a text-y one (e.g. inside \\text). Currently, this serves to\n * limit the functions which can be used in text mode.\n *\n * The main functions then return an object which contains the useful data that\n * was parsed at its given point, and a new position at the end of the parsed\n * data. The main functions can call each other and continue the parsing by\n * using the returned position as a new starting point.\n *\n * There are also extra `.handle...` functions, which pull out some reused\n * functionality into self-contained functions.\n *\n * The functions return ParseNodes.\n */\nclass Parser {\n  constructor(input, settings) {\n    this.mode = void 0;\n    this.gullet = void 0;\n    this.settings = void 0;\n    this.leftrightDepth = void 0;\n    this.nextToken = void 0;\n    // Start in math mode\n    this.mode = \"math\"; // Create a new macro expander (gullet) and (indirectly via that) also a\n    // new lexer (mouth) for this parser (stomach, in the language of TeX)\n\n    this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing\n\n    this.settings = settings; // Count leftright depth (for \\middle errors)\n\n    this.leftrightDepth = 0;\n  }\n  /**\n   * Checks a result to make sure it has the right type, and throws an\n   * appropriate error otherwise.\n   */\n\n\n  expect(text, consume) {\n    if (consume === void 0) {\n      consume = true;\n    }\n\n    if (this.fetch().text !== text) {\n      throw new ParseError(\"Expected '\" + text + \"', got '\" + this.fetch().text + \"'\", this.fetch());\n    }\n\n    if (consume) {\n      this.consume();\n    }\n  }\n  /**\n   * Discards the current lookahead token, considering it consumed.\n   */\n\n\n  consume() {\n    this.nextToken = null;\n  }\n  /**\n   * Return the current lookahead token, or if there isn't one (at the\n   * beginning, or if the previous lookahead token was consume()d),\n   * fetch the next token as the new lookahead token and return it.\n   */\n\n\n  fetch() {\n    if (this.nextToken == null) {\n      this.nextToken = this.gullet.expandNextToken();\n    }\n\n    return this.nextToken;\n  }\n  /**\n   * Switches between \"text\" and \"math\" modes.\n   */\n\n\n  switchMode(newMode) {\n    this.mode = newMode;\n    this.gullet.switchMode(newMode);\n  }\n  /**\n   * Main parsing function, which parses an entire input.\n   */\n\n\n  parse() {\n    if (!this.settings.globalGroup) {\n      // Create a group namespace for the math expression.\n      // (LaTeX creates a new group for every $...$, $$...$$, \\[...\\].)\n      this.gullet.beginGroup();\n    } // Use old \\color behavior (same as LaTeX's \\textcolor) if requested.\n    // We do this within the group for the math expression, so it doesn't\n    // pollute settings.macros.\n\n\n    if (this.settings.colorIsTextColor) {\n      this.gullet.macros.set(\"\\\\color\", \"\\\\textcolor\");\n    }\n\n    try {\n      // Try to parse the input\n      var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end\n\n      this.expect(\"EOF\"); // End the group namespace for the expression\n\n      if (!this.settings.globalGroup) {\n        this.gullet.endGroup();\n      }\n\n      return parse; // Close any leftover groups in case of a parse error.\n    } finally {\n      this.gullet.endGroups();\n    }\n  }\n  /**\n   * Fully parse a separate sequence of tokens as a separate job.\n   * Tokens should be specified in reverse order, as in a MacroDefinition.\n   */\n\n\n  subparse(tokens) {\n    // Save the next token from the current job.\n    var oldToken = this.nextToken;\n    this.consume(); // Run the new job, terminating it with an excess '}'\n\n    this.gullet.pushToken(new Token(\"}\"));\n    this.gullet.pushTokens(tokens);\n    var parse = this.parseExpression(false);\n    this.expect(\"}\"); // Restore the next token from the current job.\n\n    this.nextToken = oldToken;\n    return parse;\n  }\n\n  /**\n   * Parses an \"expression\", which is a list of atoms.\n   *\n   * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This\n   *                 happens when functions have higher precedence han infix\n   *                 nodes in implicit parses.\n   *\n   * `breakOnTokenText`: The text of the token that the expression should end\n   *                     with, or `null` if something else should end the\n   *                     expression.\n   */\n  parseExpression(breakOnInfix, breakOnTokenText) {\n    var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either\n    // we reached the end, a }, or a \\right)\n\n    while (true) {\n      // Ignore spaces in math mode\n      if (this.mode === \"math\") {\n        this.consumeSpaces();\n      }\n\n      var lex = this.fetch();\n\n      if (Parser.endOfExpression.indexOf(lex.text) !== -1) {\n        break;\n      }\n\n      if (breakOnTokenText && lex.text === breakOnTokenText) {\n        break;\n      }\n\n      if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) {\n        break;\n      }\n\n      var atom = this.parseAtom(breakOnTokenText);\n\n      if (!atom) {\n        break;\n      } else if (atom.type === \"internal\") {\n        // Internal nodes do not appear in parse tree\n        continue;\n      }\n\n      body.push(atom);\n    }\n\n    if (this.mode === \"text\") {\n      this.formLigatures(body);\n    }\n\n    return this.handleInfixNodes(body);\n  }\n  /**\n   * Rewrites infix operators such as \\over with corresponding commands such\n   * as \\frac.\n   *\n   * There can only be one infix operator per group.  If there's more than one\n   * then the expression is ambiguous.  This can be resolved by adding {}.\n   */\n\n\n  handleInfixNodes(body) {\n    var overIndex = -1;\n    var funcName;\n\n    for (var i = 0; i < body.length; i++) {\n      if (body[i].type === \"infix\") {\n        if (overIndex !== -1) {\n          throw new ParseError(\"only one infix operator per group\", body[i].token);\n        }\n\n        overIndex = i;\n        funcName = body[i].replaceWith;\n      }\n    }\n\n    if (overIndex !== -1 && funcName) {\n      var numerNode;\n      var denomNode;\n      var numerBody = body.slice(0, overIndex);\n      var denomBody = body.slice(overIndex + 1);\n\n      if (numerBody.length === 1 && numerBody[0].type === \"ordgroup\") {\n        numerNode = numerBody[0];\n      } else {\n        numerNode = {\n          type: \"ordgroup\",\n          mode: this.mode,\n          body: numerBody\n        };\n      }\n\n      if (denomBody.length === 1 && denomBody[0].type === \"ordgroup\") {\n        denomNode = denomBody[0];\n      } else {\n        denomNode = {\n          type: \"ordgroup\",\n          mode: this.mode,\n          body: denomBody\n        };\n      }\n\n      var node;\n\n      if (funcName === \"\\\\\\\\abovefrac\") {\n        node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);\n      } else {\n        node = this.callFunction(funcName, [numerNode, denomNode], []);\n      }\n\n      return [node];\n    } else {\n      return body;\n    }\n  }\n  /**\n   * Handle a subscript or superscript with nice errors.\n   */\n\n\n  handleSupSubscript(name // For error reporting.\n  ) {\n    var symbolToken = this.fetch();\n    var symbol = symbolToken.text;\n    this.consume();\n    this.consumeSpaces(); // ignore spaces before sup/subscript argument\n    // Skip over allowed internal nodes such as \\relax\n\n    var group;\n\n    do {\n      var _group;\n\n      group = this.parseGroup(name);\n    } while (((_group = group) == null ? void 0 : _group.type) === \"internal\");\n\n    if (!group) {\n      throw new ParseError(\"Expected group after '\" + symbol + \"'\", symbolToken);\n    }\n\n    return group;\n  }\n  /**\n   * Converts the textual input of an unsupported command into a text node\n   * contained within a color node whose color is determined by errorColor\n   */\n\n\n  formatUnsupportedCmd(text) {\n    var textordArray = [];\n\n    for (var i = 0; i < text.length; i++) {\n      textordArray.push({\n        type: \"textord\",\n        mode: \"text\",\n        text: text[i]\n      });\n    }\n\n    var textNode = {\n      type: \"text\",\n      mode: this.mode,\n      body: textordArray\n    };\n    var colorNode = {\n      type: \"color\",\n      mode: this.mode,\n      color: this.settings.errorColor,\n      body: [textNode]\n    };\n    return colorNode;\n  }\n  /**\n   * Parses a group with optional super/subscripts.\n   */\n\n\n  parseAtom(breakOnTokenText) {\n    // The body of an atom is an implicit group, so that things like\n    // \\left(x\\right)^2 work correctly.\n    var base = this.parseGroup(\"atom\", breakOnTokenText); // Internal nodes (e.g. \\relax) cannot support super/subscripts.\n    // Instead we will pick up super/subscripts with blank base next round.\n\n    if ((base == null ? void 0 : base.type) === \"internal\") {\n      return base;\n    } // In text mode, we don't have superscripts or subscripts\n\n\n    if (this.mode === \"text\") {\n      return base;\n    } // Note that base may be empty (i.e. null) at this point.\n\n\n    var superscript;\n    var subscript;\n\n    while (true) {\n      // Guaranteed in math mode, so eat any spaces first.\n      this.consumeSpaces(); // Lex the first token\n\n      var lex = this.fetch();\n\n      if (lex.text === \"\\\\limits\" || lex.text === \"\\\\nolimits\") {\n        // We got a limit control\n        if (base && base.type === \"op\") {\n          var limits = lex.text === \"\\\\limits\";\n          base.limits = limits;\n          base.alwaysHandleSupSub = true;\n        } else if (base && base.type === \"operatorname\") {\n          if (base.alwaysHandleSupSub) {\n            base.limits = lex.text === \"\\\\limits\";\n          }\n        } else {\n          throw new ParseError(\"Limit controls must follow a math operator\", lex);\n        }\n\n        this.consume();\n      } else if (lex.text === \"^\") {\n        // We got a superscript start\n        if (superscript) {\n          throw new ParseError(\"Double superscript\", lex);\n        }\n\n        superscript = this.handleSupSubscript(\"superscript\");\n      } else if (lex.text === \"_\") {\n        // We got a subscript start\n        if (subscript) {\n          throw new ParseError(\"Double subscript\", lex);\n        }\n\n        subscript = this.handleSupSubscript(\"subscript\");\n      } else if (lex.text === \"'\") {\n        // We got a prime\n        if (superscript) {\n          throw new ParseError(\"Double superscript\", lex);\n        }\n\n        var prime = {\n          type: \"textord\",\n          mode: this.mode,\n          text: \"\\\\prime\"\n        }; // Many primes can be grouped together, so we handle this here\n\n        var primes = [prime];\n        this.consume(); // Keep lexing tokens until we get something that's not a prime\n\n        while (this.fetch().text === \"'\") {\n          // For each one, add another prime to the list\n          primes.push(prime);\n          this.consume();\n        } // If there's a superscript following the primes, combine that\n        // superscript in with the primes.\n\n\n        if (this.fetch().text === \"^\") {\n          primes.push(this.handleSupSubscript(\"superscript\"));\n        } // Put everything into an ordgroup as the superscript\n\n\n        superscript = {\n          type: \"ordgroup\",\n          mode: this.mode,\n          body: primes\n        };\n      } else if (uSubsAndSups[lex.text]) {\n        // A Unicode subscript or superscript character.\n        // We treat these similarly to the unicode-math package.\n        // So we render a string of Unicode (sub|super)scripts the\n        // same as a (sub|super)script of regular characters.\n        var isSub = unicodeSubRegEx.test(lex.text);\n        var subsupTokens = [];\n        subsupTokens.push(new Token(uSubsAndSups[lex.text]));\n        this.consume(); // Continue fetching tokens to fill out the string.\n\n        while (true) {\n          var token = this.fetch().text;\n\n          if (!uSubsAndSups[token]) {\n            break;\n          }\n\n          if (unicodeSubRegEx.test(token) !== isSub) {\n            break;\n          }\n\n          subsupTokens.unshift(new Token(uSubsAndSups[token]));\n          this.consume();\n        } // Now create a (sub|super)script.\n\n\n        var body = this.subparse(subsupTokens);\n\n        if (isSub) {\n          subscript = {\n            type: \"ordgroup\",\n            mode: \"math\",\n            body\n          };\n        } else {\n          superscript = {\n            type: \"ordgroup\",\n            mode: \"math\",\n            body\n          };\n        }\n      } else {\n        // If it wasn't ^, _, or ', stop parsing super/subscripts\n        break;\n      }\n    } // Base must be set if superscript or subscript are set per logic above,\n    // but need to check here for type check to pass.\n\n\n    if (superscript || subscript) {\n      // If we got either a superscript or subscript, create a supsub\n      return {\n        type: \"supsub\",\n        mode: this.mode,\n        base: base,\n        sup: superscript,\n        sub: subscript\n      };\n    } else {\n      // Otherwise return the original body\n      return base;\n    }\n  }\n  /**\n   * Parses an entire function, including its base and all of its arguments.\n   */\n\n\n  parseFunction(breakOnTokenText, name // For determining its context\n  ) {\n    var token = this.fetch();\n    var func = token.text;\n    var funcData = functions[func];\n\n    if (!funcData) {\n      return null;\n    }\n\n    this.consume(); // consume command token\n\n    if (name && name !== \"atom\" && !funcData.allowedInArgument) {\n      throw new ParseError(\"Got function '\" + func + \"' with no arguments\" + (name ? \" as \" + name : \"\"), token);\n    } else if (this.mode === \"text\" && !funcData.allowedInText) {\n      throw new ParseError(\"Can't use function '\" + func + \"' in text mode\", token);\n    } else if (this.mode === \"math\" && funcData.allowedInMath === false) {\n      throw new ParseError(\"Can't use function '\" + func + \"' in math mode\", token);\n    }\n\n    var {\n      args,\n      optArgs\n    } = this.parseArguments(func, funcData);\n    return this.callFunction(func, args, optArgs, token, breakOnTokenText);\n  }\n  /**\n   * Call a function handler with a suitable context and arguments.\n   */\n\n\n  callFunction(name, args, optArgs, token, breakOnTokenText) {\n    var context = {\n      funcName: name,\n      parser: this,\n      token,\n      breakOnTokenText\n    };\n    var func = functions[name];\n\n    if (func && func.handler) {\n      return func.handler(context, args, optArgs);\n    } else {\n      throw new ParseError(\"No function handler for \" + name);\n    }\n  }\n  /**\n   * Parses the arguments of a function or environment\n   */\n\n\n  parseArguments(func, // Should look like \"\\name\" or \"\\begin{name}\".\n  funcData) {\n    var totalArgs = funcData.numArgs + funcData.numOptionalArgs;\n\n    if (totalArgs === 0) {\n      return {\n        args: [],\n        optArgs: []\n      };\n    }\n\n    var args = [];\n    var optArgs = [];\n\n    for (var i = 0; i < totalArgs; i++) {\n      var argType = funcData.argTypes && funcData.argTypes[i];\n      var isOptional = i < funcData.numOptionalArgs;\n\n      if (funcData.primitive && argType == null || // \\sqrt expands into primitive if optional argument doesn't exist\n      funcData.type === \"sqrt\" && i === 1 && optArgs[0] == null) {\n        argType = \"primitive\";\n      }\n\n      var arg = this.parseGroupOfType(\"argument to '\" + func + \"'\", argType, isOptional);\n\n      if (isOptional) {\n        optArgs.push(arg);\n      } else if (arg != null) {\n        args.push(arg);\n      } else {\n        // should be unreachable\n        throw new ParseError(\"Null argument, please report this as a bug\");\n      }\n    }\n\n    return {\n      args,\n      optArgs\n    };\n  }\n  /**\n   * Parses a group when the mode is changing.\n   */\n\n\n  parseGroupOfType(name, type, optional) {\n    switch (type) {\n      case \"color\":\n        return this.parseColorGroup(optional);\n\n      case \"size\":\n        return this.parseSizeGroup(optional);\n\n      case \"url\":\n        return this.parseUrlGroup(optional);\n\n      case \"math\":\n      case \"text\":\n        return this.parseArgumentGroup(optional, type);\n\n      case \"hbox\":\n        {\n          // hbox argument type wraps the argument in the equivalent of\n          // \\hbox, which is like \\text but switching to \\textstyle size.\n          var group = this.parseArgumentGroup(optional, \"text\");\n          return group != null ? {\n            type: \"styling\",\n            mode: group.mode,\n            body: [group],\n            style: \"text\" // simulate \\textstyle\n\n          } : null;\n        }\n\n      case \"raw\":\n        {\n          var token = this.parseStringGroup(\"raw\", optional);\n          return token != null ? {\n            type: \"raw\",\n            mode: \"text\",\n            string: token.text\n          } : null;\n        }\n\n      case \"primitive\":\n        {\n          if (optional) {\n            throw new ParseError(\"A primitive argument cannot be optional\");\n          }\n\n          var _group2 = this.parseGroup(name);\n\n          if (_group2 == null) {\n            throw new ParseError(\"Expected group as \" + name, this.fetch());\n          }\n\n          return _group2;\n        }\n\n      case \"original\":\n      case null:\n      case undefined:\n        return this.parseArgumentGroup(optional);\n\n      default:\n        throw new ParseError(\"Unknown group type as \" + name, this.fetch());\n    }\n  }\n  /**\n   * Discard any space tokens, fetching the next non-space token.\n   */\n\n\n  consumeSpaces() {\n    while (this.fetch().text === \" \") {\n      this.consume();\n    }\n  }\n  /**\n   * Parses a group, essentially returning the string formed by the\n   * brace-enclosed tokens plus some position information.\n   */\n\n\n  parseStringGroup(modeName, // Used to describe the mode in error messages.\n  optional) {\n    var argToken = this.gullet.scanArgument(optional);\n\n    if (argToken == null) {\n      return null;\n    }\n\n    var str = \"\";\n    var nextToken;\n\n    while ((nextToken = this.fetch()).text !== \"EOF\") {\n      str += nextToken.text;\n      this.consume();\n    }\n\n    this.consume(); // consume the end of the argument\n\n    argToken.text = str;\n    return argToken;\n  }\n  /**\n   * Parses a regex-delimited group: the largest sequence of tokens\n   * whose concatenated strings match `regex`. Returns the string\n   * formed by the tokens plus some position information.\n   */\n\n\n  parseRegexGroup(regex, modeName // Used to describe the mode in error messages.\n  ) {\n    var firstToken = this.fetch();\n    var lastToken = firstToken;\n    var str = \"\";\n    var nextToken;\n\n    while ((nextToken = this.fetch()).text !== \"EOF\" && regex.test(str + nextToken.text)) {\n      lastToken = nextToken;\n      str += lastToken.text;\n      this.consume();\n    }\n\n    if (str === \"\") {\n      throw new ParseError(\"Invalid \" + modeName + \": '\" + firstToken.text + \"'\", firstToken);\n    }\n\n    return firstToken.range(lastToken, str);\n  }\n  /**\n   * Parses a color description.\n   */\n\n\n  parseColorGroup(optional) {\n    var res = this.parseStringGroup(\"color\", optional);\n\n    if (res == null) {\n      return null;\n    }\n\n    var match = /^(#[a-f0-9]{3,4}|#[a-f0-9]{6}|#[a-f0-9]{8}|[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);\n\n    if (!match) {\n      throw new ParseError(\"Invalid color: '\" + res.text + \"'\", res);\n    }\n\n    var color = match[0];\n\n    if (/^[0-9a-f]{6}$/i.test(color)) {\n      // We allow a 6-digit HTML color spec without a leading \"#\".\n      // This follows the xcolor package's HTML color model.\n      // Predefined color names are all missed by this RegEx pattern.\n      color = \"#\" + color;\n    }\n\n    return {\n      type: \"color-token\",\n      mode: this.mode,\n      color\n    };\n  }\n  /**\n   * Parses a size specification, consisting of magnitude and unit.\n   */\n\n\n  parseSizeGroup(optional) {\n    var res;\n    var isBlank = false; // don't expand before parseStringGroup\n\n    this.gullet.consumeSpaces();\n\n    if (!optional && this.gullet.future().text !== \"{\") {\n      res = this.parseRegexGroup(/^[-+]? *(?:$|\\d+|\\d+\\.\\d*|\\.\\d*) *[a-z]{0,2} *$/, \"size\");\n    } else {\n      res = this.parseStringGroup(\"size\", optional);\n    }\n\n    if (!res) {\n      return null;\n    }\n\n    if (!optional && res.text.length === 0) {\n      // Because we've tested for what is !optional, this block won't\n      // affect \\kern, \\hspace, etc. It will capture the mandatory arguments\n      // to \\genfrac and \\above.\n      res.text = \"0pt\"; // Enable \\above{}\n\n      isBlank = true; // This is here specifically for \\genfrac\n    }\n\n    var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(res.text);\n\n    if (!match) {\n      throw new ParseError(\"Invalid size: '\" + res.text + \"'\", res);\n    }\n\n    var data = {\n      number: +(match[1] + match[2]),\n      // sign + magnitude, cast to number\n      unit: match[3]\n    };\n\n    if (!validUnit(data)) {\n      throw new ParseError(\"Invalid unit: '\" + data.unit + \"'\", res);\n    }\n\n    return {\n      type: \"size\",\n      mode: this.mode,\n      value: data,\n      isBlank\n    };\n  }\n  /**\n   * Parses an URL, checking escaped letters and allowed protocols,\n   * and setting the catcode of % as an active character (as in \\hyperref).\n   */\n\n\n  parseUrlGroup(optional) {\n    this.gullet.lexer.setCatcode(\"%\", 13); // active character\n\n    this.gullet.lexer.setCatcode(\"~\", 12); // other character\n\n    var res = this.parseStringGroup(\"url\", optional);\n    this.gullet.lexer.setCatcode(\"%\", 14); // comment character\n\n    this.gullet.lexer.setCatcode(\"~\", 13); // active character\n\n    if (res == null) {\n      return null;\n    } // hyperref package allows backslashes alone in href, but doesn't\n    // generate valid links in such cases; we interpret this as\n    // \"undefined\" behaviour, and keep them as-is. Some browser will\n    // replace backslashes with forward slashes.\n\n\n    var url = res.text.replace(/\\\\([#$%&~_^{}])/g, '$1');\n    return {\n      type: \"url\",\n      mode: this.mode,\n      url\n    };\n  }\n  /**\n   * Parses an argument with the mode specified.\n   */\n\n\n  parseArgumentGroup(optional, mode) {\n    var argToken = this.gullet.scanArgument(optional);\n\n    if (argToken == null) {\n      return null;\n    }\n\n    var outerMode = this.mode;\n\n    if (mode) {\n      // Switch to specified mode\n      this.switchMode(mode);\n    }\n\n    this.gullet.beginGroup();\n    var expression = this.parseExpression(false, \"EOF\"); // TODO: find an alternative way to denote the end\n\n    this.expect(\"EOF\"); // expect the end of the argument\n\n    this.gullet.endGroup();\n    var result = {\n      type: \"ordgroup\",\n      mode: this.mode,\n      loc: argToken.loc,\n      body: expression\n    };\n\n    if (mode) {\n      // Switch mode back\n      this.switchMode(outerMode);\n    }\n\n    return result;\n  }\n  /**\n   * Parses an ordinary group, which is either a single nucleus (like \"x\")\n   * or an expression in braces (like \"{x+y}\") or an implicit group, a group\n   * that starts at the current position, and ends right before a higher explicit\n   * group ends, or at EOF.\n   */\n\n\n  parseGroup(name, // For error reporting.\n  breakOnTokenText) {\n    var firstToken = this.fetch();\n    var text = firstToken.text;\n    var result; // Try to parse an open brace or \\begingroup\n\n    if (text === \"{\" || text === \"\\\\begingroup\") {\n      this.consume();\n      var groupEnd = text === \"{\" ? \"}\" : \"\\\\endgroup\";\n      this.gullet.beginGroup(); // If we get a brace, parse an expression\n\n      var expression = this.parseExpression(false, groupEnd);\n      var lastToken = this.fetch();\n      this.expect(groupEnd); // Check that we got a matching closing brace\n\n      this.gullet.endGroup();\n      result = {\n        type: \"ordgroup\",\n        mode: this.mode,\n        loc: SourceLocation.range(firstToken, lastToken),\n        body: expression,\n        // A group formed by \\begingroup...\\endgroup is a semi-simple group\n        // which doesn't affect spacing in math mode, i.e., is transparent.\n        // https://tex.stackexchange.com/questions/1930/when-should-one-\n        // use-begingroup-instead-of-bgroup\n        semisimple: text === \"\\\\begingroup\" || undefined\n      };\n    } else {\n      // If there exists a function with this name, parse the function.\n      // Otherwise, just return a nucleus\n      result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol();\n\n      if (result == null && text[0] === \"\\\\\" && !implicitCommands.hasOwnProperty(text)) {\n        if (this.settings.throwOnError) {\n          throw new ParseError(\"Undefined control sequence: \" + text, firstToken);\n        }\n\n        result = this.formatUnsupportedCmd(text);\n        this.consume();\n      }\n    }\n\n    return result;\n  }\n  /**\n   * Form ligature-like combinations of characters for text mode.\n   * This includes inputs like \"--\", \"---\", \"``\" and \"''\".\n   * The result will simply replace multiple textord nodes with a single\n   * character in each value by a single textord node having multiple\n   * characters in its value.  The representation is still ASCII source.\n   * The group will be modified in place.\n   */\n\n\n  formLigatures(group) {\n    var n = group.length - 1;\n\n    for (var i = 0; i < n; ++i) {\n      var a = group[i]; // $FlowFixMe: Not every node type has a `text` property.\n\n      var v = a.text;\n\n      if (v === \"-\" && group[i + 1].text === \"-\") {\n        if (i + 1 < n && group[i + 2].text === \"-\") {\n          group.splice(i, 3, {\n            type: \"textord\",\n            mode: \"text\",\n            loc: SourceLocation.range(a, group[i + 2]),\n            text: \"---\"\n          });\n          n -= 2;\n        } else {\n          group.splice(i, 2, {\n            type: \"textord\",\n            mode: \"text\",\n            loc: SourceLocation.range(a, group[i + 1]),\n            text: \"--\"\n          });\n          n -= 1;\n        }\n      }\n\n      if ((v === \"'\" || v === \"`\") && group[i + 1].text === v) {\n        group.splice(i, 2, {\n          type: \"textord\",\n          mode: \"text\",\n          loc: SourceLocation.range(a, group[i + 1]),\n          text: v + v\n        });\n        n -= 1;\n      }\n    }\n  }\n  /**\n   * Parse a single symbol out of the string. Here, we handle single character\n   * symbols and special functions like \\verb.\n   */\n\n\n  parseSymbol() {\n    var nucleus = this.fetch();\n    var text = nucleus.text;\n\n    if (/^\\\\verb[^a-zA-Z]/.test(text)) {\n      this.consume();\n      var arg = text.slice(5);\n      var star = arg.charAt(0) === \"*\";\n\n      if (star) {\n        arg = arg.slice(1);\n      } // Lexer's tokenRegex is constructed to always have matching\n      // first/last characters.\n\n\n      if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {\n        throw new ParseError(\"\\\\verb assertion failed --\\n                    please report what input caused this bug\");\n      }\n\n      arg = arg.slice(1, -1); // remove first and last char\n\n      return {\n        type: \"verb\",\n        mode: \"text\",\n        body: arg,\n        star\n      };\n    } // At this point, we should have a symbol, possibly with accents.\n    // First expand any accented base symbol according to unicodeSymbols.\n\n\n    if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) {\n      // This behavior is not strict (XeTeX-compatible) in math mode.\n      if (this.settings.strict && this.mode === \"math\") {\n        this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Accented Unicode text character \\\"\" + text[0] + \"\\\" used in \" + \"math mode\", nucleus);\n      }\n\n      text = unicodeSymbols[text[0]] + text.slice(1);\n    } // Strip off any combining characters\n\n\n    var match = combiningDiacriticalMarksEndRegex.exec(text);\n\n    if (match) {\n      text = text.substring(0, match.index);\n\n      if (text === 'i') {\n        text = '\\u0131'; // dotless i, in math and text mode\n      } else if (text === 'j') {\n        text = '\\u0237'; // dotless j, in math and text mode\n      }\n    } // Recognize base symbol\n\n\n    var symbol;\n\n    if (symbols[this.mode][text]) {\n      if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) {\n        this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Latin-1/Unicode text character \\\"\" + text[0] + \"\\\" used in \" + \"math mode\", nucleus);\n      }\n\n      var group = symbols[this.mode][text].group;\n      var loc = SourceLocation.range(nucleus);\n      var s;\n\n      if (ATOMS.hasOwnProperty(group)) {\n        // $FlowFixMe\n        var family = group;\n        s = {\n          type: \"atom\",\n          mode: this.mode,\n          family,\n          loc,\n          text\n        };\n      } else {\n        // $FlowFixMe\n        s = {\n          type: group,\n          mode: this.mode,\n          loc,\n          text\n        };\n      } // $FlowFixMe\n\n\n      symbol = s;\n    } else if (text.charCodeAt(0) >= 0x80) {\n      // no symbol for e.g. ^\n      if (this.settings.strict) {\n        if (!supportedCodepoint(text.charCodeAt(0))) {\n          this.settings.reportNonstrict(\"unknownSymbol\", \"Unrecognized Unicode character \\\"\" + text[0] + \"\\\"\" + (\" (\" + text.charCodeAt(0) + \")\"), nucleus);\n        } else if (this.mode === \"math\") {\n          this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Unicode text character \\\"\" + text[0] + \"\\\" used in math mode\", nucleus);\n        }\n      } // All nonmathematical Unicode characters are rendered as if they\n      // are in text mode (wrapped in \\text) because that's what it\n      // takes to render them in LaTeX.  Setting `mode: this.mode` is\n      // another natural choice (the user requested math mode), but\n      // this makes it more difficult for getCharacterMetrics() to\n      // distinguish Unicode characters without metrics and those for\n      // which we want to simulate the letter M.\n\n\n      symbol = {\n        type: \"textord\",\n        mode: \"text\",\n        loc: SourceLocation.range(nucleus),\n        text\n      };\n    } else {\n      return null; // EOF, ^, _, {, }, etc.\n    }\n\n    this.consume(); // Transform combining characters into accents\n\n    if (match) {\n      for (var i = 0; i < match[0].length; i++) {\n        var accent = match[0][i];\n\n        if (!unicodeAccents[accent]) {\n          throw new ParseError(\"Unknown accent ' \" + accent + \"'\", nucleus);\n        }\n\n        var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text;\n\n        if (!command) {\n          throw new ParseError(\"Accent \" + accent + \" unsupported in \" + this.mode + \" mode\", nucleus);\n        }\n\n        symbol = {\n          type: \"accent\",\n          mode: this.mode,\n          loc: SourceLocation.range(nucleus),\n          label: command,\n          isStretchy: false,\n          isShifty: true,\n          // $FlowFixMe\n          base: symbol\n        };\n      }\n    } // $FlowFixMe\n\n\n    return symbol;\n  }\n\n}\nParser.endOfExpression = [\"}\", \"\\\\endgroup\", \"\\\\end\", \"\\\\right\", \"&\"];\n\n/**\n * Provides a single function for parsing an expression using a Parser\n * TODO(emily): Remove this\n */\n\n/**\n * Parses an expression using a Parser, then returns the parsed result.\n */\nvar parseTree = function parseTree(toParse, settings) {\n  if (!(typeof toParse === 'string' || toParse instanceof String)) {\n    throw new TypeError('KaTeX can only parse string typed expression');\n  }\n\n  var parser = new Parser(toParse, settings); // Blank out any \\df@tag to avoid spurious \"Duplicate \\tag\" errors\n\n  delete parser.gullet.macros.current[\"\\\\df@tag\"];\n  var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render().\n\n  delete parser.gullet.macros.current[\"\\\\current@color\"];\n  delete parser.gullet.macros.current[\"\\\\color\"]; // If the input used \\tag, it will set the \\df@tag macro to the tag.\n  // In this case, we separately parse the tag and wrap the tree.\n\n  if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n    if (!settings.displayMode) {\n      throw new ParseError(\"\\\\tag works only in display equations\");\n    }\n\n    tree = [{\n      type: \"tag\",\n      mode: \"text\",\n      body: tree,\n      tag: parser.subparse([new Token(\"\\\\df@tag\")])\n    }];\n  }\n\n  return tree;\n};\n\n/* eslint no-console:0 */\n\n/**\n * Parse and build an expression, and place that expression in the DOM node\n * given.\n */\nvar render = function render(expression, baseNode, options) {\n  baseNode.textContent = \"\";\n  var node = renderToDomTree(expression, options).toNode();\n  baseNode.appendChild(node);\n}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and\n// disable rendering.\n\n\nif (typeof document !== \"undefined\") {\n  if (document.compatMode !== \"CSS1Compat\") {\n    typeof console !== \"undefined\" && console.warn(\"Warning: KaTeX doesn't work in quirks mode. Make sure your \" + \"website has a suitable doctype.\");\n\n    render = function render() {\n      throw new ParseError(\"KaTeX doesn't work in quirks mode.\");\n    };\n  }\n}\n/**\n * Parse and build an expression, and return the markup for that.\n */\n\n\nvar renderToString = function renderToString(expression, options) {\n  var markup = renderToDomTree(expression, options).toMarkup();\n  return markup;\n};\n/**\n * Parse an expression and return the parse tree.\n */\n\n\nvar generateParseTree = function generateParseTree(expression, options) {\n  var settings = new Settings(options);\n  return parseTree(expression, settings);\n};\n/**\n * If the given error is a KaTeX ParseError and options.throwOnError is false,\n * renders the invalid LaTeX as a span with hover title giving the KaTeX\n * error message.  Otherwise, simply throws the error.\n */\n\n\nvar renderError = function renderError(error, expression, options) {\n  if (options.throwOnError || !(error instanceof ParseError)) {\n    throw error;\n  }\n\n  var node = buildCommon.makeSpan([\"katex-error\"], [new SymbolNode(expression)]);\n  node.setAttribute(\"title\", error.toString());\n  node.setAttribute(\"style\", \"color:\" + options.errorColor);\n  return node;\n};\n/**\n * Generates and returns the katex build tree. This is used for advanced\n * use cases (like rendering to custom output).\n */\n\n\nvar renderToDomTree = function renderToDomTree(expression, options) {\n  var settings = new Settings(options);\n\n  try {\n    var tree = parseTree(expression, settings);\n    return buildTree(tree, expression, settings);\n  } catch (error) {\n    return renderError(error, expression, settings);\n  }\n};\n/**\n * Generates and returns the katex build tree, with just HTML (no MathML).\n * This is used for advanced use cases (like rendering to custom output).\n */\n\n\nvar renderToHTMLTree = function renderToHTMLTree(expression, options) {\n  var settings = new Settings(options);\n\n  try {\n    var tree = parseTree(expression, settings);\n    return buildHTMLTree(tree, expression, settings);\n  } catch (error) {\n    return renderError(error, expression, settings);\n  }\n};\n\nvar version = \"0.16.25\";\nvar __domTree = {\n  Span,\n  Anchor,\n  SymbolNode,\n  SvgNode,\n  PathNode,\n  LineNode\n}; // ESM exports\n\nvar katex = {\n  /**\n   * Current KaTeX version\n   */\n  version,\n\n  /**\n   * Renders the given LaTeX into an HTML+MathML combination, and adds\n   * it as a child to the specified DOM node.\n   */\n  render,\n\n  /**\n   * Renders the given LaTeX into an HTML+MathML combination string,\n   * for sending to the client.\n   */\n  renderToString,\n\n  /**\n   * KaTeX error, usually during parsing.\n   */\n  ParseError,\n\n  /**\n   * The schema of Settings\n   */\n  SETTINGS_SCHEMA,\n\n  /**\n   * Parses the given LaTeX into KaTeX's internal parse tree structure,\n   * without rendering to HTML or MathML.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */\n  __parse: generateParseTree,\n\n  /**\n   * Renders the given LaTeX into an HTML+MathML internal DOM tree\n   * representation, without flattening that representation to a string.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */\n  __renderToDomTree: renderToDomTree,\n\n  /**\n   * Renders the given LaTeX into an HTML internal DOM tree representation,\n   * without MathML and without flattening that representation to a string.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */\n  __renderToHTMLTree: renderToHTMLTree,\n\n  /**\n   * extends internal font metrics object with a new object\n   * each key in the new object represents a font name\n  */\n  __setFontMetrics: setFontMetrics,\n\n  /**\n   * adds a new symbol to builtin symbols table\n   */\n  __defineSymbol: defineSymbol,\n\n  /**\n   * adds a new function to builtin function list,\n   * which directly produce parse tree elements\n   * and have their own html/mathml builders\n   */\n  __defineFunction: defineFunction,\n\n  /**\n   * adds a new macro to builtin macro list\n   */\n  __defineMacro: defineMacro,\n\n  /**\n   * Expose the dom tree node types, which can be useful for type checking nodes.\n   *\n   * NOTE: These methods are not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */\n  __domTree\n};\n\nexport { ParseError, SETTINGS_SCHEMA, defineFunction as __defineFunction, defineMacro as __defineMacro, defineSymbol as __defineSymbol, __domTree, generateParseTree as __parse, renderToDomTree as __renderToDomTree, renderToHTMLTree as __renderToHTMLTree, setFontMetrics as __setFontMetrics, katex as default, render, renderToString, version };\n","<script>\r\n    import Dropdown from './DropDownComponent.svelte';\r\n    import ExerciseBankSidebar from './ExerciseBankSidebar.svelte';\r\n    import { onMount, onDestroy } from 'svelte';\r\n    import { MathfieldElement } from 'mathlive';\r\n    import katex from 'katex';\r\n    import { push } from 'svelte-spa-router';\r\n    import { subjectOptions, usesMathEditor } from './subjectCatalog.js';\r\n\r\n    // Sidebar navigation\r\n    let activePage = 'ikelti';\r\n\r\n    function handlePageChange(pageId) {\r\n        if (pageId === 'ikelti') {\r\n            // Already on upload page, do nothing or refresh\r\n            return;\r\n        } else {\r\n            // Navigate to other pages\r\n            if (pageId === 'pradzia') {\r\n                push('/exercise-bank');\r\n            } else if (pageId === 'uzduociu-bankas') {\r\n                push('/exercise-bank/bank');\r\n            } else {\r\n                activePage = pageId;\r\n            }\r\n        }\r\n    }\r\n\r\n    // Source form data\r\n    let sourceType = '';\r\n    let sourceName = '';\r\n    let sourceDetails = {\r\n        // For textbooks\r\n        chapter: '',\r\n        page_number: '',\r\n        // For exams\r\n        year: '',\r\n        semester: '',\r\n        institution: '',\r\n        // For custom/other\r\n        notes: ''\r\n    };\r\n\r\n    // Source type options\r\n    const sourceTypeOptions = [\r\n        ['exam', 'Exam'],\r\n        ['textbook', 'Textbook'],\r\n        ['custom', 'Custom'],\r\n        ['worksheet', 'Worksheet'],\r\n        ['other', 'Other']\r\n    ];\r\n\r\n    // Computed property to determine which detail fields to show\r\n    $: showTextbookFields = sourceType === 'textbook';\r\n    $: showExamFields = sourceType === 'exam';\r\n    $: showCustomFields = sourceType === 'custom' || sourceType === 'other' || sourceType === 'worksheet';\r\n\r\n    // Reset details when source type changes\r\n    $: if (sourceType) {\r\n        // Clear all details when type changes\r\n        sourceDetails = {\r\n            chapter: '',\r\n            page_number: '',\r\n            year: '',\r\n            semester: '',\r\n            institution: '',\r\n            notes: ''\r\n        };\r\n    }\r\n\r\n    // Exercise form data\r\n    let questionType = '';\r\n    let subject = '';\r\n    let grade = '';\r\n    let questionText = '';\r\n    let difficulty = '';\r\n    let topicsInput = ''; // Comma-separated string input\r\n    let reviewed = false;\r\n    \r\n    // Type-specific metadata\r\n    let exerciseMetadata = {};\r\n    \r\n    // For Multiple Choice Questions\r\n    let mcqOptions = [{ text: '', is_correct: false }];\r\n    let allowMultiple = false;\r\n    let mcqMarks = '';\r\n    \r\n    // For Fill-in-the-Blank\r\n    let fillBlankAnswers = [''];\r\n    let fillBlankMarks = [''];\r\n    \r\n    // For Matching\r\n    let matchingPairs = [{ left: '', right: '' }];\r\n    \r\n    // For Free Form / True False\r\n    let correctAnswer = '';\r\n    let marks = '';\r\n    let hints = '';\r\n    let trueFalseAnswer = ''; // Will be 'true' or 'false' as string\r\n    \r\n    // Exercise Images\r\n    let exerciseImages = []; // Array of { file: File, caption: '', preview: '' }\r\n    \r\n    // Question type options\r\n    const questionTypeOptions = [\r\n        ['free_form', 'Free Form'],\r\n        ['mcq', 'Multiple Choice Question'],\r\n        ['fill_blank', 'Fill in the Blank'],\r\n        ['true_false', 'True/False'],\r\n        ['matching', 'Matching'],\r\n        ['other', 'Other']\r\n    ];\r\n    \r\n    // Difficulty options\r\n    const difficultyOptions = [\r\n        ['easy', 'Easy'],\r\n        ['medium', 'Medium'],\r\n        ['hard', 'Hard']\r\n    ];\r\n    \r\n    // Grade options\r\n    const gradeOptions = [\r\n        ['1', '1'],\r\n        ['2', '2'],\r\n        ['3', '3'],\r\n        ['4', '4'],\r\n        ['5', '5'],\r\n        ['6', '6'],\r\n        ['7', '7'],\r\n        ['8', '8'],\r\n        ['9', '9'],\r\n        ['10', '10'],\r\n        ['11', '11'],\r\n        ['12', '12'],\r\n        ['university', 'University Level']\r\n    ];\r\n    \r\n    // Computed properties for type-specific fields\r\n    $: showFreeFormFields = questionType === 'free_form';\r\n    $: showMcqFields = questionType === 'mcq';\r\n    $: showFillBlankFields = questionType === 'fill_blank';\r\n    $: showMatchingFields = questionType === 'matching';\r\n    $: showTrueFalseFields = questionType === 'true_false';\r\n    \r\n    // Computed property to determine if MathLive should be used\r\n    $: useMathEditor = subject && usesMathEditor(subject);\r\n    \r\n    // MathLive slide-in panel state\r\n    let showMathPanel = false;\r\n    let mathPanelValue = '';\r\n    let questionTextareaRef;\r\n    let mathPanelFieldElement;\r\n    let cursorPosition = 0;\r\n    let keyboardOpened = false; // Track if keyboard has been opened\r\n    let keyboardObserver = null; // MutationObserver for keyboard\r\n    \r\n    // Initialize MathLive when component mounts\r\n    onMount(() => {\r\n        // Register the custom element if not already registered\r\n        if (!customElements.get('math-field')) {\r\n            customElements.define('math-field', MathfieldElement);\r\n        }\r\n    });\r\n    \r\n    // Function to open math panel and store cursor position\r\n    function openMathPanel() {\r\n        if (questionTextareaRef) {\r\n            // Use selectionStart (start of selection) or cursor position\r\n            cursorPosition = questionTextareaRef.selectionStart !== undefined \r\n                ? questionTextareaRef.selectionStart \r\n                : questionText.length;\r\n        } else {\r\n            cursorPosition = questionText.length;\r\n        }\r\n        mathPanelValue = '';\r\n        keyboardOpened = false; // Reset flag\r\n        showMathPanel = true;\r\n        // Set up observer to watch for keyboard\r\n        setupKeyboardObserver();\r\n    }\r\n    \r\n    // Function to close math panel\r\n    function closeMathPanel() {\r\n        // Close keyboard if open\r\n        if (mathPanelFieldElement) {\r\n            try {\r\n                mathPanelFieldElement.executeCommand('toggleVirtualKeyboard');\r\n            } catch (e) {\r\n                // Keyboard might already be closed, ignore error\r\n            }\r\n        }\r\n        keyboardOpened = false; // Reset flag\r\n        showMathPanel = false;\r\n        mathPanelValue = '';\r\n        // Disconnect observer\r\n        if (keyboardObserver) {\r\n            keyboardObserver.disconnect();\r\n            keyboardObserver = null;\r\n        }\r\n    }\r\n    \r\n    \r\n    // Function to insert math into textarea at cursor position\r\n    function insertMathIntoTextarea() {\r\n        if (!mathPanelFieldElement) return;\r\n        \r\n        const latexValue = mathPanelFieldElement.getValue();\r\n        if (!latexValue.trim()) {\r\n            closeMathPanel();\r\n            return;\r\n        }\r\n        \r\n        // Wrap in $ delimiters and add spaces\r\n        const mathToInsert = ` $${latexValue}$ `;\r\n        \r\n        if (questionTextareaRef) {\r\n            const text = questionText;\r\n            const before = text.substring(0, cursorPosition);\r\n            const after = text.substring(cursorPosition);\r\n            questionText = before + mathToInsert + after;\r\n            \r\n            // Set cursor position after inserted math\r\n            setTimeout(() => {\r\n                if (questionTextareaRef) {\r\n                    const newPosition = cursorPosition + mathToInsert.length;\r\n                    questionTextareaRef.setSelectionRange(newPosition, newPosition);\r\n                    questionTextareaRef.focus();\r\n                }\r\n            }, 0);\r\n        } else {\r\n            // Fallback: append to end\r\n            questionText = questionText + mathToInsert;\r\n        }\r\n        \r\n        closeMathPanel();\r\n    }\r\n    \r\n    // Function to open keyboard in panel\r\n    function openKeyboardInPanel() {\r\n        if (!keyboardOpened && mathPanelFieldElement && showMathPanel) {\r\n            keyboardOpened = true;\r\n            // Wait for panel animation and element to be ready\r\n            setTimeout(() => {\r\n                if (mathPanelFieldElement && showMathPanel) {\r\n                    mathPanelFieldElement.focus();\r\n                    // Open keyboard after focus\r\n                    setTimeout(() => {\r\n                        try {\r\n                            mathPanelFieldElement.executeCommand('toggleVirtualKeyboard');\r\n                            // Force keyboard z-index after it opens\r\n                            setTimeout(() => {\r\n                                forceKeyboardZIndex();\r\n                            }, 200);\r\n                        } catch (e) {\r\n                            console.log('Keyboard toggle error:', e);\r\n                        }\r\n                    }, 100);\r\n                }\r\n            }, 350);\r\n        }\r\n    }\r\n    \r\n    // Function to force keyboard z-index to be above modal\r\n    function forceKeyboardZIndex() {\r\n        // Try multiple selectors to find the keyboard\r\n        const selectors = [\r\n            'math-virtual-keyboard',\r\n            '[data-mathlive-virtual-keyboard]',\r\n            '.ML__keyboard',\r\n            'math-field math-virtual-keyboard'\r\n        ];\r\n        \r\n        selectors.forEach(selector => {\r\n            const keyboards = document.querySelectorAll(selector);\r\n            keyboards.forEach(keyboard => {\r\n                if (keyboard instanceof HTMLElement) {\r\n                    keyboard.style.zIndex = '2147483647';\r\n                    keyboard.style.position = 'fixed';\r\n                    keyboard.style.bottom = '0';\r\n                    keyboard.style.left = '0';\r\n                    keyboard.style.right = '0';\r\n                }\r\n            });\r\n        });\r\n        \r\n        // Also check shadow DOMs\r\n        const mathFields = document.querySelectorAll('math-field');\r\n        mathFields.forEach(field => {\r\n            if (field.shadowRoot) {\r\n                const shadowKeyboard = field.shadowRoot.querySelector('math-virtual-keyboard, .ML__keyboard');\r\n                if (shadowKeyboard) {\r\n                    shadowKeyboard.style.zIndex = '2147483647';\r\n                }\r\n            }\r\n        });\r\n    }\r\n    \r\n    // Set up MutationObserver to watch for keyboard appearance\r\n    function setupKeyboardObserver() {\r\n        if (keyboardObserver) {\r\n            keyboardObserver.disconnect();\r\n        }\r\n        \r\n        keyboardObserver = new MutationObserver(() => {\r\n            if (showMathPanel) {\r\n                forceKeyboardZIndex();\r\n            }\r\n        });\r\n        \r\n        // Observe body for keyboard additions\r\n        keyboardObserver.observe(document.body, {\r\n            childList: true,\r\n            subtree: true\r\n        });\r\n    }\r\n    \r\n    // Function to handle math panel field mount\r\n    function handleMathPanelFieldMount(element) {\r\n        if (element) {\r\n            mathPanelFieldElement = element;\r\n            if (mathPanelValue) {\r\n                element.setValue(mathPanelValue);\r\n            }\r\n            // When field is mounted and panel is open, open keyboard\r\n            if (showMathPanel) {\r\n                openKeyboardInPanel();\r\n            }\r\n        }\r\n    }\r\n    \r\n    // Reactive statement to open keyboard when panel becomes visible and element exists\r\n    $: if (showMathPanel && mathPanelFieldElement && !keyboardOpened) {\r\n        openKeyboardInPanel();\r\n    }\r\n    \r\n    // Function to render LaTeX math in preview\r\n    function renderMathPreview(text) {\r\n        if (!text) return [{ type: 'text', content: '' }];\r\n        \r\n        // Replace $...$ with rendered math\r\n        const mathRegex = /\\$([^$]+)\\$/g;\r\n        const parts = [];\r\n        let lastIndex = 0;\r\n        let match;\r\n        \r\n        while ((match = mathRegex.exec(text)) !== null) {\r\n            // Add text before math\r\n            if (match.index > lastIndex) {\r\n                const textBefore = text.substring(lastIndex, match.index);\r\n                if (textBefore) {\r\n                    parts.push({ type: 'text', content: textBefore });\r\n                }\r\n            }\r\n            \r\n            // Add rendered math\r\n            try {\r\n                const rendered = katex.renderToString(match[1], {\r\n                    throwOnError: false,\r\n                    displayMode: false\r\n                });\r\n                parts.push({ type: 'math', content: rendered });\r\n            } catch (e) {\r\n                // If rendering fails, show original\r\n                parts.push({ type: 'text', content: match[0] });\r\n            }\r\n            \r\n            lastIndex = match.index + match[0].length;\r\n        }\r\n        \r\n        // Add remaining text\r\n        if (lastIndex < text.length) {\r\n            const remainingText = text.substring(lastIndex);\r\n            if (remainingText) {\r\n                parts.push({ type: 'text', content: remainingText });\r\n            }\r\n        }\r\n        \r\n        return parts.length > 0 ? parts : [{ type: 'text', content: text }];\r\n    }\r\n    \r\n    // Reactive preview content\r\n    $: previewParts = renderMathPreview(questionText);\r\n    \r\n    // Reset metadata when question type changes\r\n    $: if (questionType) {\r\n        // Clear all metadata when type changes\r\n        exerciseMetadata = {};\r\n        mcqOptions = [{ text: '', is_correct: false }];\r\n        allowMultiple = false;\r\n        mcqMarks = '';\r\n        fillBlankAnswers = [''];\r\n        fillBlankMarks = [''];\r\n        matchingPairs = [{ left: '', right: '' }];\r\n        correctAnswer = '';\r\n        marks = '';\r\n        hints = '';\r\n        trueFalseAnswer = '';\r\n    }\r\n    \r\n    // MCQ Functions\r\n    function addMcqOption() {\r\n        mcqOptions = [...mcqOptions, { text: '', is_correct: false }];\r\n    }\r\n    \r\n    function removeMcqOption(index) {\r\n        mcqOptions = mcqOptions.filter((_, i) => i !== index);\r\n    }\r\n    \r\n    function toggleMcqCorrect(index) {\r\n        if (!allowMultiple) {\r\n            // If single choice, uncheck all others\r\n            mcqOptions = mcqOptions.map((opt, i) => ({\r\n                ...opt,\r\n                is_correct: i === index ? !opt.is_correct : false\r\n            }));\r\n        } else {\r\n            // If multiple choice, toggle this one\r\n            mcqOptions[index].is_correct = !mcqOptions[index].is_correct;\r\n            mcqOptions = [...mcqOptions]; // Trigger reactivity\r\n        }\r\n    }\r\n    \r\n    // Fill-in-the-Blank Functions\r\n    function addFillBlank() {\r\n        fillBlankAnswers = [...fillBlankAnswers, ''];\r\n        fillBlankMarks = [...fillBlankMarks, ''];\r\n    }\r\n    \r\n    function removeFillBlank(index) {\r\n        fillBlankAnswers = fillBlankAnswers.filter((_, i) => i !== index);\r\n        fillBlankMarks = fillBlankMarks.filter((_, i) => i !== index);\r\n    }\r\n    \r\n    // Matching Functions\r\n    function addMatchingPair() {\r\n        matchingPairs = [...matchingPairs, { left: '', right: '' }];\r\n    }\r\n    \r\n    function removeMatchingPair(index) {\r\n        matchingPairs = matchingPairs.filter((_, i) => i !== index);\r\n    }\r\n    \r\n    // Image Functions\r\n    function handleImageUpload(event) {\r\n        const files = Array.from(event.target.files);\r\n        files.forEach(file => {\r\n            if (file.type.startsWith('image/')) {\r\n                const reader = new FileReader();\r\n                reader.onload = (e) => {\r\n                    exerciseImages = [...exerciseImages, {\r\n                        file: file,\r\n                        caption: '',\r\n                        preview: e.target.result\r\n                    }];\r\n                };\r\n                reader.readAsDataURL(file);\r\n            }\r\n        });\r\n        // Reset input to allow selecting the same file again\r\n        event.target.value = '';\r\n    }\r\n    \r\n    function removeImage(index) {\r\n        exerciseImages = exerciseImages.filter((_, i) => i !== index);\r\n    }\r\n    \r\n    // Submit state\r\n    let isSubmitting = false;\r\n    let submitError = '';\r\n    let submitSuccess = '';\r\n    \r\n    // Submit handler function\r\n    async function handleSubmit() {\r\n        // Reset messages\r\n        submitError = '';\r\n        submitSuccess = '';\r\n        \r\n        // Basic validation\r\n        if (!sourceType || !sourceName) {\r\n            submitError = 'Please fill in all required source fields';\r\n            return;\r\n        }\r\n        \r\n        if (!questionType || !subject || !grade || !questionText || !difficulty || !topicsInput) {\r\n            submitError = 'Please fill in all required exercise fields';\r\n            return;\r\n        }\r\n        \r\n        // Validate type-specific fields\r\n        if (questionType === 'mcq' && (!mcqOptions || mcqOptions.length === 0 || mcqOptions.some(opt => !opt.text))) {\r\n            submitError = 'Please add at least one MCQ option with text';\r\n            return;\r\n        }\r\n        \r\n        if (questionType === 'fill_blank' && (!fillBlankAnswers || fillBlankAnswers.length === 0 || fillBlankAnswers.some(a => !a))) {\r\n            submitError = 'Please add at least one fill-in-the-blank answer';\r\n            return;\r\n        }\r\n        \r\n        if (questionType === 'matching' && (!matchingPairs || matchingPairs.length === 0 || matchingPairs.some(p => !p.left || !p.right))) {\r\n            submitError = 'Please add at least one matching pair with both left and right items';\r\n            return;\r\n        }\r\n        \r\n        if (questionType === 'true_false' && !trueFalseAnswer) {\r\n            submitError = 'Please select True or False';\r\n            return;\r\n        }\r\n        \r\n        isSubmitting = true;\r\n        \r\n        try {\r\n            // Structure metadata based on question type\r\n            let metadata = {};\r\n            \r\n            if (questionType === 'free_form') {\r\n                metadata = {\r\n                    correct_answer: correctAnswer,\r\n                    marks: marks,\r\n                    hints: hints\r\n                };\r\n            } else if (questionType === 'mcq') {\r\n                metadata = {\r\n                    allow_multiple: allowMultiple,\r\n                    marks: mcqMarks,\r\n                    options: mcqOptions.map(opt => ({\r\n                        text: opt.text,\r\n                        is_correct: opt.is_correct\r\n                    }))\r\n                };\r\n            } else if (questionType === 'fill_blank') {\r\n                metadata = {\r\n                    answers: fillBlankAnswers,\r\n                    marks: fillBlankMarks\r\n                };\r\n            } else if (questionType === 'matching') {\r\n                metadata = {\r\n                    pairs: matchingPairs.map(pair => ({\r\n                        left: pair.left,\r\n                        right: pair.right\r\n                    }))\r\n                };\r\n            } else if (questionType === 'true_false') {\r\n                metadata = {\r\n                    answer: trueFalseAnswer === 'true'\r\n                };\r\n            }\r\n            \r\n            // Convert topics from comma-separated string to array\r\n            const topics = topicsInput\r\n                .split(',')\r\n                .map(t => t.trim())\r\n                .filter(t => t.length > 0);\r\n            \r\n            // Prepare image metadata\r\n            const imageMetadata = exerciseImages.map(img => ({\r\n                filename: img.file.name,\r\n                size: img.file.size,\r\n                caption: img.caption || ''\r\n            }));\r\n            \r\n            // Prepare data structure\r\n            const submitData = {\r\n                source: {\r\n                    type: sourceType,\r\n                    name: sourceName,\r\n                    details: {\r\n                        chapter: sourceDetails.chapter || '',\r\n                        page_number: sourceDetails.page_number || '',\r\n                        year: sourceDetails.year || '',\r\n                        semester: sourceDetails.semester || '',\r\n                        institution: sourceDetails.institution || '',\r\n                        notes: sourceDetails.notes || ''\r\n                    }\r\n                },\r\n                exercise: {\r\n                    question_type: questionType,\r\n                    subject: subject,\r\n                    grade: grade,\r\n                    question_text: questionText,\r\n                    difficulty: difficulty,\r\n                    topics: topics,\r\n                    reviewed: reviewed,\r\n                    metadata: metadata\r\n                },\r\n                images: imageMetadata\r\n            };\r\n            \r\n            // Get JWT token\r\n            const token = localStorage.getItem('jwtToken');\r\n            \r\n            if (!token) {\r\n                submitError = 'Authentication required. Please log in.';\r\n                isSubmitting = false;\r\n                return;\r\n            }\r\n            \r\n            // Send POST request\r\n            const response = await fetch('/studentplayground/api/exercise/submit-debug/', {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Authorization': `Bearer ${token}`,\r\n                    'Content-Type': 'application/json'\r\n                },\r\n                body: JSON.stringify(submitData)\r\n            });\r\n            \r\n            const data = await response.json();\r\n            \r\n            if (!response.ok) {\r\n                throw new Error(data.error || data.message || 'Failed to submit exercise');\r\n            }\r\n            \r\n            submitSuccess = 'Exercise submitted successfully! Check the Django console for received data.';\r\n            \r\n        } catch (error) {\r\n            submitError = `Error submitting exercise: ${error.message}`;\r\n            console.error('Submit error:', error);\r\n        } finally {\r\n            isSubmitting = false;\r\n        }\r\n    }\r\n</script>\r\n\r\n<div class=\"app-container\">\r\n    <!-- Sidebar -->\r\n    <ExerciseBankSidebar {activePage} onPageChange={handlePageChange} />\r\n\r\n    <!-- Main Content -->\r\n    <main class=\"main-content\">\r\n        <div class=\"upload-exercise-container\">\r\n            <div class=\"form-section\">\r\n        <h2 class=\"section-title\">A. Source Information</h2>\r\n        <p class=\"section-description\">Provide information about the source of the exercise.</p>\r\n\r\n        <!-- Source Type Dropdown -->\r\n        <Dropdown \r\n            label=\"Source Type *\"\r\n            options={sourceTypeOptions}\r\n            bind:selectedValue={sourceType}\r\n        />\r\n\r\n        <!-- Source Name Input (only shown when source type is selected) -->\r\n        {#if sourceType}\r\n            <div class=\"form-field\">\r\n                <label for=\"source-name\">Source Name *</label>\r\n                <input\r\n                    id=\"source-name\"\r\n                    type=\"text\"\r\n                    bind:value={sourceName}\r\n                    placeholder=\"e.g., 'Physics 2023 Final' or 'Campbell Biology 12th Ed.'\"\r\n                    class=\"form-input\"\r\n                />\r\n            </div>\r\n        {/if}\r\n\r\n        <!-- Dynamic Source Details Fields -->\r\n        {#if sourceType}\r\n            <div class=\"details-section\">\r\n                <h3 class=\"details-title\">Source Details</h3>\r\n\r\n                <!-- Textbook Fields -->\r\n                {#if showTextbookFields}\r\n                    <div class=\"form-field\">\r\n                        <label for=\"chapter\">Chapter</label>\r\n                        <input\r\n                            id=\"chapter\"\r\n                            type=\"text\"\r\n                            bind:value={sourceDetails.chapter}\r\n                            placeholder=\"e.g., 'Chapter 5' or '5'\"\r\n                            class=\"form-input\"\r\n                        />\r\n                    </div>\r\n                    <div class=\"form-field\">\r\n                        <label for=\"page-number\">Page Number</label>\r\n                        <input\r\n                            id=\"page-number\"\r\n                            type=\"text\"\r\n                            bind:value={sourceDetails.page_number}\r\n                            placeholder=\"e.g., '123' or '123-125'\"\r\n                            class=\"form-input\"\r\n                        />\r\n                    </div>\r\n                {/if}\r\n\r\n                <!-- Exam Fields -->\r\n                {#if showExamFields}\r\n                    <div class=\"form-field\">\r\n                        <label for=\"year\">Year</label>\r\n                        <input\r\n                            id=\"year\"\r\n                            type=\"text\"\r\n                            bind:value={sourceDetails.year}\r\n                            placeholder=\"e.g., '2023'\"\r\n                            class=\"form-input\"\r\n                        />\r\n                    </div>\r\n                    <div class=\"form-field\">\r\n                        <label for=\"semester\">Semester</label>\r\n                        <input\r\n                            id=\"semester\"\r\n                            type=\"text\"\r\n                            bind:value={sourceDetails.semester}\r\n                            placeholder=\"e.g., 'Fall', 'Spring', '1st Semester'\"\r\n                            class=\"form-input\"\r\n                        />\r\n                    </div>\r\n                    <div class=\"form-field\">\r\n                        <label for=\"institution\">Institution</label>\r\n                        <input\r\n                            id=\"institution\"\r\n                            type=\"text\"\r\n                            bind:value={sourceDetails.institution}\r\n                            placeholder=\"e.g., 'Vilnius University', 'VGTU'\"\r\n                            class=\"form-input\"\r\n                        />\r\n                    </div>\r\n                {/if}\r\n\r\n                <!-- Custom/Other/Worksheet Fields -->\r\n                {#if showCustomFields}\r\n                    <div class=\"form-field\">\r\n                        <label for=\"notes\">Additional Notes (Optional)</label>\r\n                        <textarea\r\n                            id=\"notes\"\r\n                            bind:value={sourceDetails.notes}\r\n                            placeholder=\"Any additional information about this source...\"\r\n                            class=\"form-textarea\"\r\n                            rows=\"3\"\r\n                        ></textarea>\r\n                    </div>\r\n                {/if}\r\n            </div>\r\n        {/if}\r\n    </div>\r\n\r\n    <!-- Exercise Section -->\r\n    <div class=\"form-section\">\r\n        <h2 class=\"section-title\">B. Exercise Information</h2>\r\n        <p class=\"section-description\">Provide details about the exercise question.</p>\r\n\r\n        <!-- Question Type Dropdown -->\r\n        <Dropdown \r\n            label=\"Question Type *\"\r\n            options={questionTypeOptions}\r\n            bind:selectedValue={questionType}\r\n        />\r\n\r\n        <!-- Subject Dropdown -->\r\n        <Dropdown \r\n            label=\"Subject *\"\r\n            options={subjectOptions}\r\n            bind:selectedValue={subject}\r\n        />\r\n\r\n        <!-- Grade Dropdown -->\r\n        <Dropdown \r\n            label=\"Grade *\"\r\n            options={gradeOptions}\r\n            bind:selectedValue={grade}\r\n        />\r\n\r\n        <!-- Question Text -->\r\n        {#if questionType}\r\n            <div class=\"form-field\">\r\n                <label for=\"question-text\">Question Text *</label>\r\n                \r\n                {#if useMathEditor}\r\n                    <!-- Insert Math Button -->\r\n                    <button \r\n                        type=\"button\" \r\n                        class=\"insert-math-button\"\r\n                        on:click={openMathPanel}\r\n                    >\r\n                        <span class=\"button-icon\">∫</span>\r\n                        <span class=\"button-text\">Insert Math Equation</span>\r\n                    </button>\r\n                {/if}\r\n                \r\n                <!-- Regular Textarea -->\r\n                <textarea\r\n                    id=\"question-text\"\r\n                    bind:this={questionTextareaRef}\r\n                    bind:value={questionText}\r\n                    placeholder=\"Enter the question prompt...\"\r\n                    class=\"form-textarea\"\r\n                    rows=\"6\"\r\n                    on:click={(e) => cursorPosition = e.target.selectionStart}\r\n                    on:keyup={(e) => cursorPosition = e.target.selectionStart}\r\n                ></textarea>\r\n                \r\n                <!-- Preview Section -->\r\n                {#if useMathEditor && questionText}\r\n                    <div class=\"preview-section\">\r\n                        <div class=\"preview-label\">Preview:</div>\r\n                        <div class=\"preview-content\" id=\"question-preview\">\r\n                            {#each previewParts as part}\r\n                                {#if part.type === 'math'}\r\n                                    <span class=\"math-preview\">{@html part.content}</span>\r\n                                {:else}\r\n                                    <span>{part.content}</span>\r\n                                {/if}\r\n                            {/each}\r\n                        </div>\r\n                    </div>\r\n                {/if}\r\n            </div>\r\n\r\n            <!-- Difficulty -->\r\n            <Dropdown \r\n                label=\"Difficulty *\"\r\n                options={difficultyOptions}\r\n                bind:selectedValue={difficulty}\r\n            />\r\n\r\n            <!-- Topics -->\r\n            <div class=\"form-field\">\r\n                <label for=\"topics\">Topics *</label>\r\n                <input\r\n                    id=\"topics\"\r\n                    type=\"text\"\r\n                    bind:value={topicsInput}\r\n                    placeholder=\"Enter topics separated by commas (e.g., 'Physics, Mechanics, Newton')\"\r\n                    class=\"form-input\"\r\n                />\r\n                <small class=\"field-hint\">Separate multiple topics with commas</small>\r\n            </div>\r\n\r\n            <!-- Reviewed Checkbox -->\r\n            <div class=\"form-field checkbox-field\">\r\n                <label class=\"checkbox-label\">\r\n                    <input\r\n                        type=\"checkbox\"\r\n                        bind:checked={reviewed}\r\n                    />\r\n                    <span>Mark as reviewed</span>\r\n                </label>\r\n            </div>\r\n\r\n            <!-- Type-Specific Fields -->\r\n            <div class=\"type-specific-section\">\r\n                <h3 class=\"details-title\">Type-Specific Details</h3>\r\n\r\n                <!-- Free Form Fields -->\r\n                {#if showFreeFormFields}\r\n                    <div class=\"form-field\">\r\n                        <label for=\"correct-answer\">Correct Answer</label>\r\n                        <textarea\r\n                            id=\"correct-answer\"\r\n                            bind:value={correctAnswer}\r\n                            placeholder=\"Enter the expected answer...\"\r\n                            class=\"form-textarea\"\r\n                            rows=\"3\"\r\n                        ></textarea>\r\n                    </div>\r\n                    <div class=\"form-field\">\r\n                        <label for=\"marks\">Marks (Optional)</label>\r\n                        <input\r\n                            id=\"marks\"\r\n                            type=\"text\"\r\n                            bind:value={marks}\r\n                            placeholder=\"e.g., '5'\"\r\n                            class=\"form-input\"\r\n                        />\r\n                    </div>\r\n                    <div class=\"form-field\">\r\n                        <label for=\"hints\">Hints (Optional)</label>\r\n                        <textarea\r\n                            id=\"hints\"\r\n                            bind:value={hints}\r\n                            placeholder=\"Enter hints for students...\"\r\n                            class=\"form-textarea\"\r\n                            rows=\"2\"\r\n                        ></textarea>\r\n                    </div>\r\n                {/if}\r\n\r\n                <!-- Multiple Choice Fields -->\r\n                {#if showMcqFields}\r\n                    <div class=\"form-field checkbox-field\">\r\n                        <label class=\"checkbox-label\">\r\n                            <input\r\n                                type=\"checkbox\"\r\n                                bind:checked={allowMultiple}\r\n                            />\r\n                            <span>Allow multiple correct answers</span>\r\n                        </label>\r\n                    </div>\r\n                    <div class=\"form-field\">\r\n                        <label for=\"mcq-marks\">Total Marks (Optional)</label>\r\n                        <input\r\n                            id=\"mcq-marks\"\r\n                            type=\"text\"\r\n                            bind:value={mcqMarks}\r\n                            placeholder=\"e.g., '4'\"\r\n                            class=\"form-input\"\r\n                        />\r\n                    </div>\r\n                    <div class=\"options-section\">\r\n                        <div class=\"options-header\">\r\n                            <span class=\"section-label\">Options *</span>\r\n                            <button type=\"button\" class=\"add-button\" on:click={addMcqOption}>+ Add Option</button>\r\n                        </div>\r\n                        {#each mcqOptions as option, index}\r\n                            <div class=\"option-item\">\r\n                                <input\r\n                                    type=\"text\"\r\n                                    bind:value={option.text}\r\n                                    placeholder={`Option ${index + 1}`}\r\n                                    class=\"form-input option-input\"\r\n                                />\r\n                                <button\r\n                                    type=\"button\"\r\n                                    class=\"correct-button {option.is_correct ? 'active' : ''}\"\r\n                                    on:click={() => toggleMcqCorrect(index)}\r\n                                >\r\n                                    {option.is_correct ? '✓ Correct' : 'Mark Correct'}\r\n                                </button>\r\n                                {#if mcqOptions.length > 1}\r\n                                    <button\r\n                                        type=\"button\"\r\n                                        class=\"remove-button\"\r\n                                        on:click={() => removeMcqOption(index)}\r\n                                    >\r\n                                        Remove\r\n                                    </button>\r\n                                {/if}\r\n                            </div>\r\n                        {/each}\r\n                    </div>\r\n                {/if}\r\n\r\n                <!-- Fill-in-the-Blank Fields -->\r\n                {#if showFillBlankFields}\r\n                    <div class=\"options-section\">\r\n                        <div class=\"options-header\">\r\n                            <span class=\"section-label\">Blanks *</span>\r\n                            <button type=\"button\" class=\"add-button\" on:click={addFillBlank}>+ Add Blank</button>\r\n                        </div>\r\n                        {#each fillBlankAnswers as answer, index}\r\n                            <div class=\"blank-item\">\r\n                                <div class=\"form-field\">\r\n                                    <label for=\"blank-answer-{index}\">Blank {index + 1} - Correct Answer</label>\r\n                                    <input\r\n                                        id=\"blank-answer-{index}\"\r\n                                        type=\"text\"\r\n                                        bind:value={fillBlankAnswers[index]}\r\n                                        placeholder=\"Enter correct answer for this blank\"\r\n                                        class=\"form-input\"\r\n                                    />\r\n                                </div>\r\n                                <div class=\"form-field\">\r\n                                    <label for=\"blank-marks-{index}\">Marks (Optional)</label>\r\n                                    <input\r\n                                        id=\"blank-marks-{index}\"\r\n                                        type=\"text\"\r\n                                        bind:value={fillBlankMarks[index]}\r\n                                        placeholder=\"e.g., '2'\"\r\n                                        class=\"form-input\"\r\n                                    />\r\n                                </div>\r\n                                {#if fillBlankAnswers.length > 1}\r\n                                    <button\r\n                                        type=\"button\"\r\n                                        class=\"remove-button\"\r\n                                        on:click={() => removeFillBlank(index)}\r\n                                    >\r\n                                        Remove Blank\r\n                                    </button>\r\n                                {/if}\r\n                            </div>\r\n                        {/each}\r\n                    </div>\r\n                {/if}\r\n\r\n                <!-- Matching Fields -->\r\n                {#if showMatchingFields}\r\n                    <div class=\"options-section\">\r\n                        <div class=\"options-header\">\r\n                            <span class=\"section-label\">Matching Pairs *</span>\r\n                            <button type=\"button\" class=\"add-button\" on:click={addMatchingPair}>+ Add Pair</button>\r\n                        </div>\r\n                        {#each matchingPairs as pair, index}\r\n                            <div class=\"matching-item\">\r\n                                <div class=\"matching-pair\">\r\n                                    <div class=\"form-field\">\r\n                                        <label for=\"match-left-{index}\">Left Item</label>\r\n                                        <input\r\n                                            id=\"match-left-{index}\"\r\n                                            type=\"text\"\r\n                                            bind:value={pair.left}\r\n                                            placeholder=\"e.g., 'H2O'\"\r\n                                            class=\"form-input\"\r\n                                        />\r\n                                    </div>\r\n                                    <div class=\"form-field\">\r\n                                        <label for=\"match-right-{index}\">Right Item</label>\r\n                                        <input\r\n                                            id=\"match-right-{index}\"\r\n                                            type=\"text\"\r\n                                            bind:value={pair.right}\r\n                                            placeholder=\"e.g., 'Water'\"\r\n                                            class=\"form-input\"\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                                {#if matchingPairs.length > 1}\r\n                                    <button\r\n                                        type=\"button\"\r\n                                        class=\"remove-button\"\r\n                                        on:click={() => removeMatchingPair(index)}\r\n                                    >\r\n                                        Remove Pair\r\n                                    </button>\r\n                                {/if}\r\n                            </div>\r\n                        {/each}\r\n                    </div>\r\n                {/if}\r\n\r\n                <!-- True/False Fields -->\r\n                {#if showTrueFalseFields}\r\n                    <div class=\"form-field\">\r\n                        <span class=\"section-label\">Correct Answer *</span>\r\n                        <div class=\"radio-group\">\r\n                            <label class=\"radio-label\">\r\n                                <input\r\n                                    type=\"radio\"\r\n                                    bind:group={trueFalseAnswer}\r\n                                    value=\"true\"\r\n                                />\r\n                                <span>True</span>\r\n                            </label>\r\n                            <label class=\"radio-label\">\r\n                                <input\r\n                                    type=\"radio\"\r\n                                    bind:group={trueFalseAnswer}\r\n                                    value=\"false\"\r\n                                />\r\n                                <span>False</span>\r\n                            </label>\r\n                        </div>\r\n                    </div>\r\n                {/if}\r\n            </div>\r\n\r\n            <!-- Exercise Images -->\r\n            <div class=\"images-section\">\r\n                <h3 class=\"details-title\">Exercise Images (Optional)</h3>\r\n                <div class=\"form-field\">\r\n                    <label for=\"image-upload\">Upload Images</label>\r\n                    <input\r\n                        id=\"image-upload\"\r\n                        type=\"file\"\r\n                        accept=\"image/*\"\r\n                        multiple\r\n                        on:change={handleImageUpload}\r\n                        class=\"file-input\"\r\n                    />\r\n                    <small class=\"field-hint\">You can upload multiple images</small>\r\n                </div>\r\n                \r\n                {#if exerciseImages.length > 0}\r\n                    <div class=\"images-grid\">\r\n                        {#each exerciseImages as image, index}\r\n                            <div class=\"image-preview-item\">\r\n                                <img src={image.preview} alt=\"Preview\" class=\"image-preview\" />\r\n                                <input\r\n                                    type=\"text\"\r\n                                    bind:value={image.caption}\r\n                                    placeholder=\"Image caption (optional)\"\r\n                                    class=\"form-input caption-input\"\r\n                                />\r\n                                <button\r\n                                    type=\"button\"\r\n                                    class=\"remove-button\"\r\n                                    on:click={() => removeImage(index)}\r\n                                >\r\n                                    Remove Image\r\n                                </button>\r\n                            </div>\r\n                        {/each}\r\n                    </div>\r\n                {/if}\r\n            </div>\r\n            \r\n            <!-- Submit Button -->\r\n            <div class=\"submit-section\">\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"submit-button\"\r\n                    on:click={handleSubmit}\r\n                    disabled={isSubmitting}\r\n                >\r\n                    {#if isSubmitting}\r\n                        Submitting...\r\n                    {:else}\r\n                        Submit Exercise\r\n                    {/if}\r\n                </button>\r\n                \r\n                {#if submitError}\r\n                    <div class=\"error-message\">{submitError}</div>\r\n                {/if}\r\n                \r\n                {#if submitSuccess}\r\n                    <div class=\"success-message\">{submitSuccess}</div>\r\n                {/if}\r\n            </div>\r\n        {/if}\r\n    </div>\r\n    \r\n    <!-- Math Panel Modal Dialog -->\r\n    {#if showMathPanel}\r\n        <!-- Backdrop -->\r\n        <div \r\n            class=\"math-modal-backdrop\" \r\n            on:click={(e) => {\r\n                // Only close if clicking directly on backdrop, not on modal or keyboard\r\n                if (e.target === e.currentTarget) {\r\n                    closeMathPanel();\r\n                }\r\n            }}\r\n            on:keydown={(e) => e.key === 'Escape' && closeMathPanel()}\r\n            role=\"button\"\r\n            tabindex=\"0\"\r\n            aria-label=\"Close math panel\"\r\n        ></div>\r\n        \r\n        <!-- Centered Modal -->\r\n        <div \r\n            class=\"math-modal\" \r\n            on:keydown={(e) => e.key === 'Escape' && closeMathPanel()} \r\n            on:click={(e) => e.stopPropagation()}\r\n            role=\"dialog\" \r\n            aria-modal=\"true\" \r\n            aria-labelledby=\"math-modal-title\"\r\n            tabindex=\"-1\"\r\n        >\r\n            <div class=\"math-modal-header\">\r\n                <h3 id=\"math-modal-title\" class=\"math-modal-title\">Insert Math Equation</h3>\r\n                <button type=\"button\" class=\"math-modal-close\" on:click={closeMathPanel} aria-label=\"Close\">×</button>\r\n            </div>\r\n            \r\n            <div class=\"math-modal-body\">\r\n                <div class=\"math-modal-editor\">\r\n                    <math-field\r\n                        use:handleMathPanelFieldMount\r\n                        value={mathPanelValue}\r\n                        placeholder=\"Enter your math equation...\"\r\n                        virtual-keyboard-mode=\"manual\"\r\n                        virtual-keyboard-toggle=\"false\"\r\n                        default-mode=\"math\"\r\n                        virtual-keyboard-container=\"body\"\r\n                    ></math-field>\r\n                </div>\r\n            </div>\r\n            \r\n            <div class=\"math-modal-footer\">\r\n                <button \r\n                    type=\"button\" \r\n                    class=\"math-modal-cancel\"\r\n                    on:click={closeMathPanel}\r\n                >\r\n                    Cancel\r\n                </button>\r\n                <button \r\n                    type=\"button\" \r\n                    class=\"math-modal-insert\"\r\n                    on:click={insertMathIntoTextarea}\r\n                >\r\n                    Insert\r\n                </button>\r\n            </div>\r\n        </div>\r\n    {/if}\r\n        </div>\r\n    </main>\r\n</div>\r\n\r\n<style>\r\n    .app-container {\r\n        display: flex;\r\n        height: 100vh;\r\n        background-color: #f9fafb;\r\n        position: fixed;\r\n        top: 0;\r\n        left: 0;\r\n        right: 0;\r\n        bottom: 0;\r\n        width: 100vw;\r\n        z-index: 1000;\r\n    }\r\n\r\n    /* Main Content Styles */\r\n    .main-content {\r\n        flex: 1;\r\n        overflow: auto;\r\n    }\r\n\r\n    .upload-exercise-container {\r\n        max-width: 800px;\r\n        margin: 0 auto;\r\n        padding: 32px 24px;\r\n        background-color: #f9fafb;\r\n        min-height: 100vh;\r\n    }\r\n\r\n    .form-section {\r\n        background-color: white;\r\n        border-radius: 8px;\r\n        padding: 32px;\r\n        border: 1px solid #e5e7eb;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    }\r\n\r\n    .section-title {\r\n        color: #111827;\r\n        font-size: 24px;\r\n        font-weight: 700;\r\n        margin: 0 0 8px 0;\r\n    }\r\n\r\n    .section-description {\r\n        color: #4b5563;\r\n        font-size: 14px;\r\n        margin: 0 0 24px 0;\r\n        line-height: 1.5;\r\n    }\r\n\r\n    .form-field {\r\n        display: flex;\r\n        flex-direction: column;\r\n        margin-bottom: 20px;\r\n        width: 100%;\r\n    }\r\n\r\n    .form-field label {\r\n        margin-bottom: 8px;\r\n        font-size: 1.17em;\r\n        font-weight: bold;\r\n        color: #111827;\r\n    }\r\n\r\n    .form-input {\r\n        width: 100%;\r\n        padding: 12px 16px;\r\n        height: 48px;\r\n        border: 1px solid #d1d5db;\r\n        border-radius: 8px;\r\n        font-size: 14px;\r\n        font-family: inherit;\r\n        background-color: #eeebdb;\r\n        box-sizing: border-box;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    }\r\n\r\n    .form-input:focus {\r\n        outline: none;\r\n        border-color: #fab45a;\r\n        box-shadow: 0 0 0 3px rgba(250, 180, 90, 0.1);\r\n    }\r\n\r\n    .form-textarea {\r\n        width: 100%;\r\n        padding: 12px 16px;\r\n        border: 1px solid #d1d5db;\r\n        border-radius: 8px;\r\n        font-size: 14px;\r\n        font-family: inherit;\r\n        background-color: #eeebdb;\r\n        resize: vertical;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n    }\r\n\r\n    .form-textarea:focus {\r\n        outline: none;\r\n        border-color: #fab45a;\r\n        box-shadow: 0 0 0 3px rgba(250, 180, 90, 0.1);\r\n    }\r\n\r\n    .details-section {\r\n        margin-top: 24px;\r\n        padding-top: 24px;\r\n        border-top: 1px solid #e5e7eb;\r\n    }\r\n\r\n    .details-title {\r\n        color: #111827;\r\n        font-size: 18px;\r\n        font-weight: 600;\r\n        margin: 0 0 16px 0;\r\n    }\r\n\r\n    .form-section + .form-section {\r\n        margin-top: 32px;\r\n    }\r\n\r\n    .field-hint {\r\n        color: #6b7280;\r\n        font-size: 12px;\r\n        margin-top: 4px;\r\n        display: block;\r\n    }\r\n\r\n    .checkbox-field {\r\n        margin-bottom: 16px;\r\n    }\r\n\r\n    .checkbox-label {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        cursor: pointer;\r\n        font-weight: normal;\r\n    }\r\n\r\n    .checkbox-label input[type=\"checkbox\"] {\r\n        width: 18px;\r\n        height: 18px;\r\n        cursor: pointer;\r\n    }\r\n\r\n    .type-specific-section {\r\n        margin-top: 24px;\r\n        padding-top: 24px;\r\n        border-top: 1px solid #e5e7eb;\r\n    }\r\n\r\n    .options-section {\r\n        margin-top: 16px;\r\n    }\r\n\r\n    .options-header {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        margin-bottom: 16px;\r\n    }\r\n\r\n    .section-label {\r\n        font-size: 1.17em;\r\n        font-weight: bold;\r\n        color: #111827;\r\n        margin: 0;\r\n    }\r\n\r\n    .add-button {\r\n        padding: 8px 16px;\r\n        background-color: #fab45a;\r\n        color: #111827;\r\n        border: 1px solid #d1d5db;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n        font-weight: 500;\r\n        cursor: pointer;\r\n        transition: background-color 0.2s ease;\r\n    }\r\n\r\n    .add-button:hover {\r\n        background-color: #c98f43;\r\n    }\r\n\r\n    .option-item {\r\n        display: flex;\r\n        gap: 12px;\r\n        align-items: flex-start;\r\n        margin-bottom: 12px;\r\n    }\r\n\r\n    .option-input {\r\n        flex: 1;\r\n    }\r\n\r\n    .correct-button {\r\n        padding: 12px 16px;\r\n        background-color: white;\r\n        color: #111827;\r\n        border: 1px solid #d1d5db;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n        font-weight: 500;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n        white-space: nowrap;\r\n    }\r\n\r\n    .correct-button:hover {\r\n        background-color: #f3f4f6;\r\n    }\r\n\r\n    .correct-button.active {\r\n        background-color: #10b981;\r\n        color: white;\r\n        border-color: #10b981;\r\n    }\r\n\r\n    .remove-button {\r\n        padding: 12px 16px;\r\n        background-color: #ef4444;\r\n        color: white;\r\n        border: 1px solid #ef4444;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n        font-weight: 500;\r\n        cursor: pointer;\r\n        transition: background-color 0.2s ease;\r\n        white-space: nowrap;\r\n    }\r\n\r\n    .remove-button:hover {\r\n        background-color: #dc2626;\r\n    }\r\n\r\n    .blank-item,\r\n    .matching-item {\r\n        padding: 16px;\r\n        border: 1px solid #e5e7eb;\r\n        border-radius: 8px;\r\n        margin-bottom: 16px;\r\n        background-color: #f9fafb;\r\n    }\r\n\r\n    .matching-pair {\r\n        display: grid;\r\n        grid-template-columns: 1fr 1fr;\r\n        gap: 12px;\r\n        margin-bottom: 12px;\r\n    }\r\n\r\n    .radio-group {\r\n        display: flex;\r\n        gap: 24px;\r\n        margin-top: 8px;\r\n    }\r\n\r\n    .radio-label {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        cursor: pointer;\r\n        font-weight: normal;\r\n    }\r\n\r\n    .radio-label input[type=\"radio\"] {\r\n        width: 18px;\r\n        height: 18px;\r\n        cursor: pointer;\r\n    }\r\n\r\n    .images-section {\r\n        margin-top: 24px;\r\n        padding-top: 24px;\r\n        border-top: 1px solid #e5e7eb;\r\n    }\r\n\r\n    .file-input {\r\n        width: 100%;\r\n        padding: 12px 16px;\r\n        border: 1px solid #d1d5db;\r\n        border-radius: 8px;\r\n        font-size: 14px;\r\n        font-family: inherit;\r\n        background-color: #eeebdb;\r\n        box-sizing: border-box;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        cursor: pointer;\r\n    }\r\n\r\n    .file-input:focus {\r\n        outline: none;\r\n        border-color: #fab45a;\r\n        box-shadow: 0 0 0 3px rgba(250, 180, 90, 0.1);\r\n    }\r\n\r\n    .images-grid {\r\n        display: grid;\r\n        grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\r\n        gap: 16px;\r\n        margin-top: 16px;\r\n    }\r\n\r\n    .image-preview-item {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 8px;\r\n        padding: 12px;\r\n        border: 1px solid #e5e7eb;\r\n        border-radius: 8px;\r\n        background-color: white;\r\n    }\r\n\r\n    .image-preview {\r\n        width: 100%;\r\n        height: 200px;\r\n        object-fit: contain;\r\n        background-color: #f9fafb;\r\n        border-radius: 4px;\r\n    }\r\n\r\n    .caption-input {\r\n        margin-top: 8px;\r\n    }\r\n\r\n    .submit-section {\r\n        margin-top: 32px;\r\n        padding-top: 24px;\r\n        border-top: 1px solid #e5e7eb;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 16px;\r\n    }\r\n\r\n    .submit-button {\r\n        padding: 14px 32px;\r\n        background-color: #fab45a;\r\n        color: #111827;\r\n        border: 1px solid #d1d5db;\r\n        border-radius: 8px;\r\n        font-size: 16px;\r\n        font-weight: 600;\r\n        cursor: pointer;\r\n        transition: background-color 0.2s ease;\r\n        align-self: flex-start;\r\n    }\r\n\r\n    .submit-button:hover:not(:disabled) {\r\n        background-color: #c98f43;\r\n    }\r\n\r\n    .submit-button:disabled {\r\n        background-color: #d1d5db;\r\n        color: #6b7280;\r\n        cursor: not-allowed;\r\n    }\r\n\r\n    .error-message {\r\n        padding: 12px 16px;\r\n        background-color: #fee2e2;\r\n        color: #dc2626;\r\n        border: 1px solid #fca5a5;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n    }\r\n\r\n    .success-message {\r\n        padding: 12px 16px;\r\n        background-color: #d1fae5;\r\n        color: #065f46;\r\n        border: 1px solid #6ee7b7;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n    }\r\n\r\n    /* Insert Math Button */\r\n    .insert-math-button {\r\n        width: 100%;\r\n        padding: 14px 20px;\r\n        margin-bottom: 12px;\r\n        background-color: #fab45a;\r\n        color: #111827;\r\n        border: 2px solid #fab45a;\r\n        border-radius: 8px;\r\n        font-size: 15px;\r\n        font-weight: 600;\r\n        cursor: pointer;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 8px;\r\n        transition: all 0.2s ease;\r\n        box-shadow: 0px 2px 4px rgba(250, 180, 90, 0.3);\r\n    }\r\n\r\n    .insert-math-button:hover {\r\n        background-color: #c98f43;\r\n        border-color: #c98f43;\r\n        transform: translateY(-1px);\r\n        box-shadow: 0px 4px 6px rgba(250, 180, 90, 0.4);\r\n    }\r\n\r\n    .button-icon {\r\n        font-size: 20px;\r\n        font-weight: bold;\r\n    }\r\n\r\n    .button-text {\r\n        font-size: 15px;\r\n    }\r\n\r\n    /* Preview Section */\r\n    .preview-section {\r\n        margin-top: 16px;\r\n        padding: 16px;\r\n        background-color: #f9fafb;\r\n        border: 1px solid #e5e7eb;\r\n        border-radius: 8px;\r\n    }\r\n\r\n    .preview-label {\r\n        font-size: 14px;\r\n        font-weight: 600;\r\n        color: #6b7280;\r\n        margin-bottom: 8px;\r\n        display: block;\r\n    }\r\n\r\n    .preview-content {\r\n        font-size: 14px;\r\n        line-height: 1.6;\r\n        color: #111827;\r\n        min-height: 24px;\r\n    }\r\n\r\n    .math-preview {\r\n        display: inline-block;\r\n        margin: 0 2px;\r\n    }\r\n\r\n    /* Math Modal Dialog Styles */\r\n    .math-modal-backdrop {\r\n        position: fixed;\r\n        top: 0;\r\n        left: 0;\r\n        right: 0;\r\n        bottom: 0;\r\n        background-color: rgba(0, 0, 0, 0.5);\r\n        z-index: 1000;\r\n        animation: fadeIn 0.2s ease;\r\n    }\r\n\r\n    .math-modal {\r\n        position: fixed;\r\n        top: 10%;\r\n        left: 50%;\r\n        transform: translateX(-50%);\r\n        width: 90%;\r\n        max-width: 600px;\r\n        max-height: 50vh;\r\n        background-color: white;\r\n        border-radius: 12px;\r\n        box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\r\n        z-index: 1001;\r\n        display: flex;\r\n        flex-direction: column;\r\n        animation: modalFadeIn 0.3s ease;\r\n        overflow: hidden;\r\n    }\r\n    \r\n    /* Ensure MathLive virtual keyboard appears above modal and is positioned at bottom */\r\n    /* Use the highest possible z-index and ensure it's in the right stacking context */\r\n    :global(math-virtual-keyboard) {\r\n        z-index: 2147483647 !important; /* Maximum z-index value */\r\n        position: fixed !important;\r\n        bottom: 0 !important;\r\n        left: 0 !important;\r\n        right: 0 !important;\r\n        max-height: 45vh !important;\r\n        background-color: #2d2d2d !important;\r\n        pointer-events: auto !important;\r\n    }\r\n    \r\n    /* Also target any wrapper elements MathLive might use */\r\n    :global(math-field math-virtual-keyboard),\r\n    :global(math-field::part(virtual-keyboard)) {\r\n        z-index: 2147483647 !important;\r\n    }\r\n    \r\n    /* Ensure modal doesn't create a new stacking context that traps keyboard */\r\n    .math-modal {\r\n        isolation: auto;\r\n    }\r\n    \r\n    /* Prevent clicks inside modal from bubbling to backdrop */\r\n    .math-modal * {\r\n        pointer-events: auto;\r\n    }\r\n\r\n    @keyframes modalFadeIn {\r\n        from {\r\n            opacity: 0;\r\n            transform: translateX(-50%) translateY(-10px);\r\n        }\r\n        to {\r\n            opacity: 1;\r\n            transform: translateX(-50%) translateY(0);\r\n        }\r\n    }\r\n\r\n    @keyframes fadeIn {\r\n        from {\r\n            opacity: 0;\r\n        }\r\n        to {\r\n            opacity: 1;\r\n        }\r\n    }\r\n\r\n    .math-modal-header {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        padding: 20px 24px;\r\n        border-bottom: 1px solid #e5e7eb;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .math-modal-title {\r\n        margin: 0;\r\n        font-size: 20px;\r\n        font-weight: 600;\r\n        color: #111827;\r\n    }\r\n\r\n    .math-modal-close {\r\n        background: none;\r\n        border: none;\r\n        font-size: 28px;\r\n        color: #6b7280;\r\n        cursor: pointer;\r\n        padding: 0;\r\n        width: 32px;\r\n        height: 32px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 4px;\r\n        transition: all 0.2s ease;\r\n    }\r\n\r\n    .math-modal-close:hover {\r\n        background-color: #f3f4f6;\r\n        color: #111827;\r\n    }\r\n\r\n    .math-modal-body {\r\n        flex: 1;\r\n        padding: 24px;\r\n        overflow-y: auto;\r\n        min-height: 200px;\r\n    }\r\n\r\n    .math-modal-editor {\r\n        width: 100%;\r\n    }\r\n\r\n    .math-modal-editor math-field {\r\n        width: 100%;\r\n        min-height: 200px;\r\n        padding: 12px 16px;\r\n        border: 1px solid #d1d5db;\r\n        border-radius: 8px;\r\n        font-size: 14px;\r\n        background-color: #eeebdb;\r\n        box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n        display: block;\r\n        box-sizing: border-box;\r\n    }\r\n\r\n    .math-modal-editor math-field:focus-within {\r\n        outline: none;\r\n        border-color: #fab45a;\r\n        box-shadow: 0 0 0 3px rgba(250, 180, 90, 0.1);\r\n    }\r\n    \r\n    /* Hide the virtual keyboard toggle button since keyboard opens automatically */\r\n    .math-modal-editor math-field::part(virtual-keyboard-toggle) {\r\n        display: none !important;\r\n    }\r\n\r\n    .math-modal-footer {\r\n        display: flex;\r\n        gap: 12px;\r\n        padding: 16px 24px;\r\n        border-top: 1px solid #e5e7eb;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .math-modal-cancel,\r\n    .math-modal-insert {\r\n        flex: 1;\r\n        padding: 12px 20px;\r\n        border-radius: 6px;\r\n        font-size: 14px;\r\n        font-weight: 600;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n    }\r\n\r\n    .math-modal-cancel {\r\n        background-color: white;\r\n        color: #6b7280;\r\n        border: 1px solid #d1d5db;\r\n    }\r\n\r\n    .math-modal-cancel:hover {\r\n        background-color: #f9fafb;\r\n        border-color: #9ca3af;\r\n    }\r\n\r\n    .math-modal-insert {\r\n        background-color: #fab45a;\r\n        color: #111827;\r\n        border: 1px solid #fab45a;\r\n    }\r\n\r\n    .math-modal-insert:hover {\r\n        background-color: #c98f43;\r\n        border-color: #c98f43;\r\n    }\r\n\r\n    /* Responsive Design */\r\n    @media (max-width: 768px) {\r\n        .app-container {\r\n            flex-direction: column;\r\n        }\r\n\r\n        .upload-exercise-container {\r\n            padding: 16px;\r\n        }\r\n\r\n        .form-section {\r\n            padding: 24px 16px;\r\n        }\r\n\r\n        .section-title {\r\n            font-size: 20px;\r\n        }\r\n\r\n        .matching-pair {\r\n            grid-template-columns: 1fr;\r\n        }\r\n\r\n        .images-grid {\r\n            grid-template-columns: 1fr;\r\n        }\r\n\r\n        .option-item {\r\n            flex-direction: column;\r\n        }\r\n\r\n        .correct-button,\r\n        .remove-button {\r\n            width: 100%;\r\n        }\r\n\r\n        .math-modal {\r\n            width: 95%;\r\n            max-height: 90vh;\r\n        }\r\n\r\n        .math-modal-body {\r\n            padding: 16px;\r\n        }\r\n\r\n        .math-modal-editor math-field {\r\n            min-height: 150px;\r\n        }\r\n        \r\n        .math-modal-footer {\r\n            padding: 12px 16px;\r\n        }\r\n    }\r\n</style>\r\n\r\n\r\n","<script>\r\n\timport { onMount } from 'svelte';\r\n\timport katex from 'katex';\r\n\t// KaTeX CSS is loaded via CDN in the HTML template to avoid font file issues\r\n\r\n\tlet exercises = [];\r\n\tlet loading = true;\r\n\tlet error = '';\r\n\t\r\n\t// Track selected answers for each exercise: { exerciseId: optionId }\r\n\tlet selectedAnswers = {};\r\n\r\n\t// Difficulty labels in Lithuanian\r\n\tconst difficultyLabels = {\r\n\t\teasy: 'Lengvas',\r\n\t\tmedium: 'Vidutinis',\r\n\t\thard: 'Sunkus'\r\n\t};\r\n\r\n\t// Difficulty colors\r\n\tconst difficultyColors = {\r\n\t\teasy: '#fef3c7', // light yellow\r\n\t\tmedium: '#fde68a', // medium yellow\r\n\t\thard: '#fbbf24' // darker yellow\r\n\t};\r\n\t\r\n\t// Handle option selection\r\n\tfunction selectOption(exerciseId, optionId, isCorrect) {\r\n\t\t// Ensure IDs are numbers for consistent comparison\r\n\t\tconst exerciseIdNum = Number(exerciseId);\r\n\t\tconst optionIdNum = Number(optionId);\r\n\t\t\r\n\t\t// Create a new object to trigger reactivity\r\n\t\tselectedAnswers = {\r\n\t\t\t...selectedAnswers,\r\n\t\t\t[exerciseIdNum]: optionIdNum\r\n\t\t};\r\n\t\tconsole.log('Selected answer:', exerciseIdNum, optionIdNum, isCorrect);\r\n\t\tconsole.log('Selected answers:', selectedAnswers);\r\n\t}\r\n\t\r\n\t// Check if an option is selected\r\n\tfunction isSelected(exerciseId, optionId) {\r\n\t\treturn selectedAnswers[exerciseId] === optionId;\r\n\t}\r\n\t\r\n\t// Get the correct option ID for an exercise\r\n\tfunction getCorrectOptionId(exercise) {\r\n\t\tconst correctOption = exercise.options.find(opt => opt.is_correct);\r\n\t\treturn correctOption ? Number(correctOption.id) : null;\r\n\t}\r\n\t\r\n\t// Determine the state of an option button\r\n\tfunction getOptionState(exercise, optionId) {\r\n\t\t// Explicitly reference selectedAnswers to ensure reactivity\r\n\t\tconst selectedId = selectedAnswers[exercise.id];\r\n\t\tif (!selectedId) return 'default'; // No selection yet\r\n\t\t\r\n\t\tif (optionId === selectedId) {\r\n\t\t\t// This is the selected option\r\n\t\t\tconst correctId = getCorrectOptionId(exercise);\r\n\t\t\tconst isCorrect = optionId === correctId;\r\n\t\t\tconsole.log(`Option ${optionId} selected, correct ID: ${correctId}, isCorrect: ${isCorrect}`);\r\n\t\t\treturn isCorrect ? 'correct' : 'incorrect';\r\n\t\t}\r\n\t\t\r\n\t\t// If another option was selected, show this one as default\r\n\t\treturn 'default';\r\n\t}\r\n\t\r\n\t// Helper function to check if option is correct (reactive)\r\n\tfunction isOptionCorrect(exercise, optionId) {\r\n\t\tconst selectedId = selectedAnswers[exercise.id];\r\n\t\tif (!selectedId || optionId !== selectedId) return false;\r\n\t\tconst correctId = getCorrectOptionId(exercise);\r\n\t\treturn optionId === correctId;\r\n\t}\r\n\t\r\n\t// Helper function to check if option is incorrect (reactive)\r\n\tfunction isOptionIncorrect(exercise, optionId) {\r\n\t\tconst selectedId = selectedAnswers[exercise.id];\r\n\t\tif (!selectedId || optionId !== selectedId) return false;\r\n\t\tconst correctId = getCorrectOptionId(exercise);\r\n\t\treturn optionId !== correctId;\r\n\t}\r\n\r\n\t// Function to render text with LaTeX\r\n\tfunction renderWithLatex(text) {\r\n\t\tif (!text) return [{ type: 'text', content: '' }];\r\n\t\t\r\n\t\t// Regex to match LaTeX expressions: \\(...\\) for inline, \\[...\\] for display, or $...$\r\n\t\t// Updated to handle escaped delimiters and various formats\r\n\t\tconst latexRegex = /(\\\\?\\[.*?\\\\?\\]|\\\\?\\(.*?\\\\?\\)|\\$[^$]+\\$)/g;\r\n\t\tconst parts = [];\r\n\t\tlet lastIndex = 0;\r\n\t\tlet match;\r\n\t\t\r\n\t\twhile ((match = latexRegex.exec(text)) !== null) {\r\n\t\t\t// Add text before the match\r\n\t\t\tif (match.index > lastIndex) {\r\n\t\t\t\tconst textPart = text.substring(lastIndex, match.index);\r\n\t\t\t\tif (textPart) {\r\n\t\t\t\t\tparts.push({ type: 'text', content: textPart });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Extract LaTeX content (remove delimiters)\r\n\t\t\tlet latexContent = match[1];\r\n\t\t\t// Remove \\( \\) or \\[ \\] or $ delimiters\r\n\t\t\tif (latexContent.startsWith('\\\\[') && latexContent.endsWith('\\\\]')) {\r\n\t\t\t\tlatexContent = latexContent.slice(2, -2);\r\n\t\t\t} else if (latexContent.startsWith('\\\\(') && latexContent.endsWith('\\\\)')) {\r\n\t\t\t\tlatexContent = latexContent.slice(2, -2);\r\n\t\t\t} else if (latexContent.startsWith('[') && latexContent.endsWith(']')) {\r\n\t\t\t\tlatexContent = latexContent.slice(1, -1);\r\n\t\t\t} else if (latexContent.startsWith('(') && latexContent.endsWith(')')) {\r\n\t\t\t\tlatexContent = latexContent.slice(1, -1);\r\n\t\t\t} else if (latexContent.startsWith('$') && latexContent.endsWith('$')) {\r\n\t\t\t\tlatexContent = latexContent.slice(1, -1);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Add rendered math\r\n\t\t\ttry {\r\n\t\t\t\tconst rendered = katex.renderToString(latexContent.trim(), {\r\n\t\t\t\t\tthrowOnError: false,\r\n\t\t\t\t\tdisplayMode: false\r\n\t\t\t\t});\r\n\t\t\t\tparts.push({ type: 'math', content: rendered });\r\n\t\t\t} catch (e) {\r\n\t\t\t\t// If rendering fails, show original\r\n\t\t\t\tparts.push({ type: 'text', content: match[0] });\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tlastIndex = match.index + match[0].length;\r\n\t\t}\r\n\t\t\r\n\t\t// Add remaining text\r\n\t\tif (lastIndex < text.length) {\r\n\t\t\tconst remainingText = text.substring(lastIndex);\r\n\t\t\tif (remainingText) {\r\n\t\t\t\tparts.push({ type: 'text', content: remainingText });\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// If no LaTeX found, return original text\r\n\t\tif (parts.length === 0) {\r\n\t\t\treturn [{ type: 'text', content: text }];\r\n\t\t}\r\n\t\t\r\n\t\treturn parts;\r\n\t}\r\n\r\n\t// Fetch exercises from API\r\n\tasync function fetchExercises() {\r\n\t\tloading = true;\r\n\t\terror = '';\r\n\t\t\r\n\t\ttry {\r\n\t\t\tconst token = localStorage.getItem('jwtToken');\r\n\t\t\tif (!token) {\r\n\t\t\t\terror = 'Reikalinga autentifikacija. Prisijunkite prie sistemos.';\r\n\t\t\t\tloading = false;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tconst response = await fetch('/studentplayground/api/exercise/mcq/', {\r\n\t\t\t\tmethod: 'GET',\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t'Authorization': `Bearer ${token}`,\r\n\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif (!response.ok) {\r\n\t\t\t\tconst errorData = await response.json().catch(() => ({}));\r\n\t\t\t\terror = errorData.error || 'Nepavyko gauti užduočių duomenų';\r\n\t\t\t\tloading = false;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tconst data = await response.json();\r\n\t\t\tif (data.status === 'success') {\r\n\t\t\t\texercises = data.exercises || [];\r\n\t\t\t} else {\r\n\t\t\t\terror = data.error || 'Netikėta klaida';\r\n\t\t\t}\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error('Error fetching exercises:', err);\r\n\t\t\terror = 'Tinklo klaida. Bandykite dar kartą.';\r\n\t\t} finally {\r\n\t\t\tloading = false;\r\n\t\t}\r\n\t}\r\n\r\n\tonMount(() => {\r\n\t\tfetchExercises();\r\n\t});\r\n\t\r\n\t// Debug: Log when selectedAnswers changes\r\n\t$: console.log('selectedAnswers updated:', selectedAnswers);\r\n\t\r\n\t// Force reactivity by creating a reactive statement that references selectedAnswers\r\n\t// This ensures Svelte tracks changes to selectedAnswers properly\r\n\t$: selectedAnswers, exercises;\r\n</script>\r\n\r\n<div class=\"exercises-container\">\r\n\t{#if loading}\r\n\t\t<div class=\"loading\">Kraunama...</div>\r\n\t{:else if error}\r\n\t\t<div class=\"error\">{error}</div>\r\n\t{:else if exercises.length === 0}\r\n\t\t<div class=\"empty\">Nėra prieinamų užduočių.</div>\r\n\t{:else}\r\n\t\t<div class=\"exercises-list\">\r\n\t\t\t{#each exercises as exercise}\r\n\t\t\t\t<div class=\"exercise-card\">\r\n\t\t\t\t\t<!-- Difficulty Badge -->\r\n\t\t\t\t\t<div class=\"exercise-header\">\r\n\t\t\t\t\t\t<div \r\n\t\t\t\t\t\t\tclass=\"difficulty-badge\" \r\n\t\t\t\t\t\t\tstyle=\"background-color: {difficultyColors[exercise.difficulty] || difficultyColors.easy}\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"difficulty-text\">{difficultyLabels[exercise.difficulty] || exercise.difficulty}</span>\r\n\t\t\t\t\t\t\t<svg class=\"star-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n\t\t\t\t\t\t\t\t<polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"></polygon>\r\n\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t<svg class=\"bookmark-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n\t\t\t\t\t\t\t\t<path d=\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"></path>\r\n\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<!-- Question Text -->\r\n\t\t\t\t\t<div class=\"question-text\">\r\n\t\t\t\t\t\t{#each renderWithLatex(exercise.question_text) as part}\r\n\t\t\t\t\t\t\t{#if part.type === 'math'}\r\n\t\t\t\t\t\t\t\t{@html part.content}\r\n\t\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\t{part.content}\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<!-- Options -->\r\n\t\t\t\t\t<div class=\"options-container\">\r\n\t\t\t\t\t\t{#each exercise.options as option, index (option.id)}\r\n\t\t\t\t\t\t\t<button \r\n\t\t\t\t\t\t\t\tclass=\"option-button\"\r\n\t\t\t\t\t\t\t\tclass:correct={selectedAnswers[Number(exercise.id)] === Number(option.id) && Number(option.id) === getCorrectOptionId(exercise)}\r\n\t\t\t\t\t\t\t\tclass:incorrect={selectedAnswers[Number(exercise.id)] === Number(option.id) && Number(option.id) !== getCorrectOptionId(exercise)}\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\ton:click={() => selectOption(exercise.id, option.id, option.is_correct)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"option-label\">{String.fromCharCode(65 + index)}.</span>\r\n\t\t\t\t\t\t\t\t<span class=\"option-text\">\r\n\t\t\t\t\t\t\t\t\t{#each renderWithLatex(option.text) as part}\r\n\t\t\t\t\t\t\t\t\t\t{#if part.type === 'math'}\r\n\t\t\t\t\t\t\t\t\t\t\t{@html part.content}\r\n\t\t\t\t\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\t\t\t\t{part.content}\r\n\t\t\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t{/each}\r\n\t\t</div>\r\n\t{/if}\r\n</div>\r\n\r\n<style>\r\n\t.exercises-container {\r\n\t\twidth: 100%;\r\n\t\tpadding: 24px;\r\n\t}\r\n\r\n\t.loading,\r\n\t.error,\r\n\t.empty {\r\n\t\ttext-align: center;\r\n\t\tpadding: 48px;\r\n\t\tcolor: #4b5563;\r\n\t\tfont-size: 16px;\r\n\t}\r\n\r\n\t.error {\r\n\t\tcolor: #ef4444;\r\n\t}\r\n\r\n\t.exercises-list {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tgap: 32px;\r\n\t\tmax-width: 800px;\r\n\t\tmargin: 0 auto;\r\n\t}\r\n\r\n\t.exercise-card {\r\n\t\tbackground-color: white;\r\n\t\tborder-radius: 12px;\r\n\t\tpadding: 24px;\r\n\t\tbox-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n\t}\r\n\r\n\t.exercise-header {\r\n\t\tmargin-bottom: 16px;\r\n\t}\r\n\r\n\t.difficulty-badge {\r\n\t\tdisplay: inline-flex;\r\n\t\talign-items: center;\r\n\t\tgap: 6px;\r\n\t\tpadding: 6px 12px;\r\n\t\tborder-radius: 6px;\r\n\t\tfont-size: 14px;\r\n\t\tfont-weight: 500;\r\n\t}\r\n\r\n\t.difficulty-text {\r\n\t\tcolor: #111827;\r\n\t}\r\n\r\n\t.star-icon,\r\n\t.bookmark-icon {\r\n\t\tcolor: #9ca3af;\r\n\t\twidth: 16px;\r\n\t\theight: 16px;\r\n\t\tflex-shrink: 0;\r\n\t}\r\n\r\n\t.question-text {\r\n\t\tcolor: #1e3a8a;\r\n\t\tfont-size: 16px;\r\n\t\tline-height: 1.6;\r\n\t\tmargin-bottom: 24px;\r\n\t\tfont-weight: 500;\r\n\t}\r\n\r\n\t.question-text :global(.katex) {\r\n\t\tfont-size: 1em;\r\n\t}\r\n\r\n\t.options-container {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tgap: 12px;\r\n\t}\r\n\r\n\t.option-button {\r\n\t\tdisplay: flex;\r\n\t\talign-items: flex-start;\r\n\t\tgap: 12px;\r\n\t\tpadding: 12px 16px;\r\n\t\tbackground-color: #e0f2fe;\r\n\t\tborder: 2px solid transparent;\r\n\t\tborder-radius: 8px;\r\n\t\tcursor: pointer;\r\n\t\ttransition: all 0.2s ease;\r\n\t\ttext-align: left;\r\n\t\tfont-family: inherit;\r\n\t\twidth: 100%;\r\n\t\tbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\r\n\t}\r\n\r\n\t.option-button:hover:not(.correct):not(.incorrect) {\r\n\t\tbackground-color: #bae6fd;\r\n\t\ttransform: translateY(-1px);\r\n\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n\t}\r\n\r\n\t.option-button:active:not(.correct):not(.incorrect) {\r\n\t\ttransform: translateY(0);\r\n\t}\r\n\r\n\t/* Correct answer styling */\r\n\t.option-button.correct {\r\n\t\tbackground-color: #d1fae5;\r\n\t\tborder-color: #10b981;\r\n\t\tbox-shadow: 0 2px 8px rgba(16, 185, 129, 0.3);\r\n\t}\r\n\r\n\t.option-button.correct .option-label {\r\n\t\tcolor: #10b981;\r\n\t\tfont-weight: 700;\r\n\t}\r\n\r\n\t.option-button.correct .option-text {\r\n\t\tcolor: #065f46;\r\n\t\tfont-weight: 500;\r\n\t}\r\n\r\n\t/* Incorrect answer styling */\r\n\t.option-button.incorrect {\r\n\t\tbackground-color: #fee2e2;\r\n\t\tborder-color: #ef4444;\r\n\t\tbox-shadow: 0 2px 8px rgba(239, 68, 68, 0.3);\r\n\t}\r\n\r\n\t.option-button.incorrect .option-label {\r\n\t\tcolor: #ef4444;\r\n\t\tfont-weight: 700;\r\n\t}\r\n\r\n\t.option-button.incorrect .option-text {\r\n\t\tcolor: #991b1b;\r\n\t\tfont-weight: 500;\r\n\t}\r\n\r\n\t.option-label {\r\n\t\tfont-weight: 600;\r\n\t\tcolor: #1e40af;\r\n\t\tflex-shrink: 0;\r\n\t\tmin-width: 24px;\r\n\t}\r\n\r\n\t.option-text {\r\n\t\tcolor: #111827;\r\n\t\tfont-size: 15px;\r\n\t\tline-height: 1.5;\r\n\t\tflex: 1;\r\n\t}\r\n\r\n\t.option-text :global(.katex) {\r\n\t\tfont-size: 1em;\r\n\t}\r\n\r\n\t/* Responsive Design */\r\n\t@media (max-width: 768px) {\r\n\t\t.exercises-container {\r\n\t\t\tpadding: 16px;\r\n\t\t}\r\n\r\n\t\t.exercise-card {\r\n\t\t\tpadding: 20px;\r\n\t\t}\r\n\r\n\t\t.question-text {\r\n\t\t\tfont-size: 15px;\r\n\t\t}\r\n\r\n\t\t.option-text {\r\n\t\t\tfont-size: 14px;\r\n\t\t}\r\n\t}\r\n</style>\r\n\r\n","<script>\r\n\timport ExerciseBankSidebar from './ExerciseBankSidebar.svelte';\r\n\timport MCQExerciseDisplay from './MCQExerciseDisplay.svelte';\r\n\timport { push } from 'svelte-spa-router';\r\n\r\n\tlet activePage = 'uzduociu-bankas';\r\n\r\n\tfunction handlePageChange(pageId) {\r\n\t\tif (pageId === 'ikelti') {\r\n\t\t\t// Navigate to upload exercise page\r\n\t\t\tpush('/exercise-bank/upload');\r\n\t\t} else if (pageId === 'pradzia') {\r\n\t\t\t// Navigate to landing page\r\n\t\t\tpush('/exercise-bank');\r\n\t\t} else {\r\n\t\t\tactivePage = pageId;\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<div class=\"app-container\">\r\n\t<!-- Sidebar -->\r\n\t<ExerciseBankSidebar {activePage} onPageChange={handlePageChange} />\r\n\r\n\t<!-- Main Content -->\r\n\t<main class=\"main-content\">\r\n\t\t<div class=\"page-container\">\r\n\t\t\t<MCQExerciseDisplay />\r\n\t\t</div>\r\n\t</main>\r\n</div>\r\n\r\n<style>\r\n\t.app-container {\r\n\t\tdisplay: flex;\r\n\t\theight: 100vh;\r\n\t\tbackground-color: #f9fafb;\r\n\t\tposition: fixed;\r\n\t\ttop: 0;\r\n\t\tleft: 0;\r\n\t\tright: 0;\r\n\t\tbottom: 0;\r\n\t\twidth: 100vw;\r\n\t\tz-index: 1000;\r\n\t}\r\n\r\n\t/* Main Content Styles */\r\n\t.main-content {\r\n\t\tflex: 1;\r\n\t\toverflow: auto;\r\n\t}\r\n\r\n\t.page-container {\r\n\t\tmax-width: 1280px;\r\n\t\tmargin: 0 auto;\r\n\t\tpadding: 48px 32px;\r\n\t}\r\n\r\n\t/* Responsive Design */\r\n\t@media (max-width: 768px) {\r\n\t\t.app-container {\r\n\t\t\tflex-direction: column;\r\n\t\t}\r\n\r\n\t\t.page-container {\r\n\t\t\tpadding: 24px 16px;\r\n\t\t}\r\n\t}\r\n</style>\r\n\r\n","<script>\r\n  import { onMount } from 'svelte';\r\n  import NavBarReusable from './NavbarReusable.svelte';\r\n\r\n  const API_BASE_URL = '/studentplayground';\r\n\r\n  let sections = [];\r\n  let loading = false;\r\n  let errorMessage = '';\r\n  let expandedSections = []; // array of section IDs\r\n\r\n  async function fetchSections() {\r\n    loading = true;\r\n    errorMessage = '';\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      errorMessage = 'JWT token not found. Please log in.';\r\n      loading = false;\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const response = await fetch(`${API_BASE_URL}/api/information-sections/`, {\r\n        method: 'GET',\r\n        headers: {\r\n          'Authorization': `Bearer ${token}`,\r\n          'Content-Type': 'application/json',\r\n        },\r\n      });\r\n\r\n      if (response.ok) {\r\n        const data = await response.json();\r\n        sections = data.sections || [];\r\n      } else {\r\n        const errorData = await response.json().catch(() => ({}));\r\n        errorMessage = errorData.error || `Failed to fetch sections: ${response.status}`;\r\n      }\r\n    } catch (error) {\r\n      errorMessage = `Network error: ${error.message}`;\r\n    } finally {\r\n      loading = false;\r\n    }\r\n  }\r\n\r\n  function toggleSection(sectionId) {\r\n    const index = expandedSections.indexOf(sectionId);\r\n    if (index > -1) {\r\n      expandedSections = [\r\n        ...expandedSections.slice(0, index),\r\n        ...expandedSections.slice(index + 1)\r\n      ];\r\n    } else {\r\n      expandedSections = [...expandedSections, sectionId];\r\n    }\r\n  }\r\n\r\n  onMount(() => {\r\n    fetchSections();\r\n  });\r\n</script>\r\n\r\n<NavBarReusable label=\"Bendra Informacija\" backLink=\"/login-greeting\" />\r\n\r\n<div class=\"bendra-informacija\">\r\n  {#if errorMessage}\r\n    <div class=\"message error\">{errorMessage}</div>\r\n  {/if}\r\n\r\n  {#if loading && sections.length === 0}\r\n    <div class=\"loading\">Kraunama...</div>\r\n  {:else if !loading && sections.length === 0 && !errorMessage}\r\n    <div class=\"empty\">Kol kas nėra paskelbtos informacijos.</div>\r\n  {:else}\r\n    <div class=\"sections-list\">\r\n      {#each sections as section (section.id)}\r\n        {@const isExpanded = expandedSections.includes(section.id)}\r\n        <div class=\"section-card\" class:expanded={isExpanded}>\r\n          <button\r\n            type=\"button\"\r\n            class=\"section-header\"\r\n            aria-expanded={isExpanded}\r\n            on:click={() => toggleSection(section.id)}\r\n          >\r\n            <span class=\"section-topic\">{section.topic}</span>\r\n            <span class=\"chevron\" class:expanded={isExpanded} aria-hidden=\"true\">\r\n              <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n                <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n              </svg>\r\n            </span>\r\n          </button>\r\n\r\n          {#if isExpanded}\r\n            <div class=\"section-content\">\r\n              <div class=\"content-wrapper\">\r\n                {@html section.content}\r\n              </div>\r\n            </div>\r\n          {/if}\r\n        </div>\r\n      {/each}\r\n    </div>\r\n  {/if}\r\n</div>\r\n\r\n<style>\r\n  .bendra-informacija {\r\n    padding: 0 1rem 1rem 1rem;\r\n    max-width: 600px;\r\n    margin: 0 auto;\r\n  }\r\n\r\n  .message {\r\n    padding: 12px 16px;\r\n    border-radius: 8px;\r\n    margin-bottom: 16px;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .message.error {\r\n    background-color: #f8d7da;\r\n    color: #721c24;\r\n    border: 1px solid #f5c6cb;\r\n  }\r\n\r\n  .loading,\r\n  .empty {\r\n    text-align: center;\r\n    padding: 40px 16px;\r\n    color: #666;\r\n    font-size: 16px;\r\n  }\r\n\r\n  .sections-list {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 12px;\r\n  }\r\n\r\n  .section-card {\r\n    background: white;\r\n    border: 2px solid #e0e0e0;\r\n    border-radius: 10px;\r\n    overflow: hidden;\r\n    box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.08), 0px 0.5px 2px rgba(96, 97, 112, 0.16);\r\n  }\r\n\r\n  .section-card:hover {\r\n    border-color: #fab45a;\r\n  }\r\n\r\n  .section-card.expanded {\r\n    border-color: #fab45a;\r\n  }\r\n\r\n  .section-header {\r\n    width: 100%;\r\n    background: transparent;\r\n    border: none;\r\n    padding: 16px 18px;\r\n    cursor: pointer;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    gap: 12px;\r\n    text-align: left;\r\n  }\r\n\r\n  .section-header:focus {\r\n    outline: 2px solid #14695b;\r\n    outline-offset: 2px;\r\n  }\r\n\r\n  .section-topic {\r\n    font-size: 18px;\r\n    font-weight: 600;\r\n    color: #333;\r\n  }\r\n\r\n  .chevron {\r\n    color: #666;\r\n    transition: transform 0.2s ease;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  .chevron.expanded {\r\n    transform: rotate(180deg);\r\n  }\r\n\r\n  .section-content {\r\n    border-top: 1px solid #e0e0e0;\r\n    padding: 0 18px 18px 18px;\r\n  }\r\n\r\n  .content-wrapper {\r\n    padding-top: 16px;\r\n    line-height: 1.6;\r\n    color: #333;\r\n  }\r\n\r\n  /* Style HTML content similarly to admin view (TinyMCE output) */\r\n  .content-wrapper :global(p) {\r\n    margin-bottom: 1em;\r\n  }\r\n\r\n  .content-wrapper :global(ul),\r\n  .content-wrapper :global(ol) {\r\n    margin-bottom: 1em;\r\n    padding-left: 2em;\r\n  }\r\n\r\n  .content-wrapper :global(img) {\r\n    max-width: 100%;\r\n    height: auto;\r\n    border-radius: 8px;\r\n    margin: 1em 0;\r\n    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n  }\r\n\r\n  .content-wrapper :global(a) {\r\n    color: #007bff;\r\n    text-decoration: none;\r\n  }\r\n\r\n  .content-wrapper :global(a:hover) {\r\n    text-decoration: underline;\r\n  }\r\n\r\n</style>\r\n\r\n","<script>\r\n  import { onMount } from 'svelte';\r\n  import { getApiBase } from './apiBase.js';\r\n\r\n  export let params;\r\n\r\n  let statusText = 'Opening invoice…';\r\n\r\n  function asInt(v) {\r\n    const n = typeof v === 'string' ? Number(v) : v;\r\n    return Number.isFinite(n) ? n : null;\r\n  }\r\n\r\n  onMount(async () => {\r\n    const raw = params?.paymentId ?? params?.paymentid ?? null;\r\n    const pid = asInt(raw);\r\n\r\n    if (!pid) {\r\n      statusText = 'Missing payment id.';\r\n      return;\r\n    }\r\n\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token) {\r\n      statusText = 'Not authenticated.';\r\n      return;\r\n    }\r\n\r\n    const apiBase = getApiBase();\r\n    const endpoint = `${apiBase}/studentplayground/api/payments/${pid}/invoice-url/`;\r\n\r\n    try {\r\n      const res = await fetch(endpoint, { headers: { 'Authorization': `Bearer ${token}` } });\r\n      const text = await res.text();\r\n\r\n      if (!res.ok) {\r\n        statusText = `Failed to get invoice link (${res.status}).`;\r\n        return;\r\n      }\r\n\r\n      const payload = JSON.parse(text);\r\n      const url = payload?.signed_url;\r\n      if (!url) {\r\n        statusText = 'Missing signed URL in response.';\r\n        return;\r\n      }\r\n\r\n      // Redirect this tab to the PDF.\r\n      window.location.replace(url);\r\n    } catch (e) {\r\n      statusText = 'Failed to open invoice.';\r\n    }\r\n  });\r\n</script>\r\n\r\n<main class=\"wrap\">\r\n  <div class=\"card\">\r\n    <h1>Invoice</h1>\r\n    <p>{statusText}</p>\r\n  </div>\r\n</main>\r\n\r\n<style>\r\n  .wrap {\r\n    min-height: 100vh;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    padding: 1.5rem;\r\n  }\r\n  .card {\r\n    width: min(520px, 100%);\r\n    border: 1px solid #e5e7eb;\r\n    border-radius: 12px;\r\n    padding: 1.25rem 1.5rem;\r\n    background: white;\r\n  }\r\n  h1 {\r\n    margin: 0 0 0.5rem 0;\r\n    font-size: 1.1rem;\r\n  }\r\n  p {\r\n    margin: 0;\r\n    color: #4b5563;\r\n  }\r\n</style>\r\n\r\n","import { getApiBase } from '../apiBase.js';\r\nimport { beginInboxMutation } from './appUpdates.js';\r\n\r\nexport function createInboxApi(signal, onSessionChange) {\r\n  const sessionToken = localStorage.getItem('jwtToken');\r\n  function checkSession() {\r\n    if (signal?.aborted) throw new DOMException('Inbox session ended', 'AbortError');\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (token !== sessionToken && onSessionChange) {\r\n      onSessionChange();\r\n      // The caller belongs to the previous credential. Verification must not\r\n      // silently continue its mutation with the replacement credential.\r\n      throw new DOMException('Inbox session changed', 'AbortError');\r\n    }\r\n    if (!token || token !== sessionToken) throw Object.assign(new Error('Authentication required'), { status: 401 });\r\n  }\r\n  return async function request(path, { method = 'GET', body, timeoutMs } = {}) {\r\n    checkSession();\r\n    const finishMutation = ['GET', 'HEAD'].includes(method.toUpperCase()) ? () => {} : beginInboxMutation();\r\n    const bounded = Number.isFinite(timeoutMs) && timeoutMs > 0 ? new AbortController() : null;\r\n    const cancel = () => bounded?.abort();\r\n    const timer = bounded ? setTimeout(cancel, timeoutMs) : null;\r\n    if (bounded) signal?.addEventListener('abort', cancel, { once: true });\r\n    const requestSignal = bounded?.signal || signal;\r\n    try {\r\n      const response = await fetch(`${getApiBase()}/studentplayground/api/inbox/${path}`, {\r\n        method, signal: requestSignal, cache: 'no-store', credentials: 'same-origin',\r\n        headers: { Authorization: `Bearer ${sessionToken}`, ...(body !== undefined ? { 'Content-Type': 'application/json' } : {}) },\r\n        ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\r\n      });\r\n      let data;\r\n      try { data = await response.json(); } catch { data = {}; }\r\n      if (requestSignal?.aborted) throw new DOMException('Inbox request aborted', 'AbortError');\r\n      checkSession();\r\n      if (!response.ok) throw Object.assign(new Error('Inbox request failed'), { status: response.status, code: data.code });\r\n      return data;\r\n    } catch (problem) { checkSession(); throw problem; }\r\n    finally {\r\n      finishMutation();\r\n      clearTimeout(timer);\r\n      if (bounded) signal?.removeEventListener('abort', cancel);\r\n    }\r\n  };\r\n}\r\n\r\nexport function errorText(error) {\r\n  const codes = {\r\n    inbox_update_in_progress: 'Vyksta saugaus atnaujinimo patikra. Užklausa nebuvo siųsta; palaukite, kol patikra baigsis.',\r\n    inbox_client_update_required: 'Atnaujinkite pašto dėžutės versiją prieš tęsdami. Neišsaugotą juodraštį pirmiausia nukopijuokite.',\r\n    history_range_reload_required: 'Nepavyko saugiai atkurti ankstesnės istorijos vietos. Atverkite naujausią istoriją; juodraštis liks šiame lange ir nebus siunčiamas.',\r\n    conversation_unavailable: 'Pokalbio nuoroda neteisinga arba pokalbis nepasiekiamas. Pasirinkite pokalbį iš sąrašo.',\r\n    template_required: 'Atsakymo langas uždarytas. Pasirinkite patvirtintą šabloną.',\r\n    template_preview_conflict: 'Šablonas pasikeitė. Atnaujinkite pokalbį ir peržiūrėkite šabloną dar kartą.',\r\n    template_not_approved: 'Šis šablonas nėra patvirtintas.',\r\n    template_unverified: 'Šio šablono patvirtinimas dar nepatikrintas.',\r\n    template_verification_stale: 'Patvirtinimo patikra pasenusi. Reikia naujos tiekėjo patikros.',\r\n    viber_template_parameter_too_long: 'Viber šablono parametro reikšmė negali viršyti 125 simbolių. Sutrumpinkite ją ir peržiūrėkite žinutę dar kartą.',\r\n    viber_template_url_requires_fixed_domain: 'Nuorodos domenas turi būti įrašytas patvirtintame šablone. Kreipkitės į IT dėl šablono pakeitimo.',\r\n    provider_configuration_invalid: 'Patikrinkite tiekėjo prieigos teises ir paskyros nustatymus. Kreipkitės į IT.',\r\n    draft_conflict: 'Juodraštis pakeistas kitame įrenginyje. Jūsų tekstas išsaugotas šiame lange; prieš atnaujindami jį nukopijuokite.',\r\n    draft_not_saved: 'Juodraštis dar neišsaugotas serveryje. Tekstas liko šiame lange. Atkurkite ryšį arba nukopijuokite tekstą prieš išeidami.',\r\n    send_outcome_unknown: 'Nežinome, ar užklausa priimta. Patikrinkite ankstesnės užklausos būseną; nekopijuokite jos į naują siuntimą.',\r\n    send_reconciliation_required: 'Pirmiausia patikrinkite ankstesnę užklausą. Pakeisto teksto negalima siųsti kaip neaiškaus siuntimo pakaitalo.',\r\n    command_expired: 'Paruošta užklausa nebegalioja. Patikrinkite jos būseną, tada peržiūrėkite juodraštį prieš naują siuntimą.',\r\n    command_cancelled: 'Paruošta užklausa atšaukta. Patikrinkite jos būseną prieš kurdami naują siuntimą.',\r\n    command_binding_conflict: 'Užklausos siuntėjas arba gavėjas pasikeitė. Atšaukite seną užklausą ir kreipkitės į IT dėl patikros.',\r\n    command_pending_conflict: 'Pirmiausia patikrinkite arba atšaukite ankstesnę paruoštą užklausą. Nekurkite jos kopijos.',\r\n    command_limit: 'Per daug paruoštų užklausų. Pirmiausia patikrinkite arba atšaukite ankstesnes užklausas.',\r\n    recovery_storage_unavailable: 'Naršyklė negali išsaugoti siuntimo atkūrimo duomenų. Nesiųskite iš naujo kitame lange; kreipkitės į IT.',\r\n    recovery_storage_full: 'Per daug nepatikrintų užklausų šiame įrenginyje. Pirmiausia patikrinkite ankstesnius siuntimus.',\r\n    conversation_conflict: 'Pokalbį pakeitė kitas darbuotojas. Duomenys atnaujinti; patikrinkite ir pakartokite veiksmą.',\r\n    notification_consent_required: 'Nėra galiojančio sutikimo gauti pranešimus.',\r\n    notifications_opted_out: 'Gavėjas atsisakė pranešimų.',\r\n    parent_identity_required: 'Pirmiausia reikia patvirtinti tėvo / mamos kontaktą.',\r\n    parent_identity_changed: 'Tėvo / mamos kontaktas pasikeitė. Reikia patvirtinti iš naujo.',\r\n    sending_disabled: 'Žinučių siuntimas šiuo metu išjungtas.',\r\n    channel_disabled: 'Šio kanalo siuntimas išjungtas.',\r\n    recipient_not_allowed: 'Gavėjas neįtrauktas į bandomojo siuntimo sąrašą.',\r\n    pilot_not_configured: 'Bandomojo siuntimo gavėjų sąrašas nesukonfigūruotas. Kreipkitės į IT.',\r\n    sender_binding_changed: 'Siuntėjo nustatymai pasikeitė. Prieš tęsiant reikalinga IT patikra.',\r\n    recipient_binding_changed: 'Gavėjo duomenys pasikeitė. Prieš tęsiant reikia patvirtinti kontaktą.',\r\n    viber_burst_exhausted: 'Pasiektas Viber žinučių limitas. Palaukite kliento atsakymo.',\r\n    viber_session_exhausted: 'Pasiektas šios Viber sesijos limitas. Palaukite naujos kliento pradėtos sesijos arba naudokite patvirtintą šabloną.',\r\n    viber_session_unverified: 'Šios Viber sesijos limitų dar negalime patvirtinti. Reikalinga nauja sesija arba patvirtintas šablonas.',\r\n    recovery_conflict: 'Siuntimo būsena pasikeitė. Peržiūrėkite atnaujintą būseną ir spręskite iš naujo.',\r\n    delivery_order_conflict: 'Vėlesnė žinutė jau perduota siųsti. Senos užklausos paleisti nebegalima; peržiūrėkite ir patvirtinkite naują žinutę eilės pabaigoje arba sustabdykite bandymus.',\r\n    replacement_confirmation_required: 'Prieš tęsdami patikrinkite žinutės turinį ir patvirtinkite naują siuntimą eilės pabaigoje.',\r\n    message_content_purged: 'Žinutės turinys pašalintas pagal saugojimo taisykles. Pakartotinis siuntimas negalimas.',\r\n    receipt_review_conflict: 'Įvykio būsena pasikeitė. Peržiūrėkite atnaujintą būseną ir patvirtinkite sprendimą iš naujo.',\r\n    receipt_replay_unavailable: 'Šio įvykio dabar negalima apdoroti pakartotinai. Patikrinkite jo būseną.',\r\n    receipt_content_purged: 'Įvykio turinys pašalintas. Pakartotinis apdorojimas negalimas.',\r\n    history_source_missing: 'Istorijos šaltinio įrašo nebėra. Pakartojimas jo neatkurs; kreipkitės į IT dėl istorijos perkėlimo patikros.',\r\n    receipt_route_repair_invalid: 'Paskyros susiejimo negalima patvirtinti. Patikrinkite siuntėjo nustatymus ir pasirinkite patikrintą paskyrą iš naujo.',\r\n    duplicate_risk_confirmation_required: 'Prieš kurdami naują siuntimą patvirtinkite galimos kopijos riziką.',\r\n    recovery_action_invalid: 'Šis veiksmas nebegalimas. Patikrinkite dabartinę siuntimo būseną.',\r\n    inbox_disabled: 'Bendra pašto dėžutė dar neįjungta.',\r\n    idempotency_conflict: 'Siuntimo užklausa pasikeitė. Patikrinkite pokalbį prieš siųsdami dar kartą.',\r\n  };\r\n  if (error.status === 401) return 'Prisijungimo sesija baigėsi. Prisijunkite dar kartą.';\r\n  if (error.status === 403) return 'Neturite prieigos prie bendros pašto dėžutės.';\r\n  return codes[error.code] || 'Nepavyko atlikti veiksmo. Patikrinkite ryšį ir juodraščio išsaugojimo būseną.';\r\n}\r\n\r\nexport const parameterLabels = {\r\n  parent_name: 'Tėvo / mamos vardas', class_subject: 'Pamokos dalykas', class_date: 'Pamokos data',\r\n  class_time: 'Pamokos laikas', old_date: 'Ankstesnė data', old_time: 'Ankstesnis laikas',\r\n  new_date: 'Nauja data', new_time: 'Naujas laikas', amount: 'Suma / balansas', payment_link: 'Mokėjimo nuoroda',\r\n};\r\n\r\nexport const deliveryLabels = {\r\n  queued: 'Eilėje', pending: 'Eilėje', sending: 'Siunčiama', accepted: 'Priimta siųsti', sent: 'Išsiųsta',\r\n  delivered: 'Pristatyta', read: 'Perskaityta', failed: 'Nepavyko pristatyti', unknown: 'Būsena neaiški — nekartokite siuntimo',\r\n  blocked: 'Siuntimas sustabdytas', received: 'Gauta', internal: 'Tik darbuotojams',\r\n  cancelled: 'Tolesni bandymai sustabdyti',\r\n};\r\n","<script>\r\n  import { createEventDispatcher, onMount } from 'svelte';\r\n  import { errorText } from './api.js';\r\n\r\n  export let conversationId;\r\n  export let api;\r\n  const dispatch = createEventDispatcher();\r\n  let checks = [], loading = true, busy = null, error = '', success = '', alive = false;\r\n\r\n  function report(problem) {\r\n    if (!alive || problem.name === 'AbortError') return;\r\n    error = errorText(problem);\r\n    if ([401, 403].includes(problem.status)) dispatch('denied', problem);\r\n  }\r\n\r\n  async function load() {\r\n    loading = true; error = ''; success = '';\r\n    try {\r\n      const result = await api(`conversations/${conversationId}/templates/`);\r\n      if (!alive) return;\r\n      checks = result.verification || [];\r\n      dispatch('changed', result.results);\r\n    } catch (problem) { report(problem); }\r\n    finally { if (alive) loading = false; }\r\n  }\r\n\r\n  async function refresh(row) {\r\n    if (busy !== null || loading || !row.enabled || !row.refresh_enabled || row.refresh_pending) return;\r\n    busy = row.template_id; error = ''; success = '';\r\n    try {\r\n      const result = await api(`templates/${row.template_id}/verification/`, { method: 'POST', body: {} });\r\n      if (!alive) return;\r\n      checks = checks.map(item => item.template_id === result.template_id ? result : item);\r\n      success = result.refresh_pending ? 'Patikra suplanuota. Vėliau atnaujinkite būsenas.' : 'Patikra atidedama. Palaukite ir atnaujinkite būsenas.';\r\n    } catch (problem) { report(problem); }\r\n    finally { if (alive) busy = null; }\r\n  }\r\n\r\n  function date(value) { return value ? new Date(value).toLocaleString('lt-LT') : 'Dar netikrinta'; }\r\n  onMount(() => { alive = true; void load(); return () => { alive = false; }; });\r\n</script>\r\n\r\n<section class=\"verification\" aria-label=\"Šablonų patikra\">\r\n  <header><h3>Šablonų patikra</h3><button type=\"button\" on:click={() => dispatch('close')}>Uždaryti šablonų patikrą</button></header>\r\n  <p>Tikrinama tiekėjo patvirtinimo būsena. Šis veiksmas nesiunčia žinutės klientui ir neatnaujina sustabdytų siuntimų.</p>\r\n  {#if error}<p class=\"error\" role=\"alert\">{error}</p>{/if}\r\n  {#if success}<p role=\"status\">{success}</p>{/if}\r\n  {#if loading}<p role=\"status\">Įkeliamos šablonų būsenos…</p>\r\n  {:else}\r\n    {#each checks as row (row.template_id)}\r\n      <article>\r\n        <h4>{row.key} · {row.language}</h4>\r\n        <p>{row.eligible ? 'Patvirtinimas galioja.' : errorText({ code: row.eligibility_reason })}</p>\r\n        <p>Paskutinė patikra: {date(row.checked_at)}<br />Patvirtinimas patikrintas: {date(row.verified_at)}</p>\r\n        {#if row.error_code}<p class=\"error\">{errorText({ code: row.error_code })}</p>{/if}\r\n        {#if !row.refresh_enabled}<p>Automatinė patikra išjungta. Kreipkitės į IT.</p>\r\n        {:else if !row.enabled}<p>Šablonas išjungtas vietiniuose nustatymuose.</p>\r\n        {:else if row.refresh_pending}<p>Patikra suplanuota; jos vykdymas priklauso nuo veikiančio apdorojimo proceso.</p>{/if}\r\n        <button type=\"button\" disabled={busy !== null || !row.enabled || !row.refresh_enabled || row.refresh_pending} on:click={() => refresh(row)}>\r\n          Tikrinti {row.key} · {row.language}\r\n        </button>\r\n      </article>\r\n    {:else}<p>Šiam kanalui dar nėra užregistruotų šablonų.</p>{/each}\r\n  {/if}\r\n  <button type=\"button\" disabled={loading || busy !== null} on:click={load}>Atnaujinti būsenas</button>\r\n</section>\r\n\r\n<style>\r\n  .verification{padding:16px 24px;border-bottom:1px solid #e8d2bb;background:#fff7ef;max-height:40vh;overflow:auto;font-size:12px}\r\n  header{display:flex;align-items:center;justify-content:space-between;gap:10px}h3,h4{margin:0}p{line-height:1.5;margin:10px 0}article{padding:12px 0;border-top:1px solid #ead9c8}\r\n  button{font:inherit;border:1px solid #bfb7a8;border-radius:6px;padding:9px;background:#fff;color:#25231f;cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}.error{color:#922c19}\r\n  :focus-visible{outline:2px solid #d95513;outline-offset:2px}@media(max-width:760px){.verification{padding:12px}}\r\n</style>\r\n","<script>\r\n  import { createEventDispatcher, onMount } from 'svelte';\r\n  import { errorText } from './api.js';\r\n\r\n  export let api;\r\n  const dispatch = createEventDispatcher();\r\n  const states = { review: 'Reikia patikros', pending: 'Laukia apdorojimo', processing: 'Apdorojama', processed: 'Apdorota', purged: 'Turinys pašalintas' };\r\n  const issues = {\r\n    unmatched_channel_account: 'Nepavyko nustatyti kanalo paskyros',\r\n    provider_identity_conflict: 'Tiekėjo žinutės tapatybės nesutampa',\r\n    provider_recipient_conflict: 'Gavėjo duomenys nesutampa',\r\n    invalid_timestamp: 'Netinkamas įvykio laikas',\r\n    future_timestamp: 'Įvykio laikas daugiau kaip 5 min. vėlesnis už gavimo laiką. Reikalinga tiekėjo ir serverio laikrodžių patikra.',\r\n    unsupported_event: 'Šis įvykio tipas dar neapdorojamas',\r\n    unsupported_status: 'Neatpažinta tiekėjo būsena',\r\n    invalid_content: 'Netinkama turinio struktūra', invalid_event: 'Netinkama įvykio struktūra',\r\n    unsupported_provider: 'Nepalaikomas tiekėjas', projection_interrupted: 'Apdorojimas nutrūko',\r\n    receipt_content_purged: 'Įvykio turinys pašalintas',\r\n    history_source_missing: 'Istorijos šaltinio įrašo nebėra. Pakartojimas jo neatkurs. Kreipkitės į IT, kad trūkumas būtų užregistruotas istorijos perkėlimo patikroje.',\r\n    history_content_conflict: 'Išsaugotas žinutės turinys nesutampa su istorijos šaltiniu. Turinys neperrašytas. Reikalinga IT patikra; pakartojimas neatitikimo neištaisys.',\r\n  };\r\n  let rows = [], nextBefore = null, snapshot = null, filter = 'review';\r\n  let repairItems = [];\r\n  let loading = true, selecting = false, saving = false, error = '', success = '', reason = '', confirmed = false;\r\n  let alive = false, listGeneration = 0, selectionGeneration = 0, intent = null;\r\n  $: ready = snapshot?.replay_allowed && !loading && !selecting && !saving && !!reason.trim() && confirmed;\r\n\r\n  function report(problem) {\r\n    if (!alive || problem.name === 'AbortError') return;\r\n    error = problem.code || [401, 403].includes(problem.status) ? errorText(problem) : 'Nepavyko gauti atsakymo. Atnaujinkite būseną arba kartokite tą patį patikros veiksmą.';\r\n    if ([401, 403].includes(problem.status)) dispatch('denied', problem);\r\n  }\r\n\r\n  async function load(append = false) {\r\n    const generation = ++listGeneration;\r\n    loading = true;\r\n    const query = new URLSearchParams({ state: filter, limit: '25' });\r\n    if (append && nextBefore) query.set('before', nextBefore);\r\n    try {\r\n      const result = await api(`receipts/?${query}`);\r\n      if (!alive || generation !== listGeneration) return;\r\n      rows = append ? [...new Map([...rows, ...result.results].map(row => [row.id, row])).values()] : result.results;\r\n      nextBefore = result.next_before;\r\n    } catch (problem) { report(problem); }\r\n    finally { if (alive && generation === listGeneration) loading = false; }\r\n  }\r\n\r\n  async function inspect(id, preserveReason = false) {\r\n    const generation = ++selectionGeneration;\r\n    selecting = true; confirmed = false; repairItems = [];\r\n    if (!preserveReason) { reason = ''; intent = null; error = ''; success = ''; snapshot = null; }\r\n    try {\r\n      const result = await api(`receipts/${id}/`);\r\n      if (!alive || generation !== selectionGeneration) return;\r\n      snapshot = result;\r\n    } catch (problem) { report(problem); }\r\n    finally { if (alive && generation === selectionGeneration) selecting = false; }\r\n  }\r\n\r\n  async function refresh() {\r\n    error = '';\r\n    await load();\r\n    if (alive && snapshot) await inspect(snapshot.id, true);\r\n  }\r\n\r\n  async function submit() {\r\n    if (!ready) return;\r\n    saving = true; error = ''; success = '';\r\n    const id = snapshot.id;\r\n    const body = { expected_version: snapshot.version, reason: reason.trim() };\r\n    if (repairItems.length) body.route_repairs = (snapshot.route_repairs || [])\r\n      .filter(candidate => repairItems.includes(candidate.item))\r\n      .map(({ item, account_id }) => ({ item, account_id }));\r\n    const fingerprint = JSON.stringify({ id, ...body });\r\n    if (intent?.fingerprint !== fingerprint) intent = { fingerprint, key: crypto.randomUUID() };\r\n    try {\r\n      await api(`receipts/${id}/replay/`, { method: 'POST', body: { ...body, idempotency_key: intent.key } });\r\n      if (!alive) return;\r\n      success = 'Pakartotinis apdorojimas suplanuotas. Vykdymui reikalingas veikiantis apdorojimo procesas.';\r\n      confirmed = false;\r\n      await inspect(id, true);\r\n      await load();\r\n      dispatch('changed');\r\n    } catch (problem) {\r\n      report(problem);\r\n      if (alive && ['receipt_review_conflict', 'receipt_replay_unavailable', 'receipt_content_purged', 'receipt_route_repair_invalid', 'history_source_missing'].includes(problem.code)) {\r\n        await inspect(id, true);\r\n      }\r\n    } finally { if (alive) saving = false; }\r\n  }\r\n\r\n  function date(value) { return value ? new Date(value).toLocaleString('lt-LT') : '—'; }\r\n  onMount(() => { alive = true; void load(); return () => { alive = false; }; });\r\n</script>\r\n\r\n<section class=\"receipt-review\" aria-label=\"Gautų įvykių patikra\">\r\n  <header><h2>Gautų įvykių patikra</h2><button type=\"button\" on:click={() => dispatch('close')}>Uždaryti įvykių patikrą</button></header>\r\n  <p>Pakartotinai apdorojami išsaugoti tiekėjo duomenys, o ne siunčiamos žinutės klientui. Atkurti įrašai rodomi kaip istorija, be naujo atsakymo lango ar pranešimų telefonui.</p>\r\n  {#if error}<p class=\"error\" role=\"alert\">{error}</p>{/if}\r\n  {#if success}<p role=\"status\">{success}</p>{/if}\r\n  <div class=\"tools\"><label>Įvykių būsena<select bind:value={filter} disabled={saving || loading} on:change={() => load()}>\r\n    {#each Object.entries(states) as [value, label]}<option {value}>{label}</option>{/each}\r\n  </select></label><button type=\"button\" disabled={loading || saving || selecting} on:click={refresh}>Atnaujinti įvykius</button></div>\r\n  <div class=\"review-columns\">\r\n    <div class=\"queue\">\r\n      {#if loading}<p role=\"status\">Įkeliami įvykiai…</p>{/if}\r\n      {#each rows as row (row.id)}\r\n        <button class=\"row\" type=\"button\" disabled={saving || selecting} aria-label={`Peržiūrėti įvykį ${row.id}`} on:click={() => inspect(row.id)}>\r\n          <strong>#{row.id} · {row.provider}</strong><span>{states[row.state] || row.state} · {date(row.received_at)}</span>\r\n        </button>\r\n      {:else}{#if !loading}<p>Pasirinktos būsenos įvykių nėra.</p>{/if}{/each}\r\n      {#if nextBefore}<button type=\"button\" disabled={loading || saving} on:click={() => load(true)}>Daugiau įvykių</button>{/if}\r\n    </div>\r\n    <div class=\"inspection\">\r\n      {#if selecting}<p role=\"status\">Tikrinama įvykio būsena…</p>\r\n      {:else if snapshot}\r\n        <h3>Įvykis #{snapshot.id} · {snapshot.provider}</h3>\r\n        <p>{states[snapshot.state] || snapshot.state} · Bandymų: {snapshot.attempts}</p>\r\n        {#each snapshot.issues as issue}<p>{issue.item == null ? '' : `Dalis ${issue.item + 1}: `}{issues[issue.code] || 'Neatpažintas įvykis. Reikalinga IT patikra.'}</p>{/each}\r\n        {#if snapshot.issue_count > snapshot.issues.length}<p>Rodoma {snapshot.issues.length} iš {snapshot.issue_count} problemų. Išsamiai patikrai kreipkitės į IT.</p>{/if}\r\n        {#if snapshot.content_purged}<p>Įvykio turinys pašalintas. Pakartotinis apdorojimas negalimas.</p>{/if}\r\n        {#if snapshot.replay_allowed}\r\n          <form on:submit|preventDefault={submit}>\r\n            {#if snapshot.route_repairs?.length}\r\n              <fieldset disabled={saving}>\r\n                <legend>Paskyros susiejimo pataisa</legend>\r\n                <p>Pasirinkite tik patikrintą siuntėjo paskyrą. Pataisa išsaugoma audite; įprastas kartojimas paskyros nekeičia.</p>\r\n                {#each snapshot.route_repairs as candidate (candidate.item)}\r\n                  <label class=\"confirmation\"><input type=\"checkbox\" value={candidate.item} bind:group={repairItems} />Susieti {candidate.item + 1} dalį su {candidate.account_name}</label>\r\n                {/each}\r\n              </fieldset>\r\n            {/if}\r\n            <label>Pakartotinės patikros pagrindas<textarea bind:value={reason} maxlength=\"500\" rows=\"2\" disabled={saving} placeholder=\"Trumpa patikros nuoroda; be klientų duomenų\"></textarea></label>\r\n            <label class=\"confirmation\"><input type=\"checkbox\" bind:checked={confirmed} disabled={saving} />Patvirtinu, kad patikrinau priežastį ir galima pakartoti apdorojimą</label>\r\n            <button type=\"submit\" disabled={!ready}>{saving ? 'Registruojama…' : repairItems.length ? 'Susieti ir pakartoti apdorojimą' : 'Pakartoti apdorojimą'}</button>\r\n          </form>\r\n        {/if}\r\n        {#if snapshot.recent_replays?.length}\r\n          <details><summary>Naujausi patikros sprendimai</summary><ul>\r\n            {#each snapshot.recent_replays as event (event.id)}<li>{date(event.created_at)} · {event.actor?.name || 'Buvęs darbuotojas'}<p>{event.reason}</p></li>{/each}\r\n          </ul>{#if snapshot.older_replays_exist}<p>Rodomi paskutiniai 20 sprendimų. Senesnius įrašus gali patikrinti IT.</p>{/if}</details>\r\n        {/if}\r\n      {:else}<p>Pasirinkite įvykį patikrai. Kliento žinutės turinys čia nerodomas.</p>{/if}\r\n    </div>\r\n  </div>\r\n</section>\r\n\r\n<style>\r\n  .receipt-review{padding:16px 24px;border-bottom:1px solid #e8d2bb;background:#fff7ef;max-height:55vh;overflow:auto;font:12px/1.5 Inter,system-ui,sans-serif;flex-shrink:0;color:#25231f}\r\n  header,.tools{display:flex;align-items:center;justify-content:space-between;gap:12px}h2,h3{margin:0;font-size:15px}p{margin:10px 0}.tools{justify-content:flex-start;margin-bottom:12px}.review-columns{display:grid;grid-template-columns:minmax(180px,1fr) minmax(260px,2fr);gap:20px}.queue{display:flex;flex-direction:column;gap:6px}.row{display:flex;flex-direction:column;gap:4px;text-align:left}.row span{font-size:11px}.inspection{min-width:0;overflow-wrap:anywhere}\r\n  button,input,textarea,select{font:inherit;border:1px solid #bfb7a8;border-radius:6px;padding:8px;background:#fff;color:#25231f;box-sizing:border-box}button{cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}label{display:flex;flex-direction:column;gap:5px}form{display:flex;flex-direction:column;gap:10px}textarea{width:100%;resize:vertical}.confirmation{flex-direction:row;align-items:center}.confirmation input{width:18px;height:18px;flex-shrink:0}form>button{align-self:flex-start;background:#ba4510;color:#fff}.error{color:#922c19}details{margin-top:12px}summary{cursor:pointer}:focus-visible{outline:2px solid #d95513;outline-offset:2px}\r\n  @media(max-width:760px){.receipt-review{padding:12px;flex:1;min-height:0;max-height:none}.review-columns{grid-template-columns:1fr}.queue{max-height:140px;overflow:auto}input,textarea,select{font-size:16px}}\r\n</style>\r\n","// Recovery stores only public identifiers. A lost POST response is recovered\r\n// with GET, never by silently creating another phone notification.\r\nexport const TEST_KEY = 'tutory:inbox-push-test:v1';\r\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\r\nconst states = ['pending', 'leased', 'accepted', 'unknown', 'failed', 'cancelled', 'expired'];\r\n\r\nexport function recoverPhoneTest(ownerId) {\r\n  const raw = localStorage.getItem(TEST_KEY);\r\n  if (!raw) return null;\r\n  const value = JSON.parse(raw);\r\n  if (!UUID.test(value?.request_key) || !UUID.test(value?.subscription_id) ||\r\n      !UUID.test(value?.generation) || !Number.isSafeInteger(value?.owner_id)) throw new Error('Invalid test record');\r\n  return value.owner_id === ownerId ? {\r\n    request_key: value.request_key, subscription_id: value.subscription_id,\r\n    generation: value.generation, owner_id: value.owner_id,\r\n  } : null;\r\n}\r\n\r\nexport function preparePhoneTest(binding, ownerId) {\r\n  if (binding?.owner_id !== ownerId || binding.revoked !== false ||\r\n      !UUID.test(binding.id) || !UUID.test(binding.generation)) throw new Error('Invalid device');\r\n  const record = { request_key: crypto.randomUUID(), subscription_id: binding.id,\r\n    generation: binding.generation, owner_id: ownerId };\r\n  localStorage.setItem(TEST_KEY, JSON.stringify(record));\r\n  return record;\r\n}\r\n\r\nexport function validatePhoneTest(result, record) {\r\n  if (result?.id !== record.request_key || result.subscription_id !== record.subscription_id ||\r\n      result.generation !== record.generation || !states.includes(result.state) ||\r\n      result.display_confirmed !== false || !Number.isFinite(Date.parse(result.expires_at)))\r\n    throw new Error('Invalid test response');\r\n  return { state: result.state, expires_at: result.expires_at };\r\n}\r\n\r\nexport function phoneTestDescription(result) {\r\n  return ({\r\n    pending: 'Bandomasis pranešimas eilėje. Galite patikrinti jo būseną.',\r\n    leased: 'Bandomasis pranešimas perduodamas. Galite patikrinti jo būseną.',\r\n    accepted: 'Pranešimų tarnyba priėmė testą. Tai dar nepatvirtina, kad iPhone jį parodė — patikrinkite telefoną.',\r\n    unknown: 'Nežinoma, ar pranešimų tarnyba priėmė testą. Automatiškai nekartosime; patikrinkite telefoną.',\r\n    failed: 'Testo perduoti nepavyko. Patikrinkite telefono registraciją ir serverio konfigūraciją.',\r\n    cancelled: 'Testas atšauktas. Patikrinkite telefono registraciją.',\r\n    expired: 'Testo galiojimas baigėsi. Naują testą galite siųsti atskiru paspaudimu.',\r\n  })[result?.state] || 'Testo rezultatas dar nepatvirtintas. Pirmiausia patikrinkite jo būseną.';\r\n}\r\n","<script>\r\n  import { createEventDispatcher, onMount } from 'svelte';\r\n  import { disconnectPhone, enrollPhone, phoneCanEnroll, phoneWorkerCommand, retryPhoneCleanup } from './phoneEnrollment.js';\r\n  import { recoverPhoneTest, preparePhoneTest, validatePhoneTest, phoneTestDescription } from './phoneDiagnostics.js';\r\n  import { registerUpdateGuard } from './appUpdates.js';\r\n  import { enrollmentErrorCode } from './phoneEnrollmentErrors.js';\r\n\r\n  export let api = null;\r\n  export let ownerId = null;\r\n  const dispatch = createEventDispatcher();\r\n  let alive = false, busy = false, attempted = false, blocked = false;\r\n  let snapshot = null, notifyInbound = false, preview = 'generic', error = '', success = '';\r\n  let phoneConfig = null, phoneBusy = false, phoneBinding = null, phoneNotice = '', phoneError = '', phoneEpoch = 0;\r\n  let credential = null;\r\n  let testRecord = null, testResult = null, testBusy = false, testError = '';\r\n  $: changed = snapshot && (snapshot.enabled !== notifyInbound || snapshot.preview !== preview);\r\n  $: testPending = testRecord && (!testResult || ['pending', 'leased'].includes(testResult.state));\r\n\r\n  function validPreferences(value) {\r\n    return value && typeof value.enabled === 'boolean' && ['snippet', 'generic'].includes(value.preview);\r\n  }\r\n\r\n  function denied(problem) {\r\n    snapshot = null;\r\n    phoneConfig = null;\r\n    error = 'Patikrinkite prisijungimą ir iš naujo atverkite pašto dėžutę.';\r\n    dispatch('denied', problem);\r\n  }\r\n\r\n  async function loadPreferences() {\r\n    if (busy || !api) return;\r\n    const client = api, owner = ownerId;\r\n    busy = true; attempted = true; blocked = true; error = ''; success = ''; snapshot = null; phoneConfig = null;\r\n    try {\r\n      const result = await client('push/');\r\n      if (!alive || client !== api || owner !== ownerId) return;\r\n      if (result.user_id !== owner) { denied({ status: 401 }); return; }\r\n      if (!validPreferences(result.notifications)) throw new Error('Invalid notification preferences');\r\n      phoneConfig = result;\r\n      credential = localStorage.getItem('jwtToken');\r\n      snapshot = { ...result.notifications };\r\n      notifyInbound = snapshot.enabled; preview = snapshot.preview; blocked = false;\r\n      testRecord = recoverPhoneTest(owner); testResult = null; testError = '';\r\n      // Opening settings may recover an existing device, but never enrolls it\r\n      // or sends a diagnostic without a separate explicit click.\r\n      try {\r\n        const state = await phoneWorkerCommand('state');\r\n        if (state.binding?.owner_id === owner) {\r\n          const verified = await client(`push/subscriptions/${state.binding.id}/`, { timeoutMs: 10000 });\r\n          if (alive && client === api && owner === ownerId && credential === localStorage.getItem('jwtToken') &&\r\n              verified.id === state.binding.id && verified.generation === state.binding.generation &&\r\n              verified.owner_id === owner && verified.revoked === false) phoneBinding = verified;\r\n        }\r\n      } catch { /* Settings remain useful when this phone is not enrolled. */ }\r\n    } catch (problem) {\r\n      if (!alive || client !== api || owner !== ownerId || problem.name === 'AbortError') return;\r\n      if ([401, 403].includes(problem.status)) denied(problem);\r\n      else error = 'Nepavyko įkelti nuostatų. Bandykite dar kartą, kai ryšys veiks.';\r\n    } finally { if (alive && client === api && owner === ownerId) busy = false; }\r\n  }\r\n\r\n  async function savePreferences() {\r\n    if (busy || blocked || !snapshot || !changed) return;\r\n    const client = api, owner = ownerId;\r\n    busy = true; error = ''; success = '';\r\n    try {\r\n      const result = await client('push/preferences/', { method: 'PATCH',\r\n        body: { expected: snapshot, enabled: notifyInbound, preview } });\r\n      if (!alive || client !== api || owner !== ownerId) return;\r\n      if (!validPreferences(result)) throw new Error('Invalid notification preferences');\r\n      snapshot = { ...result }; notifyInbound = result.enabled; preview = result.preview;\r\n      success = 'Nuostatos išsaugotos. Šio telefono registracija ir pristatymas tikrinami atskirai.';\r\n    } catch (problem) {\r\n      if (!alive || client !== api || owner !== ownerId || problem.name === 'AbortError') return;\r\n      blocked = true;\r\n      if ([401, 403].includes(problem.status)) denied(problem);\r\n      else error = problem.code === 'push_preferences_conflict'\r\n        ? 'Nuostatos pasikeitė kitame lange. Įkelkite esamas nuostatas prieš išsaugodami dar kartą.'\r\n        : 'Nežinoma, ar nuostatos išsaugotos. Pirmiausia įkelkite esamas nuostatas; automatiškai nekartosime.';\r\n    } finally { if (alive && client === api && owner === ownerId) busy = false; }\r\n  }\r\n\r\n  async function enablePhone() {\r\n    if (phoneBusy) return;\r\n    const client = api, owner = ownerId, epoch = ++phoneEpoch;\r\n    phoneBusy = true; phoneError = ''; phoneNotice = '';\r\n    try {\r\n      phoneBinding = await enrollPhone({ api: client, config: phoneConfig, ownerId: owner,\r\n        current: () => alive && epoch === phoneEpoch && client === api && owner === ownerId });\r\n      if (alive && epoch === phoneEpoch) phoneNotice = 'Telefonas užregistruotas. Pranešimų pristatymas dar turi būti patikrintas šiame iPhone.';\r\n    } catch (problem) {\r\n      if (alive && epoch === phoneEpoch) phoneError =\r\n        `Nepavyko patvirtinti telefono registracijos. Diagnostikos kodas: ${enrollmentErrorCode(problem)}. Perduokite šį kodą IT; automatiškai nekartosime.`;\r\n    } finally {\r\n      if (alive && epoch === phoneEpoch) {\r\n        permission = Notification.permission;\r\n        phoneBusy = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  async function disablePhone() {\r\n    ++phoneEpoch;\r\n    phoneBusy = true; phoneError = ''; phoneNotice = ''; phoneBinding = null;\r\n    try {\r\n      const complete = await disconnectPhone(ownerId, credential);\r\n      if (alive) phoneNotice = complete ? 'Telefonas atjungtas.' : 'Telefono peržiūros išjungtos. Laukiama serverio patvirtinimo; ryšiui atsikūrus patikrinsime dar kartą.';\r\n    } catch {\r\n      if (alive) phoneError = 'Nepavyko užbaigti telefono atjungimo. Patikrinkite ryšį ir pranešimų leidimus iPhone nustatymuose.';\r\n    } finally { if (alive) phoneBusy = false; }\r\n  }\r\n\r\n  async function diagnostic(send) {\r\n    if (testBusy || phoneBusy || !api || (send && (!phoneBinding || testPending || !phoneCanEnroll(phoneConfig, ownerId)))) return;\r\n    const client = api, owner = ownerId, epoch = phoneEpoch, token = localStorage.getItem('jwtToken');\r\n    if (!token || token !== credential) return;\r\n    const current = () => alive && client === api && owner === ownerId && epoch === phoneEpoch &&\r\n      token === localStorage.getItem('jwtToken');\r\n    testBusy = true; testError = '';\r\n    try {\r\n      if (send) {\r\n        testRecord = preparePhoneTest(phoneBinding, owner);\r\n        testResult = null;\r\n      }\r\n      const record = testRecord;\r\n      if (!record) return;\r\n      const result = send\r\n        ? await client(`push/subscriptions/${record.subscription_id}/tests/`, { method: 'POST', timeoutMs: 10000,\r\n          body: { request_key: record.request_key, expected_generation: record.generation } })\r\n        : await client(`push/tests/${record.request_key}/`, { timeoutMs: 10000 });\r\n      if (current()) testResult = validatePhoneTest(result, record);\r\n    } catch (problem) {\r\n      if (current()) {\r\n        // A definitive rejection is safe to retry by another explicit click;\r\n        // transport errors leave the durable id available for status lookup.\r\n        if ([400, 403, 404, 409, 429, 503].includes(problem.status))\r\n          testResult = { state: 'failed' };\r\n        testError = problem.status === 429\r\n          ? 'Testo limitas pasiektas. Palaukite prieš siųsdami kitą testą.'\r\n          : 'Nepavyko patvirtinti testo rezultato. Patikrinkite būseną; automatiškai nekartosime.';\r\n      }\r\n    } finally { if (alive) testBusy = false; }\r\n  }\r\n\r\n  let dedicatedEntry = false, standalone = false, supported = false, permission = 'default';\r\n  onMount(() => {\r\n    alive = true;\r\n    const removeUpdateGuard = registerUpdateGuard(() => !busy && !phoneBusy && !testBusy &&\r\n      (!snapshot || (snapshot.enabled === notifyInbound && snapshot.preview === preview)));\r\n    dedicatedEntry = window.location.pathname === '/studentplayground/inbox/';\r\n    standalone = window.matchMedia('(display-mode: standalone)').matches || navigator.standalone === true;\r\n    supported = window.isSecureContext && 'serviceWorker' in navigator &&\r\n      typeof window.PushManager !== 'undefined' && typeof window.Notification !== 'undefined';\r\n    permission = typeof window.Notification !== 'undefined' ? window.Notification.permission : 'default';\r\n    credential = localStorage.getItem('jwtToken');\r\n    const logout = () => {\r\n      ++phoneEpoch; phoneBinding = null; phoneConfig = null;\r\n      testRecord = null; testResult = null; testError = '';\r\n      void disablePhone();\r\n    };\r\n    const storage = event => {\r\n      try {\r\n        if (event.storageArea && event.storageArea !== localStorage) return;\r\n        if (localStorage.getItem('jwtToken') !== null) return;\r\n        if ((event.key === 'jwtToken' && event.newValue === null) || event.key === null) logout();\r\n      } catch {}\r\n    };\r\n    const reconnect = () => { void retryPhoneCleanup(ownerId, credential).catch(() => {}); };\r\n    window.addEventListener('tutory:logout', logout);\r\n    window.addEventListener('storage', storage);\r\n    window.addEventListener('online', reconnect);\r\n    return () => {\r\n      alive = false; ++phoneEpoch;\r\n      removeUpdateGuard();\r\n      window.removeEventListener('tutory:logout', logout);\r\n      window.removeEventListener('storage', storage);\r\n      window.removeEventListener('online', reconnect);\r\n    };\r\n  });\r\n</script>\r\n\r\n<details class=\"device-setup\">\r\n  <summary>Naudojimas telefone</summary>\r\n  <section aria-label=\"Telefono paruošimas\">\r\n    {#if !dedicatedEntry}\r\n      <p>Telefonui skirta atskira „Tutory žinutės“ piktograma. Mokinių programėlės keisti nereikia.</p>\r\n      <a href=\"/studentplayground/inbox/#/inbox\">Atverti telefono diegimo puslapį</a>\r\n    {:else if !standalone}\r\n      <ol>\r\n        <li>Atverkite šį puslapį „Safari“ ir pasirinkite bendrinimą → „Pridėti prie pradžios ekrano“ (Add to Home Screen).</li>\r\n        <li>Atverkite naują piktogramą „Tutory žinutės“ ir prisijunkite savo asmenine darbuotojo paskyra.</li>\r\n      </ol>\r\n    {:else}\r\n      <p>Atverta iš pradžios ekrano.</p>\r\n    {/if}\r\n    {#if dedicatedEntry && standalone}\r\n      {#if !supported}\r\n        <p>Šiame lange nėra visų pranešimams reikalingų naršyklės funkcijų. Patikrinkite, ar puslapis atvertas iš pradžios ekrano ir naudojamas saugus HTTPS ryšys.</p>\r\n      {:else if permission === 'denied'}\r\n        <p>Leidimas užblokuotas. Peržiūrėkite šios programėlės pranešimų leidimus iPhone nustatymuose. Pakartotinai leidimo neprašysime.</p>\r\n      {:else if permission === 'granted'}\r\n        <p>Naršyklės leidimas suteiktas, bet tai dar nepatvirtina pranešimų pristatymo.</p>\r\n      {:else}\r\n        <p>Naršyklės leidimas pranešimams dar nesuteiktas.</p>\r\n      {/if}\r\n    {/if}\r\n    <p class=\"pending\">Vien piktogramos įdiegimas pranešimų neįjungia. Užregistruokite telefoną ir patikrinkite pristatymą bandomuoju pranešimu. Klientų žinučių gavimas tikrinamas atskirai.</p>\r\n    {#if phoneConfig?.origin_matches === false && phoneConfig?.inbox_url}\r\n      <p role=\"alert\">Šis adresas nesutampa su pranešimų adresu. Atverkite tinkamą adresą „Safari“ ir pridėkite jį prie pradžios ekrano. Nauju adresu gali reikėti prisijungti ir užregistruoti telefoną dar kartą.</p>\r\n      <a href={phoneConfig.inbox_url}>Atverti tinkamą pašto dėžutės adresą</a>\r\n    {/if}\r\n    {#if dedicatedEntry && standalone && supported && phoneConfig?.user_id === ownerId}\r\n      <div class=\"phone-enrollment\">\r\n        {#if phoneCanEnroll(phoneConfig, ownerId)}\r\n          <button type=\"button\" disabled={phoneBusy || permission === 'denied' || !!phoneBinding} on:click={enablePhone}>Įjungti telefono pranešimus</button>\r\n        {/if}\r\n        <button type=\"button\" disabled={phoneBusy} on:click={disablePhone}>Atjungti šį telefoną</button>\r\n      </div>\r\n    {/if}\r\n    {#if phoneNotice}<p role=\"status\" aria-label=\"Telefono registracijos būsena\">{phoneNotice}</p>{/if}\r\n    {#if phoneError}<p role=\"alert\">{phoneError}</p>{/if}\r\n    {#if dedicatedEntry && standalone && supported && phoneConfig?.user_id === ownerId && (phoneBinding || testRecord)}\r\n      <div class=\"phone-test\">\r\n        <button type=\"button\" disabled={phoneBusy || testBusy || !phoneBinding || !!testPending || !phoneCanEnroll(phoneConfig, ownerId)}\r\n          on:click={() => diagnostic(true)}>Siųsti bandomąjį pranešimą</button>\r\n        {#if testRecord}\r\n          <button type=\"button\" disabled={phoneBusy || testBusy} on:click={() => diagnostic(false)}>Tikrinti testo būseną</button>\r\n          <p role=\"status\" aria-label=\"Bandomojo pranešimo būsena\">{phoneTestDescription(testResult)}</p>\r\n        {/if}\r\n        {#if testError}<p role=\"alert\">{testError}</p>{/if}\r\n        <p>Testas skirtas tik šiam telefonui: jis nesukuria žinutės pašto dėžutėje ir nesiunčia WhatsApp ar Viber žinutės. Jis nekeičia klientų pokalbių ar jūsų pranešimų nuostatų.</p>\r\n      </div>\r\n    {/if}\r\n    {#if api && ownerId}\r\n      <div class=\"preferences\">\r\n        <button type=\"button\" disabled={busy} on:click={loadPreferences}>{attempted ? 'Įkelti esamas nuostatas' : 'Pranešimų nuostatos'}</button>\r\n        {#if busy}<p role=\"status\">Tikrinamos nuostatos…</p>{/if}\r\n        {#if error}<p role=\"alert\">{error}</p>{/if}\r\n        {#if success && !changed}<p role=\"status\" aria-label=\"Pranešimų nuostatų būsena\">{success}</p>{/if}\r\n        {#if snapshot}\r\n          <form on:submit|preventDefault={savePreferences}>\r\n            <fieldset disabled={busy}>\r\n              <legend>Mano paskyros pranešimai</legend>\r\n              <label class=\"toggle\"><input type=\"checkbox\" bind:checked={notifyInbound} />Gauti naujų žinučių pranešimus</label>\r\n              <label class=\"preview\">Turinys užrakintame ekrane\r\n                <select bind:value={preview}>\r\n                  <option value=\"generic\">Tik bendras pranešimas</option>\r\n                  <option value=\"snippet\">Vardas, kanalas ir žinutės ištrauka</option>\r\n                </select>\r\n              </label>\r\n              <p>Nuostatos galioja visiems jūsų užregistruotiems įrenginiams. Kitų darbuotojų nuostatų jos nekeičia. Telefone leidimą vis tiek reikia suteikti atskirai.</p>\r\n              <button type=\"submit\" disabled={blocked || !changed}>Išsaugoti nuostatas</button>\r\n            </fieldset>\r\n          </form>\r\n        {/if}\r\n      </div>\r\n    {/if}\r\n  </section>\r\n</details>\r\n\r\n<style>\r\n  .device-setup { border-bottom: 1px solid #e5e1da; padding: .65rem 1rem; background: #faf9f6; color: #38332e; font-size: .85rem; }\r\n  summary { cursor: pointer; width: fit-content; font-weight: 600; }\r\n  summary:focus-visible, a:focus-visible { outline: 3px solid #c84b09; outline-offset: 4px; }\r\n  section { max-width: 44rem; line-height: 1.6; padding-top: .5rem; }\r\n  p { margin: .45rem 0; }\r\n  ol { margin: .45rem 0; padding-left: 1.4rem; }\r\n  a { color: #9c3800; text-underline-offset: .2em; }\r\n  .pending { color: #635b53; }\r\n  .preferences { margin-top: .75rem; border-top: 1px solid #e5e1da; padding-top: .75rem; }\r\n  fieldset { border: 0; padding: .75rem 0 0; margin: 0; min-width: 0; }\r\n  legend { font-weight: 600; }\r\n  .toggle { display: flex; align-items: center; gap: .5rem; padding: .5rem 0; }\r\n  .preview { display: grid; gap: .25rem; max-width: 24rem; }\r\n  select, button { font: inherit; min-height: 44px; border: 1px solid #bdb4aa; border-radius: .35rem; padding: .5rem .75rem; background: white; color: #38332e; }\r\n  button { cursor: pointer; }\r\n  button:disabled { cursor: default; opacity: .55; }\r\n  input { width: 1.1rem; height: 1.1rem; accent-color: #c84b09; }\r\n  input:focus-visible, select:focus-visible, button:focus-visible { outline: 3px solid #c84b09; outline-offset: 3px; }\r\n  [role=\"alert\"] { color: #982f20; }\r\n</style>\r\n","<script>\r\n  import { updateState, requestInboxUpdate } from './appUpdates.js';\r\n</script>\r\n\r\n{#if $updateState.available || $updateState.busy || $updateState.failed}\r\n  <section class=\"update\" role=\"status\" aria-label=\"Programėlės atnaujinimas\">\r\n    {#if $updateState.busy}\r\n      <p>Tikrinami atverti langai. Trumpam pristabdyta redagavimo galimybė; žinutės nebus siunčiamos.</p>\r\n    {:else if $updateState.failed}\r\n      <p>Programėlė neatnaujinta. Patikrinkite neišsaugotus juodraščius, neaiškias užklausas ir telefono nuostatas.\r\n        Užbaikite darbus kituose Tutory languose ir juos užverkite, tada bandykite dar kartą. Nieko automatiškai nekartosime.</p>\r\n    {:else}\r\n      <p>Yra nauja programėlės versija. Atnaujinsime tik tada, kai visi atverti langai bus pasiruošę.</p>\r\n    {/if}\r\n    {#if $updateState.available}\r\n      <button type=\"button\" disabled={$updateState.busy} on:click={requestInboxUpdate}>Saugiai atnaujinti</button>\r\n    {/if}\r\n  </section>\r\n{/if}\r\n\r\n<style>\r\n  .update { padding: .65rem 1rem; border-bottom: 1px solid #d3b39e; background: #fff4e9; color: #38332e; font-size: .85rem; }\r\n  p { margin: 0 0 .4rem; }\r\n  button { min-height: 44px; padding: .5rem .75rem; font: inherit; color: #9c3800; background: white; border: 1px solid #bdb4aa; border-radius: .35rem; cursor: pointer; }\r\n  button:disabled { opacity: .55; cursor: default; }\r\n  button:focus-visible { outline: 3px solid #c84b09; outline-offset: 3px; }\r\n</style>\r\n","// PostgreSQL stores microseconds; Date.parse alone collapses distinct positions.\r\nfunction submillisecond(value) {\r\n  return Number((/\\.(\\d+)(?:Z|[+-]\\d\\d:\\d\\d)$/.exec(value)?.[1] || '').padEnd(6, '0').slice(3, 6));\r\n}\r\n\r\nexport function compareMessages(left, right) {\r\n  return Date.parse(left.occurred_at) - Date.parse(right.occurred_at)\r\n    || submillisecond(left.occurred_at) - submillisecond(right.occurred_at)\r\n    || left.sequence - right.sequence;\r\n}\r\n\r\nexport function requireHistoryContract(options) {\r\n  const contract = options.history_contract;\r\n  if (contract?.version !== 2 || contract.order !== 'chronological' || contract.read !== 'message_ids') {\r\n    throw Object.assign(new Error('Unsupported inbox timeline'), { code: 'inbox_client_update_required' });\r\n  }\r\n}\r\n","<script>\r\n  import { onMount, tick } from 'svelte';\r\n  import { createInboxApi, errorText, parameterLabels, deliveryLabels } from './api.js';\r\n  import RecoveryPanel from './RecoveryPanel.svelte';\r\n  import TemplateVerificationPanel from './TemplateVerificationPanel.svelte';\r\n  import ReceiptReviewPanel from './ReceiptReviewPanel.svelte';\r\n  import DraftConflictPanel from './DraftConflictPanel.svelte';\r\n  import InboxDeviceSetup from './InboxDeviceSetup.svelte';\r\n  import InboxUpdate from './InboxUpdate.svelte';\r\n  import { registerUpdateGuard, updateState, updateFrozen } from './appUpdates.js';\r\n  import { createRecoverySession, requestDigest } from './browserRecovery.js';\r\n  import { conversationPath, inboxLoginHref } from './navigation.js';\r\n  import { registerNavigationGuard } from '../navigationGuard.js';\r\n  import { compareMessages, requireHistoryContract } from './timeline.js';\r\n\r\n  export let params = {};\r\n  export let onRouteEvent = null;\r\n  let observedRoute = null;\r\n  let options = null, conversations = [], selected = null, messages = [], templates = [];\r\n  let loading = true, loadingThread = false, error = '', needsLogin = false, online = true;\r\n  let filter = 'all', channel = '', search = '', nextCursor = null, olderCursor = null;\r\n  let text = '', mode = 'reply', templateId = '', parameters = {}, draftVersion = 0;\r\n  let dirty = false, draftConflict = false, saving = false, sending = false, draftEdit = 0;\r\n  let conflictingDraft = null, conflictLoading = false, resolvingDraft = false;\r\n  let showContacts = false, contacts = [], contactSearch = '', timeline, newMessages = false;\r\n  let api, alive = false, cursor = 0, selectionGeneration = 0, listGeneration = 0;\r\n  let sessionController, sessionToken, sessionGeneration = 0;\r\n  let checkingSession = false, sessionCheckFailed = false;\r\n  let pollTimer, draftTimer, searchTimer, polling = false, initialized = false;\r\n  let saveChain = Promise.resolve();\r\n  let pendingRequests = [], preparedRequest = null, recovering = false, submissionNotice = '';\r\n  let recovery = null, recoveryStorageIssue = '';\r\n  let recoveryMessage = null;\r\n  let showTemplateVerification = false;\r\n  let showReceiptReview = false;\r\n  let openingSnapshot = null;\r\n  let positioningHistory = false, loadingOlder = false, olderHistoryChanged = false;\r\n  let resyncRequired = false, resyncNeedsReload = false, resyncLatest = false;\r\n  let readObserver;\r\n  const readPositions = new Map();\r\n  const readPending = new Set(), messageNodes = new Map();\r\n\r\n  $: if (alive && initialized && observedRoute !== (params.id || '')) {\r\n    observedRoute = params.id || '';\r\n    if (observedRoute !== (selected?.id || '')) void openThread(observedRoute);\r\n  }\r\n\r\n  $: template = templates.find(item => String(item.id) === String(templateId));\r\n  $: preview = template ? template.body.replace(/{{\\s*(\\w+)\\s*}}/g, (_, key) => {\r\n    const name = template.parameter_format === 'positional' ? template.parameter_names[Number(key) - 1] : key;\r\n    return parameters[name] || `{{${name}}}`;\r\n  }) : '';\r\n  $: recoveryPending = !!preparedRequest || pendingRequests.some(item => item.state === 'pending');\r\n  $: canSend = online && !checkingSession && !resyncRequired && !sending && !recovering && !loadingThread && !draftConflict && !resolvingDraft && !preparedRequest && (mode === 'note' ? !!text.trim()\r\n    : mode === 'template' ? !!template && template.parameter_names.every(name => parameters[name]?.trim())\r\n    : selected?.capabilities.text && !!text.trim());\r\n\r\n  function fail(problem) {\r\n    if (!alive || problem.name === 'AbortError') return;\r\n    error = errorText(problem);\r\n    if ([401, 403].includes(problem.status)) {\r\n      sessionGeneration += 1; sessionController?.abort(); checkingSession = false; sessionCheckFailed = false;\r\n      needsLogin = problem.status === 401;\r\n      initialized = false; options = null; selected = null; conversations = []; messages = []; text = '';\r\n      preparedRequest = null; pendingRequests = []; templates = []; parameters = {}; contacts = [];\r\n      recovery = null; recoveryStorageIssue = '';\r\n      conflictingDraft = null; conflictLoading = false; resolvingDraft = false;\r\n      dirty = false; draftConflict = false; selectionGeneration += 1; listGeneration += 1;\r\n      sending = false; saving = false; recovering = false; polling = false; loadingThread = false;\r\n      readPositions.clear(); readPending.clear(); openingSnapshot = null;\r\n      resyncRequired = false; resyncNeedsReload = false; resyncLatest = false;\r\n      clearTimeout(pollTimer); clearTimeout(draftTimer);\r\n    }\r\n  }\r\n\r\n  async function checkSession(retry = false) {\r\n    if (!alive) return;\r\n    const token = localStorage.getItem('jwtToken');\r\n    if (!token || !options?.user?.id) { fail({ status: 401 }); return; }\r\n    if (token === sessionToken && !retry) return;\r\n    const owner = options.user.id, generation = ++sessionGeneration;\r\n    sessionToken = token;\r\n    checkingSession = true; sessionCheckFailed = false; initialized = false;\r\n    selectionGeneration += 1; listGeneration += 1;\r\n    sessionController?.abort();\r\n    clearTimeout(pollTimer); clearTimeout(draftTimer); clearTimeout(searchTimer);\r\n    saving = false; sending = false; recovering = false; polling = false;\r\n    conflictLoading = false; resolvingDraft = false; loadingThread = false;\r\n    // In-flight reads belong to the old credential generation. Only confirmed\r\n    // acknowledgements survive; the verified session must be able to retry them.\r\n    readPending.clear(); openingSnapshot = null; loadingOlder = false; positioningHistory = false;\r\n    saveChain = Promise.resolve();\r\n    sessionController = new AbortController();\r\n    const verifiedApi = createInboxApi(sessionController.signal, () => { void checkSession(); });\r\n    try {\r\n      const verified = await verifiedApi('options/');\r\n      if (!alive || generation !== sessionGeneration) return;\r\n      // Only the authenticated server identity can authorize retaining a draft.\r\n      // Never trust decoded JWT claims, names or browser account metadata.\r\n      if (verified.user?.id !== owner) { fail({ status: 401 }); return; }\r\n      requireHistoryContract(verified);\r\n      api = verifiedApi; options = verified; needsLogin = false;\r\n      checkingSession = false; initialized = true; loading = false; error = '';\r\n      if (!selected) observedRoute = null;\r\n      // Keep the old committed cursor: replacing it with verification's newer\r\n      // cursor would skip messages received during this identity check.\r\n      await reconcilePending();\r\n      if (!alive || generation !== sessionGeneration) return;\r\n      if (draftConflict) void loadDraftConflict();\r\n      void poll();\r\n    } catch (problem) {\r\n      if (!alive || generation !== sessionGeneration || problem.name === 'AbortError') return;\r\n      if ([401, 403].includes(problem.status)) fail(problem);\r\n      else sessionCheckFailed = true; // Private state stays hidden, in memory only.\r\n    }\r\n  }\r\n\r\n  function listQuery(append = false) {\r\n    const query = new URLSearchParams({ filter, limit: '30' });\r\n    if (channel) query.set('channel', channel);\r\n    if (search.trim()) query.set('q', search.trim());\r\n    if (append && nextCursor) query.set('before', nextCursor);\r\n    return query;\r\n  }\r\n\r\n  async function loadList(append = false) {\r\n    const generation = ++listGeneration, query = listQuery(append);\r\n    const data = await api(`conversations/?${query}`);\r\n    if (!alive || generation !== listGeneration) return;\r\n    conversations = append ? [...new Map([...conversations, ...data.results].map(item => [item.id, item])).values()] : data.results;\r\n    nextCursor = data.next_cursor;\r\n  }\r\n\r\n  async function bootstrap() {\r\n    try {\r\n      const data = await api('options/');\r\n      if (!alive) return;\r\n      requireHistoryContract(data);\r\n      options = data; cursor = data.cursor;\r\n      recovery = createRecoverySession(data.user.id, code => { if (alive) recoveryStorageIssue = code; });\r\n      await loadList();\r\n      initialized = true;\r\n    } catch (problem) { fail(problem); }\r\n    finally { if (alive) loading = false; }\r\n  }\r\n\r\n  function nearBottom() { return !timeline || timeline.scrollHeight - timeline.scrollTop - timeline.clientHeight < 40; }\r\n\r\n  function trackMessage(node, id) {\r\n    messageNodes.set(id, node); readObserver?.observe(node);\r\n    return { destroy() { readObserver?.unobserve(node); if (messageNodes.get(id) === node) messageNodes.delete(id); } };\r\n  }\r\n\r\n  function visibleNode(node) {\r\n    if (!timeline || !node) return false;\r\n    const bounds = timeline.getBoundingClientRect(), rect = node.getBoundingClientRect();\r\n    return bounds.height > 0 && rect.width > 0 && rect.height > 0\r\n      && Math.min(bounds.bottom, window.innerHeight, rect.bottom) - Math.max(bounds.top, 0, rect.top) >= Math.min(24, rect.height);\r\n  }\r\n\r\n  function scrollAnchor() {\r\n    const message = messages.find(item => visibleNode(messageNodes.get(item.id)));\r\n    return message ? { id: message.id, offset: messageNodes.get(message.id).getBoundingClientRect().top - timeline.getBoundingClientRect().top } : null;\r\n  }\r\n\r\n  function restoreAnchor(anchor) {\r\n    const node = anchor && messageNodes.get(anchor.id);\r\n    if (timeline && node) timeline.scrollTop += node.getBoundingClientRect().top - timeline.getBoundingClientRect().top - anchor.offset;\r\n  }\r\n\r\n  async function markDisplayed() {\r\n    if (!alive || !online || !selected || checkingSession || resyncRequired || loadingThread || positioningHistory || document.hidden) return;\r\n    const ident = selected.id, generation = sessionGeneration;\r\n    const acknowledged = readPositions.get(ident) || new Set();\r\n    const ids = messages.filter(item => item.direction === 'inbound' && item.kind === 'message' && !item.historical\r\n      && !acknowledged.has(item.id) && !readPending.has(item.id) && visibleNode(messageNodes.get(item.id)))\r\n      .slice(0, 100).map(item => item.id);\r\n    if (!ids.length) return;\r\n    ids.forEach(id => readPending.add(id));\r\n    try {\r\n      const result = await api(`conversations/${ident}/read/`, { method: 'POST', body: { message_ids: ids } });\r\n      if (!alive || generation !== sessionGeneration) return;\r\n      if (!Array.isArray(result.message_ids) || result.message_ids.length !== ids.length || !ids.every(id => result.message_ids.includes(id))) {\r\n        throw Object.assign(new Error('Unconfirmed read acknowledgement'), { code: 'invalid_read_confirmation' });\r\n      }\r\n      ids.forEach(id => acknowledged.add(id)); readPositions.set(ident, acknowledged);\r\n    } catch (problem) {\r\n      if (alive && generation === sessionGeneration && (selected?.id === ident || [401, 403].includes(problem.status))) fail(problem);\r\n    } finally { if (generation === sessionGeneration) ids.forEach(id => readPending.delete(id)); }\r\n  }\r\n\r\n  async function scrollToLatest() {\r\n    const ident = selected?.id;\r\n    positioningHistory = true;\r\n    await tick();\r\n    if (!alive || selected?.id !== ident) return;\r\n    if (timeline) timeline.scrollTop = timeline.scrollHeight;\r\n    newMessages = false; positioningHistory = false;\r\n    await markDisplayed();\r\n  }\r\n\r\n  async function navigateThread(ident) {\r\n    if (sending || checkingSession) return;\r\n    await flushDraft();\r\n    if (dirty || draftConflict) { error = errorText({ code: 'draft_not_saved' }); return; }\r\n    // The router owns navigation. Never render an editable target composer and\r\n    // then change routes: that can remount it after the user has already typed.\r\n    if (onRouteEvent) onRouteEvent({ type: 'inbox-thread', id: ident });\r\n    else await openThread(ident); // Also usable as an embedded, non-routed panel.\r\n  }\r\n\r\n  async function openThread(ident) {\r\n    if (sending || checkingSession) return;\r\n    await flushDraft();\r\n    if (dirty || draftConflict) { error = errorText({ code: 'draft_not_saved' }); return; }\r\n    const generation = ++selectionGeneration;\r\n    openingSnapshot = ident ? { id: ident, messages: new Map(), thread: null } : null;\r\n    positioningHistory = true; loadingOlder = false; olderHistoryChanged = false;\r\n    // Never leave another customer's history visible under a failed/changed URL.\r\n    selected = null; messages = []; templates = []; text = ''; parameters = {};\r\n    preparedRequest = null; pendingRequests = []; submissionNotice = '';\r\n    loadingThread = true; error = ''; showContacts = false; recoveryMessage = null; showTemplateVerification = false;\r\n    if (!conversationPath(ident)) {\r\n      loadingThread = false; error = errorText({ code: 'conversation_unavailable' }); return;\r\n    }\r\n    if (!ident) {\r\n      loadingThread = false;\r\n      return;\r\n    }\r\n    try {\r\n      const [thread, history, available, draft] = await Promise.all([\r\n        api(`conversations/${ident}/`), api(`conversations/${ident}/messages/?order=chronological`),\r\n        api(`conversations/${ident}/templates/`), api(`conversations/${ident}/draft/`),\r\n      ]);\r\n      if (!alive || generation !== selectionGeneration) return;\r\n      selected = thread; messages = []; mergeMessages(history.results); olderCursor = history.older_cursor; templates = available.results;\r\n      if (openingSnapshot?.id === ident) {\r\n        if (openingSnapshot.thread?.revision > selected.revision) selected = openingSnapshot.thread;\r\n        const loaded = new Set(messages.map(message => message.id));\r\n        mergeMessages([...openingSnapshot.messages.values()].filter(message => loaded.has(message.id)));\r\n        openingSnapshot = null;\r\n      }\r\n      preparedRequest = null;\r\n      applyDraft(draft);\r\n      draftEdit = 0; loadingThread = false; newMessages = false; submissionNotice = '';\r\n      pendingRequests = recovery.read(ident);\r\n      await reconcilePending();\r\n      await scrollToLatest();\r\n    } catch (problem) {\r\n      if (generation === selectionGeneration) fail(problem.status === 404 ? { code: 'conversation_unavailable' } : problem);\r\n    }\r\n    finally { if (generation === selectionGeneration) loadingThread = false; }\r\n  }\r\n\r\n  function applyDraft(draft) {\r\n    text = draft.text; mode = draft.mode; templateId = draft.template_id == null ? '' : String(draft.template_id);\r\n    parameters = draft.parameters; draftVersion = draft.version; dirty = false; draftConflict = false;\r\n    conflictingDraft = null;\r\n  }\r\n\r\n  function draftPayload() {\r\n    return { text, mode, template_id: templateId ? Number(templateId) : null, parameters: { ...parameters } };\r\n  }\r\n\r\n  async function loadDraftConflict() {\r\n    if (!selected || !draftConflict || !online || conflictLoading) return;\r\n    const ident = selected.id, generation = selectionGeneration;\r\n    conflictLoading = true;\r\n    // An explicit refresh must not leave actions enabled for an older preview.\r\n    conflictingDraft = null;\r\n    try {\r\n      const snapshot = await api(`conversations/${ident}/draft/`);\r\n      if (!alive || generation !== selectionGeneration || selected?.id !== ident || !draftConflict) return;\r\n      conflictingDraft = snapshot;\r\n    } catch (problem) { if (generation === selectionGeneration) fail(problem); }\r\n    finally { if (alive && generation === selectionGeneration) conflictLoading = false; }\r\n  }\r\n\r\n  async function resolveDraftConflict(choice) {\r\n    if (!selected || !draftConflict || !conflictingDraft || !online || conflictLoading || resolvingDraft || saving || sending) return;\r\n    if (choice === 'server') {\r\n      // Adopt exactly the preview the user chose. No write or send; a later\r\n      // remote edit will still be caught by the next expected-version check.\r\n      applyDraft(conflictingDraft); draftEdit += 1; error = '';\r\n      return;\r\n    }\r\n    if (choice !== 'local') return;\r\n    const ident = selected.id, generation = selectionGeneration, edit = draftEdit;\r\n    const body = { ...draftPayload(), expected_version: conflictingDraft.version };\r\n    resolvingDraft = true; error = ''; clearTimeout(draftTimer);\r\n    try {\r\n      const saved = await api(`conversations/${ident}/draft/`, { method: 'PUT', body });\r\n      if (!alive || generation !== selectionGeneration || selected?.id !== ident) return;\r\n      draftVersion = saved.version; draftConflict = false; conflictingDraft = null;\r\n      dirty = draftEdit !== edit;\r\n    } catch (problem) {\r\n      if (generation !== selectionGeneration) return;\r\n      fail(problem);\r\n      // Never retry a changed revision automatically. Show it for a new choice.\r\n      if (problem.code === 'draft_conflict') await loadDraftConflict();\r\n    } finally { if (alive && generation === selectionGeneration) resolvingDraft = false; }\r\n  }\r\n\r\n  async function reconcilePending() {\r\n    if (!selected || checkingSession || !online || recovering || sending || !options) return;\r\n    const ident = selected.id, generation = selectionGeneration, edit = draftEdit;\r\n    recovering = true;\r\n    try {\r\n      const server = await api(`conversations/${ident}/requests/`);\r\n      if (!alive || generation !== selectionGeneration || selected?.id !== ident) return;\r\n      preparedRequest = server.results[0] || null;\r\n      pendingRequests = recovery.read(ident);\r\n      for (const saved of pendingRequests.filter(item => item.state === 'pending')) {\r\n        const result = await api(`conversations/${ident}/reconcile/`, { method: 'POST', body: { idempotency_key: saved.key } });\r\n        if (!alive || generation !== selectionGeneration || selected?.id !== ident) return;\r\n        if (result.found && result.message?.id && result.message.conversation_id === ident) {\r\n          mergeMessages([result.message]);\r\n          if (!dirty && draftEdit === edit && draftVersion === saved.draftVersion) {\r\n            const latest = await api(`conversations/${ident}/draft/`);\r\n            if (!alive || generation !== selectionGeneration || selected?.id !== ident) return;\r\n            if (!dirty && draftEdit === edit) applyDraft(latest);\r\n          }\r\n          recovery.forget(saved.key);\r\n          if (preparedRequest?.key === saved.key) preparedRequest = null;\r\n          submissionNotice = 'Ankstesnė užklausa rasta. Nauja žinutė nebuvo siunčiama; pristatymo būseną matysite pokalbyje.';\r\n        } else if (result.found === false && result.request?.conversation_id === ident) {\r\n          if (result.request.state === 'prepared') preparedRequest = result.request;\r\n          else if (['cancelled', 'expired'].includes(result.request.state)) {\r\n            recovery.forget(saved.key);\r\n            if (preparedRequest?.key === saved.key) preparedRequest = null;\r\n          }\r\n        } else if (result.found !== false) {\r\n          throw Object.assign(new Error('Invalid reconciliation result'), { code: 'send_outcome_unknown' });\r\n        }\r\n      }\r\n      pendingRequests = recovery.read(ident);\r\n    } catch (problem) { fail(problem); }\r\n    finally { if (alive && generation === selectionGeneration) recovering = false; }\r\n  }\r\n\r\n  function edited() {\r\n    dirty = true; draftEdit += 1;\r\n    clearTimeout(draftTimer);\r\n    draftTimer = setTimeout(() => { void flushDraft(); }, 500);\r\n  }\r\n\r\n  function flushDraft() {\r\n    clearTimeout(draftTimer);\r\n    if (!selected || checkingSession || !dirty || !online || draftConflict || resolvingDraft) return saveChain;\r\n    const ident = selected.id, edit = draftEdit, generation = sessionGeneration, request = api;\r\n    const payload = draftPayload();\r\n    saveChain = saveChain.then(async () => {\r\n      if (!alive || generation !== sessionGeneration || selected?.id !== ident || draftConflict) return;\r\n      saving = true;\r\n      try {\r\n        const saved = await request(`conversations/${ident}/draft/`, { method: 'PUT', body: { ...payload, expected_version: draftVersion } });\r\n        if (!alive || generation !== sessionGeneration || selected?.id !== ident) return;\r\n        draftVersion = saved.version;\r\n        if (edit === draftEdit) dirty = false;\r\n      } catch (problem) {\r\n        if (generation !== sessionGeneration) return;\r\n        if (problem.code === 'draft_conflict') { draftConflict = true; void loadDraftConflict(); }\r\n        fail(problem);\r\n      } finally { if (alive && generation === sessionGeneration) saving = false; }\r\n    });\r\n    return saveChain;\r\n  }\r\n\r\n  function mergeMessages(items) {\r\n    const merged = new Map(messages.map(message => [message.id, message]));\r\n    for (const item of items) {\r\n      const previous = merged.get(item.id);\r\n      if (!previous || item.revision >= previous.revision) merged.set(item.id, item);\r\n    }\r\n    messages = [...merged.values()].sort(compareMessages);\r\n  }\r\n\r\n  async function send() {\r\n    if (checkingSession || (!preparedRequest && !canSend) || !selected || !online || sending || recovering || loadingThread) return;\r\n    sending = true; error = '';\r\n    const ident = selected.id, edit = draftEdit, generation = sessionGeneration, request = api;\r\n    const savedCommand = preparedRequest;\r\n    const endpoint = savedCommand?.endpoint || (mode === 'note' ? 'notes' : mode === 'template' ? 'templates' : 'messages');\r\n    const payload = savedCommand?.payload || (mode === 'template' ? { template_id: template.id, parameters: { ...parameters }, expected_template_hash: template.definition_hash } : { text });\r\n    let attempt = null, stage = 'local';\r\n    try {\r\n      if (!savedCommand) await flushDraft();\r\n      if (!alive || generation !== sessionGeneration || selected?.id !== ident || draftEdit !== edit) return;\r\n      if (!savedCommand && (dirty || draftConflict)) { error = errorText({ code: 'draft_not_saved' }); return; }\r\n      const digest = await requestDigest(ident, endpoint, payload);\r\n      if (!alive || generation !== sessionGeneration || selected?.id !== ident) return;\r\n      const previous = recovery.read(ident);\r\n      if (previous.some(item => item.state === 'pending' && item.digest !== digest)) {\r\n        throw Object.assign(new Error('An earlier request is unresolved'), { code: 'send_reconciliation_required' });\r\n      }\r\n      for (const obsolete of previous.filter(item => item.state === 'rejected' && item.digest !== digest)) recovery.forget(obsolete.key);\r\n      attempt = savedCommand ? { key: savedCommand.key, thread: ident, endpoint, digest,\r\n        draftVersion: savedCommand.draft_version, createdAt: Date.now() } : previous.find(item => item.digest === digest) || { key: crypto.randomUUID(), thread: ident,\r\n        endpoint, digest, draftVersion, createdAt: Date.now() };\r\n      if (attempt.state === 'rejected') attempt = { ...attempt, draftVersion };\r\n      attempt = recovery.remember({ ...attempt, state: 'pending' }, { serverOwned: !!savedCommand });\r\n      pendingRequests = recovery.read(ident);\r\n      const body = { ...payload, idempotency_key: attempt.key, submitted_draft_version: attempt.draftVersion };\r\n      if (!savedCommand) {\r\n        stage = 'prepare';\r\n        const command = await request(`conversations/${ident}/requests/`, { method: 'POST', body: {\r\n          idempotency_key: attempt.key, endpoint, payload, submitted_draft_version: attempt.draftVersion,\r\n        } });\r\n        if (!alive || generation !== sessionGeneration || selected?.id !== ident) return;\r\n        if (command.state !== 'prepared' || command.key !== attempt.key || command.conversation_id !== ident) {\r\n          // A replay may be terminal. Reconcile it without issuing another send.\r\n          sending = false; await reconcilePending(); return;\r\n        }\r\n        preparedRequest = command;\r\n      }\r\n      stage = 'submit';\r\n      const result = await request(`conversations/${ident}/${endpoint}/`, { method: 'POST', body });\r\n      if (!alive || generation !== sessionGeneration) return;\r\n      if (!result.id || result.conversation_id !== ident) throw Object.assign(new Error('Invalid saved result'), { code: 'send_outcome_unknown' });\r\n      stage = 'accepted';\r\n      if (!alive) return;\r\n      if (selected?.id === ident) {\r\n        mergeMessages([result]);\r\n        preparedRequest = null;\r\n        if (draftEdit === edit && result.draft_cleared_version === draftVersion + 1) {\r\n          text = ''; parameters = {}; dirty = false; draftVersion = result.draft_cleared_version; draftEdit += 1;\r\n        } else if (draftEdit === edit && !dirty) {\r\n          const latest = await request(`conversations/${ident}/draft/`);\r\n          if (alive && generation === sessionGeneration && selected?.id === ident && draftEdit === edit && !dirty) applyDraft(latest);\r\n        }\r\n        recovery.forget(attempt.key);\r\n        pendingRequests = recovery.read(ident); submissionNotice = '';\r\n        await scrollToLatest();\r\n      }\r\n      if (generation === sessionGeneration) await loadList();\r\n    } catch (problem) {\r\n      if (generation !== sessionGeneration || problem.name === 'AbortError') return;\r\n      if (attempt && stage === 'prepare' && problem.status === 400) {\r\n        try { recovery.remember({ ...attempt, state: 'rejected' }); pendingRequests = recovery.read(ident); }\r\n        catch (storageError) { fail(storageError); return; }\r\n      }\r\n      fail(['prepare', 'submit'].includes(stage) && !problem.status ? { ...problem, code: 'send_outcome_unknown' } : problem);\r\n    }\r\n    finally { if (alive && generation === sessionGeneration) sending = false; }\r\n  }\r\n\r\n  async function cancelPrepared() {\r\n    return cancelPendingKey(preparedRequest);\r\n  }\r\n\r\n  async function cancelPendingKey(saved) {\r\n    if (!saved || checkingSession || sending || recovering || !online) return;\r\n    const ident = selected.id, generation = sessionGeneration;\r\n    recovering = true; error = '';\r\n    // Retain the exact key in memory if the cancellation response is lost.\r\n    recovery.track({ key: saved.key, thread: ident, draftVersion: saved.draft_version ?? saved.draftVersion, state: 'pending' });\r\n    try {\r\n      const result = await api(`conversations/${ident}/requests/cancel/`, { method: 'POST', body: { idempotency_key: saved.key } });\r\n      if (!alive || generation !== sessionGeneration || selected?.id !== ident) return;\r\n      if (result.key !== saved.key || result.conversation_id !== ident || !['committed', 'cancelled', 'expired'].includes(result.state)) throw new Error('Invalid command outcome');\r\n      if (result.message) {\r\n        mergeMessages([result.message]);\r\n        if (!dirty && result.draft_cleared_version === draftVersion + 1) {\r\n          text = ''; parameters = {}; draftVersion = result.draft_cleared_version; draftEdit += 1;\r\n        }\r\n      }\r\n      recovery.forget(saved.key);\r\n      pendingRequests = recovery.read(ident);\r\n      if (preparedRequest?.key === saved.key) preparedRequest = null;\r\n      submissionNotice = result.state === 'committed' ? 'Užklausa jau priimta. Atšaukimas jos nesustabdė; patikrinkite siuntimo būseną.' : 'Paruošta užklausa atšaukta. Juodraštis nepakeistas.';\r\n    } catch (problem) { fail(problem); }\r\n    finally { if (alive && generation === sessionGeneration) recovering = false; }\r\n  }\r\n\r\n  async function updateThread(update) {\r\n    const ident = selected.id;\r\n    try {\r\n      const thread = await api(`conversations/${ident}/`, { method: 'PATCH', body: { ...update, expected_version: selected.version } });\r\n      if (alive && selected?.id === ident) selected = thread;\r\n      await loadList();\r\n    } catch (problem) {\r\n      if (problem.code === 'conversation_conflict') {\r\n        try { const thread = await api(`conversations/${ident}/`); if (alive && selected?.id === ident) selected = thread; } catch { /* Keep the original conflict visible. */ }\r\n      }\r\n      fail(problem);\r\n    }\r\n  }\r\n\r\n  async function olderMessages() {\r\n    if (!olderCursor || !selected || loadingOlder || resyncRequired) return;\r\n    const ident = selected.id, generation = selectionGeneration;\r\n    loadingOlder = true;\r\n    openingSnapshot = { id: ident, messages: new Map(), thread: null };\r\n    try {\r\n      const query = new URLSearchParams({ order: 'chronological', cursor: olderCursor });\r\n      const data = await api(`conversations/${ident}/messages/?${query}`);\r\n      if (!alive || generation !== selectionGeneration || selected?.id !== ident) return;\r\n      const anchor = scrollAnchor(); positioningHistory = true;\r\n      mergeMessages(data.results); olderCursor = data.older_cursor;\r\n      if (openingSnapshot?.id === ident) {\r\n        if (openingSnapshot.thread?.revision > selected.revision) selected = openingSnapshot.thread;\r\n        const loaded = new Set(messages.map(message => message.id));\r\n        mergeMessages([...openingSnapshot.messages.values()].filter(message => loaded.has(message.id)));\r\n        openingSnapshot = null;\r\n      }\r\n      if (!olderCursor) olderHistoryChanged = false;\r\n      await tick();\r\n      if (!alive || generation !== selectionGeneration) return;\r\n      restoreAnchor(anchor); positioningHistory = false; await markDisplayed();\r\n    } catch (problem) { if (generation === selectionGeneration) fail(problem); }\r\n    finally { if (generation === selectionGeneration) { loadingOlder = false; positioningHistory = false; openingSnapshot = null; } }\r\n  }\r\n\r\n  async function resynchronize() {\r\n    const generation = sessionGeneration, selection = selectionGeneration, listVersion = ++listGeneration;\r\n    const ident = selected?.id, oldest = resyncLatest ? null : messages[0], query = listQuery();\r\n    try {\r\n      // Capture the committed cursor BEFORE snapshots, but do not promote it\r\n      // until the entire replacement view succeeds. Failed retries stay resyncs.\r\n      const start = await api('options/');\r\n      requireHistoryContract(start);\r\n      const [list, thread, history] = await Promise.all([\r\n        api(`conversations/?${query}`),\r\n        ident ? api(`conversations/${ident}/`) : null,\r\n        ident ? api(`conversations/${ident}/messages/?order=chronological`) : null,\r\n      ]);\r\n      const snapshot = history ? [...history.results] : [];\r\n      let older = history?.older_cursor, pages = 1;\r\n      const positions = new Set();\r\n      while (older && oldest && (!snapshot.length || compareMessages(snapshot[0], oldest) > 0)) {\r\n        // Never turn resync into an unbounded download or follow a cursor cycle.\r\n        if (pages >= 20 || positions.has(older)) throw Object.assign(new Error('History range requires an explicit reload'), { code: 'history_range_reload_required' });\r\n        positions.add(older);\r\n        if (!alive || generation !== sessionGeneration || selection !== selectionGeneration) return false;\r\n        const page = await api(`conversations/${ident}/messages/?${new URLSearchParams({ order: 'chronological', cursor: older })}`);\r\n        snapshot.unshift(...page.results); older = page.older_cursor; pages += 1;\r\n      }\r\n      if (!alive || generation !== sessionGeneration || selection !== selectionGeneration || listVersion !== listGeneration) return false;\r\n      const anchor = scrollAnchor(); positioningHistory = true;\r\n      conversations = list.results; nextCursor = list.next_cursor;\r\n      if (ident) { selected = thread; messages = []; mergeMessages(snapshot); olderCursor = older; }\r\n      options = start; cursor = start.cursor; olderHistoryChanged = false;\r\n      await tick();\r\n      if (!alive || generation !== sessionGeneration || selection !== selectionGeneration) return false;\r\n      positioningHistory = false; resyncRequired = false; resyncNeedsReload = false;\r\n      if (resyncLatest) { resyncLatest = false; await scrollToLatest(); }\r\n      else { restoreAnchor(anchor); await markDisplayed(); }\r\n      return true;\r\n    } catch (problem) {\r\n      if (alive && generation === sessionGeneration) {\r\n        if (problem.code === 'history_range_reload_required') resyncNeedsReload = true;\r\n        fail(problem);\r\n      }\r\n      return false;\r\n    }\r\n  }\r\n\r\n  async function poll() {\r\n    clearTimeout(pollTimer);\r\n    if (!alive || polling || !initialized || !online) return;\r\n    if (document.hidden) { pollTimer = setTimeout(poll, 15000); return; }\r\n    polling = true;\r\n    const generation = sessionGeneration;\r\n    let delay = 3000;\r\n    try {\r\n      if (resyncRequired) {\r\n        if (resyncNeedsReload) { delay = 15000; return; }\r\n        if (loadingThread || loadingOlder) { delay = 250; return; }\r\n        delay = await resynchronize() ? 0 : 15000; return;\r\n      }\r\n      const data = await api(`changes/?since=${cursor}&limit=200`);\r\n      if (!alive || generation !== sessionGeneration) return;\r\n      if ((loadingThread || loadingOlder) && openingSnapshot) {\r\n        const changed = data.conversations.find(item => item.id === openingSnapshot.id);\r\n        if (changed && (!openingSnapshot.thread || changed.revision >= openingSnapshot.thread.revision)) openingSnapshot.thread = changed;\r\n        for (const item of data.messages.filter(item => item.conversation_id === openingSnapshot.id)) {\r\n          const previous = openingSnapshot.messages.get(item.id);\r\n          if (!previous || item.revision >= previous.revision) openingSnapshot.messages.set(item.id, item);\r\n        }\r\n        // Keep a bounded overlay, and do NOT advance the committed cursor. After\r\n        // loading, normal polling replays all changes, including off-page records.\r\n        while (openingSnapshot.messages.size > 200) openingSnapshot.messages.delete(openingSnapshot.messages.keys().next().value);\r\n        return;\r\n      }\r\n      const atBottom = nearBottom();\r\n      if (selected) {\r\n        const changed = data.conversations.find(item => item.id === selected.id);\r\n        if (changed && changed.revision >= selected.revision) selected = changed;\r\n        const loaded = new Set(messages.map(item => item.id));\r\n        const candidates = data.messages.filter(item => item.conversation_id === selected.id);\r\n        const updates = candidates.filter(item => loaded.has(item.id) || !olderCursor || (messages[0] && compareMessages(item, messages[0]) >= 0));\r\n        if (updates.length !== candidates.length) olderHistoryChanged = true;\r\n        if (updates.length) {\r\n          const ident = selected.id, anchor = scrollAnchor(), latest = messages.at(-1);\r\n          const freshTail = updates.some(item => !loaded.has(item.id) && !item.historical && (!latest || compareMessages(item, latest) > 0));\r\n          positioningHistory = true;\r\n          mergeMessages(updates);\r\n          if (atBottom && freshTail) await scrollToLatest();\r\n          else {\r\n            await tick();\r\n            if (!alive || generation !== sessionGeneration || selected?.id !== ident) return;\r\n            restoreAnchor(anchor); positioningHistory = false;\r\n            if (freshTail) newMessages = true;\r\n          }\r\n        }\r\n      }\r\n      if (!alive || generation !== sessionGeneration) return;\r\n      cursor = data.cursor;\r\n      if (data.conversations.length) await loadList();\r\n      await markDisplayed();\r\n      if (data.has_more) delay = 0;\r\n    } catch (problem) {\r\n      if (generation !== sessionGeneration) return;\r\n      if (problem.code === 'resync_required') {\r\n        resyncRequired = true;\r\n        delay = loadingThread || loadingOlder ? 250 : await resynchronize() ? 0 : 15000;\r\n      } else { fail(problem); delay = 15000; }\r\n    } finally {\r\n      if (generation === sessionGeneration) {\r\n        polling = false;\r\n        if (alive && initialized) pollTimer = setTimeout(poll, delay);\r\n      }\r\n    }\r\n  }\r\n\r\n  async function findContacts() {\r\n    try { const data = await api(`contacts/?q=${encodeURIComponent(contactSearch)}`); if (alive) contacts = data.results; }\r\n    catch (problem) { fail(problem); }\r\n  }\r\n\r\n  async function startContact(contact) {\r\n    try {\r\n      const thread = await api('conversations/', { method: 'POST', body: { contact_id: contact.id } });\r\n      if (!alive) return;\r\n      await loadList(); await navigateThread(thread.id);\r\n    } catch (problem) { fail(problem); }\r\n  }\r\n\r\n  function refreshList() { loadList().catch(fail); }\r\n  function searchChanged() { clearTimeout(searchTimer); searchTimer = setTimeout(refreshList, 250); }\r\n  function formatTime(stamp) { return stamp ? new Intl.DateTimeFormat('lt-LT', { dateStyle: 'short', timeStyle: 'short', timeZone: 'Europe/Vilnius' }).format(new Date(stamp)) : ''; }\r\n\r\n  function messageAuthor(message) {\r\n    if (message.kind === 'note') return 'Privati pastaba';\r\n    if (message.direction === 'inbound') return selected.name;\r\n    if (message.provenance?.source === 'legacy') {\r\n      switch (message.provenance.origin) {\r\n        case 'api': return 'Importuotas Tutory pranešimas';\r\n        case 'business_app': return 'Importuota iš WhatsApp Business programėlės';\r\n        case 'agent': return 'Importuotas konsultanto atsakymas';\r\n        default: return 'Importuota žinutė — autorius nežinomas';\r\n      }\r\n    }\r\n    return message.author?.name || 'Tutory pranešimas';\r\n  }\r\n\r\n  function messageBody(message) {\r\n    if (message.content_purged) return 'Žinutės turinys pašalintas pagal saugojimo taisykles.';\r\n    if (message.text) return message.text;\r\n    if (message.provenance?.source === 'legacy') {\r\n      if (message.content_type === 'template') return 'Istorinio šablono tekstas neišsaugotas';\r\n      if (message.content_type === 'text') return 'Istorinės žinutės tekstas neišsaugotas';\r\n    }\r\n    return 'Priedas — peržiūra dar nepasiekiama';\r\n  }\r\n\r\n  onMount(() => {\r\n    alive = true; online = navigator.onLine;\r\n    readObserver = new IntersectionObserver(() => { void markDisplayed(); }, { threshold: [0, 0.1, 0.5, 1] });\r\n    sessionController = new AbortController();\r\n    sessionToken = localStorage.getItem('jwtToken');\r\n    api = createInboxApi(sessionController.signal, () => { void checkSession(); });\r\n    needsLogin = !localStorage.getItem('jwtToken');\r\n    if (needsLogin) loading = false;\r\n    else bootstrap().then(() => { if (alive && initialized) pollTimer = setTimeout(poll, 3000); });\r\n    const offline = () => { online = false; clearTimeout(pollTimer); };\r\n    const reconnect = () => { online = true; void flushDraft(); void reconcilePending(); void poll(); };\r\n    const focus = () => { if (localStorage.getItem('jwtToken') !== sessionToken) void checkSession(); else { void poll(); void markDisplayed(); } };\r\n    const visibility = () => { if (!document.hidden) focus(); };\r\n    const beforeUnload = event => { if (dirty || sending) { event.preventDefault(); event.returnValue = ''; } };\r\n    const removeNavigationGuard = registerNavigationGuard(() => {\r\n      if (updateFrozen()) return false;\r\n      if (dirty || draftConflict || sending) {\r\n        error = errorText({ code: 'draft_not_saved' });\r\n        return false;\r\n      }\r\n      return true;\r\n    });\r\n    const removeUpdateGuard = registerUpdateGuard(() => {\r\n      const pending = recovery?.read().some(item => item.state === 'pending');\r\n      return alive && initialized && online && !!options && !needsLogin && !loading && !loadingThread &&\r\n        !checkingSession && sessionToken === localStorage.getItem('jwtToken') &&\r\n        !dirty && !draftConflict && !saving && !sending && !recovering && !resolvingDraft &&\r\n        !preparedRequest && !pending && !recoveryStorageIssue &&\r\n        !pendingRequests.some(item => item.state === 'pending') &&\r\n        !showReceiptReview && !showTemplateVerification && !recoveryMessage;\r\n    });\r\n    const logout = () => { fail({ status: 401 }); };\r\n    const storage = event => { if (event.key === 'jwtToken' || event.key === null) {\r\n      // A removal is an explicit logout boundary, even if a quick subsequent\r\n      // login has already placed another token in shared storage.\r\n      if (event.key === null || event.newValue === null) logout(); else void checkSession();\r\n    } };\r\n    window.addEventListener('offline', offline); window.addEventListener('online', reconnect);\r\n    window.addEventListener('focus', focus); document.addEventListener('visibilitychange', visibility);\r\n    window.addEventListener('beforeunload', beforeUnload);\r\n    window.addEventListener('storage', storage); window.addEventListener('tutory:logout', logout);\r\n    return () => {\r\n      alive = false; readObserver?.disconnect(); messageNodes.clear(); sessionController.abort(); clearTimeout(pollTimer); clearTimeout(draftTimer); clearTimeout(searchTimer);\r\n      window.removeEventListener('offline', offline); window.removeEventListener('online', reconnect);\r\n      window.removeEventListener('focus', focus); document.removeEventListener('visibilitychange', visibility);\r\n      window.removeEventListener('beforeunload', beforeUnload);\r\n      removeNavigationGuard();\r\n      removeUpdateGuard();\r\n      window.removeEventListener('storage', storage); window.removeEventListener('tutory:logout', logout);\r\n    };\r\n  });\r\n</script>\r\n\r\n<InboxUpdate />\r\n<div class=\"app-container inbox-page\" inert={$updateState.frozen} class:review-open={showReceiptReview && options?.role === 'manager'}>\r\n  <header class=\"topbar\">\r\n    <a class=\"brand\" href=\"#/login-greeting\" aria-label=\"Tutory pradžia\" on:click={event => { if (dirty || sending) { event.preventDefault(); error = errorText({ code: 'draft_not_saved' }); } }}>tutory<span>.</span></a>\r\n    <span class=\"workspace\">Bendra pašto dėžutė</span>\r\n    {#if options && !checkingSession}<span class=\"staff\">{options.user.name}</span>{/if}\r\n  </header>\r\n  {#if error}<div class=\"notice error\" role=\"alert\">{error}</div>{/if}\r\n  {#if !online}<div class=\"notice offline\" role=\"status\">Nėra interneto ryšio. Žinutės nebus siunčiamos.</div>{/if}\r\n  {#if resyncRequired && !checkingSession}<div class=\"notice\" role=\"status\" aria-label=\"Pokalbio atnaujinimas\">\r\n    Atkuriama pokalbių istorija. Juodraštis nebus siunčiamas, o žinutės nebus pažymėtos perskaitytomis, kol duomenys neatnaujinti.\r\n    {#if resyncNeedsReload}<button type=\"button\" disabled={polling} on:click={() => { resyncNeedsReload = false; resyncLatest = true; void poll(); }}>Atverti naujausią istoriją</button>{/if}\r\n  </div>{/if}\r\n  {#if checkingSession}\r\n    <section class=\"empty\" role=\"status\" aria-label=\"Sesijos patikra\">\r\n      {#if sessionCheckFailed}<p>Nepavyko patikrinti prisijungimo. Juodraštis liko šiame lange ir nebus siunčiamas.</p>\r\n        <button type=\"button\" on:click={() => { void checkSession(true); }}>Pakartoti sesijos patikrą</button>\r\n      {:else}<p>Tikrinama prisijungimo sesija…</p>{/if}\r\n    </section>\r\n  {:else if needsLogin}\r\n    <section class=\"empty\"><h1>Darbuotojų pašto dėžutė</h1><p>Prisijunkite savo asmenine Tutory paskyra.</p><a href={inboxLoginHref(params.id)}>Prisijungti</a></section>\r\n  {:else if loading}\r\n    <p class=\"empty\" role=\"status\">Kraunami pokalbiai…</p>\r\n  {:else if options}\r\n    <InboxDeviceSetup {api} ownerId={options.user.id} on:denied={event => fail(event.detail)} />\r\n    {#if options.role === 'manager'}\r\n      <div class=\"manager-tools\"><button type=\"button\" on:click={() => { showReceiptReview = !showReceiptReview; }}>Gautų įvykių patikra</button></div>\r\n      {#if showReceiptReview}<ReceiptReviewPanel {api} on:close={() => { showReceiptReview = false; }}\r\n        on:changed={() => { void poll(); }} on:denied={event => fail(event.detail)} />{/if}\r\n    {/if}\r\n    <div class=\"inbox-layout\" class:thread-open={!!selected}>\r\n      <aside class=\"list-panel\" aria-label=\"Pokalbių sąrašas\">\r\n        <div class=\"list-title\"><h1>Pokalbiai</h1><button class=\"primary compact\" on:click={() => { showContacts = !showContacts; if (showContacts) findContacts(); }}>Naujas pokalbis</button></div>\r\n        <label class=\"search\">Ieškoti pokalbių<input type=\"search\" bind:value={search} on:input={searchChanged} placeholder=\"Vardas, numeris arba žinutė\" maxlength=\"200\" /></label>\r\n        <div class=\"filters\">\r\n          <label>Pokalbiai<select aria-label=\"Pokalbių filtras\" bind:value={filter} on:change={refreshList}>\r\n            <option value=\"all\">Visi</option><option value=\"mine\">Mano</option><option value=\"unassigned\">Nepriskirti</option>\r\n            <option value=\"unread\">Neperskaityti</option><option value=\"open\">Atviri</option><option value=\"resolved\">Išspręsti</option>\r\n          </select></label>\r\n          <label>Kanalas<select bind:value={channel} on:change={refreshList}><option value=\"\">Visi kanalai</option><option value=\"whatsapp\">WhatsApp</option><option value=\"viber\">Viber</option></select></label>\r\n        </div>\r\n        {#if showContacts}\r\n          <section class=\"contact-picker\" aria-label=\"Patvirtinti kontaktai\">\r\n            <h2>Patvirtinti kontaktai</h2>\r\n            <label>Ieškoti kontakto<input bind:value={contactSearch} on:input={findContacts} maxlength=\"200\" /></label>\r\n            {#each contacts as contact (contact.id)}\r\n              <button class=\"contact\" disabled={!contact.notifications_allowed} aria-label={`Pradėti pokalbį su ${contact.name} · ${contact.account.channel === 'whatsapp' ? 'WhatsApp' : 'Viber'}`} on:click={() => startContact(contact)}>\r\n                <strong>{contact.name}</strong><span>{contact.account.channel === 'whatsapp' ? 'WhatsApp' : 'Viber'} · {contact.remote_id}</span>\r\n              </button>\r\n            {:else}<p>Kontaktų nėra. Vadovas turi patvirtinti gavėją ir sutikimą.</p>{/each}\r\n          </section>\r\n        {/if}\r\n        <div class=\"threads\">\r\n          {#each conversations as conversation (conversation.id)}\r\n            <button class=\"thread\" class:active={selected?.id === conversation.id} aria-label={`Atverti pokalbį su ${conversation.name} · ${conversation.account.channel === 'whatsapp' ? 'WhatsApp' : 'Viber'}`} on:click={() => navigateThread(conversation.id)}>\r\n              <span class=\"avatar\">{conversation.name.slice(0, 1).toUpperCase()}</span>\r\n              <span class=\"thread-summary\"><span class=\"thread-heading\"><strong>{conversation.name}</strong><small>{conversation.account.channel === 'whatsapp' ? 'WA' : 'Viber'}</small></span>\r\n                <span class=\"excerpt\">{conversation.last_content_purged ? 'Turinys pašalintas' : conversation.last_text || 'Dar nėra žinučių'}</span><small>{formatTime(conversation.last_message_at)}</small></span>\r\n              {#if conversation.unread_count}<span class=\"unread\" aria-label={`${conversation.unread_count} neperskaitytos`}>{conversation.unread_count}</span>{/if}\r\n            </button>\r\n          {:else}<p class=\"no-results\">Pokalbių nerasta.</p>{/each}\r\n          {#if nextCursor}<button class=\"load-more\" on:click={() => loadList(true).catch(fail)}>Daugiau pokalbių</button>{/if}\r\n        </div>\r\n      </aside>\r\n      <section class=\"conversation-panel\" aria-label=\"Pasirinktas pokalbis\">\r\n        {#if loadingThread}<p class=\"empty\" role=\"status\">Kraunamas pokalbis…</p>\r\n        {:else if selected}\r\n          <header class=\"conversation-header\">\r\n            <button class=\"back\" aria-label=\"Grįžti į pokalbius\" disabled={sending} on:click={() => navigateThread(null)}>←</button>\r\n            <div><h2>{selected.name}</h2><p>{selected.account.channel === 'whatsapp' ? 'WhatsApp' : 'Viber'} · {selected.remote_id}</p></div>\r\n            <button class=\"resolve\" on:click={() => updateThread({ status: selected.status === 'resolved' ? 'open' : 'resolved' })}>{selected.status === 'resolved' ? 'Atverti iš naujo' : 'Pažymėti išspręstu'}</button>\r\n          </header>\r\n          <div class=\"assignment\"><label>Atsakingas<select value={selected.assignee?.id || ''} on:change={event => updateThread({ assignee_id: event.currentTarget.value ? Number(event.currentTarget.value) : null })}>\r\n            <option value=\"\">Nepriskirtas</option>{#each options.members as member}<option value={member.id}>{member.name}</option>{/each}\r\n          </select></label><span>{selected.status === 'resolved' ? 'Išspręstas' : 'Atviras'} · Matomas visai komandai</span></div>\r\n          {#if selected.submission_hold}\r\n            <div class=\"notice\" role=\"status\" aria-label=\"Siuntimo eilė\">\r\n              Vėlesnės šio pokalbio žinutės laukia ankstesnio siuntimo patikros. Nauji atsakymai bus išsaugoti eilėje.\r\n              {#if options.role === 'manager'}\r\n                <button type=\"button\" on:click={() => { recoveryMessage = selected.submission_hold.message_id; }}>Tikrinti eilę</button>\r\n              {:else}Kreipkitės į vadovą. Privačias pastabas galite rašyti toliau.{/if}\r\n            </div>\r\n          {/if}\r\n          <!-- Scrollable history is focusable so keyboard users can read older messages. -->\r\n          <!-- svelte-ignore a11y_no_noninteractive_tabindex -->\r\n          <div class=\"timeline\" role=\"log\" aria-label=\"Pokalbio žinutės\" aria-live=\"polite\" tabindex=\"0\" bind:this={timeline} on:scroll={markDisplayed}>\r\n            {#if olderHistoryChanged}<p role=\"status\" aria-label=\"Istorijos pakeitimai\">Ankstesnė istorija pasikeitė. Atverkite ankstesnes žinutes.</p>{/if}\r\n            {#if olderCursor}<button class=\"load-more\" disabled={loadingOlder || resyncRequired} on:click={olderMessages}>Ankstesnės žinutės</button>{/if}\r\n            {#each messages as message (message.id)}\r\n              <article class=\"message\" use:trackMessage={message.id} class:outbound={message.direction === 'outbound'} class:note={message.kind === 'note'}>\r\n                <div class=\"message-meta\">{messageAuthor(message)}</div>\r\n                <p>{messageBody(message)}</p>\r\n                <footer><time datetime={message.occurred_at}>{formatTime(message.occurred_at)}</time>{#if message.historical}<span>Istorinis įrašas</span>{/if}<span>{deliveryLabels[message.delivery_status] || message.delivery_status}</span></footer>\r\n                {#if options.role === 'manager' && message.direction === 'outbound' && message.recovery_available === true}\r\n                  <button type=\"button\" on:click={() => { recoveryMessage = message.id; }}>Patikrinti siuntimą</button>\r\n                {/if}\r\n              </article>\r\n            {:else}<p class=\"no-results\">Pokalbis dar nepradėtas. Pasirinkite patvirtintą šabloną.</p>{/each}\r\n          </div>\r\n          {#if newMessages}<button class=\"new-messages\" on:click={scrollToLatest}>Naujos žinutės ↓</button>{/if}\r\n          {#if recoveryMessage && options.role === 'manager'}\r\n            {#key recoveryMessage}<RecoveryPanel messageId={recoveryMessage} {api}\r\n              on:close={() => { recoveryMessage = null; }} on:changed={() => { void poll(); }}\r\n              on:denied={event => fail(event.detail)} />{/key}\r\n          {/if}\r\n          {#if showTemplateVerification && options.role === 'manager'}\r\n            {#key selected.id}<TemplateVerificationPanel conversationId={selected.id} {api}\r\n              on:close={() => { showTemplateVerification = false; }} on:changed={event => { templates = event.detail; }}\r\n              on:denied={event => fail(event.detail)} />{/key}\r\n          {/if}\r\n          <form class=\"composer\" class:note-mode={mode === 'note'} on:submit|preventDefault={send}>\r\n            {#if draftConflict}<DraftConflictPanel localDraft={{ text, mode, template_id: templateId ? Number(templateId) : null, parameters }} serverDraft={conflictingDraft}\r\n              loading={conflictLoading} busy={resolvingDraft || saving} {online}\r\n              on:choose={event => resolveDraftConflict(event.detail)} on:refresh={loadDraftConflict} />{/if}\r\n            {#if recoveryStorageIssue}<p class=\"policy\" role=\"status\" aria-label=\"Atkūrimo saugykla\">\r\n              {errorText({ code: recoveryStorageIssue })} Serveryje paruoštą užklausą vis tiek galite patikrinti, siųsti arba atšaukti žemiau. Naujam siuntimui būtina veikianti atkūrimo saugykla.\r\n            </p>{/if}\r\n            {#if preparedRequest}<section class=\"preview\" aria-label=\"Paruošta užklausa\">\r\n              <p>{preparedRequest.endpoint === 'notes' ? 'Paruošta privati pastaba' : 'Paruošta žinutė klientui'}</p>\r\n              <p>{preparedRequest.preview_text}</p>\r\n              <button type=\"button\" disabled={!online || sending || recovering} on:click={send}>Siųsti paruoštą užklausą</button>\r\n              <button type=\"button\" disabled={!online || sending || recovering} on:click={cancelPrepared}>Atšaukti paruoštą užklausą</button>\r\n            </section>{/if}\r\n            {#if recoveryPending}<p class=\"policy\" role=\"status\">Ankstesnės užklausos rezultatas dar nepatvirtintas. Galite tikrinti būseną arba kartoti tą pačią užklausą, nekurkite naujos kopijos.</p>\r\n              <button type=\"button\" disabled={!online || sending || recovering} on:click={reconcilePending}>Tikrinti ankstesnę užklausą</button>\r\n              {#each pendingRequests.filter(item => item.state === 'pending' && item.key !== preparedRequest?.key) as unresolved (unresolved.key)}\r\n                <button type=\"button\" disabled={!online || sending || recovering} on:click={() => cancelPendingKey(unresolved)}>Atšaukti nepatvirtintą užklausą</button>\r\n              {/each}\r\n            {:else if submissionNotice}<p class=\"policy\" role=\"status\">{submissionNotice}</p>{/if}\r\n            <div class=\"composer-toolbar\"><label>Rašymo režimas<select bind:value={mode} on:change={edited} disabled={sending || resolvingDraft || recoveryPending}>\r\n              <option value=\"reply\">Atsakymas klientui</option><option value=\"note\">Privati pastaba</option><option value=\"template\">Patvirtintas šablonas</option>\r\n            </select></label><small>{saving ? 'Saugoma…' : dirty ? 'Neišsaugoti pakeitimai' : 'Asmeninis juodraštis'}</small></div>\r\n            {#if mode === 'template'}\r\n              {#if options.role === 'manager'}<button type=\"button\" on:click={() => { showTemplateVerification = !showTemplateVerification; }}>Šablonų patikra</button>{/if}\r\n              <label>Šablonas<select bind:value={templateId} on:change={() => { parameters = {}; edited(); }} disabled={sending || resolvingDraft || recoveryPending}><option value=\"\">Pasirinkite šabloną</option>\r\n                {#each templates as item}<option value={String(item.id)}>{item.key} · {item.language}</option>{/each}\r\n              </select></label>\r\n              {#if template}<div class=\"template-fields\">{#each template.parameter_names as name}<label>{parameterLabels[name] || name}<input value={parameters[name] || ''} maxlength=\"1024\" disabled={sending || resolvingDraft || recoveryPending} on:input={event => { parameters = { ...parameters, [name]: event.currentTarget.value }; edited(); }} /></label>{/each}</div>\r\n                <div class=\"preview\" aria-label=\"Šablono peržiūra\">{preview}</div>{/if}\r\n            {:else}\r\n              {#if mode === 'reply' && !selected.capabilities.text}<p class=\"policy\">{errorText({ code: selected.capabilities.reason })}</p>{/if}\r\n              {#if mode === 'note'}<p class=\"policy\">Šią pastabą matys tik Tutory darbuotojai.</p>{/if}\r\n              <label class=\"message-label\">Žinutė<textarea bind:value={text} on:input={edited} maxlength={mode === 'note' ? 10000 : selected.capabilities.text_limit} disabled={sending || resolvingDraft} readonly={recoveryPending} rows=\"3\" placeholder={mode === 'note' ? 'Vidinė pastaba komandai…' : 'Parašykite atsakymą…'}></textarea></label>\r\n            {/if}\r\n            <div class=\"composer-footer\"><small>{mode === 'note' ? 'Nesiunčiama klientui' : 'Siuntimo būseną matysite pokalbyje'}</small><button type=\"submit\" class=\"primary\" disabled={!canSend}>{sending ? 'Siunčiama…' : mode === 'note' ? 'Pridėti pastabą' : mode === 'template' ? 'Siųsti šabloną' : 'Siųsti'}</button></div>\r\n          </form>\r\n        {:else}<div class=\"empty\"><span class=\"empty-icon\">✉</span><h2>Visa komanda. Viena vieta.</h2><p>Pasirinkite pokalbį arba pradėkite naują su patvirtintu kontaktu.</p><p class=\"subtle\">Klientai ir toliau rašo per WhatsApp ir Viber.</p></div>{/if}\r\n      </section>\r\n    </div>\r\n  {/if}\r\n</div>\r\n\r\n<style>\r\n  .manager-tools{padding:6px 18px;border-bottom:1px solid #e8e5e1;flex-shrink:0}.manager-tools button{font-size:11px;padding:5px 9px}\r\n  @media(max-width:760px){.review-open .inbox-layout{display:none}}\r\n  .inbox-page{--orange:#d95513;--border:#e8e5e1;--muted:#716d66;--ink:#25231f;background:#fff;color:var(--ink);font-family:Inter,system-ui,sans-serif;height:100dvh;display:flex;flex-direction:column;font-size:14px;text-align:left}\r\n  *{box-sizing:border-box}button,input,select,textarea{font:inherit}button{cursor:pointer;border:1px solid var(--border);background:#fff;color:inherit;border-radius:7px;padding:9px 12px}button:disabled{opacity:.5;cursor:not-allowed}button:hover:not(:disabled){background:#f7f5f1}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:2px solid var(--orange);outline-offset:2px}input,select,textarea{width:100%;border:1px solid #d5d1cb;border-radius:7px;padding:9px;background:#fff;color:inherit}textarea{resize:vertical;min-height:74px;max-height:180px}label{display:flex;flex-direction:column;gap:5px;font-size:12px;font-weight:600}h1,h2,p{margin:0}h1{font-size:21px}h2{font-size:17px}.topbar{height:64px;min-height:64px;display:flex;align-items:center;gap:26px;padding:0 24px;border-bottom:1px solid var(--border)}.brand{font-size:29px;letter-spacing:-1.5px;color:var(--orange);font-weight:800;text-decoration:none}.brand span{color:#25231f}.workspace{font-size:13px;color:var(--muted)}.staff{margin-left:auto;font-size:12px}.notice{padding:12px 20px;font-size:13px;border-bottom:1px solid var(--border)}.error{background:#fff0ec;color:#972d14}.offline{background:#fff6d7}.inbox-layout{display:grid;grid-template-columns:340px minmax(0,1fr);min-height:0;flex:1}.list-panel{display:flex;flex-direction:column;border-right:1px solid var(--border);min-height:0}.list-title{display:flex;align-items:center;justify-content:space-between;padding:22px 18px 18px;gap:10px}.primary{background:var(--orange);color:#fff;border-color:var(--orange);font-weight:600}.primary:hover:not(:disabled){background:#b7440b}.compact{font-size:11px;padding:8px}.search{margin:0 18px 14px}.filters{display:flex;gap:9px;padding:0 18px 18px;border-bottom:1px solid var(--border)}.filters label{flex:1;min-width:0}.filters select{font-size:12px}.threads{overflow:auto;min-height:0}.thread{border:0;border-bottom:1px solid #f1eeeb;border-radius:0;padding:18px;display:flex;align-items:flex-start;width:100%;gap:11px;text-align:left}.thread.active{background:#fff2e9;box-shadow:inset 3px 0 var(--orange)}.avatar{background:#ecebe6;border-radius:50%;width:37px;height:37px;display:grid;place-items:center;flex-shrink:0;font-size:15px}.thread-summary{display:flex;flex-direction:column;gap:6px;min-width:0;flex:1}.thread-heading{display:flex;gap:8px;justify-content:space-between}.thread-heading strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.thread-summary small{font-size:10px;color:var(--muted)}.excerpt{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.unread{background:var(--orange);color:white;border-radius:12px;min-width:20px;text-align:center;padding:3px 5px;font-size:10px}.conversation-panel{display:flex;flex-direction:column;min-width:0;min-height:0;background:#faf9f7;position:relative}.conversation-header{background:#fff;display:flex;align-items:center;gap:12px;padding:19px 24px;border-bottom:1px solid var(--border)}.conversation-header p{font-size:12px;color:var(--muted);margin-top:5px}.resolve{margin-left:auto;font-size:12px}.back{display:none}.assignment{background:#fff;display:flex;gap:16px;align-items:center;padding:10px 24px;border-bottom:1px solid var(--border);font-size:11px;color:var(--muted)}.assignment label{flex-direction:row;align-items:center;font-size:11px}.assignment select{width:auto;font-size:11px;padding:5px}.timeline{flex:1;overflow:auto;min-height:90px;padding:26px;display:flex;flex-direction:column;gap:17px;scrollbar-gutter:stable}.message{align-self:flex-start;max-width:min(80%,700px);border:1px solid var(--border);border-radius:3px 12px 12px;background:#fff;padding:13px 16px;overflow-wrap:anywhere}.message.outbound{align-self:flex-end;background:#fff0e3;border-color:#f2d9c3;border-radius:12px 3px 12px 12px}.message.note{align-self:stretch;max-width:none;background:#fff8d9;border-color:#eee3aa}.message-meta{font-size:11px;font-weight:650;margin-bottom:7px;color:#716450}.message p{white-space:pre-wrap;line-height:1.6}.message footer{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap;margin-top:9px;font-size:10px;color:var(--muted)}.composer{background:#fff;border-top:1px solid var(--border);padding:15px 24px;display:flex;flex-direction:column;gap:12px}.composer.note-mode{background:#fffdf0}.composer-toolbar,.composer-footer{display:flex;justify-content:space-between;align-items:center;gap:12px}.composer-toolbar label{flex-direction:row;align-items:center;font-size:11px}.composer-toolbar select{font-size:12px;width:auto}.composer small{font-size:10px;color:var(--muted)}.policy{font-size:12px;color:#80603c}.message-label{font-size:11px}.template-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.preview{font-size:13px;white-space:pre-wrap;background:#faf8f4;padding:12px;border-radius:7px;max-height:160px;overflow:auto}.empty{margin:auto;text-align:center;max-width:450px;padding:35px;color:var(--muted)}.empty h2,.empty h1{color:var(--ink);margin:18px 0 10px}.empty p{line-height:1.7;font-size:13px}.empty-icon{font-size:45px;color:var(--orange)}.empty .subtle{font-size:11px;margin-top:13px}.no-results{padding:25px;text-align:center;color:var(--muted);font-size:12px}.load-more{align-self:center;display:block;margin:12px auto;font-size:12px}.new-messages{position:absolute;bottom:220px;align-self:center;background:#fff4e6;border-color:#efc492}.contact-picker{padding:18px;background:#fff8f1;overflow:auto;max-height:300px}.contact-picker h2{margin-bottom:12px}.contact{display:flex;flex-direction:column;gap:5px;text-align:left;width:100%;margin-top:10px}.contact span{font-size:11px;color:var(--muted)}.contact-picker p{margin-top:12px;font-size:12px}\r\n  @media(min-width:1500px){.inbox-layout{grid-template-columns:390px minmax(0,1fr)}.timeline{padding:30px 8%}.composer{padding-left:8%;padding-right:8%}}\r\n  @media(max-width:760px){.topbar{height:54px;min-height:54px;padding:0 14px;gap:15px}.brand{font-size:25px}.workspace{font-size:11px}.staff{max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inbox-layout{display:flex}.list-panel{flex:1;border-right:0}.conversation-panel{display:none}.thread-open .list-panel{display:none}.thread-open .conversation-panel{display:flex;flex:1}.back{display:block}.conversation-header{padding:12px;gap:9px}.conversation-header h2{font-size:15px}.conversation-header p{font-size:10px}.resolve{font-size:10px;padding:7px;max-width:105px}.assignment{padding:8px 12px;gap:8px}.assignment>span{font-size:9px}.timeline{padding:16px 12px}.message{max-width:91%}.composer{padding:12px;padding-bottom:max(12px,env(safe-area-inset-bottom))}.composer-toolbar{align-items:flex-end}.composer-toolbar label{flex-direction:column;align-items:flex-start}.composer-footer small{max-width:180px}.template-fields{grid-template-columns:1fr;max-height:180px;overflow:auto}.template-fields input,.message-label textarea{font-size:16px}}\r\n</style>\r\n","<script>\r\n  import { createEventDispatcher, onMount } from 'svelte';\r\n  import { deliveryLabels, errorText } from './api.js';\r\n\r\n  export let messageId;\r\n  export let api;\r\n  const dispatch = createEventDispatcher();\r\n  const labels = {\r\n    confirm_accepted: 'Patvirtinti priėmimą pagal tiekėjo žurnalą',\r\n    cancel: 'Sustabdyti tolesnius bandymus',\r\n    resend_unknown: 'Sukurti naują siuntimą — galima kopija',\r\n    retry_blocked: 'Leisti pakartoti po patikros',\r\n    replace_blocked: 'Peržiūrėti naują žinutę eilės pabaigoje',\r\n  };\r\n  let snapshot = null, loading = true, saving = false, action = '', reason = '', providerId = '';\r\n  let duplicateRisk = false, replacementConfirmed = false, error = '', success = '', alive = false, intent = null;\r\n  $: ready = !loading && !saving && snapshot?.actions.includes(action) && !!reason.trim()\r\n    && (action !== 'confirm_accepted' || !!providerId.trim()) && (action !== 'resend_unknown' || duplicateRisk)\r\n    && (action !== 'replace_blocked' || (replacementConfirmed && !!snapshot.replacement_preview));\r\n\r\n  async function load() {\r\n    loading = true;\r\n    try {\r\n      const result = await api(`messages/${messageId}/recovery/`);\r\n      if (!alive) return;\r\n      snapshot = result;\r\n      if (!result.actions.includes(action)) action = '';\r\n    } catch (problem) { report(problem); }\r\n    finally { if (alive) loading = false; }\r\n  }\r\n\r\n  function report(problem) {\r\n    if (!alive || problem.name === 'AbortError') return;\r\n    error = errorText(problem);\r\n    if ([401, 403].includes(problem.status)) dispatch('denied', problem);\r\n  }\r\n\r\n  async function submit() {\r\n    if (!ready) return;\r\n    saving = true; error = ''; success = '';\r\n    const body = { action, reason: reason.trim(), expected_version: snapshot.version,\r\n      provider_id: action === 'confirm_accepted' ? providerId.trim() : '',\r\n      confirm_duplicate_risk: action === 'resend_unknown' && duplicateRisk,\r\n      ...(action === 'replace_blocked' ? { confirm_replacement: replacementConfirmed,\r\n        expected_conversation_revision: snapshot.conversation_revision } : {}) };\r\n    const fingerprint = JSON.stringify(body);\r\n    if (intent?.fingerprint !== fingerprint) intent = { fingerprint, key: crypto.randomUUID() };\r\n    try {\r\n      await api(`messages/${messageId}/recovery/`, { method: 'POST', body: { ...body, idempotency_key: intent.key } });\r\n      if (!alive) return;\r\n      success = 'Sprendimas užregistruotas.';\r\n      duplicateRisk = false;\r\n      replacementConfirmed = false;\r\n      dispatch('changed');\r\n      await load();\r\n    } catch (problem) {\r\n      report(problem);\r\n      if (alive && problem.code === 'recovery_conflict') {\r\n        duplicateRisk = false;\r\n        replacementConfirmed = false;\r\n        action = '';\r\n        await load();\r\n      }\r\n    } finally { if (alive) saving = false; }\r\n  }\r\n\r\n  onMount(() => { alive = true; void load(); return () => { alive = false; }; });\r\n</script>\r\n\r\n<section class=\"recovery\" aria-label=\"Siuntimo patikra\">\r\n  <header><h3>Siuntimo patikra</h3><button type=\"button\" on:click={() => dispatch('close')}>Uždaryti patikrą</button></header>\r\n  <p>Sprendimas bus įrašytas į veiksmų žurnalą. Sustabdymas negali atšaukti jau perduotos žinutės.</p>\r\n  {#if error}<p class=\"error\" role=\"alert\">{error}</p>{/if}\r\n  {#if success}<p role=\"status\">{success}</p>{/if}\r\n  {#if loading}<p role=\"status\">Tikrinama siuntimo būsena…</p>\r\n  {:else if snapshot}\r\n    <p>Būsena: {deliveryLabels[snapshot.state] || snapshot.state} · Bandymų: {snapshot.attempts}</p>\r\n    {#if snapshot.ordering_reason}<p>{errorText({ code: snapshot.ordering_reason })}</p>{/if}\r\n    {#if snapshot.actions.length}\r\n      <form on:submit|preventDefault={submit}>\r\n        <label>Sprendimas<select bind:value={action} disabled={saving} on:change={() => { duplicateRisk = false; replacementConfirmed = false; success = ''; }}>\r\n          <option value=\"\">Pasirinkite sprendimą</option>\r\n          {#each snapshot.actions as item}<option value={item}>{labels[item] || item}</option>{/each}\r\n        </select></label>\r\n        <label>Patikros pagrindas<textarea bind:value={reason} maxlength=\"500\" rows=\"2\" disabled={saving} placeholder=\"Trumpas pagrindas arba tiekėjo patikros nuoroda; be klientų duomenų\"></textarea></label>\r\n        {#if action === 'confirm_accepted'}<label>Tiekėjo žinutės ID<input bind:value={providerId} maxlength=\"255\" disabled={saving} /></label>{/if}\r\n        {#if action === 'resend_unknown'}\r\n          <label class=\"risk\"><input type=\"checkbox\" bind:checked={duplicateRisk} disabled={saving} />Suprantu, kad klientas gali gauti žinutę du kartus</label>\r\n        {/if}\r\n        {#if action === 'replace_blocked'}\r\n          <section aria-label=\"Pakaitinės žinutės peržiūra\"><p class=\"preview\">{snapshot.replacement_preview || 'Turinys nepasiekiamas; šio siuntimo pakartoti negalima.'}</p></section>\r\n          <label class=\"risk\"><input type=\"checkbox\" bind:checked={replacementConfirmed} disabled={saving} />Patikrinau turinį ir noriu naujos žinutės eilės pabaigoje</label>\r\n        {/if}\r\n        <button class=\"confirm\" type=\"submit\" disabled={!ready}>{saving ? 'Registruojama…' : 'Patvirtinti sprendimą'}</button>\r\n      </form>\r\n    {/if}\r\n  {/if}\r\n</section>\r\n\r\n<style>\r\n  .recovery{padding:16px 24px;border-bottom:1px solid #ead4ae;background:#fff8e9;max-height:45vh;overflow:auto;font-size:12px}\r\n  header{display:flex;align-items:center;justify-content:space-between;gap:10px}h3{margin:0}p{line-height:1.5;margin:10px 0}form{display:flex;flex-direction:column;gap:10px}\r\n  label{display:flex;flex-direction:column;gap:5px;font-weight:600}input,textarea,select,button{font:inherit;border:1px solid #bfb7a8;border-radius:6px;padding:8px;background:#fff;color:#25231f;box-sizing:border-box}textarea,select{width:100%}textarea{resize:vertical}\r\n  button{cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}.confirm{align-self:flex-start;background:#ba4510;border-color:#ba4510;color:#fff}.risk{flex-direction:row;align-items:center}.risk input{width:18px;height:18px}.error{color:#922c19}\r\n  .preview{white-space:pre-wrap;overflow-wrap:anywhere;background:#fff;padding:10px;border:1px solid #ead4ae}\r\n  :focus-visible{outline:2px solid #d95513;outline-offset:2px}@media(max-width:760px){.recovery{padding:12px}input,textarea,select{font-size:16px}}\r\n</style>\r\n","<script>\r\n  import { createEventDispatcher } from 'svelte';\r\n  import { parameterLabels } from './api.js';\r\n\r\n  export let localDraft;\r\n  export let serverDraft = null;\r\n  export let loading = false;\r\n  export let busy = false;\r\n  export let online = true;\r\n  const dispatch = createEventDispatcher();\r\n  let copyNotice = '';\r\n\r\n  function summary(draft) {\r\n    if (!draft) return '';\r\n    const mode = { reply: 'Atsakymas klientui', note: 'Privati pastaba', template: 'Patvirtintas šablonas' }[draft.mode];\r\n    return [`Režimas: ${mode}`, ...(draft.template_id ? [`Šablonas: ${draft.template_id}`] : []),\r\n      draft.text, ...Object.entries(draft.parameters || {}).map(([name, value]) => `${parameterLabels[name] || name}: ${value}`)]\r\n      .filter(value => value !== '').join('\\n');\r\n  }\r\n\r\n  async function copyLocal() {\r\n    try {\r\n      await navigator.clipboard.writeText(summary(localDraft));\r\n      copyNotice = 'Juodraštis nukopijuotas. Kopijoje gali būti asmens duomenų; įklijuokite tik saugioje vietoje.';\r\n    } catch {\r\n      copyNotice = 'Pažymėkite šio įrenginio juodraščio kopiją ir nukopijuokite rankiniu būdu. Originalas liko šiame lange.';\r\n    }\r\n  }\r\n</script>\r\n\r\n<section class=\"draft-conflict\" aria-label=\"Juodraščio konfliktas\">\r\n  <h3>Pasirinkite juodraščio versiją</h3>\r\n  <p>Nieko nebus siunčiama klientui. Išsaugojimas pakeis peržiūrėtą serverio versiją;\r\n    serverio versijos pasirinkimas pakeis šiame lange įvestą juodraštį.</p>\r\n  <div class=\"versions\">\r\n    <label>Šio įrenginio juodraščio kopija<textarea readonly rows=\"3\" value={summary(localDraft)}></textarea></label>\r\n    <label>Serverio juodraščio kopija<textarea readonly rows=\"3\" value={summary(serverDraft)}></textarea></label>\r\n  </div>\r\n  {#if loading}<p role=\"status\">Įkeliamas serverio juodraštis…</p>\r\n  {:else if !serverDraft}<p>Serverio versija dar nepasiekiama. Vietinis juodraštis nepakeistas.</p>{/if}\r\n  <div class=\"actions\">\r\n    <button type=\"button\" disabled={!online || loading || busy || !serverDraft} on:click={() => dispatch('choose', 'local')}>Išsaugoti šio įrenginio juodraštį</button>\r\n    <button type=\"button\" disabled={!online || loading || busy || !serverDraft} on:click={() => dispatch('choose', 'server')}>Naudoti serverio juodraštį</button>\r\n    <button type=\"button\" disabled={!online || loading || busy} on:click={() => dispatch('refresh')}>Atnaujinti serverio juodraštį</button>\r\n    <button type=\"button\" on:click={copyLocal}>Kopijuoti šio įrenginio juodraštį</button>\r\n  </div>\r\n  {#if copyNotice}<p role=\"status\">{copyNotice}</p>{/if}\r\n</section>\r\n\r\n<style>\r\n  .draft-conflict{border:1px solid #e8d2b0;border-radius:7px;background:#fffbf3;padding:12px;display:flex;flex-direction:column;gap:10px;max-height:340px;overflow:auto}\r\n  h3,p{margin:0}h3{font-size:14px}p{font-size:12px;line-height:1.5}.versions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}\r\n  label{display:flex;flex-direction:column;gap:5px;font-size:12px}textarea{box-sizing:border-box;width:100%;min-width:0;resize:vertical;max-height:130px;padding:8px;border:1px solid #d5d1cb;border-radius:6px;background:#fff;color:#25231f;font:inherit;line-height:1.5}\r\n  .actions{display:flex;flex-wrap:wrap;gap:7px}button{font:inherit;font-size:12px;padding:8px;border:1px solid #d5d1cb;border-radius:6px;background:#fff;color:#25231f;cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}button:focus-visible,textarea:focus-visible{outline:2px solid #d95513;outline-offset:2px}\r\n  @media(max-width:760px){.versions{grid-template-columns:1fr}textarea{font-size:16px}.draft-conflict{max-height:300px}}\r\n</style>\r\n","import './personalNotesNavigation.js';\r\nimport './navigationGuard.js';\r\nimport './inbox/notificationNavigation.js';\r\nimport { installPhoneLifecycle } from './inbox/phoneEnrollment.js';\r\nimport { installInboxUpdates } from './inbox/appUpdates.js';\r\nimport { mount } from 'svelte';\r\nimport App from './App.svelte';\r\n\r\ninstallPhoneLifecycle();\r\ninstallInboxUpdates();\r\n\r\nconst app = mount(App, {\r\n\ttarget: document.body,\r\n\tintro: false,\r\n\tprops: {\r\n\t\tname: 'world'\r\n\t}\r\n});\r\n\r\nexport default app;\r\n","<!-- App.svelte -->\r\n<script>\r\n\timport Router, { push } from 'svelte-spa-router';\r\n\timport Home from './Home.svelte';\r\n\timport AboutPage from './AboutPage.svelte';\r\n\timport LogInGreeting from './LogInGreeting.svelte';\r\n\timport RegisterForClass from './RegistrationForClass.svelte'\r\n\timport RegisterSuccess from './RegistrationSucess.svelte'\r\n\timport SchedulePage from './Schedule.svelte';\r\n\timport './styles/global.css';\r\n\timport ChangeClassPage from './ChangeClassTime.svelte';\r\n\timport CancelPage from './CancelClassPage.svelte';\r\n\timport ChangeSucess from './RescheduleSuccess.svelte'\r\n\timport LeaveCommentPage from './LeaveCommentPage.svelte'\r\n\timport '@fortawesome/fontawesome-free/css/all.min.css';\r\n\timport LeaveNoteSuccess from './LeaveNoteSuccess.svelte';\r\n\timport RescheduleRequestsPage from './RescheduleRequestsPage.svelte';\r\n\timport SettingsAndTimeslots from './SettingsAndTimeslotsPage.svelte';\r\n\timport InvoicesPage from './InvoicesPage.svelte';\r\n\timport StandaloneInvoicesPage from './StandaloneInvoicesPage.svelte';\r\n\timport AccountPage from './AccountPage.svelte';\r\n\timport TeacherRequestsPage from './TeacherRequestsPage.svelte';\r\n\timport AdminPage from './AdminPage.svelte';\r\n\timport UpdateCredentialsPage from './UpdateCredentialsPage.svelte';\r\n    import RedirectAfterPaymentRoute from './RedirectAfterPaymentRoute.svelte';\r\n\timport AdminSearchPage from './AdminSearchPage.svelte';\r\n\timport ClassDidNotHappenComponent from './ClassDidNotHappenComponent.svelte';\r\n\timport AdminTeacherSurveilancePage from './AdminTeacherSurveilancePage.svelte';\r\n\timport ForgotPasswordPage from './forgot-password.svelte';\r\n\timport TeacherPerformancePage from './TeacherPerformancePage.svelte';\r\n\timport TeacherInvoicesPage from './TeacherInvoicesPage.svelte';\r\n\timport TeacherRegistrationPage from './TeacherRegistrationPage.svelte';\r\n\timport AdminStudentInvoiceViewer from './AdminStudentInvoiceViewer.svelte';\r\n\timport AdminStudentScheduleViewer from './AdminStudentScheduleViewer.svelte';\r\n\timport AdminUserInvoicePageViewer from './AdminUserInvoicePageViewer.svelte';\r\n\timport AdminStudentsPage from './AdminStudentsPage.svelte';\r\n\timport AdminTeachersPage from './AdminTeachersPage.svelte';\r\n\timport AdminAllDashboardPage from './AdminAllDashboardPage.svelte';\r\n\timport AdminActivityDashboardPage from './AdminActivityDashboardPage.svelte';\r\n\timport AdminCalendarPage from './AdminCalendarPage.svelte';\r\n    import AdminMonthlyFeedbackPage from './AdminMonthlyFeedbackPage.svelte';\r\n\timport ExcerciseBankLandingPage from './Excercise_bank_landing_page.svelte';\r\n\timport UploadExercise from './Upload_excercise.svelte';\r\n\timport ExerciseBankPage from './ExerciseBankPage.svelte';\r\n\timport BendraInformacijaPage from './BendraInformacijaPage.svelte';\r\n\timport InvoiceOpenRoute from './InvoiceOpenRoute.svelte';\r\n    import InboxPage from './inbox/InboxPage.svelte';\r\n    import { conversationPath } from './inbox/navigation.js';\r\n  \r\n  \r\n  \r\n\tconst routes = {\r\n\t\t'/': AboutPage,\r\n\t\t'/about': AboutPage,\r\n\t\t'/forgot-password': ForgotPasswordPage,\r\n\t\t'/login-greeting': LogInGreeting,\r\n\t\t'/registration-for-class': RegisterForClass,\r\n\t\t'/register-success':RegisterSuccess,\r\n\t\t'/schedule':SchedulePage,\r\n\t\t'/class/:id': ChangeClassPage,\r\n\t\t'/class/cancel-class/:id':CancelPage,\r\n\t\t'/change-class-success': ChangeSucess,\r\n\t\t'/leave-comment/:id' : LeaveCommentPage,\r\n\t\t'/note-success':LeaveNoteSuccess,\r\n\t\t'/reschedule-requests': RescheduleRequestsPage,\r\n\t\t'/settingsAndTimeslots': SettingsAndTimeslots,\r\n\t\t'/invoice':StandaloneInvoicesPage,\r\n\t\t'/bendra-informacija': BendraInformacijaPage,\r\n\t\t'/account':AccountPage,\r\n\t\t'/teacher_requests':TeacherRequestsPage,\r\n\t\t'/admin':AdminPage,\r\n\t\t'/update-credentials':UpdateCredentialsPage,\r\n\t\t'/redirect-after-payment-route': RedirectAfterPaymentRoute,\r\n\t\t'/adminSearch' : AdminSearchPage,\r\n\t\t'/teacherSurveilance' : AdminTeacherSurveilancePage,\r\n\t\t'/teacher-performance': TeacherPerformancePage,\r\n\t\t'/teacher-invoices': TeacherInvoicesPage,\r\n\t\t'/teacher-registrations': TeacherRegistrationPage,\r\n\t\t'/admin/student-invoice-debug': AdminStudentInvoiceViewer,\r\n\t\t'/admin/student-schedule-debug': AdminStudentScheduleViewer,\r\n\t\t'/admin/user-invoice-view': AdminUserInvoicePageViewer,\r\n\t\t'/admin/students': AdminStudentsPage,\r\n\t\t'/admin/teachers': AdminTeachersPage,\r\n\t\t'/admin/all': AdminAllDashboardPage,\r\n\t\t'/admin/activity-dashboard': AdminActivityDashboardPage,\r\n\t\t'/admin/calendar': AdminCalendarPage,\r\n        '/admin/monthly-feedback': AdminMonthlyFeedbackPage,\r\n\t\t'/exercise-bank': ExcerciseBankLandingPage,\r\n\t\t'/exercise-bank/upload': UploadExercise,\r\n\t\t'/exercise-bank/bank': ExerciseBankPage,\r\n\t\t'/invoice-open/:paymentId': InvoiceOpenRoute,\r\n        '/inbox': InboxPage,\r\n        '/inbox/:id': InboxPage,\r\n  \r\n\t};\r\n\r\n    function routeEvent(event) {\r\n      if (event.type !== 'inbox-thread') return;\r\n      const destination = conversationPath(event.id);\r\n      if (destination && window.location.hash !== `#${destination}`) push(destination);\r\n    }\r\n\r\n  </script>\r\n  <div class=\"background\"></div>\r\n  <style>\r\n\t@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;700&display=swap');\r\n\r\n\t:global(body) {\r\n\t\tfont-family: 'Poppins', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\r\n\t\t}\r\n\t.background {\r\n\t  position: fixed;\r\n\t  top: 0;\r\n\t  left: 0;\r\n\t  width: 100%;\r\n\t  height: 100%;\r\n\t  z-index: -1;\r\n\t  background-color: #fffffa;\r\n\t  display: flex;\r\n\t  justify-content: center;\r\n\t  align-items: center;\r\n\t}\r\n\tmain {\r\n\t  padding: 1rem;\r\n\t  max-width: 600px;\r\n\t  margin: 0 auto;\r\n\t}\r\n\r\n\t/* Full screen for exercise bank page */\r\n\t:global(main > :global(.app-container)) {\r\n\t  max-width: none;\r\n\t  margin: 0;\r\n\t  padding: 0;\r\n\t}\r\n\r\n\t:global(main:has(> .app-container)) {\r\n\t  padding: 0;\r\n\t  max-width: none;\r\n\t  margin: 0;\r\n\t}\r\n  </style>\r\n\r\n  <main>\r\n\t<Router {routes} onRouteEvent={routeEvent} />\r\n  </main>\r\n"],"names":["activeGuard","approvedURL","window","location","href","navigationSequence","registerPersonalNotesNavigationGuard","guard","addEventListener","async","event","destination","isDirty","stopImmediatePropagation","sequence","history","replaceState","state","flush","acceptedHash","hash","pathname","search","uuid","conversationPath","id","test","toLowerCase","inboxLoginHref","encodeURIComponent","readInboxLogin","startsWith","query","URLSearchParams","slice","getAll","length","requested","get","target","forceLogin","getApiBase","includes","protocol","origin","navigator","serviceWorker","data","controller","source","type","version","path","stages","Set","reasons","statuses","diagnostics","WeakMap","enrollmentFailure","problem","stage","safeStage","has","reason","status","code","name","httpStatus","error","Error","set","node_env","globalThis","process","env","NODE_ENV","DEV","is_array","Array","isArray","index_of","prototype","indexOf","array_from","from","define_property","Object","defineProperty","get_descriptor","getOwnPropertyDescriptor","get_descriptors","getOwnPropertyDescriptors","object_prototype","array_prototype","get_prototype_of","getPrototypeOf","is_extensible","isExtensible","is_function","thing","noop","run","fn","run_all","arr","i","deferred","resolve","reject","promise","Promise","res","rej","fallback","value","lazy","undefined","to_array","n","Symbol","iterator","array","element","push","DERIVED","EFFECT","RENDER_EFFECT","MANAGED_EFFECT","BLOCK_EFFECT","BRANCH_EFFECT","ROOT_EFFECT","BOUNDARY_EFFECT","PAUSED","CONNECTED","CLEAN","DIRTY","MAYBE_DIRTY","INERT","DESTROYED","REACTION_RAN","DESTROYING","EFFECT_TRANSPARENT","EAGER_EFFECT","HEAD_EFFECT","EFFECT_PRESERVED","USER_EFFECT","EFFECT_OFFSCREEN","REACTION_IS_UPDATING","ASYNC","ERROR_VALUE","STATE_SYMBOL","COMPONENT_SYMBOL","LEGACY_PROPS","LOADING_ATTR_SYMBOL","PROXY_PATH_SYMBOL","ATTRIBUTES_CACHE","CLASS_CACHE","STYLE_CACHE","TEXT_CACHE","FORM_RESET_HANDLER","HMR_ANCHOR","STALE_REACTION","message","IS_XHTML","document","contentType","equals","this","v","safe_not_equal","a","b","safe_equals","lifecycle_outside_component","bind_invalid_checkbox_value","each_key_duplicate","each_key_volatile","index","legacy_mode_flag","tracing_mode_flag","EACH_ITEM_REACTIVE","EACH_INDEX_REACTIVE","EACH_IS_CONTROLLED","EACH_IS_ANIMATED","EACH_ITEM_IMMUTABLE","PROPS_IS_IMMUTABLE","PROPS_IS_RUNES","PROPS_IS_UPDATED","PROPS_IS_BINDABLE","PROPS_IS_LAZY_INITIAL","TEMPLATE_FRAGMENT","HYDRATION_ERROR","UNINITIALIZED","FILENAME","NAMESPACE_HTML","NAMESPACE_SVG","NAMESPACE_MATHML","bold","normal","state_snapshot_uncloneable","properties","console","warn","empty","snapshot","skip_warning","no_tojson","paths","copy","clone","Map","w.state_snapshot_uncloneable","excess","uncloned","map","join","cloned","original","unwrapped","key","keys","Date","getTime","structuredClone","toJSON","EventTarget","e","tag","label","tag_proxy","get_error","stack","limit","stackTraceLimit","Infinity","lines","split","new_lines","line","posixified","replaceAll","trim","get_stack","unshift","invariant","condition","e.invariant_violation","component_context","set_component_context","context","dev_stack","set_dev_stack","dev_current_component_function","set_dev_current_component_function","props","runes","p","c","s","x","r","l","u","$","function","pop","component","effects","create_user_effect","mark_as_component","is_runes","micro_tasks","run_micro_tasks","tasks","queue_micro_task","is_flushing_sync","queueMicrotask","flush_tasks","state_proxy_equality_mismatch","operator","hydrating","regex_is_valid_identifier","proxy","sources","is_proxied_array","parent_version","update_version","with_parent","reaction","active_reaction","set_active_reaction","set_update_version","result","Proxy","prop","receiver","Reflect","ARRAY_MUTATING_METHODS","args","eager_effects_deferred","apply","flush_eager_effects","updating","update_path","new_path","get_label","_","descriptor","configurable","enumerable","writable","e.state_descriptors_fixed","deleteProperty","increment","exists","active_effect","other_s","call","ls","Number","isInteger","ownKeys","own_keys","filter","setPrototypeOf","e.state_prototype_fixed","description","get_proxied_value","is","$window","is_firefox","first_child_getter","next_sibling_getter","init_operations","userAgent","element_prototype","Element","node_prototype","Node","text_prototype","Text","__e","__svelte_meta","cleanup","__svelte_cleanup","lastIndexOf","item","from_index","w.state_proxy_equality_mismatch","init_array_prototype_warnings","create_text","createTextNode","get_first_child","node","get_next_sibling","child","is_text","first_child","first","Comment","only_child","sibling","count","next_sibling","create_element","namespace","createElement","createElementNS","adjustments","handle_error","effect","f","message_descriptor","indent","component_stack","ctx","get_adjustments","parent","apply_adjustments","invoke_error_boundary","adjusted","STATUS_MASK","set_signal_status","signal","update_derived_status","derived","deps","defer_effect","dirty_effects","maybe_dirty_effects","add","listening_to_form_reset","without_reactive_context","previous_reaction","previous_effect","set_active_effect","listen_to_event_and_reset_event","handler","on_reset","prev","evt","then","defaultPrevented","elements","capture","flatten","blockers","sync","d","derived_safe_equal","pending","settled","deriveds","forEach","toString","replace","restore","previous_component_context","previous_batch","previous_dev_stack","activate_batch","activate","set_reactivity_loss_tracker","blocker_promise","all","decrement_pending","increment_pending","unset_context","finish","finally","expression","e.async_derived_orphan","should_suspend","deferreds","create_effect","async_effect","reactivity_loss_tracker","effect_deps","warned","skipped_deps","new_deps","batch","is_rendered","async_deriveds","OBSOLETE","values","delete","internal_set","recent_async_deriveds","setTimeout","w.await_waterfall","deactivate","teardown","fulfil","next","go","async_derived","catch","deactivate_batch","current_batch","boundary","blocking","update_pending_count","decrement","flags","reactions","rv","wv","ac","created","user_derived","push_reaction_value","destroy_derived_effects","destroy_effect","execute_derived","prev_active_effect","is_destroying_effect","prev_eager_effects","eager_effects","set_eager_effects","e.derived_references_self","update_reaction","update_derived","increment_write_version","is_fork","batch_values","effect_tracking","unfreeze_derived_effects","update_effect","first_batch","last_batch","last_scheduled_effect","is_processing","collected_effects","legacy_updates","flush_count","source_stacks","uid","Batch","started","linked","current","previous","commit_callbacks","discard_callbacks","blocking_pending","scheduled","new_effects","skipped_branches","unskipped_branches","decrement_queued","constructor","is_deferred","skipped","skip_effect","m","unskip_effect","callback","schedule","tracked","roots","covered","render_effects","updates","unlink","infinite_loop_guard","root","traverse","reset_all","discard","ensure","defer_effects","t","reset_branch","earlier_batch","find_earlier_batch","merge","clear","flush_queued_effects","next_batch","old_values","is_branch","is_dirty","is_derived","transfer_effects","mark","oncommit","updated","register_created_effect","commit","is_earlier","batch_value","others","unskipped","marked","checked","mark_effects","current_unequal","v1","v2","depends_on","blocking_pending_count","ondiscard","is_pending","flushSync","was_flushing_sync","prev_previous_batch","update","entry","e.effect_update_depth_exceeded","eager_block_effects","nodes","unlink_effect","size","ordered_effects","ancestor","j","schedule_effect","depends","dep","set_during_effect","trace","mutable_source","initial_value","immutable","trackable","mutate","untrack","should_proxy","untracking","current_sources","e.state_unsafe_mutation","new_value","seen","count_deps","updated_during_traversal","mark_reactions","untracked_writes","set_untracked_writes","dirty","update_pre","not_dirty","captured_signals","invalidate_inner_signals","previous_captured_signals","capture_signals","set_is_destroying_effect","write_version","read_version","dependencies","dependency","schedule_possible_effect_self_invalidation","previous_deps","previous_skipped_deps","previous_untracked_writes","previous_sources","previous_untracking","previous_update_version","abort","update_dependencies","remove_reactions","remove_reaction","new_length","destroy_effect_children","freeze_derived_effects","start_index","previous_component_fn","component_function","previous_stack","destroy_block_effect_children","execute_effect_teardown","tick","depends_on_old_values","should_connect","is_new","reconnect","deep_read_state","deep_read","visited","proto","descriptors","validate_effect","rune","e.effect_orphan","e.effect_in_unowned_derived","e.effect_in_teardown","last","parent_effect","parent_last","push_effect","user_effect","legacy_pre_effect","token","ran","render_effect","legacy_pre_effect_reset","template_effect","block","branch","previously_destroying_effect","remove_dom","removed","end","remove_effect_dom","start","transitions","transition","stop","remove","pause_effect","destroy","pause_children","remaining","check","out","local","is_global","resume_effect","resume_children","in","move_effect","fragment","append","subscribe_to_store","store","invalidate","unsub","subscribe","unsubscribe","subscriber_queue","subscribers","run_queue","subscriber","updateState","available","busy","frozen","failed","guards","UUID","registration","prepared","mutations","requesting","publish","changes","updateFrozen","registerUpdateGuard","ready","onLine","every","release","clearTimeout","timer","refresh","waiting","sameCredential","localStorage","getItem","willReloadAfterWorkerChange","committed","worker","deadline","now","requestInboxUpdate","port","crypto","randomUUID","channel","MessageChannel","port1","onmessage","postMessage","port2","ok","close","CLEANUP_KEY","SUSPENDED_KEY","ORPHAN_KEY","LOCK","fail","assign","tokenNow","publicBinding","generation","isSafeInteger","owner_id","revoked","expires_at","isFinite","parse","phoneWorkerCommand","scriptURL","revision","withDeviceLock","work","locks","request","mode","cleanupQueue","raw","JSON","saveQueue","setItem","stringify","rememberCleanup","binding","clean","queue","findIndex","getRegistration","scope","active","pushManager","revoke","AbortController","response","fetch","method","cache","credentials","headers","Authorization","body","expected_generation","json","drainCleanup","ownerId","orphanRaw","orphan","existing","getSubscription","removeItem","some","retryPhoneCleanup","phoneCanEnroll","config","enabled","configuration","user_id","origin_matches","inbox_url","vapid_key_id","public_key","enrollPhone","api","matchMedia","matches","standalone","isSecureContext","bytes","Uint8Array","atob","char","charCodeAt","decodePublicKey","permission","Notification","requestPermission","granted","verified","timeoutMs","manager","bound","subscription","options","applicationServerKey","priorKey","userVisibleOnly","subscriptionData","expected_revision","latest","authenticatedPhoneRead","PASSIVE_EVENTS","is_passive_event","event_symbol","all_registered_events","root_event_handles","event_name","dom","passive","target_handler","handle_event_propagation","cancelBubble","__removed","create_event","HTMLMediaElement","removeEventListener","last_propagated_event","last_propagated_event_clear_scheduled","handler_element","owner_document","ownerDocument","composedPath","current_target","path_idx","handled_at","at_idx","handler_idx","throw_error","other_errors","delegated","currentTarget","policy","trustedTypes","createPolicy","createHTML","html","create_fragment_from_html","elem","innerHTML","create_trusted_html","content","assign_nodes","from_html","is_fragment","use_import_node","has_start","importNode","cloneNode","from_svg","ns","wrapped","createDocumentFragment","appendChild","from_namespace","text","comment","frag","createComment","anchor","before","Boundary","transform_error","hydrate_open","children","main_effect","pending_effect","failed_effect","offscreen_fragment","local_pending_count","pending_count","pending_count_update_queued","effect_pending","effect_pending_subscriber","createSubscriber","render","hydrate_resolved_content","hydrate_failed_content","reset","invoke_onerror","create_reset","did_reset","calling_on_error","is_destroyed","e.svelte_boundary_reset_onerror","onerror","err","hydrate_pending_content","handled","has_pending_snippet","previous_ctx","get_effect_pending","handle_error_result","transformed_error","set_text","str","nodeValue","listeners","mounted_components","BranchManager","batches","onscreen","offscreen","outroing","k","on_destroy","if_block","elseif","branches","update_branch","has_branch","NAN","get_key","render_fn","legacy","destroy_effects","to_destroy","preserved_effects","items","offscreen_anchor","each","get_collection","fallback_fn","each_array","collection","first_run","to_animate","is_animated","skip_to_branch","matched","stashed","measure","outrogroups","group","done","unfix","link","move","destroy_length","controlled_anchor","fix","groups","fast_path","parent_node","textContent","pause_effects","reconcile","key_again","e.each_key_volatile","String","create_item","key_fn","e.each_key_duplicate","validate_each_keys","dest","next_node","get_value","is_controlled","svg","mathml","wrapper","get_component","action","payload","inited","o","clsx","arguments","_clsx","whitespace","append_styles","styles","important","separator","css","to_css_name","set_class","is_html","prev_classes","next_classes","next_class_name","directives","classname","len","substring","to_class","removeAttribute","className","setAttribute","is_present","classList","toggle","update_styles","priority","style","removeProperty","setProperty","set_style","prev_styles","next_styles","next_style_attr","normal_styles","important_styles","new_style","in_str","in_apo","in_comment","reserved_names","name_index","to_style","cssText","set_selected","option","selected","hasAttribute","select_option","select","mounting","multiple","get_option_value","selectedIndex","init_select","observer","MutationObserver","entries","is_selectedcontent_mutation","preserve","__defaultValue","selectedOptions","option_value","was_selected","apply_default_select_value","__value","observe","childList","subtree","attributes","attributeFilter","disconnect","bind_select_value","WeakSet","is_reset","querySelectorAll","selected_option","querySelector","activeElement","closest","addedNodes","removedNodes","nodeName","IS_CUSTOM_ELEMENT","IS_HTML","PROGRESS_TAG","set_value","get_attributes","set_checked","set_attribute","attribute","get_setters","set_custom_element_data","setters_cache","getAttribute","customElements","namespaceURI","cache_key","setters","element_proto","bind_value","input","e.bind_invalid_checkbox_value","defaultValue","is_numberlike_input","to_number","selectionStart","selectionEnd","Math","min","bind_group","inputs","group_index","is_checkbox","binding_group","get_binding_group_value","splice","sort","compareDocumentPosition","bind_checked","defaultChecked","Boolean","bind_prop","desc","is_bound_this","bound_value","element_or_component","bind_this","get_parts","component_effect","old_parts","parts","original_teardown","stopPropagation","preventDefault","init","callbacks","changed","user_pre_effect","observe_all","fns","bubble_event","$$props","events","is_store_binding","IS_UNMOUNTED","store_get","store_name","stores","is_synchronous_callback","get_store","setup_stores","rest_props_handler","exclude","property","e.props_rest_readonly","spread_props_handler","getOwnPropertySymbols","spread_props","bindable","fallback_value","fallback_dirty","fallback_signal","get_fallback","setter","is_entry_props","getter","is_store_sub","previous_is_store_binding","capture_store_binding","e.props_invalid_value","legacy_parent","$$legacy","mutation","overridden","throw_rune_error","e.rune_outside_svelte","onMount","e.lifecycle_outside_component","onDestroy","createEventDispatcher","active_component_context","detail","bubbles","cancelable","CustomEvent","create_custom_event","loose","RegExp","pattern","tmp","ext","shift","__svelte","router","$.state","getLocation","_loc","_location","querystring","_querystring","_params","loc","params","currentHref","hashPosition","substr","qsPosition","charAt","__svelte_spa_router_scrollX","scrollX","__svelte_spa_router_scrollY","scrollY","restoreScroll","scrollTo","formData","$.mutable_source","username","password","errorMessage","parseJwt","base64","jsonPayload","decodeURIComponent","handleForgotPassword","expiry","redirectTo","inboxLogin","parseInt","log","sessionStorage","form","$.sibling","$.first_child","input_1","div_1","$$render","consequent","div_2","$.get","$$value","$.event","$.set","platform","connection","effectiveType","downlink","rtt","fetchWithTimeout","url","timeout","race","retryCount","apiBase","errorData","access","decodedToken","exp","dispatchEvent","Event","icon","$.prop","cl","root_2","$.untrack","img","root_1","$.template_effect","$.set_attribute","consequent_1","$.set_class","API_ROOT","AgreementApiError","retryAllowed","super","authHeaders","extra","parseError","error_code","retry_allowed","referrerPolicy","getCurrentRequirements","requirements","results","resumeSigning","publicId","launchMode","launch_mode","restartLostSigning","restartPendingSigning","transactionId","confirm_restart","transaction_id","pendingRestartConfirmation","pendingRestartUnconfirmed","prepareGatewayLaunch","launchUrl","reconcileRequirement","retryFinalization","retry_finalization","openAgreementFile","kind","suffix","blob","objectUrl","URL","createObjectURL","open","revokeObjectURL","requirement","returnFocus","dispatch","profileRequest","dialog","summary","firstInput","submitting","fields","legal_name","legal_surname","country","email","personal_code","errors","submitError","idempotencyKey","wasOpen","editedFields","clearSensitiveState","openDialog","showModal","focus","profile","aborted","defaults","first_name","last_name","cancel","dialog_1","root_4","family","covered_students","student","button","p_1","strong","div","$.set_text","text_4","node_1","small","consequent_2","node_2","small_1","root_3","consequent_3","input_2","node_3","small_2","consequent_4","input_3","node_4","small_3","consequent_5","input_4","node_5","small_4","consequent_6","button_1","node_6","button_2","title","version_title","version_number","validate","getRandomValues","hex","byte","padStart","newIdempotencyKey","identity","idempotency_key","initiateSigning","public_id","toUpperCase","redirectUrl","redirect_url","redirect_uri","launch_url","parsed","isSecureProviderRedirect","isSameOriginLocalRedirect","$.mutate","focusable","shiftKey","GATEWAY_LAUNCH_PATH","parseGatewayLaunchUrl","searchParams","POLL_INTERVAL_MS","MAX_POLLS","pollTimer","closeButton","launchFrame","session","safeUrl","checking","pollCount","pollingStopped","finalizationFailureMessage","requirementId","begin","currentSession","handleLaunchMessage","schedulePoll","contentWindow","outcome","stopPolling","refreshStatus","manual","continueTopLevel","can_resume","popup","opener","finalizationFailed","section","header","iframe","span","disabled","button_3","prefix","ownerPrefix","userId","canonical","fromEntries","readRequests","thread","rows","row","digest","endpoint","draftVersion","createdAt","left","right","createRecoverySession","onStorageProblem","memory","read","stored","remember","serverOwned","saved","safe","encoded","rememberRequest","track","forget","forgetRequest","isUserTeacher","isUserSuper","isLoading","currentUsername","isHerkulezas","getUsernameFromJwt","payloadJson","normalized","padded","repeat","base64UrlDecode","user_name","preferred_username","user","logout","clearInboxRecovery","checkAuthentication","response2","data2","checkIfUserIsTeacher","updateLastActivity","studentButtons","teacherButtons","superUserMainButtons","superUserDashboardButtons","mainButtons","dashboardButtons","visible","fileError","signingTrigger","gatewaySession","restarting","isOutstanding","isInitiable","can_initiate","load","preview","startSigning","initiableRequirement","resume","resumableRequirement","restartLocal","lostRequirement","restartPending","can_restart_pending","confirm","pending_restart_transaction_id","dismiss","find","can_restart_local","aside","root_6","fragment_1","button_4","root_5","button_5","button_6","SigningIdentityDialog","submitted","GatewaySigningModal","node_7","complete","OutstandingAgreementNotice","$$anchor","$.each","IconButton","alternate","section_1","$.index","placeholder","label_1","textarea","$.bind_value","selectedValue","onChange","$$item","option_1","$$array","option_1_value","$.bind_select_value","onRemove","$$args","backLink","logoSrc","backIconSrc","img_1","requestAnimationFrame","ICONS","freeze","mathematics","english","lithuanian","chemistry","physics","biology","it","SUBJECT_NAMES","subjectOptions","getSubjectIcon","usesMathEditor","selectedSubject","subjects","subject","isSelected","onToggle","classes","$.set_checked","Checkbox","selectSubject","subjectName","topicsOfInterest","selectedClass","datetimeValues","showSuccessNotification","showDuplicateNotification","isSubmitting","classChoices","getCookie","cookieValue","cookie","cookies","NavBarReusable","div_3","div_4","SingleSelectCheckboxArea","TextField","Dropdown","datetimeValue","DateTimePicker","removeDateTime","alert","dt","isDuplicate","topics","checkForDuplicateRegistration","teacher","time","date","$.html","classId","showManualLink","linkCopied","handleClassJoin","newWindow","statusText","toggleManualLink","copyToClipboard","clipboard","writeText","currentFilter","beforeChange","setFilter","classes_1","classes_2","classStart","buttonClass","cutoffAppliesFrom","setInterval","clearInterval","startTime","NaN","expired","formatDateTime","datetime","timePart","datePart","handleAction","request_id","idGcal","fetchEvents","getHeaderClass","has_responsibility_incident","directedTo","FilterButtons","ClassName","clName","StudentName","studName","TeacherName","div_5","$0","$.derived_safe_equal","oldDisplay","$1","TimeShower","div_6","newDisplay","node_8","div_7","fragment_2","node_9","div_8","node_11","additionalClass","div_10","RescheduleButton","d_1","can_participate","getClassForEvent","cancelled_payable","incident_type","getHeaderText","root_7","consequent_7","alternate_1","groupedRequests","loading","handleFetchRequests","$.derived","root_8","h2","req","h4","requested_times","span_2","toLocaleDateString","timeZone","month","day","year","getFullYear","toLocaleTimeString","hour","minute","formatRequestedTime","div_9","text_5","topic_start","requestId","handleAcceptRequest","accepted_by_teacher","accepted","getSubjectDisplayName","English","Lithuanian","History","Chemistry","Physics","Biology","IT","getGradeDisplayName","grade","students","span_1","full_name","sections","headings","readonly","matchingAvailable","titleIdeas","focusedTitleId","titleFields","commentFields","dismissIdeas","sectionId","change","nextHeadings","field","offset","ids","newHeadings","heading","$.bind_this","idea","chooseTitle","label_2","$.set_value","contains","relatedTarget","ROOT","createPersonalNotesApi","fetchImpl","classPath","save","cursor","template","adminList","adminRead","note","createNoteAutosaver","initial","writeNote","writeTemplate","delay","running","noteGeneration","savedNoteGeneration","templateGeneration","savedTemplateGeneration","disposed","templateRevision","saving","conflict","notify","edit","dispose","classDescription","info","starts_at","Intl","DateTimeFormat","dateStyle","timeStyle","format","anchorEventId","panel","selectedEventId","draft","saver","loadError","actionError","historyRows","historyCursor","historyLoading","historyError","destroyed","loadSequence","loadSelected","eventId","emittedRevision","event_id","has_note","loadHistory","combined","next_cursor","requestClose","removeNote","root_9","returnValue","h3","p_2","matching_available","p_5","p_6","details","PersonalNoteSections","text_1","class_info","p_7","consequent_8","nextCursor","ul","li","PersonalNoteHistory","controls","getClientRects","notesTrigger","notesEventId","notesPanel","closePersonalNotes","personalNoteChanged","has_personal_note","isLoadingEvents","scheduleError","activeTab","unacceptedRequestsCount","unacceptedRescheduleRequestsCount","switchTab","tab","fetchUnacceptedRequestsCount","fetchUnacceptedRescheduleRequestsCount","dayRequests","isPastEvent","eventTime","validEventTime","match","endTime","endHours","getHours","endMinutes","getMinutes","formatEventTime","nowInLithuaniaStr","toLocaleString","nowInLithuania","eventInLithuaniaStr","eventInLithuania","bufferMinutes","eventWithBuffer","formattedDate","handleFilterChange","fetchUserRole","urlParams","TeacherPersonalNotesPanel","$$events","root_14","root_13","consequent_10","pamoka","click","trigger","openPersonalNotes","consequent_11","fragment_4","consequent_12","consequent_13","participants","participant","p_3","root_11","participation_status","consequent_14","node_17","node_18","mokytojas","laikasDisp","node_19","StudentsWithGradesComponent","consequent_15","ButtonToJoinClass","node_23","nuoroda","laikasRaw","ButtonToComment","consequent_17","hasClassStarted","consequent_19","consequent_9","RescheduleRequestsContent","TeacherRegistrationRequestsComponent","consequent_20","consequent_21","consequent_22","availableSlots","selectedSlot","groupedSlots","handleSubmit","datetime_start","translateDayName","englishDayName","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","formatDate","dateStr","slot","dateKey","day_name","slots","start_time","localeCompare","dateA","dateB","dateGroup","h5","end_time","selectSlot","toISOString","classinfo","skipNotification","useComment","handleSkipNotificationChange","handleAdditionalClassChange","handleUseCommentChange","handleDateSubmit","selectedDateTime","skip_notification","additional_class","available_slots","fetchRescheduleRequest","tp","fd","AvailableTimeSlotsPicker","Button1","selectedStudentId","requiresAcknowledgement","showPaymentDialog","paymentDialog","backButton","loadDetails","is_teacher","requires_payment_acknowledgement","failure","openPaymentDialog","closePaymentDialog","handleCancelSubmit","selectedStudent","submitCancellation","acknowledgePayment","showUpdatedPolicy","student_id","acknowledge_payment","alreadyCancelled","dateParts","requireReason","CancelReason","p_4","node_10","rating","maxRating","onRate","handleClick","handleKeydown","infoText","showTooltip","technicalIssuesRating","learned","effortRating","generalRating","extraDetails","isCheckboxSelected","isHomeworkSelected","isCompleteSelected","handleRatingUpdate","handleCheckboxToggle","handleHomeworkToggle","handleCompleteToggle","isTeacher","existing_note","technical_issues","effort","general","on_time","homework","fetchClassData","CommentTipComponent","StarRating","CheckBoxForLeaveComment","node_13","node_14","label_3","node_12","alternate_2","csrfToken","userTimeSlots","teachingStartDate","refreshTrigger","fetchUserTimeslots","user_timeslots","teaching_start_date","displayTimeSlots","FilterButtonsForSettingsPage","savedStartDate","inputStartDate","start_date","success","TeachingStartDateComponent","daysOfWeek","selectedDay","day_of_week","reload","TimeSlotInputComponent","timeslot","dayInLithuanian","TimeSlotComponent","timeslot_id","deleteTimeSlot","formatEuroAmount","num","parseFloat","NumberFormat","useGrouping","minimumFractionDigits","maximumFractionDigits","selectedClasses","round","amount_due","div_12","has_class_charge","weekday","fullName","formatTeacherName","price","selectableClasses","selectableIds","toggleSequential","payments","revealedRefs","buildInvoiceOpenHref","direct","paymentId","rawUrl","invoice_url","m2","derivePaymentId","toggleRef","getPaymentDescription","balance_transaction_description","paid_from","paid_until","text_2","reference","getPaymentDisplayText","amount","created_at","invoices","teacherName","fetchTeacherInvoices","teacher_name","invoice","invoice_number","monthDisplay","monthTranslations","January","February","March","April","May","June","July","August","September","October","November","December","translatedMonth","translateMonthDisplay","month_display","dateString","pdf_url","download","file_name","downloadInvoice","InvoiceApiError","authenticationRequired","ignoredClassIds","requestInvoiceJson","_error","responsePayload","ignored_class_ids","VILNIUS_MONTH","monthKey","formatToParts","partValue","buildInvoiceClassWindow","visibleOlderMonthCount","visibleFutureMonthCount","currentMonth","sortedClasses","firstOlderOutstanding","classItem","firstOutstandingMonth","hasOlderOutstanding","availableOlderMonths","classMonth","initialOlderMonthCount","availableFutureMonths","requestedOlderMonthCount","max","trunc","requestedFutureMonthCount","appliedOlderMonthCount","appliedFutureMonthCount","visibleMonths","visibleClasses","availableOlderMonthCount","availableFutureMonthCount","canShowMorePast","canShowLessPast","canShowMoreFuture","canShowLessFuture","retainVisibleSelections","selectedClassIds","visibleIds","invoiceSum","paymentLink","isFetchingPaymentLink","invoiceData","errorForInvoiceData","isLoadingInvoiceData","isCheckingUserType","showOneMorePastMonth","showOneLessPastMonth","nextMonthCount","smallerWindow","showOneMoreFutureMonth","showOneLessFutureMonth","redirectToInvoiceLogin","storage","activeToken","parsedExpiry","ensureActiveInvoiceSession","fetchPaymentLinkAndRedirect","hasToken","selectedClassesLength","sortedByTime","getPaidFromUntil","selected_class_ids","sum","payment_link","isStandalone","fetchInvoiceData","outstandingWindow","MAX_SAFE_INTEGER","current_balance","recalculateMyBalance","classWindow","reduce","cls","calculateInvoiceSum","TeacherInvoicesPage","fragment_3","CheckBoxAreForClassesComponent","CompletedPaymentsList","previous_payments","balance","last_updated_date","hidden","feedback","reconciling","checkingRequirementId","checkingFeedback","finalizationFailedFeedback","caught","isHiddenAgreementResponse","restartSigning","can_restart_signing","restart_transaction_id","returnedId","isReturn","getElementById","openingFile","showDocumentId","assigned","signing_in_progress","signed_storage_pending","finalization_failed","storage_failed","provider_failed","create_unknown","declined","cancelled","completed_stored","isNaN","openFile","statusInfo","canSign","canReconcile","can_reconcile","canRetryFinalization","can_retry_finalization","canRestartSigning","canRestartPending","canResume","canRestartLocal","attemptOutcomeUnknown","attempt_outcome_unknown","effectiveDate","effective_at","effective_date","completedDate","completed_at","signed_at","documentId","artifact_public_id","article","root_18","p_9","root_10","root_12","button_7","root_16","button_8","root_17","button_9","consequent_16","consequent_18","AgreementCard","$3","OWNER_QR_PATH","PDF_CONTENT_TYPE","TEACHER_WORK_QR_ACCEPT","fetchTeacherWorkQrCode","teacherId","fallbackError","responseError","loadTeacherWorkQrPreview","openWindow","pdfWindow","previewWindow","reserveTeacherWorkQrPdfWindow","presentTeacherWorkQrFile","unregisterNavigation","phoneNumber","receiveMessages","receiveDailyReminders","accountLoaded","accountLoadError","accountNeedsLogin","bankNr","indivLic","meetingLink","desiredStudentCount","workWithChildrenQrCode","uploadedAt","qrCodeFile","qrCodeInput","qrCodeUploading","qrCodeViewing","qrCodeMessage","qrCodeError","qrCodePreviewUrl","qrCodePdfUrl","selectedSubjects","availableSubjects","subjectSearch","subjectGrades","gradeErrors","studentGrade","autosave","saveStatus","edited","validateField","saveField","requireAccountLogin","fetchInitialData","teacherInfo","newSelected","newGrades","timers","equal","drain","invalid","createAccountAutosave","normalizeSearchText","toLocaleLowerCase","normalize","removeSubject","selectQrCode","files","uploadQrCode","file","FormData","uploadTeacherWorkQrCode","replaced","closeQrCodePreview","viewQrCode","normalizedSubjectSearch","filteredSubjects","currentValues","NavbarReusable","AgreementSection","input_5","input_6","input_7","input_8","div_11","formatQrUploadDate","input_9","div_13","div_14","div_15","div_17","input_10","div_18","div_19","input_11","toggleSubject","div_21","div_22","root_15","div_23","div_24","input_12","div_25","clearGradeError","div_27","div_28","retrieveEventData","requests","ClassNameComponent","class_name","timeslots","ts","TimeShowerComponentForTeacherReq","accept_request","accepted_by","student_name","searchedTimeSlots","availabilityWindow","days","toMinutes","hours","minutes","toTime","floor","ranges","range","subtract","conflicts","conflictStart","conflictEnd","flatMap","pieces","formatDuration","remainder","end_date","timezone","teacher_id","preferred_overlap_minutes","total_free_minutes","dayName","dayIndex","availability","matched_timeslots","bookings","conflicting_classes","class_start_time","class_end_time","preferences","free","booked","availableStart","availableEnd","overlapStart","overlapEnd","preferred","dayDetails","span_3","span_4","has_submitted_timeslots","dayOfWeek","dayNames","isDragging","dragType","timelineElement","timelineRect","width","timeToMinutes","timeStr","minutesToTime","mins","timeToPosition","positionToTime","position","rounded","updateTimelineRect","rect","getBoundingClientRect","handleMouseDown","handleMouseMove","handleMouseUp","clientX","newTime","startMinutes","snapToNearest15","startPos","endPos","rangeWidth","$.set_style","clickedTime","clickedMinutes","abs","fallbackSubjects","grades","selectedGrade","timeSlots","responseData","submittedTimeSlots","updateTimeSlot","slotIndex","searchTerm","lastSyncedValue","isOpen","highlightedIndex","inputElement","selectOption","clearSelection","filteredOptions","opt","highlighted","Autocomplete","VisualTimeRangePicker","removeTimeSlot","TeacherFinderDisplayComponent","matched_teachers","availability_window","validateForm","time_slots","safeMinutes","formatActiveTeacherCount","safeCount","report","filterOptions","teachers","subjectId","expandedTeacherId","loadCapacity","buildCapacityQuery","filters","monthLabel","period","percentage","total","available_minutes","sortTeachersByAvailability","maxWeekdayMinutes","weekdays","submitted_minutes","select_1","option_2","option_3","option_3_value","select_2","option_4","option_5","option_5_value","article_1","strong_1","comparison","previous_academic_year","active_teacher_count","article_2","article_3","strong_5","span_5","span_6","available_interval_count","$2","$4","occupied_minutes","section_2","article_4","span_8","strong_6","span_9","strong_7","div_16","span_11","span_12","span_13","dates","strong_11","available_intervals","interval","span_15","text_26","duration_minutes","dateLabel","teachers_with_availability","teacher_count","generated_at","terminalStatuses","responseJson","selectedTeacher","teacherQuery","filteredTeachers","showTeacherDropdown","onlyRefreshSelected","refreshType","warnings","classesUploaded","classesSkipped","calendarFailures","refreshProgress","pollingController","activeRefreshKey","currentDate","selectedMonth","getMonth","selectedYear","selectedDate","selectedWeekMonth","selectedWeekYear","selectedWeekOption","weekOptions","monthOptions","months","currentYear","monthName","generateMonthOptions","selectedMonthYear","updateWeekOptions","weeks","firstDayOfMonth","lastDayOfMonth","currentMonday","firstDayWeekday","getDay","setDate","getDate","daysBack","weekNumber","sunday","weekStart","weekEnd","startStr","endStr","startDate","endDate","mondayDate","generateWeekOptions","selectTeacher","clearTeacherSelection","applyRefreshJob","job","progress","classes_uploaded","classes_skipped","failures","followRefresh","statusUrl","finalJob","wait","onUpdate","DOMException","pollCalendarRefresh","today","getTodayDate","fetchTeachers","filterTeachers","root_20","option_6","option_7","option_8","option_9","option_10","option_11","option_12","option_13","option_14","option_15","option_16","option_17","select_3","option_18","option_18_value","processed","missing_location","missing_description","div_20","missing_summary","missing_organizer","skipped_events","missing_fields","div_26","total_skipped","root_19","selectedOption","monthToRefresh","yearToRefresh","selectedWeek","weekStartDate","weekEndDate","enqueueCalendarRefresh","only_refresh_selected","google_calendar_id","googleCalendarId","refresh_type","selected_month","selected_year","selected_date","selected_week_start","selected_week_end","status_url","getRatingClass","onTime","searchResults","isSearching","debounceTimer","abortController","lastRequestId","debouncedSearch","term","search_term","searchStudents","selectStudent","phone_number","studentId","embedded","comments","lastAutoLoadedStudentId","selectedStudentObj","getComments","$selectedStudent","handleStudentSelected","handleStudentCleared","StudentSearchComponent","$comments","commentGroup","displayTime","TeacherNameComponent","RatingDisplayComponent","student_comment","CameOnTimeDisplay","TextDisplayForAdminComments","teacher_comment","node_20","node_21","alternate_3","databaseLabels","student_email","google_cal_searchable","student_phone","parent_name","parent_email","parent_phone","special_conditions","spreadsheetLabels","searchTimer","page","hasMore","selectedId","detailLoading","resendOpen","selectedRecipients","resending","feedbackIsError","requestSequence","editing","editForm","deleteOpen","deleteUsername","deleting","notice","conditionOptions","statusLabel","incomplete","partial","sending","unknown","unavailable","responseBody","messages","loadList","nextPage","has_more","cause","refreshAndSelect","applyDetail","display_name","email_status","spreadsheet_status","spreadsheet","database_status","database","beginEdit","saveAppData","deleteUser","confirmation_username","confirmResend","recipients","resend_results","root_21","required","fieldset","input_4_value","classes_3","dl","$$array_1","classes_4","h4_1","dl_1","$$array_2","dt_1","h4_2","recipient","can_resend","toggleRecipient","node_16","node_15","label_4","button_10","button_11","statusComponent","firstName","lastName","studentPhoneNumber","parentPhoneNumber","parentFullName","parentEmail","specialConditions","IB","AdminAccountCreationStatusComponent","selectedConditions","student_phone_number","parent_phone_number","parent_full_name","users","filteredUsers","isSaving","successMessage","searchQuery","activeFilter","pricingModifiers","editingUserId","editingModifier","studentClasses","isLoadingClasses","currentClassesRequestKey","typeBasePriceRules","isLoadingTypeRules","selectedTypeKey","typeBasePriceInput","typeValidFrom","typeValidUntil","editingTypeRuleId","makeTypeKey","availableTypeOptions","isLoadingTypeOptions","applyFilters","filtered","user_type","startEditingModifier","existingModifier","exempt_from_prime_time_surcharge","exempt_from_high_activity_discount","exempt_from_family_discount","exempt_from_ib_surcharge","exempt_from_special_needs_surcharge","exempt_from_lithuanian_surcharge","custom_base_price","custom_minimum_price","custom_group_price_2_students","custom_group_price_3plus_students","notes","is_active","loadStudentClassesForMonth","types","subject_name","loadStudentClassTypes","rules","loadStudentTypeBasePrices","monthStr","requestKey","resetTypeBasePriceForm","upsertTypeBasePriceRule","base_price","valid_from","valid_until","rule","idx","loadUsers","modifiers","modifier","loadPricingModifiers","idNum","showOverrideModal","selectedClassItem","overridePrice","overrideNotes","isClassOverridden","is_overridden","is_discounted","openOverrideModal","override_amount","original_price","discount_notes","closeOverrideModal","saveClassOverride","class_id","clearClassOverride","clear_override","setOverrideToZero","previousMonth","nextMonth","cancelEditingModifier","saveModifier","getUserName","root_35","userModifier","deleteModifier","exemptions","getModifierSummary","root_32","input_13","div_30","div_31","span_7","input_14","text_15","text_16","nextActive","toggleTypeBasePriceRuleActive","editTypeBasePriceRule","ruleId","deleteTypeBasePriceRule","div_32","div_33","span_10","button_12","div_34","isFutureClass","date_local","label_6","root_26","div_35","text_20","root_22","root_23","root_24","root_25","transaction_found","pricing_error","totalClasses","overriddenClasses","originalTotal","currentTotal","span_19","root_27","toFixed","text_23","div_37","root_30","div_38","div_39","button_13","div_40","p_8","div_41","input_15","div_42","button_14","button_15","button_16","$.stopPropagation","$$arg","div_44","textarea_1","label_7","input_16","button_17","root_31","button_18","consequent_23","alternate_6","consequent_24","div_47","root_33","consequent_25","div_48","root_34","consequent_26","getTeacherPricingSummary","customPrices","individual_base_price","pair_base_price","group_base_price","ib_surcharge","special_needs_surcharge","lithuanian_surcharge","performance_bonus","editingTeacherId","teacherClasses","loadTeacherClassesForMonth","override_notes","getTeacherName","deletedName","loadTeachers","embeddedId","pricingTeacher","teacherModifier","$$index","alternate_5","div_29","div_36","div_43","div_45","div_46","fragment_5","isUpcomingClass","div_50","div_51","div_52","div_53","div_54","div_55","div_57","alternate_8","div_60","div_61","userQuery","transactionType","customDate","useCustomDate","manualPayments","isLoadingManualPayments","manualPaymentsError","isDownloadingCsv","filteredStudents","selectedUser","showUserDropdown","loadStudents","loadManualPayments","selectUser","manual_payments","clearMessages","filterStudents","text_3","mp","user_first_name","user_last_name","user_email","transaction_type","iso","validationError","setHours","requestData","custom_creation_date","custom_date_used","creation_date","new_balance","had_discrepancy","recalculation_error","loadingKind","transactionCount","lastFetched","paymentCount","lastPaymentsFetched","availableMonths","downloadCsvBlob","filename","visibility","removeChild","monthValue","setMonth","generateAvailableMonths","text_7","totalCountHeader","timestamp","monthSuffix","classCount","totalRevenue","totalTeacherPayments","classesWithoutTeacher","jobId","jobStatus","progressMessage","processedClasses","statusCheckInterval","checkJobStatus","progress_message","total_classes","processed_classes","total_count","classes_without_teacher","total_student_price","teacher_payment","csvContent","class_date","student_count","matched_charges_count","gcal_event_id","Blob","generateAndDownloadCSV","error_message","text_6","job_id","families","newFamilyName","newFamilyMembers","createQuery","showCreateDropdown","isCreating","editingFamilyId","editName","editMembers","editQuery","showEditDropdown","isSavingEdit","handleAuthFailure","loadFamilies","otherFamiliesFor","excludeFamilyId","names","fam","excludeMembers","q","excludeIds","addCreateMember","cancelEdit","addEditMember","saveEdit","membershipMap","createResults","editResults","member","removeCreateMember","removeEditMember","startEdit","deleteFamily","launchLabel","hue","character","a_1","pdf","flat","listAdminAgreements","uploadAdminAgreement","searchAgreementStudents","allPages","fetchPage","has_next","getAllAgreementAssignments","getAgreementAssignments","getAllAgreementStudents","withdrawAgreementAssignment","assignAgreementStudents","student_ids","agreementStatusLabel","DRAFT","ACTIVE","RETIRED","withdrawn","detailsAbort","hasNext","allowed","uploadId","uploadAttempted","candidates","searchPage","searchNext","searching","confirmed","detailsId","detailsLoading","detailsFailed","assignmentStatuses","searchAbort","selectionAbort","previewId","searchGeneration","loadGeneration","detailGeneration","alive","recipientFilter","removingId","appliedDates","existingIds","preloading","selectionReady","selectingAll","selectionGeneration","recipientFilters","exc","stopSearch","focusHeading","stopSelection","chooseStudents","members","assignmentStatus","back","upload","scheduleSearch","hasDateRange","setRecipientFilter","invalidateDateRange","applyDateRange","toggleStudent","can_assign","selectAllFiltered","merged","closeDetails","showDetails","created_count","previewAdminAgreement","detailGroups","groupAssignments","dateRangeReady","form_1","versionId","can_withdraw","removeAssignment","text_11","text_8","document_title","is_enabled","assigned_count","signed_count","$.preventDefault","form_2","fieldset_1","section_3","label_5","p_10","p_11","strong_2","p_13","root_28","button_19","button_20","section_4","button_21","ul_1","li_1","strong_3","span_16","span_17","root_29","button_22","section_5","label_8","button_23","button_24","consequent_27","consequent_28","deepLinkTeacherId","readTabFromHash","qIndex","getHashParts","onHashChange","AdminAgreements","AdminDashboardLauncher","AdminCreateUserComponent","TeacherFinderComponent","TeacherAvailabilityCapacityComponent","FindStudentsComments","StudentPricingModifierComponent","TeacherPricingModifierComponent","AdminManualPaymentComponent","AdminFamilyManagerComponent","BalanceTransactionsCsvDownloader","TeacherRevenuePaymentCsvDownloader","RefreshDatabaseButtonComponent","newUsername","newPassword","newRepPassword","agreedToTerm","main","access_expires_at","closed","validEvents","bindHandlers","editor","eventHandlers","eventName","on","random","isDisabledOptionSupported","isRegistered","scriptLoader","scriptId","scriptLoaded","injected","doc","cb","script","src","onload","head","injectScript","createScriptLoader","inline","apiKey","licenseKey","scriptSrc","conf","modelEvents","cssClass","rest_excludes","container","editorRef","lastVal","$.snapshot","disablindCache","readonlyCache","setReadonly","readonlyValue","setDisabled","disabledValue","$.user_effect","setContent","getContent","getTinymce","sink","global","tinymce","finalInit","license_key","setup","studentName","findAllClasses","selectedClassesDetails","emailScript","emailSubject","stud_Email","isSendingEmail","emailContent","generateSelectedClassesInfo","classIds","sendEmail","oneWeekAgo","oneMonthAhead","pad","adjustDates","clas","toggleClassSelection","Editor","height","menubar","plugins","toolbar","content_style","showAll","expandedMap","filterRequestsByStatus","grouped","statusFilter","filteredRequests","toggleExpand","getStudentName","requestSubject","handleAdminAction","pendingRequests","otherRequests","request_type","agreed_upon","text_14","directed_to","old_time","new_requested_time","h2_1","span_20","span_26","node_22","div_49","text_34","classes_5","showHandledRequests","formatRequestedTimes","requestedTimes","unhandledRequestsByDay","handledRequestsByDay","unhandledRequests","handledRequests","teacher_accepted_at","display","time_submitted","h3_1","studentEmail","registrationMode","switchToExistingMode","resetForm","weeklySchedule","messagePreview","isSending","searchNextWeek","getWeeklySchedule","search_next_week","message_preview","sendWeeklySchedule","message_sid","inactive","appliedRange","requestVersion","resetRange","studentGroup","inactive_students","active_students","filterRecipients","getSearchText","toggleSelection","selectedIds","selectVisible","visibleRecipients","dateStudents","inactiveMonthParents","inactiveMonthParentsGrade12OrBelow","selectedUserIds","emailTarget","emailMessage","successLogs","failedEmails","showProgressBox","userEmailOverrides","editingEmailUserId","spreadsheetEmails","spreadsheetEmailsLoaded","getBaseListForFilter","userSearchText","getUserEmail","emails","loadSpreadsheetEmails","updateDateRecipients","clearAll","getSelectedUsers","changeEmailTarget","saveEmailEdit","newEmail","cancelEmailEdit","addSuccessLog","emailAddress","progressBox","scrollTop","scrollHeight","sendEmails","successCount","failureCount","attemptedEmailAddresses","shouldSendTo","normalizedEmail","user_ids","custom_email","successful_sends","selectedUsers","emailToUse","customEmail","email_target","sendEmailsOneByOne","inactive_month_parents","inactive_month_parents_grade_12_or_below","ActiveStudentDateFilter","text_13","$.effect","$$node","focusInput","parentElement","toggleUserSelection","h5_1","alternate_4","statusAbort","parents","thisMonthParents","phoneTarget","smsMessage","customPhone","batchId","recentBatches","preparing","submissionUnconfirmed","preparedPayload","statusGeneration","savedBatchKey","normalizePhone","phone","recipientSearchText","withPhoneDestination","list","_kind","loadRecentBatches","displayBatch","pending_sends","delivered_sends","scheduleStatusCheck","monitoring","checkBatchStatus","submitPreparedBatch","batch_id","sendSms","recipient_kind","phone_target","custom_phone","this_month_parents","loadRecipients","text_12","digits","maskPhone","recipientLabel","toggleSelectedId","select_1_value","viewBatch","recipient_id","phone_last4","unconfirmed","total_users","duplicate_sends_skipped","failed_sends","text_9","API_BASE_URL","topic","displayOrder","isPublished","isFeatured","showToTeachers","showToStudents","editingId","fetchSections","automatic_uploads","images_upload_handler","blobInfo","xhr","XMLHttpRequest","lengthComputable","loaded","responseText","image_url","setRequestHeader","send","paste_data_images","file_picker_types","table","tr","td","is_featured","td_1","td_2","is_published","td_3","td_4","display_order","view_count","show_to_teachers","show_to_students","scrollIntoView","behavior","loadSectionForEdit","deleteSection","expandedSections","filterType","sortBy","filteredSections","sortedSections","isExpandedSection","created_by","last_updated_by","published_at","toggleSection","registrationSubTab","acceptedUnhandledCount","fetchAcceptedUnhandledCount","switchRegistrationSubTab","subTab","accepted_unhandled_count","AdminRescheduleRequestsComponent","AdminClassRegistrationRequestsComponent","AdminRegistrationComponent","CreateStudentEmailComponent","SelectUsersEmailComponent","SelectUsersSMSComponent","SendWeeklyScheduleSMS","CreateInformationSectionComponent","InformationSectionsDisplayComponent","currentUrl","studentQuery","showStudentDropdown","sharedClasses","loadingClasses","classesError","responsibility","submitSuccess","fetchSharedClasses","selectClass","submitResponsibility","class_data","fetchStudents","FIRST_MONTH","monthIndex","LAST_MONTH","generateTeacherPerformanceMonths","locale","bonusEligible","bonusAmount","coverage","openedWithKeyboard","openAbove","show","loadCoverage","bounds","innerHeight","bottom","top","requestedMonth","missing_classes","upcoming","formatClassTime","class_time","missing_count","submitted_count","refreshKey","party","Velavimas","Atsaukimas","Kitas","dateFormat","monthFormat","clearFilters","changePage","hasFilters","cancellation","late","other","incident","class_exists","responsible_party","page_size","ceil","lastAutoLoadKey","retentionData","commentsData","completionData","surveyData","paymentData","attendanceData","bonusData","showAllSurveyClasses","showAllPaymentClasses","showAllAttendanceClasses","showAllStudentAttendanceClasses","allSnapshotsData","dashboardLoading","dashboardError","dashboardMonth","incidentRefreshKey","recalculating","recalculationError","recalculationSuccess","recalculationMessage","recalculationStatus","recalculationStatusPollId","lastStatusCheckKey","RECALC_AWAITING_MONTH_KEY","RECALC_DONE_MONTH_KEY","ACTIVE_RECALC_STATUSES","getRatingColorClass","submitTeacherSelection","selected_at","retention_analysis","comments_analysis","completion_analysis","survey_analysis","payment_analysis","attendance_analysis","bonus_analysis","fetchAllSnapshots","recalculateAllSnapshots","startRecalculationStatusPolling","fetchRecalculationStatus","stopRecalculationStatusPolling","checkIfUserIsAdmin","currentValue","doneMonth","awaitingMonth","statusKey","displayedSnapshots","snapshots","sensitivity","displayedSummary","total_teachers","grand_total_payment","total_eur","average_per_teacher","root_79","ClassIncidentReport","li_2","li_3","ul_2","li_4","li_5","payment_summary","free_classes","class_payment_details","classDetail","small_5","special_conditions_surcharge","is_free_class","small_7","first_time_students","has_first_time_students","small_8","retained_students","has_retained_students","payment","display_time","student_count_category","individual_classes","pair_classes","group_classes","ib_classes","total_completed_classes","total_upcoming_classes","total_payment","total_month_classes","average_payment_per_class","sample_comments","rating_averages","average","rated_comments","total_comments","month_period","root_41","root_37","small_9","root_36","amount_per_class","root_38","p_12","small_10","eligible_for_bonus","root_40","criteria","criteria_breakdown","criterion","root_39","strong_10","met","current_value","required_value","criteria_met","total_criteria","consequent_33","root_49","div_58","div_59","p_15","fragment_6","div_62","div_63","div_64","root_45","classes_with_surveys","div_66","root_44","strong_12","small_12","small_13","p_17","root_42","note_text","node_39","root_43","effort_rating","learned_rating","general_rating","class_display_time","div_69","div_70","root_47","classes_missing_surveys","div_72","root_46","strong_13","small_14","submission_rate_percentage","surveys_submitted","consequent_42","div_75","div_76","div_77","div_78","fragment_7","div_79","div_80","div_81","div_82","div_85","div_86","div_88","strong_16","consequent_45","div_90","root_54","div_91","div_92","p_20","div_93","fragment_8","div_94","ul_3","li_7","li_8","li_9","li_10","div_95","ul_4","li_11","li_12","li_13","div_96","div_97","div_98","div_99","div_100","div_101","div_102","div_103","div_104","root_51","div_105","class_attendance_details","div_106","root_50","div_107","strong_18","small_18","small_19","attendance_status","minutes_late","attendance_time","div_110","total_scheduled","attended_classes","late_classes","no_show_classes","on_time_classes","attendance_rate_percentage","punctuality_rate_percentage","root_53","consequent_49","div_112","root_57","div_113","div_114","div_115","div_116","ul_5","li_14","li_15","li_16","div_117","ul_6","li_17","li_18","li_19","div_118","root_56","retention","retained_students_details","li_20","root_55","div_119","h4_3","lost_students_details","li_21","retention_rate_percentage","current_month","unique_students","next_month","consequent_52","div_120","root_70","div_121","div_122","div_123","fragment_9","div_124","ul_9","li_22","li_23","li_24","li_25","div_125","ul_10","li_26","li_27","li_28","li_29","div_126","ul_11","li_30","li_31","li_32","li_33","li_34","div_127","div_128","div_129","ul_12","li_35","li_36","li_37","div_130","ul_13","li_38","li_39","li_40","div_131","div_132","div_133","div_134","div_135","div_136","div_137","div_138","div_139","div_140","div_141","div_142","root_60","div_143","student_attendance_details","div_144","root_59","div_145","strong_21","small_24","small_25","small_26","root_58","no_show_students","attending_students","enrolled_students","attendance_rate","div_147","div_148","root_63","weekly_trends","week","div_150","root_62","strong_22","div_151","span_14","root_61","text_131","formal_late","student_reported_late","total_late_incidents","consequent_56","completion_rate","punctuality_rate","div_152","root_68","punctuality","student_late_details","div_153","root_66","strong_23","small_28","root_64","node_66","small_29","root_65","small_30","small_31","div_155","root_67","teacher_completed_classes","teacher_cancelled_classes","teacher_completion_rate_percentage","payment_eligible_classes","total_eligible","responsibility_breakdown","student_cancellations","classes_actually_held","actual_completion_rate_percentage","formal_late_incidents","student_attendance","total_classes_with_students","classes_with_attendance","classes_with_no_attendance","student_attendance_rate_percentage","student_no_show_rate","total_actual_attendances","total_expected_attendances","operational_efficiency","overall_score","consequent_65","consequent_66","div_157","root_78","div_158","div_159","option_2_value","root_72","consequent_67","div_160","consequent_68","consequent_69","div_161","consequent_70","div_162","root_73","text_145","consequent_71","div_163","fragment_11","div_165","div_166","div_167","div_168","tbody","root_76","td_5","td_6","td_7","td_8","td_9","TeacherCommentCoveragePopover","bonus_eligible","bonus_amount","root_74","root_75","is_finalized","finalized","solo_eur","solo_count","duo_eur","duo_count","trio_eur","trio_count","tr_1","td_11","consequent_73","consequent_74","loadingTeachers","currentInvoicePdf","customSum","isRegenerating","fetchTeacherClassesForMonth","generateInvoice","class_ids","pdf_base64","class_count","updateSelectAllCheckbox","downloadPdf","regenerateInvoice","custom_sum","saveInvoice","total_sum","selectAllCheckbox","indeterminate","getMonthOptions","formatter","fetchAllTeachers","bank_nr","teacher_price","handleClassSelection","handleSelectAll","teacher_email","loadedTeacher","detailVersion","note_id","$.update_pre","teacherDetails","teacherOverview","teacherComments","editMode","embeddedSelecting","qrCodeLoading","availableYears","editableData","teacher_info","loadTeacherData","viewTeacherQrCode","work_with_children_qr_code","content_type","monthParam","getMonthName","detailsResponse","overviewResponse","commentsResponse","initializeEditableData","overviewData","cancelled_classes","students_count","all_week_classes_count","all_week_classes","handleMonthChange","monthNum","legacyInfo","teacher_info_legacy","meeting_link","toggleEditMode","addTimeSlot","saveTeacherInfo","indiv_lic","loadAvailableSubjects","initializeAvailableYears","editableSubjects","option_12_value","AdminTeacherPersonalNotes","subjects_taught","teaching_preference","preferred_start_date","falls_in_timeslot","li_6","boolean_metrics","punctuality_percentage","class_completion","completion_percentage","on_time_count","late_count","completed_count","not_completed_count","div_56","span_18","alternate_7","span_21","alternate_9","span_22","alternate_10","div_65","span_23","alternate_11","span_24","alternate_12","div_67","span_25","alternate_13","div_68","uploaded_at","consequent_29","div_71","div_73","div_74","span_28","span_29","text_53","node_32","div_83","div_84","div_87","node_35","desired_student_count","consequent_31","alternate_16","div_89","root_48","option_19","updateDayName","root_52","span_37","consequent_35","alternate_19","consequent_37","studentDetails","studentOverview","studentComments","expandedComments","showAttendanceDetails","sortedLateClasses","sortedOnTimeClasses","sortedNoShowClasses","phoneQuery","filteredPhones","showPhoneDropdown","searchType","showAllTransactionsModal","allTransactions","loadingAllTransactions","lastAutoSelectedStudentId","autoSelectStudentById","loadStudentData","detailsUrl","overviewUrl","commentsUrl","late_classes_details","on_time_classes_details","no_show_count","no_show_classes_details","comments_count","comments_length","saveStudentInfo","toggleCommentExpansion","commentId","sortAttendanceByTime","attendanceArray","scheduled_time","timeA","parseDateTime","timeB","endsWith","formattedDateTime","isoString","getTimezoneOffset","dstStart","getLastSundayOfMonth","dstEnd","lastDay","lastSunday","extractTimeWithTimezone","timeMatch","formatDateOnly","lithuanianTime","getUTCFullYear","getUTCMonth","getUTCDate","formatCompactDateTime","getUTCHours","getUTCMinutes","selectStudentByPhone","phoneItem","switchSearchType","fetchAllTransactions","closeAllTransactionsModal","search_type","phones","searchPhoneNumbers","recent_transactions","transaction","h6","lateClass","h6_1","onTimeClass","minutes_early","h6_2","noShowClass","span_27","recent_transactions_count","late_attendance_count","span_30","span_31","span_32","span_34","getUTCDay","span_41","span_42","span_43","span_44","span_45","span_46","span_47","consequent_30","span_48","conditions","span_49","consequent_32","span_50","consequent_34","transactions","span_51","span_52","transactions_count","exportLoading","last_login","lastLoginStr","lastLogin","daysDiff","getLoginStatus","timeDiff","formatLastLogin","date_joined","exportData","taught_subjects","taught_grades","bank_account_number","individual_licence_number","job_start_date","timeslots_submitted","downloadCSV","export_data","familyGroups","studentsWithoutFamily","showGrouped","family_groups","students_without_family","filteredFamilyGroups","acc","familyName","familyStudents","filteredFamilyStudents","filteredStudentsWithoutFamily","text_22","text_33","groupedClasses","filteredGroupedClasses","handleFetchFirstClasses","switchFilter","timeString","classArray","classDate","includeDate","filterClassesByDate","handled_by","is_handled","openClassLink","class_link","formatDateHeader","d_2","ClassDidNotHappenComponent","AdminFirstClassesNewTeachersComponent","TeacherPerformanceRating","TeacherInvoiceComponent","TeacherInfoComponent","StudentInfoComponent","TeachersListComponent","StudentsListComponent","goBackToLogin","isUserAdmin","mounted","fetchTeacherPerformance","timeoutPromise","teacherResponsePromise","teacherResponse","errorText","teacherData","performanceResponsePromise","currentMonthValue","isCurrentMonthAvailable","responsePromise","is_admin","maxLoadingTime","admin_punctuality_rate","teacher_comment_submission_rate","teacher_incidents_count","classes_with_teacher_comments","bonus_amount_applied","bonus_applied","text_35","text_36","text_28","text_30","text_31","text_32","text_37","text_19","small_15","small_16","text_46","node_30","text_47","text_48","text_49","text_43","text_44","text_45","text_50","text_42","strong_8","text_52","text_54","text_51","text_64","text_66","text_65","text_71","text_72","consequent_36","consequent_38","ul_7","ul_8","strong_14","consequent_39","text_99","p_18","p_19","div_109","incident_details","teacher_cancellations","strong_15","text_108","text_110","consequent_41","text_107","text_109","div_111","text_112","text_114","consequent_43","text_111","text_113","consequent_44","teacher_late_arrivals","strong_17","text_116","text_118","text_115","text_117","consequent_46","text_100","incident_summary","total_teacher_incidents","text_101","text_102","text_103","teacher_other_issues","text_104","total_student_incidents","text_105","text_106","student_other_issues","consequent_47","text_79","text_80","text_83","text_84","text_85","text_86","text_87","text_88","text_89","text_90","text_91","text_94","consequent_48","text_73","allStudents","isLoadingStudents","studentsError","pdfUrl","isCreatingPDF","pdfBase64V","loadedMonths","originalMonth","isLoadingMonth","monthlyData","getPreviousMonth","monthString","formatMonthForDisplay","pdfBase64","generateInvoiceFromClasses","getCurrentMonthString","fetchMonthData","isInitialLoad","firstMonthKey","firstMonthData","allClasses","monthData","loaded_months","total_months_loaded","combineMonthlyData","newMonthData","existingClasses","newClasses","existingClassIds","uniqueNewClasses","appendMonthData","addFutureMonth","getNextMonth","addPastMonth","prevMonth","removeFutureMonth","latestMonth","rebuildInvoiceData","removePastMonth","earliestMonth","baseMonthData","fetchAllStudents","clearStudentSelection","canAddPast","canRemoveFuture","canRemovePast","snapshots_info","snapshots_created","total_snapshots","validation_info","valid_charges_total","invalid_charges_total","total_payments","stored_balance","validated_balance","lastEmbeddedStudentId","getHashQueryParam","selectedUserIsTeacher","isLoadingSchedule","backLinkUrl","userType","fromQuery","negativeBalanceUsers","isLoadingNegativeBalances","negativeBalancesError","isRecalculatingBalances","isRecalculatingSelectedStudent","isSyncingSelectedStudent","showStaleOnly","fetchNegativeBalanceUsers","recalculateSelectedStudentBalance","displayedNegativeBalanceUsers","has_future_classes","syncSelectedStudentChargesAndBalance","text_10","negative_balance_count","recalculateAllBalances","infoRefresh","pricingRefresh","commentsRefresh","scheduleRefresh","invoiceRefresh","lastStudentKey","collapsedKey","toolsCollapsedKey","showToolsKey","showAdminTools","collapsed","pricing","widgetOrder","toolsCollapsed","createUsers","refreshDb","classEmails","bulkEmails","sms","toast","toastTimer","showToast","setStudentsHashStudentId","nextHash","persistSelectedStudent","saveCollapsedState","openWidget","closeWidget","toggleCollapsed","toggleToolsCollapsed","saveToolsCollapsedState","closeAllWidgets","execCommand","restoreSelectedStudent","fromHash","loadShowToolsState","loadCollapsedState","loadToolsCollapsedState","openWidgetKeys","widgetTitle","button_25","button_26","button_27","button_28","button_29","button_30","button_31","AdminStudentScheduleViewer","button_32","button_33","button_34","AdminUserInvoicePageViewer","studentLabel","base","calendarMode","calendarId","adminEmail","jobs","recoveredId","acknowledgeUnknown","pollBusy","createRequest","previewDocument","previewDialog","announced","pendingActions","closePreview","openEmailPreview","DOMParser","parseFromString","html_body","logo_data_url","httpEquiv","prepend","documentElement","outerHTML","browserDocument","openTeacher","ctrlKey","metaKey","altKey","concat","explanation","choose","poll","operation","calendar_name","calendar_id","credential_status","allowed_actions","renew","d_3","d_4","label_9","d_5","label_10","calendar_status","sharing_status","account_status","label_11","label_12","text_17","from_email","text_18","acknowledge_unknown","preview_fingerprint","calendar_mode","admin_calendar_email","send_email","fingerprint","normalizeTeacher","fallbackName","google_calendar","googleCalendarID","mergeTeacher","incoming","teachersLoaded","isLoadingTeachers","loadTeachersOnce","searchTeachers","resolveTeacherById","refreshTeachers","teacherSearchRef","pendingHashTeacherId","lastHydratedHashTeacherId","isHydratingFromHash","isHydratingSelectedTeacher","performanceRefresh","lastTeacherKey","performance","createTeacher","findTeachers","teacherCapacity","classIncidents","teacherInvoices","teacherLabel","nt","teacherDisplayName","getHashTeacherId","setTeachersHashTeacherId","persistSelectedTeacher","handleTeacherCreated","applySelectedTeacher","handleOpenTeacher","preventScroll","handleTeacherCleared","restoreSelectedTeacherFromStorage","resolved","hydrateFromHash","AdminCreateTeacherComponent","TeacherSearchComponent","a_2","REPORT_PATH","isoDate","fetchAttendanceReport","pageSize","buildAttendanceReportUrl","part","localDate","UTC","daysSinceMonday","monday","setUTCDate","vilniusWeek","expanded","loadReport","targetPage","pagination","scheduledClass","counts","missing","unresolved","role","assignment_warning","attended","checked_at","teacher_label","toggleClass","nav","has_previous","total_pages","total_items","agreements","activity","monthlyFeedback","classAttendance","rescheduleRequests","classRegistrationRequests","classRegistrationCreate","smsRecipients","informationSectionsSubmit","informationSectionsDisplay","teachersList","studentsList","firstClassesNewTeachers","balanceCsv","teacherRevenueCsv","reloadWidget","normalizeCollapsedState","AdminClassAttendanceComponent","button_35","button_36","button_37","button_38","button_39","deltaTone","direction","inverse","financialCardDefinitions","neutral","cashFlowCardDefinitions","formatCurrency","currency","formatOptionalCurrency","formatDelta","sign","absolute_change","percentage_change","comparisonDate","second","hourCycle","financialComparisonRows","metric","monthDate","validNumbers","previous_value","unit","percent","range_basis","basis","calculation_basis","warning","current_period","current_data_through","data_through","volumeBarTooltip","point","series","completed_classes","active_classes","chartDayDetails","daily_series","daily","number","delta","components","net_cash_flow","realized_contribution","total_profit","cutoff","at","expenditures","included_in_cash_flow","is_company_expenditure","expense_in_period","category","expense_date","plottedCutoff","teacher_watchlist","owner","points","accrued_pay","feedback_submitted","feedback_due","pinned","closeTimer","previousRows","maxHeight","money","box","viewportWidth","clientWidth","viewportHeight","clientHeight","below","above","leave","minimum","y","dailyChange","cumulativeChartPoints","$.window","polyline","circle","g","b_1","payee","negative","comparisons","$.noop","$$arg2","$$arg3","expenditureEndpoint","dashboardData","expenditureRefresh","refreshing","expenditureRefreshing","readDashboard","quiet","available_periods","periods","buildMonthOptions","expenditure_refresh","stopPoll","dateTime","metrics","cards","cashFlowCards","categories","displayState","maxDailyClasses","h1","card","breakdown","gross_profit","non_teacher_expenditures","DashboardTrend","completeness","active_scheduled_classes","allocation_warnings","details_1","summary_1","payees","details_2","summary_2","table_1","bank_date_in_period","excluded_from_cash_flow","allocation_basis","excluded_prior_month_teacher_pay","company_expenditures","total_bank_outflows","article_5","table_2","tr_3","small_6","alerts","td_10","text_58","td_12","feedback_rate","feedback_rate_comparison","article_6","details_3","summary_3","ended_active_classes","teacher_feedback","due","rate","responsibility_incidents","definition_version","live","source_repository","source_commit_sha","imported_at","AdminActivityDashboard","PALETTE","VILNIUS_DATE_FORMAT","VILNIUS_TIME_FORMAT","calendarDateKey","calendarTime","dayRecord","focusMonth","inMonth","weekdayLabel","exec","weekDays","mondayOffset","stableCalendarColor","imul","parseRecurrence","frequency","FREQ","INTERVAL","BYDAY","actionTime","actionTimeRange","actionRecurrence","actionPrice","actionDetailRows","after","oldValue","newValue","recurrence","oldPrices","student_prices","newPrices","oldItem","newItem","currentItem","needle","generatedClassTitle","groupLetter","title_prefix","calendar_label","oneHourAfter","defaultClassTimes","mergeCalendarHealth","calendars","refreshed","byId","calendar","health","calendarApi","setTeacherVisibility","calendarIds","calendar_ids","timeMin","timeMax","time_min","time_max","eventsInView","dateStart","dateEnd","selection","date_start","date_end","actions","mutationId","create","retry","eventsLoading","eventRequestNumber","calendarSearch","studentCalendarSearch","hiddenListOpen","visibilityPendingTeacherIds","view","todayKey","focusDate","dialogOpen","dialogDirty","editingEvent","actionHistoryOpen","expandedActionId","actionDetails","actionDetailLoadingId","actionDetailError","mutationNotice","emptyForm","titleInput","studentSearchInput","studentSearch","studentPickerExpanded","titleIsCustom","selectedStudentIds","recurring","notifications","confirm_reset_exceptions","responsibilityEnabled","responsibleParty","incidentType","expected_etag","initialise","loadEvents","needs_validation","validateCalendars","requestNumber","requestedSelection","viewDateRange","openCreate","selectedCalendarIds","basePrice","openEdit","display_title","group_letter","next_group_letters","enrolled","defaultPrice","default_group_base_price","default_individual_base_price","suggestedTitle","recurring_event_id","etag","duplicateClass","closeDialog","handleMutationConflict","currentEvent","current_event","markDirty","adding","syncDescription","tokens","sameNotification","participant_id","selectedNotification","choice","submittedPayload","nextDay","buildTimedRange","buildMutationPayload","title_is_custom","padEnd","submit","afterMutation","cancelClass","refreshActions","visibleDays","daysInMonth","dayNumber","monthGrid","selectedCalendars","filteredCalendars","filterAndSortCalendars","visibleCalendars","hiddenCalendars","sidebarStudents","displayedClassTotal","visibleKeys","classTotal","selectedStudents","generatedTitle","availableStudents","notificationChoices","email_destinations","teacher_user_id","buildNotificationChoices","unavailableTimes","excludedEventId","dayStart","dayEnd","clock","all_day","unavailableTimeRanges","toggleSidebarStudent","i_1","toggleCalendar","i_2","loadedEvents","eventsFor","time_1","openCreateForDay","actionId","incidentLabel","delivery","actor","actionCalendarName","toggleActionDetails","header_1","node_27","$$index_10","$.invalidate_inner_signals","node_29","label_13","input_13_value","label_14","input_14_value","label_15","label_16","node_37","fieldset_2","label_17","input_17","updateNotificationEmail","toggleNotification","fieldset_3","label_18","input_18","select_4","node_42","consequent_40","node_45","node_46","lastMonth","priorFocus","pages","controllers","cacheVersion","logo","navigating","statusPending","textMode","holdReason","dialogElement","searchRequest","resetRequests","stamp","currentCursor","candidate","loadMonth","is_current","current_batch_id","navigate","retryPreview","searchRecipients","itemId","recipientEmail","recipient_email","studentNames","familyCount","studentCount","student_counts","heldCount","held","confirmation","single","item_id","active_job","mutable","logoUrl","parent_names","selectRecipient","truncated","dd","dd_1","dd_2","hold_reason","sending_enabled","pre","text_body","prepared_at","last_job","already_covered_students","footer","sent","p_14","text_25","p_16","AdminMonthlyFeedbackReview","activePage","onPageChange","pageId","navItems","icons","home","stats","ExerciseBankSidebar","stat","Nh","Fh","defineProperties","$h","Ko","iu","hasOwnProperty","nu","propertyIsEnumerable","ru","Gs","Ai","ke","Po","maxTouchPoints","Ro","vibrate","At","userAgentData","Xs","HTMLElement","Io","displayName","virtualLayout","score","mapping","KeyA","KeyB","KeyC","KeyD","KeyE","KeyF","KeyG","KeyH","KeyI","KeyJ","KeyK","KeyL","KeyM","KeyN","KeyO","KeyP","KeyQ","KeyR","KeyS","KeyT","KeyU","KeyV","KeyW","KeyX","KeyY","KeyZ","Digit1","Digit2","Digit3","Digit4","Digit5","Digit6","Digit7","Digit8","Digit9","Digit0","Space","Minus","Equal","BracketLeft","BracketRight","Backslash","Semicolon","Quote","Backquote","Comma","Period","Slash","NumpadDivide","NumpadMultiply","NumpadSubtract","NumpadAdd","Numpad1","Numpad2","Numpad3","Numpad4","Numpad5","Numpad6","Numpad7","Numpad8","Numpad9","Numpad0","NumpadDecimal","IntlBackslash","NumpadEqual","AudioVolumeUp","Zs","Ys","NumpadComma","NumpadParenLeft","NumpadParenRight","Qs","alt","cmd","win","meta","ctrl","Gr","Vh","enter","escape","backspace","space","pausebreak","insert","pageup","pagedown","down","up","numpad0","numpad1","numpad2","numpad3","numpad4","numpad5","numpad6","numpad7","numpad8","numpad9","numpad_divide","numpad_multiply","numpad_subtract","numpad_add","numpad_decimal","numpad_separator","capslock","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","f13","f14","f15","f16","f17","f18","f19","Ci","el","je","gr","Enter","Escape","Backspace","Tab","NumpadEnter","PrintScreen","PageUp","AltRight","MetaRight","ee","F","strings","en","ar","de","es","fr","he","ja","ko","pl","pt","uk","_locale","_dirty","_subscribers","_numberFormatter","language","numberFormatter","I","Wh","m0","m1","m3","m4","m5","m6","m7","m8","m9","Uh","blue","orange","yellow","purple","green","cyan","red","Zt","lime","teal","indigo","magenta","black","grey","white","Yt","wu","Red","Orange","Yellow","LimeGreen","Green","TealBlue","Blue","Violet","Purple","Magenta","Black","Gray","White","jh","Apricot","Aquamarine","Bittersweet","BlueGreen","BlueViolet","BrickRed","Brown","BurntOrange","CadetBlue","CarnationPink","Cerulean","CornflowerBlue","Cyan","Dandelion","DarkOrchid","Emerald","ForestGreen","Fuchsia","Goldenrod","GreenYellow","JungleGreen","Lavender","Limegreen","Mahogany","Maroon","Melon","MidnightBlue","Mulberry","NavyBlue","OliveGreen","OrangeRed","Orchid","Peach","Periwinkle","PineGreen","Plum","ProcessBlue","RawSienna","RedOrange","RedViolet","Rhodamine","RoyalBlue","RoyalPurple","RubineRed","Salmon","SeaGreen","Sepia","SkyBlue","SpringGreen","Tan","Thistle","Turquoise","VioletRed","WildStrawberry","YellowGreen","YellowOrange","Xr","h","S","A","E","D","L","Ei","tl","rl","Su","Jh","Zh","Xh","Gh","nl","il","ku","variant","Dn","codePointAt","fromCodePoint","Lu","Yh","C","$o","Zr","No","On","Fo","Di","al","rf","strut","primitive","def","captureSelection","iff","nicefrac","phase","rd","rD","odif","doubleStruckCapitalN","doubleStruckCapitalR","doubleStruckCapitalQ","doubleStruckCapitalZ","doubleStruckCapitalP","scriptCapitalE","scriptCapitalH","scriptCapitalL","gothicCapitalC","gothicCapitalH","gothicCapitalI","gothicCapitalR","imaginaryI","imaginaryJ","exponentialE","differentialD","capitalDifferentialD","mathstrut","angl","angln","anglr","anglk","mathtools","package","ordinarycolon","vcentcolon","dblcolon","coloneqq","Coloneqq","coloneq","Coloneq","eqqcolon","Eqqcolon","eqcolon","Eqcolon","colonapprox","Colonapprox","colonsim","Colonsim","colondash","Colondash","dashcolon","Dashcolon","ratio","coloncolon","colonequals","coloncolonequals","equalscolon","equalscoloncolon","colonminus","coloncolonminus","minuscolon","minuscoloncolon","coloncolonapprox","coloncolonsim","simcolon","Simcolon","simcoloncolon","approxcolon","Approxcolon","approxcoloncolon","notni","limsup","liminf","injlim","projlim","varlimsup","varliminf","varinjlim","varprojlim","argmin","argmax","plim","tripledash","expand","bra","ket","braket","Bra","Ket","Braket","varGamma","varDelta","varTheta","varLambda","varXi","varPi","varSigma","varUpsilon","varPhi","varPsi","varOmega","pmod","mod","bmod","darr","dArr","Darr","lang","rang","uarr","uArr","Uarr","H","N","Q","R","Z","alef","alefsym","Alpha","Beta","bull","Chi","clubs","cnums","Complex","Dagger","diamonds","doublecap","doublecup","Epsilon","Eta","exist","hArr","harr","Harr","hearts","image","infin","Iota","isin","Kappa","larr","Larr","lArr","lrarr","Lrarr","lrArr","Mu","natnums","Nu","Omicron","plusmn","rarr","Rarr","rArr","real","reals","Reals","restriction","Rho","sdot","sect","spades","sub","sube","supe","Tau","thetasym","varcoppa","weierp","Zeta","Ti","Eu","ol","definitionType","codepoint","Me","sl","Au","Vo","isOptional","ll","Ct","tabular","rootOnly","createAtom","qo","M","ifMode","isFunction","applyMode","infix","applyStyle","serialize","Bi","Oi","Cu","ne","command","Ki","au","Qe","Yr","Ho","Ou","Bn","Bu","Ku","Wo","De","Uo","Pu","Ru","jo","ml","br","Jo","Go","Iu","zu","yr","Kn","Xo","Fu","Zo","Pi","Et","Ri","lt","Pn","$u","Tt","$e","xr","Ii","Vu","qu","Hu","vr","Wu","Uu","Yo","ju","Ju","Qo","Gu","Xu","zi","Zu","Yu","Qu","ed","nd","od","hl","Rn","ad","sd","fl","ea","et","Ni","ta","ra","gl","_r","ia","Qr","Fi","ld","cd","Mr","ct","ud","md","na","bl","yl","pd","hd","Dt","In","gd","bd","xl","yd","vl","xd","ei","vd","_l","wr","_d","Ml","oa","aa","Md","wd","sa","Sd","Sr","kd","wl","Ld","Ad","Cd","la","Ed","Sl","Td","Dd","ca","kr","Od","ua","Bd","Kd","Pd","Rd","Id","zd","Nd","Fd","Qt","$i","tt","ti","ri","zn","$d","Nn","er","da","we","Vi","kl","Fn","Vd","qd","rt","Hd","Wd","Ud","jd","Jd","Ll","$n","Gd","Vn","Xd","Al","Cl","Zd","Yd","El","Qd","ii","ma","em","tm","Lr","pa","ha","rm","fa","im","ga","nm","om","am","ba","qn","sm","lm","cm","um","dm","mm","pm","Hn","hm","fm","gm","bm","ym","Ce","Ar","xm","Tl","vm","_m","Dl","Mm","wm","Sm","ya","km","Lm","Ol","Bl","Ot","Kl","Pl","Am","Cm","Em","Tm","Rl","Dm","Om","Bm","Km","Pm","Rm","Bt","Il","rr","Im","zl","Nl","zm","Fl","Nm","Fm","$m","Vm","qm","Hm","Wm","Um","jm","xa","Jm","Gm","Xm","Zm","Ym","qi","Hi","$l","Qm","e0","t0","r0","va","i0","n0","o0","Wi","_a","a0","Vl","s0","l0","c0","Ma","wa","Sa","u0","d0","ka","La","Aa","Ca","p0","ql","Ea","h0","f0","g0","b0","Ta","O","ut","y0","x0","Ke","Wn","v0","_0","nf","Kt","Pe","Je","Hl","slant","stretch","shrink","xHeight","quad","extraSpace","num1","num2","num3","denom1","denom2","sup1","sup2","sup3","sub1","sub2","supDrop","subDrop","delim1","delim2","axisHeight","defaultRuleThickness","bigOpSpacing1","bigOpSpacing2","bigOpSpacing3","bigOpSpacing4","bigOpSpacing5","sqrtRuleThickness","Un","Ui","M0","Cr","defaultMetrics","depth","italic","skew","Wl","overrightarrow","overleftarrow","underrightarrow","underleftarrow","xrightarrow","longrightarrow","xleftarrow","longleftarrow","Overrightarrow","xRightarrow","xLeftarrow","overleftharpoon","xleftharpoonup","xleftharpoondown","overrightharpoon","xrightharpoonup","xrightharpoondown","xlongequal","xtwoheadleftarrow","xtwoheadrightarrow","overleftrightarrow","overbrace","underbrace","underleftrightarrow","xleftrightarrow","longleftrightarrow","xLeftrightarrow","xrightleftharpoons","longrightleftharpoons","xleftrightharpoons","longleftrightharpoons","xhookleftarrow","xhookrightarrow","overlinesegment","underlinesegment","overgroup","undergroup","xmapsto","xtofrom","xleftrightarrows","longleftrightarrows","xRightleftharpoons","longRightleftharpoons","xLeftrightharpoons","longLeftrightharpoons","Ul","widehat1","widehat2","widehat3","widehat4","widecheck1","widecheck2","widecheck3","widecheck4","widetilde1","widetilde2","widetilde3","widetilde4","overarc","underarc","S0","doubleleftarrow","doublerightarrow","leftarrow","leftbrace","leftbraceunder","leftgroup","leftgroupunder","leftharpoon","leftharpoonplus","leftharpoondown","leftharpoondownplus","lefthook","leftlinesegment","leftmapsto","leftToFrom","longequal","midbrace","midbraceunder","oiintSize1","oiintSize2","oiiintSize1","oiiintSize2","rightarrow","rightbrace","rightbraceunder","rightgroup","rightgroupunder","rightharpoon","rightharpoonplus","rightharpoondown","rightharpoondownplus","righthook","rightlinesegment","rightToFrom","twoheadleftarrow","twoheadrightarrow","vec","baraboveleftarrow","rightarrowabovebar","baraboveshortleftharpoon","rightharpoonaboveshortbar","shortbaraboveleftharpoon","shortrightharpoonabovebar","Da","Oa","af","A0","C0","sf","Ba","of","jl","obeyspaces","pos","peek","lf","ji","P","W","Er","ni","_registry","skipStyles","T0","fontSize","cf","uf","getFont","ve","Ka","variantStyle","Pa","E0","color","defaultMode","verbatimColor","backgroundColor","verbatimBackgroundColor","Ra","mord","mbin","mop","mrel","mopen","mclose","mpunct","minner","spacing","latex","composition","supsub","oi","jn","w","caret","isTight","fontFamily","letterShapeStyle","_height","_depth","_width","hasExplicitWidth","maxFontSize","scale","df","atomID","setStyle","cssProperties","setTop","softWidth","wrap","isPhantom","scalingFactor","toMarkup","svgBody","k0","svgOverlay","padding","svgStyle","Ji","cssId","Jl","htmlData","htmlStyle","tryCoalesceWith","Gl","Tr","Dr","Gi","L0","pf","individualShift","firstBaseline","mf","marginLeft","marginRight","te","Pt","sizeDelta","cramped","getFontSize","sup","mt","fracNum","fracDen","cramp","Jn","displaystyle","textstyle","scriptstyle","scriptscriptstyle","Zl","ex","px","bp","pc","mu","dimension","za","Xl","_e","glue","grow","hf","factor","register","string","relax","ff","maxdimen","hfuzz","vfuzz","overfullrule","hsize","vsize","parindent","maxdepth","splitmaxdepth","boxmaxdepth","delimitershortfall","nulldelimiterspace","scriptspace","topskip","splittopskip","normalbaselineskip","normallineskip","normallineskiplimit","jot","doublerulesep","arrayrulewidth","arraycolsep","fboxsep","fboxrule","hideskip","parskip","abovedisplayskip","abovedisplayshortskip","belowdisplayskip","belowdisplayshortskip","parfillskip","thinmuskip","medmuskip","thickmuskip","smallskipamount","medskipamount","bigskipamount","pretolerance","tolerance","hbadness","vbadness","linepenalty","hyphenpenalty","exhyphenpenalty","binoppenalty","relpenalty","clubpenalty","widowpenalty","displaywidowpenalty","brokenpenalty","predisplaypenalty","doublehyphendemerits","finalhyphendemerits","adjdemerits","tracinglostchars","uchyph","delimiterfactor","defaulthyphenchar","defaultskewchar","newlinechar","showboxbreadth","showboxdepth","errorcontextlines","interdisplaylinepenalty","interfootnotelinepenalty","baselineSkip","arraystretch","Na","Zn","registers","smartFence","renderPlaceholder","placeholderSymbol","minFontScale","maxMatrixCols","colorMap","backgroundColorMap","getMacro","B","atomIdsSettings","mathstyle","makeID","overrideID","seed","effectiveFontSize","isDisplayStyle","isCramped","getRegister","getRegisterAsNumber","getRegisterAsGlue","getRegisterAsEm","getRegisterAsDimension","setRegister","evaluate","toDimension","toEm","toNumber","toColor","toBackgroundColor","Pr","Kr","Ge","isRoot","limits","subsupPlacement","displayContainsHighlight","skipBoundary","verbatimLatex","_changeCounter","createBox","gf","bf","commonAncestor","fromJson","toJson","_json","explicitSubsupPlacement","atoms","yf","_branches","changeCounter","_children","_serialize","expandMacro","skipPlaceholders","bodyToLatex","supsubToLatex","aboveToLatex","belowToLatex","subscript","superscript","treeDepth","inCaptureSelection","parentPrompt","createBranch","makeFirstAtom","parentBranch","col","setChildren","unstyledOnly","fontShape","fontSeries","getInitialBaseElement","hasEmptyBranch","getFinalBaseElement","isCharacterBox","addChild","addChildBefore","addChildAfter","addChildren","addChildrenAfter","removeBranch","siblings","firstSibling","lastSibling","isFirstSibling","isLastSibling","hasNoSiblings","leftSibling","rightSibling","hasChildren","firstChild","lastChild","attachSupsub","attachLimits","baseShift","aboveShift","belowShift","D0","bind","boxType","isDigit","asDigit","groupNumbers","Yl","qe","xf","Rt","si","Xi","Yn","vf","Fa","alpha","Delta","pi","theta","Theta","jj","nabla","grad","del","deg","infty","oo","int","prod","sqrt","sin","cos","tan","arccos","arcsin","arctan","arctg","arcsec","arccsc","arsinh","arccosh","arcosh","artanh","arctanh","arcsech","arccsch","ch","cosec","cosh","cot","cotg","coth","csc","ctg","cth","sec","sech","sinh","sh","tanh","tg","th","arg","lg","lb","ln","lim","dx","dy","AA","EE","xin","sint","NN","ZZ","QQ","RR","CC","xx","beta","chi","epsilon","varepsilon","eta","gamma","Gamma","iota","kappa","lambda","Lambda","phi","Phi","varphi","psi","Psi","rho","sigma","Sigma","tau","vartheta","upsilon","xi","zeta","omega","Omega","forall","det","erf","erfc","bessel","mean","median","fft","lcm","gcd","randomReal","randomInteger","Re","kg","ft","inch","mi","setminus","divide","vv","vvv","nn","nnn","uu","uuu","gt","diamond","square","aleph","and","or","not","TT","times","infinity","defint","approaches","union","asterisk","frac","cbrt","nthroot","ir","$a","_f","He","inlineShortcuts","rest","noWrap","P0","K0","Ql","R0","Zi","_modes","onPaste","contentEditable","userSelect","model","announce","DataTransfer","setData","ClipboardEvent","clipboardData","host","selectionIsCollapsed","lastOffset","getValue","onCopy","getAtoms","includeChildren","onExport","for","ComputeEngine","MathfieldElement","computeEngine","jsonSerializationOptions","metadata","I0","selectItem","ifPlatform","withHighlighting","ifLayout","z0","mathfield","Yi","Sf","kf","tc","scrollLeft","ec","getComputedStyle","offsetWidth","offsetHeight","tagName","nodeType","dataset","nr","atomBoundsCache","N0","Va","excludeAtomsWithBackground","Lf","Qi","rc","offsetTop","offsetLeft","offsetParent","DOMRect","qa","Rr","It","V0","q0","H0","W0","U0","j0","J0","zt","CSSStyleSheet","replaceSync","We","adoptedStyleSheets","Ir","accentChar","accent","svgAccent","tn","Ha","G0","X0","T","K","G","Z0","Rf","Y0","If","zf","Nf","Ff","$f","rn","Vf","Pf","ci","Le","ep","ic","qf","Wa","Wf","Uf","jf","z","isMultiline","environmentName","columns","colFormat","align","minColumns","minRows","maxRows","_rows","Jf","Hf","rowGaps","colSeparationType","mathstyleName","leftDelim","rightDelim","rowCount","colCount","maxColumns","ie","X","be","ye","Be","Lt","ue","cells","Jr","Se","gap","Gf","forEachCell","getCell","setCell","ui","addRowBefore","Ua","addRowAfter","removeRow","addColumnBefore","addColumnAfter","addColumn","removeColumn","ot","framecolor","backgroundcolor","border","ht","Y","matchingRightDelim","containsCaret","op","an","macroArgs","Ja","sn","correctness","placeholderId","locked","sr","Ga","endCount","parseMode","parsingContext","mathlist","beginContext","endContext","onError","tabularMode","expandUnicode","lastSubsupAtom","hasPattern","hasInfixCommand","matchColumnSeparator","matchRowSeparator","ge","skipWhitespace","skipUntilToken","skipFiller","matchKeyword","scanString","scanBalancedString","scanLiteralGroup","scanNumber","scanRegister","scanValue","scanGlueOrDimen","scanDimen","scanColspec","scan","scanModeSet","scanModeShift","scanEnvironment","scanArgument","Tu","scanOptionalArgument","scanExpression","parseExpression","scanArguments","scanGroup","scanSmartFence","scanDelim","scanLeftRight","parseSupSub","parseLimits","scanSymbolOrLiteral","scanMacro","scanSymbolOrCommand","scanSymbolCommandOrLiteral","Qn","me","_verbatimLatex","stateMachines","patterns","match_","task","action_","type_","concatArray","nextState","revisit","toContinue","else","else2","space$","x$","i$","letters","findObserveGroups","_9","arrowUpDown","CMT","orbital","oxidation$","amount2","formula$","uprightEntities","endMatchBegin","endMatchEnd","text_","p1","p2","bond","kind_","ce","createTransitions","stateArray","dq","as","output","dType","beginsWithBond","sb","parenthesisLevel","comma","rdt","rqt","rq","color1","color2","pq","oxidation","pu","enumber","cdot","reverse","_go2","_goInner","_getBond","_getArrow","_getOperator","cn","delim","un","delimType","Q0","lr","updiagonalarrow","updiagonalstrike","notation","shadow","strokeWidth","strokeStyle","svgStrokeStyle","strokeColor","borderStyle","Xf","horizontalstrike","verticalstrike","downdiagonalstrike","phasorangle","ap","longdiv","Zf","actuarial","madruwb","roundedbox","Za","dn","fractionNavigationOrder","hasBarLine","continuousFraction","numerPrefix","denomPrefix","Ya","center","pe","isSuggestion","isError","Nt","di","symbol","Ae","supsubPlacement","svgAbove","svgBelow","paddedBody","paddedLabels","paddedAboveBelow","Yf","Ft","isInvisible","smashDepth","smashHeight","smashWidth","$t","_braced","braced","mn","nc","eo","Qf","ord","bin","rel","inner","punct","eg","Vt","to","tooltip","bt","yt","rg","ro","io","normalizeRange","no","bolditalic","lp","acute","grave","dot","ddot","dddot","ddddot","mathring","tilde","bar","breve","hat","cp","fill","U","coprod","bigvee","bigwedge","biguplus","bigcap","bigcup","intop","bigotimes","bigoplus","bigodot","bigsqcup","smallint","iint","iiint","oint","oiint","oiiint","intclockwise","varointclockwise","ointctrclockwise","intctrclockwise","sqcup","sqcap","uplus","amalg","Cap","Cup","dp","mclass","Qa","roman","ams","calligraphic","fraktur","monospace","ng","og","tex","french","upright","cg","sg","dg","ug","ag","pp","sc","eb","ub","uc","sx","ux","pn","semicolon","minus","quote","backslash","intlbackslash","backquote","slash","numpadmultiply","numpaddivide","numpadsubtract","numpadadd","numpaddecimal","numpadcomma","help","hn","MouseEvent","PointerEvent","clientY","TouchEvent","touches","qt","control","KeyboardEvent","mg","cr","hi","shadowRoot","Te","scrim","_scrim","lightDismiss","translucent","_element","contain","zIndex","outline","background","backdropFilter","onDismiss","savedActiveElement","innerWidth","savedMarginRight","savedOverflow","overflow","savedMlkPaddingRight","paddingRight","handleEvent","zr","rs","yu","gp","yp","hg","pg","bu","lc","fi","medium","shape","size1","size2","size3","size4","size5","size6","size7","size8","size9","size10","tiny","scriptsize","footnotesize","normalsize","large","Large","LARGE","huge","Huge","ao","styleBias","defaultStyle","Ht","onInsertStyle","vp","offsetOf","gi","Fr","popoverPolicy","Nr","macros","Du","atIndex","suggestionIndex","xt","interactive","gg","keybindings","$r","bi","Xe","selectionMode","bg","_p","os","switchMode","refcount","mathVirtualKeyboard","boundingRect","getData","contentWillChange","inputType","stopCoalescingUndo","stopRecording","startRecording","contentDidChange","J","insertionMode","silenceNotifications","collapseSelection","deleteAtoms","setSelection","fe","flushInlineShortcutBuffer","deferNotifications","canUndo","changeContent","wp","Sp","ur","dc","currentScript","yg","Ie","dr","getPropertyValue","fonts","fontsDirectory","weight","FontFace","xg","Lp","resizeObserver","unobserve","resizeObserverStarted","mc","includeFirstAtoms","forHighlighting","hasEditablePrompts","translate","vg","hasEditableContent","isSelectionEditable","hasFocus","readOnly","contentPlaceholder","so","updateToggleLayout","insertBefore","childNodes","_g","hc","_mathfield","vt","audioFeedback","changeSelection","gc","mr","yi","performWithFeedback","gn","keypressVibration","playSound","executeCommand","Mg","nextSuggestion","previousSuggestion","co","uo","bn","lo","targetOrigin","originValidator","targetWindow","_boundingRect","_isShifted","sendMessage","singleton","_singleton","getKeycap","setKeycap","keycap","alphabeticLayout","layouts","normalizedLayouts","editToolbar","composed","hide","isShifted","updateToolbar","connect","handleMessage","bc","numeric","labelClass","variants","class","greek","symbols","compact","minimalist","layers","backdrop","ss","ze","cs","Lg","mo","yn","us","Vr","stickyVariantPanel","Cg","Ag","po","ds","Tg","Eg","Dg","Og","ho","markup","yc","cz","hu","sk","qwerty","azerty","qwertz","dvorak","colemak","Bg","xn","displayShiftedKeycaps","displayEditToolbar","Kg","Cp","undo","redo","canRedo","cutToClipboard","pasteFromClipboard","Rg","innerText","registerKeycap","Tp","resetKeycapRegistry","Fg","Ng","$g","Pg","currentLayer","latentLayer","shifted","layer","fo","Wt","decimalSeparator","connectedMathfieldWindow","focusedMathfield","defaultView","ms","shiftPressCount","releasePointerCapture","pointerId","isPrimary","simulateKeystroke","Vg","originalContainerBottomPadding","keycapRegistry","_shiftPressCount","isSandbox","_alphabeticLayout","_layouts","_editToolbar","_container","_visible","_rebuilding","ResizeObserver","adjustBoundingRect","isConnected","Dp","mathVirtualKeyboardPolicy","animate","_t","rebuild","getLayer","_normalizedLayouts","updateNormalizedLayouts","_style","getElementsByClassName","paddingBottom","buildAndAttachElement","stateWillChange","once","stateChanged","getModifierState","MessageEvent","blur","parentNode","ps","vn","scriptDepth","TypeError","pr","_n","smartMode","smartSuperscript","removeExtraneousParentheses","isImplicitFunction","mathModeSpace","environmentPopoverPolicy","inlineShortcutTimeout","onInlineShortcut","onScrollIntoView","xc","Mn","Wg","hs","setPositionHandlingPlaceholder","bo","extractAtoms","fs","Hg","vc","parentEnvironment","qg","_c","Mc","Kp","setEnvironment","bs","recording","lastOp","stopCoalescing","setState","getState","maximumDepth","gs","yo","Xg","containsStart","containsEnd","Mt","extend","Zg","st","xs","Qg","ys","selectionIsPlaceholder","Ip","getHTMLElement","Yg","Sc","zp","tb","getSiblingsRange","Np","rb","ib","tabIndex","documentOrder","Oe","wt","wn","wc","findAtom","Fp","vs","vi","_s","Hp","Ac","isTrusted","xu","keyboardLayout","_keybindings","inlineShortcutBufferFlushTimer","keystrokeCaptionVisible","Vp","inlineShortcutBuffer","undoManager","keystrokes","leftSiblings","defer","nb","$p","math","Lc","selectionDidChange","keyboardDelegate","cancelComposition","Up","startOffset","endOffset","significand","exponent","ob","scientificNotationTemplate","ab","xo","scientificNotationTimer","jp","kc","Ms","Jp","moveToOpposite","getBranchRange","moveBeforeParent","moveAfterParent","moveToNextChar","moveToPreviousChar","moveUp","moveDown","moveToNextWord","moveToPreviousWord","moveToGroupStart","moveToGroupEnd","moveToNextGroup","moveToPreviousGroup","moveToMathfieldStart","moveToMathfieldEnd","moveToSuperscript","moveToSubscript","moveToNextPlaceholder","moveToPreviousPlaceholder","scrollToStart","scroll","scrollToEnd","toggleKeystrokeCaption","toggleContextMenu","plonk","typedText","insertDecimalSeparator","insertPrompt","getPrompts","queryCommandSupported","readText","selectGroup","selectAll","extendSelectionForward","extendSelectionBackward","extendToNextWord","extendToPreviousWord","extendSelectionUpward","extendSelectionDownward","extendToNextBoundary","extendToPreviousBoundary","extendToGroupStart","extendToGroupEnd","extendToMathFieldStart","extendToMathFieldEnd","_i","vo","Mi","Ec","setPointerCapture","Cc","Gp","Tc","buttons","Mo","bias","extendSelectionTo","pointerType","onFocus","_o","db","Xp","ws","Zp","pb","dataTransfer","mb","Ss","Ut","fb","hb","Ne","ks","Yp","Ls","gb","Qp","Bc","matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","Kc","cases","rcases","Sb","boxSizing","kb","ip","Lb","np","flexDirection","As","wo","rp","Cs","Rc","Pc","qr","St","So","Es","ih","Ts","Sn","_className","parentMenu","_declaration","submenu","kn","submenuClass","columnCount","hasCheck","rootMenu","_abortController","menuItem","_label","_enabled","_checked","_tooltip","ariaLabel","_ariaLabel","wi","updateElement","keyboardShortcut","dispatchSelect","onMenuSelect","cancelDelayedOperation","isSubmenuOpen","activeMenuItem","movingTowardSubmenu","scheduleOperation","openSubmenu","withDelay","activeSubmenu","alternateLocation","lastMoveEvent","timeStamp","hypot","Cb","_activeMenuItem","_submenuClass","menuItems","_menuItems","onCreate","scrollBy","deltaY","updateIfDirty","firstMenuItem","lastMenuItem","nextMenuItem","getMenuItemColumn","collator","_collator","Collator","usage","findMenuItem","compare","popover","showPopover","verticalPos","maxWidth","horizontalPos","Ab","oh","ah","hidePopover","Hr","Ds","typingBufferResetTimer","hysteresisTimer","_updating","_host","isDynamic","_modifiers","typingBuffer","handleKeyupEvent","handleKeydownEvent","_openTimestamp","connectScrim","disconnectScrim","_onDismiss","SUBMENU_DELAY","Ln","lh","rh","MAX_DISTANCE","DELAY","Ic","uh","Bs","Os","re","generateID","Eb","jt","mathML","lastType","upnormal","boldnormal","italicmain","bolditalicmain","boldfraktur","upcalligraphic","boldscript","boldcalligraphic","An","dh","mh","Tb","Db","Ob","Si","Bb","zc","widehat","widecheck","widetilde","utilde","Ye","Bo","zh","Ue","Js","tu","eu","js","Cn","Nc","smallmatrix","Lo","ph","Ks","Fc","V","Ib","Kb","textToSpeechMarkup","Rb","Pb","kt","textToSpeechRules","textToSpeechRulesOptions","speechEngineRate","SRE","sre","System","getInstance","setupEngine","toSpeech","Co","Jt","Ao","Ps","plain","zb","Nb","Eo","Fb","fh","Hc","Vb","ki","PI","$c","pow","Vc","qc","atan2","$b","gh","Wc","bh","oe","yh","Hb","jc","Jc","Wb","Ub","jb","queryStyle","Jb","Gc","Gb","xh","Li","Wr","En","Uc","Xb","To","Yb","isSame","Zb","simplify","unknowns","solve","qb","Ze","Fe","vh","_h","Do","Qb","underparen","underline","overparen","overline","ey","ae","ty","ry","Ur","Xc","chem","enclose","genfrac","leftright","subsup","overunder","sizeddelim","surd","prompt","Mh","iy","ny","setAriaLabel","ariaLiveText","Fs","_selection","_anchor","_position","normalizeSelection","normalizeOffset","Ns","ay","oy","getCellRange","getParentCell","wh","atomToString","previousPosition","O0","parentCell","onContentWillChange","InputEvent","onSelectionDidChange","Sh","kh","deleteAll","deleteForward","Rp","deleteBackward","Pp","deleteNextWord","deletePreviousWord","deleteToGroupStart","deleteToGroupEnd","deleteToMathFieldStart","deleteToMathFieldEnd","sy","ly","$s","focusBlurInProgress","programmaticFocusInProgress","connectedToVirtualKeyboard","eventController","eventSink","blurred","_l10Subscription","menu","onKeystroke","onCompositionStart","onCompositionUpdate","onCompositionEnd","onInput","onCut","getRootNode","onBlur","setValue","getSelection","selectAllChildren","moveTo","fp","connectToVirtualKeyboard","disconnectFromVirtualKeyboard","showMenu","_menu","xp","_u","setOptions","getOptions","getOption","suppressEvents","dispatchEvents","geometryChangeTimer","cancelAnimationFrame","onGeometryChange","onWheel","Ap","Xa","B0","scrollingElement","getPrompt","getPromptValue","setPromptValue","valueOnFocus","setPromptState","getPromptState","getPromptRange","popUndoStack","resetUndo","_globallyFocusedMathfield","UIEvent","restoreFocusWhenDocumentFocused","Op","Bp","deltaX","scrollWidth","Ah","Zc","atomId","speak","speakHook","speechEngine","Gt","readAloudMathfield","readAloudHook","cy","jr","horizontalSpacingScale","enablePopover","virtualKeyboardMode","customVirtualKeyboardLayers","customVirtualKeyboards","keypressSound","plonkSound","virtualKeyboardContainer","virtualKeyboardLayout","virtualKeyboardTheme","virtualKeyboardToggleGlyph","virtualKeyboardToolbar","virtualKeyboards","speechEngineVoice","soundsDirectory","se","_observer","groupEnd","Tn","_internals","attachInternals","ariaMultiLine","attachShadow","delegatesFocus","_setOptions","formAssociated","optionsAttributes","observedAttributes","_fontsDirectory","kp","_soundsDirectory","audioBuffers","_keypressSound","spacebar","return","default","_plonkSound","audioContext","_audioContext","AudioContext","_speechEngine","_speechEngineRate","_speechEngineVoice","_textToSpeechMarkup","_textToSpeechRules","_textToSpeechRulesOptions","_decimalSeparator","_computeEngine","_scientificNotationTemplate","_isFunction","loadSound","arrayBuffer","decodeAudioData","createBufferSource","buffer","createGain","gain","onPointerDown","movementX","movementY","screenX","screenY","getOffsetFromPoint","openUrl","F0","localName","_getOptions","reflectAttributes","hr","_getOption","Vs","getElementInfo","self","ou","connectedCallback","pointerEvents","characterData","assignedElements","assignedNodes","upgradeProperty","disconnectedCallback","attributeChangedCallback","ariaReadOnly","ariaDisabled","AWS","Polly","apiVersion","OutputFormat","VoiceId","Engine","TextType","synthesizeSpeech","AudioStream","Audio","play","SpeechSynthesisUtterance","speechSynthesis","SpeechMarkTypes","readAloudElement","TextDecoder","decode","readAloudMarks","readAloudTokens","readAloudCurrentMark","readAloudAudio","pause","readAloudStatus","currentTime","readAloudCurrentToken","readAloudFinalToken","domain","ElementInternals","Eh","Th","Oh","define","switchKeyboardLayer","toggleVirtualKeyboard","hideVirtualKeyboard","showVirtualKeyboard","Rh","Ih","Hs","_hasRendered","_shadowRoot","_contentSlot","_renderContainer","_errorFallback","_handleKeydown","IntersectionObserver","isIntersecting","rootMargin","getDefaultMathstyle","_removeMathML","zs","getDefaultDisplay","_updateAccessibility","_addMathML","Rs","_mathMLContainer","clip","Ws","Us","xy","SourceLocation","lexer","Token","noexpand","treatAsRelax","endToken","ParseError","rawMessage","underlined","__proto__","uppercase","ESCAPE_LOOKUP","ESCAPE_REGEX","getBaseElem","utils","deflt","setting","defaultIfUndefined","hyphenate","baseElem","protocolFromUrl","SETTINGS_SCHEMA","displayMode","cli","enum","leqno","fleqn","throwOnError","cliDescription","errorColor","cliProcessor","cliDefault","defs","minRuleThickness","processor","colorIsTextColor","strict","trust","maxSize","maxExpand","globalGroup","getDefaultValue","schema","defaultType","Settings","reportNonstrict","errorCode","errorMsg","useStrictBehavior","Style","text$1","Style$1","DISPLAY","TEXT","SCRIPT","SCRIPTSCRIPT","scriptData","blocks","allBlocks","supportedCodepoint","hLinePad","tilde1","tilde2","tilde3","tilde4","DocumentFragment","hasClass","toNode","toText","fontMetricsData","sigmasAndXis","ptPerEm","doubleRuleSep","arrayRuleWidth","extraCharacterMap","getCharacterMetrics","font","fontMetricsBySizeIndex","sizeStyleMap","sizeMultipliers","sizeAtStyle","Options","textSize","phantom","fontWeight","sizeMultiplier","_fontMetrics","BASESIZE","extension","havingStyle","havingCrampedStyle","havingSize","havingBaseStyle","wantSize","havingBaseSizing","withColor","withPhantom","withFont","withTextFontFamily","withTextFontWeight","withTextFontShape","sizingClasses","oldOptions","baseSizingClasses","fontMetrics","sizeIndex","cssEmPerMu","getGlobalMetrics","getColor","ptPerUnit","cc","sp","relativeUnit","validUnit","calculateSize","sizeValue","unitOptions","makeEm","createClass","initNode","attr","invalidAttributeNameRegex","Span","Anchor","Img","iCombinations","SymbolNode","scriptFromCodepoint","needsSpan","escaped","SvgNode","PathNode","pathName","LineNode","assertSymbolDomNode","ATOMS","NON_ATOMS","mathord","textord","defineSymbol","acceptUnicodeChar","ligatures","mathTextSymbols","textSymbols","_ch","_i2","_ch2","wideChar","_i3","_ch3","fromCharCode","_i4","_ch4","extraLatin","_i5","_ch5","wideLatinLetterData","wideNumeralData","lookupSymbol","fontName","makeSymbol","symbolNode","lookup","canCombine","sizeElementFromChildren","makeSpan$2","makeSvgSpan","makeFragment","retrieveTextFontName","baseFontName","fontMap","mathbf","mathrm","textit","mathit","mathnormal","mathsfit","mathbb","mathcal","mathfrak","mathscr","mathsf","mathtt","svgData","buildCommon","mathsym","makeSpan","makeLineSpan","thickness","borderBottomWidth","makeAnchor","wrapFragment","makeVList","positionType","oldChildren","currPos","diff","positionData","getVListChildrenAndDepth","pstrutSize","pstrut","realChildren","minPos","maxPos","_child","_elem","wrapperClasses","wrapperStyle","childWrap","vlist","emptySpan","depthStrut","topStrut","vtable","makeOrd","isFont","fontOrFamily","wideFontName","wideFontClass","codePoint","wideCharacterFont","fontClasses","fontData","fontClass","boldsymbol","_fontName","_fontName3","_fontName2","makeGlue","measurement","staticSvg","svgNode","viewBox","preserveAspectRatio","tryCombineChars","chars","thinspace","mediumspace","thickspace","spacings","tightSpacings","_functions","_htmlGroupBuilders","_mathmlGroupBuilders","defineFunction","_ref","htmlBuilder","mathmlBuilder","numArgs","argTypes","allowedInArgument","allowedInText","allowedInMath","numOptionalArgs","defineFunctionBuilders","_ref2","normalizeArgument","ordargument","makeSpan$1","binLeftCanceller","binRightCanceller","styleMap$1","scriptscript","DomEnum","buildExpression$1","isRealGroup","surrounding","buildGroup$1","glueOptions","dummyPrev","dummyNext","traverseNonSpaceNodes","prevType","getTypeOfDomTree","partialGroup","checkPartialGroup","nonspace","insertAfter","getOutermostNode","side","makeNullDelimiter","moreClasses","baseOptions","groupNode","multiplier","buildHTMLUnbreakable","verticalAlign","buildHTML","tree","eqnNum","tagChild","nobreak","htmlNode","newDocumentFragment","MathNode","TextNode","mathMLTree","SpaceNode","makeText","makeRow","getVariant","isNumberPunctuation","buildExpression","isOrdgroup","buildGroup","lastGroup","_group","buildExpressionRow","buildMathML","texExpression","isDisplayMode","forMathmlOnly","annotation","semantics","wrapperClass","optionsFromSettings","settings","displayWrap","stretchyCodePoint","xrightleftarrows","xrightequilibrium","xleftequilibrium","katexImagesData","stretchy","topPad","bottomPad","totalHeight","borderColor","x1","y1","x2","y2","minWidth","viewBoxWidth","viewBoxHeight","numChars","imgIndex","widthClasses","aligns","spans","_minWidth","_viewBoxHeight","_height2","numSvgChildren","_path","_svgNode","_span","buildSvgSpan_","assertNodeType","assertSymbolNodeType","typedNode","checkSymbolNodeType","htmlBuilder$a","grp","supSubGroup","assertSpan","isShifty","baseChar","accentBody","accentBelow","clearance","isStretchy","accentFull","accentWrap","mathmlBuilder$9","accentNode","NON_STRETCHY_ACCENT_REGEX","funcName","parser","innerGroup","kern","paddedNode","optArgs","lowerGroup","newOptions","upperGroup","arrowPrefix","arrowBody","arrowShift","upperShift","lowerShift","arrowNode","upperNode","lowerNode","_lowerNode","htmlBuilder$9","mathmlBuilder$8","lspace","rspace","binrelClass","atom","_ref3","baseArg","shiftedArg","baseOp","alwaysHandleSupSub","parentIsSupSub","suppressBaseShift","textShadow","cdArrowFunctionName","isStartOfArrow","cdArrow","arrowChar","labels","callFunction","bareArrow","arrowGroup","htmlBuilder$8","mathmlBuilder$7","breakOnTokenText","gullet","future","parseSizeGroup","newLine","marginTop","globalMap","checkControlSequence","tok","letCommand","macro","unexpandable","isExpandable","consumeSpaces","parseFunction","popToken","delimiters","consumeArg","expandTokens","getRHS","_ref4","middle","pushToken","getMetrics","styleWrap","toStyle","delimSizeMultiplier","centerSpan","makeLargeDelim","mathrmSize","makeGlyphSpan","sizeClass","makeInner","innerPath","lap","verts","doubleVerts","makeStackedDelim","heightTotal","svgLabel","topMetrics","topHeightTotal","repeatMetrics","repeatHeightTotal","bottomMetrics","bottomHeightTotal","middleHeightTotal","middleFactor","middleMetrics","minHeight","realHeightTotal","midHeight","pathStr","tallDelim","_innerHeight","emPad","sqrtSvg","sqrtName","extraVinculum","sqrtMain","sqrtSize1","sqrtSize2","sqrtSize3","sqrtSize4","sqrtTall","sqrtPath","pathNode","stackLargeDelimiters","stackAlwaysDelimiters","stackNeverDelimiters","sizeToMaxHeight","stackNeverDelimiterSequence","stackAlwaysDelimiterSequence","stackLargeDelimiterSequence","delimTypeToFont","traverseSequence","heightDepth","makeCustomSizedDelim","makeSmallDelim","delimiter","sqrtImage","advanceWidth","spanHeight","texHeight","ruleWidth","sizedDelim","customSizedDelim","leftRightDelim","delimiterExtend","maxDistFromAxis","delimiterSizes","checkDelimiter","symDelim","assertParsed","leftrightDepth","expect","rightColor","innerDepth","hadMiddle","isMiddle","colorOptions","leftNode","rightNode","middleDelim","textNode","middleNode","htmlBuilder$7","imgShift","isSingleChar","lineWeight","angleHeight","paddingLeft","phasePath","ruleThickness","borderWidth","borderTopWidth","borderRightWidth","mathmlBuilder$6","thk","_ref5","_environments","defineEnvironment","_macros","defineMacro","getHLines","hlineInfo","nxt","consume","validateAmsEnvironmentContext","envName","getAutoTag","parseArray","hskipBeforeAndAfter","addJot","cols","autoTag","singleRow","emptySingleRow","maxNumCols","beginGroup","expandMacroAsText","hLinesBeforeRow","tags","beginRow","endRow","subparse","cell","endGroup","nextToken","dCellStyle","htmlBuilder$6","hlines","baselineskip","arrayskip","arstrutHeight","arstrutDepth","setHLinePos","hlinesInGap","isDashed","inrow","outrow","elt","rowGap","colSep","colDescrNum","colDescriptions","tagSpans","rw","tagSpan","colDescr","firstSeparator","lineType","borderRightStyle","margin","_shift","sepwidth","pregap","_shift2","postgap","dashes","vListElems","hline","lineShift","eqnNumCol","alignMap","mathmlBuilder$5","tbl","menclose","columnLines","prevTypeWasAlign","iStart","iEnd","_cols","rowLines","alignedHandler","numMaths","separationType","isSplit","numCols","emptyGroup","arg0","isAligned","styling","curMaths","nde","colAlign","parsedRows","endChar","rowNodes","labelNum","inLabel","wrappedArrow","parseCD","environments","nameGroup","_args","parseArguments","endNameToken","htmlBuilder$5","mathmlBuilder$4","fontAliases","func","adjustStyle","originalStyle","htmlBuilder$4","nstyle","dstyle","numerm","numer","continued","hStrut","dStrut","ruleSpacing","numShift","denomShift","delimSize","denomm","denom","barSize","midShift","candidateClearance","mathmlBuilder$3","isDisplay","withDelims","leftOp","rightOp","replaceWith","stylArray","delimFromValue","delimString","barNode","isBlank","styl","textOrd","_ref6","assert","htmlBuilder$3","braceBody","isOver","vSpan","formatUnsupportedCmd","trustContext","keyVal","sizeData","totalheight","mathFunction","muUnit","alignment","outerMode","chooseMathStyle","assembleSupSub","supGroup","subGroup","finalGroup","subIsSingleCharacter","_bottom","spacer","noSuccessor","htmlBuilder$2","hasLimits","stash","oval","mathmlBuilder$1","singleCharBigOps","fName","singleCharIntegrals","htmlBuilder$1","childText","sizingGroup","isAllString","word","identifier","semisimple","sizeFuncs","tbArg","letter","smashedNode","lineClearance","minDelimiterHeight","delimDepth","rootm","toShift","rootVList","rootVListWrap","styleMap","newStyle","builderDelegate","htmlBuilderDelegate","supm","subm","minSupShift","valueBase","valueSup","valueSub","supShift","subShift","_newOptions","isOiint","vlistElem","_vlistElem","isBrace","_base2","_base","defaultVariant","mtext","cssSpace","regularSpace","padNode","textFontFamilies","textFontWeights","textFontShapes","optionsWithFont","makeVerb","star","functions","spaceRegexString","controlWordWhitespaceRegexString","combiningDiacriticalMarkString","combiningDiacriticalMarksEndRegex","tokenRegexString","Lexer","tokenRegex","catcodes","setCatcode","lex","lastIndex","nlIndex","Namespace","builtins","globalMacros","undefStack","undefs","undef","endGroups","expandOnce","consumeArgs","digitToNumber","digit","newcommand","existsOK","nonexistsOK","skipIfExists","isDefined","argText","expandNextToken","dotsByToken","thedots","expandAfterFuture","spaceAfterDots","latexRaiseA","braketHelper","one","middleDouble","oldMiddle","oldMiddleDouble","midMacro","double","doubled","implicitCommands","MacroExpander","expansionCount","feed","newMode","pushTokens","delims","isDelimited","countExpansion","expandableOnly","topToken","expansion","_getExpansion","oldStackLength","definition","catcode","stripped","bodyLexer","unicodeSubRegEx","uSubsAndSups","unicodeAccents","unicodeSymbols","Parser","oldToken","breakOnInfix","endOfExpression","parseAtom","formLigatures","handleInfixNodes","overIndex","numerNode","denomNode","numerBody","denomBody","handleSupSubscript","symbolToken","parseGroup","textordArray","prime","primes","isSub","subsupTokens","funcData","totalArgs","argType","parseGroupOfType","optional","parseColorGroup","parseUrlGroup","parseArgumentGroup","parseStringGroup","_group2","modeName","argToken","parseRegexGroup","regex","firstToken","lastToken","parseSymbol","nucleus","parseTree","toParse","baseNode","renderToDomTree","compatMode","renderError","katexNode","mathMLNode","_htmlNode","buildTree","katex","renderToString","__parse","__renderToDomTree","__renderToHTMLTree","buildHTMLTree","__setFontMetrics","__defineSymbol","__defineFunction","__defineMacro","__domTree","sourceType","sourceName","sourceDetails","chapter","page_number","semester","institution","sourceTypeOptions","questionType","questionText","difficulty","topicsInput","reviewed","exerciseMetadata","mcqOptions","is_correct","allowMultiple","mcqMarks","fillBlankAnswers","fillBlankMarks","matchingPairs","correctAnswer","marks","hints","trueFalseAnswer","exerciseImages","questionTypeOptions","difficultyOptions","gradeOptions","showMathPanel","mathPanelValue","questionTextareaRef","mathPanelFieldElement","cursorPosition","keyboardOpened","keyboardObserver","openMathPanel","forceKeyboardZIndex","setupKeyboardObserver","closeMathPanel","insertMathIntoTextarea","latexValue","mathToInsert","newPosition","setSelectionRange","openKeyboardInPanel","selector","keyboard","shadowKeyboard","addMcqOption","addFillBlank","addMatchingPair","handleImageUpload","reader","FileReader","caption","readAsDataURL","correct_answer","allow_multiple","answers","pairs","pair","answer","imageMetadata","submitData","exercise","question_type","question_text","images","showTextbookFields","showExamFields","showCustomFields","showFreeFormFields","showMcqFields","showFillBlankFields","showMatchingFields","showTrueFalseFields","useMathEditor","previewParts","mathRegex","textBefore","rendered","remainingText","renderMathPreview","textarea_2","textarea_3","removeMcqOption","toggleMcqCorrect","removeFillBlank","removeMatchingPair","input_19","removeImage","math_field","$.set_custom_element_data","handleMathPanelFieldMount","exercises","selectedAnswers","difficultyLabels","easy","hard","difficultyColors","getCorrectOptionId","correctOption","renderWithLatex","latexRegex","textPart","latexContent","fetchExercises","correct","incorrect","exerciseId","optionId","isCorrect","exerciseIdNum","optionIdNum","MCQExerciseDisplay","isExpanded","pid","asInt","paymentid","signed_url","createInboxApi","onSessionChange","sessionToken","checkSession","finishMutation","finished","beginInboxMutation","bounded","requestSignal","inbox_update_in_progress","inbox_client_update_required","history_range_reload_required","conversation_unavailable","template_required","template_preview_conflict","template_not_approved","template_unverified","template_verification_stale","viber_template_parameter_too_long","viber_template_url_requires_fixed_domain","provider_configuration_invalid","draft_conflict","draft_not_saved","send_outcome_unknown","send_reconciliation_required","command_expired","command_cancelled","command_binding_conflict","command_pending_conflict","command_limit","recovery_storage_unavailable","recovery_storage_full","conversation_conflict","notification_consent_required","notifications_opted_out","parent_identity_required","parent_identity_changed","sending_disabled","channel_disabled","recipient_not_allowed","pilot_not_configured","sender_binding_changed","recipient_binding_changed","viber_burst_exhausted","viber_session_exhausted","viber_session_unverified","recovery_conflict","delivery_order_conflict","replacement_confirmation_required","message_content_purged","receipt_review_conflict","receipt_replay_unavailable","receipt_content_purged","history_source_missing","receipt_route_repair_invalid","duplicate_risk_confirmation_required","recovery_action_invalid","inbox_disabled","idempotency_conflict","parameterLabels","class_subject","old_date","new_date","new_time","deliveryLabels","queued","delivered","blocked","received","internal","conversationId","checks","verification","template_id","refresh_enabled","refresh_pending","eligible","eligibility_reason","verified_at","states","review","processing","purged","issues","unmatched_channel_account","provider_identity_conflict","provider_recipient_conflict","invalid_timestamp","future_timestamp","unsupported_event","unsupported_status","invalid_content","invalid_event","unsupported_provider","projection_interrupted","history_content_conflict","nextBefore","repairItems","selecting","listGeneration","intent","next_before","inspect","preserveReason","expected_version","route_repairs","account_id","replay_allowed","provider","received_at","issue","issue_count","content_purged","input_value","account_name","recent_replays","older_replays_exist","attempts","TEST_KEY","phoneTestDescription","leased","attempted","notifyInbound","phoneConfig","phoneBusy","phoneBinding","phoneNotice","phoneError","phoneEpoch","credential","testRecord","testResult","testBusy","testError","validPreferences","denied","loadPreferences","client","request_key","subscription_id","recoverPhoneTest","savePreferences","expected","enablePhone","epoch","enrollmentErrorCode","disablePhone","storageError","disconnectPhone","diagnostic","testPending","record","preparePhoneTest","display_confirmed","validatePhoneTest","dedicatedEntry","supported","removeUpdateGuard","PushManager","storageArea","$updateState","submillisecond","compareMessages","occurred_at","requireHistoryContract","contract","history_contract","order","sessionController","draftTimer","readObserver","onRouteEvent","observedRoute","conversations","templates","loadingThread","needsLogin","online","olderCursor","templateId","parameters","draftConflict","draftEdit","conflictingDraft","conflictLoading","resolvingDraft","showContacts","contacts","contactSearch","timeline","newMessages","sessionGeneration","checkingSession","sessionCheckFailed","polling","initialized","saveChain","preparedRequest","recovering","submissionNotice","recovery","recoveryStorageIssue","recoveryMessage","showTemplateVerification","showReceiptReview","openingSnapshot","positioningHistory","loadingOlder","olderHistoryChanged","resyncRequired","resyncNeedsReload","resyncLatest","readPositions","readPending","messageNodes","verifiedApi","reconcilePending","loadDraftConflict","listQuery","visibleNode","scrollAnchor","restoreAnchor","markDisplayed","ident","acknowledged","historical","message_ids","scrollToLatest","navigateThread","flushDraft","openThread","mergeMessages","older_cursor","applyDraft","draftPayload","server","found","conversation_id","canSend","savedCommand","expected_template_hash","definition_hash","attempt","TextEncoder","encode","subtle","requestDigest","obsolete","draft_version","submitted_draft_version","draft_cleared_version","cancelPrepared","cancelPendingKey","updateThread","olderMessages","resynchronize","listVersion","oldest","older","positions","atBottom","freshTail","findContacts","refreshList","searchChanged","formatTime","threshold","bootstrap","offline","beforeUnload","removeNavigationGuard","parameter_format","parameter_names","recoveryPending","capabilities","InboxUpdate","InboxDeviceSetup","ReceiptReviewPanel","contact","notifications_allowed","account","remote_id","contact_id","startContact","conversation","unread_count","last_content_purged","last_text","last_message_at","option_10_value","submission_hold","message_id","node_24","recovery_available","$$action_arg","trackMessage","delivery_status","provenance","author","messageAuthor","messageBody","messageId","confirm_accepted","resend_unknown","retry_blocked","replace_blocked","providerId","duplicateRisk","replacementConfirmed","provider_id","confirm_duplicate_risk","confirm_replacement","expected_conversation_revision","conversation_revision","replacement_preview","ordering_reason","RecoveryPanel","TemplateVerificationPanel","localDraft","serverDraft","copyNotice","reply","DraftConflictPanel","resolveDraftConflict","preview_text","node_34","option_15_value","fragment_13","text_27","node_41","text_limit","node_36","assignee","select_2_value","assignee_id","inert","observedToken","storageUnavailable","redactUnreadableSession","force","suspended","focused","reopened","controllerChanged","pageShown","persisted","installPhoneLifecycle","installing","ports","app","Component","intro","transformError","unmount","outro","component_root","anchor_node","registered_events","event_handle","_mount","mount","routes","AboutPage","ForgotPasswordPage","LogInGreeting","RegisterForClass","RegisterSuccess","SchedulePage","ChangeClassPage","CancelPage","ChangeSucess","LeaveCommentPage","LeaveNoteSuccess","RescheduleRequestsPage","SettingsAndTimeslots","StandaloneInvoicesPage","BendraInformacijaPage","AccountPage","TeacherRequestsPage","AdminPage","UpdateCredentialsPage","RedirectAfterPaymentRoute","AdminSearchPage","AdminTeacherSurveilancePage","TeacherPerformancePage","TeacherRegistrationPage","AdminStudentInvoiceViewer","AdminStudentsPage","AdminTeachersPage","AdminAllDashboardPage","AdminActivityDashboardPage","AdminCalendarPage","AdminMonthlyFeedbackPage","ExcerciseBankLandingPage","UploadExercise","ExerciseBankPage","InvoiceOpenRoute","InboxPage","restoreScrollState","onConditionsFailed","onRouteLoaded","onRouteLoading","RouteItem","userData","_pattern","_keys","isWrapped","_sveltesparouter","checkConditions","routesList","route","componentParams","routeProps","previousScrollState","componentObj","dispatchNextTick","matchToParams","scrollRestoration","popStateChanged","newLoc","matchParams","obj","loadingParams","comp","Component_1","$.spread_props","Component_2","Router"],"mappings":"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,EAAE,OAAO,EAAE,OAAO,QAAQ,GAAG,CAAC,EAAE,OAAO,OAAO,OAAO,QAAQ,GAAG,CAAC,EAAE,OAAO,OAAO,OAAO,QAAQ,GAAGD,GAAG,GAAG,CAAC,EAAE,OAAO,OAAO,OAAO,QAAQ,GAAG,CAAC,OAAO,OAAO,EAAE,OAAO,QAAQ,GAAG,CAAC,EAAE,OAAO,OAAO,OAAO,QAAQ,GAAG,CAAC,EAAE,OAAO,OAAO,OAAO,OAAO,GAAG,CAAC,EAAE,OAAO,OAAO,OAAO,QAAQ,GAAG,CAAC,EAAE,OAAO,OAAO,OAAO,QAAQ,GAAG,CAAC,EAAE,OAAO,OAAO,EAAE,QAAQ,GAAG,CAAC,EAAE,OAAO,OAAO,EAAE,QAAQ,GAAG,CAAC,EAAE,OAAO,OAAO,OAAO,QAAQ,GAAG,CAAC,EAAE,OAAO,OAAO,EAAE,QAAQ,GAAG,CAAC,EAAE,OAAO,OAAO,OAAO,QAAQ,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,QAAQ,IAAI,CAAC,OAAO,OAAO,OAAO,OAAO,QAAQ,IAAI,CAAC,OAAO,OAAO,OAAO,OAAO,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,IAAI,CAAC,OAAO,OAAO,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,OAAO,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,OAAO,OAAO,OAAO,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,IAAIE,GAAG,IAAI,CAAC,OAAO,OAAO,EAAE,OAAO,QAAQ,IAAI,CAAC,OAAO,OAAO,OAAO,OAAO,QAAQ,IAAI,CAAC,EAAE,OAAO,OAAO,OAAO,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,QA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S,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,QAC3B,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,QAC3B,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,QAC3B,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,IACjC,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,QAC3B,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,QAC3B,KAAQ,EAAE,OAAS,OAAS,EAAG,EAAG,QAClC,KAAQ,EAAE,OAAS,OAAS,EAAG,EAAG,QAClC,KAAQ,EAAE,OAAS,OAAS,EAAG,EAAG,QAClC,KAAQ,EAAE,OAAS,OAAS,EAAG,EAAG,QAClC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,EAAE,OAAS,OAAS,EAAG,EAAG,QAClC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,QAC3B,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,IACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,QACjC,KAAQ,CAAC,OAAS,OAAS,EAAG,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EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,EAAG,OAAS,OAAS,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,QAClC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,SAEpC,s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AAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,MAC/B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,MAC/B,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,MAC/B,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,MAC/B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,OAAS,EAAG,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,MACzB,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,MAChC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,MAChC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,MAChC,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,MAChC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,MAChC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,MAChC,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,MAChC,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,MAChC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,EAAG,EAAG,EAAG,MACpB,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,OAAS,EAAG,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,MAChC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,MAC1B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CL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KA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","x_google_ignoreList":[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,169,170,220,221]}