misc design progress and testing
This commit is contained in:
@ -5,6 +5,7 @@ import { NewsList } from "@/components/news/NewsList";
|
|||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { PageHeader } from "@/components/general/PageHeader";
|
import { PageHeader } from "@/components/general/PageHeader";
|
||||||
import { PersonSection } from "@/components/people/PersonSection";
|
import { PersonSection } from "@/components/people/PersonSection";
|
||||||
|
import { ContactInfo } from "@/components/contact/ContactInfo";
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
return (
|
return (
|
||||||
@ -13,6 +14,7 @@ export default async function Page() {
|
|||||||
heading="Kontakt"
|
heading="Kontakt"
|
||||||
lead="Her er info om hvordan du kan kontakte oss og sånt."
|
lead="Her er info om hvordan du kan kontakte oss og sånt."
|
||||||
/>
|
/>
|
||||||
|
<ContactInfo />
|
||||||
<PersonSection heading="Styret" />
|
<PersonSection heading="Styret" />
|
||||||
<PersonSection heading="Administrasjonen" />
|
<PersonSection heading="Administrasjonen" />
|
||||||
</main>
|
</main>
|
||||||
|
30
web/src/app/praktisk/page.tsx
Normal file
30
web/src/app/praktisk/page.tsx
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import { graphql } from "@/gql";
|
||||||
|
//import { NewsFragment } from "@/gql/graphql";
|
||||||
|
import { getClient } from "@/app/client";
|
||||||
|
import Link from "next/link";
|
||||||
|
import { PageHeader } from "@/components/general/PageHeader";
|
||||||
|
import { IconListBlock } from "@/components/blocks/IconListBlock";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
return (
|
||||||
|
<main className="site-main" id="main">
|
||||||
|
<PageHeader heading="Praktisk info" />
|
||||||
|
<p>Velkommen til oss!</p>
|
||||||
|
<div className="anchorLinks">
|
||||||
|
Hopp til:
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<button>Åpningstider</button>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<button>Adresse</button>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<button>Billetter</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<IconListBlock />
|
||||||
|
</main>
|
||||||
|
);
|
||||||
|
}
|
@ -4,6 +4,7 @@ import { getClient } from "@/app/client";
|
|||||||
import { VenueList } from "@/components/venues/VenueList";
|
import { VenueList } from "@/components/venues/VenueList";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { PageHeader } from "@/components/general/PageHeader";
|
import { PageHeader } from "@/components/general/PageHeader";
|
||||||
|
import { Pig } from "@/components/general/Pig";
|
||||||
|
|
||||||
const VenueFragmentDefinition = graphql(`
|
const VenueFragmentDefinition = graphql(`
|
||||||
fragment Venue on VenuePage {
|
fragment Venue on VenuePage {
|
||||||
@ -55,6 +56,9 @@ export default async function Page() {
|
|||||||
<main className="site-main" id="main">
|
<main className="site-main" id="main">
|
||||||
<PageHeader heading="Utleie" />
|
<PageHeader heading="Utleie" />
|
||||||
<VenueList venues={venues} />
|
<VenueList venues={venues} />
|
||||||
|
<div className="bg-pig">
|
||||||
|
<Pig type="key" />
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
22
web/src/components/contact/ContactInfo.tsx
Normal file
22
web/src/components/contact/ContactInfo.tsx
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import styles from "./contactInfo.module.scss";
|
||||||
|
|
||||||
|
export const ContactInfo = () => {
|
||||||
|
return (
|
||||||
|
<section className={styles.contactInfo}>
|
||||||
|
<ul>
|
||||||
|
<li className={styles.contactItem}>
|
||||||
|
<strong>Generelle henvendelser</strong>
|
||||||
|
<a href="mailto:post@neuf.no">post@neuf.no</a>
|
||||||
|
</li>
|
||||||
|
<li className={styles.contactItem}>
|
||||||
|
<strong>Billetter</strong>
|
||||||
|
<a href="mailto:billetter@neuf.no">billetter@neuf.no</a>
|
||||||
|
</li>
|
||||||
|
<li className={styles.contactItem}>
|
||||||
|
<strong>Hittegods</strong>
|
||||||
|
<a href="mailto:hittegods@neuf.no">hittegods@neuf.no</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
};
|
28
web/src/components/contact/contactInfo.module.scss
Normal file
28
web/src/components/contact/contactInfo.module.scss
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
.contactInfo {
|
||||||
|
margin: 0 calc(var(--spacing-sitepadding)*-1);
|
||||||
|
padding: var(--spacing-sitepadding) var(--spacing-sitepadding) var(--spacing-section-bottom);
|
||||||
|
background: var(--color-background-secondary);
|
||||||
|
|
||||||
|
ul {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
column-gap: var(--spacing-gap-column);
|
||||||
|
row-gap: var(--spacing-gap-row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.contactItem {
|
||||||
|
list-style: none;
|
||||||
|
|
||||||
|
strong {
|
||||||
|
display: block;
|
||||||
|
font-size: var(--font-size-caption);
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
display: block;
|
||||||
|
font-family: var(--font-serif);
|
||||||
|
font-size: var(--font-size-lead);
|
||||||
|
color: var(--color-deepBrick);
|
||||||
|
}
|
||||||
|
}
|
@ -2,22 +2,62 @@ import { EventCategory, EventFragment } from "@/lib/event";
|
|||||||
import styles from "./eventHeader.module.scss";
|
import styles from "./eventHeader.module.scss";
|
||||||
import Image from "@/components/general/Image";
|
import Image from "@/components/general/Image";
|
||||||
import { Pig } from "../general/Pig";
|
import { Pig } from "../general/Pig";
|
||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
export const EventHeader = ({ event }: { event: EventFragment }) => {
|
export const EventHeader = ({ event }: { event: EventFragment }) => {
|
||||||
return (
|
return (
|
||||||
<div className={styles.eventHeader}>
|
<div className={styles.eventHeader}>
|
||||||
<div className={styles.text}>
|
<div className={styles.text}>
|
||||||
|
<span className="suphead breadcrumb">
|
||||||
|
<Link href="/arrangementer">Arrangement</Link>
|
||||||
|
</span>
|
||||||
<h1 className={styles.title}>{event.title}</h1>
|
<h1 className={styles.title}>{event.title}</h1>
|
||||||
<div className={styles.details}>
|
<div className={styles.details}>
|
||||||
<div>Facebook: {event.facebookUrl}</div>
|
{event.facebookUrl && (
|
||||||
<div>Billettlenke: {event.ticketUrl}</div>
|
<a href={event.facebookUrl} className="button">
|
||||||
<div>Ordinær pris: {event.priceRegular}</div>
|
Gå til Facebook-event
|
||||||
<div>Studentpris: {event.priceStudent}</div>
|
</a>
|
||||||
<div>Medlemspris: {event.priceMember}</div>
|
)}
|
||||||
<div>
|
{event.ticketUrl && (
|
||||||
Kategorier:{" "}
|
<a href={event.ticketUrl} className="button cta">
|
||||||
{event.categories && event.categories.map((x) => x.name).join(", ")}
|
Kjøp billetter
|
||||||
|
</a>
|
||||||
|
)}
|
||||||
|
<div className={styles.prices}>
|
||||||
|
<h2>Pris</h2>
|
||||||
|
<ul className={styles.priceList}>
|
||||||
|
{!event.priceRegular &&
|
||||||
|
!event.priceStudent &&
|
||||||
|
!event.priceMember && (
|
||||||
|
<li className={styles.priceItem}>
|
||||||
|
<span>Gratis</span>
|
||||||
|
</li>
|
||||||
|
)}
|
||||||
|
{event.priceRegular && (
|
||||||
|
<li className={styles.priceItem}>
|
||||||
|
<span className={styles.priceLabel}>Ordinær:</span>{" "}
|
||||||
|
{event.priceRegular} kr
|
||||||
|
</li>
|
||||||
|
)}
|
||||||
|
{event.priceStudent && (
|
||||||
|
<li className={styles.priceItem}>
|
||||||
|
<span className={styles.priceLabel}>Student:</span>{" "}
|
||||||
|
{event.priceStudent} kr
|
||||||
|
</li>
|
||||||
|
)}
|
||||||
|
{event.priceMember && (
|
||||||
|
<li className={styles.priceItem}>
|
||||||
|
<span className={styles.priceLabel}>Medlem:</span>{" "}
|
||||||
|
{event.priceMember} kr
|
||||||
|
</li>
|
||||||
|
)}
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
{event.categories.length > 0 && (
|
||||||
|
<div>
|
||||||
|
Kategorier: {event.categories.map((x) => x.name).join(", ")}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.image}>
|
<div className={styles.image}>
|
||||||
|
@ -8,11 +8,13 @@ export const UpcomingEvents = ({ events }: { events: EventFragment[] }) => {
|
|||||||
<section className={styles.upcomingWrapper}>
|
<section className={styles.upcomingWrapper}>
|
||||||
<h2 className="suphead">Denne uka på Chateau Neuf</h2>
|
<h2 className="suphead">Denne uka på Chateau Neuf</h2>
|
||||||
<ul className={styles.eventList}>
|
<ul className={styles.eventList}>
|
||||||
{events.map((event) => (
|
{events.slice(0, 3).map((event) => (
|
||||||
<EventItem key={event.id} event={event} mode="list" size="medium" />
|
<EventItem key={event.id} event={event} mode="list" size="medium" />
|
||||||
))}
|
))}
|
||||||
<li>
|
<li>
|
||||||
|
<div className={styles.calendarLink}>
|
||||||
<Link href="/arrangementer?mode=calendar">Vis kalender →</Link>
|
<Link href="/arrangementer?mode=calendar">Vis kalender →</Link>
|
||||||
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
@ -14,11 +14,16 @@
|
|||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 2fr;
|
grid-template-columns: 1fr 2fr;
|
||||||
column-gap: .6rem;
|
column-gap: .6rem;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
.title,
|
.title,
|
||||||
.details {
|
.details {
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.image {
|
||||||
|
padding-top: 100%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
.upcomingWrapper {
|
.upcomingWrapper {
|
||||||
background: var(--color-deepBrick);
|
background: var(--color-deepBrick);
|
||||||
color: var(--color-betongGray);
|
color: var(--color-goldenBeige);
|
||||||
margin: 0 calc(var(--spacing-sitepadding)*-1);
|
margin: 0 calc(var(--spacing-sitepadding)*-1);
|
||||||
padding: var(--spacing-sitepadding);
|
padding: var(--spacing-sitepadding);
|
||||||
|
|
||||||
@ -13,9 +13,34 @@
|
|||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(4, 1fr);
|
grid-template-columns: repeat(4, 1fr);
|
||||||
list-style: none;
|
list-style: none;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
li {
|
li {
|
||||||
border-right: var(--border);
|
//border-right: var(--border);
|
||||||
margin-right: .6rem;
|
margin-right: .6rem;
|
||||||
|
padding-right: 1rem;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// testing testing
|
||||||
|
&:first-child {
|
||||||
|
|
||||||
|
>div:first-child {
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarLink {
|
||||||
|
text-align: center;
|
||||||
|
font-family: var(--font-serif);
|
||||||
|
font-style: italic;
|
||||||
|
font-size: var(--font-size-lead);
|
||||||
|
}
|
@ -65,7 +65,7 @@ export const Header = () => {
|
|||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<Link href="/" data-active={pathname === "/praktisk"}>
|
<Link href="/praktisk" data-active={pathname === "/praktisk"}>
|
||||||
Praktisk info
|
Praktisk info
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
@ -99,7 +99,7 @@ export const Header = () => {
|
|||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
<li className={styles.menuItemLarge}>
|
<li className={styles.menuItemLarge}>
|
||||||
<Link href="/" data-active={pathname === "/praktisk"}>
|
<Link href="/praktisk" data-active={pathname === "/praktisk"}>
|
||||||
Praktisk info
|
Praktisk info
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
padding: var(--spacing-sitepadding);
|
padding: var(--spacing-sitepadding);
|
||||||
background: var(--color-background-secondary);
|
background: var(--color-background-secondary);
|
||||||
|
position: relative;
|
||||||
|
z-index: 700;
|
||||||
|
|
||||||
button {
|
button {
|
||||||
font-size: var(--font-size-caption);
|
font-size: var(--font-size-caption);
|
||||||
|
@ -5,6 +5,11 @@ export const PersonSection = ({ heading }: { heading: string }) => {
|
|||||||
return (
|
return (
|
||||||
<section className={styles.personSection}>
|
<section className={styles.personSection}>
|
||||||
<h2 className={styles.heading}>{heading}</h2>
|
<h2 className={styles.heading}>{heading}</h2>
|
||||||
|
<p className={styles.intro}>
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris
|
||||||
|
tristique rutrum nibh quis feugiat. Sed nisl ante, suscipit at justo ac,
|
||||||
|
elementum interdum justo. Sed sed mi sit amet nibh molestie lacinia.{" "}
|
||||||
|
</p>
|
||||||
<PersonList />
|
<PersonList />
|
||||||
</section>
|
</section>
|
||||||
);
|
);
|
||||||
|
@ -13,5 +13,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.heading {
|
.heading {
|
||||||
margin: 2rem 0;
|
margin: 0 0 1.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.intro {
|
||||||
|
margin-bottom: 3rem;
|
||||||
}
|
}
|
@ -50,11 +50,18 @@ body {
|
|||||||
|
|
||||||
a {
|
a {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
text-underline-offset: .1rem;
|
text-underline-offset: .16em;
|
||||||
|
text-decoration-thickness: .05em;
|
||||||
|
transition: opacity var(--transition-easing);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
opacity: .6;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
font-size: var(--font-size-body);
|
font-size: var(--font-size-body);
|
||||||
|
max-width: 36em;
|
||||||
|
|
||||||
&.lead {
|
&.lead {
|
||||||
font-size: var(--font-size-lead);
|
font-size: var(--font-size-lead);
|
||||||
@ -86,6 +93,16 @@ h6 {
|
|||||||
letter-spacing: .05em;
|
letter-spacing: .05em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.breadcrumb {
|
||||||
|
display: block;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
button,
|
button,
|
||||||
.button {
|
.button {
|
||||||
border-radius: 10rem;
|
border-radius: 10rem;
|
||||||
@ -96,12 +113,17 @@ button,
|
|||||||
font-family: inherit;
|
font-family: inherit;
|
||||||
font-size: var(--font-size-body);
|
font-size: var(--font-size-body);
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
text-decoration: none;
|
||||||
transition: opacity var(--transition-easing);
|
transition: opacity var(--transition-easing);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
opacity: .8;
|
opacity: .8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
blockquote {
|
blockquote {
|
||||||
@ -125,6 +147,7 @@ input[type="text"] {
|
|||||||
|
|
||||||
.site-main {
|
.site-main {
|
||||||
padding: var(--spacing-sitepadding);
|
padding: var(--spacing-sitepadding);
|
||||||
|
min-height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hiddenLink {
|
.hiddenLink {
|
||||||
@ -152,3 +175,11 @@ input[type="text"] {
|
|||||||
box-shadow: 0 0 0 1px var(--color-background), 0 0 0 3px var(--color-green-dark);
|
box-shadow: 0 0 0 1px var(--color-background), 0 0 0 3px var(--color-green-dark);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.bg-pig {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 600;
|
||||||
|
--color-pig: var(--color-neufPink);
|
||||||
|
}
|
@ -36,7 +36,7 @@
|
|||||||
--spacing-sitepadding: 2rem;
|
--spacing-sitepadding: 2rem;
|
||||||
--spacing-gap-column: 2rem;
|
--spacing-gap-column: 2rem;
|
||||||
--spacing-gap-row: 1.5rem;
|
--spacing-gap-row: 1.5rem;
|
||||||
--spacing-section-bottom: 5rem;
|
--spacing-section-bottom: 3rem;
|
||||||
|
|
||||||
// animations
|
// animations
|
||||||
--transition-easing: .3s ease;
|
--transition-easing: .3s ease;
|
||||||
|
Reference in New Issue
Block a user