/*
Variables.
==================================================
*/
:root {
  --c-level1: #f00;
  --c-level2: #f90;
}
head {
  display: block;
  max-height: 200px;
  overflow: auto;
  font-size: 0;
  line-height: 0;
}
/*
leve1: Should to fixed
==================================================
*/
html:not([lang]),
html[lang=""] {
  display: block;
}
html:not([lang]):not([data-hvi])::before,
html[lang=""]:not([data-hvi])::before {
  margin: 8px;
  background-color: var(--c-level1);
  color: #ffffff;
  padding: 0.5em;
  display: block;
  font-size: 12px;
  line-height: 16px;
  content: '<html> needs [lang="…"]';
  position: relative;
  z-index: 20000;
}
style:empty,
script:not([src]):empty,
title:empty {
  display: block;
}
style:empty:not([data-hvi])::before,
script:not([src]):empty:not([data-hvi])::before,
title:empty:not([data-hvi])::before {
  margin: 8px;
  background-color: var(--c-level1);
  color: #ffffff;
  padding: 0.5em;
  display: block;
  font-size: 12px;
  line-height: 16px;
  content: 'Those element should not be empty';
  position: relative;
  z-index: 20000;
}
[style=""]:not([data-hvi]),
[title=""]:not([data-hvi]),
[id=""]:not([data-hvi]),
[src=""]:not([data-hvi]),
[href=""]:not([data-hvi]),
[name=""]:not([data-hvi]),
[for=""]:not([data-hvi]),
[type=""]:not([data-hvi]),
[width=""]:not([data-hvi]),
[height=""]:not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: 'Those props should not empty';
}
abbr:not([title]):not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: '<abbr> needs [title="…"]';
}
a[target]:not([rel*="noopener"]):not([data-hvi]),
a[target]:not([rel*="noreferrer"]):not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: '[target="…"] also needs [rel="noopener"] or [rel="noopener noreferrer"]';
}
/* figure */
:not(figure) > figcaption:not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: "<figcaption> must be a child of <figure>";
}
figure > figcaption:not(:first-child):not(:last-child):not([data-hvi]),
figure > figcaption:not(:first-child):not(:last-child) ~ :last-child:not(figcaption):not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: "<figcaption> must be first/last child of <figure>";
}
figure > figcaption:not(:first-of-type):not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: "<figure> should only contain one <figcaption>";
}
/* ul/ol */
:not(ul):not(ol) > li:not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: "<li> is missing a parent <ul> or <ol>";
}
ol > :not(li):not([data-hvi]),
ul > :not(li):not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: "Immediate child of <ol> or <ul> must be <li>";
}
:not(dl):not(div) > dd:not([data-hvi]),
:not(dl):not(div) > dt:not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: "<dd> or <dt> is missing a parent <dl> or <div>";
}
/* dl */
dl > :not(dt):not(dd):not(div):not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: "Immediate child of <dl> must be <dt>, <dd>, or <div>";
}
/* form */
fieldset > :not(legend):first-child:not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: "Invalid: first-child of <legend>";
}
:not(fieldset) > legend:not([data-hvi]),
fieldset > legend:not(:first-child):not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: "<legend> must be: first-child of <fieldset>";
}
input[type="radio"]:not([name]):not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: 'Radios without name="…"';
}
form button:not([type]):not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: '<button> in <form> need [type="…"]';
}
/* dom */
a a:not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: '<a/> should not be the kids of  <a/>';
}
p div:not([data-hvi]),
p + div:not(:empty) + p:empty:not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: '<div> is not allowed within <p>';
}
:not(svg) [href]:not(a):not(link):not(area):not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: 'attribute href not allowed on this element';
}
[target]:not(a):not(form):not([data-hvi]) {
  outline: 2px dashed var(--c-level1) !important;
  content: 'attribute target not allowed on this element';
}
