diff --git a/LICENSE b/LICENSE index 6b779df..0acc1d8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020 Andy Brewer +Copyright (c) 2025 Andy Brewer Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 5fd4582..479d22e 100644 --- a/README.md +++ b/README.md @@ -1,99 +1,13 @@ -![MVP.css](img/logo.png) - # MVP.css — Minimalist stylesheet for HTML elements -Out of the box CSS styling for HTML elements. No class names, no framework to learn. - -`` - -Live demo: https://andybrewer.github.io/mvp/ - -Unpkg: https://unpkg.com/mvp.css - -NPM: https://www.npmjs.com/package/mvp.css - -## Versions - -### v1.9 -* Updated `` styling to allow user to select all numerical values -* Added the option to handle a user's dark mode preference by using `` +![MVP.css](img/brand.png) -### v1.8 -* Updated `

` to be full width -* Added `--color-link` and `--color-table` variables -* Added `--active-brightness` variable plus `a:active` and `button:active` styles -* Uncommented dark mode - -### v1.7 -* Updated `` to use `--color` (primary color) -* Updated `

` to handle overflow content -* Updated `
` and `
` to with within their containers by default -* Added a showcase section to README - -### v1.6 -* Added `[hidden]` styling to hide hidden elements -* Updated alternate table rows to use `--color-accent` for a more branded look -* Updated `` to use `display: block` and removed `overflow` styling -* Updated `font` variable to `font-family` -* Updated `
`, `` and `` styling to have proper padding and recognize indented content
-* Updated `line-height` to be a number instead of a percentage
-* Updated multi-word dropdown menu titles to render on a single line
-
-### v1.5
-* Added browser default `:focus` styling back in for better tabbed navigation
-* Updated `` styling to use `display: inline-block` for better focus outlines on buttons
-* Added `
` - -### v1.4 -* Updated `
` styling to use `pre-line` for better line breaks
-* Added hover styling to `
` tags - -### v1.3 -* Updated `
` styling +Documentation: -## Contributors -* [andybrewer](https://github.com/andybrewer) -* [aembleton](https://github.com/aembleton) -* [afeld](https://github.com/afeld) -* [cfv1984](https://github.com/cfv1984) -* [coolaj86](https://github.com/coolaj86) -* [ctp52](https://github.com/ctp52) -* [DiemenDesign](https://github.com/DiemenDesign) -* [edlinkiii](https://github.com/edlinkiii) -* [ericwbailey](https://github.com/ericwbailey) -* [GrosSacASac](https://github.com/GrosSacASac) -* [hongsw](https://github.com/hongsw) -* [irfaardy](https://github.com/irfaardy) -* [martin-v](https://github.com/martin-v) -* [michaelp-coder](https://github.com/michaelp-coder) -* [nikolai-cc](https://github.com/nikolai-cc) -* [ruudud](https://github.com/ruudud) -* [ScottGuthart](https://github.com/ScottGuthart) -* [simonw](https://github.com/simonw) -* [thedamon](https://github.com/thedamon) +Usage: `` -## Showcase -* https://bliss.js.org/ -* https://chrisbilger.com/ -* https://figmage.com/ -* https://geozip.xyz -* http://nextvita.vercel.app/ -* https://searchcode.com/ -* https://stadtfuehrung.stadtroda.de/ -* https://www.thebearontheroof.com/ +Download: -To submit your site built with MVP.css create a pull request or an issue. For pull requests, please keep sites in alphabetical order. +NPM: diff --git a/img/icon-copy.png b/img/icon-copy.png new file mode 100644 index 0000000..d8fa910 Binary files /dev/null and b/img/icon-copy.png differ diff --git a/index.html b/index.html index 8b16975..1346624 100644 --- a/index.html +++ b/index.html @@ -1,263 +1,264 @@ - + + + + - - - - - - - + + + MVP.css - Minimalist stylesheet for HTML elements + - - - +
-
-
-
-

Simple, reusable components

-

For a clean looking design that doesn't get in the way

-
- - - -
-
-
-
- Quote
- "By far the easiest stylesheet I've ever used. It integrates easily into one all of my - startup projects." -
MVP.css

- Andy Brewer, Author of - MVP.css
-
-
-
-
-
-

Flexibility without complexity

-

A few, clean styling options without all the bells and whistles

-
-
- -

A minimalist stylesheet for HTML elements

-

No class names, no frameworks, just semantic HTML and you're done.

-
-

Download HTML ↗Download MVP.css (8kb) ↗

-

-

PRO TIP Add this code to a new HTML - file:

<link rel="stylesheet" href="https://unpkg.com/mvp.css">

+ +

MVP.css — A minimalist stylesheet for HTML elements

+

No class names, no frameworks, just semantic HTML and you're done.

+
+

+ Download HTML ↗Download MVP.css (10kb) ↗ +

+

+

+ PRO TIP Add this code to a new HTML file:

<link rel="stylesheet" href="https://unpkg.com/mvp.css"> +

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MVP.cssNo CSSCustom CSS
Mobile friendly
Works out of the box
Easy to customize
Only semantic HTML
No class names
Perfect for an MVP
-
-
-
-
-

A decent MVP in no time

-

More building and less designing with "set and forget" styling.

-
-
- Stock photo -
"Uber for X" brainstorming session
-
-
-
-
-

Docs

-

HTML Reference

-
-

MVP.css works with the following HTML elements:

+
+
+
+

Simple, reusable components

+

For a clean looking design that doesn't get in the way

+
+ + + +
+
+
+
+ Quote
+ "By far the easiest stylesheet I've ever used. It integrates easily into one all of my startup projects." +
MVP.css

- Andy Brewer, Author of MVP.css
+
+
+
+
+
+

Flexibility without complexity

+

A few, clean styling options without all the bells and whistles

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MVP.cssNo CSSCustom CSS
Mobile friendly
Works out of the box
Easy to customize
Only semantic HTML
No class names
Perfect for an MVP
+
+
+
+
+

A decent MVP in no time

+

More building and less designing with "set and forget" styling.

+
+
+ Stock photo +
"Uber for X" brainstorming session
+
+
+
+
+

Docs

+

HTML Reference

+ +
+

MVP.css works with the following HTML elements:

+
    +
  • + <a> — text links +
      +
    • <a><b>, <a><strong> — solid link buttons
    • +
    • <a><em>, <a><i> — outlined link buttons
    • +
    +
  • +
  • + <article> — content area with normal styling +
      +
    • <article><aside> — text callout
    • +
    +
  • +
  • + <blockquote> — quote callout +
      +
    • <blockquote><footer> — quote attribution
    • +
    +
  • +
  • <body> — default parent element
  • +
  • <button> — form buttons
  • +
  • <code> — inline code highlighting
  • +
  • + <details> — default expandable content section +
      +
    • <details><summary> — expandable heading
    • +
    +
  • +
  • <dialog> — popup windows
  • +
  • <div> — unstyled element
  • +
  • + <figure> — image callouts +
      +
    • <figure><figcaption> — image callout captions
    • +
    +
  • +
  • <footer> — footer area
  • +
  • + <form> — small form area +
      +
    • <form><input> — short input field
    • +
    • <form><label> — form field labels
    • +
    • + <form><select> — dropdown options container +
        +
      • <form><select><option> — dropdown option items
      • +
      +
    • +
    • <form><textarea> — large input field
    • +
    +
  • +
  • <header> — content area with centered styling
  • +
  • <h1>, <h2>, <h3>, <h4>, <h5>, <h6> — headings
  • +
  • <hr> — horizontal rule (divider)
  • +
  • <main> — main content area
  • +
  • <mark> — text highlighting
  • +
  • + <nav> — top navigation +
      +
    • <nav><ul> — nav links container
    • +
    • <nav><ul><li> — nav link items
    • +
    • <nav><ul><li><ul> — nav dropdown container
    • +
    • <nav><ul><li><ul><li> — nav dropdown link items
    • +
    +
  • +
  • + <ol> — numbered list container +
      +
    • <ol><li> — numbered list items
    • +
    +
  • +
  • <p> — paragraph tag
  • +
  • + <pre> — preformatted text +
      +
    • <pre><code> — code block
    • +
    • <pre><samp> — computer output block
    • +
    +
  • +
  • <samp> — inline computer output
  • +
  • + <section> — content area for centered / special content +
      +
    • <section><aside> — content card
    • +
    +
  • +
  • <small> — smaller text
  • +
  • <sup> — raised text (notification bubbles)
  • +
  • + <table> — data table
      -
    • <a> — text links -
        -
      • <a><b>, <a><strong> — solid - link buttons -
      • -
      • <a><em>, <a><i> — outlined - link buttons -
      • -
      -
    • -
    • <article> — content area with normal styling -
        -
      • <article><aside> — text callout -
      • -
      -
    • -
    • <blockquote> — quote callout -
        -
      • <blockquote><footer> — quote attribution -
      • -
      -
    • -
    • <body> — default parent element
    • -
    • <button> — form buttons
    • -
    • <code> — inline code highlighting
    • -
    • <details> — default expandable content section -
        -
      • <details><summary> — expandable heading
      • -
      -
    • -
    • <div> — unstyled element
    • -
    • <figure> — image callouts -
        -
      • <figure><figcaption> — image callout captions -
      • -
      -
    • -
    • <footer> — footer area
    • -
    • <form> — small form area -
        -
      • <form><input> — short input field
      • -
      • <form><label> — form field labels
      • -
      • <form><select> — dropdown options container -
          -
        • <form><select><option> — dropdown option - items
        • -
        -
      • -
      • <form><textarea> — large input field
      • -
      -
    • -
    • <header> — content area with centered styling
    • -
    • <h1>, <h2>, <h3>, <h4>, - <h5>, <h6> — headings
    • -
    • <hr> — horizontal rule (divider)
    • -
    • <main> — main content area
    • -
    • <mark> — text highlighting
    • -
    • <nav> — top navigation -
        -
      • <nav><ul> — nav links container
      • -
      • <nav><ul><li> — nav link items
      • -
      • <nav><ul><li><ul> — nav dropdown - container
      • -
      • <nav><ul><li><ul><li> — nav dropdown - link items
      • -
      -
    • -
    • <ol> — numbered list container -
        -
      • <ol><li> — numbered list items
      • -
      -
    • -
    • <p> — paragraph tag
    • -
    • <pre> — preformatted text -
        -
      • <pre><code> — code block
      • -
      • <pre><samp> — computer output block
      • -
      -
    • -
    • <samp> — inline computer output
    • -
    • <section> — content area for centered / special content -
        -
      • <section><aside> — content card
      • -
      -
    • -
    • <small> — smaller text
    • -
    • <sup> — raised text (notification bubbles)
    • -
    • <table> — data table -
        -
      • <table><td> — data table cell
      • -
      • <table><th> — data table header cell
      • -
      • <table><thead> — data table header section -
      • -
      • <table><tr> — data table row
      • -
      -
    • -
    • <ul> — unordered list container -
        -
      • <ul><li> — unordered list item
      • -
      -
    • +
    • <table><td> — data table cell
    • +
    • <table><th> — data table header cell
    • +
    • <table><thead> — data table header section
    • +
    • <table><tr> — data table row
    -
    -

    Modifying the CSS variables

    -

    MVP.css includes a list of CSS variables. Editing these variables will change the styles globally.

    -
    +          
  • +
  • + <ul> — unordered list container +
      +
    • <ul><li> — unordered list item
    • +
    +
  • +
+
+

Modifying the CSS variables

+

MVP.css includes a list of CSS variables. Editing these variables will change the styles globally.

+
                 
 :root {
     --active-brightness: 0.85;
     --border-radius: 5px;
     --box-shadow: 2px 2px 10px;
-    --color: #118bee;
     --color-accent: #118bee15;
     --color-bg: #fff;
     --color-bg-secondary: #e9e9e9;
@@ -281,146 +282,169 @@ 

Modifying the CSS variables

-

Custom styles can be added inside a <style> tag, or at the end of your local mvp.css file

-
-
-
-

Frequently Asked Questions

-
- Why would I use this? -

If you just want to launch already.

-

PRO TIP An MVP is a temporary site, it doesn't have to be and shouldn't be perfect. -

-
-
- What skills will I need? -

Mostly HTML, maybe a hint of CSS if you want to get fancy.

-

CSS        5

-

Design   0

-

HTML     100

-
-
- Is there a minified version? -

No, you don't need one for an MVP.

-
-
- How can I improve my design? -

Here are some helpful resources:

- -
-
- How do I handle a user's dark mode preference? -

By default <html> will force users into light mode. By using <html color-mode="user"> MVP.css will respect the user's dark mode preferences. The original concept and additional tips can be found in this article: https://ryanfeigenbaum.com/dark-mode/

-
-
- What if I don't like the default styles? -

Most styles are editable through CSS variables. You can also add your own styles - inline, at the end of MVP.css or in a new stylesheet.

-

PRO TIP If there are two conflicting CSS styles, the last one will take precedence.

-
+        

Custom styles can be added inside a <style> tag, or at the end of your local mvp.css file

+
+
+
+

Frequently Asked Questions

+
+ Why would I use this? +

If you just want to launch already.

+

PRO TIP An MVP is a temporary site, it doesn't have to be and shouldn't be perfect.

+
+
+ What skills will I need? +

Mostly HTML, maybe a hint of CSS if you want to get fancy.

+

CSS        5

+

Design   0

+

HTML     100

+
+
+ Is there a minified version? +

No, you don't need one for an MVP.

+
+
+ How can I improve my design? +

Here are some helpful resources:

+ +
+
+ How do I handle a user's dark mode preference? +

+ By default <html> will force users into light mode. By using <html color-mode="user"> MVP.css will respect the user's dark mode preferences. The + original concept and additional tips can be found in this article: https://ryanfeigenbaum.com/dark-mode/ +

+
+
+ What if I don't like the default styles? +

Most styles are editable through CSS variables. You can also add your own styles inline, at the end of MVP.css or in a new stylesheet.

+

PRO TIP If there are two conflicting CSS styles, the last one will take precedence.

+
                     
 :root {
-    --color: #118bee;
+    --color-bg: #fff;
 }
 
 /* Lower in the CSS, or in a 2nd stylesheet */
 
 :root {
-    --color: green; /* This will take precedence */
+    --color-bg: #000; /* This will take precedence */
 }
                     
                 
-
-
- What if I still don't like it? -

That's OK, you probably shouldn't love your MVP. The goal of MVP.css is to help you - feel slightly less embarrased about it.

-

👉 If you - want a CSS framework with more features check out Bulma - ↗ or Tailwind ↗.

-
-
-
-
-
- Idea -

What can you build with MVP.css?

-

Free ideas below ↓

-
-
-
- MVP.css -
- - - - - - - - - - - - - - - -
- -
+ +
+ What if I still don't like it? +

That's OK, you probably shouldn't love your MVP. The goal of MVP.css is to help you feel slightly less embarrased about it.

+

+ 👉 If you want a CSS framework with more features check out + Bulma ↗ or Tailwind ↗. +

+
+
+
+
+
+ Idea +

What can you build with MVP.css?

+

Free ideas below ↓

+
+ +
+ MVP.css +
+ + + + + + + + + + + + + + + +
+ + + +
+ +
+
+ + +
+ - - -
+ +

Hello, I am a header of the modal

+
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos ullam at assumenda cum placeat aperiam ab error, doloribus eligendi sit. Lorem ipsum dolor sit amet consectetur adipisicing + elit. Quos ullam. +

+
+
- + var dialog = document.getElementById("popup"); + document.querySelector("#show").onclick = function () { + let company = document.getElementById("company").value || "GitHub"; + let focusAreas = []; + document.querySelectorAll("input[name='focus[]']:checked").forEach((el) => { + focusAreas.push(el.value); + }); + let focus = focusAreas.join(" / ") || "stealthy growth"; + let founders = document.querySelector("input[name='founders']:checked").value; + let hobby = document.getElementById("hobby").value || "design"; + let model = document.getElementById("model").value; + let valuation = document.getElementById("valuation").value; + document.getElementById( + "results" + ).innerHTML = `

