diff --git a/services/web/frontend/js/utils/meta.ts b/services/web/frontend/js/utils/meta.ts index 64b9016210..0b8e49ab44 100644 --- a/services/web/frontend/js/utils/meta.ts +++ b/services/web/frontend/js/utils/meta.ts @@ -11,7 +11,7 @@ import { } from '../../../types/project-settings' import { CurrencyCode } from '../../../types/subscription/currency' import { PricingFormState } from '../../../types/subscription/payment-context-value' -import { Plan } from '../../../types/subscription/plan' +import { LocalIndividualPlans, Plan } from '../../../types/subscription/plan' import { Affiliation } from '../../../types/affiliation' import type { PortalTemplate } from '../../../types/portal-template' import { UserEmailData } from '../../../types/user-email' @@ -195,6 +195,7 @@ export interface Meta { 'ol-legacyEditorThemes': { name: string; dark: boolean }[] 'ol-licenseQuantity'?: number 'ol-loadingText': string + 'ol-localIndividualPlans': LocalIndividualPlans 'ol-managedGroupSubscriptions': ManagedGroupSubscription[] 'ol-managedInstitutions': ManagedInstitution[] 'ol-managedPublishers': Publisher[] diff --git a/services/web/frontend/stylesheets/pages/plans.scss b/services/web/frontend/stylesheets/pages/plans.scss index 2c7682e35d..3b00f46ec3 100644 --- a/services/web/frontend/stylesheets/pages/plans.scss +++ b/services/web/frontend/stylesheets/pages/plans.scss @@ -675,38 +675,42 @@ $z-index-group-member-picker-list: 1; } } } + } + } - .plans-new-edu-discount { - display: flex; - align-items: flex-start; - gap: var(--spacing-04); - margin-bottom: var(--spacing-06); - font-weight: 400; + .individual-edu-discount-form { + margin-top: calc(-1 * var(--spacing-05)); + } - input[type='checkbox'] { - margin: var(--spacing-02); - accent-color: var(--green-50); + .plans-new-edu-discount { + display: flex; + align-items: flex-start; + gap: var(--spacing-04); + margin-bottom: var(--spacing-06); + font-weight: 400; - &:focus-visible { - @include box-shadow-button-input; - } - } + input[type='checkbox'] { + margin: var(--spacing-03) var(--spacing-02); + accent-color: var(--green-50); - .plans-new-edu-discount-content { - display: flex; - flex-direction: column; + &:focus-visible { + @include box-shadow-button-input; + } + } - span { - line-height: var(--line-height-03); - color: var(--content-primary); - } + .plans-new-edu-discount-content { + display: flex; + flex-direction: column; - small { - color: var(--content-secondary); - font-size: var(--font-size-01); - line-height: var(--line-height-01); - } - } + span { + line-height: var(--line-height-03); + color: var(--content-primary); + } + + small { + color: var(--content-secondary); + font-size: var(--font-size-01); + line-height: var(--line-height-01); } } } diff --git a/services/web/locales/en.json b/services/web/locales/en.json index 8083813949..ba25ad0801 100644 --- a/services/web/locales/en.json +++ b/services/web/locales/en.json @@ -189,6 +189,7 @@ "apply_educational_discount": "Apply educational discount", "apply_educational_discount_description": "40% discount for groups using __appName__ for teaching", "apply_educational_discount_description_with_group_discount": "Get a total of 40% off for groups using __appName__ for teaching", + "apply_educational_discount_individual": "Apply 50% student discount", "apply_suggestion": "Apply suggestion", "april": "April", "archive": "Archive", diff --git a/services/web/types/subscription/plan.ts b/services/web/types/subscription/plan.ts index 6b632244ae..4a2aa7c1f8 100644 --- a/services/web/types/subscription/plan.ts +++ b/services/web/types/subscription/plan.ts @@ -113,3 +113,9 @@ export type StripeLookupKeyVersion = 'feb2026' export type StripeLookupKey = `${StripeBaseLookupKey}_${StripeLookupKeyVersion}_${StripeCurrencyCode}` + +export type IndividualPlanKey = 'collaborator' | 'professional' | 'student' +export type LocalIndividualPlans = Record< + IndividualPlanKey | 'free', + { monthly: number; annual: number } +>