]> Raphaël G. Git Repositories - airbundle/blobdiff - Resources/public/css/screen.css
Add google calendar logo
[airbundle] / Resources / public / css / screen.css
index 54777261b437ce5579205d1383ce5f8746e335a9..f4ee83062fef34dc9cd5a7275844ac03054a434b 100644 (file)
 /* Reset link */
 a {
-       text-decoration: none;
-       color: #066;
+       /*text-decoration: none;*/
+       color: #136;
 }
 
 a:hover {
        text-decoration: underline solid #00c3f9;
 }
 
-h1::first-letter,
-h2::first-letter,
-h3::first-letter,
-h4::first-letter,
-h5::first-letter,
-h6::first-letter,
-a::first-letter {
-       color: #00c3f9;
+/* Font styling */
+html, body, dd, li, p, td {
+       /* DejaVu Sans/FreeSans/FreeSerif/Linux Libertine/Symbola/Unifont*/
+       font-family: 'Droid Sans', 'Symbola', 'DejaVu Sans', 'FreeSans', sans-serif;
+}
+
+button, code, input, option, optgroup, pre, select, textarea {
+       font-family: 'Droid Sans Mono', monospace;
+}
+
+dt, h1, h2, h3, h4, h5, h6, label, legend, th, details {
+       font-family: 'Droid Serif', serif;
 }
 
 /* Default styling */
 h1 {
-       font-size: 2rem;
-       margin: 1.34rem 0;
+       font-size: 1.5rem;
+       margin: 0;
+       padding: 0 .6rem .6rem;
 }
 
 h2 {
-       font-size: 1.5rem;
-       margin: 1.245rem 0;
+       font-size: 1.17rem;
+       margin: 0;
+       padding: 0 .5rem .5rem;
 }
 
 h3 {
-       font-size: 1.17rem;
-       margin: 1.17rem 0;
+       font-size: 1rem;
+       margin: 0;
+       padding: 0 .4rem .4rem;
 }
 
 h4 {
-       font-size: 1rem;
-       margin: 1.33rem 0;
+       font-size: .85rem;
+       margin: 0;
+       padding: 0 .3rem .3rem;
 }
 
 h5 {
-       font-size: .83rem;
-       margin: 1.386rem 0;
+       font-size: .67rem;
+       margin: 0;
+       padding: 0 .2rem .2rem;
 }
 
 h6 {
-       font-size: .67rem;
-       margin: 1.561rem 0;
+       font-size: .5rem;
+       margin: 0;
+       padding: 0 .1rem .1rem;
 }
 
-p {
+ul {
+       list-style: ' - ' inside none;
+       margin: 0;
+       padding: 0 .5rem .5rem;
 }
 
-body {
-       display: flex;
-       flex-flow: column wrap;
-       color: #066;
+li {
+       font-size: .9rem;
+       margin: 0;
+       padding: 0 .5rem .5rem;
 }
 
-/* Header */
-#header {
+li:only-child,
+li:last-child,
+li:last-of-type {
+       padding-bottom: 0;
+}
+
+p {
+       font-size: .9rem;
+       margin: 0;
+       padding: 0 .4rem .4rem;
+}
+
+article,
+section,
+nav {
+       margin: 0 .5rem .5rem;
        border: .1rem solid #00c3f9;
        border-top: 0;
-       border-radius: 0 0 .5rem .5rem;
-       margin: .5rem;
-       margin-top: 0;
-       padding: .5rem;
-       left: 0;
-       right: 0;
-       display: flex;
-       justify-content: space-between;
-       min-width: 180px;
+       border-left: 0;
+       border-radius: .5rem;
 }
 
-#header h1 {
-       order: 0;
-       padding: 0;
-       margin: 0;
-       vertical-align: middle;
-       white-space: nowrap;
+article article {
+       margin: 0 .3rem .3rem;
+       border-radius: .4rem;
 }
 
-#header h1 a {
-       display: flex;
+article article article {
+       margin: 0 .2rem .2rem;
+       border-radius: .3rem;
 }
 
-/*#header h2 {
-       order: 1;
-       font-size: 1.5rem;
-       margin: 0;
-       white-space: nowrap;
+section {
+       border-radius: .4rem;
+}
+
+/*article {
+       background-color: #cff;
 }
 
-#header h2:before {
-       content: ">\00a0";
+article article {
+       background-color: white;
+}
+
+article article article {
+       border-radius: .3rem;
+       background-color: #cff;
 }*/
 
-#header nav {
-       order: 3;
-       margin-left: auto;
-       display: flex;
-       flex-direction: row;
-       flex-wrap: wrap;
-       align-items: center;
-       justify-content: flex-end;
+header {
+       margin: 0 0 .5rem;
+       padding: .5rem;
+       border-radius: .4rem .4rem 0 0;
+       /*background-color: #369;
+       border-radius: inherit;*/
+       background-color: #00c3f9;
+       color: #136;
+}
+
+header h2,
+header h3,
+header h4,
+header h5,
+header h6,
+header p {
+       padding-left: 0;
+       padding-right: 0;
+}
+
+header h2:last-child,
+header h3:last-child,
+header h4:last-child,
+header h5:last-child,
+header h6:last-child,
+header p:last-child {
+       padding-bottom: 0;
+}
+
+/*p:only-child,
+p:last-child,
+p:last-of-type {
+       padding-bottom: 0;
+}*/
+
+/*header h2:first-child {
+       padding-top: .5rem;
 }
 
-#header nav h2 {
-       display: none;
+header h3:first-child {
+       padding-top: .4rem;
 }
 
-#header nav a {
-       text-align: center;
-       border-radius: .25rem;
-       padding: .375rem .5rem .25rem .5rem;
-       margin: 0 0 .1rem .5rem;
-       border: .1rem solid #00c3f9;
-       font-weight: bold;
-       background-color: #cff;
+header h4:first-child {
+       padding-top: .3rem;
 }
 
-/* Message */
-div.error::before,
-div.error::after {
-       content: "⚠";
-       line-height: 100%;
-       margin: auto 0;
+header h5:first-child {
+       padding-top: .2rem;
 }
 
-div.error {
-       display: flex;
-       flex-direction: row;
-       justify-content: space-between;
-       border: .05rem solid #c33333;
-       background-color: #f9c3c3;
-       color: #c33333;
-       font-size: .9rem;
-       padding: .2rem;
-       border-radius: .2rem;
-       text-align: center;
+header h6:first-child {
+       padding-top: .1rem;
 }
 
-div.flash {
-       margin: 0 .5rem .5rem;
+header p:last-child {
+       padding-top: 0;
+}*/
+
+/*article header {
+       border-radius: .4rem .4rem 0 0;
+}*/
+
+/*article article header {
+       border-radius: .3rem .3rem 0 0;
+       margin-bottom: .3rem;
 }
 
-/*ul#error::before,
-ul#error::after,
-ul.error::before,
-ul.error::after,
-ul#notice::before,
-ul#notice::after {
-       content: "⚠";
-       padding: .1rem .5rem 0 .5rem;
-       position: absolute;
+article article article header {
+       border-radius: .2rem .2rem 0 0;
+       margin-bottom: .2rem;
+}*/
+
+/*header h1,
+header h2,
+header h3,
+header h4,
+header h5,
+header h6,
+header p {
+       margin-bottom: 0;
+       padding-bottom: 0;
+}*/
+
+.ellipsis {
+       /*Required for ellipsis on h2/h3/h4 in header*/
+       display: grid;
+       margin-bottom: 0;
 }
 
-ul#error::before,
-ul#error::after {
-       padding-top: .2rem;
+.ellipsis > * {
+       overflow-x: hidden;
+       text-overflow: ellipsis;
+       white-space: nowrap;
 }
 
-ul#notice::before,
-ul#notice::after {
-       content: "ℹ";
-       padding-top: .3rem;
+/*nav strong {
+       display: block;
+       font-size: 1.17rem;
+       margin: 0 0 .5rem;
+       padding: .4rem;
+}*/
+
+strong {
+       font-weight: bold;
 }
 
-ul#notice::after,
-ul#error::after {
-       margin-left: 37.8rem;
+pre {
+       margin: 0 .5rem .3rem;
+       font-size: .8rem;
 }
 
-ul.error::after {
-       margin-left: 34rem;
+dl {
+       margin: 0 .5rem .5rem;
 }
 
-ul#notice,
-ul#error,
-ul.error {
-       display: flex;
-       flex-direction: column;
-       justify-content: center;
-       box-sizing: border-box;
-       text-align: center;
-       border: .05rem solid #c33333;
-       background-color: #f9c3c3;
-       color: #c33333;
-       font-size: .9rem;
-       padding: .2rem;
-       border-radius: .2rem;
-       width: 40rem;
-       margin: 0 auto .5rem auto;
+dl:first-child,
+dl:only-child,
+dl:first-of-type {
+       margin-top: .5rem;
 }
 
-ul.error {
-       width: 36rem;
-       margin: .2rem 0 0 0;
+dt {
+       color: #369;
+       font-size: .9rem;
+       font-weight: bold;
 }
 
-ul#notice {
-       border: .05rem solid #3333c3;
-       background-color: #c3c3f9;
-       color: #3333c3;
+dd {
+       font-size: .9rem;
+       margin-left: 1rem;
 }
 
-ul.error {
-       margin-top: .2rem;
-}*/
+.map figure,
+.multimap figure,
+.thumb figure {
+       text-align: center;
+}
 
-/* Content */
-#form,
-#content,
-#dashboard {
+.map img,
+.multimap img,
+.thumb img {
+       border-radius: .2rem;
        border: .1rem solid #00c3f9;
-       border-radius: .5rem;
-       margin: .5rem;
-       margin-top: 0;
-       overflow: hidden;
-       padding: .5rem;
+       aspect-ratio: 1;
 }
 
-section h2 {
-       background-color: #cff;
-       border-bottom: .1rem solid #00c3f9;
-       margin: -.5rem -.5rem .5rem -.5rem;
-       padding: .5rem;
-       padding-bottom: .4rem;
+.map dd {
+       margin: 0;
 }
 
-/* Form */
-form {
-       display: flex;
-       flex-direction: column;
-       border: .05rem solid #00c3f9;
-       border-radius: .2rem;
-       padding: .5rem;
+.map dd img {
+       width: 100%;
+       width: calc(100% - .2rem);
+       height: auto;
 }
 
-form section {
-       margin-bottom: 1rem;
+.thumb img {
+       width: 100%;
+       width: calc(100% - 1.2rem);
 }
 
-form section:only-child,
-form section:last-child,
-form section:last-of-type {
-       margin-bottom: .5rem;
+.four .multimap {
+       grid-column: span 4;
 }
 
-form section section,
-form section section:only-child,
-form section section:last-child,
-form section section:last-of-type {
-       width: 50%;
-       margin-bottom: 0;
+.three .multimap {
+       grid-column: span 3;
 }
 
-form div {
-       display: flex;
-       flex-direction: row;
-       justify-content: space-around;
-       margin-bottom: .5rem;
+.two .multimap {
+       grid-column: span 2;
 }
 
-form div:only-child,
-form div:last-child,
-form div:last-of-type {
-       margin-bottom: 0;
+body {
+       display: flex;
+       flex-flow: column wrap;
+       color: #036;
 }
 
-form section div.error {
-       margin: 0 1rem;
+nav ul {
+       list-style: none inside none;
+       gap: .5rem;
+       /*margin: .5rem;*/
 }
 
-form section section div.error {
-       margin: .25rem 0 0 0;
+nav ul ul {
+       padding-top: .5rem;
 }
 
+/*nav ul ul {
+       margin-top: .5rem;
+       margin-bottom: 0;
+}*/
+
+/* Form */
 label {
-       min-width: 5rem;
-       font-size: .9rem;
-       padding: .2rem 0;
-       text-align: right;
+       font-size: .8rem;
        white-space: nowrap;
 }
 
 button,
 input,
 select,
+option,
+optgroup,
 textarea {
-       box-sizing: border-box;
-       width: 100%;
-       padding: .1rem;
        border: .05rem solid #00c3f9;
        border-radius: .2rem;
-       font-size: .8rem;
+       font-size: .75rem;
        color: #066;
+       background-color: transparent;
+       box-sizing: border-box;
 }
 
-button.submit {
-       width: 25%;
-       min-width: 8rem;
-       margin: 0 auto;
-       padding: .2rem .1rem;
+form {
+       display: flex;
+       flex-direction: column;
+       flex-wrap: wrap;
+       margin: 0 .5rem .5rem;
+       text-align: center;
 }
 
-/* Vertical form */
-.form_col {
-       margin-left: .5rem;
-       width: 10rem;
+form .row {
+       flex-direction: row;
 }
 
-.form_col div {
+form div {
+       display: flex;
+       align-content: space-around;
+       justify-content: center;
        flex-direction: column;
+       margin-bottom: .5rem;
 }
 
-.form_col div.error {
-       flex-direction: row;
+form div:only-child,
+form div:last-child,
+form div:last-of-type {
+       margin-bottom: 0;
 }
 
-.form_col label {
-       text-align: center;
+form label {
+       width: 12rem;
+       line-height: 1.3rem;
+       padding-right: 1rem;
+       text-align: right;
 }
 
-.form_col section section,
-.form_col section section:only-child,
-.form_col section section:last-child,
-.form_col section section:last-of-type {
-       width: auto;
+form label.captcha {
+       line-height: normal;
 }
 
-.form_col div.date {
-       flex-direction: row;
-       justify-content: space-between;
+form label.captcha img {
+       height: 1.325rem;
 }
 
-/* Dashboard */
-#dashboard .panel {
-       display: flex;
-       flex-direction: row;
-       flex-wrap: wrap;
-       place-content: space-between;
+form input,
+form option,
+form optgroup,
+form select,
+form textarea,
+form section section {
+       width: 24rem;
+       padding: .1rem;
+       margin: 0 auto;
 }
 
-#dashboard .grid {
-       display: table;
-       border: .05rem solid #00c3f9;
-       flex-grow: 1;
-       border-radius: .2rem; /* marche pas sur chrome */
-       table-layout: fixed;    
-       width: calc(100% - 12rem);
-       border-collapse: collapse;
+form select {
+       padding: 0 .1rem .1rem .1rem;
 }
 
-#dashboard .cell {
-       display: table-cell;
-       text-align: left;
-       border: .05rem solid #00c3f9;
-       font-size: initial;
-       height: 8rem;
+form button {
+       width: 10rem;
+       /*margin: .5rem auto 0 auto;*/
+       margin: 0 auto;
+       padding: 0 .1rem .2rem .1rem;
 }
 
-#dashboard dl.cell {
-       height: 3rem;
+form .message {
+       margin: 0 0 .5rem 0;
 }
 
-#dashboard .cell h3 {
-       font-size: 1rem;
-       padding: .25rem;
-       margin: 0;
+form div .message {
+       margin: .25rem 0 0 0;
 }
 
-#dashboard .cell dd {
+/* Vertical form */
+.location .col label,
+.col label {
+       width: 8rem;
+       padding-right: 0;
+       padding-bottom: .2rem;
        text-align: center;
+       margin: 0 auto;
+}
+
+.location .col input,
+.location .col textarea,
+.col input,
+.col option,
+.col optgroup,
+.col select,
+.col textarea {
+       width: 8rem;
+}
+
+.col button {
+       width: 8rem;
 }
 
-#dashboard .seventh {
-       width: calc(100% / 7);
+.col .row {
+       flex-direction: column;
 }
 
-#dashboard .disabled {
-       color: #acc;
-       background-color: #bee;
+.col div.date {
+       flex-direction: row;
+       justify-content: space-between;
 }
 
-#dashboard .current {
+/* Header */
+#header {
        background-color: #cff;
+       border: .1rem solid #136;
+       border-top: 0;
+       border-left: 0;
+       border-radius: 0 0 .5rem .5rem;
+       margin: 0 .5rem .5rem;
+       display: flex;
+       flex-direction: column;
+       justify-content: space-between;
+       font-weight: bold;
+       line-height: 45px;
+       padding: .5rem;
+       gap: .5rem;
 }
 
-#dashboard .next {
-       background-color: #eff;
+#header div {
+       display: flex;
+       flex-direction: row;
+       justify-content: space-between;
+       gap: .5rem;
 }
 
-#dashboard .session {
-       border-radius: .2rem;
-       border: .1rem solid #00c3f9;
-       font-size: .8rem;
-       padding: .2rem;
-       margin: 0 .1rem .1rem .1rem;
-       overflow-x: hidden;
+#logo {
+       padding: 0;
        white-space: nowrap;
-       text-overflow: ellipsis;
+       color: #09c;
+       text-shadow: 1.5px 1.5px 3px #136;
+       text-decoration: none;
+       display: flex;
+       font-family: 'Lemon', sans-serif;
+       font-size: 2rem;
+       line-height: 45px;
+       gap: .5rem;
 }
 
-#dashboard .pending {
-       background-color: #ccc;
+#logo img,
+#logo span {
+       margin: 0 auto;
 }
 
-#dashboard .granted {
-       background-color: #cff;
-       /*background-color: #33b679;
-       border-color: #33b679;*/
+#title {
+       margin: .25rem 0 0;
+       padding: 0;
+       border-bottom: 0 none;
+       text-align: right;
+       flex: 1 1 auto;
+       font-family: 'Lemon', sans-serif;
+       font-weight: normal;
+       /*white-space: nowrap;*/
 }
 
-#dashboard .disputed {
-       background-color: #fcc;
+#title a {
+       text-decoration: none;
+       color: #09c;
+       text-shadow: 1.5px 1.5px 3px #136;
+       /*overflow-x: hidden;
+       text-overflow: ellipsis;*/
 }
 
-#dashboard .orphaned {
-       background-color: #fc9;
+#nav {
+       display: flex;
+       flex-wrap: wrap;
+       gap: .5rem;
+       line-height: 2.5rem;
+       margin: 0;
+       border: 0 none;
 }
 
-/* Footer */
-#footer {
-       border: .1rem solid #00c3f9;
-       border-radius: .5rem;
+#nav a {
+       flex: 1 1 auto;
+       border: .1rem solid #136;
+       border-top: 0;
+       border-left: 0;
+       border-radius: .2rem;
+       background-color: #00c3f9;
+       color: #136;
+       text-align: center;
+       padding: 0 .25rem;
+}
+
+/* Message */
+.message {
+       margin: 0 .5rem .5rem;
+       display: flex;
+       flex-direction: row;
+       justify-content: space-between;
+       font-size: .9rem;
+       padding: .2rem;
+       border-radius: .2rem;
+       text-align: center;
+       border: .05rem solid transparent;
+}
+
+.message::before,
+.message::after {
+       margin: auto 0;
+       padding: 0 .25rem;
+}
+
+.message ul {
+       margin: 0;
+       padding: 0;
+       list-style: none inside none;
+       gap: .1rem;
+}
+
+.message li {
+       padding: .25rem;
+}
+
+.mortal,
+.mortal button,
+.mortal select {
+       /*border-color: #c33333;
+       color: #c33333;*/
+       border-color: #930;
+       background-color: #f9c3c3;
+       color: #930;
+}
+
+.dangerous,
+.mortal {
+       border-radius: .2rem;
+       padding: .5rem 0;
+}
+
+.error {
+       border-color: #c33333;
+       background-color: #f9c3c3;
+       color: #c33333;
+}
+
+.error::before,
+.error::after {
+       /*XXX: display /!\ symbol */
+       content: "⚠";
+}
+
+.notice {
+       border-color: #3333c3;
+       background-color: #c3c3f9;
+       color: #3333c3;
+}
+
+.notice::before,
+.notice::after {
+       /*XXX: see https://www.fileformat.info/info/unicode/char/2139/fontsupport.htm
+        * DejaVu Sans/FreeSans/FreeSerif/Linux Libertine/Symbola/Unifont*/
+       /*XXX: display i symbol */
+       content: "ℹ";
+       /*XXX: display # symbol */
+       /*content: "⌘";*/
+}
+
+.dangerous,
+.dangerous button,
+.dangerous select {
+       /*border-color: #c39333;
+       background-color: #f9c333;
+       color: #936333;*/
+       border-color: #930;
+       background-color: #fc9;
+       color: #930;
+}
+
+.warning {
+       border-color: #c39333;
+       background-color: #f9c333;
+       color: #936333;
+}
+
+.warning::before,
+.warning::after {
+       /*XXX: see https://www.fileformat.info/info/unicode/char/2139/fontsupport.htm
+        * DejaVu Sans/FreeSans/FreeSerif/Linux Libertine/Symbola/Unifont*/
+       content: "?";
+       /*XXX: display # symbol */
+       /*content: "⌘";*/
+}
+
+/* Dashboard */
+#dashboard,
+#form,
+#recover,
+#regulation {
+       /*border-radius: .5rem;*/
+       /*border: .1rem solid #00c3f9;
        margin: .5rem;
        margin-top: 0;
-       padding: .5rem;
-       text-align: center;
+       display: flex;
+       flex-direction: column;*/
+}
+
+.panel {
+       display: flex;
+       flex-direction: row;
+       margin: 0 .5rem .5rem;
+       gap: .5rem;
+}
+
+.cell {
+}
+
+.grid {
+       display: grid;
+       border-style: solid;
+       border-color: #00c3f9;
+       border-radius: .2rem;
+       box-sizing: border-box;
+       border-collapse: collapse;
+       flex: 1 1 auto;
+       margin: 0 0 auto 0;
+       padding: 0;
+       gap: .1rem;
+}
+
+.grid article,
+.grid section {
+       border-collapse: inherit;
+       /*border-radius: inherit;*/
+       border-style: inherit;
+       /*border-width: .1rem;
+       border-width: inherit;*/
+       box-sizing: inherit;
+       flex-grow: inherit;
+       margin: 0;
+       min-height: 5rem;
+       overflow: hidden;
+}
+
+/*.grid header {
+       border-radius: .2rem .2rem 0 0;
+       margin-bottom: 0;
+}*/
+
+/*.grid ul {
+       margin: .1rem;
+       padding: .1rem;
+       margin: 0;
+}*/
+
+/*.grid section {
+       border-color: inherit;
+}*/
+
+/*.grid ul {
+       display: block;
+       margin: .1rem;
        font-size: .8rem;
+       list-style: none inside none;
+}*/
+
+.grid li {
+       border-width: .1rem;
+       border-style: solid;
+       border-radius: .2rem;
+       white-space: nowrap;
+       padding: .1rem;
        display: flex;
+       margin: 0 0 .1rem;
+       flex-direction: row;
        justify-content: space-between;
+       overflow-x: hidden;
+       text-overflow: ellipsis;
+}
+
+/*XXX: required by ul display:block for overflow:hidden*/
+.grid li:only-child,
+.grid li:last-child,
+.grid li:last-of-type {
+       margin: 0;
+}
+
+.grid a {
+       /*TODO: voir pourquoi on a besoin d'un overflow-y de merde, sans une putain de scrollbar s'affiche dans certaines conditions sur chrome, depuis le passage de deux lignes de grid à 3 !!!*/
+       /*Est-ce parce que le city est pas expanded ???*/
+       overflow-y: clip;
+       overflow-x: hidden;
+       text-overflow: ellipsis;
+}
+
+.grid p {
+       padding: 0 0 .3rem;
+       margin: 0;
+}
+
+.grid p:only-child,
+.grid p:last-child,
+.grid p:last-of-type {
+       padding: 0;
+}
+
+.session header {
+       margin-bottom: .5rem;
+}
+
+.current {
+       filter: hue-rotate(-90deg) saturate(2);
+}
+
+.granted {
        background-color: #cff;
+       border-color: #00c3f9;
 }
 
-#footer details {
-       font-weight: bold;
+/*.granted,
+.granted a {
+       background-color: #cff;
+       border-color: #00c3f9;
+}
+
+.disputed,
+.disputed a {
+       border-color: #930;
+       background-color: #fc9;
+       color: #930;
+}*/
+
+.highlight {
+       filter: hue-rotate(60deg);
+}
+
+.canceled {
+       filter: hue-rotate(180deg) grayscale(33%);
+}
+
+.locked {
+       filter: hue-rotate(180deg);
+}
+
+.pending {
+       filter: grayscale(33%);
+}
+
+.disabled {
+       filter: grayscale(66%);
+}
+
+/*.canceled,
+.canceled a,
+.canceled h2,
+.canceled header {
+       color: #963;
+       background-color: #fddddd;
+       border-color: #963;
+}
+
+.locked,
+.locked a {
+       border-color: #930;
+       background-color: #f9c3c3;
+       color: #930;
+}
+
+.pending,
+.pending a {
+       background-color: #ccc;
+       border-color: #066;
+}
+
+.highlight,
+.highlight a,
+.highlight h3,
+.highlight h3 a {
+       border-color: #3333c3;
+       background-color: #c3c3f9;
+       color: #606;
+}*/
+
+.calendar header {
+       margin-bottom: .1rem;
+       display: grid;
+}
+
+.calendar h3 {
+       overflow-x: hidden;
+       text-overflow: ellipsis;
+       white-space: nowrap;
+}
+
+.calendar ul {
+       padding: 0 .1rem .1rem;
+}
+
+/*.ellipsis {
+       / *Required for ellipsis on h2/h3/h4 in header* /
+       display: grid;
+       margin-bottom: 0;
+}
+
+.ellipsis > * {
+       overflow-x: hidden;
+       text-overflow: ellipsis;
+       white-space: nowrap;
+}*/
+
+.calendar a {
+       display: grid;
+       /*grid-template-columns: 1fr auto fit-content(1fr);*/
+       grid-template-columns: max-content 1fr max-content;
+       flex: 1 1 auto;
+       grid-gap: .1rem;
+       /*XXX: reset to visible to prevent scroll*/
+       overflow-x: visible;
+}
+
+.calendar .reducible {
+       overflow-x: hidden;
+       text-overflow: ellipsis;
+       text-align: center;
+}
+
+.calendar .glyph {
+       font-family: 'Noto Emoji', 'Droid Sans', 'Symbola', 'DejaVu Sans', 'FreeSans', sans-serif;
+}
+
+.calendar .temperature,
+.calendar .rain,
+.calendar .rate {
+       line-height: 1rem;
+       text-align: right;
+}
+
+.calendar .rate {
+       text-align: center;
+}
+
+.calendar .info {
+       line-height: 1rem;
+       text-align: right;
+}
+
+.calendar .pseudonym {
+       grid-column: span 2;
+}
+
+.seven {
+       grid-template-columns: repeat(7, 1fr);
+}
+
+.four {
+       grid-template-columns: repeat(4, 1fr);
+}
+
+.three {
+       grid-template-columns: repeat(3, 1fr);
+}
+
+.two {
+       grid-template-columns: repeat(2, 1fr);
+}
+
+/*.city .grid h3,
+.location .grid h3,
+.city .grid h4,
+.location .grid h4 {
+       border-style: none;
+       margin: 0;
+       flex: 1 1 auto;
+       white-space: nowrap;
+       overflow: hidden;
+       text-overflow: ellipsis;
+}
+
+.city .grid article,
+.location .grid article {
+       min-height: auto;
+       height: fit-content;
+}
+
+.city .grid {
+       gap: .5rem;
+}*/
+
+.location form {
+       margin: .5rem auto;
+}
+
+.location form .row {
+       flex-direction: column;
+}
+
+.location form div {
+       margin-left: auto;
+       margin-right: auto;
+}
+
+.location label {
+       width: 20rem;
+       padding-right: 0;
+       text-align: center;
+}
+
+.location input,
+.location textarea {
+       width: 20rem;
+       margin: 0 .1rem;
+}
+
+.form {
+       margin: 0;
+       display: flex;
+       flex-direction: column;
+       gap: .5rem;
+}
+
+.form h2 {
+       font-size: 1.17rem;
+       padding: .4rem;
+}
+
+.form a {
+       white-space: nowrap;
+}
+
+.form section {
+       margin: 0;
+       border: .05rem solid #00c3f9;
+       /*border-radius: .2rem;*/
+       width: 100%;
+}
+
+.form form {
+       gap: .5rem;
+}
+
+/* Footer */
+#footer {
+       border: .1rem solid #00c3f9;
+       border-radius: .5rem;
+       margin: .5rem;
+       margin-top: 0;
+       padding: .5rem;
+       text-align: center;
+       font-size: .8rem;
+       line-height: 2.5rem;
+       display: flex;
+       justify-content: space-between;
+       background-color: #cff;
+       gap: .5rem;
 }
 
 #footer summary::after {
@@ -447,27 +991,319 @@ button.submit {
        display: none;
 }
 
+#footer ul {
+       list-style: none inside none;
+       margin: 0;
+}
+
+#footer a,
+#footer details {
+       padding: 0 .5rem;
+       border: .1rem solid #136;
+    border-top: 0;
+    border-left: 0;
+    border-radius: .2rem;
+       background-color: #00c3f9;
+       color: #136;
+       justify-content: center;
+}
+
+#footer details a {
+       padding: 0;
+       border: 0 none;
+}
+
 /* viewport responsive hack */
-@media ( max-width: 650px ) {
-       #header {
-               flex-wrap: wrap;
+@media ( max-width: 1400px ) {
+       .location label,
+       .location input,
+       .location textarea {
+               width: 12rem;
        }
 
-       #dashboard .panel {
-               place-content: center;
-               flex-direction: column;
+       .session .three {
+               grid-template-columns: repeat(2, 1fr);
+       }
+}
+
+@media ( max-width: 1000px ) {
+       .panel {
+               /*flex-flow: column-reverse wrap;*/
+               flex-flow: column wrap;
+       }
+
+       .location .two {
+               grid-template-columns: repeat(2, 1fr);
+       }
+}
+
+@media ( max-width: 900px ) {
+       .form {
+               flex-direction: row;
+       }
+
+       form label {
+               width: 6rem;
+               line-height: 2rem;
+       }
+
+       form label.captcha img {
+               height: auto;
+               width: 6rem;
+               padding: .25rem 0;
+       }
+
+       form input,
+       form option,
+       form optgroup,
+       form select,
+       form textarea,
+       form section section {
+               width: 20rem;
+               line-height: 2rem;
+       }
+
+       form button {
+               width: 6rem;
+               line-height: 2rem;
+       }
+
+       .col label,
+       .col input,
+       .col option,
+       .col optgroup,
+       .col select,
+       .col textarea {
+               width: 12rem;
+       }
+
+       .col button {
+               width: 12rem;
        }
 
-       #dashboard .grid {
+       .seven {
+               grid-template-columns: repeat(4, 1fr);
+       }
+
+       .calendar .sunday {
+               grid-column: span 2;
+       }
+
+       /*.grid section:nth-child(7n) {
+               grid-column: span 2;
+       }*/
+
+       .four {
+               grid-template-columns: repeat(3, 1fr);
+       }
+
+       .three {
+               grid-template-columns: repeat(2, 1fr);
+       }
+
+       .two {
+               grid-template-columns: repeat(1, 1fr);
+       }
+
+       .four .multimap {
+               grid-column: span 3;
+       }
+
+       .three .multimap {
+               grid-column: span 2;
+       }
+
+       .two .multimap {
+               grid-column: span 1;
+       }
+
+       /*#dashboard .seventh:nth-child(7n+1),
+       #dashboard .seventh:nth-child(7n+2),
+       #dashboard .seventh:nth-child(7n+3),
+       #dashboard .seventh:nth-child(7n+4) {
+               width: calc(100% / 4 - (3/4*.1rem));
+       }
+
+       #dashboard .seventh:nth-child(7n+5),
+       #dashboard .seventh:nth-child(7n+6),
+       #dashboard .seventh:nth-child(7n+7) {
+               width: calc(100% / 3 - (2/3*.1rem));
+       }*/
+}
+
+@media ( max-width: 700px ) {
+       .session .three {
+               grid-template-columns: repeat(1, 1fr);
+       }
+
+       .multimap img {
                width: 100%;
+               width: calc(100% - .2rem);
+               height: auto;
+       }
+}
+
+@media ( max-width: 600px ) {
+       form label {
+               margin: 0 auto;
+       }
+
+       form input,
+       form option,
+       form optgroup,
+       form select,
+       form textarea,
+       form section section {
+               width: 14rem;
+               margin: 0 auto;
+       }
+
+       #logo {
+               flex-direction: column;
+       }
+
+       .seven {
+               grid-template-columns: repeat(2, 1fr);
+       }
+
+       /*.grid section:nth-child(7n) {
+               grid-column: span 2;
+               margin-bottom: .5rem;
+       }
+
+       .grid section:only-child,
+       .grid section:last-child,
+       .grid section:last-of-type {
+               margin-bottom: 0;
+       }*/
+
+       .calendar .sunday {
+               margin-bottom: .5rem;
+       }
+
+       .calendar .sunday:only-child,
+       .calendar .sunday:last-child {
+               margin-bottom: 0;
        }
 
-       #dashboard div.grid {
-               display: grid;
+       .four {
+               grid-template-columns: repeat(2, 1fr);
        }
 
-       .form_col {
-               margin: .5rem auto 0 auto;
+       .three {
+               grid-template-columns: repeat(1, 1fr);
+       }
+
+       .four .multimap {
+               grid-column: span 2;
+       }
+
+       .three .multimap {
+               grid-column: span 1;
+       }
+
+       .location .two {
+               grid-template-columns: repeat(1, 1fr);
+       }
+
+       /*#dashboard .seventh:nth-child(n) {
+               width: calc(100% / 2 - .1rem);
+       }
+
+       #dashboard .seventh:nth-child(7n) {
+               width: calc(100%);
+       }*/
+
+       /*.city .two,
+       .location .two {
+               grid-template-columns: 1fr;
+       }
+
+       .city .grid article,
+       .location .grid article {
+               overflow: hidden;
+       }*/
+}
+
+@media ( max-width: 450px ) {
+       #header div {
+               flex-direction: column;
+       }
+
+       #title {
+               text-align: center;
+       }
+
+       #logo {
+               flex-direction: row;
+       }
+
+       dd, p, #footer {
+               font-size: 110%;
+       }
+
+       a, dd, figcaption, #footer {
+               /*XXX: required to validate Tap targets are sized appropriately*/
+               line-height: 3rem;
+       }
+
+       figure,
+       .calendar a {
+               line-height: normal;
+       }
+
+       form .row,
+       .grid,
+       .form,
+       #footer {
+               flex-direction: column;
+       }
+
+       form label {
+               text-align: center;
+       }
+
+       .seven {
+               grid-template-columns: repeat(1, 1fr);
+       }
+
+       /*.grid section:nth-child(n) {
+               grid-column: auto;
+       }*/
+       .calendar .sunday {
+               grid-column: auto;
+       }
+
+       .four {
+               grid-template-columns: repeat(1, 1fr);
+       }
+
+       .four .multimap {
+               grid-column: span 1;
        }
 }
 
+@media ( max-width: 320px ) {
+       #logo {
+               flex-direction: column;
+       }
+
+       #title {
+               white-space: normal;
+       }
+}
+
+@media ( max-width: 260px ) {
+       .col label,
+       .col input,
+       .col option,
+       .col optgroup,
+       .col select,
+       .col textarea {
+               width: 10rem;
+       }
+
+       .col button {
+               width: 10rem;
+       }
+}