From c0fd85740c415048e6f54d2d7a6dd595b329ba2c Mon Sep 17 00:00:00 2001 From: Elias Schneider Date: Sun, 18 Oct 2026 21:00:43 +0200 Subject: [PATCH] feat!: add v3 design tokens, fonts and color themes --- backend/internal/appconfig/legacy.go | 22 + backend/internal/appconfig/migration.go | 3 + backend/internal/appconfig/model.go | 4 +- backend/internal/appconfig/model_test.go | 29 + backend/internal/appconfig/service.go | 8 + backend/internal/dto/app_config_dto.go | 2 +- backend/internal/job/file_cleanup_job.go | 14 +- backend/internal/service/user_service.go | 2 +- .../internal/utils/image/profile_picture.go | 11 +- .../api-key-expiring-soon_html.tmpl | 2 +- .../email-verification_html.tmpl | 2 +- .../login-with-new-device_html.tmpl | 2 +- .../email-templates/one-time-access_html.tmpl | 2 +- .../resources/email-templates/test_html.tmpl | 2 +- .../fonts/FunnelDisplay-SemiBold.ttf | Bin 0 -> 32864 bytes backend/resources/fonts/Gloock.ttf | Bin 95156 -> 0 bytes email-templates/components/base-template.tsx | 7 +- email-templates/components/card-header.tsx | 4 +- email-templates/components/theme.ts | 13 +- frontend/messages/en.json | 28 +- frontend/src/app.css | 541 ++++++++++++---- frontend/src/fonts.css | 129 ++++ .../src/lib/components/header/header.svelte | 2 +- .../stores/application-configuration-store.ts | 5 +- .../types/application-configuration.type.ts | 2 +- frontend/src/lib/utils/accent-color-util.ts | 58 -- frontend/src/lib/utils/color-theme-util.ts | 452 ++++++++++++++ frontend/src/lib/utils/color-themes.ts | 590 ++++++++++++++++++ frontend/src/routes/device/+page.svelte | 2 +- frontend/src/routes/interaction/+page.svelte | 2 +- .../src/routes/interaction/error/+page.svelte | 2 +- frontend/src/routes/login/+page.svelte | 2 +- .../src/routes/login/alternative/+page.svelte | 2 +- .../login/alternative/code/+page.svelte | 2 +- .../login/alternative/device/+page.svelte | 7 +- .../login/alternative/email/+page.svelte | 2 +- frontend/src/routes/logout/+page.svelte | 2 +- .../forms/accent-color-picker.svelte | 109 ---- .../forms/app-config-general-form.svelte | 19 +- .../forms/color-theme-picker.svelte | 138 ++++ .../forms/custom-accent-color-dialog.svelte | 82 --- .../forms/custom-theme-color-dialog.svelte | 135 ++++ frontend/src/routes/signup/+page.svelte | 2 +- .../routes/signup/add-passkey/+page.svelte | 3 +- frontend/src/routes/signup/setup/+page.svelte | 2 +- .../fonts/FunnelDisplay-latin-ext.woff2 | Bin 0 -> 9512 bytes .../static/fonts/FunnelDisplay-latin.woff2 | Bin 0 -> 17712 bytes .../fonts/FunnelSans-Italic-latin-ext.woff2 | Bin 0 -> 10260 bytes .../fonts/FunnelSans-Italic-latin.woff2 | Bin 0 -> 18972 bytes .../static/fonts/FunnelSans-latin-ext.woff2 | Bin 0 -> 9524 bytes frontend/static/fonts/FunnelSans-latin.woff2 | Bin 0 -> 17360 bytes frontend/static/fonts/Gloock-Regular.woff | Bin 52388 -> 0 bytes .../fonts/JetBrainsMono-cyrillic-ext.woff2 | Bin 0 -> 1664 bytes .../static/fonts/JetBrainsMono-cyrillic.woff2 | Bin 0 -> 8892 bytes .../static/fonts/JetBrainsMono-greek.woff2 | Bin 0 -> 6800 bytes .../fonts/JetBrainsMono-latin-ext.woff2 | Bin 0 -> 11596 bytes .../static/fonts/JetBrainsMono-latin.woff2 | Bin 0 -> 31340 bytes .../fonts/JetBrainsMono-vietnamese.woff2 | Bin 0 -> 5872 bytes .../profile-pictures/defaults/CF-v3.png | Bin 0 -> 4201 bytes .../uploads/profile-pictures/defaults/CF.png | Bin 5995 -> 0 bytes .../profile-pictures/defaults/TC-v3.png | Bin 0 -> 4153 bytes .../uploads/profile-pictures/defaults/TC.png | Bin 5763 -> 0 bytes tests/specs/cli.spec.ts | 2 +- 63 files changed, 2008 insertions(+), 443 deletions(-) create mode 100644 backend/resources/fonts/FunnelDisplay-SemiBold.ttf delete mode 100644 backend/resources/fonts/Gloock.ttf create mode 100644 frontend/src/fonts.css delete mode 100644 frontend/src/lib/utils/accent-color-util.ts create mode 100644 frontend/src/lib/utils/color-theme-util.ts create mode 100644 frontend/src/lib/utils/color-themes.ts delete mode 100644 frontend/src/routes/settings/admin/application-configuration/forms/accent-color-picker.svelte create mode 100644 frontend/src/routes/settings/admin/application-configuration/forms/color-theme-picker.svelte delete mode 100644 frontend/src/routes/settings/admin/application-configuration/forms/custom-accent-color-dialog.svelte create mode 100644 frontend/src/routes/settings/admin/application-configuration/forms/custom-theme-color-dialog.svelte create mode 100644 frontend/static/fonts/FunnelDisplay-latin-ext.woff2 create mode 100644 frontend/static/fonts/FunnelDisplay-latin.woff2 create mode 100644 frontend/static/fonts/FunnelSans-Italic-latin-ext.woff2 create mode 100644 frontend/static/fonts/FunnelSans-Italic-latin.woff2 create mode 100644 frontend/static/fonts/FunnelSans-latin-ext.woff2 create mode 100644 frontend/static/fonts/FunnelSans-latin.woff2 delete mode 100644 frontend/static/fonts/Gloock-Regular.woff create mode 100644 frontend/static/fonts/JetBrainsMono-cyrillic-ext.woff2 create mode 100644 frontend/static/fonts/JetBrainsMono-cyrillic.woff2 create mode 100644 frontend/static/fonts/JetBrainsMono-greek.woff2 create mode 100644 frontend/static/fonts/JetBrainsMono-latin-ext.woff2 create mode 100644 frontend/static/fonts/JetBrainsMono-latin.woff2 create mode 100644 frontend/static/fonts/JetBrainsMono-vietnamese.woff2 create mode 100644 tests/resources/export/uploads/profile-pictures/defaults/CF-v3.png delete mode 100644 tests/resources/export/uploads/profile-pictures/defaults/CF.png create mode 100644 tests/resources/export/uploads/profile-pictures/defaults/TC-v3.png delete mode 100644 tests/resources/export/uploads/profile-pictures/defaults/TC.png diff --git a/backend/internal/appconfig/legacy.go b/backend/internal/appconfig/legacy.go index 65d34be6..751f1c3b 100644 --- a/backend/internal/appconfig/legacy.go +++ b/backend/internal/appconfig/legacy.go @@ -10,6 +10,7 @@ func (m *AppConfigModel) DecodeMsgpack(dec *msgpack.Decoder) error { *config LegacyNotificationEnabled AppConfigValue `msgpack:"EmailLoginNotificationEnabled"` LegacyEmailVerificationEnabled AppConfigValue `msgpack:"EmailVerificationEnabled"` + LegacyAccentColor AppConfigValue `msgpack:"AccentColor"` }{config: (*config)(m)} if err := dec.Decode(&value); err != nil { return err @@ -20,6 +21,9 @@ func (m *AppConfigModel) DecodeMsgpack(dec *msgpack.Decoder) error { if m.EmailVerification == "" && value.LegacyEmailVerificationEnabled != "" { m.EmailVerification = legacyEmailVerification(value.LegacyEmailVerificationEnabled) } + if m.ColorTheme == "" && value.LegacyAccentColor != "" { + m.ColorTheme = legacyColorTheme(value.LegacyAccentColor) + } return nil } @@ -36,3 +40,21 @@ func legacyEmailVerification(enabled AppConfigValue) AppConfigValue { } return EmailVerificationDisabled } + +// legacyColorTheme maps an accent color from before color themes to the theme built around it, or to a custom theme with that color +func legacyColorTheme(accent AppConfigValue) AppConfigValue { + switch accent { + case "", "default": + return "mono" + case "oklch(0.6 0.2 240)": + return "mist" + case "oklch(0.65 0.2 150)": + return "sage" + case "oklch(0.6 0.15 180)": + return "midnight" + case "oklch(0.6 0.24 300)": + return "lavender" + default: + return "custom:" + accent + } +} diff --git a/backend/internal/appconfig/migration.go b/backend/internal/appconfig/migration.go index 38119c21..a9d39a76 100644 --- a/backend/internal/appconfig/migration.go +++ b/backend/internal/appconfig/migration.go @@ -65,6 +65,9 @@ func fromLegacyConfig(legacyCfg map[string]string) (*AppConfigModel, error) { if legacyCfg["emailVerification"] == "" { dest.EmailVerification = legacyEmailVerification(AppConfigValue(legacyCfg["emailVerificationEnabled"])) } + if legacyCfg["colorTheme"] == "" { + dest.ColorTheme = legacyColorTheme(AppConfigValue(legacyCfg["accentColor"])) + } rt := reflect.ValueOf(dest).Elem().Type() rv := reflect.ValueOf(dest).Elem() diff --git a/backend/internal/appconfig/model.go b/backend/internal/appconfig/model.go index d765ae0b..e6b7267b 100644 --- a/backend/internal/appconfig/model.go +++ b/backend/internal/appconfig/model.go @@ -32,7 +32,7 @@ type AppConfigModel struct { SessionDuration AppConfigValue `json:"sessionDuration" env:"SESSION_DURATION" type:"int"` // In minutes HomePageURL AppConfigValue `json:"homePageUrl" env:"HOME_PAGE_URL" public:"true"` EmailsVerified AppConfigValue `json:"emailsVerified" env:"EMAILS_VERIFIED" type:"bool"` - AccentColor AppConfigValue `json:"accentColor" env:"ACCENT_COLOR" public:"true"` + ColorTheme AppConfigValue `json:"colorTheme" env:"COLOR_THEME" public:"true"` // A theme id, or custom: with an optional :dark suffix for a dark sidebar DisableAnimations AppConfigValue `json:"disableAnimations" env:"DISABLE_ANIMATIONS" type:"bool" public:"true"` AllowOwnAccountEdit AppConfigValue `json:"allowOwnAccountEdit" env:"ALLOW_OWN_ACCOUNT_EDIT" type:"bool" public:"true"` AllowUserSignups AppConfigValue `json:"allowUserSignups" env:"ALLOW_USER_SIGNUPS" public:"true"` @@ -144,7 +144,7 @@ func getDefaultConfig() *AppConfigModel { AllowUserSignups: "disabled", SignupDefaultUserGroupIDs: "[]", SignupDefaultCustomClaims: "[]", - AccentColor: "default", + ColorTheme: "mono", // Email RequireUserEmail: "true", SmtpHost: "", diff --git a/backend/internal/appconfig/model_test.go b/backend/internal/appconfig/model_test.go index 729c6aa2..90e3d170 100644 --- a/backend/internal/appconfig/model_test.go +++ b/backend/internal/appconfig/model_test.go @@ -345,4 +345,33 @@ func TestAppConfigModel_DecodeMsgpack(t *testing.T) { assert.Equal(t, AppConfigValue(LoginNotificationAlways), m.EmailLoginNotificationMode) assert.Equal(t, AppConfigValue(EmailVerificationRequired), m.EmailVerification) }) + + t.Run("maps the legacy accent color to a color theme", func(t *testing.T) { + tests := map[string]AppConfigValue{ + "default": "mono", + "oklch(0.6 0.2 240)": "mist", + "oklch(0.63 0.2 15)": "custom:oklch(0.63 0.2 15)", + } + for accent, expected := range tests { + data, err := msgpack.Marshal(map[string]string{"AccentColor": accent}) + require.NoError(t, err) + + var m AppConfigModel + err = msgpack.Unmarshal(data, &m) + require.NoError(t, err) + + assert.Equal(t, expected, m.ColorTheme) + } + }) + + t.Run("an explicit color theme wins over the legacy accent color", func(t *testing.T) { + data, err := msgpack.Marshal(map[string]string{"ColorTheme": "sage", "AccentColor": "default"}) + require.NoError(t, err) + + var m AppConfigModel + err = msgpack.Unmarshal(data, &m) + require.NoError(t, err) + + assert.Equal(t, AppConfigValue("sage"), m.ColorTheme) + }) } diff --git a/backend/internal/appconfig/service.go b/backend/internal/appconfig/service.go index f9411421..f20b3ced 100644 --- a/backend/internal/appconfig/service.go +++ b/backend/internal/appconfig/service.go @@ -258,6 +258,14 @@ func (s *AppConfigService) loadDbConfigFromEnv() (*AppConfigModel, error) { } } + // TODO: Remove in next major version (v4) + // Preserve the old accent color setting unless an explicit color theme replaces it + if _, ok := os.LookupEnv("COLOR_THEME"); !ok { + if accent, exists := os.LookupEnv("ACCENT_COLOR"); exists { + dest.ColorTheme = legacyColorTheme(AppConfigValue(accent)) + } + } + // Validate the resolved configuration before exposing values to the rest of the application err := validateEnvConfig(dest) if err != nil { diff --git a/backend/internal/dto/app_config_dto.go b/backend/internal/dto/app_config_dto.go index cb2f0499..54e24c81 100644 --- a/backend/internal/dto/app_config_dto.go +++ b/backend/internal/dto/app_config_dto.go @@ -23,7 +23,7 @@ type AppConfigUpdateDto struct { AllowUserSignups string `json:"allowUserSignups" binding:"required,oneof=disabled withToken open"` SignupDefaultUserGroupIDs string `json:"signupDefaultUserGroupIDs" binding:"omitempty,json_string_array"` SignupDefaultCustomClaims string `json:"signupDefaultCustomClaims" binding:"omitempty,json_custom_claims"` - AccentColor string `json:"accentColor"` + ColorTheme string `json:"colorTheme"` RequireUserEmail string `json:"requireUserEmail" binding:"required,boolean_string"` SmtpHost string `json:"smtpHost"` SmtpPort string `json:"smtpPort"` diff --git a/backend/internal/job/file_cleanup_job.go b/backend/internal/job/file_cleanup_job.go index 8bbe8bd9..7fbab41f 100644 --- a/backend/internal/job/file_cleanup_job.go +++ b/backend/internal/job/file_cleanup_job.go @@ -62,7 +62,7 @@ type FileCleanupJobs struct { fileStorage storage.FileStorage } -// ClearUnusedDefaultProfilePictures deletes default profile pictures that don't match any user's initials +// ClearUnusedDefaultProfilePictures deletes default profile pictures that don't match any user's initials or were rendered by an earlier version func (j *FileCleanupJobs) clearUnusedDefaultProfilePictures(ctx context.Context) error { var users []model.User err := j.db. @@ -73,10 +73,10 @@ func (j *FileCleanupJobs) clearUnusedDefaultProfilePictures(ctx context.Context) return fmt.Errorf("failed to fetch users: %w", err) } - // Create a map to track which initials are in use - initialsInUse := make(map[string]struct{}) + // Create a map to track which pictures are in use + filesInUse := make(map[string]struct{}) for _, user := range users { - initialsInUse[profilepicture.Initials(user.FirstName, user.LastName, user.Username)] = struct{}{} + filesInUse[profilepicture.DefaultPictureFile(profilepicture.Initials(user.FirstName, user.LastName, user.Username))] = struct{}{} } defaultPicturesDir := path.Join("profile-pictures", "defaults") @@ -91,10 +91,8 @@ func (j *FileCleanupJobs) clearUnusedDefaultProfilePictures(ctx context.Context) if filename == "" { continue } - initials := strings.TrimSuffix(filename, ".png") - - // If these initials aren't used by any user, delete the file - if _, ok := initialsInUse[initials]; !ok { + // If no user needs this picture, delete the file + if _, ok := filesInUse[filename]; !ok { filePath := path.Join(defaultPicturesDir, filename) err = j.fileStorage.Delete(ctx, filePath) if err != nil { diff --git a/backend/internal/service/user_service.go b/backend/internal/service/user_service.go index df80fa9c..b31846a9 100644 --- a/backend/internal/service/user_service.go +++ b/backend/internal/service/user_service.go @@ -140,7 +140,7 @@ func (s *UserService) GetProfilePicture(ctx context.Context, userID string) (io. // Try cached default for initials initials := profilepicture.Initials(user.FirstName, user.LastName, user.Username) - defaultPicturePath := path.Join("profile-pictures", "defaults", initials+".png") + defaultPicturePath := path.Join("profile-pictures", "defaults", profilepicture.DefaultPictureFile(initials)) file, size, err = s.fileStorage.Open(ctx, defaultPicturePath) if err == nil { return file, size, nil diff --git a/backend/internal/utils/image/profile_picture.go b/backend/internal/utils/image/profile_picture.go index 7814c04d..3d49de2f 100644 --- a/backend/internal/utils/image/profile_picture.go +++ b/backend/internal/utils/image/profile_picture.go @@ -88,7 +88,7 @@ func centerSquare(img image.Image) image.Image { } var loadInitialsFont = sync.OnceValues(func() (*opentype.Font, error) { - fontBytes, err := resources.FS.ReadFile("fonts/Gloock.ttf") + fontBytes, err := resources.FS.ReadFile("fonts/FunnelDisplay-SemiBold.ttf") if err != nil { return nil, fmt.Errorf("failed to read font file: %w", err) } @@ -130,6 +130,12 @@ func canRenderInitials(initials string) bool { return true } +// DefaultPictureFile returns the cache file name of the default picture for the initials +// The suffix changes whenever the rendering changes, so the cleanup job deletes pictures cached by an earlier version +func DefaultPictureFile(initials string) string { + return initials + "-v3.png" +} + // CreateDefaultProfilePicture creates a profile picture with the initials func CreateDefaultProfilePicture(initials string) (*bytes.Buffer, error) { // Create a blank image with a white background @@ -142,7 +148,8 @@ func CreateDefaultProfilePicture(initials string) (*bytes.Buffer, error) { } // Create a font.Face with a specific size - fontSize := 160.0 + // Clients often crop the picture to a circle, so the initials keep clear of its edge + fontSize := 120.0 face, err := opentype.NewFace(fontFace, &opentype.FaceOptions{ Size: fontSize, DPI: 72, diff --git a/backend/resources/email-templates/api-key-expiring-soon_html.tmpl b/backend/resources/email-templates/api-key-expiring-soon_html.tmpl index 657e01da..4706b6cb 100644 --- a/backend/resources/email-templates/api-key-expiring-soon_html.tmpl +++ b/backend/resources/email-templates/api-key-expiring-soon_html.tmpl @@ -1 +1 @@ -{{define "root"}}Your API key {{.Data.ApiKeyName}} expires on {{.Data.ExpiresAt.Format "2006-01-02 15:04:05 MST"}}
Your API key {{.Data.ApiKeyName}} expires on {{.Data.ExpiresAt.Format "2006-01-02 15:04:05 MST"}}
 ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍
{{.AppName}}{{.AppName}}

API key expiring soon

Hello {{.Data.Name}},

Your API key {{.Data.ApiKeyName}} will expire on {{.Data.ExpiresAt.Format "2006-01-02 15:04:05 MST"}}. Anything that uses this key will stop working once it expires.

To keep access, create a new API key in your {{.AppName}} account settings before then.

{{end}} \ No newline at end of file +{{define "root"}}Your API key {{.Data.ApiKeyName}} expires on {{.Data.ExpiresAt.Format "2006-01-02 15:04:05 MST"}}
Your API key {{.Data.ApiKeyName}} expires on {{.Data.ExpiresAt.Format "2006-01-02 15:04:05 MST"}}
 ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍
{{.AppName}}{{.AppName}}

API key expiring soon

Hello {{.Data.Name}},

Your API key {{.Data.ApiKeyName}} will expire on {{.Data.ExpiresAt.Format "2006-01-02 15:04:05 MST"}}. Anything that uses this key will stop working once it expires.

To keep access, create a new API key in your {{.AppName}} account settings before then.

{{end}} \ No newline at end of file diff --git a/backend/resources/email-templates/email-verification_html.tmpl b/backend/resources/email-templates/email-verification_html.tmpl index 262c1963..533607b4 100644 --- a/backend/resources/email-templates/email-verification_html.tmpl +++ b/backend/resources/email-templates/email-verification_html.tmpl @@ -1 +1 @@ -{{define "root"}}Confirm the email address for your {{.AppName}} account
Confirm the email address for your {{.AppName}} account
 ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍
{{.AppName}}{{.AppName}}

Verify your email address

Hello {{.Data.UserFullName}},

Click the button below to confirm the email address for your {{.AppName}} account. This link expires in 24 hours.

Verify email address

Or if you don't like clicking buttons, open this link:
{{.Data.VerificationLink}}

{{end}} \ No newline at end of file +{{define "root"}}Confirm the email address for your {{.AppName}} account
Confirm the email address for your {{.AppName}} account
 ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍
{{.AppName}}{{.AppName}}

Verify your email address

Hello {{.Data.UserFullName}},

Click the button below to confirm the email address for your {{.AppName}} account. This link expires in 24 hours.

Verify email address

Or if you don't like clicking buttons, open this link:
{{.Data.VerificationLink}}

{{end}} \ No newline at end of file diff --git a/backend/resources/email-templates/login-with-new-device_html.tmpl b/backend/resources/email-templates/login-with-new-device_html.tmpl index 21c8cc86..eb74c542 100644 --- a/backend/resources/email-templates/login-with-new-device_html.tmpl +++ b/backend/resources/email-templates/login-with-new-device_html.tmpl @@ -1 +1 @@ -{{define "root"}}A new sign-in to your {{.AppName}} account was detected
A new sign-in to your {{.AppName}} account was detected
 ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍
{{.AppName}}{{.AppName}}

New sign-in detected

Your {{.AppName}} account was recently accessed from a new IP address or browser. If this was you, no further action is needed.

Approximate location
{{if and .Data.City .Data.Country}}{{.Data.City}}, {{.Data.Country}}{{else if .Data.Country}}{{.Data.Country}}{{else}}Unknown{{end}}
IP address
{{.Data.IPAddress}}
Device
{{.Data.Device}}
Sign-in method
{{.Data.Method}}
Time
{{.Data.DateTime.Format "January 2, 2006 at 3:04 PM MST"}}

If you don't recognize this activity, review the passkeys in your {{.AppName}} account settings and remove any you don't recognize.

{{end}} \ No newline at end of file +{{define "root"}}A new sign-in to your {{.AppName}} account was detected
A new sign-in to your {{.AppName}} account was detected
 ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍
{{.AppName}}{{.AppName}}

New sign-in detected

Your {{.AppName}} account was recently accessed from a new IP address or browser. If this was you, no further action is needed.

Approximate location
{{if and .Data.City .Data.Country}}{{.Data.City}}, {{.Data.Country}}{{else if .Data.Country}}{{.Data.Country}}{{else}}Unknown{{end}}
IP address
{{.Data.IPAddress}}
Device
{{.Data.Device}}
Sign-in method
{{.Data.Method}}
Time
{{.Data.DateTime.Format "January 2, 2006 at 3:04 PM MST"}}

If you don't recognize this activity, review the passkeys in your {{.AppName}} account settings and remove any you don't recognize.

{{end}} \ No newline at end of file diff --git a/backend/resources/email-templates/one-time-access_html.tmpl b/backend/resources/email-templates/one-time-access_html.tmpl index 166284d6..d0f51c7f 100644 --- a/backend/resources/email-templates/one-time-access_html.tmpl +++ b/backend/resources/email-templates/one-time-access_html.tmpl @@ -1 +1 @@ -{{define "root"}}Your {{.AppName}} login code is {{.Data.Code}}
Your {{.AppName}} login code is {{.Data.Code}}
 ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍
{{.AppName}}{{.AppName}}

Your login code

Use the code below to sign in to {{.AppName}}. It expires in {{.Data.ExpirationString}}.

{{.Data.Code}}

Sign in

Or open {{.Data.LoginLink}} and enter the code manually.

{{end}} \ No newline at end of file +{{define "root"}}Your {{.AppName}} login code is {{.Data.Code}}
Your {{.AppName}} login code is {{.Data.Code}}
 ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍
{{.AppName}}{{.AppName}}

Your login code

Use the code below to sign in to {{.AppName}}. It expires in {{.Data.ExpirationString}}.

{{.Data.Code}}

Sign in

Or open {{.Data.LoginLink}} and enter the code manually.

{{end}} \ No newline at end of file diff --git a/backend/resources/email-templates/test_html.tmpl b/backend/resources/email-templates/test_html.tmpl index d5a5a7f3..df00c0a9 100644 --- a/backend/resources/email-templates/test_html.tmpl +++ b/backend/resources/email-templates/test_html.tmpl @@ -1 +1 @@ -{{define "root"}}Your email setup is working correctly
Your email setup is working correctly
 ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍
{{.AppName}}{{.AppName}}

Test email

Your email setup is working correctly!

{{end}} \ No newline at end of file +{{define "root"}}Your email setup is working correctly
Your email setup is working correctly
 ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍
{{.AppName}}{{.AppName}}

Test email

Your email setup is working correctly!

