.showing-cloud .self-hosted-comparison, .showing-self-hosted .cloud-comparison { display: none; } .zulip-plans-comparison { --color-heading-text: hsl(0deg 0% 100%); --color-table-text: hsl(223deg 40% 25%); --color-table-background: hsl(0deg 0% 100% / 80%); --color-table-link: hsl(210deg 94% 30%); --color-table-link-hover: hsl(210deg 100% 45%); --color-table-link-active: hsl(210deg 100% 40%); --color-table-link-decoration: hsl(210deg 94% 30% / 20%); --color-table-link-decoration-hover: hsl(210deg 100% 45% / 70%); --color-table-link-decoration-active: hsl(210deg 100% 40%); --border-radius-table: 11px; .icon-cloud { --icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' viewBox='0 0 16 16'%3e%3cpath fill='%23313F68' d='M4.333 13.333c-1.01 0-1.875-.35-2.591-1.05-.717-.7-1.075-1.555-1.075-2.566 0-.867.26-1.64.783-2.317A3.465 3.465 0 0 1 3.5 6.1a4.525 4.525 0 0 1 1.667-2.483A4.561 4.561 0 0 1 8 2.667c1.3 0 2.403.452 3.308 1.358.906.906 1.359 2.008 1.359 3.308a2.91 2.91 0 0 1 1.908.992c.506.572.758 1.242.758 2.008 0 .834-.291 1.542-.875 2.125a2.893 2.893 0 0 1-2.125.875h-8Z' opacity='.5'/%3e%3c/svg%3e"); } .icon-self-hosted { --icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' viewBox='0 0 16 16'%3e%3cpath fill='%23313F68' fill-opacity='.5' d='M11.333 10.667a.98.98 0 0 0 .709-.284.957.957 0 0 0 .291-.716.964.964 0 0 0-.291-.709.965.965 0 0 0-.709-.291.957.957 0 0 0-.716.291.979.979 0 0 0-.284.709.971.971 0 0 0 1 1ZM1.333 6 3.6 3.733c.122-.122.264-.22.425-.291.161-.073.336-.109.525-.109h6.883c.19 0 .364.036.525.109.161.072.303.17.425.291L14.667 6H1.333Zm1.334 6.667a1.29 1.29 0 0 1-.95-.384 1.29 1.29 0 0 1-.384-.95v-4h13.334v4c0 .378-.13.695-.392.95a1.298 1.298 0 0 1-.942.384H2.667Z'/%3e%3c/svg%3e"); } .icon-infinity { --icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' viewBox='0 0 24 24'%3e%3cpath fill='black' fill-rule='evenodd' d='M2.464 8.464A5 5 0 0 1 6 7c2.16 0 4.155 1.251 6 3.4C13.845 8.251 15.84 7 18 7a5 5 0 1 1 0 10c-2.16 0-4.155-1.251-6-3.4-1.845 2.149-3.84 3.4-6 3.4a5 5 0 0 1-3.536-8.536ZM10.731 12C8.983 9.857 7.4 9 6 9a3 3 0 1 0 0 6c1.4 0 2.983-.857 4.731-3Zm2.538 0c1.748 2.143 3.331 3 4.731 3a3 3 0 0 0 0-6c-1.4 0-2.983.857-4.731 3Z' clip-rule='evenodd'/%3e%3c/svg%3e"); } .icon-check { --icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' viewBox='0 0 24 24'%3e%3cpath fill='black' fill-rule='evenodd' d='M20.707 5.793a1 1 0 0 1 0 1.414l-11 11a1 1 0 0 1-1.414 0l-5-5a1 1 0 1 1 1.414-1.414L9 16.086 19.293 5.793a1 1 0 0 1 1.414 0Z' clip-rule='evenodd'/%3e%3c/svg%3e"); } .icon-x { --icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' viewBox='0 0 24 24'%3e%3cpath fill='black' d='M18.707 6.707a1 1 0 0 0-1.414-1.414L12 10.586 6.707 5.293a1 1 0 0 0-1.414 1.414L10.586 12l-5.293 5.293a1 1 0 1 0 1.414 1.414L12 13.414l5.293 5.293a1 1 0 0 0 1.414-1.414L13.414 12l5.293-5.293Z'/%3e%3c/svg%3e"); } .icon-wrench { --icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' viewBox='0 0 24 24'%3e%3cpath fill='black' fill-rule='evenodd' d='M16.578 3.36a5.25 5.25 0 0 0-5.866 7.302.75.75 0 0 1-.153.84l-6.91 6.91a1.371 1.371 0 0 0 1.94 1.94l6.91-6.91a.75.75 0 0 1 .839-.154 5.25 5.25 0 0 0 7.301-5.866l-2.915 2.915a1.75 1.75 0 0 1-2.45 0l-.006-.005-1.605-1.606a1.75 1.75 0 0 1 0-2.45l.005-.005 2.91-2.91Zm-2.293-1.503a6.75 6.75 0 0 1 3.993.491.75.75 0 0 1 .22 1.214l-3.766 3.766a.25.25 0 0 0 0 .347l1.593 1.593a.25.25 0 0 0 .347 0L20.438 5.5a.75.75 0 0 1 1.214.221 6.75 6.75 0 0 1-8.445 9.131l-6.557 6.56a2.871 2.871 0 1 1-4.06-4.06l6.558-6.56a6.75 6.75 0 0 1 5.138-8.935Z' clip-rule='evenodd'/%3e%3c/svg%3e"); } .icon { vertical-align: middle; display: inline-block; flex-shrink: 0; background-color: currentcolor; mask-position: center; mask-repeat: no-repeat; mask-image: var(--icon); width: 24px; height: 24px; } .icon-plan { /* Smaller icons within the table headings. */ width: 16px; height: 16px; } .icon-with-copy { /* Treat copy and a nearby icon as a unit when reflowing text for narrower viewports. */ display: inline-block; } .grouped-icons { display: flex; justify-content: center; gap: 4px; } h2 { font-family: var(--font-ss3); font-weight: 450; font-size: 44px; line-height: 120%; text-align: center; margin: 64px 0 10px; color: var(--color-heading-text); } .h2-subheader { font-family: var(--font-ops); font-weight: 400; font-size: 16px; line-height: 145%; text-align: center; color: var(--color-heading-text); /* Let subheader text fill the same area as text in the comparison table below. */ padding: 0 14px; a { color: inherit; text-decoration: none; border-bottom: 1px solid hsl(0deg 0% 100% / 50%) !important; transition: border 0.4s ease-out; &:hover { border-bottom: 2px solid hsl(0deg 0% 100%) !important; transition: none; } } } .comparison-tabs { width: max-content; margin: 0 auto; display: flex; justify-content: center; gap: 3px; background-color: hsl(0deg 0% 100% / 70%); padding: 3px; border-radius: 6px; } .comparison-tab { font-family: var(--font-ops); font-size: 14px; padding: 4px 16px; color: hsl(223deg 40% 30%); font-weight: 600; border: none; background-color: hsl(0deg 0% 100% / 0%); display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 3px; cursor: pointer; transition: all 120ms ease-out; } .comparison-tab:hover { transition: none; background-color: hsl(0deg 0% 100% / 40%); } .comparison-tab:active { transition: all 120ms ease-out; background-color: hsl(0deg 0% 100% / 70%); } .comparison-tab._selected { background-color: hsl(0deg 0% 100% / 80%); cursor: default; } .comparison-table { font-family: var(--font-ss3); font-size: 16px; line-height: 18px; text-align: center; border-collapse: collapse; margin: 24px auto 48px; border-radius: var(--border-radius-table); color: var(--color-table-text); background: var(--color-table-background); } .comparison-table a { color: var(--color-table-link); text-underline-offset: 4px; text-decoration-thickness: 1px; text-decoration-color: var(--color-table-link-decoration); } .comparison-table a:hover { color: var(--color-table-link-hover); text-decoration-color: var(--color-table-link-decoration-hover); } .comparison-table a:active { color: var(--color-table-link-active); text-decoration-color: var(--color-table-link-decoration-active); } .comparison-table tr { transition: all 200ms ease-out; } .comparison-table tbody tr:hover { background-color: hsl(0deg 0% 100% / 30%); } .comparison-table th:first-child { border-top-left-radius: var(--border-radius-table); } .comparison-table th:last-child { border-top-right-radius: var(--border-radius-table); } .comparison-table th, .comparison-table .subheader { position: sticky; font-weight: 700; color: hsl(223deg 40% 30% / 100%); background: hsl(209deg 41% 94%); transition: all 200ms ease-out; } .comparison-table th .icon { display: none; } .subheader-filler { background: hsl(209deg 41% 94%); } .comparison-table th { padding: 12px 2px 10px; top: 60px; z-index: 1; } .comparison-table td.subheader.comparison-table-feature { font-weight: 600; color: hsl(223deg 40% 30% / 80%); top: 64px; z-index: 2; padding-top: 8px; padding-bottom: 8px; text-transform: uppercase; font-size: 15px; letter-spacing: 0.1ch; } .comparison-table th.sticky { padding: 8px 2px; border-radius: 0; } .comparison-table td { padding: 8px; border-top: 1px solid hsl(209deg 40% 40% / 30%); line-height: 18px; } .comparison-table colgroup col:first-child { width: 340px; } .comparison-table colgroup col { width: 112px; } .comparison-table th.comparison-table-feature, .comparison-table td.comparison-table-feature { text-align: left; padding-left: 14px; } .comparison-table td.comparison-table-feature { color: hsl(223deg 40% 16%); } .comparison-table-feature-desc { font-size: 14px; opacity: 0.7; margin-top: 4px; } .comparison-value-positive { color: hsl(147deg 80% 29% / 100%); } .comparison-value-warning { color: hsl(42deg 85% 35% / 100%); } .comparison-value-negative { color: hsl(224deg 8% 50% / 100%); } .comparison-value-positive, .comparison-value-warning, .comparison-value-negative { /* Set positioning context for use with tooltip hovers on icons. */ position: relative; /* Make non-icon text (e.g., "Billed hourly") less prominent than other text in the table's rows or columns. */ font-size: 0.9em; } .comparison-value-positive::after, .comparison-value-warning::after, .comparison-value-negative::after { content: attr(data-title); white-space: nowrap; font-size: 14px; line-height: 14px; font-weight: 400; display: block; padding: 2px 4px; border-radius: 5px; background-color: hsl(208deg 43% 93%); /* the color of mixed hover row with bg */ position: absolute; top: calc(50% + 11px); left: 50%; /* Keep tooltips over top of other elements, including the headers within the table. */ z-index: 3; transform: translateX(-50%); visibility: hidden; opacity: 0; transition: visibility 301s linear, opacity 250ms ease-out; } .comparison-value-positive:hover::after, .comparison-value-warning:hover::after, .comparison-value-negative:hover::after { transition: visibility 0s linear, opacity 250ms ease-out; transition-delay: 200ms; visibility: visible; opacity: 1; } @media (width <= 940px) { h1 { font-size: 40px; } .h1-subheader { font-size: 16px; } h2 { font-size: 32px; margin-bottom: 4px; } .h2-subheader { font-size: 14px; } } @media (width <= 730px) { .comparison-table th, .comparison-table th.sticky { font-size: 14px; line-height: 18px; box-sizing: border-box; height: 44px; padding: 4px 2px; } .comparison-table td { font-size: 14px; line-height: 18px; } .comparison-table td.subheader.comparison-table-feature { font-size: 13px; line-height: 16px; box-sizing: border-box; height: 44px; padding-bottom: 4px; padding-top: 4px; } .comparison-table td.comparison-table-feature { font-size: 14px; } .comparison-table-feature-desc { font-size: 12px; line-height: 14px; } } @media (width <= 500px) { .comparison-table th, .comparison-table th.sticky { font-size: 13px; line-height: 14px; } .comparison-table th.comparison-table-feature, .comparison-table td.comparison-table-feature { padding-left: 8px; } .comparison-table td { padding: 4px 2px; border-top: 1px solid hsl(209deg 40% 40% / 30%); line-height: 18px; } .comparison-table td.comparison-value-positive, .comparison-table td.comparison-value-warning, .comparison-table td.comparison-value-negative { font-size: 13px; line-height: 14px; } .comparison-value-positive::after, .comparison-value-warning::after, .comparison-value-negative::after { display: none; } } } /* No header to accommodate on self-hosted realms, so keep sticky headers at the top of the viewport. */ .zulip-plans-comparison.is-self-hosted-realm { .comparison-table { th, td.subheader.comparison-table-feature { top: 0; } } } /* Change comparison-table visibility on /plans based on active plan tab. */ #showing-tab-cloud, #showing-tab-hosted, #showing-tab-all { .comparison-tab-cloud, .comparison-tab-self-hosted, .comparison-tab-all { background-color: hsl(0deg 0% 100% / 0%); cursor: pointer; &:hover { background-color: hsl(0deg 0% 100% / 40%); } } } .showing-cloud, #showing-tab-cloud { .comparison-tab-cloud { background-color: hsl(0deg 0% 100%); cursor: default; &:hover { background-color: hsl(0deg 0% 100%); } } #self-hosted-plan-comparison, #all-plan-comparison, .subheader-open-source, .subheader-self-hosted-legend, .self-hosted-feature-only, .self-hosted-cell { display: none; } #cloud-plan-comparison, .cloud-cell { display: revert; } /* When only Cloud plans appear in the comparison table, we need to set the border-radius here that is otherwise displayed on the table itself. TODO: Unset this property when the header row is stuck, so that the little flutter of feature-table lines cannot be seen by eagle-eyed users. */ th.last-cloud-th { border-top-right-radius: var(--border-radius-table); } } .showing-self-hosted, #showing-tab-hosted { .comparison-tab-self-hosted { background-color: hsl(0deg 0% 100%); cursor: default; &:hover { background-color: hsl(0deg 0% 100%); } } #cloud-plan-comparison, #all-plan-comparison, .cloud-cell { display: none; } #self-hosted-plan-comparison, .subheader-open-source, .subheader-self-hosted-legend, .self-hosted-feature-only, .self-hosted-cell { display: revert; } th.last-cloud-th { border-top-right-radius: unset; } } #showing-tab-all { .comparison-tab-all { background-color: hsl(0deg 0% 100%); cursor: default; &:hover { background-color: hsl(0deg 0% 100%); } } #cloud-plan-comparison, #self-hosted-plan-comparison { display: none; } .subheader-open-source, .subheader-self-hosted-legend, #all-plan-comparison, .cloud-cell, .self-hosted-cell, .self-hosted-feature-only { display: revert; } th.last-cloud-th { border-top-right-radius: unset; } .comparison-table th .icon { display: revert; } .comparison-table th { vertical-align: top; } .comparison-table th.comparison-table-feature { padding-top: 28px; /* Don't apply transitions to the padding. This prevents the "Features" label from sliding into place when switching over to the All view. */ transition: none; } .comparison-table td.stuck { padding-top: 24px; /* Don't apply transitions to the padding. This makes the stuck state look more precise. */ transition: none; } @media (width <= 730px) { .comparison-table th { padding: 8px 2px; } .comparison-table th.comparison-table-feature { padding-top: 24px; padding-left: 14px; } .comparison-table td.subheader.comparison-table-feature { /* Line up features with plan titles. */ line-height: 18px; } .comparison-table td.stuck { padding-top: 24px; vertical-align: top; } } @media (width <= 684px) { .comparison-table td.stuck { height: 60px; } } @media (width <= 500px) { .comparison-table td.subheader.comparison-table-feature { /* Line up features with plan titles. */ line-height: 14px; } } } .features-page { /* Always suppress subheadings on /features */ #cloud-plan-comparison, #self-hosted-plan-comparison, #all-plan-comparison { display: none !important; } /* Maintain the margin-top ordinarily set on the subheadings. */ .comparison-tabs { margin-top: 64px; } }