Files
upstream-zulip/web/styles/portico/marketing_page.css
upstream-mirror 64898b2c79
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
snapshot of https://github.com/zulip/zulip.git @ 48c69911c7dd4e03b20552eb3bd77ad8151c1357 (2026-09-15)
2026-09-15 15:05:30 +05:00

3547 lines
68 KiB
CSS

/*
This file began its life as the combination of:
- legacy_portico.css
- legacy_landing_page.css
Some styles will be edited in place; others
are destined to be drastically rewritten or
removed entirely. There is a lot of dead code
in this file.
*/
/* BEGIN legacy_portico.css */
:root {
--color-background-modal: hsl(0deg 0% 98%);
/*
It is fine if footer is longer than that
since we are only trying to avoid overlap.
*/
--height-footer: 495px;
--padded-content-padding: 50px;
}
[data-tippy-root] .tippy-box .tippy-content {
font-size: 14px;
font-weight: normal;
color: hsl(0deg 0% 100%);
}
body {
font-family: "Source Sans 3 VF", sans-serif;
height: 100%;
font-weight: 300;
font-size: 17px;
margin: 0;
line-height: normal;
max-width: 100vw;
background-color: var(--color-background-marketing-page);
color: var(--color-text-marketing-page);
}
html {
height: 100%;
width: 100vw;
overflow-x: hidden;
}
.noscroll {
overflow: hidden;
position: fixed;
}
.digest-address-link {
margin-top: 10px;
color: hsl(0deg 0% 60%);
font-size: 12px;
text-align: center;
}
.normal {
font-weight: normal;
}
.navbar {
margin-bottom: 0;
}
.navbar.footer .nav {
> li {
line-height: 56px;
> a {
padding-top: 0;
padding-bottom: 0;
}
}
}
.push {
height: 56px;
}
/* The API tabbed content tends to have a lot of code blocks,
which look nicer against a different background */
.api-center .tabbed-section {
.blocks {
background-color: hsl(0deg 0% 98%);
}
& ul.nav {
& li.active {
background-color: hsl(0deg 0% 98%);
border-bottom: 1px solid hsl(0deg 0% 98%);
}
}
}
.digest-container {
padding-top: 100px;
}
.digest-email-container {
display: block;
margin: 0 auto !important;
max-width: 700px;
padding-bottom: 30px;
}
.digest-email-html {
padding: 20px;
background-color: hsl(0deg 0% 100%);
border-radius: 5px;
}
.app.help {
display: inline-flex;
box-shadow: 0 -20px 50px hsl(0deg 0% 0% / 4%);
color: hsl(0deg 0% 27%);
.hamburger {
display: none;
}
}
.help-center ol,
.portico-landing.integrations ol {
margin-left: 0;
}
.title {
font-family: Helvetica, sans-serif;
font-size: 100px;
font-weight: bold;
margin-top: 50px;
margin-bottom: 60px;
}
.digest-page-title {
text-align: center;
font-weight: 400;
}
.lead {
font-weight: bold;
}
.pitch {
width: 600px;
max-width: 100%;
}
.help-inline {
font-weight: 400;
font-size: 0.9rem;
&.text-error {
color: hsl(1.1deg 44.7% 50.4%);
}
}
a.title {
color: hsl(0deg 0% 0%);
&:hover {
color: hsl(0deg 0% 50%);
text-decoration: none;
}
}
.fakecontrol {
padding-top: 5px;
font-weight: bold;
}
img.screenshot {
/* This makes it so screenshots are still shown
even if they are larger than their span. */
max-width: 100%;
}
#pw_strength {
/* Same width as a Bootstrap default text <input> with padding */
width: 220px;
height: 8px;
}
#registration #pw_strength {
width: 325px;
margin: 7px auto 0;
}
.def::before {
content: " - ";
}
.platform-icon {
width: 33%;
}
label.text-error {
display: inline;
padding-left: 5px;
}
input.text-error {
border-color: hsl(0deg 100% 50%);
outline-color: hsl(0deg 100% 50%);
}
.portico-container {
position: relative;
/* To adjust for flexible footer height we do 2 things:
- Make the `portico-container` expand to full page height.
- Fill the empty space with `portico-wrap`. */
display: flex;
flex-direction: column;
height: 100%;
.portico-wrap {
flex: 1 0 auto;
}
.if-zulip-electron {
display: none;
}
}
/* detect if the platform is `ZulipDesktop` and if so, hide this tag! */
.portico-container[data-platform="ZulipElectron"] .if-zulip-electron {
display: block;
}
.app {
width: 100%;
z-index: 99;
}
.table.table-striped {
background-color: hsl(0deg 0% 100%);
box-shadow: 0 0 4px hsl(0deg 0% 0% / 10%);
border-collapse: collapse;
margin-bottom: 20px;
thead tr:first-child th {
border-top: 0;
}
& th,
td {
padding: 8px;
line-height: 20px;
text-align: left;
vertical-align: top;
border-top: 1px solid hsl(0deg 0% 87%);
}
tbody > tr:nth-child(odd) > td {
background-color: hsl(0deg 0% 98%);
}
}
.team-profiles {
/* Compensate for gutter width */
margin: -10px;
margin-bottom: 3px;
}
.team {
.profile {
.profile-name {
font-weight: 600;
}
.profile-role {
opacity: 0.5;
text-transform: uppercase;
font-size: 0.8em;
font-weight: 400;
}
}
.bdfl {
display: flex;
flex-wrap: wrap;
justify-content: center;
.profile-picture {
flex: 0 auto;
width: 200px;
margin: 10px;
> img {
height: auto;
border-radius: 5px;
}
}
.profile-information {
flex: 1;
/* Wrap when screen is small to prevent very short line */
min-width: 300px;
font-size: 1.4em;
margin: 10px 10px 0;
}
.profile-description {
margin-top: 5px;
font-weight: 400;
font-size: 0.8em;
opacity: 0.8;
& p {
/* Avoid double-applying the 1.2em font-size here */
font-size: 1em;
}
}
}
& input {
display: none;
&:checked + label {
border: 1px solid hsl(0deg 0% 93%);
border-top: 2px solid var(--color-prominent-border);
border-bottom-color: hsl(0deg 0% 100%);
}
}
& label {
font-size: initial;
display: inline-block;
padding: 10px;
border: 1px solid transparent;
margin: 0 0 -1px;
&:hover {
cursor: pointer;
}
}
}
.contributors-list {
margin-left: -40px;
width: calc(100% + 80px);
}
.contributors {
display: none;
.person {
box-sizing: border-box;
padding: 10px;
border: 1px solid hsl(0deg 0% 93%);
border-radius: 4px;
transition: border-color 0.3s ease;
& a {
color: inherit;
}
&:hover {
border-color: hsl(0deg 0% 73%);
}
.avatar {
width: 60px;
text-align: center;
display: inline-block;
vertical-align: top;
}
.info {
width: 50%;
text-align: left;
display: inline-block;
vertical-align: top;
margin-left: 10px;
}
}
}
/* Activated .contributors */
input#total:checked ~ #tab-total,
input#server:checked ~ #tab-server,
input#desktop:checked ~ #tab-desktop,
input#mobile:checked ~ #tab-mobile,
input#api-clients:checked ~ #tab-api-clients,
input#devtools:checked ~ #tab-devtools,
input#terminal:checked ~ #tab-terminal {
display: block;
.contributors-grid {
padding-top: 5px;
display: grid;
gap: 5px;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
}
.avatar_img {
width: auto;
height: auto;
max-width: 80%;
max-height: 80%;
border-radius: 20%;
}
.tab-loading,
.last-updated {
color: hsl(0deg 0% 67%);
font-size: 0.9em !important;
padding-top: 30px;
text-align: center;
}
.history .sponsors {
display: flex;
flex-wrap: wrap;
justify-content: center;
.sponsor-picture img {
height: 170px;
margin: 0 20px;
pointer-events: none;
}
}
.register-form {
display: inline-block;
text-align: center;
}
.register-button {
margin-left: 10px;
}
.login-form {
margin: auto;
/* plus input padding. */
width: calc(300px - -28px);
margin-bottom: 10px;
}
.login-form,
.register-form {
.controls {
margin-right: 10px;
}
}
.login-social {
max-width: 100%;
min-width: 300px;
margin: auto;
text-align: center;
margin-top: 10px;
}
.hello-main {
max-width: none;
min-width: 0;
padding: 0 !important;
}
.top-links {
text-align: right;
& a {
display: inline-block;
color: hsl(0deg 0% 100%);
padding: 2px 7px 1px 8px;
font-weight: 600;
font-size: 16px;
transition: 0.2s ease-in;
transition-property: background-color, color;
border-radius: 4px;
&:hover {
text-decoration: none;
background-color: hsl(0deg 0% 100%);
color: hsl(170deg 50% 40%);
}
}
}
.centered-button {
text-align: center;
}
.input-group {
.progress {
margin: 0;
margin-top: 5px;
display: inline-block;
}
/* --- new settings styling --- */
& input[type="radio"],
input[type="checkbox"] {
margin: 0 10px 0 0;
}
& input[type="radio"] {
position: relative;
top: 8px;
}
& label {
margin: 0;
padding: 5px 0;
&.inline-block {
/* eyeballing off-centered aesth. */
margin-top: 1px;
}
}
&.radio {
margin-left: 25px;
}
&.grid {
padding: 10px 0;
border-bottom: 1px solid hsl(0deg 0% 87%);
& label.inline-block {
width: 200px;
}
}
}
.center-container {
min-height: calc(100vh - 94px);
min-height: 700px;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
}
#registration-email {
margin-bottom: 18px;
& label {
float: left;
width: 100%;
display: block;
margin-left: 2px;
margin-bottom: 0;
text-align: left;
font-weight: 600;
font-size: 1rem;
}
.controls {
padding-top: 25px;
margin: 2px;
}
}
.center-block {
text-align: left;
display: inline-block;
.pitch {
width: 100%;
margin-bottom: 20px;
}
.controls {
margin: 0;
text-align: left;
}
#send_confirm input[type="text"] {
margin-top: 20px;
}
.button {
margin-top: 20px;
padding: 5px 10px;
border-radius: 2px;
font-size: 16px;
font-weight: 300;
}
}
#config_error_page {
.pitch {
text-align: center;
width: 100%;
}
.white-box {
max-width: 600px;
}
}
.error_page {
min-height: calc(100vh - var(--height-footer));
padding: 20px 10px 50px;
height: 100%;
background-color: hsl(163deg 42% 85%);
font-family: "Source Sans 3 VF", sans-serif;
}
.error_page img {
display: block;
clear: right;
margin: 0 auto;
max-width: 500px;
width: 100%;
}
.error_page .errorbox {
margin: auto;
border: 2px solid hsl(163deg 43% 46%);
max-width: 500px;
background-color: hsl(0deg 0% 100%);
box-shadow: 0 0 4px hsl(163deg 43% 46%);
font-size: 18px;
&.config-error {
max-width: 750px;
}
}
.error_page p {
color: hsl(0deg 0% 20%);
}
.error_page .errorcontent {
text-align: left;
padding: 40px 40px 30px;
}
.error_page .lead {
color: hsl(163deg 49% 44%);
font-size: 35px;
margin-bottom: 20px;
line-height: normal;
}
.hourglass-img {
width: initial !important;
margin-bottom: 25px !important;
}
#skip-navigation {
background-color: hsl(170deg 47% 33%);
color: hsl(0deg 0% 100%);
border-radius: 4px;
display: inline-block;
font-weight: 600;
left: 330px;
outline: none;
padding: 5px 12px;
position: absolute;
top: -1000px;
z-index: 100;
}
#skip-navigation:focus-visible {
text-underline-offset: 2px;
top: 25px;
}
@media (width <= 800px) {
.app.help {
.markdown {
width: 100vw;
margin-left: 0;
.content {
max-width: none;
margin-left: 50px;
}
}
.hamburger {
display: block;
position: fixed;
top: 70px;
right: calc(100% - 40px);
fill: hsl(0deg 0% 100%);
z-index: 2;
transition: 0.3s ease;
transition-property:
right, top; /* stylelint-disable-line plugin/no-low-performance-animation-properties */
cursor: pointer;
}
.sidebar {
position: fixed;
top: 59px;
right: calc(100% - 50px);
width: 100%;
min-width: unset;
height: calc(100vh - 59px);
pointer-events: none;
overflow: hidden;
transform: translateX(0);
transition: transform 0.3s ease;
}
.sidebar.show {
pointer-events: initial;
transform: translateX(calc(100% - 50px));
overflow: auto;
.content {
visibility: visible;
}
+ .hamburger {
right: 12px;
}
~ .markdown {
filter: brightness(0.7);
}
}
}
.app-main {
min-width: auto;
padding: 0;
}
.help .sidebar {
.content:not(.show) {
visibility: hidden;
}
&:not(.show) a.highlighted {
background-color: transparent;
}
}
#skip-navigation {
left: 80px;
}
#skip-navigation:focus-visible {
top: 30px;
}
}
@media (width <= 767px) {
body {
padding: 0 !important;
}
.input-large {
display: block !important;
width: 100% !important;
min-height: 30px !important;
margin: 0 !important;
padding: 4px 6px !important;
line-height: 20px !important;
box-sizing: border-box !important;
margin-top: 10px !important;
margin-bottom: 10px !important;
}
.line-break-desktop {
display: none;
}
.contributors-list {
width: 100%;
margin-left: 0;
}
}
@media (width <= 558px) {
.team {
.bdfl {
.profile-name,
.profile-role {
text-align: center;
}
}
}
.top-links .find-accounts-link {
display: none;
}
}
@media (width <= 500px) {
.app.help {
.sidebar {
top: 39px;
height: calc(100vh - 39px);
}
.hamburger {
top: 50px;
}
}
.help .markdown {
height: calc(100vh - 39px);
}
.error_page .lead {
font-size: 1.5em;
margin-bottom: 10px;
}
.brand.logo .light {
display: none;
}
.center-container {
display: block;
}
#skip-navigation {
left: 60px;
}
#skip-navigation:focus-visible {
top: 10px;
}
}
.emoji {
height: 25px;
width: 25px;
vertical-align: text-bottom;
}
label.label-title {
font-weight: 600;
}
.inline-block {
display: inline-block;
vertical-align: top;
}
.float-left {
float: left;
}
.float-right {
float: right;
}
.documentation-footer {
font-size: 0.85rem;
opacity: 0.8;
}
.portico-page.error {
padding-bottom: 0;
}
.portico-page.error .portico-page-container {
padding: 0;
}
#third-party-apps {
margin-top: 20px;
padding-right: 10px;
}
.api-argument {
.api-argument-name {
font-family: "Source Code Pro", monospace;
.api-argument-hover-link i.fa {
opacity: 0;
font-size: 0.9em;
}
&:hover .api-argument-hover-link i.fa {
opacity: 1;
color: hsl(0deg 0% 0%);
cursor: pointer;
}
}
.api-field-type {
text-transform: lowercase;
font-weight: 600;
font-size: 14px;
}
.api-argument-example-label {
font-style: italic;
}
.api-argument-required {
text-transform: uppercase;
font-weight: 600;
font-size: 12px;
color: hsl(14deg 75% 60%);
}
.api-argument-optional {
text-transform: uppercase;
font-weight: 400;
font-size: 12px;
color: hsl(0deg 0% 47%);
}
.api-argument-deprecated {
text-transform: uppercase;
font-weight: 600;
font-size: 12px;
color: hsl(0deg 50% 60%);
}
}
.api-field-type {
color: hsl(176deg 46.4% 41%);
}
.api-event-header {
.api-event-name {
color: hsl(14deg 75% 60%);
font-size: 1.1rem;
.api-event-op {
color: hsl(14deg 60% 60%);
font-size: 1rem;
}
}
}
.api-events-table {
column-count: 3;
column-gap: 10px;
margin: 15px 0 0 10px;
.api-event-type,
.api-event-link {
line-height: 100%;
font-weight: 600;
margin-bottom: 7px;
}
.api-event-ops {
margin-left: 12px;
}
}
@media (width <= 1000px) {
.api-events-table {
column-count: 2;
}
}
@media (width <= 500px) {
.api-events-table {
column-count: 1;
}
}
.desktop-redirect-box {
text-align: center;
.copy-token-info {
font-weight: normal;
}
#desktop-data {
padding: 13px 12px 12px;
font-family: "Source Code Pro", monospace;
}
}
.desktop-redirect-image {
margin-bottom: 20px;
}
.text-image-in-row {
display: flex;
justify-content: space-between;
align-items: center;
.text-image-in-row-image {
width: 300px;
height: auto;
}
.text-image-in-row-text {
align-content: center;
max-width: 300px;
}
.windborne-alaska-image {
width: 255px;
}
@media (width <= 700px) {
flex-wrap: wrap;
.text-image-in-row-image {
width: 100%;
height: auto;
}
.text-image-in-row-text {
max-width: 100%;
}
}
}
.markdown-image-caption {
opacity: 0.8;
margin-top: 5px;
text-align: center;
font-style: italic;
}
.markdown-image-with-caption {
margin: 0;
}
/* BEGIN legacy_landing_page.css */
/* -- generic styles -- */
h1,
h2,
h3 {
margin: 10px 0;
font-weight: 300;
line-height: 1.2;
}
h1 {
font-size: 2em;
}
h2 {
font-size: 1.8em;
}
p {
margin: 10px 0;
font-weight: normal;
line-height: 1.5;
}
ul {
font-weight: normal;
/* Unordered lists relied on this bit of Bootstrap
reset, so we re-introduce it here to avoid
indenting vanilla and other bulleted lists. */
padding-left: 0;
}
span a:hover,
p a:hover,
ul a:hover,
ol a:hover {
text-decoration: underline;
}
.flex {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.float {
&.left {
float: left;
}
&.right {
float: right;
}
&.clear {
clear: both;
}
}
.small {
font-size: 0.8em;
}
.box-shadow {
box-shadow: 0 0 80px hsl(0deg 0% 0% / 12%);
}
.grey {
color: hsl(0deg 0% 60%);
}
.dark-grey {
color: hsl(0deg 0% 40%);
}
.bold {
font-weight: 600;
}
.padded-content {
padding: var(--padded-content-padding);
}
.clear-float {
clear: both;
}
.center {
text-align: center;
}
/* -- component styling -- */
button {
padding: 5px 12px;
font-family: inherit;
font-size: 0.7em;
background-color: hsl(0deg 0% 100%);
color: hsl(0deg 0% 27%);
line-height: 20px;
border-radius: 4px;
border: 1px solid hsl(0deg 0% 80%);
outline: none;
&:active {
background-color: hsl(0deg 0% 98%);
border-color: hsl(0deg 0% 73%);
}
&.green {
color: hsl(0deg 0% 100%);
background-color: hsl(170deg 47% 53%);
border-color: hsl(169deg 45% 43%);
&:hover {
background-color: hsl(170deg 47% 58%);
}
&:active {
background-color: hsl(170deg 47% 48%);
}
}
&.black-current-value {
color: hsl(0deg 0% 20%);
background-color: transparent;
border-color: hsl(0deg 0% 53%);
}
}
.silver {
color: hsl(0deg 0% 100%) !important;
opacity: 0.8;
&:hover {
opacity: 1;
}
&.bold {
font-weight: 600;
}
}
/* This is the button component used in `pricing_plans.css`. */
.button {
display: block;
font-family: var(--font-ss3);
font-weight: 550;
font-size: 18px;
text-align: center;
text-decoration: none;
letter-spacing: 0.06ch;
padding: 8px 10px;
border-radius: 4px;
/* Position relatively for discount tab */
position: relative;
z-index: 5;
}
/* This matches the upgrade-button style from
pricing_plans.css.
TODO: Create variables for all of these colors.
TODO: Better name `register-buttons` and related classes. */
.hero-buttons .button,
.register-buttons .button,
.feature-pricing .button {
color: hsl(0deg 0% 100%);
background-color: hsl(219deg 62% 54%);
/* Legacy margin value. */
margin: 10px;
font-weight: 500 !important;
&:hover {
text-decoration: none;
color: hsl(0deg 0% 100%);
background-color: hsl(219deg 62% 50%);
}
}
/* Buttons in the hero area appear lighter than their
content-area counterparts (e.g., the .register-buttons),
so we tune them a bit darker to appear uniform.
TODO: As above, create variables for these colors. */
.hero-buttons .button {
background-color: hsl(219deg 56% 41%);
&:hover {
background-color: hsl(219deg 56% 37%);
}
}
.desktop-download-link.button {
color: hsl(219deg 62% 54%);
background-color: hsl(0deg 0% 100%);
/* Legacy margin value. */
margin: 10px;
font-weight: 500 !important;
&:hover {
text-decoration: none;
color: hsl(219deg 62% 50%);
background-color: var(--color-background-box);
}
}
/* -- main panel styling -- */
.main {
width: calc(100% - 200px - 20px);
margin: 0 auto;
}
/* -- modify legacy_portico.css -- */
.portico-landing {
position: relative;
padding-top: 120px;
z-index: 1;
&.show {
opacity: 1;
}
&.why-page,
&.case-studies-page {
/* Move top padding to inner-content for better scroll positions on URL fragments. */
.padded-content {
padding-top: 0;
}
.inner-content {
padding-top: var(--padded-content-padding);
}
}
:target {
/* Keep elements targeted by URL fragments visible below the
floating top menu; coordinate the value here with the menu's height. */
scroll-margin-top: 60px;
}
a:not(.button) {
color: var(--color-link);
text-decoration: underline;
text-decoration-color: var(--color-link-underline);
/* 2px at 17px/1em draws the underline in a pleasing way
with descenders like `g`. This value translates well
for hero-area links, too. */
text-underline-offset: 0.1176em;
/* TODO: Adjust this in the portico markdown.css file,
and strike this line once all the marketing pages
reflect updated brand colors. */
font-weight: inherit !important;
&:hover {
color: var(--color-link-hover);
text-decoration: underline;
text-decoration-color: var(--color-link-underline-hover);
}
}
/* Avoid subtle underline artifacts on the icons
for different platform options on /apps/. */
a.app-option {
text-decoration: none;
&:hover {
text-decoration: none;
}
}
/* These are the same link styles as used in pricing_plans.css
on the .h1-subheader's links. */
.hero a:not(.button),
.quote:has(.triangle) a,
.hero-fine-print a {
color: var(--color-text-hero);
text-decoration: underline;
text-decoration-color: hsl(0deg 0% 100% / 50%);
transition: text-decoration 0.4s ease-out;
&:hover {
text-decoration-color: hsl(0deg 0% 100%);
text-decoration-thickness: 2px;
color: inherit;
transition: none;
}
}
}
@keyframes waves {
0% {
transform: rotate(0);
}
50% {
transform: rotate(180deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes wavesBackward {
0% {
transform: rotate(0);
}
50% {
transform: rotate(-180deg);
}
100% {
transform: rotate(-360deg);
}
}
.screen {
.line {
width: 100%;
height: 6px;
margin: 8px 0;
background-color: hsl(0deg 0% 93%);
border-radius: 3px;
&.small {
width: 60%;
}
&.micro {
display: inline-block;
vertical-align: top;
width: 15%;
}
&.nano {
display: inline-block;
vertical-align: top;
width: 10%;
}
&.med {
width: 80%;
}
&.red {
background-color: hsl(350deg 42% 77%);
}
&.blue {
background-color: hsl(193deg 42% 77%);
}
&.green {
background-color: hsl(119deg 42% 77%);
}
&.orange {
background-color: hsl(30deg 42% 77%);
}
}
.top {
.avatar {
display: inline-block;
vertical-align: top;
width: 20px;
height: 20px;
background-color: hsl(0deg 0% 73%);
border-radius: 4px;
}
.top-line {
display: inline-block;
vertical-align: top;
width: 50px;
margin-top: 0;
background-color: hsl(0deg 0% 73%);
}
}
.navbar {
background-color: hsl(170deg 48% 54%);
padding: 10px;
}
.center-page {
height: 100%;
position: relative;
overflow: hidden;
.message-feed {
height: calc(100% - 20px);
margin-top: 20px;
}
}
.message-feed {
.message .content {
margin-left: 24px;
position: relative;
top: -15px;
}
.stream {
padding: 3px 5px 0;
margin: 0 5px;
background-color: hsl(0deg 0% 100%);
border-radius: 4px;
box-shadow: 0 0 15px hsl(0deg 0% 0% / 1%);
}
}
}
.portico-landing.hello .screen {
position: relative;
margin: -300px auto 0;
width: 600px;
height: 350px;
padding: 10px 30px;
border-radius: 12px;
box-shadow: 0 0 50px hsl(0deg 0% 0% / 20%);
background-color: hsl(0deg 0% 27%);
z-index: 1;
&::before {
content: " ";
position: absolute;
top: calc(50% - 5px);
left: 20px;
width: 10px;
height: 10px;
border-radius: 5px;
background-color: hsl(0deg 0% 13%);
}
&::after {
content: " ";
position: absolute;
top: calc(50% - 12.5px);
right: 8px;
width: 25px;
height: 25px;
border-radius: 13px;
background-color: hsl(0deg 0% 73%);
}
.main-page {
display: inline-block;
height: calc(100% - 30px);
width: calc(100% - 30px);
margin: 10px;
border: 5px solid hsl(0deg 0% 13%);
border-radius: 4px;
background-color: hsl(0deg 0% 98%);
}
}
.portico-landing.hello .features {
padding: 50px 0 100px;
background-color: hsl(0deg 0% 100%);
}
.portico-landing.hello .open-source {
text-align: center;
position: relative;
z-index: 1;
background-color: hsl(217deg 22% 93%);
.flex {
min-height: 0;
padding: 50px 0;
}
& img {
margin: 0 2%;
width: 28%;
max-width: 500px;
display: inline-block;
}
.il-block {
display: inline-block;
vertical-align: top;
width: 50%;
max-width: 700px;
text-align: left;
}
& h2 {
font-weight: normal;
}
}
.portico-landing.hello .apps {
position: relative;
padding: 200px 80px 100px;
margin-top: -50px;
background: linear-gradient(
145deg,
hsl(191deg 56% 55%),
hsl(169deg 65% 42%)
);
color: hsl(0deg 0% 100%);
}
.portico-landing.hello .apps .triangle {
position: absolute;
top: 0;
left: 0;
width: 0;
height: 0;
border-style: solid;
border-width: 150px 100vw 0 0;
border-color: hsl(0deg 0% 98%) transparent transparent;
}
.portico-landing.hello .apps .arrow {
color: hsl(0deg 0% 100%);
font-weight: 400;
}
.portico-landing.hello .apps .arrow::before {
background-color: hsl(0deg 0% 100%);
}
.portico-landing.hello .apps .left-side,
.portico-landing.hello .apps .right-side {
display: inline-block;
vertical-align: top;
}
.portico-landing.hello .apps .left-side {
width: calc(60% - 4px);
}
.portico-landing.hello .apps .right-side {
width: calc(40% - 4px);
text-align: center;
}
.portico-landing.hello .apps .left-side .content {
width: 650px;
margin: 50px auto;
}
.portico-landing.hello .apps .left-side .platform-icons {
text-align: center;
}
.portico-landing.hello .apps .left-side .platform-icons .group h2 {
font-size: 1.5em;
}
.portico-landing.hello .apps .left-side .platform-icons .group {
display: inline-block;
vertical-align: top;
margin: 0 30px;
text-align: center;
}
.portico-landing.hello .apps .left-side .platform-icons .group a {
color: inherit;
}
.portico-landing.hello .apps .left-side .platform-icons .group i {
display: inline-block;
width: 80px;
font-size: 3.5em;
opacity: 0.8;
}
.portico-landing.hello .apps .left-side .platform-icons .group i:hover {
opacity: 1;
}
.portico-landing.hello .apps .arrow::after {
filter: brightness(4) saturate(0);
}
.portico-landing.hello .integrations {
padding: 80px;
}
.portico-landing.hello .integrations .content {
margin-left: 50px;
}
.portico-landing.hello .integrations .integration-icons {
width: 100%;
margin: 20px 0;
text-align: center;
}
.portico-landing.hello .integrations .integration-icons .group {
display: inline-block;
vertical-align: top;
width: 155px;
height: 220px;
padding: 0 5px;
transition: border-color 0.3s ease;
margin: 10px 5px;
color: hsl(219deg 23% 33%);
border-radius: 5px;
border: 1px solid hsl(206deg 44% 93%);
}
.portico-landing.hello .integrations .integration-icons .group:hover {
border-color: hsl(170deg 47% 53%);
}
.portico-landing.hello .integrations .integration-logo {
margin-top: 20px;
width: 80px;
}
.portico-landing.hello .integrations .integration-name {
margin-top: 20px;
font-size: 22px;
font-weight: 400;
}
.portico-landing.hello .integrations .integration-description {
width: 120px;
margin: 0 auto 20px;
font-weight: 400;
font-size: 14px;
}
.portico-landing.hello .call-to-action-bottom {
position: relative;
padding: 50px 100px 0;
@media (width <= 768px) {
padding: 50px 10px 0;
}
margin-top: 0;
}
.portico-landing.hello .call-to-action-bottom .styled-button {
display: table;
margin: 20px auto 0;
padding: 10px 20px;
font-size: 1em;
font-weight: 600;
}
.portico-landing.hello .call-to-action-bottom h1 {
text-align: center;
margin-top: 20px;
}
.portico-landing.hello .call-to-action-bottom .zulip-octopus {
margin: 15px auto 50px;
width: 32px;
height: 30px;
background-image: url("../../images/landing-page/zulip-octopus.png");
background-size: cover;
filter: invert(0.9);
}
/* -- apps page -- */
.portico-landing.apps {
padding-top: 0;
}
.portico-landing.apps .main {
background-color: hsl(0deg 0% 100%);
}
.portico-landing.apps .hero {
position: relative;
padding: 200px 50px 120px;
background: var(--color-background-solid-hero);
color: hsl(0deg 0% 100%);
overflow: hidden;
}
.portico-landing.apps .hero .inner-content {
max-width: 1600px;
margin: 0 auto;
}
.portico-landing.apps .hero h1 {
text-align: center;
font-size: 3em;
margin-bottom: 0;
margin-top: 0;
}
.portico-landing.apps .hero #waves {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url("../../images/landing-page/apps/waves.svg");
background-size: cover;
background-repeat: no-repeat;
}
.portico-landing.apps .hero .info {
position: relative;
z-index: 1;
width: 50%;
max-width: 600px;
margin: 0 auto;
}
.portico-landing.apps .hero .info .cta {
text-shadow: 0 0 60px hsl(0deg 0% 0% / 30%);
text-align: center;
}
.portico-landing.apps .hero .info .flex {
height: 300px;
min-height: 0;
}
.portico-landing.apps .hero .info .button {
display: inline-block;
}
.portico-landing.apps .other-apps {
background-color: hsl(0deg 0% 100%);
padding: 50px 50px 120px;
text-align: center;
}
.portico-landing.apps .other-apps h2 {
width: 600px;
margin: 0 auto;
text-align: center;
}
.portico-landing.apps .other-apps .apps {
display: inline-block;
margin: 50px 0 0;
}
.portico-landing.apps .other-apps .apps .icon {
vertical-align: top;
width: 50px;
padding: 18px 30px;
border-radius: 70px;
/* Reset color since we don't want default link styling. */
color: hsl(0deg 0% 27%);
font-size: 3em;
text-align: center;
transition: background 0.2s ease;
}
.portico-landing.apps .other-apps .apps .icon:hover {
background: linear-gradient(-45deg, hsl(0deg 0% 83%), hsl(0deg 0% 98%));
}
.portico-landing.apps .other-apps .apps .icon.fa-mobile-phone {
font-size: 4em;
padding: 14px 30px;
}
.portico-landing.apps .other-apps .apps .icon.fa-terminal {
padding: 12px 30px;
}
.portico-landing.apps .other-apps .apps .icon.fa-mobile-phone::after {
margin-top: 1px;
}
.portico-landing.apps .other-apps .apps .icon::after {
content: attr(data-label);
display: block;
font-size: 0.8rem;
font-weight: 600;
font-family: "Source Sans 3 VF", sans-serif;
margin-top: 10px;
}
.download-from-google-play-store img {
height: 42px;
padding: 15px 0;
}
.download-from-apple-app-store img {
height: 42px;
padding: 15px 0;
}
/* -- /for/open-source/ -- */
.portico-landing.why-page {
padding-top: 0;
}
.portico-landing.why-page .main {
max-width: 800px;
}
.portico-landing.why-page .hero {
padding: 200px 50px 100px;
@media (width < 900px) {
padding: 200px 0 100px;
}
&.empty-hero {
padding: 50px 50px 70px;
}
background-color: var(--color-background-solid-hero);
color: var(--color-text-hero);
}
.portico-landing.why-page .hero.small-hero {
padding: 120px 50px 30px;
}
.portico-landing.why-page .hero h1 {
position: relative;
margin: 0 0 20px;
font-size: 3.5em;
font-weight: 300;
}
.portico-landing.why-page .hero p {
width: 70%;
margin: 0 auto;
font-size: 1.3em;
text-align: center;
opacity: 0.9;
}
.portico-landing.why-page .markdown {
font-size: 1.1rem;
}
/* We use simple markdown syntax for blockquotes on those marketing
pages (chiefly case studies), and we style them to look identical
to the intro quotes. */
.markdown > blockquote,
.intro_quote blockquote {
background-color: var(--color-background-box);
border-left: 5px solid var(--color-prominent-border);
padding: 20px 30px;
margin: 20px 0;
font-size: 1.05em;
font-weight: 400;
& p {
line-height: 1.5;
margin: 0;
font-weight: 400;
}
& p:last-child {
margin-top: 10px;
}
.author {
padding-top: 20px;
}
}
.portico-landing.why-page .main img {
display: block;
margin: 0 auto;
max-width: 100%;
box-shadow: none;
border: none;
}
.portico-landing.why-page .photo-description {
position: relative;
top: 10px; /* Place in padding gap below photo */
height: 0;
font-size: 0.8em;
font-weight: normal;
line-height: 100%;
color: hsl(0deg 0% 53%);
}
.portico-landing.why-page .team h2 {
margin-top: 20px;
}
.portico-landing.why-page .bg-events {
position: relative;
background-image: url("../../images/landing-page/events/for-events.jpg");
background-size: cover;
background-position: center;
}
.portico-landing.why-page .bg-education {
position: relative;
background-image: url("../../images/landing-page/education/for-education-cover.jpg");
background-size: cover;
background-position: center;
}
.portico-landing.why-page .bg-companies {
position: relative;
background-image: url("../../images/landing-page/education/companies-laptop.jpg");
background-size: cover;
background-position: center;
.bg-dimmer {
background-color: hsl(224deg 52% 12% / 75%);
}
}
.portico-landing.why-page .bg-pycon {
position: relative;
background-image: url("../../images/landing-page/pycon.jpg");
background-size: cover;
background-position: center;
}
.portico-landing.why-page .bg-pycon.drone {
background-image: url("../../images/landing-page/pycon-drone.jpg");
}
.portico-landing.why-page .bg-pycon.mit {
background-image: url("../../images/landing-page/mit-lobby-7.jpg");
}
.portico-landing.why-page .bg-pycon.security {
background-image: url("../../images/landing-page/security.jpg");
}
.portico-landing.why-page .bg-pycon.why-zulip {
background-image: url("../../images/landing-page/why-zulip/why-zulip-threads.jpg");
}
.portico-landing.why-page .bg-pycon.partners {
background-image: url("../../../static/images/landing-page/hands.jpg");
}
.portico-landing.why-page .bg-pycon.clouds {
background-image: url("../../images/landing-page/clouds.jpg");
}
.portico-landing.why-page .bg-pycon.programmer {
background-image: url("../../../static/images/landing-page/engineers/programmer.jpg");
}
.portico-landing.why-page .bg-dimmer {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: hsl(224deg 52% 12% / 70%);
z-index: 0;
}
.portico-landing.why-page .bg-pycon .content {
position: relative;
z-index: 1;
}
/* -- hello page styling -- */
.portico-landing.hello .apps .screen {
display: inline-block;
margin: 0 10px;
text-align: left;
}
.portico-landing.hello .apps .screen.ios {
width: 200px;
height: 350px;
padding: 30px 0;
border-radius: 20px;
transform: translateY(50px);
background-color: hsl(0deg 0% 100%);
}
.portico-landing.hello .apps .screen.android {
width: 200px;
height: 370px;
padding: 10px 0 30px;
border-radius: 20px;
transform: translateY(-110px);
background: linear-gradient(
90deg,
hsl(0deg 0% 27%) 0%,
hsl(0deg 0% 33%) 8%,
hsl(0deg 0% 33%) 92%,
hsl(0deg 0% 27%) 100%
);
}
.portico-landing.hello .apps .screen .center-page {
height: calc(100% - 20px);
}
.portico-landing.hello .apps .screen .center-page .message-feed {
margin-top: 10px;
}
.portico-landing.hello .apps .screen.ios::before {
top: 17px;
left: calc(50% - 20px);
width: 40px;
height: 5px;
background-color: hsl(0deg 0% 80%);
}
.portico-landing.hello .apps .screen.ios::after {
top: auto;
bottom: 7px;
left: calc(50% - 12.5px);
background-color: hsl(0deg 0% 80%);
}
.portico-landing.hello .apps .screen.android::before {
content: none;
}
.portico-landing.hello .apps .screen.android::after {
top: auto;
bottom: 10px;
left: calc(50% - 17.5px);
border-radius: 8px;
background-color: hsl(0deg 0% 13%);
width: 35px;
height: 20px;
}
.portico-landing.hello .apps .screen.ios .main-page {
border-color: hsl(0deg 0% 87%);
}
.portico-landing.hello .apps .screen.android .main-page {
border-color: hsl(0deg 0% 13%);
}
/* -- gradients -- */
.gradients {
width: 100%;
position: absolute;
top: 0;
z-index: 1;
}
.gradients .gradient {
position: absolute;
left: 0;
width: 100%;
height: 1100px;
}
.gradients .gradient.dark-blue {
background: linear-gradient(
10deg,
hsl(196deg 58% 14% / 0%) 50%,
hsl(196deg 58% 14% / 70%)
);
}
.gradients .gradient.green {
background: linear-gradient(
-25deg,
hsl(156deg 47% 47% / 0%) 40%,
hsl(156deg 47% 47%)
);
}
.gradients .gradient.blue {
background: linear-gradient(
25deg,
hsl(196deg 38% 51% / 0%) 40%,
hsl(196deg 38% 51%)
);
}
.gradients .gradient.sunburst {
background: linear-gradient(
5deg,
hsl(49deg 71% 68% / 0%) 20%,
hsl(49deg 71% 68%)
);
}
.gradients .gradient.white-fade {
background: linear-gradient(
0deg,
hsl(0deg 0% 100%) 0%,
hsl(0deg 0% 98% / 0%) 40%
);
}
/* -- pricing css -- */
.portico-landing.plans .main {
width: 100%;
}
.portico-landing.plans .main .padded-content > h1 {
text-align: center;
font-size: 2.5em;
margin: 0;
color: hsl(0deg 0% 100%);
}
.portico-landing.plans .main .padded-content > h2 {
text-align: center;
font-size: 1.5em;
margin-bottom: 50px;
color: hsl(0deg 0% 100%);
}
.for-education-pricing-model .pricing-container {
text-align: center;
}
.for-education-pricing-model .pricing-container .block {
display: inline-block;
margin: 40px 20px 20px;
}
.for-education-pricing-model .pricing-container .block .plan-title {
padding: 10px;
margin-bottom: 3px;
color: hsl(0deg 0% 100%);
font-size: 2em;
font-weight: 300;
}
.for-education-pricing-model .pricing-container .text-content {
margin: 18px;
}
.for-education-pricing-model .padded-content .text-header .text-content h1 {
margin-top: 0;
}
.for-education-pricing-model .pricing-container .text-content h2 {
font-size: 1.5em;
font-weight: 400;
margin-bottom: 0;
text-align: left;
}
.for-education-pricing-model .pricing-container hr {
border: none;
border-bottom: 2px solid var(--color-prominent-border);
margin: 15px 0;
}
.for-education-pricing-model .pricing-container .text-content .description {
font-size: 0.9em;
font-weight: 400;
color: hsl(0deg 0% 53%);
}
.for-education-pricing-model .pricing-container ul.feature-list {
list-style: none;
padding: 0;
margin: 0;
}
.for-education-pricing-model .pricing-container ul.feature-list li {
position: relative;
padding: 10px 0 10px 25px;
font-size: 0.9em;
font-weight: 400;
}
.for-education-pricing-model .pricing-container ul.feature-list li::before {
content: " ";
position: absolute;
top: 10px;
left: 0;
width: 20px;
height: 18px;
background-image: url("../../images/checkbox-green.svg");
background-size: contain;
background-position: center;
background-repeat: no-repeat;
/* TODO: Adjust checkbox-green.svg so we're not tuning colors like this. */
filter: grayscale(1) invert(0.3);
}
.for-education-pricing-model .pricing-container .bottom {
position: absolute;
bottom: 0;
width: 100%;
height: 150px;
background-color: hsl(0deg 0% 93%);
}
.for-education-pricing-model .pricing-container .text-content .price::before {
content: "$";
position: relative;
vertical-align: top;
top: 7px;
left: -3px;
font-size: 2rem;
font-weight: 300;
color: hsl(0deg 0% 53%);
}
.for-education-pricing-model .pricing-container .text-content .price {
display: inline-block;
margin-right: 2px;
font-size: 3.5em;
font-weight: 600;
line-height: 0.8;
margin-top: 4px;
}
.for-education-pricing-model .pricing-container .bottom .details {
display: inline-block;
vertical-align: top;
margin-left: 8px;
margin-top: 4px;
font-size: 0.9em;
font-weight: 400;
color: hsl(0deg 0% 53%);
text-align: left;
white-space: nowrap;
}
.for-education-pricing-model .pricing-container .bottom .button {
margin-top: 24px;
}
.for-education-pricing-model
.pricing-container
.text-content
.standard-price-box {
display: flex;
height: 55px;
.pricing-period {
color: hsl(0deg 0% 27%);
}
}
.for-education-pricing-model
.pricing-container
.text-content
.price
.price-cents {
font-size: 0.4em;
vertical-align: top;
position: relative;
top: 6px;
}
#for-education-free-price-box {
.bottom {
height: 240px;
.text-content {
margin-top: 52px;
}
}
}
.plans_faq_questions {
background: transparent;
padding: 20px 0;
margin: auto;
&.plans_top_faq {
font-size: 17px;
font-weight: 400;
color: hsl(0deg 0% 53%);
padding-top: 0;
& p {
padding: 10px;
}
& p:first-child {
margin-top: -20px;
}
& p:last-child {
margin-bottom: 30px;
}
}
& p {
width: 80%;
margin: auto;
text-align: center;
@media (width <= 1100px) {
text-align: left;
}
}
}
.text-content .pricing-details {
padding: 15px 0;
height: 25px;
font-weight: 400;
color: hsl(0deg 0% 53%);
font-style: italic;
text-align: center;
&.multi-line {
padding: 5px 0 25px;
}
}
.portico-landing.jobs h2 {
line-height: 1.4;
margin: 20px 0 5px;
}
.portico-landing.jobs h3 {
line-height: 1.4;
margin: 20px 0 7px;
}
.portico-landing.jobs .how-we-work {
padding-top: 25px;
}
.portico-landing.jobs .what-were-building {
background-color: hsl(217deg 22% 93%);
}
@keyframes box-shadow-pulse {
0% {
box-shadow: 0 0 0 hsl(170deg 47% 60%);
}
50% {
box-shadow: 0 0 25px hsl(170deg 47% 60% / 80%);
}
100% {
box-shadow: 0 0 0 hsl(170deg 47% 60%);
}
}
/* -- media queries -- */
@media (width <= 1426px) {
.portico-landing.hello .integrations .integration-icons .hide-1 {
display: none;
}
.portico-landing.integrations .integration-categories-sidebar {
padding-left: 30px;
}
.portico-landing.integrations .integration-lozenge {
width: 135px;
}
}
@media (width <= 1390px) {
.portico-landing.plans
.pricing-container
.block:not(:first-child)
.responsive-title {
color: inherit;
}
}
@media (width <= 1376px) {
.portico-landing.plans .for-education-pricing-model .price-box {
margin: 20px;
}
}
@media (width <= 1295px) {
.portico-landing.hello .apps .right-side {
display: none;
}
.portico-landing.hello .apps .left-side {
width: 100%;
}
.portico-landing.hello .integrations .content {
max-width: 750px;
margin: 0 auto;
}
.portico-landing.hello .integrations .integration-icons {
max-width: 600px;
margin: 0 auto;
}
.portico-landing.hello .apps .left-side .content {
margin: 0 auto 50px;
}
}
@media (width <= 1024px) {
.portico-landing.hello .gradients .gradient {
height: 1400px;
}
.portico-landing {
padding-top: 170px;
}
.portico-landing.plans .compare .padded-content {
width: auto;
}
}
@media (width <= 985px) {
.portico-landing.apps .main {
width: 100%;
margin: 0;
}
.screen .message-feed .message .content {
top: -12px;
}
.portico-landing.hello .apps,
.portico-landing.hello .integrations {
padding: 200px 50px 80px;
}
.portico-landing.hello .apps .left-side .content {
width: 100%;
text-align: center;
}
.portico-landing.hello .integrations {
width: 100%;
padding: 80px 0;
}
.portico-landing.hello .integrations .content {
padding: 0 50px;
}
.portico-landing.hello .hero {
& header {
width: calc(100% - 50px);
}
}
}
@media (width <= 830px) {
.portico-landing.hello .apps .left-side .platform-icons .group {
margin: 50px 30px;
display: block;
}
}
@media (width <= 768px) {
.portico-landing.hello .open-source {
.flex {
display: block;
}
& img {
display: block;
width: 300px;
margin: 0 auto;
}
.il-block {
width: 75%;
}
}
.main {
width: auto;
}
.portico-landing.why-page .main {
width: auto;
margin: 0;
}
.portico-landing.why-page .hero {
padding-left: 20px;
padding-right: 20px;
font-size: 0.6em;
}
.portico-landing.why-page .hero p {
font-size: 2em;
width: 100%;
}
.portico-landing.why-page .padded-content,
.portico-landing.why-page .for-education-pricing-model .padded-content {
padding: 50px 20px;
}
.platform.image {
display: none !important;
}
.platform.description {
width: 100% !important;
}
.portico-landing.hello .hero {
& header {
width: 600px;
}
}
.portico-landing.hello .apps .left-side .content {
width: auto;
}
}
@media (width <= 1024px) {
.portico-landing {
padding-top: 120px;
}
.portico-landing.apps .hero h1 {
font-size: 1.9em;
font-weight: 400;
}
.portico-landing.apps .other-apps {
padding: 50px 5px 120px;
}
.portico-landing.apps .other-apps h2 {
font-size: 1.5em;
width: 100%;
}
.portico-landing.apps .other-apps .apps .icon {
padding: 0 14px;
width: 30px;
padding-top: 8px;
padding-bottom: 0;
font-size: 2.3em;
}
.portico-landing.apps .other-apps .apps .icon.fa-mobile-phone {
padding: 7px 10px 5px;
width: 35px;
font-size: 2.5em;
}
.portico-landing.apps .other-apps .apps .icon.fa-windows {
font-size: 2em;
padding: 10px 13px 2px !important;
}
.portico-landing.apps .other-apps .apps .icon::after {
content: "";
}
.portico-landing.apps .hero .image {
display: none;
}
.portico-landing.apps .hero .info {
width: 100%;
}
.main {
width: calc(100% - 50px);
margin: 0 auto;
}
.portico-landing.hello .hero {
padding-bottom: 100px;
.waves {
height: 450px;
}
& header {
width: auto;
}
}
.portico-landing.apps .main ul.sidebar {
display: block;
text-align: center;
margin-bottom: 10px;
}
.portico-landing.apps .main ul.sidebar li {
display: inline-block;
padding: 10px;
width: 80px;
text-align: center;
border-radius: 4px;
}
}
@media (width <= 640px) {
.portico-landing.hello .integrations .integration-icons .group {
margin: 10px 16px 0;
}
}
@media (width <= 550px) {
.billing-upgrade-page {
.payment-schedule {
.box {
width: 100px;
height: 80px;
}
}
}
}
@media (width <= 450px) {
.portico-landing.plans .for-education-pricing-model .price-box {
display: inline-flex;
flex-direction: column;
min-height: 500px;
height: auto;
max-width: 300px;
width: auto;
margin: 10px 0;
}
.for-education-pricing-model .pricing-container .text-content {
flex: 1;
}
.for-education-pricing-model .pricing-container .bottom {
position: static;
height: auto;
}
.portico-landing.hello .hero {
padding: 60px 5px 40px;
}
.portico-landing.hello header {
padding: 0 45px;
}
.portico-landing.hello .integrations .content header {
padding: 0;
}
.portico-landing.hello .integrations .integration-icons .group {
margin: 4px 2px;
}
.main {
width: 100%;
}
.portico-landing.plans .compare .padded-content {
padding: 20px;
}
.portico-landing.plans .pricing-container .block {
margin: 0;
}
.main .padded-content {
padding: 20px;
}
/* the gradients leave the bottom of the text and the button white so we
want to have the gradients stay darker for longer.
*/
.gradients .gradient.green {
background: linear-gradient(
-25deg,
hsl(156deg 47% 47% / 0%) 10%,
hsl(156deg 47% 47%) 80%
);
}
.gradients .gradient.blue {
background: linear-gradient(
25deg,
hsl(196deg 38% 51% / 0%) 10%,
hsl(196deg 38% 51%) 80%
);
}
.gradients .gradient.sunburst {
background: linear-gradient(
5deg,
hsl(49deg 71% 68% / 0%) 20%,
hsl(49deg 71% 68%) 80%
);
}
}
@media (width <= 375px) {
.portico-landing.hello .integrations .integration-icons .group {
width: 130px;
height: 215px;
}
.portico-landing.hello .integrations .integration-icons .integration-logo {
width: 60px;
}
.portico-landing.integrations .integration-categories-dropdown {
width: 323px;
}
}
#download-from-microsoft-store,
#download-android-apk,
#download-mac-intel {
display: block;
color: hsl(0deg 0% 100%);
font-size: 13px;
padding-left: 10px;
& a {
color: hsl(0deg 0% 100%);
}
}
#download-from-microsoft-store,
#download-mac-intel {
margin-top: 10px;
}
.download-instructions {
margin-top: 30px;
}
.feature-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
padding: 50px 4vw 10px;
.feature-half {
display: flex;
flex-direction: column;
justify-content: center;
}
.md-hide {
display: none;
}
.md-display {
display: block;
}
@media (width <= 768px) {
.feature-text {
margin-bottom: 10px;
}
}
@media (width >= 768px) {
display: grid;
column-gap: 5%;
grid-template-columns: 43% auto;
max-width: 1300px;
place-items: center;
margin: auto;
.alternate-grid& {
grid-template-columns: auto 43%;
}
.feature-half {
display: block;
}
.md-display {
display: none !important;
}
}
.feature-text {
& h1 {
font-size: 30px;
font-weight: 600;
}
& ul {
list-style: none;
margin-left: 0;
}
& ul li {
margin-bottom: 15px;
&::before {
float: left;
background-repeat: no-repeat;
content: "";
width: 18px;
height: 18px;
margin-right: 5px;
margin-top: 4px;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 24 24"><path d="M12 0c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm-1.25 17.292l-4.5-4.364 1.857-1.858 2.643 2.506 5.643-5.784 1.857 1.857-7.5 7.643z"/></svg>');
}
.list-content {
margin-left: 22px;
line-height: 1.6;
font-size: 18px;
}
}
}
.feature-image,
.message-screenshot {
& img,
div.quote {
width: 400px;
}
@media (width < 1024px) {
& div.quote {
width: 300px;
}
}
@media (width < 768px) {
& div.quote {
width: auto;
}
}
}
.message-screenshot {
position: relative;
img {
display: block;
mask-image: linear-gradient(
to right,
hsl(0deg 0% 0%) 75%,
transparent 100%
);
}
margin-bottom: 10px;
}
/* message-starred is used when the message screenshot captured using
the script "generate-user-message-screenshot" contains starred message.
This is done to reduce the fading effect on the image caused by
".message-screenshot" class so that the star is visible. */
.message-starred {
img {
mask-image: linear-gradient(
to right,
hsl(0deg 0% 0%) 95%,
transparent 100%
);
}
}
.feature-icon {
& img,
div.quote {
width: 100px;
}
}
}
.discounts-section {
text-align: center;
& header {
& b {
font-weight: 600;
color: hsl(169deg 45% 43%);
}
}
}
.register-buttons {
display: flex;
flex-flow: row wrap;
justify-content: center;
margin: 20px;
}
/* Common button styles */
.register-now,
.register-now:visited {
text-align: center;
display: flex;
flex-direction: column;
justify-content: center;
margin: 10px 20px;
width: 200px;
vertical-align: middle;
overflow: hidden;
}
.quote {
background: var(--color-background-box);
padding: 1em;
border-radius: 1em;
font-weight: 400;
margin: 40px 5px;
&:has(.triangle) {
background: var(--color-background-solid-hero);
blockquote {
background: unset;
color: var(--color-text-hero);
padding-left: 10px;
border-left: 5px solid var(--color-text-hero);
}
}
.case-study-link {
/* Keep on own line, and make box-model control possible. */
display: block;
padding-top: 20px;
text-decoration: underline;
}
.quote-with-attribution {
padding: 0 0 0 15px;
border-left: 5px solid var(--color-prominent-border);
.author,
blockquote {
margin: 0;
padding: 5px 20px 20px 10px;
}
.author {
padding-bottom: 10px;
}
}
& blockquote {
margin: 0;
font-size: 18px;
}
& cite {
font-style: normal;
}
}
.quote-in-feature-text blockquote {
background: transparent;
padding: 10px 20px;
margin: 20px 0;
/* TODO: Make border widths uniform; I think most are 5px. */
border-left: 6px solid var(--color-prominent-border);
}
.why-page,
.case-study-page,
.solutions-page {
.bottom-register-buttons.extra_margin_before_footer {
margin-bottom: 60px;
}
.hero-text {
position: relative;
width: 80%;
max-width: 700px;
margin: 40px auto;
font-size: 20px;
text-align: center;
font-weight: 400;
opacity: 0.9;
}
.hero-buttons {
display: flex;
flex-flow: row wrap;
justify-content: center;
}
.feature-end {
@media (width >= 768px) {
margin: 10px;
}
& h1 {
margin-top: 20px;
text-align: center;
font-weight: 600;
margin-bottom: 10px;
padding-bottom: 0;
}
& ul {
margin: auto;
max-width: 800px;
padding: 30px;
}
& p {
margin: auto;
max-width: 800px;
padding: 30px;
}
}
.price-asterisk {
text-align: center;
margin-top: 0 !important;
padding-top: 0 !important;
font-size: 15px;
opacity: 0.8;
max-width: 560px !important;
}
}
.bottom-register-buttons {
max-width: 800px;
margin: auto;
& h1 {
text-align: center;
font-weight: 600;
margin-bottom: 0;
padding-bottom: 0;
}
.hero-buttons {
margin: 20px;
}
}
.call-to-action-subhead {
text-align: center;
}
.solutions-page .education-feature-end {
margin: 0;
background-color: var(--color-background-solid-hero);
color: var(--color-text-hero);
h1 {
max-width: 800px;
margin: 0 auto;
padding: 48px 0 24px;
font-weight: 500;
}
}
.solutions-page .for-education-pricing-model {
color: var(--color-text-marketing-page);
.padded-content {
padding-bottom: 10px;
}
.pricing-container {
display: flex;
flex-flow: row wrap;
justify-content: center;
}
.price-box {
margin: 10px;
}
}
.for-education-pricing-model {
.pricing-details {
color: inherit;
font-style: inherit;
}
.price-box {
position: relative;
display: inline-block;
vertical-align: bottom;
margin: 0;
width: 300px;
height: 625px;
box-shadow: 0 0 10px hsl(0deg 0% 0% / 10%);
text-align: left;
background-color: hsl(0deg 0% 100%);
.bottom {
height: 275px;
.standard-register-button {
margin-top: 10px;
}
.free-text {
margin-top: 90px;
.pricing-details {
font-size: 34px;
}
& a {
margin-top: 76px;
}
}
.standard-price-box {
flex-flow: row wrap;
height: 90px;
font-size: 15px;
&:first-child {
padding-bottom: 10px;
}
& p {
padding: 0;
margin: 0 0 -10px;
width: 100%;
text-align: center;
font-weight: 600;
}
}
}
}
}
.portico-landing.why-page.case-study-page {
.bg-dimmer {
background-color: hsl(224deg 52% 12% / 86%);
}
}
.feature-intro {
max-width: 800px;
margin: 50px auto 0;
padding: 0 4vw;
& h1 {
font-size: 36px;
font-weight: 600;
}
}
.for-companies {
.feature-end {
margin-top: 50px;
.description {
margin: 0 10px;
}
& p {
padding: 10px;
}
.intro_quote {
margin: 20px auto 0;
max-width: 800px;
}
.for-education-pricing-model {
@media (width >= 768px) {
.price-box {
margin: 10px;
}
}
.padded-content {
padding: 20px;
}
.plan-title {
color: hsl(0deg 0% 0%);
}
}
}
}
.mirror-image {
transform: scaleX(-1);
}
.why-zulip {
.discounts-section {
margin: 30px;
& h1 {
font-weight: 700 !important;
font-size: 26px !important;
}
}
}
.portico-landing.why-page .hero.why-zulip {
padding-bottom: 120px;
.bg-dimmer {
background-color: hsl(224deg 52% 12% / 85%);
}
.padded-content {
padding-top: 0;
padding-bottom: 10px;
}
@media (width <= 768px) {
.register-buttons {
display: none;
}
}
.discounts-section .register-buttons a {
color: hsl(169deg 71% 64%);
&:hover {
color: hsl(0deg 0% 100%);
}
}
}
.why-zulip,
.hello {
.register-buttons {
max-width: 800px;
margin: auto;
margin-top: 30px;
& a {
min-height: 40px;
padding: 7px;
}
}
}
.self-hosting-page,
.why-page {
.hero-buttons {
margin-top: 30px;
}
}
.partners-page,
.self-hosting-page {
& p {
font-size: 18px !important;
}
.alternative-features {
.feature-container {
padding: 30px;
&:nth-child(even) {
background: var(--color-background-box);
border-radius: 10px;
}
}
.feature-icon img {
/* Once Bootstrap is removed, we'll need to keep these
images displaying as blocks, so that control over
their height and width remains possible. */
display: block;
width: 100%;
/* This is roughly the visual value of the features
SVGs in use, prior to their having proper height
and width attributes. Given their placement in
the layout, we're generally more concerned about
keeping their height sensible, rather than their
width, though the 100% width value maintains the
correct aspect ratio. */
max-height: 300px;
}
}
.triangle {
position: absolute;
top: 0;
left: 0;
width: 0;
height: 0;
border-style: solid;
border-width: 150px 100vw 0 0;
border-color: hsl(0deg 0% 100%) transparent transparent;
}
.quote {
position: relative;
margin: 0;
margin-top: 50px;
padding: 50px;
padding-top: 200px;
border-radius: 0;
& blockquote {
max-width: 700px;
margin: auto;
font-size: 24px;
.author {
font-size: 18px;
}
}
}
.feature-grid {
display: flex;
flex-direction: column;
width: 100%;
margin: 0;
background: var(--color-background-box);
padding: 50px 0;
/* TODO: simplify this markup for better use of grid here. */
.feature-row {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
max-width: 1000px;
margin: 0 auto;
gap: 20px;
/* TODO: Define grid areas, etc. to be able to lay out
intro quotes to the grid as well. */
&:has(.intro_quote) {
display: block;
}
.feature-box {
box-shadow:
0 1px 1px 0 hsl(193deg 100% 7.1% / 30%),
1px 1px 1px 0 hsl(193deg 100% 7.1% / 15%),
-1px 1px 1px 0 hsl(193deg 100% 7.1% / 15%);
background: hsl(0deg 0% 100%);
/* TODO: Eliminate this margin and use `gap` with
a fuller grid in the area. */
margin: 10px 0;
padding: 30px;
border-top: 5px solid var(--color-prominent-border);
& h1 {
font-weight: 600;
font-size: clamp(24px, 2.5vw, 32px);
}
.feature-icon img {
display: block;
margin: 0 auto;
width: 100px;
}
.feature-text {
ul {
padding-left: 30px;
}
ul li {
line-height: 1.3;
margin-bottom: 5px;
}
}
}
@media (width < 768px) {
max-width: 90%;
/* Drop to a single column. */
grid-template-columns: minmax(0, 1fr);
/* Drop gap to 0px; margins handle spacing currently.
TODO: Replace use of margins with gap with a fuller
grid definition. */
gap: 0;
.feature-box {
padding: 20px;
}
}
}
}
.for-education-pricing-model .pricing-container .price-box {
height: 525px;
.bottom {
height: 150px;
}
}
.feature-end {
margin: 0;
.feature-pricing {
padding: 50px;
background: linear-gradient(
180deg,
hsl(191deg 56% 55%),
hsl(169deg 65% 42%)
);
@media (width <= 540px) {
padding: 50px 0;
.price-box {
padding-bottom: 50px;
}
}
& h1 {
color: hsl(0deg 0% 100%);
}
}
}
}
/* TODO: Specify this height at the grid level
once there's a more robust grid in the area. */
.partners-page .feature-grid .feature-row {
min-height: 200px;
.feature-box {
justify-content: center;
}
}
.apps .apps-page-link {
text-decoration: underline;
color: hsl(0deg 0% 100%);
}
.zulip-cloud-page .hero-description {
font-size: 1.3em !important;
@media (width <= 768px) {
font-size: 2em !important;
}
}
.zulip-cloud-page .man-mobile-image {
width: auto;
height: 300px;
}
#engineers-love-zulip-page .grey-border {
border: 1px solid hsl(0deg 0% 80%);
}
#engineers-love-zulip-page .intro_quote blockquote {
max-width: 750px;
}