-
- {item.title}
-
- {meta}
+
+
+
+
+ {item.title ? item.title.toUpperCase() : null}
+
+
+ {meta}
+
-
-
+
+
+
);
}
}
diff --git a/app/routes/overview/components/Placard.css b/app/routes/overview/components/Placard.css
new file mode 100644
index 0000000000..99798416b3
--- /dev/null
+++ b/app/routes/overview/components/Placard.css
@@ -0,0 +1,9 @@
+@import '~app/styles/variables.css';
+
+.whitebox {
+ background-color: var(--lego-placard-color);
+ width: 100%;
+ max-width: 500px;
+ height: 216px;
+ box-shadow: 5px 10px 25px rgba(0, 0, 0, 25%);
+}
diff --git a/app/routes/overview/components/Placard.js b/app/routes/overview/components/Placard.js
new file mode 100644
index 0000000000..ff94abb006
--- /dev/null
+++ b/app/routes/overview/components/Placard.js
@@ -0,0 +1,28 @@
+//@flow
+
+import cx from 'classnames';
+import styles from './Placard.css';
+
+import Flex from 'app/components/Layout/Flex';
+
+type Props = {
+ children: any,
+ className?: string,
+ row?: boolean,
+ justifyContent?: any,
+};
+
+const Placard = ({ children, className, row, justifyContent }: Props) => {
+ return (
+
+ {children}
+
+ );
+};
+
+export default Placard;
diff --git a/app/routes/overview/components/PlacardButton.css b/app/routes/overview/components/PlacardButton.css
new file mode 100644
index 0000000000..106c2d3734
--- /dev/null
+++ b/app/routes/overview/components/PlacardButton.css
@@ -0,0 +1,31 @@
+@import '~app/styles/variables.css';
+
+.button {
+ display: flex;
+ align-items: center;
+ background-color: var(--color-white);
+ font-weight: bolder;
+ text-align: center;
+ width: fit-content;
+ height: 2rem;
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ border-radius: 1rem;
+ box-shadow: 0 4px 4px rgba(0, 0, 0, 25%);
+}
+
+.inCard {
+ color: var('--color-white');
+ background-color: var('--lego-red');
+ margin-bottom: 20px;
+}
+
+.belowCard {
+ color: var(--color-black);
+ background-color: var(--color-white);
+ margin-top: 20px;
+}
+
+html[data-theme='dark'] .belowCard {
+ background-color: var(--lego-placard-color);
+}
diff --git a/app/routes/overview/components/PlacardButton.js b/app/routes/overview/components/PlacardButton.js
new file mode 100644
index 0000000000..8d10273ac4
--- /dev/null
+++ b/app/routes/overview/components/PlacardButton.js
@@ -0,0 +1,33 @@
+//@flow
+
+import styles from './PlacardButton.css';
+import cx from 'classnames';
+
+import { Link } from 'react-router-dom';
+
+type Props = {
+ to?: string,
+ href?: string,
+ belowCard?: boolean,
+ children: string,
+};
+
+const PlacardButton = ({ to, href, belowCard, children }: Props) => {
+ const content = (
+
+ {children}
+
+ );
+ return href ? (
+
{content}
+ ) : to ? (
+
{content}
+ ) : null;
+};
+
+export default PlacardButton;
diff --git a/app/routes/overview/components/ReadmePlacard.css b/app/routes/overview/components/ReadmePlacard.css
new file mode 100644
index 0000000000..165278f647
--- /dev/null
+++ b/app/routes/overview/components/ReadmePlacard.css
@@ -0,0 +1,34 @@
+@import '~app/styles/variables.css';
+
+.container {
+ width: 100%;
+}
+
+.logo {
+ color: var('--color-dark-mono-gray-2');
+ font-size: 40px;
+ line-height: 100%;
+ margin-top: 15px;
+}
+
+.readme {
+ margin: 10px 5px;
+}
+
+.thumb {
+ display: block;
+ object-fit: contain;
+ aspect-ratio: 3/4;
+ width: 100px;
+}
+
+.thumb img {
+ transition: transform, box-shadow;
+ transition-duration: 0.3s;
+ box-shadow: 0 4px 4px rgba(0, 0, 0, 25%);
+}
+
+.thumb:hover img {
+ transform: scale(110%);
+ box-shadow: 0 4px 4px rgba(0, 0, 0, 25%);
+}
diff --git a/app/routes/overview/components/ReadmePlacard.js b/app/routes/overview/components/ReadmePlacard.js
new file mode 100644
index 0000000000..3ea225ee4a
--- /dev/null
+++ b/app/routes/overview/components/ReadmePlacard.js
@@ -0,0 +1,40 @@
+// @flow
+
+import Flex from 'app/components/Layout/Flex';
+import { Image } from 'app/components/Image';
+import ReadmeLogo from 'app/components/ReadmeLogo';
+
+import styles from './ReadmePlacard.css';
+import Placard from './Placard';
+
+type Props = {
+ readmes: Array