feat: SEO field elements and bundle
This commit is contained in:
459
assets/src/elements/styles.css
Normal file
459
assets/src/elements/styles.css
Normal file
@@ -0,0 +1,459 @@
|
||||
/* SEO field elements (UI-SPEC C4, C5, C6, C14). Light DOM, every rule
|
||||
scoped under its element tag, colours from the public --c-* variables
|
||||
only (except the E-1 mimic palette inside golem15-seo-serp .serp-card). */
|
||||
|
||||
golem15-seo-text,
|
||||
golem15-seo-robots,
|
||||
golem15-seo-serp,
|
||||
golem15-seo-image {
|
||||
display: block;
|
||||
color: var(--c-text);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
golem15-seo-text .seo-visually-hidden,
|
||||
golem15-seo-image .seo-visually-hidden {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
overflow: hidden;
|
||||
clip: rect(0 0 0 0);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
golem15-seo-text .seo-text__control {
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
height: 44px;
|
||||
padding: 0 14px;
|
||||
border: 1px solid var(--c-border-strong);
|
||||
border-radius: 10px;
|
||||
background: var(--c-surface);
|
||||
color: var(--c-text);
|
||||
font: inherit;
|
||||
font-size: 14px;
|
||||
transition: border-color 150ms, box-shadow 150ms;
|
||||
}
|
||||
|
||||
golem15-seo-text .seo-text__control--area {
|
||||
height: auto;
|
||||
min-height: 96px;
|
||||
padding: 10px 14px;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
golem15-seo-text .seo-text__control:focus {
|
||||
outline: none;
|
||||
border-color: var(--c-primary);
|
||||
box-shadow: 0 0 0 3px var(--c-ring);
|
||||
}
|
||||
|
||||
golem15-seo-text.seo-text--invalid .seo-text__control {
|
||||
border-color: var(--c-danger);
|
||||
}
|
||||
|
||||
golem15-seo-text .seo-text__counter {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: 16px;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 8px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
golem15-seo-text .seo-text__status {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
golem15-seo-text .seo-text__icon {
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
golem15-seo-text .seo-text__count {
|
||||
color: var(--c-muted);
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
|
||||
golem15-seo-text[data-status='empty'] .seo-text__status {
|
||||
color: var(--c-muted);
|
||||
}
|
||||
|
||||
golem15-seo-text[data-status='good'] .seo-text__status {
|
||||
color: var(--c-ok-text, var(--c-text));
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__groups {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 24px;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__caption,
|
||||
golem15-seo-robots .seo-robots__summary,
|
||||
golem15-seo-robots .seo-robots__hint {
|
||||
color: var(--c-muted);
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__track,
|
||||
golem15-seo-serp .seo-serp__track {
|
||||
display: inline-flex;
|
||||
gap: 4px;
|
||||
padding: 4px;
|
||||
border: 1px solid var(--c-border);
|
||||
border-radius: 12px;
|
||||
background: var(--c-subtle);
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__segment,
|
||||
golem15-seo-serp .seo-serp__segment {
|
||||
height: 34px;
|
||||
padding: 0 16px;
|
||||
border: 0;
|
||||
border-radius: 9px;
|
||||
background: transparent;
|
||||
color: var(--c-muted);
|
||||
font: inherit;
|
||||
font-size: 13px;
|
||||
cursor: pointer;
|
||||
transition: background-color 150ms, color 150ms;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__segment[aria-checked='true'],
|
||||
golem15-seo-serp .seo-serp__segment[aria-checked='true'] {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
background: var(--c-surface);
|
||||
color: var(--c-text);
|
||||
box-shadow: var(--shadow-tab, none);
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__segment--ok[aria-checked='true'] {
|
||||
background: var(--c-ok-bg, var(--c-surface));
|
||||
color: var(--c-ok-text, var(--c-text));
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__segment--danger[aria-checked='true'] {
|
||||
background: var(--c-danger-soft);
|
||||
color: var(--c-danger);
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__segment:focus-visible,
|
||||
golem15-seo-robots .seo-robots__toggle:focus-visible,
|
||||
golem15-seo-serp .seo-serp__segment:focus-visible,
|
||||
golem15-seo-serp .seo-serp__link:focus-visible,
|
||||
golem15-seo-image .seo-image__button:focus-visible {
|
||||
outline: 3px solid var(--c-ring);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__advanced-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__toggle {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
background: none;
|
||||
color: var(--c-text);
|
||||
font: inherit;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__toggle[aria-expanded='true'] .seo-icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__panel {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 16px;
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__panel[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__field {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__input {
|
||||
box-sizing: border-box;
|
||||
height: 44px;
|
||||
padding: 0 14px;
|
||||
border: 1px solid var(--c-border-strong);
|
||||
border-radius: 10px;
|
||||
background: var(--c-surface);
|
||||
color: var(--c-text);
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__input:focus {
|
||||
outline: none;
|
||||
border-color: var(--c-primary);
|
||||
box-shadow: 0 0 0 3px var(--c-ring);
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__error {
|
||||
color: var(--c-danger);
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__checks {
|
||||
grid-column: 1 / -1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__check {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
golem15-seo-robots .seo-robots__check input {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 5px;
|
||||
accent-color: var(--c-primary);
|
||||
}
|
||||
|
||||
golem15-seo-robots.seo-robots--invalid .seo-robots__track {
|
||||
border-color: var(--c-danger);
|
||||
}
|
||||
|
||||
golem15-seo-serp .seo-serp__skeleton {
|
||||
max-width: 600px;
|
||||
height: 132px;
|
||||
border-radius: 12px;
|
||||
background: var(--c-skel);
|
||||
}
|
||||
|
||||
golem15-seo-serp .seo-serp__header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
golem15-seo-serp .seo-serp__language,
|
||||
golem15-seo-serp .seo-serp__notes {
|
||||
color: var(--c-muted);
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
golem15-seo-serp .serp-card {
|
||||
--serp-bg: #ffffff;
|
||||
--serp-site: #202124;
|
||||
--serp-title: #1a0dab;
|
||||
--serp-text: #4d5156;
|
||||
box-sizing: border-box;
|
||||
max-width: 600px;
|
||||
padding: 16px;
|
||||
border: 1px solid var(--c-border);
|
||||
border-radius: 12px;
|
||||
background: var(--serp-bg);
|
||||
font-family: Arial, sans-serif;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
golem15-seo-serp .serp-card--mobile {
|
||||
max-width: 360px;
|
||||
}
|
||||
|
||||
golem15-seo-serp .serp-card__site {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
golem15-seo-serp .serp-card__favicon {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
border: 1px solid var(--c-border);
|
||||
border-radius: 50%;
|
||||
background: var(--c-subtle);
|
||||
color: var(--c-muted);
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
golem15-seo-serp .serp-card__names {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
color: var(--serp-site);
|
||||
}
|
||||
|
||||
golem15-seo-serp .serp-card__sitename {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
golem15-seo-serp .serp-card__crumbs {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
golem15-seo-serp .serp-card__title {
|
||||
margin-top: 6px;
|
||||
color: var(--serp-title);
|
||||
font-size: 20px;
|
||||
line-height: 1.3;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
golem15-seo-serp .serp-card--mobile .serp-card__title {
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
golem15-seo-serp .serp-card__description {
|
||||
margin-top: 4px;
|
||||
color: var(--serp-text);
|
||||
font-size: 14px;
|
||||
line-height: 1.58;
|
||||
}
|
||||
|
||||
golem15-seo-serp .serp-card__description--missing {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
golem15-seo-serp .seo-serp__notes {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
golem15-seo-serp .seo-serp__error {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
color: var(--c-danger);
|
||||
}
|
||||
|
||||
golem15-seo-serp .seo-serp__checks,
|
||||
golem15-seo-serp .seo-serp__keyphrase {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6px;
|
||||
margin-top: 12px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
golem15-seo-serp .seo-serp__checking {
|
||||
color: var(--c-muted);
|
||||
}
|
||||
|
||||
golem15-seo-serp .seo-serp__keyphrase-title {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
golem15-seo-serp .seo-serp__check {
|
||||
display: inline-flex;
|
||||
align-items: flex-start;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
golem15-seo-serp .seo-serp__check--ok {
|
||||
color: var(--c-ok-text, var(--c-text));
|
||||
}
|
||||
|
||||
golem15-seo-serp .seo-serp__check .seo-icon {
|
||||
flex: none;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
golem15-seo-serp .seo-serp__link {
|
||||
color: var(--c-text);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
golem15-seo-image .seo-image__preview {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
golem15-seo-image .seo-image__img {
|
||||
display: block;
|
||||
width: 240px;
|
||||
height: 126px;
|
||||
object-fit: cover;
|
||||
border: 1px solid var(--c-border);
|
||||
border-radius: 10px;
|
||||
background: var(--c-subtle);
|
||||
}
|
||||
|
||||
golem15-seo-image .seo-image__actions {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
golem15-seo-image .seo-image__button {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
height: 36px;
|
||||
padding: 0 14px;
|
||||
border: 1px solid var(--c-border-strong);
|
||||
border-radius: 10px;
|
||||
background: var(--c-surface);
|
||||
color: var(--c-text);
|
||||
font: inherit;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
golem15-seo-image .seo-image__status {
|
||||
margin-top: 6px;
|
||||
color: var(--c-muted);
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
golem15-seo-image .seo-image__status--error {
|
||||
color: var(--c-danger);
|
||||
}
|
||||
|
||||
golem15-seo-image.seo-image--invalid .seo-image__img {
|
||||
border-color: var(--c-danger);
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
golem15-seo-robots .seo-robots__panel {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
golem15-seo-serp .serp-card,
|
||||
golem15-seo-serp .serp-card--mobile {
|
||||
max-width: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
golem15-seo-text .seo-text__control,
|
||||
golem15-seo-robots .seo-robots__segment,
|
||||
golem15-seo-serp .seo-serp__segment {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user