Amazing Idea —

A ${model} ${company} for ${hobby} with ${founders} and a focus on ${focus}, targeting a $${valuation}B valuation.

`; + dialog.show(); + return false; + }; + document.querySelector("#close").onclick = function () { + dialog.close(); + return false; + }; + + diff --git a/mvp.css b/mvp.css index c6a761c..e7d64f8 100644 --- a/mvp.css +++ b/mvp.css @@ -1,215 +1,242 @@ -/* MVP.css v1.9 - https://github.com/andybrewer/mvp */ +/* MVP.css v1.17.2 - https://github.com/andybrewer/mvp */ :root { - --active-brightness: 0.85; - --border-radius: 5px; - --box-shadow: 2px 2px 10px; - --color: #118bee; - --color-accent: #118bee15; - --color-bg: #fff; - --color-bg-secondary: #e9e9e9; - --color-link: #118bee; - --color-secondary: #920de9; - --color-secondary-accent: #920de90b; - --color-shadow: #f4f4f4; - --color-table: #118bee; - --color-text: #000; - --color-text-secondary: #999; - --font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - --hover-brightness: 1.2; - --justify-important: center; - --justify-normal: left; - --line-height: 1.5; - --width-card: 285px; - --width-card-medium: 460px; - --width-card-wide: 800px; - --width-content: 1080px; + --active-brightness: 0.85; + --border-radius: 5px; + --box-shadow: 2px 2px 10px; + --color-accent: #118bee15; + --color-bg: #fff; + --color-bg-secondary: #e9e9e9; + --color-link: #118bee; + --color-secondary: #920de9; + --color-secondary-accent: #920de90b; + --color-shadow: #f4f4f4; + --color-table: #118bee; + --color-text: #000; + --color-text-secondary: #999; + --color-scrollbar: #cacae8; + --font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + --hover-brightness: 1.2; + --justify-important: center; + --justify-normal: left; + --line-height: 1.5; + --width-card: 285px; + --width-card-medium: 460px; + --width-card-wide: 800px; + --width-content: 1080px; } @media (prefers-color-scheme: dark) { - :root[color-mode="user"] { - --color: #0097fc; - --color-accent: #0097fc4f; - --color-bg: #333; - --color-bg-secondary: #555; - --color-link: #0097fc; - --color-secondary: #e20de9; - --color-secondary-accent: #e20de94f; - --color-shadow: #bbbbbb20; - --color-table: #0097fc; - --color-text: #f7f7f7; - --color-text-secondary: #aaa; - } + :root[color-mode="user"] { + --color-accent: #0097fc4f; + --color-bg: #333; + --color-bg-secondary: #555; + --color-link: #0097fc; + --color-secondary: #e20de9; + --color-secondary-accent: #e20de94f; + --color-shadow: #bbbbbb20; + --color-table: #0097fc; + --color-text: #f7f7f7; + --color-text-secondary: #aaa; + } +} + +html { + scroll-behavior: smooth; +} + +@media (prefers-reduced-motion: reduce) { + html { + scroll-behavior: auto; + } } /* Layout */ article aside { - background: var(--color-secondary-accent); - border-left: 4px solid var(--color-secondary); - padding: 0.01rem 0.8rem; + background: var(--color-secondary-accent); + border-left: 4px solid var(--color-secondary); + padding: 0.01rem 0.8rem; } body { - background: var(--color-bg); - color: var(--color-text); - font-family: var(--font-family); - line-height: var(--line-height); - margin: 0; - overflow-x: hidden; - padding: 0; + background: var(--color-bg); + color: var(--color-text); + font-family: var(--font-family); + line-height: var(--line-height); + margin: 0; + overflow-x: hidden; + padding: 0; } footer, header, main { - margin: 0 auto; - max-width: var(--width-content); - padding: 3rem 1rem; + margin: 0 auto; + max-width: var(--width-content); + padding: 3rem 1rem; } hr { - background-color: var(--color-bg-secondary); - border: none; - height: 1px; - margin: 4rem 0; - width: 100%; + background-color: var(--color-bg-secondary); + border: none; + height: 1px; + margin: 4rem 0; + width: 100%; } section { - display: flex; - flex-wrap: wrap; - justify-content: var(--justify-important); + display: flex; + flex-wrap: wrap; + justify-content: var(--justify-important); } section img, article img { - max-width: 100%; + max-width: 100%; } section pre { - overflow: auto; + overflow: auto; } section aside { - border: 1px solid var(--color-bg-secondary); - border-radius: var(--border-radius); - box-shadow: var(--box-shadow) var(--color-shadow); - margin: 1rem; - padding: 1.25rem; - width: var(--width-card); + border: 1px solid var(--color-bg-secondary); + border-radius: var(--border-radius); + box-shadow: var(--box-shadow) var(--color-shadow); + margin: 1rem; + padding: 1.25rem; + width: var(--width-card); } section aside:hover { - box-shadow: var(--box-shadow) var(--color-bg-secondary); + box-shadow: var(--box-shadow) var(--color-bg-secondary); } [hidden] { - display: none; + display: none; } /* Headers */ article header, div header, main header { - padding-top: 0; + padding-top: 0; } header { - text-align: var(--justify-important); + text-align: var(--justify-important); } header a b, header a em, header a i, header a strong { - margin-left: 0.5rem; - margin-right: 0.5rem; + margin-left: 0.5rem; + margin-right: 0.5rem; } header nav img { - margin: 1rem 0; + margin: 1rem 0; } section header { - padding-top: 0; - width: 100%; + padding-top: 0; + width: 100%; } /* Nav */ nav { - align-items: center; - display: flex; - font-weight: bold; - justify-content: space-between; - margin-bottom: 7rem; + align-items: center; + display: flex; + font-weight: bold; + justify-content: space-between; + margin-bottom: 7rem; } nav ul { - list-style: none; - padding: 0; + list-style: none; + padding: 0; } nav ul li { - display: inline-block; - margin: 0 0.5rem; - position: relative; - text-align: left; + display: inline-block; + margin: 0 0.5rem; + position: relative; + text-align: left; } /* Nav Dropdown */ nav ul li:hover ul { - display: block; + display: block; } nav ul li ul { - background: var(--color-bg); - border: 1px solid var(--color-bg-secondary); - border-radius: var(--border-radius); - box-shadow: var(--box-shadow) var(--color-shadow); - display: none; - height: auto; - left: -2px; - padding: .5rem 1rem; - position: absolute; - top: 1.7rem; - white-space: nowrap; - width: auto; - z-index: 1; + background: var(--color-bg); + border: 1px solid var(--color-bg-secondary); + border-radius: var(--border-radius); + box-shadow: var(--box-shadow) var(--color-shadow); + display: none; + height: auto; + left: -2px; + padding: 0.5rem 1rem; + position: absolute; + top: 1.7rem; + white-space: nowrap; + width: auto; + z-index: 1; } nav ul li ul::before { - /* fill gap above to make mousing over them easier */ - content: ""; - position: absolute; - left: 0; - right: 0; - top: -0.5rem; - height: 0.5rem; + /* fill gap above to make mousing over them easier */ + content: ""; + position: absolute; + left: 0; + right: 0; + top: -0.5rem; + height: 0.5rem; } nav ul li ul li, nav ul li ul li a { + display: block; +} + +/* Nav for Mobile */ +@media (max-width: 768px) { + nav { + flex-wrap: wrap; + } + + nav ul li { + width: calc(100% - 1em); + } + + nav ul li ul { + border: none; + box-shadow: none; display: block; + position: static; + } } /* Typography */ code, samp { - background-color: var(--color-accent); - border-radius: var(--border-radius); - color: var(--color-text); - display: inline-block; - margin: 0 0.1rem; - padding: 0 0.5rem; + background-color: var(--color-accent); + border-radius: var(--border-radius); + color: var(--color-text); + display: inline-block; + margin: 0 0.1rem; + padding: 0 0.5rem; } details { - margin: 1.3rem 0; + margin: 1.3rem 0; } details summary { - font-weight: bold; - cursor: pointer; + font-weight: bold; + cursor: pointer; } h1, @@ -218,269 +245,356 @@ h3, h4, h5, h6 { - line-height: var(--line-height); + line-height: var(--line-height); + text-wrap: balance; } mark { - padding: 0.1rem; + padding: 0.1rem; } ol li, ul li { - padding: 0.2rem 0; + padding: 0.2rem 0; } p { - margin: 0.75rem 0; - padding: 0; - width: 100%; + margin: 0.75rem 0; + padding: 0; + width: 100%; } pre { - margin: 1rem 0; - max-width: var(--width-card-wide); - padding: 1rem 0; + margin: 1rem 0; + max-width: var(--width-card-wide); + padding: 1rem 0; } pre code, pre samp { - display: block; - max-width: var(--width-card-wide); - padding: 0.5rem 2rem; - white-space: pre-wrap; + display: block; + max-width: var(--width-card-wide); + padding: 0.5rem 2rem; + white-space: pre-wrap; } small { - color: var(--color-text-secondary); + color: var(--color-text-secondary); } sup { - background-color: var(--color-secondary); - border-radius: var(--border-radius); - color: var(--color-bg); - font-size: xx-small; - font-weight: bold; - margin: 0.2rem; - padding: 0.2rem 0.3rem; - position: relative; - top: -2px; + background-color: var(--color-secondary); + border-radius: var(--border-radius); + color: var(--color-bg); + font-size: xx-small; + font-weight: bold; + margin: 0.2rem; + padding: 0.2rem 0.3rem; + position: relative; + top: -2px; } /* Links */ a { - color: var(--color-link); - display: inline-block; - font-weight: bold; - text-decoration: none; + color: var(--color-link); + display: inline-block; + font-weight: bold; + text-decoration: underline; } -a:active { - filter: brightness(var(--active-brightness)); - text-decoration: underline; +a:hover { + filter: brightness(var(--hover-brightness)); } -a:hover { - filter: brightness(var(--hover-brightness)); - text-decoration: underline; +a:active { + filter: brightness(var(--active-brightness)); } a b, a em, a i, a strong, -button { - border-radius: var(--border-radius); - display: inline-block; - font-size: medium; - font-weight: bold; - line-height: var(--line-height); - margin: 0.5rem 0; - padding: 1rem 2rem; +button, +input[type="submit"] { + border-radius: var(--border-radius); + display: inline-block; + font-size: medium; + font-weight: bold; + line-height: var(--line-height); + margin: 0.5rem 0; + padding: 1rem 2rem; } -button { - font-family: var(--font-family); +button, +input[type="submit"] { + font-family: var(--font-family); } -button:active { - filter: brightness(var(--active-brightness)); +button:hover, +input[type="submit"]:hover { + cursor: pointer; + filter: brightness(var(--hover-brightness)); } -button:hover { - cursor: pointer; - filter: brightness(var(--hover-brightness)); +button:active, +input[type="submit"]:active { + filter: brightness(var(--active-brightness)); } a b, a strong, -button { - background-color: var(--color-link); - border: 2px solid var(--color-link); - color: var(--color-bg); +button, +input[type="submit"] { + background-color: var(--color-link); + border: 2px solid var(--color-link); + color: var(--color-bg); } a em, a i { - border: 2px solid var(--color-link); - border-radius: var(--border-radius); - color: var(--color-link); - display: inline-block; - padding: 1rem 2rem; + border: 2px solid var(--color-link); + border-radius: var(--border-radius); + color: var(--color-link); + display: inline-block; + padding: 1rem 2rem; } article aside a { - color: var(--color-secondary); + color: var(--color-secondary); } /* Images */ figure { - margin: 0; - padding: 0; + margin: 0; + padding: 0; } figure img { - max-width: 100%; + max-width: 100%; } figure figcaption { - color: var(--color-text-secondary); + color: var(--color-text-secondary); } /* Forms */ - button:disabled, input:disabled { - background: var(--color-bg-secondary); - border-color: var(--color-bg-secondary); - color: var(--color-text-secondary); - cursor: not-allowed; + background: var(--color-bg-secondary); + border-color: var(--color-bg-secondary); + color: var(--color-text-secondary); + cursor: not-allowed; } -button[disabled]:hover { - filter: none; +button[disabled]:hover, +input[type="submit"][disabled]:hover { + filter: none; } form { - border: 1px solid var(--color-bg-secondary); - border-radius: var(--border-radius); - box-shadow: var(--box-shadow) var(--color-shadow); - display: block; - max-width: var(--width-card-wide); - min-width: var(--width-card); - padding: 1.5rem; - text-align: var(--justify-normal); + border: 1px solid var(--color-bg-secondary); + border-radius: var(--border-radius); + box-shadow: var(--box-shadow) var(--color-shadow); + display: block; + max-width: var(--width-card-wide); + min-width: var(--width-card); + padding: 1.5rem; + text-align: var(--justify-normal); } form header { - margin: 1.5rem 0; - padding: 1.5rem 0; + margin: 1.5rem 0; + padding: 1.5rem 0; } input, label, select, textarea { - display: block; - font-size: inherit; - max-width: var(--width-card-wide); + display: block; + font-size: inherit; + max-width: var(--width-card-wide); } input[type="checkbox"], input[type="radio"] { - display: inline-block; + display: inline-block; } -input[type="checkbox"]+label, -input[type="radio"]+label { - display: inline-block; - font-weight: normal; - position: relative; - top: 1px; +input[type="checkbox"] + label, +input[type="radio"] + label { + display: inline-block; + font-weight: normal; + position: relative; + top: 1px; } input[type="range"] { - padding: 0.4rem 0; + padding: 0.4rem 0; } input, select, textarea { - border: 1px solid var(--color-bg-secondary); - border-radius: var(--border-radius); - margin-bottom: 1rem; - padding: 0.4rem 0.8rem; + border: 1px solid var(--color-bg-secondary); + border-radius: var(--border-radius); + margin-bottom: 1rem; + padding: 0.4rem 0.8rem; +} + +input[type="text"], +input[type="password"], +input[type="email"], +textarea { + width: calc(100% - 1.6rem); } input[readonly], textarea[readonly] { - background-color: var(--color-bg-secondary); + background-color: var(--color-bg-secondary); } label { - font-weight: bold; - margin-bottom: 0.2rem; + font-weight: bold; + margin-bottom: 0.2rem; +} + +/* Popups */ +dialog { + max-width: 90%; + max-height: 85dvh; + margin: auto; + padding-block: 0; + padding-inline: 20px; + border: 1px solid var(--color-bg-secondary); + border-radius: 0.5rem; + overscroll-behavior: contain; + scroll-behavior: smooth; + scrollbar-width: none; /* Hide scrollbar for Firefox */ + -ms-overflow-style: none; /* Hide scrollbar for IE and Edge */ + scrollbar-color: transparent transparent; + animation: bottom-to-top 0.25s ease-in-out forwards; +} + +dialog::-webkit-scrollbar { + width: 0; + display: none; +} + +dialog::-webkit-scrollbar-track { + background: transparent; +} + +dialog::-webkit-scrollbar-thumb { + background-color: transparent; +} + +@media (min-width: 650px) { + dialog { + max-width: 39rem; + } +} + +dialog::backdrop { + background-color: rgba(0, 0, 0, 0.5); +} + +@keyframes bottom-to-top { + 0% { + opacity: 0; + transform: translateY(10%); + } + + 100% { + opacity: 1; + transform: translateY(0); + } +} + +dialog hr { + margin-block: 1rem; } /* Tables */ table { - border: 1px solid var(--color-bg-secondary); - border-radius: var(--border-radius); - border-spacing: 0; - display: inline-block; - max-width: 100%; - overflow-x: auto; - padding: 0; - white-space: nowrap; + border: 1px solid var(--color-bg-secondary); + border-radius: var(--border-radius); + border-spacing: 0; + display: inline-block; + max-width: 100%; + overflow-x: auto; + padding: 0; + white-space: nowrap; } table td, table th, table tr { - padding: 0.4rem 0.8rem; - text-align: var(--justify-important); + padding: 0.4rem 0.8rem; + text-align: var(--justify-important); } table thead { - background-color: var(--color-table); - border-collapse: collapse; - border-radius: var(--border-radius); - color: var(--color-bg); - margin: 0; - padding: 0; + background-color: var(--color-table); + border-collapse: collapse; + border-radius: var(--border-radius); + color: var(--color-bg); + margin: 0; + padding: 0; } -table thead th:first-child { - border-top-left-radius: var(--border-radius); +table thead tr:first-child th:first-child { + border-top-left-radius: var(--border-radius); } -table thead th:last-child { - border-top-right-radius: var(--border-radius); +table thead tr:first-child th:last-child { + border-top-right-radius: var(--border-radius); } table thead th:first-child, table tr td:first-child { - text-align: var(--justify-normal); + text-align: var(--justify-normal); } table tr:nth-child(even) { - background-color: var(--color-accent); + background-color: var(--color-accent); } /* Quotes */ blockquote { - display: block; - font-size: x-large; - line-height: var(--line-height); - margin: 1rem auto; - max-width: var(--width-card-medium); - padding: 1.5rem 1rem; - text-align: var(--justify-important); + display: block; + font-size: x-large; + line-height: var(--line-height); + margin: 1rem auto; + max-width: var(--width-card-medium); + padding: 1.5rem 1rem; + text-align: var(--justify-important); } blockquote footer { - color: var(--color-text-secondary); - display: block; - font-size: small; - line-height: var(--line-height); - padding: 1.5rem 0; + color: var(--color-text-secondary); + display: block; + font-size: small; + line-height: var(--line-height); + padding: 1.5rem 0; +} + +/* Scrollbars */ +* { + scrollbar-width: thin; + scrollbar-color: var(--color-scrollbar) transparent; +} + +*::-webkit-scrollbar { + width: 5px; + height: 5px; +} + +*::-webkit-scrollbar-track { + background: transparent; +} + +*::-webkit-scrollbar-thumb { + background-color: var(--color-scrollbar); + border-radius: 10px; } diff --git a/mvp.html b/mvp.html index a275750..9b750dc 100644 --- a/mvp.html +++ b/mvp.html @@ -20,7 +20,7 @@ Logo