diff --git a/package-lock.json b/package-lock.json
index 95cbe21246f475cd831ecc5494e15604ac8347a4..54eedbaeb0c76d07b8afa7e0a08054239578c0e4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9716,16 +9716,16 @@
}
},
"grommet": {
- "version": "2.16.3",
- "resolved": "https://registry.npmjs.org/grommet/-/grommet-2.16.3.tgz",
- "integrity": "sha512-q/je53d5AoCpokqXIJHzIIXpRMej9cjsdGt/BkWbTizF+36OWQ67Aqw8f4kK8YfAOxZ267gRj1Y1mDFva3duYw==",
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/grommet/-/grommet-2.17.1.tgz",
+ "integrity": "sha512-ULHivqDHiMtHMXfPiyyL9yct0n9a6S9V+Azs9B4Ukjy6Zvp02gTzVve3K/q/IyBagD7EP3AGHuqwMZUxiJL15w==",
"requires": {
"grommet-icons": "^4.5.0",
"hoist-non-react-statics": "^3.2.0",
"markdown-to-jsx": "^6.11.4",
"polished": "^3.4.1",
"prop-types": "^15.7.2",
- "react-desc": "^4.1.2"
+ "react-desc": "^4.1.3"
}
},
"grommet-icons": {
@@ -14908,9 +14908,9 @@
}
},
"react-desc": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/react-desc/-/react-desc-4.1.2.tgz",
- "integrity": "sha512-JAVe89uaLr0HZ0IKodnpTPNgNyJ/SPDQnl3VJPVwI+SpebmHvJiBNZEOwX201QmSbsVGqRY8ql/VFPlAx85WzA=="
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/react-desc/-/react-desc-4.1.3.tgz",
+ "integrity": "sha512-XqfNsg+nvAO77ja5+v3J6bMS7drnWozpiA64bUTyhqvSCJRkq45FiONl7/+74OjPw4Id6qbqVX6xkER/yTU8+w=="
},
"react-dev-utils": {
"version": "4.2.3",
diff --git a/package.json b/package.json
index 65442467b7b08e2d31b18c86450a0a46d902d046..52263f0f6d9a5f3c4e0ffd950e4391ef79e6f2a5 100644
--- a/package.json
+++ b/package.json
@@ -18,7 +18,7 @@
"gatsby-transformer-remark": "^2.16.1",
"gatsby-transformer-sharp": "^2.12.0",
"gatsby-transformer-yaml": "^3.0.0",
- "grommet": "^2.16.3",
+ "grommet": "^2.17.1",
"grommet-icons": "^4.5.0",
"prop-types": "^15.7.2",
"react": "^16.12.0",
diff --git a/src/components/ContactForm.js b/src/components/ContactForm.js
index 56ec27b1c41c6dedcc94335d0568cd6aade8ea23..51f21b1850f0840fc85ee636ec774d914118ce83 100644
--- a/src/components/ContactForm.js
+++ b/src/components/ContactForm.js
@@ -1,67 +1,194 @@
import React, { useState } from 'react';
-import { Box, Heading, Text, Form, FormField, TextInput } from 'grommet';
+import {
+ Box,
+ Heading,
+ Text,
+ Form,
+ FormField,
+ TextInput,
+ TextArea,
+ Spinner,
+} from 'grommet';
import { PrimaryButton } from './core';
+const korolevFont = 'korolev, Helvetica Neue, Helvetica, Arial, sans-serif';
+
const ContactForm = () => {
- const [value, setValue] = useState({});
+ const [submitting, setSubmitting] = useState();
+ const [success, setSuccess] = useState();
+
+ const handleSubmit = (event) => {
+ const data = new FormData(event.target);
+ setSubmitting(true);
+ fetch(
+ 'https://docs.google.com/forms/d/e/1FAIpQLScsfrAHD8yKJGKF-yI_T9676FR-LDmmuBG_m8uY2TmP_zmZUg/formResponse',
+ {
+ mode: 'no-cors', // we don't care about the result of this request, so just do it.
+ method: 'POST',
+ body: data,
+ }
+ ).then((res) => {
+ setSubmitting(false);
+ setSuccess(true);
+ });
+ };
+
return (
-
- Request a consultation
+
+ REQUEST A CONSULTATION
-
- Use this form to get going. We'll get in touch-to-discuss the details.
-
-
+ )}
+ {submitting && (
+
-
-
-
-
+
+
+ REQUESTING CONSULTATION
+
+
+ )}
+ {success && (
+
+
+ REQUEST SENT
+
+
+ Our engagement team will
+
+ reach out soon.
+
+
+ )}
);
diff --git a/src/components/FeedbackFooter.js b/src/components/FeedbackFooter.js
index c454baae0d9787d98d0d9e65f171fbecfabdf25f..e78505c41ea222a80a9377267842abf243e041db 100644
--- a/src/components/FeedbackFooter.js
+++ b/src/components/FeedbackFooter.js
@@ -1,34 +1,57 @@
-import React, { useContext } from 'react';
-import { Box, Text, ResponsiveContext } from 'grommet';
+import React, { useContext, useState } from 'react';
+import { Box, Text, Layer, ResponsiveContext } from 'grommet';
+import FeedbackForm from './FeedbackForm';
import { Container, Column } from './layout';
import { SecondaryButton } from './core';
const FeedbackFooter = () => {
+ const [isOpen, setOpen] = useState();
const size = useContext(ResponsiveContext);
const isMobile = ['xsmall', 'small'].includes(size);
+ const handleToggleOpen = () => {
+ setOpen(!isOpen);
+ };
+
return (
-
-
-
-
- We could use your feedback!
- Help us improve this service.
-
-
-
-
-
+ <>
+
+
+
+
+ We could use your feedback!
+
+ Send us feedback on this website or, better,
+
+ volunteer for our Customer Advisory Panel.
+
+
+
+
+
+
+
-
-
-
+
+
+ {isOpen && (
+
+
+
+ )}
+ >
);
};
diff --git a/src/components/FeedbackForm.js b/src/components/FeedbackForm.js
new file mode 100644
index 0000000000000000000000000000000000000000..f582664cb1aaf028cda2b73f8d628a6501e46198
--- /dev/null
+++ b/src/components/FeedbackForm.js
@@ -0,0 +1,197 @@
+import React, { useState } from 'react';
+import {
+ Box,
+ Heading,
+ Text,
+ Form,
+ FormField,
+ TextInput,
+ TextArea,
+ Spinner,
+ Button,
+ CheckBox,
+ ThemeContext,
+} from 'grommet';
+import { Close } from 'grommet-icons';
+import { PrimaryButton } from './core';
+
+const korolevFont = 'korolev, Helvetica Neue, Helvetica, Arial, sans-serif';
+
+const FeedbackForm = ({ onClose }) => {
+ const [submitting, setSubmitting] = useState();
+ const [success, setSuccess] = useState();
+
+ const handleSubmit = (event) => {
+ const data = new FormData(event.target);
+ setSubmitting(true);
+ fetch(
+ 'https://docs.google.com/forms/d/e/1FAIpQLSf79Q_Cl2MC9wxUHUEZWvUAAehxUaGn_wKmJ014E49-ENaS3Q/formResponse',
+ {
+ mode: 'no-cors', // we don't care about the result of this request, so just do it.
+ method: 'POST',
+ body: data,
+ }
+ ).then((res) => {
+ setSubmitting(false);
+ setSuccess(true);
+ });
+ };
+
+ return (
+
+
+
+ SEND US YOUR FEEDBACK
+
+ } onClick={onClose}>
+
+
+ {!success && (
+
+
+
+ Your thoughts or suggestions{' '}
+
+ (required)
+
+
+ }
+ >
+
+
+
+
+
+
+ Join our Customer Advisory Panel
+
+
+ Help us by volunteering an occasional hour of your
+ time to provide insights and test ideas for ow C3I&N
+ can best serve our IT customers.
+
+
+ }
+ />
+
+
+
+ Name{' '}
+
+ (optional)
+
+
+ }
+ >
+
+
+
+ Email address{' '}
+
+ (optional)
+
+
+ }
+ >
+
+
+
+
+
+
+
+
+ )}
+ {submitting && (
+
+
+
+ SENDING FEEDBACK
+
+
+ )}
+ {success && (
+
+
+ FEEDBACK SENT
+
+ Thanks for sharing with us.
+
+
+ )}
+
+
+ );
+};
+
+export default FeedbackForm;
diff --git a/src/components/core/PrimaryButton.js b/src/components/core/PrimaryButton.js
index 191367ae9e70d6de1f0b9b5e9704a69b756f45ac..0b1d5bb8d3b14ab1efb8dc18e300938db31d787a 100644
--- a/src/components/core/PrimaryButton.js
+++ b/src/components/core/PrimaryButton.js
@@ -1,23 +1,39 @@
import React from 'react';
-import { Button } from 'grommet';
+import { Button, Box, Text, ThemeContext } from 'grommet';
import { FormNext } from 'grommet-icons';
+const themeExtend = {
+ text: {
+ font: {
+ family: 'korolev, Helvetica Neue, Helvetica, Arial, sans-serif',
+ },
+ extend: () => ({ textTransform: 'uppercase', letterSpacing: '0.05em' }),
+ },
+};
/**
* Application specific button component, using Grommet Button
* @see https://v2.grommet.io/button
* @param {object} props - React props
* @returns {Component}
*/
-const PrimaryButton = ({ ...rest }) => (
- }
- reverse
- size="small"
- {...rest}
- />
+const PrimaryButton = ({ label, ...rest }) => (
+
+
+
);
export default PrimaryButton;
diff --git a/src/components/hero/Hero.js b/src/components/hero/Hero.js
index 457cbc03f3120657db4fa12fb4309cb3f428f709..40e4b3d3131610e4f1e7f442733d615bd8b4b35d 100644
--- a/src/components/hero/Hero.js
+++ b/src/components/hero/Hero.js
@@ -7,6 +7,8 @@ import DownHex from '../DownHex';
import { Container, Column } from '../layout';
import { PrimaryButton } from '../core';
+const korolevFont = 'korolev, Helvetica Neue, Helvetica, Arial, sans-serif';
+
const abs = {
position: 'absolute',
top: 0,
@@ -32,10 +34,28 @@ const Slide = ({ title, subtitle, core, cta, slug, logo }) => {
},
};
- const headingTheme = ['Fences', 'Summit'].includes(title) ? thinFont : {};
+ const heavyFont = {
+ level: {
+ 1: {
+ small: { size: '80px', height: '80px' },
+ medium: { size: '80px', height: '80px' },
+ large: { size: '80px', height: '80px' },
+ xlarge: { size: '80px', height: '80px' },
+ },
+ },
+ };
+
+ const headingTheme = title === 'Summit' ? thinFont : heavyFont;
return (
-
+
{core && (
{
level: {
5: {
font: {
- family:
- 'korolev, Helvetica Neue, Helvetica, Arial, sans-serif',
+ family: korolevFont,
},
},
},
@@ -74,14 +93,18 @@ const Slide = ({ title, subtitle, core, cta, slug, logo }) => {
)}
{subtitle && (
-
+
{subtitle}
)}
{cta && (
-
+
)}
@@ -143,7 +166,11 @@ const Hero = () => {
};
return (
-
+
{nodes
@@ -158,7 +185,7 @@ const Hero = () => {
{nodes.map((node, i) => (
diff --git a/src/components/mega-menu/MenuGroup.js b/src/components/mega-menu/MenuGroup.js
index fba96b5a4c15dce32e14dd6450e9e08e8f3a5a60..6b595932ab88443d4bca3b074a89abb6ca7c86fb 100644
--- a/src/components/mega-menu/MenuGroup.js
+++ b/src/components/mega-menu/MenuGroup.js
@@ -32,7 +32,10 @@ const MenuGroup = ({ category, title }) => {
return (
{title && (
-
+
{title}
)}
diff --git a/src/components/pages/home/Solutions.js b/src/components/pages/home/Solutions.js
index 5f9b9ae6f9e58846c8a32cca33acfc7248554f54..f0ae8f7d14640a63f73d9548ec798054e0cc93b0 100644
--- a/src/components/pages/home/Solutions.js
+++ b/src/components/pages/home/Solutions.js
@@ -64,7 +64,7 @@ const Solutions = () => {
return (
diff --git a/src/components/pages/home/SolutionsGrid.js b/src/components/pages/home/SolutionsGrid.js
deleted file mode 100644
index 7d4939e99d0e09355b4569048ecf8dc5060a7dbe..0000000000000000000000000000000000000000
--- a/src/components/pages/home/SolutionsGrid.js
+++ /dev/null
@@ -1,93 +0,0 @@
-import React, { useContext } from 'react';
-import { Box, Grid, Text, ResponsiveContext } from 'grommet';
-import { ServerCluster, Cluster, Nodes, Deploy } from 'grommet-icons';
-
-const columns = {
- small: ['full'],
- medium: ['medium', 'medium'],
- large: ['medium', 'medium'],
- xlarge: ['medium', 'medium'],
-};
-
-const rows = {
- small: ['auto', 'auto'],
- medium: ['auto', 'auto'],
- large: ['auto'],
- xlarge: ['auto'],
-};
-
-const fixedGridAreas = {
- small: [
- { name: 'col1', start: [0, 0], end: [0, 0] },
- { name: 'col2', start: [0, 1], end: [0, 1] },
- ],
- medium: [
- { name: 'col1', start: [0, 0], end: [0, 0] },
- { name: 'col2', start: [1, 0], end: [1, 0] },
- ],
- large: [
- { name: 'col1', start: [0, 0], end: [0, 0] },
- { name: 'col2', start: [1, 0], end: [1, 0] },
- ],
- xlarge: [
- { name: 'col1', start: [0, 0], end: [0, 0] },
- { name: 'col2', start: [1, 0], end: [1, 0] },
- ],
-};
-
-const serviceList = [
- [
- { icon: , label: 'Global Networking / WAN' },
- { icon: , label: 'Productivity & Collaboration' },
- ],
- [
- { icon: , label: 'Hosting Infrastructure' },
- { icon: , label: 'DevSecOps' },
- { icon: , label: 'Productivity & Collaboration' },
- ],
-];
-
-/**
- * 2 column responsive grid block
- * @see https://storybook.grommet.io/?path=/story/layout-grid-responsive-grid--responsive-grid
- * @returns {Component}
- */
-const Solutions = () => {
- const size = useContext(ResponsiveContext);
-
- return (
-
-
-
- Set up a collaborative network space where multiple separate teams can
- work collaboratively.
-
- {serviceList[0].map((item) => (
-
- {item.icon}
- {item.label}
-
- ))}
-
-
-
- Create a cloud-native mission application but I don't have a
- development team.
-
- {serviceList[1].map((item) => (
-
- {item.icon}
- {item.label}
-
- ))}
-
-
- );
-};
-export default Solutions;
diff --git a/src/content/generic/about-us.md b/src/content/generic/about-us.md
index 99ca7bf14f7717fe5c5488017085b0586e28b4b5..2d6602a7e67ddb71926d2be676f0416bb73d6518 100644
--- a/src/content/generic/about-us.md
+++ b/src/content/generic/about-us.md
@@ -12,11 +12,11 @@ The C3I&N Directorate is responsible for executing, developing, acquiring, deplo
### What We Provide
-To meet our mission, we offer a broad portfolio of IT services spanning networking, compute & store, digital engineering, and more. Through our scalable, enterprise services, we reduce cost and eliminate duplications of effort across the digital Air Force. Our IT solutions leverage industry best practices to deliver optimal security, performance and end-user experience. Beyond our service offerings, we also own and manage key enterprise IT initiatives, such as EITaaS, SEITaaS and CHES.
+To meet our mission, we offer a broad portfolio of IT services spanning networking, compute & store, digital engineering, and more. Through our scalable, enterprise services, we reduce cost and eliminate duplications of effort across the digital Air Force. Our IT solutions leverage industry best practices to deliver optimal security, performance and end-user experience. Beyond our service offerings, we also own and manage key enterprise IT initiatives, such as [EITaaS](/other-programs/), [SEITaaS](/solutions/seitaas/) and [CHES](/other-programs/).
### What is “Digital Trinity?”
-Coined by Dr. Will Roper, the Assistant Secretary of the Air Force for Acquisition, Digital Trinity refers to three critical components of modern digital transformation efforts:
+Coined by Dr. Will Roper, the Assistant Secretary of the Air Force for Acquisition, [Digital Trinity](https://software.af.mil/wp-content/uploads/2020/10/There-Is-No-Spoon-Digital-Acquisition-7-Oct-2020-digital-version.pdf) refers to three critical components of modern digital transformation efforts:
- Agile software development
- Modular, open systems architectures
diff --git a/src/content/other-programs/ches.md b/src/content/other-programs/ches.md
index 9f32a9321609da6be8f03604631653d54920dd3a..c34a3faf821e447d7709cef04e620ddfe02880c8 100644
--- a/src/content/other-programs/ches.md
+++ b/src/content/other-programs/ches.md
@@ -2,20 +2,19 @@
name: CHES
index: 2
---
-
### Cloud-hosted enterprise services (CHES)
CHES is the USAF’s adoption of Microsoft Office365. The core capabilities are email, messaging, document management and individual storage. Some of the current products are, OWA, Exchange, SharePoint Online, OneDrive and Teams. Below is a brief description of these services.
-#### Exchange Online
+**Exchange Online**
Microsoft Exchange Online is a hosted messaging solution that delivers the capabilities of Microsoft Exchange Server as a cloud-based service. It gives users access to email, calendar, contacts, and tasks from PCs, the web, and mobile devices.
-#### Teams
+**Teams**
Microsoft Teams is the hub for teamwork in Microsoft 365. The Teams service enables instant messaging, audio and video calling, rich online meetings, mobile experiences, and extensive web conferencing capabilities. In addition, Teams provides file and data collaboration and extensibility features, and integrates with Microsoft 365.
-#### SharePoint Online
+**SharePoint Online**
Microsoft SharePoint is used to create websites. It is a secure place to store, organize, share, and access information. SharePoint Online is the cloud-based service, hosted by Microsoft in the DoD IL5 environment.
-#### One Drive for Business
+**One Drive for Business**
OneDrive is online storage space in the cloud that's provided for individual licensed users in an organization. Use it to help protect work files and access them across multiple devices. OneDrive lets you share files and collaborate on documents, and sync files to your computer.
[Additional Information on 365](https://docs.microsoft.com/en-us/office365/servicedescriptions/office-365-service-descriptions-technet-library)
\ No newline at end of file
diff --git a/src/content/service-category/networking-connectivity.md b/src/content/service-category/networking-connectivity.md
index 1645cba6e8391261e44091e13c98bede879b1f84..d0273dd773195486bf7454bcdd32f06911ef864c 100644
--- a/src/content/service-category/networking-connectivity.md
+++ b/src/content/service-category/networking-connectivity.md
@@ -12,4 +12,4 @@ share: '../../images/share/ogimage-networking_and_connectivity.png'
icon: DtNetConn
---
-Provides access to modernized, standard, secure, and resilient IT infrastructure and platforms to support application workload and data storage. Portfolio aims to provide Joint Information Environment complaint enterprise and/or local application and data hosting.
\ No newline at end of file
+We seek to provide ubiquitous, survivable, and reliable connectivity of end-user devices to the Air Force Network and from the AFNet to the DoDIN.
\ No newline at end of file
diff --git a/src/content/service-detail/d1scovery.md b/src/content/service-detail/d1scovery.md
index eacf5be550ccd3df4b2c72c51b64e6c09a41dfa4..b23869896d4d2f07c6f2e5675e72a4a35176f615 100644
--- a/src/content/service-detail/d1scovery.md
+++ b/src/content/service-detail/d1scovery.md
@@ -10,7 +10,7 @@ share: '../../images/share/ogimage-data_analysis.png'
updated: March 31
---
-An enterprise Big Data Analytics platform hosted on Cloud One that provides advanced data analytics and data management tools up to IL4.
+An enterprise Big Data Analytics platform hosted on Cloud One that provides advanced data analytics and data management tools up to IL-4.
D1scovery provides an operational environment for analytics-based solutions and gives users access to cutting-edge commercial business intelligence and advanced data analytics tools and environment on Microsoft’s Azure Government Cloud.
@@ -28,7 +28,7 @@ D1scovery provides an operational environment for analytics-based solutions and
**Available Features**
-- Apache MiFI
+- Apache NiFi
- Apache Spark
- Azure Data Factory
- Data Shuttle
diff --git a/src/content/service-detail/fences.md b/src/content/service-detail/fences.md
index 09204b97ad59ba9b23c6e0d5d335de1093745a23..8ec0e0bb5630475b916ebefaf90460f50b0fb8a0 100644
--- a/src/content/service-detail/fences.md
+++ b/src/content/service-detail/fences.md
@@ -12,9 +12,24 @@ levels:
- TS-SCI
excerpt: 'FENCES is the only SAP-compliant enterprise cloud solution for the DoD at independent levels of security.'
share: '../../images/share/ogimage-compute_and_store.png'
-updated: March 31
+updated: April 6
---
FENCES is the only SAP-compliant enterprise cloud solution for the DoD at independent levels of security.
FENCES provides PL-2 workload templates for SAP customers that easily provide virtual desktops, DevSecOps, modeling & simulation, edge computing, and data backup capabilities. These workload templates are available across every security level to simplify development and migration of mission applications for SAP data.
+
+### Benefits and Features
+- IL5 to TS/SCI platform accredited for ALL DoD environments
+- AWS Workspaces IL5 and TS/SAR for Modeling and Sim
+- Parity in environments allows for replication to higher security levels
+-[PlatformOne DevSecOps](/services/platform-one/) pipeline integration and tools
+- Connectivity from CV2, JWICS, NPR, AppGate (Unclass) or with connection to Secure Web Services router (SWS)
+- Available managed services such as ACAS, McAfee, AD, WSUS, NTP
+- RMF inheritance over 35% with draft language to satisfy up to 80% of remaining controls
+
+### Requirements
+- TS, SAP, or SAR Requirement
+- Compatible connection to FENCES
+- Clearances and approved facility for connection
+- FENCES account
\ No newline at end of file
diff --git a/src/content/service-detail/seitaas-remote-connect.md b/src/content/service-detail/seitaas-remote-connect.md
index c89a439aa60fe2fe62d23914a0833ebc4835cf7f..0604b12e9df2196e9b490c67ecf8b263966cd404 100644
--- a/src/content/service-detail/seitaas-remote-connect.md
+++ b/src/content/service-detail/seitaas-remote-connect.md
@@ -11,7 +11,9 @@ levels:
- TS-SCI
excerpt: 'SEITaaS will enable enterprise capabilities to be provided as a service to users accessing thin client, zero client, or connected self sustained performer LANs.'
share: '../../images/share/ogimage-networking_and_connectivity.png'
-updated: March 31
+updated: April 6
---
-SEITaaS will enable enterprise capabilities to be provided as a service to users accessing thin client, zero client, or connected self sustained performer LANs.
\ No newline at end of file
+SEITaaS will enable enterprise capabilities to be provided as a service to users accessing thin client, zero client, or connected self sustained performer LANs.
+
+SEITaaS/Summit endpoints will be available to meet differing end-user needs. The network will offer thin client or zero client to users for a small form factor to support a network-agnostic solution. Additionally, Summit enterprise services, including MLS applications and cybersecurity services, will be made available to some user-maintained networks that will be designated as performer LANs. These LANs would be connected to and consume services from SEITaaS/Summit until they can be transitioned over to SEITaaS/Summit-managed endpoints.
\ No newline at end of file
diff --git a/src/data/hero/0_home.yaml b/src/data/hero/0_home.yaml
index 8231fa7365f480c38a3167875aa60109639d1956..e680ee60772a77df3a5b2c844e4c74bb6f2b29f8 100644
--- a/src/data/hero/0_home.yaml
+++ b/src/data/hero/0_home.yaml
@@ -1,5 +1,5 @@
name: Home
-title: 'Cutting-Edge Digital Transformation'
+title: 'Cutting-Edge Digital Transformation Services, On Demand'
subtitle: 'Enterprise IT to Power a Digital Air Force'
image: '../../images/hero/1-hero-home.png'
thumb: '../../images/hero/thumb-home.png'
diff --git a/src/data/hero/5_dep.yaml b/src/data/hero/5_dep.yaml
index 3649d9b590ff1692c3195847274dc6956816db37..e4ab9e5ebe6b2d57060ceafa20762807d62170a6 100644
--- a/src/data/hero/5_dep.yaml
+++ b/src/data/hero/5_dep.yaml
@@ -7,4 +7,5 @@ image: '../../images/hero/6-hero-dep.png'
logo: '../../images/hero/logo-dep.png'
thumb: '../../images/hero/thumb-dep.png'
thumblogo: '../../images/hero/logo-dep.png'
+core: true
index: 5
diff --git a/src/images/hero/1-hero-home.png b/src/images/hero/1-hero-home.png
index 3e24247c003d12e141d7a7d02ee7deaf480e8852..d00a85df14751dae0474f99ec4d9593346bf9184 100644
Binary files a/src/images/hero/1-hero-home.png and b/src/images/hero/1-hero-home.png differ
diff --git a/src/styles/theme.js b/src/styles/theme.js
index f6842d68de52bb9a42427b50cb43960661674324..481064d5ef2ff94712087d2e3dfc8c4491947e6a 100644
--- a/src/styles/theme.js
+++ b/src/styles/theme.js
@@ -1,6 +1,5 @@
import { grommet } from 'grommet/themes';
import { deepMerge } from 'grommet/utils';
-
/**
* Extension of Grommet theme base
* @see https://github.com/grommet/grommet/blob/master/src/js/themes/base.js
@@ -101,6 +100,12 @@ export const themeOverrides = {
},
breakpoints: globalBreakpoints,
size: globalSize,
+ input: {
+ font: {
+ size: 'small',
+ weight: 'normal',
+ },
+ },
},
anchor: {
fontWeight: 'normal',
@@ -138,6 +143,25 @@ export const themeOverrides = {
paragraph: {
fill: true,
},
+ formField: {
+ label: {
+ size: 'small',
+ weight: 'bold',
+ margin: { top: 'medium', horizontal: '0' },
+ },
+ error: {
+ size: 'small',
+ },
+ border: {
+ side: 'all',
+ },
+ round: '3px',
+ },
+ spinner: {
+ container: {
+ color: 'accent-2',
+ },
+ },
layer: {
overlay: {
background: 'rgba(0, 0, 0, 0.9)',
diff --git a/src/templates/ServiceDetail.js b/src/templates/ServiceDetail.js
index 6b68663fd92598dc19a4836c66fd16913e763251..d76482d176045892cc63bcc324e6b6b2b49767dc 100644
--- a/src/templates/ServiceDetail.js
+++ b/src/templates/ServiceDetail.js
@@ -1,6 +1,6 @@
-import React from 'react';
+import React, { useContext } from 'react';
import { graphql } from 'gatsby';
-import { Box, Heading } from 'grommet';
+import { Box, Heading, ResponsiveContext } from 'grommet';
import { AppLayout, SEO } from '../components/app';
import { Markdown } from '../components/core';
import { Container, Column } from '../components/layout';
@@ -31,20 +31,34 @@ const ServiceDetailTemplate = ({ data }) => {
categories={frontmatter.categories}
imageFluid={images[0].node.childImageSharp.fluid}
/>
-
-
- Overview
-
-
-
-
- {rawMarkdownBody}
-
-
-
-
-
-
+
+ {(size) => {
+ const breakLayout = ['xsmall', 'small', 'medium'].includes(size);
+ const formBoxProps = {
+ basis: '460px',
+ flex: { shrink: 0 },
+ };
+ return (
+
+
+ Overview
+
+
+
+
+ {rawMarkdownBody}
+
+
+
+
+
+
+ );
+ }}
+
);
};