{{end}} \ No newline at end of file diff --git a/backend/resources/fonts/FunnelDisplay-SemiBold.ttf b/backend/resources/fonts/FunnelDisplay-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0956c48a0428db9a6d611584da2fe36ad9dc5889 GIT binary patch literal 32864 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
  • @mK6w_8hG8SJ@xg+w24OA^Vtz@(dovE4VZFL~qE0HIvV0@f7rj zRQ4D2l1lWFeOVUl$sAZ{#Vn5(!M00#sVT|r|m}j>*WK-CUY%*4n!LZu`u-*y9dMKP7#MnB(BH1A}lO2aWc!Eu5M_4qw6ISOb zmdx&h?f(EvVfQl=`x*N8L$Co)!zO+h^THWc$R3B~_!z9hr&uNXHLT^|vMOkSTK2q{ ztLoSbSO@$EEXKFkT=qIF&hunw@)(S^NQ~)e=);*j zi~C^B*eAC#{l62G2Z5K$TIB+ka8>97oWdp+OhI~+wf@WS0Pxqa#BpIKU@x*@-pJbJ zP}YunJ#VzUi|`K8O}KxHZ~^H^{wnjMASWUZf^=GhD(&7Xy~2Ey2E4oPpM=9G`(FfI z7;rq0p9105;O-a{Hch@VYycmhumEe27qOauE3`5<ee_ji6)#Zz?`5E#1ar9F{e}^pOzwD4}e+o zvh0QqxyB!SmJIg5OR(#Iha5kL=2ciXG}2AbUr}s~S=a*T~-uz#nq9$3gPvX{9t z`w!R|u0jj{K-LDE&OIyc!Z!l%IYn95Rl2ja$tK}^o32nEC zorhi`?Gyt$CIh-^I&6oT(4?8LBI4MSJf3Co1ojzEBwq~dprz1`OJFZ0L%a1uFBigM zFvA31&Qn-1tV+)Q0=+xHP2}m}X>0}TlML8LW$?(%;+dFNvS2CwQCJnLc{Uq{Rg=SW zStab7eDw4JR?Q1}5iE(1VNcZx`>Twt;pMCjmc)8kBI{rgRl*Y32+N}$E2jq52pg-K z!}{X2(AA^74mL_N>1XKdP0(9gU~g>ZP0-dYycO*_2fCW{_B?3+Hue>7XHUR?IgfX+ zKf~JYV$Z^6xPu+z-LO)8U?KUzW(p8i(_|I|YqsHq8iZM*|;%HFYcOtN+3} z@-f(_p|DbKfjx5)cAXP@fe-Uld^P-FYxz39o^RkAv7*?FHS$)zjcmb;)0_e5kX# zyJy*uzM#7kZ*Uu2-Z`W%6i+UNw)ciYEo-5g)iAtlaYABJl1s4-MJeg(9F$7S45b=s zsfy}Ks0qor3C4s(HJdS2U(wk;Jk+DF5anplJbjf4t#W`Sr^toNdflrR4KM5M931ZN z>l_|3RI4TE>s0(Y2mF*&eZ7DRqDhHqbWbcyFVr{Kv62#V^^HO#?v3LJH)^ams;ui8 z2Ny5v)i(=*uFc(x2fK&+7xwk6ac*9)xM#3u<>Hn4=H9{1RXwh)_Lurr0n*PA*<9w> zB&6?Do1s%HrBiE$Zac;T!KA)N++2EWFAP0eo}O{?H@fuNP?SZGzw_caa?QX^WLT`_ zSghud7B5jnVl=5OlIqwZCVihO%Ral55{>!#Wh!);12j2R?m>$zA1AowYGHafji_A* z9q?03`jrBzwMe>t$o@7dF;73Nw#4u_g2Nj3!&*xWioIKIO#)SO1&b}cHrt$%p z_MEESbDf74_bupg$epadNz`&AX_!eS6`qvlMkCsokSlm|77s~jaXlU?I4y2j=iuP- z)!JjS_6R)-MT6OJ8fI*Nf6`q^G1uG0z9Vw=@GghMcF$PuX(A8|3zx+h>T+BR4#*F0TP2%6tSoP_5vF zGju>3bAw*I7wdL;6#2PSB9|~pzNDq|>^YoH1D89UghnB6)8_~ZXjA>Tv>$gHZMP+a z={5&aAWxO*ha)ebLc{Q`T+ezy_;T-C#L&RcUkwf z?sMHm-TR2o>)z14tb0!PjP5a9XLJwhPU%kQZqpsm-JsizuuZo?w@NplTcTT_YuB~t z>U0%&F4E=bGH@m9;t-N`({y3FAe|p#Po0ZSQOwE@$~Vea%4f<2JiV*DrF%|!O?grI zjq;T8sPY@FyypNttvrBmQaPp^R&G}IDm(QN$`(AYQ-+jf$|9u;`!h{SjZ&r*DA`Jy zlBCQ~qLdINQ1MYb6emTJN9FJ2ONx*D7x@$UL-}p_P5Bl11;o$FPvANyKZISMyKo(q zZ@Qu!F4KAG4e4d+Iq4ZZJtm!z9+XaD|LHdDLfwFPH{QRDcsIOObZwAUNdwXn zX@S%(wMcb%u8@kP94SLemg1yoNEb2&$J4IY7;<+Nu6Y*@sP1uj-JX|J7IP7Ce6HdKMZ|g;RyNKVRSaK#fVoIm0 z5Rt21#QmbIeo^`%kt<8Y{eoJ*mL^W_P}7u)y&$94@+3haPQcqm948=4M7%)6eH2Tt zigcH#U6&|ppTJKNahE8oOQdgBAp(Dghefx>U4IsVHTV zz$_K?OSLp{wN_1wT-^%h5#FuLM0|^gyG3tl6zLsUeRIA;q<^78#M{FZOOXVT8VLt6 zr3I$cC~zJW@i{Sno|C@?oe@FdoS=D5OHT&;6E!XH2Ss{Nr1y*TuSL9HKwcH`N{Z!T zk$y$Ne9K=E^uH6BM@9UKDCHHA9#tU%|Mw#PP~`fM;F5=U`ys)l=@hd+5QN<$Fz*&| zoxlkbZy%tt*gApp07;KMKxHAOT<=mWt_J|u~Z|{4~v>UEL!1VQOah4`LLk> zu$CsS{-manOTs#a&Y&>p%n01+3`!W*nGINr(ixN*aRz0JID>MNID>MxID_&mR)0C{ z1FWf*W1ZoS{0&;5)piL&o&(JKj!r09)9PGCQkyP%r$jLu73nq+&p-@~?|3=|>%2~A zIh*Fgs*dKG7Qot}|F6C-V}&>V`WkD`@z>|jtd7@3tkti)-p2~-%IiE<@K;_hLpoPp z&tZM&cs+yl;guJcK7wqxbOY=pj&&TR#XhP;vgFe3A`TYuePk(M-AZum&|rMjBbLZk zKyGTuVBDkNfA_{7M|ATGmIaMhJ9r{PLMn1TJO5Cq37 zP!5!RWDo3@(IrWvDn02txk7lDHd69IV z?RrJJ%XS@=)azF1>gy(Hk2E5#O^Dav8pO`kmDfV4L%Zfk4Od-NQi-_oq)hEys+1tb ziYo$fF!uAtUlXM{lAEN*MkOx(BlgPa`kH^vFXDQipTEZS27lRhy}|9*b6ma7b6CVY z%uF+NIJL1P_USqGBM!d^#a^&-Id-}!Z4zmtz|SHGdx9YFxX{}rB3?kT^r}dAiFl_4 zHaOoZ^6nCEb17yw3P`DlX|~{Op1|BqG4_y%W}k?c3CKGlP4fozM2ee5+$i{&FVagX zmh>WBE8=buj|g~^NS_mNpD35Sf1InF>=ASh2*~G_Cjeh5(qfNUE*9xmMEsn1`y5e_ zVgzJJP+KR`cZ&4Al*U{^{9vyX=?BEy=S2Lfz>rk|*pCQf zNSiHhqwF8>L@8(Xz2%~K`UmbmBK%}I%0}^K3~3AYO&IP@?7wg(mFAP}XWKxq_d z&;Z6)SX=%V;vbODT9*ASoqDA5tflM3la-1J{R%v(IlhAo?7Y4P>ffQ}D%VapvbM)9 z0Q0Ei^ajbwWr1@Ln+Cc6ul~T3!ykCp{w%Md&I~aiR;Y#gqWH6%rnmo_zwzY}1r=gB zWqA$hqx59OvD|De!Sc34d3x)6k(<2x%yQa_DV~nnpET;!OQRC zfIEb@|Fm8jrK2jJq8v?j=q=ixl}{^&YFPqTNY?TkB=@$UK+;7%l`p`pw8piEmG0H| zYx8NPV#og{c#gHyZLXK*$CfE`h1t`xd zpWP~%@shTYW|k+2`uMl@C#~d(w)&B*FqVnFC7?Px8}3L%-$L|jOY)xd}{AHWf?+$BC6DGKExsQJmN=%Bc=8P6@#p~|EoVC zd#&AxklM4TJOmn5+8?;3*@wm()ra1y@kQ!qxHL&1MXf_mVx(B}6F#NYSfp(2?to*P zL#$)hLhB?ZM&3zlO2xPCF-MGtziqi$eP_c^TUXO#_ILJ_wMSb%wwK0| zgv{0UP%YJXyiLR@uz0L7@5Z^ad$5asr`S3FjC;Vg`yBh;Q`i?czc&?oxuHCi{S|xM z;p}UiyNbm*+j#6>{~eYT`~D%YVs&i5nZHf2$Tnk* zOy^$rqr983F7d`*?P0)=;L^dCJ&yF9xM-*NZb0r4yT%Vnqq1 z{uLn4Vn102Z@`P#pLhwE0_*%079iH$F4$jxANJ`7xF*A^LbmG1>@&!lzW13ZWH&*a zIG7|PI6+9zpNH@eobL+bVTdDm1mZ~8%M)-uAQtC}NRG63Q3N@-qHL05h>)WP>g5Y4 z`3syN(WyB3Kr;1%G?T!A5vTMfK&HjODZ%9g$(CY0PzK3zAz6PRSx?r8D@4dQ$U(kt zLcWuQe7%Hx10dfG=-nG}>4lVKNO?Q>7{MjM-?RgJ;5%_i@H_27`;nhQFWMkXw1E%W z;1KF@7?&hkLJ=(?p&jl5@6-|sTH+LHb1!y-B<#oE51J34Z6x@w&LHnutczr{5AE|j zjnZ8XeWbcr>UZy45FO^(N2Gc_e|{5 zh}QBJ?L_B;ai&1@^eLjJPZ2$RifAWq(N6B7o!lYU2=LF)K8tKu7tW`sR||SD{K$A~ zq;nz|8zxAX&UW;p5AQ%tA4LlIZ*jCH4>;=n*$o(iib8pN2JkSz= z=LAurH(F*Du0H?#I zni^}lV4RBy=Dz4}9H(ID+q6GoK6@MC9fWrg-a~jF;RDP!AL9NegbN5CA&>?3F~TPZ zpCWvQKTn|hGdI2-y zI81nSsKGl_4%hRRih9bZ7=e9Bq& zrVT#X25-g54m;eA-;5q^hflQO*N%hR@$2D-v*F9%+VI<~_!duji5zQ#ci>Ez_FV}0 zTxo-M0^be~w87^R9aS0%d8{X(MInt)f7@l3ij^EC-$-#UnB{}sQH&C01nIi)9yh4-w{Cs`%2H#)_H+^`dF)1}AIVwCn#hPg4M@sv$icB-h zXXdZ2GJpMDeo0B*_g|)@r>A@=#~SBl&u*TmxTMyl74~L~%t|w*uQSFc(wXiA%QvzS zdmvM=SsE4*O>^M|j*t{{1q$OyJ)+Vnuwf3u`HLirWpx09?C73T0 zFOaT^KOb;A9UmLKj_@IMlG7~6$wf%rDkXh*v|TEuk!O1sJ-hwbu^s#N?KmdKc0Iar z!=v5X4sP0ffG7(Jg2Rb|!xqfG#0l0zax40U90t6N+7 z_%grvf-hRb%Nz=RaSh~-lBE;i9it}{W6W2(q!VM0OU33oev^5CKP1Oe$58o{P6$5z zG)Zn1d7i!k`r??k=>C3qL9+;;3V zj-Cgf?U4I#0gu9k5r`9%je>u8r+Js?Hv-NZV9}#pE$;%p-T~fh*(Bia0KP$?exu^o zs&LpT_^d@CIjHbD4gXuv>c2MYRN?WrMaOJEygP^cYIO+-LMMq?k}! zldl02!|LwtBY*uXzmEqcY)Rz%%uf$*9lE$foT*4=QEE$B4RRhzd z7*p&VQG-iCC(UshS2?p@SXZI3_MDVCdOi98MiPz3Ud$U4XnuCoW27#lRb?r(8GmKN z;|mu)zG36zJ&4!s-nD++?%i&^Pj24w4xM9oe4Q9d6E=Y?lhPqRQP| ztQbfiqc+MVIR$?And4f)-Xa{1E2o!jYiu4V zrM`eZCVhjxWVZ^?3Btp@yzExN`rWr4+I8`rqSDf$cjVaJt5;oTev3bxmywa@kl&4T zKL&*_>>)wH*G}Qc#c>q&5sBkGEH7hLu8>29=#BnZMNw}|Nr{uJh81;4115Ox&?zN3 zD{t}PIy4HpW$od`e=@(V^~@KtvWq@4%!w(L(&P02WH-uYclQBe-m#qgr+IerSX;2(IV`8obfmMKll zs5D9y(Yq_OUVl*Z$}8b5_|8j=cEZPK*JCA1GubrDW$BL?jgg}E(MF-P(c00`qPIex zFfWC5>F+Q4EZ=|Uubl62S~|a>IX&y-vgN04+JDyVj^Ja(waXqD?EjhDzKumC>89z) z?xFt6nwM?fv1(gNVx?cW|B89T+cAnnd4k^>jbGI|x)N@+j;5Iff9Su2ujlg@QLmn6 zK1p2LpzVvqyl=6{&5-X@)Wv3Prjte6K$XOhj7B9te8 zr0+!IZCy*2bRK%zEq~8qiJ86UcJ?&!ugA-{Gv3pw$P@Ji_%m$Sx73p75)Tj z`z!IA@#TRXPBWp3Upo#?GocEv$K8%^hc{{~L$yA%a#Qi!Y;-)So;G*~EHFF&v~pAN zJAqGfffXQEYLe#Al-{rg>dlYe`=joMyUmY7(QTHtj-Dq>*!s#%z=T!}l?5hYlU9|v z(_fAs(>=WVapmZVFK&BWAqDw_R73&lwQ=lc#DT~!B)CA8AilVu8eR!+<}nU%l9Y;H zI}T0~QQ`I2;U!%O|0P&a?F4SE3UTMc6V0DK^pftS`^=y6#7Ev&KH#VLi1{-fXx?OQ z!O4S{R5?gv$nA{Ud1<-5c$)dGpTDBKevkS0_%M3Zd<+Jv-uwpD26B_eL~WL6{b7&b z`bu~+z8|7ms&J}}ieEbpPPI|t_4x9ZY7+wbWCMdA=zSUiJk&RYKVfc>`pm`r`9)Ip z$fB{|h>;+01ux4rUV25DSHfH1%OPG=I9aDEejULvKSx;pF5NCIfUN*)ljdg(WMfKl zc$gtvtbTpT0Jp2D@Gz`9xUzWl+QDCL>GMB0asTkhp5i01Qx~TuR?U34$K<-Op`{~W zSye~R>cP(rb{NxEM$V4*D36Q*527r2E_hf8p7p$;lBB9aOKs5BAUo8K+dRb%&9ULu zIza8X^?$YFhT3r3G+a-dvR$A-4ZH)sBRlq;HtabLluK;Txo{1@Hw@kG51A#fS#%x^ zQi~3Usi98j5FX9vn)v*Ust>`}H&o3045zupiN$V*+^biO{js$3=kcal_~0nXxiTxO!7V*$ zNqobs)-JE)jF`yw-WfAv<4bq6q?Faqh{~FqG*p%47aJKhgX=T%^U>mALL-%6t)Ob; z=x{VJttYIkjx!UfxgRfIGBx%{*+FG;S3%Rd+`P?eYU}H3i<_F<(vmw4N@vZFCm1XD z&TrpWxwW&Ysk62yrwE5-IEzF{TOcQBV=@1#{uD=diphv2YumiNRh4_&hYtH3oKTcn z*3wco6nLxmVK6l?rDFB|_zTI{h5#9ATGJJ@ZOPAF-&D{Qs2nUi92>GEp`@{~ zq^6<4t#V&G7&j*H;<3tu9m#21g+xd+8n5y$loSQuG-;J4{vGZr2QLFYnN1rnFC$j? zSn;VVVGKpG;q7dsG_K9dTh~|!HvaQJ4`yWS*QIw`8L8OW+_Iy>nDFF+qM`+3U2_(K zldz)NdF5qT49lX<_sFgImTek-0l=Y+{Ecx^w8(A?r?d^5y-rK7> zZ>if9UvH{timOddDxc0j$a@h3NUi&J^b~*63=Vz8&pvL@QPjc0J3DWvtk~P$Hd10v za%wFz6?)w2d&v9=&vdTJ%O&Y|bX;Fvykl;1MQu#X{H1(dc5a^5b8to-?M{1jn0;ET zJ;xE+GVNN>W(O$EJ}QM;2PpL?6?&y3RB&Wh*^-dhBjtD9Skll~T;1F} z+Bd(xvbZTJxqQ#Oy{BmKo69#}&o|W;rWVx9YiO8Dbrc-PG@sur(CoGY&!BUl#my|J}<$+<)w~2ucCv>lm!JVb{woIEv=AC%)d-D?p|TOl~)y) zl@*)MfC6b=q5zSok`trHSDoP;DP?3FeDh5QYSJ+pDo+c7=Xio3D0F`=>hgt{HI5)< z;B}V8qK(QCU%-iC&D&IdP-+>w4^qfRMJh#aBYgBWT0>i&2XvtgYT(U81@P|yH_Dli zgG#+yg|lmx3j7a2^REtc>MiL)i@|p05i<2JmCgc<&IFuz{LaRGw8lNOpGEb7<-%9# zC+A^KqI}l((d=#>i)Yjp`(woCMbP<5(79WMtG+1#zX&Nf0om%C3hq0QpLuCWdTY#> zou%gG)q-cr3yBDC9kun{XeqRqXls*Ehi^*^zG&mIGv=Ro;ORH<0fTwk=Ux?jc$Nlx!^_myAAUZ3(3u*mQ;xJ~7J?b_sCc^S6Po!r_l9 zCfe!vT^dlaVYh4TjK0Y0fDJE^gGb71abx4bh6WxsbHhyjfcY-m%r}Dq*t2rv;O<=qugfdoza{f2Ic4#VK~%l= zh8xTeBQ7pBKTNd+Wt>FrCXb(E2@ZW5RAa-IRIcB3u)M6KQl&O-n4q?TifEIctFplt z#UzFCaBO3VksSuPqfE$#u(8Tgp~Q)hm-BbA zJG9ZN{Xv&TsEXT`s%ql*q&uZ`Xw9i?+SR@+Qp4oR^42z@G*_1Fw>CR1GN$^*&fc=L z?9>X>wzo9+YoCNk)!mQOc1`s7dRk;^Zp^ZR`Fks-=cZ=Y??Th&sDb4{9kptM8cQP{V~{NkXOuVvOky}%3>)``_diqtfAN9&FC^*6Rw zY>d`TTU}DWy@Kr7qWBW`!|t`Kib^)d=%#I`D4#pGym0 z^HR#|W<<@Nn~;)bO5N67-_X_7P~ZJSc5V)OMi~0qAHk=v-TWQ882Nul?L~)sc|+5w zY{8xH{+2dU*@w%_uW2^mC0-n_6-4@atdjTGtx?P)u>1HYQoGH@5Q7uO z0X)QBt6DU>mp?qcDs`ipr z4@F6C&#&rB=Tt6PhY#VKNU{#GZWjikx=1kk{xBhr#pN{z z%a6o{FLvFI&j8F16%|($@+xx{29k-&6m*2#UsdJ4!VV=XQH8eV+MzUOs?cT!D9ySm zwAKM?$E_D_bY*FcOYL-N)>SFAX%sxAAMhQm3MF4av(SDjjXQ1Fb6|#XI^}^mx<&XW zt*$16*>cAj<>4b{i_~JS;it#$BTPtH20-jZUEwwR{jZN~(jB<*fNs;FXHOhZ4j@}6 zKTcunK7Po&SZyQOBIHG9=3uYjw_vCaf~o_&87GD8aFULSUpo#?@=@XSLTd}|Bv`4! zlJS;}{wAaB9Ug6%_~oDAYCid=FYmqmD7FV9pMKi>p83^RU!|I3KBAg?V9rZ1nzYIr zFtyh1HkyCD=6$$-#;wFc9hYRZyS+_amhn)rINNj3{IPX?W?iK5Ps~ATYf86+ zVie9h!Qy5|_!-gKb@8BVX59Q`<4W zu5Nx)QcP@OVr)zjwHay8ThV5qM7q=Fix>VyRecs6EYB-!IC!%%xx*Bm?uRY367xfO z<<)t-YV5vFW0L0tGo9Xyf$q2tyDEY!nw^BkfVOw!inrc++ikZ}sHv>1sjjMW`@<`* z{DH!z8xI`3Vc)H{?jx??s*={g>q?eAELB5ziV1q%xBK-El<&8kUM+bXzV+U*%GJP( z2j*s!I*BkjcI~MCn$*QslfggKH=b9`iYb|Wz1NLS$9FbvD$FnanDezgJkL}RnVNOO zro9KYN~$Zab6Y!*YAVP~%Ud-oF*z$et$0a#N@s3b zTcFN&VR6}VvZyhyNc4@e3yo~Jn^S1t8~z234IO@;xrd+J-PdOx#t%t6xM4MCZdsW9!vwf6F3_x|ko z(0-po?zt%qEjnfD!mPSAxh31@71hlt&ueOPd+pc%d9lAIZpQXqGZS-G)u3(G)D{)h zm1b16i#kCXH$obi=W%L{obPM+B6B`m?>9mzS1bxVfo$b3tB4UVY`Bwvy)N5(+tGWjQ&erEatON=iBd zl}YUxxm{^#-8mU8la#>TlH$J1^@SN3g%tRzjHIMlvyzfBz`F43jyOn7YZcRY^ATeN zP9JPOs-_h$T6c^0VUN7D##%`i+&#NyRc^_)mfP>S>!$pAd;nckSli^bd`VLLuA38* zX0NQQ+gSL&Nt8=uWb}sCqLUT4CSTi(S_MLRn9j$9UW=d zP>@^tKIh9Z4$}%EQnLz6H}1ng%p549foSW||F1?Oc2uQb{QLm0SEj z8j1LSP|%UvAUAlx!ePRV@{fnj!F2i!kPcWdABd3^N-HjJ>*z|sDnr%dR`UU?6grd< z3JM=?koLCm%x8jpLxZPIQ+kxS^%c#LGuqFNjtScMoj7Cp!X|T@d0qaofMBnHppf8# zs*>!ejED;QKTJ@vB1*n2N~YgS#;CQI9iDliJr|>RAiytX#pt zH%)U5eR5=2cyv@mk}-5j=#-FfrB|L;Q{EC05*gPmO|&uhkSc?91-ZU~QzivWuAb!W z7dSZ}yLfi$g_=C?5}ZC{AQ+c>mKj z%GX*(UZ}LyiIzDhwOpemKrch8;P-%D%>P6_|56wg|6SctYJ%l5`wG863ERrw!AiR! z+GL7Ga1$|7Gy_M%7kv@GQ3$I9s|<2)kgpIv!pP}Cffe`V7yhg%IAH3@-{q8$eO$!? zxr>yIUo~|Jj>0O5zV5yO@O;a94en}(qyP6~&o&ss533!wScDR!sE=8T`B%+Q^@R?*7y0Yw0!omrMJTtYNWB7Q(!~Bi;BlGuGiYkRT z_7glKf`Yd<90=at!sdpJj2ZYt&qEV3!55Xw=OXhr_#R{`cTSEZvXRN)!51@72F3*0 zDa-`-gXzj)t}05LzjEa5CGVKfl<26uG*iCIL62M3)~?A*HWfw$N_kd>V`iIz;zE-m zW+Wvg_YWC6@@6%~Wdz5DJ5+!ykua$k{EN~#TyO@g6|oFKqtb>iY9Xv9@^3iSiyuJo zsZr7SX{iOy2i*^>tyzp(UkIT8z2G}OD5cPf+~jbwpWK6QPA{E~e=`u5d}mF}M1uO{G+rzfU=@aQ zN8W0m_4kiPuQZr&#L(dHZ-|aIygWZYrDkbFU%6q(P~I1@v?e8gett|WFD_`yo*2G7 zJfwETirNq)CT7nqoLf{#EsXJi^-C-)T!`B-&2>6%E7W`s}hM%C+e7S8K z{%5csEpw%I%P$D7gNZJ+j~$g3+(Tav#aJq^KO;^8`K#T_sK*B)e*V8It*k7)rJ}B` z;@rH^n{T#s^_tDs?H
  • #-@wQ>5h~Ehv%NK%X#7sjRK5xTUP3qU_wF(cRZ^skh5= z^Ub64v~qriJg`EsGQn|1cq~)I0Z!-^U%2}yzc0v8f9F5z97@X0%FQsY>?}`C%g#iBVd)3kETX{F$yk{4(gSQFz51FzuY$9dG*mD2YsN5e73wAotH<2N;E zKE^Y*VD^rpXUxa0nja&BzbE;CQWQ>d5j;kNNAmZ$MZn=V1w5AEC>i+dd%&Ruyvf?c zU?8CyeKQL4Q>IUzT*2Ri256o#DflF?L4{qkVqZ&V@b|1r13XT}?^E9|%>*wqMVT`> z6wf#~)*s*{j^LmUe9Rg%>72Vs#<4f=-=8~o{M@WWgylLL@)GKg6KZk#h zeSDHZf}o!u{&yHoaE32Ls5g5jFkXYlR9|37}`pG)^WkTdJk*M9Tt zIY~G47wrB2ZD{N#npI4e-3tANTL!+ZRC{MKxel}srPS>iZStihH0>mK(cxojpzczs|0Bby7e25xI_*;_MhT69d#ii)xoInhzM=9MY)XLs(aYP)yk zvg3_Qc}aG1TuN5i?Ae%uBsLxP9G&S4C67Avu~=H0)MLY1cfioH9*BvA<%kY~RrRd; zb@@rv(<8IOcMY96k)Am_^@ZzKt~8%~?e)B>iuA=r8TCodifdecOvj25V?uoLnzd`p zM@BwQH>J%&sR599CQ5Y{_J@}!)d=Gh*H25ip&Yp`#7X`vMjq_8-Ya+XrlKq@Mn3Ik)eZz=j9?H8E$Q6#6S7i@YRIbQw zZ;g(s&CRKbj_GK}$|4=STQuI&)suMtJ@?T#0xl+aU)<%DSUPkMUKu1f8`{_kb;A|t}1);_Q_C^9l=>D5d-Ad5`f_=WPk>9bswm}&bC9QY|@ zN)Wj&@O$_>j^yb&uH7`Wp7zyLqZ51SX^Yb?Z| zkPGDLpx{lXhiSoS)Ql%g>d{^@mknhr2I^oo)eWpDGjJUbGz=TaTEflzXY-H5g_Q=` zNhu~lBjpN8z9ypQ?>kC#YHDmG)g)1K`oYOcSWAMk5jOHZv_mk)uIj)u!Ll3wxhI*c z248L*zW(~*<@44~ymdmMsjRuB6bBSN*LS$}d)~cu>)oE6ogM>owNr}ohdug9M&)du zG*`NVbO^ME`fUns{$k?QzE3g0ek5x++GO?hVjeq=1BCAWb!v3MCi!&4q^HMB%gESQ-{_MRXq-{kTp!@(-r(@$?pBvE4HyVQJ6TTQTf>FoEEwu| zjrnPOjcrpCPuX;n)2*%@wPh8lvqt(CZ&*Iqx7GPp*ZPv&lH|0#eTy~>&gpU6xiB{; zH9jKIZOWv@Rdd$3)i-!-=*Y-QiVdCV797ym(6QdV2aaUrVihca*y1Kg5-1>nuDj7|&2PM-v99U`5RCIKd@B(P%`un5v`1_%i zLw#q(r8?>MY<6{;y}owUPWPLfGL2aUPOhK6r`OM%$)D`?XlO|5Ti!U7wQ4~^d_nor zK4X4~pR!RahfZ!|MB|$twR-B#pA7P_UNE93{`%LyKJmrLhm?no{pC)i?*`la7V~R7 z$=r|R-PB&Q*|4-y`UTn4k%EqTZjA?h@WHwdJ{bOV)u;FeymHX?O3RY66Z@Co2 zTh^^33N`3=o#=Od&5SKC`d>+?nRHXGIJOa;`1S=W?&+S;{Wu3Za`8`uV%4tR+C?xvK;$P}G#10ObDFS%^kbo=d_E(}tw9B_aU z>8sPh^#4wBF<;MzH(VIJ08ErOo25f~zenA%&f^a9qjEJFnty?^UGHCYKmNVBns#-{ zc?x9tcWOKDaC8!=2tT3GU}KZD1oNU=nOro@*jzU=IzLF6To_|)sz;Ki><9`D4G9ZT zZ^UOgdswPRyTD?M#C{6CDtN~{C^9F_Z7BzX)ePIPnr+p{K)mXGPTlo5Lhqkdpby(D0YVGT5r7&&!^l5d{EpwJG zog*G&W2e=bb(-gDMSuT_fo1(G=HwI<P)kTh#WTUQfYy9l zx{c!`IgK?(N_>X4T$XOLEti3Pk93ls#qTDgZ*ce!{C#=u(G$z0lV_E)ws9}DjvizYx4Qm1vKZE$=SOK(1b^sbZ7UA;#ABqJj+(%(NvI(gKTRW-?X!VX}+j?*oibnM_rfN@4CYPiJ{Si^^<&oXQ|o3-&t5t+COtmM ze0hG*6o11|gHvK!oQZgP0$+{aiSy1_H>ilm=Kc-;Xw1OBl4vdVNgdkT(=f%Y4Mn~ty#^goUM@*g^LBYmJ zgaaoqqORg3wIevZaHj7P(i1mGC-}>9=G9{o)33VY1UA7U?FoCU9pgcw)vyY;j(k1-Um#lbTSu=Rr<>{7IzF*weZ_Nwc(#r}z4p5S z*3qHYP7T?gTLiv!Te+yH_LDl@|$oH!r?ql^n8iUdSJ(0~HD?_1S3Awd{@@AH2&r@FfO)N+33)TyQW zc7zl{gb-Lo>p=sG2IjtydPoS%03qaF3uCk6j|dSuRtU$1S(Q^uz0aP!6Jh?S1e#sCaE|5ot%ky%1iz=E zbar|9_InmmmAW4}r*dBPzw;CRB}5|i1$CQKRX%6VAIEi}z3_@@B|3_|>0-Yb~+&{Th?;k`fOP%8Q z{L^cy&GYIq@;+>9Z8^@h-Gq#o)yR?e3ma`(X-wpLn0b~rifoytayI_^lMpBKg=cZ& z^~h^R7KyDQ=)7UJ&2n7c>=E)obzfdEPH^(j`d|02jnId@=sT@QJi`$v0#zxN*7AZ7 zz6|4n@3f`0;r5;Oc}#B6M#lP@M#!yv~I@dG&|?Uu5u|6Jlf@AjXw{pSPZaAOnFSO@on#w&WMl+QL^ z8FRVn(R4MRtDcQlmI+*~ZMquH)eHWz^Zn-!xf@J842s~8B1$9^riyNadE&Q(_lQRc zSBqx}pA&x}Tr0jNRI(WIck*|XyGMQ~EONj6ny^lO2i^)DlnMnBvuX|j#{prJhu{l@ z?}P|}&niEc2jxk53SJ@Zl3_Agc9%osb#k^`CjTJU$XDeK<1I@E%bk`-Eq}JWYT03p zuzIb3x7OOSY=yRQw&}J-w%^&Fw5_xK%^q#P$Nsqeul9EwNsi|npE!;!jAxTQ6$;yAWGQR7l5=ULhkw zCWp)oxg+G^kQYNcg?Zs?VYNFnX`e&QoZT`|`OWW((u5J5T+ih)kxBawj zUEA;5iFTpwrbl;*?iO7TJu-T8OlC~)nE5fkiCGo1I_CM9nwY=E?2P%Meb@Fg+kf2t z>)4psjM)6x;js_JCB?0bdnE4JxL4xd@Wgv&dggn6<5}fd?Rnl)6CWL)8ox0iDdC}n z?-GY3j!P^}oSnEY@nGWd#B)j3qSgU!-0NSxExm84~NFOBE8@O!bvhno)VDXCb9#$9eKN`FJamlE&%^$~O z8JqlZi^w)s_~TX)W6bc!ZDOnu?vL9=j6CO$JH&82qFKI^k?J9T+|?`|AbK-anLL5b z;z2S2uV|(R6BA;FsOFd><}o+u!ZA-w6;)y;Db>U?pqXM8=SotibN?DKkP%@l`DSv@ z!&RlIfY&3gB{q%N0#OQYIVmQ`EY4H8u7JN>l#xE4cp333;?!h3BdzWwaC~!Fsk$P%nL-`CbZym?T?)5q zld=O-{~bV9=^zj43UwFhB9~U>B6G(U^?5FDe5nbtp`m=THb&k?STfn5y~vYuRRyR;6vc!_RDBI;AU%nU8E4 zPqf+k~hjSd6V2}w4t5bjr|s3v0L1{lBdSA(es*TOS5)f8-G9Tw9(FxX6-CXekS=Z$?KE1ByUfy)$Oc1 z&+12})6#!Jzv5rRY#(bs^IyZi8eYGccZONt7n`AeU*wwUU$p2 zc<_^hUmQHtm`8|%Q#ghnTy}8C=O3^(`ZL5z?eqISzw`4&pO61MPl!)rKaEuUpD=s= zW_j7;BAJRBpp- zykY#^P;++u&-goOwJK`7Yy69`<_iCet=!pV>^Al_ziI3u&jFJf(~S>R%-CljnO2u5I5qC0ce?UCQ%zd?3 zBc2y8GH3s**dX2#@31=DCThh_@sZdsJ`)GTmvVxvk`v|AvbQXfi{T82oCmXC-1L%!z=KLX|J?p=A zA{tNDQFIcW>A8JGp~z>17$geh!;BR-ib>*naRVNCDAu+JudqPeCKie%^y53kePShR zsa4`>@wj+GJSpxHHDa^aC|(tBicRtn@rKwVc8T5M1M#_dTYSM<@>WLY`NAa@vljb} z2o)>XWw@PH&2L4dxLd@E`$dfSy@(Tk5N*ZpSg}1MlEfn-Q9O+Q_#?jPPxz2$S*bn7 zy5$*s-V6BRml)~)f*<}fKKW((?JKP3ym;7kqOVwwuYH|y;x#c?Y!M^G-|)ZxzytrC zG4OvFm3QE)w~GnvDU^tP;yUp@9`8djS?py5_&4Lg$9TDec)vN~E4<~`Vy-yM%J3G( z;djME@h|zKJR^US4f4FKm;2h^Zo~a`3WP*Avsx= z;OTC_hg>hK6Po{ zCb^ll);d`uH^^t@3-TrTkbFWuF8?mK%UZch{zLAN@5%S&HuYrzcvb+-D~GNCn4$-ie&s{ zG|=~xWtXrUORhp?B7t^anWiEG_be}Qp5QxaRHCCo5ikEo*jvyutUE3vrB8XU2yP^! z%y;J3ko?5=q4BYA-{mAv`OeF?eQ*7Yz7XwXGqS7&(`CMk*3-TV>{ec|tb_jIyI}p= zcaiu-tDWn&;3?z$jPIiHH)sae5PMA?c6VZoUf}TukthfHzL)2GKN^uD0&HzYBKImp zs{Bzz8MDxFg~|78d1Vcr^^kDNOc5k|izK-~w54x`%c-o%lGrDzrp{8Z{55>VBHYLn zZsT*2$9SA)oD;o`*F|?@r|2)EM24IUO@MA>7it7$E~MSj^gC6@Eh6F9@Q9xn*grB! zE}^W&j1)gHVtmR7^R-FFW1QtK#oD=fn*hQ5_uaPV)%7-FDcVmJ`MIYhxwQ<^S{sDU_7dGnz`r{`e(bA3e zyW-gvJMq-Y#;Q;_7-9*Q}`JE9`?SdS0X(LgXmY{JEly_QRt@ zE7{gJ!19X7LjS>*!}x*SzHjAO&XwSBk7#R25FM>Qh)(Ds9RCzr}3TNKduA z%o!fb6ny+rWbP>1;>%+d883iqfyhw=?p?vVD|LojZWN;|cY(o;&}G-M8<-9N+cerZ zfcRzCSe6G;^Ie`TG*Pxctufu>zo*WzP_&;^9*>_?+zqMoug)(YC;x5{iS5Q|+Q9h+ zt`&8qtdH>r<)lS(wu)#OOqx_R$&JRR!Wb}c_*l7OR%vwwer~LA_McSbk(q`4$9iO7 z;h3==Q8%prB#+oO;+o+e@ywWOMtH=MvD_6C$Br51Va6r&(-#ax?HeYv%M)ae`-TvqYT^59#nz z9e$|8-8!t*;WizL{Gf(`nTBSd5 zYk5^AvwS5@k`Ci_7@@;39fs@BLuiQh+Lop69crbd@&)S9l(m(P2k1~)zQk@+sCE-2 zGkv-vtCF^?OVo7~p?b1sW9`7RK<=4wbuWQy+zPQ|TY|O9a?tV+$9T(Njs#0^<6)fR z*kZh5JY(F=ajP-K7;EGkQ{*{$jAJb`>=~@-3q%8J0G`0;5}lmYDoH&<{E-%@Yeo0# zb1Si&HP9U9_9d(WMzJ;;z*-}Z9-PKH#Uswpu3Gi%g;m{Y!so?zglok2gsa6V!bcf< z4Ay@~2$zYI$n^j@PU!QC;#+-wUL4owHR2n6UM-I4^P}RZJ};v!l6;LVHmJKbk{ps> z%CF>M`8CgPjw0bV^0@p~o>0$kq-uvnUL%>|>gPR@70VY$+E|8^DU5YZSHkX7Qb=jV z&nQhOv=t8F{=dr%EQ-*;hxydJ4AxeCP zDpmPN6%?*2V$rJ=3U#K=l-8_q68u-0dDT`T{fq^}~c(zUwRXj95x z7)?($zrc@}E$>TuIM$+CX(cq|LHdDtPuYVhRm>~4s2gnE+$3A0s;%*tv zzGJ%VM%*RCWP6z=bBQ};sElFPv@3Ck3}F|wlguG*m#t+x*->T_w@GGJvV+Xxxvhns z8!X$<&PHwAh>ueJaxCFfoZrR2{Upwd3(RsGgio2DG|1D65<{phjFv>u$|#xeD||~3 zHL1G#aY(H3S}>T$VbQv^(ziE&;tmeG_9+gj`e6urY$KSbD8Ce=wbfp0zR|-|pzjGi zKO)xhA8&B*#)0})id?i7E8|2r>0$TiJUUMh-PwstVx-t7lbQX`5FfHPmx``B;yZhy z%g*RIoxQ8x;v1PE-jrQLA7=hvqsswerrO(MCvKLwNp{5=D%h8LhW)L9q5;S&v6VsM z7`y3`y{~#acwk~J46l@3*|8O$riC|w?y2^KIsVd;cjEE?^;Hzv0@y1o654s%hBwP zU65ng*_rk zgq_SOaw@y)r9-^bWvdxG87r`UsihJD;;8AaE~=UCl@F#BuI*!41gWDRqY zXW3u;E$ieL@SmZgpL|iigfCr>-51~~0@+b5!9V1)!}~var*soLrhmqhzRfDo#ti+> z%z<3&h2F*fr`lb;gT36B*^#UhxAR=|@A9wg1g?`_v4Yk1TkKV=XD4tYdxC0b@HP3m zd_%q|x3J&$wtPo!6?e+Nu{Zb+_E3YFWt?Ik)WfcAJY(3y?5#eC=PzZ4zQ5dt2YZ6u z!tHqK)#7=%gWXoA*v>BEKiOA&kG;g5>@L2~j^YRO&%JuD^F#5v{D^+~AND&x(fghU z^m`&-H1qUFt~3W>*ZPe7o?YsCd6rq&kL;kHXZQLd`=~zUt_{Pm7*@k(*bRr_G+c(8 zJ>gH;nO?;{@_zP_KVdcfA67XB#6f%iDOKgSlso2E%*@Ox9N_3byL4(*Wrd@E<@Cym z@|)d-WtG*XQ>T_!RNDtkE#(fUs>;%8dy&3!7d72?6#26jnOV&uv$NfUnpmuZr<7J1 zLxwtr_*sWEXU*wmA6`0jes#HhxGvi)Ag91S(o7xMEVXN{rKnD1 z>HKQPHD;;yF(&_*X8gI`?APj4U1)Yzo;qh0^(eBBy~LHB)!#l&!x1#DMZx3z%^hbp z*EX(dX2o>-1YKajgsC&Drp})|ZC3e0*Mzc}u7V;*slT>TzY3;a;w;mRwU_IYyS(X!quigTyg8uRIqvCAEY=xd@0yvR zmM<(rjhQz&X8JSDY?diIr@J5b?)F(GjqKF_>G z-=8;gp}Iehu3MoZ2A-thf2@PENDFIa=7-F)7@WAcYitE z{pED`m($%}PWK*0;TW^1{+YU}?nUOU?nS!j?98lgk#owcW>%Id7m9Bv(;bk#qUb9p zXQ<5zU1U+tK>O^O6{_#dE1z0fQKl=%%F1z-&#R{ER+l%X_*+*nP;+D!V?KX+{~~|>9?tUFbE+53E3eiGS=nZR*_rwb_PLJIs;bHb^XHiNdvtf} z>ndg0{-ivYPAaQhP~lJMVW!L~pVr9J%}kk6Sv|vy&7V_da_1Hfv@1t2tK3~Vr@Ugy z{8_X7jma%E8)U*M>&npryC-^|>CZsv7U9i|=R z`b{afz%-d$KVG?o{__0b=N6balx_7s=)X)31ja<3r3JQrrL59UuZO+6=5>lGdo{+!JIuIiby$}qI1++EEaS^gZR z!ZLHR%>g1OJ1@{IJx|-L|DwCT2ySYVdD+yk=Bx$!qII(-Hou$Q{Gzb=MYrY`{q;p~ zQ`?*0>)Pxht9g0Z&5Ou3n{2i}+Z0By2ubsJ#kh$@#U9VF*F^B>VP5;SlO}q*MteIH zmrV1l95>NxB$t{mcu!575*;7!6~$grm^ffPE4RXuf^@G;^Lk3ArF)IE#Q4Pcbgw1N zQ?|hp9w7<}yNWd99-su4fuYG2Zy{n0S@C zJ~%=a#CV7%7OW4GVcbjficu5Gi`Pd=#hLE4rg<%$y%B{IRej#b!a_eow5QDD-8#x^ zO_{X5gA6Jxnp)(w7fp=!T9S*$TsINs=#>*a-ch4S$}f)gc=J>&uejJ#V{+4?4kY=n zJl;%oKT~mT9W~Jd8Y@dZUiYYpC8T)NJ-3Q=Q?YI((IvcV9t~RFz{06sF=nDy3{%YU zTt^S{#;RECu+rCBi>Zp^HJg}HTwGSl>+_w9i~SN5d&-a}v7k8JYfJMKdA!!-Qe<)z zj+*FoBo=s`i3MnYEG6k)yM`MiJY_YGDFq&NQ;8dGHeZEaYe~^mudP!&Hw!&0Ju9iJ zCexM-LZc^^jEXKDQ#>)TIKJ59&A)ac_o5Xp{-&gR9cf-yVdwQM%{A&yE)xq9F_*-G zQm-*(npaMxAznwPbgwJTqgoq`SXMCw7TTL%Qmj}?2I$th)7HC!MPX4vr}!qr2}o;c zNP%W4vNKJf?a3vcqLqoIN~s!b5v>&B^+eOi##W-*#L@v~6+u_Y?oA>WnVUpwo+((_ ze`3LgAbtu`go>gQCB6qa~amUz4&z?SX}O&d0LVvV(IKyi{cs626Dx;HFs*yxGFt~C>* z<4F(G>EUTLBD8Sa#G261La!_>@P>3&T@KSKsA;8w)&yP|i7qV3qxca93IeWzm1vl1 zTX%|2BwJ$~drKZ_$E4NR)wz9IjYFMd(`uaR9G6z(Qs>TTpkdZ&q9?;EZ&1A@-J90zW@OXNx#rFEW;ausZdRE$J!!(*s`FLlM5tFyQI(v{<%>r? z5A8}oK6Oq+K6Oq)K6Oq;K6Oq(K6Oq-K6UPZeCpg0`P8`+@~Lx1ny0t!NL|uACEhkA z9-N*mQ8rP^*_)wkHZ#rJrL(sS{V|KKFbIpiVuwsD%}Z2{{l9Wxj_Ka)Mitit+l!RN zd9ymz*knY}M4Y11Voo!7uEx_f&6BHJo=a(FIYmEr6L_C1wpOK!$c;k%8_+i~ucoVv zP_lLd4+OYko)S7sXx`xF^0V(i;Vv6?dAf*=hnsfj6MAbNR}QM31NUO3LijlFgH0mglu6 z7Bq5uyd}z~KdNZJ_)*EIbg*K_eYft8C2)CN%E~XNHZh0k%er@6T)4lx~Yt!ia)m5S< zIG2musN#J5M}|Uipf{>;;;3lGR8Q~XjG9atPQUHn;_jH}Q7!Hkw7A=tw|RM&=O|3` z_Uzo8p)pfqg#*&Oy*jVN{FIHYq^Do4Z74Lun@JOkw8+YgQ%vMbnV=PzqAPPwq^D)j z^GtyTrq#F^Yn1hC%m2SK=|NXAu>Th;R(LBv);lpTI=-2`#25S9IS2>bvvVUVgSqO} zIbP{Z;o_I334$R&5Mg$EW+(LUunccEdil_+qz|Jw86M{C4$ts3Zx2o*6pBT_?HR}* z+=$l5G-c4<5x{&++Ik@d5*bBAs>tZH^-`ydA)-^RRXl^ZHCFMc$T-ELBI6a0icCn` zfG;d0Hjx-(JF()l4eaf!*d$_R+I5Ogs#iwJFRh>n!m8d#Zq*T?Z zB2!eIDl%2^3?@>hcvPfZ@u2|5u zY~3yutI+LIu}U!R-K4-d`pTQnjk#vDKhY`$x?=Mda5ayymZ;*XHlvDXzUEOk6wfVW z?$cE20)3@(EHtAk$09ST*l(qrK4y`N&8T8nVn!9iZSeMODsQR2(&a5Pql$gG8CC4R zA!lE+yxYyFVz|SMDuxyC_G>EdPJN}zyUUC!_TQRO#eO$A`ptILm?zJS1TG%+Cr(;X%Eu#)RtI_ZNh+y;GAD&q7kGD|F z=bnbJ++1E&A(Cd7R^2ROX5T#fW}cC%r}gR`A9aR9pVhNOd&q&-gRO4fLLS4j1v}3; zBz36Ahp|#U$=|}Wjy62kc#bDFPw_P20giilsv>w*{OyUm$oG5W zkAxcx%u!VE?!Od|>2RHKn)o`Sj__k0R_T=A8V5+3Y5Wi2F3nkC$s_)Ieh;9^`HHZD zx9U_mDqLq#E&W)Bzt!PP<6Ba8QCb@zTJam`R%4*y{_{Z2`F`rjxhuq52Ceu7MXLm; zk)L;2T7hS91Lv#pcU4$6J&nHnceaffDs+2tNHi7*_K{%g*7&~J@HnZ<`9-_rIp74P zzu;NWG-$9sH~+1!(wTlcz!*R|JO$@DsnXFA-XA%}yCvW1Cqm!xhRPY9JKf7uxemOo zup4bH;jRBX>NR+}ZPqT05LKEHVhN-SuP)h3ygA2fn&UOiQKvcTT5`zuRH}SWbEqf% z{ARf&hp|hSu}gED)Ep;?Tm0|Uw8I{GL&7pi-LXtkT!yw?!=iJn)j8JwJcm`ktz?bR zIp*m)=II(JykIbYK$>)q(n z{et@$!pGbX5&m9>ckA#mH+Z|3==d$}ImB<$VVV0z_eA#?9S+ywKpp1mu%`~Y>M%ox zCVvMvec2u3jwEcY!x%R`+HF;FSA**u;c3@#*Vo7@Twl8ms<`W89q!ZNE*-wB!@uiL z^SidVHj%^YLRW-n%k`9-cTQb@)S(%F%7w;U_qx!RYq{%I!fG8>=y17f1}Rhgadr24 z*Lc?`*H9e}&|zO4=IJn7hiN*56aEw(_qf^-4`;VVxSTG7uWej#))Ss`9wYophX-_c z%DJDEJF`jq@KYWCP=~u!=rs9F&RU(m&G9y`KfUH)*5p|0c!BU49X_VR zwGOP*@p~P=Tj|$vyJHEV8NbCb$8nRROoul%3n%LM7#$AR;Xoal{P~Wal+e|YLD)fu z2|A3?VWguq>28PB-e5nc!_zuEuEVcY=)ZfgS^VQ>@qPAPyuS6W{qH*5Lb%E9CH#vH z&G;rec58pij-RkUV8^rA@6zFN9X?>kChgV!xVl^6SYn@HpQ6L-bvRy!qjWe_hXZto zM}ohvj_294iKp392t9Ue)gErgR_#tZwrabe!+I6kowie?9J75zctD5yb$HCSN2g=A zw(ZJ3ZCh*WpSXuF&C99WJz0QA?U_ z7Ch5*Sfay8IvlIRk+#9yEzn_a9d=V8Ui3RX7x_-jOJplOJNeE`m&{#cuue}?^B$R| z<3lyi=b8r}MG5CL=Tv?7H=6S|I{vf{XDc3lVWwt6Cp7;F&7ZC3Mqe?fki4s;%Gs{d zr|6Mqw@%-!=N-FsjVE-tTXXK#rM;+mzSOlyefLFu_e)()f{M!o9naJ8JRMKd@iZOZ zr{nu{JX_7%WVV{a$qHR&xDKS zmv~z9?ALSQhgAviFu#<&b!oj7o-$acSk*k0xYn#HpSSK*tMI5Q)ST^gT|O;Ed!4Jj zMxeb;>7~PDjX;ntzr8Afw*ZwC*}8--ItvV&q2jwxD^i}JVsZ|!)T>aG|z*UmE`@8x+`buG9T3O2X)DBY5r$*d*gh;P*K4m#dJ$1`<2Q^gHE7d0Yu`ew^>@Nd?#T-5DfrDfTyrP!=fzEHJTBDE}= zbvc`L-UT}E4&9ywx+Q8+m-e8J*Qi`ZfUc!ROZ29`Tchu` z*YWl`-bEu|)3SHbHq%A(chLxR(Q*~*uukL9Md$6J^G?+1PwAA2I^}g;!rR)~U)OiP z)FERxXuqy`hUoYZ9p9?sTXlTAMs>VyPnvGec-@Bax`gq%Rm)Y}n4w$3{E9Nilh@$A zJ@uU?!TaJ7oYi-l!g=qsn@D6e^;_NwRo`j4gZJy6Wi70})AWS?PSYCw>!5?=`xsJQ zP@Nf-c}vx#zjJ0}7Mmc(X8qnZcEd`|U}Y`DK}h9!0Al=Qm3{TRN`uS&d2i+X5WH$N zsotS}NM0Zutiu`|-mhg^?&ndQ3w8SMb+|!?6*_!OhwF6sln$TQ;Y=OwB4qcVY3=(p zYY6ofs&GF0X`{+fI%uWe-wtQ(D)}WzTf!I)3C^l#C+Kx>3hxH16?O+g_3bao+u)gm>Ps4u zw|AAl@5y_({L+9!iUGW7EBOWaM8fMhB=2NSAynUap_lMBtz>6oG2t=}$vdyN6RzNp z=;Lm}2YCxqqOU&^KE|Q+_Y~nX*n|3Rm(u799FkwOzfAZFx|U)+hvdD@*9rf|yQPx% zM%7-&4)HI-_c;b1JhvzVl77E7a}#)OUh%l{{an@_k3){#GIBtLOZqkNK_dJ>LP2 zqrQ)PTYRr54$=<#zVP8geS5%B;r*FPRsYnLKGTkt|9t<{>598qOVEYV5G~ht_v=ul z(C#b$^L?m!>fmXrmH1)b9>PYO3*i&{qt2&W}WYA-_#bFY(+}ob9=xy4KIIL(x2?YBF^|2=1^o7F5qo5}iKX=P z<#=?{Ki$Lo+P}m9uHtRw`}p<2AN039%r9d+t-tW`XZ?+j8r}t0-^fsJe!sz&GPdY< zzqj!n3iZv8M(?J+{lS+%c%$Cjult7mx)XZGPVLv3zuZxN$v`q2q~r@E4C1h`OBPIO z7>7kmYtiyrkhnc59uA9$=dgi5GF~&4!wC|d3DY^8e9D#pD z9S$kBa#+PSj#i+&olxQIVjS5+sE`f@=`TUxGGqT8jGM|0XLRm=2?-d9a^GkAt z_~p0n>CC7NiOe!Mj!&fR`AomW6p;TWWGG_=QWtPl>QXocV6z7Z6`H{s&0x?xLJ3DXq&UXmlRTYr}4g-WKW%iELHZ>hDd*ORZjNH8kjW&?7+ug8DW) zVuE6VjKEWYA9I}I*w+;9BVHTWH83*J+IR#M1mp#z1V*~I21b&v*%5fkbs{Jx@MG6R zS6>c~E>D&Du`ANK+j+ZliIYzW!chxRqO&X@k9(fLNEPF34gA=d!9G+s`&#=__Cp@A zwYEND4YxdHS#GJYOtg%#^tQzEU8QMYu4WxAeW3aMqUL_kgD+_A3om`q=;uDM`4^6w z`$qkxqpNzzyXobZ`^U!bA2s^OOW#5IxsQAcJ2bzH^m9L{zmcRpWu1Pu@r{1EVR}pR z`G)eBSNfe>FV)NG;{*B9(>Pfoe@{#hL9F(@B_4;KfS!b&hSosObMHlHE%CoXHP8m~Y=mBg zHbI-AH=sA6Ezn!=yu*1b=WV{n#CE9GS1b0@!o{SkcGnBO^-J6L(00}CL$v!i?LLiv zKJVMl-Q(P;=gvk_>zV!aVl20jb3eZTbR+F9?j2XT=xNPURf?*iIp2PN>Gg6v$g~&I zcTyOT4YETH$PEQRflx4I#6x+^wEA(*hx$VWP$4uB8Uzi7hC$<@Vp=%~x*oa#x)GX6 zo6CHk(f0F$5;@3lqiLV8xztY0k|D_guP0b%GT~YHPYCc5Ghp6>9 zwH~6@L$cDh-Cy$|YCc4dUG7_f>?@Fc1+uR|_7%v!0@+s}`wC=Vf$S@geFd_wK=u{L zz5>}-Ao~hrUx7{!AoptQ;xzjI7@Z!V6-Q~s-L&FvT5-1=?R&y6|J}6YZd$Pd`Ri## zJ?pCf1q~qk*VK4`8V^w80l(Y_sOAz{zt;W8sYbT*%*q?Ekbb^B)neqLyjjwWgFbvSY!S#pn`5LP-|nK z-G^?zrOhW=w0Sfw8c*$)+Wnfp-MeVXF5N?Z!b*O^N`Ashe!@zA!b*M;tDyU!4bVpD zRcI5m8F~YH6WRj316@SZJ~S>Nvv<^iK^+*>VI9Z)IMjhd9XKeD^b=T^Jw)m2FfBMt z3l7tQ!?fTqEjUaI4%33ewBRr;I7|x;(}Kga;4m#XObZUvg2S}nFj#y?A3aY?6dphM zJ+t;zwCFgk_?}kOQ~NGzSF<=Yta4yms?FzHpl0^wMosT(YAbIHP(JfXe9S*tFV#{S zeGyMtLKuc5dy!->lI%s2y-2bbN%kViUL@H|zP(7Y7fJRa$zCMcizIuIWG|BJMUuUg zxt|v9WiGvpndpPm_b75b54{L&K+bKPw?nniPW$h9Aj{~3tkgSq=1UrozNFlcodKKCPZHC@}-h{S5??7sI{7Y&+ zOw0TE9-6m3!z2O66iK)Df9sJAQC@H>sC|q!731G3XoUIP@)a z0y+tug1&=JLua7xp&ztV2a)O^QXNF9gGhCdeW+z1znog{p!PeVd!Uujz0fM?KIlP8 z*vR=+XcM#`MpPAYwe+iIh-llc$BOE)qI#^T9xJNHit4eV zdaS4(X?LNIUFc&M`q+g&cA<}5=wlc9*hO8tX#Fnqu?v0dLLa-($1e1-3w`XO<-3~c zd{<1nyW{1^=Pghjn$*E zdNiiyOvmXZN+SyA{m66#Z5%*|@;)ibB77u3d_uAVtvJ#)Hx z=5+PU>FSx&)ibB7*K@j^%>Q;lyP*%DJ8>k%=4Yh|nP(1gOktG%C2z7!wL+MZ!_j90r z@Z>}Np#rE78VC)7217&O843*}KAiI?U!AA~&w2dyjB02Bv=CYZErD)>mO{&Y6R@iZ z*wqB=Y65mO0lS)jT}{BQCZLCX=wTmv*oPkWp@)6wVIO+fhaUE!hkfW_0=72++na#x zO~CdhV0#m=y$RUf1a!1dyiJ?lA-)?K`M_2et2@_8ru|gW7jc`wnW|f!_9@ zw>{`>4>kNi>3rFP8UE+sbb`10tk}nCD4n3_yPwUXrI`p&- zJ*`7eJ3(qLNX-SQxga$cq~?OuT#%XzQghMMI?$Snj@F^0)#zw7I$Dd4)}o`e=x8lE zS__&_f#y>n@dTJX#YprJBhf=zcl~@1(3c-zM0tP_L0~8Bvz}*?MQtRsZS#HNu)lB)F+YpBvPNmKDHzI zNhCjsq@63I`B9_-@xf%?Il5A}x%ph9RMGzc0D4S{zkG>rIg&f|Tb zg3=C9+5t*CKxqdk?Et0qptK&84ujGQ*w#*LYbUm~6WiK}ZSBOic4AvQv8|mTcn$>5 zf#5k1JO_g3K=2$0o&&*ijHKtVvvVML4g}9(XFIX8o!Hq<>})4?wi7$siJk4l&US+E zIS@XHt?dNmbD+$QGQDjVv>W;W+5>&Wnr}bE^94{ogB|VU`IhvpqSvjW*R7)0t)kbh zqSvjW*R7)0tlzst~=2wN)kemixAX7~d^{?txZ9 z_d=_n`=AGr=uyUp=b;y&4Ww;^UWGP6o1r(LH=!+%i3Z=(#@@C=wb=4b_850TyP*%D zJyWn&dFzn34(s><>-Yid_yOzq z0qghy>-Yhy_yMc<0ju}{4C=t34h-tRpbiY`z@QEc>cF55tM~znsKX+DK>m-hh*Ma^ zDJ3e7C zduK&7)E@Fc@!ZeioCEbEo)7hh3ZO!0AT$UX3=M&2C^U@taL(g>cZ1qd`qokU)=~P_ zQTo!NUpmqV&E?^-Sv5<>c$VJe(06G^y=K|OtuOBUG^OIi!3J z4^xMSsl&t6;bH3VFm-sCI;4IMsrj-FQ~(u11EE3CU}zXLijs`Vx{pz%1i5vy9WsGEOtgIL$2MG_#D;%rZ_h%Qy`ZwIERo615;v3lg;;Q412a zAffuoPyfZk`~*TjUFKnGL8}(DYC)?Ov}!@C7PM+Xt5$oMcQ`BWa%Io*G-y2yT5GYX z??J1UuS7{!X$EA2?2rR;Ljh1A6ofYj#_NZ1j)K}i?VxC=J>-Gnxu3;32kJ*WAL7vpR4^ z65q+ZZWpv0`T*MF`vx=*&?j$Vjq{-ID=c<5GldIaeO{Juz7d=cgY#i!TB&a z9|q^c;LM%~BX$@R1+{_NLD5iq$O9!qsZd9#6Vw?>hq9m?D32%cm%R6RFg_2y=jpRw zVYPd(+C8*xH&%NFY|nu08L&MAwr9Zh4A`Cl+cRK$7HrRg?OCur3$|y$_AJ<*1>3V= zt32N^ussI0$H4X&*d7DhV_;hcwsl~83~Y~q?J=-D3$|y$_AJ<*1>3V=dlqcZg6&zb zJqEUFm3bCyk1-ltU^GyD{!?&13eHEt`6xIa1?Qvm`LkH@S&%);9PE4MVBcfS=a`LL z+M&FTxZ0gu49`%Ie;DK+2Kk3U{$Y@R7~~%Y`G-ONVXXTo7JL-TJ&NTX#d42gxks_w zqgd`yEcYmudlZX33VKh1-jksBB3bjK-Uqq&LGFE!dmqHU0x7k(H`gdhC;)k@p#~3aGV5P58VLW2u%h1 zGL8Ss;9rN;9Q!YQ?ihXUSc^Vq_NghkkI>nE=u7wx`;H;GdWP~XR`4xW@U7Z| zz!JX2624_-l}XDUgbuJ~RL^njq&ca-zBY)>( zMt-@lTWwamZMm>Htv2V5 zasV-TP3KNdrx00PI^}lGb#`=i^u)Gn6BQXA>ag3aRAdPWwnuf&35gF$jt_|s>)O3r zH~!~#O-W3!I}*F+WUI@Z?8u04yTf6(M?@v0tt@jdv`dkPOIDP2ubSb z3=Xk7!h?d^1$F8fn-Cfj6%ZB^6BgF4opIt~XpFI`p`v^H;7Dh9myoFN!F})I%PB@; z`_SZe!9iWpR!1wwu&`);frp+1e;Mf_dxSl<3l7oemUn zBWxBW_heq6Hw=$4l8==Hj+&UCs(5UTJi=yc2 zC9P@QEDc+&>2cw`zsn0v&u)FB%5B7Fw=wRzc5tD3$dNXSvcP~w3!DV{77H&$VhR?Uv0NBdKIX`K zKaN%od#mNb73d6fIhWI~9d@f@I!{0XU9AGA3yX#ADJkPd2&dCMxplDNc6&wy$$)^y z3wNXami)>Z0)pJmfT~|tkq8QER!{!_Mn%yQWCnT|5KfeDP z(pwsBV%@RtkDZj=+wGPG-L6S&pZPzeT>Q6`NogO9Y@6IYwAO9(%Q3oicmH!s!{>dn z>$?{=Jk~z({ZHL#Nq>DHy_ZGxsl})nAHrW;M%U52F`FSq=a1yAXSfAJc997Y@d3_u zo%t{xLWC&6a^tfjwL6V9aH{r1i@JlqO$_s&L&9ZZy3sjN%8sKK6igj8w6fnd_fHw# zH>Y2}oW8?{PMAEZue)QsF)*QnyVJ0oo@3qCobf#d%aN9m>7~jkiUdsH!Sw$*r#E4EEQI(EX53yM`$^O!{Hf$hZLnwyh;im$Q3Bd z6B`pA+A26G(BMC@xBa(on?3v8 zd*ahlvXW!n0sTvR^_-HJm^xs|*pk~?x!ZRcTo_#Hoqx+KB{sY5-Coz_=4I!s8e94N zb@Qh0ce(IiX3MpY3-V=h?on~0>g|cCV5PKf8hUbCdZH{?wWoUio_j+>C*3)8=$(@$#<@Er z7)1#k-Q!+by!eH2L1Ug>u;7`|7ppy~&Ds{pPR=%SKhw#ja3vw3WdJ|?$iHuiqhm^7U_{%hv^|J&;D2JPDNk$UX};-WgV z?Z8Xx5%FOmVIhIeXg@}Yxj9$I3CDm_NKP9)`U+^h^Nzwx#stZj%OPucDyZR0PbyZW zHEK~7gPIsQkMc%f3$NeEW1KMTJVAm9JcKbCD@Ybo^GmP+x=j_6GK08Y@v(k?7!e|RTw`xUBC za|hm7yu8ntJPIX~=O}NnUYSRY=O$0xRe97nZ1No93(UHlOY;JMdsII(dA{VG)nBUX zE8YRUGLM=&nB{!Sce{Va!`uN)Ht~EX$LhHQ{=%F)sQDDy?t!-B#n}AOSJgIy0P;4D z1x@;Ok>AaLJo85UEsQL(Pr-Pev(V_QMD0T~IB zA+x2NzCOzI_IljPjgKHbA|lw3AKm$n zn{Ik%d1_7v<@ZBxyP?O8@$t!tah~Gt9fyUdC0S&FH7PB8!tCG@?}F-AN|pPcJgZw~ z*2=NtewUTiEhfT;h=}S7Z{OPQr!74!Y91S}?e!Rc=i+j`CO15+1iEPQ<5X%L)FYbBEFSUwK?J|#Wn&I-yAMIzcJSYxvaj_ zY$pP2(vqw)-$+W6Lls*2+8S6KaBkRy1vFX#=ejx*s*BsrvmDT{g%}2`tXNCZi#M&W z%b)0GRTLIr$WS#Hgfb5eZ8hDc1hZHtI~l#=MzjtNM6RI8;UPv)kS7Sa`t|M8o3Hct z>XDb*HLFWTI@7n5TJO?-QZXvu}%kYO)6ZAooQKDmhin-L&lN>9zY^YL?e=tRf zD0CJP@6ZDfzEzLXjruZmVtQKH$2>Q~U*oQ9OZbWm^&7+#-g;L{#7x;o&oOi>w67&y z``QUDZO$BRWS?d{bv&hLVVA7s_>GAiVNrh6Ea#B#1CytjA2sVz_HFWf$*;vOD+d-( zX;#-)>~dY1NBL2+oNw7N`WcTePND1PvCHq;s1;bF7v;SR{4S#VStq_^a^d|3YERb0R^SHBUx*YD!2{NNA)oF*Uef!6hVj>k14x_)dpI;#286 z>=DQo?jVP5B1Ojxxi7qXx3GP3YG|kMhW(u)A{)M@?=-W>b9KqRSPHdn8}g5a@sWJi zBfgy+)9?>aRF>B8Fn=9NX)Q}z<4N&TOE2k1I0uBIMP9!88!Y^N5$kd$ymltM&AJg| ziG8wzxunOgJYckl4$W0EI@$2}xr|yCJ#F!KrGCg0ml{!gYqO~eQe52PNvtUQT=yuP zSdO;T9NpH#yd(EBD^xt%>%+s${)o&rdmVBj19F;qPqLHSVl+TbW_HFPJ-VSbBq_?06>Qvo@pOl5HZ6>dCTjqloZd~95Nd|d4K;L>&T=dUX@!`9uhm_LqH^G9O88#{I-G5?%zh}LvJ zzosiS`px!9O<9`p)Jf-6c+~i7mUD<--Y6{^&BkAiNwadklJ={Vqt;AjIbX}ftCXY0 zUz6us*|B9g>{T`5-C}nU{ zdPz-@A|*RDJFb0bNN^z5)>gK4nz~74!@qHJCo+n4rm3Z5%&T$YAJwEWMk~2_*s|>G z)_Da((bce}Dq2Xi;a#~nwxo|%R-IN}cv!=VxXHn(iMy*}G!JLeSoc@EG^rw1{iN$egy$lO&i`E!yF$11E^KZ|Vc59Y&xsBn!utYc4 zZqwNe_1mt(ZL+x&rdH{KMf!+VGB8k-2AjBLc99}Cr%S)getNZ(5Z6AsUE4O1;b9@I zTLr8Au?(5fx`mCiKX$ckO|^)RPY51>oWi z?aJ~!lamkZxd{?y??_=Hk!Ti%Tc!)E9vK@uTHS!0VW;{JHW~+EqHr%pY~UT^s34ta zj>01|=+%gD>B;lfob513h_!XVwSZyjV38CHsRTY1ccv3$mKdQ-t~N{D2x<`wt4%0x zoN2V*STR&8_&&Gyp_!S7_Rc|Z@5%Hw6N!o5Z0o)8eQ4;`*_qQrLwNPyWP>+PG}i~Y zgj`oW4XzBp30r61>~R4+3b24q*^})J z$zK**l8$xIYE$ivxVbq!9`Wm^zj4!x-+0S24?Ot6TNW=JoqpZSJn;29Hr`S@APdn0 zwc3GjI5u?VzZ}?|_~X~!_udmH-h1CIPo8qt>S1F#`R;-K@+tCFA>?C1SqW;rBafJ@!^7mlwy{ zEY-g{yl}>-sieN@4NBg+_nBDAvhk0^U@y33_nwoo=OuoaOYEJpc0k7oF4a2_W*C+j zLw0~X260> z+I6r4q&9=VhUo6V;Zq5~Na3L0Xy7s13abzf?~Q{vzI)#hR9=p9>%_;yG_38S?Z){%2{r^dLL${p;`s!e7eh~DX5Kc6YxpAcA z68ae;B8|8WNR4pEMbOr;4i*K0bvpeTB5(0!1aa6pjQ$qEjgTT74y#s5#auR>iiSfy zey`DhNVy8<+fA4h@ecGJByN#?pw@u=gGFlR;d0rt%~TsaMgkFozaTauuLAo{Jey5= zC1a?POZScDvg3Evi+znBDtIoA5*#}}k5JC>yGlEIdw2HTZqezUT|Sf=?jPEph%Z+5 z<_?@XvwHdS;CMCb#4SV-phmtI3O5sJ1r(75dN+Z zSf{5)UWzQwGVtXQ46{S8unUJ?vV*{_DS&t9j~&0A`zNz6w#+=TpFIu|foL1|oO}3@ zGwjg<_opg_jhF0y;cUxG`A5F14$Hd=EWL$xGF><}Dv$Yl)O~M1hHOrG%-^AB&h}%- zzLm#(2VHmgm`(dudDiBAzK0Gx+uvt%%-^7!*!K4!`&NF|58=;VeV+(8f_Oq6^JC;U zbRtZf^x1spAFx#Sv$*g4WAT&V8=vqr=bI0iV3fDeBKie7IjCH0Aw_PA<%8mDYA{d) zmNN%A6t0S3BenlTzU$S)D2?PA_h`CtH}sS2dV;V*i6d5sI-lS}P#k$9grdOrZJ}dc zr?U>%mqSE2t$E|QLLIoUx-abdgO50h_5bP2#H5X%S;fbArpU%P`{UveoO2fM_g_W_ zBp?VshH3kcl=Us|9&;vOHmMDuM2Z;}l&L8ffu8Y;&F(=h>iG0pyuF5qpi=`RqwqJ! z!Iirt5Gxne9e*Yfd*Z60M5Jrqs_DZ`1;b-opCyyZ0aBrr6(^M!)G~5pqmx?XODc|U zn|26Ws1jJO#f^=^fQpT&i(%&n&Q3W8vLc&Q7Xr4o{JuR`{YbE6y`q2n2NhzLH^!Ly zWA%n4)%)?IOxIfW@>%xrjX8MtoU(k6-hwGp9?l;X%+bk*6PhZe(c4>izPcdX>!cu&P0GUuy)_Rgrg&LpuvAD@Yb zMny-#6ZZF_1*GJwTWCe4ETEK@QihFHHF=_qwL$UFUS6>cT$BefqW(2 zjFm_T@8NsyBO!;j6RGCEa-_QThZfm`-AJ_#G}R-!q!Xr&Z3k0#4{ToVHXt_=)$nc! zfJh#KrzL&3rSnzF<^e27G;WcY!= zY(KNv-I9cE{=Z$D28{-b|9#`Fi6XVzkZHnq%QI@y(1-k>G-8hAgssoJh5tvGD20H-0J!9vq=N>joVfLYoH@sU8%8OrFJN~S6Id}7& ze?fLFe?EW5J7sz(s8XlhERP|(SswF!blTfO59K}-`H{zbcPmy2|1ARhxFH&W*Hwl8 zsc3=TLMjq=*b&fdM^KvP_C>T+LMzu~5+Kwwi?u%Mey2C!r!Swb3Bo5JDg` z4ujm|cDvvmd*Rc^(;2N64n58RwII#P^SfhkD(dtWy{OiW4i!?!TvqKgG6SOg2Do6YTwLNA71TH9kOa> zZy&4VReNrl9Z!uV*r7cqPHeosFJ0eJ^M=NYr3U4bVi%@WE?{n1VZJ$=@)=cH9dHy; zj4gwla+H)br)nKeS{A_^tyaCR*8oOIt5=X&EF@xqY%oh1#_5D3=9D0NymCYY^Qzi; zqPC1_#WT7_r2$|d!{J4@$J19#-Z}!O!@I9Ca?`-bxg8JWZvN|mV9@O@X2&e*ibeb_ z_#__N#v6+Dxd)ebKQwdlqiglU&k&x zhClQ15t;!wSswpwbRm_mV`ji(TGziw_krY0T=}|q2i7bOB=2zZU^ZiAYGiEh1lB0% z9)mZDr31Jpd)2@fT9g1cuYsGRNV!A${W|Ui*_cdFdT64YEE75zb2?(~bizcTE(j}# zEG4hf<0YX+Aw{eykAD$=1DtFO5U8UA-Pr4x??j`1urhIBAy;!_X)86O)SJ4sw`zH* zx0E($`ZKjqPx>{r>6r(X_P=o2AO3%^x-Q4%Iec@tCPL-lPehmAOEgzW^r?Lj_}jxAzc`Ml!GT@jvi3Y}zoQ?+yr%baA%EfF3sj5b}S0gJ2w z^Q_^8oknmgO$75Jw&V=J%6lG~Y2Le>7`GUcp0}vpuVU=@2LwHxyTA<(g_x4cDR zo$>Kh@2$639^K@fo|o08r|(}r@GyAimDU{Ro~NuErefBR9_U~n;+~(1=v5A}6cvV> z4G)M!aVX%MYETO~vlJavq=OQK0Z?<%hb4fgq)pZrX%%w#4^{;kb=en5g16{nUb3928`TppPwC#Pq^kBz$ zuA}Ag=q;p-j}j&2`;d+nexqAQ!?$=2T>KrC324}ObHrg6MMR6ija+BMmbHK_5y&0S`vLsnhPtCXsPV7QdX849rpy%aF_1v9f@1S9J>ho-7`ama4~_y}O1?4~w5g0I!gB;JgwQz2J)i^2nC4uS{X1 zs8!8tMT17%xkLxzHfzX8Mum9wuh9viUI$ zfEYwGQl)XvdSCBHrB`GN zcimjiMSCo@RN|gT-te-B%i(ZFq7MA8(6>@bq;@7k{Z6-Q<=aDjiH6lT78|mA_7Cm5 z#p3WTSNEN=p==6Anjj5%_w4ck_VQ9`WmjLZ*tcs}sc+-4U^xsfdd1EvcQT0#Sik_;H&!|1YGE~VjdCY&)3Qobo2iU_9IFO3cZhATaC z=jo4JQBWQY#fB0_$g675FG;~OBPAS3oZR?avS^C*1WIYMF_Dl$eL*n^{xceF8!sCe zE6f)+ev~RmQX$0xo@y%6=iT^8urCDu+?>%6Y4)lgMgNpoBf@#pQ=+6sgSk z3ayIeMU5|S&6)HF9wfQSIg@hUQ|Aiu*sl&jf=ESPCpkF4=F@q;CW9m!+HXQ$ll&%M zrZ>TLEq}w!>tFp5zb@xMa>*-?|H9|x@!QU5oBMz1-<9!@NjgYR`MGIM0iE#M@P#_= z$0f7;oNp0SLif88Wg~6M@y{_W`>Xjb4+=K^&#pv;zrg*Cu#sn)lL4eG5K{qB0IqNm zRNdq$$Tv~ctW$I%uUUZ=A($ejh!^6>V%BK{BQuh#>+GnvR4H46Y(u_ZU{1X%Q7R=8 z%?(3%?pHdbjx_(YGj^OnH@lY1Kf8iU7o1DuLaw2lBh@J=x9%y7qCI7o z^N?k^x4FoeQnJ{3{bCZbj28mXE6zc-fjjX(JnJ9u4)4ZKRMimyTSFe?@qYn2Oi)a{UGW%;VbbsytB3<>AR((W8-A z;M~a2PGis6v1v*M-S`~-mW@Vc{H*m`CK{RccZf~BS@)7!vste<56y4<2;?B7HBcFC z^rD_`VI zbLP65=Da!Et@8sPzq+<%Zmp@v8bN#|x82_hW+dDF%PmdOb^U9K4Xwp~#N5Hd^7y~R znIVd1!F9s0;8xsWgd%m6Ft^twwh0JskiISq?I*8LO>;m$sC zG*AZui_~Dq^D+<|CBTX0aHn|mLPOl{wU(Iv(%`V+DId|{u&U>3!J^ns?^**Sq z-k-=b3ISv;b9>pMyt1V{FiX{#CF&J7oGCc8qf8({M>H|zk?g8IMOi% z`uGt4C~`|SA8=STF#0-jC%Lc6mwij_WGcyoWHD6?_tLffJzs z9mt#{I1YJEta5TDV2k!uK+XQWv4AboSDkt2qo1;Hf@;r!wx&O^R4t`gE^&Sqr1g2C z*~Ixd{Pd>hhMJ&lbo6&X=jqzzAwoFhH7CxNY4%OZoZ)l*sp<)lJjDU@&bzgF5?GWW z#MG(;vLsbIk)NSb>v^(Y%kx4C7v+v({*+RokqFY~MWd}>nd{Jh+t~)57^=6ZdL3b{h~#aq%lMk4>CTM2`-3gRw8#Gq4&>+}b40tHb~ag{v&{ znSoxo{xa)jQ^^c>|99Lr3M6*-v1~G#C4OAEXIkb*wg6NX2FaCwy3!}svFDS}fT;89 z3)@r#>TS^=fb$d)Ng$qP9ReW@2b|;1 zyww$GHl2};5*eT+@EX6{vFGvMNrGsZ_jqmaVE^d(B|tRT=%#v4@KAipQuzY5y@-4p zz_b^OqcivI-2cKEf9M?$`d^-&dC}MFneWf@-Up2pOckLISpLfgrx}fK6 z=SMz)GC#BL=(VS(GV$qc{CaV)dwx?FztNsw4D&mKc$Oa#E!dS|hek%yk+!Nt76?1% zT%BH)Z4ydhO`_;Iz)|!}FheN1(~(XA3kepuv>xaLVUhmKT{GlacH*w}RImT0di_9o z+_Y;I3U-(56>MtcKH#k%s+%mfq$NupPqX0*JaJj zp5>f3*PQkOXAS#o2sDa2Eljlt!x)YNkZD5yH%)RRi^7%OthXUnOJ%@mlqu4sm`N}5 zKo~(e#8_Rrc%W|7FmrCA*BWn`u(2qs)b09g zAmB}Bd}iCBT6MrXSPnG?PVRFDe95rIq|FV6(#1q2JlCYm$NzSGEuZuzQjp90$}=mt z^3KviE}IM%1J>lq*prw&pADzVCowxv z;X0`Gt9-`pd`1hn=SAYHQLl;U1Rze8+l3Tr1nWhWc!@H#xJ?Gu>8NvHg2RT!6-J3F zYP<|3MRLs0&I_P`!4Sep2s3g>zE+z$Fnc~>yCgkaca+?*BbKQF_F}VUW$FpX#&7KQ zIHY_(try-yH1nA5vsfn``wAQ3>uA9`;{C9`bRB-v3-~(X)U)r2_hGk}gz09}56}*_ zCCUgEU~K?np?pj^FA;C9*BjQLa9~%G>cz(qFDm57D*z@8ljBjRB0GeCL#AIn~f7s<4 zgUO-+ZA0wHyWn%-Jpcdkxqn&UmYgz2!WZT1Ul-m?G`VWLV&N&{DV|N^+ZNtc;}r|< zs_Tk{r`(6)-12j|g~y*86@QIOAYA8h?l)maaX+^e=T<(u`Oe?q`;uMxUsryF$QODG z!xu2Q?5Gk&w;vU9r)0F6vXs~w90W$Nn2P#+1e*^0B&Z(S{1fujnkM{;guWiTlb{nX zvTEeyB}%G+sFJfpb*jJqloSgwU&3uaeXA4>zCBQOe$>W3>kT8_NL|nU_y=B(KMDXs zTh4D#&%-ZW`H@PC_sa@Lnyy&bsRO!{@tTZkv@k{Do(91xLe*U&GzM}L5r@H>D&@|> zrVBp_n#Vf-NbhRFyCS15WcS;h1VD7XZHC^Q(yZvsJ6|2ybl?3GDIQ|}gvW7uC1(f+ zo{KtdH{GOB2mG(`_S)a2f7u%_7hg!3%ZJWxPRs0(Hs^&B)%RiD_}n;ueHAYRKacr1 zA8oz{^HlUry!620$IPU>mB#`lJHGh8+2Y1*mIy=gRK6D6;!Asd}yx5a@dy| z)lOPgVNC_f$s|K*e7k^waH#q~vA2+?d|;=;ZX^8zK>|-07CsTFy~4;ppyV`8G#ynn z@Pq{PIiexF^_RvG^u^X}VVf;xclWrMI;wG6do0s_UHEl9)!3fIT+Z%yZaf!}JodQ# zkk_7&RCascO9M53pdN|^dFf>|Q1%{A)bO(^-gja2p6Q^6u9uOl-}Ay~5vmq*{_j97 z{~B{nliZAk?2tNM3Bg=Axk$>P$h`^)ekv7Ly0GyvdBj&3(w{u`)ojN6jdVb9tb$m8@>$h$9NtQ@H$Ueil zLKXFUyg&S*!sD9${6>0l1uMwkny=tr$ee)63|iUl>u56c2>#r<&N+d`L!un-xZZJ} zFX7ZrPzA~E0{a-Ka$}iapw0C%znmm%Df5d8o{;$!`03ox4wK2vPWNAR}t)A?I{7jHv&#w%zRTdpG(ImKt8T&LKgJpPL`9zG1tzf!#lHhxuT z3KyE^$0{k6$_gI_Ro}}PzyS;VWH3Y^0kGgOAW0esR;zIx)op|bD8Y^BvYlBhrga<6 zdo!g?D+93QMuuw5fhKQmf$SUV+eKkRdjcf_4!}Vg(m2%fqa7!d!!_+_q8GI2atd1c zC`2w~qp&yCGPw%$Z87QE_&5(Tj@~xEvoY(Y1eM_}l%gD3YZ;YET! z5PAgW5mLvtW~_Wu$yZUKC$gZ*sZ3z%Do!3e(p>d=tSZq6Drq#_wF7~SMir&oM3&7u zhyZbonq`RbWvfZ)^dToW*Flrvq1sq|tiRM-zzy>}lnQ$AFb~Hzss2MQ`cT}xZ3C)| z$LT>kCwCDk%*y!uN6yX^=KaCF^{!AWNQ6-9#(@tHr1F(L?qu(Wi}K{*<@&ste0S*e zp;7^-ksqAcd3@#a*N8?N7ZODjV-dHgKM!uH3lr#keNcF!`FNC>Z2JbXD&W04K?Tk= zJlu+(Bnc5On~gJ3WZ6L^VQW?*5ID%?GOZ&VmRvG@suQm)N;Ab#!O7S$FTrBsl;k+aV0Mbb2=5)blW*=I&7RZ zu~@owI8E7QpUX?oHiBS=HILGgX7#}EpdcJQa^U#t@x8m3ch2vao1JP7E)6fqTCA^^ zf|MRaDG{l3+Wnw?I}@PAy_89}Nowu~Zx@bDfrI4$?xrZ%W(y1T1|3 zD#*@&;5b@Ko~|t3>3l#eXL6;_lx0y`mxEN7EibPfCK{Z*5+}*r0ordz9>yw$|C?T$o!r4t}&L2_)!hI*PAO_4dSG&?Od%Oa6(6OZ&%==mIj9IT;(L zHf$Y?$YJ<@mI=ZGF;6%k3&54gStLRpSaP^7{~Pp@_{}b9Aafn`5wxxg9JhjVf7XSU zH(!S6t0U5bte=5eDe2L0vy96Ei=|5zI2?*BaM?Hu+O0a!F}{rM9cEse1}=1)TQv;h~7(dw<%pd6ybJ`hcv!r<`u;wFD%S=8K0_#ar6Ake9XFe%*GydA4TT+J5( zH(ZB?gI451*)^CHkn})|*!{!k@x3g(viVpvAR28krZo;WKrZ+bMw`~wEd^{gMG82~=uQDKU^Pi9k^?S# zryQ_Ygmovp4}czXGfY5Oc6n}ja$8BS%)4^)SZ(4^ZNKcG-cEzo&7l|2gV?{X7+#8RH66K>I%&(WA zhV**Qb}=|P#B>x5Ajqau@fg>s6K9@x;;aZ2bhyi~oqCiL!a|J>^9{DeS2#y$p&3L+bOOGFVqSD_R zb3#wRX5^e9StQuV>_Dzv zTN-t+!!N7|T0C(h65o|9wj_QRXZ+kUp19*OklJU!9d)woP`#%QF|Aaqie?g1S8<6+ zHc^aJ-q_72W^=m%3_}xrf`HH&0DTZC?%5%V>a1?PmMCh4L%Yn9E-@rpWSOII&Dfnw z3um_#H(MnPZJzDqi!4pV2SEXf0q$-tBU2bn9jGmih*B-;hoG>H#5sl%`{T=KW1}J! zM)6LluuMvz1podF4{ySRZHMvzw^F&DqFtk`diP%7 zRw@0ZWrcD%iJ7?ouoi@s=90V(42I5afTIt{mFJT(>rs0t=+JnVC;kNefIE?>8ISr4 z!2+SQ(8aXzExb+4)w1wfdbq{g+v?kH4&Fw?B1#)&=hz>hYef?Af!mtqY$o0lv|07M zAaCjEB7od&3gjAcrQIN&%P3~J4pgtffa`jxJ|k61m*~U?7nB3lXy~O@ zN+FO-Di{D9!%L@7JE!fgoogtibC>!W!RfKN9&ae4+v7SuG`UNRIBZ(yU@(-`qy~NA z6bt8aX3VBP7szEi{-Hwu;$*3BaDMbdy-rOamWgH~eTg?4t>J_>ibP9M=)ufChM8N@ z9S+z!P1OqwhOJ`)jgC|mK1&yPQ_b+HQ|%!tOb@^d6MP<9*dA7rSmdd-YX~}uO)yJd zYx0BfW3}3`@$qBT>amGH(%GBzr<~3tJ6An2I(oEHIXXIeq$*VpHV&Sx9UQ2w4hW2A zS1hs1$QD7Q*=$1G3A?D(8WH%rT6h$eII$ZD?_JjFMS}hTqUN#*G-m1vP2l1A-)_J}i8E1S!68H1%f;9;*mrxsNz zd)Q<3s;#E^{_~R4^q@B2ELy_-!OZ;LGjk=iKOd+h?i#P(H0XDghu@kw{ovS%_e}gc zQ9S{fcn7HNMAW<^Hz?IXaM)icE)rr9SH_*eOFNlUsp`q#tq}nra|+>9BwKFj-Nxz5 z7G}<;ckN1_pP9LxzTZ9*DkB>j8>}44jzps)mci=T4}9Qkb+Gl_DtD!#-fe5|xp3!G z=oE@mhy*sF5)tj&_aT0U30Ncv770)n6Cl?YLFgDx@PHrBTOgvxP!RkB-H5bhfnDnQ z%i*S3;Ei6L9#2e*PWUKI|A4Ki);@}da)G3@*WZlZr-igLSG7B{ z6urmsAS!tm5{L}Zsbq!YuoZ9sJS&2fbrW|Vs+4o7#fCwOx_Uj{qG#^rfzj%~OBes8 zzwFXTDe3ropM0!7v@m>P@Xytd?0w6n`fY>5_s^QL*>8g;Zp2T2fVZv)$C^h9Os#b} zQ8z-U6HYbIs-X=;G--Hrvm+6A;(4ze;DD^vAgA3gIvGbpqEOIJjLnaVS^>9!KCq5i>MD;vb#`qpQo`zY^^)$D)$Hyd#&N&ddyDdY5Lyq2>vT6ixM& z(~X0b!hB!zj1={vS+7#%p%%;2lfL_X0zp z^ZW#{!ucm4oNY?T!B!a{LMVzyY}A8>{SYaPij$~*fl6is^vo25C<)abo&~fyrt8m; zs-l2&WPT_Lm463m8K0kK6-e0`wH{;pSbF;heo3M#Jn3}NCH+;-;xMU$(fJ#=xXG#+;% zO`&!FT4v$Y_@^5)NxNF=VPD`q-uC_eyPg;nP0{G*rJ>(hU;pZP5C`CK?eOO&hU z>&bX18_uG3zlZhEK7qH+mxq6C$pfV}6y@2nu)uOS30vj{3V!jh`ra4LK6GyN*0FQ5 zJI;;Vx;l63;OqcOX>T)<8qk^Pl!)1;>gjqY=ysZoNRL+wNin&}kS(bQPpUJ^jAS8}kIK^PwE;|* z3^HCh=64nS{(f)3tSjwk^WXT|z|{RaU-6bgCVOWx1O|)@Wn`o_JD_2xvu#+E8S+YDVtGAZU0hvVTs(AWA?C#YVlk)7<<#GM^Ue3(bMoXp zrbhkvabRRaM~@CQ$YMt~Q{hwWH&M??&!_xd7*b@op9MH2bhZZTtmfosI_x^+19E4c z=Tf*`K6}=jsKwNh&m}ospN*l3QXp;Lc!SHy>l*=CFe{!F7p9sM3d$fq4Bi2-e;hf6 z@E3s%KsM3Ogid$rtPqG(?`vS1XqH740^_1u&TFEBS~wnD(kAyAkQ6 zKGV=bZMA;CCty(P#P@5D*F9#RiQi}$T0gp<(i2m%NiX->} zPPPRNaSX6lr&4H1+d*+kn2=7!W04T~{w4|KuX&c2%O=wBkh@4po+MoVw&&kacFc>- zpq1C;(ChjW>0&YME1EUI#^6vkytm{JN>-mI(Of>DCwe{HXwD7|PWs*7$Y!O!e&cSP zZhmwEnTR6Jc>Woi#oi609(B37XaOFR%L2{7l(2n}jj94y19icEM%NfHjP@*5>j>~a zxpx(f&{QJjXgL6^-fYrqg)j>%Q)vZPJmlxg?vw21^9|p^o@5u_>-oc_L;0nCW58^| ze;REy9?JVfYb{ipSegwb^HE#G$k2iH-s6)uH)vM(lqdT4)f}F=k;xU)j=t&?!q->| z{oXS7;*sXfdcgg5;tDgcN8n7z#KvqeG2t{N+Tt)`2o7`$bk)>)ADnkUdUQl4_ubK& zZYeq4cQ%`|s`P-fGeeQ_NAJurX7}DB6)wJcH}}|o#`b`EUQ{gdIs#HRMPKbLLrwdrAm>IFX2xB|3?+XCe>Q)O}Gon4frkIw=6T@e1Cj)@APnaaL35V zj=}Qq^xj!OsZRWJh2rs0D4EnRjSnv9G`UEkP)I~_8r{O+_!9GGqR~_;8qI9{%iPHD z?A-A19C)Dzys*G|p(LOOnw4qbYm3x(adYJ{FHI*ucd$Vr7opx@UTOpfj^1R04vtnl z?6%mKk!td;N%WI*{o6*r#T=9wAe{FxnE@t;d6ZcmtP^ZKm)> zEv3ZM{ZA6cNx}(#-fS}9 zY3$Hr^89LB)fkn0P#^-pGPdX`BxCaQpjPf1U^5&l-mGu^n4?Hp#@O}1F=VyCxF!B1g87ttN0z4SLw2V z`WbNOE?#%ir7)d0q%hBKt1;PW7F2nmF%LHPU0Y+4aHdsjX-pBClER8gqGv<{`(t~Z z$*KO!)S2w`^^_)bCZx(N_>pub&Tj6~nVXUll2L>Ar*K#cjKyBRw!V~w4k>ql-M>72 z3E6Zb3KI=(*qy9LWr8|H-GOm^ny(3viFmQ7;Mg(00DX-bG14a5~i$8PDS|x=tDhc3`tx>^93q!KyWDX>H9$t=agf zVAN}k`bQz7En2$;9+`t_t!nLQ+GJ$XDG3cQc_PcSh*(c*d5VG{!@3J)5NX3oHj_vQ zXs$FjJ2O2wF<7tQDAe9U=3w?3Eoh_C)~g%p5L;gt@86O!svA|jrYr2>Bg7k zTDGISyKZEG)W|JIFEp%=oVnH~+|OmvZ86wGeQ1&mAE+&ktZ4qG(;IacE!Z|Mqx}U5 zuLvUp_LYelP%yrVZw5Wm-1G+hF2CRH#?fcJ{(?VG6+V%$+vmp7rfs|b+QJAG<6IhT zYk+~9?Kum&{HqN_HxZ;(`*76iYAL;@3rJE-X$P|yC8I^UXh*g2%LraVS5O3~;Zx&a z>$5n>&uBEQ(s_QyHMH0@8F$rcNy&E@aoTpfA(EhR=niejw4a?0_$buH-2}E-$)4+*Kz=LI!scd;qD@SVysN| zyRc3PRu%Y7OHWtu>7nNVQLl4@X5)E2y9vN{KN_blT+8`1@cgcyOB257hSc8PC!UX= zCnz~a(14q8nBjF$*m5@tYe4ITZDrbn-5cs9+xe6|SlI-N!ly(|$kje2;P)={RcSW_ zYPKL)EabNCWQ&eB=1#uyh9Fo_@Y)b89B*(^QWo4nXGb$XLBt0i0To4o&&RNNAB ze_A*!u_f@E7GA6Ppx|1z4*uOTQgI@-0d3{U|9qhBvo{3VK5>ISs25z6flS)sgTlPw z-e(DkrJ`8wKy3}af_JMAdN4IzY@@d6;mAwI9=$8u0o%f=PJrfnKy%p#oo!BS^+7vn zr&cnoK;>(?p>5Lr^4!oTehx1*j`{4ud_qE>u-M#TX(P9r-lXDpwj>&D1bCz*(IR0c zmRcLsk~VJJ%zEiY zZ076hG`!-qEL!XXQ05Tp=bvAs>pq`wr|DT{w z_Olx>kVv1fRn`!%Tt}Y_cIy+#U)Ua`+@ep|>QxE_dA)3zCB)0nCogW=uhJ)S5kwkd zcw4nHys1_|&|ouh)xZ{(spz3$UIDVL{%O(um#Kf)^7RxDXq{oZ*?w>o;hE^O+Nps$ zR1cV^T?MkKdNAW_K$@GyEH@5m-k3IFyKhLHV6S)~ z+PQYbknL^(nb!*$l6<`~$QFTvYlR4oMkJdGUE+xgE)k-6KllI#g*sJQFAf4lIRUN> zZ~PSPS~h;nteo$Z?5go)A^7Wy;jhX>EdK0UpM>Pln z;gp2#_fec#4)%A_K}ouAQ$E%~hib>qVn!jxMo#(RBg*&o8n;N(`rcZhXR$*aknR1= zJ__~GiGQ?0_>bzKsE7kVE) zcI@Ha!gw@OlKGgugUhkJ0ABz+g!6ON7g1&;SBq&iSjMeIW26Gp8Yn-kZ!(gP<}sl# z4xP*yP{+mb*1WF0JsR(6mQi1$HQR9*bw#%hIX^e`p-$8?EG1zWbV z&@(-jiPgeAwYcPq`8=uoP|~T9Vy=wKnPn#`@zzR6fnqXR>Gilr_72XS-oLjJEf4HI z7<-OdpCNS)+eLUv_*1qIbMiIaZMk=Ur_^h7yx_eG#h%*aH%L9<33fO89;#W-Ej?`k za6>KlWdV9Wpd1^npj8O2JtoTwT(e&_%5~MK&fDOSXxIl#kSkqD7UQjG+t8X*29NgB zy({J7N~yeDEG|ERA5a2VTJFO|nq?3Bb5;fStqM;zjeDl5DUVJoqT#uG6lfS>aJ-zB zsj*?z$h<*RkmJp;=~GDCSbExomrJ#be|a>lwrvMDpXY9LtS3WkV0f@th=dWJ!P)A< zDqAI1kfn9KK`e|4v^0uhkVBVFY&1p^k7UUC=>lF{0e4h3^zY6@#~=uBp-FTgOwiE&mj=tUoM$!@|pQ!MZE z<>N-9QIc@VqS5N_5v{n@pL^t&n^vp!+Z-s&3fu7~v&rKznM3Iw zd)SY2Mj*7bDy`XsFFK#yq0#wb_DDKlHhUlwl8}wmO-Y4>gk&>D3KtD4z?h67s0l~_ zMSUpGM64FUO%j&KBt)N+s{OEQ!KE@i_fz_Z`$Vq%Sd7542!fk&K8MvPsus~~R#-ri z4dtmC(G3E%u@c(1fh`SGpnN}t!GZz1T%2on&=C*bOao_*@PA%iwSj-Sgbt~TIKvP9 zR2qr<&4v4ZJ^6~?Etm^W;@|xYzq|`S{AT#cya+T|uYPhVySQ;!jl{Vb3k#X}^r!{L8pUh&h>;&EieN%^+T#Vdvo+wT{I> zDjjolqD^S%-20r^V)Lql$c@#0&_t`D;ayN6lb|jeUb!rhS5ikOuB`Up8Mj`Q%I6bmo%{3)ihixh9|+DT67xam zJ*~g^HrE>;FR#|6#(}=qzR@MQ4%PPDo5_}p#!@zW@1EKr7oKOtyG8MCNy;Zg0X%#I zk6RQLNhZUh#)ZSgP3suS_RvNaAv-C`!6haMOfE0+ZGZ$KGJV`gIK{gfqhYPa=nn?y zg#tmpQKJnRZxtR@~`7!}mDF zUd+9joZxKQJS0*o!hLdK>efWIX#f_7YVe zJgXeZln{jYB5(xQF!y`hD0|3xa)OJw$N`ZJDr`ZrpTcOB4wcAFg^nw%3ZH8%(SDo1 z>Hd}d8+X9Ad6(`>WdFC`jJisIO71q5;?Z8Bk`vpun1;_rT>o@jq z>U1U6;TX;~Ggn=~`r|!>|G_EbZaQG2Eb^toa)B(gL0ZPeCRr}rz@&-WBcfZmbB9;k zM_w(>jZ#Z!!?k^wVXY^uw}+jsP$7}-9Twe2R2(>+E~icx3dZxba%B(EEg+m=6YNQB z5v!p8kV%j8QY(d2Cf$JM_3D)GZ16QY-D`Bac0HkdKk+7=?oGNk;XnC1Ujf`{X6v0A z8T{Yt(P@4(R4x)U9Dp}WycgTe{n!~9O#52Ce6rO;5`(`lqK2wLM|Iy6|jj$_xgM(rLvPQv4M$v1&Pj z9fm)I`yx@R^R_gLnQh>)~aYK zoWMe$rMla0uecpnZMe`FK=_v*!$b8~==_4t(_}KpE|bok7)YRPH;&a#B)r(f?s{G2 zs+KENyK(^?tWjc+7E>X%q1Q==@7gza;@+wImnGHYfL^E554Lav^qgT$Wo)P~9y=V_Jx4edun@O5kW)L|OkrURsf`W-)`xpF~Scq1AP|zR`Mk8Ut z1-+W-&zc#`e(A8FgR(H_#Iu3{7?A;auhi%a>#L?j(YUeYOGp-^#Et4iU5`W=^cd$nj)KQ{Az4@uff(`}|d*8#)tTA!< z6(7C*k&m8Kv7wtM4112NqsObmvl{jM{qxbX*Pk%KZyz9Ss%lUtyfTZScK7duJgGC2E(k#1iRtlji1OoK|FX=kv2rI-?sMv&UBA1Nty~kUvpz;7>n}DMJ zYkW#MB1s-CM^|wlxCrz?LX&>}#}VT63q0=UeG-SR0Qpd1MHHvLD`lN%m?+nx;hd(; zs!r-MMh;91*=p4&@ME_(CAZ9SIPVGUhk7pXd4+) zE;N%m{Rj3PFD7@6_1-oxj-wdK8=J(IyH4Su*G)1F~xkYJ*Wt@|oD-EQ|=0$?73i5fT**Y6x1u zGa^(vWlum>i^85or8SLXAdPU6&?;y&4crY&_iy52D0sgJD(%ew%hQpLE5LuNvQuOB1pG5~q zq9!$h6mCX#oha-LHmjWNitsS@fe78h1L9f{ywOGfE+Atan8B~71wcv5u*}eU%LnEvG{i`EGtNr%1J^R+y z_U&04)4AX0)5UtcQI*<1=+Rm1gLaMjfLr%KJ%G;CRLk|SY5|fl0n7DN^X7z!sf?ln z_=C8UFy1AYl_)GR3Kvbl5iJrTPDYh@)@snBxe^7Je0Jf6JEetB z-nAJWbyIe`+wQP??JkElQeY~601iKa%Slj5)#)T~0!_?`8bDSuDn^;6kiWb_mY4MM z2E1;u@p6yocdR=CqE8q0+;{H-#~d!vCk8EVGW$gDkPJJb>4?W0PYo97q#4|k-Hm%@;1N6n#izx0^8UhCJ}zWcHApmX6Ll>e z(dbrnjThi^SejEk^xR{h(&l&_Ayxbn2>*!;oe^*@8^oLH{%uffCvKwRH-b;{R`%A7 zTQ{QY%*LDf8$8MO!-wys^NNt^t-gcp%@F1Xf!(A2nH>E{iFe#}P?%&1Su90xewV+V^eHG>&&cZ_Q+^$EC&r z@pPyxR0Mbj_4z>I2~-rM5qOzudp7(}f4D<{qm?%MMMP9GV*I-B;)t zjeTi+u+gU(Z$9H^U;4q0N1J^p#Rjz_S6;&ofZAt;`i^g6d$HA1HWXmy6$$^ z%#lKfc*0?~+Wt10meSF`y&j8vKa!#$Hmlu191|);%vLAKnJa%Go)wqTRicObiT3zl zzdIckkd-$P(5M-T7yt~R5gkgYz(^>TQt@7VDq#<$9e6!zu33#*rw7A_q*@aVjHW3{sTzZ|mFANm?j1U-CkAinbIn~pxdXXoSV z8_y+PFYTIVGnb<=XyGgWfs=!FLQ8~!aSRHh!adCkR<)>Cqt-_fciNenErF?#(Pc0* z9gI8dO|(HoV^&`JB}qKVo%@~^mWZJ9L;{v2_zMvW@lBV1srfFSkb`5EH@n}h^Mu7SPPNK0Gb(V`(NksP<{arw1EM_BWvT#=%*2W2J zGPQoRF|%1ft9wB}H5T-<{3CY|2s&7zn`*9q(>1Ucx^9|GywM?!Zn^d?$@=;wzo-0) z>PubI)<5=(&6=>G=n#rOCvXDC&}3tvzl6nsH1c^Jh(Nhxc00v9(V&GS4V~1CpWx(T z=iqQ-1t;QBWJu%0fHn>zjgENZ(#ffOx4VA$LzXCtg#`PdR55vs()!&ecQ4*KG56?x z3BlXlrt#{;M0I@U;_BM&@wquE7Zc~=S!r&LvH1n#>hv&%RSynL-ZG-wv4hRA|JXA# zyZ3VMg|(x1ZoF>?Bt+`UTg0y+0MduOhjU4gRHZ5-XC%UO1{IDHHDL3Ru0=_oUaf(* zp*N`YhDUL-fn=m?1Ne*B{_9v){6r^5$OV|lCs{@TpR|tBy|hHmFDFed>!_hKanAnU;3nXL_)d_eT1Tgrva3 zyCt+d89Z}j?!l$K_fM;j967je`sRDJ8%L#TLA7UHJo3lvo%KTld+viA+T<5PqxZ^k zD1^c{VFC!YX)J*1xh50!x+2r+3(TO^5AzfH>$iz^SbvyYbKIV6q>!}eVYGAuYom0 zZY56g!lt0p9_)^^J&qpc84EuaMDg*e;C(1r{*`;u8C8cDok$=hD~&@Boe(VWWn`Sf znWjN3<$v*;&wu)rlGE%A)dC)~#}tBDZ79Xxp|j}QI|P=Bd$8*BzEh<&4BwncWSYPC zTc!GMdHYYFPk-Vy_rLGNzI{xmUR!7E)8&=mb5DvNV}q6Ip~2jGYBZS~P4Tbq!C(4Ap^5{4OD3mvQ_e~#)K4RmNq=%A9v^|L zNnZ(niCy_5`>raF`r2`z1h+O%&JGscFi|FuAzFvKMn`_23)v+IM-kaC7qOEKq6$J% z62OyG$81C$t$Ljd7w{HqwL6!$KAroBTQ_^2)<5 zLGBU9uJ}HeTWn@^_M-=MW}Ppb>1zZAPfkj~ zTsbaDwz($D3@;_`UXzLg<vyEIhBM+azhwls;0TrXJu-mDaXwG zsAHxQ zxY5Msjqq0i;U)MRH+)A4DMDkw$jEX*r>oX0UE@wyzmc>;X29TJA^-o^b|v6(RoD65 z_vXDf8qL0FG#Za)o@SF~w2fv)qtzZsmTiqJ?+bQ}Wm(uV5QA}pF(rV*VmH)bE0m?A zp&@C%HVuR(4rvH!pwLoc+Gc@|Bs5DCnkH>&fYfz^_0<2|HzSR_fRlceJ^Neka_+h3 z{AcUw?*THA&7=zHLNnr{T`sqV`bW_JXi)=4BxSG+J94RjHhPi`3Xlolxd4R>>V*pN z68j+$H02N^@sfRv)$c0gH)W7ix+Uj(=%KdQ-mYA&W$Ds*>)y-kH~BjfHF74I3oY5s zzL2;rH!^Z)V)G3nfyR$IT9EeL>;6-RZf$F>N#sMF!Cwxn8Xo@0_a3gV=la>(;_pGH zT!t+6dy&On>0?$Z`%@#CYPKTV7nZ0=ngO;29}x)FGazNYX@Q0*D}n%h#o&~{CurMa z!a#p_j;d)<{S#PM>g&8NWOaaxnMqj2mX!duKPcN^WU8iW zlrbIdVc>t9@?lm{o9rU{?!J3Bm}kVx7~3meW?p;G2OFYk?EmKWk>*%`U0u+`R8fDI z{Zf2O3c@Ed)?Vr|TSBpPC}`jO@Ln4-q&Gp1vCTZZRaL()4o~-Vq|-Ny+vFO#(^fj1 zO1BrLi{ke|`-WsB^+Gc0!uVj#ryB!E>#t;ZAbmY}7_<`Fh)j|ynbad#?6d)?*uZ5K z3G?|bQYKc67Z-bFxv~)nLQftSM&1I=?TcgGyH^?|p(?z;3#={+kHZS%Cpt0oR(QFP z5^Bd_aqds7&*1*7C2;$LSNzox54s4>-b5-%mir=PSXErQkBs4c!u&zNmwM>LSiFqT^0l}0*xG)|L2S^9% z#1t^k3hDIq7V=b!4PLy7rU z35x~`2@r?zQU*G*5|K}6&7omW-QX(U($ovD)i28y+J|=7QO`IPZVFs^q_Ml`Y!7Q+ z{l>;MYnE=h(qWA@w?{O)*t=&$8)&pQ$I4_|_XjV12_&-Tl6;5VoAw9n%P#He zS#kRf`WYe|j1K<9)6i)9gtrX&$Q~nnX*Eo02(=K$%VG$9i<)Bd-xkk0tRnI>Bk3Qi zHvrU`F)KzvT)1^Z)`qSI#n3tl$1hzyUIEbpJ^xEGsNc5c_ z#|8lPIRmceR@n7Fty_XAZD4Ekzs1iqAIOU#HA_JuC)`r>d0jS(Nfwi_NXU;(8%YdJ z5~O?DlM>jVW$fg_5eSG3dlA(rz)B8Jz!e=;t7?p@Rl#BczXOGwKl}m*a#0<3&86K< zL3dNYWuan>g>0491Ca)U0yd`tfPl;%g=YYipQx)M(P5Z0b(R0e8xI%P-MiaT-_THR zx$e=%`%KYLqF{XNZ*J7I#?blv`Lu17*G=c2f5Sg~5UTLY`pybgC{!60XNp=LCUd^W@!_1TCP) z{JFd-k}%UQ5w!qP^J5L82vB(`mwoh;1H&RyHgAw^YH!Y7zwBU1>*$O`EDEaJXzl&} zfOywkz;qva#M$5c>hiI0tzrq=mLBQ#*W27Nw=G_3UUq2?5=?4cF}||UIx>_30&BP1 z@*ika+_AH_=d|#jW&rGK2FI;aw{KTZmg!k9&@ro|C^D~Er`x}-v-0;P{ zEbkp-GhezP&>abNhrjf)qD#oQ0Q65hh4F4fz7|M}kg$ROWqqP*fe{eWq95@u*lEQv zm#s!pVFdw1tSU2Jw?mTaoQSbtvVd$gfB|_?xiG>Y%ku)vck)8A zvl?vhl5aZw_mh0aG}fQ$Vy}4;|rB= ztIAlAu&NpBlG_(C3>=rCB1FKgAh2R+NEJ)s6(k*%W3B7(2P$53$&C%YS*s#<^#pJE zzz)>Q-SCWac}L%~C~ov@f5&piGrSg-{Z_jMQWlH7_Qsei;-71zvi)?rS)yIk78XCH8{f?Jkrtb9*t&SGc zedyMH^oq5k8!WqhaPR}!TkZSl!`>@47Pe%_Rwe-bUWVQz1Ty5P!t>%&e8onwZ2uGA zcTjf5BqU8R9#~ySPnlWJQ?RrJ0J5;|TP!u(xSmu?f+)F0cL*SQgT#GW(hBRS2C5|~ z8*|F>#d#)-O}c7o@s^}+AB)%{*4-W?p|fO%CK&sxXDkD4CHBy_@}t&?lC*uo)lqko zJz4MX_J5%%X186ouEu4y_pFfZcGqwxqF%=K)yiG**Ze_l^F#nA)ME0JX%t3^MVJL) zg_n^m3=%WD31liFttV%vz#u1URI|jhUOSMf)zRocH84LiJK$^^1Pu%FUu!V&Q9tlf z2U3K8C)5ZZwoXdJ8+9>Z_sNxAQ><&-!0a#B@Y>ByQ^6(9IWeVct4757*`M@H_KI(I z?Htzsgl#G{X|p>pn3dfyFKjDrVW{efQHRivjM1n(j;v2Lgn%M*A2QP^@H<3wH6#N} zKsgUxSzd@k-$%+aj(g?>xKl)3Eqn{~Qy7e~0lwGXN2)wuU&x=%gVXrNXSR%uy5nbW zdi4SDyL*1GcBr#@$Md8cZ0)=9)!SWiY(>ncSY_MrHL>z;Ckl?aS@DGUZ_wFmg@IzP zf_1}VD=`rg%<-5V0l_rTUYZ~R@%@e4TWd|mekkK;$z>+DR#H@58lE+mL;PcXQhyiE zzY-^pAD{h0cJ1-w`tQ;{1S^C1InY3gs2VxMI4_>xU9lyt#+^azqHsh;za+z6fT2ct zO*19;Y!2@`(k?{J}FTFIrAv`CPzdD133!MqT{!0y`A^%pPftgWlPI<Ho+&@mP8*{=!ScZ_Uiippv5wT7MFB z(j}ZRD1r(F%0N@dx7L8f=^H36{2N|Ju>5mH^XsT(COFN|{tkaFyRoamzAeeJQFA&x zfzob*6D8rD&WN)@JbA$a&Bk)@d}o_ckL>~{7k}N`5%h)SNH|7ES-OhTibj;Z2bcz? zme`%KJV}l)rq-BE_~iI8m-rfCPJAxsH(39ROpLXjJZXCItIyk_4UBCp1j4smpKuR+ z6@YhG?uPvN zJYD%w$cG5>hoJ`XL?W_iqXV@y$1a_*Zz|C~n?f?GKM=g&&`ZzsV9>vw#5Q={t zy97+{y`t`r3W2y`8!NFjM*LhBaSUtO&v2jls0YHcjW~>c^RZ**qeuDk)5^VfD|g+c z+ASc${zKXD#;s9iq(xdaw;h@xky$OV)yV05x+53xrBDK#>;z%2xv6hgtm zfnXKeAmN)3EsZnQ!>irp1ehrpPG(kz6)?*}#IzB~Vz{sn0;w9ls@$>cTb@9`;|>I# zVx>=)-?ICHZf`?_*BxA8u{;>`(0fl1l3E)JV7xwto~S}cu@%BBc;wDLHlFyMl@)(uY4RfVZ`dh z^KqZ*H&Sz)KK=M7mB;K4K7euU5{|MDi&0$BLUfI?mY8k@8xf?$MS-9yOt7k@p0aa5 zYonXekglg2>#wlVYsSrgN#lCXRk1n2t>}HOT5cj;m0e01L{6XP7dD!@3l|0zptXm^ z2&ZCXrUGe_nN!B4Wrcv2%4!4`fItOi0GtJy|5}*f1cNf?7pUc|1xmzeEYi=g(yPWg zU1#(rD?GtoMlOMR#LXNi?iXZ<+@p`cfgNsN!V!2QsWnJ{3Q$8HU0a zOe9eYDvH}9PqSG;c!R~FOxaN3U0DzN6}B=<`oEI<7Y>{=0`ol<1=BWey$0Vfk=xJW4yk2t!}E9Q!p&!{b6eGh zRd^lyG;}ybX#s5zkd>V;Qli{RS_P!J0E2V6sF(>uv0G5qe*J6U0Ky+wK21l|Bdtsr z`>G;Dc+Y&~Ffw>ZcAfW``6r-aHHn+=(mL@?aAoC^6Vp*UHimTA~rCR{W!h* zV|H?Qj2FB<`U||=v1#}~yPh3dg&sQ)&N+nj&>&D<)~&@&?MWAGgH(qUFbpILY!`?D z6V=NB--8a|(yU;x6-J*;yyg#RBh|7bh@3#3RChJ11)G;N`#iAk$U*~as71fyNMH+H ztjf~Goel{xFx*qocPxauIO#QfARw5FA6a#{DY0X4a5CS%K07!SOiYcBUp27zs_nbe zrA%g|y~&Z+Uu+v}X|#E_53Jg_sj zC@9Y2GP(pG!bGwFI}}{qfOnPMD9eB?uv*3E!nB%N*Y;Wuiym)d*ln)K?kw`p@L=ZQSs@bXw+U27(@dG;IQ2bL0LXP_b92&&8oSAQ{} zk{$$LnxZHGien}iqVz=2x2RkWwkadK9ARDZE)waOye?Rb^TRN0M6wq=Zd=ibWs(sx zNhEq{X>!#l(4q2VVb12;DSr}p7TMS_PaMesOm9#r(Jg_qet*WIYO!atmyV@CtA|hQ zNsV2aeKw}47X54X?xp?vMn^C28|=2f)LiGN$*-BrP2IhI{oPZ!$u;>JM_uzvpN-xz zweybEtMAx3bw~8GwD;KY^cZ?h=ngmoRx~T|nKAO0(NGX)0Ne+bAz@ZvM~Q2aoo#3R zvq#y#{8T(MYjTMgKuqUcyYvR;J1yLAggqkUUZovUWS2v00=3J+HvR@h)exG9MZOmD zI7PQLV?be_KyW110?vZH*E6phuaZVZw9fnhpNR7RW3EU1 zYm9`Cv~4TOrV+V7`vBo{OqFK{;=E0|2@Rzo0+1og(pG5v9MP6!;>Rcr?QLpu0gn%+ z)jR`N=5F&EV;aXNu(58{|3Lg?$mYHC4tgSm1Nwg%v-GCuLEBWJsTc-d9piFA)tu8oYoQuSO2AMI{hlmqxapCPZF%x$H`}o9 z-^F!wNMtS|-onmclp$Nh!hw1xoLaHG2}dxA+>iqY0)%eB`vS?1xFsh=rs}8$M9D{N z8^^;eFdR^$t+{k6e_3WluGJr*{MdoHH^dK0 zF5*vuyNG}b81)F5Kh#i<>TPKxq$x)rLh}VHN=eIIK;k=V z_9UH-v3-O2&0aeUviVqY?XcT6($N)Y^N#FZ612Mgd+xa;SsL_M9N8rUQ{GxsN^ouc z$m*3l64u)O#KbL`%%EycZtNHTu0}$=CEL1zfk(CtL z4!>zt|6x(@mkHy-;o`LpQrGziK$u0Gi>%h3JqAub241U2BH_|)2Bp(D3>EXa zg|S#US{xr5@9)hm%P)KHaq;~c<5HcWEzY4}VmaPAt?K>HE}5CR-O?cR$ggEd*^;2ro>kf zF^`N{j#?RhC?)KDT)0CNy@)kI1}Qb^>Gpe6q+)V0Pkig9sCCYY|4o~>#x?O^O}><} zvml~i->|oiXU(&B(v=}5c8edxl@rA%2$XWNSdqL)#(E<$fNwTa)Q0tl{87mJjJ1nu zA>IvxDB0-ZF81Zfu4{T2yU`<3zJ-9V&*&IfLtc_9GKGhohA_KG>tn&iXpf_ zPzS2+VMw|zAKfF4lpY0$x#&niu2b1R+f$`{&Fr1xL34JzmG@!78r`%tULW7OxrsW- zuRn&KT#4&L{{sYsp4e^BKoA{j?3-MoF>d3=kl{9Q&LxoF9PxSxhZ3Xut*qyoT@if+ zI^_$fs>dsidntpImp$#$N42SI3Zj0Shwe7_UChWo;%?wiwi+aqGZ>VgQ36S+fW%l} zl<0;Zs<&ruQELO3gj6YK5f9GZY0j=rV?t~+!iZ!P$9NAA%>o}l$U2T%i`gVqG)|s^ zW+9;wW_LTAMo1BeD;ptC%0ZPambbQGY&x{)A`;wad_fLf%UL9wQqR?@{AfJu1_g z%*pPY&V6*A=&*1&Azrt*vlSvVX1UUH@7&#DN@_w|l+TCkl&i_0ibczGF@aPs*)560 z7EasKl|jBhJ1W!@pZmTvD4qg5b5>Tp+8V*bkl2(|FmkgXmmsp>!TIOO4R`M!9Nd5R zhVpAu)qDOO_Tq)>CI#f0!~ha{f4-PJikPjAk5$fd%Os>Do+K)&mZ=Qd%(_-)fY zJ=3?1mtW6mQn+u=ZKcv}d-^J`BrgC}b3&6NOz^$iNCBnQVWiZ?_X;7szp1B5>xpVT zO?Z>+DKy7>ds#p$Xp!zFty{yJhMr`ihoT2DGL3W7rds&N&1XxKVS@JR7IupL_s8*c zN+a_H{jPoGJc}bQP|@_)NA@|2mS^ z=JD*--_+myI6U^{*?09EJIT)k_Az%xa)__t%=5+>Qm$I0gUO1oo5a^=W2Ap9oKcQ6 zo`()!E+hfP5;y$G~8 z>&u;D%BfRm$--H`R!cm<(NX<3nmhHKuY83r75o~t!8@l*4@1fp1>`IOLz>@6F%7hl zB4@9cJVJT3!O;CY<8(5j2n_R!3@X0-IobK)ue zC~t2}{1naILYoolegXgvQJCLVBcb85b>gRHckt%xN8y?NVI05E2bpt^vvvTti*^7w zgs@7t^rh^#XD#U5Y>#org&xu!femq*MlW6Ej>d3L>ML(7lK4XMIL(@{W-l}k1*C5} zcI-3}G>&e>(VZd`_{uC4Tyi6GpJw)B_|+l&oP|JFi{_vpX}^Dr*?-Pxr=zCdnyahYUI&YwU9(}|Lch-sKs!A zp<@?X{T`!^Uch!o9XYn;&(W8YPn270^rmXG+e9_58l4I~fo`E;beD*@16%*wTpIxb zh)R4BsPqE6U4{(}^hybgtCfjLBz1LwAJD6L1%hS5t*zn4wzi*?U&S4*VS2mpz5D`1N5#?Oa^JJG4y%viGwey?AYVfLs5~T&TAuBbX*6&YyN_S17IX^f zkm%Gn5?Q-&{7Ll=xv1Z}aMp2tDiA*QW8s_7YrKN1NM=XUN0G;>{en5kCKl%;V?RD$ zPBI#)QRH-V0-UPnvtxs2sv%3d>C$|JsAXz0q~4r8qTVZxs?R^K-cEg9I5*7C^#aO} z7C0JkU&_K(z62T9?!Q^R_g?jgIEoA0u0C&!+ZD`*e%XW!zed@S6Jv#td$2@d3J@A1 z?vbN_EbJ0R+sl=!0^2OdVPqBM;br}(<2c;bHVjpFK)hnza6FTV4+E1RD%>kPUDgWU zKf3=yG{|8GkvFV3faR}h(7^#vyAsN=W)Z#45$#! z6@Yvp*r2~S4xkvo9^P*r^6P|Sf-F(EZ&kku`J<$I+)*E}2;h*PH?$<`Trr!)-Q5sO z#_JtnyTzIn_bdtd{HCsf&=Pk8UTDlC;wOYN;pa1rHH-5QK2{UXEM)tW9x=tU)%pEaEW>q!`u)Pwb0-&Fm!mEV z*F}dHXA$gPls8bn|9n{jgL7fw4YbcMjPv$l`2d|IFCx?J0`m13sS7B_fB=}0=3zS@ zf7o95_#@)mSwlhwgcpX)O9n*~2u)dR2qA=v9XNs!26fo!_IW(D-cGMytM}XeJtO@; zGD*|h!a*$~E4@9evpLp^-iFbtcd+XG6>2~O5W9c{ga8Jx1-LxZQ+W+QIpS-;OX25) z?xQ6YPH8}7fGar^%q?3gKyc-Fu6OgOJ<;X&1=2OOo(7lM_oL3%r4x#EO;;q=m7JEa zy7=12fkVH1JwHbdRXDN*M}4P!R24^dao!qQ;K(6%A3y3MI5I!$|DPj= z*ebM0A>F>hjgcyu^JBhOEb!t`6)#TWthb4xis$FUIJKGwC#!kzFnI8{!Gn=6ivV{J z;`{MmOwxsU@9<*Yn*;AP=Q2fpKE$)Bu zyf%A2UONq5`{4WN9Nb@z^Vn&F$FdiA4j9kk-JWy8bF-`VF5-ghh4XSj{Q+>-zXx}9 zEY#_^!1d1Jst=s^dh=WrUWymss4PW}irg{_4?!UO=d#lO8yn?()F-?%NA+(I`Ai`r z!D>coLJLTS0RN;G1QF%Cz-F-vfXw#*{!YP5t_c6sv)Svf!CL?AY}N`-;)?96ux~=g znVXkN74|Luxgs+v?AvF3ex>r6ON$D7wS0bAR%5T7_4zyH;|*C#Vc+GSD^icbzE}R; hkU$jndii%l4p7)X@z0f=Qei(djxX;~3j2{D{4cM!nEU_$ diff --git a/email-templates/components/base-template.tsx b/email-templates/components/base-template.tsx index 52038770..7945a46a 100644 --- a/email-templates/components/base-template.tsx +++ b/email-templates/components/base-template.tsx @@ -49,9 +49,9 @@ export const BaseTemplate = ({ ); // The heading font is self-hosted by the app, so it loads from the same origin as the logo and works without third-party requests -// Clients without web font support fall back to the serif stack declared on the headings +// Clients without web font support fall back to the system stack declared on the headings const fontFaceCss = (appURL: string) => - `@font-face{font-family:'Gloock';font-style:normal;font-weight:400;mso-font-alt:'Georgia';src:url(${appURL}/fonts/Gloock-Regular.woff) format('woff');}`; + `@font-face{font-family:'Funnel Display';font-style:normal;font-weight:300 800;mso-font-alt:'Arial';src:url(${appURL}/fonts/FunnelDisplay-latin.woff2) format('woff2');}`; const bodyStyle = { margin: 0, @@ -84,9 +84,10 @@ const logoStyle = { }; const appNameStyle = { - fontFamily: fonts.serif, + fontFamily: fonts.display, fontSize: '20px', lineHeight: '28px', + fontWeight: 600, color: colors.foreground, textDecoration: 'none' }; diff --git a/email-templates/components/card-header.tsx b/email-templates/components/card-header.tsx index 7e27f7c9..e016e907 100644 --- a/email-templates/components/card-header.tsx +++ b/email-templates/components/card-header.tsx @@ -15,10 +15,10 @@ export default function CardHeader({ title }: CardHeaderProps) { const titleStyle = { margin: '0 0 16px 0', - fontFamily: fonts.serif, + fontFamily: fonts.display, fontSize: '26px', lineHeight: '32px', - fontWeight: 400, + fontWeight: 600, letterSpacing: '-0.01em', color: colors.foreground }; diff --git a/email-templates/components/theme.ts b/email-templates/components/theme.ts index 794ac8dd..39504695 100644 --- a/email-templates/components/theme.ts +++ b/email-templates/components/theme.ts @@ -1,20 +1,21 @@ // Design tokens mirrored from the frontend's app.css (light theme) so emails match the app // Email clients have no CSS variable or oklch support, so the values are the resolved hex equivalents export const colors = { - background: '#f5f5f5', + background: '#fafafa', card: '#ffffff', - border: '#e5e5e5', - muted: '#fafafa', + border: '#e8e8e8', + muted: '#f5f5f5', foreground: '#0a0a0a', text: '#404040', - mutedForeground: '#737373', - primary: '#171717', + mutedForeground: '#5e5e5e', + primary: '#0a0a0a', primaryForeground: '#ffffff' }; export const fonts = { sans: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif", - serif: "Gloock, Georgia, 'Times New Roman', serif", + display: + "'Funnel Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif", mono: "'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace" }; diff --git a/frontend/messages/en.json b/frontend/messages/en.json index e3c907f2..7b273c92 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -440,12 +440,6 @@ "select_an_option": "Select an option", "select_user": "Select User", "error": "Error", - "select_an_accent_color_to_customize_the_appearance_of_pocket_id": "Select an accent color to customize the appearance of Pocket ID.", - "accent_color": "Accent Color", - "custom_accent_color": "Custom Accent Color", - "custom_accent_color_description": "Enter a custom color using valid CSS color formats (e.g., hex, rgb, hsl).", - "color_value": "Color Value", - "apply": "Apply", "signup_token": "Signup Token", "create_a_signup_token_to_allow_new_user_registration": "Create a signup token to allow new user registration.", "usage_limit": "Usage Limit", @@ -700,5 +694,25 @@ "set_custom_client_id": "Set custom client ID", "confidential_client": "Confidential Client", "confidential_client_description": "Authenticates with a client secret. For apps with a backend that can keep the secret safe.", - "public_client_type_description": "Has no client secret and uses PKCE instead. For single-page, mobile and desktop apps." + "public_client_type_description": "Has no client secret and uses PKCE instead. For single-page, mobile and desktop apps.", + "color_theme": "Color theme", + "color_theme_description": "Colors for everyone, on sign-in pages and in the app, in light and dark mode.", + "color_theme_mono": "Mono", + "color_theme_mist": "Mist", + "color_theme_sage": "Sage", + "color_theme_midnight": "Midnight", + "color_theme_lavender": "Lavender", + "custom_theme_color": "Custom theme color", + "custom_theme_color_description": "Any CSS color, like #2f6f4e.", + "color": "Color", + "preview": "Preview", + "sidebar": "Sidebar", + "use_color": "Use color", + "enter_a_css_color": "Enter a CSS color, like #2f6f4e.", + "use_a_color_without_transparency": "Use a color without transparency, like #2f6f4e.", + "custom_color_note_darkened": "Darkened a little so white text on buttons stays readable.", + "custom_color_note_lightened": "Lightened in dark mode so buttons stand out from the background.", + "custom_color_note_edge": "Buttons get a thin border because the color is close to the background.", + "custom_color_note_near_status": "This color is close to the error, warning or success color, so buttons may read as a status.", + "custom": "Custom" } diff --git a/frontend/src/app.css b/frontend/src/app.css index ea332227..f015cb6f 100644 --- a/frontend/src/app.css +++ b/frontend/src/app.css @@ -1,143 +1,371 @@ @import 'tailwindcss'; @import 'tw-animate-css'; @import 'shadcn-svelte/tailwind.css'; +@import './fonts.css'; @variant dark (&:where(.dark, .dark *)); -/* - The default border color has changed to `currentcolor` in Tailwind CSS v4, - so we've added these compatibility styles to make sure everything still - looks the same as it did with Tailwind CSS v3. - - If we ever want to remove these styles, we need to add an explicit border - color utility to any element that depends on these defaults. -*/ -@layer base { - *, - ::after, - ::before, - ::backdrop, - ::file-selector-button { - border-color: var(--color-gray-200, currentcolor); - } - - * { - @apply border-border outline-ring/50; - } - - body { - @apply bg-background text-foreground; - } - - html { - @apply font-sans; - } -} - +/* The values below are the Mono color theme; applyColorTheme in color-theme-util.ts overrides the neutrals and the primary family at runtime */ :root { - --radius: 0.625rem; - --background: oklch(1 0 0); - --foreground: oklch(0.145 0 0); - --card: oklch(1 0 0); - --card-foreground: oklch(0.145 0 0); - --popover: oklch(1 0 0); - --popover-foreground: oklch(0.145 0 0); - --primary: oklch(0.205 0 0); - --primary-foreground: oklch(0.985 0 0); - --secondary: oklch(0.97 0 0); - --secondary-foreground: oklch(0.205 0 0); - --muted: oklch(0.97 0 0); - --muted-foreground: oklch(0.556 0 0); - --accent: oklch(0.97 0 0); - --accent-foreground: oklch(0.205 0 0); - --destructive: oklch(0.577 0.245 27.325); - --warning: oklch(0.96 0.06 85); - --warning-foreground: oklch(0.32 0.07 70); - --border: oklch(0.922 0 0); - --input: oklch(0.922 0 0); - --ring: oklch(0.708 0 0); - --chart-1: oklch(0.646 0.222 41.116); - --chart-2: oklch(0.6 0.118 184.704); - --chart-3: oklch(0.398 0.07 227.392); - --chart-4: oklch(0.828 0.189 84.429); - --chart-5: oklch(0.769 0.188 70.08); - --sidebar: oklch(0.985 0 0); - --sidebar-foreground: oklch(0.145 0 0); - --sidebar-primary: oklch(0.205 0 0); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.97 0 0); - --sidebar-accent-foreground: oklch(0.205 0 0); - --sidebar-border: oklch(0.922 0 0); - --sidebar-ring: oklch(0.708 0 0); + --h-xs: 26px; + --h-sm: 34px; + --h-md: 42px; + --h-lg: 48px; + --h-xl: 48px; + --row-dense: 36px; + --row: 44px; + --row-2line: 52px; + --col-auth: 464px; + --col-content: 1120px; + /* The identity column gives way on tablets so the other columns fit without scrolling sideways */ + --table-id-max: clamp(240px, 36vw, 440px); + --sidebar-w: 256px; + --rail-w: 60px; + --dialog-sm: 420px; + --dialog-md: 480px; + --dialog-lg: 560px; + --sheet-w: 560px; + --palette-w: 640px; + --toast-w: 340px; + --clear-end-phone: 148px; + --z-sticky: 10; + --z-nav: 20; + --z-bar: 30; + --z-overlay: 40; + --z-popover: 50; + --z-toast: 60; + --z-tooltip: 70; + --z-progress: 80; + --halo-width: 3px; + --selection-border: 1.5px; + --dur-fast: 120ms; + --dur-base: 200ms; + --dur-slow: 280ms; + --rise: 4px; + --nudge: 2px; + --slide: 24px; + --press-scale: 0.98; + --pop-scale: 0.96; + --t-success-hold: 800ms; + --t-redirect-fallback: 3000ms; + --t-dim-delay: 200ms; + --t-skeleton-delay: 150ms; + --t-pulse: 1600ms; + --t-spin: 800ms; + --t-caret: 1000ms; + --t-progress: 3000ms; + + --canvas: #ffffff; + --surface: #ffffff; + --surface-raised: #ffffff; + --surface-sunken: #f5f5f5; + --fill-muted: #f2f2f2; + --fill-hover: #eeeeee; + --fill-row-hover: #fafafa; + --fill-selected: #ebebeb; + --fill-skeleton: #eeeeee; + --border: #e8e8e8; + --border-strong: #8c8c8c; + --border-control: #8c8c8c; + --fg: #0a0a0a; + --fg-muted: #5e5e5e; + --fg-subtle: #a3a3a3; + --inverse: #111111; + --inverse-fg: #fafafa; + --inverse-muted: #b5b5b5; + --inverse-hover: #262626; + --inverse-border: transparent; + --success-solid: #319751; + --success-fg: #206b38; + --success-soft: #ebfaed; + --success-border: #bcdfc2; + --warning-solid: #c5770f; + --warning-fg: #864e18; + --warning-soft: #fff6e4; + --warning-border: #eecf9c; + --danger-solid: #d73337; + --danger-fg: #b32228; + --danger-soft: #fff1f0; + --danger-border: #f9c1bf; + --danger-fill: #c52b30; + --danger-fill-hover: #b32228; + --danger-fill-fg: #ffffff; + --info-solid: #5e5e5e; + --info-fg: #0a0a0a; + --info-soft: #f5f5f5; + --info-border: #e8e8e8; + --well-light: #f6f4f0; + --well-dark: #242220; + --well-light-fg: #57534d; + --well-dark-fg: #bab4aa; + --qr-bg: #ffffff; + --qr-fg: #121212; + --scrim: rgb(18 17 16 / 0.4); + --ring: #0a0a0a; + --ring-halo: rgb(10 10 10 / 0.24); + --elevation-popover: 0 1px 2px rgb(31 29 27 / 0.06), 0 8px 24px -6px rgb(31 29 27 / 0.14); + --elevation-overlay: 0 2px 4px rgb(31 29 27 / 0.06), 0 16px 40px -8px rgb(31 29 27 / 0.2); + --elevation-thumb: 0 1px 2px rgb(0 0 0 / 0.2); + --elevation-selected: 0 1px 2px rgb(31 29 27 / 0.06), 0 4px 14px rgb(31 29 27 / 0.07); + --border-selected: color-mix(in oklab, var(--border-strong) 40%, var(--border)); + --sidebar: #fafafa; + --primary: #0a0a0a; + --primary-foreground: #ffffff; + --primary-hover: #262626; + --primary-control: #0a0a0a; + --primary-control-foreground: #ffffff; + --primary-edge: transparent; + --fw-display-l: 600; + --fw-display-m: 600; + + /* shadcn-svelte variables, mapped onto the tokens above so the ui/ components keep their class names */ + --background: var(--canvas); + --foreground: var(--fg); + --card: var(--surface); + --card-foreground: var(--fg); + --popover: var(--surface-raised); + --popover-foreground: var(--fg); + --secondary: var(--fill-muted); + --secondary-foreground: var(--fg); + --muted: var(--fill-muted); + --muted-foreground: var(--fg-muted); + --accent: var(--fill-hover); + --accent-foreground: var(--fg); + --destructive: var(--danger-fg); + --destructive-foreground: var(--danger-fill-fg); + --warning: var(--warning-soft); + --warning-foreground: var(--warning-fg); + --input: var(--fill-muted); + --sidebar-foreground: var(--fg); + --sidebar-primary: var(--primary); + --sidebar-primary-foreground: var(--primary-foreground); + --sidebar-accent: var(--fill-selected); + --sidebar-accent-foreground: var(--fg); + --sidebar-border: var(--border); + --sidebar-ring: var(--ring); } .dark { - --background: oklch(0.145 0 0); - --foreground: oklch(0.985 0 0); - --card: oklch(0.205 0 0); - --card-foreground: oklch(0.985 0 0); - --popover: oklch(0.205 0 0); - --popover-foreground: oklch(0.985 0 0); - --primary: oklch(0.922 0 0); - --primary-foreground: oklch(0.205 0 0); - --secondary: oklch(0.269 0 0); - --secondary-foreground: oklch(0.985 0 0); - --muted: oklch(0.269 0 0); - --muted-foreground: oklch(0.708 0 0); - --accent: oklch(0.269 0 0); - --accent-foreground: oklch(0.985 0 0); - --destructive: oklch(0.704 0.191 22.216); - --warning: oklch(0.42 0.09 70); - --warning-foreground: oklch(0.93 0.03 85); - --border: oklch(1 0 0 / 10%); - --input: oklch(1 0 0 / 15%); - --ring: oklch(0.556 0 0); - --chart-1: oklch(0.488 0.243 264.376); - --chart-2: oklch(0.696 0.17 162.48); - --chart-3: oklch(0.769 0.188 70.08); - --chart-4: oklch(0.627 0.265 303.9); - --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.205 0 0); - --sidebar-foreground: oklch(0.985 0 0); - --sidebar-primary: oklch(0.488 0.243 264.376); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.269 0 0); - --sidebar-accent-foreground: oklch(0.985 0 0); - --sidebar-border: oklch(1 0 0 / 10%); - --sidebar-ring: oklch(0.556 0 0); + --canvas: #000000; + --surface: #000000; + --surface-raised: #121212; + --surface-sunken: #0e0e0e; + --fill-muted: #171717; + --fill-hover: #1a1a1a; + --fill-row-hover: #0c0c0c; + --fill-selected: #1f1f1f; + --fill-skeleton: #1a1a1a; + --border: #1f1f1f; + --border-strong: #6b6b6b; + --border-control: #6b6b6b; + --fg: #ededed; + --fg-muted: #a1a1a1; + --fg-subtle: #5c5c5c; + --inverse: #1f1f1f; + --inverse-fg: #ededed; + --inverse-muted: #b5b5b5; + --inverse-hover: #2e2e2e; + --inverse-border: #333333; + --success-solid: #54b66e; + --success-fg: #83d494; + --success-soft: #1a2b1d; + --success-border: #2c5235; + --warning-solid: #eba941; + --warning-fg: #f5ca7a; + --warning-soft: #342611; + --warning-border: #68491a; + --danger-solid: #f45a56; + --danger-fg: #ff8f8d; + --danger-soft: #3b1e1e; + --danger-border: #813939; + --danger-fill: #c52b30; + --danger-fill-hover: #b32228; + --danger-fill-fg: #ffffff; + --info-solid: #a1a1a1; + --info-fg: #ededed; + --info-soft: #0e0e0e; + --info-border: #1f1f1f; + --well-light: #f6f4f0; + --well-dark: #242220; + --well-light-fg: #57534d; + --well-dark-fg: #bab4aa; + --qr-bg: #ffffff; + --qr-fg: #121212; + --scrim: rgb(0 0 0 / 0.6); + --ring: #ededed; + --ring-halo: rgb(237 237 237 / 0.24); + --elevation-popover: 0 1px 2px rgb(0 0 0 / 0.4), 0 8px 24px -6px rgb(0 0 0 / 0.6); + --elevation-overlay: 0 2px 4px rgb(0 0 0 / 0.4), 0 16px 40px -8px rgb(0 0 0 / 0.7); + --elevation-thumb: 0 1px 2px rgb(0 0 0 / 0.5); + --elevation-selected: 0 1px 2px rgb(0 0 0 / 0.4), 0 4px 14px rgb(0 0 0 / 0.5); + --sidebar: #0a0a0a; + --primary: #ededed; + --primary-foreground: #000000; + --primary-hover: #d6d6d6; + --primary-control: #ededed; + --primary-control-foreground: #000000; + --primary-edge: transparent; + --fw-display-l: 500; + --fw-display-m: 500; + color-scheme: dark; +} + +/* Reduced motion: the OS setting and the Disable animations setting share one token collapse */ +html.no-motion { + --dur-fast: 0ms; + --dur-base: 0ms; + --dur-slow: 0ms; + --rise: 0px; + --nudge: 0px; + --slide: 0px; + --press-scale: 1; + --pop-scale: 1; + --t-pulse: 0ms; + --t-caret: 0ms; + --t-progress: 0ms; + --t-spin: 1200ms; +} + +@media (prefers-reduced-motion: reduce) { + :root { + --dur-fast: 0ms; + --dur-base: 0ms; + --dur-slow: 0ms; + --rise: 0px; + --nudge: 0px; + --slide: 0px; + --press-scale: 1; + --pop-scale: 1; + --t-pulse: 0ms; + --t-caret: 0ms; + --t-progress: 0ms; + --t-spin: 1200ms; + } +} + +/* Safety net for motion that does not read the tokens (bits-ui keyframes, svelte-sonner): only spinners and scroll-linked fades keep moving */ +html.no-motion *:not(.animate-spin, .scroll-fade-x, .scroll-fade-y), +html.no-motion *::before, +html.no-motion *::after { + animation-duration: 0s !important; + transition-duration: 0s !important; +} + +@media (prefers-reduced-motion: reduce) { + *:not(.animate-spin, .scroll-fade-x, .scroll-fade-y), + *::before, + *::after { + animation-duration: 0s !important; + transition-duration: 0s !important; + } +} + +/* Set for two frames by setModeInstantly, so light and dark swap at once instead of fading control by control */ +html.theme-switching *, +html.theme-switching *::before, +html.theme-switching *::after { + transition: none !important; +} + +@theme { + --font-sans: 'Funnel Sans', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif; + --font-display: 'Funnel Display', 'Funnel Sans', ui-sans-serif, system-ui, sans-serif; + --font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace; + + --radius-xs: 6px; + --radius-sm: 10px; + --radius-md: 12px; + --radius-lg: 16px; + --radius-xl: 20px; + --radius-2xl: 24px; + --radius-3xl: 28px; + --radius-4xl: 32px; + + --ease-out: cubic-bezier(0.2, 0, 0, 1); + --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); + --ease-in: cubic-bezier(0.4, 0, 1, 1); } @theme inline { - /* Radius (for rounded-*) */ - --radius-sm: calc(var(--radius) - 4px); - --radius-md: calc(var(--radius) - 2px); - --radius-lg: var(--radius); - --radius-xl: calc(var(--radius) + 4px); + --text-display-l: 34px; + --text-display-l--line-height: 42px; + --text-display-l--font-weight: var(--fw-display-l); + --text-display-l--letter-spacing: -0.02em; + --text-display-m: 28px; + --text-display-m--line-height: 36px; + --text-display-m--font-weight: var(--fw-display-m); + --text-display-m--letter-spacing: -0.015em; + --text-display-s: 22px; + --text-display-s--line-height: 30px; + --text-display-s--font-weight: 500; + --text-display-s--letter-spacing: -0.01em; + --text-title: 18px; + --text-title--line-height: 26px; + --text-title--font-weight: 600; + --text-title--letter-spacing: 0em; + --text-heading: 15px; + --text-heading--line-height: 22px; + --text-heading--font-weight: 600; + --text-heading--letter-spacing: 0em; + --text-body-l: 17px; + --text-body-l--line-height: 26px; + --text-body-l--font-weight: 400; + --text-body-l--letter-spacing: 0em; + --text-body: 15px; + --text-body--line-height: 22px; + --text-body--font-weight: 400; + --text-body--letter-spacing: 0em; + --text-control: 14px; + --text-control--line-height: 20px; + --text-control--font-weight: 400; + --text-control--letter-spacing: 0em; + --text-caption: 13px; + --text-caption--line-height: 18px; + --text-caption--font-weight: 400; + --text-caption--letter-spacing: 0em; + --text-micro: 12px; + --text-micro--line-height: 16px; + --text-micro--font-weight: 500; + --text-micro--letter-spacing: 0.01em; + --text-mono: 14px; + --text-mono--line-height: 20px; + --text-mono--font-weight: 400; + --text-mono--letter-spacing: 0em; + --text-mono-s: 13px; + --text-mono-s--line-height: 18px; + --text-mono-s--font-weight: 400; + --text-mono-s--letter-spacing: 0em; + --text-code-cell: 30px; + --text-code-cell--line-height: 38px; + --text-code-cell--font-weight: 500; + --text-code-cell--letter-spacing: 0em; + + --shadow-popover: var(--elevation-popover); + --shadow-overlay: var(--elevation-overlay); + --shadow-thumb: var(--elevation-thumb); + --shadow-selected: var(--elevation-selected); - /* Colors */ --color-background: var(--background); --color-foreground: var(--foreground); - --color-muted: var(--muted); - --color-muted-foreground: var(--muted-foreground); - --color-popover: var(--popover); - --color-popover-foreground: var(--popover-foreground); --color-card: var(--card); --color-card-foreground: var(--card-foreground); - --color-border: var(--border); - --color-input: var(--input); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); --color-primary: var(--primary); --color-primary-foreground: var(--primary-foreground); --color-secondary: var(--secondary); --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); --color-accent: var(--accent); --color-accent-foreground: var(--accent-foreground); --color-destructive: var(--destructive); --color-destructive-foreground: var(--destructive-foreground); --color-warning: var(--warning); --color-warning-foreground: var(--warning-foreground); + --color-input: var(--input); --color-ring: var(--ring); - --color-radius: var(--radius); - --color-sidebar-background: var(--sidebar-background); + --color-ring-halo: var(--ring-halo); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); @@ -145,37 +373,96 @@ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-border: var(--sidebar-border); --color-sidebar-ring: var(--sidebar-ring); - - /* Font */ - --font-gloock: 'gloock', serif; + --color-scrim: var(--scrim); + --color-canvas: var(--canvas); + --color-surface: var(--surface); + --color-surface-raised: var(--surface-raised); + --color-surface-sunken: var(--surface-sunken); + --color-fill-muted: var(--fill-muted); + --color-fill-hover: var(--fill-hover); + --color-fill-row-hover: var(--fill-row-hover); + --color-fill-selected: var(--fill-selected); + --color-fill-skeleton: var(--fill-skeleton); + --color-border: var(--border); + --color-border-strong: var(--border-strong); + --color-border-selected: var(--border-selected); + --color-fg: var(--fg); + --color-fg-muted: var(--fg-muted); + --color-fg-subtle: var(--fg-subtle); + --color-inverse: var(--inverse); + --color-inverse-fg: var(--inverse-fg); + --color-inverse-muted: var(--inverse-muted); + --color-inverse-hover: var(--inverse-hover); + --color-inverse-border: var(--inverse-border); + --color-success-solid: var(--success-solid); + --color-success-soft: var(--success-soft); + --color-warning-solid: var(--warning-solid); + --color-warning-fg: var(--warning-fg); + --color-danger-solid: var(--danger-solid); + --color-danger-fg: var(--danger-fg); + --color-danger-soft: var(--danger-soft); + --color-danger-fill: var(--danger-fill); + --color-danger-fill-hover: var(--danger-fill-hover); + --color-danger-fill-fg: var(--danger-fill-fg); + --color-well-light: var(--well-light); + --color-well-dark: var(--well-dark); + --color-well-light-fg: var(--well-light-fg); + --color-well-dark-fg: var(--well-dark-fg); + --color-qr-bg: var(--qr-bg); --color-sidebar: var(--sidebar); - --color-chart-5: var(--chart-5); - --color-chart-4: var(--chart-4); - --color-chart-3: var(--chart-3); - --color-chart-2: var(--chart-2); - --color-chart-1: var(--chart-1); - --radius-2xl: calc(var(--radius) * 1.8); - --radius-3xl: calc(var(--radius) * 2.2); - --radius-4xl: calc(var(--radius) * 2.6); + --color-primary-hover: var(--primary-hover); + --color-primary-control: var(--primary-control); + --color-primary-control-foreground: var(--primary-control-foreground); } @layer base { * { - @apply border-border; + @apply border-border outline-ring; } + /* Links and anything else without its own focus style get the standard ring, which component utilities override */ + :focus-visible { + outline: 2px solid var(--ring); + outline-offset: 2px; + } + + html { + font-family: var(--font-sans); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + } + + /* Names are interpolated into sentences, so a long unbroken one wraps instead of pushing the page sideways */ body { - @apply bg-background text-foreground; + @apply bg-canvas text-body text-fg wrap-break-word; } button { @apply cursor-pointer; } - @font-face { - font-family: 'Gloock'; - src: url('/fonts/Gloock-Regular.woff') format('woff'); + /* Text selection stays neutral: the accent marks state, never decoration */ + ::selection { + background: var(--fill-selected); + color: var(--fg); } + + /* Lucide icons keep a constant stroke regardless of their rendered size */ + svg.lucide { + stroke-width: 1.5px; + } + + svg.lucide * { + vector-effect: non-scaling-stroke; + } +} + +/* Compositor-only motion; Tailwind 4 writes scale and translate as their own properties, so they are listed next to transform */ +@utility transition-motion { + transition-property: opacity, transform, translate, scale; + transition-duration: var(--dur-fast); + transition-timing-function: var(--ease-out); } .animate-fade-in { diff --git a/frontend/src/fonts.css b/frontend/src/fonts.css new file mode 100644 index 00000000..0645aa57 --- /dev/null +++ b/frontend/src/fonts.css @@ -0,0 +1,129 @@ +@font-face { + font-family: 'Funnel Display'; + font-style: normal; + font-weight: 300 800; + font-display: swap; + src: url('/fonts/FunnelDisplay-latin-ext.woff2') format('woff2'); + unicode-range: + U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, + U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, + U+A720-A7FF; +} + +@font-face { + font-family: 'Funnel Display'; + font-style: normal; + font-weight: 300 800; + font-display: swap; + src: url('/fonts/FunnelDisplay-latin.woff2') format('woff2'); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Funnel Sans'; + font-style: italic; + font-weight: 300 800; + font-display: swap; + src: url('/fonts/FunnelSans-Italic-latin-ext.woff2') format('woff2'); + unicode-range: + U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, + U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, + U+A720-A7FF; +} + +@font-face { + font-family: 'Funnel Sans'; + font-style: italic; + font-weight: 300 800; + font-display: swap; + src: url('/fonts/FunnelSans-Italic-latin.woff2') format('woff2'); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Funnel Sans'; + font-style: normal; + font-weight: 300 800; + font-display: swap; + src: url('/fonts/FunnelSans-latin-ext.woff2') format('woff2'); + unicode-range: + U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, + U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, + U+A720-A7FF; +} + +@font-face { + font-family: 'Funnel Sans'; + font-style: normal; + font-weight: 300 800; + font-display: swap; + src: url('/fonts/FunnelSans-latin.woff2') format('woff2'); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 500; + font-display: swap; + src: url('/fonts/JetBrainsMono-cyrillic-ext.woff2') format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 500; + font-display: swap; + src: url('/fonts/JetBrainsMono-cyrillic.woff2') format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 500; + font-display: swap; + src: url('/fonts/JetBrainsMono-greek.woff2') format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 500; + font-display: swap; + src: url('/fonts/JetBrainsMono-vietnamese.woff2') format('woff2'); + unicode-range: + U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, + U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 500; + font-display: swap; + src: url('/fonts/JetBrainsMono-latin-ext.woff2') format('woff2'); + unicode-range: + U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, + U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, + U+A720-A7FF; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 500; + font-display: swap; + src: url('/fonts/JetBrainsMono-latin.woff2') format('woff2'); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/frontend/src/lib/components/header/header.svelte b/frontend/src/lib/components/header/header.svelte index d68f3993..3d24ba74 100644 --- a/frontend/src/lib/components/header/header.svelte +++ b/frontend/src/lib/components/header/header.svelte @@ -36,7 +36,7 @@ -

    +

    {m.settings()}

    diff --git a/frontend/src/lib/stores/application-configuration-store.ts b/frontend/src/lib/stores/application-configuration-store.ts index a9eaba6f..b054d8f0 100644 --- a/frontend/src/lib/stores/application-configuration-store.ts +++ b/frontend/src/lib/stores/application-configuration-store.ts @@ -1,6 +1,6 @@ import AppConfigService from '#lib/services/app-config-service.ts'; import type { AppConfig } from '#lib/types/application-configuration.type.ts'; -import { applyAccentColor } from '#lib/utils/accent-color-util.ts'; +import { applyColorTheme } from '#lib/utils/color-theme-util.ts'; import { writable } from 'svelte/store'; const appConfigStore = writable(); @@ -13,7 +13,8 @@ const reload = async () => { }; const set = (appConfig: AppConfig) => { - applyAccentColor(appConfig.accentColor); + applyColorTheme(appConfig.colorTheme); + document.documentElement.classList.toggle('no-motion', appConfig.disableAnimations); appConfigStore.set(appConfig); }; diff --git a/frontend/src/lib/types/application-configuration.type.ts b/frontend/src/lib/types/application-configuration.type.ts index d8b67ed1..26ee3bf6 100644 --- a/frontend/src/lib/types/application-configuration.type.ts +++ b/frontend/src/lib/types/application-configuration.type.ts @@ -11,7 +11,7 @@ export type AppConfig = { ldapEnabled: boolean; disableAnimations: boolean; uiConfigDisabled: boolean; - accentColor: string; + colorTheme: string; requireUserEmail: boolean; tracingEnabled: boolean; iconLibrary: 'default' | 'custom' | 'disabled'; diff --git a/frontend/src/lib/utils/accent-color-util.ts b/frontend/src/lib/utils/accent-color-util.ts deleted file mode 100644 index 775618f8..00000000 --- a/frontend/src/lib/utils/accent-color-util.ts +++ /dev/null @@ -1,58 +0,0 @@ -export function applyAccentColor(accentValue: string) { - if (accentValue === 'default') { - document.documentElement.style.removeProperty('--primary'); - document.documentElement.style.removeProperty('--primary-foreground'); - document.documentElement.style.removeProperty('--ring'); - document.documentElement.style.removeProperty('--sidebar-ring'); - return; - } - - document.documentElement.style.setProperty('--primary', accentValue); - - // Smart foreground color selection based on brightness - const foregroundColor = getContrastingForeground(accentValue); - document.documentElement.style.setProperty('--primary-foreground', foregroundColor); - - // Create proper ring colors based on input format - const ringColor = `color-mix(in srgb, ${accentValue} 50%, transparent)`; - document.documentElement.style.setProperty('--ring', ringColor); - document.documentElement.style.setProperty('--sidebar-ring', ringColor); -} - -function getContrastingForeground(color: string): string { - const brightness = getColorBrightness(color); - - // Use white text for dark colors, black text for light colors - return brightness < 0.55 ? 'oklch(0.98 0 0)' : 'oklch(0.09 0 0)'; -} - -function getColorBrightness(color: string): number { - // Create a temporary element to get computed color - const tempElement = document.createElement('div'); - tempElement.style.color = color; - document.body.appendChild(tempElement); - - const computedColor = window.getComputedStyle(tempElement).color; - document.body.removeChild(tempElement); - - // Parse RGB values from computed color - const rgbMatch = computedColor.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/); - if (!rgbMatch) { - // Fallback: assume medium brightness - return 0.5; - } - - const [, r, g, b] = rgbMatch.map(Number); - - // Calculate relative luminance using the standard formula - // https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html - const sR = r / 255; - const sG = g / 255; - const sB = b / 255; - - const rLinear = sR <= 0.03928 ? sR / 12.92 : Math.pow((sR + 0.055) / 1.055, 2.4); - const gLinear = sG <= 0.03928 ? sG / 12.92 : Math.pow((sG + 0.055) / 1.055, 2.4); - const bLinear = sB <= 0.03928 ? sB / 12.92 : Math.pow((sB + 0.055) / 1.055, 2.4); - - return 0.2126 * rLinear + 0.7152 * gLinear + 0.0722 * bLinear; -} diff --git a/frontend/src/lib/utils/color-theme-util.ts b/frontend/src/lib/utils/color-theme-util.ts new file mode 100644 index 00000000..21e99663 --- /dev/null +++ b/frontend/src/lib/utils/color-theme-util.ts @@ -0,0 +1,452 @@ +import { setMode } from 'mode-watcher'; +import { colorThemes } from './color-themes.ts'; + +// A stored value is a theme id, or custom: for a custom theme built from one color, with a :dark suffix when its sidebar is dark + +type Rgb = [number, number, number]; +type Oklch = { l: number; c: number; h: number }; +type Mode = 'light' | 'dark'; + +export type AccentInputs = { + name: Mode; + surface: Rgb; + canvas: Rgb; + fg: Rgb; + inkFill: Rgb; + inkFillFg: Rgb; + inkHover: Rgb; + borderControl: Rgb; + controlBgs: Rgb[]; + semanticHues: Record; +}; + +export type ColorTheme = { + id: string; + accent: string; + tokens: Record>; + accentInputs: Record; +}; + +export const DEFAULT_COLOR_THEME = 'mono'; + +// sRGB transfer functions +const toLinear = (c: number) => (c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4)); +const toGamma = (c: number) => (c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055); + +// OKLCH to linear sRGB (Björn Ottosson's matrices) +function oklchToLinear({ l, c, h }: Oklch): Rgb { + const hr = (h * Math.PI) / 180; + const a = c * Math.cos(hr); + const b = c * Math.sin(hr); + const L = (l + 0.3963377774 * a + 0.2158037573 * b) ** 3; + const M = (l - 0.1055613458 * a - 0.0638541728 * b) ** 3; + const S = (l - 0.0894841775 * a - 1.291485548 * b) ** 3; + return [ + 4.0767416621 * L - 3.3077115913 * M + 0.2309699292 * S, + -1.2684380046 * L + 2.6097574011 * M - 0.3413193965 * S, + -0.0041960863 * L - 0.7034186147 * M + 1.707614701 * S + ]; +} + +function linearToOklch([r, g, b]: Rgb): Oklch { + const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b); + const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b); + const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b); + const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s; + const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s; + let h = (Math.atan2(B, A) * 180) / Math.PI; + if (h < 0) h += 360; + return { + l: 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s, + c: Math.sqrt(A * A + B * B), + h + }; +} + +const inGamut = (lin: Rgb) => lin.every((v) => v >= -0.0005 && v <= 1.0005); + +// Reduce chroma until the color fits sRGB, keeping lightness and hue (CSS Color 4 style) +function clampChroma(o: Oklch): Oklch { + if (inGamut(oklchToLinear(o))) return o; + let lo = 0; + let hi = o.c; + for (let i = 0; i < 24; i++) { + const mid = (lo + hi) / 2; + if (inGamut(oklchToLinear({ ...o, c: mid }))) lo = mid; + else hi = mid; + } + return { ...o, c: lo }; +} + +function oklchToRgb(o: Oklch): Rgb { + return oklchToLinear(clampChroma(o)).map((v) => + Math.round(Math.min(1, Math.max(0, toGamma(Math.min(1, Math.max(0, v))))) * 255) + ) as Rgb; +} + +const rgbToOklch = (rgb: Rgb) => linearToOklch(rgb.map((v) => toLinear(v / 255)) as Rgb); +const hex = (rgb: Rgb) => '#' + rgb.map((v) => v.toString(16).padStart(2, '0')).join(''); + +function hslToRgb(h: number, s: number, l: number): Rgb { + h = (((h % 360) + 360) % 360) / 360; + const f = (n: number) => { + const k = (n + h * 12) % 12; + const a = s * Math.min(l, 1 - l); + return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1)); + }; + return [f(0), f(8), f(4)].map((v) => Math.round(Math.min(1, Math.max(0, v)) * 255)) as Rgb; +} + +// Parses #rgb, #rrggbb(aa), rgb(), hsl() and oklch(), the formats the custom color dialog and the stored presets use +export function parseColor(input: string): { rgb: Rgb; alpha: number } | null { + const s = String(input).trim().toLowerCase(); + const alphaOf = (v: string | undefined, pct: string | undefined) => + v === undefined || v === '' ? 1 : pct ? +v / 100 : +v; + let m; + if ((m = s.match(/^#([0-9a-f]{3})([0-9a-f])?$/))) + return { + rgb: m[1].split('').map((x) => parseInt(x + x, 16)) as Rgb, + alpha: m[2] ? parseInt(m[2] + m[2], 16) / 255 : 1 + }; + if ((m = s.match(/^#([0-9a-f]{6})([0-9a-f]{2})?$/))) { + const digits = m[1]; + return { + rgb: [0, 2, 4].map((i) => parseInt(digits.slice(i, i + 2), 16)) as Rgb, + alpha: m[2] ? parseInt(m[2], 16) / 255 : 1 + }; + } + if ( + (m = s.match( + /^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)\s*(?:[,/]\s*([\d.]+)(%?))?\s*\)$/ + )) + ) + return { + rgb: [m[1], m[2], m[3]].map((x) => Math.round(+x)) as Rgb, + alpha: alphaOf(m[4], m[5]) + }; + if ( + (m = s.match( + /^hsla?\(\s*([\d.]+)(?:deg)?[\s,]+([\d.]+)%[\s,]+([\d.]+)%\s*(?:[,/]\s*([\d.]+)(%?))?\s*\)$/ + )) + ) + return { rgb: hslToRgb(+m[1], +m[2] / 100, +m[3] / 100), alpha: alphaOf(m[4], m[5]) }; + if ( + (m = s.match(/^oklch\(\s*([\d.]+)(%?)\s+([\d.]+)\s+([\d.]+)\s*(?:\/\s*([\d.]+)(%?))?\s*\)$/)) + ) { + const l = m[2] ? +m[1] / 100 : +m[1]; + return { rgb: oklchToRgb({ l, c: +m[3], h: +m[4] }), alpha: alphaOf(m[5], m[6]) }; + } + return null; +} + +function luminance(rgb: Rgb) { + const [r, g, b] = rgb.map((v) => toLinear(v / 255)); + return 0.2126 * r + 0.7152 * g + 0.0722 * b; +} + +function contrast(a: Rgb, b: Rgb) { + const la = luminance(a); + const lb = luminance(b); + return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05); +} + +const WHITE: Rgb = [255, 255, 255]; +const INK_ON_ACCENT = oklchToRgb({ l: 0.17, c: 0.004, h: 75 }); + +// Lightness search bounds for the accent fit +const FIT_MAX_DEEPEN = 0.12; +const DARK_MIN_SURFACE_CONTRAST = 2.2; +const DARK_MAX_LIFT = 0.3; +const HOVER_STEP = 0.045; +// The near-white ink fill of dark mode needs a larger step than operator colors before its hover is visible +const DARK_INK_HOVER_STEP = 0.07; +// Controls need 3:1, and 3.2 leaves margin for rounding and antialiasing +const CONTROL_TARGET = 3.2; +const CONTROL_MAX_LIFT = 0.12; +// A fill below this contrast against the surface or canvas gets a 1px border so the button keeps its shape +const EDGE_MIN = 1.5; +// An accent within this hue window of a semantic color, at visible chroma, may read as a status +const SEMANTIC_HUE_WINDOW = 20; +const SEMANTIC_MIN_CHROMA = 0.08; + +export type DerivedAccent = { + fill: Rgb; + fillFg: Rgb; + hover: Rgb; + control: Rgb; + controlFg: Rgb; + edge: Rgb | null; + // The fill was darkened so white text passes, or lightened so it stays visible on the dark surface + deepened: boolean; + lifted: boolean; + // The semantic color the accent sits next to, so the picker can warn that a primary may read as a status + nearSemantic: string | null; +}; + +// Derives every primary token for one theme and mode from an operator color, keeping WCAG AA for text and 3:1 for controls +export function deriveAccent(input: string, theme: AccentInputs): DerivedAccent { + const isDefault = !input || input.trim().toLowerCase() === 'default'; + const parsed = isDefault ? null : parseColor(input); + let rgb = parsed && parsed.alpha >= 1 ? parsed.rgb : null; + + // Default, and anything unusable, uses the ink pair: near-black in light, near-white in dark + let fill = theme.inkFill; + let fillFg = theme.inkFillFg; + let hover = theme.inkHover; + let fromOperator = false; + let deepened = false; + let lifted = false; + + if (rgb) { + let o = rgbToOklch(rgb); + + // Keep the operator hue, but deepen by at most FIT_MAX_DEEPEN when that lets white text pass AA + if (contrast(WHITE, rgb) < 4.5) { + for (let d = 0.005; d <= FIT_MAX_DEEPEN + 1e-9; d += 0.005) { + const cand = oklchToRgb({ ...o, l: o.l - d }); + if (contrast(WHITE, cand) >= 4.5) { + rgb = cand; + o = rgbToOklch(cand); + deepened = true; + break; + } + } + } + + // In dark mode, lift fills that would disappear into the surface + if (theme.name === 'dark' && contrast(rgb, theme.surface) < DARK_MIN_SURFACE_CONTRAST) { + for (let d = 0.01; d <= DARK_MAX_LIFT + 1e-9; d += 0.01) { + const cand = oklchToRgb({ ...o, l: o.l + d }); + if (contrast(cand, theme.surface) >= DARK_MIN_SURFACE_CONTRAST) { + rgb = cand; + o = rgbToOklch(cand); + lifted = true; + break; + } + } + } + + // Pick the text color, preferring white, and fall back to ink when neither passes + const textColor = + contrast(WHITE, rgb) >= 4.5 + ? WHITE + : contrast(INK_ON_ACCENT, rgb) >= 4.5 + ? INK_ON_ACCENT + : null; + if (textColor) { + fill = rgb; + fillFg = textColor; + fromOperator = true; + + // Hover moves lightness away from the text color so contrast only grows + const dir = textColor === WHITE ? -1 : 1; + let hl = o.l + dir * HOVER_STEP; + if (hl < 0.1 || hl > 0.96) hl = o.l - dir * HOVER_STEP; + const hov = oklchToRgb({ ...o, l: hl }); + hover = contrast(textColor, hov) >= 4.5 ? hov : rgb; + } + } + + // Switch tracks, checkboxes, radios and the focus ring need 3:1 against every background a control can sit on + const minVs = (c: Rgb) => Math.min(...theme.controlBgs.map((b) => contrast(c, b))); + // The glyph on a control needs 3:1 on the control; prefer the fill's own text color + const glyphFor = (c: Rgb) => + [fillFg, WHITE, INK_ON_ACCENT].find((g) => contrast(g, c) >= 3) || null; + let control: Rgb | null = null; + if (minVs(fill) >= CONTROL_TARGET && glyphFor(fill)) control = fill; + else if (theme.name === 'dark' && fromOperator) { + // In dark mode, lift the control on its own before giving up, so a mid-tone brand color stays the brand color on switches and rings + const oc = rgbToOklch(fill); + for (let d = 0.005; d <= CONTROL_MAX_LIFT + 1e-9; d += 0.005) { + const cand = oklchToRgb({ ...oc, l: oc.l + d }); + if (minVs(cand) >= CONTROL_TARGET && glyphFor(cand)) { + control = cand; + break; + } + } + } + + const needsEdge = + contrast(fill, theme.surface) < EDGE_MIN || contrast(fill, theme.canvas) < EDGE_MIN; + + let nearSemantic: string | null = null; + if (fromOperator) { + const fo = rgbToOklch(fill); + if (fo.c >= SEMANTIC_MIN_CHROMA) { + let best = SEMANTIC_HUE_WINDOW + 1e-9; + for (const [tone, h] of Object.entries(theme.semanticHues)) { + const dh = Math.min(Math.abs(fo.h - h), 360 - Math.abs(fo.h - h)); + if (dh <= best) { + best = dh; + nearSemantic = tone; + } + } + } + } + + return { + fill, + fillFg, + hover, + control: control || theme.fg, + controlFg: control ? glyphFor(control)! : theme.inkFillFg, + edge: needsEdge ? theme.borderControl : null, + deepened, + lifted, + nearSemantic + }; +} + +export function primaryVars(d: DerivedAccent): Record { + const rgba = (rgb: Rgb, a: number) => `rgb(${rgb.join(' ')} / ${a})`; + return { + primary: hex(d.fill), + 'primary-foreground': hex(d.fillFg), + 'primary-hover': hex(d.hover), + 'primary-control': hex(d.control), + 'primary-control-foreground': hex(d.controlFg), + ring: hex(d.control), + 'ring-halo': rgba(d.control, 0.24), + 'primary-edge': d.edge ? hex(d.edge) : 'transparent' + }; +} + +export function parseColorTheme(value: string): { + id: string; + color?: string; + darkSidebar?: boolean; +} { + if (!value.startsWith('custom:')) return { id: value }; + const color = value.slice('custom:'.length); + if (color.endsWith(':dark')) + return { id: 'custom', color: color.slice(0, -':dark'.length), darkSidebar: true }; + return { id: 'custom', color, darkSidebar: false }; +} + +export function customColorTheme(color: string, darkSidebar: boolean) { + return `custom:${color}${darkSidebar ? ':dark' : ''}`; +} + +const themeById = (id: string) => colorThemes.find((t) => t.id === id); + +// A custom theme tints Sage's neutrals with the operator's hue at the same lightness, so contrast stays where Sage has it +// A muted color tints less and a gray one gives plain grays; the accent is the color itself +// A dark sidebar tints Midnight's sidebar tokens the same way, so the rail keeps Midnight's contrast +function customTheme(color: string, darkSidebar: boolean): ColorTheme { + const sage = themeById('sage')!; + const parsed = parseColor(color); + if (!parsed || parsed.alpha < 1) + return { ...themeById(DEFAULT_COLOR_THEME)!, id: 'custom', accent: color }; + const o = rgbToOklch(parsed.rgb); + const k = Math.min(1, o.c / 0.12); + const tint = (value: string) => { + const t = rgbToOklch(parseColor(value)!.rgb); + return hex(oklchToRgb({ l: t.l, c: t.c * k, h: o.h })); + }; + const tokens = {} as ColorTheme['tokens']; + const accentInputs = {} as ColorTheme['accentInputs']; + for (const mode of ['light', 'dark'] as const) { + tokens[mode] = Object.fromEntries( + Object.entries(sage.tokens[mode]).map(([key, value]) => [key, tint(value)]) + ); + if (darkSidebar) { + for (const [key, value] of Object.entries(themeById('midnight')!.tokens[mode])) { + if (key === 'sidebar' || key.startsWith('sidebar-')) tokens[mode][key] = tint(value); + } + } + const t = tokens[mode]; + const rgb = (key: string) => parseColor(t[key])!.rgb; + accentInputs[mode] = { + ...sage.accentInputs[mode], + surface: rgb('surface'), + canvas: rgb('canvas'), + fg: rgb('fg'), + inkFill: rgb('fg'), + inkFillFg: mode === 'light' ? WHITE : rgb('canvas'), + inkHover: + mode === 'light' + ? rgb('inverse-hover') + : oklchToRgb({ + ...rgbToOklch(rgb('fg')), + l: rgbToOklch(rgb('fg')).l - DARK_INK_HOVER_STEP + }), + borderControl: rgb('border-strong'), + controlBgs: [ + 'canvas', + 'surface', + 'surface-raised', + 'surface-sunken', + 'fill-muted', + 'fill-hover', + 'fill-row-hover', + 'fill-selected' + ].map(rgb) + }; + } + return { + ...sage, + id: 'custom', + accent: color, + tokens, + accentInputs, + sidebarVars: darkSidebar ? themeById('midnight')!.sidebarVars : undefined + }; +} + +export function colorThemeFor(value: string): ColorTheme { + const { id, color, darkSidebar } = parseColorTheme(value || DEFAULT_COLOR_THEME); + if (id === 'custom' && color) return customTheme(color, !!darkSidebar); + return themeById(id) || themeById(DEFAULT_COLOR_THEME)!; +} + +// Writes the theme's neutrals and derived primary family for light and dark as one stylesheet that overrides app.css +export function applyColorTheme(value: string) { + const theme = colorThemeFor(value); + const block = (vars: Record) => + Object.entries(vars) + .map(([k, v]) => `--${k}: ${v};`) + .join(' '); + const css = (['light', 'dark'] as const) + .map((mode) => { + const vars = { + ...theme.tokens[mode], + ...primaryVars(deriveAccent(theme.accent, theme.accentInputs[mode])) + }; + return `${mode === 'light' ? 'html:root' : 'html.dark'} { ${block(vars)} }`; + }) + .join('\n'); + + let el = document.getElementById('color-theme'); + if (!el) { + el = document.createElement('style'); + el.id = 'color-theme'; + document.head.appendChild(el); + } + el.textContent = css; +} + +// The light and dark halves of a theme tile: sidebar, page, selected line, text line and the fitted primary +export function colorThemePreview(value: string) { + const theme = colorThemeFor(value); + return (['light', 'dark'] as const).map((mode) => { + const t = theme.tokens[mode]; + return { + mode, + sidebar: t.sidebar, + page: t.canvas, + line: t['fill-selected'], + text: t['fg-muted'], + primary: hex(deriveAccent(theme.accent, theme.accentInputs[mode]).fill) + }; + }); +} + +// mode-watcher's own disableTransitions stays off because it also blocks transitions briefly at load, which cut the authorize animation short +export function setModeInstantly(mode: 'light' | 'dark' | 'system') { + const root = document.documentElement; + root.classList.add('theme-switching'); + setMode(mode); + requestAnimationFrame(() => + requestAnimationFrame(() => root.classList.remove('theme-switching')) + ); +} diff --git a/frontend/src/lib/utils/color-themes.ts b/frontend/src/lib/utils/color-themes.ts new file mode 100644 index 00000000..7c7fd904 --- /dev/null +++ b/frontend/src/lib/utils/color-themes.ts @@ -0,0 +1,590 @@ +// Each theme sets the neutrals for light and dark; color-theme-util.ts derives the primary family from its accent at runtime +import type { ColorTheme } from './color-theme-util.ts'; + +export const colorThemes: ColorTheme[] = [ + { + id: 'mono', + accent: 'default', + tokens: { + light: { + sidebar: '#fafafa', + canvas: '#ffffff', + 'surface-sunken': '#f5f5f5', + 'fill-muted': '#f2f2f2', + 'fill-hover': '#eeeeee', + 'fill-row-hover': '#fafafa', + 'fill-selected': '#ebebeb', + border: '#e8e8e8', + 'border-strong': '#8c8c8c', + fg: '#0a0a0a', + 'fg-muted': '#5e5e5e', + 'fg-subtle': '#a3a3a3', + inverse: '#111111', + 'inverse-fg': '#fafafa', + 'inverse-muted': '#b5b5b5', + 'inverse-hover': '#262626', + surface: '#ffffff', + 'surface-raised': '#ffffff', + 'fill-skeleton': '#eeeeee', + 'border-control': '#8c8c8c', + 'border-field': '#8c8c8c', + 'on-solid': '#ffffff', + 'info-solid': '#5e5e5e', + 'info-fg': '#0a0a0a', + 'info-soft': '#f5f5f5', + 'info-border': '#e8e8e8', + 'qr-fg': '#121212' + }, + dark: { + sidebar: '#0a0a0a', + canvas: '#000000', + 'surface-sunken': '#0e0e0e', + 'fill-muted': '#171717', + 'fill-hover': '#1a1a1a', + 'fill-row-hover': '#0c0c0c', + 'fill-selected': '#1f1f1f', + border: '#1f1f1f', + 'border-strong': '#6b6b6b', + fg: '#ededed', + 'fg-muted': '#a1a1a1', + 'fg-subtle': '#5c5c5c', + inverse: '#1f1f1f', + 'inverse-fg': '#ededed', + 'inverse-muted': '#b5b5b5', + 'inverse-hover': '#2e2e2e', + 'inverse-border': '#333333', + surface: '#000000', + 'surface-raised': '#121212', + 'fill-skeleton': '#1a1a1a', + 'border-control': '#6b6b6b', + 'border-field': '#6b6b6b', + 'on-solid': '#0a0a0a', + 'info-solid': '#a1a1a1', + 'info-fg': '#ededed', + 'info-soft': '#0e0e0e', + 'info-border': '#1f1f1f', + 'qr-fg': '#121212' + } + }, + accentInputs: { + light: { + name: 'light', + surface: [255, 255, 255], + canvas: [255, 255, 255], + fg: [10, 10, 10], + inkFill: [10, 10, 10], + inkFillFg: [255, 255, 255], + inkHover: [38, 38, 38], + borderControl: [140, 140, 140], + controlBgs: [ + [255, 255, 255], + [255, 255, 255], + [255, 255, 255], + [245, 245, 245], + [242, 242, 242], + [238, 238, 238], + [250, 250, 250], + [235, 235, 235] + ], + semanticHues: { + danger: 25, + warning: 65, + success: 150 + } + }, + dark: { + name: 'dark', + surface: [0, 0, 0], + canvas: [0, 0, 0], + fg: [237, 237, 237], + inkFill: [237, 237, 237], + inkFillFg: [0, 0, 0], + inkHover: [214, 214, 214], + borderControl: [107, 107, 107], + controlBgs: [ + [0, 0, 0], + [0, 0, 0], + [18, 18, 18], + [14, 14, 14], + [23, 23, 23], + [26, 26, 26], + [12, 12, 12], + [31, 31, 31] + ], + semanticHues: { + danger: 25, + warning: 75, + success: 150 + } + } + } + }, + { + id: 'mist', + accent: 'oklch(0.6 0.2 240)', + tokens: { + light: { + sidebar: '#f4f5f7', + canvas: '#ffffff', + 'surface-sunken': '#f7f8fa', + 'fill-muted': '#f0f2f5', + 'fill-hover': '#eceef2', + 'fill-row-hover': '#f9fafb', + 'fill-selected': '#e6e9ee', + border: '#e3e6eb', + 'border-strong': '#868d99', + fg: '#0f1218', + 'fg-muted': '#545b67', + 'fg-subtle': '#9aa1ad', + inverse: '#161a21', + 'inverse-fg': '#f4f5f7', + 'inverse-muted': '#b3b9c4', + 'inverse-hover': '#262b34', + surface: '#ffffff', + 'surface-raised': '#ffffff', + 'fill-skeleton': '#eceef2', + 'border-control': '#868d99', + 'border-field': '#868d99', + 'on-solid': '#ffffff', + 'info-solid': '#545b67', + 'info-fg': '#0f1218', + 'info-soft': '#f7f8fa', + 'info-border': '#e3e6eb', + 'qr-fg': '#121212' + }, + dark: { + sidebar: '#15171b', + canvas: '#1b1e23', + 'surface-sunken': '#202328', + 'fill-muted': '#262a30', + 'fill-hover': '#272b31', + 'fill-row-hover': '#1f2227', + 'fill-selected': '#2c3138', + border: '#2e333a', + 'border-strong': '#737b87', + fg: '#eef0f3', + 'fg-muted': '#a3aab5', + 'fg-subtle': '#646b76', + inverse: '#2c3138', + 'inverse-fg': '#eef0f3', + 'inverse-muted': '#c0c6cf', + 'inverse-hover': '#3a4048', + 'inverse-border': '#48505a', + surface: '#1b1e23', + 'surface-raised': '#23272d', + 'fill-skeleton': '#272b31', + 'border-control': '#737b87', + 'border-field': '#737b87', + 'on-solid': '#15171b', + 'info-solid': '#a3aab5', + 'info-fg': '#eef0f3', + 'info-soft': '#202328', + 'info-border': '#2e333a', + 'qr-fg': '#121212' + } + }, + accentInputs: { + light: { + name: 'light', + surface: [255, 255, 255], + canvas: [255, 255, 255], + fg: [15, 18, 24], + inkFill: [15, 18, 24], + inkFillFg: [255, 255, 255], + inkHover: [38, 43, 52], + borderControl: [134, 141, 153], + controlBgs: [ + [255, 255, 255], + [255, 255, 255], + [255, 255, 255], + [247, 248, 250], + [240, 242, 245], + [236, 238, 242], + [249, 250, 251], + [230, 233, 238] + ], + semanticHues: { + danger: 25, + warning: 65, + success: 150 + } + }, + dark: { + name: 'dark', + surface: [27, 30, 35], + canvas: [27, 30, 35], + fg: [238, 240, 243], + inkFill: [238, 240, 243], + inkFillFg: [27, 30, 35], + inkHover: [215, 217, 220], + borderControl: [115, 123, 135], + controlBgs: [ + [27, 30, 35], + [27, 30, 35], + [35, 39, 45], + [32, 35, 40], + [38, 42, 48], + [39, 43, 49], + [31, 34, 39], + [44, 49, 56] + ], + semanticHues: { + danger: 25, + warning: 75, + success: 150 + } + } + } + }, + { + id: 'sage', + accent: 'oklch(0.65 0.2 150)', + tokens: { + light: { + sidebar: '#f1f4ee', + canvas: '#ffffff', + 'surface-sunken': '#f6f8f4', + 'fill-muted': '#edf1ea', + 'fill-hover': '#e8ede4', + 'fill-row-hover': '#f8faf6', + 'fill-selected': '#dfe7da', + border: '#e0e6db', + 'border-strong': '#838c7e', + fg: '#121611', + 'fg-muted': '#515a4e', + 'fg-subtle': '#98a093', + inverse: '#1a1f19', + 'inverse-fg': '#f1f4ee', + 'inverse-muted': '#b7bfb2', + 'inverse-hover': '#2b3229', + surface: '#ffffff', + 'surface-raised': '#ffffff', + 'fill-skeleton': '#e8ede4', + 'border-control': '#838c7e', + 'border-field': '#838c7e', + 'on-solid': '#ffffff', + 'info-solid': '#515a4e', + 'info-fg': '#121611', + 'info-soft': '#f6f8f4', + 'info-border': '#e0e6db', + 'qr-fg': '#121212' + }, + dark: { + sidebar: '#151814', + canvas: '#1b1f1a', + 'surface-sunken': '#20241e', + 'fill-muted': '#262b24', + 'fill-hover': '#272c25', + 'fill-row-hover': '#1f231e', + 'fill-selected': '#2d342a', + border: '#2f362c', + 'border-strong': '#747d6f', + fg: '#eef2eb', + 'fg-muted': '#a5ad9e', + 'fg-subtle': '#656d5f', + inverse: '#2d342a', + 'inverse-fg': '#eef2eb', + 'inverse-muted': '#c3cabd', + 'inverse-hover': '#3b4238', + 'inverse-border': '#4a5246', + surface: '#1b1f1a', + 'surface-raised': '#242922', + 'fill-skeleton': '#272c25', + 'border-control': '#747d6f', + 'border-field': '#747d6f', + 'on-solid': '#151814', + 'info-solid': '#a5ad9e', + 'info-fg': '#eef2eb', + 'info-soft': '#20241e', + 'info-border': '#2f362c', + 'qr-fg': '#121212' + } + }, + accentInputs: { + light: { + name: 'light', + surface: [255, 255, 255], + canvas: [255, 255, 255], + fg: [18, 22, 17], + inkFill: [18, 22, 17], + inkFillFg: [255, 255, 255], + inkHover: [43, 50, 41], + borderControl: [131, 140, 126], + controlBgs: [ + [255, 255, 255], + [255, 255, 255], + [255, 255, 255], + [246, 248, 244], + [237, 241, 234], + [232, 237, 228], + [248, 250, 246], + [223, 231, 218] + ], + semanticHues: { + danger: 25, + warning: 65, + success: 150 + } + }, + dark: { + name: 'dark', + surface: [27, 31, 26], + canvas: [27, 31, 26], + fg: [238, 242, 235], + inkFill: [238, 242, 235], + inkFillFg: [27, 31, 26], + inkHover: [215, 219, 212], + borderControl: [116, 125, 111], + controlBgs: [ + [27, 31, 26], + [27, 31, 26], + [36, 41, 34], + [32, 36, 30], + [38, 43, 36], + [39, 44, 37], + [31, 35, 30], + [45, 52, 42] + ], + semanticHues: { + danger: 25, + warning: 75, + success: 150 + } + } + } + }, + { + id: 'midnight', + accent: 'oklch(0.6 0.15 180)', + tokens: { + light: { + sidebar: '#151b2e', + canvas: '#ffffff', + 'surface-sunken': '#f6f7fa', + 'fill-muted': '#eff1f5', + 'fill-hover': '#ebedf2', + 'fill-row-hover': '#f9fafc', + 'fill-selected': '#e4e7ee', + border: '#e2e5ec', + 'border-strong': '#858c9b', + fg: '#0e1220', + 'fg-muted': '#535a6b', + 'fg-subtle': '#999fad', + inverse: '#151b2e', + 'inverse-fg': '#f3f5f9', + 'inverse-muted': '#b4bccd', + 'inverse-hover': '#242c44', + surface: '#ffffff', + 'surface-raised': '#ffffff', + 'fill-skeleton': '#ebedf2', + 'border-control': '#858c9b', + 'border-field': '#858c9b', + 'on-solid': '#ffffff', + 'info-solid': '#535a6b', + 'info-fg': '#0e1220', + 'info-soft': '#f6f7fa', + 'info-border': '#e2e5ec', + 'qr-fg': '#121212' + }, + dark: { + sidebar: '#0d111d', + canvas: '#161a25', + 'surface-sunken': '#1b1f2a', + 'fill-muted': '#222735', + 'fill-hover': '#232836', + 'fill-row-hover': '#1a1e29', + 'fill-selected': '#292f3e', + border: '#2a3040', + 'border-strong': '#727a8c', + fg: '#edf0f6', + 'fg-muted': '#a2aabb', + 'fg-subtle': '#626a7b', + inverse: '#292f3e', + 'inverse-fg': '#edf0f6', + 'inverse-muted': '#c0c7d4', + 'inverse-hover': '#363d4e', + 'inverse-border': '#454d60', + surface: '#161a25', + 'surface-raised': '#1f2430', + 'fill-skeleton': '#232836', + 'border-control': '#727a8c', + 'border-field': '#727a8c', + 'on-solid': '#0d111d', + 'info-solid': '#a2aabb', + 'info-fg': '#edf0f6', + 'info-soft': '#1b1f2a', + 'info-border': '#2a3040', + 'qr-fg': '#121212' + } + }, + accentInputs: { + light: { + name: 'light', + surface: [255, 255, 255], + canvas: [255, 255, 255], + fg: [14, 18, 32], + inkFill: [14, 18, 32], + inkFillFg: [255, 255, 255], + inkHover: [36, 44, 68], + borderControl: [133, 140, 155], + controlBgs: [ + [255, 255, 255], + [255, 255, 255], + [255, 255, 255], + [246, 247, 250], + [239, 241, 245], + [235, 237, 242], + [249, 250, 252], + [228, 231, 238] + ], + semanticHues: { + danger: 25, + warning: 65, + success: 150 + } + }, + dark: { + name: 'dark', + surface: [22, 26, 37], + canvas: [22, 26, 37], + fg: [237, 240, 246], + inkFill: [237, 240, 246], + inkFillFg: [22, 26, 37], + inkHover: [214, 217, 223], + borderControl: [114, 122, 140], + controlBgs: [ + [22, 26, 37], + [22, 26, 37], + [31, 36, 48], + [27, 31, 42], + [34, 39, 53], + [35, 40, 54], + [26, 30, 41], + [41, 47, 62] + ], + semanticHues: { + danger: 25, + warning: 75, + success: 150 + } + } + } + }, + { + id: 'lavender', + accent: 'oklch(0.6 0.24 300)', + tokens: { + light: { + sidebar: '#f5f4f9', + canvas: '#ffffff', + 'surface-sunken': '#f8f7fb', + 'fill-muted': '#f0eef6', + 'fill-hover': '#ebe9f3', + 'fill-row-hover': '#faf9fc', + 'fill-selected': '#e6e2f1', + border: '#e5e2ee', + 'border-strong': '#888498', + fg: '#14121b', + 'fg-muted': '#56526a', + 'fg-subtle': '#a19db0', + inverse: '#1b1824', + 'inverse-fg': '#f5f4f9', + 'inverse-muted': '#b9b5c8', + 'inverse-hover': '#2c2838', + surface: '#ffffff', + 'surface-raised': '#ffffff', + 'fill-skeleton': '#ebe9f3', + 'border-control': '#888498', + 'border-field': '#888498', + 'on-solid': '#ffffff', + 'info-solid': '#56526a', + 'info-fg': '#14121b', + 'info-soft': '#f8f7fb', + 'info-border': '#e5e2ee', + 'qr-fg': '#121212' + }, + dark: { + sidebar: '#16141c', + canvas: '#1c1a23', + 'surface-sunken': '#211e29', + 'fill-muted': '#27242f', + 'fill-hover': '#292632', + 'fill-row-hover': '#201d27', + 'fill-selected': '#302c3c', + border: '#312d3c', + 'border-strong': '#787387', + fg: '#f1eff6', + 'fg-muted': '#aaa5ba', + 'fg-subtle': '#6a6579', + inverse: '#302c3c', + 'inverse-fg': '#f1eff6', + 'inverse-muted': '#c7c2d4', + 'inverse-hover': '#3e394c', + 'inverse-border': '#4c465c', + surface: '#1c1a23', + 'surface-raised': '#25222e', + 'fill-skeleton': '#292632', + 'border-control': '#787387', + 'border-field': '#787387', + 'on-solid': '#16141c', + 'info-solid': '#aaa5ba', + 'info-fg': '#f1eff6', + 'info-soft': '#211e29', + 'info-border': '#312d3c', + 'qr-fg': '#121212' + } + }, + accentInputs: { + light: { + name: 'light', + surface: [255, 255, 255], + canvas: [255, 255, 255], + fg: [20, 18, 27], + inkFill: [20, 18, 27], + inkFillFg: [255, 255, 255], + inkHover: [44, 40, 56], + borderControl: [136, 132, 152], + controlBgs: [ + [255, 255, 255], + [255, 255, 255], + [255, 255, 255], + [248, 247, 251], + [240, 238, 246], + [235, 233, 243], + [250, 249, 252], + [230, 226, 241] + ], + semanticHues: { + danger: 25, + warning: 65, + success: 150 + } + }, + dark: { + name: 'dark', + surface: [28, 26, 35], + canvas: [28, 26, 35], + fg: [241, 239, 246], + inkFill: [241, 239, 246], + inkFillFg: [28, 26, 35], + inkHover: [218, 216, 223], + borderControl: [120, 115, 135], + controlBgs: [ + [28, 26, 35], + [28, 26, 35], + [37, 34, 46], + [33, 30, 41], + [39, 36, 47], + [41, 38, 50], + [32, 29, 39], + [48, 44, 60] + ], + semanticHues: { + danger: 25, + warning: 75, + success: 150 + } + } + } + } +]; diff --git a/frontend/src/routes/device/+page.svelte b/frontend/src/routes/device/+page.svelte index 63942789..9af43b64 100644 --- a/frontend/src/routes/device/+page.svelte +++ b/frontend/src/routes/device/+page.svelte @@ -176,7 +176,7 @@ /> {/if} -

    +

    {m.authorize_device()}

    {#if errorMessage} diff --git a/frontend/src/routes/interaction/+page.svelte b/frontend/src/routes/interaction/+page.svelte index 3b5d7f84..a80bd01b 100644 --- a/frontend/src/routes/interaction/+page.svelte +++ b/frontend/src/routes/interaction/+page.svelte @@ -122,7 +122,7 @@ -

    +

    {m.sign_in_to({ name: interactionSession.client.name })}

    diff --git a/frontend/src/routes/interaction/error/+page.svelte b/frontend/src/routes/interaction/error/+page.svelte index 196bec7d..0b8c24d2 100644 --- a/frontend/src/routes/interaction/error/+page.svelte +++ b/frontend/src/routes/interaction/error/+page.svelte @@ -18,7 +18,7 @@ -

    +

    {m.error()}

    diff --git a/frontend/src/routes/login/+page.svelte b/frontend/src/routes/login/+page.svelte index b1c2da44..7662e487 100644 --- a/frontend/src/routes/login/+page.svelte +++ b/frontend/src/routes/login/+page.svelte @@ -43,7 +43,7 @@

    -

    +

    {m.sign_in_to_appname({ appName: $appConfigStore.appName })}

    {#if error} diff --git a/frontend/src/routes/login/alternative/+page.svelte b/frontend/src/routes/login/alternative/+page.svelte index 4ead460e..a25319b3 100644 --- a/frontend/src/routes/login/alternative/+page.svelte +++ b/frontend/src/routes/login/alternative/+page.svelte @@ -46,7 +46,7 @@
    -

    {m.alternative_sign_in()}

    +

    {m.alternative_sign_in()}

    {m.if_you_do_not_have_access_to_your_passkey_you_can_sign_in_using_one_of_the_following_methods()}

    diff --git a/frontend/src/routes/login/alternative/code/+page.svelte b/frontend/src/routes/login/alternative/code/+page.svelte index 106dcc01..0fc0f3c2 100644 --- a/frontend/src/routes/login/alternative/code/+page.svelte +++ b/frontend/src/routes/login/alternative/code/+page.svelte @@ -72,7 +72,7 @@
    -

    {m.login_code()}

    +

    {m.login_code()}

    {#if error}

    {error}. {m.please_try_again()} diff --git a/frontend/src/routes/login/alternative/device/+page.svelte b/frontend/src/routes/login/alternative/device/+page.svelte index 268d574e..74d0ab41 100644 --- a/frontend/src/routes/login/alternative/device/+page.svelte +++ b/frontend/src/routes/login/alternative/device/+page.svelte @@ -46,9 +46,12 @@ isStarting = true; try { - request = await deviceLoginService.createRequest(controller.signal); + const next = await deviceLoginService.createRequest(controller.signal); // Ignore a response from an attempt replaced while the request was in flight if (requestController !== controller) return; + // The old panel stays until the new code arrives, so the card does not collapse in between + request = next; + ended = undefined; schedulePoll(controller); } catch (error) { if (controller.signal.aborted) return; @@ -137,7 +140,7 @@

    -

    +

    {m.sign_in_with_another_device()}

    diff --git a/frontend/src/routes/login/alternative/email/+page.svelte b/frontend/src/routes/login/alternative/email/+page.svelte index 7a9e070f..80aa65d9 100644 --- a/frontend/src/routes/login/alternative/email/+page.svelte +++ b/frontend/src/routes/login/alternative/email/+page.svelte @@ -38,7 +38,7 @@

    -

    {m.email_login()}

    +

    {m.email_login()}

    {#if error}

    {error}. {m.please_try_again()} diff --git a/frontend/src/routes/logout/+page.svelte b/frontend/src/routes/logout/+page.svelte index a4593a5a..3caf36f7 100644 --- a/frontend/src/routes/logout/+page.svelte +++ b/frontend/src/routes/logout/+page.svelte @@ -34,7 +34,7 @@ -

    {m.sign_out()}

    +

    {m.sign_out()}

    - import { Label } from '#lib/components/ui/label/index.js'; - import * as RadioGroup from '#lib/components/ui/radio-group/index.js'; - import { applyAccentColor } from '#lib/utils/accent-color-util.ts'; - import { Check, Plus } from '@lucide/svelte'; - import CustomColorDialog from './custom-accent-color-dialog.svelte'; - - let { - selectedColor = $bindable(), - previousColor, - disabled = false - }: { selectedColor: string; previousColor: string; disabled?: boolean } = $props(); - let showCustomColorDialog = $state(false); - - const accentColors = [ - { label: 'Default', color: 'default' }, - { label: 'Rose', color: 'oklch(0.63 0.2 15)' }, - { label: 'Orange', color: 'oklch(0.68 0.2 50)' }, - { label: 'Amber', color: 'oklch(0.75 0.18 80)' }, - { label: 'Green', color: 'oklch(0.65 0.2 150)' }, - { label: 'Teal', color: 'oklch(0.6 0.15 180)' }, - { label: 'Blue', color: 'oklch(0.6 0.2 240)' }, - { label: 'Purple', color: 'oklch(0.6 0.24 300)' } - ]; - - // Check if current accent color is a custom color (not in predefined list) - let isCustomColor = $derived(!accentColors.some((c) => c.color === selectedColor)); - let isPreviousColorCustom = $derived(!accentColors.some((c) => c.color === previousColor)); - - // Applies the selection as a live preview. Because it re-runs whenever the bound value - // changes, it also restores the saved colour when the selection is discarded. - $effect(() => { - applyAccentColor(selectedColor); - }); - - function handleAccentColorChange(accentValue: string) { - selectedColor = accentValue; - } - - - { - if (value != 'custom') { - handleAccentColorChange(value); - } - }} -> - {#each accentColors as accent (accent.color)} - {@render colorOption(accent.label, accent.color, selectedColor === accent.color)} - {/each} - {#if isCustomColor || isPreviousColorCustom} - {@render colorOption('Custom', isCustomColor ? selectedColor : previousColor, isCustomColor)} - {/if} - {@render colorOption('Custom', 'custom', false, true)} - - - - -{#snippet colorOption( - label: string, - color: string, - isSelected: boolean, - isCustomColorSelection = false -)} -

    - - -
    -{/snippet} diff --git a/frontend/src/routes/settings/admin/application-configuration/forms/app-config-general-form.svelte b/frontend/src/routes/settings/admin/application-configuration/forms/app-config-general-form.svelte index c14b74ca..9391e509 100644 --- a/frontend/src/routes/settings/admin/application-configuration/forms/app-config-general-form.svelte +++ b/frontend/src/routes/settings/admin/application-configuration/forms/app-config-general-form.svelte @@ -9,7 +9,7 @@ import { createForm } from '#lib/utils/form-util.ts'; import { trackFormChanges } from '#lib/utils/unsaved-changes-util.svelte.ts'; import { z } from 'zod/v4'; - import AccentColorPicker from './accent-color-picker.svelte'; + import ColorThemePicker from './color-theme-picker.svelte'; let { callback, @@ -30,7 +30,7 @@ sessionDuration: appConfig.sessionDuration, allowOwnAccountEdit: appConfig.allowOwnAccountEdit, disableAnimations: appConfig.disableAnimations, - accentColor: appConfig.accentColor + colorTheme: appConfig.colorTheme }; const formSchema = z.object({ @@ -39,7 +39,7 @@ sessionDuration: z.number().min(1).max(43200), allowOwnAccountEdit: z.boolean(), disableAnimations: z.boolean(), - accentColor: z.string() + colorTheme: z.string() }); let formStore = $derived(createForm(formSchema, updatedAppConfig)); @@ -95,16 +95,11 @@
    - - {m.accent_color()} - - - {m.select_an_accent_color_to_customize_the_appearance_of_pocket_id()} - + {m.color_theme()} + {m.color_theme_description()}
    -
    diff --git a/frontend/src/routes/settings/admin/application-configuration/forms/color-theme-picker.svelte b/frontend/src/routes/settings/admin/application-configuration/forms/color-theme-picker.svelte new file mode 100644 index 00000000..3b89f580 --- /dev/null +++ b/frontend/src/routes/settings/admin/application-configuration/forms/color-theme-picker.svelte @@ -0,0 +1,138 @@ + + +
    + selectedId, onValueChange} + {disabled} + > + {#each colorThemes as theme (theme.id)} + {@render tile(theme.id, themeNames[theme.id](), theme.id)} + {/each} + {@render tile('custom', m.custom(), customColor ? `custom:${customColor}` : null)} + + + {#if selectedId === 'custom'} +
    + +

    {m.custom_color_theme_note()}

    +
    + {/if} +
    + + (value = `custom:${color}`)} +/> + +{#snippet tile(id: string, name: string, previewValue: string | null)} + + {#snippet children({ checked })} + {#if previewValue} + + {:else} + + {/if} + + {name} + {#if checked}{/if} + + {/snippet} + +{/snippet} diff --git a/frontend/src/routes/settings/admin/application-configuration/forms/custom-accent-color-dialog.svelte b/frontend/src/routes/settings/admin/application-configuration/forms/custom-accent-color-dialog.svelte deleted file mode 100644 index a9c37a26..00000000 --- a/frontend/src/routes/settings/admin/application-configuration/forms/custom-accent-color-dialog.svelte +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - {m.custom_accent_color()} - - {m.custom_accent_color_description()} - - - -
    -
    - - {m.color_value()} -
    -
    - -
    -
    -
    -
    -
    - - - - - -
    -
    -
    diff --git a/frontend/src/routes/settings/admin/application-configuration/forms/custom-theme-color-dialog.svelte b/frontend/src/routes/settings/admin/application-configuration/forms/custom-theme-color-dialog.svelte new file mode 100644 index 00000000..6815b588 --- /dev/null +++ b/frontend/src/routes/settings/admin/application-configuration/forms/custom-theme-color-dialog.svelte @@ -0,0 +1,135 @@ + + + + + + {m.custom_theme_color()} + {m.custom_theme_color_description()} + + +
    + + {m.color()} + +
    + {#if showError && error} + {error} + {/if} +
    +
    + + {#if fitted} +
    + {m.preview()} +
    + +
    +

    {notes.join(' ')}

    +
    + {/if} + + + + + +
    +
    +
    diff --git a/frontend/src/routes/signup/+page.svelte b/frontend/src/routes/signup/+page.svelte index 1e7f32b3..81f4886e 100644 --- a/frontend/src/routes/signup/+page.svelte +++ b/frontend/src/routes/signup/+page.svelte @@ -56,7 +56,7 @@ -

    +

    {m.signup_to_appname({ appName: $appConfigStore.appName })}

    diff --git a/frontend/src/routes/signup/add-passkey/+page.svelte b/frontend/src/routes/signup/add-passkey/+page.svelte index af0d0672..78f4e2e9 100644 --- a/frontend/src/routes/signup/add-passkey/+page.svelte +++ b/frontend/src/routes/signup/add-passkey/+page.svelte @@ -53,6 +53,7 @@ confirm: { label: m.skip_for_now(), destructive: true, + icon: LucideSkipForward, action: () => { dismiss(); goto('/settings/account'); @@ -76,7 +77,7 @@
    -

    +

    {m.setup_your_passkey()}

    diff --git a/frontend/src/routes/signup/setup/+page.svelte b/frontend/src/routes/signup/setup/+page.svelte index b72c04c4..29acaac5 100644 --- a/frontend/src/routes/signup/setup/+page.svelte +++ b/frontend/src/routes/signup/setup/+page.svelte @@ -41,7 +41,7 @@ -

    +

    {m.signup_to_appname({ appName: $appConfigStore.appName })}

    diff --git a/frontend/static/fonts/FunnelDisplay-latin-ext.woff2 b/frontend/static/fonts/FunnelDisplay-latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f22bf80fe27c8447d82fa7b5ac84487b9885b704 GIT binary patch literal 9512 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 literal 0 HcmV?d00001 diff --git a/frontend/static/fonts/FunnelSans-Italic-latin-ext.woff2 b/frontend/static/fonts/FunnelSans-Italic-latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..30cf7ac7187dab8215d33672eadd3f6ecebe2de9 GIT binary patch literal 10260 zcmV+vDC^gEPew8T0RR9104Njy6aWAK09p(H04JXS0RR9100000000000000000000 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 af4`C07<9-0RR9100000000000000000000 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 H?i>UF^2N>D literal 0 HcmV?d00001 diff --git a/frontend/static/fonts/FunnelSans-latin-ext.woff2 b/frontend/static/fonts/FunnelSans-latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..050b1b528761c655ce585aaa456b84f4858b3636 GIT binary patch literal 9524 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 {u2hbAt8fW3UOCGlZ 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 He>yP&*)G4y literal 0 HcmV?d00001 diff --git a/frontend/static/fonts/Gloock-Regular.woff b/frontend/static/fonts/Gloock-Regular.woff deleted file mode 100644 index 8a1f6b4890f79e3b3345ab16f4dde34917afcb6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52388 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 a0002mQ0002r+?iw|@rsQA diff --git a/frontend/static/fonts/JetBrainsMono-cyrillic-ext.woff2 b/frontend/static/fonts/JetBrainsMono-cyrillic-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..024a1af5eb97341d2225ccda7a874857d46ace06 GIT binary patch literal 1664 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 K@67e#0001vsTKJE literal 0 HcmV?d00001 diff --git a/frontend/static/fonts/JetBrainsMono-greek.woff2 b/frontend/static/fonts/JetBrainsMono-greek.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..06f0936048a09fd8d8ed7b74fa3b598732047753 GIT binary patch literal 6800 zcmV;B8gJ!yPew8T0RR9102+`05&!@I05%8!02(O(0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/frontend/static/fonts/JetBrainsMono-latin-ext.woff2 b/frontend/static/fonts/JetBrainsMono-latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..310faddfdd181f2dbef10b26ce9231504762d045 GIT binary patch literal 11596 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 K!Z6td0002tw^dRA literal 0 HcmV?d00001 diff --git a/frontend/static/fonts/JetBrainsMono-latin.woff2 b/frontend/static/fonts/JetBrainsMono-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2ca6ac605954ee884442db8ea1d61093000bcc29 GIT binary patch literal 31340 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∓Jw5)|1+k+LPLo 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 GQwjipAVB;8 literal 0 HcmV?d00001 diff --git a/tests/resources/export/uploads/profile-pictures/defaults/CF-v3.png b/tests/resources/export/uploads/profile-pictures/defaults/CF-v3.png new file mode 100644 index 0000000000000000000000000000000000000000..3d64de7cd3dfd500025cef98ee615a153b8c9c58 GIT binary patch literal 4201 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 tIE*6fQBj@K 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 diff --git a/tests/resources/export/uploads/profile-pictures/defaults/TC-v3.png b/tests/resources/export/uploads/profile-pictures/defaults/TC-v3.png new file mode 100644 index 0000000000000000000000000000000000000000..43396f2ac3a7d8bc9c93180309b2adc5463982b8 GIT binary patch literal 4153 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 Zjj`|(rC>CF9u?*aCI%Mzwdkw2{{da@=xG1| literal 0 HcmV?d00001 diff --git a/tests/resources/export/uploads/profile-pictures/defaults/TC.png b/tests/resources/export/uploads/profile-pictures/defaults/TC.png deleted file mode 100644 index 9ff79b4561a2bf106eb256fbe1c212c44a3cdc9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5763 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 diff --git a/tests/specs/cli.spec.ts b/tests/specs/cli.spec.ts index 4f07aa49..b0ad98e4 100644 --- a/tests/specs/cli.spec.ts +++ b/tests/specs/cli.spec.ts @@ -146,7 +146,7 @@ function compareExports(dir1: string, dir2: string): void { expect(files2).toEqual(files1); for (const file of files1) { - const profilePictures = ['CF.png', 'CR.png']; + const profilePictures = ['CF-v3.png', 'CR-v3.png']; if (profilePictures.includes(path.basename(file))) { continue; // Skip profile pictures because they get generated on demand and can differ between exports }