{"id":372,"date":"2025-10-06T13:00:30","date_gmt":"2025-10-06T13:00:30","guid":{"rendered":"https:\/\/aiportcenter.nl\/?page_id=372"},"modified":"2025-11-29T22:05:03","modified_gmt":"2025-11-29T22:05:03","slug":"port-arrival","status":"publish","type":"page","link":"https:\/\/aiportcenter.nl\/index.php\/port-arrival\/","title":{"rendered":"Port-Arrival"},"content":{"rendered":"\n<!-- ======= BREADCRUMB (FULL WIDTH MATCH + ADMIN LINK + WP SPACING REMOVED) ======= -->\n\n<style>\n\/* Remove WordPress default spacing ONLY for this breadcrumb block *\/\n.breadcrumb-wrapper.wp-block-html {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n\/* Wrapper that matches .pc-container.polished width *\/\n.breadcrumb-container {\n  max-width: 1200px;\n  margin: -110px auto 0 auto;   \/* negative top only *\/\n  padding: 0 20px;\n  box-sizing: border-box;\n  position: relative;\n  z-index: 10;\n}\n\n\/* Styled breadcrumb bar *\/\n.breadcrumb {\n  font-family: Inter, system-ui, sans-serif;\n  font-size: 0.92rem;\n  color: var(--muted, #5b6570);\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 6px;\n\n  margin-top: 8px;\n  margin-bottom: 12px;\n\n  padding: 10px 14px;\n  border-radius: 10px;\n  background: linear-gradient(180deg, rgba(10,106,176,0.06), rgba(10,106,176,0.02));\n  box-shadow: 0 2px 6px rgba(10,29,56,0.08);\n  border: 1px solid rgba(10,106,176,0.12);\n}\n\n.breadcrumb a {\n  color: var(--accent, #0a5c94);\n  text-decoration: none;\n  font-weight: 500;\n}\n\n.breadcrumb a:hover {\n  text-decoration: underline;\n}\n\n.breadcrumb .current {\n  color: var(--muted, #5b6570);\n  font-weight: 500;\n}\n<\/style>\n\n<div class=\"breadcrumb-wrapper wp-block-html\">\n<div class=\"breadcrumb-container\">\n  <nav class=\"breadcrumb\">\n\n    <a href=\"https:\/\/aiportcenter.nl\/\">Home<\/a>\n    <span>\u203a<\/span>\n\n    <a href=\"https:\/\/aiportcenter.nl\/index.php\/port-call\/\">Port-Call Data Hub<\/a>\n    <span>\u203a<\/span>\n\n    <a href=\"https:\/\/aiportcenter.nl\/index.php\/port-call\/\">Processes Timeline<\/a>\n    <span>\u203a<\/span>\n\n    <span class=\"current\">Port-Arrival<\/span>\n\n  <\/nav>\n<\/div>\n<\/div>\n\n<!-- ======= \/END BREADCRUMB ======= -->\n\n\n\n<!-- ========= PORT CALL: PORT-ARRIVAL (ROTTERDAM) \u2014 POLISHED DROP-IN (Datasets as Table) ========= -->\n<div class=\"pc-container polished\" id=\"portarrival-rotterdam\">\n  <header class=\"pc-hero\" role=\"banner\" aria-label=\"Port-Arrival overview\">\n    <div class=\"pc-hero-bg\" aria-hidden=\"true\"><\/div>\n    <div class=\"pc-hero-inner\">\n      <div class=\"pc-hero-eyebrow\">Port-Call Optimization at the Port of Rotterdam<\/div>\n      <h1>Port-Arrival<\/h1>\n      <p class=\"lead\">Manages approach from pilot boarding to being safely alongside and ready for operations. Pilotage and VTS integrate with towage and boatmen for controlled entry under local rules. Dynamic factors (tide, wind, traffic, berth readiness) are balanced in real time to avoid hazards. ETA updates become ETB (berth) commitments and any conflicts trigger short rescheduling or anchorage. Purpose is safe, smooth handover from navigation to stationary operations. Effectiveness shows in minimal waiting, no near-misses, and on-time ETB.<\/p>\n      <nav class=\"pc-steps-nav\" aria-label=\"Steps\">\n        <a href=\"#step-1\" class=\"chip\" data-step=\"1\"><span class=\"num\">1<\/span> Pilotage<\/a>\n        <a href=\"#step-2\" class=\"chip\" data-step=\"2\"><span class=\"num\">2<\/span> Towage<\/a>\n        <a href=\"#step-3\" class=\"chip\" data-step=\"3\"><span class=\"num\">3<\/span> Berth Arrival<\/a>\n        <a href=\"#research\" class=\"chip\" data-step=\"3\"><span class=\"num\">4<\/span> Research Problems<\/a>\n        <a href=\"#exec\" class=\"chip\" data-step=\"3\"><span class=\"num\">5<\/span> Execution Party<\/a>\n        <a href=\"#plan\" class=\"chip\" data-step=\"3\"><span class=\"num\">6<\/span> Planning Party<\/a>\n        <a href=\"#data\" class=\"chip\" data-step=\"3\"><span class=\"num\">7<\/span> Available Data<\/a>\n      <\/nav>\n    <\/div>\n  <\/header>\n\n  <aside class=\"pc-toc\" aria-label=\"On-page navigation\">\n    <div class=\"pc-toc-inner\">\n      <div class=\"pc-toc-title\">On this page<\/div>\n      <ol>\n        <li><a href=\"#step-1\">Pilotage<\/a><\/li>\n        <li><a href=\"#step-2\">Towage<\/a><\/li>\n        <li><a href=\"#step-3\">Berth Arrival<\/a><\/li>\n        <li><a href=\"#research\">Research Problems<\/a><\/li>\n        <li><a href=\"#exec\">Execution Party<\/a><\/li>\n        <li><a href=\"#plan\">Planning Party<\/a><\/li>\n        <li><a href=\"#data\">Available Data<\/a><\/li>\n      <\/ol>\n    <\/div>\n  <\/aside>\n\n  <main class=\"pc-main\">\n  <!-- Step 1 -->\n  <section class=\"pc-step card\" id=\"step-1\" data-keywords=\"pilotage vts approach maascenter boarding sector channels\" aria-labelledby=\"title-step-1\">\n    <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n    <header class=\"card-head\">\n      <h2 id=\"title-step-1\"><span class=\"badge\">Step 1<\/span>Pilotage<\/h2>\n    <\/header>\n    <p class=\"pc-desc\">Boards a licensed pilot at a designated boarding area to guide the vessel inside port waters. The pilot integrates real-time traffic, tide, and berth readiness with the bridge team. Communications with VTS and traffic are continuous and deviations trigger safe speed and track adjustments. Pilotage criteria (visibility, wind, tugs) determine whether to proceed or hold. The purpose is safe transit from approach to the inner harbor. Effectiveness is measured by incident-free navigation and adherence to the arrival slot.<\/p>\n  <\/section>\n\n  <!-- Step 2 -->\n  <section class=\"pc-step card\" id=\"step-2\" data-keywords=\"towage tugs allocation power positions berthing control\" aria-labelledby=\"title-step-2\">\n    <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n    <header class=\"card-head\">\n      <h2 id=\"title-step-2\"><span class=\"badge\">Step 2<\/span> Towage<\/h2>\n    <\/header>\n    <p class=\"pc-desc\">Schedules and employs tugs matched to ship size, windage, and maneuvering complexity. The master and pilot agree on tug numbers, power, and positions before execution. Tug ETAs are synchronized with pilot boarding and boatmen readiness. Contingencies (engine issues, gusts) are mitigated through tug control authority. Purpose is controlled motion and stopping power in confined spaces. Effectiveness is smooth berthing with minimal corrective thrusting.<\/p>\n  <\/section>\n\n  <!-- Step 3 -->\n  <section class=\"pc-step card\" id=\"step-3\" data-keywords=\"berth arrival als alongside boatmen lines fenders gangway shore power\" aria-labelledby=\"title-step-3\">\n    <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n    <header class=\"card-head\">\n      <h2 id=\"title-step-3\"><span class=\"badge\">Step 3<\/span> Berth Arrival<\/h2>\n    <\/header>\n    <p class=\"pc-desc\">Executes final approach, line throwing, and contact with fenders under boatmen guidance. Ensures position matches crane reach, manifold and roll-on alignments, and safety clearances. Confirms gangway and ship-shore power (if applicable) readiness before cargo operations start. Records official alongside time (ALS) for KPI tracking and billing. Purpose is a safe, exact \u201calongside and ready\u201d state. Navigation ends and quay operations begin.<\/p>\n  <\/section>\n\n  <!-- Execution Party -->\n  \n  <!-- Research Problems -->\n  <section class=\"pc-step card\" id=\"research\" data-keywords=\"research problems berth tug pilot optimization\" aria-labelledby=\"title-research\">\n    <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n    <header class=\"card-head\">\n      <h2 id=\"title-research\">Related Research Problems<\/h2>\n      <div class=\"sub\">Key optimization problems related to port-arrival operations.<\/div>\n    <\/header>\n\n    <!-- Instructional note: subtle pulsing dot like Pre-Arribal -->\n    <div class=\"pc-research-note\" aria-hidden=\"false\" style=\"margin-top:8px; margin-bottom:8px; display:flex; align-items:center; gap:10px;\">\n      <style>\n        .pc-research-note .highlight-dot { display:inline-block; width:14px; height:14px; border-radius:50%; background: linear-gradient(90deg, #74c9ff, #2aa7e8); box-shadow: 0 2px 6px rgba(42,175,244,0.18); margin-right:10px; vertical-align:middle; animation: pcPulse 2.2s ease-in-out infinite; flex:0 0 auto; }\n        .pc-research-note .instruction { font-size:.95rem; color:var(--muted); margin:0; }\n        @keyframes pcPulse { 0%,100%{transform:scale(1)} 50%{transform:scale(1.15)} }\n      <\/style>\n      <span class=\"highlight-dot\" aria-hidden=\"true\"><\/span>\n      <div class=\"instruction\">Click on a card to open the webpage and data sets for each research problem.<\/div>\n    <\/div>\n\n    <div class=\"pc-grid\">\n      <article class=\"pc-card\" data-url=\"https:\/\/aiportcenter.nl\/index.php\/berth-allocation\/\">\n        <div class=\"pc-card-head\">\n          <span class=\"pc-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M3 19a1 1 0 0 0 .894.553h16.212A1 1 0 0 0 21 19v-2h-2v-5.382l-7-2.333-7 2.333V17H3v2Zm4-4h10v2H7v-2Zm6-9V4h-2v2H5v2.118l7-2.333 7 2.333V6h-6Z\"\/><\/svg><\/span>\n          <h3>Berth Allocation<\/h3>\n        <\/div>\n        <ul>\n          <li>Assign vessels to berths while balancing utilization, priorities and time windows.<\/li>\n        <\/ul>\n      <\/article>\n\n      <article class=\"pc-card\" data-url=\"https:\/\/aiportcenter.nl\/index.php\/tug-pilot-assignment\/\">\n        <div class=\"pc-card-head\">\n          <span class=\"pc-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M12 2 2 7l10 5 10-5-10-5Zm0 7L2 4v13l10 5 10-5V4l-10 5Z\"\/><\/svg><\/span>\n          <h3>Tug &#038; Pilot Assignment<\/h3>\n        <\/div>\n        <ul>\n          <li>Assign tugs and pilots to vessels while minimising idle steaming and conflicts.<\/li>\n        <\/ul>\n      <\/article>\n    <\/div>\n  <\/section>\n  <section class=\"pc-step card\" id=\"exec\" data-keywords=\"execution vts harbour master pilotage towage boatmen\" aria-labelledby=\"title-exec\">\n    <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n    <header class=\"card-head\">\n      <h2 id=\"title-exec\">Execution Party<\/h2>\n      <div class=\"sub\">Below, the main companies involved in the execution of port-arrival operations are listed.<\/div>\n    <\/header>\n\n    <div class=\"pc-grid\">\n      <article class=\"pc-card\">\n        <div class=\"pc-card-head\">\n          <span class=\"pc-icon\" aria-hidden=\"true\"><!-- port icon --><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M3 3h18v2H3V3Zm0 4h18v10H3V7Zm2 2v6h14V9H5Zm3 8h8v2H8v-2Z\"\/><\/svg><\/span>\n          <h3>Port of Rotterdam Authority<\/h3>\n        <\/div>\n        <ul>\n          <li>Traffic management &amp; safety oversight; passage planning via HaMIS; coordinates pilot\/tugs\/boatmen readiness.<\/li>\n        <\/ul>\n      <\/article>\n\n      <article class=\"pc-card\">\n        <div class=\"pc-card-head\">\n          <span class=\"pc-icon\" aria-hidden=\"true\"><!-- ship transfer icon --><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M3 6h12v2H3V6Zm0 4h10v2H3v-2Zm0 4h8v2H3v-2Zm12-6 6-3v12l-6-3V8Z\"\/><\/svg><\/span>\n          <h3>Redwise Maritime Services<\/h3>\n        <\/div>\n        <ul>\n          <li>Specialist arrivals support (e.g., deep-sea pilotage, ship delivery, crew transfers) when required for port calls.<\/li>\n        <\/ul>\n      <\/article>\n\n      <article class=\"pc-card\">\n        <div class=\"pc-card-head\">\n          <span class=\"pc-icon\" aria-hidden=\"true\"><!-- pilot icon --><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M4 6h16l-2 6-6 6-6-6 2-6Zm6 2-1 3 3 3 3-3 1-3h-6Z\"\/><\/svg><\/span>\n        <h3>Loodswezen Rotterdam-Rijnmond<\/h3>\n        <\/div>\n        <ul>\n          <li>Provides compulsory pilotage; boards at pilot station and advises the master during approach and inside port.<\/li>\n        <\/ul>\n      <\/article>\n    <\/div>\n  <\/section>\n\n  <!-- Planning Party -->\n  <section class=\"pc-step card\" id=\"plan\" data-keywords=\"planning berth window sequencing tug plan ukc metocean visibility readiness\" aria-labelledby=\"title-plan\">\n    <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n    <header class=\"card-head\">\n      <h2 id=\"title-plan\">Planning Party<\/h2>\n      <div class=\"sub\">Below, the main companies involved in planning port-arrival operations are listed.<\/div>\n    <\/header>\n\n    <div class=\"pc-grid\">\n      <article class=\"pc-card\">\n        <div class=\"pc-card-head\">\n          <span class=\"pc-icon\" aria-hidden=\"true\"><!-- layout icon --><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M3 3h18v18H3V3Zm2 2v14h14V5H5Zm2 2h10v4H7V7Zm0 6h6v4H7v-4Z\"\/><\/svg><\/span>\n          <h3>Port of Rotterdam Authority<\/h3>\n        <\/div>\n        <ul>\n          <li>Berth-window allocation, traffic sequencing, ETA management, and conditions for planning-area entry.<\/li>\n        <\/ul>\n      <\/article>\n\n      <article class=\"pc-card\">\n        <div class=\"pc-card-head\">\n          <span class=\"pc-icon\" aria-hidden=\"true\"><!-- tug icon --><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M3 17h18v2H3v-2Zm2-6h6v4H5v-4Zm8-6h6v10h-6V5Z\"\/><\/svg><\/span>\n          <h3>Boluda Towage<\/h3>\n        <\/div>\n        <ul>\n          <li>Harbour towage planning &amp; execution\u2014tug allocation and timing for inbound manoeuvres.<\/li>\n        <\/ul>\n      <\/article>\n\n      <article class=\"pc-card\">\n        <div class=\"pc-card-head\">\n          <span class=\"pc-icon\" aria-hidden=\"true\"><!-- clipboard icon --><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M9 3h6v2h4v16H5V5h4V3Zm2 4H7v10h10V7h-4V6h-2v1Z\"\/><\/svg><\/span>\n          <h3>Maersk Line Agent<\/h3>\n        <\/div>\n        <ul>\n          <li>Updates ETA &amp; port-call data to PCS; aligns tug\/pilot\/berth timing with Harbour Master &amp; terminal (generic agent role).<\/li>\n        <\/ul>\n      <\/article>\n    <\/div>\n  <\/section>\n\n  <!-- Datasets (TABLE) -->\n  <section class=\"pc-step card\" id=\"data\" data-keywords=\"port-arrival pilotage vts tides metocean depths notices map warnings\" aria-labelledby=\"title-data\">\n    <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n    <header class=\"card-head\">\n      <h2 id=\"title-data\">Available Data<\/h2>\n      <div class=\"sub\">Free, real-time data sources and official guidance used in port-arrival operations in Rotterdam.<\/div>\n    <\/header>\n\n    <div class=\"pc-table-wrap\">\n      <table class=\"pc-table pc-anim-table\" role=\"table\" aria-label=\"Port-Arrival datasets\">\n        <thead>\n          <tr>\n            <th scope=\"col\">Data Source<\/th>\n            <th scope=\"col\">Description<\/th>\n          <\/tr>\n        <\/thead>\n        <tbody>\n          <tr>\n            <td>\n              <a href=\"https:\/\/www.portofrotterdam.com\/en\/contact-harbourmaster\/vts-services-and-vhf-communication-procedure\" target=\"_blank\" rel=\"noopener\">VTS Services &amp; VHF Communication<\/a>\n              <div class=\"last-updated\">Last update: <time id=\"vts-last\"><\/time><\/div>\n            <\/td>\n            <td>Sector layout and working channels for Maas Approach and port sectors (who to call, where, and when).\n              <div class=\"version\">Version: Free (public)<\/div>\n            <\/td>\n          <\/tr>\n          <tr>\n            <td>\n              <a href=\"https:\/\/www.portofrotterdam.com\/sites\/default\/files\/2023-07\/procedure-VHF-communication-VTS-HCC-2023-English.pdf\" target=\"_blank\" rel=\"noopener\">VHF Procedure (PDF)<\/a>\n              <div class=\"last-updated\">Last update: <time id=\"vhf-pdf-last\"><\/time><\/div>\n            <\/td>\n            <td>Detailed reporting points and mandatory listening watch for pilots and bridge teams.\n              <div class=\"version\">Version: Free (PDF)<\/div>\n            <\/td>\n          <\/tr>\n          <tr>\n            <td>\n              <a href=\"https:\/\/www.vaarweginformatie.nl\/\" target=\"_blank\" rel=\"noopener\">RWS Vaarweginformatie<\/a>\n              <div class=\"last-updated\">Last update: <time id=\"vaarweg-last\"><\/time><\/div>\n            <\/td>\n            <td>Live inland &amp; port waterway notices, bridge\/lock status, and operational messages inside Rotterdam.\n              <div class=\"version\">Version: Free (public)<\/div>\n            <\/td>\n          <\/tr>\n          <tr>\n            <td>\n              <a href=\"https:\/\/emodnet.ec.europa.eu\/en\/bathymetry\" target=\"_blank\" rel=\"noopener\">EMODnet Bathymetry<\/a>\n              <div class=\"last-updated\">Last update: <time id=\"emodnet-last\"><\/time><\/div>\n            <\/td>\n            <td>Harmonised bathymetry for approach planning; complements local hydro\/meteo references.\n              <div class=\"version\">Version: Free (public)<\/div>\n            <\/td>\n          <\/tr>\n          <tr>\n            <td>\n              <a href=\"https:\/\/msi.admiralty.co.uk\/RadioNavigationalWarnings\" target=\"_blank\" rel=\"noopener\">NAVAREA I Radio Navigation Warnings<\/a>\n              <div class=\"last-updated\">Last update: <time id=\"navarea-last\"><\/time><\/div>\n            <\/td>\n            <td>Active coastal and radio warnings relevant to approaches in the southern North Sea.\n              <div class=\"version\">Version: Free (public)<\/div>\n            <\/td>\n          <\/tr>\n          <tr>\n            <td>\n              <a href=\"https:\/\/weather-tide.portofrotterdam.com\/desktop\/\" target=\"_blank\" rel=\"noopener\">Weather &amp; Tide Dashboard (HMC)<\/a>\n              <div class=\"last-updated\">Last update: <time id=\"hmc-last\"><\/time><\/div>\n            <\/td>\n            <td>Real-time wind, currents, visibility and water levels for UKC and window checks.\n              <div class=\"version\">Version: Free (public)<\/div>\n            <\/td>\n          <\/tr>\n          <tr>\n            <td>\n              <a href=\"https:\/\/www.portofrotterdam.com\/en\/up-to-date-information\/arrival-and-departures\" target=\"_blank\" rel=\"noopener\">Arrivals &amp; Departures<\/a>\n              <div class=\"last-updated\">Last update: <time id=\"arrivals-last\"><\/time><\/div>\n            <\/td>\n            <td>Expected\/in-port\/departed sea-going vessels with ETAs\/ETDs and call details.\n              <div class=\"version\">Version: Free (public)<\/div>\n            <\/td>\n          <\/tr>\n          <tr>\n            <td>\n              <a href=\"https:\/\/www.portofrotterdam.com\/en\/sea-shipping\" target=\"_blank\" rel=\"noopener\">Sea Shipping \u2014 Reporting &amp; VTS Info<\/a>\n              <div class=\"last-updated\">Last update: <time id=\"sea-shipping-last\"><\/time><\/div>\n            <\/td>\n            <td>Consolidated links to reporting moments, procedures, and VTS guidance for arrivals.\n              <div class=\"version\">Version: Free (public)<\/div>\n            <\/td>\n          <\/tr>\n          <tr>\n            <td>\n              <a href=\"https:\/\/www.knmi.nl\/nederland-nu\/weer\/waarschuwingen\" target=\"_blank\" rel=\"noopener\">KNMI Marine Weather<\/a>\n              <div class=\"last-updated\">Last update: <time id=\"knmi-last\"><\/time><\/div>\n            <\/td>\n            <td>Official marine warnings\/forecasts affecting pilotage and berthing windows.\n              <div class=\"version\">Version: Free (public)<\/div>\n            <\/td>\n          <\/tr>\n          <tr>\n            <td>\n              <a href=\"https:\/\/english.defensie.nl\/topics\/notices-to-mariners\" target=\"_blank\" rel=\"noopener\">Netherlands Notices to Mariners (NtM)<\/a>\n              <div class=\"last-updated\">Last update: <time id=\"ntm-last\"><\/time><\/div>\n            <\/td>\n            <td>Up-to-date Dutch NtMs for charted changes to approaches and fairways.\n              <div class=\"version\">Version: Free (public)<\/div>\n            <\/td>\n          <\/tr>\n        <\/tbody>\n      <\/table>\n      \n        <!-- Title placed below the table and left-aligned, just before the legend -->\n        <div class=\"pc-desc-title\">Description of Versions<\/div>\n\n      <\/div>\n        <div class=\"pc-table-legend\" aria-hidden=\"false\">\n          <p><b>Free (public):<\/b> The content is publicly accessible on the website without login or payment.<\/p>\n          <p><b>Free (PDF):<\/b> The resource is a downloadable PDF (static document) that is free to download and read.<\/p>\n        <\/div>\n  <\/section>\n  <\/main>\n<\/div>\n\n<style>\n\/* Hide WordPress default page\/post title if present *\/\nh1.entry-title, .entry-title, .page-title { display: none !important; }\n\n\/* ===== Dynamic sticky top ===== *\/\n:root{\n  --wp-adminbar: 0px;\n  --site-header: 0px;\n  --extra-offset: 160px;\n  --sticky-offset: calc(var(--wp-adminbar) + var(--site-header) + var(--extra-offset) + 12px);\n  scroll-padding-top: calc(var(--sticky-offset) + 8px);\n}\nbody.admin-bar{ --wp-adminbar: 32px; }\n@media (max-width: 782px){ body.admin-bar{ --wp-adminbar: 46px; } }\n\n\/* ===== Scoping: only style within .pc-container.polished ===== *\/\n.pc-container.polished {\n  --ink: #0b1220;\n  --muted: #5b6570;\n  --bg: #f6f8fb;\n  --card: #ffffff;\n  --accent: #0a5c94;\n  --accent-2: #7ccdf0;\n  --radius: 14px;\n  --shadow: 0 8px 28px rgba(10, 29, 56, 0.09);\n  --gap: 18px;\n  --ring: 0 0 0 3px rgba(43,176,237,.25);\n  position: relative;\n  isolation: isolate;\n  width: 100%;\n  max-width: 1200px;\n  margin: -15px;\n  padding: 20px;\n  box-sizing: border-box;\n  font-family: Inter, system-ui, Segoe UI, Roboto, Arial, sans-serif;\n  color: var(--ink);\n}\n\n\/******** Hero ********\/\n.pc-container.polished .pc-hero {\n  position: relative;\n  overflow: hidden;\n  border-radius: calc(var(--radius) + 4px);\n  padding: 28px 28px 20px;\n  box-shadow: var(--shadow);\n  background: linear-gradient(180deg, rgba(10,106,176,.03), rgba(10,106,176,.005));\n}\n.pc-container.polished .pc-hero-bg::before,\n.pc-container.polished .pc-hero-bg::after{\n  content:\"\"; position:absolute; inset:auto -10% -40% -10%; height:180px;\n  background: radial-gradient(60% 80% at 50% 0%, rgba(43,176,237,.08), transparent 70%);\n  filter: blur(40px); pointer-events:none;\n}\n.pc-container.polished .pc-hero-inner{ position: relative; z-index: 1; }\n.pc-container.polished .pc-hero-eyebrow{\n  font-size:.8rem; letter-spacing:.12em; text-transform:uppercase; color:var(--accent);\n  margin-bottom:6px; font-weight:600;\n}\n.pc-container.polished .pc-hero h1{ margin:.1rem 0 .4rem; font-size: clamp(1.4rem, 2.2vw, 2rem); letter-spacing:-.2px; }\n.pc-container.polished .lead{ margin:0; color: var(--muted); font-size: .98rem; }\n\n.pc-container.polished .pc-steps-nav{ display:flex; gap:10px; flex-wrap:wrap; margin-top:14px; }\n.pc-container.polished .chip{\n  display:inline-flex; align-items:center; gap:.5rem; padding:.48rem .72rem; border-radius:999px;\n  background: #fff; color: var(--ink); box-shadow: var(--shadow); text-decoration:none; transition: transform .2s ease, box-shadow .2s ease;\n}\n.pc-container.polished .chip .num{\n  display:inline-grid; place-items:center; width:24px; height:24px; border-radius:50%; font-size:.9rem; font-weight:700; color:#fff; background: linear-gradient(135deg, var(--accent), var(--accent-2));\n}\n.pc-container.polished .chip:hover{ transform: translateY(-2px); box-shadow: 0 10px 24px rgba(0,0,0,.10); }\n\n\/******** Sticky TOC ********\/\n.pc-container.polished .pc-toc{ position: sticky; top: var(--sticky-offset); margin: 18px 0; z-index: 3; }\n.pc-container.polished .pc-toc-inner{\n  border-radius: var(--radius); background: #ffffff; box-shadow: var(--shadow); padding: 14px 16px; border: 1px solid rgba(10,106,176,.10);\n}\n.pc-container.polished .pc-toc-title{ font-size:.9rem; font-weight:700; margin-bottom:6px; color: var(--accent); }\n.pc-container.polished .pc-toc ol{ list-style:none; padding:0; margin:0; display:grid; gap:6px; }\n.pc-container.polished .pc-toc a{ color: var(--ink); text-decoration:none; padding:6px 8px; border-radius:8px; display:block; }\n.pc-container.polished .pc-toc a:is(:hover,:focus){ background: rgba(43,176,237,.08); box-shadow: var(--ring); outline: none; }\n.pc-container.polished .pc-toc a.active{ background: linear-gradient(180deg, rgba(43,176,237,.12), rgba(43,176,237,.06)); }\n\n\/******** Cards ********\/\n.pc-container.polished .card{\n  position: relative; background: var(--card); border-radius: var(--radius); padding: 18px; margin: 16px 0; box-shadow: var(--shadow);\n}\n.pc-container.polished .card-head h2{ font-size: 1.2rem; margin: 0 0 6px; display:flex; align-items:center; gap:10px; }\n.pc-container.polished .card-head .sub{ color: var(--muted); font-size:.95rem; }\n.pc-container.polished .badge{ display:inline-flex; align-items:center; justify-content:center; height:24px; padding:0 8px; font-size:.75rem; border-radius:6px; background: linear-gradient(135deg, var(--accent), var(--accent-2)); color:#fff; box-shadow: inset 0 -1px 0 rgba(255,255,255,.25); }\n.pc-container.polished .pc-desc{ color: var(--muted); margin: 0 0 10px; }\n\/* Ensure anchor scrolling accounts for sticky bars *\/\n.pc-container.polished .pc-step{ scroll-margin-top: calc(var(--sticky-offset) + 16px); }\n.pc-container.polished .card-accent{\n  position:absolute; inset:0; border-radius: inherit; padding:1px; background: linear-gradient(135deg, rgba(10,106,176,.28), rgba(43,176,237,.28)); -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);\n  -webkit-mask-composite: xor; mask-composite: exclude; pointer-events:none; opacity:.7;\n}\n\n\/******** Grid for org cards ********\/\n.pc-container.polished .pc-grid{ display:grid; grid-template-columns: repeat(12, 1fr); gap: 14px; margin-top: 10px; }\n.pc-container.polished .pc-grid.onecol{ grid-template-columns: repeat(12, 1fr); }\n.pc-container.polished .pc-card{ grid-column: span 6; background:#fff; border:1px solid rgba(10,106,176,.10); border-radius: 12px; padding: 14px; transition: transform .2s ease, box-shadow .2s ease; }\n.pc-container.polished .pc-card:hover{ transform: translateY(-4px); box-shadow: 0 14px 28px rgba(10, 29, 56, .12); }\n.pc-container.polished .pc-card.list{ grid-column: 1 \/ -1; }\n.pc-container.polished .pc-card-head{ display:flex; align-items:center; gap:10px; margin-bottom:6px; }\n.pc-container.polished .pc-card h3{ margin:0; font-size:1.05rem; font-weight:700; }\n.pc-container.polished .pc-card ul{ margin:0; padding-left: 1.15rem; color: var(--muted); }\n.pc-container.polished .pc-icon{ display:inline-grid; place-items:center; width:28px; height:28px; border-radius:8px; background: linear-gradient(135deg, rgba(10,106,176,.15), rgba(43,176,237,.15)); color: var(--accent); flex-shrink:0; }\n.pc-container.polished .pc-icon svg{ display:block; }\n\n\/******** Links ********\/\n.pc-container.polished a{ color: var(--accent); text-decoration: none; }\n.pc-container.polished a:hover{ text-decoration: underline; }\n\n\/******** Layout ********\/\n@media (min-width: 900px){\n  .pc-container.polished{ display:grid; grid-template-columns: 260px 1fr; gap:20px; align-items:start; }\n  .pc-container.polished .pc-hero{ grid-column: 1 \/ -1; }\n  .pc-container.polished .pc-toc{ grid-column: 1; align-self:start; }\n  .pc-container.polished .pc-main{ grid-column: 2; min-width:0; }\n}\n\n@media (max-width: 899.98px){\n  .pc-container.polished .pc-grid{ grid-template-columns: repeat(6, 1fr); }\n  .pc-container.polished .pc-card{ grid-column: 1 \/ -1; }\n}\n\n\/******** Accessible focus ********\/\n.pc-container.polished :is(a,button,[tabindex]){ outline: none; }\n.pc-container.polished :is(a,button,[tabindex]):focus{ box-shadow: var(--ring); border-radius: 8px; }\n\n\/* ===== Datasets table (sharp corners, full grid, subtle table-only hover) ===== *\/\n.pc-table-wrap{ margin-top: 10px; }\n\n.pc-table{\n  width: 100%;\n  border-collapse: collapse;\n  background: #fff;\n  border: 1px solid rgba(10,106,176,.25);   \/* single outer border *\/\n  border-radius: 0;                          \/* sharp corners *\/\n  table-layout: fixed;\n}\n\n.pc-table th,\n.pc-table td{\n  border: 1px solid rgba(10,106,176,.2);     \/* full grid *\/\n  padding: 10px 12px;\n  vertical-align: top;\n  word-wrap: break-word;\n}\n\n\/* Header: centered black text, light transparent blue background *\/\n.pc-table thead th{\n  background: rgba(215,236,251,0.55);\n  color: #000;\n  font-weight: 700;\n  text-align: center;\n}\n\n\/* Body base *\/\n.pc-table tbody td{ text-align: left; }\n\n\/* Column colors: Data (blue), Description (muted grey) *\/\n.pc-table tbody td:first-child{\n  color: #084EAE;\n}\n.pc-table tbody td:first-child a{\n  color: #084EAE;\n  text-decoration: none;\n}\n.pc-table tbody td:first-child a:hover{\n  text-decoration: underline;\n}\n.pc-table tbody td:nth-child(2){\n  color: var(--muted);\n}\n\n\/* Gentle hover lift on the table (no extra borders\/containers move) *\/\n.pc-anim-table{\n  transition: transform .16s ease, box-shadow .16s ease;\n  will-change: transform;\n}\n.pc-anim-table:hover,\n.pc-anim-table:focus-within{\n  transform: translateY(-3px);\n  box-shadow: 0 10px 24px rgba(10, 29, 56, 0.12);\n}\n\n@media (prefers-reduced-motion: reduce){\n  .pc-anim-table{ transition: none; }\n  .pc-anim-table:hover,\n  .pc-anim-table:focus-within{ transform: none; box-shadow: none; }\n}\n<\/style>\n\n<style>\n\/* Small title when placed below the table *\/\n.pc-desc-title{ color: #000; font-weight:700; font-size: .95rem; text-align: left; margin: 10px 0 6px; }\n\n\/* Legend headings match link blue but render normal weight *\/\n.pc-table-legend{ margin-top: 12px; font-size: .95rem; color: var(--muted); }\n.pc-table-legend b{ color: #084EAE; font-weight: 400; }\n\n\/* Left-column small 'last-updated' text only *\/\n.pc-table tbody td:first-child .last-updated{\n  color: #666;\n  display: block;\n  font-size: .9rem;\n  margin-top: 6px;\n  font-style: italic;\n}\n\n\/* Version text for right-column descriptions *\/\n.pc-table tbody td:nth-child(2) .version{\n  color: var(--muted);\n  display: block;\n  font-size: .92rem;\n  margin-top: 8px;\n  font-style: italic;\n}\n<\/style>\n\n<script>\n  (function () {\n    const rows = Array.from(document.querySelectorAll('.pc-table tbody td:first-child'));\n    if (!rows.length) return;\n\n    function formatDateOnly(d) {\n      try {\n        const day = String(d.getDate()).padStart(2, '0');\n        const month = String(d.getMonth() + 1).padStart(2, '0');\n        const year = d.getFullYear();\n        return `${day}\/${month}\/${year}`;\n      } catch (e) { return d.toISOString().slice(0,10); }\n    }\n\n    async function fetchLastModified(url) {\n      try {\n        let resp;\n        try { resp = await fetch(url, { method: 'HEAD', mode: 'cors', cache: 'no-cache' }); } catch (e) { resp = null; }\n        let last = resp && resp.ok ? resp.headers.get('last-modified') : null;\n\n        if (!last) {\n          try { resp = await fetch(url, { method: 'GET', mode: 'cors', cache: 'no-cache' }); } catch (e) { resp = null; }\n          if (resp && resp.ok) {\n            last = resp.headers.get('last-modified');\n            if (!last) {\n              try {\n                const txt = await resp.text();\n                const m = txt.match(\/(?:Last updated|Last update|Updated on|Updated:)\\s*([A-Za-z0-9,\\-:\\.\\s]+)\/i);\n                if (m && m[1]) last = m[1].trim();\n              } catch (e) { \/* ignore *\/ }\n            }\n          }\n        }\n\n        return last || null;\n      } catch (err) { return null; }\n    }\n\n    rows.forEach(async (td) => {\n      const a = td.querySelector('a[href]');\n      const timeEl = td.querySelector('time');\n      if (!a || !timeEl) return;\n      const url = a.href;\n\n      const last = await fetchLastModified(url);\n      if (!last) {\n        const dLocal = new Date(document.lastModified);\n        timeEl.dateTime = dLocal.toISOString();\n        timeEl.textContent = formatDateOnly(dLocal);\n        return;\n      }\n\n      const d = new Date(last);\n      if (!isNaN(d)) {\n        timeEl.dateTime = d.toISOString();\n        timeEl.textContent = formatDateOnly(d);\n      } else {\n        timeEl.textContent = last.split('\\n')[0].trim();\n      }\n    });\n  })();\n<\/script>\n  <script>\n  \/* Make Research Problems cards clickable (data-url priority, plus mapping) *\/\n  (function(){\n    const researchLinks = [\n      { title: 'Berth Allocation', url: 'https:\/\/aiportcenter.nl\/index.php\/berth-allocation\/' },\n      { title: 'Tug & Pilot Assignment', url: 'https:\/\/aiportcenter.nl\/index.php\/tug-pilot-assignment\/' }\n    ];\n\n    const linksByIndex = [];\n    const section = document.getElementById('research');\n    if(!section) return;\n    const cards = Array.from(section.querySelectorAll('.pc-card'));\n    cards.forEach((card, idx) => {\n      const h3 = card.querySelector('h3');\n      const title = h3 ? h3.textContent.trim() : null;\n      const dataUrl = card.dataset && (card.dataset.url || card.dataset.href || card.dataset.link);\n      let mapping = null;\n      if(dataUrl) mapping = { url: dataUrl };\n      if(!mapping) mapping = researchLinks.find(r => r.title === title && r.url);\n      if(!mapping && linksByIndex[idx]) mapping = { url: linksByIndex[idx] };\n\n      if(mapping && mapping.url){\n        card.tabIndex = 0;\n        card.setAttribute('role','link');\n        card.style.cursor = 'pointer';\n        card.addEventListener('click', ()=> window.open(mapping.url, '_blank'));\n        card.addEventListener('keydown', (ev)=> { if(ev.key === 'Enter' || ev.key === ' '){ ev.preventDefault(); window.open(mapping.url, '_blank'); } });\n\n        const anchor = document.createElement('a');\n        anchor.href = mapping.url; anchor.target = '_blank'; anchor.rel = 'noopener noreferrer';\n        anchor.setAttribute('aria-hidden','true'); anchor.style.position = 'absolute'; anchor.style.inset = '0'; anchor.style.zIndex = '2'; anchor.style.background = 'transparent'; anchor.style.textDecoration = 'none';\n        const pos = getComputedStyle(card).position;\n        if(!pos || pos === 'static') card.style.position = 'relative';\n        card.appendChild(anchor);\n      }\n    });\n\n    \/\/ Ensure TOC entry label is correct\n    const toc = document.querySelector('#portarrival-rotterdam .pc-toc ol');\n    if(toc){\n      const existing = toc.querySelector('a[href=\"#research\"]');\n      if(!existing){\n        const li = document.createElement('li');\n        const a = document.createElement('a'); a.href = '#research'; a.textContent = 'Research Problems';\n        li.appendChild(a);\n        const execItem = toc.querySelector('a[href=\"#exec\"]');\n        if(execItem && execItem.parentNode) toc.insertBefore(li, execItem.parentNode);\n        else toc.appendChild(li);\n      } else { existing.textContent = 'Research Problems'; }\n    }\n  })();\n  <\/script>\n\n<script>\n\/\/ ===== Smooth scroll + active TOC highlighting + header height detection =====\n(function(){\n  \/\/ Detect fixed\/sticky site header height and set --site-header\n  try{\n    const root = document.documentElement;\n    const detect = () => {\n      const nodes = Array.from(document.querySelectorAll(\n        'header, .site-header, #masthead, .navbar, .header, [data-fixed-header], ' +\n        '.sticky-header, .header-wrapper, .elementor-location-header, ' +\n        '.fl-page-header, .fusion-header, .kadence-header, .ast-primary-header-bar, ' +\n        '.generatepress-header, .blocksy-header'\n      ));\n      const fixedLike = nodes.filter(el => {\n        const cs = getComputedStyle(el);\n        const pos = cs.position;\n        const top = Math.round(el.getBoundingClientRect().top);\n        return (pos==='fixed' || pos==='sticky') && top <= 0 &#038;&#038; el.offsetHeight > 0;\n      });\n      const h = fixedLike.reduce((m,el)=> Math.max(m, el.offsetHeight||0), 0);\n      root.style.setProperty('--site-header', h + 'px');\n    };\n    ['load','resize','scroll'].forEach(ev=> window.addEventListener(ev, detect, { passive:true }));\n    detect();\n  }catch(e){}\n\n  const tocLinks = Array.from(document.querySelectorAll('#portarrival-rotterdam .pc-toc a'));\n  const sections = tocLinks.map(a => document.querySelector(a.getAttribute('href'))).filter(Boolean);\n\n  tocLinks.forEach(a=>a.addEventListener('click', e=>{\n    e.preventDefault();\n    const target = document.querySelector(a.getAttribute('href'));\n    if(target){ target.scrollIntoView({behavior:'smooth', block:'start'}); }\n  }));\n\n  const io = new IntersectionObserver((entries)=>{\n    entries.forEach(entry=>{\n      const id = '#' + entry.target.id;\n      const link = tocLinks.find(l=>l.getAttribute('href')===id);\n      if(link){\n        if(entry.isIntersecting){\n          tocLinks.forEach(l=>l.classList.remove('active'));\n          link.classList.add('active');\n        }\n      }\n    })\n  },{ rootMargin: 'calc(var(--sticky-offset) * -1) 0px -60% 0px', threshold: 0.01 });\n  sections.forEach(sec=> io.observe(sec));\n})();\n<\/script>\n<!-- ========= \/END PORT-ARRIVAL (POLISHED) ========= -->\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Home \u203a Port-Call Data Hub \u203a Processes Timeline \u203a Port-Arrival Port-Call Optimization at the Port of Rotterdam Port-Arrival Manages approach from pilot boarding to being safely alongside and ready for operations. Pilotage and VTS integrate with towage and boatmen for controlled entry under local rules. Dynamic factors (tide, wind, traffic, berth readiness) are balanced in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-372","page","type-page","status-publish","hentry"],"blocksy_meta":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"peterwenzel","author_link":"https:\/\/aiportcenter.nl\/index.php\/author\/peterwenzel\/"},"uagb_comment_info":0,"uagb_excerpt":"Home \u203a Port-Call Data Hub \u203a Processes Timeline \u203a Port-Arrival Port-Call Optimization at the Port of Rotterdam Port-Arrival Manages approach from pilot boarding to being safely alongside and ready for operations. Pilotage and VTS integrate with towage and boatmen for controlled entry under local rules. Dynamic factors (tide, wind, traffic, berth readiness) are balanced in&hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/372","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/comments?post=372"}],"version-history":[{"count":20,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/372\/revisions"}],"predecessor-version":[{"id":1648,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/372\/revisions\/1648"}],"wp:attachment":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/media?parent=372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}