// SEO admin app styles. Colours follow the core admin palette. $ink: #1d2327; $ink-soft: #50575e; $muted: #646970; $line: #dcdcde; $line-soft: #f0f0f1; $border: #c3c4c7; $previous: #8c8f94; $surface-soft: #f6f7f7; $accent: var(--wp-admin-theme-color, #3858e9); $good: #00a32a; $good-text: #007017; $warn: #dba617; $bad: #d63638; $bad-text: #b32d2e; // Page header, printed by Admin::render() above the app. .wpiseo-topbar { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 16px; margin-left: -20px; padding: 12px 24px; border-bottom: 1px solid $line; background: #fff; &__title { display: flex; align-items: center; gap: 10px; min-width: 0; } &__mark { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 4px; background: $accent; } &__brand { color: $ink-soft; } &__sep { color: $border; } h1 { margin: 0; padding: 0; color: $ink; font-size: 18px; font-weight: 600; line-height: 1.3; } &__actions, &__slot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; } &__actions { margin-left: auto; } &__slot { gap: 8px 12px; &:empty { display: none; } } &__version { color: $muted; font-size: 12px; } } .wpiseo-wrap.wrap { max-width: 1400px; margin: 20px 24px 0 4px; } @media (max-width: 782px) { .wpiseo-topbar { margin-left: -10px; padding: 10px 12px; } .wpiseo-wrap.wrap { margin: 16px 10px 0 0; } } @media (max-width: 600px) { .wpiseo-topbar__brand, .wpiseo-topbar__sep { display: none; } } .wpiseo-admin { &__notice { margin: 0 0 16px; } h2 { margin: 0; font-size: 14px; } } .wpiseo-loading, .wpiseo-muted { color: #646970; } .wpiseo-separators { display: flex; flex-wrap: wrap; gap: 4px; .components-button { min-width: 36px; justify-content: center; } } .wpiseo-serp-preview { padding: 12px; border: 1px solid #dcdcde; border-radius: 4px; background: #fff; &__label { display: block; margin-bottom: 4px; color: #646970; font-size: 12px; } &__title { color: #1a0dab; font-family: arial, sans-serif; font-size: 18px; } } .wpiseo-modules { display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); margin-top: 12px; } .wpiseo-module { &.is-planned { opacity: 0.65; } &__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; } &__label { font-weight: 600; } &__description { margin: 8px 0 0; color: #50575e; } &__status { display: block; margin-top: 8px; color: #646970; font-size: 12px; } } @media (max-width: 600px) { .wpiseo-modules { grid-template-columns: 1fr; } } .wpiseo-page { max-width: 900px; } .wpiseo-stack { display: grid; gap: 16px; // Grid items default to their content's width; wide tables scroll. > * { min-width: 0; } } .wpiseo-page-tabs .components-tab-panel__tabs { margin-bottom: 16px; border-bottom: 1px solid #dcdcde; } .wpiseo-grid-2 { display: grid; gap: 16px; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); > .components-base-control, > .components-toggle-control { margin-bottom: 0; } } .wpiseo-subhead { margin: 16px 0 8px; font-size: 13px; font-weight: 600; } // Titled block inside a section (e.g. one per post type). .wpiseo-group { & + & { margin-top: 24px; padding-top: 24px; border-top: 1px solid #f0f0f1; } &__title { margin: 0 0 12px; font-size: 13px; font-weight: 600; } &__title + .wpiseo-muted { margin: -8px 0 12px; } } .wpiseo-details { margin-top: 8px; padding-top: 8px; border-top: 1px solid #f0f0f1; summary { margin-bottom: 12px; cursor: pointer; font-weight: 600; } } .wpiseo-savebar { position: sticky; bottom: 0; z-index: 10; display: flex; align-items: center; gap: 12px; margin-top: 8px; padding: 12px 0; border-top: 1px solid #dcdcde; background: #f0f0f1; } .wpiseo-actions-row { display: flex; flex-wrap: wrap; gap: 8px; } .wpiseo-usage { margin: 0 0 12px 18px; list-style: disc; code { word-break: break-all; } } .wpiseo-importer { margin-bottom: 16px; padding-bottom: 16px; border-bottom: 1px solid #f0f0f1; } .wpiseo-setup { max-width: 720px; } .wpiseo-page--wide { max-width: none; } .wpiseo-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 12px; .components-base-control { min-width: 180px; margin-bottom: 0 !important; } .components-button.is-primary { margin-left: auto; } } .wpiseo-bulkbar { align-items: center; margin-bottom: 12px; padding: 8px 12px; background: #f6f7f7; } .wpiseo-hours { border-collapse: collapse; th { padding-right: 16px; text-align: left; font-weight: 400; } td { padding: 4px 6px; } .components-base-control { margin-bottom: 0 !important; } input[type="time"]:disabled { opacity: 0.5; } } .wpiseo-mini-table { width: 100%; border-collapse: collapse; th, td { padding: 7px 0; border-bottom: 1px solid $line-soft; text-align: left; vertical-align: top; } th { padding-top: 4px; color: $muted; font-size: 12px; font-weight: 400; } .is-num { padding-left: 12px; text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; } .is-up { color: $good-text; } .is-down { color: $bad-text; } } .wpiseo-table-wrap { overflow-x: auto; } .wpiseo-table { td, th { vertical-align: top; } .check-column { width: 2.2em; padding: 10px 0 0 8px; } .components-base-control, .components-toggle-control { margin-bottom: 0 !important; } tr.is-disabled td { opacity: 0.6; } tr.is-changed td { background: #fcf9e8; } .row-actions .components-button.is-link { font-size: 13px; text-decoration: none; } } .wpiseo-url { word-break: break-all; } .wpiseo-small { font-size: 12px; } .wpiseo-tag { display: inline-block; margin-left: 6px; padding: 0 6px; border-radius: 2px; background: #f0f0f1; color: #50575e; font-size: 11px; line-height: 18px; } .wpiseo-pagination { display: flex; align-items: center; justify-content: flex-end; gap: 8px; margin-top: 12px; } .wpiseo-inline-form { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; .components-base-control { min-width: 220px; margin-bottom: 0 !important; } .components-notice { flex-basis: 100%; margin: 0; } } .wpiseo-rule-form { padding: 4px 0; } .wpiseo-counter { display: block; margin-top: 2px; color: #646970; font-size: 11px; text-align: right; &--over { color: #b32d2e; } } .wpiseo-bulk { &__post { width: 22%; } &__robots { width: 120px; } } .wpiseo-indent { margin: 0 0 16px 48px; } .wpiseo-code textarea { font-family: Menlo, Consolas, monospace; font-size: 12px; } .wpiseo-preview { overflow: auto; max-height: 360px; padding: 12px; border: 1px solid #dcdcde; background: #f6f7f7; font-size: 12px; white-space: pre-wrap; } @media (max-width: 782px) { .wpiseo-toolbar .components-button.is-primary { margin-left: 0; } .wpiseo-bulk { min-width: 720px; } } .wpiseo-fields { display: grid; gap: 12px; margin-top: 12px; } .wpiseo-columns { display: grid; grid-template-columns: repeat(auto-fit, minmax(380px, 1fr)); gap: 16px; } .wpiseo-pair { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 16px; > * { flex: 1 1 320px; min-width: 0; } > :first-child { flex-grow: 2; } } @media (max-width: 782px) { .wpiseo-columns { grid-template-columns: 1fr; } } // Stat tiles. .wpiseo-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px; } .wpiseo-tile { display: flex; flex-direction: column; gap: 2px; min-width: 0; padding: 14px 16px; border: 1px solid $line; border-radius: 4px; background: #fff; &__label { color: $muted; font-size: 12px; } &__value { color: $ink; font-size: 24px; font-weight: 600; line-height: 1.25; font-variant-numeric: tabular-nums; } &__unit { margin-left: 4px; color: $muted; font-size: 13px; font-weight: 400; } &__foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 8px; margin-top: 6px; font-size: 12px; } } .wpiseo-delta { .is-up { color: $good-text; } .is-down { color: $bad-text; } } .wpiseo-status-icon { display: block; flex: none; } // Charts. .wpiseo-sparkline { flex: none; path { fill: none; stroke: #a7aaad; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; } circle { fill: $accent; } } .wpiseo-meter { display: block; overflow: hidden; width: 100%; height: 6px; border-radius: 3px; background: #dfe5fb; background: color-mix(in srgb, $accent 16%, #fff); > span { display: block; height: 100%; border-radius: 3px; background: $accent; } } .wpiseo-legend { display: flex; flex-wrap: wrap; gap: 4px 16px; color: $ink-soft; font-size: 12px; > span { display: inline-flex; align-items: center; gap: 6px; } } .wpiseo-key { display: inline-block; width: 14px; height: 2px; border-radius: 1px; background: $accent; vertical-align: middle; &--previous { background: $previous; } } .wpiseo-trend { margin: 0; &__plot { position: relative; border-radius: 2px; outline: none; &:focus-visible { box-shadow: 0 0 0 2px $accent; } svg { display: block; overflow: visible; } } &__grid { stroke: $line-soft; } &__base { stroke: $border; } &__tick { fill: $muted; font-size: 11px; } &__area { fill: $accent; fill-opacity: 0.08; } &__line { fill: none; stroke: $accent; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; &--previous { stroke: $previous; } } &__cursor { stroke: $border; } &__dot { fill: $accent; stroke: #fff; stroke-width: 2; &--previous { fill: $previous; } } &__tip { position: absolute; top: 4px; min-width: 160px; padding: 8px 10px; border: 1px solid $line; border-radius: 2px; background: #fff; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08); font-size: 12px; white-space: nowrap; transform: translateX(-50%); pointer-events: none; .wpiseo-key { margin-right: 6px; } } figcaption { margin-top: 8px; } } .wpiseo-swatch { display: inline-block; width: 10px; height: 10px; border-radius: 2px; } .wpiseo-stack-bar { display: flex; gap: 2px; min-width: 0; height: 12px; &__part { min-width: 2px; &:last-child { border-radius: 0 4px 4px 0; } } } .wpiseo-swatch, .wpiseo-stack-bar__part { &.is-good { background: $good; } &.is-ok { background: $warn; } &.is-bad { background: $bad; } &.is-none { background: $line; } } .wpiseo-segmented { display: inline-flex; overflow: hidden; border: 1px solid $border; border-radius: 2px; background: #fff; button { min-height: 28px; padding: 0 10px; border: 0; border-left: 1px solid $border; background: transparent; color: $ink; font: inherit; font-size: 12px; cursor: pointer; &:first-child { border-left: 0; } &:hover { background: $surface-soft; } &:focus-visible { position: relative; outline: 2px solid $accent; outline-offset: -2px; } &[aria-pressed="true"] { background: $ink; color: #fff; } } } // Rows with an icon, text and an action (next steps, setup). .wpiseo-rows { margin: 0; padding: 0; list-style: none; } .wpiseo-row { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: start; gap: 4px 12px; margin: 0; padding: 12px 0; border-top: 1px solid $line-soft; &:first-child { padding-top: 4px; border-top: 0; } &__text { display: flex; flex-direction: column; gap: 2px; } .wpiseo-status-icon { margin-top: 1px; } &.is-done strong { color: $ink-soft; font-weight: 400; } } .wpiseo-checklist { margin: 0; list-style: none; li { display: flex; align-items: flex-start; gap: 10px; margin: 0; padding: 5px 0; } .wpiseo-status-icon { margin-top: 1px; } } .wpiseo-links { margin: 0; list-style: none; li { margin: 0 0 8px; } } .wpiseo-copy { display: flex; align-items: center; gap: 8px; code { overflow: hidden; flex: 1 1 auto; min-width: 0; padding: 5px 8px; border: 1px solid $line; border-radius: 2px; background: $surface-soft; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; } } // Dashboard. .wpiseo-dashboard { display: flex; flex-direction: column; gap: 20px; &__columns { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 20px; } &__main, &__side { display: flex; flex-direction: column; gap: 20px; min-width: 0; } &__main { flex: 2 1 560px; } &__side { flex: 1 1 300px; } } .wpiseo-search { &__summary { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; margin: 0 0 12px; font-size: 14px; } &__body { transition: opacity 0.2s; &.is-loading { opacity: 0.5; } } } .wpiseo-split { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 16px 32px; } .wpiseo-invite { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 24px; &__art { flex: none; } h3 { margin: 0 0 4px; font-size: 14px; } p { max-width: 520px; margin: 0 0 12px; } } .wpiseo-health { &__rows { margin: 0; list-style: none; } &__row { display: grid; grid-template-columns: minmax(90px, 140px) 1fr 104px; align-items: center; gap: 16px; margin: 0; padding: 8px 0; } &__name { display: flex; flex-direction: column; > span:first-child { font-weight: 600; } .wpiseo-muted { font-size: 12px; } } &__good { font-size: 12px; text-align: right; &.is-up { color: $good-text; } } &__count { font-size: 18px; font-weight: 600; line-height: 1.4; } &__counts { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; margin: 0; padding-top: 16px; border-top: 1px solid $line-soft; list-style: none; li { display: flex; flex-direction: column; margin: 0; } a { display: flex; flex-direction: column; text-decoration: none; &:hover .wpiseo-health__count, &:focus .wpiseo-health__count { text-decoration: underline; } } } } .wpiseo-setup-card__progress { display: inline-flex; align-items: center; gap: 8px; .wpiseo-meter { width: 120px; } } @media (max-width: 600px) { // The action moves under the text. .wpiseo-row { grid-template-columns: auto minmax(0, 1fr); .components-button { grid-column: 2; justify-self: start; } } .wpiseo-health__row { grid-template-columns: 1fr auto; gap: 8px 16px; .wpiseo-stack-bar { grid-row: 2; grid-column: 1 / -1; } } } // Pro offers (only while Pro is not installed). .wpiseo-pro-badge { display: inline-block; flex: none; padding: 0 6px; border: 1px solid $accent; border-radius: 2px; color: $accent; font-size: 11px; font-weight: 600; line-height: 16px; } .wpiseo-pro-offer { &__list { margin: 0 0 0 18px; color: $ink-soft; list-style: disc; li { margin: 0 0 4px; } } &__actions { display: flex; align-items: center; justify-content: space-between; gap: 8px; } } .wpiseo-pro-step { color: $ink-soft; font-size: 12px; } .wpiseo-pro-hint { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; margin: 0; padding: 10px 12px; border: 1px dashed $border; border-radius: 4px; color: $ink-soft; > span:not(.wpiseo-pro-badge) { flex: 1 1 260px; } } .wpiseo-pro-modules { margin-top: 32px; &__head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; h2 { margin: 0; font-size: 14px; font-weight: 600; } .components-button { margin-left: auto; } } .wpiseo-module.is-pro { background: $surface-soft; } } // Section spacing comes last: its selectors are the most specific. .wpiseo-section { // The heading flows into the content: no divider, one gap. (Card wraps // its header in an unclassed div, so this is not a child selector.) .components-card__header { flex-wrap: wrap; gap: 8px 16px; padding-bottom: 0; } h2 { margin: 0; font-size: 14px; font-weight: 600; line-height: 1.4; } .components-card__header .wpiseo-muted { margin: 4px 0 0; } .components-base-control, .components-toggle-control { margin-bottom: 16px; } fieldset .components-toggle-control, fieldset .components-checkbox-control { margin-bottom: 8px; } .components-base-control:last-child, .components-toggle-control:last-child { margin-bottom: 0; } // One spacing for every block in a section body. .components-card__body > * { margin-top: 0; margin-bottom: 0; } .components-card__body > * + * { margin-top: 16px; } // Help text stays close to what it describes. .components-card__body > * + .wpiseo-muted { margin-top: 8px; } .components-card__body > * + .wpiseo-subhead { margin-top: 24px; } .components-card__body > .wpiseo-subhead + * { margin-top: 8px; } .components-card__body > .wpiseo-group + .wpiseo-group { margin-top: 24px; } // Inside a card the save bar sits on the card's background. .wpiseo-savebar { background: #fff; } &__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; } &.wpiseo-setup-card h2 { font-size: 20px; font-weight: 400; } } // Tiles inside a card: compact, on a grey ground. .wpiseo-section .wpiseo-tiles:not(:last-child) { margin-bottom: 16px; } .wpiseo-section .wpiseo-tile { padding: 8px 12px; border-color: $line-soft; border-radius: 2px; background: $surface-soft; .wpiseo-tile__value { font-size: 18px; } } // Cards and tiles share one outline. .wpiseo-section.components-card { border: 1px solid $line; border-radius: 4px; box-shadow: none; }