{"id":1484,"date":"2026-10-08T09:11:08","date_gmt":"2026-10-08T09:11:08","guid":{"rendered":"https:\/\/circularport.eu\/?page_id=1484"},"modified":"2026-10-15T12:00:38","modified_gmt":"2026-10-15T12:00:38","slug":"circular-2","status":"publish","type":"page","link":"https:\/\/circularport.eu\/es\/","title":{"rendered":"Circularport"},"content":{"rendered":"<div class=\"vce-row-container\"><div class=\"vce-row vce-row--col-gap-30 vce-row-equal-height vce-row-content--top\" data-vce-full-width=\"true\" data-vce-stretch-content=\"true\" id=\"el-28321467\" data-vce-do-apply=\"all el-28321467\"><div class=\"vce-content-background-container\"><\/div><div class=\"vce-row-content\" data-vce-element-content=\"true\"><div class=\"vce-col vce-col--md-auto vce-col--xs-1 vce-col--xs-last vce-col--xs-first vce-col--sm-last vce-col--sm-first vce-col--md-last vce-col--lg-last vce-col--xl-last vce-col--md-first vce-col--lg-first vce-col--xl-first\" id=\"el-129d9d12\"><div class=\"vce-col-inner\" data-vce-do-apply=\"border margin background  el-129d9d12\"><div class=\"vce-col-content\" data-vce-element-content=\"true\" data-vce-do-apply=\"padding el-129d9d12\"><div class=\"vce-raw-html\"><div class=\"vce-raw-html-wrapper\" id=\"el-d74e52b0\" data-vce-do-apply=\"all el-d74e52b0\"><link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;700&amp;display=swap\" rel=\"stylesheet\">\n\n<div id=\"circularport-home\">\n\n  <!-- HERO -->\n  <section class=\"cp-hero\">\n    <div class=\"cp-container cp-hero-grid\">\n      <div>\n        <p class=\"cp-eyebrow\">TRAZABILIDAD DIGITAL \u00b7 RESIDUOS MARPOL<\/p>\n\n        <h1>Conecta los datos.<br>Traza cada <span>residuo.<\/span><\/h1>\n\n        <p class=\"cp-lead\">\n          Del buque a su destino final. Una plataforma para conectar la\n          operativa portuaria, verificar cada gesti\u00f3n y medir su impacto ambiental.\n        <\/p>\n\n        <div class=\"cp-actions\">\n          <a class=\"cp-button\" href=\"#cp-plataforma\">Explorar la plataforma<\/a>\n          <a class=\"cp-button cp-outline\" href=\"#cp-funcionamiento\">C\u00f3mo funciona<\/a>\n        <\/div>\n\n        <p class=\"cp-hero-note\">\n          \u2713 Desarrollado con la Autoridad Portuaria de Baleares\n        <\/p>\n      <\/div>\n\n      <div class=\"cp-hero-panel\">\n        <img decoding=\"async\" class=\"cp-logo\" src=\"https:\/\/www.circularport.eu\/wp-content\/uploads\/2024\/06\/1-1-e1717596022987.png\" alt=\"CircularPort\">\n\n        <p class=\"cp-eyebrow\">DEL PUERTO AL TRATAMIENTO FINAL<\/p>\n        <h2>Un residuo.<br>Un historial conectado.<\/h2>\n\n        <div class=\"cp-hero-route\">\n          <div><span>01<\/span><strong>Origen<\/strong><small>Buque y escala<\/small><\/div>\n          <div><span>02<\/span><strong>Recogida<\/strong><small>Servicio MARPOL<\/small><\/div>\n          <div><span>03<\/span><strong>Traslado<\/strong><small>Cadena de custodia<\/small><\/div>\n          <div><span>04<\/span><strong>Destino<\/strong><small>Tratamiento final<\/small><\/div>\n        <\/div>\n\n        <div class=\"cp-hero-panel-bottom\">\n          <span>Pasaporte digital de residuos<\/span>\n          <span class=\"cp-pill\">Trazabilidad verificable<\/span>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"cp-container cp-hero-strip\">\n      <span>Operativa conectada<\/span>\n      <span>Pasaporte digital<\/span>\n      <span>Indicadores ambientales<\/span>\n      <a href=\"https:\/\/www.blueroominnovation.com\/circularport\" target=\"_blank\" rel=\"noopener\">\n        Developed by <strong>Blue Room Innovation<\/strong>\n      <\/a>\n    <\/div>\n  <\/section>\n\n  <!-- QU\u00c9 ES -->\n  <section class=\"cp-section\" id=\"cp-que-es\">\n    <div class=\"cp-container\">\n      <div class=\"cp-heading-grid\">\n        <div>\n          <p class=\"cp-eyebrow\">QU\u00c9 ES CIRCULARPORT<\/p>\n          <h2>El puerto conectado.<br><span>El residuo trazado.<\/span><\/h2>\n        <\/div>\n\n        <div class=\"cp-heading-copy\">\n          <p class=\"cp-lead\">\n            CircularPort digitaliza la gesti\u00f3n de residuos MARPOL y conecta\n            a todos los actores en una \u00fanica plataforma trazable y verificable.\n          <\/p>\n          <p>\n            Autoridades portuarias, buques, agentes, transportistas, polic\u00eda\n            portuaria, gestores y recicladores comparten la informaci\u00f3n de\n            cada operaci\u00f3n. Desde la recogida hasta el tratamiento final,\n            cada gesti\u00f3n deja una evidencia.\n          <\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"cp-benefits\">\n        <article>\n          <span class=\"cp-benefit-number\">01<\/span>\n          <h3>Trazabilidad completa<\/h3>\n          <p>Conoce el origen, el recorrido y el destino final de cada residuo.<\/p>\n        <\/article>\n        <article>\n          <span class=\"cp-benefit-number\">02<\/span>\n          <h3>Datos conectados<\/h3>\n          <p>Una misma operaci\u00f3n para coordinar a autoridad, operadores y gestores.<\/p>\n        <\/article>\n        <article>\n          <span class=\"cp-benefit-number\">03<\/span>\n          <h3>Menos carga administrativa<\/h3>\n          <p>Reduce duplicidades y tareas manuales con documentos y firmas vinculados.<\/p>\n        <\/article>\n        <article>\n          <span class=\"cp-benefit-number\">04<\/span>\n          <h3>Impacto medible<\/h3>\n          <p>Indicadores ambientales y reporting para tomar decisiones con datos.<\/p>\n        <\/article>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- C\u00d3MO FUNCIONA -->\n  <section class=\"cp-section cp-pale\" id=\"cp-funcionamiento\">\n    <div class=\"cp-container\">\n      <div class=\"cp-section-heading\">\n        <p class=\"cp-eyebrow\">C\u00d3MO FUNCIONA<\/p>\n        <h2>Una operaci\u00f3n conectada.<br><span>De principio a fin.<\/span><\/h2>\n        <p>Responsables, documentos y evidencias vinculados a una misma operaci\u00f3n.<\/p>\n      <\/div>\n\n      <div class=\"cp-workflow-grid\">\n        <div class=\"cp-steps\" role=\"group\" aria-label=\"Etapas de la operaci\u00f3n\">\n          <button type=\"button\" class=\"cp-step cp-active\" data-step=\"0\" aria-pressed=\"true\">\n            <span class=\"cp-step-number\">01<\/span>\n            <span><small>INICIO DE LA OPERACI\u00d3N<\/small><strong>Registro de la escala<\/strong><\/span>\n            <span class=\"cp-step-sign\">\u2212<\/span>\n          <\/button>\n\n          <button type=\"button\" class=\"cp-step\" data-step=\"1\" aria-pressed=\"false\">\n            <span class=\"cp-step-number\">02<\/span>\n            <span><small>SERVICIO MARPOL<\/small><strong>Retirada del residuo<\/strong><\/span>\n            <span class=\"cp-step-sign\">+<\/span>\n          <\/button>\n\n          <button type=\"button\" class=\"cp-step\" data-step=\"2\" aria-pressed=\"false\">\n            <span class=\"cp-step-number\">03<\/span>\n            <span><small>CONTROL PORTUARIO<\/small><strong>Validaci\u00f3n de entrada y salida<\/strong><\/span>\n            <span class=\"cp-step-sign\">+<\/span>\n          <\/button>\n\n          <button type=\"button\" class=\"cp-step\" data-step=\"3\" aria-pressed=\"false\">\n            <span class=\"cp-step-number\">04<\/span>\n            <span><small>DESTINO FINAL<\/small><strong>Tratamiento y valorizaci\u00f3n<\/strong><\/span>\n            <span class=\"cp-step-sign\">+<\/span>\n          <\/button>\n        <\/div>\n\n        <div class=\"cp-operation\">\n          <div class=\"cp-operation-top\">\n            <strong>\u21bb &nbsp; Operaci\u00f3n portuaria<\/strong>\n            <small>Ejemplo ilustrativo<\/small>\n          <\/div>\n\n          <p class=\"cp-operation-reference\">ES-PMI-0248 \u00b7 Ocean Star<\/p>\n\n          <div class=\"cp-progress\" aria-hidden=\"true\">\n            <span class=\"cp-current\">1<\/span><i><\/i>\n            <span>2<\/span><i><\/i>\n            <span>3<\/span><i><\/i>\n            <span>4<\/span>\n          <\/div>\n\n          <div aria-live=\"polite\">\n            <p class=\"cp-eyebrow\" id=\"cp-step-actor\">AUTORIDAD PORTUARIA<\/p>\n            <h3 id=\"cp-step-title\">Todo empieza con la escala.<\/h3>\n            <p id=\"cp-step-description\">\n              La autoridad portuaria incorpora el buque, la fecha, el atraque\n              y los servicios previstos. La operaci\u00f3n recibe una identidad digital compartida.\n            <\/p>\n          <\/div>\n\n          <dl class=\"cp-operation-fields\" id=\"cp-step-fields\">\n            <div><dt>Buque<\/dt><dd>Ocean Star<\/dd><\/div>\n            <div><dt>Puerto<\/dt><dd>Palma<\/dd><\/div>\n            <div><dt>Escala<\/dt><dd>ES-PMI-0248<\/dd><\/div>\n            <div><dt>Estado<\/dt><dd>Registrada<\/dd><\/div>\n          <\/dl>\n\n          <p class=\"cp-evidence\" id=\"cp-step-evidence\">\n            \u2713 Datos de escala vinculados a la operaci\u00f3n\n          <\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- DASHBOARD -->\n  <section class=\"cp-section\" id=\"cp-plataforma\">\n    <div class=\"cp-container\">\n      <div class=\"cp-heading-grid\">\n        <div>\n          <p class=\"cp-eyebrow\">EXPLORA LA PLATAFORMA<\/p>\n          <h2>De los datos<br><span>a las decisiones.<\/span><\/h2>\n        <\/div>\n        <div class=\"cp-heading-copy\">\n          <p>\n            Visi\u00f3n global del puerto y detalle de cada residuo.\n            Cambia los filtros, consulta el impacto y abre un pasaporte digital.\n          <\/p>\n          <span class=\"cp-pill\">Demo interactiva \u00b7 datos de ejemplo<\/span>\n        <\/div>\n      <\/div>\n\n      <div class=\"cp-app\">\n        <div class=\"cp-window-bar\">\n          <span class=\"cp-window-dots\" aria-hidden=\"true\"><i><\/i><i><\/i><i><\/i><\/span>\n          <span>app.circularport.eu<\/span>\n          <small>Entorno de demostraci\u00f3n<\/small>\n        <\/div>\n\n        <div class=\"cp-app-layout\">\n          <aside class=\"cp-sidebar\" aria-label=\"Vistas de la demo\">\n            <span class=\"cp-app-mark\" aria-hidden=\"true\">\u21bb<\/span>\n            <button type=\"button\" class=\"cp-sidebar-button cp-active\" data-view=\"dashboard\" aria-label=\"Dashboard\" aria-pressed=\"true\">\n              <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"><\/rect>\n                <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"><\/rect>\n                <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"><\/rect>\n                <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"><\/rect>\n              <\/svg>\n            <\/button>\n            <button type=\"button\" class=\"cp-sidebar-button\" data-view=\"impact\" aria-label=\"Impacto ambiental\" aria-pressed=\"false\">\n              <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                <path d=\"M4 3v18h17M8 16v-5m5 5V6m5 10V9\"><\/path>\n              <\/svg>\n            <\/button>\n            <button type=\"button\" class=\"cp-sidebar-button\" data-view=\"passports\" aria-label=\"Pasaportes\" aria-pressed=\"false\">\n              <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                <rect x=\"5\" y=\"3\" width=\"14\" height=\"18\" rx=\"2\"><\/rect>\n                <path d=\"M9 8h6M9 12h6M9 16h4\"><\/path>\n              <\/svg>\n            <\/button>\n          <\/aside>\n\n          <div class=\"cp-app-main\">\n            <div class=\"cp-app-toolbar\">\n              <div class=\"cp-app-tabs\" role=\"group\" aria-label=\"Vistas de la plataforma\">\n                <button type=\"button\" class=\"cp-active\" data-view=\"dashboard\" aria-pressed=\"true\">Dashboard<\/button>\n                <button type=\"button\" data-view=\"impact\" aria-pressed=\"false\">Impacto<\/button>\n                <button type=\"button\" data-view=\"passports\" aria-pressed=\"false\">Pasaportes<\/button>\n              <\/div>\n              <span class=\"cp-avatar\" aria-label=\"Autoridad portuaria\">AP<\/span>\n            <\/div>\n\n            <div class=\"cp-app-content\">\n              <div class=\"cp-app-heading\">\n                <div>\n                  <p class=\"cp-breadcrumb\">CircularPort \/ Autoridad portuaria<\/p>\n                  <h3 id=\"cp-view-title\">Panel de control<\/h3>\n                <\/div>\n                <span class=\"cp-demo-label\">DATOS DE EJEMPLO<\/span>\n              <\/div>\n\n              <div class=\"cp-filters\">\n                <label>\n                  <span>Puerto<\/span>\n                  <select id=\"cp-port\">\n                    <option value=\"all\">Todos los puertos<\/option>\n                    <option value=\"palma\">Palma<\/option>\n                    <option value=\"ibiza\">Ibiza<\/option>\n                    <option value=\"mahon\">Ma\u00f3<\/option>\n                  <\/select>\n                <\/label>\n                <label>\n                  <span>Residuo<\/span>\n                  <select id=\"cp-waste\">\n                    <option value=\"all\">Todas las categor\u00edas<\/option>\n                    <option value=\"oil\">MARPOL I \u00b7 Oleosos<\/option>\n                    <option value=\"plastic\">MARPOL V \u00b7 Pl\u00e1sticos<\/option>\n                    <option value=\"food\">MARPOL V \u00b7 Restos de comida<\/option>\n                  <\/select>\n                <\/label>\n                <label class=\"cp-period\">\n                  <span>Periodo<\/span>\n                  <select id=\"cp-period\">\n                    <option value=\"year\">\u00daltimos 12 meses<\/option>\n                    <option value=\"quarter\">\u00daltimos 3 meses<\/option>\n                    <option value=\"month\">\u00daltimo mes<\/option>\n                  <\/select>\n                <\/label>\n              <\/div>\n\n              <div class=\"cp-view\" id=\"cp-dashboard-view\">\n                <div class=\"cp-overview\">\n                  <div class=\"cp-metric cp-circularity\">\n                    <div class=\"cp-donut\" id=\"cp-donut\" role=\"img\" aria-label=\"\u00cdndice de circularidad: 83 por ciento\">\n                      <div>\n                        <strong id=\"cp-circularity\">83%<\/strong>\n                        <span>\u00cdndice de circularidad<\/span>\n                      <\/div>\n                    <\/div>\n                    <small>Proporci\u00f3n de residuos valorizados<\/small>\n                  <\/div>\n\n                  <div class=\"cp-overview-totals\">\n                    <div class=\"cp-metric cp-total\">\n                      <span class=\"cp-metric-icon\">\u25a4<\/span>\n                      <div>\n                        <span>Residuos recogidos<\/span>\n                        <strong><span id=\"cp-total\">1.250<\/span> <small>t<\/small><\/strong>\n                        <small>Peso total registrado<\/small>\n                      <\/div>\n                    <\/div>\n                    <div class=\"cp-metric cp-total\">\n                      <span class=\"cp-metric-icon\">\u21bb<\/span>\n                      <div>\n                        <span>Residuos valorizados<\/span>\n                        <strong><span id=\"cp-recovered\">1.043,4<\/span> <small>t<\/small><\/strong>\n                        <small>Reciclaje y valorizaci\u00f3n energ\u00e9tica<\/small>\n                      <\/div>\n                    <\/div>\n                  <\/div>\n                <\/div>\n\n                <div class=\"cp-environment\">\n                  <button type=\"button\" class=\"cp-environment-card\" data-impact=\"carbon\">\n                    <span class=\"cp-environment-icon\">CO\u2082<\/span>\n                    <span>\n                      <span>Huella de carbono<\/span>\n                      <strong><span id=\"cp-carbon\">22.982<\/span> <small>kg CO\u2082e<\/small><\/strong>\n                      <small>Consultar impacto<\/small>\n                    <\/span>\n                  <\/button>\n                  <button type=\"button\" class=\"cp-environment-card\" data-impact=\"water\">\n                    <span class=\"cp-environment-icon\">H\u2082O<\/span>\n                    <span>\n                      <span>Huella h\u00eddrica<\/span>\n                      <strong><span id=\"cp-water\">600.000<\/span> <small>litros<\/small><\/strong>\n                      <small>Consultar impacto<\/small>\n                    <\/span>\n                  <\/button>\n                  <button type=\"button\" class=\"cp-environment-card\" data-impact=\"energy\">\n                    <span class=\"cp-environment-icon cp-lightning\">\u03df<\/span>\n                    <span>\n                      <span>Energ\u00eda utilizada<\/span>\n                      <strong><span id=\"cp-energy\">120.000<\/span> <small>kWh<\/small><\/strong>\n                      <small>Consultar impacto<\/small>\n                    <\/span>\n                  <\/button>\n                <\/div>\n\n                <div class=\"cp-impact-summary\">\n                  <article class=\"cp-metric\">\n                    <h4>Salud humana<\/h4>\n                    <p>Toxicidad humana<\/p>\n                    <p>Part\u00edculas<\/p>\n                    <p>Agotamiento de la capa de ozono<\/p>\n                  <\/article>\n                  <article class=\"cp-metric\">\n                    <h4>Calidad del ecosistema<\/h4>\n                    <p>Acidificaci\u00f3n<\/p>\n                    <p>Eutrofizaci\u00f3n<\/p>\n                    <p>Uso del suelo<\/p>\n                  <\/article>\n                  <article class=\"cp-metric\">\n                    <h4>Recursos<\/h4>\n                    <p>Recursos minerales y metales<\/p>\n                    <p>Recursos f\u00f3siles<\/p>\n                    <p>Categor\u00edas de evaluaci\u00f3n ambiental<\/p>\n                  <\/article>\n                <\/div>\n\n                <div class=\"cp-metric cp-chart-card\">\n                  <div class=\"cp-chart-heading\">\n                    <h4>Valorizaci\u00f3n de residuos MARPOL<\/h4>\n                    <span>Toneladas<\/span>\n                  <\/div>\n                  <div class=\"cp-chart\" id=\"cp-waste-chart\"><\/div>\n                  <div class=\"cp-legend\">\n                    <span><i class=\"cp-recycling\"><\/i>Reciclaje<\/span>\n                    <span><i class=\"cp-energy-color\"><\/i>Valorizaci\u00f3n energ\u00e9tica<\/span>\n                    <span><i class=\"cp-other\"><\/i>Otros tratamientos<\/span>\n                  <\/div>\n                  <p class=\"cp-chart-detail\" id=\"cp-chart-detail\" aria-live=\"polite\">\n                    Selecciona una barra para consultar el destino del residuo.\n                  <\/p>\n                <\/div>\n              <\/div>\n\n              <div class=\"cp-view\" id=\"cp-impact-view\" hidden=\"\">\n                <label class=\"cp-impact-selector\">\n                  <span>Indicador ambiental<\/span>\n                  <select id=\"cp-impact-type\">\n                    <option value=\"carbon\">Huella de carbono<\/option>\n                    <option value=\"water\">Huella h\u00eddrica<\/option>\n                    <option value=\"energy\">Energ\u00eda utilizada<\/option>\n                  <\/select>\n                <\/label>\n\n                <div class=\"cp-impact-grid\">\n                  <div class=\"cp-impact-highlight\">\n                    <span id=\"cp-impact-label\">Huella de carbono<\/span>\n                    <strong id=\"cp-impact-value\">22.982 kg CO\u2082e<\/strong>\n                    <p id=\"cp-impact-description\"><\/p>\n                    <small>Indicador ilustrativo del periodo seleccionado.<\/small>\n                  <\/div>\n\n                  <div class=\"cp-metric cp-lifecycle\">\n                    <h4>Distribuci\u00f3n por etapa<\/h4>\n                    <div class=\"cp-lifecycle-content\">\n                      <div class=\"cp-pie\" role=\"img\" aria-label=\"Recogida 35%, transporte 20%, tratamiento 30%, valorizaci\u00f3n 15%\"><\/div>\n                      <ul>\n                        <li><span>Recogida<\/span><strong>35%<\/strong><\/li>\n                        <li><span>Transporte<\/span><strong>20%<\/strong><\/li>\n                        <li><span>Tratamiento<\/span><strong>30%<\/strong><\/li>\n                        <li><span>Valorizaci\u00f3n<\/span><strong>15%<\/strong><\/li>\n                      <\/ul>\n                    <\/div>\n                  <\/div>\n                <\/div>\n\n                <div class=\"cp-metric cp-chart-card\">\n                  <div class=\"cp-chart-heading\">\n                    <h4>Impacto por etapa del ciclo de vida<\/h4>\n                    <span id=\"cp-impact-unit\">kg CO\u2082e<\/span>\n                  <\/div>\n                  <div class=\"cp-chart\" id=\"cp-impact-chart\"><\/div>\n                  <p class=\"cp-chart-detail\" id=\"cp-impact-detail\" aria-live=\"polite\">\n                    Selecciona una etapa para consultar su valor.\n                  <\/p>\n                <\/div>\n              <\/div>\n\n              <div class=\"cp-view\" id=\"cp-passports-view\" hidden=\"\">\n                <label class=\"cp-search\">\n                  <span>Buscar pasaporte<\/span>\n                  <input id=\"cp-passport-search\" type=\"search\" placeholder=\"ID, buque o c\u00f3digo LER\">\n                <\/label>\n\n                <div class=\"cp-table-scroll\">\n                  <table class=\"cp-table\">\n                    <caption>Pasaportes digitales de residuos \u00b7 ejemplo<\/caption>\n                    <thead>\n                      <tr>\n                        <th>Pasaporte<\/th>\n                        <th>Buque \/ puerto<\/th>\n                        <th>Residuo<\/th>\n                        <th>Peso<\/th>\n                        <th>Estado<\/th>\n                        <th>Detalle<\/th>\n                      <\/tr>\n                    <\/thead>\n                    <tbody id=\"cp-passport-rows\"><\/tbody>\n                  <\/table>\n                <\/div>\n                <p class=\"cp-chart-detail\" id=\"cp-passport-count\" aria-live=\"polite\"><\/p>\n              <\/div>\n\n              <p class=\"cp-demo-note\">\n                Simulaci\u00f3n de la plataforma. Los filtros actualizan datos\n                ilustrativos y no consultan operaciones reales.\n              <\/p>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- PASAPORTE DIGITAL -->\n  <section class=\"cp-section cp-pale\">\n    <div class=\"cp-container cp-passport-grid\">\n      <div>\n        <p class=\"cp-eyebrow\">PASAPORTE DIGITAL DE RESIDUOS<\/p>\n        <h2>Cada residuo tiene<br><span>una historia verificable.<\/span><\/h2>\n\n        <p class=\"cp-lead\">\n          Una identidad digital que acompa\u00f1a a cada lote desde su origen\n          hasta el tratamiento final.\n        <\/p>\n        <p class=\"cp-muted\">\n          PortNet utiliza blockchain para registrar la trazabilidad y conectar\n          el origen, los responsables, el c\u00f3digo LER, las cantidades y las\n          evidencias de cada etapa.\n        <\/p>\n\n        <ul class=\"cp-checklist\">\n          <li>Origen y cadena de custodia<\/li>\n          <li>Documentos y certificados asociados<\/li>\n          <li>Tratamiento y destino final<\/li>\n          <li>Indicadores de impacto ambiental<\/li>\n        <\/ul>\n\n        <button type=\"button\" class=\"cp-button cp-outline\" data-open-passport=\"\">\n          Explorar un pasaporte\n        <\/button>\n      <\/div>\n\n      <article class=\"cp-passport\">\n        <div class=\"cp-passport-cover\">\n          <div class=\"cp-passport-cover-top\">\n            <span>CIRCULARPORT \/ PORTNET<\/span>\n            <span class=\"cp-cover-tag\">MARPOL V<\/span>\n          <\/div>\n\n          <h3>Pasaporte digital<br>de residuos<\/h3>\n\n          <div class=\"cp-passport-cover-bottom\">\n            <strong>DWP-0248<\/strong>\n            <span>Ejemplo ilustrativo<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"cp-passport-body\">\n          <div class=\"cp-material\">\n            <span class=\"cp-material-icon\" aria-hidden=\"true\">\u267b<\/span>\n            <div>\n              <span class=\"cp-label\">LOTE DE RESIDUOS<\/span>\n              <h4>Pl\u00e1sticos<\/h4>\n              <p>LER 20 01 39<\/p>\n            <\/div>\n            <div class=\"cp-material-weight\">\n              <strong>2.400<\/strong>\n              <span>kg registrados<\/span>\n            <\/div>\n          <\/div>\n\n          <dl class=\"cp-passport-data\">\n            <div><dt>Buque de origen<\/dt><dd>Ocean Star<\/dd><\/div>\n            <div><dt>Puerto de recogida<\/dt><dd>Palma<\/dd><\/div>\n            <div><dt>Tratamiento final<\/dt><dd>Reciclaje mec\u00e1nico<\/dd><\/div>\n            <div><dt>Destino del material<\/dt><dd>Valorizaci\u00f3n material<\/dd><\/div>\n          <\/dl>\n\n          <div class=\"cp-passport-journey\">\n            <p class=\"cp-label\">CADENA DE CUSTODIA<\/p>\n            <ol>\n              <li><span>\u2713<\/span><strong>Recogida<\/strong><\/li>\n              <li><span>\u2713<\/span><strong>Traslado<\/strong><\/li>\n              <li><span>\u2713<\/span><strong>Recepci\u00f3n<\/strong><\/li>\n              <li><span>\u2713<\/span><strong>Reciclaje<\/strong><\/li>\n            <\/ol>\n          <\/div>\n\n          <div class=\"cp-passport-bottom\">\n            <span>\u2713 Trazabilidad cerrada<\/span>\n            <button type=\"button\" class=\"cp-detail-button\" data-open-passport=\"\">Ver historial<\/button>\n          <\/div>\n        <\/div>\n      <\/article>\n    <\/div>\n  <\/section>\n\n  <!-- EXPERIENCIA OPERATIVA -->\n  <section class=\"cp-proof\">\n    <div class=\"cp-container cp-proof-grid\">\n      <div>\n        <p class=\"cp-eyebrow\">DE LA IDEA A LA OPERATIVA REAL<\/p>\n        <h2>Una soluci\u00f3n<br>ya en marcha.<\/h2>\n        <p>En funcionamiento en la Autoridad Portuaria de Baleares, con el impulso de Puertos 4.0.<\/p>\n      <\/div>\n      <div class=\"cp-proof-stat\">\n        <strong>62.600<span>+<\/span><\/strong>\n        <p>operaciones gestionadas<\/p>\n      <\/div>\n      <div class=\"cp-proof-stat\">\n        <strong>\u224840<span>%<\/span><\/strong>\n        <p>menos carga administrativa*<\/p>\n      <\/div>\n      <small class=\"cp-proof-note\">\n        Datos de la presentaci\u00f3n comercial de septiembre de 2026.\n        *Reducci\u00f3n estimada por digitalizaci\u00f3n y eliminaci\u00f3n de procesos manuales.\n      <\/small>\n    <\/div>\n  <\/section>\n\n  <!-- PROYECTO Y V\u00cdDEOS -->\n  <section class=\"cp-section\">\n    <div class=\"cp-container\">\n      <div class=\"cp-heading-grid\">\n        <div>\n          <p class=\"cp-eyebrow\">CIRCULARPORT \/ PORTNET<\/p>\n          <h2>Tecnolog\u00eda que impulsa<br><span>puertos m\u00e1s circulares.<\/span><\/h2>\n        <\/div>\n        <div class=\"cp-heading-copy\">\n          <p class=\"cp-lead\">\n            CircularPort conecta datos y actores para mejorar la gesti\u00f3n ambiental en los puertos.\n          <\/p>\n          <p>\n            Dentro de este ecosistema, PortNet es el proyecto tecnol\u00f3gico que\n            digitaliza la trazabilidad de los residuos mediante blockchain y\n            el Pasaporte Digital de Residuos. Un proyecto impulsado por\n            Blue Room Innovation para seguir el residuo m\u00e1s all\u00e1 del entorno portuario.\n          <\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"cp-videos\">\n        <article class=\"cp-video-card\">\n          <div class=\"cp-video-frame\">\n            <iframe src=\"https:\/\/www.youtube-nocookie.com\/embed\/QLIqDJLM9o8\" title=\"Demo de la plataforma CircularPort\" loading=\"lazy\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\">\n            <\/iframe>\n          <\/div>\n          <div class=\"cp-video-caption\">\n            <div><p class=\"cp-eyebrow\">LA PLATAFORMA EN ACCI\u00d3N<\/p><h3>Descubre la demo<\/h3><\/div>\n            <a href=\"https:\/\/youtu.be\/QLIqDJLM9o8\" target=\"_blank\" rel=\"noopener\">Ver en YouTube<\/a>\n          <\/div>\n        <\/article>\n\n        <article class=\"cp-video-card\">\n          <div class=\"cp-video-frame\">\n            <iframe src=\"https:\/\/www.youtube-nocookie.com\/embed\/cT_TA_gBmUA\" title=\"Proyecto CircularPort y PortNet\" loading=\"lazy\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\">\n            <\/iframe>\n          <\/div>\n          <div class=\"cp-video-caption\">\n            <div><p class=\"cp-eyebrow\">EL PROYECTO<\/p><h3>Una visi\u00f3n compartida<\/h3><\/div>\n            <a href=\"https:\/\/www.youtube.com\/watch?v=cT_TA_gBmUA\" target=\"_blank\" rel=\"noopener\">Ver en YouTube<\/a>\n          <\/div>\n        <\/article>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- CONTACTO -->\n  <section class=\"cp-contact\">\n    <div class=\"cp-container cp-contact-inner\">\n      <div>\n        <p class=\"cp-eyebrow\">HABLEMOS DE TU PUERTO<\/p>\n        <h2>Conectemos el siguiente paso.<\/h2>\n        <p>Valoremos tus procesos, las compatibilidades t\u00e9cnicas y una primera fase de implantaci\u00f3n.<\/p>\n      <\/div>\n      <a class=\"cp-button cp-white\" href=\"mailto:info@blueroominnovation.com?subject=Consulta%20CircularPort\">\n        Solicitar una reuni\u00f3n t\u00e9cnica\n      <\/a>\n    <\/div>\n  <\/section>\n\n  <!-- AYUDAS Y FINANCIACI\u00d3N -->\n  <section class=\"cp-support\">\n    <div class=\"cp-container\">\n      <p class=\"cp-eyebrow\">CON EL APOYO DE<\/p>\n\n      <div class=\"cp-support-logos\">\n        <img decoding=\"async\" src=\"https:\/\/www.circularport.eu\/wp-content\/uploads\/2024\/04\/digicirc-e1712128870785.png\" alt=\"Digicirc\" loading=\"lazy\">\n        <img decoding=\"async\" src=\"https:\/\/www.circularport.eu\/wp-content\/uploads\/2024\/04\/galatea.png\" alt=\"Galatea\" loading=\"lazy\">\n        <img decoding=\"async\" src=\"https:\/\/www.circularport.eu\/wp-content\/uploads\/2024\/04\/somos-aei.jpg\" alt=\"Agrupaciones Empresariales Innovadoras, AEI\" loading=\"lazy\">\n        <img decoding=\"async\" src=\"https:\/\/www.circularport.eu\/wp-content\/uploads\/2024\/04\/puertos-4.0.png\" alt=\"Puertos 4.0\" loading=\"lazy\">\n        <img decoding=\"async\" src=\"https:\/\/www.circularport.eu\/wp-content\/uploads\/2024\/06\/ACCIO-integrat-Horitzontal-CAT-color.png\" alt=\"ACCI\u00d3, Generalitat de Catalunya\" loading=\"lazy\">\n      <\/div>\n\n      <div class=\"cp-financing\">\n        <h2>PortNet is a project financed by<\/h2>\n        <img decoding=\"async\" src=\"https:\/\/www.circularport.eu\/wp-content\/uploads\/2024\/06\/Banner-v2.png\" alt=\"Proyecto financiado por el fondo Ports 4.0: Puertos del Estado y Ports 4.0\" loading=\"lazy\">\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- DETALLE DEL PASAPORTE -->\n  <dialog id=\"cp-passport-dialog\">\n    <div class=\"cp-dialog-top\">\n      <p class=\"cp-eyebrow\">PASAPORTE DIGITAL \u00b7 EJEMPLO<\/p>\n      <button type=\"button\" class=\"cp-close\" aria-label=\"Cerrar pasaporte\">\u00d7<\/button>\n    <\/div>\n    <h2 id=\"cp-dialog-title\">DWP-0248<\/h2>\n    <p id=\"cp-dialog-subtitle\">Ocean Star \u00b7 Puerto de Palma<\/p>\n    <dl class=\"cp-dialog-fields\" id=\"cp-dialog-fields\"><\/dl>\n\n    <h3>Historial del residuo<\/h3>\n    <ol class=\"cp-dialog-timeline\">\n      <li><span>01<\/span><div><strong>Recogida en puerto<\/strong><p>Origen, residuo y cantidad registrados.<\/p><\/div><\/li>\n      <li><span>02<\/span><div><strong>Traslado documentado<\/strong><p>Veh\u00edculo y responsable vinculados.<\/p><\/div><\/li>\n      <li><span>03<\/span><div><strong>Recepci\u00f3n confirmada<\/strong><p>Entrega y peso registrados por el gestor.<\/p><\/div><\/li>\n      <li><span>04<\/span><div><strong>Tratamiento final<\/strong><p id=\"cp-dialog-treatment\">Reciclaje y certificado asociado.<\/p><\/div><\/li>\n    <\/ol>\n\n    <p class=\"cp-dialog-note\">\n      Ejemplo de visualizaci\u00f3n. No corresponde a un certificado ni a un registro blockchain real.\n    <\/p>\n    <button type=\"button\" class=\"cp-button cp-dialog-done\">Cerrar pasaporte<\/button>\n  <\/dialog>\n<\/div>\n\n<script>\n(function () {\n  \"use strict\";\n\n  const root = document.getElementById(\"circularport-home\");\n  if (!root || root.dataset.initialized === \"true\") return;\n  root.dataset.initialized = \"true\";\n\n  const $ = selector => root.querySelector(selector);\n  const $$ = selector => Array.from(root.querySelectorAll(selector));\n  const format = (value, decimals = 0) =>\n    new Intl.NumberFormat(\"es-ES\", {\n      maximumFractionDigits: decimals,\n      useGrouping: true\n    }).format(value);\n\n  const steps = [\n    {\n      actor: \"AUTORIDAD PORTUARIA\",\n      title: \"Todo empieza con la escala.\",\n      description: \"La autoridad portuaria incorpora el buque, la fecha, el atraque y los servicios previstos. La operaci\u00f3n recibe una identidad digital compartida.\",\n      fields: [[\"Buque\", \"Ocean Star\"], [\"Puerto\", \"Palma\"], [\"Escala\", \"ES-PMI-0248\"], [\"Estado\", \"Registrada\"]],\n      evidence: \"Datos de escala vinculados a la operaci\u00f3n\"\n    },\n    {\n      actor: \"AGENTE MARPOL \/ TRANSPORTISTA\",\n      title: \"La retirada queda registrada.\",\n      description: \"El operador registra el tipo de residuo, la cantidad, el veh\u00edculo y el inicio del servicio. Los datos acompa\u00f1an al residuo durante su traslado.\",\n      fields: [[\"Residuo\", \"Pl\u00e1sticos \u00b7 MARPOL V\"], [\"Peso\", \"2.400 kg\"], [\"Veh\u00edculo\", \"2468 MRP\"], [\"Estado\", \"Retirada registrada\"]],\n      evidence: \"Declaraci\u00f3n y firma del operador asociadas\"\n    },\n    {\n      actor: \"POLIC\u00cdA PORTUARIA\",\n      title: \"Cada movimiento, verificado.\",\n      description: \"La polic\u00eda portuaria comprueba veh\u00edculos, niveles, horarios y documentaci\u00f3n. Los controles de entrada y salida se vinculan a la operaci\u00f3n.\",\n      fields: [[\"Veh\u00edculo\", \"2468 MRP\"], [\"Control\", \"Entrada y salida\"], [\"Documentaci\u00f3n\", \"Revisada\"], [\"Estado\", \"Salida validada\"]],\n      evidence: \"Control portuario y responsable identificados\"\n    },\n    {\n      actor: \"GESTOR \/ RECICLADOR\",\n      title: \"El destino final cierra el ciclo.\",\n      description: \"El gestor confirma la recepci\u00f3n y el tratamiento, registra el resultado final y aporta el certificado asociado. El puerto consulta el recorrido completo.\",\n      fields: [[\"Recepci\u00f3n\", \"Confirmada\"], [\"Tratamiento\", \"Reciclaje\"], [\"Destino\", \"Valorizaci\u00f3n material\"], [\"Estado\", \"Trazabilidad cerrada\"]],\n      evidence: \"Certificado de tratamiento vinculado al residuo\"\n    }\n  ];\n\n  function fieldsMarkup(fields) {\n    return fields.map(([label, value]) =>\n      \"<div><dt>\" + label + \"<\/dt><dd>\" + value + \"<\/dd><\/div>\"\n    ).join(\"\");\n  }\n\n  $$(\".cp-step\").forEach(button => {\n    button.addEventListener(\"click\", function () {\n      const index = Number(this.dataset.step);\n      const step = steps[index];\n\n      $$(\".cp-step\").forEach((item, i) => {\n        item.classList.toggle(\"cp-active\", i === index);\n        item.setAttribute(\"aria-pressed\", String(i === index));\n        item.querySelector(\".cp-step-sign\").textContent = i === index ? \"\u2212\" : \"+\";\n      });\n\n      $(\"#cp-step-actor\").textContent = step.actor;\n      $(\"#cp-step-title\").textContent = step.title;\n      $(\"#cp-step-description\").textContent = step.description;\n      $(\"#cp-step-fields\").innerHTML = fieldsMarkup(step.fields);\n      $(\"#cp-step-evidence\").textContent = \"\u2713 \" + step.evidence;\n\n      $$(\".cp-progress span\").forEach((item, i) =>\n        item.classList.toggle(\"cp-current\", i <= index)\n      );\n    });\n  });\n\n  const categories = [\n    { key: \"oil\", name: \"Oleosos\", weight: 400, recycling: .55, energy: .15 },\n    { key: \"plastic\", name: \"Pl\u00e1sticos\", weight: 240, recycling: .88, energy: .06 },\n    { key: \"food\", name: \"Restos de comida\", weight: 210, recycling: .75, energy: .12 },\n    { key: \"paper\", name: \"Papel y cart\u00f3n\", weight: 170, recycling: .85, energy: .08 },\n    { key: \"metal\", name: \"Metales\", weight: 150, recycling: .94, energy: 0 },\n    { key: \"other\", name: \"Otros\", weight: 80, recycling: .65, energy: .05 }\n  ];\n\n  const passports = [\n    { id: \"DWP-0248\", ship: \"Ocean Star\", port: \"palma\", key: \"plastic\", waste: \"Pl\u00e1sticos\", ler: \"20 01 39\", weight: 2400, treatment: \"Reciclaje mec\u00e1nico\", status: \"Valorizado\", period: \"month\" },\n    { id: \"DWP-0247\", ship: \"Blue Atlantic\", port: \"ibiza\", key: \"oil\", waste: \"Residuos oleosos\", ler: \"13 05 07*\", weight: 8200, treatment: \"Recuperaci\u00f3n de aceites\", status: \"Valorizado\", period: \"month\" },\n    { id: \"DWP-0246\", ship: \"Sea Horizon\", port: \"mahon\", key: \"food\", waste: \"Restos de comida\", ler: \"20 01 08\", weight: 1350, treatment: \"Tratamiento biol\u00f3gico\", status: \"Tratado\", period: \"quarter\" },\n    { id: \"DWP-0245\", ship: \"Baltic Moon\", port: \"palma\", key: \"oil\", waste: \"Residuos oleosos\", ler: \"13 05 07*\", weight: 5600, treatment: \"Recuperaci\u00f3n de aceites\", status: \"Valorizado\", period: \"year\" },\n    { id: \"DWP-0244\", ship: \"Mediterranean Star\", port: \"ibiza\", key: \"plastic\", waste: \"Pl\u00e1sticos\", ler: \"20 01 39\", weight: 1800, treatment: \"Reciclaje mec\u00e1nico\", status: \"Valorizado\", period: \"quarter\" },\n    { id: \"DWP-0243\", ship: \"Island Ferry\", port: \"mahon\", key: \"food\", waste: \"Restos de comida\", ler: \"20 01 08\", weight: 950, treatment: \"Tratamiento biol\u00f3gico\", status: \"Tratado\", period: \"year\" }\n  ];\n\n  const ports = { palma: \"Palma\", ibiza: \"Ibiza\", mahon: \"Ma\u00f3\" };\n  const impactInfo = {\n    carbon: {\n      label: \"Huella de carbono\",\n      unit: \"kg CO\u2082e\",\n      description: \"Emisiones asociadas a la recogida, el transporte y el tratamiento de los residuos.\"\n    },\n    water: {\n      label: \"Huella h\u00eddrica\",\n      unit: \"litros\",\n      description: \"Consumo de agua asociado a los procesos de tratamiento, limpieza y valorizaci\u00f3n.\"\n    },\n    energy: {\n      label: \"Energ\u00eda utilizada\",\n      unit: \"kWh\",\n      description: \"Consumo de energ\u00eda asociado a la recogida, el transporte, la clasificaci\u00f3n y el tratamiento.\"\n    }\n  };\n\n  function getFilters() {\n    return {\n      port: $(\"#cp-port\").value,\n      waste: $(\"#cp-waste\").value,\n      period: $(\"#cp-period\").value\n    };\n  }\n\n  function getData() {\n    const filters = getFilters();\n    const factor =\n      { all: 1, palma: .6, ibiza: .25, mahon: .15 }[filters.port] *\n      { year: 1, quarter: .28, month: .09 }[filters.period];\n\n    const rows = categories\n      .filter(item => filters.waste === \"all\" || item.key === filters.waste)\n      .map(item => Object.assign({}, item, { weight: item.weight * factor }));\n\n    const total = rows.reduce((sum, item) => sum + item.weight, 0);\n    const recovered = rows.reduce(\n      (sum, item) => sum + item.weight * (item.recycling + item.energy), 0\n    );\n\n    return {\n      rows, total, recovered,\n      circularity: Math.round(recovered \/ total * 100),\n      carbon: 22982 * total \/ 1250,\n      water: 600000 * total \/ 1250,\n      energy: 120000 * total \/ 1250\n    };\n  }\n\n  function createBar(name, height, segments, label, onClick) {\n    const item = document.createElement(\"div\");\n    item.className = \"cp-bar-item\";\n\n    const button = document.createElement(\"button\");\n    button.type = \"button\";\n    button.className = \"cp-chart-bar\";\n    button.style.height = height + \"%\";\n    button.setAttribute(\"aria-label\", label);\n\n    segments.forEach(([fraction, className]) => {\n      const segment = document.createElement(\"span\");\n      segment.className = className;\n      segment.style.height = fraction * 100 + \"%\";\n      button.appendChild(segment);\n    });\n\n    button.addEventListener(\"click\", onClick);\n\n    const caption = document.createElement(\"span\");\n    caption.className = \"cp-bar-name\";\n    caption.textContent = name;\n\n    item.append(button, caption);\n    return item;\n  }\n\n  function renderDashboard(data) {\n    $(\"#cp-circularity\").textContent = data.circularity + \"%\";\n    $(\"#cp-donut\").style.background =\n      \"conic-gradient(#1c39dc 0 \" + data.circularity + \"%, #edf0f4 \" +\n      data.circularity + \"% 100%)\";\n    $(\"#cp-donut\").setAttribute(\n      \"aria-label\", \"\u00cdndice de circularidad: \" + data.circularity + \" por ciento\"\n    );\n\n    $(\"#cp-total\").textContent = format(data.total, 1);\n    $(\"#cp-recovered\").textContent = format(data.recovered, 1);\n    $(\"#cp-carbon\").textContent = format(data.carbon);\n    $(\"#cp-water\").textContent = format(data.water);\n    $(\"#cp-energy\").textContent = format(data.energy);\n\n    const maximum = Math.max(...data.rows.map(item => item.weight)) * 1.12;\n\n    $(\"#cp-waste-chart\").replaceChildren(...data.rows.map(item =>\n      createBar(\n        item.name,\n        item.weight \/ maximum * 100,\n        [\n          [1 - item.recycling - item.energy, \"cp-other\"],\n          [item.energy, \"cp-energy-color\"],\n          [item.recycling, \"cp-recycling\"]\n        ],\n        item.name + \": \" + format(item.weight, 1) + \" toneladas\",\n        () => {\n          $(\"#cp-chart-detail\").textContent =\n            item.name + \" \u00b7 \" + format(item.weight, 1) + \" t: reciclaje \" +\n            format(item.weight * item.recycling, 1) +\n            \" t \u00b7 valorizaci\u00f3n energ\u00e9tica \" + format(item.weight * item.energy, 1) +\n            \" t \u00b7 otros tratamientos \" +\n            format(item.weight * (1 - item.recycling - item.energy), 1) + \" t.\";\n        }\n      )\n    ));\n\n    $(\"#cp-chart-detail\").textContent =\n      \"Selecciona una barra para consultar el destino del residuo.\";\n  }\n\n  function renderImpact(data) {\n    const type = $(\"#cp-impact-type\").value;\n    const info = impactInfo[type];\n\n    $(\"#cp-impact-label\").textContent = info.label;\n    $(\"#cp-impact-value\").textContent = format(data[type]) + \" \" + info.unit;\n    $(\"#cp-impact-description\").textContent = info.description;\n    $(\"#cp-impact-unit\").textContent = info.unit;\n\n    const stages = [\n      [\"Recogida\", .35], [\"Transporte\", .20],\n      [\"Tratamiento\", .30], [\"Valorizaci\u00f3n\", .15]\n    ];\n\n    $(\"#cp-impact-chart\").replaceChildren(...stages.map(([name, ratio]) =>\n      createBar(\n        name, ratio \/ .4 * 100, [[1, \"cp-recycling\"]],\n        name + \": \" + format(data[type] * ratio) + \" \" + info.unit,\n        () => {\n          $(\"#cp-impact-detail\").textContent =\n            name + \" \u00b7 \" + format(data[type] * ratio) + \" \" +\n            info.unit + \" (\" + format(ratio * 100) + \"% del total).\";\n        }\n      )\n    ));\n\n    $(\"#cp-impact-detail\").textContent =\n      \"Selecciona una etapa para consultar su valor.\";\n  }\n\n  function openPassport(passport) {\n    $(\"#cp-dialog-title\").textContent = passport.id;\n    $(\"#cp-dialog-subtitle\").textContent =\n      passport.ship + \" \u00b7 Puerto de \" + ports[passport.port];\n\n    $(\"#cp-dialog-fields\").innerHTML = fieldsMarkup([\n      [\"Residuo\", passport.waste],\n      [\"C\u00f3digo LER\", passport.ler],\n      [\"Peso registrado\", format(passport.weight) + \" kg\"],\n      [\"Estado\", passport.status]\n    ]);\n\n    $(\"#cp-dialog-treatment\").textContent =\n      passport.treatment + \" y certificado asociado.\";\n\n    const dialog = $(\"#cp-passport-dialog\");\n    if (!dialog.open) dialog.showModal();\n  }\n\n  function renderPassports() {\n    const filters = getFilters();\n    const query = $(\"#cp-passport-search\").value.trim().toLowerCase();\n    const ranks = { month: 1, quarter: 2, year: 3 };\n\n    const rows = passports.filter(item =>\n      (filters.port === \"all\" || item.port === filters.port) &&\n      (filters.waste === \"all\" || item.key === filters.waste) &&\n      ranks[item.period] <= ranks[filters.period] &&\n      (item.id + \" \" + item.ship + \" \" + item.ler + \" \" +\n       item.waste + \" \" + ports[item.port]).toLowerCase().includes(query)\n    );\n\n    const table = $(\"#cp-passport-rows\");\n    table.replaceChildren();\n\n    rows.forEach(item => {\n      const row = document.createElement(\"tr\");\n\n      row.innerHTML =\n        \"<td><strong>\" + item.id + \"<\/strong><\/td>\" +\n        \"<td>\" + item.ship + \"<small>\" + ports[item.port] + \"<\/small><\/td>\" +\n        \"<td>\" + item.waste + \"<small>LER \" + item.ler + \"<\/small><\/td>\" +\n        \"<td>\" + format(item.weight) + \" kg<\/td>\" +\n        '<td><span class=\"cp-status\">' + item.status + \"<\/span><\/td>\" +\n        '<td><button type=\"button\" class=\"cp-detail-button\">Ver<\/button><\/td>';\n\n      const button = row.querySelector(\"button\");\n      button.setAttribute(\"aria-label\", \"Ver pasaporte \" + item.id);\n      button.addEventListener(\"click\", () => openPassport(item));\n      table.appendChild(row);\n    });\n\n    if (!rows.length) {\n      const row = document.createElement(\"tr\");\n      row.innerHTML = '<td colspan=\"6\">No hay pasaportes que coincidan con estos filtros.<\/td>';\n      table.appendChild(row);\n    }\n\n    $(\"#cp-passport-count\").textContent =\n      rows.length + \" pasaporte\" + (rows.length === 1 ? \"\" : \"s\") + \" de ejemplo.\";\n  }\n\n  function render() {\n    const data = getData();\n    renderDashboard(data);\n    renderImpact(data);\n    renderPassports();\n  }\n\n  function showView(view) {\n    $$(\".cp-view\").forEach(item => {\n      item.hidden = item.id !== \"cp-\" + view + \"-view\";\n    });\n\n    $$(\"[data-view]\").forEach(button => {\n      const selected = button.dataset.view === view;\n      button.classList.toggle(\"cp-active\", selected);\n      button.setAttribute(\"aria-pressed\", String(selected));\n    });\n\n    $(\"#cp-view-title\").textContent = {\n      dashboard: \"Panel de control\",\n      impact: \"Impacto ambiental\",\n      passports: \"Pasaportes digitales\"\n    }[view];\n  }\n\n  $$(\"[data-view]\").forEach(button =>\n    button.addEventListener(\"click\", () => showView(button.dataset.view))\n  );\n\n  $$(\"[data-impact]\").forEach(button =>\n    button.addEventListener(\"click\", () => {\n      $(\"#cp-impact-type\").value = button.dataset.impact;\n      renderImpact(getData());\n      showView(\"impact\");\n    })\n  );\n\n  [\"#cp-port\", \"#cp-waste\", \"#cp-period\"].forEach(selector =>\n    $(selector).addEventListener(\"change\", render)\n  );\n\n  $(\"#cp-impact-type\").addEventListener(\"change\", () => renderImpact(getData()));\n  $(\"#cp-passport-search\").addEventListener(\"input\", renderPassports);\n\n  $$(\"[data-open-passport]\").forEach(button =>\n    button.addEventListener(\"click\", () => openPassport(passports[0]))\n  );\n\n  $$(\".cp-close, .cp-dialog-done\").forEach(button =>\n    button.addEventListener(\"click\", () => $(\"#cp-passport-dialog\").close())\n  );\n\n  $(\"#cp-passport-dialog\").addEventListener(\"click\", event => {\n    const dialog = event.currentTarget;\n    if (event.target !== dialog) return;\n    const rect = dialog.getBoundingClientRect();\n    if (\n      event.clientX < rect.left || event.clientX > rect.right ||\n      event.clientY < rect.top || event.clientY > rect.bottom\n    ) dialog.close();\n  });\n\n  render();\n})();\n<\/script><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>TRAZABILIDAD DIGITAL \u00b7 RESIDUOS MARPOL Conecta los datos.Traza cada residuo. Del buque a su destino final. Una plataforma para conectar la operativa portuaria, verificar cada gesti\u00f3n y medir su impacto ambiental. Explorar la plataforma C\u00f3mo funciona \u2713 Desarrollado con la Autoridad Portuaria de Baleares DEL PUERTO AL TRATAMIENTO FINAL Un residuo.Un historial conectado. 01OrigenBuque y&hellip; <a class=\"more-link\" href=\"https:\/\/circularport.eu\/es\/\">Seguir leyendo <span class=\"screen-reader-text\">Circularport<\/span><\/a><\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1484","page","type-page","status-publish","hentry","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Circularport | Circular Port<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/circularport.eu\/es\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Circularport | Circular Port\" \/>\n<meta property=\"og:description\" content=\"TRAZABILIDAD DIGITAL \u00b7 RESIDUOS MARPOL Conecta los datos.Traza cada residuo. Del buque a su destino final. Una plataforma para conectar la operativa portuaria, verificar cada gesti\u00f3n y medir su impacto ambiental. Explorar la plataforma C\u00f3mo funciona \u2713 Desarrollado con la Autoridad Portuaria de Baleares DEL PUERTO AL TRATAMIENTO FINAL Un residuo.Un historial conectado. 01OrigenBuque y&hellip; Seguir leyendo Circularport\" \/>\n<meta property=\"og:url\" content=\"https:\/\/circularport.eu\/es\/\" \/>\n<meta property=\"og:site_name\" content=\"Circular Port\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-15T12:00:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.circularport.eu\/wp-content\/uploads\/2024\/06\/1-1-e1717596022987.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/circularport.eu\\\/\",\"url\":\"https:\\\/\\\/circularport.eu\\\/\",\"name\":\"Circularport | Circular Port\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/circularport.eu\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/circularport.eu\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/circularport.eu\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.circularport.eu\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/1-1-e1717596022987.png\",\"datePublished\":\"2026-10-08T09:11:08+00:00\",\"dateModified\":\"2026-10-15T12:00:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/circularport.eu\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/circularport.eu\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/circularport.eu\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.circularport.eu\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/1-1-e1717596022987.png\",\"contentUrl\":\"https:\\\/\\\/www.circularport.eu\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/1-1-e1717596022987.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/circularport.eu\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/circularport.eu\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Circularport\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/circularport.eu\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/circularport.eu\\\/es\\\/\",\"name\":\"Circular Port\",\"description\":\"Green &amp; Efficient Ports\",\"publisher\":{\"@id\":\"https:\\\/\\\/circularport.eu\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/circularport.eu\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/circularport.eu\\\/es\\\/#organization\",\"name\":\"Circular Port\",\"url\":\"https:\\\/\\\/circularport.eu\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/circularport.eu\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/circularport.eu\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/cropped-Main.png\",\"contentUrl\":\"https:\\\/\\\/circularport.eu\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/cropped-Main.png\",\"width\":427,\"height\":185,\"caption\":\"Circular Port\"},\"image\":{\"@id\":\"https:\\\/\\\/circularport.eu\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Circularport | Circular Port","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/circularport.eu\/es\/","og_locale":"es_ES","og_type":"article","og_title":"Circularport | Circular Port","og_description":"TRAZABILIDAD DIGITAL \u00b7 RESIDUOS MARPOL Conecta los datos.Traza cada residuo. Del buque a su destino final. Una plataforma para conectar la operativa portuaria, verificar cada gesti\u00f3n y medir su impacto ambiental. Explorar la plataforma C\u00f3mo funciona \u2713 Desarrollado con la Autoridad Portuaria de Baleares DEL PUERTO AL TRATAMIENTO FINAL Un residuo.Un historial conectado. 01OrigenBuque y&hellip; Seguir leyendo Circularport","og_url":"https:\/\/circularport.eu\/es\/","og_site_name":"Circular Port","article_modified_time":"2026-10-15T12:00:38+00:00","og_image":[{"url":"https:\/\/www.circularport.eu\/wp-content\/uploads\/2024\/06\/1-1-e1717596022987.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/circularport.eu\/","url":"https:\/\/circularport.eu\/","name":"Circularport | Circular Port","isPartOf":{"@id":"https:\/\/circularport.eu\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/circularport.eu\/#primaryimage"},"image":{"@id":"https:\/\/circularport.eu\/#primaryimage"},"thumbnailUrl":"https:\/\/www.circularport.eu\/wp-content\/uploads\/2024\/06\/1-1-e1717596022987.png","datePublished":"2026-10-08T09:11:08+00:00","dateModified":"2026-10-15T12:00:38+00:00","breadcrumb":{"@id":"https:\/\/circularport.eu\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/circularport.eu\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/circularport.eu\/#primaryimage","url":"https:\/\/www.circularport.eu\/wp-content\/uploads\/2024\/06\/1-1-e1717596022987.png","contentUrl":"https:\/\/www.circularport.eu\/wp-content\/uploads\/2024\/06\/1-1-e1717596022987.png"},{"@type":"BreadcrumbList","@id":"https:\/\/circularport.eu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/circularport.eu\/"},{"@type":"ListItem","position":2,"name":"Circularport"}]},{"@type":"WebSite","@id":"https:\/\/circularport.eu\/es\/#website","url":"https:\/\/circularport.eu\/es\/","name":"Circular Port","description":"Green &amp; Efficient Ports","publisher":{"@id":"https:\/\/circularport.eu\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/circularport.eu\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/circularport.eu\/es\/#organization","name":"Circular Port","url":"https:\/\/circularport.eu\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/circularport.eu\/es\/#\/schema\/logo\/image\/","url":"https:\/\/circularport.eu\/wp-content\/uploads\/2022\/09\/cropped-Main.png","contentUrl":"https:\/\/circularport.eu\/wp-content\/uploads\/2022\/09\/cropped-Main.png","width":427,"height":185,"caption":"Circular Port"},"image":{"@id":"https:\/\/circularport.eu\/es\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/circularport.eu\/es\/wp-json\/wp\/v2\/pages\/1484","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/circularport.eu\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/circularport.eu\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/circularport.eu\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/circularport.eu\/es\/wp-json\/wp\/v2\/comments?post=1484"}],"version-history":[{"count":6,"href":"https:\/\/circularport.eu\/es\/wp-json\/wp\/v2\/pages\/1484\/revisions"}],"predecessor-version":[{"id":1562,"href":"https:\/\/circularport.eu\/es\/wp-json\/wp\/v2\/pages\/1484\/revisions\/1562"}],"wp:attachment":[{"href":"https:\/\/circularport.eu\/es\/wp-json\/wp\/v2\/media?parent=1484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}