From 6b2003c766544888c597ac05503154f8e1dfff8f Mon Sep 17 00:00:00 2001 From: Theo Macron Date: Thu, 13 Jun 2024 16:20:59 +0200 Subject: [PATCH] front: display simulation results in stdcm --- .../en/stdcm-simulation-report-sheet.json | 6 + front/public/locales/en/stdcm.json | 2 + .../fr/stdcm-simulation-report-sheet.json | 6 + front/public/locales/fr/stdcm.json | 2 + .../components/SimulationReportSheetV2.tsx | 2 +- .../applications/stdcm/views/StdcmConfig.tsx | 6 +- .../stdcm/views/StdcmResultsV2.tsx | 6 +- .../stdcmV2/components/StdcmConfig.tsx | 16 +- .../stdcmV2/components/StdcmResults.tsx | 82 ++++++++ .../stdcmV2/components/StdcmTableResults.tsx | 180 ++++++++++++++++++ .../stdcmV2/views/StdcmViewV2.tsx | 32 +++- .../components/ManageTrainSchedule/Map.tsx | 20 +- .../scss/applications/stdcmV2/_home.scss | 161 +++++++++++++++- 13 files changed, 505 insertions(+), 16 deletions(-) create mode 100644 front/src/applications/stdcmV2/components/StdcmResults.tsx create mode 100644 front/src/applications/stdcmV2/components/StdcmTableResults.tsx diff --git a/front/public/locales/en/stdcm-simulation-report-sheet.json b/front/public/locales/en/stdcm-simulation-report-sheet.json index d8f2c8e3338..700b7163fc6 100644 --- a/front/public/locales/en/stdcm-simulation-report-sheet.json +++ b/front/public/locales/en/stdcm-simulation-report-sheet.json @@ -5,10 +5,14 @@ "conventionalSign": "conv. sign", "convoy": "convoy", "crossedATE": "crossed ATE", + "displayAll": "Display all operational points", + "displayMain": "Display main operational points", + "downloadSimulationSheet": "Download simulation report sheet", "endStop": "end", "for": "for", "formattedDate": "{{year}}/{{month}}/{{day}} at {{hours}}:{{minutes}}", "from": "from", + "gesicoRequest":"and attach this document to your GESICO DSDM request.", "maxLength": "max. length", "maxSpeed": "max. speed", "maxWeight": "max. weight", @@ -21,8 +25,10 @@ "requestedRoute": "requested route", "scheduledArrival": "scheduled arrival at", "scheduledDeparture": "scheduled departure at", + "selectThisSimulation": "Select this simulation", "serviceStop": "Service stop", "simulation": "Simulation", + "simulationSelected": "You have selected this simulation", "speedLimitByTag": "speed limit by tag", "startStop": "start", "stdcm": "ST DCM", diff --git a/front/public/locales/en/stdcm.json b/front/public/locales/en/stdcm.json index 9d56e8ae61f..8496382a8e9 100644 --- a/front/public/locales/en/stdcm.json +++ b/front/public/locales/en/stdcm.json @@ -5,11 +5,13 @@ "consist": "Consist", "tractionEngine": "Traction engine" }, + "formattedCreationDate": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}", "loaderImageLegend": "The TGV Nord line", "notificationTitle": "Phase 1: from D-7 to D-1 5pm, on the Perrigny-Miramas axis.", "pathfindingFailed": "No paths have been found for these waypoints.", "pleaseWait": "Please wait…", "simulation":{ + "available": "Simulation available", "averageRequestTime": "For your request, the time required is generally 90 seconds.", "calculatingSimulation": "Calculation in progress...", "getSimulation": "Get the simulation", diff --git a/front/public/locales/fr/stdcm-simulation-report-sheet.json b/front/public/locales/fr/stdcm-simulation-report-sheet.json index 619b7e240be..5e71c28ec3e 100644 --- a/front/public/locales/fr/stdcm-simulation-report-sheet.json +++ b/front/public/locales/fr/stdcm-simulation-report-sheet.json @@ -5,10 +5,14 @@ "conventionalSign": "signe conv.", "convoy": "convoi", "crossedATE": "ATE croisé", + "displayAll": "Afficher tous les jalons", + "displayMain": "Afficher les jalons principaux", + "downloadSimulationSheet": "Télécharger la fiche de simulation", "endStop": "arrivée", "for": "pour", "formattedDate": "le {{day}}/{{month}}/{{year}} à {{hours}}:{{minutes}}", "from": "du", + "gesicoRequest":"et joignez ce document à votre demande GESICO DSDM", "maxLength": "longueur max.", "maxSpeed": "vitesse max.", "maxWeight": "tonnage max.", @@ -21,8 +25,10 @@ "requestedRoute": "parcours demandé", "scheduledArrival": "arrivée prévue à", "scheduledDeparture": "départ prévu à", + "selectThisSimulation": "Retenir cette simulation", "serviceStop": "Arrêt de service", "simulation": "Simulation", + "simulationSelected": "Vous avez retenu cette simulation", "speedLimitByTag": "code de composition", "startStop":"départ", "stdcm": "ST DCM", diff --git a/front/public/locales/fr/stdcm.json b/front/public/locales/fr/stdcm.json index 5356fefdffd..641bb079818 100644 --- a/front/public/locales/fr/stdcm.json +++ b/front/public/locales/fr/stdcm.json @@ -5,11 +5,13 @@ "consist": "Convoi", "tractionEngine": "Engin de traction" }, + "formattedCreationDate": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}", "loaderImageLegend": "La ligne TGV Nord", "notificationTitle": "Phase 1 : de J-7 à J-1 17h, sur l’axe Perrigny—Miramas.", "pathfindingFailed": "Aucun chemin n'a été trouvé pour ces points de jalonnement.", "pleaseWait": "Veuillez patientez…", "simulation":{ + "available": "Simulation disponible", "averageRequestTime": "Pour votre demande, le temps nécessaire est généralement de 90 secondes.", "calculatingSimulation": "Calcul en cours...", "getSimulation": "Obtenir la simulation", diff --git a/front/src/applications/stdcm/components/SimulationReportSheetV2.tsx b/front/src/applications/stdcm/components/SimulationReportSheetV2.tsx index f3124e71218..3b4d055c5bf 100644 --- a/front/src/applications/stdcm/components/SimulationReportSheetV2.tsx +++ b/front/src/applications/stdcm/components/SimulationReportSheetV2.tsx @@ -350,7 +350,7 @@ const SimulationReportSheetV2 = ({ - + {/* */} {t('withoutWarranty')} diff --git a/front/src/applications/stdcm/views/StdcmConfig.tsx b/front/src/applications/stdcm/views/StdcmConfig.tsx index cf708ad43f1..550b2d74e40 100644 --- a/front/src/applications/stdcm/views/StdcmConfig.tsx +++ b/front/src/applications/stdcm/views/StdcmConfig.tsx @@ -194,7 +194,11 @@ const StdcmConfig = ({ : 'stdcm-map-noSimulation' }`} > - + )} diff --git a/front/src/applications/stdcm/views/StdcmResultsV2.tsx b/front/src/applications/stdcm/views/StdcmResultsV2.tsx index af2fb6109be..fe544fe5fa6 100644 --- a/front/src/applications/stdcm/views/StdcmResultsV2.tsx +++ b/front/src/applications/stdcm/views/StdcmResultsV2.tsx @@ -20,7 +20,7 @@ type StcdmResultsProps = { creationDate?: Date; }; -const codeNumber = generateCodeNumber(); +const simulationReportSheetNumber = generateCodeNumber(); // TODO TS2 : Adapt StdcmResult to trainSchedule v2 (SpaceTimeChart and SpeedSpaceChart) @@ -46,12 +46,12 @@ const StcdmResultsV2 = ({ pathProperties={pathProperties} rollingStockData={rollingStockData} speedLimitByTag={speedLimitByTag} - simulationReportSheetNumber={codeNumber} + simulationReportSheetNumber={simulationReportSheetNumber} mapCanvas={mapCanvas} creationDate={creationDate} /> } - fileName={`STDCM-${codeNumber}.pdf`} + fileName={`STDCM-${simulationReportSheetNumber}.pdf`} > {t('stdcm:stdcmSimulationReport')} diff --git a/front/src/applications/stdcmV2/components/StdcmConfig.tsx b/front/src/applications/stdcmV2/components/StdcmConfig.tsx index 7a6a227ddaa..bc1c19bf491 100644 --- a/front/src/applications/stdcmV2/components/StdcmConfig.tsx +++ b/front/src/applications/stdcmV2/components/StdcmConfig.tsx @@ -8,6 +8,7 @@ import { useTranslation } from 'react-i18next'; import type { ManageTrainSchedulePathProperties } from 'applications/operationalStudies/types'; import STDCM_REQUEST_STATUS from 'applications/stdcm/consts'; import useStdcm from 'applications/stdcm/hooks/useStdcm'; +import type { StdcmV2SuccessResponse } from 'applications/stdcm/types'; import { useOsrdConfActions } from 'common/osrdContext'; import usePathfindingV2 from 'modules/pathfinding/hook/usePathfinding'; import { Map } from 'modules/trainschedule/components/ManageTrainSchedule'; @@ -26,6 +27,7 @@ const StdcmConfig = ({ pathProperties, setPathProperties, setCurrentSimulationInputs, + setStdcmSimulationResults, }: { currentSimulationInputs: StdcmSimulationResult['input'] | undefined; pathProperties?: ManageTrainSchedulePathProperties; @@ -33,11 +35,13 @@ const StdcmConfig = ({ setCurrentSimulationInputs: React.Dispatch< React.SetStateAction >; + setStdcmSimulationResults: (stdcmSimulationResults: StdcmV2SuccessResponse | undefined) => void; }) => { const { t } = useTranslation('stdcm'); const loaderRef = useRef(null); - const { launchStdcmRequest, cancelStdcmRequest, currentStdcmRequestStatus } = useStdcm(); + const { launchStdcmRequest, cancelStdcmRequest, currentStdcmRequestStatus, stdcmV2Results } = + useStdcm(); const isPending = currentStdcmRequestStatus === STDCM_REQUEST_STATUS.pending; const dispatch = useAppDispatch(); @@ -61,6 +65,10 @@ const StdcmConfig = ({ dispatch(updateStdcmStandardAllowance({ type: 'time_per_distance', value: 4.5 })); }, []); + useEffect(() => { + setStdcmSimulationResults(stdcmV2Results); + }, [stdcmV2Results]); + return (
@@ -102,6 +110,12 @@ const StdcmConfig = ({ }} /> )} + {/* TODO: Uncomment when it will be handle */} + {/* {currentStdcmRequestStatus === 'SUCCESS' && ( +
+ {t('simulation.available')} +
+ )} */} {pathfindingState.error && (
diff --git a/front/src/applications/stdcmV2/components/StdcmResults.tsx b/front/src/applications/stdcmV2/components/StdcmResults.tsx new file mode 100644 index 00000000000..65f97f2c157 --- /dev/null +++ b/front/src/applications/stdcmV2/components/StdcmResults.tsx @@ -0,0 +1,82 @@ +import React, { useState } from 'react'; + +import { CheckCircle } from '@osrd-project/ui-icons'; +import { useTranslation } from 'react-i18next'; + +import type { ManageTrainSchedulePathProperties } from 'applications/operationalStudies/types'; +import type { StdcmV2SuccessResponse } from 'applications/stdcm/types'; +import { generateCodeNumber } from 'applications/stdcm/utils'; +import type { RollingStockWithLiveries } from 'common/api/osrdEditoastApi'; +import { Map } from 'modules/trainschedule/components/ManageTrainSchedule'; +import { formatDateToString } from 'utils/date'; + +import StdcmTableResults from './StdcmTableResults'; + +type StcdmResultsV2Props = { + stdcmData: StdcmV2SuccessResponse; + pathProperties?: ManageTrainSchedulePathProperties; + rollingStockData: RollingStockWithLiveries; + speedLimitByTag?: string; + currentStdcmRequestStatus?: string; + creationDate?: Date; +}; + +const StcdmResults = ({ + stdcmData, + pathProperties, + rollingStockData, + speedLimitByTag, + currentStdcmRequestStatus, + creationDate, +}: StcdmResultsV2Props) => { + const { t } = useTranslation('stdcm'); + const date = creationDate && t('formattedCreationDate', formatDateToString(creationDate)); + + const [isSimulationSelected, setIsSimulationSelected] = useState(false); + + const [mapCanvas, setMapCanvas] = useState(); + + const simulationReportSheetNumber = generateCodeNumber(); + + return ( +
+
+
+ Simulation n°1 + {isSimulationSelected && ( +
+ +
+ )} +
+
{date}
+
+
+ +
+ +
+
+
+ ); +}; + +export default StcdmResults; diff --git a/front/src/applications/stdcmV2/components/StdcmTableResults.tsx b/front/src/applications/stdcmV2/components/StdcmTableResults.tsx new file mode 100644 index 00000000000..aae55f04948 --- /dev/null +++ b/front/src/applications/stdcmV2/components/StdcmTableResults.tsx @@ -0,0 +1,180 @@ +import React, { useState } from 'react'; + +import { Button } from '@osrd-project/ui-core'; +import { PDFDownloadLink } from '@react-pdf/renderer'; +import { useTranslation } from 'react-i18next'; + +import type { ManageTrainSchedulePathProperties } from 'applications/operationalStudies/types'; +import SimulationReportSheetV2 from 'applications/stdcm/components/SimulationReportSheetV2'; +import type { SimulationReportSheetProps, StdcmV2SuccessResponse } from 'applications/stdcm/types'; +import { getOperationalPointsWithTimes, getStopDurationTime } from 'applications/stdcm/utils'; +import type { RollingStockWithLiveries } from 'common/api/osrdEditoastApi'; + +type SimulationTableProps = { + stdcmData: StdcmV2SuccessResponse; + pathProperties?: ManageTrainSchedulePathProperties; + rollingStockData: RollingStockWithLiveries; + speedLimitByTag?: string; + creationDate?: Date; + simulationReportSheetNumber: string; + mapCanvas?: string; + setIsSimulationSelected: (simulationSelected: boolean) => void; + isSimulationSelected: boolean; +}; + +const StcdmTableResults = ({ + stdcmData, + pathProperties, + rollingStockData, + speedLimitByTag, + creationDate, + simulationReportSheetNumber, + mapCanvas, + setIsSimulationSelected, + isSimulationSelected, +}: SimulationTableProps) => { + const { t } = useTranslation('stdcm-simulation-report-sheet'); + + const simulationReport: SimulationReportSheetProps = { + stdcmData, + pathProperties, + rollingStockData, + simulationReportSheetNumber, + speedLimitByTag, + creationDate, + }; + + const opList = getOperationalPointsWithTimes(simulationReport); + + const [showAllOP, setShowAllOP] = useState(false); + + const selectSimulation = () => { + setIsSimulationSelected(true); + }; + + const handleShowAllClick = () => { + setShowAllOP((prevState) => !prevState); + }; + + return ( +
+ + + + + + + + + + + + {opList.map((step, index) => { + const isFirstStep = index === 0; + const isLastStep = index === opList.length - 1; + const prevStep = opList[index - 1]; + const shouldRenderRow = isFirstStep || step.duration > 0 || isLastStep; + if (showAllOP || shouldRenderRow) { + return ( + + + + + + + + + + + ); + } + return null; + })} + +
+ {t('operationalPoint')}{t('code')}{t('endStop')}{t('passageStop')}{t('startStop')}{t('weight')}{t('refEngine')}
+ {index + 1} + + {!isFirstStep && + !isLastStep && + step.name === prevStep.name && + step.duration === 0 + ? '=' + : step.name || 'Unknown'} + {step.ch}{isLastStep ? step.time : ''} +
= 60 ? 55 : 65}px`, + }} + > + { + // eslint-disable-next-line no-nested-ternary + !isFirstStep && !isLastStep + ? step.duration !== 0 + ? getStopDurationTime(step.duration) + : step.time + : '' + } +
+
{isFirstStep ? step.departureTime : ''} + {!isFirstStep && !isLastStep + ? '=' + : `${Math.floor(rollingStockData.mass / 1000)} t`} + + {!isFirstStep && !isLastStep ? '=' : rollingStockData.metadata?.reference} +
+
+
+
+
+ {!isSimulationSelected ? ( +
+
+ {isSimulationSelected && ( +
+
+ + } + fileName={`STDCM-${simulationReportSheetNumber}.pdf`} + > +
+
{t('gesicoRequest')}
+
+ )} +
+ ); +}; + +export default StcdmTableResults; diff --git a/front/src/applications/stdcmV2/views/StdcmViewV2.tsx b/front/src/applications/stdcmV2/views/StdcmViewV2.tsx index 916fe933a80..a8b9dbb8241 100644 --- a/front/src/applications/stdcmV2/views/StdcmViewV2.tsx +++ b/front/src/applications/stdcmV2/views/StdcmViewV2.tsx @@ -1,20 +1,22 @@ import React, { useState } from 'react'; -// import { Location, ArrowUp, ArrowDown } from '@osrd-project/ui-icons'; - import { useSelector } from 'react-redux'; import type { ManageTrainSchedulePathProperties } from 'applications/operationalStudies/types'; +import type { StdcmV2SuccessResponse } from 'applications/stdcm/types'; import type { PostV2TimetableByIdStdcmApiResponse, RollingStockWithLiveries, } from 'common/api/osrdEditoastApi'; import { useOsrdConfSelectors } from 'common/osrdContext'; +import { useStoreDataForSpeedLimitByTagSelector } from 'common/SpeedLimitByTagSelector/useStoreDataForSpeedLimitByTagSelector'; +import { useStoreDataForRollingStockSelector } from 'modules/rollingStock/components/RollingStockSelector/useStoreDataForRollingStockSelector'; import type { PathStep } from 'reducers/osrdconf/types'; +import { getTrainScheduleV2Activated } from 'reducers/user/userSelectors'; -// import StdcmDefaultCard from '../components/StdcmDefaultCard'; import StdcmConfig from '../components/StdcmConfig'; import StdcmHeader from '../components/StdcmHeader'; +import StdcmResults from '../components/StdcmResults'; export type StdcmSimulationResult = { createdAt: string; @@ -35,8 +37,21 @@ const StdcmViewV2 = () => { const { getScenarioID } = useOsrdConfSelectors(); const scenarioID = useSelector(getScenarioID); + const trainScheduleV2Activated = useSelector(getTrainScheduleV2Activated); + const { speedLimitByTag } = useStoreDataForSpeedLimitByTagSelector(); + const { rollingStock } = useStoreDataForRollingStockSelector(); + + // const [creationDate, setCreationDate] = useState(); + // const handleClick = () => { + // const currentDateTime = new Date(); + // setCreationDate(currentDateTime); + // launchStdcmRequest(); + // }; + const [pathProperties, setPathProperties] = useState(); + const [stdcmSimulationResults, setStdcmSimulationResults] = useState(); + const [currentSimulationInputs, setCurrentSimulationInputs] = useState< StdcmSimulationResult['input'] | undefined >(undefined); @@ -50,6 +65,17 @@ const StdcmViewV2 = () => { pathProperties={pathProperties} setPathProperties={setPathProperties} setCurrentSimulationInputs={setCurrentSimulationInputs} + setStdcmSimulationResults={setStdcmSimulationResults} + /> + )} + {trainScheduleV2Activated && rollingStock && stdcmSimulationResults && ( + )}
diff --git a/front/src/modules/trainschedule/components/ManageTrainSchedule/Map.tsx b/front/src/modules/trainschedule/components/ManageTrainSchedule/Map.tsx index a36246f4b01..347df4bc6db 100644 --- a/front/src/modules/trainschedule/components/ManageTrainSchedule/Map.tsx +++ b/front/src/modules/trainschedule/components/ManageTrainSchedule/Map.tsx @@ -57,18 +57,22 @@ type MapProps = { pathProperties?: ManageTrainSchedulePathProperties; setMapCanvas?: (mapCanvas: string) => void; hideAttribution?: boolean; + currentStdcmRequestStatus?: string; }; -const Map = ({ pathProperties, setMapCanvas, hideAttribution = false }: MapProps) => { +const Map = ({ + pathProperties, + setMapCanvas, + hideAttribution = false, + currentStdcmRequestStatus, +}: MapProps) => { const mapBlankStyle = useMapBlankStyle(); const infraID = useInfraID(); const terrain3DExaggeration = useSelector(getTerrain3DExaggeration); const { viewport, mapSearchMarker, mapStyle, showOSM, layersSettings } = useSelector(getMap); - const { getGeojson } = useOsrdConfSelectors(); - const geoJson = useSelector(getGeojson); const trainScheduleV2Activated = useSelector(getTrainScheduleV2Activated); - + const [mapCaptured, setMapCaptured] = useState(false); const [mapIsLoaded, setMapIsLoaded] = useState(false); const [snappedPoint, setSnappedPoint] = useState | undefined>(); const { urlLat = '', urlLon = '', urlZoom = '', urlBearing = '', urlPitch = '' } = useParams(); @@ -92,13 +96,17 @@ const Map = ({ pathProperties, setMapCanvas, hideAttribution = false }: MapProps const canvas = await html2canvas(mapElement); const imageDataURL = canvas.toDataURL(); setMapCanvas(imageDataURL); + setMapCaptured(true); } } catch (error) { console.error('Error capturing map:', error); } }; - if (mapIsLoaded) captureMap(); - }, [mapIsLoaded, geoJson, viewport]); + + if (mapIsLoaded && !mapCaptured && currentStdcmRequestStatus === 'SUCCESS') { + captureMap(); + } + }, [mapIsLoaded, mapCaptured, pathProperties, setMapCanvas]); const scaleControlStyle = { left: 20, diff --git a/front/src/styles/scss/applications/stdcmV2/_home.scss b/front/src/styles/scss/applications/stdcmV2/_home.scss index ac7b4a05b1d..edcf6c6f7c9 100644 --- a/front/src/styles/scss/applications/stdcmV2/_home.scss +++ b/front/src/styles/scss/applications/stdcmV2/_home.scss @@ -35,9 +35,28 @@ font-weight: 500; } } + .simulation-availaible { + width: 34.125rem; + height: 5rem; + display: flex; + flex-direction: column; + position: absolute; + margin-top: 2.5rem; + border-radius: 0.5rem; + background-color: rgb(230, 247, 238); + box-shadow: 0px 0px 0px 4px rgba(255, 255, 255, 1) inset, 0px 0px 0px 5px rgb(60, 202, 128) inset, 0px 3px 7px -3px rgba(11, 114, 60, 0.4); + + span { + color: rgb(11, 114, 60); + align-self: center; + padding-top: 1.438rem; + font-size: 1.5rem; + line-height: 2rem; + } + } .warning-box { - border-radius: 8px; + border-radius: 0.5rem; box-shadow: 0px 0px 0px 4px rgba(255, 255, 255, 1) inset, 0px 0px 0px 5px rgba(234, 167, 43, 1) inset, 0px 3px 7px -3px rgba(125, 82, 30, 0.55); background-color: rgba(253, 245, 225, 1); color: #7D521E; @@ -86,5 +105,145 @@ height: calc(100vh - 64px); } } + .stdcm-v2-results { + background-color: rgb(233, 239, 242); + .simuation-banner { + color: rgb(0, 0, 0); + font-weight: 600; + font-size: 1.125rem; + line-height: 1.5rem; + padding-top: 1.813rem; + margin-left: 2rem; + margin-right: 2rem; + border-bottom: 0.063rem solid rgb(182, 178, 175); + .creation-date { + color: rgb(121, 118, 113); + font-weight: 400; + font-size: 0.875rem; + line-height: 1.25rem; + padding-top: 0.25rem; + padding-bottom: 0.688rem; + } + .simulation-validated { + display: flex; + .check-circle{ + color: rgb(60, 202, 128); + padding-left: 0.5rem; + } + } + } + .simuation-results { + display: flex; + justify-content: space-between; + .table-container { + margin-top: 2.125rem; + margin-left: 2rem; + width: 50.25rem; + } + .table-results { + border-radius: 0.375rem; + background-color: rgba(0, 0, 0, 0.05); + } + th { + height: 2rem; + font-size: 0.875rem; + font-weight: 400; + text-transform: capitalize; + color: rgb(121, 118, 113); + padding-top: 0.313rem; + padding-bottom: 0.313rem; + vertical-align: middle; + } + tbody tr:nth-child(odd) { + background-color: rgb(239, 243, 245); + } + tbody tr:nth-child(even) { + background-color: rgb(246, 248, 249); + } + td { + height: 2rem; + font-size: 0.875; + font-weight: 400; + color: rgb(49, 46, 43); + line-height: 1.25rem; + vertical-align: middle; + } + .index { + padding-left: 2rem; + } + .pr { + padding-right: 12.438rem; + } + .ch { + padding-right: 2.25rem; + } + .stop { + font-size: 0.875rem; + font-weight: 600; + color: rgb(0, 0, 0); + line-height: 1.25rem; + } + .blueStop { + font-size: 0.875rem; + background-color: rgb(33, 100, 130); + color: rgb(255, 255, 255); + border-radius: 0.625rem; + margin-top: 0.375rem; + margin-bottom: 0.375rem; + padding-left: 0.5rem; + } + .weight { + padding-left: 3.063rem; + } + .semi-bold-output { + font-weight: 600; + } + .display-all { + height: 6.5rem; + background-color: rgba(0, 0, 0, 0.05); + display: flex; + justify-content: space-between; + border-bottom-left-radius: 0.375rem; + border-bottom-right-radius: 0.375rem; + .button-display-all-PR { + padding-top: 2rem; + padding-left: 2.25rem; + } + .button-get-simulation { + padding-top: 2rem; + padding-right: 2.25rem; + } + .selected-simulation{ + padding-top: 0.6rem; + } + } + .get-simulation { + height: 10.75rem; + background-color: rgb(255, 255, 255); + border-bottom-left-radius: 0.375rem; + border-bottom-right-radius: 0.375rem; + .download-simulation { + padding-top: 2.813rem; + padding-left: 16.438rem; + } + .gesico-text { + font-weight: 400; + font-size: 1rem; + color: rgb(49, 46, 43); + padding-top: 1.313rem; + padding-left: 12.938rem; + } + } + } + .map-results { + width: 33.75rem; + height: 33.75rem; + margin-top: 2.313rem; + margin-right: 2rem; + border-radius: 0.5rem; + border: 0.063rem solid rgba(255, 255, 255, 1); + box-shadow: 0rem 0rem 0rem 0.125rem rgba(255, 255, 255, 0.75) inset, 0rem 0rem 0rem 0.063rem rgba(0, 0, 0, 0.25) inset; + } + } }