Files
bloodpressure/app/static/css/input.css
T

1246 lines
21 KiB
CSS

@tailwind base;
@tailwind utilities;
:root {
color-scheme: light;
--bg: #f5f7f7;
--surface: #fff;
--text: #203536;
--muted: #607475;
--line: #dce5e3;
--accent: #126b60;
--accent-strong: #0c544b;
--tint: #e9f4ef;
--danger: #a53b31;
--danger-bg: #fff0ec;
--violet: #7962ad;
--focus: #117cbd
}
[data-theme=dark] {
color-scheme: dark;
--bg: #111e20;
--surface: #1a2a2c;
--text: #e5efec;
--muted: #a5bab5;
--line: #354a49;
--accent: #8bd5bb;
--accent-strong: #a5e2cd;
--tint: #233d37;
--danger: #ffb5a5;
--danger-bg: #402a27;
--violet: #b9a4e8;
--focus: #88cbff
}
* {
box-sizing: border-box
}
body {
margin: 0;
background: var(--bg);
color: var(--text);
font-family: ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
font-size: 15px;
line-height: 1.55;
-webkit-font-smoothing: antialiased
}
a {
color: var(--accent);
text-decoration: none
}
a:hover {
text-decoration: underline
}
button,input,select {
font: inherit
}
button,summary {
cursor: pointer
}
button {
color: inherit
}
button:disabled {
cursor: wait;
opacity: .7
}
a,button,input,select,summary {
touch-action: manipulation
}
h1,h2,h3,p {
margin: 0
}
h1 {
font-size: clamp(28px,3vw,36px);
line-height: 1.2;
letter-spacing: -1.2px;
font-weight: 650
}
h2 {
font-size: 17px;
font-weight: 650;
letter-spacing: -.3px
}
h3 {
font-weight: 650
}
strong {
font-weight: 650
}
p+p {
margin-top: 8px
}
small,.small {
font-size: 12px
}
small {
color: var(--muted)
}
:focus-visible {
outline: 3px solid var(--focus);
outline-offset: 4px
}
input:focus-visible,select:focus-visible {
outline-offset: 1px
}
::selection {
background: var(--tint)
}
[hidden] {
display: none!important
}
.shell {
width: min(1120px,calc(100% - 64px));
margin-inline: auto
}
.site-header {
background: var(--surface);
border-bottom: 1px solid var(--line)
}
.header-inner {
display: flex;
align-items: center;
gap: 48px;
min-height: 88px
}
.brand {
display: flex;
align-items: center;
gap: 7px;
font-size: 21px;
font-weight: 750;
color: var(--text);
white-space: nowrap;
letter-spacing: -.6px
}
.brand:hover {
text-decoration: none
}
.brand-light {
font-weight: 450
}
.brand-mark {
width: 34px;
height: 34px;
background: var(--accent);
color: var(--surface);
border-radius: 11px;
margin-right: 5px;
padding: 3px
}
.brand-mark svg {
width: 100%;
height: 100%
}
.main-nav {
display: flex;
gap: 8px;
align-self: stretch;
align-items: center
}
.main-nav a {
padding: 10px 16px;
border-radius: 8px;
color: var(--muted);
font-size: 14px;
font-weight: 550
}
.main-nav a[aria-current],.main-nav a:hover {
background: var(--tint);
color: var(--accent);
text-decoration: none
}
.account-menu {
margin-left: auto;
position: relative
}
.account-menu summary {
display: flex;
align-items: center;
gap: 9px;
min-height: 44px;
list-style: none;
font-size: 13px
}
.account-menu summary::-webkit-details-marker {
display: none
}
.avatar {
display: grid;
place-items: center;
width: 30px;
height: 30px;
border-radius: 50%;
background: var(--tint);
color: var(--accent);
font-weight: 650
}
.account-menu nav {
position: absolute;
right: 0;
top: 100%;
width: 175px;
background: var(--surface);
border: 1px solid var(--line);
border-radius: 10px;
padding: 6px;
z-index: 5;
box-shadow: 0 10px 30px #0001
}
.account-menu nav a {
display: block;
padding: 11px 12px;
border-radius: 6px
}
.account-menu nav a:hover {
background: var(--tint)
}
.header-inner>.actions {
margin-left: auto
}
.main-content {
padding-top: 40px;
min-height: calc(100vh - 186px)
}
.page-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
margin-bottom: 28px
}
.page-heading .muted {
margin-top: 9px
}
.eyebrow {
font-size: 10px;
letter-spacing: 1.8px;
font-weight: 700;
color: var(--accent);
margin-bottom: 10px
}
.muted {
color: var(--muted)
}
.button {
display: inline-flex;
justify-content: center;
align-items: center;
gap: 8px;
min-height: 44px;
padding: 10px 17px;
border-radius: 8px;
border: 1px solid var(--line);
background: var(--surface);
color: var(--text);
font-size: 13px;
font-weight: 650;
line-height: 1.5;
white-space: nowrap
}
.button:hover {
background: var(--tint);
text-decoration: none;
border-color: var(--accent)
}
.button.primary {
background: var(--accent);
border-color: var(--accent);
color: var(--surface)
}
.button.primary:hover {
background: var(--accent-strong)
}
.button.danger {
background: var(--danger);
color: var(--surface);
border-color: var(--danger)
}
.actions {
display: flex;
align-items: center;
gap: 12px
}
.add-action {
padding-inline: 19px
}
.add-action>span {
font-size: 20px;
line-height: 1
}
.range-bar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
margin: 0 0 24px
}
.segmented {
display: inline-flex;
padding: 4px;
gap: 3px;
background: var(--surface);
border: 1px solid var(--line);
border-radius: 9px
}
.segmented a {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 36px;
padding: 6px 15px;
font-size: 12px;
white-space: nowrap;
color: var(--muted);
border-radius: 5px
}
.segmented a[aria-current],.segmented a:hover {
background: var(--tint);
color: var(--accent);
text-decoration: none
}
.date-form {
display: flex;
align-items: end;
gap: 10px
}
.date-form .field {
display: flex;
align-items: center;
gap: 8px
}
.date-form label {
font-size: 12px;
color: var(--muted)
}
.date-form input {
font-size: 12px;
padding: 9px;
min-height: 42px;
width: 143px
}
.date-form .button {
min-height: 42px
}
.card {
background: var(--surface);
border: 1px solid var(--line);
border-radius: 13px;
padding: 24px
}
.summary-grid {
display: grid;
grid-template-columns: 1.15fr 1.15fr .85fr;
gap: 16px;
margin-bottom: 22px
}
.summary-grid .card {
min-width: 0
}
.summary-grid h2 {
font-size: 12px;
color: var(--muted);
font-weight: 550
}
.latest-card {
background: var(--tint);
border-color: var(--tint)
}
.card-label {
display: flex;
justify-content: space-between;
align-items: center
}
.dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--accent)
}
.big-number {
font-variant-numeric: tabular-nums;
font-size: clamp(28px,3vw,38px);
line-height: 1.4;
letter-spacing: -1.3px;
font-weight: 600;
margin-top: 15px;
white-space: nowrap
}
.slash {
color: var(--muted);
font-weight: 350
}
.unit {
font-size: 12px;
font-weight: 450;
letter-spacing: 0;
color: var(--muted)
}
.latest-meta {
font-size: 12px
}
.latest-meta span {
padding: 0 6px;
color: var(--muted)
}
.summary-grid .muted {
font-size: 12px
}
.card-foot {
font-size: 11px;
color: var(--muted);
margin-top: 22px!important
}
.empty-title {
font-weight: 600;
margin-top: 18px
}
.section-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 18px;
margin-bottom: 20px
}
.section-heading .small {
margin-top: 5px
}
.trend-card {
margin-bottom: 24px
}
.trend-card .eyebrow {
font-size: 9px;
margin-bottom: 5px
}
.chart-unit {
font-size: 11px;
color: var(--muted);
border: 1px solid var(--line);
padding: 4px 9px;
border-radius: 5px
}
.chart-legend {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 22px;
font-size: 12px;
margin-top: 20px
}
.chart-legend>span {
display: flex;
align-items: center;
gap: 7px
}
.chart-legend .muted {
margin-left: auto
}
.legend-line {
width: 19px;
height: 3px;
background: var(--accent);
display: inline-block
}
.legend-line.diastolic {
background: var(--violet)
}
.trend-chart {
display: block;
width: 100%;
height: auto;
max-height: 300px;
margin-top: 12px;
overflow: visible
}
.trend-chart text {
fill: var(--muted);
font-size: 11px
}
.grid-line {
stroke: var(--line);
stroke-dasharray: 3 5
}
.chart-line {
fill: none;
stroke: var(--accent);
stroke-width: 2.5;
stroke-linejoin: round;
stroke-linecap: round;
vector-effect: non-scaling-stroke
}
.chart-line.diastolic {
stroke: var(--violet);
stroke-dasharray: 6 4
}
.chart-point {
fill: var(--accent)
}
.chart-point.diastolic {
fill: var(--violet)
}
.chart-caption {
display: flex;
justify-content: space-between;
align-items: center;
gap: 10px;
margin-top: 12px;
font-size: 11px;
color: var(--muted)
}
.text-link {
font-size: 12px;
white-space: nowrap;
font-weight: 600
}
.chart-details {
margin-top: 22px;
border-top: 1px solid var(--line);
padding-top: 10px
}
.chart-details summary {
padding: 10px 0;
color: var(--accent);
font-size: 13px
}
.chart-details p {
margin: 12px 0
}
.reading-row {
display: grid;
grid-template-columns: 1.4fr 1.3fr .7fr 1.25fr .4fr;
align-items: center;
gap: 16px;
border-top: 1px solid var(--line);
padding: 17px 0;
font-size: 13px
}
.reading-row small {
display: block;
font-size: 10px
}
.reading-row .inline {
display: inline
}
.reading-row .reading-value {
font-size: 16px;
font-weight: 650;
font-variant-numeric: tabular-nums
}
.table-heading {
border: 0;
color: var(--muted);
font-size: 10px;
padding: 0 0 13px;
letter-spacing: .2px
}
.status {
font-size: 10px;
background: var(--tint);
padding: 5px 9px;
border-radius: 5px;
color: var(--accent);
display: inline-block;
white-space: nowrap
}
.status-above {
background: var(--danger-bg);
color: var(--danger)
}
.edit-link {
display: inline-flex;
align-items: center;
gap: 8px;
min-height: 44px;
justify-content: end
}
.mobile-label {
display: none
}
.pagination {
display: flex;
align-items: center;
justify-content: center;
gap: 20px;
border-top: 1px solid var(--line);
padding-top: 20px;
font-size: 12px
}
.report-links {
display: flex;
gap: 22px;
justify-content: end;
align-items: center;
margin: 24px 0;
font-size: 12px
}
.site-footer {
display: flex;
align-items: center;
justify-content: space-between;
border-top: 1px solid var(--line);
padding: 22px 0;
margin-top: 38px;
color: var(--muted);
font-size: 11px
}
.notifications {
margin-bottom: 24px
}
.notice {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
background: var(--tint);
border: 1px solid var(--line);
border-left: 3px solid var(--accent);
border-radius: 8px;
padding: 8px 12px 8px 16px;
font-size: 13px;
margin-bottom: 10px
}
.notice-error {
background: var(--danger-bg);
color: var(--danger);
border-left-color: var(--danger)
}
.notice-close {
border: 0;
background: transparent;
min-width: 44px;
min-height: 44px;
font-size: 23px;
color: inherit
}
.form-page {
max-width: 580px;
margin-inline: auto
}
.auth-page {
max-width: 420px;
padding-top: 25px
}
.settings-page {
max-width: 660px
}
.back-link {
display: inline-flex;
align-items: center;
min-height: 44px;
font-size: 12px;
margin-bottom: 18px
}
.entry-form {
display: flex;
flex-direction: column;
gap: 22px;
padding: 30px
}
.field {
min-width: 0
}
.field label {
display: block;
font-size: 12px;
font-weight: 600;
margin-bottom: 7px
}
.field input:not([type=checkbox]),.field select {
display: block;
width: 100%;
min-height: 46px;
border: 1px solid var(--line);
border-radius: 7px;
padding: 10px 12px;
background: var(--surface);
color: var(--text);
min-width: 0
}
.field input[aria-invalid=true] {
border-color: var(--danger)
}
.field input[type=file] {
font-size: 12px
}
.field-error {
color: var(--danger);
font-size: 12px;
margin-top: 6px
}
.entry-form fieldset {
padding: 0;
border: 0;
margin: 0;
min-width: 0
}
.entry-form legend {
font-size: 14px;
font-weight: 650;
margin-bottom: 16px
}
.entry-form legend span {
margin-left: 5px
}
.entry-form fieldset>.field+.field {
margin-top: 16px
}
.entry-form fieldset>.small {
margin-bottom: 16px
}
.pressure-fields {
display: grid;
grid-template-columns: 1fr 18px 1fr;
align-items: end;
gap: 10px
}
.pressure-fields input {
font-size: 32px!important;
font-variant-numeric: tabular-nums;
min-height: 76px!important;
letter-spacing: -.5px
}
.entry-slash {
padding-bottom: 19px;
color: var(--muted);
font-size: 24px
}
.timestamp-field>p {
margin-top: 7px
}
.form-actions {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 12px;
border-top: 1px solid var(--line);
padding-top: 24px;
font-size: 12px
}
.form-actions>a:not(.button) {
padding: 10px
}
.form-hint {
text-align: center;
color: var(--muted);
font-size: 12px;
margin-top: 18px
}
.delete-link a {
color: var(--danger);
font-size: 12px
}
.checkbox-field {
display: flex;
align-items: center;
gap: 10px;
margin-top: 22px;
font-size: 13px;
min-height: 44px
}
.checkbox-field input {
width: 19px;
height: 19px;
accent-color: var(--accent)
}
.two-columns {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px
}
.data-columns .card>p {
font-size: 13px;
margin: 14px 0 22px
}
.data-columns .entry-form {
padding: 0
}
.full-width {
width: 100%
}
hr {
border: 0;
border-top: 1px solid var(--line);
margin: 28px 0
}
.table-scroll {
overflow-x: auto
}
table {
width: 100%;
border-collapse: collapse;
font-size: 12px;
text-align: left
}
td,th {
padding: 12px 10px;
border-bottom: 1px solid var(--line);
font-variant-numeric: tabular-nums
}
th {
font-weight: 600
}
thead th {
color: var(--muted);
font-size: 11px
}
.empty-state {
text-align: center;
padding: 40px 18px
}
.empty-state p {
font-size: 13px;
color: var(--muted);
margin: 10px 0 20px
}
.empty-symbol {
display: inline-grid;
place-items: center;
background: var(--tint);
color: var(--accent);
border-radius: 50%;
width: 42px;
height: 42px;
font-size: 22px;
margin-bottom: 14px
}
.calendar-controls {
display: flex;
align-items: end;
gap: 12px;
margin-bottom: 16px
}
.calendar-grid {
display: grid;
grid-template-columns: repeat(7,minmax(0,1fr));
gap: 8px;
margin-top: 18px
}
.calendar-day {
min-height: 140px;
display: flex;
flex-direction: column;
border: 1px solid var(--line);
padding: 12px;
border-radius: 8px;
color: var(--muted);
font-size: 11px
}
.calendar-day>strong {
font-size: 19px;
color: var(--text);
margin: 6px 0
}
.calendar-day small {
margin-top: 5px;
font-size: 10px
}
.calendar-day.has-readings {
background: var(--tint);
color: var(--accent)
}
.landing-hero {
padding: 70px 0 90px
}
.landing-hero h1 {
font-size: clamp(44px,7vw,76px);
line-height: 1.1;
letter-spacing: -3px
}
.landing-hero>p:not(.eyebrow) {
margin: 25px 0;
color: var(--muted);
font-size: 17px;
line-height: 1.8
}
.landing-hero .actions {
margin-top: 30px
}
.skip-link {
position: absolute;
left: 16px;
top: -100px;
padding: 12px;
background: var(--surface);
z-index: 10
}
.skip-link:focus {
top: 10px
}
@media(min-width:761px) {
.calendar-day:first-child {
grid-column-start: var(--start-day,1)
}
}
@media(max-width:1000px) {
.header-inner {
gap: 24px
}
.range-bar {
align-items: start;
flex-wrap: wrap
}
.summary-grid {
grid-template-columns: 1fr 1fr
}
.count-card {
grid-column: 1/-1;
display: grid;
grid-template-columns: 1fr auto;
align-items: center
}
.count-card .big-number {
grid-column: 2;
grid-row: 1/3;
margin: 0
}
.count-card .card-foot {
grid-column: 1/-1;
margin-top: 8px!important
}
.calendar-day {
padding: 8px
}
.calendar-day>span:not(.muted) {
font-size: 10px
}
.calendar-grid {
gap: 5px
}
}
@media(max-width:760px) {
.shell {
width: calc(100% - 32px)
}
.header-inner {
flex-wrap: wrap;
gap: 0;
min-height: 72px;
padding-top: 16px
}
.brand {
font-size: 20px
}
.main-nav {
order: 3;
width: 100%;
justify-content: space-between;
gap: 0;
padding: 14px 0 10px
}
.main-nav a {
flex: 1;
text-align: center;
padding: 9px 12px
}
.account-label {
display: none
}
.main-content {
padding-top: 26px
}
.page-heading {
align-items: start;
gap: 12px;
flex-wrap: wrap;
margin-bottom: 22px
}
.page-heading h1 {
font-size: 29px
}
.page-heading .muted {
font-size: 13px
}
.add-action {
font-size: 12px;
padding: 10px 13px;
position: static
}
.eyebrow {
font-size: 9px
}
.range-bar {
gap: 14px
}
.date-form {
width: 100%;
display: grid;
grid-template-columns: 1fr 1fr auto;
align-items: end;
gap: 8px
}
.date-form .field {
display: block
}
.date-form input {
width: 100%;
font-size: 12px;
padding: 9px 6px;
min-height: 44px
}
.date-form .button {
padding-inline: 12px;
min-height: 44px
}
.summary-grid {
grid-template-columns: 1fr;
gap: 12px
}
.summary-grid .card {
padding: 21px
}
.count-card {
grid-column: auto
}
.big-number {
font-size: 34px
}
.card-foot {
margin-top: 14px!important
}
.card {
padding: 20px
}
.section-heading {
gap: 10px;
flex-wrap: wrap
}
.chart-legend {
gap: 12px
}
.chart-legend .muted {
margin-left: 0;
width: 100%;
font-size: 11px
}
.trend-chart {
min-height: 180px
}
.chart-caption {
flex-wrap: wrap;
font-size: 10px
}
.history-card .section-heading {
margin-bottom: 8px
}
.table-heading {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip-path: inset(50%)
}
.reading-row:not(.table-heading) {
grid-template-columns: 1fr 1fr;
gap: 10px;
padding: 17px 0
}
.reading-row>div:first-child {
grid-column: 1
}
.reading-row>div:first-child time {
font-weight: 600
}
.reading-row>div:first-child small {
display: inline;
margin-left: 5px;
font-size: 10px
}
.reading-row>div:nth-child(2) {
grid-column: 1;
grid-row: 2
}
.reading-row>div:nth-child(3) {
grid-column: 2;
grid-row: 2;
text-align: right
}
.reading-row>div:nth-child(4) {
grid-column: 1/-1;
grid-row: 3
}
.reading-row>div:nth-child(5) {
grid-column: 2;
grid-row: 1;
text-align: right
}
.mobile-label {
display: block;
color: var(--muted);
font-size: 10px;
font-weight: 400
}
.reading-row .reading-value small {
display: inline;
margin-left: 4px
}
.edit-link {
min-height: 44px
}
.report-links {
justify-content: start;
flex-wrap: wrap;
gap: 12px 22px
}
.report-links>span {
width: 100%
}
.entry-form {
padding: 22px;
gap: 22px
}
.form-actions .button {
flex: 1;
padding-inline: 10px
}
.form-actions>a:not(.button) {
width: 100%;
text-align: center
}
.pressure-fields label {
font-size: 11px
}
.pressure-fields {
gap: 6px;
grid-template-columns: 1fr 12px 1fr
}
.pressure-fields input {
font-size: 29px!important;
padding-inline: 10px!important
}
.two-columns {
grid-template-columns: 1fr
}
.calendar-grid {
grid-template-columns: repeat(2,minmax(0,1fr));
gap: 8px
}
.calendar-day {
min-height: 125px;
padding: 12px
}
.calendar-day>span:not(.muted) {
font-size: 12px
}
.calendar-controls {
flex-wrap: wrap
}
.calendar-controls .field {
flex: 1
}
.calendar-controls input {
max-width: 100%
}
.calendar-controls .button {
flex-basis: 100%
}
.pagination {
gap: 10px;
flex-wrap: wrap
}
.site-footer {
font-size: 10px
}
.landing-hero {
padding: 40px 0 55px
}
.landing-hero>p:not(.eyebrow) {
font-size: 15px
}
.header-inner>.actions {
padding-bottom: 14px
}
.auth-page {
padding-top: 5px
}
.report th,.report td {
padding: 9px 7px;
font-size: 11px
}
}
@media print {
html[data-theme],:root {
color-scheme: light;
--bg: #fff;
--surface: #fff;
--text: #111;
--muted: #444;
--line: #ccc;
--accent: #174c42
}
.site-header,.site-footer,.notifications,.print-action,.no-print,.skip-link {
display: none!important
}
.shell {
width: 100%
}
.main-content {
padding: 0;
min-height: 0
}
.card {
border: 0;
padding: 0
}
.page-heading {
margin-bottom: 24px
}
h1 {
font-size: 24px
}
table {
font-size: 10px
}
tr {
break-inside: avoid
}
thead {
display: table-header-group
}
.table-scroll {
overflow: visible
}
.report th,.report td {
font-size: 10px;
padding: 8px 5px
}
@page {
margin: 15mm
}
}
@media(max-width:760px) {
.trend-chart text {
font-size: 24px
}
.trend-chart {
margin-top: 0
}
.date-form .field label {
margin-bottom: 5px
}
}
.profile-photo {
border-radius: 50%;
object-fit: cover;
margin-bottom: 18px;
}